Annotation of gcc/config/a29k/a29k.md, revision 1.1.1.3

1.1       root        1: ;;- Machine description for AMD Am29000 for GNU C compiler
1.1.1.3 ! root        2: ;;   Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
        !             3: ;;   Contributed by Richard Kenner ([email protected])
1.1       root        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 ""
1.1.1.3 ! root      105:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
        !           106:        (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
        !           107:                (match_operand:SI 2 "cmplsrcb_operand" "r,K")))]
1.1       root      108:   ""
1.1.1.3 ! root      109:   "@
        !           110:    andn %0,%2,%1
        !           111:    nor %0,%1,%C2")
1.1       root      112: 
                    113: ;; CALLI
                    114: ;;
1.1.1.3 ! root      115: ;; Each call pattern is duplicated so that we can add CLOBBERs to the
        !           116: ;; resulting insn.
        !           117: ;;
        !           118: ;; We indicate that LR0 is clobbered in the CALL_INSN itself.  Otherwise,
        !           119: ;; reorg will think it is just clobbered by the called function.
        !           120: 
        !           121: (define_expand "call"
        !           122:   [(use (match_operand:SI 0 "" ""))
        !           123:    (use (match_operand 1 "" ""))
        !           124:    (use (match_operand 2 "" ""))]
1.1       root      125:   ""
                    126:   "
1.1.1.3 ! root      127: { rtx insn = emit_call_insn (gen_call_internal (operands[0], operands[1]));
        !           128:   a29k_clobbers_to (insn, operands[2]);
1.1       root      129: 
                    130:   DONE;
                    131: }")
1.1.1.3 ! root      132:  
        !           133: (define_expand "call_internal"
1.1       root      134:   [(parallel [(call (match_operand:SI 0 "" "")
                    135:                    (match_operand 1 "" ""))
1.1.1.3 ! root      136:              (clobber (scratch:SI))])]
1.1       root      137:   ""
                    138:   "
                    139: {
                    140:   if (GET_CODE (operands[0]) != MEM)
                    141:     abort ();
                    142: 
                    143:   /* We tell here whether this is a recursive call, since this insn may
                    144:      later be inlined into another function.  */
                    145:   if (! TARGET_SMALL_MEMORY
                    146:       && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
                    147:     operands[0] = gen_rtx (MEM, SImode,
                    148:                           force_reg (Pmode, XEXP (operands[0], 0)));
                    149: }")
                    150:  
                    151: (define_expand "call_value"
1.1.1.3 ! root      152:   [(use (match_operand:SI 0 "gpc_reg_operand" ""))
        !           153:    (use (match_operand:SI 1 "" ""))
        !           154:    (use (match_operand 2 "" ""))
        !           155:    (use (match_operand 3 "" ""))]
        !           156:   ""
        !           157:   "
        !           158: { rtx insn = emit_call_insn (gen_call_value_internal (operands[0], operands[1],
        !           159:                                                      operands[2]));
        !           160: 
        !           161:   a29k_clobbers_to (insn, operands[3]);
        !           162:   DONE;
        !           163: }")
        !           164:  
        !           165: (define_expand "call_value_internal"
1.1       root      166:   [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
                    167:                   (call (match_operand:SI 1 "" "")
                    168:                         (match_operand 2 "" "")))
1.1.1.3 ! root      169:                   (clobber (scratch:SI))])]
1.1       root      170:   ""
                    171:   "
                    172: {
                    173:   if (GET_CODE (operands[1]) != MEM)
                    174:     abort ();
                    175: 
                    176:   /* We tell here whether this is a recursive call, since this insn may
                    177:      later be inlined into another function.  */
                    178:   if (! TARGET_SMALL_MEMORY
                    179:       && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
                    180:     operands[1] = gen_rtx (MEM, SImode,
                    181:                           force_reg (Pmode, XEXP (operands[1], 0)));
                    182: 
                    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")))]
1.1.1.3 ! root      280:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      286:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      292:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      298:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      304:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      310:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      316:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      322:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      328:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      334:   "! TARGET_SOFT_FLOAT"
1.1       root      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")]))]
1.1.1.3 ! root      351:   "! TARGET_SOFT_FLOAT"
1.1       root      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")]))]
1.1.1.3 ! root      360:   "! TARGET_SOFT_FLOAT"
1.1       root      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" "")))]
1.1.1.3 ! root      369:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      395:   "! TARGET_SOFT_FLOAT"
1.1       root      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" "")))]
1.1.1.3 ! root      538:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      564:   "! TARGET_SOFT_FLOAT"
1.1       root      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" "")))]
1.1.1.3 ! root      734:   "! TARGET_SOFT_FLOAT"
1.1       root      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")))]
1.1.1.3 ! root      760:   "! TARGET_SOFT_FLOAT"
1.1       root      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"))))]
1.1.1.3 ! root      769:   "! TARGET_SOFT_FLOAT"
1.1       root      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" "")))]
1.1.1.3 ! root      850:   "! TARGET_SOFT_FLOAT"
1.1       root      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" "")))]
1.1.1.3 ! root      876:   "! TARGET_SOFT_FLOAT"
1.1       root      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:                            
1.1.1.3 ! root     1196: (define_insn "smulsi3_highpart"
        !          1197:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1198:        (truncate:SI
        !          1199:         (lshiftrt:DI
        !          1200:          (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
        !          1201:                   (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r")))
        !          1202:          (const_int 32))))
        !          1203:    (clobber (match_scratch:SI 3 "=&q"))]
        !          1204:   ""
        !          1205:   "multm %0,%1,%2")
        !          1206: 
        !          1207: (define_insn "umulsi3_highpart"
        !          1208:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        !          1209:        (truncate:SI
        !          1210:         (lshiftrt:DI
        !          1211:          (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
        !          1212:                   (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r")))
        !          1213:          (const_int 32))))
        !          1214:    (clobber (match_scratch:SI 3 "=&q"))]
        !          1215:   ""
        !          1216:   "multmu %0,%1,%2")
        !          1217: 
1.1       root     1218: ;; NAND
                   1219: (define_insn ""
                   1220:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1221:        (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
1.1.1.3 ! root     1222:                (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
1.1       root     1223:   ""
                   1224:   "nand %0,%1,%2")
                   1225: 
                   1226: (define_insn ""
                   1227:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1228:        (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
                   1229:                (match_operand:SI 2 "const_int_operand" "K")))]
1.1.1.3 ! root     1230:   ; Match TARGET_29050 in "orn" pattern for slightly better reload.
        !          1231:   "! TARGET_29050 && ((unsigned) ~ INTVAL (operands[2])) < 256"
1.1       root     1232:   "nand %0,%1,%C2")
                   1233: 
                   1234: ;; NOR
                   1235: (define_insn ""
                   1236:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1237:        (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
1.1.1.3 ! root     1238:                (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
1.1       root     1239:   ""
                   1240:   "nor %0,%1,%2")
                   1241: 
                   1242: (define_insn "one_cmplsi2"
                   1243:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1244:        (not:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
                   1245:   ""
                   1246:   "nor %0,%1,0")
                   1247: 
                   1248: ;; OR/ORN
                   1249: (define_expand "iorsi3"
                   1250:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   1251:        (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
                   1252:                (match_operand:SI 2 "srcb_operand" "")))]
                   1253:   ""
                   1254:   "")
                   1255: 
                   1256: (define_insn ""
                   1257:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1258:        (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
                   1259:                (match_operand:SI 2 "srcb_operand" "rI")))]
                   1260:   "! TARGET_29050"
                   1261:   "or %0,%1,%2")
                   1262: 
                   1263: (define_insn ""
                   1264:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
                   1265:        (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
1.1.1.3 ! root     1266:                (match_operand:SI 2 "and_operand" "rI,K")))]
1.1       root     1267:   "TARGET_29050"
                   1268:   "@
                   1269:    or %0,%1,%2
                   1270:    orn %0,%1,%C2")
                   1271: 
1.1.1.3 ! root     1272: (define_insn ""
        !          1273:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
        !          1274:        (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
        !          1275:                (match_operand:SI 2 "cmplsrcb_operand" "r,K")))]
        !          1276:   "TARGET_29050"
        !          1277:   "@
        !          1278:    orn %0,%2,%1
        !          1279:    nand %0,%1,%C2")
        !          1280: 
1.1       root     1281: 
                   1282: ;; SLL (also used by move insn)
                   1283: (define_insn "nop"
                   1284:   [(const_int 0)]
                   1285:   ""
                   1286:   "aseq 0x40,gr1,gr1")
                   1287: 
                   1288: (define_insn "ashlsi3"
                   1289:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1290:        (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
                   1291:                   (match_operand:QI 2 "srcb_operand" "rn")))]
                   1292:   ""
                   1293:   "sll %0,%1,%Q2")
                   1294: 
                   1295: ;; SQRT
                   1296: (define_insn "sqrtsf2"
                   1297:   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
                   1298:        (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "r")))]
                   1299:   "TARGET_29050"
                   1300:   "sqrt %0,%1,1"
                   1301:   [(set_attr "type" "fsqrt")])
                   1302: 
                   1303: (define_insn "sqrtdf2"
                   1304:   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
                   1305:        (sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "r")))]
                   1306:   "TARGET_29050"
                   1307:   "sqrt %0,%1,2"
                   1308:   [(set_attr "type" "dsqrt")])
                   1309: 
                   1310: ;; SRA
                   1311: (define_insn "ashrsi3"
                   1312:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1313:        (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
                   1314:                     (match_operand:QI 2 "srcb_operand" "rn")))]
                   1315:   ""
                   1316:   "sra %0,%1,%Q2")
                   1317: 
                   1318: ;; SRL
                   1319: (define_insn "lshrsi3"
                   1320:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1321:        (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
                   1322:                     (match_operand:QI 2 "srcb_operand" "rn")))]
                   1323:   ""
                   1324:   "srl %0,%1,%Q2")
                   1325: 
                   1326: ;; STORE
                   1327: ;;
                   1328: ;; These somewhat bogus patterns exist to set OPT = 001/010 for partial-word
                   1329: ;; stores on systems with DW not set.
                   1330: (define_insn ""
                   1331:   [(set (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "r")
                   1332:                        (const_int -4)))
                   1333:        (match_operand:SI 1 "gpc_reg_operand" "r"))]
                   1334:   "! TARGET_DW_ENABLE"
                   1335:   "store 0,1,%1,%0"
                   1336:   [(set_attr "type" "store")])
                   1337: 
                   1338: (define_insn ""
                   1339:   [(set (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "r")
                   1340:                        (const_int -3)))
                   1341:        (match_operand:SI 1 "gpc_reg_operand" "r"))]
                   1342:   "! TARGET_DW_ENABLE"
                   1343:   "store 0,2,%1,%0"
                   1344:   [(set_attr "type" "store")])
                   1345: 
                   1346: ;; STOREM
                   1347: (define_expand "store_multiple"
                   1348:   [(use (match_operand 0 "" ""))
                   1349:    (use (match_operand 1 "" ""))
                   1350:    (use (match_operand 2 "" ""))]
                   1351:   ""
                   1352:   "
                   1353: { rtx pat;
                   1354: 
                   1355:  if (TARGET_NO_STOREM_BUG)
                   1356:     pat = gen_store_multiple_no_bug (operands[0], operands[1], operands[2]);
                   1357:   else
                   1358:     pat = gen_store_multiple_bug (operands[0], operands[1], operands[2]);
                   1359: 
                   1360:   if (pat)
                   1361:     emit_insn (pat);
                   1362:   else
                   1363:     FAIL;
                   1364: 
                   1365:   DONE;
                   1366: }")
                   1367: 
                   1368: (define_expand "store_multiple_no_bug"
                   1369:   [(set (match_dup 4)
                   1370:        (match_operand:PSI 2 "const_int_operand" ""))
                   1371:    (match_par_dup 3 [(set (match_operand:SI 0 "" "")
                   1372:                          (match_operand:SI 1 "" ""))])]
                   1373:   ""
                   1374:   "
                   1375: {
                   1376:   int regno;
                   1377:   int count;
                   1378:   rtx from;
                   1379:   int i;
                   1380: 
                   1381:   /* Support only storing a constant number of hard registers to memory.  */
                   1382:   if (GET_CODE (operands[2]) != CONST_INT
                   1383:       || operands[2] == const1_rtx
                   1384:       || GET_CODE (operands[0]) != MEM
                   1385:       || GET_CODE (operands[1]) != REG
                   1386:       || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
                   1387:     FAIL;
                   1388: 
                   1389:   count = INTVAL (operands[2]);
                   1390:   regno = REGNO (operands[1]);
                   1391: 
                   1392:   /* CR gets set to the number of registers minus one.  */
                   1393:   operands[2] = GEN_INT(count - 1);
                   1394: 
                   1395:   operands[3] = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (count + 2));
                   1396:   from = memory_address (SImode, XEXP (operands[0], 0));
                   1397:   XVECEXP (operands[3], 0, 0) = gen_rtx (SET, VOIDmode,
                   1398:                                         gen_rtx (MEM, SImode, from),
                   1399:                                         gen_rtx (REG, SImode, regno));
                   1400:   operands[4] = gen_reg_rtx (PSImode);
                   1401:   XVECEXP (operands[3], 0, 1) = gen_rtx (USE, VOIDmode, operands[4]);
                   1402:   XVECEXP (operands[3], 0, 2) = gen_rtx (CLOBBER, VOIDmode, operands[4]);
                   1403: 
                   1404:   for (i = 1; i < count; i++)
                   1405:     XVECEXP (operands[3], 0, i + 2)
                   1406:       = gen_rtx (SET, VOIDmode,
                   1407:                 gen_rtx (MEM, SImode, plus_constant (from, i * 4)),
                   1408:                 gen_rtx (REG, SImode, regno + i));
                   1409: }")
                   1410: 
                   1411: (define_expand "store_multiple_bug"
                   1412:   [(match_par_dup 3 [(set (match_operand:SI 0 "" "")
                   1413:                          (match_operand:SI 1 "" ""))
                   1414:                     (use (match_operand:SI 2 "" ""))])]
                   1415:   ""
                   1416:   "
                   1417: {
                   1418:   int regno;
                   1419:   int count;
                   1420:   rtx from;
                   1421:   int i;
                   1422: 
                   1423:   /* Support only storing a constant number of hard registers to memory.  */
                   1424:   if (GET_CODE (operands[2]) != CONST_INT
                   1425:       || operands[2] == const1_rtx
                   1426:       || GET_CODE (operands[0]) != MEM
                   1427:       || GET_CODE (operands[1]) != REG
                   1428:       || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
                   1429:     FAIL;
                   1430: 
                   1431:   count = INTVAL (operands[2]);
                   1432:   regno = REGNO (operands[1]);
                   1433: 
                   1434:   operands[3] = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (count + 1));
                   1435:   from = memory_address (SImode, XEXP (operands[0], 0));
                   1436:   XVECEXP (operands[3], 0, 0) = gen_rtx (SET, VOIDmode,
                   1437:                                         gen_rtx (MEM, SImode, from),
                   1438:                                         gen_rtx (REG, SImode, regno));
                   1439:   XVECEXP (operands[3], 0, 1)
                   1440:     = gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, PSImode));
                   1441: 
                   1442:   for (i = 1; i < count; i++)
                   1443:     XVECEXP (operands[3], 0, i + 1)
                   1444:       = gen_rtx (SET, VOIDmode,
                   1445:                 gen_rtx (MEM, SImode, plus_constant (from, i * 4)),
                   1446:                 gen_rtx (REG, SImode, regno + i));
                   1447: }")
                   1448: 
                   1449: (define_insn ""
                   1450:   [(set (match_operand 0 "memory_operand" "=m")
                   1451:        (match_operand 1 "gpc_reg_operand" "r"))
                   1452:    (clobber (match_scratch:PSI 2 "=&c"))]
                   1453:   "!TARGET_NO_STOREM_BUG
                   1454:    && GET_MODE (operands[0]) == GET_MODE (operands[1])
                   1455:    && GET_MODE_SIZE (GET_MODE (operands[0])) > UNITS_PER_WORD"
                   1456:   "mtsrim cr,%S1\;storem 0,0,%1,%0"
                   1457:   [(set_attr "type" "multi")])
                   1458: 
                   1459: (define_insn ""
                   1460:   [(match_parallel 0 "store_multiple_operation"
                   1461:                   [(set (match_operand:SI 1 "memory_operand" "=m")
                   1462:                         (match_operand:SI 2 "gpc_reg_operand" "r"))
                   1463:                    (clobber (match_scratch:PSI 3 "=&c"))])]
                   1464:   "!TARGET_NO_STOREM_BUG"
                   1465:   "mtsrim cr,%V0\;storem 0,0,%2,%1"
                   1466:   [(set_attr "type" "multi")])
                   1467: 
                   1468: (define_insn ""
                   1469:   [(set (match_operand 0 "memory_operand" "=m")
                   1470:        (match_operand 1 "gpc_reg_operand" "r"))
                   1471:    (use (match_operand:PSI 2 "register_operand" "+c"))
                   1472:    (clobber (match_dup 2))]
                   1473:   "TARGET_NO_STOREM_BUG
                   1474:    && GET_MODE (operands[0]) == GET_MODE (operands[1])
                   1475:    && GET_MODE_SIZE (GET_MODE (operands[0])) > UNITS_PER_WORD"
                   1476:   "storem 0,0,%1,%0"
                   1477:   [(set_attr "type" "store")])
                   1478: 
                   1479: (define_insn ""
                   1480:   [(match_parallel 0 "store_multiple_operation"
                   1481:                   [(set (match_operand:SI 1 "memory_operand" "=m")
                   1482:                         (match_operand:SI 2 "gpc_reg_operand" "r"))
                   1483:                    (use (match_operand:PSI 3 "register_operand" "+c"))
                   1484:                    (clobber (match_dup 3))])]
                   1485:   "TARGET_NO_STOREM_BUG"
                   1486:   "storem 0,0,%2,%1"
                   1487:   [(set_attr "type" "store")])
                   1488: 
                   1489: ;; SUB
                   1490: ;;
                   1491: ;; Either operand can be a register or an 8-bit constant, but both cannot be
                   1492: ;; constants (can't usually occur anyway).
                   1493: (define_expand "subsi3"
                   1494:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   1495:        (minus:SI (match_operand:SI 1 "srcb_operand" "")
                   1496:                  (match_operand:SI 2 "srcb_operand" "")))]
                   1497:   ""
                   1498:   "
                   1499: {
                   1500:   if (GET_CODE (operands[0]) == CONST_INT
                   1501:       && GET_CODE (operands[1]) == CONST_INT)
                   1502:     operands[1] = force_reg (SImode, operands[1]);
                   1503: }")
                   1504: 
                   1505: (define_insn ""
                   1506:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
                   1507:        (minus:SI (match_operand:SI 1 "srcb_operand" "r,I")
                   1508:                  (match_operand:SI 2 "srcb_operand" "rI,r")))]
                   1509:   "register_operand (operands[1], SImode)
                   1510:    || register_operand (operands[2], SImode)"
                   1511:   "@
                   1512:    sub %0,%1,%2
                   1513:    subr %0,%2,%1")
                   1514: 
                   1515: (define_insn "subdi3"
                   1516:   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
                   1517:        (minus:DI (match_operand:DI 1 "gpc_reg_operand" "r")
                   1518:                  (match_operand:DI 2 "gpc_reg_operand" "r")))]
                   1519:   ""
                   1520:   "sub %L0,%L1,%L2\;subc %0,%1,%2"
                   1521:   [(set_attr "type" "multi")])
                   1522: 
                   1523: ;; SUBR (also used above in SUB)
                   1524: (define_insn "negdi2"
                   1525:   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
                   1526:        (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
                   1527:   ""
                   1528:   "subr %L0,%L1,0\;subrc %0,%1,0"
                   1529:   [(set_attr "type" "multi")])
                   1530: 
                   1531: (define_insn "negsi2"
                   1532:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1533:        (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
                   1534:   ""
                   1535:   "subr %0,%1,0")
                   1536: 
                   1537: ;; XNOR
                   1538: (define_insn ""
                   1539:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1540:        (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
1.1.1.3 ! root     1541:                        (match_operand:SI 2 "gpc_reg_operand" "r"))))]
1.1       root     1542:   ""
                   1543:   "xnor %0,%1,%2")
                   1544: 
                   1545: ;; XOR
