Annotation of GNUtools/cc/config/a29k/a29k.md, revision 1.1

1.1     ! root        1: ;;- Machine description for AMD Am29000 for GNU C compiler
        !             2: ;;   Copyright (C) 1991, 1992 Free Software Foundation, Inc.
        !             3: ;;   Contributed by Richard Kenner ([email protected])
        !             4: 
        !             5: ;; This file is part of GNU CC.
        !             6: 
        !             7: ;; GNU CC is free software; you can redistribute it and/or modify
        !             8: ;; it under the terms of the GNU General Public License as published by
        !             9: ;; the Free Software Foundation; either version 2, or (at your option)
        !            10: ;; any later version.
        !            11: 
        !            12: ;; GNU CC is distributed in the hope that it will be useful,
        !            13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            15: ;; GNU General Public License for more details.
        !            16: 
        !            17: ;; You should have received a copy of the GNU General Public License
        !            18: ;; along with GNU CC; see the file COPYING.  If not, write to
        !            19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            20: 
        !            21: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
        !            22: 
        !            23: ;; The insns in this file are presented in the same order as the AMD 29000
        !            24: ;; User's Manual (i.e., alphabetical by machine op-code).
        !            25: ;;
        !            26: ;; DEFINE_EXPAND's are located near the first occurrence of the major insn
        !            27: ;; that they generate.
        !            28: 
        !            29: ;; The only attribute we have is the type.  We only care about calls, branches,
        !            30: ;; loads, stores, floating-point operations, and multi-word insns.
        !            31: ;; Everything else is miscellaneous.
        !            32: 
        !            33: (define_attr "type"
        !            34:   "call,branch,load,store,fadd,fmul,fam,fdiv,fsqrt,dmul,dam,ddiv,dsqrt,multi,misc"
        !            35:   (const_string "misc"))
        !            36: 
        !            37: ;; ASM insns cannot go into a delay slot, so call them "multi".
        !            38: (define_asm_attributes [(set_attr "type" "multi")])
        !            39: 
        !            40: (define_attr "in_delay_slot" "yes,no"
        !            41:   (if_then_else (eq_attr "type" "call,branch,multi")  (const_string "no")
        !            42:                (const_string "yes")))
        !            43: 
        !            44: ;; Branch and call insns require a single delay slot.  Annulling is not
        !            45: ;; supported.
        !            46: (define_delay (eq_attr "type" "call,branch")
        !            47:   [(eq_attr "in_delay_slot" "yes") (nil) (nil)])
        !            48: 
        !            49: ;; Define the function unit usages.  We first define memory as a unit.
        !            50: (define_function_unit "memory" 1 0 (eq_attr "type" "load") 6 5
        !            51:   [(eq_attr "type" "load")])
        !            52: (define_function_unit "memory" 1 0 (eq_attr "type" "load") 6 6
        !            53:   [(eq_attr "type" "store")])
        !            54: (define_function_unit "memory" 1 0 (eq_attr "type" "store") 1 0)
        !            55: 
        !            56: ;; Now define the function units for the floating-point support.  Most
        !            57: ;; units are pipelined and can accept an input every cycle.
        !            58: ;;
        !            59: ;; Note that we have an inaccuracy here.  If a fmac insn is issued, followed
        !            60: ;; 2 cycles later by a fadd, there will be a conflict for the floating
        !            61: ;; adder that we can't represent.  Also, all insns will conflict for the
        !            62: ;; floating-point rounder.  It isn't clear how to represent this.
        !            63: 
        !            64: (define_function_unit "multiplier" 1 0 (eq_attr "type" "fmul") 3 0)
        !            65: (define_function_unit "multiplier" 1 0 (eq_attr "type" "dmul") 6 4)
        !            66: (define_function_unit "multiplier" 1 0 (eq_attr "type" "fam") 6 0)
        !            67: (define_function_unit "multiplier" 1 0 (eq_attr "type" "dam") 9 4)
        !            68: 
        !            69: (define_function_unit "adder" 1 0 (eq_attr "type" "fadd,fam,dam") 3 0)
        !            70: 
        !            71: (define_function_unit "divider" 1 0 (eq_attr "type" "fdiv") 11 10)
        !            72: (define_function_unit "divider" 1 0 (eq_attr "type" "fsqrt") 28 27)
        !            73: (define_function_unit "divider" 1 0 (eq_attr "type" "ddiv") 18 17)
        !            74: (define_function_unit "divider" 1 0 (eq_attr "type" "dsqrt") 57 56)
        !            75: 
        !            76: ;; ADD
        !            77: (define_insn "addsi3"
        !            78:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
        !            79:        (plus:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
        !            80:                 (match_operand:SI 2 "add_operand" "rI,N")))]
        !            81:   ""
        !            82:   "@
        !            83:    add %0,%1,%2
        !            84:    sub %0,%1,%n2")
        !            85: 
        !            86: (define_insn "adddi3"
        !            87:   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
        !            88:        (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
        !            89:                 (match_operand:DI 2 "gpc_reg_operand" "r")))]
        !            90:   ""
        !            91:   "add %L0,%L1,%L2\;addc %0,%1,%2"
        !            92:   [(set_attr "type" "multi")])
        !            93: 
        !            94: ;; AND/ANDN
        !            95: (define_insn "andsi3"
        !            96:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
        !            97:        (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
        !            98:                (match_operand:SI 2 "and_operand" "rI,K")))]
        !            99:   ""
        !           100:   "@
        !           101:    and %0,%1,%2
        !           102:    andn %0,%1,%C2")
        !           103: 
        !           104: (define_insn ""
        !           105:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           106:        (and:SI (not:SI (match_operand:SI 1 "srcb_operand" "rI"))
        !           107:                (match_operand:SI 2 "gpc_reg_operand" "r")))]
        !           108:   ""
        !           109:   "andn %0,%2,%1")
        !           110: 
        !           111: 
        !           112: ;; CALLI
        !           113: ;;
        !           114: ;; Start with a subroutine to write out CLOBBERs starting at lr2 up to,
        !           115: ;; but not including, the next parameter register.  If operand[0] is null,
        !           116: ;; it means that all the argument registers have been used.
        !           117: (define_expand "clobbers_to"
        !           118:   [(clobber (match_operand:SI 0 "" ""))]
        !           119:   ""
        !           120:   "
        !           121: {
        !           122:   int i;
        !           123:   int high_regno;
        !           124: 
        !           125:   if (operands[0] == 0)
        !           126:     high_regno = R_LR (18);
        !           127:   else if (GET_CODE (operands[0]) != REG || REGNO (operands[0]) < R_LR (0)
        !           128:           || REGNO (operands[0]) > R_LR (18))
        !           129:     abort ();
        !           130:   else
        !           131:     high_regno = REGNO (operands[0]);
        !           132: 
        !           133:   for (i = R_LR (2); i < high_regno; i++)
        !           134:     emit_insn (gen_rtx (CLOBBER, VOIDmode, gen_rtx (REG, SImode, i)));
        !           135: 
        !           136:   DONE;
        !           137: }")
        !           138: 
        !           139: ;; We indicate that LR0 is clobbered in the CALL_INSN itself.  Otherwise,
        !           140: ;; reorg will think it is just clobbered by the called function.
        !           141: 
        !           142: (define_expand "call"
        !           143:   [(parallel [(call (match_operand:SI 0 "" "")
        !           144:                    (match_operand 1 "" ""))
        !           145:              (clobber (scratch:SI))])
        !           146:    (match_operand 2 "" "")]
        !           147:   ""
        !           148:   "
        !           149: {
        !           150:   if (GET_CODE (operands[0]) != MEM)
        !           151:     abort ();
        !           152: 
        !           153:   /* We tell here whether this is a recursive call, since this insn may
        !           154:      later be inlined into another function.  */
        !           155:   if (! TARGET_SMALL_MEMORY
        !           156:       && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
        !           157:     operands[0] = gen_rtx (MEM, SImode,
        !           158:                           force_reg (Pmode, XEXP (operands[0], 0)));
        !           159: 
        !           160:   operands[2] = gen_clobbers_to (operands[2]);
        !           161: }")
        !           162:  
        !           163: (define_expand "call_value"
        !           164:   [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !           165:                   (call (match_operand:SI 1 "" "")
        !           166:                         (match_operand 2 "" "")))
        !           167:                   (clobber (scratch:SI))])
        !           168:    (match_operand 3 "" "")]
        !           169:   ""
        !           170:   "
        !           171: {
        !           172:   if (GET_CODE (operands[1]) != MEM)
        !           173:     abort ();
        !           174: 
        !           175:   /* We tell here whether this is a recursive call, since this insn may
        !           176:      later be inlined into another function.  */
        !           177:   if (! TARGET_SMALL_MEMORY
        !           178:       && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
        !           179:     operands[1] = gen_rtx (MEM, SImode,
        !           180:                           force_reg (Pmode, XEXP (operands[1], 0)));
        !           181: 
        !           182:   operands[3] = gen_clobbers_to (operands[3]);
        !           183: }")
        !           184:  
        !           185: (define_insn ""
        !           186:   [(call (match_operand:SI 0 "memory_operand" "m")
        !           187:         (match_operand 1 "" ""))
        !           188:    (clobber (match_scratch:SI 2 "=&l"))]
        !           189:   "GET_CODE (XEXP (operands[0], 0)) != CONST_INT"
        !           190:   "calli lr0,%0%#"
        !           191:   [(set_attr "type" "call")])
        !           192: 
        !           193: (define_insn ""
        !           194:   [(call (mem:SI (match_operand:SI 0 "call_operand" "i"))
        !           195:         (match_operand:SI 1 "general_operand" "g"))
        !           196:    (clobber (match_scratch:SI 2 "=&l"))]
        !           197:   ""
        !           198:   "call lr0,%F0"
        !           199:   [(set_attr "type" "call")])
        !           200: 
        !           201: (define_insn ""
        !           202:   [(set (match_operand 0 "gpc_reg_operand" "=r")
        !           203:        (call (match_operand:SI 1 "memory_operand" "m")
        !           204:              (match_operand 2 "" "")))
        !           205:    (clobber (match_scratch:SI 3 "=&l"))]
        !           206:   "GET_CODE (XEXP (operands[1], 0)) != CONST_INT"
        !           207:   "calli lr0,%1%#"
        !           208:   [(set_attr "type" "call")])
        !           209: 
        !           210: (define_insn ""
        !           211:   [(set (match_operand 0 "gpc_reg_operand" "=r")
        !           212:        (call (mem:SI (match_operand:SI 1 "call_operand" "i"))
        !           213:              (match_operand:SI 2 "general_operand" "g")))
        !           214:    (clobber (match_scratch:SI 3 "=&l"))]
        !           215:   ""
        !           216:   "call lr0,%F1"
        !           217:   [(set_attr "type" "call")])
        !           218: 
        !           219: (define_expand "probe"
        !           220:   [(call (mem:SI (symbol_ref:SI "_msp_check"))
        !           221:         (const_int 1))]
        !           222:   "TARGET_STACK_CHECK"
        !           223:   "")
        !           224: 
        !           225: ;; This is used for internal routine calls via TPC.  Currently used only
        !           226: ;; in probe, above.
        !           227: (define_insn ""
        !           228:   [(call (mem:SI (match_operand:SI 0 "immediate_operand" "s"))
        !           229:         (const_int 1))]
        !           230:   ""
        !           231:   "call %*,%0"
        !           232:   [(set_attr "type" "call")])
        !           233: 
        !           234: ;; CONST, CONSTH, CONSTN
        !           235: ;;
        !           236: ;; Many of these are generated from move insns.
        !           237: (define_insn ""
        !           238:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           239:        (and:SI (match_operand:SI 1 "immediate_operand" "i")
        !           240:                (const_int 65535)))]
        !           241:   ""
        !           242:   "const %0,%1")
        !           243: 
        !           244: (define_insn ""
        !           245:   [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
        !           246:                         (const_int 16)
        !           247:                         (match_operand:SI 1 "const_0_operand" ""))
        !           248:        (ashiftrt:SI (match_operand:SI 2 "immediate_operand" "i")
        !           249:                     (const_int 16)))]
        !           250:   ""
        !           251:   "consth %0,%2")
        !           252: 
        !           253: (define_insn ""
        !           254:   [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
        !           255:                         (const_int 16)
        !           256:                         (match_operand:SI 1 "const_0_operand" ""))
        !           257:        (match_operand:SI 2 "cint_16_operand" "J"))]
        !           258:   ""
        !           259:   "consth %0,%m2")
        !           260: 
        !           261: (define_insn ""
        !           262:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           263:        (ior:SI (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "0"))
        !           264:                (match_operand:SI 2 "const_int_operand" "n")))]
        !           265:   "(INTVAL (operands[2]) & 0xffff) == 0"
        !           266:   "consth %0,%2")
        !           267: 
        !           268: (define_insn ""
        !           269:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           270:        (ior:SI (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "0"))
        !           271:                (and:SI (match_operand:SI 2 "immediate_operand" "i")
        !           272:                        (const_int -65536))))]
        !           273:   ""
        !           274:   "consth %0,%2")
        !           275: 
        !           276: ;; CONVERT
        !           277: (define_insn "fix_truncsfsi2"
        !           278:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           279:        (fix:SI (match_operand:SF 1 "register_operand" "r")))]
        !           280:   ""
        !           281:   "convert %0,%1,0,3,0,1")
        !           282: 
        !           283: (define_insn "fix_truncdfsi2"
        !           284:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           285:        (fix:SI (match_operand:DF 1 "register_operand" "r")))]
        !           286:   ""
        !           287:   "convert %0,%1,0,3,0,2")
        !           288: 
        !           289: (define_insn "fixuns_truncsfsi2"
        !           290:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           291:        (unsigned_fix:SI (match_operand:SF 1 "register_operand" "r")))]
        !           292:   ""
        !           293:   "convert %0,%1,1,3,0,1")
        !           294: 
        !           295: (define_insn "fixuns_truncdfsi2"
        !           296:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           297:        (unsigned_fix:SI (match_operand:DF 1 "register_operand" "r")))]
        !           298:   ""
        !           299:   "convert %0,%1,1,3,0,2")
        !           300: 
        !           301: (define_insn "truncdfsf2"
        !           302:   [(set (match_operand:SF 0 "register_operand" "=r")
        !           303:        (float_truncate:SF (match_operand:DF 1 "register_operand" "r")))]
        !           304:   ""
        !           305:   "convert %0,%1,0,4,1,2")
        !           306: 
        !           307: (define_insn "extendsfdf2"
        !           308:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           309:        (float_extend:DF (match_operand:SF 1 "register_operand" "r")))]
        !           310:   ""
        !           311:   "convert %0,%1,0,4,2,1")
        !           312: 
        !           313: (define_insn "floatsisf2"
        !           314:   [(set (match_operand:SF 0 "register_operand" "=r")
        !           315:        (float:SF (match_operand:SI 1 "gpc_reg_operand" "r")))]
        !           316:   ""
        !           317:   "convert %0,%1,0,4,1,0")
        !           318: 
        !           319: (define_insn "floatsidf2"
        !           320:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           321:        (float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))]
        !           322:   ""
        !           323:   "convert %0,%1,0,4,2,0")
        !           324: 
        !           325: (define_insn "floatunssisf2"
        !           326:   [(set (match_operand:SF 0 "register_operand" "=r")
        !           327:        (unsigned_float:SF (match_operand:SI 1 "gpc_reg_operand" "r")))]
        !           328:   ""
        !           329:   "convert %0,%1,1,4,1,0")
        !           330: 
        !           331: (define_insn "floatunssidf2"
        !           332:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           333:        (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))]
        !           334:   ""
        !           335:   "convert %0,%1,1,4,2,0")
        !           336: 
        !           337: ;; CPxxx, DEQ, DGT, DGE, FEQ, FGT, FGE
        !           338: (define_insn ""
        !           339:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           340:        (match_operator 3 "comparison_operator"
        !           341:                        [(match_operand:SI 1 "gpc_reg_operand" "r")
        !           342:                         (match_operand:SI 2 "srcb_operand" "rI")]))]
        !           343:   ""
        !           344:   "cp%J3 %0,%1,%2")
        !           345: 
        !           346: (define_insn ""
        !           347:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           348:        (match_operator 3 "fp_comparison_operator"
        !           349:                        [(match_operand:SF 1 "register_operand" "r")
        !           350:                         (match_operand:SF 2 "register_operand" "r")]))]
        !           351:   ""
        !           352:   "f%J3 %0,%1,%2"
        !           353:   [(set_attr "type" "fadd")])
        !           354: 
        !           355: (define_insn ""
        !           356:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           357:        (match_operator 3 "fp_comparison_operator"
        !           358:                        [(match_operand:DF 1 "register_operand" "r")
        !           359:                         (match_operand:DF 2 "register_operand" "r")]))]
        !           360:   ""
        !           361:   "d%J3 %0,%1,%2"
        !           362:   [(set_attr "type" "fadd")])
        !           363: 
        !           364: ;; DADD
        !           365: (define_expand "adddf3"
        !           366:   [(set (match_operand:DF 0 "register_operand" "")
        !           367:        (plus:DF (match_operand:DF 1 "register_operand" "")
        !           368:                 (match_operand:DF 2 "register_operand" "")))]
        !           369:   ""
        !           370:   "")
        !           371: 
        !           372: (define_insn ""
        !           373:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           374:        (plus:DF (match_operand:DF 1 "register_operand" "%r")
        !           375:                 (match_operand:DF 2 "register_operand" "r")))]
        !           376:   "! TARGET_29050 "
        !           377:   "dadd %0,%1,%2"
        !           378:   [(set_attr "type" "fadd")])
        !           379: 
        !           380: (define_insn ""
        !           381:   [(set (match_operand:DF 0 "register_operand" "=r,a")
        !           382:        (plus:DF (match_operand:DF 1 "register_operand" "%r,r")
        !           383:                 (match_operand:DF 2 "register_operand" "r,0")))]
        !           384:   "TARGET_29050"
        !           385:   "@
        !           386:    dadd %0,%1,%2
        !           387:    dmac 8,%0,%1,%1"
        !           388:   [(set_attr "type" "fadd,dam")])
        !           389: 
        !           390: ;; DDIV
        !           391: (define_insn "divdf3"
        !           392:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           393:        (div:DF (match_operand:DF 1 "register_operand" "=r")
        !           394:                (match_operand:DF 2 "register_operand" "r")))]
        !           395:   ""
        !           396:   "ddiv %0,%1,%2"
        !           397:   [(set_attr "type" "ddiv")])
        !           398: 
        !           399: ;; DIVIDE
        !           400: ;;
        !           401: ;; We must set Q to the sign extension of the dividend first.  For MOD, we
        !           402: ;; must get the remainder from Q.
        !           403: ;;
        !           404: ;; For divmod: operand 1 is divided by operand 2; quotient goes to operand
        !           405: ;; 0 and remainder to operand 3.
        !           406: (define_expand "divmodsi4"
        !           407:   [(set (match_dup 4)
        !           408:        (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "")
        !           409:                     (const_int 31)))
        !           410:    (parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !           411:                   (div:SI (match_dup 1)
        !           412:                           (match_operand:SI 2 "gpc_reg_operand" "")))
        !           413:              (set (match_operand:SI 3 "gpc_reg_operand" "")
        !           414:                   (mod:SI (match_dup 1)
        !           415:                           (match_dup 2)))
        !           416:              (use (match_dup 4))])]
        !           417:   ""
        !           418:   "
        !           419: {
        !           420:   operands[4] = gen_reg_rtx (SImode);
        !           421: }")
        !           422: 
        !           423: (define_insn ""
        !           424:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           425:        (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !           426:                (match_operand:SI 2 "gpc_reg_operand" "r")))
        !           427:    (set (match_operand:SI 3 "register_operand" "=q")
        !           428:        (mod:SI (match_dup 1)
        !           429:                (match_dup 2)))
        !           430:    (use (match_operand:SI 4 "register_operand" "3"))]
        !           431:   ""
        !           432:   "divide %0,%1,%2")
        !           433: 
        !           434: ;; DIVIDU
        !           435: ;;
        !           436: ;; Similar to DIVIDE.
        !           437: (define_expand "udivmodsi4"
        !           438:   [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !           439:                   (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "")
        !           440:                            (match_operand:SI 2 "gpc_reg_operand" "")))
        !           441:              (set (match_operand:SI 3 "gpc_reg_operand" "")
        !           442:                   (umod:SI (match_dup 1)
        !           443:                            (match_dup 2)))
        !           444:              (use (const_int 0))])]
        !           445:   ""
        !           446:   "")
        !           447: 
        !           448: (define_insn ""
        !           449:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           450:        (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !           451:                 (match_operand:SI 2 "gpc_reg_operand" "r")))
        !           452:    (set (match_operand:SI 3 "register_operand" "=q")
        !           453:        (umod:SI (match_dup 1)
        !           454:                 (match_dup 2)))
        !           455:    (use (match_operand:SI 4 "const_int_operand" "3"))]
        !           456:   ""
        !           457:   "dividu %0,%1,%2")
        !           458: 
        !           459: ;; DMAC/DMSM
        !           460: (define_insn ""
        !           461:   [(set (match_operand:DF 0 "register_operand" "=a,*r")
        !           462:        (plus:DF (mult:DF (match_operand:DF 1 "register_operand" "%r,A")
        !           463:                          (match_operand:DF 2 "register_operand" "r,r"))
        !           464:                 (match_operand:DF 3 "register_operand" "0,*r")))]
        !           465:   "TARGET_29050"
        !           466:   "@
        !           467:    dmac 0,%0,%1,%2
        !           468:    dmsm %0,%2,%3"
        !           469:   [(set_attr "type" "dam")])
        !           470: 
        !           471: (define_insn ""
        !           472:   [(set (match_operand:DF 0 "register_operand" "=a")
        !           473:        (plus:DF (mult:DF (neg:DF (match_operand:DF 1 "register_operand" "r"))
        !           474:                          (match_operand:DF 2 "register_operand" "r"))
        !           475:                 (match_operand:DF 3 "register_operand" "0")))]
        !           476:   "TARGET_29050"
        !           477:   "dmac 1,%0,%2,%1"
        !           478:   [(set_attr "type" "dam")])
        !           479: 
        !           480: (define_insn ""
        !           481:   [(set (match_operand:DF 0 "register_operand" "=a")
        !           482:        (minus:DF (mult:DF (match_operand:DF 1 "register_operand" "%r")
        !           483:                           (match_operand:DF 2 "register_operand" "r"))
        !           484:                  (match_operand:DF 3 "register_operand" "0")))]
        !           485:   "TARGET_29050"
        !           486:   "dmac 2,%0,%1,%2"
        !           487:   [(set_attr "type" "dam")])
        !           488: 
        !           489: (define_insn ""
        !           490:   [(set (match_operand:DF 0 "register_operand" "=a")
        !           491:        (minus:DF (mult:DF (match_operand:DF 1 "register_operand" "r")
        !           492:                           (neg:DF (match_operand:DF 2 "register_operand" "r")))
        !           493:                  (match_operand:DF 3 "register_operand" "0")))]
        !           494:   "TARGET_29050"
        !           495:   "dmac 3,%0,%1,%2"
        !           496:   [(set_attr "type" "dam")])
        !           497: 
        !           498: (define_insn ""
        !           499:   [(set (match_operand:DF 0 "register_operand" "=a")
        !           500:        (mult:DF (neg:DF (match_operand:DF 1 "register_operand" "r"))
        !           501:                 (match_operand:DF 2 "register_operand" "r")))]
        !           502:   "TARGET_29050"
        !           503:   "dmac 5,%0,%2,%1"
        !           504:   [(set_attr "type" "dam")])
        !           505: 
        !           506: (define_insn ""
        !           507:   [(set (match_operand:DF 0 "register_operand" "=a")
        !           508:        (minus:DF (neg:DF (match_operand:DF 1 "register_operand" "r"))
        !           509:                  (match_operand:DF 2 "register_operand" "0")))]
        !           510:   "TARGET_29050"
        !           511:   "dmac 11,%0,%1,%1"
        !           512:   [(set_attr "type" "dam")])
        !           513: 
        !           514: (define_insn ""
        !           515:   [(set (match_operand:DF 0 "register_operand" "=a")
        !           516:        (neg:DF (plus:DF (match_operand:DF 1 "register_operand" "%r")
        !           517:                         (match_operand:DF 2 "register_operand" "0"))))]
        !           518:   "TARGET_29050"
        !           519:   "dmac 11,%0,%1,%1"
        !           520:   [(set_attr "type" "dam")])
        !           521: 
        !           522: (define_insn ""
        !           523:  [(set (match_operand:DF 0 "register_operand" "=r,r,a")
        !           524:        (neg:DF (match_operand:DF 1 "register_operand" "0,r,r")))
        !           525:   (clobber (match_scratch:SI 2 "=&r,&r,X"))]
        !           526:  "TARGET_29050"
        !           527:  "@
        !           528:   cpeq %2,gr1,gr1\;xor %0,%1,%2
        !           529:   cpeq %2,gr1,gr1\;xor %0,%1,%2\;sll %L0,%L1,0
        !           530:   dmac 13,%0,%1,%1"
        !           531:  [(set_attr "type" "multi,multi,dam")])
        !           532: 
        !           533: ;; DMUL
        !           534: (define_expand "muldf3"
        !           535:   [(set (match_operand:DF 0 "register_operand" "")
        !           536:        (mult:DF (match_operand:DF 1 "register_operand" "")
        !           537:                 (match_operand:DF 2 "register_operand" "")))]
        !           538:   ""
        !           539:   "")
        !           540: 
        !           541: (define_insn ""
        !           542:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           543:        (mult:DF (match_operand:DF 1 "register_operand" "%r")
        !           544:                 (match_operand:DF 2 "register_operand" "r")))]
        !           545:   "! TARGET_29050"
        !           546:   "dmul %0,%1,%2"
        !           547:   [(set_attr "type" "dmul")])
        !           548: 
        !           549: (define_insn ""
        !           550:   [(set (match_operand:DF 0 "register_operand" "=r,a")
        !           551:        (mult:DF (match_operand:DF 1 "register_operand" "%r,r")
        !           552:                 (match_operand:DF 2 "register_operand" "r,r")))]
        !           553:   "TARGET_29050"
        !           554:   "@
        !           555:    dmul %0,%1,%2
        !           556:    dmac 4,%0,%1,%2"
        !           557:   [(set_attr "type" "dmul,dam")])
        !           558: 
        !           559: ;; DSUB
        !           560: (define_expand "subdf3"
        !           561:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           562:        (minus:DF (match_operand:DF 1 "register_operand" "r")
        !           563:                  (match_operand:DF 2 "register_operand" "r")))]
        !           564:   ""
        !           565:   "")
        !           566: 
        !           567: (define_insn ""
        !           568:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           569:        (minus:DF (match_operand:DF 1 "register_operand" "r")
        !           570:                  (match_operand:DF 2 "register_operand" "r")))]
        !           571:   "! TARGET_29050"
        !           572:   "dsub %0,%1,%2"
        !           573:   [(set_attr "type" "fadd")])
        !           574: 
        !           575: (define_insn ""
        !           576:   [(set (match_operand:DF 0 "register_operand" "=r,a,a")
        !           577:        (minus:DF (match_operand:DF 1 "register_operand" "r,0,r")
        !           578:                  (match_operand:DF 2 "register_operand" "r,r,0")))]
        !           579:   "TARGET_29050"
        !           580:   "@
        !           581:    dsub %0,%1,%2
        !           582:    dmac 9,%0,%2,%2
        !           583:    dmac 10,%0,%1,%1"
        !           584:   [(set_attr "type" "fadd,dam,dam")])
        !           585: 
        !           586: ;; EXBYTE
        !           587: (define_insn ""
        !           588:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           589:        (ior:SI (and:SI (match_operand:SI 1 "srcb_operand" "rI")
        !           590:                        (const_int -256))
        !           591:                (zero_extract:SI (match_operand:SI 2 "gpc_reg_operand" "r")
        !           592:                                 (const_int 8)
        !           593:                                 (ashift:PSI
        !           594:                                  (match_operand:PSI 3 "register_operand" "b")
        !           595:                                  (const_int 3)))))]
        !           596:   ""
        !           597:   "exbyte %0,%2,%1")
        !           598: 
        !           599: (define_insn ""
        !           600:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           601:        (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !           602:                         (const_int 8)
        !           603:                         (ashift:PSI
        !           604:                          (match_operand:PSI 2 "register_operand" "b")
        !           605:                          (const_int 3))))]
        !           606:   ""
        !           607:   "exbyte %0,%1,0")
        !           608: 
        !           609: (define_insn ""
        !           610:   [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
        !           611:                         (const_int 8)
        !           612:                         (match_operand:PSI 1 "const_24_operand" ""))
        !           613:        (zero_extract:SI (match_operand:SI 2 "gpc_reg_operand" "r")
        !           614:                         (const_int 8)
        !           615:                         (ashift:PSI
        !           616:                          (match_operand:PSI 3 "register_operand" "b")
        !           617:                          (const_int 3))))]
        !           618:   ""
        !           619:   "exbyte %0,%2,%0")
        !           620: 
        !           621: (define_expand "extzv"
        !           622:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !           623:        (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "")
        !           624:                         (match_operand:SI 2 "general_operand" "")
        !           625:                         (match_operand:SI 3 "general_operand" "")))]
        !           626:   ""
        !           627:   "
        !           628: {
        !           629:   int size, pos;
        !           630: 
        !           631:   if (GET_CODE (operands[2]) != CONST_INT
        !           632:       || GET_CODE (operands[3]) != CONST_INT)
        !           633:     FAIL;
        !           634: 
        !           635:   size = INTVAL (operands[2]);
        !           636:   pos = INTVAL (operands[3]);
        !           637: 
        !           638:   /* Can't do this unless a byte extraction.  If extracting the high
        !           639:      or low byte, don't do this because a shift or AND is shorter.
        !           640:      Don't do 16-bit extracts, since the only two are the high and low
        !           641:      ends, and it is faster to do them with CONSTH and SRL.  */
        !           642: 
        !           643:   if (size != 8 || (pos != 8 && pos != 16))
        !           644:     FAIL;
        !           645: 
        !           646:   operands[3] = gen_rtx (ASHIFT, PSImode,
        !           647:                         force_reg (PSImode, GEN_INT (pos / 8)),
        !           648:                         GEN_INT (3));
        !           649: 
        !           650: }")
        !           651: 
        !           652: ;; EXHW
        !           653: (define_insn ""
        !           654:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           655:        (ior:SI (and:SI (match_operand:SI 1 "srcb_operand" "rI")
        !           656:                (const_int -65536))
        !           657:                (zero_extract:SI (match_operand:SI 2 "gpc_reg_operand" "r")
        !           658:                                 (const_int 16)
        !           659:                                 (ashift:PSI
        !           660:                                  (match_operand:PSI 3 "register_operand" "b")
        !           661:                                  (const_int 3)))))]
        !           662:   ""
        !           663:   "exhw %0,%2,%1")
        !           664: 
        !           665: (define_insn ""
        !           666:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           667:        (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !           668:                         (const_int 16)
        !           669:                         (ashift:PSI
        !           670:                          (match_operand:PSI 2 "register_operand" "b")
        !           671:                          (const_int 3))))]
        !           672:   ""
        !           673:   "exhw %0,%1,0")
        !           674: 
        !           675: (define_insn ""
        !           676:   [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
        !           677:                         (const_int 16)
        !           678:                         (match_operand:PSI 1 "const_16_operand" ""))
        !           679:        (zero_extract:SI (match_operand:SI 2 "gpc_reg_operand" "r")
        !           680:                         (const_int 16)
        !           681:                         (ashift:PSI
        !           682:                          (match_operand:PSI 3 "register_operand" "b")
        !           683:                          (const_int 3))))]
        !           684:   ""
        !           685:   "exhw %0,%2,%0")
        !           686: 
        !           687: ;; EXHWS
        !           688: ;;
        !           689: ;; This is probably unused.  The high-order 16-bits are obtained with an SRA
        !           690: ;; insn.  The low-order 16 bits are a sign-extend, which is a pair of
        !           691: ;; shifts.  Setting BP followed by the insn is equivalent, so we don't
        !           692: ;; bother going to any trouble to generate this insn.
        !           693: 
        !           694: (define_insn ""
        !           695:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           696:        (sign_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !           697:                         (const_int 16)
        !           698:                         (ashift:PSI
        !           699:                          (match_operand:PSI 2 "register_operand" "b")
        !           700:                          (const_int 3))))]
        !           701:   ""
        !           702:   "exhws %0,%1")
        !           703: 
        !           704: ;; EXTRACT
        !           705: (define_insn ""
        !           706:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           707:        (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !           708:                   (match_operand:PSI 2 "register_operand" "f")))]
        !           709:   ""
        !           710:   "extract %0,%1,%1")
        !           711: 
        !           712: (define_expand "rotlsi3"
        !           713:   [(set (match_dup 3)
        !           714:        (match_operand:SI 2 "gpc_reg_or_immediate_operand" ""))
        !           715:    (set (match_operand:SI 0 "gpc_reg_operand" "")
        !           716:        (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "")
        !           717:                   (match_dup 3)))]
        !           718:   ""
        !           719:   "
        !           720: { operands[2] = gen_lowpart (PSImode, operands[2]);
        !           721:   operands[3] = gen_reg_rtx (PSImode);
        !           722: }")
        !           723: 
        !           724: ;; It would be nice to be able to have a define_split corresponding to the
        !           725: ;; above, but there is no way to tell combine we need a PSImode temporary.
        !           726: ;; If we put a (clobber (scratch:PSI)) there, combine would merge the above
        !           727: ;; two insns.  This is bad because it then thinks only one insn is needed.
        !           728: 
        !           729: ;; FADD
        !           730: (define_expand "addsf3"
        !           731:   [(set (match_operand:SF 0 "register_operand" "")
        !           732:        (plus:SF (match_operand:SF 1 "register_operand" "")
        !           733:                 (match_operand:SF 2 "register_operand" "")))]
        !           734:   ""
        !           735:   "")
        !           736: 
        !           737: (define_insn ""
        !           738:   [(set (match_operand:SF 0 "register_operand" "=r")
        !           739:        (plus:SF (match_operand:SF 1 "register_operand" "%r")
        !           740:                 (match_operand:SF 2 "register_operand" "r")))]
        !           741:   "! TARGET_29050"
        !           742:   "fadd %0,%1,%2"
        !           743:   [(set_attr "type" "fadd")])
        !           744: 
        !           745: (define_insn ""
        !           746:   [(set (match_operand:SF 0 "register_operand" "=r,a")
        !           747:        (plus:SF (match_operand:SF 1 "register_operand" "%r,r")
        !           748:                 (match_operand:SF 2 "register_operand" "r,0")))]
        !           749:   "TARGET_29050"
        !           750:   "@
        !           751:    fadd %0,%1,%2
        !           752:    fmac 8,%0,%1,%1"
        !           753:   [(set_attr "type" "fadd,fam")])
        !           754: 
        !           755: ;; FDIV
        !           756: (define_insn "divsf3"
        !           757:   [(set (match_operand:SF 0 "register_operand" "=r")
        !           758:        (div:SF (match_operand:SF 1 "register_operand" "=r")
        !           759:                (match_operand:SF 2 "register_operand" "r")))]
        !           760:   ""
        !           761:   "fdiv %0,%1,%2"
        !           762:   [(set_attr "type" "fdiv")])
        !           763: 
        !           764: ;; FDMUL
        !           765: (define_insn ""
        !           766:   [(set (match_operand:DF 0 "register_operand" "=r")
        !           767:        (mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "%r"))
        !           768:                 (float_extend:DF (match_operand:SF 2 "register_operand" "r"))))]
        !           769:   ""
        !           770:   "fdmul %0,%1,%2")
        !           771: 
        !           772: ;; FMAC/FMSM
        !           773: (define_insn ""
        !           774:   [(set (match_operand:SF 0 "register_operand" "=a,*r")
        !           775:        (plus:SF (mult:SF (match_operand:SF 1 "register_operand" "%r,A")
        !           776:                          (match_operand:SF 2 "register_operand" "r,r"))
        !           777:                 (match_operand:SF 3 "register_operand" "0,*r")))]
        !           778:   "TARGET_29050"
        !           779:   "@
        !           780:    fmac 0,%0,%1,%2
        !           781:    fmsm %0,%2,%3"
        !           782:   [(set_attr "type" "fam")])
        !           783: 
        !           784: (define_insn ""
        !           785:   [(set (match_operand:SF 0 "register_operand" "=a")
        !           786:        (plus:SF (mult:SF (neg:SF (match_operand:SF 1 "register_operand" "r"))
        !           787:                          (match_operand:SF 2 "register_operand" "r"))
        !           788:                 (match_operand:SF 3 "register_operand" "0")))]
        !           789:   "TARGET_29050"
        !           790:   "fmac 1,%0,%2,%1"
        !           791:   [(set_attr "type" "fam")])
        !           792: 
        !           793: (define_insn ""
        !           794:   [(set (match_operand:SF 0 "register_operand" "=a")
        !           795:        (minus:SF (mult:SF (match_operand:SF 1 "register_operand" "%r")
        !           796:                           (match_operand:SF 2 "register_operand" "r"))
        !           797:                  (match_operand:SF 3 "register_operand" "0")))]
        !           798:   "TARGET_29050"
        !           799:   "fmac 2,%0,%1,%2"
        !           800:   [(set_attr "type" "fam")])
        !           801: 
        !           802: (define_insn ""
        !           803:   [(set (match_operand:SF 0 "register_operand" "=a")
        !           804:        (minus:SF (mult:SF (neg:SF (match_operand:SF 1 "register_operand" "r"))
        !           805:                           (match_operand:SF 2 "register_operand" "r"))
        !           806:                  (match_operand:SF 3 "register_operand" "0")))]
        !           807:   "TARGET_29050"
        !           808:   "fmac 3,%0,%2,%1"
        !           809:   [(set_attr "type" "fam")])
        !           810: 
        !           811: (define_insn ""
        !           812:   [(set (match_operand:SF 0 "register_operand" "=a")
        !           813:        (mult:SF (neg:SF (match_operand:SF 1 "register_operand" "r"))
        !           814:                 (match_operand:SF 2 "register_operand" "r")))]
        !           815:   "TARGET_29050"
        !           816:   "fmac 5,%0,%2,%1"
        !           817:   [(set_attr "type" "fam")])
        !           818: 
        !           819: (define_insn ""
        !           820:   [(set (match_operand:SF 0 "register_operand" "=a")
        !           821:        (minus:SF (neg:SF (match_operand:SF 1 "register_operand" "%r"))
        !           822:                  (match_operand:SF 2 "register_operand" "0")))]
        !           823:   "TARGET_29050"
        !           824:   "fmac 11,%0,%1,%1"
        !           825:   [(set_attr "type" "fam")])
        !           826: 
        !           827: (define_insn ""
        !           828:   [(set (match_operand:SF 0 "register_operand" "=a")
        !           829:        (neg:SF (plus:SF (match_operand:SF 1 "register_operand" "%r")
        !           830:                         (match_operand:SF 2 "register_operand" "0"))))]
        !           831:   "TARGET_29050"
        !           832:   "fmac 11,%0,%1,%1"
        !           833:   [(set_attr "type" "fam")])
        !           834: 
        !           835: (define_insn ""
        !           836:   [(set (match_operand:SF 0 "register_operand" "=r,a")
        !           837:        (neg:SF (match_operand:SF 1 "register_operand" "r,r")))
        !           838:    (clobber (match_scratch:SI 2 "=&r,X"))]
        !           839:   "TARGET_29050"
        !           840:   "@
        !           841:    cpeq %2,gr1,gr1\;xor %0,%1,%2
        !           842:    fmac 13,%0,%1,%1"
        !           843:   [(set_attr "type" "multi,fam")])
        !           844: 
        !           845: ;; FMUL
        !           846: (define_expand "mulsf3"
        !           847:   [(set (match_operand:SF 0 "register_operand" "")
        !           848:        (mult:SF (match_operand:SF 1 "register_operand" "")
        !           849:                 (match_operand:SF 2 "register_operand" "")))]
        !           850:   ""
        !           851:   "")
        !           852: 
        !           853: (define_insn ""
        !           854:   [(set (match_operand:SF 0 "register_operand" "=r")
        !           855:        (mult:SF (match_operand:SF 1 "register_operand" "%r")
        !           856:                 (match_operand:SF 2 "register_operand" "r")))]
        !           857:   "! TARGET_29050"
        !           858:   "fmul %0,%1,%2"
        !           859:   [(set_attr "type" "fmul")])
        !           860: 
        !           861: (define_insn ""
        !           862:   [(set (match_operand:SF 0 "register_operand" "=r,a")
        !           863:        (mult:SF (match_operand:SF 1 "register_operand" "%r,r")
        !           864:                 (match_operand:SF 2 "register_operand" "r,r")))]
        !           865:   "TARGET_29050"
        !           866:   "@
        !           867:    fmul %0,%1,%2
        !           868:    fmac 4,%0,%1,%2"
        !           869:   [(set_attr "type" "fmul,fam")])
        !           870: 
        !           871: ;; FSUB
        !           872: (define_expand "subsf3"
        !           873:   [(set (match_operand:SF 0 "register_operand" "")
        !           874:        (minus:SF (match_operand:SF 1 "register_operand" "")
        !           875:                  (match_operand:SF 2 "register_operand" "")))]
        !           876:   ""
        !           877:   "")
        !           878: 
        !           879: (define_insn ""
        !           880:   [(set (match_operand:SF 0 "register_operand" "=r")
        !           881:        (minus:SF (match_operand:SF 1 "register_operand" "r")
        !           882:                  (match_operand:SF 2 "register_operand" "r")))]
        !           883:   "! TARGET_29050"
        !           884:   "fsub %0,%1,%2"
        !           885:   [(set_attr "type" "fadd")])
        !           886: 
        !           887: (define_insn ""
        !           888:   [(set (match_operand:SF 0 "register_operand" "=r,a,a")
        !           889:        (minus:SF (match_operand:SF 1 "register_operand" "r,0,r")
        !           890:                  (match_operand:SF 2 "register_operand" "r,r,0")))]
        !           891:   "TARGET_29050"
        !           892:   "@
        !           893:    fsub %0,%1,%2
        !           894:    fmac 9,%0,%2,%2
        !           895:    fmac 10,%0,%1,%1"
        !           896:   [(set_attr "type" "fadd,fam,fam")])
        !           897: 
        !           898: ;; INBYTE
        !           899: (define_insn ""
        !           900:   [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
        !           901:                         (const_int 8)
        !           902:                         (ashift:PSI
        !           903:                          (match_operand:PSI 2 "register_operand" "b")
        !           904:                          (const_int 3)))
        !           905:        (match_operand:SI 1 "srcb_operand" "rI"))]
        !           906:   ""
        !           907:   "inbyte %0,%0,%1")
        !           908: 
        !           909: (define_insn ""
        !           910:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           911:        (ior:SI (and:SI
        !           912:                 (not:SI
        !           913:                  (ashift:SI (const_int 255)
        !           914:                             (ashift:PSI
        !           915:                              (match_operand:PSI 3 "register_operand" "b")
        !           916:                              (const_int 3))))
        !           917:                 (match_operand:SI 1 "gpc_reg_operand" "r"))
        !           918:                (ashift:SI (zero_extend:SI
        !           919:                            (match_operand:QI 2 "srcb_operand" "rI"))
        !           920:                           (ashift:PSI (match_dup 3) (const_int 3)))))]
        !           921:   ""
        !           922:   "inbyte %0,%1,%2")
        !           923: 
        !           924: ;; INHW
        !           925: (define_insn ""
        !           926:   [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
        !           927:                         (const_int 16)
        !           928:                         (ashift:PSI
        !           929:                          (match_operand:PSI 2 "register_operand" "b")
        !           930:                          (const_int 3)))
        !           931:        (match_operand:SI 1 "srcb_operand" "rI"))]
        !           932:   ""
        !           933:   "inhw %0,%0,%1")
        !           934: 
        !           935: (define_insn ""
        !           936:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           937:        (ior:SI (and:SI
        !           938:                 (not:SI
        !           939:                  (ashift:SI (const_int 65535)
        !           940:                             (ashift:PSI
        !           941:                              (match_operand:PSI 3 "register_operand" "b")
        !           942:                              (const_int 3))))
        !           943:                 (match_operand:SI 1 "gpc_reg_operand" "r"))
        !           944:                (ashift:SI (zero_extend:SI
        !           945:                            (match_operand:HI 2 "srcb_operand" "rI"))
        !           946:                           (ashift:PSI (match_dup 3) (const_int 3)))))]
        !           947:   ""
        !           948:   "inhw %0,%1,%2")
        !           949: 
        !           950: (define_expand "insv"
        !           951:   [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "")
        !           952:                         (match_operand:SI 1 "general_operand" "")
        !           953:                         (match_operand:SI 2 "general_operand" ""))
        !           954:        (match_operand:SI 3 "srcb_operand" ""))]
        !           955:   ""
        !           956:   "
        !           957: {
        !           958:   int size, pos;
        !           959: 
        !           960:   if (GET_CODE (operands[1]) != CONST_INT
        !           961:       || GET_CODE (operands[2]) != CONST_INT)
        !           962:     FAIL;
        !           963: 
        !           964:   size = INTVAL (operands[1]);
        !           965:   pos = INTVAL (operands[2]);
        !           966:   if ((size != 8 && size != 16) || pos % size != 0)
        !           967:     FAIL;
        !           968: 
        !           969:   operands[2] = gen_rtx (ASHIFT, PSImode,
        !           970:                         force_reg (PSImode, GEN_INT (pos / 8)),
        !           971:                         GEN_INT (3));
        !           972: }")
        !           973: 
        !           974: ;; LOAD (also used by move insn).
        !           975: (define_insn ""
        !           976:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           977:        (mem:SI (and:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !           978:                        (const_int -4))))
        !           979:    (set (match_operand:PSI 2 "register_operand" "=b")
        !           980:        (truncate:PSI (match_dup 1)))]
        !           981:   "! TARGET_DW_ENABLE"
        !           982:   "load 0,16,%0,%1"
        !           983:   [(set_attr "type" "load")])
        !           984: 
        !           985: (define_insn ""
        !           986:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !           987:        (zero_extend:SI (match_operand:QI 1 "memory_operand" "m")))]
        !           988:   "TARGET_DW_ENABLE"
        !           989:   "load 0,1,%0,%1"
        !           990:   [(set_attr "type" "load")])
        !           991: 
        !           992: (define_insn ""
        !           993:   [(set (match_operand:HI 0 "gpc_reg_operand" "=r")
        !           994:        (zero_extend:HI (match_operand:QI 1 "memory_operand" "m")))]
        !           995:   "TARGET_DW_ENABLE"
        !           996:   "load 0,1,%0,%1"
        !           997:   [(set_attr "type" "load")])
        !           998: 
        !           999: (define_insn ""
        !          1000:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1001:        (zero_extend:SI (match_operand:HI 1 "memory_operand" "m")))]
        !          1002:   "TARGET_DW_ENABLE"
        !          1003:   "load 0,2,%0,%1"
        !          1004:   [(set_attr "type" "load")])
        !          1005: 
        !          1006: (define_insn ""
        !          1007:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1008:        (sign_extend:SI (match_operand:QI 1 "memory_operand" "m")))
        !          1009:    (clobber (match_scratch:PSI 2 "=&b"))]
        !          1010:   "TARGET_DW_ENABLE"
        !          1011:   "load 0,17,%0,%1"
        !          1012:   [(set_attr "type" "load")])
        !          1013: 
        !          1014: (define_insn ""
        !          1015:   [(set (match_operand:HI 0 "gpc_reg_operand" "=r")
        !          1016:        (sign_extend:HI (match_operand:QI 1 "memory_operand" "m")))
        !          1017:    (clobber (match_scratch:PSI 2 "=&b"))]
        !          1018:   "TARGET_DW_ENABLE"
        !          1019:   "load 0,17,%0,%1"
        !          1020:   [(set_attr "type" "load")])
        !          1021: 
        !          1022: (define_insn ""
        !          1023:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1024:        (sign_extend:SI (match_operand:HI 1 "memory_operand" "m")))
        !          1025:    (clobber (match_scratch:PSI 2 "=&b"))]
        !          1026:   "TARGET_DW_ENABLE"
        !          1027:   "load 0,18,%0,%1"
        !          1028:   [(set_attr "type" "load")])
        !          1029: 
        !          1030: ;; LOADM
        !          1031: (define_expand "load_multiple"
        !          1032:   [(set (match_dup 4)
        !          1033:        (match_operand:PSI 2 "const_int_operand" ""))
        !          1034:    (match_par_dup 3 [(set (match_operand:SI 0 "" "")
        !          1035:                          (match_operand:SI 1 "" ""))])]
        !          1036:   ""
        !          1037:   "
        !          1038: {
        !          1039:   int regno;
        !          1040:   int count;
        !          1041:   rtx from;
        !          1042:   int i;
        !          1043: 
        !          1044:   /* Support only loading a constant number of hard registers from memory.  */
        !          1045:   if (GET_CODE (operands[2]) != CONST_INT
        !          1046:       || operands[2] == const1_rtx
        !          1047:       || GET_CODE (operands[1]) != MEM
        !          1048:       || GET_CODE (operands[0]) != REG
        !          1049:       || REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)
        !          1050:     FAIL;
        !          1051: 
        !          1052:   count = INTVAL (operands[2]);
        !          1053:   regno = REGNO (operands[0]);
        !          1054: 
        !          1055:   /* CR gets set to the number of registers minus one.  */
        !          1056:   operands[2] = GEN_INT(count - 1);
        !          1057: 
        !          1058:   operands[3] = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (count + 2));
        !          1059:   from = memory_address (SImode, XEXP (operands[1], 0));
        !          1060:   XVECEXP (operands[3], 0, 0) = gen_rtx (SET, VOIDmode,
        !          1061:                                         gen_rtx (REG, SImode, regno),
        !          1062:                                         gen_rtx (MEM, SImode, from));
        !          1063:   operands[4] = gen_reg_rtx (PSImode);
        !          1064: 
        !          1065:   XVECEXP (operands[3], 0, 1) = gen_rtx (USE, VOIDmode, operands[4]);
        !          1066:   XVECEXP (operands[3], 0, 2) = gen_rtx (CLOBBER, VOIDmode, operands[4]);
        !          1067: 
        !          1068:   for (i = 1; i < count; i++)
        !          1069:     XVECEXP (operands[3], 0, i + 2)
        !          1070:       = gen_rtx (SET, VOIDmode, gen_rtx (REG, SImode, regno + i),
        !          1071:                 gen_rtx (MEM, SImode, plus_constant (from, i * 4)));
        !          1072: }")
        !          1073: 
        !          1074: ;; Indicate that CR is used and is then clobbered.
        !          1075: (define_insn ""
        !          1076:   [(set (match_operand 0 "gpc_reg_operand" "=r")
        !          1077:        (match_operand 1 "memory_operand" "m"))
        !          1078:    (use (match_operand:PSI 2 "register_operand" "+c"))
        !          1079:    (clobber (match_dup 2))]
        !          1080:   "GET_MODE (operands[0]) == GET_MODE (operands[1])
        !          1081:    && GET_MODE_SIZE (GET_MODE (operands[0])) > UNITS_PER_WORD"
        !          1082:   "loadm 0,0,%0,%1"
        !          1083:   [(set_attr "type" "load")])
        !          1084: 
        !          1085: (define_insn ""
        !          1086:   [(match_parallel 0 "load_multiple_operation"
        !          1087:                   [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
        !          1088:                         (match_operand:SI 2 "memory_operand" "m"))
        !          1089:                    (use (match_operand:PSI 3 "register_operand" "+c"))
        !          1090:                    (clobber (match_dup 3))])]
        !          1091:   ""
        !          1092:   "loadm 0,0,%1,%2"
        !          1093:   [(set_attr "type" "load")])
        !          1094: 
        !          1095: ;; MTSR (used also by move insn)
        !          1096: (define_insn ""
        !          1097:   [(set (match_operand:SI 0 "spec_reg_operand" "=*h,*h")
        !          1098:        (and:SI (match_operand:SI 1 "gpc_reg_or_immediate_operand" "r,i")
        !          1099:                (match_operand:SI 2 "const_int_operand" "n,n")))]
        !          1100:   "masks_bits_for_special (operands[0], operands[2])"
        !          1101:   "@
        !          1102:    mtsr %0,%1
        !          1103:    mtsrim %0,%1")
        !          1104: 
        !          1105: (define_insn ""
        !          1106:   [(set (match_operand:PSI 0 "register_operand" "=h,h")
        !          1107:        (truncate:PSI
        !          1108:         (match_operand:SI 1 "gpc_reg_or_immediate_operand" "r,i")))]
        !          1109:   ""
        !          1110:   "@
        !          1111:    mtsr %0,%1
        !          1112:    mtsrim %0,%1")
        !          1113: 
        !          1114: ;; MULTIPLY, MULTM, MULTMU
        !          1115: (define_insn "mulsi3"
        !          1116:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1117:        (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
        !          1118:                 (match_operand:SI 2 "gpc_reg_operand" "r")))
        !          1119:    (clobber (match_scratch:SI 3 "=&q"))]
        !          1120:   ""
        !          1121:   "multiply %0,%1,%2")
        !          1122: 
        !          1123: (define_insn ""
        !          1124:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1125:        (subreg:SI
        !          1126:         (mult:DI
        !          1127:          (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
        !          1128:          (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))) 0))
        !          1129:    (clobber (match_scratch:SI 3 "=&q"))]
        !          1130:   ""
        !          1131:   "multm %0,%1,%2")
        !          1132: 
        !          1133: (define_insn ""
        !          1134:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1135:        (subreg:SI
        !          1136:         (mult:DI
        !          1137:          (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
        !          1138:          (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))) 0))
        !          1139:    (clobber (match_scratch:SI 3 "=&q"))]
        !          1140:   ""
        !          1141:   "multmu %0,%1,%2")
        !          1142: 
        !          1143: (define_insn "mulsidi3"
        !          1144:   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
        !          1145:        (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
        !          1146:                 (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))
        !          1147:    (clobber (match_scratch:SI 3 "=&q"))]
        !          1148:   ""
        !          1149:   "multiply %L0,%1,%2\;multm %0,%1,%2"
        !          1150:   [(set_attr "type" "multi")])
        !          1151: 
        !          1152: (define_split
        !          1153:   [(set (match_operand:DI 0 "gpc_reg_operand" "")
        !          1154:        (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
        !          1155:                 (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))
        !          1156:    (clobber (reg:SI 180))]
        !          1157:   "reload_completed"
        !          1158:   [(parallel [(set (match_dup 3)
        !          1159:                   (mult:SI (match_dup 1) (match_dup 2)))
        !          1160:              (clobber (reg:SI 180))])
        !          1161:    (parallel [(set (match_dup 4)
        !          1162:                   (subreg:SI (mult:DI
        !          1163:                               (sign_extend:DI (match_dup 1))
        !          1164:                               (sign_extend:DI (match_dup 2))) 0))
        !          1165:              (clobber (reg:SI 180))])]
        !          1166:   "
        !          1167: { operands[3] = operand_subword (operands[0], 1, 1, DImode);
        !          1168:   operands[4] = operand_subword (operands[1], 0, 1, DImode); } ")
        !          1169:                            
        !          1170: (define_insn "umulsidi3"
        !          1171:   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
        !          1172:        (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
        !          1173:                 (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))
        !          1174:    (clobber (match_scratch:SI 3 "=&q"))]
        !          1175:   ""
        !          1176:   "multiplu %L0,%1,%2\;multmu %0,%1,%2"
        !          1177:   [(set_attr "type" "multi")])
        !          1178: 
        !          1179: (define_split
        !          1180:   [(set (match_operand:DI 0 "gpc_reg_operand" "")
        !          1181:        (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
        !          1182:                 (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))
        !          1183:    (clobber (reg:SI 180))]
        !          1184:   "reload_completed"
        !          1185:   [(parallel [(set (match_dup 3)
        !          1186:                   (mult:SI (match_dup 1) (match_dup 2)))
        !          1187:              (clobber (reg:SI 180))])
        !          1188:    (parallel [(set (match_dup 4)
        !          1189:                   (subreg:SI (mult:DI (zero_extend:DI (match_dup 1))
        !          1190:                                       (zero_extend:DI (match_dup 2))) 0))
        !          1191:              (clobber (reg:SI 180))])]
        !          1192:   "
        !          1193: { operands[3] = operand_subword (operands[0], 1, 1, DImode);
        !          1194:   operands[4] = operand_subword (operands[1], 0, 1, DImode); } ")
        !          1195:                            
        !          1196: ;; NAND
        !          1197: (define_insn ""
        !          1198:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1199:        (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
        !          1200:                (not:SI (match_operand:SI 2 "srcb_operand" "rI"))))]
        !          1201:   ""
        !          1202:   "nand %0,%1,%2")
        !          1203: 
        !          1204: (define_insn ""
        !          1205:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1206:        (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
        !          1207:                (match_operand:SI 2 "const_int_operand" "K")))]
        !          1208:   "((unsigned) ~ INTVAL (operands[2])) < 256"
        !          1209:   "nand %0,%1,%C2")
        !          1210: 
        !          1211: ;; NOR
        !          1212: (define_insn ""
        !          1213:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1214:        (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
        !          1215:                (not:SI (match_operand:SI 2 "srcb_operand" "rI"))))]
        !          1216:   ""
        !          1217:   "nor %0,%1,%2")
        !          1218: 
        !          1219: (define_insn ""
        !          1220:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1221:        (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
        !          1222:                (match_operand:SI 2 "const_int_operand" "K")))]
        !          1223:   "((unsigned) ~ INTVAL (operands[2])) < 256"
        !          1224:   "nor %0,%1,%C2")
        !          1225: 
        !          1226: (define_insn "one_cmplsi2"
        !          1227:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1228:        (not:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
        !          1229:   ""
        !          1230:   "nor %0,%1,0")
        !          1231: 
        !          1232: ;; OR/ORN
        !          1233: (define_expand "iorsi3"
        !          1234:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          1235:        (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
        !          1236:                (match_operand:SI 2 "srcb_operand" "")))]
        !          1237:   ""
        !          1238:   "")
        !          1239: 
        !          1240: (define_insn ""
        !          1241:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1242:        (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
        !          1243:                (match_operand:SI 2 "srcb_operand" "rI")))]
        !          1244:   "! TARGET_29050"
        !          1245:   "or %0,%1,%2")
        !          1246: 
        !          1247: (define_insn ""
        !          1248:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
        !          1249:        (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
        !          1250:                (match_operand:SI 2 "srcb_operand" "rI,K")))]
        !          1251:   "TARGET_29050"
        !          1252:   "@
        !          1253:    or %0,%1,%2
        !          1254:    orn %0,%1,%C2")
        !          1255: 
        !          1256: 
        !          1257: ;; SLL (also used by move insn)
        !          1258: (define_insn "nop"
        !          1259:   [(const_int 0)]
        !          1260:   ""
        !          1261:   "aseq 0x40,gr1,gr1")
        !          1262: 
        !          1263: (define_insn "ashlsi3"
        !          1264:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1265:        (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !          1266:                   (match_operand:QI 2 "srcb_operand" "rn")))]
        !          1267:   ""
        !          1268:   "sll %0,%1,%Q2")
        !          1269: 
        !          1270: ;; SQRT
        !          1271: (define_insn "sqrtsf2"
        !          1272:   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
        !          1273:        (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "r")))]
        !          1274:   "TARGET_29050"
        !          1275:   "sqrt %0,%1,1"
        !          1276:   [(set_attr "type" "fsqrt")])
        !          1277: 
        !          1278: (define_insn "sqrtdf2"
        !          1279:   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
        !          1280:        (sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "r")))]
        !          1281:   "TARGET_29050"
        !          1282:   "sqrt %0,%1,2"
        !          1283:   [(set_attr "type" "dsqrt")])
        !          1284: 
        !          1285: ;; SRA
        !          1286: (define_insn "ashrsi3"
        !          1287:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1288:        (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !          1289:                     (match_operand:QI 2 "srcb_operand" "rn")))]
        !          1290:   ""
        !          1291:   "sra %0,%1,%Q2")
        !          1292: 
        !          1293: ;; SRL
        !          1294: (define_insn "lshrsi3"
        !          1295:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1296:        (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
        !          1297:                     (match_operand:QI 2 "srcb_operand" "rn")))]
        !          1298:   ""
        !          1299:   "srl %0,%1,%Q2")
        !          1300: 
        !          1301: ;; STORE
        !          1302: ;;
        !          1303: ;; These somewhat bogus patterns exist to set OPT = 001/010 for partial-word
        !          1304: ;; stores on systems with DW not set.
        !          1305: (define_insn ""
        !          1306:   [(set (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "r")
        !          1307:                        (const_int -4)))
        !          1308:        (match_operand:SI 1 "gpc_reg_operand" "r"))]
        !          1309:   "! TARGET_DW_ENABLE"
        !          1310:   "store 0,1,%1,%0"
        !          1311:   [(set_attr "type" "store")])
        !          1312: 
        !          1313: (define_insn ""
        !          1314:   [(set (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "r")
        !          1315:                        (const_int -3)))
        !          1316:        (match_operand:SI 1 "gpc_reg_operand" "r"))]
        !          1317:   "! TARGET_DW_ENABLE"
        !          1318:   "store 0,2,%1,%0"
        !          1319:   [(set_attr "type" "store")])
        !          1320: 
        !          1321: ;; STOREM
        !          1322: (define_expand "store_multiple"
        !          1323:   [(use (match_operand 0 "" ""))
        !          1324:    (use (match_operand 1 "" ""))
        !          1325:    (use (match_operand 2 "" ""))]
        !          1326:   ""
        !          1327:   "
        !          1328: { rtx pat;
        !          1329: 
        !          1330:  if (TARGET_NO_STOREM_BUG)
        !          1331:     pat = gen_store_multiple_no_bug (operands[0], operands[1], operands[2]);
        !          1332:   else
        !          1333:     pat = gen_store_multiple_bug (operands[0], operands[1], operands[2]);
        !          1334: 
        !          1335:   if (pat)
        !          1336:     emit_insn (pat);
        !          1337:   else
        !          1338:     FAIL;
        !          1339: 
        !          1340:   DONE;
        !          1341: }")
        !          1342: 
        !          1343: (define_expand "store_multiple_no_bug"
        !          1344:   [(set (match_dup 4)
        !          1345:        (match_operand:PSI 2 "const_int_operand" ""))
        !          1346:    (match_par_dup 3 [(set (match_operand:SI 0 "" "")
        !          1347:                          (match_operand:SI 1 "" ""))])]
        !          1348:   ""
        !          1349:   "
        !          1350: {
        !          1351:   int regno;
        !          1352:   int count;
        !          1353:   rtx from;
        !          1354:   int i;
        !          1355: 
        !          1356:   /* Support only storing a constant number of hard registers to memory.  */
        !          1357:   if (GET_CODE (operands[2]) != CONST_INT
        !          1358:       || operands[2] == const1_rtx
        !          1359:       || GET_CODE (operands[0]) != MEM
        !          1360:       || GET_CODE (operands[1]) != REG
        !          1361:       || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
        !          1362:     FAIL;
        !          1363: 
        !          1364:   count = INTVAL (operands[2]);
        !          1365:   regno = REGNO (operands[1]);
        !          1366: 
        !          1367:   /* CR gets set to the number of registers minus one.  */
        !          1368:   operands[2] = GEN_INT(count - 1);
        !          1369: 
        !          1370:   operands[3] = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (count + 2));
        !          1371:   from = memory_address (SImode, XEXP (operands[0], 0));
        !          1372:   XVECEXP (operands[3], 0, 0) = gen_rtx (SET, VOIDmode,
        !          1373:                                         gen_rtx (MEM, SImode, from),
        !          1374:                                         gen_rtx (REG, SImode, regno));
        !          1375:   operands[4] = gen_reg_rtx (PSImode);
        !          1376:   XVECEXP (operands[3], 0, 1) = gen_rtx (USE, VOIDmode, operands[4]);
        !          1377:   XVECEXP (operands[3], 0, 2) = gen_rtx (CLOBBER, VOIDmode, operands[4]);
        !          1378: 
        !          1379:   for (i = 1; i < count; i++)
        !          1380:     XVECEXP (operands[3], 0, i + 2)
        !          1381:       = gen_rtx (SET, VOIDmode,
        !          1382:                 gen_rtx (MEM, SImode, plus_constant (from, i * 4)),
        !          1383:                 gen_rtx (REG, SImode, regno + i));
        !          1384: }")
        !          1385: 
        !          1386: (define_expand "store_multiple_bug"
        !          1387:   [(match_par_dup 3 [(set (match_operand:SI 0 "" "")
        !          1388:                          (match_operand:SI 1 "" ""))
        !          1389:                     (use (match_operand:SI 2 "" ""))])]
        !          1390:   ""
        !          1391:   "
        !          1392: {
        !          1393:   int regno;
        !          1394:   int count;
        !          1395:   rtx from;
        !          1396:   int i;
        !          1397: 
        !          1398:   /* Support only storing a constant number of hard registers to memory.  */
        !          1399:   if (GET_CODE (operands[2]) != CONST_INT
        !          1400:       || operands[2] == const1_rtx
        !          1401:       || GET_CODE (operands[0]) != MEM
        !          1402:       || GET_CODE (operands[1]) != REG
        !          1403:       || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
        !          1404:     FAIL;
        !          1405: 
        !          1406:   count = INTVAL (operands[2]);
        !          1407:   regno = REGNO (operands[1]);
        !          1408: 
        !          1409:   operands[3] = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (count + 1));
        !          1410:   from = memory_address (SImode, XEXP (operands[0], 0));
        !          1411:   XVECEXP (operands[3], 0, 0) = gen_rtx (SET, VOIDmode,
        !          1412:                                         gen_rtx (MEM, SImode, from),
        !          1413:                                         gen_rtx (REG, SImode, regno));
        !          1414:   XVECEXP (operands[3], 0, 1)
        !          1415:     = gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, PSImode));
        !          1416: 
        !          1417:   for (i = 1; i < count; i++)
        !          1418:     XVECEXP (operands[3], 0, i + 1)
        !          1419:       = gen_rtx (SET, VOIDmode,
        !          1420:                 gen_rtx (MEM, SImode, plus_constant (from, i * 4)),
        !          1421:                 gen_rtx (REG, SImode, regno + i));
        !          1422: }")
        !          1423: 
        !          1424: (define_insn ""
        !          1425:   [(set (match_operand 0 "memory_operand" "=m")
        !          1426:        (match_operand 1 "gpc_reg_operand" "r"))
        !          1427:    (clobber (match_scratch:PSI 2 "=&c"))]
        !          1428:   "!TARGET_NO_STOREM_BUG
        !          1429:    && GET_MODE (operands[0]) == GET_MODE (operands[1])
        !          1430:    && GET_MODE_SIZE (GET_MODE (operands[0])) > UNITS_PER_WORD"
        !          1431:   "mtsrim cr,%S1\;storem 0,0,%1,%0"
        !          1432:   [(set_attr "type" "multi")])
        !          1433: 
        !          1434: (define_insn ""
        !          1435:   [(match_parallel 0 "store_multiple_operation"
        !          1436:                   [(set (match_operand:SI 1 "memory_operand" "=m")
        !          1437:                         (match_operand:SI 2 "gpc_reg_operand" "r"))
        !          1438:                    (clobber (match_scratch:PSI 3 "=&c"))])]
        !          1439:   "!TARGET_NO_STOREM_BUG"
        !          1440:   "mtsrim cr,%V0\;storem 0,0,%2,%1"
        !          1441:   [(set_attr "type" "multi")])
        !          1442: 
        !          1443: (define_insn ""
        !          1444:   [(set (match_operand 0 "memory_operand" "=m")
        !          1445:        (match_operand 1 "gpc_reg_operand" "r"))
        !          1446:    (use (match_operand:PSI 2 "register_operand" "+c"))
        !          1447:    (clobber (match_dup 2))]
        !          1448:   "TARGET_NO_STOREM_BUG
        !          1449:    && GET_MODE (operands[0]) == GET_MODE (operands[1])
        !          1450:    && GET_MODE_SIZE (GET_MODE (operands[0])) > UNITS_PER_WORD"
        !          1451:   "storem 0,0,%1,%0"
        !          1452:   [(set_attr "type" "store")])
        !          1453: 
        !          1454: (define_insn ""
        !          1455:   [(match_parallel 0 "store_multiple_operation"
        !          1456:                   [(set (match_operand:SI 1 "memory_operand" "=m")
        !          1457:                         (match_operand:SI 2 "gpc_reg_operand" "r"))
        !          1458:                    (use (match_operand:PSI 3 "register_operand" "+c"))
        !          1459:                    (clobber (match_dup 3))])]
        !          1460:   "TARGET_NO_STOREM_BUG"
        !          1461:   "storem 0,0,%2,%1"
        !          1462:   [(set_attr "type" "store")])
        !          1463: 
        !          1464: ;; SUB
        !          1465: ;;
        !          1466: ;; Either operand can be a register or an 8-bit constant, but both cannot be
        !          1467: ;; constants (can't usually occur anyway).
        !          1468: (define_expand "subsi3"
        !          1469:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          1470:        (minus:SI (match_operand:SI 1 "srcb_operand" "")
        !          1471:                  (match_operand:SI 2 "srcb_operand" "")))]
        !          1472:   ""
        !          1473:   "
        !          1474: {
        !          1475:   if (GET_CODE (operands[0]) == CONST_INT
        !          1476:       && GET_CODE (operands[1]) == CONST_INT)
        !          1477:     operands[1] = force_reg (SImode, operands[1]);
        !          1478: }")
        !          1479: 
        !          1480: (define_insn ""
        !          1481:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
        !          1482:        (minus:SI (match_operand:SI 1 "srcb_operand" "r,I")
        !          1483:                  (match_operand:SI 2 "srcb_operand" "rI,r")))]
        !          1484:   "register_operand (operands[1], SImode)
        !          1485:    || register_operand (operands[2], SImode)"
        !          1486:   "@
        !          1487:    sub %0,%1,%2
        !          1488:    subr %0,%2,%1")
        !          1489: 
        !          1490: (define_insn "subdi3"
        !          1491:   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
        !          1492:        (minus:DI (match_operand:DI 1 "gpc_reg_operand" "r")
        !          1493:                  (match_operand:DI 2 "gpc_reg_operand" "r")))]
        !          1494:   ""
        !          1495:   "sub %L0,%L1,%L2\;subc %0,%1,%2"
        !          1496:   [(set_attr "type" "multi")])
        !          1497: 
        !          1498: ;; SUBR (also used above in SUB)
        !          1499: (define_insn "negdi2"
        !          1500:   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
        !          1501:        (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
        !          1502:   ""
        !          1503:   "subr %L0,%L1,0\;subrc %0,%1,0"
        !          1504:   [(set_attr "type" "multi")])
        !          1505: 
        !          1506: (define_insn "negsi2"
        !          1507:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1508:        (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
        !          1509:   ""
        !          1510:   "subr %0,%1,0")
        !          1511: 
        !          1512: ;; XNOR
        !          1513: (define_insn ""
        !          1514:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1515:        (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
        !          1516:                        (match_operand:SI 2 "srcb_operand" "rI"))))]
        !          1517:   ""
        !          1518:   "xnor %0,%1,%2")
        !          1519: 
        !          1520: ;; XOR
        !          1521: (define_insn "xorsi3"
        !          1522:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1523:        (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
        !          1524:                (match_operand:SI 2 "srcb_operand" "rI")))]
        !          1525:   ""
        !          1526:   "xor %0,%1,%2")
        !          1527: 
        !          1528: ;; Can use XOR to negate floating-point values, but we are better off not doing
        !          1529: ;; it that way on the 29050 so it can combine with the fmac insns.
        !          1530: (define_expand "negsf2"
        !          1531:   [(parallel [(set (match_operand:SF 0 "register_operand" "")
        !          1532:                   (neg:SF (match_operand:SF 1 "register_operand" "")))
        !          1533:              (clobber (match_scratch:SI 2 ""))])]
        !          1534:   ""
        !          1535:   "
        !          1536: {
        !          1537:   rtx result;
        !          1538:   rtx target;
        !          1539: 
        !          1540:   if (! TARGET_29050)
        !          1541:     {
        !          1542:       target = operand_subword_force (operands[0], 0, SFmode);
        !          1543:       result = expand_binop (SImode, xor_optab,
        !          1544:                             operand_subword_force (operands[1], 0, SFmode),
        !          1545:                             GEN_INT(0x80000000), target, 0, OPTAB_WIDEN);
        !          1546:       if (result == 0)
        !          1547:        abort ();
        !          1548: 
        !          1549:       if (result != target)
        !          1550:        emit_move_insn (result, target);
        !          1551: 
        !          1552:       /* Make a place for REG_EQUAL.  */
        !          1553:       emit_move_insn (operands[0], operands[0]);
        !          1554:       DONE;
        !          1555:     }
        !          1556: }")
        !          1557: 
        !          1558: (define_expand "negdf2"
        !          1559:   [(parallel [(set (match_operand:DF 0 "register_operand" "")
        !          1560:                   (neg:DF (match_operand:DF 1 "register_operand" "")))
        !          1561:              (clobber (match_scratch:SI 2 ""))])]
        !          1562:   ""
        !          1563:   "
        !          1564: {
        !          1565:   rtx result;
        !          1566:   rtx target;
        !          1567:   rtx insns;
        !          1568: 
        !          1569:   if (! TARGET_29050)
        !          1570:     {
        !          1571:       start_sequence ();
        !          1572:       target = operand_subword (operands[0], 0, 1, DFmode);
        !          1573:       result = expand_binop (SImode, xor_optab,
        !          1574:                             operand_subword_force (operands[1], 0, DFmode),
        !          1575:                             GEN_INT(0x80000000), target, 0, OPTAB_WIDEN);
        !          1576:       if (result == 0)
        !          1577:        abort ();
        !          1578: 
        !          1579:       if (result != target)
        !          1580:        emit_move_insn (result, target);
        !          1581:   
        !          1582:       emit_move_insn (operand_subword (operands[0], 1, 1, DFmode),
        !          1583:                      operand_subword_force (operands[1], 1, DFmode));
        !          1584: 
        !          1585:       insns = get_insns ();
        !          1586:       end_sequence ();
        !          1587: 
        !          1588:       emit_no_conflict_block (insns, operands[0], operands[1], 0, 0);
        !          1589:       DONE;
        !          1590:     }
        !          1591: }")
        !          1592: 
        !          1593: ;; Sign extend and truncation operations.
        !          1594: (define_insn "zero_extendqihi2"
        !          1595:   [(set (match_operand:HI 0 "gpc_reg_operand" "=r")
        !          1596:        (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r")))]
        !          1597:   ""
        !          1598:   "and %0,%1,255")
        !          1599: 
        !          1600: (define_insn "zero_extendqisi2"
        !          1601:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1602:        (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r")))]
        !          1603:   ""
        !          1604:   "and %0,%1,255")
        !          1605: 
        !          1606: (define_insn "zero_extendhisi2"
        !          1607:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1608:        (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "0")))]
        !          1609:   ""
        !          1610:   "consth %0,0")
        !          1611: 
        !          1612: (define_expand "extendqihi2"
        !          1613:   [(set (match_dup 2)
        !          1614:        (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
        !          1615:                   (const_int 24)))
        !          1616:    (set (match_operand:HI 0 "gpc_reg_operand" "")
        !          1617:        (ashiftrt:SI (match_dup 2)
        !          1618:                     (const_int 24)))]
        !          1619:   ""
        !          1620:   "
        !          1621: { operands[0] = gen_lowpart (SImode, operands[0]);
        !          1622:   operands[1] = gen_lowpart (SImode, operands[1]);
        !          1623:   operands[2] = gen_reg_rtx (SImode); }")
        !          1624: 
        !          1625: (define_expand "extendqisi2"
        !          1626:   [(set (match_dup 2)
        !          1627:        (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
        !          1628:                   (const_int 24)))
        !          1629:    (set (match_operand:SI 0 "gpc_reg_operand" "")
        !          1630:        (ashiftrt:SI (match_dup 2)
        !          1631:                     (const_int 24)))]
        !          1632:   ""
        !          1633:   "
        !          1634: { operands[1] = gen_lowpart (SImode, operands[1]);
        !          1635:   operands[2] = gen_reg_rtx (SImode); }")
        !          1636: 
        !          1637: (define_expand "extendhisi2"
        !          1638:   [(set (match_dup 2)
        !          1639:        (ashift:SI (match_operand:HI 1 "gpc_reg_operand" "")
        !          1640:                   (const_int 16)))
        !          1641:    (set (match_operand:SI 0 "gpc_reg_operand" "")
        !          1642:        (ashiftrt:SI (match_dup 2)
        !          1643:                     (const_int 16)))]
        !          1644:   ""
        !          1645:   "
        !          1646: { operands[1] = gen_lowpart (SImode, operands[1]);
        !          1647:   operands[2] = gen_reg_rtx (SImode); }")
        !          1648: 
        !          1649: ;; Define the methods used to move data around.
        !          1650: ;;
        !          1651: ;; movsi:
        !          1652: ;;
        !          1653: ;; If storing into memory, force source into register.
        !          1654: (define_expand "movsi"
        !          1655:   [(set (match_operand:SI 0 "general_operand" "")
        !          1656:        (match_operand:SI 1 "general_operand" ""))]
        !          1657:   ""
        !          1658:   "
        !          1659: {
        !          1660:   if (GET_CODE (operands[0]) == MEM && ! gpc_reg_operand (operands[1], SImode))
        !          1661:     operands[1] = copy_to_mode_reg (SImode, operands[1]);
        !          1662:   else if (spec_reg_operand (operands[0], SImode)
        !          1663:           && ! (register_operand (operands[1], SImode)
        !          1664:                 || cint_16_operand (operands[1], SImode)))
        !          1665:     operands[1] = force_reg (SImode, operands[1]);
        !          1666: }")
        !          1667: 
        !          1668: (define_expand "movpsi"
        !          1669:   [(set (match_operand:PSI 0 "general_operand" "")
        !          1670:        (match_operand:PSI 1 "general_operand" ""))]
        !          1671:   ""
        !          1672:   "
        !          1673: {
        !          1674:   if (GET_CODE (operands[0]) == MEM
        !          1675:       && ! gpc_reg_operand (operands[1], PSImode))
        !          1676:     operands[1] = copy_to_mode_reg (PSImode, operands[1]);
        !          1677:   else if (spec_reg_operand (operands[0], PSImode)
        !          1678:           && ! (register_operand (operands[1], PSImode)
        !          1679:                 || cint_16_operand (operands[1], PSImode)))
        !          1680:     operands[1] = force_reg (PSImode, operands[1]);
        !          1681: }")
        !          1682: 
        !          1683: (define_split
        !          1684:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          1685:        (match_operand:SI 1 "long_const_operand" ""))]
        !          1686:   ""
        !          1687:   [(set (match_dup 0)
        !          1688:        (and:SI (match_dup 1)
        !          1689:                (const_int 65535)))
        !          1690:    (set (match_dup 0)
        !          1691:        (ior:SI (zero_extend:SI (match_dup 2))
        !          1692:                (and:SI (match_dup 1)
        !          1693:                        (const_int -65536))))]
        !          1694:   " operands[2] = gen_lowpart (HImode, operands[0]); ")
        !          1695: 
        !          1696: ;; Subroutines to load/store halfwords.  Operands 0 and 1 are the output and
        !          1697: ;; input, respectively, except that the address is passed for a MEM instead 
        !          1698: ;; of the MEM itself and the short item is passed in QImode.
        !          1699: ;;
        !          1700: ;; Operand 2 is a scratch general register and operand 3 is a scratch register
        !          1701: ;; used for BP.  When called before reload, pseudos are passed for both
        !          1702: ;; operands.  During reload, R_TAV is used for the general register, and
        !          1703: ;; a reload register of class BR_REGS (R_VP) for BP.
        !          1704: ;;
        !          1705: ;; We have two versions of the store operations, for when halfword writes are
        !          1706: ;; supported and when they are not.
        !          1707: (define_expand "loadhi"
        !          1708:   [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
        !          1709:                   (mem:SI (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
        !          1710:                                   (const_int -4))))
        !          1711:              (set (match_operand:PSI 3 "register_operand" "")
        !          1712:                   (truncate:PSI (match_dup 1)))])
        !          1713:    (set (match_operand:SI 0 "gpc_reg_operand" "")
        !          1714:        (zero_extract:SI (match_dup 2)
        !          1715:                         (const_int 16)
        !          1716:                         (ashift:PSI (match_dup 3) (const_int 3))))]
        !          1717:   ""
        !          1718:   "")
        !          1719: 
        !          1720: (define_expand "storehinhww"
        !          1721:  [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
        !          1722:                   (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "")
        !          1723:                                   (const_int -4))))
        !          1724:              (set (match_operand:PSI 3 "register_operand" "")
        !          1725:                   (truncate:PSI (match_dup 0)))])
        !          1726:    (set (zero_extract:SI (match_dup 2)
        !          1727:                         (const_int 16)
        !          1728:                         (ashift:PSI (match_dup 3) (const_int 3)))
        !          1729:        (match_operand:SI 1 "gpc_reg_operand" ""))
        !          1730:    (set (mem:SI (match_dup 0))
        !          1731:        (match_dup 2))]
        !          1732:   ""
        !          1733:   "")
        !          1734: 
        !          1735: (define_expand "storehihww"
        !          1736:   [(set (match_operand:PSI 3 "register_operand" "")
        !          1737:        (truncate:PSI (match_operand:SI 0 "gpc_reg_operand" "")))
        !          1738:    (set (match_operand:SI 2 "gpc_reg_operand" "")
        !          1739:        (ior:SI (and:SI (not:SI (ashift:SI (const_int 65535)
        !          1740:                                           (ashift:PSI (match_dup 3)
        !          1741:                                                       (const_int 3))))
        !          1742:                        (match_operand:SI 1 "gpc_reg_operand" ""))
        !          1743:                (ashift:SI (zero_extend:SI (match_dup 4))
        !          1744:                           (ashift:PSI (match_dup 3) (const_int 3)))))
        !          1745:    (set (mem:SI (and:SI (match_dup 0)
        !          1746:                        (const_int -3)))
        !          1747:        (match_dup 2))]
        !          1748:   ""
        !          1749:   "
        !          1750: { operands[4] = gen_lowpart (HImode, operands[1]); }")
        !          1751: 
        !          1752: (define_expand "movhi"
        !          1753:   [(set (match_operand:HI 0 "general_operand" "")
        !          1754:        (match_operand:HI 1 "general_operand" ""))]
        !          1755:   ""
        !          1756:   "
        !          1757: { if (GET_CODE (operands[0]) == MEM) 
        !          1758:     {
        !          1759:       if (! gpc_reg_operand (operands[1], HImode))
        !          1760:        operands[1] = copy_to_mode_reg (HImode, operands[1]);
        !          1761:       if (! TARGET_DW_ENABLE)
        !          1762:        {
        !          1763:          rtx general = gen_reg_rtx (SImode);
        !          1764:          rtx bp = gen_reg_rtx (PSImode);
        !          1765:          rtx (*fcn) ()
        !          1766:            = TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww;
        !          1767:          rtx seq = (*fcn) (XEXP (operands[0], 0),
        !          1768:                            gen_lowpart (SImode, operands[1]),
        !          1769:                            general, bp);
        !          1770:            
        !          1771:          a29k_set_memflags (seq, operands[0]);
        !          1772:          emit_insn (seq);
        !          1773:          DONE;
        !          1774:        }
        !          1775:     }
        !          1776:   else if (GET_CODE (operands[1]) == MEM)
        !          1777:     {
        !          1778:       if (! TARGET_DW_ENABLE)
        !          1779:        {
        !          1780:          rtx general = gen_reg_rtx (SImode);
        !          1781:          rtx bp = gen_reg_rtx (PSImode);
        !          1782:          rtx seq = gen_loadqi (gen_lowpart (SImode, operands[0]),
        !          1783:                                XEXP (operands[1], 0), general, bp);
        !          1784: 
        !          1785:          a29k_set_memflags (seq, operands[1]);
        !          1786:          emit_insn (seq);
        !          1787:          DONE;
        !          1788:        }
        !          1789:     }
        !          1790: }")
        !          1791: 
        !          1792: (define_expand "reload_inhi"
        !          1793:   [(parallel [(match_operand:SI 0 "register_operand" "=r")
        !          1794:              (match_operand:SI 1 "reload_memory_operand" "m")
        !          1795:              (match_operand:PSI 2 "register_operand" "=b")])]
        !          1796:   "! TARGET_DW_ENABLE"
        !          1797:   "
        !          1798: { rtx seq = gen_loadhi (gen_lowpart (SImode, operands[0]),
        !          1799:                        a29k_get_reloaded_address (operands[1]),
        !          1800:                        gen_rtx (REG, SImode, R_TAV),
        !          1801:                        operands[2]);
        !          1802: 
        !          1803:   a29k_set_memflags (seq, operands[1]);
        !          1804:   emit_insn (seq);
        !          1805:   DONE;
        !          1806: }")
        !          1807: 
        !          1808: (define_expand "reload_outhi"
        !          1809:   [(parallel [(match_operand:SI 0 "reload_memory_operand" "=m")
        !          1810:              (match_operand:SI 1 "register_operand" "m")
        !          1811:              (match_operand:PSI 2 "register_operand" "=b")])]
        !          1812:   "! TARGET_DW_ENABLE"
        !          1813:   "
        !          1814: { rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww;
        !          1815:   rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]),
        !          1816:                    gen_lowpart (SImode, operands[1]),
        !          1817:                    gen_rtx (REG, SImode, R_TAV), operands[2]);
        !          1818: 
        !          1819:   a29k_set_memflags (seq, operands[0]);
        !          1820:   emit_insn (seq);
        !          1821:   DONE;
        !          1822: }")
        !          1823: 
        !          1824: ;; Subroutines to load/store bytes.  Operands 0 and 1 are the output and
        !          1825: ;; input, respectively, except that the address is passed for a MEM instead 
        !          1826: ;; of the MEM itself and the short item is passed in QImode.
        !          1827: ;;
        !          1828: ;; Operand 2 is a scratch general register and operand 3 is a scratch register
        !          1829: ;; used for BP.  When called before reload, pseudos are passed for both
        !          1830: ;; operands.  During reload, R_TAV is used for the general register, and
        !          1831: ;; a reload register of class BR_REGS (R_VP) for BP.
        !          1832: ;;
        !          1833: ;; We have two versions of the store operations, for when byte writes are
        !          1834: ;; supported and when they are not.
        !          1835: (define_expand "loadqi"
        !          1836:   [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
        !          1837:                   (mem:SI (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
        !          1838:                                   (const_int -4))))
        !          1839:              (set (match_operand:PSI 3 "register_operand" "")
        !          1840:                   (truncate:PSI (match_dup 1)))])
        !          1841:    (set (match_operand:SI 0 "gpc_reg_operand" "")
        !          1842:        (zero_extract:SI (match_dup 2)
        !          1843:                         (const_int 8)
        !          1844:                         (ashift:PSI (match_dup 3) (const_int 3))))]
        !          1845:   ""
        !          1846:   "")
        !          1847: 
        !          1848: (define_expand "storeqinhww"
        !          1849:   [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
        !          1850:                   (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "")
        !          1851:                                   (const_int -4))))
        !          1852:              (set (match_operand:PSI 3 "register_operand" "")
        !          1853:                   (truncate:PSI (match_dup 0)))])
        !          1854:    (set (zero_extract:SI (match_dup 2)
        !          1855:                         (const_int 8)
        !          1856:                         (ashift:PSI (match_dup 3)
        !          1857:                                     (const_int 3)))
        !          1858:        (match_operand:SI 1 "gpc_reg_operand" ""))
        !          1859:    (set (mem:SI (match_dup 0))
        !          1860:        (match_dup 2))]
        !          1861:   ""
        !          1862:   "")
        !          1863: 
        !          1864: (define_expand "storeqihww"
        !          1865:   [(set (match_operand:PSI 3 "register_operand" "")
        !          1866:        (truncate:PSI (match_operand:SI 0 "gpc_reg_operand" "")))
        !          1867:    (set (match_operand:SI 2 "gpc_reg_operand" "")
        !          1868:        (ior:SI (and:SI (not:SI (ashift:SI (const_int 255)
        !          1869:                                           (ashift:PSI (match_dup 3)
        !          1870:                                                       (const_int 3))))
        !          1871:                        (match_operand:SI 1 "gpc_reg_operand" ""))
        !          1872:                (ashift:SI (zero_extend:SI (match_dup 4))
        !          1873:                           (ashift:PSI (match_dup 3)
        !          1874:                                       (const_int 3)))))
        !          1875:    (set (mem:SI (and:SI (match_dup 0)
        !          1876:                        (const_int -4)))
        !          1877:        (match_dup 2))]
        !          1878:   ""
        !          1879:   "
        !          1880: { operands[4] = gen_lowpart (QImode, operands[1]); }")
        !          1881: 
        !          1882: (define_expand "movqi"
        !          1883:   [(set (match_operand:QI 0 "general_operand" "")
        !          1884:        (match_operand:QI 1 "general_operand" ""))]
        !          1885:   ""
        !          1886:   "
        !          1887: { if (GET_CODE (operands[0]) == MEM)
        !          1888:     {
        !          1889:       if (! gpc_reg_operand (operands[1], QImode))
        !          1890:        operands[1] = copy_to_mode_reg (QImode, operands[1]);
        !          1891:       if (! TARGET_DW_ENABLE)
        !          1892:        {
        !          1893:          rtx general = gen_reg_rtx (SImode);
        !          1894:          rtx bp = gen_reg_rtx (PSImode);
        !          1895:          rtx (*fcn) ()
        !          1896:            = TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww;
        !          1897:          rtx seq = (*fcn) (XEXP (operands[0], 0),
        !          1898:                            gen_lowpart (SImode, operands[1]),
        !          1899:                            general, bp);
        !          1900:            
        !          1901:          a29k_set_memflags (seq, operands[0]);
        !          1902:          emit_insn (seq);
        !          1903:        }
        !          1904:     }
        !          1905:   else if (GET_CODE (operands[1]) == MEM)
        !          1906:     {
        !          1907:       if (! TARGET_DW_ENABLE)
        !          1908:        {
        !          1909:          rtx general = gen_reg_rtx (SImode);
        !          1910:          rtx bp = gen_reg_rtx (PSImode);
        !          1911:          rtx seq = gen_loadqi (gen_lowpart (SImode, operands[0]),
        !          1912:                                XEXP (operands[1], 0), general, bp);
        !          1913: 
        !          1914:          a29k_set_memflags (seq, operands[1]);
        !          1915:          emit_insn (seq);
        !          1916:          DONE;
        !          1917:        }
        !          1918:     }
        !          1919: }")
        !          1920: 
        !          1921: (define_expand "reload_inqi"
        !          1922:   [(parallel [(match_operand:SI 0 "register_operand" "=r")
        !          1923:              (match_operand:SI 1 "reload_memory_operand" "m")
        !          1924:              (match_operand:PSI 2 "register_operand" "=b")])]
        !          1925:   "! TARGET_DW_ENABLE"
        !          1926:   "
        !          1927: { rtx seq = gen_loadqi (gen_lowpart (SImode, operands[0]),
        !          1928:                        a29k_get_reloaded_address (operands[1]),
        !          1929:                        gen_rtx (REG, SImode, R_TAV),
        !          1930:                        operands[2]);
        !          1931: 
        !          1932:   a29k_set_memflags (seq, operands[1]);
        !          1933:   emit_insn (seq);
        !          1934:   DONE;
        !          1935: }")
        !          1936: 
        !          1937: (define_expand "reload_outqi"
        !          1938:   [(parallel [(match_operand:SI 0 "reload_memory_operand" "=m")
        !          1939:              (match_operand:SI 1 "register_operand" "m")
        !          1940:              (match_operand:PSI 2 "register_operand" "=b")])]
        !          1941:   "! TARGET_DW_ENABLE"
        !          1942:   "
        !          1943: { rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww;
        !          1944:   rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]),
        !          1945:                    gen_lowpart (SImode, operands[1]),
        !          1946:                    gen_rtx (REG, SImode, R_TAV), operands[2]);
        !          1947: 
        !          1948:   a29k_set_memflags (seq, operands[0]);
        !          1949:   emit_insn (seq);
        !          1950:   DONE;
        !          1951: }")
        !          1952: 
        !          1953: ;; Now the actual insns used to move data around.  We include here the
        !          1954: ;; DEFINE_SPLITs that may be needed.  In some cases these will be
        !          1955: ;; split again.  For floating-point, if we can look inside the constant,
        !          1956: ;; always split it.  This can eliminate unnecessary insns.
        !          1957: (define_insn ""
        !          1958:   [(set (match_operand:SF 0 "out_operand" "=r,r,r,r,m")
        !          1959:        (match_operand:SF 1 "in_operand" "r,E,F,m,r"))]
        !          1960:   "(gpc_reg_operand (operands[0], SFmode)
        !          1961:     || gpc_reg_operand (operands[1], SFmode))
        !          1962:    && ! TARGET_29050"
        !          1963:   "@
        !          1964:    sll %0,%1,0
        !          1965:    #
        !          1966:    const %0,%1\;consth %0,%1
        !          1967:    load 0,0,%0,%1
        !          1968:    store 0,0,%1,%0"
        !          1969:   [(set_attr "type" "misc,multi,multi,load,store")])
        !          1970: 
        !          1971: (define_insn ""
        !          1972:   [(set (match_operand:SF 0 "out_operand" "=r,r,r,r,m,*a,r")
        !          1973:        (match_operand:SF 1 "in_operand" "r,E,F,m,r,r,*a"))]
        !          1974:   "(gpc_reg_operand (operands[0], SFmode)
        !          1975:     || gpc_reg_operand (operands[1], SFmode))
        !          1976:    && TARGET_29050"
        !          1977:   "@
        !          1978:    sll %0,%1,0
        !          1979:    #
        !          1980:    const %0,%1\;consth %0,%1
        !          1981:    load 0,0,%0,%1
        !          1982:    store 0,0,%1,%0
        !          1983:    mtacc %1,1,%0
        !          1984:    mfacc %0,1,%1"
        !          1985:   [(set_attr "type" "misc,multi,multi,load,store,fadd,fadd")])
        !          1986: 
        !          1987: ;; Turn this into SImode.  It will then be split up that way.
        !          1988: (define_split
        !          1989:   [(set (match_operand:SF 0 "register_operand" "")
        !          1990:        (match_operand:SF 1 "float_const_operand" ""))]
        !          1991:   "HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT"
        !          1992:   [(set (match_dup 0)
        !          1993:        (match_dup 1))]
        !          1994:   "
        !          1995: { operands[0] = operand_subword (operands[0], 0, 0, SFmode);
        !          1996:   operands[1] = operand_subword (operands[1], 0, 0, SFmode);
        !          1997: 
        !          1998:   if (operands[0] == 0 || operands[1] == 0)
        !          1999:     FAIL;
        !          2000: }")
        !          2001: 
        !          2002: (define_insn ""
        !          2003:   [(set (match_operand:DF 0 "out_operand" "=?r,?r,r,m")
        !          2004:        (match_operand:DF 1 "in_operand" "rE,F,m,r"))
        !          2005:    (clobber (match_scratch:PSI 2 "=X,X,&c,&c"))]
        !          2006:   "(gpc_reg_operand (operands[0], DFmode)
        !          2007:     || gpc_reg_operand (operands[1], DFmode))
        !          2008:    && ! TARGET_29050"
        !          2009:   "@
        !          2010:    #
        !          2011:    const %0,%1\;consth %0,%1\;const %L0,%L1\;consth %L0,%L1
        !          2012:    mtsrim cr,1\;loadm 0,0,%0,%1
        !          2013:    mtsrim cr,1\;storem 0,0,%1,%0"
        !          2014:   [(set_attr "type" "multi")])
        !          2015: 
        !          2016: (define_insn ""
        !          2017:   [(set (match_operand:DF 0 "out_operand" "=?r,?r,r,m,?*a,?r")
        !          2018:        (match_operand:DF 1 "in_operand" "rE,F,m,r,r,*a"))
        !          2019:    (clobber (match_scratch:PSI 2 "=X,X,&c,&c,X,X"))]
        !          2020:   "(gpc_reg_operand (operands[0], DFmode)
        !          2021:     || gpc_reg_operand (operands[1], DFmode))
        !          2022:    && TARGET_29050"
        !          2023:   "@
        !          2024:    #
        !          2025:    const %0,%1\;consth %0,%1\;const %L0,%L1\;consth %L0,%L1
        !          2026:    mtsrim cr,1\;loadm 0,0,%0,%1
        !          2027:    mtsrim cr,1\;storem 0,0,%1,%0
        !          2028:    mtacc %1,2,%0
        !          2029:    mfacc %0,2,%1"
        !          2030:   [(set_attr "type" "multi,multi,multi,multi,fadd,fadd")])
        !          2031: 
        !          2032: ;; Split register-register copies and constant loads into two SImode loads,
        !          2033: ;; one for each word.  In the constant case, they will get further split.
        !          2034: ;; Don't so this until register allocation, though, since it will
        !          2035: ;; interfere with register allocation.  Normally copy the lowest-addressed
        !          2036: ;; word first; the exception is if we are copying register to register and
        !          2037: ;; the lowest register of the first operand is the highest register of the
        !          2038: ;; second operand.
        !          2039: (define_split
        !          2040:   [(set (match_operand:DF 0 "gpc_reg_operand" "")
        !          2041:        (match_operand:DF 1 "gpc_reg_or_float_constant_operand" ""))
        !          2042:    (clobber (match_scratch:PSI 2 ""))]
        !          2043:   "reload_completed"
        !          2044:   [(set (match_dup 3) (match_dup 4))
        !          2045:    (set (match_dup 5) (match_dup 6))]
        !          2046:   "
        !          2047: { if (GET_CODE (operands[1]) == REG
        !          2048:       && REGNO (operands[0]) == REGNO (operands[1]) + 1)
        !          2049:     {
        !          2050:       operands[3] = operand_subword (operands[0], 1, 1, DFmode);
        !          2051:       operands[4] = operand_subword (operands[1], 1, 1, DFmode);
        !          2052:       operands[5] = operand_subword (operands[0], 0, 1, DFmode);
        !          2053:       operands[6] = operand_subword (operands[1], 0, 1, DFmode);
        !          2054:     }
        !          2055:   else
        !          2056:     {
        !          2057:       operands[3] = operand_subword (operands[0], 0, 1, DFmode);
        !          2058:       operands[4] = operand_subword (operands[1], 0, 1, DFmode);
        !          2059:       operands[5] = operand_subword (operands[0], 1, 1, DFmode);
        !          2060:       operands[6] = operand_subword (operands[1], 1, 1, DFmode);
        !          2061:     }
        !          2062: 
        !          2063:   if (operands[3] == 0 || operands[4] == 0
        !          2064:       || operands[5] == 0 || operands[6] == 0)
        !          2065:     FAIL;
        !          2066: }")
        !          2067: 
        !          2068: ;; Split memory loads and stores into the MTSR and LOADM/STOREM.
        !          2069: (define_split
        !          2070:   [(set (match_operand:DF 0 "out_operand" "")
        !          2071:        (match_operand:DF 1 "in_operand" ""))
        !          2072:    (clobber (reg:PSI 179))]
        !          2073:   "TARGET_NO_STOREM_BUG
        !          2074:    && (memory_operand (operands[0], DFmode)
        !          2075:        || memory_operand (operands[1], DFmode))"
        !          2076:   [(set (reg:PSI 179) (const_int 1))
        !          2077:    (parallel [(set (match_dup 0) (match_dup 1))
        !          2078:              (use (reg:PSI 179))
        !          2079:              (clobber (reg:PSI 179))])]
        !          2080:   "")
        !          2081: 
        !          2082: ;; DI move is similar to DF move.
        !          2083: (define_insn ""
        !          2084:   [(set (match_operand:DI 0 "out_operand" "=?r,r,m")
        !          2085:        (match_operand:DI 1 "in_operand" "rn,m,r"))
        !          2086:    (clobber (match_scratch:PSI 2 "=X,&c,&c"))]
        !          2087:   "(gpc_reg_operand (operands[0], DImode)
        !          2088:      || gpc_reg_operand (operands[1], DImode))"
        !          2089:   "@
        !          2090:    #
        !          2091:    mtsrim cr,1\;loadm 0,0,%0,%1
        !          2092:    mtsrim cr,1\;storem 0,0,%1,%0"
        !          2093:   [(set_attr "type" "multi")])
        !          2094: 
        !          2095: (define_split
        !          2096:   [(set (match_operand:DI 0 "gpc_reg_operand" "")
        !          2097:        (match_operand:DI 1 "gpc_reg_or_integer_constant_operand" ""))
        !          2098:    (clobber (match_scratch:PSI 2 ""))]
        !          2099:   "reload_completed"
        !          2100:   [(set (match_dup 3) (match_dup 4))
        !          2101:    (set (match_dup 5) (match_dup 6))]
        !          2102:   "
        !          2103: { if (GET_CODE (operands[1]) == REG
        !          2104:       && REGNO (operands[0]) == REGNO (operands[1]) + 1)
        !          2105:     {
        !          2106:       operands[3] = operand_subword (operands[0], 1, 1, DImode);
        !          2107:       operands[4] = operand_subword (operands[1], 1, 1, DImode);
        !          2108:       operands[5] = operand_subword (operands[0], 0, 1, DImode);
        !          2109:       operands[6] = operand_subword (operands[1], 0, 1, DImode);
        !          2110:     }
        !          2111:   else
        !          2112:     {
        !          2113:       operands[3] = operand_subword (operands[0], 0, 1, DImode);
        !          2114:       operands[4] = operand_subword (operands[1], 0, 1, DImode);
        !          2115:       operands[5] = operand_subword (operands[0], 1, 1, DImode);
        !          2116:       operands[6] = operand_subword (operands[1], 1, 1, DImode);
        !          2117:     }
        !          2118: }")
        !          2119: 
        !          2120: (define_split
        !          2121:   [(set (match_operand:DI 0 "out_operand" "")
        !          2122:        (match_operand:DI 1 "in_operand" ""))
        !          2123:    (clobber (reg:PSI 179))]
        !          2124:   "TARGET_NO_STOREM_BUG
        !          2125:    && (memory_operand (operands[0], DImode)
        !          2126:        || memory_operand (operands[1], DImode))"
        !          2127:   [(set (reg:PSI 179) (const_int 1))
        !          2128:    (parallel [(set (match_dup 0) (match_dup 1))
        !          2129:              (use (reg:PSI 179))
        !          2130:              (clobber (reg:PSI 179))])]
        !          2131:   "")
        !          2132: 
        !          2133: ;; TImode moves are very similar to DImode moves, except that we can't
        !          2134: ;; have constants.
        !          2135: (define_insn ""
        !          2136:   [(set (match_operand:TI 0 "out_operand" "=?r,r,m")
        !          2137:        (match_operand:TI 1 "in_operand" "r,m,r"))
        !          2138:    (clobber (match_scratch:PSI 2 "=X,&c,&c"))]
        !          2139:   "(gpc_reg_operand (operands[0], TImode)
        !          2140:     || gpc_reg_operand (operands[1], TImode))"
        !          2141:   "@
        !          2142:    #
        !          2143:    mtsrim cr,3\;loadm 0,0,%0,%1
        !          2144:    mtsrim cr,3\;storem 0,0,%1,%0"
        !          2145:   [(set_attr "type" "multi,multi,multi")])
        !          2146: 
        !          2147: (define_split
        !          2148:   [(set (match_operand:TI 0 "gpc_reg_operand" "")
        !          2149:        (match_operand:TI 1 "gpc_reg_operand" ""))
        !          2150:    (clobber (match_scratch:PSI 2 ""))]
        !          2151:   "reload_completed"
        !          2152:   [(set (match_dup 3) (match_dup 4))
        !          2153:    (set (match_dup 5) (match_dup 6))
        !          2154:    (set (match_dup 7) (match_dup 8))
        !          2155:    (set (match_dup 9) (match_dup 10))]
        !          2156:   "
        !          2157: {
        !          2158:   if (REGNO (operands[0]) >= REGNO (operands[1]) + 1
        !          2159:       && REGNO (operands[0]) <= REGNO (operands[1]) + 3)
        !          2160:     {
        !          2161:       operands[3] = gen_rtx (REG, SImode, REGNO (operands[0]) + 3);
        !          2162:       operands[4] = gen_rtx (REG, SImode, REGNO (operands[1]) + 3);
        !          2163:       operands[5] = gen_rtx (REG, SImode, REGNO (operands[0]) + 2);
        !          2164:       operands[6] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
        !          2165:       operands[7] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
        !          2166:       operands[8] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
        !          2167:       operands[9] = gen_rtx (REG, SImode, REGNO (operands[0]));
        !          2168:       operands[10] = gen_rtx (REG, SImode, REGNO (operands[1]));
        !          2169:     }
        !          2170:   else
        !          2171:     {
        !          2172:       operands[3] = gen_rtx (REG, SImode, REGNO (operands[0]));
        !          2173:       operands[4] = gen_rtx (REG, SImode, REGNO (operands[1]));
        !          2174:       operands[5] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
        !          2175:       operands[6] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
        !          2176:       operands[7] = gen_rtx (REG, SImode, REGNO (operands[0]) + 2);
        !          2177:       operands[8] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
        !          2178:       operands[9] = gen_rtx (REG, SImode, REGNO (operands[0]) + 3);
        !          2179:       operands[10] = gen_rtx (REG, SImode, REGNO (operands[1]) + 3); 
        !          2180:     }
        !          2181: }")
        !          2182: 
        !          2183: (define_split
        !          2184:   [(set (match_operand:TI 0 "out_operand" "")
        !          2185:        (match_operand:TI 1 "in_operand" ""))
        !          2186:    (clobber (reg:PSI 179))]
        !          2187:   "TARGET_NO_STOREM_BUG
        !          2188:    && (memory_operand (operands[0], TImode)
        !          2189:        || memory_operand (operands[1], TImode))"
        !          2190:   [(set (reg:PSI 179) (const_int 3))
        !          2191:    (parallel [(set (match_dup 0) (match_dup 1))
        !          2192:              (use (reg:PSI 179))
        !          2193:              (clobber (reg:PSI 179))])]
        !          2194:   "")
        !          2195: 
        !          2196: (define_insn ""
        !          2197:   [(set (match_operand:SI 0 "out_operand" "=r,r,r,r,r,r,r,m,*h,*h")
        !          2198:         (match_operand:SI 1 "in_operand" "r,J,M,O,i,m,*h,r,r,J"))]
        !          2199:   "(gpc_reg_operand (operands[0], SImode)
        !          2200:     || gpc_reg_operand (operands[1], SImode)
        !          2201:     || (spec_reg_operand (operands[0], SImode)
        !          2202:         && cint_16_operand (operands[1], SImode)))
        !          2203:    && ! TARGET_29050"
        !          2204:   "@
        !          2205:    sll %0,%1,0
        !          2206:    const %0,%1
        !          2207:    constn %0,%M1
        !          2208:    cpeq %0,gr1,gr1
        !          2209:    #
        !          2210:    load 0,0,%0,%1
        !          2211:    mfsr %0,%1
        !          2212:    store 0,0,%1,%0
        !          2213:    mtsr %0,%1
        !          2214:    mtsrim %0,%1"
        !          2215:   [(set_attr "type" "misc,misc,misc,misc,multi,load,misc,store,misc,misc")])
        !          2216: 
        !          2217: (define_insn ""
        !          2218:   [(set (match_operand:SI 0 "out_operand" "=r,r,r,r,r,r,r,m,*h,*h")
        !          2219:         (match_operand:SI 1 "in_operand" "r,J,M,O,i,m,*h,r,r,J"))]
        !          2220:   "(gpc_reg_operand (operands[0], SImode)
        !          2221:     || gpc_reg_operand (operands[1], SImode)
        !          2222:     || (spec_reg_operand (operands[0], SImode)
        !          2223:         && cint_16_operand (operands[1], SImode)))
        !          2224:    && TARGET_29050"
        !          2225:   "@
        !          2226:    sll %0,%1,0
        !          2227:    const %0,%1
        !          2228:    constn %0,%M1
        !          2229:    consthz %0,%1
        !          2230:    #
        !          2231:    load 0,0,%0,%1
        !          2232:    mfsr %0,%1
        !          2233:    store 0,0,%1,%0
        !          2234:    mtsr %0,%1
        !          2235:    mtsrim %0,%1"
        !          2236:   [(set_attr "type" "misc,misc,misc,misc,multi,load,misc,store,misc,misc")])
        !          2237: 
        !          2238: (define_insn ""
        !          2239:   [(set (match_operand:PSI 0 "out_operand" "=*r,*r,*r,*r,m,h,h")
        !          2240:         (match_operand:PSI 1 "in_operand" "r,i,m,h,r,r,J"))]
        !          2241:   "(gpc_reg_operand (operands[0], PSImode)
        !          2242:     || gpc_reg_operand (operands[1], PSImode)
        !          2243:     || (spec_reg_operand (operands[0], PSImode)
        !          2244:         && cint_16_operand (operands[1], PSImode)))"
        !          2245:   "@
        !          2246:    sll %0,%1,0
        !          2247:    const %0,%1
        !          2248:    load 0,0,%0,%1
        !          2249:    mfsr %0,%1
        !          2250:    store 0,0,%1,%0
        !          2251:    mtsr %0,%1
        !          2252:    mtsrim %0,%1"
        !          2253:   [(set_attr "type" "misc,multi,load,misc,store,misc,misc")])
        !          2254: 
        !          2255: (define_insn ""
        !          2256:   [(set (match_operand:HI 0 "out_operand" "=r,r,r,m,r,*h,*h")
        !          2257:         (match_operand:HI 1 "in_operand" "r,i,m,r,*h,r,i"))]
        !          2258:   "gpc_reg_operand (operands[0], HImode)
        !          2259:    || gpc_reg_operand (operands[1], HImode)
        !          2260:    || (spec_reg_operand (operands[0], HImode)
        !          2261:        && cint_16_operand (operands[1], HImode))"
        !          2262:   "@
        !          2263:    sll %0,%1,0
        !          2264:    const %0,%1
        !          2265:    load 0,2,%0,%1
        !          2266:    store 0,2,%1,%0
        !          2267:    mfsr %0,%1
        !          2268:    mtsr %0,%1
        !          2269:    mtsrim %0,%1"
        !          2270:   [(set_attr "type" "misc,misc,load,store,misc,misc,misc")])
        !          2271: 
        !          2272: (define_insn ""
        !          2273:   [(set (match_operand:QI 0 "out_operand" "=r,r,r,m,r,*h,*h")
        !          2274:         (match_operand:QI 1 "in_operand" "r,i,m,r,*h,r,i"))]
        !          2275:   "gpc_reg_operand (operands[0], QImode)
        !          2276:    || gpc_reg_operand (operands[1], QImode)
        !          2277:    || (spec_reg_operand (operands[0], HImode)
        !          2278:        && cint_16_operand (operands[1], HImode))"
        !          2279:   "@
        !          2280:    sll %0,%1,0
        !          2281:    const %0,%1
        !          2282:    load 0,1,%0,%1
        !          2283:    store 0,1,%1,%0
        !          2284:    mfsr %0,%1
        !          2285:    mtsr %0,%1
        !          2286:    mtsrim %0,%1"
        !          2287:   [(set_attr "type" "misc,misc,load,store,misc,misc,misc")])
        !          2288: 
        !          2289: ;; Define move insns for DI, TI, SF, and DF.
        !          2290: ;;
        !          2291: ;; In no case do we support mem->mem directly.
        !          2292: ;;
        !          2293: ;; For DI move of constant to register, split apart at this time since these
        !          2294: ;; can require anywhere from 2 to 4 insns and determining which is complex.
        !          2295: ;;
        !          2296: ;; In other cases, handle similarly to SImode moves.
        !          2297: ;;
        !          2298: ;; However, indicate that DI, TI, and DF moves may clobber CR (reg 179).
        !          2299: (define_expand "movdi"
        !          2300:   [(parallel [(set (match_operand:DI 0 "general_operand" "")
        !          2301:                   (match_operand:DI 1 "general_operand" ""))
        !          2302:              (clobber (scratch:PSI))])]
        !          2303:   ""
        !          2304:   "
        !          2305: {
        !          2306:   if (GET_CODE (operands[0]) == MEM)
        !          2307:     operands[1] = force_reg (DImode, operands[1]);
        !          2308: }")
        !          2309: 
        !          2310: (define_expand "movsf"
        !          2311:   [(set (match_operand:SF 0 "general_operand" "")
        !          2312:        (match_operand:SF 1 "general_operand" ""))]
        !          2313:   ""
        !          2314:   "
        !          2315: { if (GET_CODE (operands[0]) == MEM)
        !          2316:     operands[1] = force_reg (SFmode, operands[1]);
        !          2317: }")
        !          2318: 
        !          2319: (define_expand "movdf"
        !          2320:   [(parallel [(set (match_operand:DF 0 "general_operand" "")
        !          2321:                   (match_operand:DF 1 "general_operand" ""))
        !          2322:              (clobber (scratch:PSI))])]
        !          2323:   ""
        !          2324:   "
        !          2325: { if (GET_CODE (operands[0]) == MEM)
        !          2326:     operands[1] = force_reg (DFmode, operands[1]);
        !          2327: }")
        !          2328: 
        !          2329: (define_expand "movti"
        !          2330:   [(parallel [(set (match_operand:TI 0 "general_operand" "")
        !          2331:                   (match_operand:TI 1 "general_operand" ""))
        !          2332:              (clobber (scratch:PSI))])]
        !          2333:   ""
        !          2334:   "
        !          2335: {
        !          2336:   if (GET_CODE (operands[0]) == MEM)
        !          2337:     operands[1] = force_reg (TImode, operands[1]);
        !          2338: 
        !          2339:   /* We can't handle constants in general because there is no rtl to represent
        !          2340:      128 bit constants.  Splitting happens to work for CONST_INTs so we split
        !          2341:      them for good code.  Other constants will get forced to memory.  */
        !          2342: 
        !          2343:   if (GET_CODE (operands[1]) == CONST_INT)
        !          2344:     {
        !          2345:      rtx part0, part1, part2, part3;
        !          2346: 
        !          2347:      part0 = operand_subword (operands[0], 0, 1, TImode);
        !          2348:      part1 = operand_subword (operands[0], 1, 1, TImode);
        !          2349:      part2 = operand_subword (operands[0], 2, 1, TImode);
        !          2350:      part3 = operand_subword (operands[0], 3, 1, TImode);
        !          2351: 
        !          2352:      emit_move_insn (part0, const0_rtx);
        !          2353:      emit_move_insn (part1, const0_rtx);
        !          2354:      emit_move_insn (part2, const0_rtx);
        !          2355:      emit_move_insn (part3, const0_rtx);
        !          2356: 
        !          2357:      DONE;
        !          2358:     }
        !          2359:   else if (CONSTANT_P (operands[1]))
        !          2360:     {
        !          2361:       operands[1] = force_const_mem (TImode, operands[1]);
        !          2362:       if (! memory_address_p (TImode, XEXP (operands[1], 0))
        !          2363:          && ! reload_in_progress)
        !          2364:         operands[1] = change_address (operands[1], TImode,
        !          2365:                                      XEXP (operands[1], 0));
        !          2366:     }
        !          2367: }")
        !          2368: 
        !          2369: ;; Here are the variants of the above for use during reload.
        !          2370: 
        !          2371: (define_expand "reload_indf"
        !          2372:   [(parallel [(set (match_operand:DF 0 "register_operand" "=r")
        !          2373:                   (match_operand:DF 1 "reload_memory_operand" "m"))
        !          2374:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
        !          2375:   ""
        !          2376:   "")
        !          2377: 
        !          2378: (define_expand "reload_outdf"
        !          2379:   [(parallel [(set (match_operand:DF 0 "reload_memory_operand" "=m")
        !          2380:                   (match_operand:DF 1 "register_operand" "r"))
        !          2381:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
        !          2382:   ""
        !          2383:   "")
        !          2384: 
        !          2385: (define_expand "reload_indi"
        !          2386:   [(parallel [(set (match_operand:DI 0 "register_operand" "=r")
        !          2387:                   (match_operand:DI 1 "reload_memory_operand" "m"))
        !          2388:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
        !          2389:   ""
        !          2390:   "")
        !          2391: 
        !          2392: (define_expand "reload_outdi"
        !          2393:   [(parallel [(set (match_operand:DI 0 "reload_memory_operand" "=m")
        !          2394:                   (match_operand:DI 1 "register_operand" "r"))
        !          2395:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
        !          2396:   ""
        !          2397:   "")
        !          2398: 
        !          2399: (define_expand "reload_inti"
        !          2400:   [(parallel [(set (match_operand:TI 0 "register_operand" "=r")
        !          2401:                   (match_operand:TI 1 "reload_memory_operand" "m"))
        !          2402:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
        !          2403:   ""
        !          2404:   "")
        !          2405: 
        !          2406: (define_expand "reload_outti"
        !          2407:   [(parallel [(set (match_operand:TI 0 "reload_memory_operand" "=m")
        !          2408:                   (match_operand:TI 1 "register_operand" "r"))
        !          2409:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
        !          2410:   ""
        !          2411:   "")
        !          2412: 
        !          2413: ;; For compare operations, we simply store the comparison operands and
        !          2414: ;; do nothing else.  The following branch or scc insn will output whatever
        !          2415: ;; is needed.
        !          2416: (define_expand "cmpsi"
        !          2417:   [(set (cc0)
        !          2418:        (compare (match_operand:SI 0 "gpc_reg_operand" "")
        !          2419:                 (match_operand:SI 1 "srcb_operand" "")))]
        !          2420:   ""
        !          2421:   "
        !          2422: {
        !          2423:   a29k_compare_op0 = operands[0];
        !          2424:   a29k_compare_op1 = operands[1];
        !          2425:   a29k_compare_fp_p = 0;
        !          2426:   DONE;
        !          2427: }")
        !          2428: 
        !          2429: (define_expand "cmpsf"
        !          2430:   [(set (cc0)
        !          2431:        (compare (match_operand:SF 0 "gpc_reg_operand" "")
        !          2432:                 (match_operand:SF 1 "gpc_reg_operand" "")))]
        !          2433:   ""
        !          2434:   "
        !          2435: {
        !          2436:   a29k_compare_op0 = operands[0];
        !          2437:   a29k_compare_op1 = operands[1];
        !          2438:   a29k_compare_fp_p = 1;
        !          2439:   DONE;
        !          2440: }")
        !          2441: 
        !          2442: (define_expand "cmpdf"
        !          2443:   [(set (cc0)
        !          2444:        (compare (match_operand:DF 0 "gpc_reg_operand" "")
        !          2445:                 (match_operand:DF 1 "gpc_reg_operand" "")))]
        !          2446:   ""
        !          2447:   "
        !          2448: {
        !          2449:   a29k_compare_op0 = operands[0];
        !          2450:   a29k_compare_op1 = operands[1];
        !          2451:   a29k_compare_fp_p = 1;
        !          2452:   DONE;
        !          2453: }")
        !          2454: 
        !          2455: ;; We can generate bit-tests better if we use NE instead of EQ, but we
        !          2456: ;; don't have an NE for floating-point.  So we have to have two patterns
        !          2457: ;; for EQ and two for NE.
        !          2458: 
        !          2459: (define_expand "beq"
        !          2460:   [(set (match_dup 1) (ne:SI (match_dup 2) (match_dup 3)))
        !          2461:    (set (pc)
        !          2462:        (if_then_else (ge (match_dup 1) (const_int 0))
        !          2463:                      (label_ref (match_operand 0 "" ""))
        !          2464:                      (pc)))]
        !          2465:   ""
        !          2466:   "
        !          2467: {
        !          2468:   if (GET_MODE_CLASS (GET_MODE (a29k_compare_op0)) == MODE_FLOAT)
        !          2469:     {
        !          2470:       emit_insn (gen_beq_fp (operands[0]));
        !          2471:       DONE;
        !          2472:     }
        !          2473: 
        !          2474:   operands[1] = gen_reg_rtx (SImode);
        !          2475:   operands[2] = a29k_compare_op0;
        !          2476:   operands[3] = a29k_compare_op1;
        !          2477: }")
        !          2478: 
        !          2479: (define_expand "beq_fp"
        !          2480:   [(set (match_dup 1) (eq:SI (match_dup 2) (match_dup 3)))
        !          2481:    (set (pc)
        !          2482:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2483:                      (label_ref (match_operand 0 "" ""))
        !          2484:                      (pc)))]
        !          2485:   ""
        !          2486:   "
        !          2487: {
        !          2488:   operands[1] = gen_reg_rtx (SImode);
        !          2489:   operands[2] = a29k_compare_op0;
        !          2490:   operands[3] = a29k_compare_op1;
        !          2491: }")
        !          2492: 
        !          2493: (define_expand "bne"
        !          2494:   [(set (match_dup 1) (ne:SI (match_dup 2) (match_dup 3)))
        !          2495:    (set (pc)
        !          2496:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2497:                      (label_ref (match_operand 0 "" ""))
        !          2498:                      (pc)))]
        !          2499:   ""
        !          2500:   "
        !          2501: {
        !          2502:   if (GET_MODE_CLASS (GET_MODE (a29k_compare_op0)) == MODE_FLOAT)
        !          2503:     {
        !          2504:       emit_insn (gen_bne_fp (operands[0]));
        !          2505:       DONE;
        !          2506:     }
        !          2507: 
        !          2508:   operands[1] = gen_reg_rtx (SImode);
        !          2509:   operands[2] = a29k_compare_op0;
        !          2510:   operands[3] = a29k_compare_op1;
        !          2511: }")
        !          2512: 
        !          2513: (define_expand "bne_fp"
        !          2514:   [(set (match_dup 1) (eq:SI (match_dup 2) (match_dup 3)))
        !          2515:    (set (pc)
        !          2516:        (if_then_else (ge (match_dup 1) (const_int 0))
        !          2517:                      (label_ref (match_operand 0 "" ""))
        !          2518:                      (pc)))]
        !          2519:   ""
        !          2520:   "
        !          2521: {
        !          2522:   operands[1] = gen_reg_rtx (SImode);
        !          2523:   operands[2] = a29k_compare_op0;
        !          2524:   operands[3] = a29k_compare_op1;
        !          2525: }")
        !          2526: 
        !          2527: ;; We don't have a floating-point "lt" insn, so we have to use "gt" in that
        !          2528: ;; case with the operands swapped.  The operands must both be registers in
        !          2529: ;; the floating-point case, so we know that swapping them is OK.
        !          2530: (define_expand "blt"
        !          2531:   [(set (match_dup 1) (match_dup 2))
        !          2532:    (set (pc)
        !          2533:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2534:                      (label_ref (match_operand 0 "" ""))
        !          2535:                      (pc)))]
        !          2536:   ""
        !          2537:   "
        !          2538: {
        !          2539:   operands[1] = gen_reg_rtx (SImode);
        !          2540:   if (a29k_compare_fp_p)
        !          2541:     operands[2] = gen_rtx (GT, SImode, a29k_compare_op1, a29k_compare_op0);
        !          2542:   else
        !          2543:     operands[2] = gen_rtx (LT, SImode, a29k_compare_op0, a29k_compare_op1);
        !          2544: }")
        !          2545: 
        !          2546: ;; Similarly for "le".
        !          2547: (define_expand "ble"
        !          2548:   [(set (match_dup 1) (match_dup 2))
        !          2549:    (set (pc)
        !          2550:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2551:                      (label_ref (match_operand 0 "" ""))
        !          2552:                      (pc)))]
        !          2553:   ""
        !          2554:   "
        !          2555: {
        !          2556:   operands[1] = gen_reg_rtx (SImode);
        !          2557:   if (a29k_compare_fp_p)
        !          2558:     operands[2] = gen_rtx (GE, SImode, a29k_compare_op1, a29k_compare_op0);
        !          2559:   else
        !          2560:     operands[2] = gen_rtx (LE, SImode, a29k_compare_op0, a29k_compare_op1);
        !          2561: }")
        !          2562: 
        !          2563: (define_expand "bltu"
        !          2564:   [(set (match_dup 1) (ltu:SI (match_dup 2) (match_dup 3)))
        !          2565:    (set (pc)
        !          2566:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2567:                      (label_ref (match_operand 0 "" ""))
        !          2568:                      (pc)))]
        !          2569:   ""
        !          2570:   "
        !          2571: {
        !          2572:   operands[1] = gen_reg_rtx (SImode);
        !          2573:   operands[2] = a29k_compare_op0;
        !          2574:   operands[3] = a29k_compare_op1;
        !          2575: }")
        !          2576: 
        !          2577: (define_expand "bleu"
        !          2578:   [(set (match_dup 1) (leu:SI (match_dup 2) (match_dup 3)))
        !          2579:    (set (pc)
        !          2580:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2581:                      (label_ref (match_operand 0 "" ""))
        !          2582:                      (pc)))]
        !          2583:   ""
        !          2584:   "
        !          2585: {
        !          2586:   operands[1] = gen_reg_rtx (SImode);
        !          2587:   operands[2] = a29k_compare_op0;
        !          2588:   operands[3] = a29k_compare_op1;
        !          2589: }")
        !          2590: 
        !          2591: (define_expand "bgt"
        !          2592:   [(set (match_dup 1) (gt:SI (match_dup 2) (match_dup 3)))
        !          2593:    (set (pc)
        !          2594:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2595:                      (label_ref (match_operand 0 "" ""))
        !          2596:                      (pc)))]
        !          2597:   ""
        !          2598:   "
        !          2599: {
        !          2600:   operands[1] = gen_reg_rtx (SImode);
        !          2601:   operands[2] = a29k_compare_op0;
        !          2602:   operands[3] = a29k_compare_op1;
        !          2603: }")
        !          2604: 
        !          2605: (define_expand "bge"
        !          2606:   [(set (match_dup 1) (ge:SI (match_dup 2) (match_dup 3)))
        !          2607:    (set (pc)
        !          2608:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2609:                      (label_ref (match_operand 0 "" ""))
        !          2610:                      (pc)))]
        !          2611:   ""
        !          2612:   "
        !          2613: {
        !          2614:   operands[1] = gen_reg_rtx (SImode);
        !          2615:   operands[2] = a29k_compare_op0;
        !          2616:   operands[3] = a29k_compare_op1;
        !          2617: }")
        !          2618: 
        !          2619: (define_expand "bgtu"
        !          2620:   [(set (match_dup 1) (gtu:SI (match_dup 2) (match_dup 3)))
        !          2621:    (set (pc)
        !          2622:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2623:                      (label_ref (match_operand 0 "" ""))
        !          2624:                      (pc)))]
        !          2625:   ""
        !          2626:   "
        !          2627: {
        !          2628:   operands[1] = gen_reg_rtx (SImode);
        !          2629:   operands[2] = a29k_compare_op0;
        !          2630:   operands[3] = a29k_compare_op1;
        !          2631: }")
        !          2632: 
        !          2633: (define_expand "bgeu"
        !          2634:   [(set (match_dup 1) (geu:SI (match_dup 2) (match_dup 3)))
        !          2635:    (set (pc)
        !          2636:        (if_then_else (lt (match_dup 1) (const_int 0))
        !          2637:                      (label_ref (match_operand 0 "" ""))
        !          2638:                      (pc)))]
        !          2639:   ""
        !          2640:   "
        !          2641: {
        !          2642:   operands[1] = gen_reg_rtx (SImode);
        !          2643:   operands[2] = a29k_compare_op0;
        !          2644:   operands[3] = a29k_compare_op1;
        !          2645: }")
        !          2646: 
        !          2647: (define_expand "seq"
        !          2648:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2649:        (eq:SI (match_dup 1) (match_dup 2)))]
        !          2650:   ""
        !          2651:   "
        !          2652: {
        !          2653:   operands[1] = a29k_compare_op0;
        !          2654:   operands[2] = a29k_compare_op1;
        !          2655: }")
        !          2656:                 
        !          2657: ;; This is the most complicated case, because we don't have a floating-point
        !          2658: ;; "ne" insn.  If integer, handle normally.  If floating-point, write the
        !          2659: ;; compare and then write an insn to reverse the test.
        !          2660: (define_expand "sne_fp"
        !          2661:   [(set (match_dup 3)
        !          2662:        (eq:SI (match_operand 1 "gpc_reg_operand" "")
        !          2663:               (match_operand 2 "gpc_reg_operand" "")))
        !          2664:    (set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2665:        (ge:SI (match_dup 3) (const_int 0)))]
        !          2666:   ""
        !          2667:   "
        !          2668: { operands[3] = gen_reg_rtx (SImode);
        !          2669: }");
        !          2670: 
        !          2671: (define_expand "sne"
        !          2672:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2673:        (ne:SI (match_dup 1) (match_dup 2)))]
        !          2674:   ""
        !          2675:   "
        !          2676: {
        !          2677:   operands[1] = a29k_compare_op0;
        !          2678:   operands[2] = a29k_compare_op1;
        !          2679: 
        !          2680:   if (a29k_compare_fp_p)
        !          2681:     {
        !          2682:       emit_insn (gen_sne_fp (operands[0], operands[1], operands[2]));
        !          2683:       DONE;
        !          2684:     }
        !          2685: }")
        !          2686:                 
        !          2687: ;; We don't have a floating-point "lt" insn, so use "gt" and swap the
        !          2688: ;; operands, the same as we do "blt".
        !          2689: (define_expand "slt"
        !          2690:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2691:        (match_dup 1))]
        !          2692:   ""
        !          2693:   "
        !          2694: {
        !          2695:   if (a29k_compare_fp_p)
        !          2696:     operands[1] = gen_rtx (GT, SImode, a29k_compare_op1, a29k_compare_op0);
        !          2697:   else
        !          2698:     operands[1] = gen_rtx (LT, SImode, a29k_compare_op0, a29k_compare_op1);
        !          2699: }")
        !          2700: 
        !          2701: ;; Similarly for "le"
        !          2702: (define_expand "sle"
        !          2703:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2704:        (match_dup 1))]
        !          2705:   ""
        !          2706:   "
        !          2707: {
        !          2708:   if (a29k_compare_fp_p)
        !          2709:     operands[1] = gen_rtx (GE, SImode, a29k_compare_op1, a29k_compare_op0);
        !          2710:   else
        !          2711:     operands[1] = gen_rtx (LE, SImode, a29k_compare_op0, a29k_compare_op1);
        !          2712: }")
        !          2713: 
        !          2714: (define_expand "sltu"
        !          2715:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2716:        (ltu:SI (match_dup 1) (match_dup 2)))]
        !          2717:   ""
        !          2718:   "
        !          2719: {
        !          2720:   operands[1] = a29k_compare_op0;
        !          2721:   operands[2] = a29k_compare_op1;
        !          2722: }")
        !          2723: 
        !          2724: (define_expand "sleu"
        !          2725:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2726:        (leu:SI (match_dup 1) (match_dup 2)))]
        !          2727:   ""
        !          2728:   "
        !          2729: {
        !          2730:   operands[1] = a29k_compare_op0;
        !          2731:   operands[2] = a29k_compare_op1;
        !          2732: }")
        !          2733: 
        !          2734: (define_expand "sgt"
        !          2735:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2736:        (gt:SI (match_dup 1) (match_dup 2)))]
        !          2737:   ""
        !          2738:   "
        !          2739: {
        !          2740:   operands[1] = a29k_compare_op0;
        !          2741:   operands[2] = a29k_compare_op1;
        !          2742: }")
        !          2743: 
        !          2744: (define_expand "sge"
        !          2745:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2746:        (ge:SI (match_dup 1) (match_dup 2)))]
        !          2747:   ""
        !          2748:   "
        !          2749: {
        !          2750:   operands[1] = a29k_compare_op0;
        !          2751:   operands[2] = a29k_compare_op1;
        !          2752: }")
        !          2753:                 
        !          2754: (define_expand "sgtu"
        !          2755:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2756:        (gtu:SI (match_dup 1) (match_dup 2)))]
        !          2757:   ""
        !          2758:   "
        !          2759: {
        !          2760:   operands[1] = a29k_compare_op0;
        !          2761:   operands[2] = a29k_compare_op1;
        !          2762: }")
        !          2763: 
        !          2764: (define_expand "sgeu"
        !          2765:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
        !          2766:        (geu:SI (match_dup 1) (match_dup 2)))]
        !          2767:   ""
        !          2768:   "
        !          2769: {
        !          2770:   operands[1] = a29k_compare_op0;
        !          2771:   operands[2] = a29k_compare_op1;
        !          2772: }")
        !          2773: 
        !          2774: ;; Now define the actual jump insns.
        !          2775: (define_insn ""
        !          2776:   [(set (pc)
        !          2777:        (if_then_else (match_operator 0 "branch_operator"
        !          2778:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
        !          2779:                                       (const_int 0)])
        !          2780:                      (label_ref (match_operand 2 "" ""))
        !          2781:                      (pc)))]
        !          2782:   ""
        !          2783:   "jmp%b0 %1,%l2%#"
        !          2784:   [(set_attr "type" "branch")])
        !          2785: 
        !          2786: (define_insn ""
        !          2787:   [(set (pc)
        !          2788:        (if_then_else (match_operator 0 "branch_operator"
        !          2789:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
        !          2790:                                       (const_int 0)])
        !          2791:                      (return)
        !          2792:                      (pc)))]
        !          2793:   "null_epilogue ()"
        !          2794:   "jmp%b0i %1,lr0%#"
        !          2795:   [(set_attr "type" "branch")])
        !          2796: 
        !          2797: (define_insn ""
        !          2798:   [(set (pc)
        !          2799:        (if_then_else (match_operator 0 "branch_operator"
        !          2800:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
        !          2801:                                       (const_int 0)])
        !          2802:                      (pc)
        !          2803:                      (label_ref (match_operand 2 "" ""))))]
        !          2804:   ""
        !          2805:   "jmp%B0 %1,%l2%#"
        !          2806:   [(set_attr "type" "branch")])
        !          2807: 
        !          2808: (define_insn ""
        !          2809:   [(set (pc)
        !          2810:        (if_then_else (match_operator 0 "branch_operator"
        !          2811:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
        !          2812:                                       (const_int 0)])
        !          2813:                      (pc)
        !          2814:                      (return)))]
        !          2815:   "null_epilogue ()"
        !          2816:   "jmp%B0i %1,lr0%#"
        !          2817:   [(set_attr "type" "branch")])
        !          2818: 
        !          2819: (define_insn "jump"
        !          2820:   [(set (pc)
        !          2821:        (label_ref (match_operand 0 "" "")))]
        !          2822:   ""
        !          2823:   "jmp %e0%E0"
        !          2824:   [(set_attr "type" "branch")])
        !          2825: 
        !          2826: (define_insn "return"
        !          2827:   [(return)]
        !          2828:   "null_epilogue ()"
        !          2829:   "jmpi lr0%#"
        !          2830:   [(set_attr "type" "branch")])
        !          2831: 
        !          2832: (define_insn "indirect_jump"
        !          2833:   [(set (pc)
        !          2834:        (match_operand:SI 0 "gpc_reg_operand" "r"))]
        !          2835:   ""
        !          2836:   "jmpi %0%#"
        !          2837:   [(set_attr "type" "branch")])
        !          2838: 
        !          2839: (define_insn "tablejump"
        !          2840:   [(set (pc)
        !          2841:        (match_operand:SI 0 "gpc_reg_operand" "r"))
        !          2842:    (use (label_ref (match_operand 1 "" "")))]
        !          2843:   ""
        !          2844:   "jmpi %0%#"
        !          2845:   [(set_attr "type" "branch")])
        !          2846: 
        !          2847: ;; JMPFDEC
        !          2848: (define_insn ""
        !          2849:   [(set (pc)
        !          2850:        (if_then_else (ge (match_operand:SI 0 "gpc_reg_operand" "r")
        !          2851:                          (const_int 0))
        !          2852:                      (label_ref (match_operand 1 "" ""))
        !          2853:                      (pc)))
        !          2854:    (set (match_dup 0)
        !          2855:        (plus:SI (match_dup 0)
        !          2856:                 (const_int -1)))]
        !          2857:   ""
        !          2858:   "jmpfdec %0,%l1%#"
        !          2859:   [(set_attr "type" "branch")])

unix.superglobalmegacorp.com

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