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

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

unix.superglobalmegacorp.com

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