1.1.1.3 ! root     1546: 
1.1       root     1547: (define_insn "xorsi3"
1.1.1.3 ! root     1548:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
        !          1549:        (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
        !          1550:                (match_operand:SI 2 "and_operand" "rI,K")))]
1.1       root     1551:   ""
1.1.1.3 ! root     1552:   "@
        !          1553:    xor %0,%1,%2
        !          1554:    xnor %0,%1,%C2")
1.1       root     1555: 
                   1556: ;; Can use XOR to negate floating-point values, but we are better off not doing
                   1557: ;; it that way on the 29050 so it can combine with the fmac insns.
                   1558: (define_expand "negsf2"
                   1559:   [(parallel [(set (match_operand:SF 0 "register_operand" "")
                   1560:                   (neg:SF (match_operand:SF 1 "register_operand" "")))
                   1561:              (clobber (match_scratch:SI 2 ""))])]
1.1.1.3 ! root     1562:   "! TARGET_SOFT_FLOAT"
1.1       root     1563:   "
                   1564: {
                   1565:   rtx result;
                   1566:   rtx target;
                   1567: 
                   1568:   if (! TARGET_29050)
                   1569:     {
                   1570:       target = operand_subword_force (operands[0], 0, SFmode);
                   1571:       result = expand_binop (SImode, xor_optab,
                   1572:                             operand_subword_force (operands[1], 0, SFmode),
                   1573:                             GEN_INT(0x80000000), target, 0, OPTAB_WIDEN);
                   1574:       if (result == 0)
                   1575:        abort ();
                   1576: 
                   1577:       if (result != target)
                   1578:        emit_move_insn (result, target);
                   1579: 
                   1580:       /* Make a place for REG_EQUAL.  */
                   1581:       emit_move_insn (operands[0], operands[0]);
                   1582:       DONE;
                   1583:     }
                   1584: }")
                   1585: 
                   1586: (define_expand "negdf2"
                   1587:   [(parallel [(set (match_operand:DF 0 "register_operand" "")
                   1588:                   (neg:DF (match_operand:DF 1 "register_operand" "")))
                   1589:              (clobber (match_scratch:SI 2 ""))])]
1.1.1.3 ! root     1590:   "! TARGET_SOFT_FLOAT"
1.1       root     1591:   "
                   1592: {
                   1593:   rtx result;
                   1594:   rtx target;
                   1595:   rtx insns;
                   1596: 
                   1597:   if (! TARGET_29050)
                   1598:     {
                   1599:       start_sequence ();
                   1600:       target = operand_subword (operands[0], 0, 1, DFmode);
                   1601:       result = expand_binop (SImode, xor_optab,
                   1602:                             operand_subword_force (operands[1], 0, DFmode),
                   1603:                             GEN_INT(0x80000000), target, 0, OPTAB_WIDEN);
                   1604:       if (result == 0)
                   1605:        abort ();
                   1606: 
                   1607:       if (result != target)
                   1608:        emit_move_insn (result, target);
                   1609:   
                   1610:       emit_move_insn (operand_subword (operands[0], 1, 1, DFmode),
                   1611:                      operand_subword_force (operands[1], 1, DFmode));
                   1612: 
                   1613:       insns = get_insns ();
                   1614:       end_sequence ();
                   1615: 
                   1616:       emit_no_conflict_block (insns, operands[0], operands[1], 0, 0);
                   1617:       DONE;
                   1618:     }
                   1619: }")
                   1620: 
                   1621: ;; Sign extend and truncation operations.
                   1622: (define_insn "zero_extendqihi2"
                   1623:   [(set (match_operand:HI 0 "gpc_reg_operand" "=r")
                   1624:        (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r")))]
                   1625:   ""
                   1626:   "and %0,%1,255")
                   1627: 
                   1628: (define_insn "zero_extendqisi2"
                   1629:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1630:        (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r")))]
                   1631:   ""
                   1632:   "and %0,%1,255")
                   1633: 
                   1634: (define_insn "zero_extendhisi2"
                   1635:   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
                   1636:        (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "0")))]
                   1637:   ""
                   1638:   "consth %0,0")
                   1639: 
                   1640: (define_expand "extendqihi2"
                   1641:   [(set (match_dup 2)
                   1642:        (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
                   1643:                   (const_int 24)))
                   1644:    (set (match_operand:HI 0 "gpc_reg_operand" "")
                   1645:        (ashiftrt:SI (match_dup 2)
                   1646:                     (const_int 24)))]
                   1647:   ""
                   1648:   "
                   1649: { operands[0] = gen_lowpart (SImode, operands[0]);
                   1650:   operands[1] = gen_lowpart (SImode, operands[1]);
                   1651:   operands[2] = gen_reg_rtx (SImode); }")
                   1652: 
                   1653: (define_expand "extendqisi2"
                   1654:   [(set (match_dup 2)
                   1655:        (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
                   1656:                   (const_int 24)))
                   1657:    (set (match_operand:SI 0 "gpc_reg_operand" "")
                   1658:        (ashiftrt:SI (match_dup 2)
                   1659:                     (const_int 24)))]
                   1660:   ""
                   1661:   "
                   1662: { operands[1] = gen_lowpart (SImode, operands[1]);
                   1663:   operands[2] = gen_reg_rtx (SImode); }")
                   1664: 
                   1665: (define_expand "extendhisi2"
                   1666:   [(set (match_dup 2)
                   1667:        (ashift:SI (match_operand:HI 1 "gpc_reg_operand" "")
                   1668:                   (const_int 16)))
                   1669:    (set (match_operand:SI 0 "gpc_reg_operand" "")
                   1670:        (ashiftrt:SI (match_dup 2)
                   1671:                     (const_int 16)))]
                   1672:   ""
                   1673:   "
                   1674: { operands[1] = gen_lowpart (SImode, operands[1]);
                   1675:   operands[2] = gen_reg_rtx (SImode); }")
                   1676: 
                   1677: ;; Define the methods used to move data around.
                   1678: ;;
                   1679: ;; movsi:
                   1680: ;;
                   1681: ;; If storing into memory, force source into register.
                   1682: (define_expand "movsi"
                   1683:   [(set (match_operand:SI 0 "general_operand" "")
                   1684:        (match_operand:SI 1 "general_operand" ""))]
                   1685:   ""
                   1686:   "
                   1687: {
                   1688:   if (GET_CODE (operands[0]) == MEM && ! gpc_reg_operand (operands[1], SImode))
                   1689:     operands[1] = copy_to_mode_reg (SImode, operands[1]);
                   1690:   else if (spec_reg_operand (operands[0], SImode)
                   1691:           && ! (register_operand (operands[1], SImode)
                   1692:                 || cint_16_operand (operands[1], SImode)))
                   1693:     operands[1] = force_reg (SImode, operands[1]);
                   1694: }")
                   1695: 
                   1696: (define_expand "movpsi"
                   1697:   [(set (match_operand:PSI 0 "general_operand" "")
                   1698:        (match_operand:PSI 1 "general_operand" ""))]
                   1699:   ""
                   1700:   "
                   1701: {
                   1702:   if (GET_CODE (operands[0]) == MEM
                   1703:       && ! gpc_reg_operand (operands[1], PSImode))
                   1704:     operands[1] = copy_to_mode_reg (PSImode, operands[1]);
                   1705:   else if (spec_reg_operand (operands[0], PSImode)
                   1706:           && ! (register_operand (operands[1], PSImode)
                   1707:                 || cint_16_operand (operands[1], PSImode)))
                   1708:     operands[1] = force_reg (PSImode, operands[1]);
                   1709: }")
                   1710: 
                   1711: (define_split
                   1712:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   1713:        (match_operand:SI 1 "long_const_operand" ""))]
                   1714:   ""
                   1715:   [(set (match_dup 0)
                   1716:        (and:SI (match_dup 1)
                   1717:                (const_int 65535)))
                   1718:    (set (match_dup 0)
                   1719:        (ior:SI (zero_extend:SI (match_dup 2))
                   1720:                (and:SI (match_dup 1)
                   1721:                        (const_int -65536))))]
                   1722:   " operands[2] = gen_lowpart (HImode, operands[0]); ")
                   1723: 
                   1724: ;; Subroutines to load/store halfwords.  Operands 0 and 1 are the output and
                   1725: ;; input, respectively, except that the address is passed for a MEM instead 
                   1726: ;; of the MEM itself and the short item is passed in QImode.
                   1727: ;;
                   1728: ;; Operand 2 is a scratch general register and operand 3 is a scratch register
                   1729: ;; used for BP.  When called before reload, pseudos are passed for both
                   1730: ;; operands.  During reload, R_TAV is used for the general register, and
                   1731: ;; a reload register of class BR_REGS (R_VP) for BP.
                   1732: ;;
                   1733: ;; We have two versions of the store operations, for when halfword writes are
                   1734: ;; supported and when they are not.
                   1735: (define_expand "loadhi"
                   1736:   [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
                   1737:                   (mem:SI (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
                   1738:                                   (const_int -4))))
                   1739:              (set (match_operand:PSI 3 "register_operand" "")
                   1740:                   (truncate:PSI (match_dup 1)))])
                   1741:    (set (match_operand:SI 0 "gpc_reg_operand" "")
                   1742:        (zero_extract:SI (match_dup 2)
                   1743:                         (const_int 16)
                   1744:                         (ashift:PSI (match_dup 3) (const_int 3))))]
                   1745:   ""
                   1746:   "")
                   1747: 
                   1748: (define_expand "storehinhww"
                   1749:  [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
                   1750:                   (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "")
                   1751:                                   (const_int -4))))
                   1752:              (set (match_operand:PSI 3 "register_operand" "")
                   1753:                   (truncate:PSI (match_dup 0)))])
                   1754:    (set (zero_extract:SI (match_dup 2)
                   1755:                         (const_int 16)
                   1756:                         (ashift:PSI (match_dup 3) (const_int 3)))
                   1757:        (match_operand:SI 1 "gpc_reg_operand" ""))
                   1758:    (set (mem:SI (match_dup 0))
                   1759:        (match_dup 2))]
                   1760:   ""
                   1761:   "")
                   1762: 
                   1763: (define_expand "storehihww"
                   1764:   [(set (match_operand:PSI 3 "register_operand" "")
                   1765:        (truncate:PSI (match_operand:SI 0 "gpc_reg_operand" "")))
                   1766:    (set (match_operand:SI 2 "gpc_reg_operand" "")
                   1767:        (ior:SI (and:SI (not:SI (ashift:SI (const_int 65535)
                   1768:                                           (ashift:PSI (match_dup 3)
                   1769:                                                       (const_int 3))))
                   1770:                        (match_operand:SI 1 "gpc_reg_operand" ""))
                   1771:                (ashift:SI (zero_extend:SI (match_dup 4))
                   1772:                           (ashift:PSI (match_dup 3) (const_int 3)))))
                   1773:    (set (mem:SI (and:SI (match_dup 0)
                   1774:                        (const_int -3)))
                   1775:        (match_dup 2))]
                   1776:   ""
                   1777:   "
                   1778: { operands[4] = gen_lowpart (HImode, operands[1]); }")
                   1779: 
                   1780: (define_expand "movhi"
                   1781:   [(set (match_operand:HI 0 "general_operand" "")
                   1782:        (match_operand:HI 1 "general_operand" ""))]
                   1783:   ""
                   1784:   "
                   1785: { if (GET_CODE (operands[0]) == MEM) 
                   1786:     {
                   1787:       if (! gpc_reg_operand (operands[1], HImode))
                   1788:        operands[1] = copy_to_mode_reg (HImode, operands[1]);
                   1789:       if (! TARGET_DW_ENABLE)
                   1790:        {
                   1791:          rtx general = gen_reg_rtx (SImode);
                   1792:          rtx bp = gen_reg_rtx (PSImode);
                   1793:          rtx (*fcn) ()
                   1794:            = TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww;
                   1795:          rtx seq = (*fcn) (XEXP (operands[0], 0),
                   1796:                            gen_lowpart (SImode, operands[1]),
                   1797:                            general, bp);
                   1798:            
                   1799:          a29k_set_memflags (seq, operands[0]);
                   1800:          emit_insn (seq);
                   1801:          DONE;
                   1802:        }
                   1803:     }
                   1804:   else if (GET_CODE (operands[1]) == MEM)
                   1805:     {
                   1806:       if (! TARGET_DW_ENABLE)
                   1807:        {
                   1808:          rtx general = gen_reg_rtx (SImode);
                   1809:          rtx bp = gen_reg_rtx (PSImode);
1.1.1.3 ! root     1810:          rtx seq = gen_loadhi (gen_lowpart (SImode, operands[0]),
1.1       root     1811:                                XEXP (operands[1], 0), general, bp);
                   1812: 
                   1813:          a29k_set_memflags (seq, operands[1]);
                   1814:          emit_insn (seq);
                   1815:          DONE;
                   1816:        }
                   1817:     }
                   1818: }")
                   1819: 
                   1820: (define_expand "reload_inhi"
                   1821:   [(parallel [(match_operand:SI 0 "register_operand" "=r")
                   1822:              (match_operand:SI 1 "reload_memory_operand" "m")
                   1823:              (match_operand:PSI 2 "register_operand" "=b")])]
                   1824:   "! TARGET_DW_ENABLE"
                   1825:   "
                   1826: { rtx seq = gen_loadhi (gen_lowpart (SImode, operands[0]),
                   1827:                        a29k_get_reloaded_address (operands[1]),
                   1828:                        gen_rtx (REG, SImode, R_TAV),
                   1829:                        operands[2]);
                   1830: 
                   1831:   a29k_set_memflags (seq, operands[1]);
                   1832:   emit_insn (seq);
                   1833:   DONE;
                   1834: }")
                   1835: 
                   1836: (define_expand "reload_outhi"
                   1837:   [(parallel [(match_operand:SI 0 "reload_memory_operand" "=m")
                   1838:              (match_operand:SI 1 "register_operand" "m")
                   1839:              (match_operand:PSI 2 "register_operand" "=b")])]
                   1840:   "! TARGET_DW_ENABLE"
                   1841:   "
                   1842: { rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww;
                   1843:   rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]),
                   1844:                    gen_lowpart (SImode, operands[1]),
                   1845:                    gen_rtx (REG, SImode, R_TAV), operands[2]);
                   1846: 
                   1847:   a29k_set_memflags (seq, operands[0]);
                   1848:   emit_insn (seq);
                   1849:   DONE;
                   1850: }")
                   1851: 
                   1852: ;; Subroutines to load/store bytes.  Operands 0 and 1 are the output and
                   1853: ;; input, respectively, except that the address is passed for a MEM instead 
                   1854: ;; of the MEM itself and the short item is passed in QImode.
                   1855: ;;
                   1856: ;; Operand 2 is a scratch general register and operand 3 is a scratch register
                   1857: ;; used for BP.  When called before reload, pseudos are passed for both
                   1858: ;; operands.  During reload, R_TAV is used for the general register, and
                   1859: ;; a reload register of class BR_REGS (R_VP) for BP.
                   1860: ;;
                   1861: ;; We have two versions of the store operations, for when byte writes are
                   1862: ;; supported and when they are not.
                   1863: (define_expand "loadqi"
                   1864:   [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
                   1865:                   (mem:SI (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
                   1866:                                   (const_int -4))))
                   1867:              (set (match_operand:PSI 3 "register_operand" "")
                   1868:                   (truncate:PSI (match_dup 1)))])
                   1869:    (set (match_operand:SI 0 "gpc_reg_operand" "")
                   1870:        (zero_extract:SI (match_dup 2)
                   1871:                         (const_int 8)
                   1872:                         (ashift:PSI (match_dup 3) (const_int 3))))]
                   1873:   ""
                   1874:   "")
                   1875: 
                   1876: (define_expand "storeqinhww"
                   1877:   [(parallel [(set (match_operand:SI 2 "gpc_reg_operand" "")
                   1878:                   (mem:SI (and:SI (match_operand:SI 0 "gpc_reg_operand" "")
                   1879:                                   (const_int -4))))
                   1880:              (set (match_operand:PSI 3 "register_operand" "")
                   1881:                   (truncate:PSI (match_dup 0)))])
                   1882:    (set (zero_extract:SI (match_dup 2)
                   1883:                         (const_int 8)
                   1884:                         (ashift:PSI (match_dup 3)
                   1885:                                     (const_int 3)))
                   1886:        (match_operand:SI 1 "gpc_reg_operand" ""))
                   1887:    (set (mem:SI (match_dup 0))
                   1888:        (match_dup 2))]
                   1889:   ""
                   1890:   "")
                   1891: 
                   1892: (define_expand "storeqihww"
                   1893:   [(set (match_operand:PSI 3 "register_operand" "")
                   1894:        (truncate:PSI (match_operand:SI 0 "gpc_reg_operand" "")))
                   1895:    (set (match_operand:SI 2 "gpc_reg_operand" "")
                   1896:        (ior:SI (and:SI (not:SI (ashift:SI (const_int 255)
                   1897:                                           (ashift:PSI (match_dup 3)
                   1898:                                                       (const_int 3))))
                   1899:                        (match_operand:SI 1 "gpc_reg_operand" ""))
                   1900:                (ashift:SI (zero_extend:SI (match_dup 4))
                   1901:                           (ashift:PSI (match_dup 3)
                   1902:                                       (const_int 3)))))
                   1903:    (set (mem:SI (and:SI (match_dup 0)
                   1904:                        (const_int -4)))
                   1905:        (match_dup 2))]
                   1906:   ""
                   1907:   "
                   1908: { operands[4] = gen_lowpart (QImode, operands[1]); }")
                   1909: 
                   1910: (define_expand "movqi"
                   1911:   [(set (match_operand:QI 0 "general_operand" "")
                   1912:        (match_operand:QI 1 "general_operand" ""))]
                   1913:   ""
                   1914:   "
                   1915: { if (GET_CODE (operands[0]) == MEM)
                   1916:     {
                   1917:       if (! gpc_reg_operand (operands[1], QImode))
                   1918:        operands[1] = copy_to_mode_reg (QImode, operands[1]);
                   1919:       if (! TARGET_DW_ENABLE)
                   1920:        {
                   1921:          rtx general = gen_reg_rtx (SImode);
                   1922:          rtx bp = gen_reg_rtx (PSImode);
                   1923:          rtx (*fcn) ()
                   1924:            = TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww;
                   1925:          rtx seq = (*fcn) (XEXP (operands[0], 0),
                   1926:                            gen_lowpart (SImode, operands[1]),
                   1927:                            general, bp);
                   1928:            
                   1929:          a29k_set_memflags (seq, operands[0]);
                   1930:          emit_insn (seq);
1.1.1.3 ! root     1931:          DONE;
1.1       root     1932:        }
                   1933:     }
                   1934:   else if (GET_CODE (operands[1]) == MEM)
                   1935:     {
                   1936:       if (! TARGET_DW_ENABLE)
                   1937:        {
                   1938:          rtx general = gen_reg_rtx (SImode);
                   1939:          rtx bp = gen_reg_rtx (PSImode);
                   1940:          rtx seq = gen_loadqi (gen_lowpart (SImode, operands[0]),
                   1941:                                XEXP (operands[1], 0), general, bp);
                   1942: 
                   1943:          a29k_set_memflags (seq, operands[1]);
                   1944:          emit_insn (seq);
                   1945:          DONE;
                   1946:        }
                   1947:     }
                   1948: }")
                   1949: 
                   1950: (define_expand "reload_inqi"
                   1951:   [(parallel [(match_operand:SI 0 "register_operand" "=r")
                   1952:              (match_operand:SI 1 "reload_memory_operand" "m")
                   1953:              (match_operand:PSI 2 "register_operand" "=b")])]
                   1954:   "! TARGET_DW_ENABLE"
                   1955:   "
                   1956: { rtx seq = gen_loadqi (gen_lowpart (SImode, operands[0]),
                   1957:                        a29k_get_reloaded_address (operands[1]),
                   1958:                        gen_rtx (REG, SImode, R_TAV),
                   1959:                        operands[2]);
                   1960: 
                   1961:   a29k_set_memflags (seq, operands[1]);
                   1962:   emit_insn (seq);
                   1963:   DONE;
                   1964: }")
                   1965: 
                   1966: (define_expand "reload_outqi"
                   1967:   [(parallel [(match_operand:SI 0 "reload_memory_operand" "=m")
                   1968:              (match_operand:SI 1 "register_operand" "m")
                   1969:              (match_operand:PSI 2 "register_operand" "=b")])]
                   1970:   "! TARGET_DW_ENABLE"
                   1971:   "
                   1972: { rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww;
                   1973:   rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]),
                   1974:                    gen_lowpart (SImode, operands[1]),
                   1975:                    gen_rtx (REG, SImode, R_TAV), operands[2]);
                   1976: 
                   1977:   a29k_set_memflags (seq, operands[0]);
                   1978:   emit_insn (seq);
                   1979:   DONE;
                   1980: }")
                   1981: 
                   1982: ;; Now the actual insns used to move data around.  We include here the
                   1983: ;; DEFINE_SPLITs that may be needed.  In some cases these will be
                   1984: ;; split again.  For floating-point, if we can look inside the constant,
                   1985: ;; always split it.  This can eliminate unnecessary insns.
                   1986: (define_insn ""
                   1987:   [(set (match_operand:SF 0 "out_operand" "=r,r,r,r,m")
                   1988:        (match_operand:SF 1 "in_operand" "r,E,F,m,r"))]
                   1989:   "(gpc_reg_operand (operands[0], SFmode)
                   1990:     || gpc_reg_operand (operands[1], SFmode))
                   1991:    && ! TARGET_29050"
                   1992:   "@
                   1993:    sll %0,%1,0
                   1994:    #
                   1995:    const %0,%1\;consth %0,%1
                   1996:    load 0,0,%0,%1
                   1997:    store 0,0,%1,%0"
                   1998:   [(set_attr "type" "misc,multi,multi,load,store")])
                   1999: 
                   2000: (define_insn ""
                   2001:   [(set (match_operand:SF 0 "out_operand" "=r,r,r,r,m,*a,r")
                   2002:        (match_operand:SF 1 "in_operand" "r,E,F,m,r,r,*a"))]
                   2003:   "(gpc_reg_operand (operands[0], SFmode)
                   2004:     || gpc_reg_operand (operands[1], SFmode))
                   2005:    && TARGET_29050"
                   2006:   "@
                   2007:    sll %0,%1,0
                   2008:    #
                   2009:    const %0,%1\;consth %0,%1
                   2010:    load 0,0,%0,%1
                   2011:    store 0,0,%1,%0
                   2012:    mtacc %1,1,%0
                   2013:    mfacc %0,1,%1"
                   2014:   [(set_attr "type" "misc,multi,multi,load,store,fadd,fadd")])
                   2015: 
                   2016: ;; Turn this into SImode.  It will then be split up that way.
                   2017: (define_split
                   2018:   [(set (match_operand:SF 0 "register_operand" "")
                   2019:        (match_operand:SF 1 "float_const_operand" ""))]
                   2020:   "HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT"
                   2021:   [(set (match_dup 0)
                   2022:        (match_dup 1))]
                   2023:   "
                   2024: { operands[0] = operand_subword (operands[0], 0, 0, SFmode);
                   2025:   operands[1] = operand_subword (operands[1], 0, 0, SFmode);
                   2026: 
                   2027:   if (operands[0] == 0 || operands[1] == 0)
                   2028:     FAIL;
                   2029: }")
                   2030: 
                   2031: (define_insn ""
                   2032:   [(set (match_operand:DF 0 "out_operand" "=?r,?r,r,m")
                   2033:        (match_operand:DF 1 "in_operand" "rE,F,m,r"))
                   2034:    (clobber (match_scratch:PSI 2 "=X,X,&c,&c"))]
                   2035:   "(gpc_reg_operand (operands[0], DFmode)
                   2036:     || gpc_reg_operand (operands[1], DFmode))
                   2037:    && ! TARGET_29050"
                   2038:   "@
                   2039:    #
                   2040:    const %0,%1\;consth %0,%1\;const %L0,%L1\;consth %L0,%L1
                   2041:    mtsrim cr,1\;loadm 0,0,%0,%1
                   2042:    mtsrim cr,1\;storem 0,0,%1,%0"
                   2043:   [(set_attr "type" "multi")])
                   2044: 
                   2045: (define_insn ""
                   2046:   [(set (match_operand:DF 0 "out_operand" "=?r,?r,r,m,?*a,?r")
                   2047:        (match_operand:DF 1 "in_operand" "rE,F,m,r,r,*a"))
                   2048:    (clobber (match_scratch:PSI 2 "=X,X,&c,&c,X,X"))]
                   2049:   "(gpc_reg_operand (operands[0], DFmode)
                   2050:     || gpc_reg_operand (operands[1], DFmode))
                   2051:    && TARGET_29050"
                   2052:   "@
                   2053:    #
                   2054:    const %0,%1\;consth %0,%1\;const %L0,%L1\;consth %L0,%L1
                   2055:    mtsrim cr,1\;loadm 0,0,%0,%1
                   2056:    mtsrim cr,1\;storem 0,0,%1,%0
                   2057:    mtacc %1,2,%0
                   2058:    mfacc %0,2,%1"
                   2059:   [(set_attr "type" "multi,multi,multi,multi,fadd,fadd")])
                   2060: 
                   2061: ;; Split register-register copies and constant loads into two SImode loads,
                   2062: ;; one for each word.  In the constant case, they will get further split.
                   2063: ;; Don't so this until register allocation, though, since it will
                   2064: ;; interfere with register allocation.  Normally copy the lowest-addressed
                   2065: ;; word first; the exception is if we are copying register to register and
                   2066: ;; the lowest register of the first operand is the highest register of the
                   2067: ;; second operand.
                   2068: (define_split
                   2069:   [(set (match_operand:DF 0 "gpc_reg_operand" "")
                   2070:        (match_operand:DF 1 "gpc_reg_or_float_constant_operand" ""))
                   2071:    (clobber (match_scratch:PSI 2 ""))]
                   2072:   "reload_completed"
                   2073:   [(set (match_dup 3) (match_dup 4))
                   2074:    (set (match_dup 5) (match_dup 6))]
                   2075:   "
                   2076: { if (GET_CODE (operands[1]) == REG
                   2077:       && REGNO (operands[0]) == REGNO (operands[1]) + 1)
                   2078:     {
                   2079:       operands[3] = operand_subword (operands[0], 1, 1, DFmode);
                   2080:       operands[4] = operand_subword (operands[1], 1, 1, DFmode);
                   2081:       operands[5] = operand_subword (operands[0], 0, 1, DFmode);
                   2082:       operands[6] = operand_subword (operands[1], 0, 1, DFmode);
                   2083:     }
                   2084:   else
                   2085:     {
                   2086:       operands[3] = operand_subword (operands[0], 0, 1, DFmode);
                   2087:       operands[4] = operand_subword (operands[1], 0, 1, DFmode);
                   2088:       operands[5] = operand_subword (operands[0], 1, 1, DFmode);
                   2089:       operands[6] = operand_subword (operands[1], 1, 1, DFmode);
                   2090:     }
                   2091: 
                   2092:   if (operands[3] == 0 || operands[4] == 0
                   2093:       || operands[5] == 0 || operands[6] == 0)
                   2094:     FAIL;
                   2095: }")
                   2096: 
                   2097: ;; Split memory loads and stores into the MTSR and LOADM/STOREM.
                   2098: (define_split
                   2099:   [(set (match_operand:DF 0 "out_operand" "")
                   2100:        (match_operand:DF 1 "in_operand" ""))
                   2101:    (clobber (reg:PSI 179))]
                   2102:   "TARGET_NO_STOREM_BUG
                   2103:    && (memory_operand (operands[0], DFmode)
                   2104:        || memory_operand (operands[1], DFmode))"
                   2105:   [(set (reg:PSI 179) (const_int 1))
                   2106:    (parallel [(set (match_dup 0) (match_dup 1))
                   2107:              (use (reg:PSI 179))
                   2108:              (clobber (reg:PSI 179))])]
                   2109:   "")
                   2110: 
                   2111: ;; DI move is similar to DF move.
                   2112: (define_insn ""
                   2113:   [(set (match_operand:DI 0 "out_operand" "=?r,r,m")
                   2114:        (match_operand:DI 1 "in_operand" "rn,m,r"))
                   2115:    (clobber (match_scratch:PSI 2 "=X,&c,&c"))]
                   2116:   "(gpc_reg_operand (operands[0], DImode)
                   2117:      || gpc_reg_operand (operands[1], DImode))"
                   2118:   "@
                   2119:    #
                   2120:    mtsrim cr,1\;loadm 0,0,%0,%1
                   2121:    mtsrim cr,1\;storem 0,0,%1,%0"
                   2122:   [(set_attr "type" "multi")])
                   2123: 
                   2124: (define_split
                   2125:   [(set (match_operand:DI 0 "gpc_reg_operand" "")
                   2126:        (match_operand:DI 1 "gpc_reg_or_integer_constant_operand" ""))
                   2127:    (clobber (match_scratch:PSI 2 ""))]
                   2128:   "reload_completed"
                   2129:   [(set (match_dup 3) (match_dup 4))
                   2130:    (set (match_dup 5) (match_dup 6))]
                   2131:   "
                   2132: { if (GET_CODE (operands[1]) == REG
                   2133:       && REGNO (operands[0]) == REGNO (operands[1]) + 1)
                   2134:     {
                   2135:       operands[3] = operand_subword (operands[0], 1, 1, DImode);
                   2136:       operands[4] = operand_subword (operands[1], 1, 1, DImode);
                   2137:       operands[5] = operand_subword (operands[0], 0, 1, DImode);
                   2138:       operands[6] = operand_subword (operands[1], 0, 1, DImode);
                   2139:     }
                   2140:   else
                   2141:     {
                   2142:       operands[3] = operand_subword (operands[0], 0, 1, DImode);
                   2143:       operands[4] = operand_subword (operands[1], 0, 1, DImode);
                   2144:       operands[5] = operand_subword (operands[0], 1, 1, DImode);
                   2145:       operands[6] = operand_subword (operands[1], 1, 1, DImode);
                   2146:     }
                   2147: }")
                   2148: 
                   2149: (define_split
                   2150:   [(set (match_operand:DI 0 "out_operand" "")
                   2151:        (match_operand:DI 1 "in_operand" ""))
                   2152:    (clobber (reg:PSI 179))]
                   2153:   "TARGET_NO_STOREM_BUG
                   2154:    && (memory_operand (operands[0], DImode)
                   2155:        || memory_operand (operands[1], DImode))"
                   2156:   [(set (reg:PSI 179) (const_int 1))
                   2157:    (parallel [(set (match_dup 0) (match_dup 1))
                   2158:              (use (reg:PSI 179))
                   2159:              (clobber (reg:PSI 179))])]
                   2160:   "")
                   2161: 
                   2162: ;; TImode moves are very similar to DImode moves, except that we can't
                   2163: ;; have constants.
                   2164: (define_insn ""
                   2165:   [(set (match_operand:TI 0 "out_operand" "=?r,r,m")
                   2166:        (match_operand:TI 1 "in_operand" "r,m,r"))
                   2167:    (clobber (match_scratch:PSI 2 "=X,&c,&c"))]
                   2168:   "(gpc_reg_operand (operands[0], TImode)
                   2169:     || gpc_reg_operand (operands[1], TImode))"
                   2170:   "@
                   2171:    #
                   2172:    mtsrim cr,3\;loadm 0,0,%0,%1
                   2173:    mtsrim cr,3\;storem 0,0,%1,%0"
                   2174:   [(set_attr "type" "multi,multi,multi")])
                   2175: 
                   2176: (define_split
                   2177:   [(set (match_operand:TI 0 "gpc_reg_operand" "")
                   2178:        (match_operand:TI 1 "gpc_reg_operand" ""))
                   2179:    (clobber (match_scratch:PSI 2 ""))]
                   2180:   "reload_completed"
                   2181:   [(set (match_dup 3) (match_dup 4))
                   2182:    (set (match_dup 5) (match_dup 6))
                   2183:    (set (match_dup 7) (match_dup 8))
                   2184:    (set (match_dup 9) (match_dup 10))]
                   2185:   "
                   2186: {
                   2187:   if (REGNO (operands[0]) >= REGNO (operands[1]) + 1
                   2188:       && REGNO (operands[0]) <= REGNO (operands[1]) + 3)
                   2189:     {
                   2190:       operands[3] = gen_rtx (REG, SImode, REGNO (operands[0]) + 3);
                   2191:       operands[4] = gen_rtx (REG, SImode, REGNO (operands[1]) + 3);
                   2192:       operands[5] = gen_rtx (REG, SImode, REGNO (operands[0]) + 2);
                   2193:       operands[6] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
                   2194:       operands[7] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                   2195:       operands[8] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                   2196:       operands[9] = gen_rtx (REG, SImode, REGNO (operands[0]));
                   2197:       operands[10] = gen_rtx (REG, SImode, REGNO (operands[1]));
                   2198:     }
                   2199:   else
                   2200:     {
                   2201:       operands[3] = gen_rtx (REG, SImode, REGNO (operands[0]));
                   2202:       operands[4] = gen_rtx (REG, SImode, REGNO (operands[1]));
                   2203:       operands[5] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                   2204:       operands[6] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                   2205:       operands[7] = gen_rtx (REG, SImode, REGNO (operands[0]) + 2);
                   2206:       operands[8] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
                   2207:       operands[9] = gen_rtx (REG, SImode, REGNO (operands[0]) + 3);
                   2208:       operands[10] = gen_rtx (REG, SImode, REGNO (operands[1]) + 3); 
                   2209:     }
                   2210: }")
                   2211: 
                   2212: (define_split
                   2213:   [(set (match_operand:TI 0 "out_operand" "")
                   2214:        (match_operand:TI 1 "in_operand" ""))
                   2215:    (clobber (reg:PSI 179))]
                   2216:   "TARGET_NO_STOREM_BUG
                   2217:    && (memory_operand (operands[0], TImode)
                   2218:        || memory_operand (operands[1], TImode))"
1.1.1.2   root     2219:   [(set (reg:PSI 179) (const_int 3))
1.1       root     2220:    (parallel [(set (match_dup 0) (match_dup 1))
                   2221:              (use (reg:PSI 179))
                   2222:              (clobber (reg:PSI 179))])]
                   2223:   "")
                   2224: 
                   2225: (define_insn ""
                   2226:   [(set (match_operand:SI 0 "out_operand" "=r,r,r,r,r,r,r,m,*h,*h")
                   2227:         (match_operand:SI 1 "in_operand" "r,J,M,O,i,m,*h,r,r,J"))]
                   2228:   "(gpc_reg_operand (operands[0], SImode)
                   2229:     || gpc_reg_operand (operands[1], SImode)
                   2230:     || (spec_reg_operand (operands[0], SImode)
                   2231:         && cint_16_operand (operands[1], SImode)))
                   2232:    && ! TARGET_29050"
                   2233:   "@
                   2234:    sll %0,%1,0
                   2235:    const %0,%1
                   2236:    constn %0,%M1
                   2237:    cpeq %0,gr1,gr1
                   2238:    #
                   2239:    load 0,0,%0,%1
                   2240:    mfsr %0,%1
                   2241:    store 0,0,%1,%0
                   2242:    mtsr %0,%1
                   2243:    mtsrim %0,%1"
                   2244:   [(set_attr "type" "misc,misc,misc,misc,multi,load,misc,store,misc,misc")])
                   2245: 
                   2246: (define_insn ""
                   2247:   [(set (match_operand:SI 0 "out_operand" "=r,r,r,r,r,r,r,m,*h,*h")
                   2248:         (match_operand:SI 1 "in_operand" "r,J,M,O,i,m,*h,r,r,J"))]
                   2249:   "(gpc_reg_operand (operands[0], SImode)
                   2250:     || gpc_reg_operand (operands[1], SImode)
                   2251:     || (spec_reg_operand (operands[0], SImode)
                   2252:         && cint_16_operand (operands[1], SImode)))
                   2253:    && TARGET_29050"
                   2254:   "@
                   2255:    sll %0,%1,0
                   2256:    const %0,%1
                   2257:    constn %0,%M1
                   2258:    consthz %0,%1
                   2259:    #
                   2260:    load 0,0,%0,%1
                   2261:    mfsr %0,%1
                   2262:    store 0,0,%1,%0
                   2263:    mtsr %0,%1
                   2264:    mtsrim %0,%1"
                   2265:   [(set_attr "type" "misc,misc,misc,misc,multi,load,misc,store,misc,misc")])
                   2266: 
                   2267: (define_insn ""
                   2268:   [(set (match_operand:PSI 0 "out_operand" "=*r,*r,*r,*r,m,h,h")
                   2269:         (match_operand:PSI 1 "in_operand" "r,i,m,h,r,r,J"))]
                   2270:   "(gpc_reg_operand (operands[0], PSImode)
                   2271:     || gpc_reg_operand (operands[1], PSImode)
                   2272:     || (spec_reg_operand (operands[0], PSImode)
                   2273:         && cint_16_operand (operands[1], PSImode)))"
                   2274:   "@
                   2275:    sll %0,%1,0
                   2276:    const %0,%1
                   2277:    load 0,0,%0,%1
                   2278:    mfsr %0,%1
                   2279:    store 0,0,%1,%0
                   2280:    mtsr %0,%1
                   2281:    mtsrim %0,%1"
                   2282:   [(set_attr "type" "misc,multi,load,misc,store,misc,misc")])
                   2283: 
                   2284: (define_insn ""
                   2285:   [(set (match_operand:HI 0 "out_operand" "=r,r,r,m,r,*h,*h")
                   2286:         (match_operand:HI 1 "in_operand" "r,i,m,r,*h,r,i"))]
                   2287:   "gpc_reg_operand (operands[0], HImode)
                   2288:    || gpc_reg_operand (operands[1], HImode)
                   2289:    || (spec_reg_operand (operands[0], HImode)
                   2290:        && cint_16_operand (operands[1], HImode))"
                   2291:   "@
                   2292:    sll %0,%1,0
                   2293:    const %0,%1
                   2294:    load 0,2,%0,%1
                   2295:    store 0,2,%1,%0
                   2296:    mfsr %0,%1
                   2297:    mtsr %0,%1
                   2298:    mtsrim %0,%1"
                   2299:   [(set_attr "type" "misc,misc,load,store,misc,misc,misc")])
                   2300: 
                   2301: (define_insn ""
                   2302:   [(set (match_operand:QI 0 "out_operand" "=r,r,r,m,r,*h,*h")
                   2303:         (match_operand:QI 1 "in_operand" "r,i,m,r,*h,r,i"))]
                   2304:   "gpc_reg_operand (operands[0], QImode)
                   2305:    || gpc_reg_operand (operands[1], QImode)
                   2306:    || (spec_reg_operand (operands[0], HImode)
                   2307:        && cint_16_operand (operands[1], HImode))"
                   2308:   "@
                   2309:    sll %0,%1,0
                   2310:    const %0,%1
                   2311:    load 0,1,%0,%1
                   2312:    store 0,1,%1,%0
                   2313:    mfsr %0,%1
                   2314:    mtsr %0,%1
                   2315:    mtsrim %0,%1"
                   2316:   [(set_attr "type" "misc,misc,load,store,misc,misc,misc")])
                   2317: 
                   2318: ;; Define move insns for DI, TI, SF, and DF.
                   2319: ;;
                   2320: ;; In no case do we support mem->mem directly.
                   2321: ;;
                   2322: ;; For DI move of constant to register, split apart at this time since these
                   2323: ;; can require anywhere from 2 to 4 insns and determining which is complex.
                   2324: ;;
                   2325: ;; In other cases, handle similarly to SImode moves.
                   2326: ;;
                   2327: ;; However, indicate that DI, TI, and DF moves may clobber CR (reg 179).
                   2328: (define_expand "movdi"
                   2329:   [(parallel [(set (match_operand:DI 0 "general_operand" "")
                   2330:                   (match_operand:DI 1 "general_operand" ""))
                   2331:              (clobber (scratch:PSI))])]
                   2332:   ""
                   2333:   "
                   2334: {
                   2335:   if (GET_CODE (operands[0]) == MEM)
                   2336:     operands[1] = force_reg (DImode, operands[1]);
                   2337: }")
                   2338: 
                   2339: (define_expand "movsf"
                   2340:   [(set (match_operand:SF 0 "general_operand" "")
                   2341:        (match_operand:SF 1 "general_operand" ""))]
                   2342:   ""
                   2343:   "
                   2344: { if (GET_CODE (operands[0]) == MEM)
                   2345:     operands[1] = force_reg (SFmode, operands[1]);
                   2346: }")
                   2347: 
                   2348: (define_expand "movdf"
                   2349:   [(parallel [(set (match_operand:DF 0 "general_operand" "")
                   2350:                   (match_operand:DF 1 "general_operand" ""))
                   2351:              (clobber (scratch:PSI))])]
                   2352:   ""
                   2353:   "
                   2354: { if (GET_CODE (operands[0]) == MEM)
                   2355:     operands[1] = force_reg (DFmode, operands[1]);
                   2356: }")
                   2357: 
                   2358: (define_expand "movti"
                   2359:   [(parallel [(set (match_operand:TI 0 "general_operand" "")
                   2360:                   (match_operand:TI 1 "general_operand" ""))
                   2361:              (clobber (scratch:PSI))])]
                   2362:   ""
                   2363:   "
                   2364: {
                   2365:   if (GET_CODE (operands[0]) == MEM)
                   2366:     operands[1] = force_reg (TImode, operands[1]);
                   2367: 
                   2368:   /* We can't handle constants in general because there is no rtl to represent
                   2369:      128 bit constants.  Splitting happens to work for CONST_INTs so we split
                   2370:      them for good code.  Other constants will get forced to memory.  */
                   2371: 
                   2372:   if (GET_CODE (operands[1]) == CONST_INT)
                   2373:     {
                   2374:      rtx part0, part1, part2, part3;
                   2375: 
                   2376:      part0 = operand_subword (operands[0], 0, 1, TImode);
                   2377:      part1 = operand_subword (operands[0], 1, 1, TImode);
                   2378:      part2 = operand_subword (operands[0], 2, 1, TImode);
                   2379:      part3 = operand_subword (operands[0], 3, 1, TImode);
                   2380: 
                   2381:      emit_move_insn (part0, const0_rtx);
                   2382:      emit_move_insn (part1, const0_rtx);
                   2383:      emit_move_insn (part2, const0_rtx);
                   2384:      emit_move_insn (part3, const0_rtx);
                   2385: 
                   2386:      DONE;
                   2387:     }
                   2388:   else if (CONSTANT_P (operands[1]))
                   2389:     {
                   2390:       operands[1] = force_const_mem (TImode, operands[1]);
                   2391:       if (! memory_address_p (TImode, XEXP (operands[1], 0))
                   2392:          && ! reload_in_progress)
                   2393:         operands[1] = change_address (operands[1], TImode,
                   2394:                                      XEXP (operands[1], 0));
                   2395:     }
                   2396: }")
                   2397: 
                   2398: ;; Here are the variants of the above for use during reload.
                   2399: 
                   2400: (define_expand "reload_indf"
                   2401:   [(parallel [(set (match_operand:DF 0 "register_operand" "=r")
                   2402:                   (match_operand:DF 1 "reload_memory_operand" "m"))
                   2403:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
                   2404:   ""
                   2405:   "")
                   2406: 
                   2407: (define_expand "reload_outdf"
                   2408:   [(parallel [(set (match_operand:DF 0 "reload_memory_operand" "=m")
                   2409:                   (match_operand:DF 1 "register_operand" "r"))
                   2410:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
                   2411:   ""
                   2412:   "")
                   2413: 
                   2414: (define_expand "reload_indi"
                   2415:   [(parallel [(set (match_operand:DI 0 "register_operand" "=r")
                   2416:                   (match_operand:DI 1 "reload_memory_operand" "m"))
                   2417:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
                   2418:   ""
                   2419:   "")
                   2420: 
                   2421: (define_expand "reload_outdi"
                   2422:   [(parallel [(set (match_operand:DI 0 "reload_memory_operand" "=m")
                   2423:                   (match_operand:DI 1 "register_operand" "r"))
                   2424:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
                   2425:   ""
                   2426:   "")
                   2427: 
                   2428: (define_expand "reload_inti"
                   2429:   [(parallel [(set (match_operand:TI 0 "register_operand" "=r")
                   2430:                   (match_operand:TI 1 "reload_memory_operand" "m"))
                   2431:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
                   2432:   ""
                   2433:   "")
                   2434: 
                   2435: (define_expand "reload_outti"
                   2436:   [(parallel [(set (match_operand:TI 0 "reload_memory_operand" "=m")
                   2437:                   (match_operand:TI 1 "register_operand" "r"))
                   2438:              (clobber (match_operand:PSI 2 "register_operand" "=&c"))])]
                   2439:   ""
                   2440:   "")
                   2441: 
                   2442: ;; For compare operations, we simply store the comparison operands and
                   2443: ;; do nothing else.  The following branch or scc insn will output whatever
                   2444: ;; is needed.
                   2445: (define_expand "cmpsi"
                   2446:   [(set (cc0)
                   2447:        (compare (match_operand:SI 0 "gpc_reg_operand" "")
                   2448:                 (match_operand:SI 1 "srcb_operand" "")))]
                   2449:   ""
                   2450:   "
                   2451: {
                   2452:   a29k_compare_op0 = operands[0];
                   2453:   a29k_compare_op1 = operands[1];
                   2454:   a29k_compare_fp_p = 0;
                   2455:   DONE;
                   2456: }")
                   2457: 
                   2458: (define_expand "cmpsf"
                   2459:   [(set (cc0)
                   2460:        (compare (match_operand:SF 0 "gpc_reg_operand" "")
                   2461:                 (match_operand:SF 1 "gpc_reg_operand" "")))]
1.1.1.3 ! root     2462:   "! TARGET_SOFT_FLOAT"
1.1       root     2463:   "
                   2464: {
                   2465:   a29k_compare_op0 = operands[0];
                   2466:   a29k_compare_op1 = operands[1];
                   2467:   a29k_compare_fp_p = 1;
                   2468:   DONE;
                   2469: }")
                   2470: 
                   2471: (define_expand "cmpdf"
                   2472:   [(set (cc0)
                   2473:        (compare (match_operand:DF 0 "gpc_reg_operand" "")
                   2474:                 (match_operand:DF 1 "gpc_reg_operand" "")))]
1.1.1.3 ! root     2475:   "! TARGET_SOFT_FLOAT"
1.1       root     2476:   "
                   2477: {
                   2478:   a29k_compare_op0 = operands[0];
                   2479:   a29k_compare_op1 = operands[1];
                   2480:   a29k_compare_fp_p = 1;
                   2481:   DONE;
                   2482: }")
                   2483: 
                   2484: ;; We can generate bit-tests better if we use NE instead of EQ, but we
                   2485: ;; don't have an NE for floating-point.  So we have to have two patterns
                   2486: ;; for EQ and two for NE.
                   2487: 
                   2488: (define_expand "beq"
                   2489:   [(set (match_dup 1) (ne:SI (match_dup 2) (match_dup 3)))
                   2490:    (set (pc)
                   2491:        (if_then_else (ge (match_dup 1) (const_int 0))
                   2492:                      (label_ref (match_operand 0 "" ""))
                   2493:                      (pc)))]
                   2494:   ""
                   2495:   "
                   2496: {
                   2497:   if (GET_MODE_CLASS (GET_MODE (a29k_compare_op0)) == MODE_FLOAT)
                   2498:     {
                   2499:       emit_insn (gen_beq_fp (operands[0]));
                   2500:       DONE;
                   2501:     }
                   2502: 
                   2503:   operands[1] = gen_reg_rtx (SImode);
                   2504:   operands[2] = a29k_compare_op0;
                   2505:   operands[3] = a29k_compare_op1;
                   2506: }")
                   2507: 
                   2508: (define_expand "beq_fp"
                   2509:   [(set (match_dup 1) (eq:SI (match_dup 2) (match_dup 3)))
                   2510:    (set (pc)
                   2511:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2512:                      (label_ref (match_operand 0 "" ""))
                   2513:                      (pc)))]
                   2514:   ""
                   2515:   "
                   2516: {
                   2517:   operands[1] = gen_reg_rtx (SImode);
                   2518:   operands[2] = a29k_compare_op0;
                   2519:   operands[3] = a29k_compare_op1;
                   2520: }")
                   2521: 
                   2522: (define_expand "bne"
                   2523:   [(set (match_dup 1) (ne:SI (match_dup 2) (match_dup 3)))
                   2524:    (set (pc)
                   2525:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2526:                      (label_ref (match_operand 0 "" ""))
                   2527:                      (pc)))]
                   2528:   ""
                   2529:   "
                   2530: {
                   2531:   if (GET_MODE_CLASS (GET_MODE (a29k_compare_op0)) == MODE_FLOAT)
                   2532:     {
                   2533:       emit_insn (gen_bne_fp (operands[0]));
                   2534:       DONE;
                   2535:     }
                   2536: 
                   2537:   operands[1] = gen_reg_rtx (SImode);
                   2538:   operands[2] = a29k_compare_op0;
                   2539:   operands[3] = a29k_compare_op1;
                   2540: }")
                   2541: 
                   2542: (define_expand "bne_fp"
                   2543:   [(set (match_dup 1) (eq:SI (match_dup 2) (match_dup 3)))
                   2544:    (set (pc)
                   2545:        (if_then_else (ge (match_dup 1) (const_int 0))
                   2546:                      (label_ref (match_operand 0 "" ""))
                   2547:                      (pc)))]
                   2548:   ""
                   2549:   "
                   2550: {
                   2551:   operands[1] = gen_reg_rtx (SImode);
                   2552:   operands[2] = a29k_compare_op0;
                   2553:   operands[3] = a29k_compare_op1;
                   2554: }")
                   2555: 
                   2556: ;; We don't have a floating-point "lt" insn, so we have to use "gt" in that
                   2557: ;; case with the operands swapped.  The operands must both be registers in
                   2558: ;; the floating-point case, so we know that swapping them is OK.
                   2559: (define_expand "blt"
                   2560:   [(set (match_dup 1) (match_dup 2))
                   2561:    (set (pc)
                   2562:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2563:                      (label_ref (match_operand 0 "" ""))
                   2564:                      (pc)))]
                   2565:   ""
                   2566:   "
                   2567: {
                   2568:   operands[1] = gen_reg_rtx (SImode);
                   2569:   if (a29k_compare_fp_p)
                   2570:     operands[2] = gen_rtx (GT, SImode, a29k_compare_op1, a29k_compare_op0);
                   2571:   else
                   2572:     operands[2] = gen_rtx (LT, SImode, a29k_compare_op0, a29k_compare_op1);
                   2573: }")
                   2574: 
                   2575: ;; Similarly for "le".
                   2576: (define_expand "ble"
                   2577:   [(set (match_dup 1) (match_dup 2))
                   2578:    (set (pc)
                   2579:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2580:                      (label_ref (match_operand 0 "" ""))
                   2581:                      (pc)))]
                   2582:   ""
                   2583:   "
                   2584: {
                   2585:   operands[1] = gen_reg_rtx (SImode);
                   2586:   if (a29k_compare_fp_p)
                   2587:     operands[2] = gen_rtx (GE, SImode, a29k_compare_op1, a29k_compare_op0);
                   2588:   else
                   2589:     operands[2] = gen_rtx (LE, SImode, a29k_compare_op0, a29k_compare_op1);
                   2590: }")
                   2591: 
                   2592: (define_expand "bltu"
                   2593:   [(set (match_dup 1) (ltu:SI (match_dup 2) (match_dup 3)))
                   2594:    (set (pc)
                   2595:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2596:                      (label_ref (match_operand 0 "" ""))
                   2597:                      (pc)))]
                   2598:   ""
                   2599:   "
                   2600: {
                   2601:   operands[1] = gen_reg_rtx (SImode);
                   2602:   operands[2] = a29k_compare_op0;
                   2603:   operands[3] = a29k_compare_op1;
                   2604: }")
                   2605: 
                   2606: (define_expand "bleu"
                   2607:   [(set (match_dup 1) (leu:SI (match_dup 2) (match_dup 3)))
                   2608:    (set (pc)
                   2609:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2610:                      (label_ref (match_operand 0 "" ""))
                   2611:                      (pc)))]
                   2612:   ""
                   2613:   "
                   2614: {
                   2615:   operands[1] = gen_reg_rtx (SImode);
                   2616:   operands[2] = a29k_compare_op0;
                   2617:   operands[3] = a29k_compare_op1;
                   2618: }")
                   2619: 
                   2620: (define_expand "bgt"
                   2621:   [(set (match_dup 1) (gt:SI (match_dup 2) (match_dup 3)))
                   2622:    (set (pc)
                   2623:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2624:                      (label_ref (match_operand 0 "" ""))
                   2625:                      (pc)))]
                   2626:   ""
                   2627:   "
                   2628: {
                   2629:   operands[1] = gen_reg_rtx (SImode);
                   2630:   operands[2] = a29k_compare_op0;
                   2631:   operands[3] = a29k_compare_op1;
                   2632: }")
                   2633: 
                   2634: (define_expand "bge"
                   2635:   [(set (match_dup 1) (ge:SI (match_dup 2) (match_dup 3)))
                   2636:    (set (pc)
                   2637:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2638:                      (label_ref (match_operand 0 "" ""))
                   2639:                      (pc)))]
                   2640:   ""
                   2641:   "
                   2642: {
                   2643:   operands[1] = gen_reg_rtx (SImode);
                   2644:   operands[2] = a29k_compare_op0;
                   2645:   operands[3] = a29k_compare_op1;
                   2646: }")
                   2647: 
                   2648: (define_expand "bgtu"
                   2649:   [(set (match_dup 1) (gtu:SI (match_dup 2) (match_dup 3)))
                   2650:    (set (pc)
                   2651:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2652:                      (label_ref (match_operand 0 "" ""))
                   2653:                      (pc)))]
                   2654:   ""
                   2655:   "
                   2656: {
                   2657:   operands[1] = gen_reg_rtx (SImode);
                   2658:   operands[2] = a29k_compare_op0;
                   2659:   operands[3] = a29k_compare_op1;
                   2660: }")
                   2661: 
                   2662: (define_expand "bgeu"
                   2663:   [(set (match_dup 1) (geu:SI (match_dup 2) (match_dup 3)))
                   2664:    (set (pc)
                   2665:        (if_then_else (lt (match_dup 1) (const_int 0))
                   2666:                      (label_ref (match_operand 0 "" ""))
                   2667:                      (pc)))]
                   2668:   ""
                   2669:   "
                   2670: {
                   2671:   operands[1] = gen_reg_rtx (SImode);
                   2672:   operands[2] = a29k_compare_op0;
                   2673:   operands[3] = a29k_compare_op1;
                   2674: }")
                   2675: 
                   2676: (define_expand "seq"
                   2677:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2678:        (eq:SI (match_dup 1) (match_dup 2)))]
                   2679:   ""
                   2680:   "
                   2681: {
                   2682:   operands[1] = a29k_compare_op0;
                   2683:   operands[2] = a29k_compare_op1;
                   2684: }")
                   2685:                 
                   2686: ;; This is the most complicated case, because we don't have a floating-point
                   2687: ;; "ne" insn.  If integer, handle normally.  If floating-point, write the
                   2688: ;; compare and then write an insn to reverse the test.
                   2689: (define_expand "sne_fp"
                   2690:   [(set (match_dup 3)
                   2691:        (eq:SI (match_operand 1 "gpc_reg_operand" "")
                   2692:               (match_operand 2 "gpc_reg_operand" "")))
                   2693:    (set (match_operand:SI 0 "gpc_reg_operand" "")
                   2694:        (ge:SI (match_dup 3) (const_int 0)))]
1.1.1.3 ! root     2695:   "! TARGET_SOFT_FLOAT"
1.1       root     2696:   "
                   2697: { operands[3] = gen_reg_rtx (SImode);
                   2698: }");
                   2699: 
                   2700: (define_expand "sne"
                   2701:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2702:        (ne:SI (match_dup 1) (match_dup 2)))]
                   2703:   ""
                   2704:   "
                   2705: {
                   2706:   operands[1] = a29k_compare_op0;
                   2707:   operands[2] = a29k_compare_op1;
                   2708: 
                   2709:   if (a29k_compare_fp_p)
                   2710:     {
                   2711:       emit_insn (gen_sne_fp (operands[0], operands[1], operands[2]));
                   2712:       DONE;
                   2713:     }
                   2714: }")
                   2715:                 
                   2716: ;; We don't have a floating-point "lt" insn, so use "gt" and swap the
                   2717: ;; operands, the same as we do "blt".
                   2718: (define_expand "slt"
                   2719:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2720:        (match_dup 1))]
                   2721:   ""
                   2722:   "
                   2723: {
                   2724:   if (a29k_compare_fp_p)
                   2725:     operands[1] = gen_rtx (GT, SImode, a29k_compare_op1, a29k_compare_op0);
                   2726:   else
                   2727:     operands[1] = gen_rtx (LT, SImode, a29k_compare_op0, a29k_compare_op1);
                   2728: }")
                   2729: 
                   2730: ;; Similarly for "le"
                   2731: (define_expand "sle"
                   2732:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2733:        (match_dup 1))]
                   2734:   ""
                   2735:   "
                   2736: {
                   2737:   if (a29k_compare_fp_p)
                   2738:     operands[1] = gen_rtx (GE, SImode, a29k_compare_op1, a29k_compare_op0);
                   2739:   else
                   2740:     operands[1] = gen_rtx (LE, SImode, a29k_compare_op0, a29k_compare_op1);
                   2741: }")
                   2742: 
                   2743: (define_expand "sltu"
                   2744:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2745:        (ltu:SI (match_dup 1) (match_dup 2)))]
                   2746:   ""
                   2747:   "
                   2748: {
                   2749:   operands[1] = a29k_compare_op0;
                   2750:   operands[2] = a29k_compare_op1;
                   2751: }")
                   2752: 
                   2753: (define_expand "sleu"
                   2754:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2755:        (leu:SI (match_dup 1) (match_dup 2)))]
                   2756:   ""
                   2757:   "
                   2758: {
                   2759:   operands[1] = a29k_compare_op0;
                   2760:   operands[2] = a29k_compare_op1;
                   2761: }")
                   2762: 
                   2763: (define_expand "sgt"
                   2764:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2765:        (gt:SI (match_dup 1) (match_dup 2)))]
                   2766:   ""
                   2767:   "
                   2768: {
                   2769:   operands[1] = a29k_compare_op0;
                   2770:   operands[2] = a29k_compare_op1;
                   2771: }")
                   2772: 
                   2773: (define_expand "sge"
                   2774:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2775:        (ge:SI (match_dup 1) (match_dup 2)))]
                   2776:   ""
                   2777:   "
                   2778: {
                   2779:   operands[1] = a29k_compare_op0;
                   2780:   operands[2] = a29k_compare_op1;
                   2781: }")
                   2782:                 
                   2783: (define_expand "sgtu"
                   2784:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2785:        (gtu:SI (match_dup 1) (match_dup 2)))]
                   2786:   ""
                   2787:   "
                   2788: {
                   2789:   operands[1] = a29k_compare_op0;
                   2790:   operands[2] = a29k_compare_op1;
                   2791: }")
                   2792: 
                   2793: (define_expand "sgeu"
                   2794:   [(set (match_operand:SI 0 "gpc_reg_operand" "")
                   2795:        (geu:SI (match_dup 1) (match_dup 2)))]
                   2796:   ""
                   2797:   "
                   2798: {
                   2799:   operands[1] = a29k_compare_op0;
                   2800:   operands[2] = a29k_compare_op1;
                   2801: }")
                   2802: 
                   2803: ;; Now define the actual jump insns.
                   2804: (define_insn ""
                   2805:   [(set (pc)
                   2806:        (if_then_else (match_operator 0 "branch_operator"
                   2807:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
                   2808:                                       (const_int 0)])
                   2809:                      (label_ref (match_operand 2 "" ""))
                   2810:                      (pc)))]
                   2811:   ""
                   2812:   "jmp%b0 %1,%l2%#"
                   2813:   [(set_attr "type" "branch")])
                   2814: 
                   2815: (define_insn ""
                   2816:   [(set (pc)
                   2817:        (if_then_else (match_operator 0 "branch_operator"
                   2818:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
                   2819:                                       (const_int 0)])
                   2820:                      (return)
                   2821:                      (pc)))]
                   2822:   "null_epilogue ()"
                   2823:   "jmp%b0i %1,lr0%#"
                   2824:   [(set_attr "type" "branch")])
                   2825: 
                   2826: (define_insn ""
                   2827:   [(set (pc)
                   2828:        (if_then_else (match_operator 0 "branch_operator"
                   2829:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
                   2830:                                       (const_int 0)])
                   2831:                      (pc)
                   2832:                      (label_ref (match_operand 2 "" ""))))]
                   2833:   ""
                   2834:   "jmp%B0 %1,%l2%#"
                   2835:   [(set_attr "type" "branch")])
                   2836: 
                   2837: (define_insn ""
                   2838:   [(set (pc)
                   2839:        (if_then_else (match_operator 0 "branch_operator"
                   2840:                                      [(match_operand:SI 1 "gpc_reg_operand" "r")
                   2841:                                       (const_int 0)])
                   2842:                      (pc)
                   2843:                      (return)))]
                   2844:   "null_epilogue ()"
                   2845:   "jmp%B0i %1,lr0%#"
                   2846:   [(set_attr "type" "branch")])
                   2847: 
                   2848: (define_insn "jump"
                   2849:   [(set (pc)
                   2850:        (label_ref (match_operand 0 "" "")))]
                   2851:   ""
                   2852:   "jmp %e0%E0"
                   2853:   [(set_attr "type" "branch")])
                   2854: 
                   2855: (define_insn "return"
                   2856:   [(return)]
                   2857:   "null_epilogue ()"
                   2858:   "jmpi lr0%#"
                   2859:   [(set_attr "type" "branch")])
                   2860: 
                   2861: (define_insn "indirect_jump"
                   2862:   [(set (pc)
                   2863:        (match_operand:SI 0 "gpc_reg_operand" "r"))]
                   2864:   ""
                   2865:   "jmpi %0%#"
                   2866:   [(set_attr "type" "branch")])
                   2867: 
                   2868: (define_insn "tablejump"
                   2869:   [(set (pc)
                   2870:        (match_operand:SI 0 "gpc_reg_operand" "r"))
                   2871:    (use (label_ref (match_operand 1 "" "")))]
                   2872:   ""
                   2873:   "jmpi %0%#"
                   2874:   [(set_attr "type" "branch")])
                   2875: 
                   2876: ;; JMPFDEC
                   2877: (define_insn ""
                   2878:   [(set (pc)
                   2879:        (if_then_else (ge (match_operand:SI 0 "gpc_reg_operand" "r")
                   2880:                          (const_int 0))
                   2881:                      (label_ref (match_operand 1 "" ""))
                   2882:                      (pc)))
                   2883:    (set (match_dup 0)
                   2884:        (plus:SI (match_dup 0)
                   2885:                 (const_int -1)))]
                   2886:   ""
                   2887:   "jmpfdec %0,%l1%#"
                   2888:   [(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.