Annotation of gcc/config/i960.md, revision 1.1.1.2

1.1       root        1: ;;- Machine description for Intel 80960 chip for GNU C compiler
                      2: ;;   Copyright (C) 1992 Free Software Foundation, Inc.
                      3: ;;   Contributed by Steven McGeady, Intel Corp.
                      4: ;;   Additional work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson
                      5: ;;   Converted to GCC 2.0 by Jim Wilson and Michael Tiemann, Cygnus Support.
                      6: 
                      7: ;; This file is part of GNU CC.
                      8: 
                      9: ;; GNU CC is free software; you can redistribute it and/or modify
                     10: ;; it under the terms of the GNU General Public License as published by
                     11: ;; the Free Software Foundation; either version 2, or (at your option)
                     12: ;; any later version.
                     13: 
                     14: ;; GNU CC is distributed in the hope that it will be useful,
                     15: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     16: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     17: ;; GNU General Public License for more details.
                     18: 
                     19: ;; You should have received a copy of the GNU General Public License
                     20: ;; along with GNU CC; see the file COPYING.  If not, write to
                     21: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     22: 
                     23: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
                     24: 
1.1.1.2 ! root       25: ;; There are very few (4) 'f' registers, they can't be loaded/stored from/to
        !            26: ;; memory, and some instructions explicitly require them, so we get better
        !            27: ;; code by discouraging psuedo-registers from being allocated to them.
        !            28: ;; However, we do want to allow all patterns which can store to them to
        !            29: ;; include them in their constraints, so we always use '*f' in a destination
        !            30: ;; constraint except when 'f' is the only alternative.
        !            31: 
1.1       root       32: ;; Insn attributes which describe the i960.
                     33: 
                     34: ;; Modscan is not used, since the compiler never emits any of these insns.
                     35: (define_attr "type"
                     36:   "move,arith,alu2,mult,div,modscan,load,store,branch,call,address,compare,fpload,fpstore,fpmove,fpcvt,fpcc,fpadd,fpmul,fpdiv,multi,misc"
                     37:   (const_string "arith"))
                     38: 
                     39: ;; Length (in # of insns).
                     40: (define_attr "length" ""
                     41:   (cond [(eq_attr "type" "load,fpload")
                     42:              (if_then_else (match_operand 1 "symbolic_memory_operand" "")
                     43:                            (const_int 2)
                     44:                            (const_int 1))
                     45:         (eq_attr "type" "store,fpstore")
                     46:              (if_then_else (match_operand 0 "symbolic_memory_operand" "")
                     47:                            (const_int 2)
                     48:                            (const_int 1))
                     49:         (eq_attr "type" "address")
                     50:              (const_int 2)]
                     51:        (const_int 1)))
                     52: 
                     53: (define_asm_attributes
                     54:   [(set_attr "length" "1")
                     55:    (set_attr "type" "multi")])
                     56: 
                     57: ;; (define_function_unit {name} {num-units} {n-users} {test}
1.1.1.2 ! root       58: ;;                       {ready-delay} {issue-delay} [{conflict-list}])
1.1       root       59: 
                     60: ;; The integer ALU
                     61: (define_function_unit "alu" 2 0 (eq_attr "type" "arith,compare,move,address") 1 0)
                     62: (define_function_unit "alu" 2 0 (eq_attr "type" "alu2") 2 0)
                     63: (define_function_unit "alu" 2 0 (eq_attr "type" "mult") 5 0)
                     64: (define_function_unit "alu" 2 0 (eq_attr "type" "div") 35 0)
                     65: (define_function_unit "alu" 2 0 (eq_attr "type" "modscan") 3 0)
                     66: 
                     67: ;; Memory with load-delay of 1 (i.e., 2 cycle load).
                     68: (define_function_unit "memory" 1 0 (eq_attr "type" "load,fpload") 2 0)
                     69: 
                     70: ;; Floating point operations.
                     71: (define_function_unit "fp" 1 2 (eq_attr "type" "fpmove") 5 0)
                     72: (define_function_unit "fp" 1 2 (eq_attr "type" "fpcvt") 35 0)
                     73: (define_function_unit "fp" 1 2 (eq_attr "type" "fpcc") 10 0)
                     74: (define_function_unit "fp" 1 2 (eq_attr "type" "fpadd") 10 0)
                     75: (define_function_unit "fp" 1 2 (eq_attr "type" "fpmul") 20 0)
                     76: (define_function_unit "fp" 1 2 (eq_attr "type" "fpdiv") 35 0)
                     77: 
                     78: ;; Compare instructions.
                     79: ;; This controls RTL generation and register allocation.
                     80: 
                     81: ;; We generate RTL for comparisons and branches by having the cmpxx 
                     82: ;; patterns store away the operands.  Then, the scc and bcc patterns
                     83: ;; emit RTL for both the compare and the branch.
                     84: ;;
                     85: ;; We start with the DEFINE_EXPANDs, then then DEFINE_INSNs to match
                     86: ;; the patterns.  Finally, we have the DEFINE_SPLITs for some of the scc
                     87: ;; insns that actually require more than one machine instruction.
                     88: 
                     89: ;; Put cmpsi first because it is expected to be the most common.
                     90: 
                     91: (define_expand "cmpsi"
                     92:   [(set (reg:CC 36)
                     93:        (compare:CC (match_operand:SI 0 "nonimmediate_operand" "")
                     94:                    (match_operand:SI 1 "general_operand" "")))]
                     95:   ""
                     96:   "
                     97: {
                     98:   i960_compare_op0 = operands[0];
                     99:   i960_compare_op1 = operands[1];
                    100:   DONE;
                    101: }")
                    102: 
                    103: (define_expand "cmpdf"
                    104:   [(set (reg:CC 36)
                    105:        (compare:CC (match_operand:DF 0 "register_operand" "r")
                    106:                    (match_operand:DF 1 "nonmemory_operand" "rGH")))]
                    107:   "TARGET_NUMERICS"
                    108:   "
                    109: {
                    110:   i960_compare_op0 = operands[0];
                    111:   i960_compare_op1 = operands[1];
                    112:   DONE;
                    113: }")
                    114: 
                    115: (define_expand "cmpsf"
                    116:   [(set (reg:CC 36)
                    117:        (compare:CC (match_operand:SF 0 "register_operand" "r")
                    118:                    (match_operand:SF 1 "nonmemory_operand" "rGH")))]
                    119:   "TARGET_NUMERICS"
                    120:   "
                    121: {
                    122:   i960_compare_op0 = operands[0];
                    123:   i960_compare_op1 = operands[1];
                    124:   DONE;
                    125: }")
                    126: 
                    127: ;; Now the DEFINE_INSNs for the compare and scc cases.  First the compares.
                    128: 
                    129: (define_insn ""
                    130:   [(set (reg:CC 36)
                    131:        (compare:CC (match_operand:SI 0 "register_operand" "d")
                    132:                    (match_operand:SI 1 "arith_operand" "dI")))]
                    133:   ""
                    134:   "cmpi        %0,%1"
                    135:   [(set_attr "type" "compare")])
                    136: 
                    137: (define_insn ""
                    138:   [(set (reg:CC_UNS 36)
                    139:        (compare:CC_UNS (match_operand:SI 0 "register_operand" "d")
                    140:                        (match_operand:SI 1 "arith_operand" "dI")))]
                    141:   ""
                    142:   "cmpo        %0,%1"
                    143:   [(set_attr "type" "compare")])
                    144: 
                    145: (define_insn ""
                    146:   [(set (reg:CC 36)
                    147:        (compare:CC (match_operand:DF 0 "register_operand" "r")
                    148:                    (match_operand:DF 1 "nonmemory_operand" "rGH")))]
                    149:   "TARGET_NUMERICS"
                    150:   "cmprl %0,%1"
                    151:   [(set_attr "type" "fpcc")])
                    152: 
                    153: (define_insn ""
                    154:   [(set (reg:CC 36)
                    155:        (compare:CC (match_operand:SF 0 "register_operand" "r")
                    156:                    (match_operand:SF 1 "nonmemory_operand" "rGH")))]
                    157:   "TARGET_NUMERICS"
                    158:   "cmpr %0,%1"
                    159:   [(set_attr "type" "fpcc")])
                    160: 
                    161: ;; Instruction definitions for branch-on-bit-set and clear insns.
                    162: 
                    163: (define_insn ""
                    164:   [(set (pc)
                    165:        (if_then_else
                    166:         (ne (sign_extract:SI (match_operand:SI 1 "register_operand" "d")
                    167:                              (const_int 1)
                    168:                              (match_operand:SI 2 "arith_operand" "dI"))
                    169:             (const_int 0))
                    170:         (label_ref (match_operand 3 "" ""))
                    171:         (pc)))]
                    172:   ""
                    173:   "bbs %2,%1,%l3"
                    174:   [(set_attr "type" "branch")])
                    175: 
                    176: (define_insn ""
                    177:   [(set (pc)
                    178:        (if_then_else
                    179:         (eq (sign_extract:SI (match_operand:SI 1 "register_operand" "d")
                    180:                              (const_int 1)
                    181:                              (match_operand:SI 2 "arith_operand" "dI"))
                    182:             (const_int 0))
                    183:         (label_ref (match_operand 3 "" ""))
                    184:         (pc)))]
                    185:   ""
                    186:   "bbc %2,%1,%l3"
                    187:   [(set_attr "type" "branch")])
                    188: 
                    189: (define_insn ""
                    190:   [(set (pc)
                    191:        (if_then_else
                    192:         (ne (zero_extract:SI (match_operand:SI 1 "register_operand" "d")
                    193:                              (const_int 1)
                    194:                              (match_operand:SI 2 "arith_operand" "dI"))
                    195:             (const_int 0))
                    196:         (label_ref (match_operand 3 "" ""))
                    197:         (pc)))]
                    198:   ""
                    199:   "bbs %2,%1,%l3"
                    200:   [(set_attr "type" "branch")])
                    201: 
                    202: (define_insn ""
                    203:   [(set (pc)
                    204:        (if_then_else
                    205:         (eq (zero_extract:SI (match_operand:SI 1 "register_operand" "d")
                    206:                              (const_int 1)
                    207:                              (match_operand:SI 2 "arith_operand" "dI"))
                    208:             (const_int 0))
                    209:         (label_ref (match_operand 3 "" ""))
                    210:         (pc)))]
                    211:   ""
                    212:   "bbc %2,%1,%l3"
                    213:   [(set_attr "type" "branch")])
                    214: 
                    215: ;; ??? These will never match.  The LOG_LINKs necessary to make these match
                    216: ;; are not created by flow.  These remain as a reminder to make this work
                    217: ;; some day.
                    218: 
                    219: (define_insn ""
                    220:   [(set (reg:CC 36)
                    221:        (compare (match_operand:SI 0 "arith_operand" "d")
                    222:                 (match_operand:SI 1 "arith_operand" "d")))
                    223:    (set (match_dup 1) (plus:SI (match_dup 1) (const_int 1)))]
                    224:   "0"
                    225:   "cmpinci     %0,%1"
                    226:   [(set_attr "type" "compare")])
                    227: 
                    228: (define_insn ""
                    229:   [(set (reg:CC_UNS 36)
                    230:        (compare (match_operand:SI 0 "arith_operand" "d")
                    231:                 (match_operand:SI 1 "arith_operand" "d")))
                    232:    (set (match_dup 1) (plus:SI (match_dup 1) (const_int 1)))]
                    233:   "0"
                    234:   "cmpinco     %0,%1"
                    235:   [(set_attr "type" "compare")])
                    236: 
                    237: (define_insn ""
                    238:   [(set (reg:CC 36)
                    239:        (compare (match_operand:SI 0 "arith_operand" "d")
                    240:                 (match_operand:SI 1 "arith_operand" "d")))
                    241:    (set (match_dup 1) (minus:SI (match_dup 1) (const_int 1)))]
                    242:   "0"
                    243:   "cmpdeci     %0,%1"
                    244:   [(set_attr "type" "compare")])
                    245: 
                    246: (define_insn ""
                    247:   [(set (reg:CC_UNS 36)
                    248:        (compare (match_operand:SI 0 "arith_operand" "d")
                    249:                 (match_operand:SI 1 "arith_operand" "d")))
                    250:    (set (match_dup 1) (minus:SI (match_dup 1) (const_int 1)))]
                    251:   "0"
                    252:   "cmpdeco     %0,%1"
                    253:   [(set_attr "type" "compare")])
                    254: 
                    255: ;; Templates to store result of condition.
                    256: ;; '1' is stored if condition is true.
                    257: ;; '0' is stored if condition is false.
                    258: ;; These should use predicate "general_operand", since
                    259: ;; gcc seems to be creating mem references which use these
                    260: ;; templates.
                    261: 
                    262: (define_expand "seq"
                    263:   [(set (match_operand:SI 0 "general_operand" "=d")
                    264:        (eq (match_dup 1) (const_int 0)))]
                    265:   ""
                    266:   "
                    267: {
                    268:   operands[1] = gen_compare_reg (EQ, i960_compare_op0, i960_compare_op1);
                    269: }")
                    270: 
                    271: (define_expand "sne"
                    272:   [(set (match_operand:SI 0 "general_operand" "=d")
                    273:        (ne (match_dup 1) (const_int 0)))]
                    274:   ""
                    275:   "
                    276: {
                    277:   operands[1] = gen_compare_reg (NE, i960_compare_op0, i960_compare_op1);
                    278: }")
                    279: 
                    280: (define_expand "sgt"
                    281:   [(set (match_operand:SI 0 "general_operand" "=d")
                    282:        (gt (match_dup 1) (const_int 0)))]
                    283:   ""
                    284:   "
                    285: {
                    286:   operands[1] = gen_compare_reg (GT, i960_compare_op0, i960_compare_op1);
                    287: }")
                    288: 
                    289: (define_expand "sgtu"
                    290:   [(set (match_operand:SI 0 "general_operand" "=d")
                    291:        (gtu (match_dup 1) (const_int 0)))]
                    292:   ""
                    293:   "
                    294: {
                    295:   operands[1] = gen_compare_reg (GTU, i960_compare_op0, i960_compare_op1);
                    296: }")
                    297: 
                    298: (define_expand "slt"
                    299:   [(set (match_operand:SI 0 "general_operand" "=d")
                    300:        (lt (match_dup 1) (const_int 0)))]
                    301:   ""
                    302:   "
                    303: {
                    304:   operands[1] = gen_compare_reg (LT, i960_compare_op0, i960_compare_op1);
                    305: }")
                    306: 
                    307: (define_expand "sltu"
                    308:   [(set (match_operand:SI 0 "general_operand" "=d")
                    309:        (ltu (match_dup 1) (const_int 0)))]
                    310:   ""
                    311:   "
                    312: {
                    313:   operands[1] = gen_compare_reg (LTU, i960_compare_op0, i960_compare_op1);
                    314: }")
                    315: 
                    316: (define_expand "sge"
                    317:   [(set (match_operand:SI 0 "general_operand" "=d")
                    318:        (ge (match_dup 1) (const_int 0)))]
                    319:   ""
                    320:   "
                    321: {
                    322:   operands[1] = gen_compare_reg (GE, i960_compare_op0, i960_compare_op1);
                    323: }")
                    324: 
                    325: (define_expand "sgeu"
                    326:   [(set (match_operand:SI 0 "general_operand" "=d")
                    327:        (geu (match_dup 1) (const_int 0)))]
                    328:   ""
                    329:   "
                    330: {
                    331:   operands[1] = gen_compare_reg (GEU, i960_compare_op0, i960_compare_op1);
                    332: }")
                    333: 
                    334: (define_expand "sle"
                    335:   [(set (match_operand:SI 0 "general_operand" "=d")
                    336:        (le (match_dup 1) (const_int 0)))]
                    337:   ""
                    338:   "
                    339: {
                    340:   operands[1] = gen_compare_reg (LE, i960_compare_op0, i960_compare_op1);
                    341: }")
                    342: 
                    343: (define_expand "sleu"
                    344:   [(set (match_operand:SI 0 "general_operand" "=d")
                    345:        (leu (match_dup 1) (const_int 0)))]
                    346:   ""
                    347:   "
                    348: {
                    349:   operands[1] = gen_compare_reg (LEU, i960_compare_op0, i960_compare_op1);
                    350: }")
                    351: 
                    352: (define_insn ""
                    353:   [(set (match_operand:SI 0 "general_operand" "=d")
                    354:        (match_operator 1 "comparison_operator" [(reg:CC 36) (const_int 0)]))]
                    355:   ""
                    356:   "test%C1 %0"
                    357:   [(set_attr "type" "compare")])
                    358: 
                    359: (define_insn ""
                    360:   [(set (match_operand:SI 0 "general_operand" "=d")
                    361:        (match_operator 1 "comparison_operator" [(reg:CC_UNS 36) (const_int 0)]))]
                    362:   ""
                    363:   "test%C1 %0"
                    364:   [(set_attr "type" "compare")])
                    365: 
                    366: ;; These control RTL generation for conditional jump insns
                    367: ;; and match them for register allocation.
                    368: 
                    369: (define_expand "beq"
                    370:   [(set (pc)
                    371:        (if_then_else (eq (match_dup 1)
                    372:                          (const_int 0))
                    373:                      (label_ref (match_operand 0 "" ""))
                    374:                      (pc)))]
                    375:   ""
                    376:   "
                    377: { operands[1] = gen_compare_reg (EQ, i960_compare_op0, i960_compare_op1); }")
                    378: 
                    379: (define_expand "bne"
                    380:   [(set (pc)
                    381:        (if_then_else (ne (match_dup 1)
                    382:                          (const_int 0))
                    383:                      (label_ref (match_operand 0 "" ""))
                    384:                      (pc)))]
                    385:   ""
                    386:   "
                    387: { operands[1] = gen_compare_reg (NE, i960_compare_op0, i960_compare_op1); }")
                    388: 
                    389: (define_expand "bgt"
                    390:   [(set (pc)
                    391:        (if_then_else (gt (match_dup 1)
                    392:                          (const_int 0))
                    393:                      (label_ref (match_operand 0 "" ""))
                    394:                      (pc)))]
                    395:   ""
                    396:   "
                    397: { operands[1] = gen_compare_reg (GT, i960_compare_op0, i960_compare_op1); }")
                    398: 
                    399: (define_expand "bgtu"
                    400:   [(set (pc)
                    401:        (if_then_else (gtu (match_dup 1)
                    402:                           (const_int 0))
                    403:                      (label_ref (match_operand 0 "" ""))
                    404:                      (pc)))]
                    405:   ""
                    406:   "
                    407: { operands[1] = gen_compare_reg (GTU, i960_compare_op0, i960_compare_op1); }")
                    408: 
                    409: (define_expand "blt"
                    410:   [(set (pc)
                    411:        (if_then_else (lt (match_dup 1)
                    412:                          (const_int 0))
                    413:                      (label_ref (match_operand 0 "" ""))
                    414:                      (pc)))]
                    415:   ""
                    416:   "
                    417: { operands[1] = gen_compare_reg (LT, i960_compare_op0, i960_compare_op1); }")
                    418: 
                    419: (define_expand "bltu"
                    420:   [(set (pc)
                    421:        (if_then_else (ltu (match_dup 1)
                    422:                           (const_int 0))
                    423:                      (label_ref (match_operand 0 "" ""))
                    424:                      (pc)))]
                    425:   ""
                    426:   "
                    427: { operands[1] = gen_compare_reg (LTU, i960_compare_op0, i960_compare_op1); }")
                    428: 
                    429: (define_expand "bge"
                    430:   [(set (pc)
                    431:        (if_then_else (ge (match_dup 1)
                    432:                          (const_int 0))
                    433:                      (label_ref (match_operand 0 "" ""))
                    434:                      (pc)))]
                    435:   ""
                    436:   "
                    437: { operands[1] = gen_compare_reg (GE, i960_compare_op0, i960_compare_op1); }")
                    438: 
                    439: (define_expand "bgeu"
                    440:   [(set (pc)
                    441:        (if_then_else (geu (match_dup 1)
                    442:                           (const_int 0))
                    443:                      (label_ref (match_operand 0 "" ""))
                    444:                      (pc)))]
                    445:   ""
                    446:   "
                    447: { operands[1] = gen_compare_reg (GEU, i960_compare_op0, i960_compare_op1); }")
                    448: 
                    449: (define_expand "ble"
                    450:   [(set (pc)
                    451:        (if_then_else (le (match_dup 1)
                    452:                          (const_int 0))
                    453:                      (label_ref (match_operand 0 "" ""))
                    454:                      (pc)))]
                    455:   ""
                    456:   "
                    457: { operands[1] = gen_compare_reg (LE, i960_compare_op0, i960_compare_op1); }")
                    458: 
                    459: (define_expand "bleu"
                    460:   [(set (pc)
                    461:        (if_then_else (leu (match_dup 1)
                    462:                           (const_int 0))
                    463:                      (label_ref (match_operand 0 "" ""))
                    464:                      (pc)))]
                    465:   ""
                    466:   "
                    467: { operands[1] = gen_compare_reg (LEU, i960_compare_op0, i960_compare_op1); }")
                    468: 
                    469: ;; Now the normal branch insns (forward and reverse).
                    470: 
                    471: (define_insn ""
                    472:   [(set (pc)
                    473:        (if_then_else (match_operator 0 "comparison_operator"
                    474:                                      [(reg:CC 36) (const_int 0)])
                    475:                      (label_ref (match_operand 1 "" ""))
                    476:                      (pc)))]
                    477:   ""
                    478:   "b%C0 %l1"
                    479:   [(set_attr "type" "branch")])
                    480: 
                    481: (define_insn ""
                    482:   [(set (pc)
                    483:        (if_then_else (match_operator 0 "comparison_operator"
                    484:                                      [(reg:CC 36) (const_int 0)])
                    485:                      (pc)
                    486:                      (label_ref (match_operand 1 "" ""))))]
                    487:   ""
                    488:   "b%I0 %l1"
                    489:   [(set_attr "type" "branch")])
                    490: 
                    491: (define_insn ""
                    492:   [(set (pc)
                    493:        (if_then_else (match_operator 0 "comparison_operator"
                    494:                                      [(reg:CC_UNS 36) (const_int 0)])
                    495:                      (label_ref (match_operand 1 "" ""))
                    496:                      (pc)))]
                    497:   ""
                    498:   "b%C0 %l1"
                    499:   [(set_attr "type" "branch")])
                    500: 
                    501: (define_insn ""
                    502:   [(set (pc)
                    503:        (if_then_else (match_operator 0 "comparison_operator"
                    504:                                      [(reg:CC_UNS 36) (const_int 0)])
                    505:                      (pc)
                    506:                      (label_ref (match_operand 1 "" ""))))]
                    507:   ""
                    508:   "b%I0 %l1"
                    509:   [(set_attr "type" "branch")])
                    510: 
                    511: (define_insn ""
                    512:   [(set (pc)
                    513:        (if_then_else
                    514:         (match_operator 0 "comparison_operator"
                    515:                         [(match_operand:SI 1 "arith_operand" "d")
                    516:                          (match_operand:SI 2 "arith_operand" "dI")])
                    517:         (label_ref (match_operand 3 "" ""))
                    518:         (pc)))]
                    519:   ""
                    520:   "cmp%S0%B0%R0        %2,%1,%l3"
                    521:   [(set_attr "type" "branch")])
                    522: 
                    523: (define_insn ""
                    524:   [(set (pc)
                    525:        (if_then_else
                    526:         (match_operator 0 "comparison_operator"
                    527:                         [(match_operand:SI 1 "arith_operand" "d")
                    528:                          (match_operand:SI 2 "arith_operand" "dI")])
                    529:         (pc)
                    530:         (label_ref (match_operand 3 "" ""))))]
                    531:   ""
                    532:   "cmp%S0%B0%X0        %2,%1,%l3"
                    533:   [(set_attr "type" "branch")])
                    534: 
                    535: ;; Normal move instructions.
1.1.1.2 ! root      536: ;; This code is based on the sparc machine description.
1.1       root      537: 
                    538: (define_expand "movsi"
                    539:   [(set (match_operand:SI 0 "general_operand" "")
                    540:        (match_operand:SI 1 "general_operand" ""))]
                    541:   ""
                    542:   "
                    543: {
                    544:   if (emit_move_sequence (operands, SImode))
                    545:     DONE;
                    546: }")
                    547: 
                    548: ;; The store case can not be separate, because reload may convert a register
                    549: ;; to register move insn to a store (or load) insn without rerecognizing
                    550: ;; the insn.
                    551: 
                    552: ;; Special pattern for zero stores to memory for functions which don't use
                    553: ;; the arg pointer.
                    554: 
                    555: (define_insn ""
                    556:   [(set (match_operand:SI 0 "general_operand" "=d,d,d,m")
                    557:        (match_operand:SI 1 "general_operand" "dI,i,m,dJ"))]
                    558:   "current_function_args_size == 0
                    559:    && (register_operand (operands[0], SImode)
                    560:        || register_operand (operands[1], SImode)
                    561:        || operands[1] == const0_rtx)"
                    562:   "*
                    563: {
                    564:   switch (which_alternative)
                    565:     {
                    566:     case 0:
                    567:       if (i960_last_insn_type == I_TYPE_REG && TARGET_C_SERIES)
                    568:        {
                    569:          if (GET_CODE (operands[1]) == REG)
                    570:            return \"lda        (%1),%0\";
                    571:          else
                    572:            return \"lda        %1,%0\";
                    573:        }
                    574:       return \"mov     %1,%0\";
                    575:     case 1:
                    576:       return i960_output_ldconst (operands[0], operands[1]);
                    577:     case 2:
                    578:       return \"ld      %1,%0\";
                    579:     case 3:
                    580:       if (operands[1] == const0_rtx)
                    581:        return \"st     g14,%0\";
                    582:       return \"st      %1,%0\";      
                    583:     }
                    584: }"
                    585:   [(set_attr "type" "move,address,load,store")
                    586:    (set_attr "length" "*,3,*,*")])
                    587: 
                    588: (define_insn ""
                    589:   [(set (match_operand:SI 0 "general_operand" "=d,d,d,m")
                    590:        (match_operand:SI 1 "general_operand" "dI,i,m,d"))]
                    591:   "current_function_args_size != 0
                    592:    && (register_operand (operands[0], SImode)
                    593:        || register_operand (operands[1], SImode))"
                    594:   "*
                    595: {
                    596:   switch (which_alternative)
                    597:     {
                    598:     case 0:
                    599:       if (i960_last_insn_type == I_TYPE_REG && TARGET_C_SERIES)
                    600:        {
                    601:          if (GET_CODE (operands[1]) == REG)
                    602:            return \"lda        (%1),%0\";
                    603:          else
                    604:            return \"lda        %1,%0\";
                    605:        }
                    606:       return \"mov     %1,%0\";
                    607:     case 1:
                    608:       return i960_output_ldconst (operands[0], operands[1]);
                    609:     case 2:
                    610:       return \"ld      %1,%0\";
                    611:     case 3:
                    612:       return \"st      %1,%0\";      
                    613:     }
                    614: }"
                    615:   [(set_attr "type" "move,address,load,store")
                    616:    (set_attr "length" "*,3,*,*")])
                    617: 
                    618: (define_expand "movhi"
                    619:   [(set (match_operand:HI 0 "general_operand" "")
                    620:        (match_operand:HI 1 "general_operand" ""))]
                    621:   ""
                    622:   "
                    623: {
                    624:   if (emit_move_sequence (operands, HImode))
                    625:     DONE;
                    626: }")
                    627: 
                    628: ;; Special pattern for zero stores to memory for functions which don't use
                    629: ;; the arg pointer.
                    630: 
                    631: ;; The store case can not be separate.  See above.
                    632: (define_insn ""
                    633:   [(set (match_operand:HI 0 "general_operand" "=d,d,d,m")
                    634:        (match_operand:HI 1 "general_operand" "dI,i,m,dJ"))]
                    635:   "current_function_args_size == 0
                    636:    && (register_operand (operands[0], HImode)
                    637:        || register_operand (operands[1], HImode)
                    638:        || operands[1] == const0_rtx)"
                    639:   "*
                    640: {
                    641:   switch (which_alternative)
                    642:     {
                    643:     case 0:
                    644:       if (i960_last_insn_type == I_TYPE_REG && TARGET_C_SERIES)
                    645:        {
                    646:          if (GET_CODE (operands[1]) == REG)
                    647:            return \"lda        (%1),%0\";
                    648:          else
                    649:            return \"lda        %1,%0\";
                    650:        }
                    651:       return \"mov     %1,%0\";
                    652:     case 1:
                    653:       return i960_output_ldconst (operands[0], operands[1]);
                    654:     case 2:
                    655:       return \"ldos    %1,%0\";
                    656:     case 3:
                    657:       if (operands[1] == const0_rtx)
                    658:        return \"stos   g14,%0\";
                    659:       return \"stos    %1,%0\";
                    660:     }
                    661: }"
                    662:   [(set_attr "type" "move,misc,load,store")
                    663:    (set_attr "length" "*,3,*,*")])
                    664: 
                    665: ;; The store case can not be separate.  See above.
                    666: (define_insn ""
                    667:   [(set (match_operand:HI 0 "general_operand" "=d,d,d,m")
                    668:        (match_operand:HI 1 "general_operand" "dI,i,m,d"))]
                    669:   "current_function_args_size != 0
                    670:    && (register_operand (operands[0], HImode)
                    671:        || register_operand (operands[1], HImode))"
                    672:   "*
                    673: {
                    674:   switch (which_alternative)
                    675:     {
                    676:     case 0:
                    677:       if (i960_last_insn_type == I_TYPE_REG && TARGET_C_SERIES)
                    678:        {
                    679:          if (GET_CODE (operands[1]) == REG)
                    680:            return \"lda        (%1),%0\";
                    681:          else
                    682:            return \"lda        %1,%0\";
                    683:        }
                    684:       return \"mov     %1,%0\";
                    685:     case 1:
                    686:       return i960_output_ldconst (operands[0], operands[1]);
                    687:     case 2:
                    688:       return \"ldos    %1,%0\";
                    689:     case 3:
                    690:       return \"stos    %1,%0\";
                    691:     }
                    692: }"
                    693:   [(set_attr "type" "move,misc,load,store")
                    694:    (set_attr "length" "*,3,*,*")])
                    695: 
                    696: (define_expand "movqi"
                    697:   [(set (match_operand:QI 0 "general_operand" "")
                    698:        (match_operand:QI 1 "general_operand" ""))]
                    699:   ""
                    700:   "
                    701: {
                    702:   if (emit_move_sequence (operands, QImode))
                    703:     DONE;
                    704: }")
                    705: 
                    706: ;; The store case can not be separate.  See comment above.
                    707: (define_insn ""
                    708:   [(set (match_operand:QI 0 "general_operand" "=d,d,d,m")
                    709:        (match_operand:QI 1 "general_operand" "dI,i,m,dJ"))]
                    710:   "current_function_args_size == 0
                    711:    && (register_operand (operands[0], QImode)
                    712:        || register_operand (operands[1], QImode)
                    713:        || operands[1] == const0_rtx)"
                    714:   "*
                    715: {
                    716:   switch (which_alternative)
                    717:     {
                    718:     case 0:
                    719:       if (i960_last_insn_type == I_TYPE_REG && TARGET_C_SERIES)
                    720:        {
                    721:          if (GET_CODE (operands[1]) == REG)
                    722:            return \"lda        (%1),%0\";
                    723:          else
                    724:            return \"lda        %1,%0\";
                    725:        }
                    726:       return \"mov     %1,%0\";
                    727:     case 1:
                    728:       return i960_output_ldconst (operands[0], operands[1]);
                    729:     case 2:
                    730:       return \"ldob    %1,%0\";
                    731:     case 3:
                    732:       if (operands[1] == const0_rtx)
                    733:        return \"stob   g14,%0\";
                    734:       return \"stob    %1,%0\";
                    735:     }
                    736: }"
                    737:   [(set_attr "type" "move,misc,load,store")
                    738:    (set_attr "length" "*,3,*,*")])
                    739: 
                    740: ;; The store case can not be separate.  See comment above.
                    741: (define_insn ""
                    742:   [(set (match_operand:QI 0 "general_operand" "=d,d,d,m")
                    743:        (match_operand:QI 1 "general_operand" "dI,i,m,d"))]
                    744:   "current_function_args_size != 0
                    745:    && (register_operand (operands[0], QImode)
                    746:        || register_operand (operands[1], QImode))"
                    747:   "*
                    748: {
                    749:   switch (which_alternative)
                    750:     {
                    751:     case 0:
                    752:       if (i960_last_insn_type == I_TYPE_REG && TARGET_C_SERIES)
                    753:        {
                    754:          if (GET_CODE (operands[1]) == REG)
                    755:            return \"lda        (%1),%0\";
                    756:          else
                    757:            return \"lda        %1,%0\";
                    758:        }
                    759:       return \"mov     %1,%0\";
                    760:     case 1:
                    761:       return i960_output_ldconst (operands[0], operands[1]);
                    762:     case 2:
                    763:       return \"ldob    %1,%0\";
                    764:     case 3:
                    765:       return \"stob    %1,%0\";
                    766:     }
                    767: }"
                    768:   [(set_attr "type" "move,misc,load,store")
                    769:    (set_attr "length" "*,3,*,*")])
                    770: 
                    771: (define_expand "movdi"
                    772:   [(set (match_operand:DI 0 "general_operand" "")
                    773:        (match_operand:DI 1 "general_operand" ""))]
                    774:   ""
                    775:   "
                    776: {
                    777:   if (emit_move_sequence (operands, DImode))
                    778:     DONE;
                    779: }")
                    780: 
                    781: ;; The store case can not be separate.  See comment above.
                    782: (define_insn ""
1.1.1.2 ! root      783:   [(set (match_operand:DI 0 "general_operand" "=d,d,d,m,o")
        !           784:        (match_operand:DI 1 "general_operand" "dI,i,m,d,J"))]
1.1       root      785:   "current_function_args_size == 0
                    786:    && (register_operand (operands[0], DImode)
                    787:        || register_operand (operands[1], DImode)
                    788:        || operands[1] == const0_rtx)"
                    789:   "*
                    790: {
                    791:   switch (which_alternative)
                    792:     {
                    793:     case 0:
                    794:       return \"movl    %1,%0\";
                    795:     case 1:
                    796:       return i960_output_ldconst (operands[0], operands[1]);
                    797:     case 2:
                    798:       return \"ldl     %1,%0\";
                    799:     case 3:
                    800:       return \"stl     %1,%0\";
1.1.1.2 ! root      801:     case 4:
        !           802:       operands[1] = adj_offsettable_operand (operands[0], 4);
        !           803:       return \"st      g14,%0\;st      g14,%1\";
1.1       root      804:     }
                    805: }"
1.1.1.2 ! root      806:   [(set_attr "type" "move,load,load,store,store")])
1.1       root      807: 
                    808: ;; The store case can not be separate.  See comment above.
                    809: (define_insn ""
                    810:   [(set (match_operand:DI 0 "general_operand" "=d,d,d,m")
                    811:        (match_operand:DI 1 "general_operand" "dI,i,m,d"))]
                    812:   "current_function_args_size != 0
                    813:    && (register_operand (operands[0], DImode)
                    814:        || register_operand (operands[1], DImode))"
                    815:   "*
                    816: {
                    817:   switch (which_alternative)
                    818:     {
                    819:     case 0:
                    820:       return \"movl    %1,%0\";
                    821:     case 1:
                    822:       return i960_output_ldconst (operands[0], operands[1]);
                    823:     case 2:
                    824:       return \"ldl     %1,%0\";
                    825:     case 3:
                    826:       return \"stl     %1,%0\";
                    827:     }
                    828: }"
                    829:   [(set_attr "type" "move,load,load,store")])
                    830: 
                    831: (define_expand "movti"
                    832:   [(set (match_operand:TI 0 "general_operand" "")
                    833:        (match_operand:TI 1 "general_operand" ""))]
                    834:   ""
                    835:   "
                    836: {
                    837:   if (emit_move_sequence (operands, TImode))
                    838:     DONE;
                    839: }")
                    840: 
                    841: ;; The store case can not be separate.  See comment above.
                    842: (define_insn ""
1.1.1.2 ! root      843:   [(set (match_operand:TI 0 "general_operand" "=d,d,d,m,o")
        !           844:        (match_operand:TI 1 "general_operand" "dI,i,m,d,J"))]
1.1       root      845:   "current_function_args_size == 0
                    846:    && (register_operand (operands[0], TImode)
                    847:        || register_operand (operands[1], TImode)
                    848:        || operands[1] == const0_rtx)"
                    849:   "*
                    850: {
                    851:   switch (which_alternative)
                    852:     {
                    853:     case 0:
                    854:       return \"movq    %1,%0\";
                    855:     case 1:
                    856:       return i960_output_ldconst (operands[0], operands[1]);
                    857:     case 2:
                    858:       return \"ldq     %1,%0\";
                    859:     case 3:
                    860:       return \"stq     %1,%0\";
1.1.1.2 ! root      861:     case 4:
        !           862:       operands[1] = adj_offsettable_operand (operands[0], 4);
        !           863:       operands[2] = adj_offsettable_operand (operands[0], 8);
        !           864:       operands[3] = adj_offsettable_operand (operands[0], 12);
        !           865:       return \"st      g14,%0\;st      g14,%1\;st      g14,%2\;st      g14,%3\";
1.1       root      866:     }
                    867: }"
1.1.1.2 ! root      868:   [(set_attr "type" "move,load,load,store,store")])
1.1       root      869: 
                    870: ;; The store case can not be separate.  See comment above.
                    871: (define_insn ""
                    872:   [(set (match_operand:TI 0 "general_operand" "=d,d,d,m")
                    873:        (match_operand:TI 1 "general_operand" "dI,i,m,d"))]
                    874:   "current_function_args_size != 0
                    875:    && (register_operand (operands[0], TImode)
                    876:        || register_operand (operands[1], TImode))"
                    877:   "*
                    878: {
                    879:   switch (which_alternative)
                    880:     {
                    881:     case 0:
                    882:       return \"movq    %1,%0\";
                    883:     case 1:
                    884:       return i960_output_ldconst (operands[0], operands[1]);
                    885:     case 2:
                    886:       return \"ldq     %1,%0\";
                    887:     case 3:
                    888:       return \"stq     %1,%0\";
                    889:     }
                    890: }"
                    891:   [(set_attr "type" "move,load,load,store")])
                    892: 
                    893: (define_expand "store_multiple"
                    894:   [(set (match_operand:SI 0 "" "")     ;;- dest
                    895:        (match_operand:SI 1 "" ""))     ;;- src
                    896:    (use (match_operand:SI 2 "" ""))]   ;;- nregs
                    897:   ""
                    898:   "
                    899: {
                    900:   int regno;
                    901:   int count;
                    902:   rtx from;
                    903:   int i;
                    904: 
                    905:   if (GET_CODE (operands[0]) != MEM
                    906:       || GET_CODE (operands[1]) != REG
                    907:       || GET_CODE (operands[2]) != CONST_INT)
                    908:     FAIL;
                    909: 
                    910:   count = INTVAL (operands[2]);
                    911:   if (count > 12)
                    912:     FAIL;
                    913: 
                    914:   regno = REGNO (operands[1]);
                    915:   from = memory_address (SImode, XEXP (operands[0], 0));
                    916:   while (count >= 4 && ((regno & 3) == 0))
                    917:     {
                    918:       emit_insn (gen_rtx (SET, VOIDmode,
                    919:                          gen_rtx (MEM, TImode, from),
                    920:                          gen_rtx (REG, TImode, regno)));
                    921:       count -= 4;
                    922:       regno += 4;
                    923:       from = memory_address (TImode, plus_constant (from, 16));
                    924:     }
                    925:   while (count >= 2 && ((regno & 1) == 0))
                    926:     {
                    927:       emit_insn (gen_rtx (SET, VOIDmode,
                    928:                          gen_rtx (MEM, DImode, from),
                    929:                          gen_rtx (REG, DImode, regno)));
                    930:       count -= 2;
                    931:       regno += 2;
                    932:       from = memory_address (DImode, plus_constant (from, 8));
                    933:     }
                    934:   while (count > 0)
                    935:     {
                    936:       emit_insn (gen_rtx (SET, VOIDmode,
                    937:                          gen_rtx (MEM, SImode, from),
                    938:                          gen_rtx (REG, SImode, regno)));
                    939:       count -= 1;
                    940:       regno += 1;
                    941:       from = memory_address (SImode, plus_constant (from, 4));
                    942:     }
                    943:   DONE;
                    944: }")
                    945: 
                    946: ;; Floating point move insns
                    947: 
                    948: (define_expand "movdf"
                    949:   [(set (match_operand:DF 0 "general_operand" "")
                    950:        (match_operand:DF 1 "fpmove_src_operand" ""))]
                    951:   ""
                    952:   "
                    953: {
                    954:   if (emit_move_sequence (operands, DFmode))
                    955:     DONE;
                    956: }")
                    957: 
                    958: (define_insn ""
1.1.1.2 ! root      959:   [(set (match_operand:DF 0 "general_operand" "=r,*f,d,d,m,o")
        !           960:        (match_operand:DF 1 "fpmove_src_operand" "r,GH,F,m,d,G"))]
1.1       root      961:   "current_function_args_size == 0
                    962:    && (register_operand (operands[0], DFmode)
                    963:        || register_operand (operands[1], DFmode)
                    964:        || operands[1] == CONST0_RTX (DFmode))"
                    965:   "*
                    966: {
                    967:   switch (which_alternative)
                    968:     {
                    969:     case 0:
                    970:       if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))
                    971:        return \"movrl  %1,%0\";
                    972:       else
                    973:        return \"movl   %1,%0\";
                    974:     case 1:
                    975:       return \"movrl   %1,%0\";
                    976:     case 2:
                    977:       return i960_output_ldconst (operands[0], operands[1]);
                    978:     case 3:
                    979:       return \"ldl     %1,%0\";
                    980:     case 4:
                    981:       return \"stl     %1,%0\";
1.1.1.2 ! root      982:     case 5:
        !           983:       operands[1] = adj_offsettable_operand (operands[0], 4);
        !           984:       return \"st      g14,%0\;st      g14,%1\";
1.1       root      985:     }
                    986: }"
1.1.1.2 ! root      987:   [(set_attr "type" "move,move,load,fpload,fpstore,fpstore")])
1.1       root      988: 
                    989: (define_insn ""
1.1.1.2 ! root      990:   [(set (match_operand:DF 0 "general_operand" "=r,*f,d,d,m")
1.1       root      991:        (match_operand:DF 1 "fpmove_src_operand" "r,GH,F,m,d"))]
                    992:   "current_function_args_size != 0
                    993:    && (register_operand (operands[0], DFmode)
                    994:        || register_operand (operands[1], DFmode))"
                    995:   "*
                    996: {
                    997:   switch (which_alternative)
                    998:     {
                    999:     case 0:
                   1000:       if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))
                   1001:        return \"movrl  %1,%0\";
                   1002:       else
                   1003:        return \"movl   %1,%0\";
                   1004:     case 1:
                   1005:       return \"movrl   %1,%0\";
                   1006:     case 2:
                   1007:       return i960_output_ldconst (operands[0], operands[1]);
                   1008:     case 3:
                   1009:       return \"ldl     %1,%0\";
                   1010:     case 4:
                   1011:       return \"stl     %1,%0\";
                   1012:     }
                   1013: }"
                   1014:   [(set_attr "type" "move,move,load,fpload,fpstore")])
                   1015: 
                   1016: (define_expand "movsf"
                   1017:   [(set (match_operand:SF 0 "general_operand" "")
                   1018:        (match_operand:SF 1 "fpmove_src_operand" ""))]
                   1019:   ""
                   1020:   "
                   1021: {
                   1022:   if (emit_move_sequence (operands, SFmode))
                   1023:     DONE;
                   1024: }")
                   1025: 
                   1026: (define_insn ""
1.1.1.2 ! root     1027:   [(set (match_operand:SF 0 "general_operand" "=r,*f,d,d,m")
1.1       root     1028:        (match_operand:SF 1 "fpmove_src_operand" "r,GH,F,m,dG"))]
                   1029:   "current_function_args_size == 0
                   1030:    && (register_operand (operands[0], SFmode)
                   1031:        || register_operand (operands[1], SFmode)
                   1032:        || operands[1] == CONST0_RTX (SFmode))"
                   1033:   "*
                   1034: {
                   1035:   switch (which_alternative)
                   1036:     {
                   1037:     case 0:
                   1038:       if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))
                   1039:        return \"movr   %1,%0\";
                   1040:       else
                   1041:        return \"mov    %1,%0\";
                   1042:     case 1:
                   1043:       return \"movr    %1,%0\";
                   1044:     case 2:
                   1045:       return i960_output_ldconst (operands[0], operands[1]);
                   1046:     case 3:
                   1047:       return \"ld      %1,%0\";
                   1048:     case 4:
                   1049:       if (operands[1] == CONST0_RTX (SFmode))
                   1050:        return \"st     g14,%0\";
                   1051:       return \"st      %1,%0\";
                   1052:     }
                   1053: }"
                   1054:   [(set_attr "type" "move,move,load,fpload,fpstore")])
                   1055: 
                   1056: (define_insn ""
1.1.1.2 ! root     1057:   [(set (match_operand:SF 0 "general_operand" "=r,*f,d,d,m")
1.1       root     1058:        (match_operand:SF 1 "fpmove_src_operand" "r,GH,F,m,d"))]
                   1059:   "current_function_args_size != 0
                   1060:    && (register_operand (operands[0], SFmode)
                   1061:        || register_operand (operands[1], SFmode))"
                   1062:   "*
                   1063: {
                   1064:   switch (which_alternative)
                   1065:     {
                   1066:     case 0:
                   1067:       if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))
                   1068:        return \"movr   %1,%0\";
                   1069:       else
                   1070:        return \"mov    %1,%0\";
                   1071:     case 1:
                   1072:       return \"movr    %1,%0\";
                   1073:     case 2:
                   1074:       return i960_output_ldconst (operands[0], operands[1]);
                   1075:     case 3:
                   1076:       return \"ld      %1,%0\";
                   1077:     case 4:
                   1078:       return \"st      %1,%0\";
                   1079:     }
                   1080: }"
                   1081:   [(set_attr "type" "move,move,load,fpload,fpstore")])
                   1082: 
                   1083: ;; Mixed-mode moves with sign and zero-extension.
                   1084: 
                   1085: ;; Note that the one starting from HImode comes before those for QImode
                   1086: ;; so that a constant operand will match HImode, not QImode.
                   1087: 
                   1088: (define_expand "extendhisi2"
                   1089:   [(set (match_operand:SI 0 "register_operand" "")
                   1090:        (sign_extend:SI
                   1091:         (match_operand:HI 1 "nonimmediate_operand" "")))]
                   1092:  ""
                   1093:  "
                   1094: {
                   1095:   if (GET_CODE (operand1) == REG
                   1096:       || (GET_CODE (operand1) == SUBREG
                   1097:          && GET_CODE (XEXP (operand1, 0)) == REG))
                   1098:     {
                   1099:       rtx temp = gen_reg_rtx (SImode);
                   1100:       rtx shift_16 = gen_rtx (CONST_INT, VOIDmode, 16);
                   1101:       int op1_subreg_word = 0;
                   1102: 
                   1103:       if (GET_CODE (operand1) == SUBREG)
                   1104:        {
                   1105:          op1_subreg_word = SUBREG_WORD (operand1);
                   1106:          operand1 = SUBREG_REG (operand1);
                   1107:        }
                   1108:       operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word);
                   1109: 
                   1110:       emit_insn (gen_ashlsi3 (temp, operand1, shift_16));
                   1111:       emit_insn (gen_ashrsi3 (operand0, temp, shift_16));
                   1112:       DONE;
                   1113:     }
                   1114: }")
                   1115: 
                   1116: (define_insn ""
                   1117:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1118:        (sign_extend:SI (match_operand:HI 1 "memory_operand" "m")))]
                   1119:   ""
                   1120:   "ldis        %1,%0"
                   1121:   [(set_attr "type" "load")])
                   1122: 
                   1123: (define_expand "extendqisi2"
                   1124:   [(set (match_operand:SI 0 "register_operand" "")
                   1125:        (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
                   1126:   ""
                   1127:   "
                   1128: {
                   1129:   if (GET_CODE (operand1) == REG
                   1130:       || (GET_CODE (operand1) == SUBREG
                   1131:          && GET_CODE (XEXP (operand1, 0)) == REG))
                   1132:     {
                   1133:       rtx temp = gen_reg_rtx (SImode);
                   1134:       rtx shift_24 = gen_rtx (CONST_INT, VOIDmode, 24);
                   1135:       int op1_subreg_word = 0;
                   1136: 
                   1137:       if (GET_CODE (operand1) == SUBREG)
                   1138:        {
                   1139:          op1_subreg_word = SUBREG_WORD (operand1);
                   1140:          operand1 = SUBREG_REG (operand1);
                   1141:        }
                   1142:       operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word),
                   1143: 
                   1144:       emit_insn (gen_ashlsi3 (temp, operand1, shift_24));
                   1145:       emit_insn (gen_ashrsi3 (operand0, temp, shift_24));
                   1146:       DONE;
                   1147:     }
                   1148: }")
                   1149: 
                   1150: (define_insn ""
                   1151:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1152:        (sign_extend:SI (match_operand:QI 1 "memory_operand" "m")))]
                   1153:   ""
                   1154:   "ldib        %1,%0"
                   1155:   [(set_attr "type" "load")])
                   1156: 
                   1157: (define_expand "extendqihi2"
                   1158:   [(set (match_operand:HI 0 "register_operand" "")
                   1159:        (sign_extend:HI
                   1160:         (match_operand:QI 1 "nonimmediate_operand" "")))]
                   1161:   ""
                   1162:   "
                   1163: {
                   1164:   if (GET_CODE (operand1) == REG
                   1165:       || (GET_CODE (operand1) == SUBREG
                   1166:          && GET_CODE (XEXP (operand1, 0)) == REG))
                   1167:     {
                   1168:       rtx temp = gen_reg_rtx (SImode);
                   1169:       rtx shift_24 = gen_rtx (CONST_INT, VOIDmode, 24);
                   1170:       int op0_subreg_word = 0;
                   1171:       int op1_subreg_word = 0;
                   1172: 
                   1173:       if (GET_CODE (operand1) == SUBREG)
                   1174:        {
                   1175:          op1_subreg_word = SUBREG_WORD (operand1);
                   1176:          operand1 = SUBREG_REG (operand1);
                   1177:        }
                   1178:       operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word);
                   1179: 
                   1180:       if (GET_CODE (operand0) == SUBREG)
                   1181:        {
                   1182:          op0_subreg_word = SUBREG_WORD (operand0);
                   1183:          operand0 = SUBREG_REG (operand0);
                   1184:        }
                   1185:       if (GET_MODE (operand0) != SImode)
                   1186:        operand0 = gen_rtx (SUBREG, SImode, operand0, op0_subreg_word);
                   1187: 
                   1188:       emit_insn (gen_ashlsi3 (temp, operand1, shift_24));
                   1189:       emit_insn (gen_ashrsi3 (operand0, temp, shift_24));
                   1190:       DONE;
                   1191:     }
                   1192: }")
                   1193: 
                   1194: (define_insn ""
                   1195:   [(set (match_operand:HI 0 "register_operand" "=d")
                   1196:        (sign_extend:HI (match_operand:QI 1 "memory_operand" "m")))]
                   1197:   ""
                   1198:   "ldib        %1,%0"
                   1199:   [(set_attr "type" "load")])
                   1200: 
                   1201: (define_expand "zero_extendhisi2"
                   1202:   [(set (match_operand:SI 0 "register_operand" "")
                   1203:        (zero_extend:SI
                   1204:         (match_operand:HI 1 "nonimmediate_operand" "")))]
                   1205:  ""
                   1206:  "
                   1207: {
                   1208:   if (GET_CODE (operand1) == REG
                   1209:       || (GET_CODE (operand1) == SUBREG
                   1210:          && GET_CODE (XEXP (operand1, 0)) == REG))
                   1211:     {
                   1212:       rtx temp = gen_reg_rtx (SImode);
                   1213:       rtx shift_16 = gen_rtx (CONST_INT, VOIDmode, 16);
                   1214:       int op1_subreg_word = 0;
                   1215: 
                   1216:       if (GET_CODE (operand1) == SUBREG)
                   1217:        {
                   1218:          op1_subreg_word = SUBREG_WORD (operand1);
                   1219:          operand1 = SUBREG_REG (operand1);
                   1220:        }
                   1221:       operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word);
                   1222: 
                   1223:       emit_insn (gen_ashlsi3 (temp, operand1, shift_16));
                   1224:       emit_insn (gen_lshrsi3 (operand0, temp, shift_16));
                   1225:       DONE;
                   1226:     }
                   1227: }")
                   1228: 
                   1229: (define_insn ""
                   1230:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1231:        (zero_extend:SI (match_operand:HI 1 "memory_operand" "m")))]
                   1232:   ""
                   1233:   "ldos        %1,%0"
                   1234:   [(set_attr "type" "load")])
                   1235: 
                   1236: ;; Using shifts here generates much better code than doing an `and 255'.
                   1237: ;; This is mainly because the `and' requires loading the constant separately,
                   1238: ;; the constant is likely to get optimized, and then the compiler can't
                   1239: ;; optimize the `and' because it doesn't know that one operand is a constant.
                   1240: 
                   1241: (define_expand "zero_extendqisi2"
                   1242:   [(set (match_operand:SI 0 "register_operand" "")
                   1243:        (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
                   1244:   ""
                   1245:   "
                   1246: {
                   1247:   if (GET_CODE (operand1) == REG
                   1248:       || (GET_CODE (operand1) == SUBREG
                   1249:          && GET_CODE (XEXP (operand1, 0)) == REG))
                   1250:     {
                   1251:       rtx temp = gen_reg_rtx (SImode);
                   1252:       rtx shift_24 = gen_rtx (CONST_INT, VOIDmode, 24);
                   1253:       int op1_subreg_word = 0;
                   1254: 
                   1255:       if (GET_CODE (operand1) == SUBREG)
                   1256:        {
                   1257:          op1_subreg_word = SUBREG_WORD (operand1);
                   1258:          operand1 = SUBREG_REG (operand1);
                   1259:        }
                   1260:       operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word);
                   1261: 
                   1262:       emit_insn (gen_ashlsi3 (temp, operand1, shift_24));
                   1263:       emit_insn (gen_lshrsi3 (operand0, temp, shift_24));
                   1264:       DONE;
                   1265:     }
                   1266: }")
                   1267: 
                   1268: (define_insn ""
                   1269:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1270:        (zero_extend:SI (match_operand:QI 1 "memory_operand" "m")))]
                   1271:   ""
                   1272:   "ldob        %1,%0"
                   1273:   [(set_attr "type" "load")])
                   1274: 
                   1275: (define_expand "zero_extendqihi2"
                   1276:   [(set (match_operand:HI 0 "register_operand" "")
                   1277:        (zero_extend:HI
                   1278:         (match_operand:QI 1 "nonimmediate_operand" "")))]
                   1279:   ""
                   1280:   "
                   1281: {
                   1282:   if (GET_CODE (operand1) == REG
                   1283:       || (GET_CODE (operand1) == SUBREG
                   1284:          && GET_CODE (XEXP (operand1, 0)) == REG))
                   1285:     {
                   1286:       rtx temp = gen_reg_rtx (SImode);
                   1287:       rtx shift_24 = gen_rtx (CONST_INT, VOIDmode, 24);
                   1288:       int op0_subreg_word = 0;
                   1289:       int op1_subreg_word = 0;
                   1290: 
                   1291:       if (GET_CODE (operand1) == SUBREG)
                   1292:        {
                   1293:          op1_subreg_word = SUBREG_WORD (operand1);
                   1294:          operand1 = SUBREG_REG (operand1);
                   1295:        }
                   1296:       operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word);
                   1297: 
                   1298:       if (GET_CODE (operand0) == SUBREG)
                   1299:        {
                   1300:          op0_subreg_word = SUBREG_WORD (operand0);
                   1301:          operand0 = SUBREG_REG (operand0);
                   1302:        }
                   1303:       if (GET_MODE (operand0) != SImode)
                   1304:        operand0 = gen_rtx (SUBREG, SImode, operand0, op0_subreg_word);
                   1305: 
                   1306:       emit_insn (gen_ashlsi3 (temp, operand1, shift_24));
                   1307:       emit_insn (gen_lshrsi3 (operand0, temp, shift_24));
                   1308:       DONE;
                   1309:     }
                   1310: }")
                   1311: 
                   1312: (define_insn ""
                   1313:   [(set (match_operand:HI 0 "register_operand" "=d")
                   1314:        (zero_extend:HI (match_operand:QI 1 "memory_operand" "m")))]
                   1315:   ""
                   1316:   "ldob        %1,%0"
                   1317:   [(set_attr "type" "load")])
                   1318: 
                   1319: ;; Conversions between float and double.
                   1320: 
                   1321: (define_insn "extendsfdf2"
1.1.1.2 ! root     1322:   [(set (match_operand:DF 0 "register_operand" "=*f,d")
1.1       root     1323:        (float_extend:DF (match_operand:SF 1 "fp_arith_operand" "dGH,fGH")))]
                   1324:   "TARGET_NUMERICS"
                   1325:   "@
                   1326:   movr %1,%0
                   1327:   movrl        %1,%0"
                   1328:   [(set_attr "type" "fpmove")])
                   1329: 
                   1330: (define_insn "truncdfsf2"
                   1331:   [(set (match_operand:SF 0 "register_operand" "=d")
                   1332:        (float_truncate:SF
                   1333:         (match_operand:DF 1 "fp_arith_operand" "fGH")))]
                   1334:   "TARGET_NUMERICS"
                   1335:   "movr        %1,%0"
                   1336:   [(set_attr "type" "fpmove")])
                   1337: 
                   1338: ;; Conversion between fixed point and floating point.
                   1339: 
                   1340: (define_insn "floatsidf2"
                   1341:   [(set (match_operand:DF 0 "register_operand" "=f")
                   1342:        (float:DF (match_operand:SI 1 "register_operand" "d")))]
                   1343:   "TARGET_NUMERICS"
                   1344:   "cvtir       %1,%0"
                   1345:   [(set_attr "type" "fpcvt")])
                   1346: 
                   1347: (define_insn "floatsisf2"
1.1.1.2 ! root     1348:   [(set (match_operand:SF 0 "register_operand" "=d*f")
1.1       root     1349:        (float:SF (match_operand:SI 1 "register_operand" "d")))]
                   1350:   "TARGET_NUMERICS"
                   1351:   "cvtir       %1,%0"
                   1352:   [(set_attr "type" "fpcvt")])
                   1353: 
                   1354: ;; Convert a float to an actual integer.
                   1355: ;; Truncation is performed as part of the conversion.
                   1356: ;; The i960 requires conversion from DFmode to DImode to make
                   1357: ;; unsigned conversions work properly.
                   1358: 
                   1359: (define_insn "fixuns_truncdfdi2"
                   1360:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1361:        (unsigned_fix:DI (fix:DF (match_operand:DF 1 "fp_arith_operand" "fGH"))))]
                   1362:   "TARGET_NUMERICS"
                   1363:   "cvtzril     %1,%0"
                   1364:   [(set_attr "type" "fpcvt")])
                   1365: 
                   1366: (define_insn "fixuns_truncsfdi2"
                   1367:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1368:        (unsigned_fix:DI (fix:SF (match_operand:SF 1 "fp_arith_operand" "fGH"))))]
                   1369:   "TARGET_NUMERICS"
                   1370:   "cvtzril     %1,%0"
                   1371:   [(set_attr "type" "fpcvt")])
                   1372: 
                   1373: (define_insn "fix_truncdfsi2"
                   1374:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1375:        (fix:SI (fix:DF (match_operand:DF 1 "fp_arith_operand" "fGH"))))]
                   1376:   "TARGET_NUMERICS"
                   1377:   "cvtzri      %1,%0"
                   1378:   [(set_attr "type" "fpcvt")])
                   1379: 
                   1380: (define_expand "fixuns_truncdfsi2"
                   1381:   [(set (match_operand:SI 0 "register_operand" "")
                   1382:        (unsigned_fix:SI (fix:DF (match_operand:DF 1 "fp_arith_operand" ""))))]
                   1383:   "TARGET_NUMERICS"
                   1384:   "
                   1385: {
                   1386:   rtx temp = gen_reg_rtx (DImode);
                   1387:   emit_insn (gen_rtx (SET, VOIDmode, temp,
                   1388:                      gen_rtx (UNSIGNED_FIX, DImode,
                   1389:                               gen_rtx (FIX, DFmode, operands[1]))));
                   1390:   emit_insn (gen_rtx (SET, VOIDmode, operands[0],
                   1391:                      gen_rtx (SUBREG, SImode, temp, 0)));
                   1392:   DONE;
                   1393: }")
                   1394: 
                   1395: (define_insn "fix_truncsfsi2"
                   1396:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1397:        (fix:SI (fix:SF (match_operand:SF 1 "fp_arith_operand" "dfGH"))))]
                   1398:   "TARGET_NUMERICS"
                   1399:   "cvtzri      %1,%0"
                   1400:   [(set_attr "type" "fpcvt")])
                   1401: 
                   1402: (define_expand "fixuns_truncsfsi2"
                   1403:   [(set (match_operand:SI 0 "register_operand" "")
                   1404:        (unsigned_fix:SI (fix:SF (match_operand:SF 1 "fp_arith_operand" ""))))]
                   1405:   "TARGET_NUMERICS"
                   1406:   "
                   1407: {
                   1408:   rtx temp = gen_reg_rtx (DImode);
                   1409:   emit_insn (gen_rtx (SET, VOIDmode, temp,
                   1410:                      gen_rtx (UNSIGNED_FIX, DImode,
                   1411:                               gen_rtx (FIX, SFmode, operands[1]))));
                   1412:   emit_insn (gen_rtx (SET, VOIDmode, operands[0],
                   1413:                      gen_rtx (SUBREG, SImode, temp, 0)));
                   1414:   DONE;
                   1415: }")
                   1416: 
                   1417: ;; Arithmetic instructions.
                   1418: 
                   1419: (define_insn "subsi3"
                   1420:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1421:        (minus:SI (match_operand:SI 1 "arith_operand" "dI")
                   1422:                  (match_operand:SI 2 "arith_operand" "dI")))]
                   1423:   ""
                   1424:   "subo        %2,%1,%0")
                   1425: 
                   1426: ;; Try to generate an lda instruction when it would be faster than an
                   1427: ;; add instruction.
                   1428: ;; Some assemblers apparently won't accept two addresses added together.
                   1429: 
                   1430: (define_insn ""
                   1431:   [(set (match_operand:SI 0 "register_operand" "=d,d,d")
                   1432:        (plus:SI (match_operand:SI 1 "arith32_operand" "%dn,i,dn")
                   1433:                 (match_operand:SI 2 "arith32_operand" "dn,dn,i")))]
                   1434:   "(TARGET_C_SERIES) && (CONSTANT_P (operands[1]) || CONSTANT_P (operands[2]))"
                   1435:   "*
                   1436: {
                   1437:   if (GET_CODE (operands[1]) == CONST_INT)
                   1438:     {
                   1439:       rtx tmp = operands[1];
                   1440:       operands[1] = operands[2];
                   1441:       operands[2] = tmp;
                   1442:     }
                   1443:   if (GET_CODE (operands[2]) == CONST_INT
                   1444:       && GET_CODE (operands[1]) == REG
                   1445:       && i960_last_insn_type != I_TYPE_REG)
                   1446:     {
                   1447:       if (INTVAL (operands[2]) < 0 && INTVAL (operands[2]) > -32)
                   1448:        return \"subo   %n2,%1,%0\";
                   1449:       else if (INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 32)
                   1450:        return \"addo   %1,%2,%0\";
                   1451:     }
                   1452:   if (CONSTANT_P (operands[1]))
                   1453:     return \"lda       %1+%2,%0\";
                   1454:   return \"lda %2(%1),%0\";
                   1455: }")
                   1456: 
                   1457: (define_insn "addsi3"
                   1458:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1459:        (plus:SI (match_operand:SI 1 "signed_arith_operand" "%dI")
                   1460:                 (match_operand:SI 2 "signed_arith_operand" "dIK")))]
                   1461:   ""
                   1462:   "*
                   1463: {
                   1464:   if (GET_CODE (operands[2]) == CONST_INT
                   1465:       && INTVAL (operands[2]) < 0 && INTVAL (operands[2]) > -32)
                   1466:     return \"subo      %n2,%1,%0\";
                   1467:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1468:     return \"addo      %2,%1,%0\";
                   1469:   return \"addo        %1,%2,%0\";
                   1470: }")
                   1471: 
                   1472: (define_insn "mulsi3"
                   1473:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1474:        (mult:SI (match_operand:SI 1 "arith_operand" "%dI")
                   1475:                 (match_operand:SI 2 "arith_operand" "dI")))]
                   1476:   ""
                   1477:   "*
                   1478: {
                   1479:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1480:     return \"mulo      %2,%1,%0\";
                   1481:   return \"mulo        %1,%2,%0\";
                   1482: }"
                   1483:   [(set_attr "type" "mult")])
                   1484: 
                   1485: ;; This goes after the move/add/sub/mul instructions  
                   1486: ;; because those instructions are better when they apply.
                   1487: 
                   1488: (define_insn ""
                   1489:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1490:        (match_operand:SI 1 "address_operand" "p"))]
                   1491:   ""
                   1492:   "lda %a1,%0"
                   1493:   [(set_attr "type" "load")])
                   1494: 
                   1495: ;; This will never be selected because of an "optimization" that GCC does.
                   1496: ;; It always converts divides by a power of 2 into a sequence of instructions
                   1497: ;; that does a right shift, and then corrects the result if it was negative.
                   1498: 
                   1499: ;; (define_insn ""
                   1500: ;;   [(set (match_operand:SI 0 "register_operand" "=d")
                   1501: ;;         (div:SI (match_operand:SI 1 "arith_operand" "dI")
                   1502: ;;                 (match_operand:SI 2 "power2_operand" "nI")))]
                   1503: ;;   ""
                   1504: ;;   "*{
                   1505: ;;     operands[2] = gen_rtx(CONST_INT, VOIDmode,bitpos (INTVAL (operands[2])));
                   1506: ;;     return \"shrdi  %2,%1,%0\";
                   1507: ;;   }"
                   1508: 
                   1509: (define_insn "divsi3"
                   1510:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1511:         (div:SI (match_operand:SI 1 "arith_operand" "dI")
                   1512:                 (match_operand:SI 2 "arith_operand" "dI")))]
                   1513:   ""
                   1514:   "divi        %2,%1,%0"
                   1515:   [(set_attr "type" "div")])
                   1516: 
                   1517: (define_insn "udivsi3"
                   1518:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1519:         (udiv:SI (match_operand:SI 1 "arith_operand" "dI")
                   1520:                 (match_operand:SI 2 "arith_operand" "dI")))]
                   1521:   ""
                   1522:   "divo        %2,%1,%0"
                   1523:   [(set_attr "type" "div")])
                   1524: 
                   1525: ;; We must use `remi' not `modi' here, to ensure that `%' has the effects
                   1526: ;; specified by the ANSI C standard.
                   1527: 
                   1528: (define_insn "modsi3"
                   1529:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1530:         (mod:SI (match_operand:SI 1 "arith_operand" "dI")
                   1531:                 (match_operand:SI 2 "arith_operand" "dI")))]
                   1532:   ""
                   1533:   "remi        %2,%1,%0"
                   1534:   [(set_attr "type" "div")])
                   1535: 
                   1536: (define_insn "umodsi3"
                   1537:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1538:         (umod:SI (match_operand:SI 1 "arith_operand" "dI")
                   1539:                 (match_operand:SI 2 "arith_operand" "dI")))]
                   1540:   ""
                   1541:   "remo        %2,%1,%0"
                   1542:   [(set_attr "type" "div")])
                   1543: 
                   1544: ;; And instructions (with complement also).
                   1545: 
                   1546: (define_insn "andsi3"
                   1547:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1548:        (and:SI (match_operand:SI 1 "arith_operand" "%dI")
                   1549:                (match_operand:SI 2 "arith_operand" "dI")))]
                   1550:   ""
                   1551:   "*
                   1552: {
                   1553:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1554:     return \"and       %2,%1,%0\";
                   1555:   return \"and %1,%2,%0\";
                   1556: }")
                   1557: 
                   1558: (define_insn ""
                   1559:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1560:        (and:SI (not:SI (match_operand:SI 1 "arith_operand" "dI"))
                   1561:                (match_operand:SI 2 "arith_operand" "dI")))]
                   1562:   ""
                   1563:   "*
                   1564: {
                   1565:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1566:     return \"notand    %2,%1,%0\";
                   1567:   return \"andnot      %1,%2,%0\";
                   1568: }")
                   1569: 
                   1570: (define_insn ""
                   1571:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1572:        (ior:SI (not:SI (match_operand:SI 1 "arith_operand" "%dI"))
                   1573:                (not:SI (match_operand:SI 2 "arith_operand" "dI"))))]
                   1574:   ""
                   1575:   "*
                   1576: {
                   1577:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1578:     return \"nand      %2,%1,%0\";
                   1579:   return \"nand        %1,%2,%0\";
                   1580: }")
                   1581: 
                   1582: (define_insn ""
                   1583:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1584:        (not:SI (and:SI (match_operand:SI 1 "arith_operand" "%dI")
                   1585:                        (match_operand:SI 2 "arith_operand" "dI"))))]
                   1586:   ""
                   1587:   "*
                   1588: {
                   1589:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1590:     return \"nand      %2,%1,%0\";
                   1591:   return \"nand        %1,%2,%0\";
                   1592: }")
                   1593: 
                   1594: (define_insn ""
                   1595:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1596:        (ior:SI (match_operand:SI 1 "arith_operand" "dI")
                   1597:                (match_operand:SI 2 "power2_operand" "n")))]
                   1598:   ""
                   1599:   "*
                   1600: {
                   1601:   operands[2] = gen_rtx (CONST_INT, VOIDmode,
                   1602:                         bitpos (INTVAL (operands[2])));
                   1603:   return \"setbit      %2,%1,%0\";
                   1604: }")
                   1605: 
                   1606: (define_insn ""
                   1607:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1608:        (ior:SI (match_operand:SI 1 "power2_operand" "n")
                   1609:                (match_operand:SI 2 "arith_operand" "dI")))]
                   1610:   ""
                   1611:   "*
                   1612: {
                   1613:   operands[1] = gen_rtx (CONST_INT, VOIDmode,
                   1614:                         bitpos (INTVAL (operands[1])));
                   1615:   return \"setbit      %1,%2,%0\";
                   1616: }")
                   1617: 
                   1618: (define_insn "iorsi3"
                   1619:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1620:        (ior:SI (match_operand:SI 1 "arith_operand" "%dI")
                   1621:                (match_operand:SI 2 "arith_operand" "dI")))]
                   1622:   ""
                   1623:   "*
                   1624: {
                   1625:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1626:     return \"or        %2,%1,%0\";
                   1627:   return \"or  %1,%2,%0\";
                   1628: }")
                   1629: 
                   1630: (define_insn ""
                   1631:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1632:        (ior:SI (not:SI (match_operand:SI 1 "arith_operand" "dI"))
                   1633:                (match_operand:SI 2 "arith_operand" "dI")))]
                   1634:   ""
                   1635:   "*
                   1636: {
                   1637:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1638:     return \"notor     %2,%1,%0\";
                   1639:   return \"ornot       %1,%2,%0\";
                   1640: }")
                   1641: 
                   1642: (define_insn ""
                   1643:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1644:        (and:SI (not:SI (match_operand:SI 1 "arith_operand" "%dI"))
                   1645:                (not:SI (match_operand:SI 2 "arith_operand" "dI"))))]
                   1646:   ""
                   1647:   "*
                   1648: {
                   1649:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1650:     return \"nor       %2,%1,%0\";
                   1651:   return \"nor %1,%2,%0\";
                   1652: }")
                   1653: 
                   1654: (define_insn ""
                   1655:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1656:        (not:SI (ior:SI (match_operand:SI 1 "arith_operand" "%dI")
                   1657:                        (match_operand:SI 2 "arith_operand" "dI"))))]
                   1658:   ""
                   1659:   "*
                   1660: {
                   1661:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1662:     return \"nor       %2,%1,%0\";
                   1663:   return \"nor %1,%2,%0\";
                   1664: }")
                   1665: 
                   1666: (define_insn "xorsi3"
                   1667:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1668:        (xor:SI (match_operand:SI 1 "arith_operand" "%dI")
                   1669:                (match_operand:SI 2 "arith_operand" "dI")))]
                   1670:   ""
                   1671:   "*
                   1672: {
                   1673:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1674:     return \"xor       %2,%1,%0\";
                   1675:   return \"xor %1,%2,%0\";
                   1676: }")
                   1677: 
                   1678: (define_insn ""
                   1679:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1680:        (not:SI (xor:SI (match_operand:SI 1 "arith_operand" "%dI")
                   1681:                        (match_operand:SI 2 "arith_operand" "dI"))))]
                   1682:   ""
                   1683:   "*
                   1684: {
                   1685:   if (i960_bypass (insn, operands[1], operands[2], 0))
                   1686:     return \"xnor      %2,%1,%0\";
                   1687:   return \"xnor        %2,%1,%0\";
                   1688: }")
                   1689: 
                   1690: (define_insn "negsi2"
                   1691:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1692:        (neg:SI (match_operand:SI 1 "arith_operand" "dI")))]
                   1693:   ""
                   1694:   "subo        %1,0,%0"
                   1695:   [(set_attr "length" "1")])
                   1696: 
                   1697: (define_insn "one_cmplsi2"
                   1698:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1699:        (not:SI (match_operand:SI 1 "arith_operand" "dI")))]
                   1700:   ""
                   1701:   "not %1,%0"
                   1702:   [(set_attr "length" "1")])
                   1703: 
                   1704: ;; Floating point arithmetic instructions.
                   1705: 
                   1706: (define_insn "adddf3"
1.1.1.2 ! root     1707:   [(set (match_operand:DF 0 "register_operand" "=d*f")
1.1       root     1708:        (plus:DF (match_operand:DF 1 "fp_arith_operand" "%rGH")
                   1709:                 (match_operand:DF 2 "fp_arith_operand" "rGH")))]
                   1710:   "TARGET_NUMERICS"
                   1711:   "addrl       %1,%2,%0"
                   1712:   [(set_attr "type" "fpadd")])
                   1713: 
                   1714: (define_insn "addsf3"
1.1.1.2 ! root     1715:   [(set (match_operand:SF 0 "register_operand" "=d*f")
1.1       root     1716:        (plus:SF (match_operand:SF 1 "fp_arith_operand" "%rGH")
                   1717:                 (match_operand:SF 2 "fp_arith_operand" "rGH")))]
                   1718:   "TARGET_NUMERICS"
                   1719:   "addr        %1,%2,%0"
                   1720:   [(set_attr "type" "fpadd")])
                   1721: 
                   1722: 
                   1723: (define_insn "subdf3"
1.1.1.2 ! root     1724:   [(set (match_operand:DF 0 "register_operand" "=d*f")
1.1       root     1725:        (minus:DF (match_operand:DF 1 "fp_arith_operand" "rGH")
                   1726:                  (match_operand:DF 2 "fp_arith_operand" "rGH")))]
                   1727:   "TARGET_NUMERICS"
                   1728:   "subrl       %2,%1,%0"
                   1729:   [(set_attr "type" "fpadd")])
                   1730: 
                   1731: (define_insn "subsf3"
1.1.1.2 ! root     1732:   [(set (match_operand:SF 0 "register_operand" "=d*f")
1.1       root     1733:        (minus:SF (match_operand:SF 1 "fp_arith_operand" "rGH")
                   1734:                  (match_operand:SF 2 "fp_arith_operand" "rGH")))]
                   1735:   "TARGET_NUMERICS"
                   1736:   "subr        %2,%1,%0"
                   1737:   [(set_attr "type" "fpadd")])
                   1738: 
                   1739: 
                   1740: (define_insn "muldf3"
1.1.1.2 ! root     1741:   [(set (match_operand:DF 0 "register_operand" "=d*f")
1.1       root     1742:        (mult:DF (match_operand:DF 1 "fp_arith_operand" "rGH")
                   1743:                 (match_operand:DF 2 "fp_arith_operand" "rGH")))]
                   1744:   "TARGET_NUMERICS"
                   1745:   "mulrl       %1,%2,%0"
                   1746:   [(set_attr "type" "fpmul")])
                   1747: 
                   1748: (define_insn "mulsf3"
1.1.1.2 ! root     1749:   [(set (match_operand:SF 0 "register_operand" "=d*f")
1.1       root     1750:        (mult:SF (match_operand:SF 1 "fp_arith_operand" "rGH")
                   1751:                 (match_operand:SF 2 "fp_arith_operand" "rGH")))]
                   1752:   "TARGET_NUMERICS"
                   1753:   "mulr        %1,%2,%0"
                   1754:   [(set_attr "type" "fpmul")])
                   1755: 
                   1756: 
                   1757: (define_insn "divdf3"
1.1.1.2 ! root     1758:   [(set (match_operand:DF 0 "register_operand" "=d*f")
1.1       root     1759:        (div:DF (match_operand:DF 1 "fp_arith_operand" "rGH")
                   1760:                (match_operand:DF 2 "fp_arith_operand" "rGH")))]
                   1761:   "TARGET_NUMERICS"
                   1762:   "divrl       %2,%1,%0"
                   1763:   [(set_attr "type" "fpdiv")])
                   1764: 
                   1765: (define_insn "divsf3"
1.1.1.2 ! root     1766:   [(set (match_operand:SF 0 "register_operand" "=d*f")
1.1       root     1767:        (div:SF (match_operand:SF 1 "fp_arith_operand" "rGH")
                   1768:                (match_operand:SF 2 "fp_arith_operand" "rGH")))]
                   1769:   "TARGET_NUMERICS"
                   1770:   "divr        %2,%1,%0"
                   1771:   [(set_attr "type" "fpdiv")])
                   1772: 
                   1773: (define_insn "negdf2"
1.1.1.2 ! root     1774:   [(set (match_operand:DF 0 "register_operand" "=d,d*f")
1.1       root     1775:        (neg:DF (match_operand:DF 1 "register_operand" "d,r")))]
                   1776:   ""
                   1777:   "*
                   1778: {
                   1779:   if (which_alternative == 0)
                   1780:     {
                   1781:       if (REGNO (operands[0]) == REGNO (operands[1]))
                   1782:        return \"notbit 31,%D1,%D0\";
                   1783:       return \"mov     %1,%0\;notbit   31,%D1,%D0\";
                   1784:     }
                   1785:   return \"subrl       %1,0f0.0,%0\";
                   1786: }"
                   1787:   [(set_attr "type" "fpadd")])
                   1788: 
                   1789: (define_insn "negsf2"
1.1.1.2 ! root     1790:   [(set (match_operand:SF 0 "register_operand" "=d,d*f")
1.1       root     1791:        (neg:SF (match_operand:SF 1 "register_operand" "d,r")))]
                   1792:   ""
                   1793:   "@
                   1794:   notbit       31,%1,%0
                   1795:   subr %1,0f0.0,%0"
                   1796:   [(set_attr "type" "fpadd")])
                   1797: 
                   1798: ;;; The abs patterns also work even if the target machine doesn't have
                   1799: ;;; floating point, because in that case dstreg and srcreg will always be
                   1800: ;;; less than 32.
                   1801: 
                   1802: (define_insn "absdf2"
1.1.1.2 ! root     1803:   [(set (match_operand:DF 0 "register_operand" "=d*f")
1.1       root     1804:        (abs:DF (match_operand:DF 1 "register_operand" "df")))]
                   1805:   ""
                   1806:   "*
                   1807: {
                   1808:   int dstreg = REGNO (operands[0]);
                   1809:   int srcreg = REGNO (operands[1]);
                   1810: 
                   1811:   if (dstreg < 32)
                   1812:     {
                   1813:       if (srcreg < 32)
                   1814:        {
                   1815:          if (dstreg != srcreg)
                   1816:            output_asm_insn (\"mov      %1,%0\", operands);
                   1817:          return \"clrbit       31,%D1,%D0\";
                   1818:        }
                   1819:       /* Src is an fp reg.  */
                   1820:       return \"movrl   %1,%0\;clrbit   31,%D1,%D0\";
                   1821:     }
                   1822:   if (srcreg >= 32)
                   1823:     return \"cpysre    %1,0f0.0,%0\";
                   1824:   return \"movrl       %1,%0\;cpysre   %0,0f0.0,%0\";
                   1825: }"
                   1826:   [(set_attr "type" "multi")])
                   1827: 
                   1828: (define_insn "abssf2"
1.1.1.2 ! root     1829:   [(set (match_operand:SF 0 "register_operand" "=d*f")
1.1       root     1830:        (abs:SF (match_operand:SF 1 "register_operand" "df")))]
                   1831:   ""
                   1832:   "*
                   1833: {
                   1834:   int dstreg = REGNO (operands[0]);
                   1835:   int srcreg = REGNO (operands[1]);
                   1836: 
                   1837:   if (dstreg < 32 && srcreg < 32)
                   1838:     return \"clrbit    31,%1,%0\";
                   1839: 
                   1840:   if (dstreg >= 32 && srcreg >= 32)
                   1841:     return \"cpysre    %1,0f0.0,%0\";
                   1842: 
                   1843:   if (dstreg < 32)
                   1844:     return \"movr      %1,%0\;clrbit   31,%0,%0\";
                   1845: 
                   1846:   return \"movr        %1,%0\;cpysre   %0,0f0.0,%0\";
                   1847: }"
                   1848:   [(set_attr "type" "multi")])
                   1849: 
                   1850: ;; Tetra (16 byte) float support.
                   1851: 
                   1852: (define_insn "cmptf"
                   1853:   [(set (reg:CC 36)
                   1854:        (compare:CC (match_operand:TF 0 "register_operand" "f")
                   1855:                    (match_operand:TF 1 "nonmemory_operand" "fG")))]
                   1856:   "TARGET_NUMERICS"
                   1857:   "cmpr        %0,%1"
                   1858:   [(set_attr "type" "fpcc")])
                   1859: 
                   1860: (define_expand "movtf"
                   1861:   [(set (match_operand:TF 0 "general_operand" "")
                   1862:        (match_operand:TF 1 "fpmove_src_operand" ""))]
                   1863:   ""
                   1864:   "
                   1865: {
                   1866:   if (emit_move_sequence (operands, TFmode))
                   1867:     DONE;
                   1868: }")
                   1869: 
                   1870: (define_insn ""
1.1.1.2 ! root     1871:   [(set (match_operand:TF 0 "general_operand" "=r,*f,d,d,m,o")
        !          1872:        (match_operand:TF 1 "fpmove_src_operand" "r,GH,F,m,d,G"))]
1.1       root     1873:   "current_function_args_size == 0
                   1874:    && (register_operand (operands[0], TFmode)
                   1875:        || register_operand (operands[1], TFmode)
                   1876:        || operands[1] == CONST0_RTX (TFmode))"
                   1877:   "*
                   1878: {
                   1879:   switch (which_alternative)
                   1880:     {
                   1881:     case 0:
                   1882:       if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))
                   1883:        return \"movre  %1,%0\";
                   1884:       else
                   1885:        return \"movq   %1,%0\";
                   1886:     case 1:
                   1887:       return \"movre   %1,%0\";
                   1888:     case 2:
                   1889:       return i960_output_ldconst (operands[0], operands[1]);
                   1890:     case 3:
                   1891:       return \"ldq     %1,%0\";
                   1892:     case 4:
                   1893:       return \"stq     %1,%0\";
1.1.1.2 ! root     1894:     case 5:
        !          1895:       operands[1] = adj_offsettable_operand (operands[0], 4);
        !          1896:       operands[2] = adj_offsettable_operand (operands[0], 8);
        !          1897:       operands[3] = adj_offsettable_operand (operands[0], 12);
        !          1898:       return \"st      g14,%0\;st      g14,%1\;st      g14,%2\;st      g14,%3\";
1.1       root     1899:     }
                   1900: }"
1.1.1.2 ! root     1901:   [(set_attr "type" "move,move,load,fpload,fpstore,fpstore")])
1.1       root     1902: 
                   1903: (define_insn ""
1.1.1.2 ! root     1904:   [(set (match_operand:TF 0 "general_operand" "=r,*f,d,d,m")
1.1       root     1905:        (match_operand:TF 1 "fpmove_src_operand" "r,GH,F,m,d"))]
                   1906:   "current_function_args_size != 0
                   1907:    && (register_operand (operands[0], TFmode)
                   1908:        || register_operand (operands[1], TFmode))"
                   1909:   "*
                   1910: {
                   1911:   switch (which_alternative)
                   1912:     {
                   1913:     case 0:
                   1914:       if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))
                   1915:        return \"movre  %1,%0\";
                   1916:       else
                   1917:        return \"movq   %1,%0\";
                   1918:     case 1:
                   1919:       return \"movre   %1,%0\";
                   1920:     case 2:
                   1921:       return i960_output_ldconst (operands[0], operands[1]);
                   1922:     case 3:
                   1923:       return \"ldq     %1,%0\";
                   1924:     case 4:
                   1925:       return \"stq     %1,%0\";
                   1926:     }
                   1927: }"
                   1928:   [(set_attr "type" "move,move,load,fpload,fpstore")])
                   1929: 
                   1930: (define_insn "extendsftf2"
1.1.1.2 ! root     1931:   [(set (match_operand:TF 0 "register_operand" "=*f,d")
1.1       root     1932:        (float_extend:TF
                   1933:         (match_operand:SF 1 "register_operand" "d,f")))]
                   1934:   "TARGET_NUMERICS"
                   1935:   "@
                   1936:   movr %1,%0
                   1937:   movre        %1,%0"
                   1938:   [(set_attr "type" "fpmove")])
                   1939: 
                   1940: (define_insn "extenddftf2"
1.1.1.2 ! root     1941:   [(set (match_operand:TF 0 "register_operand" "=*f,d")
1.1       root     1942:        (float_extend:TF
                   1943:         (match_operand:DF 1 "register_operand" "d,f")))]
                   1944:   "TARGET_NUMERICS"
                   1945:   "@
                   1946:   movrl        %1,%0
                   1947:   movre        %1,%0"
                   1948:   [(set_attr "type" "fpmove")])
                   1949: 
                   1950: (define_insn "trunctfdf2"
                   1951:   [(set (match_operand:DF 0 "register_operand" "=d")
                   1952:        (float_truncate:DF
                   1953:         (match_operand:TF 1 "register_operand" "f")))]
                   1954:   "TARGET_NUMERICS"
                   1955:   "movrl       %1,%0"
                   1956:   [(set_attr "type" "fpmove")])
                   1957: 
                   1958: (define_insn "trunctfsf2"
                   1959:   [(set (match_operand:SF 0 "register_operand" "=d")
                   1960:        (float_truncate:SF
                   1961:         (match_operand:TF 1 "register_operand" "f")))]
                   1962:   "TARGET_NUMERICS"
                   1963:   "movr        %1,%0"
                   1964:   [(set_attr "type" "fpmove")])
                   1965: 
                   1966: (define_insn "floatsitf2"
                   1967:   [(set (match_operand:TF 0 "register_operand" "=f")
                   1968:        (float:TF (match_operand:SI 1 "register_operand" "d")))]
                   1969:   "TARGET_NUMERICS"
                   1970:   "cvtir       %1,%0"
                   1971:   [(set_attr "type" "fpcvt")])
                   1972: 
                   1973: (define_insn "fix_trunctfsi2"
                   1974:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1975:        (fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))]
                   1976:   "TARGET_NUMERICS"
                   1977:   "cvtzri      %1,%0"
                   1978:   [(set_attr "type" "fpcvt")])
                   1979: 
                   1980: (define_insn "fixuns_trunctfsi2"
                   1981:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1982:        (unsigned_fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))]
                   1983:   "TARGET_NUMERICS"
                   1984:   "cvtzri      %1,%0"
                   1985:   [(set_attr "type" "fpcvt")])
                   1986: 
                   1987: (define_insn "addtf3"
                   1988:   [(set (match_operand:TF 0 "register_operand" "=f")
                   1989:        (plus:TF (match_operand:TF 1 "nonmemory_operand" "%fG")
                   1990:                 (match_operand:TF 2 "nonmemory_operand" "fG")))]
                   1991:   "TARGET_NUMERICS"
                   1992:   "addr        %1,%2,%0"
                   1993:   [(set_attr "type" "fpadd")])
                   1994: 
                   1995: (define_insn "subtf3"
                   1996:   [(set (match_operand:TF 0 "register_operand" "=f")
                   1997:        (minus:TF (match_operand:TF 1 "nonmemory_operand" "fG")
                   1998:                  (match_operand:TF 2 "nonmemory_operand" "fG")))]
                   1999:   "TARGET_NUMERICS"
                   2000:   "subr        %2,%1,%0"
                   2001:   [(set_attr "type" "fpadd")])
                   2002: 
                   2003: (define_insn "multf3"
                   2004:   [(set (match_operand:TF 0 "register_operand" "=f")
                   2005:        (mult:TF (match_operand:TF 1 "nonmemory_operand" "fG")
                   2006:                 (match_operand:TF 2 "nonmemory_operand" "fG")))]
                   2007:   "TARGET_NUMERICS"
                   2008:   "mulr        %1,%2,%0"
                   2009:   [(set_attr "type" "fpmul")])
                   2010: 
                   2011: (define_insn "divtf3"
                   2012:   [(set (match_operand:TF 0 "register_operand" "=f")
                   2013:        (div:TF (match_operand:TF 1 "nonmemory_operand" "fG")
                   2014:                (match_operand:TF 2 "nonmemory_operand" "fG")))]
                   2015:   "TARGET_NUMERICS"
                   2016:   "divr        %2,%1,%0"
                   2017:   [(set_attr "type" "fpdiv")])
                   2018: 
                   2019: (define_insn "negtf2"
                   2020:   [(set (match_operand:TF 0 "register_operand" "=f")
                   2021:        (neg:TF (match_operand:TF 1 "register_operand" "f")))]
                   2022:   "TARGET_NUMERICS"
                   2023:   "subr        %1,0f0.0,%0"
                   2024:   [(set_attr "type" "fpadd")])
                   2025: 
                   2026: (define_insn "abstf2"
                   2027:   [(set (match_operand:TF 0 "register_operand" "=f")
                   2028:        (abs:TF (match_operand:TF 1 "register_operand" "f")))]
                   2029:   "(TARGET_NUMERICS)"
                   2030:   "cpysre      %1,0f0.0,%0"
                   2031:   [(set_attr "type" "fpmove")])
                   2032: 
                   2033: ;; Arithmetic shift instructions.
                   2034: 
                   2035: (define_insn "ashlsi3"
                   2036:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2037:        (ashift:SI (match_operand:SI 1 "arith_operand" "dI")
                   2038:                   (match_operand:SI 2 "arith_operand" "dI")))]
                   2039:   ""
                   2040:   "shli        %2,%1,%0"
                   2041:   [(set_attr "type" "alu2")])
                   2042: 
                   2043: (define_insn "ashrsi3"
                   2044:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2045:        (ashiftrt:SI (match_operand:SI 1 "arith_operand" "dI")
                   2046:                     (match_operand:SI 2 "arith_operand" "dI")))]
                   2047:   ""
                   2048:   "shri        %2,%1,%0"
                   2049:   [(set_attr "type" "alu2")])
                   2050: 
                   2051: (define_insn "lshrsi3"
                   2052:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2053:        (lshiftrt:SI (match_operand:SI 1 "arith_operand" "dI")
                   2054:                   (match_operand:SI 2 "arith_operand" "dI")))]
                   2055:   ""
                   2056:   "shro        %2,%1,%0"
                   2057:   [(set_attr "type" "alu2")])
                   2058: 
                   2059: ;; Unconditional and other jump instructions.
                   2060: 
                   2061: (define_insn "jump"
                   2062:   [(set (pc)
                   2063:        (label_ref (match_operand 0 "" "")))]
                   2064:   ""
                   2065:   "b   %l0"
                   2066:   [(set_attr "type" "branch")])
                   2067: 
                   2068: (define_insn "indirect_jump"
1.1.1.2 ! root     2069:   [(set (pc) (match_operand:SI 0 "address_operand" "p"))]
1.1       root     2070:   ""
1.1.1.2 ! root     2071:   "bx  %a0"
1.1       root     2072:   [(set_attr "type" "branch")])
                   2073: 
                   2074: (define_insn "tablejump"
                   2075:   [(set (pc) (match_operand:SI 0 "register_operand" "d"))
                   2076:    (use (label_ref (match_operand 1 "" "")))]
                   2077:   ""
                   2078:   "bx  (%0)"
                   2079:   [(set_attr "type" "branch")])
                   2080: 
                   2081: ;;- jump to subroutine
                   2082: 
                   2083: (define_expand "call"
1.1.1.2 ! root     2084:   [(call (match_operand:SI 0 "general_operand" "g")
        !          2085:         (match_operand:SI 1 "immediate_operand" "i"))]
1.1       root     2086:   ""
                   2087:   "
                   2088: {
1.1.1.2 ! root     2089:   emit_insn (gen_call_internal (operands[0], operands[1],
        !          2090:                                virtual_outgoing_args_rtx));
1.1       root     2091:   DONE;
                   2092: }")
                   2093: 
1.1.1.2 ! root     2094: (define_insn "call_internal"
1.1       root     2095:   [(call (match_operand:SI 0 "general_operand" "g")
1.1.1.2 ! root     2096:         (match_operand:SI 1 "immediate_operand" "i"))
        !          2097:    (use (match_operand:SI 2 "address_operand" "p"))
        !          2098:    (clobber (match_scratch:SI 3 "=&d"))]
1.1       root     2099:   ""
1.1.1.2 ! root     2100:   "* return i960_output_call_insn (operands[0], operands[1], operands[2],
        !          2101:                                   operands[3], insn);"
1.1       root     2102:   [(set_attr "type" "call")])
                   2103: 
                   2104: (define_expand "call_value"
                   2105:   [(set (match_operand 0 "register_operand" "=d")
                   2106:        (call (match_operand:SI 1 "general_operand" "g")
                   2107:              (match_operand:SI 2 "immediate_operand" "i")))]
                   2108:   ""
                   2109:   "
                   2110: {
1.1.1.2 ! root     2111:   emit_insn (gen_call_value_internal (operands[0], operands[1], operands[2],
        !          2112:                                      virtual_outgoing_args_rtx));
1.1       root     2113:   DONE;
                   2114: }")
                   2115: 
1.1.1.2 ! root     2116: (define_insn "call_value_internal"
1.1       root     2117:   [(set (match_operand 0 "register_operand" "=d")
                   2118:        (call (match_operand:SI 1 "general_operand" "g")
1.1.1.2 ! root     2119:              (match_operand:SI 2 "immediate_operand" "i")))
        !          2120:    (use (match_operand:SI 3 "address_operand" "p"))
        !          2121:    (clobber (match_scratch:SI 4 "=&d"))]
1.1       root     2122:   ""
1.1.1.2 ! root     2123:   "* return i960_output_call_insn (operands[1], operands[2], operands[3],
        !          2124:                                   operands[4], insn);"
1.1       root     2125:   [(set_attr "type" "call")])
                   2126: 
                   2127: (define_insn "return"
                   2128:   [(return)]
                   2129:   ""
                   2130:   "* return i960_output_ret_insn (insn);"
                   2131:   [(set_attr "type" "branch")])
                   2132: 
                   2133: (define_insn "nop"
                   2134:   [(const_int 0)]
                   2135:   ""
                   2136:   "")
                   2137: 
                   2138: ;; Various peephole optimizations for multiple-word moves, loads, and stores.
                   2139: ;; Multiple register moves.
                   2140: 
                   2141: ;; Matched 5/28/91
                   2142: (define_peephole
                   2143:   [(set (match_operand:SI 0 "register_operand" "=r")
                   2144:        (match_operand:SI 1 "register_operand" "r"))
                   2145:    (set (match_operand:SI 2 "register_operand" "=r")
                   2146:        (match_operand:SI 3 "register_operand" "r"))
                   2147:    (set (match_operand:SI 4 "register_operand" "=r")
                   2148:        (match_operand:SI 5 "register_operand" "r"))
                   2149:    (set (match_operand:SI 6 "register_operand" "=r")
                   2150:        (match_operand:SI 7 "register_operand" "r"))]
                   2151:   "((REGNO (operands[0]) & 3) == 0)
                   2152:    && ((REGNO (operands[1]) & 3) == 0)
                   2153:    && (REGNO (operands[0]) + 1 == REGNO (operands[2]))
                   2154:    && (REGNO (operands[1]) + 1 == REGNO (operands[3]))
                   2155:    && (REGNO (operands[0]) + 2 == REGNO (operands[4]))
                   2156:    && (REGNO (operands[1]) + 2 == REGNO (operands[5]))
                   2157:    && (REGNO (operands[0]) + 3 == REGNO (operands[6]))
                   2158:    && (REGNO (operands[1]) + 3 == REGNO (operands[7]))"
                   2159:   "movq        %1,%0")
                   2160: 
                   2161: ;; Matched 4/17/92
                   2162: (define_peephole
                   2163:   [(set (match_operand:DI 0 "register_operand" "=r")
                   2164:        (match_operand:DI 1 "register_operand" "r"))
                   2165:    (set (match_operand:DI 2 "register_operand" "=r")
                   2166:        (match_operand:DI 3 "register_operand" "r"))]
                   2167:   "((REGNO (operands[0]) & 3) == 0)
                   2168:    && ((REGNO (operands[1]) & 3) == 0)
                   2169:    && (REGNO (operands[0]) + 2 == REGNO (operands[2]))
                   2170:    && (REGNO (operands[1]) + 2 == REGNO (operands[3]))"
                   2171:   "movq        %1,%0")
                   2172: 
                   2173: ;; Matched 4/17/92
                   2174: (define_peephole
                   2175:   [(set (match_operand:DI 0 "register_operand" "=r")
                   2176:        (match_operand:DI 1 "register_operand" "r"))
                   2177:    (set (match_operand:SI 2 "register_operand" "=r")
                   2178:        (match_operand:SI 3 "register_operand" "r"))
                   2179:    (set (match_operand:SI 4 "register_operand" "=r")
                   2180:        (match_operand:SI 5 "register_operand" "r"))]
                   2181:   "((REGNO (operands[0]) & 3) == 0)
                   2182:    && ((REGNO (operands[1]) & 3) == 0)
                   2183:    && (REGNO (operands[0]) + 2 == REGNO (operands[2]))
                   2184:    && (REGNO (operands[1]) + 2 == REGNO (operands[3]))
                   2185:    && (REGNO (operands[0]) + 3 == REGNO (operands[4]))
                   2186:    && (REGNO (operands[1]) + 3 == REGNO (operands[5]))"
                   2187:   "movq        %1,%0")
                   2188: 
                   2189: ;; Matched 4/17/92
                   2190: (define_peephole
                   2191:   [(set (match_operand:SI 0 "register_operand" "=r")
                   2192:        (match_operand:SI 1 "register_operand" "r"))
                   2193:    (set (match_operand:SI 2 "register_operand" "=r")
                   2194:        (match_operand:SI 3 "register_operand" "r"))
                   2195:    (set (match_operand:DI 4 "register_operand" "=r")
                   2196:        (match_operand:DI 5 "register_operand" "r"))]
                   2197:   "((REGNO (operands[0]) & 3) == 0)
                   2198:    && ((REGNO (operands[1]) & 3) == 0)
                   2199:    && (REGNO (operands[0]) + 1 == REGNO (operands[2]))
                   2200:    && (REGNO (operands[1]) + 1 == REGNO (operands[3]))
                   2201:    && (REGNO (operands[0]) + 2 == REGNO (operands[4]))
                   2202:    && (REGNO (operands[1]) + 2 == REGNO (operands[5]))"
                   2203:   "movq        %1,%0")
                   2204: 
                   2205: ;; Matched 4/17/92
                   2206: (define_peephole
                   2207:   [(set (match_operand:DI 0 "register_operand" "=r")
                   2208:        (match_operand:DI 1 "register_operand" "r"))
                   2209:    (set (match_operand:SI 2 "register_operand" "=r")
                   2210:        (match_operand:SI 3 "register_operand" "r"))]
                   2211:   "((REGNO (operands[0]) & 3) == 0)
                   2212:    && ((REGNO (operands[1]) & 3) == 0)
                   2213:    && (REGNO (operands[0]) + 2 == REGNO (operands[2]))
                   2214:    && (REGNO (operands[1]) + 2 == REGNO (operands[3]))"
                   2215:   "movt        %1,%0")
                   2216: 
                   2217: ;; Matched 5/28/91
                   2218: (define_peephole
                   2219:   [(set (match_operand:SI 0 "register_operand" "=r")
                   2220:        (match_operand:SI 1 "register_operand" "r"))
                   2221:    (set (match_operand:SI 2 "register_operand" "=r")
                   2222:        (match_operand:SI 3 "register_operand" "r"))
                   2223:    (set (match_operand:SI 4 "register_operand" "=r")
                   2224:        (match_operand:SI 5 "register_operand" "r"))]
                   2225:   "((REGNO (operands[0]) & 3) == 0)
                   2226:    && ((REGNO (operands[1]) & 3) == 0)
                   2227:    && (REGNO (operands[0]) + 1 == REGNO (operands[2]))
                   2228:    && (REGNO (operands[1]) + 1 == REGNO (operands[3]))
                   2229:    && (REGNO (operands[0]) + 2 == REGNO (operands[4]))
                   2230:    && (REGNO (operands[1]) + 2 == REGNO (operands[5]))"
                   2231:   "movt        %1,%0")
                   2232: 
                   2233: ;; Matched 5/28/91
                   2234: (define_peephole
                   2235:   [(set (match_operand:SI 0 "register_operand" "=r")
                   2236:        (match_operand:SI 1 "register_operand" "r"))
                   2237:    (set (match_operand:SI 2 "register_operand" "=r")
                   2238:        (match_operand:SI 3 "register_operand" "r"))]
                   2239:   "((REGNO (operands[0]) & 1) == 0)
                   2240:    && ((REGNO (operands[1]) & 1) == 0)
                   2241:    && (REGNO (operands[0]) + 1 == REGNO (operands[2]))
                   2242:    && (REGNO (operands[1]) + 1 == REGNO (operands[3]))"
                   2243:   "movl        %1,%0")
                   2244: 
                   2245: ; Multiple register loads.
                   2246: 
                   2247: ;; Matched 6/15/91
                   2248: (define_peephole
                   2249:   [(set (match_operand:SI 0 "register_operand" "=r")
                   2250:        (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "r")
                   2251:                         (match_operand:SI 2 "immediate_operand" "n"))))
                   2252:    (set (match_operand:SI 3 "register_operand" "=r")
                   2253:        (mem:SI (plus:SI (match_dup 1)
                   2254:                         (match_operand:SI 4 "immediate_operand" "n"))))
                   2255:    (set (match_operand:SI 5 "register_operand" "=r")
                   2256:        (mem:SI (plus:SI (match_dup 1)
                   2257:                         (match_operand:SI 6 "immediate_operand" "n"))))
                   2258:    (set (match_operand:SI 7 "register_operand" "=r")
                   2259:        (mem:SI (plus:SI (match_dup 1)
                   2260:                         (match_operand:SI 8 "immediate_operand" "n"))))]
                   2261:   "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0)
                   2262:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2263:    && (REGNO (operands[0]) + 1 == REGNO (operands[3]))
                   2264:    && (REGNO (operands[1]) != REGNO (operands[3]))
                   2265:    && (REGNO (operands[0]) + 2 == REGNO (operands[5]))
                   2266:    && (REGNO (operands[1]) != REGNO (operands[5]))
                   2267:    && (REGNO (operands[0]) + 3 == REGNO (operands[7]))
                   2268:    && (INTVAL (operands[2]) + 4 == INTVAL (operands[4]))
                   2269:    && (INTVAL (operands[2]) + 8 == INTVAL (operands[6]))
                   2270:    && (INTVAL (operands[2]) + 12 == INTVAL (operands[8])))"
                   2271:   "ldq %2(%1),%0")
                   2272: 
                   2273: ;; Matched 5/28/91
                   2274: (define_peephole
                   2275:   [(set (match_operand:DF 0 "register_operand" "=d")
                   2276:        (mem:DF (plus:SI (match_operand:SI 1 "register_operand" "d")
                   2277:                         (match_operand:SI 2 "immediate_operand" "n"))))
                   2278:    (set (match_operand:DF 3 "register_operand" "=d")
                   2279:        (mem:DF (plus:SI (match_dup 1)
                   2280:                         (match_operand:SI 4 "immediate_operand" "n"))))]
                   2281:   "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0)
                   2282:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2283:    && (REGNO (operands[0]) + 2 == REGNO (operands[3]))
                   2284:    && (REGNO (operands[1]) != REGNO (operands[3]))
                   2285:    && (INTVAL (operands[2]) + 8 == INTVAL (operands[4])))"
                   2286:   "ldq %2(%1),%0")
                   2287: 
                   2288: ;; Matched 1/24/92
                   2289: (define_peephole
                   2290:   [(set (match_operand:DI 0 "register_operand" "=d")
                   2291:        (mem:DI (plus:SI (match_operand:SI 1 "register_operand" "d")
                   2292:                         (match_operand:SI 2 "immediate_operand" "n"))))
                   2293:    (set (match_operand:DI 3 "register_operand" "=d")
                   2294:        (mem:DI (plus:SI (match_dup 1)
                   2295:                         (match_operand:SI 4 "immediate_operand" "n"))))]
                   2296:   "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0)
                   2297:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2298:    && (REGNO (operands[0]) + 2 == REGNO (operands[3]))
                   2299:    && (REGNO (operands[1]) != REGNO (operands[3]))
                   2300:    && (INTVAL (operands[2]) + 8 == INTVAL (operands[4])))"
                   2301:   "ldq %2(%1),%0")
                   2302: 
                   2303: ;; Matched 4/17/92
                   2304: (define_peephole
                   2305:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2306:        (mem:SI (match_operand:SI 1 "register_operand" "d")))
                   2307:    (set (match_operand:SI 2 "register_operand" "=d")
                   2308:        (mem:SI (plus:SI (match_dup 1)
                   2309:                         (match_operand:SI 3 "immediate_operand" "n"))))
                   2310:    (set (match_operand:SI 4 "register_operand" "=d")
                   2311:        (mem:SI (plus:SI (match_dup 1)
                   2312:                         (match_operand:SI 5 "immediate_operand" "n"))))
                   2313:    (set (match_operand:SI 6 "register_operand" "=d")
                   2314:        (mem:SI (plus:SI (match_dup 1)
                   2315:                         (match_operand:SI 7 "immediate_operand" "n"))))]
                   2316:   "(i960_si_ti (operands[1], 0) && ((REGNO (operands[0]) & 3) == 0)
                   2317:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2318:    && (REGNO (operands[0]) + 1 == REGNO (operands[2]))
                   2319:    && (REGNO (operands[1]) != REGNO (operands[2]))
                   2320:    && (REGNO (operands[0]) + 2 == REGNO (operands[4]))
                   2321:    && (REGNO (operands[1]) != REGNO (operands[4]))
                   2322:    && (REGNO (operands[0]) + 3 == REGNO (operands[6]))
                   2323:    && (INTVAL (operands[3]) == 4)
                   2324:    && (INTVAL (operands[5]) == 8)
                   2325:    && (INTVAL (operands[7]) == 12))"
                   2326:   "ldq (%1),%0")
                   2327: 
                   2328: ;; Matched 5/28/91
                   2329: (define_peephole
                   2330:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2331:        (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "d")
                   2332:                         (match_operand:SI 2 "immediate_operand" "n"))))
                   2333:    (set (match_operand:SI 3 "register_operand" "=d")
                   2334:        (mem:SI (plus:SI (match_dup 1)
                   2335:                         (match_operand:SI 4 "immediate_operand" "n"))))
                   2336:    (set (match_operand:SI 5 "register_operand" "=d")
                   2337:        (mem:SI (plus:SI (match_dup 1)
                   2338:                         (match_operand:SI 6 "immediate_operand" "n"))))]
                   2339:   "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0)
                   2340:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2341:    && (REGNO (operands[0]) + 1 == REGNO (operands[3]))
                   2342:    && (REGNO (operands[1]) != REGNO (operands[3]))
                   2343:    && (REGNO (operands[0]) + 2 == REGNO (operands[5]))
                   2344:    && (INTVAL (operands[2]) + 4 == INTVAL (operands[4]))
                   2345:    && (INTVAL (operands[2]) + 8 == INTVAL (operands[6])))"
                   2346:   "ldt %2(%1),%0")
                   2347: 
                   2348: ;; Matched 6/15/91
                   2349: (define_peephole
                   2350:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2351:        (mem:SI (match_operand:SI 1 "register_operand" "d")))
                   2352:    (set (match_operand:SI 2 "register_operand" "=d")
                   2353:        (mem:SI (plus:SI (match_dup 1)
                   2354:                         (match_operand:SI 3 "immediate_operand" "n"))))
                   2355:    (set (match_operand:SI 4 "register_operand" "=d")
                   2356:        (mem:SI (plus:SI (match_dup 1)
                   2357:                         (match_operand:SI 5 "immediate_operand" "n"))))]
                   2358:   "(i960_si_ti (operands[1], 0) && ((REGNO (operands[0]) & 3) == 0)
                   2359:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2360:    && (REGNO (operands[0]) + 1 == REGNO (operands[2]))
                   2361:    && (REGNO (operands[1]) != REGNO (operands[2]))
                   2362:    && (REGNO (operands[0]) + 2 == REGNO (operands[4]))
                   2363:    && (INTVAL (operands[3]) == 4)
                   2364:    && (INTVAL (operands[5]) == 8))"
                   2365:   "ldt (%1),%0")
                   2366: 
                   2367: ;; Matched 5/28/91
                   2368: (define_peephole
                   2369:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2370:        (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "d")
                   2371:                         (match_operand:SI 2 "immediate_operand" "n"))))
                   2372:    (set (match_operand:SI 3 "register_operand" "=d")
                   2373:        (mem:SI (plus:SI (match_dup 1)
                   2374:                         (match_operand:SI 4 "immediate_operand" "n"))))]
                   2375:   "(i960_si_di (operands[1], operands[2]) && ((REGNO (operands[0]) & 1) == 0)
                   2376:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2377:    && (REGNO (operands[0]) + 1 == REGNO (operands[3]))
                   2378:    && (INTVAL (operands[2]) + 4 == INTVAL (operands[4])))"
                   2379:   "ldl %2(%1),%0")
                   2380: 
                   2381: ;; Matched 5/28/91
                   2382: (define_peephole
                   2383:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2384:        (mem:SI (match_operand:SI 1 "register_operand" "d")))
                   2385:    (set (match_operand:SI 2 "register_operand" "=d")
                   2386:        (mem:SI (plus:SI (match_dup 1)
                   2387:                         (match_operand:SI 3 "immediate_operand" "n"))))]
                   2388:   "(i960_si_di (operands[1], 0) && ((REGNO (operands[0]) & 1) == 0)
                   2389:    && (REGNO (operands[1]) != REGNO (operands[0]))
                   2390:    && (REGNO (operands[0]) + 1 == REGNO (operands[2]))
                   2391:    && (INTVAL (operands[3]) == 4))"
                   2392:   "ldl (%1),%0")
                   2393: 
                   2394: ; Multiple register stores.
                   2395: 
                   2396: ;; Matched 5/28/91
                   2397: (define_peephole
                   2398:   [(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "d")
                   2399:                         (match_operand:SI 1 "immediate_operand" "n")))
                   2400:        (match_operand:SI 2 "register_operand" "d"))
                   2401:    (set (mem:SI (plus:SI (match_dup 0)
                   2402:                         (match_operand:SI 3 "immediate_operand" "n")))
                   2403:        (match_operand:SI 4 "register_operand" "d"))
                   2404:    (set (mem:SI (plus:SI (match_dup 0)
                   2405:                         (match_operand:SI 5 "immediate_operand" "n")))
                   2406:        (match_operand:SI 6 "register_operand" "d"))
                   2407:    (set (mem:SI (plus:SI (match_dup 0)
                   2408:                         (match_operand:SI 7 "immediate_operand" "n")))
                   2409:        (match_operand:SI 8 "register_operand" "d"))]
                   2410:   "(i960_si_ti (operands[0], operands[1]) && ((REGNO (operands[2]) & 3) == 0)
                   2411:    && (REGNO (operands[2]) + 1 == REGNO (operands[4]))
                   2412:    && (REGNO (operands[2]) + 2 == REGNO (operands[6]))
                   2413:    && (REGNO (operands[2]) + 3 == REGNO (operands[8]))
                   2414:    && (INTVAL (operands[1]) + 4 == INTVAL (operands[3]))
                   2415:    && (INTVAL (operands[1]) + 8 == INTVAL (operands[5]))
                   2416:    && (INTVAL (operands[1]) + 12 == INTVAL (operands[7])))"
                   2417:   "stq %2,%1(%0)")
                   2418: 
                   2419: ;; Matched 6/16/91
                   2420: (define_peephole
                   2421:   [(set (mem:DF (plus:SI (match_operand:SI 0 "register_operand" "d")
                   2422:                         (match_operand:SI 1 "immediate_operand" "n")))
                   2423:        (match_operand:DF 2 "register_operand" "d"))
                   2424:    (set (mem:DF (plus:SI (match_dup 0)
                   2425:                         (match_operand:SI 3 "immediate_operand" "n")))
                   2426:        (match_operand:DF 4 "register_operand" "d"))]
                   2427:   "(i960_si_ti (operands[0], operands[1]) && ((REGNO (operands[2]) & 3) == 0)
                   2428:    && (REGNO (operands[2]) + 2 == REGNO (operands[4]))
                   2429:    && (INTVAL (operands[1]) + 8 == INTVAL (operands[3])))"
                   2430:   "stq %2,%1(%0)")
                   2431: 
                   2432: ;; Matched 4/17/92
                   2433: (define_peephole
                   2434:   [(set (mem:DI (plus:SI (match_operand:SI 0 "register_operand" "d")
                   2435:                         (match_operand:SI 1 "immediate_operand" "n")))
                   2436:        (match_operand:DI 2 "register_operand" "d"))
                   2437:    (set (mem:DI (plus:SI (match_dup 0)
                   2438:                         (match_operand:SI 3 "immediate_operand" "n")))
                   2439:        (match_operand:DI 4 "register_operand" "d"))]
                   2440:   "(i960_si_ti (operands[0], operands[1]) && ((REGNO (operands[2]) & 3) == 0)
                   2441:    && (REGNO (operands[2]) + 2 == REGNO (operands[4]))
                   2442:    && (INTVAL (operands[1]) + 8 == INTVAL (operands[3])))"
                   2443:   "stq %2,%1(%0)")
                   2444: 
                   2445: ;; Matched 1/23/92
                   2446: (define_peephole
                   2447:   [(set (mem:SI (match_operand:SI 0 "register_operand" "d"))
                   2448:        (match_operand:SI 1 "register_operand" "d"))
                   2449:    (set (mem:SI (plus:SI (match_dup 0)
                   2450:                         (match_operand:SI 2 "immediate_operand" "n")))
                   2451:        (match_operand:SI 3 "register_operand" "d"))
                   2452:    (set (mem:SI (plus:SI (match_dup 0)
                   2453:                         (match_operand:SI 4 "immediate_operand" "n")))
                   2454:        (match_operand:SI 5 "register_operand" "d"))
                   2455:    (set (mem:SI (plus:SI (match_dup 0)
                   2456:                         (match_operand:SI 6 "immediate_operand" "n")))
                   2457:        (match_operand:SI 7 "register_operand" "d"))]
                   2458:   "(i960_si_ti (operands[0], 0) && ((REGNO (operands[1]) & 3) == 0)
                   2459:    && (REGNO (operands[1]) + 1 == REGNO (operands[3]))
                   2460:    && (REGNO (operands[1]) + 2 == REGNO (operands[5]))
                   2461:    && (REGNO (operands[1]) + 3 == REGNO (operands[7]))
                   2462:    && (INTVAL (operands[2]) == 4)
                   2463:    && (INTVAL (operands[4]) == 8)
                   2464:    && (INTVAL (operands[6]) == 12))"
                   2465:   "stq %1,(%0)")
                   2466: 
                   2467: ;; Matched 5/29/91
                   2468: (define_peephole
                   2469:   [(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "d")
                   2470:                         (match_operand:SI 1 "immediate_operand" "n")))
                   2471:        (match_operand:SI 2 "register_operand" "d"))
                   2472:    (set (mem:SI (plus:SI (match_dup 0)
                   2473:                         (match_operand:SI 3 "immediate_operand" "n")))
                   2474:        (match_operand:SI 4 "register_operand" "d"))
                   2475:    (set (mem:SI (plus:SI (match_dup 0)
                   2476:                         (match_operand:SI 5 "immediate_operand" "n")))
                   2477:        (match_operand:SI 6 "register_operand" "d"))]
                   2478:   "(i960_si_ti (operands[0], operands[1]) && ((REGNO (operands[2]) & 3) == 0)
                   2479:    && (REGNO (operands[2]) + 1 == REGNO (operands[4]))
                   2480:    && (REGNO (operands[2]) + 2 == REGNO (operands[6]))
                   2481:    && (INTVAL (operands[1]) + 4 == INTVAL (operands[3]))
                   2482:    && (INTVAL (operands[1]) + 8 == INTVAL (operands[5])))"
                   2483:   "stt %2,%1(%0)")
                   2484: 
                   2485: ;; Matched 5/29/91
                   2486: (define_peephole
                   2487:   [(set (mem:SI (match_operand:SI 0 "register_operand" "d"))
                   2488:        (match_operand:SI 1 "register_operand" "d"))
                   2489:    (set (mem:SI (plus:SI (match_dup 0)
                   2490:                         (match_operand:SI 2 "immediate_operand" "n")))
                   2491:        (match_operand:SI 3 "register_operand" "d"))
                   2492:    (set (mem:SI (plus:SI (match_dup 0)
                   2493:                         (match_operand:SI 4 "immediate_operand" "n")))
                   2494:        (match_operand:SI 5 "register_operand" "d"))]
                   2495:   "(i960_si_ti (operands[0], 0) && ((REGNO (operands[1]) & 3) == 0)
                   2496:    && (REGNO (operands[1]) + 1 == REGNO (operands[3]))
                   2497:    && (REGNO (operands[1]) + 2 == REGNO (operands[5]))
                   2498:    && (INTVAL (operands[2]) == 4)
                   2499:    && (INTVAL (operands[4]) == 8))"
                   2500:   "stt %1,(%0)")
                   2501: 
                   2502: ;; Matched 5/28/91
                   2503: (define_peephole
                   2504:   [(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "d")
                   2505:                         (match_operand:SI 1 "immediate_operand" "n")))
                   2506:        (match_operand:SI 2 "register_operand" "d"))
                   2507:    (set (mem:SI (plus:SI (match_dup 0)
                   2508:                         (match_operand:SI 3 "immediate_operand" "n")))
                   2509:        (match_operand:SI 4 "register_operand" "d"))]
                   2510:   "(i960_si_di (operands[0], operands[1]) && ((REGNO (operands[2]) & 1) == 0)
                   2511:    && (REGNO (operands[2]) + 1 == REGNO (operands[4]))
                   2512:    && (INTVAL (operands[1]) + 4 == INTVAL (operands[3])))"
                   2513:   "stl %2,%1(%0)")
                   2514: 
                   2515: ;; Matched 5/28/91
                   2516: (define_peephole
                   2517:   [(set (mem:SI (match_operand:SI 0 "register_operand" "d"))
                   2518:        (match_operand:SI 1 "register_operand" "d"))
                   2519:    (set (mem:SI (plus:SI (match_dup 0)
                   2520:                         (match_operand:SI 2 "immediate_operand" "n")))
                   2521:        (match_operand:SI 3 "register_operand" "d"))]
                   2522:   "(i960_si_di (operands[0], 0) && ((REGNO (operands[1]) & 1) == 0)
                   2523:    && (REGNO (operands[1]) + 1 == REGNO (operands[3]))
                   2524:    && (INTVAL (operands[2]) == 4))"
                   2525:   "stl %1,(%0)")
                   2526: 
                   2527: ;;- Local variables:
                   2528: ;;- mode:emacs-lisp
                   2529: ;;- comment-start: ";;- "
                   2530: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
                   2531: ;;- eval: (modify-syntax-entry ?[ "(]")
                   2532: ;;- eval: (modify-syntax-entry ?] ")[")
                   2533: ;;- eval: (modify-syntax-entry ?{ "(}")
                   2534: ;;- eval: (modify-syntax-entry ?} "){")
                   2535: ;;- End:

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.