Annotation of GNUtools/cc/config/mips/mips.md, revision 1.1.1.1

1.1       root        1: ;;  Mips.md         Machine Description for MIPS based processors
                      2: ;;  Contributed by   A. Lichnewsky, [email protected]
                      3: ;;  Changes by       Michael Meissner, [email protected]
                      4: ;;  Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
                      5: 
                      6: ;; This file is part of GNU CC.
                      7: 
                      8: ;; GNU CC is free software; you can redistribute it and/or modify
                      9: ;; it under the terms of the GNU General Public License as published by
                     10: ;; the Free Software Foundation; either version 2, or (at your option)
                     11: ;; any later version.
                     12: 
                     13: ;; GNU CC is distributed in the hope that it will be useful,
                     14: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     15: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     16: ;; GNU General Public License for more details.
                     17: 
                     18: ;; You should have received a copy of the GNU General Public License
                     19: ;; along with GNU CC; see the file COPYING.  If not, write to
                     20: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     21: 
                     22: 
                     23: 
                     24: ;; ....................
                     25: ;;
                     26: ;;     Attributes
                     27: ;;
                     28: ;; ....................
                     29: 
                     30: ;; Classification of each insn.
                     31: ;; branch      conditional branch
                     32: ;; jump                unconditional jump
                     33: ;; call                unconditional call
                     34: ;; load                load instruction(s)
                     35: ;; store       store instruction(s)
                     36: ;; move                data movement within same register set
                     37: ;; xfer                transfer to/from coprocessor
                     38: ;; hilo                transfer of hi/lo registers
                     39: ;; arith       integer arithmetic instruction
                     40: ;; darith      double precision integer arithmetic instructions
                     41: ;; imul                integer multiply
                     42: ;; idiv                integer divide
                     43: ;; icmp                integer compare
                     44: ;; fadd                floating point add/subtract
                     45: ;; fmul                floating point multiply
                     46: ;; fdiv                floating point divide
                     47: ;; fabs                floating point absolute value
                     48: ;; fneg                floating point negation
                     49: ;; fcmp                floating point compare
                     50: ;; fcvt                floating point convert
                     51: ;; fsqrt       floating point square root
                     52: ;; multi       multiword sequence (or user asm statements)
                     53: ;; nop         no operation
                     54: 
                     55: (define_attr "type"
                     56:   "unknown,branch,jump,call,load,store,move,xfer,hilo,arith,darith,imul,idiv,icmp,fadd,fmul,fdiv,fabs,fneg,fcmp,fcvt,fsqrt,multi,nop"
                     57:   (const_string "unknown"))
                     58: 
                     59: ;; Main data type used by the insn
                     60: (define_attr "mode" "unknown,none,QI,HI,SI,DI,SF,DF,FPSW" (const_string "unknown"))
                     61: 
                     62: ;; # instructions (4 bytes each)
                     63: (define_attr "length" "" (const_int 1))
                     64: 
                     65: ;; whether or not an instruction has a mandatory delay slot
                     66: (define_attr "dslot" "no,yes"
                     67:   (if_then_else (eq_attr "type" "branch,jump,call,load,xfer,hilo,fcmp")
                     68:                (const_string "yes")
                     69:                (const_string "no")))
                     70: 
                     71: ;; Attribute describing the processor.  This attribute must match exactly
                     72: ;; with the processor_type enumeration in mips.h.
                     73: 
                     74: ;; Attribute describing the processor
                     75: ;; (define_attr "cpu" "default,r3000,r6000,r4000"
                     76: ;;   (const
                     77: ;;    (cond [(eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R3000"))   (const_string "r3000")
                     78: ;;           (eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R4000"))   (const_string "r4000")
                     79: ;;           (eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R6000"))   (const_string "r6000")]
                     80: ;;          (const_string "default"))))
                     81: 
                     82: (define_attr "cpu" "default,r3000,r6000,r4000"
                     83:   (const (symbol_ref "mips_cpu_attr")))
                     84: 
                     85: ;; Attribute defining whether or not we can use the branch-likely instructions
                     86: ;; (MIPS ISA level 2)
                     87: 
                     88: (define_attr "branch_likely" "no,yes"
                     89:   (const
                     90:    (if_then_else (ge (symbol_ref "mips_isa") (const_int 2))
                     91:                 (const_string "yes")
                     92:                 (const_string "no"))))
                     93: 
                     94: 
                     95: ;; Describe a user's asm statement.
                     96: (define_asm_attributes
                     97:   [(set_attr "type" "multi")])
                     98: 
                     99: ;; whether or not generating calls to position independent functions
                    100: (define_attr "abicalls" "no,yes"
                    101:   (const (symbol_ref "mips_abicalls_attr")))
                    102: 
                    103: 
                    104: 
                    105: ;; .........................
                    106: ;;
                    107: ;;     Delay slots, can't describe load/fcmp/xfer delay slots here
                    108: ;;
                    109: ;; .........................
                    110: 
                    111: (define_delay (eq_attr "type" "branch")
                    112:   [(and (eq_attr "dslot" "no") (eq_attr "length" "1"))
                    113:    (nil)
                    114:    (and (eq_attr "branch_likely" "yes") (and (eq_attr "dslot" "no") (eq_attr "length" "1")))])
                    115: 
                    116: (define_delay (eq_attr "type" "jump")
                    117:   [(and (eq_attr "dslot" "no") (eq_attr "length" "1"))
                    118:    (nil)
                    119:    (nil)])
                    120: 
                    121: (define_delay (and (eq_attr "type" "call") (eq_attr "abicalls" "no"))
                    122:   [(and (eq_attr "dslot" "no") (eq_attr "length" "1"))
                    123:    (nil)
                    124:    (nil)])
                    125: 
                    126: 
                    127: 
                    128: ;; .........................
                    129: ;;
                    130: ;;     Functional units
                    131: ;;
                    132: ;; .........................
                    133: 
                    134: ; (define_function_unit NAME MULTIPLICITY SIMULTANEITY
                    135: ;                      TEST READY-DELAY ISSUE-DELAY [CONFLICT-LIST])
                    136: 
                    137: ;; Make the default case (PROCESSOR_DEFAULT) handle the worst case
                    138: 
                    139: (define_function_unit "memory" 1 0
                    140:   (and (eq_attr "type" "load") (eq_attr "cpu" "!r3000"))
                    141:   3 0)
                    142: 
                    143: (define_function_unit "memory" 1 0
                    144:   (and (eq_attr "type" "load") (eq_attr "cpu" "r3000"))
                    145:   2 0)
                    146: 
                    147: (define_function_unit "memory"   1 0 (eq_attr "type" "store") 1 0)
                    148: 
                    149: (define_function_unit "addr"     1 0 (eq_attr "type" "fcmp") 2 0)
                    150: 
                    151: (define_function_unit "memory"   1 0 (eq_attr "type" "xfer") 2 0)
                    152: (define_function_unit "memory"   1 0 (eq_attr "type" "hilo") 3 0)
                    153: 
                    154: (define_function_unit "imuldiv"  1 1
                    155:   (and (eq_attr "type" "imul") (eq_attr "cpu" "!r3000,r4000"))
                    156:   17 0)
                    157: 
                    158: (define_function_unit "imuldiv"  1 1
                    159:   (and (eq_attr "type" "imul") (eq_attr "cpu" "r3000"))
                    160:   12 0)
                    161: 
                    162: (define_function_unit "imuldiv" 1 1
                    163:   (and (eq_attr "type" "imul") (eq_attr "cpu" "r4000"))
                    164:   10 0)
                    165: 
                    166: (define_function_unit "imuldiv"  1 1
                    167:   (and (eq_attr "type" "idiv") (eq_attr "cpu" "!r3000,r4000"))
                    168:   38 0)
                    169: 
                    170: (define_function_unit "imuldiv"  1 1
                    171:   (and (eq_attr "type" "idiv") (eq_attr "cpu" "r3000"))
                    172:   35 0)
                    173: 
                    174: (define_function_unit "imuldiv" 1 1
                    175:   (and (eq_attr "type" "idiv") (eq_attr "cpu" "r4000"))
                    176:   69 0)
                    177: 
                    178: (define_function_unit "adder" 1 1
                    179:   (and (eq_attr "type" "fadd") (eq_attr "cpu" "!r3000,r6000"))
                    180:   4 0)
                    181: 
                    182: (define_function_unit "adder" 1 1
                    183:   (and (eq_attr "type" "fadd") (eq_attr "cpu" "r3000"))
                    184:   2 0)
                    185: 
                    186: (define_function_unit "adder" 1 1
                    187:   (and (eq_attr "type" "fadd") (eq_attr "cpu" "r6000"))
                    188:   3 0)
                    189: 
                    190: (define_function_unit "adder" 1 1
                    191:   (and (eq_attr "type" "fabs,fneg") (eq_attr "cpu" "!r3000"))
                    192:   2 0)
                    193: 
                    194: (define_function_unit "adder" 1 1
                    195:   (and (eq_attr "type" "fabs,fneg") (eq_attr "cpu" "r3000"))
                    196:   1 0)
                    197: 
                    198: (define_function_unit "mult" 1 1
                    199:   (and (eq_attr "type" "fmul") (and (eq_attr "mode" "SF") (eq_attr "cpu" "!r3000,r6000")))
                    200:   7 0)
                    201: 
                    202: (define_function_unit "mult" 1 1
                    203:   (and (eq_attr "type" "fmul") (and (eq_attr "mode" "SF") (eq_attr "cpu" "r3000")))
                    204:   4 0)
                    205: 
                    206: (define_function_unit "mult" 1 1
                    207:   (and (eq_attr "type" "fmul") (and (eq_attr "mode" "SF") (eq_attr "cpu" "r6000")))
                    208:   5 0)
                    209: 
                    210: (define_function_unit "mult" 1 1
                    211:   (and (eq_attr "type" "fmul") (and (eq_attr "mode" "DF") (eq_attr "cpu" "!r3000,r6000")))
                    212:   8 0)
                    213: 
                    214: (define_function_unit "mult" 1 1
                    215:   (and (eq_attr "type" "fmul") (and (eq_attr "mode" "DF") (eq_attr "cpu" "r3000")))
                    216:   5 0)
                    217: 
                    218: (define_function_unit "mult" 1 1
                    219:   (and (eq_attr "type" "fmul") (and (eq_attr "mode" "DF") (eq_attr "cpu" "r6000")))
                    220:   6 0)
                    221: 
                    222: (define_function_unit "divide" 1 1
                    223:   (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "SF") (eq_attr "cpu" "!r3000,r6000")))
                    224:   23 0)
                    225: 
                    226: (define_function_unit "divide" 1 1
                    227:   (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "SF") (eq_attr "cpu" "r3000")))
                    228:   12 0)
                    229: 
                    230: (define_function_unit "divide" 1 1
                    231:   (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "SF") (eq_attr "cpu" "r6000")))
                    232:   15 0)
                    233: 
                    234: (define_function_unit "divide" 1 1
                    235:   (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "DF") (eq_attr "cpu" "!r3000,r6000")))
                    236:   36 0)
                    237: 
                    238: (define_function_unit "divide" 1 1
                    239:   (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "DF") (eq_attr "cpu" "r3000")))
                    240:   19 0)
                    241: 
                    242: (define_function_unit "divide" 1 1
                    243:   (and (eq_attr "type" "fdiv") (and (eq_attr "mode" "DF") (eq_attr "cpu" "r6000")))
                    244:   16 0)
                    245: 
                    246: (define_function_unit "divide" 1 1 (and (eq_attr "type" "fsqrt") (eq_attr "mode" "SF"))  54 0)
                    247: (define_function_unit "divide" 1 1 (and (eq_attr "type" "fsqrt") (eq_attr "mode" "DF")) 112 0)
                    248: 
                    249: 
                    250: ;; The following functional units do not use the cpu type, and use
                    251: ;; much less memory in genattrtab.c.
                    252: 
                    253: ;; (define_function_unit "memory"   1 0 (eq_attr "type" "load")                                3 0)
                    254: ;; (define_function_unit "memory"   1 0 (eq_attr "type" "store")                               1 0)
                    255: ;;       
                    256: ;; (define_function_unit "fp_comp"  1 0 (eq_attr "type" "fcmp")                                2 0)
                    257: ;;       
                    258: ;; (define_function_unit "transfer" 1 0 (eq_attr "type" "xfer")                                2 0)
                    259: ;; (define_function_unit "transfer" 1 0 (eq_attr "type" "hilo")                                3 0)
                    260: ;;   
                    261: ;; (define_function_unit "imuldiv"  1 1 (eq_attr "type" "imul")                               17 0)
                    262: ;; (define_function_unit "imuldiv"  1 1 (eq_attr "type" "idiv")                               38 0)
                    263: ;;   
                    264: ;; (define_function_unit "adder"    1 1 (eq_attr "type" "fadd")                                4 0)
                    265: ;; (define_function_unit "adder"    1 1 (eq_attr "type" "fabs,fneg")                           2 0)
                    266: ;;   
                    267: ;; (define_function_unit "mult"     1 1 (and (eq_attr "type" "fmul") (eq_attr "mode" "SF"))    7 0)
                    268: ;; (define_function_unit "mult"     1 1 (and (eq_attr "type" "fmul") (eq_attr "mode" "DF"))    8 0)
                    269: ;;   
                    270: ;; (define_function_unit "divide"   1 1 (and (eq_attr "type" "fdiv") (eq_attr "mode" "SF"))   23 0)
                    271: ;; (define_function_unit "divide"   1 1 (and (eq_attr "type" "fdiv") (eq_attr "mode" "DF"))   36 0)
                    272: ;; 
                    273: ;; (define_function_unit "sqrt"     1 1 (and (eq_attr "type" "fsqrt") (eq_attr "mode" "SF"))  54 0)
                    274: ;; (define_function_unit "sqrt"     1 1 (and (eq_attr "type" "fsqrt") (eq_attr "mode" "DF")) 112 0)
                    275: 
                    276: 
                    277: ;;
                    278: ;;  ....................
                    279: ;;
                    280: ;;     ADDITION
                    281: ;;
                    282: ;;  ....................
                    283: ;;
                    284: 
                    285: (define_insn "adddf3"
                    286:   [(set (match_operand:DF 0 "register_operand" "=f")
                    287:        (plus:DF (match_operand:DF 1 "register_operand" "f")
                    288:                 (match_operand:DF 2 "register_operand" "f")))]
                    289:   "TARGET_HARD_FLOAT"
                    290:   "add.d\\t%0,%1,%2"
                    291:   [(set_attr "type"    "fadd")
                    292:    (set_attr "mode"    "DF")
                    293:    (set_attr "length"  "1")])
                    294: 
                    295: (define_insn "addsf3"
                    296:   [(set (match_operand:SF 0 "register_operand" "=f")
                    297:        (plus:SF (match_operand:SF 1 "register_operand" "f")
                    298:                 (match_operand:SF 2 "register_operand" "f")))]
                    299:   "TARGET_HARD_FLOAT"
                    300:   "add.s\\t%0,%1,%2"
                    301:   [(set_attr "type"    "fadd")
                    302:    (set_attr "mode"    "SF")
                    303:    (set_attr "length"  "1")])
                    304: 
                    305: (define_expand "addsi3"
                    306:   [(set (match_operand:SI 0 "register_operand" "=d")
                    307:        (plus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")
                    308:                 (match_operand:SI 2 "arith_operand" "dI")))]
                    309:   ""
                    310:   "
                    311: {
                    312:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == -32768)
                    313:     operands[2] = force_reg (SImode, operands[2]);
                    314: }")
                    315: 
                    316: (define_insn "addsi3_internal"
                    317:   [(set (match_operand:SI 0 "register_operand" "=d")
                    318:        (plus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")
                    319:                 (match_operand:SI 2 "arith_operand" "dI")))]
                    320:   "GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != -32768"
                    321:   "*
                    322: {
                    323:   return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
                    324:     ? \"subu\\t%0,%z1,%n2\"
                    325:     : \"addu\\t%0,%z1,%2\";
                    326: }"
                    327:   [(set_attr "type"    "arith")
                    328:    (set_attr "mode"    "SI")
                    329:    (set_attr "length"  "1")])
                    330: 
                    331: (define_expand "adddi3"
                    332:   [(parallel [(set (match_operand:DI 0 "register_operand" "")
                    333:                   (plus:DI (match_operand:DI 1 "register_operand" "")
                    334:                            (match_operand:DI 2 "arith_operand" "")))
                    335:              (clobber (match_dup 3))])]
                    336:   "!TARGET_DEBUG_G_MODE"
                    337:   "
                    338: {
                    339:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == -32768)
                    340:     operands[2] = force_reg (DImode, operands[2]);
                    341: 
                    342:   operands[3] = gen_reg_rtx (SImode);
                    343: }")
                    344: 
                    345: (define_insn "adddi3_internal_1"
                    346:   [(set (match_operand:DI 0 "register_operand" "=d,&d")
                    347:        (plus:DI (match_operand:DI 1 "register_operand" "0,d")
                    348:                 (match_operand:DI 2 "register_operand" "d,d")))
                    349:    (clobber (match_operand:SI 3 "register_operand" "=d,d"))]
                    350:   "!TARGET_DEBUG_G_MODE"
                    351:   "*
                    352: {
                    353:   return (REGNO (operands[0]) == REGNO (operands[1])
                    354:          && REGNO (operands[0]) == REGNO (operands[2]))
                    355:     ? \"srl\\t%3,%L0,31\;sll\\t%M0,%M0,1\;sll\\t%L0,%L1,1\;addu\\t%M0,%M0,%3\"
                    356:     : \"addu\\t%L0,%L1,%L2\;sltu\\t%3,%L0,%L2\;addu\\t%M0,%M1,%M2\;addu\\t%M0,%M0,%3\";
                    357: }"
                    358:   [(set_attr "type"    "darith")
                    359:    (set_attr "mode"    "DI")
                    360:    (set_attr "length"  "4")])
                    361: 
                    362: (define_split
                    363:   [(set (match_operand:DI 0 "register_operand" "")
                    364:        (plus:DI (match_operand:DI 1 "register_operand" "")
                    365:                 (match_operand:DI 2 "register_operand" "")))
                    366:    (clobber (match_operand:SI 3 "register_operand" ""))]
                    367:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    368:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    369:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    370:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))
                    371:    && (REGNO (operands[0]) != REGNO (operands[1])
                    372:        || REGNO (operands[0]) != REGNO (operands[2]))"
                    373: 
                    374:   [(set (subreg:SI (match_dup 0) 0)
                    375:        (plus:SI (subreg:SI (match_dup 1) 0)
                    376:                 (subreg:SI (match_dup 2) 0)))
                    377: 
                    378:    (set (match_dup 3)
                    379:        (ltu:SI (subreg:SI (match_dup 0) 0)
                    380:                (subreg:SI (match_dup 2) 0)))
                    381: 
                    382:    (set (subreg:SI (match_dup 0) 1)
                    383:        (plus:SI (subreg:SI (match_dup 1) 1)
                    384:                 (subreg:SI (match_dup 2) 1)))
                    385: 
                    386:    (set (subreg:SI (match_dup 0) 1)
                    387:        (plus:SI (subreg:SI (match_dup 0) 1)
                    388:                 (match_dup 3)))]
                    389:   "")
                    390: 
                    391: (define_split
                    392:   [(set (match_operand:DI 0 "register_operand" "")
                    393:        (plus:DI (match_operand:DI 1 "register_operand" "")
                    394:                 (match_operand:DI 2 "register_operand" "")))
                    395:    (clobber (match_operand:SI 3 "register_operand" ""))]
                    396:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    397:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    398:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    399:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))
                    400:    && (REGNO (operands[0]) != REGNO (operands[1])
                    401:        || REGNO (operands[0]) != REGNO (operands[2]))"
                    402: 
                    403:   [(set (subreg:SI (match_dup 0) 1)
                    404:        (plus:SI (subreg:SI (match_dup 1) 1)
                    405:                 (subreg:SI (match_dup 2) 1)))
                    406: 
                    407:    (set (match_dup 3)
                    408:        (ltu:SI (subreg:SI (match_dup 0) 1)
                    409:                (subreg:SI (match_dup 2) 1)))
                    410: 
                    411:    (set (subreg:SI (match_dup 0) 0)
                    412:        (plus:SI (subreg:SI (match_dup 1) 0)
                    413:                 (subreg:SI (match_dup 2) 0)))
                    414: 
                    415:    (set (subreg:SI (match_dup 0) 0)
                    416:        (plus:SI (subreg:SI (match_dup 0) 0)
                    417:                 (match_dup 3)))]
                    418:   "")
                    419: 
                    420: (define_insn "adddi3_internal_2"
                    421:   [(set (match_operand:DI 0 "register_operand" "=d,d,d")
                    422:        (plus:DI (match_operand:DI 1 "register_operand" "%d,%d,%d")
                    423:                 (match_operand:DI 2 "small_int" "P,J,N")))
                    424:    (clobber (match_operand:SI 3 "register_operand" "=d,d,d"))]
                    425:   "!TARGET_DEBUG_G_MODE && INTVAL (operands[2]) != -32768"
                    426:   "@
                    427:    addu\\t%L0,%L1,%2\;sltu\\t%3,%L0,%2\;addu\\t%M0,%M1,%3
                    428:    move\\t%L0,%L1\;move\\t%M0,%M1
                    429:    subu\\t%L0,%L1,%n2\;sltu\\t%3,%L0,%2\;subu\\t%M0,%M1,1\;addu\\t%M0,%M0,%3"
                    430:   [(set_attr "type"    "darith")
                    431:    (set_attr "mode"    "DI")
                    432:    (set_attr "length"  "3,2,4")])
                    433: 
                    434: (define_split
                    435:   [(set (match_operand:DI 0 "register_operand" "")
                    436:        (plus:DI (match_operand:DI 1 "register_operand" "")
                    437:                 (match_operand:DI 2 "small_int" "")))
                    438:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                    439:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    440:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    441:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    442:    && INTVAL (operands[2]) > 0"
                    443: 
                    444:   [(set (subreg:SI (match_dup 0) 0)
                    445:        (plus:SI (subreg:SI (match_dup 1) 0)
                    446:                 (match_dup 2)))
                    447: 
                    448:    (set (match_dup 3)
                    449:        (ltu:SI (subreg:SI (match_dup 0) 0)
                    450:                (match_dup 2)))
                    451: 
                    452:    (set (subreg:SI (match_dup 0) 1)
                    453:        (plus:SI (subreg:SI (match_dup 1) 1)
                    454:                 (match_dup 3)))]
                    455:   "")
                    456: 
                    457: (define_split
                    458:   [(set (match_operand:DI 0 "register_operand" "")
                    459:        (plus:DI (match_operand:DI 1 "register_operand" "")
                    460:                 (match_operand:DI 2 "small_int" "")))
                    461:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                    462:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    463:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    464:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    465:    && INTVAL (operands[2]) > 0"
                    466: 
                    467:   [(set (subreg:SI (match_dup 0) 1)
                    468:        (plus:SI (subreg:SI (match_dup 1) 1)
                    469:                 (match_dup 2)))
                    470: 
                    471:    (set (match_dup 3)
                    472:        (ltu:SI (subreg:SI (match_dup 0) 1)
                    473:                (match_dup 2)))
                    474: 
                    475:    (set (subreg:SI (match_dup 0) 0)
                    476:        (plus:SI (subreg:SI (match_dup 1) 0)
                    477:                 (match_dup 3)))]
                    478:   "")
                    479: 
                    480: ;;
                    481: ;;  ....................
                    482: ;;
                    483: ;;     SUBTRACTION
                    484: ;;
                    485: ;;  ....................
                    486: ;;
                    487: 
                    488: (define_insn "subdf3"
                    489:   [(set (match_operand:DF 0 "register_operand" "=f")
                    490:        (minus:DF (match_operand:DF 1 "register_operand" "f")
                    491:                  (match_operand:DF 2 "register_operand" "f")))]
                    492:   "TARGET_HARD_FLOAT"
                    493:   "sub.d\\t%0,%1,%2"
                    494:   [(set_attr "type"    "fadd")
                    495:    (set_attr "mode"    "DF")
                    496:    (set_attr "length"  "1")])
                    497: 
                    498: (define_insn "subsf3"
                    499:   [(set (match_operand:SF 0 "register_operand" "=f")
                    500:        (minus:SF (match_operand:SF 1 "register_operand" "f")
                    501:                  (match_operand:SF 2 "register_operand" "f")))]
                    502:   "TARGET_HARD_FLOAT"
                    503:   "sub.s\\t%0,%1,%2"
                    504:   [(set_attr "type"    "fadd")
                    505:    (set_attr "mode"    "SF")
                    506:    (set_attr "length"  "1")])
                    507: 
                    508: (define_expand "subsi3"
                    509:   [(set (match_operand:SI 0 "register_operand" "=d")
                    510:        (minus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")
                    511:                  (match_operand:SI 2 "arith_operand" "dI")))]
                    512:   ""
                    513:   "
                    514: {
                    515:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == -32768)
                    516:     operands[2] = force_reg (SImode, operands[2]);
                    517: }")
                    518: 
                    519: (define_insn "subsi3_internal"
                    520:   [(set (match_operand:SI 0 "register_operand" "=d")
                    521:        (minus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")
                    522:                  (match_operand:SI 2 "arith_operand" "dI")))]
                    523:   "GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != -32768"
                    524:   "*
                    525: {
                    526:   return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
                    527:     ? \"addu\\t%0,%z1,%n2\"
                    528:     : \"subu\\t%0,%z1,%2\";
                    529: }"
                    530:   [(set_attr "type"    "arith")
                    531:    (set_attr "mode"    "SI")
                    532:    (set_attr "length"  "1")])
                    533: 
                    534: (define_expand "subdi3"
                    535:   [(parallel [(set (match_operand:DI 0 "register_operand" "=d")
                    536:                   (minus:DI (match_operand:DI 1 "register_operand" "d")
                    537:                             (match_operand:DI 2 "register_operand" "d")))
                    538:              (clobber (match_dup 3))])]
                    539:   "!TARGET_DEBUG_G_MODE"
                    540:   "operands[3] = gen_reg_rtx (SImode);")
                    541: 
                    542: (define_insn "subdi3_internal"
                    543:   [(set (match_operand:DI 0 "register_operand" "=d")
                    544:        (minus:DI (match_operand:DI 1 "register_operand" "d")
                    545:                  (match_operand:DI 2 "register_operand" "d")))
                    546:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                    547:   "!TARGET_DEBUG_G_MODE"
                    548:   "sltu\\t%3,%L1,%L2\;subu\\t%L0,%L1,%L2\;subu\\t%M0,%M1,%M2\;subu\\t%M0,%M0,%3"
                    549:   [(set_attr "type"    "darith")
                    550:    (set_attr "mode"    "DI")
                    551:    (set_attr "length"  "4")])
                    552: 
                    553: (define_split
                    554:   [(set (match_operand:DI 0 "register_operand" "")
                    555:        (minus:DI (match_operand:DI 1 "register_operand" "")
                    556:                  (match_operand:DI 2 "register_operand" "")))
                    557:    (clobber (match_operand:SI 3 "register_operand" ""))]
                    558:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    559:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    560:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    561:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
                    562: 
                    563:   [(set (match_dup 3)
                    564:        (ltu:SI (subreg:SI (match_dup 1) 0)
                    565:                (subreg:SI (match_dup 2) 0)))
                    566: 
                    567:    (set (subreg:SI (match_dup 0) 0)
                    568:        (minus:SI (subreg:SI (match_dup 1) 0)
                    569:                  (subreg:SI (match_dup 2) 0)))
                    570: 
                    571:    (set (subreg:SI (match_dup 0) 1)
                    572:        (minus:SI (subreg:SI (match_dup 1) 1)
                    573:                  (subreg:SI (match_dup 2) 1)))
                    574: 
                    575:    (set (subreg:SI (match_dup 0) 1)
                    576:        (minus:SI (subreg:SI (match_dup 0) 1)
                    577:                  (match_dup 3)))]
                    578:   "")
                    579: 
                    580: (define_split
                    581:   [(set (match_operand:DI 0 "register_operand" "")
                    582:        (minus:DI (match_operand:DI 1 "register_operand" "")
                    583:                  (match_operand:DI 2 "register_operand" "")))
                    584:    (clobber (match_operand:SI 3 "register_operand" ""))]
                    585:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    586:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    587:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    588:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
                    589: 
                    590:   [(set (match_dup 3)
                    591:        (ltu:SI (subreg:SI (match_dup 1) 1)
                    592:                (subreg:SI (match_dup 2) 1)))
                    593: 
                    594:    (set (subreg:SI (match_dup 0) 1)
                    595:        (minus:SI (subreg:SI (match_dup 1) 1)
                    596:                  (subreg:SI (match_dup 2) 1)))
                    597: 
                    598:    (set (subreg:SI (match_dup 0) 0)
                    599:        (minus:SI (subreg:SI (match_dup 1) 0)
                    600:                  (subreg:SI (match_dup 2) 0)))
                    601: 
                    602:    (set (subreg:SI (match_dup 0) 0)
                    603:        (minus:SI (subreg:SI (match_dup 0) 0)
                    604:                  (match_dup 3)))]
                    605:   "")
                    606: 
                    607: (define_insn "subdi3_internal_2"
                    608:   [(set (match_operand:DI 0 "register_operand" "=d,d,d")
                    609:        (minus:DI (match_operand:DI 1 "register_operand" "d,d,d")
                    610:                  (match_operand:DI 2 "small_int" "P,J,N")))
                    611:    (clobber (match_operand:SI 3 "register_operand" "=d,d,d"))]
                    612:   "!TARGET_DEBUG_G_MODE && INTVAL (operands[2]) != -32768"
                    613:   "@
                    614:    sltu\\t%3,%L1,%2\;subu\\t%L0,%L1,%2\;subu\\t%M0,%M1,%3
                    615:    move\\t%L0,%L1\;move\\t%M0,%M1
                    616:    sltu\\t%3,%L1,%2\;subu\\t%L0,%L1,%2\;subu\\t%M0,%M1,1\;subu\\t%M0,%M0,%3"
                    617:   [(set_attr "type"    "darith")
                    618:    (set_attr "mode"    "DI")
                    619:    (set_attr "length"  "3,2,4")])
                    620: 
                    621: (define_split
                    622:   [(set (match_operand:DI 0 "register_operand" "")
                    623:        (minus:DI (match_operand:DI 1 "register_operand" "")
                    624:                  (match_operand:DI 2 "small_int" "")))
                    625:    (clobber (match_operand:SI 3 "register_operand" ""))]
                    626:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    627:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    628:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    629:    && INTVAL (operands[2]) > 0"
                    630: 
                    631:   [(set (match_dup 3)
                    632:        (ltu:SI (subreg:SI (match_dup 1) 0)
                    633:                (match_dup 2)))
                    634: 
                    635:    (set (subreg:SI (match_dup 0) 0)
                    636:        (minus:SI (subreg:SI (match_dup 1) 0)
                    637:                  (match_dup 2)))
                    638: 
                    639:    (set (subreg:SI (match_dup 0) 1)
                    640:        (minus:SI (subreg:SI (match_dup 1) 1)
                    641:                  (match_dup 3)))]
                    642:   "")
                    643: 
                    644: (define_split
                    645:   [(set (match_operand:DI 0 "register_operand" "")
                    646:        (minus:DI (match_operand:DI 1 "register_operand" "")
                    647:                  (match_operand:DI 2 "small_int" "")))
                    648:    (clobber (match_operand:SI 3 "register_operand" ""))]
                    649:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                    650:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                    651:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                    652:    && INTVAL (operands[2]) > 0"
                    653: 
                    654:   [(set (match_dup 3)
                    655:        (ltu:SI (subreg:SI (match_dup 1) 1)
                    656:                (match_dup 2)))
                    657: 
                    658:    (set (subreg:SI (match_dup 0) 1)
                    659:        (minus:SI (subreg:SI (match_dup 1) 1)
                    660:                  (match_dup 2)))
                    661: 
                    662:    (set (subreg:SI (match_dup 0) 0)
                    663:        (minus:SI (subreg:SI (match_dup 1) 0)
                    664:                  (match_dup 3)))]
                    665:   "")
                    666: 
                    667: 
                    668: ;;
                    669: ;;  ....................
                    670: ;;
                    671: ;;     MULTIPLICATION
                    672: ;;
                    673: ;;  ....................
                    674: ;;
                    675: 
                    676: (define_insn "muldf3"
                    677:   [(set (match_operand:DF 0 "register_operand" "=f")
                    678:        (mult:DF (match_operand:DF 1 "register_operand" "f")
                    679:                 (match_operand:DF 2 "register_operand" "f")))]
                    680:   "TARGET_HARD_FLOAT"
                    681:   "mul.d\\t%0,%1,%2"
                    682:   [(set_attr "type"    "fmul")
                    683:    (set_attr "mode"    "DF")
                    684:    (set_attr "length"  "1")])
                    685: 
                    686: (define_insn "mulsf3"
                    687:   [(set (match_operand:SF 0 "register_operand" "=f")
                    688:        (mult:SF (match_operand:SF 1 "register_operand" "f")
                    689:                 (match_operand:SF 2 "register_operand" "f")))]
                    690:   "TARGET_HARD_FLOAT"
                    691:   "mul.s\\t%0,%1,%2"
                    692:   [(set_attr "type"    "fmul")
                    693:    (set_attr "mode"    "SF")
                    694:    (set_attr "length"  "1")])
                    695: 
                    696: (define_insn "mulsi3"
                    697:   [(set (match_operand:SI 0 "register_operand" "=d")
                    698:        (mult:SI (match_operand:SI 1 "register_operand" "d")
                    699:                 (match_operand:SI 2 "register_operand" "d")))
                    700:    (clobber (reg:SI 64))
                    701:    (clobber (reg:SI 65))]
                    702:   ""
                    703:   "*
                    704: {
                    705:   rtx xoperands[10];
                    706: 
                    707:   xoperands[0] = operands[0];
                    708:   xoperands[1] = gen_rtx (REG, SImode, LO_REGNUM);
                    709: 
                    710:   output_asm_insn (\"mult\\t%1,%2\", operands);
                    711:   output_asm_insn (mips_move_1word (xoperands, insn), xoperands);
                    712:   return \"\";
                    713: }"
                    714:   [(set_attr "type"    "imul")
                    715:    (set_attr "mode"    "SI")
                    716:    (set_attr "length"  "3")])          ;; mult + mflo + delay
                    717: 
                    718: (define_split
                    719:   [(set (match_operand:SI 0 "register_operand" "")
                    720:        (mult:SI (match_operand:SI 1 "register_operand" "")
                    721:                 (match_operand:SI 2 "register_operand" "")))
                    722:    (clobber (reg:SI 64))
                    723:    (clobber (reg:SI 65))]
                    724:   "!TARGET_DEBUG_D_MODE"
                    725:   [(parallel [(set (reg:SI 65)         ;; low register
                    726:                   (mult:SI (match_dup 1)
                    727:                            (match_dup 2)))
                    728:              (clobber (reg:SI 64))])
                    729:    (set (match_dup 0)
                    730:        (reg:SI 65))]
                    731:   "")
                    732: 
                    733: (define_insn "mulsi3_internal"
                    734:   [(set (reg:SI 65)            ;; low register
                    735:        (mult:SI (match_operand:SI 0 "register_operand" "d")
                    736:                 (match_operand:SI 1 "register_operand" "d")))
                    737:    (clobber (reg:SI 64))]
                    738:   ""
                    739:   "mult\\t%0,%1"
                    740:   [(set_attr "type"    "imul")
                    741:    (set_attr "mode"    "SI")
                    742:    (set_attr "length"  "1")])
                    743: 
                    744: (define_insn "mulsidi3"
                    745:   [(set (match_operand:DI 0 "register_operand" "=d")
                    746:        (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "d"))
                    747:                 (sign_extend:DI (match_operand:SI 2 "register_operand" "d"))))
                    748:    (clobber (reg:DI 64))]
                    749:   ""
                    750:   "*
                    751: {
                    752:   rtx xoperands[10];
                    753: 
                    754:   xoperands[0] = operands[0];
                    755:   xoperands[1] = gen_rtx (REG, DImode, MD_REG_FIRST);
                    756: 
                    757:   output_asm_insn (\"mult\\t%1,%2\", operands);
                    758:   output_asm_insn (mips_move_2words (xoperands, insn), xoperands);
                    759:   return \"\";
                    760: }"
                    761:   [(set_attr "type"    "imul")
                    762:    (set_attr "mode"    "SI")
                    763:    (set_attr "length"  "4")])          ;; mult + mflo + mfhi + delay
                    764: 
                    765: (define_insn "umulsidi3"
                    766:   [(set (match_operand:DI 0 "register_operand" "=d")
                    767:        (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "d"))
                    768:                 (zero_extend:DI (match_operand:SI 2 "register_operand" "d"))))
                    769:    (clobber (reg:DI 64))]
                    770:   ""
                    771:   "*
                    772: {
                    773:   rtx xoperands[10];
                    774: 
                    775:   xoperands[0] = operands[0];
                    776:   xoperands[1] = gen_rtx (REG, DImode, MD_REG_FIRST);
                    777: 
                    778:   output_asm_insn (\"multu\\t%1,%2\", operands);
                    779:   output_asm_insn (mips_move_2words (xoperands, insn), xoperands);
                    780:   return \"\";
                    781: }"
                    782:   [(set_attr "type"    "imul")
                    783:    (set_attr "mode"    "SI")
                    784:    (set_attr "length"  "4")])          ;; mult + mflo + mfhi + delay
                    785: 
                    786: 
                    787: ;;
                    788: ;;  ....................
                    789: ;;
                    790: ;;     DIVISION and REMAINDER
                    791: ;;
                    792: ;;  ....................
                    793: ;;
                    794: 
                    795: (define_insn "divdf3"
                    796:   [(set (match_operand:DF 0 "register_operand" "=f")
                    797:        (div:DF (match_operand:DF 1 "register_operand" "f")
                    798:                (match_operand:DF 2 "register_operand" "f")))]
                    799:   "TARGET_HARD_FLOAT"
                    800:   "div.d\\t%0,%1,%2"
                    801:   [(set_attr "type"    "fdiv")
                    802:    (set_attr "mode"    "DF")
                    803:    (set_attr "length"  "1")])
                    804: 
                    805: (define_insn "divsf3"
                    806:   [(set (match_operand:SF 0 "register_operand" "=f")
                    807:        (div:SF (match_operand:SF 1 "register_operand" "f")
                    808:                (match_operand:SF 2 "register_operand" "f")))]
                    809:   "TARGET_HARD_FLOAT"
                    810:   "div.s\\t%0,%1,%2"
                    811:   [(set_attr "type"    "fdiv")
                    812:    (set_attr "mode"    "SF")
                    813:    (set_attr "length"  "1")])
                    814: 
                    815: ;; If optimizing, prefer the divmod functions over separate div and
                    816: ;; mod functions, since this will allow using one instruction for both
                    817: ;; the quotient and remainder.  At present, the divmod is not moved out
                    818: ;; of loops if it is constant within the loop, so allow -mdebugc to
                    819: ;; use the old method of doing things.
                    820: 
                    821: ;; 64 is the multiply/divide hi register
                    822: ;; 65 is the multiply/divide lo register
                    823: 
                    824: (define_insn "divmodsi4"
                    825:   [(set (match_operand:SI 0 "register_operand" "=d")
                    826:        (div:SI (match_operand:SI 1 "register_operand" "d")
                    827:                (match_operand:SI 2 "register_operand" "d")))
                    828:    (set (match_operand:SI 3 "register_operand" "=d")
                    829:        (mod:SI (match_dup 1)
                    830:                (match_dup 2)))
                    831:    (clobber (reg:SI 64))
                    832:    (clobber (reg:SI 65))]
                    833:   "optimize"
                    834:   "*
                    835: {
                    836:   if (find_reg_note (insn, REG_UNUSED, operands[3]))
                    837:     return \"div\\t%0,%1,%2\";
                    838: 
                    839:   if (find_reg_note (insn, REG_UNUSED, operands[0]))
                    840:     return \"rem\\t%3,%1,%2\";
                    841: 
                    842:   return \"div\\t%0,%1,%2\;mfhi\\t%3\";
                    843: }"
                    844:   [(set_attr "type"    "idiv")
                    845:    (set_attr "mode"    "SI")
                    846:    (set_attr "length"  "13")])         ;; various tests for dividing by 0 and such
                    847: 
                    848: (define_insn "udivmodsi4"
                    849:   [(set (match_operand:SI 0 "register_operand" "=d")
                    850:        (udiv:SI (match_operand:SI 1 "register_operand" "d")
                    851:                 (match_operand:SI 2 "register_operand" "d")))
                    852:    (set (match_operand:SI 3 "register_operand" "=d")
                    853:        (umod:SI (match_dup 1)
                    854:                 (match_dup 2)))
                    855:    (clobber (reg:SI 64))
                    856:    (clobber (reg:SI 65))]
                    857:   "optimize"
                    858:   "*
                    859: {
                    860:   if (find_reg_note (insn, REG_UNUSED, operands[3]))
                    861:     return \"divu\\t%0,%1,%2\";
                    862: 
                    863:   if (find_reg_note (insn, REG_UNUSED, operands[0]))
                    864:     return \"remu\\t%3,%1,%2\";
                    865: 
                    866:   return \"divu\\t%0,%1,%2\;mfhi\\t%3\";
                    867: }"
                    868:   [(set_attr "type"    "idiv")
                    869:    (set_attr "mode"    "SI")
                    870:    (set_attr "length"  "13")])         ;; various tests for dividing by 0 and such
                    871: 
                    872: (define_insn "divsi3"
                    873:   [(set (match_operand:SI 0 "register_operand" "=d")
                    874:        (div:SI (match_operand:SI 1 "register_operand" "d")
                    875:                (match_operand:SI 2 "register_operand" "d")))
                    876:    (clobber (reg:SI 64))
                    877:    (clobber (reg:SI 65))]
                    878:   "!optimize"
                    879:   "div\\t%0,%1,%2"
                    880:   [(set_attr "type"    "idiv")
                    881:    (set_attr "mode"    "SI")
                    882:    (set_attr "length"  "13")])         ;; various tests for dividing by 0 and such
                    883: 
                    884: (define_insn "modsi3"
                    885:   [(set (match_operand:SI 0 "register_operand" "=d")
                    886:        (mod:SI (match_operand:SI 1 "register_operand" "d")
                    887:                (match_operand:SI 2 "register_operand" "d")))
                    888:    (clobber (reg:SI 64))
                    889:    (clobber (reg:SI 65))]
                    890:   "!optimize"
                    891:   "rem\\t%0,%1,%2"
                    892:   [(set_attr "type"    "idiv")
                    893:    (set_attr "mode"    "SI")
                    894:    (set_attr "length"  "14")])         ;; various tests for dividing by 0 and such
                    895: 
                    896: (define_insn "udivsi3"
                    897:   [(set (match_operand:SI 0 "register_operand" "=d")
                    898:        (udiv:SI (match_operand:SI 1 "register_operand" "d")
                    899:                 (match_operand:SI 2 "register_operand" "d")))
                    900:    (clobber (reg:SI 64))
                    901:    (clobber (reg:SI 65))]
                    902:   "!optimize"
                    903:   "divu\\t%0,%1,%2"
                    904:   [(set_attr "type"    "idiv")
                    905:    (set_attr "mode"    "SI")
                    906:    (set_attr "length"  "14")])         ;; various tests for dividing by 0 and such
                    907: 
                    908: (define_insn "umodsi3"
                    909:   [(set (match_operand:SI 0 "register_operand" "=d")
                    910:        (umod:SI (match_operand:SI 1 "register_operand" "d")
                    911:                 (match_operand:SI 2 "register_operand" "d")))
                    912:    (clobber (reg:SI 64))
                    913:    (clobber (reg:SI 65))]
                    914:   "!optimize"
                    915:   "remu\\t%0,%1,%2"
                    916:   [(set_attr "type"    "idiv")
                    917:    (set_attr "mode"    "SI")
                    918:    (set_attr "length"  "14")])         ;; various tests for dividing by 0 and such
                    919: 
                    920: 
                    921: ;;
                    922: ;;  ....................
                    923: ;;
                    924: ;;     SQUARE ROOT
                    925: ;;
                    926: ;;  ....................
                    927: 
                    928: (define_insn "sqrtdf2"
                    929:   [(set (match_operand:DF 0 "register_operand" "=f")
                    930:        (sqrt:DF (match_operand:DF 1 "register_operand" "f")))]
                    931:   "TARGET_HARD_FLOAT && HAVE_SQRT_P()"
                    932:   "sqrt.d\\t%0,%1"
                    933:   [(set_attr "type"    "fabs")
                    934:    (set_attr "mode"    "DF")
                    935:    (set_attr "length"  "1")])
                    936: 
                    937: (define_insn "sqrtsf2"
                    938:   [(set (match_operand:SF 0 "register_operand" "=f")
                    939:        (sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
                    940:   "TARGET_HARD_FLOAT && HAVE_SQRT_P()"
                    941:   "sqrt.s\\t%0,%1"
                    942:   [(set_attr "type"    "fabs")
                    943:    (set_attr "mode"    "SF")
                    944:    (set_attr "length"  "1")])
                    945: 
                    946: 
                    947: ;;
                    948: ;;  ....................
                    949: ;;
                    950: ;;     ABSOLUTE VALUE
                    951: ;;
                    952: ;;  ....................
                    953: 
                    954: ;; Do not use the integer abs macro instruction, since that signals an
                    955: ;; exception on -2147483648 (sigh).
                    956: 
                    957: (define_insn "abssi2"
                    958:   [(set (match_operand:SI 0 "register_operand" "=d")
                    959:        (abs:SI (match_operand:SI 1 "register_operand" "d")))]
                    960:   ""
                    961:   "*
                    962: {
                    963:   dslots_jump_total++;
                    964:   dslots_jump_filled++;
                    965:   operands[2] = const0_rtx;
                    966: 
                    967:   return (REGNO (operands[0]) == REGNO (operands[1]))
                    968:                ? \"bgez\\t%1,1f%#\\n\\tsubu\\t%0,%z2,%0\\n1:\"
                    969:                : \"%(bgez\\t%1,1f\\n\\tmove\\t%0,%1\\n\\tsubu\\t%0,%z2,%0\\n1:%)\";
                    970: }"
                    971:   [(set_attr "type"    "multi")
                    972:    (set_attr "mode"    "SI")
                    973:    (set_attr "length"  "3")])
                    974: 
                    975: (define_insn "absdf2"
                    976:   [(set (match_operand:DF 0 "register_operand" "=f")
                    977:        (abs:DF (match_operand:DF 1 "register_operand" "f")))]
                    978:   "TARGET_HARD_FLOAT"
                    979:   "abs.d\\t%0,%1"
                    980:   [(set_attr "type"    "fabs")
                    981:    (set_attr "mode"    "DF")
                    982:    (set_attr "length"  "1")])
                    983: 
                    984: (define_insn "abssf2"
                    985:   [(set (match_operand:SF 0 "register_operand" "=f")
                    986:        (abs:SF (match_operand:SF 1 "register_operand" "f")))]
                    987:   "TARGET_HARD_FLOAT"
                    988:   "abs.s\\t%0,%1"
                    989:   [(set_attr "type"    "fabs")
                    990:    (set_attr "mode"    "SF")
                    991:    (set_attr "length"  "1")])
                    992: 
                    993: 
                    994: ;;
                    995: ;;  ....................
                    996: ;;
                    997: ;;     FIND FIRST BIT INSTRUCTION
                    998: ;;
                    999: ;;  ....................
                   1000: ;;
                   1001: 
                   1002: (define_insn "ffssi2"
                   1003:   [(set (match_operand:SI 0 "register_operand" "=&d")
                   1004:        (ffs:SI (match_operand:SI 1 "register_operand" "d")))
                   1005:    (clobber (match_scratch:SI 2 "=&d"))
                   1006:    (clobber (match_scratch:SI 3 "=&d"))]
                   1007:   ""
                   1008:   "*
                   1009: {
                   1010:   dslots_jump_total += 2;
                   1011:   dslots_jump_filled += 2;
                   1012:   operands[4] = const0_rtx;
                   1013: 
                   1014:   if (optimize && find_reg_note (insn, REG_DEAD, operands[1]))
                   1015:     return \"%(\\
                   1016: move\\t%0,%z4\\n\\
                   1017: \\tbeq\\t%1,%z4,2f\\n\\
                   1018: 1:\\tand\\t%2,%1,0x0001\\n\\
                   1019: \\taddu\\t%0,%0,1\\n\\
                   1020: \\tbeq\\t%2,%z4,1b\\n\\
                   1021: \\tsrl\\t%1,%1,1\\n\\
                   1022: 2:%)\";
                   1023: 
                   1024:   return \"%(\\
                   1025: move\\t%0,%z4\\n\\
                   1026: \\tmove\\t%3,%1\\n\\
                   1027: \\tbeq\\t%3,%z4,2f\\n\\
                   1028: 1:\\tand\\t%2,%3,0x0001\\n\\
                   1029: \\taddu\\t%0,%0,1\\n\\
                   1030: \\tbeq\\t%2,%z4,1b\\n\\
                   1031: \\tsrl\\t%3,%3,1\\n\\
                   1032: 2:%)\";
                   1033: }"
                   1034:   [(set_attr "type"    "multi")
                   1035:    (set_attr "mode"    "SI")
                   1036:    (set_attr "length"  "6")])
                   1037: 
                   1038: 
                   1039: ;;
                   1040: ;;  ....................
                   1041: ;;
                   1042: ;;     NEGATION and ONE'S COMPLEMENT
                   1043: ;;
                   1044: ;;  ....................
                   1045: 
                   1046: (define_insn "negsi2"
                   1047:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1048:        (neg:SI (match_operand:SI 1 "register_operand" "d")))]
                   1049:   ""
                   1050:   "*
                   1051: {
                   1052:   operands[2] = const0_rtx;
                   1053:   return \"subu\\t%0,%z2,%1\";
                   1054: }"
                   1055:   [(set_attr "type"    "arith")
                   1056:    (set_attr "mode"    "SI")
                   1057:    (set_attr "length"  "1")])
                   1058: 
                   1059: (define_expand "negdi2"
                   1060:   [(parallel [(set (match_operand:DI 0 "register_operand" "=d")
                   1061:                   (neg:DI (match_operand:DI 1 "register_operand" "d")))
                   1062:              (clobber (match_dup 2))])]
                   1063:   "!TARGET_DEBUG_G_MODE"
                   1064:   "operands[2] = gen_reg_rtx (SImode);")
                   1065: 
                   1066: (define_insn "negdi2_internal"
                   1067:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1068:        (neg:DI (match_operand:DI 1 "register_operand" "d")))
                   1069:    (clobber (match_operand:SI 2 "register_operand" "=d"))]
                   1070:   "!TARGET_DEBUG_G_MODE"
                   1071:   "*
                   1072: {
                   1073:   operands[3] = const0_rtx;
                   1074:   return \"subu\\t%L0,%z3,%L1\;subu\\t%M0,%z3,%M1\;sltu\\t%2,%z3,%L0\;subu\\t%M0,%M0,%2\";
                   1075: }"
                   1076:   [(set_attr "type"    "darith")
                   1077:    (set_attr "mode"    "DI")
                   1078:    (set_attr "length"  "4")])
                   1079: 
                   1080: (define_insn "negdf2"
                   1081:   [(set (match_operand:DF 0 "register_operand" "=f")
                   1082:        (neg:DF (match_operand:DF 1 "register_operand" "f")))]
                   1083:   "TARGET_HARD_FLOAT"
                   1084:   "neg.d\\t%0,%1"
                   1085:   [(set_attr "type"    "fneg")
                   1086:    (set_attr "mode"    "DF")
                   1087:    (set_attr "length"  "1")])
                   1088: 
                   1089: (define_insn "negsf2"
                   1090:   [(set (match_operand:SF 0 "register_operand" "=f")
                   1091:        (neg:SF (match_operand:SF 1 "register_operand" "f")))]
                   1092:   "TARGET_HARD_FLOAT"
                   1093:   "neg.s\\t%0,%1"
                   1094:   [(set_attr "type"    "fneg")
                   1095:    (set_attr "mode"    "SF")
                   1096:    (set_attr "length"  "1")])
                   1097: 
                   1098: (define_insn "one_cmplsi2"
                   1099:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1100:        (not:SI (match_operand:SI 1 "register_operand" "d")))]
                   1101:   ""
                   1102:   "*
                   1103: {
                   1104:   operands[2] = const0_rtx;
                   1105:   return \"nor\\t%0,%z2,%1\";
                   1106: }"
                   1107:   [(set_attr "type"    "arith")
                   1108:    (set_attr "mode"    "SI")
                   1109:    (set_attr "length"  "1")])
                   1110: 
                   1111: (define_insn "one_cmpldi2"
                   1112:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1113:        (not:SI (match_operand:DI 1 "register_operand" "d")))]
                   1114:   ""
                   1115:   "*
                   1116: {
                   1117:   operands[2] = const0_rtx;
                   1118:   return \"nor\\t%M0,%z2,%M1\;nor\\t%L0,%z2,%L1\";
                   1119: }"
                   1120:   [(set_attr "type"    "darith")
                   1121:    (set_attr "mode"    "DI")
                   1122:    (set_attr "length"  "2")])
                   1123: 
                   1124: (define_split
                   1125:   [(set (match_operand:DI 0 "register_operand" "")
                   1126:        (not:DI (match_operand:DI 1 "register_operand" "")))]
                   1127:   "reload_completed && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   1128:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                   1129:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))"
                   1130: 
                   1131:   [(set (subreg:SI (match_dup 0) 0) (not:SI (subreg:SI (match_dup 1) 0)))
                   1132:    (set (subreg:SI (match_dup 0) 1) (not:SI (subreg:SI (match_dup 1) 1)))]
                   1133:   "")
                   1134: 
                   1135: ;; Simple hack to recognize the "nor" instruction on the MIPS
                   1136: ;; This must appear before the normal or patterns, so that the
                   1137: ;; combiner will correctly fold things.
                   1138: 
                   1139: (define_insn "norsi3"
                   1140:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1141:        (not:SI (ior:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")
                   1142:                        (match_operand:SI 2 "reg_or_0_operand" "dJ"))))]
                   1143:   ""
                   1144:   "nor\\t%0,%z1,%z2"
                   1145:   [(set_attr "type"    "arith")
                   1146:    (set_attr "mode"    "SI")
                   1147:    (set_attr "length"  "1")])
                   1148: 
                   1149: (define_insn "nordi3"
                   1150:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1151:        (not:DI (ior:DI (match_operand:DI 1 "register_operand" "d")
                   1152:                        (match_operand:DI 2 "register_operand" "d"))))]
                   1153:   ""
                   1154:   "nor\\t%M0,%M1,%M2\;nor\\t%L0,%L1,%L2"
                   1155:   [(set_attr "type"    "darith")
                   1156:    (set_attr "mode"    "DI")
                   1157:    (set_attr "length"  "2")])
                   1158: 
                   1159: (define_split
                   1160:   [(set (match_operand:DI 0 "register_operand" "")
                   1161:        (not:DI (ior:DI (match_operand:DI 1 "register_operand" "")
                   1162:                        (match_operand:DI 2 "register_operand" ""))))]
                   1163:   "reload_completed && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   1164:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                   1165:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                   1166:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
                   1167: 
                   1168:   [(set (subreg:SI (match_dup 0) 0) (not:SI (ior:SI (subreg:SI (match_dup 1) 0) (subreg:SI (match_dup 2) 0))))
                   1169:    (set (subreg:SI (match_dup 0) 1) (not:SI (ior:SI (subreg:SI (match_dup 1) 1) (subreg:SI (match_dup 2) 1))))]
                   1170:   "")
                   1171: 
                   1172: 
                   1173: ;;
                   1174: ;;  ....................
                   1175: ;;
                   1176: ;;     LOGICAL
                   1177: ;;
                   1178: ;;  ....................
                   1179: ;;
                   1180: 
                   1181: (define_insn "andsi3"
                   1182:   [(set (match_operand:SI 0 "register_operand" "=d,d")
                   1183:        (and:SI (match_operand:SI 1 "uns_arith_operand" "%d,d")
                   1184:                (match_operand:SI 2 "uns_arith_operand" "d,K")))]
                   1185:   ""
                   1186:   "@
                   1187:    and\\t%0,%1,%2
                   1188:    andi\\t%0,%1,%x2"
                   1189:   [(set_attr "type"    "arith")
                   1190:    (set_attr "mode"    "SI")
                   1191:    (set_attr "length"  "1")])
                   1192: 
                   1193: (define_insn "anddi3"
                   1194:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1195:        (and:DI (match_operand:DI 1 "register_operand" "d")
                   1196:                (match_operand:DI 2 "register_operand" "d")))]
                   1197:   "!TARGET_DEBUG_G_MODE"
                   1198:   "and\\t%M0,%M1,%M2\;and\\t%L0,%L1,%L2"
                   1199:   [(set_attr "type"    "darith")
                   1200:    (set_attr "mode"    "DI")
                   1201:    (set_attr "length"  "2")])
                   1202: 
                   1203: (define_split
                   1204:   [(set (match_operand:DI 0 "register_operand" "")
                   1205:        (and:DI (match_operand:DI 1 "register_operand" "")
                   1206:                (match_operand:DI 2 "register_operand" "")))]
                   1207:   "reload_completed && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   1208:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                   1209:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                   1210:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
                   1211: 
                   1212:   [(set (subreg:SI (match_dup 0) 0) (and:SI (subreg:SI (match_dup 1) 0) (subreg:SI (match_dup 2) 0)))
                   1213:    (set (subreg:SI (match_dup 0) 1) (and:SI (subreg:SI (match_dup 1) 1) (subreg:SI (match_dup 2) 1)))]
                   1214:   "")
                   1215: 
                   1216: (define_insn "iorsi3"
                   1217:   [(set (match_operand:SI 0 "register_operand" "=d,d")
                   1218:        (ior:SI (match_operand:SI 1 "uns_arith_operand" "%d,d")
                   1219:                (match_operand:SI 2 "uns_arith_operand" "d,K")))]
                   1220:   ""
                   1221:   "@
                   1222:    or\\t%0,%1,%2
                   1223:    ori\\t%0,%1,%x2"
                   1224:   [(set_attr "type"    "arith")
                   1225:    (set_attr "mode"    "SI")
                   1226:    (set_attr "length"  "1")])
                   1227: 
                   1228: (define_insn "iordi3"
                   1229:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1230:        (ior:DI (match_operand:DI 1 "register_operand" "d")
                   1231:                (match_operand:DI 2 "register_operand" "d")))]
                   1232:   "!TARGET_DEBUG_G_MODE"
                   1233:   "or\\t%M0,%M1,%M2\;or\\t%L0,%L1,%L2"
                   1234:   [(set_attr "type"    "darith")
                   1235:    (set_attr "mode"    "DI")
                   1236:    (set_attr "length"  "2")])
                   1237: 
                   1238: (define_split
                   1239:   [(set (match_operand:DI 0 "register_operand" "")
                   1240:        (ior:DI (match_operand:DI 1 "register_operand" "")
                   1241:                (match_operand:DI 2 "register_operand" "")))]
                   1242:   "reload_completed && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   1243:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                   1244:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                   1245:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
                   1246: 
                   1247:   [(set (subreg:SI (match_dup 0) 0) (ior:SI (subreg:SI (match_dup 1) 0) (subreg:SI (match_dup 2) 0)))
                   1248:    (set (subreg:SI (match_dup 0) 1) (ior:SI (subreg:SI (match_dup 1) 1) (subreg:SI (match_dup 2) 1)))]
                   1249:   "")
                   1250: 
                   1251: (define_insn "xorsi3"
                   1252:   [(set (match_operand:SI 0 "register_operand" "=d,d")
                   1253:        (xor:SI (match_operand:SI 1 "uns_arith_operand" "%d,d")
                   1254:                (match_operand:SI 2 "uns_arith_operand" "d,K")))]
                   1255:   ""
                   1256:   "@
                   1257:    xor\\t%0,%1,%2
                   1258:    xori\\t%0,%1,%x2"
                   1259:   [(set_attr "type"    "arith")
                   1260:    (set_attr "mode"    "SI")
                   1261:    (set_attr "length"  "1")])
                   1262: 
                   1263: (define_insn "xordi3"
                   1264:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1265:        (xor:DI (match_operand:DI 1 "register_operand" "d")
                   1266:                (match_operand:DI 2 "register_operand" "d")))]
                   1267:   "!TARGET_DEBUG_G_MODE"
                   1268:   "xor\\t%M0,%M1,%M2\;xor\\t%L0,%L1,%L2"
                   1269:   [(set_attr "type"    "darith")
                   1270:    (set_attr "mode"    "DI")
                   1271:    (set_attr "length"  "2")])
                   1272: 
                   1273: (define_split
                   1274:   [(set (match_operand:DI 0 "register_operand" "")
                   1275:        (xor:DI (match_operand:DI 1 "register_operand" "")
                   1276:                (match_operand:DI 2 "register_operand" "")))]
                   1277:   "reload_completed && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   1278:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                   1279:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))
                   1280:    && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
                   1281: 
                   1282:   [(set (subreg:SI (match_dup 0) 0) (xor:SI (subreg:SI (match_dup 1) 0) (subreg:SI (match_dup 2) 0)))
                   1283:    (set (subreg:SI (match_dup 0) 1) (xor:SI (subreg:SI (match_dup 1) 1) (subreg:SI (match_dup 2) 1)))]
                   1284:   "")
                   1285: 
                   1286: 
                   1287: ;;
                   1288: ;;  ....................
                   1289: ;;
                   1290: ;;     TRUNCATION
                   1291: ;;
                   1292: ;;  ....................
                   1293: 
                   1294: (define_insn "truncdfsf2"
                   1295:   [(set (match_operand:SF 0 "register_operand" "=f")
                   1296:        (float_truncate:SF (match_operand:DF 1 "register_operand" "f")))]
                   1297:   "TARGET_HARD_FLOAT"
                   1298:   "cvt.s.d\\t%0,%1"
                   1299:   [(set_attr "type"    "fcvt")
                   1300:    (set_attr "mode"    "SF")
                   1301:    (set_attr "length"  "1")])
                   1302: 
                   1303: 
                   1304: ;;
                   1305: ;;  ....................
                   1306: ;;
                   1307: ;;     ZERO EXTENSION
                   1308: ;;
                   1309: ;;  ....................
                   1310: 
                   1311: ;; Extension insns.
                   1312: ;; Those for integer source operand
                   1313: ;; are ordered widest source type first.
                   1314: 
                   1315: (define_insn "zero_extendhisi2"
                   1316:   [(set (match_operand:SI 0 "register_operand" "=d,d,d")
                   1317:        (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "d,R,m")))]
                   1318:   ""
                   1319:   "*
                   1320: {
                   1321:   if (which_alternative == 0)
                   1322:     return \"andi\\t%0,%1,0xffff\";
                   1323:   else
                   1324:     return mips_move_1word (operands, insn, TRUE);
                   1325: }"
                   1326:   [(set_attr "type"    "arith,load,load")
                   1327:    (set_attr "mode"    "SI")
                   1328:    (set_attr "length"  "1,1,2")])
                   1329: 
                   1330: (define_insn "zero_extendqihi2"
                   1331:   [(set (match_operand:HI 0 "register_operand" "=d,d,d")
                   1332:        (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "d,R,m")))]
                   1333:   ""
                   1334:   "*
                   1335: {
                   1336:   if (which_alternative == 0)
                   1337:     return \"andi\\t%0,%1,0x00ff\";
                   1338:   else
                   1339:     return mips_move_1word (operands, insn, TRUE);
                   1340: }"
                   1341:   [(set_attr "type"    "arith,load,load")
                   1342:    (set_attr "mode"    "HI")
                   1343:    (set_attr "length"  "1,1,2")])
                   1344: 
                   1345: (define_insn "zero_extendqisi2"
                   1346:   [(set (match_operand:SI 0 "register_operand" "=d,d,d")
                   1347:        (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "d,R,m")))]
                   1348:   ""
                   1349:   "*
                   1350: {
                   1351:   if (which_alternative == 0)
                   1352:     return \"andi\\t%0,%1,0x00ff\";
                   1353:   else
                   1354:     return mips_move_1word (operands, insn, TRUE);
                   1355: }"
                   1356:   [(set_attr "type"    "arith,load,load")
                   1357:    (set_attr "mode"    "SI")
                   1358:    (set_attr "length"  "1,1,2")])
                   1359: 
                   1360: 
                   1361: ;;
                   1362: ;;  ....................
                   1363: ;;
                   1364: ;;     SIGN EXTENSION
                   1365: ;;
                   1366: ;;  ....................
                   1367: 
                   1368: ;; Extension insns.
                   1369: ;; Those for integer source operand
                   1370: ;; are ordered widest source type first.
                   1371: 
                   1372: ;; These patterns originally accepted general_operands, however, slightly
                   1373: ;; better code is generated by only accepting register_operands, and then
                   1374: ;; letting combine generate the lh and lb insns.
                   1375: 
                   1376: (define_expand "extendhisi2"
                   1377:   [(set (match_operand:SI 0 "register_operand" "")
                   1378:        (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))]
                   1379:   ""
                   1380:   "
                   1381: {
                   1382:   if (optimize && GET_CODE (operands[1]) == MEM)
                   1383:     operands[1] = force_not_mem (operands[1]);
                   1384: 
                   1385:   if (GET_CODE (operands[1]) != MEM)
                   1386:     {
                   1387:       rtx op1   = gen_lowpart (SImode, operands[1]);
                   1388:       rtx temp  = gen_reg_rtx (SImode);
                   1389:       rtx shift = gen_rtx (CONST_INT, VOIDmode, 16);
                   1390: 
                   1391:       emit_insn (gen_ashlsi3 (temp, op1, shift));
                   1392:       emit_insn (gen_ashrsi3 (operands[0], temp, shift));
                   1393:       DONE;
                   1394:     }
                   1395: }")
                   1396: 
                   1397: (define_insn "extendhisi2_internal"
                   1398:   [(set (match_operand:SI 0 "register_operand" "=d,d")
                   1399:        (sign_extend:SI (match_operand:HI 1 "memory_operand" "R,m")))]
                   1400:   ""
                   1401:   "* return mips_move_1word (operands, insn, FALSE);"
                   1402:   [(set_attr "type"    "load")
                   1403:    (set_attr "mode"    "SI")
                   1404:    (set_attr "length"  "1,2")])
                   1405: 
                   1406: (define_expand "extendqihi2"
                   1407:   [(set (match_operand:HI 0 "register_operand" "")
                   1408:        (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]
                   1409:   ""
                   1410:   "
                   1411: {
                   1412:   if (optimize && GET_CODE (operands[1]) == MEM)
                   1413:     operands[1] = force_not_mem (operands[1]);
                   1414: 
                   1415:   if (GET_CODE (operands[1]) != MEM)
                   1416:     {
                   1417:       rtx op0   = gen_lowpart (SImode, operands[0]);
                   1418:       rtx op1   = gen_lowpart (SImode, operands[1]);
                   1419:       rtx temp  = gen_reg_rtx (SImode);
                   1420:       rtx shift = gen_rtx (CONST_INT, VOIDmode, 24);
                   1421: 
                   1422:       emit_insn (gen_ashlsi3 (temp, op1, shift));
                   1423:       emit_insn (gen_ashrsi3 (op0, temp, shift));
                   1424:       DONE;
                   1425:     }
                   1426: }")
                   1427: 
                   1428: (define_insn "extendqihi2_internal"
                   1429:   [(set (match_operand:HI 0 "register_operand" "=d,d")
                   1430:        (sign_extend:HI (match_operand:QI 1 "memory_operand" "R,m")))]
                   1431:   ""
                   1432:   "* return mips_move_1word (operands, insn, FALSE);"
                   1433:   [(set_attr "type"    "load")
                   1434:    (set_attr "mode"    "SI")
                   1435:    (set_attr "length"  "1,2")])
                   1436: 
                   1437: 
                   1438: (define_expand "extendqisi2"
                   1439:   [(set (match_operand:SI 0 "register_operand" "")
                   1440:        (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
                   1441:   ""
                   1442:   "
                   1443: {
                   1444:   if (optimize && GET_CODE (operands[1]) == MEM)
                   1445:     operands[1] = force_not_mem (operands[1]);
                   1446: 
                   1447:   if (GET_CODE (operands[1]) != MEM)
                   1448:     {
                   1449:       rtx op1   = gen_lowpart (SImode, operands[1]);
                   1450:       rtx temp  = gen_reg_rtx (SImode);
                   1451:       rtx shift = gen_rtx (CONST_INT, VOIDmode, 24);
                   1452: 
                   1453:       emit_insn (gen_ashlsi3 (temp, op1, shift));
                   1454:       emit_insn (gen_ashrsi3 (operands[0], temp, shift));
                   1455:       DONE;
                   1456:     }
                   1457: }")
                   1458: 
                   1459: (define_insn "extendqisi2_insn"
                   1460:   [(set (match_operand:SI 0 "register_operand" "=d,d")
                   1461:        (sign_extend:SI (match_operand:QI 1 "memory_operand" "R,m")))]
                   1462:   ""
                   1463:   "* return mips_move_1word (operands, insn, FALSE);"
                   1464:   [(set_attr "type"    "load")
                   1465:    (set_attr "mode"    "SI")
                   1466:    (set_attr "length"  "1,2")])
                   1467: 
                   1468: 
                   1469: (define_insn "extendsfdf2"
                   1470:   [(set (match_operand:DF 0 "register_operand" "=f")
                   1471:        (float_extend:DF (match_operand:SF 1 "register_operand" "f")))]
                   1472:   "TARGET_HARD_FLOAT"
                   1473:   "cvt.d.s\\t%0,%1"
                   1474:   [(set_attr "type"    "fcvt")
                   1475:    (set_attr "mode"    "DF")
                   1476:    (set_attr "length"  "1")])
                   1477: 
                   1478: 
                   1479: 
                   1480: ;;
                   1481: ;;  ....................
                   1482: ;;
                   1483: ;;     CONVERSIONS
                   1484: ;;
                   1485: ;;  ....................
                   1486: 
                   1487: ;; The SImode scratch register can not be shared with address regs used for
                   1488: ;; operand zero, because then the address in the move instruction will be
                   1489: ;; clobbered.  We mark the scratch register as early clobbered to prevent this.
                   1490: 
                   1491: (define_insn "fix_truncdfsi2"
                   1492:   [(set (match_operand:SI 0 "general_operand" "=d,*f,R,o")
                   1493:        (fix:SI (match_operand:DF 1 "register_operand" "f,*f,f,f")))
                   1494:    (clobber (match_scratch:SI 2 "=d,*d,&d,&d"))
                   1495:    (clobber (match_scratch:DF 3 "=f,*X,f,f"))]
                   1496:   "TARGET_HARD_FLOAT"
                   1497:   "*
                   1498: {
                   1499:   rtx xoperands[10];
                   1500: 
                   1501:   if (which_alternative == 1)
                   1502:     return \"trunc.w.d %0,%1,%2\";
                   1503: 
                   1504:   output_asm_insn (\"trunc.w.d %3,%1,%2\", operands);
                   1505: 
                   1506:   xoperands[0] = operands[0];
                   1507:   xoperands[1] = operands[3];
                   1508:   output_asm_insn (mips_move_1word (xoperands, insn, FALSE), xoperands);
                   1509:   return \"\";
                   1510: }"
                   1511:   [(set_attr "type"    "fcvt")
                   1512:    (set_attr "mode"    "DF")
                   1513:    (set_attr "length"  "11,9,10,11")])
                   1514: 
                   1515: 
                   1516: (define_insn "fix_truncsfsi2"
                   1517:   [(set (match_operand:SI 0 "general_operand" "=d,*f,R,o")
                   1518:        (fix:SI (match_operand:SF 1 "register_operand" "f,*f,f,f")))
                   1519:    (clobber (match_scratch:SI 2 "=d,*d,&d,&d"))
                   1520:    (clobber (match_scratch:SF 3 "=f,*X,f,f"))]
                   1521:   "TARGET_HARD_FLOAT"
                   1522:   "*
                   1523: {
                   1524:   rtx xoperands[10];
                   1525: 
                   1526:   if (which_alternative == 1)
                   1527:     return \"trunc.w.s %0,%1,%2\";
                   1528: 
                   1529:   output_asm_insn (\"trunc.w.s %3,%1,%2\", operands);
                   1530: 
                   1531:   xoperands[0] = operands[0];
                   1532:   xoperands[1] = operands[3];
                   1533:   output_asm_insn (mips_move_1word (xoperands, insn, FALSE), xoperands);
                   1534:   return \"\";
                   1535: }"
                   1536:   [(set_attr "type"    "fcvt")
                   1537:    (set_attr "mode"    "SF")
                   1538:    (set_attr "length"  "11,9,10,11")])
                   1539: 
                   1540: 
                   1541: (define_insn "floatsidf2"
                   1542:   [(set (match_operand:DF 0 "register_operand" "=f,f,f")
                   1543:        (float:DF (match_operand:SI 1 "nonimmediate_operand" "d,R,m")))]
                   1544:   "TARGET_HARD_FLOAT"
                   1545:   "*
                   1546: {
                   1547:   dslots_load_total++;
                   1548:   if (GET_CODE (operands[1]) == MEM)
                   1549:     return \"l.s\\t%0,%1%#\;cvt.d.w\\t%0,%0\";
                   1550: 
                   1551:   return \"mtc1\\t%1,%0%#\;cvt.d.w\\t%0,%0\";
                   1552: }"
                   1553:   [(set_attr "type"    "fcvt")
                   1554:    (set_attr "mode"    "DF")
                   1555:    (set_attr "length"  "3,4,3")])
                   1556: 
                   1557: 
                   1558: (define_insn "floatsisf2"
                   1559:   [(set (match_operand:SF 0 "register_operand" "=f,f,f")
                   1560:        (float:SF (match_operand:SI 1 "nonimmediate_operand" "d,R,m")))]
                   1561:   "TARGET_HARD_FLOAT"
                   1562:   "*
                   1563: {
                   1564:   dslots_load_total++;
                   1565:   if (GET_CODE (operands[1]) == MEM)
                   1566:     return \"l.s\\t%0,%1%#\;cvt.s.w\\t%0,%0\";
                   1567: 
                   1568:   return \"mtc1\\t%1,%0%#\;cvt.s.w\\t%0,%0\";
                   1569: }"
                   1570:   [(set_attr "type"    "fcvt")
                   1571:    (set_attr "mode"    "SF")
                   1572:    (set_attr "length"  "3,4,3")])
                   1573: 
                   1574: 
                   1575: (define_expand "fixuns_truncdfsi2"
                   1576:   [(set (match_operand:SI 0 "register_operand" "")
                   1577:        (unsigned_fix:SI (match_operand:DF 1 "register_operand" "")))]
                   1578:   "TARGET_HARD_FLOAT"
                   1579:   "
                   1580: {
                   1581:   rtx reg1 = gen_reg_rtx (DFmode);
                   1582:   rtx reg2 = gen_reg_rtx (DFmode);
                   1583:   rtx reg3 = gen_reg_rtx (SImode);
                   1584:   rtx label1 = gen_label_rtx ();
                   1585:   rtx label2 = gen_label_rtx ();
                   1586:   REAL_VALUE_TYPE offset = REAL_VALUE_LDEXP (1.0, 31);
                   1587: 
                   1588:   if (reg1)                    /* turn off complaints about unreached code */
                   1589:     {
                   1590:       emit_move_insn (reg1, immed_real_const_1 (offset, DFmode));
                   1591:       do_pending_stack_adjust ();
                   1592: 
                   1593:       emit_insn (gen_cmpdf (operands[1], reg1));
                   1594:       emit_jump_insn (gen_bge (label1));
                   1595: 
                   1596:       emit_insn (gen_fix_truncdfsi2 (operands[0], operands[1]));
                   1597:       emit_jump_insn (gen_rtx (SET, VOIDmode, pc_rtx,
                   1598:                               gen_rtx (LABEL_REF, VOIDmode, label2)));
                   1599:       emit_barrier ();
                   1600: 
                   1601:       emit_label (label1);
                   1602:       emit_move_insn (reg2, gen_rtx (MINUS, DFmode, operands[1], reg1));
                   1603:       emit_move_insn (reg3, gen_rtx (CONST_INT, VOIDmode, 0x80000000));
                   1604: 
                   1605:       emit_insn (gen_fix_truncdfsi2 (operands[0], reg2));
                   1606:       emit_insn (gen_iorsi3 (operands[0], operands[0], reg3));
                   1607: 
                   1608:       emit_label (label2);
                   1609: 
                   1610:       /* allow REG_NOTES to be set on last insn (labels don't have enough
                   1611:         fields, and can't be used for REG_NOTES anyway).  */
                   1612:       emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
                   1613:       DONE;
                   1614:     }
                   1615: }")
                   1616: 
                   1617: 
                   1618: (define_expand "fixuns_truncsfsi2"
                   1619:   [(set (match_operand:SI 0 "register_operand" "")
                   1620:        (unsigned_fix:SI (match_operand:SF 1 "register_operand" "")))]
                   1621:   "TARGET_HARD_FLOAT"
                   1622:   "
                   1623: {
                   1624:   rtx reg1 = gen_reg_rtx (SFmode);
                   1625:   rtx reg2 = gen_reg_rtx (SFmode);
                   1626:   rtx reg3 = gen_reg_rtx (SImode);
                   1627:   rtx label1 = gen_label_rtx ();
                   1628:   rtx label2 = gen_label_rtx ();
                   1629:   REAL_VALUE_TYPE offset = REAL_VALUE_LDEXP (1.0, 31);
                   1630: 
                   1631:   if (reg1)                    /* turn off complaints about unreached code */
                   1632:     {
                   1633:       emit_move_insn (reg1, immed_real_const_1 (offset, SFmode));
                   1634:       do_pending_stack_adjust ();
                   1635: 
                   1636:       emit_insn (gen_cmpsf (operands[1], reg1));
                   1637:       emit_jump_insn (gen_bge (label1));
                   1638: 
                   1639:       emit_insn (gen_fix_truncsfsi2 (operands[0], operands[1]));
                   1640:       emit_jump_insn (gen_rtx (SET, VOIDmode, pc_rtx,
                   1641:                               gen_rtx (LABEL_REF, VOIDmode, label2)));
                   1642:       emit_barrier ();
                   1643: 
                   1644:       emit_label (label1);
                   1645:       emit_move_insn (reg2, gen_rtx (MINUS, SFmode, operands[1], reg1));
                   1646:       emit_move_insn (reg3, gen_rtx (CONST_INT, VOIDmode, 0x80000000));
                   1647: 
                   1648:       emit_insn (gen_fix_truncsfsi2 (operands[0], reg2));
                   1649:       emit_insn (gen_iorsi3 (operands[0], operands[0], reg3));
                   1650: 
                   1651:       emit_label (label2);
                   1652: 
                   1653:       /* allow REG_NOTES to be set on last insn (labels don't have enough
                   1654:         fields, and can't be used for REG_NOTES anyway).  */
                   1655:       emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
                   1656:       DONE;
                   1657:     }
                   1658: }")
                   1659: 
                   1660: 
                   1661: ;;
                   1662: ;;  ....................
                   1663: ;;
                   1664: ;;     DATA MOVEMENT
                   1665: ;;
                   1666: ;;  ....................
                   1667: 
                   1668: ;; unaligned word moves generated by the block moves.
                   1669: 
                   1670: (define_expand "movsi_unaligned"
                   1671:   [(set (match_operand:SI 0 "general_operand" "")
                   1672:        (unspec [(match_operand:SI 1 "general_operand" "")] 0))]
                   1673:   ""
                   1674:   "
                   1675: {
                   1676:   /* Handle stores.  */
                   1677:   if (GET_CODE (operands[0]) == MEM)
                   1678:     {
                   1679:       rtx reg = gen_reg_rtx (SImode);
                   1680:       rtx insn = emit_insn (gen_movsi_ulw (reg, operands[1]));
                   1681:       rtx addr = XEXP (operands[0], 0);
                   1682:       if (CONSTANT_P (addr))
                   1683:        REG_NOTES (insn) = gen_rtx (EXPR_LIST, REG_EQUIV, addr, REG_NOTES (insn));
                   1684: 
                   1685:       if (reg_or_0_operand (operands[1], SImode))
                   1686:        DONE;
                   1687: 
                   1688:       operands[1] = reg;
                   1689:     }
                   1690: 
                   1691:   /* Generate appropriate load, store.  If not a load or store,
                   1692:      do a normal movsi.  */
                   1693:   if (GET_CODE (operands[0]) != MEM && GET_CODE (operands[1]) != MEM)
                   1694:     {
                   1695:       emit_insn (gen_movsi (operands[0], operands[1]));
                   1696:       DONE;
                   1697:     }
                   1698: 
                   1699:   /* Fall through and generate normal code.  */
                   1700: }")
                   1701: 
                   1702: (define_insn "movsi_ulw"
                   1703:   [(set (match_operand:SI 0 "register_operand" "=&d,&d,d,d")
                   1704:        (unspec [(match_operand:SI 1 "general_operand" "R,o,dIKL,M")] 0))]
                   1705:   ""
                   1706:   "*
                   1707: {
                   1708:   enum rtx_code code;
                   1709:   char *ret;
                   1710:   rtx offset;
                   1711:   rtx addr;
                   1712:   rtx mem_addr;
                   1713: 
                   1714:   if (which_alternative != 0)
                   1715:     return mips_move_1word (operands, insn, FALSE);
                   1716: 
                   1717:   if (TARGET_STATS)
                   1718:     mips_count_memory_refs (operands[1], 2);
                   1719: 
                   1720:   /* The stack/frame pointers are always aligned, so we can convert
                   1721:      to the faster lw if we are referencing an aligned stack location.  */
                   1722: 
                   1723:   offset = const0_rtx;
                   1724:   addr = XEXP (operands[1], 0);
                   1725:   mem_addr = eliminate_constant_term (addr, &offset);
                   1726: 
                   1727:   if ((INTVAL (offset) & (UNITS_PER_WORD-1)) == 0
                   1728:       && (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx))
                   1729:     ret = \"lw\\t%0,%1\";
                   1730: 
                   1731:   else
                   1732:     {
                   1733:       ret = \"ulw\\t%0,%1\";
                   1734:       if (TARGET_GAS)
                   1735:        {
                   1736:          enum rtx_code code = GET_CODE (addr);
                   1737: 
                   1738:          if (code == CONST || code == SYMBOL_REF || code == LABEL_REF)
                   1739:            {
                   1740:              operands[2] = gen_rtx (REG, SImode, GP_REG_FIRST + 1);
                   1741:              ret = \"%[la\\t%2,%1\;ulw\\t%0,0(%2)%]\";
                   1742:            }
                   1743:        }
                   1744:     }
                   1745: 
                   1746:   return mips_fill_delay_slot (ret, DELAY_LOAD, operands, insn);
                   1747: }"
                   1748:   [(set_attr "type"    "load,load,move,arith")
                   1749:    (set_attr "mode"    "SI")
                   1750:    (set_attr "length"  "2,4,1,2")])
                   1751: 
                   1752: (define_insn "movsi_usw"
                   1753:   [(set (match_operand:SI 0 "memory_operand" "=R,o")
                   1754:        (unspec [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 0))]
                   1755:   ""
                   1756:   "*
                   1757: {
                   1758:   rtx offset = const0_rtx;
                   1759:   rtx addr = XEXP (operands[0], 0);
                   1760:   rtx mem_addr = eliminate_constant_term (addr, &offset);
                   1761: 
                   1762:   if (TARGET_STATS)
                   1763:     mips_count_memory_refs (operands[0], 2);
                   1764: 
                   1765:   /* The stack/frame pointers are always aligned, so we can convert
                   1766:      to the faster sw if we are referencing an aligned stack location.  */
                   1767: 
                   1768:   if ((INTVAL (offset) & (UNITS_PER_WORD-1)) == 0
                   1769:       && (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx))
                   1770:     return \"sw\\t%1,%0\";
                   1771: 
                   1772: 
                   1773:   if (TARGET_GAS)
                   1774:     {
                   1775:       enum rtx_code code = GET_CODE (XEXP (operands[0], 0));
                   1776: 
                   1777:       if (code == CONST || code == SYMBOL_REF || code == LABEL_REF)
                   1778:        {
                   1779:          operands[2] = gen_rtx (REG, SImode, GP_REG_FIRST + 1);
                   1780:          return \"%[la\\t%2,%0\;usw\\t%z1,0(%2)%]\";
                   1781:        }
                   1782:     }
                   1783: 
                   1784:   return \"usw\\t%z1,%0\";
                   1785: }"
                   1786:   [(set_attr "type"    "store")
                   1787:    (set_attr "mode"    "SI")
                   1788:    (set_attr "length"  "2,4")])
                   1789: 
                   1790: 
                   1791: ;; 64-bit integer moves
                   1792: 
                   1793: ;; Unlike most other insns, the move insns can't be split with
                   1794: ;; different predicates, because register spilling and other parts of
                   1795: ;; the compiler, have memoized the insn number already.
                   1796: 
                   1797: (define_expand "movdi"
                   1798:   [(set (match_operand:DI 0 "nonimmediate_operand" "")
                   1799:        (match_operand:DI 1 "general_operand" ""))]
                   1800:   ""
                   1801:   "
                   1802: {
                   1803:   if ((reload_in_progress | reload_completed) == 0
                   1804:       && !register_operand (operands[0], DImode)
                   1805:       && !register_operand (operands[1], DImode)
                   1806:       && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0)
                   1807:       && operands[1] != CONST0_RTX (DImode))
                   1808:     {
                   1809:       rtx temp = force_reg (DImode, operands[1]);
                   1810:       emit_move_insn (operands[0], temp);
                   1811:       DONE;
                   1812:     }
                   1813: }")
                   1814: 
                   1815: (define_insn "movdi_internal"
                   1816:   [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,R,o,*d,*x")
                   1817:        (match_operand:DI 1 "general_operand" "d,iF,R,o,d,d,*x,*d"))]
                   1818:   "register_operand (operands[0], DImode)
                   1819:    || register_operand (operands[1], DImode)
                   1820:    || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
                   1821:    || operands[1] == CONST0_RTX (DImode)"
                   1822:   "* return mips_move_2words (operands, insn); "
                   1823:   [(set_attr "type"    "move,arith,load,load,store,store,hilo,hilo")
                   1824:    (set_attr "mode"    "DI")
                   1825:    (set_attr "length"  "2,4,2,4,2,4,2,2")])
                   1826: 
                   1827: (define_split
                   1828:   [(set (match_operand:DI 0 "register_operand" "")
                   1829:        (match_operand:DI 1 "register_operand" ""))]
                   1830:   "reload_completed && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   1831:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                   1832:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))"
                   1833: 
                   1834:   [(set (subreg:SI (match_dup 0) 0) (subreg:SI (match_dup 1) 0))
                   1835:    (set (subreg:SI (match_dup 0) 1) (subreg:SI (match_dup 1) 1))]
                   1836:   "")
                   1837: 
                   1838: 
                   1839: ;; 32-bit Integer moves
                   1840: 
                   1841: (define_split
                   1842:   [(set (match_operand:SI 0 "register_operand" "")
                   1843:        (match_operand:SI 1 "large_int" ""))]
                   1844:   "!TARGET_DEBUG_D_MODE"
                   1845:   [(set (match_dup 0)
                   1846:        (match_dup 2))
                   1847:    (set (match_dup 0)
                   1848:        (ior:SI (match_dup 0)
                   1849:                (match_dup 3)))]
                   1850:   "
                   1851: {
                   1852:   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff0000);
                   1853:   operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0x0000ffff);
                   1854: }")
                   1855: 
                   1856: ;; Unlike most other insns, the move insns can't be split with
                   1857: ;; different predicates, because register spilling and other parts of
                   1858: ;; the compiler, have memoized the insn number already.
                   1859: 
                   1860: (define_expand "movsi"
                   1861:   [(set (match_operand:SI 0 "nonimmediate_operand" "")
                   1862:        (match_operand:SI 1 "general_operand" ""))]
                   1863:   ""
                   1864:   "
                   1865: {
                   1866:   if ((reload_in_progress | reload_completed) == 0
                   1867:       && !register_operand (operands[0], SImode)
                   1868:       && !register_operand (operands[1], SImode)
                   1869:       && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0))
                   1870:     {
                   1871:       rtx temp = force_reg (SImode, operands[1]);
                   1872:       emit_move_insn (operands[0], temp);
                   1873:       DONE;
                   1874:     }
                   1875: }")
                   1876: 
                   1877: ;; The difference between these two is whether or not ints are allowed
                   1878: ;; in FP registers (off by default, use -mdebugh to enable).
                   1879: 
                   1880: (define_insn "movsi_internal1"
                   1881:   [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,d,R,m,*d,*f*z,*f,*f,*f,*R,*m,*x,*d")
                   1882:        (match_operand:SI 1 "general_operand" "d,S,IKL,Mnis,R,m,dJ,dJ,*f*z,*d,*f,*R,*m,*f,*f,*d,*x"))]
                   1883:   "TARGET_DEBUG_H_MODE
                   1884:    && (register_operand (operands[0], SImode)
                   1885:        || register_operand (operands[1], SImode)
                   1886:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))"
                   1887:   "* return mips_move_1word (operands, insn, TRUE);"
                   1888:   [(set_attr "type"    "move,load,arith,arith,load,load,store,store,xfer,xfer,move,load,load,store,store,hilo,hilo")
                   1889:    (set_attr "mode"    "SI")
                   1890:    (set_attr "length"  "1,2,1,2,1,2,1,2,1,1,1,1,2,1,2,1,1")])
                   1891: 
                   1892: (define_insn "movsi_internal2"
                   1893:   [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,d,R,m,*d,*z,*d,*x")
                   1894:        (match_operand:SI 1 "general_operand" "d,S,IKL,Mnis,R,m,dJ,dJ,*z,*d,*x,*d"))]
                   1895:   "!TARGET_DEBUG_H_MODE
                   1896:    && (register_operand (operands[0], SImode)
                   1897:        || register_operand (operands[1], SImode)
                   1898:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))"
                   1899:   "* return mips_move_1word (operands, insn, TRUE);"
                   1900:   [(set_attr "type"    "move,load,arith,arith,load,load,store,store,xfer,xfer,hilo,hilo")
                   1901:    (set_attr "mode"    "SI")
                   1902:    (set_attr "length"  "1,2,1,2,1,2,1,2,1,1,1,1")])
                   1903: 
                   1904: 
                   1905: ;; 16-bit Integer moves
                   1906: 
                   1907: ;; Unlike most other insns, the move insns can't be split with
                   1908: ;; different predicates, because register spilling and other parts of
                   1909: ;; the compiler, have memoized the insn number already.
                   1910: ;; Unsigned loads are used because BYTE_LOADS_ZERO_EXTEND is defined
                   1911: 
                   1912: (define_expand "movhi"
                   1913:   [(set (match_operand:HI 0 "nonimmediate_operand" "")
                   1914:        (match_operand:HI 1 "general_operand" ""))]
                   1915:   ""
                   1916:   "
                   1917: {
                   1918:   if ((reload_in_progress | reload_completed) == 0
                   1919:       && !register_operand (operands[0], HImode)
                   1920:       && !register_operand (operands[1], HImode)
                   1921:       && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0))
                   1922:     {
                   1923:       rtx temp = force_reg (HImode, operands[1]);
                   1924:       emit_move_insn (operands[0], temp);
                   1925:       DONE;
                   1926:     }
                   1927: }")
                   1928: 
                   1929: ;; The difference between these two is whether or not ints are allowed
                   1930: ;; in FP registers (off by default, use -mdebugh to enable).
                   1931: 
                   1932: (define_insn "movhi_internal1"
                   1933:   [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,d,d,R,m,*d,*f,*f*z,*x,*d")
                   1934:        (match_operand:HI 1 "general_operand"       "d,IK,R,m,dJ,dJ,*f*z,*d,*f,*d,*x"))]
                   1935:   "TARGET_DEBUG_H_MODE
                   1936:    && (register_operand (operands[0], HImode)
                   1937:        || register_operand (operands[1], HImode)
                   1938:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))"
                   1939:   "* return mips_move_1word (operands, insn, TRUE);"
                   1940:   [(set_attr "type"    "move,arith,load,load,store,store,xfer,xfer,move,hilo,hilo")
                   1941:    (set_attr "mode"    "HI")
                   1942:    (set_attr "length"  "1,1,1,2,1,2,1,1,1,1,1")])
                   1943: 
                   1944: (define_insn "movhi_internal2"
                   1945:   [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,d,d,R,m,*d,*z,*x,*d")
                   1946:        (match_operand:HI 1 "general_operand"       "d,IK,R,m,dJ,dJ,*z,*d,*d,*x"))]
                   1947:   "!TARGET_DEBUG_H_MODE
                   1948:    && (register_operand (operands[0], HImode)
                   1949:        || register_operand (operands[1], HImode)
                   1950:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))"
                   1951:   "* return mips_move_1word (operands, insn, TRUE);"
                   1952:   [(set_attr "type"    "move,arith,load,load,store,store,xfer,xfer,hilo,hilo")
                   1953:    (set_attr "mode"    "HI")
                   1954:    (set_attr "length"  "1,1,1,2,1,2,1,1,1,1")])
                   1955: 
                   1956: 
                   1957: ;; 8-bit Integer moves
                   1958: 
                   1959: ;; Unlike most other insns, the move insns can't be split with
                   1960: ;; different predicates, because register spilling and other parts of
                   1961: ;; the compiler, have memoized the insn number already.
                   1962: ;; Unsigned loads are used because BYTE_LOADS_ZERO_EXTEND is defined
                   1963: 
                   1964: (define_expand "movqi"
                   1965:   [(set (match_operand:QI 0 "nonimmediate_operand" "")
                   1966:        (match_operand:QI 1 "general_operand" ""))]
                   1967:   ""
                   1968:   "
                   1969: {
                   1970:   if ((reload_in_progress | reload_completed) == 0
                   1971:       && !register_operand (operands[0], QImode)
                   1972:       && !register_operand (operands[1], QImode)
                   1973:       && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0))
                   1974:     {
                   1975:       rtx temp = force_reg (QImode, operands[1]);
                   1976:       emit_move_insn (operands[0], temp);
                   1977:       DONE;
                   1978:     }
                   1979: }")
                   1980: 
                   1981: ;; The difference between these two is whether or not ints are allowed
                   1982: ;; in FP registers (off by default, use -mdebugh to enable).
                   1983: 
                   1984: (define_insn "movqi_internal1"
                   1985:   [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,d,R,m,*d,*f*z,*f,*x,*d")
                   1986:        (match_operand:QI 1 "general_operand"       "d,IK,R,m,dJ,dJ,*f*z,*d,*f,*d,*x"))]
                   1987:   "TARGET_DEBUG_H_MODE
                   1988:    && (register_operand (operands[0], QImode)
                   1989:        || register_operand (operands[1], QImode)
                   1990:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))"
                   1991:   "* return mips_move_1word (operands, insn, TRUE);"
                   1992:   [(set_attr "type"    "move,arith,load,load,store,store,xfer,xfer,move,hilo,hilo")
                   1993:    (set_attr "mode"    "QI")
                   1994:    (set_attr "length"  "1,1,1,2,1,2,1,1,1,1,1")])
                   1995: 
                   1996: (define_insn "movqi_internal2"
                   1997:   [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,d,R,m,*d,*z,*x,*d")
                   1998:        (match_operand:QI 1 "general_operand"       "d,IK,R,m,dJ,dJ,*z,*d,*d,*x"))]
                   1999:   "!TARGET_DEBUG_H_MODE
                   2000:    && (register_operand (operands[0], QImode)
                   2001:        || register_operand (operands[1], QImode)
                   2002:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))"
                   2003:   "* return mips_move_1word (operands, insn, TRUE);"
                   2004:   [(set_attr "type"    "move,arith,load,load,store,store,xfer,xfer,hilo,hilo")
                   2005:    (set_attr "mode"    "QI")
                   2006:    (set_attr "length"  "1,1,1,2,1,2,1,1,1,1")])
                   2007: 
                   2008: 
                   2009: ;; 32-bit floating point moves
                   2010: 
                   2011: (define_expand "movsf"
                   2012:   [(set (match_operand:SF 0 "nonimmediate_operand" "")
                   2013:        (match_operand:SF 1 "general_operand" ""))]
                   2014:   ""
                   2015:   "
                   2016: {
                   2017:   if ((reload_in_progress | reload_completed) == 0
                   2018:       && !register_operand (operands[0], SFmode)
                   2019:       && !register_operand (operands[1], SFmode)
                   2020:       && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0)
                   2021:       && operands[1] != CONST0_RTX (SFmode))
                   2022:     {
                   2023:       rtx temp = force_reg (SFmode, operands[1]);
                   2024:       emit_move_insn (operands[0], temp);
                   2025:       DONE;
                   2026:     }
                   2027: }")
                   2028: 
                   2029: (define_insn "movsf_internal1"
                   2030:   [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,f,f,R,m,*f,*d,*d,*d,*d,*R,*m")
                   2031:        (match_operand:SF 1 "general_operand" "f,G,R,Em,fG,fG,*d,*f,*G*d,*R,*E*m,*d,*d"))]
                   2032:   "TARGET_HARD_FLOAT
                   2033:    && (register_operand (operands[0], SFmode)
                   2034:        || register_operand (operands[1], SFmode)
                   2035:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
                   2036:        || operands[1] == CONST0_RTX (SFmode))"
                   2037:   "* return mips_move_1word (operands, insn, FALSE);"
                   2038:   [(set_attr "type"    "move,xfer,load,load,store,store,xfer,xfer,move,load,load,store,store")
                   2039:    (set_attr "mode"    "SF")
                   2040:    (set_attr "length"  "1,1,1,2,1,2,1,1,1,1,2,1,2")])
                   2041: 
                   2042: 
                   2043: (define_insn "movsf_internal2"
                   2044:   [(set (match_operand:SF 0 "nonimmediate_operand" "=d,d,d,R,m")
                   2045:        (match_operand:SF 1 "general_operand" "      Gd,R,Em,d,d"))]
                   2046:   "TARGET_SOFT_FLOAT
                   2047:    && (register_operand (operands[0], SFmode)
                   2048:        || register_operand (operands[1], SFmode)
                   2049:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
                   2050:        || operands[1] == CONST0_RTX (SFmode))"
                   2051:   "* return mips_move_1word (operands, insn, FALSE);"
                   2052:   [(set_attr "type"    "move,load,load,store,store")
                   2053:    (set_attr "mode"    "SF")
                   2054:    (set_attr "length"  "1,1,2,1,2")])
                   2055: 
                   2056: 
                   2057: ;; 64-bit floating point moves
                   2058: 
                   2059: (define_expand "movdf"
                   2060:   [(set (match_operand:DF 0 "nonimmediate_operand" "")
                   2061:        (match_operand:DF 1 "general_operand" ""))]
                   2062:   ""
                   2063:   "
                   2064: {
                   2065:   if ((reload_in_progress | reload_completed) == 0
                   2066:       && !register_operand (operands[0], DFmode)
                   2067:       && !register_operand (operands[1], DFmode)
                   2068:       && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0)
                   2069:       && operands[1] != CONST0_RTX (DFmode))
                   2070:     {
                   2071:       rtx temp = force_reg (DFmode, operands[1]);
                   2072:       emit_move_insn (operands[0], temp);
                   2073:       DONE;
                   2074:     }
                   2075: }")
                   2076: 
                   2077: (define_insn "movdf_internal1"
                   2078:   [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,f,R,o,f,*f,*d,*d,*d,*d,*R,*o")
                   2079:        (match_operand:DF 1 "general_operand" "f,R,o,fG,fG,E,*d,*f,*d*G,*R,*o*E,*d,*d"))]
                   2080:   "TARGET_HARD_FLOAT
                   2081:    && (register_operand (operands[0], DFmode)
                   2082:        || register_operand (operands[1], DFmode)
                   2083:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
                   2084:        || operands[1] == CONST0_RTX (DFmode))"
                   2085:   "* return mips_move_2words (operands, insn); "
                   2086:   [(set_attr "type"    "move,load,load,store,store,load,xfer,xfer,move,load,load,store,store")
                   2087:    (set_attr "mode"    "DF")
                   2088:    (set_attr "length"  "1,2,4,2,4,4,2,2,2,2,4,2,4")])
                   2089: 
                   2090: (define_insn "movdf_internal2"
                   2091:   [(set (match_operand:DF 0 "nonimmediate_operand" "=d,d,d,R,o")
                   2092:        (match_operand:DF 1 "general_operand" "dG,R,oE,d,d"))]
                   2093:   "TARGET_SOFT_FLOAT
                   2094:    && (register_operand (operands[0], DFmode)
                   2095:        || register_operand (operands[1], DFmode)
                   2096:        || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
                   2097:        || operands[1] == CONST0_RTX (DFmode))"
                   2098:   "* return mips_move_2words (operands, insn); "
                   2099:   [(set_attr "type"    "move,load,load,store,store")
                   2100:    (set_attr "mode"    "DF")
                   2101:    (set_attr "length"  "2,2,4,2,4")])
                   2102: 
                   2103: (define_split
                   2104:   [(set (match_operand:DF 0 "register_operand" "")
                   2105:        (match_operand:DF 1 "register_operand" ""))]
                   2106:   "reload_completed && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2107:    && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))
                   2108:    && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))"
                   2109: 
                   2110:   [(set (subreg:SI (match_dup 0) 0) (subreg:SI (match_dup 1) 0))
                   2111:    (set (subreg:SI (match_dup 0) 1) (subreg:SI (match_dup 1) 1))]
                   2112:   "")
                   2113: 
                   2114: 
                   2115: ;; Block moves, see mips.c for more details.
                   2116: ;; Argument 0 is the destination
                   2117: ;; Argument 1 is the source
                   2118: ;; Argument 2 is the length
                   2119: ;; Argument 3 is the alignment
                   2120: 
                   2121: (define_expand "movstrsi"
                   2122:   [(parallel [(set (mem:BLK (match_operand:BLK 0 "general_operand" ""))
                   2123:                   (mem:BLK (match_operand:BLK 1 "general_operand" "")))
                   2124:              (use (match_operand:SI 2 "arith32_operand" ""))
                   2125:              (use (match_operand:SI 3 "immediate_operand" ""))])]
                   2126:   ""
                   2127:   "
                   2128: {
                   2129:   if (operands[0])             /* avoid unused code messages */
                   2130:     {
                   2131:       expand_block_move (operands);
                   2132:       DONE;
                   2133:     }
                   2134: }")
                   2135: 
                   2136: ;; Insn generated by block moves
                   2137: 
                   2138: (define_insn "movstrsi_internal"
                   2139:   [(set (match_operand:BLK 0 "memory_operand" "=Ro")   ;; destination
                   2140:        (match_operand:BLK 1 "memory_operand" "Ro"))    ;; source
                   2141:    (clobber (match_scratch:SI 4 "=&d"))                        ;; temp 1
                   2142:    (clobber (match_scratch:SI 5 "=&d"))                        ;; temp 2
                   2143:    (clobber (match_scratch:SI 6 "=&d"))                        ;; temp 3
                   2144:    (clobber (match_scratch:SI 7 "=&d"))                        ;; temp 4
                   2145:    (use (match_operand:SI 2 "small_int" "I"))          ;; # bytes to move
                   2146:    (use (match_operand:SI 3 "small_int" "I"))          ;; alignment
                   2147:    (use (const_int 0))]                                        ;; normal block move
                   2148:   ""
                   2149:   "* return output_block_move (insn, operands, 4, BLOCK_MOVE_NORMAL);"
                   2150:   [(set_attr "type"    "multi")
                   2151:    (set_attr "mode"    "none")
                   2152:    (set_attr "length"  "20")])
                   2153: 
                   2154: ;; Split a block move into 2 parts, the first part is everything
                   2155: ;; except for the last move, and the second part is just the last
                   2156: ;; store, which is exactly 1 instruction (ie, not a usw), so it can
                   2157: ;; fill a delay slot.  This also prevents a bug in delayed branches
                   2158: ;; from showing up, which reuses one of the registers in our clobbers.
                   2159: 
                   2160: (define_split
                   2161:   [(set (mem:BLK (match_operand:SI 0 "register_operand" ""))
                   2162:        (mem:BLK (match_operand:SI 1 "register_operand" "")))
                   2163:    (clobber (match_operand:SI 4 "register_operand" ""))
                   2164:    (clobber (match_operand:SI 5 "register_operand" ""))
                   2165:    (clobber (match_operand:SI 6 "register_operand" ""))
                   2166:    (clobber (match_operand:SI 7 "register_operand" ""))
                   2167:    (use (match_operand:SI 2 "small_int" ""))
                   2168:    (use (match_operand:SI 3 "small_int" ""))
                   2169:    (use (const_int 0))]
                   2170: 
                   2171:   "reload_completed && !TARGET_DEBUG_D_MODE && INTVAL (operands[2]) > 0"
                   2172: 
                   2173:   ;; All but the last move
                   2174:   [(parallel [(set (mem:BLK (match_dup 0))
                   2175:                   (mem:BLK (match_dup 1)))
                   2176:              (clobber (match_dup 4))
                   2177:              (clobber (match_dup 5))
                   2178:              (clobber (match_dup 6))
                   2179:              (clobber (match_dup 7))
                   2180:              (use (match_dup 2))
                   2181:              (use (match_dup 3))
                   2182:              (use (const_int 1))])
                   2183: 
                   2184:    ;; The last store, so it can fill a delay slot
                   2185:    (parallel [(set (mem:BLK (match_dup 0))
                   2186:                   (mem:BLK (match_dup 1)))
                   2187:              (clobber (match_dup 4))
                   2188:              (clobber (match_dup 5))
                   2189:              (clobber (match_dup 6))
                   2190:              (clobber (match_dup 7))
                   2191:              (use (match_dup 2))
                   2192:              (use (match_dup 3))
                   2193:              (use (const_int 2))])]
                   2194: 
                   2195:   "")
                   2196: 
                   2197: (define_insn "movstrsi_internal2"
                   2198:   [(set (match_operand:BLK 0 "memory_operand" "=Ro")   ;; destination
                   2199:        (match_operand:BLK 1 "memory_operand" "Ro"))    ;; source
                   2200:    (clobber (match_scratch:SI 4 "=&d"))                        ;; temp 1
                   2201:    (clobber (match_scratch:SI 5 "=&d"))                        ;; temp 2
                   2202:    (clobber (match_scratch:SI 6 "=&d"))                        ;; temp 3
                   2203:    (clobber (match_scratch:SI 7 "=&d"))                        ;; temp 4
                   2204:    (use (match_operand:SI 2 "small_int" "I"))          ;; # bytes to move
                   2205:    (use (match_operand:SI 3 "small_int" "I"))          ;; alignment
                   2206:    (use (const_int 1))]                                        ;; all but last store
                   2207:   ""
                   2208:   "* return output_block_move (insn, operands, 4, BLOCK_MOVE_NOT_LAST);"
                   2209:   [(set_attr "type"    "multi")
                   2210:    (set_attr "mode"    "none")
                   2211:    (set_attr "length"  "20")])
                   2212: 
                   2213: (define_insn "movstrsi_internal3"
                   2214:   [(set (match_operand:BLK 0 "memory_operand" "=Ro")   ;; destination
                   2215:        (match_operand:BLK 1 "memory_operand" "Ro"))    ;; source
                   2216:    (clobber (match_scratch:SI 4 "=&d"))                        ;; temp 1
                   2217:    (clobber (match_scratch:SI 5 "=&d"))                        ;; temp 2
                   2218:    (clobber (match_scratch:SI 6 "=&d"))                        ;; temp 3
                   2219:    (clobber (match_scratch:SI 7 "=&d"))                        ;; temp 4
                   2220:    (use (match_operand:SI 2 "small_int" "I"))          ;; # bytes to move
                   2221:    (use (match_operand:SI 3 "small_int" "I"))          ;; alignment
                   2222:    (use (const_int 2))]                                        ;; just last store of block mvoe
                   2223:   ""
                   2224:   "* return output_block_move (insn, operands, 4, BLOCK_MOVE_LAST);"
                   2225:   [(set_attr "type"    "store")
                   2226:    (set_attr "mode"    "none")
                   2227:    (set_attr "length"  "1")])
                   2228: 
                   2229: 
                   2230: ;;
                   2231: ;;  ....................
                   2232: ;;
                   2233: ;;     SHIFTS
                   2234: ;;
                   2235: ;;  ....................
                   2236: 
                   2237: (define_insn "ashlsi3"
                   2238:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2239:        (ashift:SI (match_operand:SI 1 "register_operand" "d")
                   2240:                   (match_operand:SI 2 "arith_operand" "dI")))]
                   2241:   ""
                   2242:   "*
                   2243: {
                   2244:   if (GET_CODE (operands[2]) == CONST_INT)
                   2245:     operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);
                   2246: 
                   2247:   return \"sll\\t%0,%1,%2\";
                   2248: }"
                   2249:   [(set_attr "type"    "arith")
                   2250:    (set_attr "mode"    "SI")
                   2251:    (set_attr "length"  "1")])
                   2252: 
                   2253: 
                   2254: (define_expand "ashldi3"
                   2255:   [(parallel [(set (match_operand:DI 0 "register_operand" "")
                   2256:                   (ashift:DI (match_operand:DI 1 "register_operand" "")
                   2257:                              (match_operand:SI 2 "arith_operand" "")))
                   2258:              (clobber (match_dup  3))])]
                   2259:   "!TARGET_DEBUG_G_MODE"
                   2260:   "operands[3] = gen_reg_rtx (SImode);")
                   2261: 
                   2262: 
                   2263: (define_insn "ashldi3_internal"
                   2264:   [(set (match_operand:DI 0 "register_operand" "=&d")
                   2265:        (ashift:DI (match_operand:DI 1 "register_operand" "d")
                   2266:                   (match_operand:SI 2 "register_operand" "d")))
                   2267:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2268:   "!TARGET_DEBUG_G_MODE"
                   2269:   "* 
                   2270: {
                   2271:   operands[4] = const0_rtx;
                   2272:   dslots_jump_total += 3;
                   2273:   dslots_jump_filled += 2;
                   2274: 
                   2275:   return \"sll\\t%3,%2,26\\n\\
                   2276: \\tbgez\\t%3,1f\\n\\
                   2277: \\tsll\\t%M0,%L1,%2\\n\\
                   2278: \\t%(b\\t3f\\n\\
                   2279: \\tmove\\t%L0,%z4%)\\n\\
                   2280: \\n\\
                   2281: 1:\\n\\
                   2282: \\t%(beq\\t%3,%z4,2f\\n\\
                   2283: \\tsll\\t%M0,%M1,%2%)\\n\\
                   2284: \\n\\
                   2285: \\tsubu\\t%3,%z4,%2\\n\\
                   2286: \\tsrl\\t%3,%L1,%3\\n\\
                   2287: \\tor\\t%M0,%M0,%3\\n\\
                   2288: 2:\\n\\
                   2289: \\tsll\\t%L0,%L1,%2\\n\\
                   2290: 3:\";
                   2291: }"
                   2292:   [(set_attr "type"    "darith")
                   2293:    (set_attr "mode"    "SI")
                   2294:    (set_attr "length"  "12")])
                   2295: 
                   2296: 
                   2297: (define_insn "ashldi3_internal2"
                   2298:   [(set (match_operand:DI 0 "register_operand" "=d")
                   2299:        (ashift:DI (match_operand:DI 1 "register_operand" "d")
                   2300:                   (match_operand:SI 2 "small_int" "IJK")))
                   2301:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2302:   "!TARGET_DEBUG_G_MODE && (INTVAL (operands[2]) & 32) != 0"
                   2303:   "*
                   2304: {
                   2305:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);
                   2306:   operands[4] = const0_rtx;
                   2307:   return \"sll\\t%M0,%L1,%2\;move\\t%L0,%z4\";
                   2308: }"
                   2309:   [(set_attr "type"    "darith")
                   2310:    (set_attr "mode"    "DI")
                   2311:    (set_attr "length"  "2")])
                   2312: 
                   2313: 
                   2314: (define_split
                   2315:   [(set (match_operand:DI 0 "register_operand" "")
                   2316:        (ashift:DI (match_operand:DI 1 "register_operand" "")
                   2317:                   (match_operand:SI 2 "small_int" "")))
                   2318:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2319:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2320:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2321:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2322:    && (INTVAL (operands[2]) & 32) != 0"
                   2323: 
                   2324:   [(set (subreg:SI (match_dup 0) 1) (ashift:SI (subreg:SI (match_dup 1) 0) (match_dup 2)))
                   2325:    (set (subreg:SI (match_dup 0) 0) (const_int 0))]
                   2326: 
                   2327:   "operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);")
                   2328: 
                   2329: 
                   2330: (define_split
                   2331:   [(set (match_operand:DI 0 "register_operand" "")
                   2332:        (ashift:DI (match_operand:DI 1 "register_operand" "")
                   2333:                   (match_operand:SI 2 "small_int" "")))
                   2334:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2335:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2336:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2337:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2338:    && (INTVAL (operands[2]) & 32) != 0"
                   2339: 
                   2340:   [(set (subreg:SI (match_dup 0) 0) (ashift:SI (subreg:SI (match_dup 1) 1) (match_dup 2)))
                   2341:    (set (subreg:SI (match_dup 0) 1) (const_int 0))]
                   2342: 
                   2343:   "operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);")
                   2344: 
                   2345: 
                   2346: (define_insn "ashldi3_internal3"
                   2347:   [(set (match_operand:DI 0 "register_operand" "=d")
                   2348:        (ashift:DI (match_operand:DI 1 "register_operand" "d")
                   2349:                   (match_operand:SI 2 "small_int" "IJK")))
                   2350:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2351:   "!TARGET_DEBUG_G_MODE
                   2352:    && (INTVAL (operands[2]) & 63) < 32
                   2353:    && (INTVAL (operands[2]) & 63) != 0"
                   2354:   "*
                   2355: {
                   2356:   int amount = INTVAL (operands[2]);
                   2357: 
                   2358:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2359:   operands[4] = const0_rtx;
                   2360:   operands[5] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2361: 
                   2362:   return \"sll\\t%M0,%M1,%2\;srl\\t%3,%L1,%5\;or\\t%M0,%M0,%3\;sll\\t%L0,%L1,%2\";
                   2363: }"
                   2364:   [(set_attr "type"    "darith")
                   2365:    (set_attr "mode"    "DI")
                   2366:    (set_attr "length"  "4")])
                   2367: 
                   2368: 
                   2369: (define_split
                   2370:   [(set (match_operand:DI 0 "register_operand" "")
                   2371:        (ashift:DI (match_operand:DI 1 "register_operand" "")
                   2372:                   (match_operand:SI 2 "small_int" "")))
                   2373:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2374:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2375:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2376:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2377:    && (INTVAL (operands[2]) & 63) < 32
                   2378:    && (INTVAL (operands[2]) & 63) != 0"
                   2379: 
                   2380:   [(set (subreg:SI (match_dup 0) 1)
                   2381:        (ashift:SI (subreg:SI (match_dup 1) 1)
                   2382:                   (match_dup 2)))
                   2383: 
                   2384:    (set (match_dup 3)
                   2385:        (lshiftrt:SI (subreg:SI (match_dup 1) 0)
                   2386:                     (match_dup 4)))
                   2387: 
                   2388:    (set (subreg:SI (match_dup 0) 1)
                   2389:        (ior:SI (subreg:SI (match_dup 0) 1)
                   2390:                (match_dup 3)))
                   2391: 
                   2392:    (set (subreg:SI (match_dup 0) 0)
                   2393:        (ashift:SI (subreg:SI (match_dup 1) 0)
                   2394:                   (match_dup 2)))]
                   2395:   "
                   2396: {
                   2397:   int amount = INTVAL (operands[2]);
                   2398:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2399:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2400: }")
                   2401: 
                   2402: 
                   2403: (define_split
                   2404:   [(set (match_operand:DI 0 "register_operand" "")
                   2405:        (ashift:DI (match_operand:DI 1 "register_operand" "")
                   2406:                   (match_operand:SI 2 "small_int" "")))
                   2407:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2408:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2409:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2410:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2411:    && (INTVAL (operands[2]) & 63) < 32
                   2412:    && (INTVAL (operands[2]) & 63) != 0"
                   2413: 
                   2414:   [(set (subreg:SI (match_dup 0) 0)
                   2415:        (ashift:SI (subreg:SI (match_dup 1) 0)
                   2416:                   (match_dup 2)))
                   2417: 
                   2418:    (set (match_dup 3)
                   2419:        (lshiftrt:SI (subreg:SI (match_dup 1) 1)
                   2420:                     (match_dup 4)))
                   2421: 
                   2422:    (set (subreg:SI (match_dup 0) 0)
                   2423:        (ior:SI (subreg:SI (match_dup 0) 0)
                   2424:                (match_dup 3)))
                   2425: 
                   2426:    (set (subreg:SI (match_dup 0) 1)
                   2427:        (ashift:SI (subreg:SI (match_dup 1) 1)
                   2428:                   (match_dup 2)))]
                   2429:   "
                   2430: {
                   2431:   int amount = INTVAL (operands[2]);
                   2432:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2433:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2434: }")
                   2435: 
                   2436: 
                   2437: (define_insn "ashrsi3"
                   2438:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2439:        (ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
                   2440:                     (match_operand:SI 2 "arith_operand" "dI")))]
                   2441:   ""
                   2442:   "*
                   2443: {
                   2444:   if (GET_CODE (operands[2]) == CONST_INT)
                   2445:     operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);
                   2446: 
                   2447:   return \"sra\\t%0,%1,%2\";
                   2448: }"
                   2449:   [(set_attr "type"    "arith")
                   2450:    (set_attr "mode"    "SI")
                   2451:    (set_attr "length"  "1")])
                   2452: 
                   2453: 
                   2454: (define_expand "ashrdi3"
                   2455:   [(parallel [(set (match_operand:DI 0 "register_operand" "")
                   2456:                   (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2457:                                (match_operand:SI 2 "arith_operand" "")))
                   2458:              (clobber (match_dup  3))])]
                   2459:   "!TARGET_DEBUG_G_MODE"
                   2460:   "operands[3] = gen_reg_rtx (SImode);")
                   2461: 
                   2462: 
                   2463: (define_insn "ashrdi3_internal"
                   2464:   [(set (match_operand:DI 0 "register_operand" "=&d")
                   2465:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "d")
                   2466:                     (match_operand:SI 2 "register_operand" "d")))
                   2467:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2468:   "!TARGET_DEBUG_G_MODE"
                   2469:   "* 
                   2470: {
                   2471:   operands[4] = const0_rtx;
                   2472:   dslots_jump_total += 3;
                   2473:   dslots_jump_filled += 2;
                   2474: 
                   2475:   return \"sll\\t%3,%2,26\\n\\
                   2476: \\tbgez\\t%3,1f\\n\\
                   2477: \\tsra\\t%L0,%M1,%2\\n\\
                   2478: \\t%(b\\t3f\\n\\
                   2479: \\tsra\\t%M0,%M1,31%)\\n\\
                   2480: \\n\\
                   2481: 1:\\n\\
                   2482: \\t%(beq\\t%3,%z4,2f\\n\\
                   2483: \\tsrl\\t%L0,%L1,%2%)\\n\\
                   2484: \\n\\
                   2485: \\tsubu\\t%3,%z4,%2\\n\\
                   2486: \\tsll\\t%3,%M1,%3\\n\\
                   2487: \\tor\\t%L0,%L0,%3\\n\\
                   2488: 2:\\n\\
                   2489: \\tsra\\t%M0,%M1,%2\\n\\
                   2490: 3:\";
                   2491: }"
                   2492:   [(set_attr "type"    "darith")
                   2493:    (set_attr "mode"    "DI")
                   2494:    (set_attr "length"  "12")])
                   2495: 
                   2496: 
                   2497: (define_insn "ashrdi3_internal2"
                   2498:   [(set (match_operand:DI 0 "register_operand" "=d")
                   2499:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "d")
                   2500:                     (match_operand:SI 2 "small_int" "IJK")))
                   2501:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2502:   "!TARGET_DEBUG_G_MODE && (INTVAL (operands[2]) & 32) != 0"
                   2503:   "*
                   2504: {
                   2505:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);
                   2506:   return \"sra\\t%L0,%M1,%2\;sra\\t%M0,%M1,31\";
                   2507: }"
                   2508:   [(set_attr "type"    "darith")
                   2509:    (set_attr "mode"    "DI")
                   2510:    (set_attr "length"  "2")])
                   2511: 
                   2512: 
                   2513: (define_split
                   2514:   [(set (match_operand:DI 0 "register_operand" "")
                   2515:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2516:                     (match_operand:SI 2 "small_int" "")))
                   2517:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2518:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2519:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2520:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2521:    && (INTVAL (operands[2]) & 32) != 0"
                   2522: 
                   2523:   [(set (subreg:SI (match_dup 0) 0) (ashiftrt:SI (subreg:SI (match_dup 1) 1) (match_dup 2)))
                   2524:    (set (subreg:SI (match_dup 0) 1) (ashiftrt:SI (subreg:SI (match_dup 1) 1) (const_int 31)))]
                   2525: 
                   2526:   "operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);")
                   2527: 
                   2528: 
                   2529: (define_split
                   2530:   [(set (match_operand:DI 0 "register_operand" "")
                   2531:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2532:                     (match_operand:SI 2 "small_int" "")))
                   2533:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2534:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2535:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2536:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2537:    && (INTVAL (operands[2]) & 32) != 0"
                   2538: 
                   2539:   [(set (subreg:SI (match_dup 0) 1) (ashiftrt:SI (subreg:SI (match_dup 1) 0) (match_dup 2)))
                   2540:    (set (subreg:SI (match_dup 0) 0) (ashiftrt:SI (subreg:SI (match_dup 1) 0) (const_int 31)))]
                   2541: 
                   2542:   "operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);")
                   2543: 
                   2544: 
                   2545: (define_insn "ashrdi3_internal3"
                   2546:   [(set (match_operand:DI 0 "register_operand" "=d")
                   2547:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "d")
                   2548:                     (match_operand:SI 2 "small_int" "IJK")))
                   2549:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2550:   "!TARGET_DEBUG_G_MODE
                   2551:    && (INTVAL (operands[2]) & 63) < 32
                   2552:    && (INTVAL (operands[2]) & 63) != 0"
                   2553:   "*
                   2554: {
                   2555:   int amount = INTVAL (operands[2]);
                   2556: 
                   2557:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2558:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2559: 
                   2560:   return \"srl\\t%L0,%L1,%2\;sll\\t%3,%M1,%4\;or\\t%L0,%L0,%3\;sra\\t%M0,%M1,%2\";
                   2561: }"
                   2562:   [(set_attr "type"    "darith")
                   2563:    (set_attr "mode"    "DI")
                   2564:    (set_attr "length"  "4")])
                   2565: 
                   2566: 
                   2567: (define_split
                   2568:   [(set (match_operand:DI 0 "register_operand" "")
                   2569:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2570:                     (match_operand:SI 2 "small_int" "")))
                   2571:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2572:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2573:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2574:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2575:    && (INTVAL (operands[2]) & 63) < 32
                   2576:    && (INTVAL (operands[2]) & 63) != 0"
                   2577: 
                   2578:   [(set (subreg:SI (match_dup 0) 0)
                   2579:        (lshiftrt:SI (subreg:SI (match_dup 1) 0)
                   2580:                     (match_dup 2)))
                   2581: 
                   2582:    (set (match_dup 3)
                   2583:        (ashift:SI (subreg:SI (match_dup 1) 1)
                   2584:                   (match_dup 4)))
                   2585: 
                   2586:    (set (subreg:SI (match_dup 0) 0)
                   2587:        (ior:SI (subreg:SI (match_dup 0) 0)
                   2588:                (match_dup 3)))
                   2589: 
                   2590:    (set (subreg:SI (match_dup 0) 1)
                   2591:        (ashiftrt:SI (subreg:SI (match_dup 1) 1)
                   2592:                     (match_dup 2)))]
                   2593:   "
                   2594: {
                   2595:   int amount = INTVAL (operands[2]);
                   2596:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2597:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2598: }")
                   2599: 
                   2600: 
                   2601: (define_split
                   2602:   [(set (match_operand:DI 0 "register_operand" "")
                   2603:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2604:                     (match_operand:SI 2 "small_int" "")))
                   2605:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2606:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2607:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2608:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2609:    && (INTVAL (operands[2]) & 63) < 32
                   2610:    && (INTVAL (operands[2]) & 63) != 0"
                   2611: 
                   2612:   [(set (subreg:SI (match_dup 0) 1)
                   2613:        (lshiftrt:SI (subreg:SI (match_dup 1) 1)
                   2614:                     (match_dup 2)))
                   2615: 
                   2616:    (set (match_dup 3)
                   2617:        (ashift:SI (subreg:SI (match_dup 1) 0)
                   2618:                   (match_dup 4)))
                   2619: 
                   2620:    (set (subreg:SI (match_dup 0) 1)
                   2621:        (ior:SI (subreg:SI (match_dup 0) 1)
                   2622:                (match_dup 3)))
                   2623: 
                   2624:    (set (subreg:SI (match_dup 0) 0)
                   2625:        (ashiftrt:SI (subreg:SI (match_dup 1) 0)
                   2626:                     (match_dup 2)))]
                   2627:   "
                   2628: {
                   2629:   int amount = INTVAL (operands[2]);
                   2630:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2631:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2632: }")
                   2633: 
                   2634: 
                   2635: (define_insn "lshrsi3"
                   2636:   [(set (match_operand:SI 0 "register_operand" "=d")
                   2637:        (lshiftrt:SI (match_operand:SI 1 "register_operand" "d")
                   2638:                     (match_operand:SI 2 "arith_operand" "dI")))]
                   2639:   ""
                   2640:   "*
                   2641: {
                   2642:   if (GET_CODE (operands[2]) == CONST_INT)
                   2643:     operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);
                   2644: 
                   2645:   return \"srl\\t%0,%1,%2\";
                   2646: }"
                   2647:   [(set_attr "type"    "arith")
                   2648:    (set_attr "mode"    "SI")
                   2649:    (set_attr "length"  "1")])
                   2650: 
                   2651: 
                   2652: (define_expand "lshrdi3"
                   2653:   [(parallel [(set (match_operand:DI 0 "register_operand" "")
                   2654:                   (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2655:                                (match_operand:SI 2 "arith_operand" "")))
                   2656:              (clobber (match_dup  3))])]
                   2657:   "!TARGET_DEBUG_G_MODE"
                   2658:   "operands[3] = gen_reg_rtx (SImode);")
                   2659: 
                   2660: 
                   2661: (define_insn "lshrdi3_internal"
                   2662:   [(set (match_operand:DI 0 "register_operand" "=&d")
                   2663:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "d")
                   2664:                     (match_operand:SI 2 "register_operand" "d")))
                   2665:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2666:   "!TARGET_DEBUG_G_MODE"
                   2667:   "* 
                   2668: {
                   2669:   operands[4] = const0_rtx;
                   2670:   dslots_jump_total += 3;
                   2671:   dslots_jump_filled += 2;
                   2672: 
                   2673:   return \"sll\\t%3,%2,26\\n\\
                   2674: \\tbgez\\t%3,1f\\n\\
                   2675: \\tsrl\\t%L0,%M1,%2\\n\\
                   2676: \\t%(b\\t3f\\n\\
                   2677: \\tmove\\t%M0,%z4%)\\n\\
                   2678: \\n\\
                   2679: 1:\\n\\
                   2680: \\t%(beq\\t%3,%z4,2f\\n\\
                   2681: \\tsrl\\t%L0,%L1,%2%)\\n\\
                   2682: \\n\\
                   2683: \\tsubu\\t%3,%z4,%2\\n\\
                   2684: \\tsll\\t%3,%M1,%3\\n\\
                   2685: \\tor\\t%L0,%L0,%3\\n\\
                   2686: 2:\\n\\
                   2687: \\tsrl\\t%M0,%M1,%2\\n\\
                   2688: 3:\";
                   2689: }"
                   2690:   [(set_attr "type"    "darith")
                   2691:    (set_attr "mode"    "DI")
                   2692:    (set_attr "length"  "12")])
                   2693: 
                   2694: 
                   2695: (define_insn "lshrdi3_internal2"
                   2696:   [(set (match_operand:DI 0 "register_operand" "=d")
                   2697:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "d")
                   2698:                     (match_operand:SI 2 "small_int" "IJK")))
                   2699:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2700:   "!TARGET_DEBUG_G_MODE && (INTVAL (operands[2]) & 32) != 0"
                   2701:   "*
                   2702: {
                   2703:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);
                   2704:   operands[4] = const0_rtx;
                   2705:   return \"srl\\t%L0,%M1,%2\;move\\t%M0,%z4\";
                   2706: }"
                   2707:   [(set_attr "type"    "darith")
                   2708:    (set_attr "mode"    "DI")
                   2709:    (set_attr "length"  "2")])
                   2710: 
                   2711: 
                   2712: (define_split
                   2713:   [(set (match_operand:DI 0 "register_operand" "")
                   2714:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2715:                     (match_operand:SI 2 "small_int" "")))
                   2716:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2717:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2718:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2719:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2720:    && (INTVAL (operands[2]) & 32) != 0"
                   2721: 
                   2722:   [(set (subreg:SI (match_dup 0) 0) (lshiftrt:SI (subreg:SI (match_dup 1) 1) (match_dup 2)))
                   2723:    (set (subreg:SI (match_dup 0) 1) (const_int 0))]
                   2724: 
                   2725:   "operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);")
                   2726: 
                   2727: 
                   2728: (define_split
                   2729:   [(set (match_operand:DI 0 "register_operand" "")
                   2730:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2731:                     (match_operand:SI 2 "small_int" "")))
                   2732:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2733:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2734:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2735:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2736:    && (INTVAL (operands[2]) & 32) != 0"
                   2737: 
                   2738:   [(set (subreg:SI (match_dup 0) 1) (lshiftrt:SI (subreg:SI (match_dup 1) 0) (match_dup 2)))
                   2739:    (set (subreg:SI (match_dup 0) 0) (const_int 0))]
                   2740: 
                   2741:   "operands[2] = gen_rtx (CONST_INT, VOIDmode, (XINT (operands[2], 0))& 0x1f);")
                   2742: 
                   2743: 
                   2744: (define_insn "lshrdi3_internal3"
                   2745:   [(set (match_operand:DI 0 "register_operand" "=d")
                   2746:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "d")
                   2747:                   (match_operand:SI 2 "small_int" "IJK")))
                   2748:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   2749:   "!TARGET_DEBUG_G_MODE
                   2750:    && (INTVAL (operands[2]) & 63) < 32
                   2751:    && (INTVAL (operands[2]) & 63) != 0"
                   2752:   "*
                   2753: {
                   2754:   int amount = INTVAL (operands[2]);
                   2755: 
                   2756:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2757:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2758: 
                   2759:   return \"srl\\t%L0,%L1,%2\;sll\\t%3,%M1,%4\;or\\t%L0,%L0,%3\;srl\\t%M0,%M1,%2\";
                   2760: }"
                   2761:   [(set_attr "type"    "darith")
                   2762:    (set_attr "mode"    "DI")
                   2763:    (set_attr "length"  "4")])
                   2764: 
                   2765: 
                   2766: (define_split
                   2767:   [(set (match_operand:DI 0 "register_operand" "")
                   2768:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2769:                     (match_operand:SI 2 "small_int" "")))
                   2770:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2771:   "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2772:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2773:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2774:    && (INTVAL (operands[2]) & 63) < 32
                   2775:    && (INTVAL (operands[2]) & 63) != 0"
                   2776: 
                   2777:   [(set (subreg:SI (match_dup 0) 0)
                   2778:        (lshiftrt:SI (subreg:SI (match_dup 1) 0)
                   2779:                     (match_dup 2)))
                   2780: 
                   2781:    (set (match_dup 3)
                   2782:        (ashift:SI (subreg:SI (match_dup 1) 1)
                   2783:                   (match_dup 4)))
                   2784: 
                   2785:    (set (subreg:SI (match_dup 0) 0)
                   2786:        (ior:SI (subreg:SI (match_dup 0) 0)
                   2787:                (match_dup 3)))
                   2788: 
                   2789:    (set (subreg:SI (match_dup 0) 1)
                   2790:        (lshiftrt:SI (subreg:SI (match_dup 1) 1)
                   2791:                     (match_dup 2)))]
                   2792:   "
                   2793: {
                   2794:   int amount = INTVAL (operands[2]);
                   2795:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2796:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2797: }")
                   2798: 
                   2799: 
                   2800: (define_split
                   2801:   [(set (match_operand:DI 0 "register_operand" "")
                   2802:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   2803:                     (match_operand:SI 2 "small_int" "")))
                   2804:    (clobber (match_operand:SI 3 "register_operand" ""))]
                   2805:   "reload_completed && WORDS_BIG_ENDIAN && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE
                   2806:    && GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER
                   2807:    && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
                   2808:    && (INTVAL (operands[2]) & 63) < 32
                   2809:    && (INTVAL (operands[2]) & 63) != 0"
                   2810: 
                   2811:   [(set (subreg:SI (match_dup 0) 1)
                   2812:        (lshiftrt:SI (subreg:SI (match_dup 1) 1)
                   2813:                     (match_dup 2)))
                   2814: 
                   2815:    (set (match_dup 3)
                   2816:        (ashift:SI (subreg:SI (match_dup 1) 0)
                   2817:                   (match_dup 4)))
                   2818: 
                   2819:    (set (subreg:SI (match_dup 0) 1)
                   2820:        (ior:SI (subreg:SI (match_dup 0) 1)
                   2821:                (match_dup 3)))
                   2822: 
                   2823:    (set (subreg:SI (match_dup 0) 0)
                   2824:        (lshiftrt:SI (subreg:SI (match_dup 1) 0)
                   2825:                     (match_dup 2)))]
                   2826:   "
                   2827: {
                   2828:   int amount = INTVAL (operands[2]);
                   2829:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (amount & 31));
                   2830:   operands[4] = gen_rtx (CONST_INT, VOIDmode, ((-amount) & 31));
                   2831: }")
                   2832: 
                   2833: 
                   2834: ;;
                   2835: ;;  ....................
                   2836: ;;
                   2837: ;;     COMPARISONS
                   2838: ;;
                   2839: ;;  ....................
                   2840: 
                   2841: ;; Flow here is rather complex:
                   2842: ;;
                   2843: ;;  1) The cmp{si,sf,df} routine is called.  It deposits the
                   2844: ;;     arguments into the branch_cmp array, and the type into
                   2845: ;;     branch_type.  No RTL is generated.
                   2846: ;;
                   2847: ;;  2) The appropriate branch define_expand is called, which then
                   2848: ;;     creates the appropriate RTL for the comparison and branch.
                   2849: ;;     Different CC modes are used, based on what type of branch is
                   2850: ;;     done, so that we can constrain things appropriately.  There
                   2851: ;;     are assumptions in the rest of GCC that break if we fold the
                   2852: ;;     operands into the branchs for integer operations, and use cc0
                   2853: ;;     for floating point, so we use the fp status register instead.
                   2854: ;;     If needed, an appropriate temporary is created to hold the
                   2855: ;;     of the integer compare.
                   2856: 
                   2857: (define_expand "cmpsi"
                   2858:   [(set (cc0)
                   2859:        (compare:CC (match_operand:SI 0 "register_operand" "")
                   2860:                    (match_operand:SI 1 "arith_operand" "")))]
                   2861:   ""
                   2862:   "
                   2863: {
                   2864:   if (operands[0])             /* avoid unused code message */
                   2865:     {
                   2866:       branch_cmp[0] = operands[0];
                   2867:       branch_cmp[1] = operands[1];
                   2868:       branch_type = CMP_SI;
                   2869:       DONE;
                   2870:     }
                   2871: }")
                   2872: 
                   2873: (define_expand "tstsi"
                   2874:   [(set (cc0)
                   2875:        (match_operand:SI 0 "register_operand" ""))]
                   2876:   ""
                   2877:   "
                   2878: {
                   2879:   if (operands[0])             /* avoid unused code message */
                   2880:     {
                   2881:       branch_cmp[0] = operands[0];
                   2882:       branch_cmp[1] = const0_rtx;
                   2883:       branch_type = CMP_SI;
                   2884:       DONE;
                   2885:     }
                   2886: }")
                   2887: 
                   2888: (define_expand "cmpdf"
                   2889:   [(set (cc0)
                   2890:        (compare:CC_FP (match_operand:DF 0 "register_operand" "")
                   2891:                       (match_operand:DF 1 "register_operand" "")))]
                   2892:   "TARGET_HARD_FLOAT"
                   2893:   "
                   2894: {
                   2895:   if (operands[0])             /* avoid unused code message */
                   2896:     {
                   2897:       branch_cmp[0] = operands[0];
                   2898:       branch_cmp[1] = operands[1];
                   2899:       branch_type = CMP_DF;
                   2900:       DONE;
                   2901:     }
                   2902: }")
                   2903: 
                   2904: (define_expand "cmpsf"
                   2905:   [(set (cc0)
                   2906:        (compare:CC_FP (match_operand:SF 0 "register_operand" "")
                   2907:                       (match_operand:SF 1 "register_operand" "")))]
                   2908:   "TARGET_HARD_FLOAT"
                   2909:   "
                   2910: {
                   2911:   if (operands[0])             /* avoid unused code message */
                   2912:     {
                   2913:       branch_cmp[0] = operands[0];
                   2914:       branch_cmp[1] = operands[1];
                   2915:       branch_type = CMP_SF;
                   2916:       DONE;
                   2917:     }
                   2918: }")
                   2919: 
                   2920: 
                   2921: ;;
                   2922: ;;  ....................
                   2923: ;;
                   2924: ;;     CONDITIONAL BRANCHES
                   2925: ;;
                   2926: ;;  ....................
                   2927: 
                   2928: (define_insn "branch_fp_ne"
                   2929:   [(set (pc)
                   2930:        (if_then_else (ne:CC_FP (reg:CC_FP 66)
                   2931:                                (const_int 0))
                   2932:                      (match_operand 0 "pc_or_label_operand" "")
                   2933:                      (match_operand 1 "pc_or_label_operand" "")))]
                   2934:   ""
                   2935:   "*
                   2936: {
                   2937:   mips_branch_likely = (final_sequence && INSN_ANNULLED_BRANCH_P (insn));
                   2938:   return (operands[0] != pc_rtx) ? \"%*bc1t%?\\t%0\" : \"%*bc1f%?\\t%1\";
                   2939: }"
                   2940:   [(set_attr "type"    "branch")
                   2941:    (set_attr "mode"    "none")
                   2942:    (set_attr "length"  "1")])
                   2943: 
                   2944: (define_insn "branch_fp_ne_rev"
                   2945:   [(set (pc)
                   2946:        (if_then_else (ne:CC_REV_FP (reg:CC_REV_FP 66)
                   2947:                                    (const_int 0))
                   2948:                      (match_operand 0 "pc_or_label_operand" "")
                   2949:                      (match_operand 1 "pc_or_label_operand" "")))]
                   2950:   ""
                   2951:   "*
                   2952: {
                   2953:   mips_branch_likely = (final_sequence && INSN_ANNULLED_BRANCH_P (insn));
                   2954:   return (operands[0] != pc_rtx) ? \"%*bc1f%?\\t%0\" : \"%*bc1t%?\\t%1\";
                   2955: }"
                   2956:   [(set_attr "type"    "branch")
                   2957:    (set_attr "mode"    "none")
                   2958:    (set_attr "length"  "1")])
                   2959: 
                   2960: (define_insn "branch_fp_eq"
                   2961:   [(set (pc)
                   2962:        (if_then_else (eq:CC_FP (reg:CC_FP 66)
                   2963:                                (const_int 0))
                   2964:                      (match_operand 0 "pc_or_label_operand" "")
                   2965:                      (match_operand 1 "pc_or_label_operand" "")))]
                   2966:   ""
                   2967:   "*
                   2968: {
                   2969:   mips_branch_likely = (final_sequence && INSN_ANNULLED_BRANCH_P (insn));
                   2970:   return (operands[0] != pc_rtx) ? \"%*bc1f%?\\t%0\" : \"%*bc1t%?\\t%1\";
                   2971: }"
                   2972:   [(set_attr "type"    "branch")
                   2973:    (set_attr "mode"    "none")
                   2974:    (set_attr "length"  "1")])
                   2975: 
                   2976: (define_insn "branch_fp_eq_rev"
                   2977:   [(set (pc)
                   2978:        (if_then_else (eq:CC_REV_FP (reg:CC_REV_FP 66)
                   2979:                                    (const_int 0))
                   2980:                      (match_operand 0 "pc_or_label_operand" "")
                   2981:                      (match_operand 1 "pc_or_label_operand" "")))]
                   2982:   ""
                   2983:   "*
                   2984: {
                   2985:   mips_branch_likely = (final_sequence && INSN_ANNULLED_BRANCH_P (insn));
                   2986:   return (operands[0] != pc_rtx) ? \"%*bc1t%?\\t%0\" : \"%*bc1f%?\\t%1\";
                   2987: }"
                   2988:   [(set_attr "type"    "branch")
                   2989:    (set_attr "mode"    "none")
                   2990:    (set_attr "length"  "1")])
                   2991: 
                   2992: 
                   2993: (define_insn "branch_zero"
                   2994:   [(set (pc)
                   2995:        (if_then_else (match_operator:SI 0 "cmp_op"
                   2996:                                         [(match_operand:SI 1 "register_operand" "d")
                   2997:                                          (const_int 0)])
                   2998:        (match_operand 2 "pc_or_label_operand" "")
                   2999:        (match_operand 3 "pc_or_label_operand" "")))]
                   3000:   ""
                   3001:   "*
                   3002: {
                   3003:   mips_branch_likely = (final_sequence && INSN_ANNULLED_BRANCH_P (insn));
                   3004:   if (operands[2] != pc_rtx)
                   3005:     {                          /* normal jump */
                   3006:       switch (GET_CODE (operands[0]))
                   3007:        {
                   3008:        case EQ:  return \"%*beq%?\\t%z1,%.,%2\";
                   3009:        case NE:  return \"%*bne%?\\t%z1,%.,%2\";
                   3010:        case GTU: return \"%*bne%?\\t%z1,%.,%2\";
                   3011:        case LEU: return \"%*beq%?\\t%z1,%.,%2\";
                   3012:        case GEU: return \"%*j\\t%2\";
                   3013:        case LTU: return \"%*bne%?\\t%.,%.,%2\";
                   3014:        }
                   3015: 
                   3016:       return \"%*b%C0z%?\\t%z1,%2\";
                   3017:     }
                   3018:   else
                   3019:     {                          /* inverted jump */
                   3020:       switch (GET_CODE (operands[0]))
                   3021:        {
                   3022:        case EQ:  return \"%*bne%?\\t%z1,%.,%3\";
                   3023:        case NE:  return \"%*beq%?\\t%z1,%.,%3\";
                   3024:        case GTU: return \"%*beq%?\\t%z1,%.,%3\";
                   3025:        case LEU: return \"%*bne%?\\t%z1,%.,%3\";
                   3026:        case GEU: return \"%*beq%?\\t%.,%.,%3\";
                   3027:        case LTU: return \"%*j\\t%3\";
                   3028:        }
                   3029: 
                   3030:       return \"%*b%N0z%?\\t%z1,%3\";
                   3031:     }
                   3032: }"
                   3033:   [(set_attr "type"    "branch")
                   3034:    (set_attr "mode"    "none")
                   3035:    (set_attr "length"  "1")])
                   3036: 
                   3037: 
                   3038: (define_insn "branch_equality"
                   3039:   [(set (pc)
                   3040:        (if_then_else (match_operator:SI 0 "equality_op"
                   3041:                                         [(match_operand:SI 1 "register_operand" "d")
                   3042:                                          (match_operand:SI 2 "register_operand" "d")])
                   3043:        (match_operand 3 "pc_or_label_operand" "")
                   3044:        (match_operand 4 "pc_or_label_operand" "")))]
                   3045:   ""
                   3046:   "*
                   3047: {
                   3048:   mips_branch_likely = (final_sequence && INSN_ANNULLED_BRANCH_P (insn));
                   3049:   return (operands[3] != pc_rtx)
                   3050:        ? \"%*b%C0%?\\t%z1,%z2,%3\"
                   3051:        : \"%*b%N0%?\\t%z1,%z2,%4\";
                   3052: }"
                   3053:   [(set_attr "type"    "branch")
                   3054:    (set_attr "mode"    "none")
                   3055:    (set_attr "length"  "1")])
                   3056: 
                   3057: 
                   3058: (define_expand "beq"
                   3059:   [(set (pc)
                   3060:        (if_then_else (eq:CC_EQ (cc0)
                   3061:                                (const_int 0))
                   3062:                      (label_ref (match_operand 0 "" ""))
                   3063:                      (pc)))]
                   3064:   ""
                   3065:   "
                   3066: {
                   3067:   if (operands[0])             /* avoid unused code warning */
                   3068:     {
                   3069:       gen_conditional_branch (operands, EQ);
                   3070:       DONE;
                   3071:     }
                   3072: }")
                   3073: 
                   3074: (define_expand "bne"
                   3075:   [(set (pc)
                   3076:        (if_then_else (ne:CC_EQ (cc0)
                   3077:                                (const_int 0))
                   3078:                      (label_ref (match_operand 0 "" ""))
                   3079:                      (pc)))]
                   3080:   ""
                   3081:   "
                   3082: {
                   3083:   if (operands[0])             /* avoid unused code warning */
                   3084:     {
                   3085:       gen_conditional_branch (operands, NE);
                   3086:       DONE;
                   3087:     }
                   3088: }")
                   3089: 
                   3090: (define_expand "bgt"
                   3091:   [(set (pc)
                   3092:        (if_then_else (gt:CC (cc0)
                   3093:                             (const_int 0))
                   3094:                      (label_ref (match_operand 0 "" ""))
                   3095:                      (pc)))]
                   3096:   ""
                   3097:   "
                   3098: {
                   3099:   if (operands[0])             /* avoid unused code warning */
                   3100:     {
                   3101:       gen_conditional_branch (operands, GT);
                   3102:       DONE;
                   3103:     }
                   3104: }")
                   3105: 
                   3106: (define_expand "bge"
                   3107:   [(set (pc)
                   3108:        (if_then_else (ge:CC (cc0)
                   3109:                             (const_int 0))
                   3110:                      (label_ref (match_operand 0 "" ""))
                   3111:                      (pc)))]
                   3112:   ""
                   3113:   "
                   3114: {
                   3115:   if (operands[0])             /* avoid unused code warning */
                   3116:     {
                   3117:       gen_conditional_branch (operands, GE);
                   3118:       DONE;
                   3119:     }
                   3120: }")
                   3121: 
                   3122: (define_expand "blt"
                   3123:   [(set (pc)
                   3124:        (if_then_else (lt:CC (cc0)
                   3125:                             (const_int 0))
                   3126:                      (label_ref (match_operand 0 "" ""))
                   3127:                      (pc)))]
                   3128:   ""
                   3129:   "
                   3130: {
                   3131:   if (operands[0])             /* avoid unused code warning */
                   3132:     {
                   3133:       gen_conditional_branch (operands, LT);
                   3134:       DONE;
                   3135:     }
                   3136: }")
                   3137: 
                   3138: (define_expand "ble"
                   3139:   [(set (pc)
                   3140:        (if_then_else (le:CC (cc0)
                   3141:                             (const_int 0))
                   3142:                      (label_ref (match_operand 0 "" ""))
                   3143:                      (pc)))]
                   3144:   ""
                   3145:   "
                   3146: {
                   3147:   if (operands[0])             /* avoid unused code warning */
                   3148:     {
                   3149:       gen_conditional_branch (operands, LE);
                   3150:       DONE;
                   3151:     }
                   3152: }")
                   3153: 
                   3154: (define_expand "bgtu"
                   3155:   [(set (pc)
                   3156:        (if_then_else (gtu:CC (cc0)
                   3157:                              (const_int 0))
                   3158:                      (label_ref (match_operand 0 "" ""))
                   3159:                      (pc)))]
                   3160:   ""
                   3161:   "
                   3162: {
                   3163:   if (operands[0])             /* avoid unused code warning */
                   3164:     {
                   3165:       gen_conditional_branch (operands, GTU);
                   3166:       DONE;
                   3167:     }
                   3168: }")
                   3169: 
                   3170: (define_expand "bgeu"
                   3171:   [(set (pc)
                   3172:        (if_then_else (geu:CC (cc0)
                   3173:                              (const_int 0))
                   3174:                      (label_ref (match_operand 0 "" ""))
                   3175:                      (pc)))]
                   3176:   ""
                   3177:   "
                   3178: {
                   3179:   if (operands[0])             /* avoid unused code warning */
                   3180:     {
                   3181:       gen_conditional_branch (operands, GEU);
                   3182:       DONE;
                   3183:     }
                   3184: }")
                   3185: 
                   3186: 
                   3187: (define_expand "bltu"
                   3188:   [(set (pc)
                   3189:        (if_then_else (ltu:CC (cc0)
                   3190:                              (const_int 0))
                   3191:                      (label_ref (match_operand 0 "" ""))
                   3192:                      (pc)))]
                   3193:   ""
                   3194:   "
                   3195: {
                   3196:   if (operands[0])             /* avoid unused code warning */
                   3197:     {
                   3198:       gen_conditional_branch (operands, LTU);
                   3199:       DONE;
                   3200:     }
                   3201: }")
                   3202: 
                   3203: (define_expand "bleu"
                   3204:   [(set (pc)
                   3205:        (if_then_else (leu:CC (cc0)
                   3206:                              (const_int 0))
                   3207:                      (label_ref (match_operand 0 "" ""))
                   3208:                      (pc)))]
                   3209:   ""
                   3210:   "
                   3211: {
                   3212:   if (operands[0])             /* avoid unused code warning */
                   3213:     {
                   3214:       gen_conditional_branch (operands, LEU);
                   3215:       DONE;
                   3216:     }
                   3217: }")
                   3218: 
                   3219: 
                   3220: ;;
                   3221: ;;  ....................
                   3222: ;;
                   3223: ;;     SETTING A REGISTER FROM A COMPARISON
                   3224: ;;
                   3225: ;;  ....................
                   3226: 
                   3227: (define_expand "seq"
                   3228:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3229:        (eq:SI (match_dup 1)
                   3230:               (match_dup 2)))]
                   3231:   ""
                   3232:   "
                   3233: {
                   3234:   if (branch_type != CMP_SI)
                   3235:     FAIL;
                   3236: 
                   3237:   /* set up operands from compare.  */
                   3238:   operands[1] = branch_cmp[0];
                   3239:   operands[2] = branch_cmp[1];
                   3240: 
                   3241:   if (!TARGET_DEBUG_C_MODE)
                   3242:     {
                   3243:       gen_int_relational (EQ, operands[0], operands[1], operands[2], (int *)0);
                   3244:       DONE;
                   3245:     }
                   3246: 
                   3247:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
                   3248:     operands[2] = force_reg (SImode, operands[2]);
                   3249: 
                   3250:   /* fall through and generate default code */
                   3251: }")
                   3252: 
                   3253: 
                   3254: (define_insn "seq_si_zero"
                   3255:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3256:        (eq:SI (match_operand:SI 1 "register_operand" "d")
                   3257:               (const_int 0)))]
                   3258:   ""
                   3259:   "sltu\\t%0,%1,1"
                   3260:  [(set_attr "type"     "arith")
                   3261:    (set_attr "mode"    "SI")
                   3262:    (set_attr "length"  "1")])
                   3263: 
                   3264: (define_insn "seq_si"
                   3265:   [(set (match_operand:SI 0 "register_operand" "=d,d")
                   3266:        (eq:SI (match_operand:SI 1 "register_operand" "%d,d")
                   3267:               (match_operand:SI 2 "uns_arith_operand" "d,K")))]
                   3268:   "TARGET_DEBUG_C_MODE"
                   3269:   "@
                   3270:    xor\\t%0,%1,%2\;sltu\\t%0,%0,1
                   3271:    xori\\t%0,%1,%2\;sltu\\t%0,%0,1"
                   3272:  [(set_attr "type"     "arith")
                   3273:    (set_attr "mode"    "SI")
                   3274:    (set_attr "length"  "2")])
                   3275: 
                   3276: (define_split
                   3277:   [(set (match_operand:SI 0 "register_operand" "")
                   3278:        (eq:SI (match_operand:SI 1 "register_operand" "")
                   3279:               (match_operand:SI 2 "uns_arith_operand" "")))]
                   3280:   "TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
                   3281:     && (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0)"
                   3282:   [(set (match_dup 0)
                   3283:        (xor:SI (match_dup 1)
                   3284:                (match_dup 2)))
                   3285:    (set (match_dup 0)
                   3286:        (ltu:SI (match_dup 0)
                   3287:                (const_int 1)))]
                   3288:   "")
                   3289: 
                   3290: (define_expand "sne"
                   3291:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3292:        (ne:SI (match_dup 1)
                   3293:               (match_dup 2)))]
                   3294:   ""
                   3295:   "
                   3296: {
                   3297:   if (branch_type != CMP_SI)
                   3298:     FAIL;
                   3299: 
                   3300:   /* set up operands from compare.  */
                   3301:   operands[1] = branch_cmp[0];
                   3302:   operands[2] = branch_cmp[1];
                   3303: 
                   3304:   if (!TARGET_DEBUG_C_MODE)
                   3305:     {
                   3306:       gen_int_relational (NE, operands[0], operands[1], operands[2], (int *)0);
                   3307:       DONE;
                   3308:     }
                   3309: 
                   3310:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
                   3311:     operands[2] = force_reg (SImode, operands[2]);
                   3312: 
                   3313:   /* fall through and generate default code */
                   3314: }")
                   3315: 
                   3316: (define_insn "sne_si_zero"
                   3317:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3318:        (ne:SI (match_operand:SI 1 "register_operand" "d")
                   3319:               (const_int 0)))]
                   3320:   ""
                   3321:   "sltu\\t%0,%.,%1"
                   3322:  [(set_attr "type"     "arith")
                   3323:    (set_attr "mode"    "SI")
                   3324:    (set_attr "length"  "1")])
                   3325: 
                   3326: (define_insn "sne_si"
                   3327:   [(set (match_operand:SI 0 "register_operand" "=d,d")
                   3328:        (ne:SI (match_operand:SI 1 "register_operand" "%d,d")
                   3329:               (match_operand:SI 2 "uns_arith_operand" "d,K")))]
                   3330:   "TARGET_DEBUG_C_MODE"
                   3331:   "@
                   3332:     xor\\t%0,%1,%2\;sltu\\t%0,%.,%0
                   3333:     xori\\t%0,%1,%x2\;sltu\\t%0,%.,%0"
                   3334:  [(set_attr "type"     "arith")
                   3335:    (set_attr "mode"    "SI")
                   3336:    (set_attr "length"  "2")])
                   3337: 
                   3338: (define_split
                   3339:   [(set (match_operand:SI 0 "register_operand" "")
                   3340:        (ne:SI (match_operand:SI 1 "register_operand" "")
                   3341:               (match_operand:SI 2 "uns_arith_operand" "")))]
                   3342:   "TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE
                   3343:     && (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0)"
                   3344:   [(set (match_dup 0)
                   3345:        (xor:SI (match_dup 1)
                   3346:                (match_dup 2)))
                   3347:    (set (match_dup 0)
                   3348:        (gtu:SI (match_dup 0)
                   3349:                (const_int 0)))]
                   3350:   "")
                   3351: 
                   3352: (define_expand "sgt"
                   3353:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3354:        (gt:SI (match_dup 1)
                   3355:               (match_dup 2)))]
                   3356:   ""
                   3357:   "
                   3358: {
                   3359:   if (branch_type != CMP_SI)
                   3360:     FAIL;
                   3361: 
                   3362:   /* set up operands from compare.  */
                   3363:   operands[1] = branch_cmp[0];
                   3364:   operands[2] = branch_cmp[1];
                   3365: 
                   3366:   if (!TARGET_DEBUG_C_MODE)
                   3367:     {
                   3368:       gen_int_relational (GT, operands[0], operands[1], operands[2], (int *)0);
                   3369:       DONE;
                   3370:     }
                   3371: 
                   3372:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) != 0)
                   3373:     operands[2] = force_reg (SImode, operands[2]);
                   3374: 
                   3375:   /* fall through and generate default code */
                   3376: }")
                   3377: 
                   3378: (define_insn "sgt_si"
                   3379:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3380:        (gt:SI (match_operand:SI 1 "register_operand" "d")
                   3381:               (match_operand:SI 2 "reg_or_0_operand" "dJ")))]
                   3382:   ""
                   3383:   "slt\\t%0,%z2,%1"
                   3384:  [(set_attr "type"     "arith")
                   3385:    (set_attr "mode"    "SI")
                   3386:    (set_attr "length"  "1")])
                   3387: 
                   3388: (define_expand "sge"
                   3389:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3390:        (ge:SI (match_dup 1)
                   3391:               (match_dup 2)))]
                   3392:   ""
                   3393:   "
                   3394: {
                   3395:   if (branch_type != CMP_SI)
                   3396:     FAIL;
                   3397: 
                   3398:   /* set up operands from compare.  */
                   3399:   operands[1] = branch_cmp[0];
                   3400:   operands[2] = branch_cmp[1];
                   3401: 
                   3402:   if (!TARGET_DEBUG_C_MODE)
                   3403:     {
                   3404:       gen_int_relational (GE, operands[0], operands[1], operands[2], (int *)0);
                   3405:       DONE;
                   3406:     }
                   3407: 
                   3408:   /* fall through and generate default code */
                   3409: }")
                   3410: 
                   3411: (define_insn "sge_si"
                   3412:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3413:        (ge:SI (match_operand:SI 1 "register_operand" "d")
                   3414:               (match_operand:SI 2 "arith_operand" "dI")))]
                   3415:   "TARGET_DEBUG_C_MODE"
                   3416:   "slt\\t%0,%1,%2\;xori\\t%0,%0,0x0001"
                   3417:  [(set_attr "type"     "arith")
                   3418:    (set_attr "mode"    "SI")
                   3419:    (set_attr "length"  "2")])
                   3420: 
                   3421: (define_split
                   3422:   [(set (match_operand:SI 0 "register_operand" "")
                   3423:        (ge:SI (match_operand:SI 1 "register_operand" "")
                   3424:               (match_operand:SI 2 "arith_operand" "")))]
                   3425:   "TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE"
                   3426:   [(set (match_dup 0)
                   3427:        (lt:SI (match_dup 1)
                   3428:               (match_dup 2)))
                   3429:    (set (match_dup 0)
                   3430:        (xor:SI (match_dup 0)
                   3431:                (const_int 1)))]
                   3432:   "")
                   3433: 
                   3434: (define_expand "slt"
                   3435:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3436:        (lt:SI (match_dup 1)
                   3437:               (match_dup 2)))]
                   3438:   ""
                   3439:   "
                   3440: {
                   3441:   if (branch_type != CMP_SI)
                   3442:     FAIL;
                   3443: 
                   3444:   /* set up operands from compare.  */
                   3445:   operands[1] = branch_cmp[0];
                   3446:   operands[2] = branch_cmp[1];
                   3447: 
                   3448:   if (!TARGET_DEBUG_C_MODE)
                   3449:     {
                   3450:       gen_int_relational (LT, operands[0], operands[1], operands[2], (int *)0);
                   3451:       DONE;
                   3452:     }
                   3453: 
                   3454:   /* fall through and generate default code */
                   3455: }")
                   3456: 
                   3457: (define_insn "slt_si"
                   3458:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3459:        (lt:SI (match_operand:SI 1 "register_operand" "d")
                   3460:               (match_operand:SI 2 "arith_operand" "dI")))]
                   3461:   ""
                   3462:   "slt\\t%0,%1,%2"
                   3463:  [(set_attr "type"     "arith")
                   3464:    (set_attr "mode"    "SI")
                   3465:    (set_attr "length"  "1")])
                   3466: 
                   3467: (define_expand "sle"
                   3468:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3469:        (le:SI (match_dup 1)
                   3470:               (match_dup 2)))]
                   3471:   ""
                   3472:   "
                   3473: {
                   3474:   if (branch_type != CMP_SI)
                   3475:     FAIL;
                   3476: 
                   3477:   /* set up operands from compare.  */
                   3478:   operands[1] = branch_cmp[0];
                   3479:   operands[2] = branch_cmp[1];
                   3480: 
                   3481:   if (!TARGET_DEBUG_C_MODE)
                   3482:     {
                   3483:       gen_int_relational (LE, operands[0], operands[1], operands[2], (int *)0);
                   3484:       DONE;
                   3485:     }
                   3486: 
                   3487:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 32767)
                   3488:     operands[2] = force_reg (SImode, operands[2]);
                   3489: 
                   3490:   /* fall through and generate default code */
                   3491: }")
                   3492: 
                   3493: (define_insn "sle_si_const"
                   3494:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3495:        (le:SI (match_operand:SI 1 "register_operand" "d")
                   3496:               (match_operand:SI 2 "small_int" "I")))]
                   3497:   "INTVAL (operands[2]) < 32767"
                   3498:   "*
                   3499: {
                   3500:   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2])+1);
                   3501:   return \"slt\\t%0,%1,%2\";
                   3502: }"
                   3503:  [(set_attr "type"     "arith")
                   3504:    (set_attr "mode"    "SI")
                   3505:    (set_attr "length"  "1")])
                   3506: 
                   3507: (define_insn "sle_si_reg"
                   3508:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3509:        (le:SI (match_operand:SI 1 "register_operand" "d")
                   3510:               (match_operand:SI 2 "register_operand" "d")))]
                   3511:   "TARGET_DEBUG_C_MODE"
                   3512:   "slt\\t%0,%z2,%1\;xori\\t%0,%0,0x0001"
                   3513:  [(set_attr "type"     "arith")
                   3514:    (set_attr "mode"    "SI")
                   3515:    (set_attr "length"  "2")])
                   3516: 
                   3517: (define_split
                   3518:   [(set (match_operand:SI 0 "register_operand" "")
                   3519:        (le:SI (match_operand:SI 1 "register_operand" "")
                   3520:               (match_operand:SI 2 "register_operand" "")))]
                   3521:   "TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE"
                   3522:   [(set (match_dup 0)
                   3523:        (lt:SI (match_dup 2)
                   3524:               (match_dup 1)))
                   3525:    (set (match_dup 0)
                   3526:        (xor:SI (match_dup 0)
                   3527:                (const_int 1)))]
                   3528:   "")
                   3529: 
                   3530: (define_expand "sgtu"
                   3531:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3532:        (gtu:SI (match_dup 1)
                   3533:                (match_dup 2)))]
                   3534:   ""
                   3535:   "
                   3536: {
                   3537:   if (branch_type != CMP_SI)
                   3538:     FAIL;
                   3539: 
                   3540:   /* set up operands from compare.  */
                   3541:   operands[1] = branch_cmp[0];
                   3542:   operands[2] = branch_cmp[1];
                   3543: 
                   3544:   if (!TARGET_DEBUG_C_MODE)
                   3545:     {
                   3546:       gen_int_relational (GTU, operands[0], operands[1], operands[2], (int *)0);
                   3547:       DONE;
                   3548:     }
                   3549: 
                   3550:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) != 0)
                   3551:     operands[2] = force_reg (SImode, operands[2]);
                   3552: 
                   3553:   /* fall through and generate default code */
                   3554: }")
                   3555: 
                   3556: (define_insn "sgtu_si"
                   3557:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3558:        (gtu:SI (match_operand:SI 1 "register_operand" "d")
                   3559:                (match_operand:SI 2 "reg_or_0_operand" "dJ")))]
                   3560:   ""
                   3561:   "sltu\\t%0,%z2,%1"
                   3562:  [(set_attr "type"     "arith")
                   3563:    (set_attr "mode"    "SI")
                   3564:    (set_attr "length"  "1")])
                   3565: 
                   3566: (define_expand "sgeu"
                   3567:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3568:         (geu:SI (match_dup 1)
                   3569:                 (match_dup 2)))]
                   3570:   ""
                   3571:   "
                   3572: {
                   3573:   if (branch_type != CMP_SI)
                   3574:     FAIL;
                   3575: 
                   3576:   /* set up operands from compare.  */
                   3577:   operands[1] = branch_cmp[0];
                   3578:   operands[2] = branch_cmp[1];
                   3579: 
                   3580:   if (!TARGET_DEBUG_C_MODE)
                   3581:     {
                   3582:       gen_int_relational (GEU, operands[0], operands[1], operands[2], (int *)0);
                   3583:       DONE;
                   3584:     }
                   3585: 
                   3586:   /* fall through and generate default code */
                   3587: }")
                   3588: 
                   3589: (define_insn "sgeu_si"
                   3590:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3591:        (geu:SI (match_operand:SI 1 "register_operand" "d")
                   3592:                (match_operand:SI 2 "arith_operand" "dI")))]
                   3593:   "TARGET_DEBUG_C_MODE"
                   3594:   "sltu\\t%0,%1,%2\;xori\\t%0,%0,0x0001"
                   3595:  [(set_attr "type"     "arith")
                   3596:    (set_attr "mode"    "SI")
                   3597:    (set_attr "length"  "2")])
                   3598: 
                   3599: (define_split
                   3600:   [(set (match_operand:SI 0 "register_operand" "")
                   3601:        (geu:SI (match_operand:SI 1 "register_operand" "")
                   3602:                (match_operand:SI 2 "arith_operand" "")))]
                   3603:   "TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE"
                   3604:   [(set (match_dup 0)
                   3605:        (ltu:SI (match_dup 1)
                   3606:                (match_dup 2)))
                   3607:    (set (match_dup 0)
                   3608:        (xor:SI (match_dup 0)
                   3609:                (const_int 1)))]
                   3610:   "")
                   3611: 
                   3612: (define_expand "sltu"
                   3613:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3614:        (ltu:SI (match_dup 1)
                   3615:                (match_dup 2)))]
                   3616:   ""
                   3617:   "
                   3618: {
                   3619:   if (branch_type != CMP_SI)
                   3620:     FAIL;
                   3621: 
                   3622:   /* set up operands from compare.  */
                   3623:   operands[1] = branch_cmp[0];
                   3624:   operands[2] = branch_cmp[1];
                   3625: 
                   3626:   if (!TARGET_DEBUG_C_MODE)
                   3627:     {
                   3628:       gen_int_relational (LTU, operands[0], operands[1], operands[2], (int *)0);
                   3629:       DONE;
                   3630:     }
                   3631: 
                   3632:   /* fall through and generate default code */
                   3633: }")
                   3634: 
                   3635: (define_insn "sltu_si"
                   3636:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3637:        (ltu:SI (match_operand:SI 1 "register_operand" "d")
                   3638:                (match_operand:SI 2 "arith_operand" "dI")))]
                   3639:   ""
                   3640:   "sltu\\t%0,%1,%2"
                   3641:  [(set_attr "type"     "arith")
                   3642:    (set_attr "mode"    "SI")
                   3643:    (set_attr "length"  "1")])
                   3644: 
                   3645: (define_expand "sleu"
                   3646:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3647:        (leu:SI (match_dup 1)
                   3648:                (match_dup 2)))]
                   3649:   ""
                   3650:   "
                   3651: {
                   3652:   if (branch_type != CMP_SI)
                   3653:     FAIL;
                   3654: 
                   3655:   /* set up operands from compare.  */
                   3656:   operands[1] = branch_cmp[0];
                   3657:   operands[2] = branch_cmp[1];
                   3658: 
                   3659:   if (!TARGET_DEBUG_C_MODE)
                   3660:     {
                   3661:       gen_int_relational (LEU, operands[0], operands[1], operands[2], (int *)0);
                   3662:       DONE;
                   3663:     }
                   3664: 
                   3665:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 32767)
                   3666:     operands[2] = force_reg (SImode, operands[2]);
                   3667: 
                   3668:   /* fall through and generate default code */
                   3669: }")
                   3670: 
                   3671: (define_insn "sleu_si_const"
                   3672:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3673:        (leu:SI (match_operand:SI 1 "register_operand" "d")
                   3674:                (match_operand:SI 2 "small_int" "I")))]
                   3675:   "INTVAL (operands[2]) < 32767"
                   3676:   "*
                   3677: {
                   3678:   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2])+1);
                   3679:   return \"sltu\\t%0,%1,%2\";
                   3680: }"
                   3681:  [(set_attr "type"     "arith")
                   3682:    (set_attr "mode"    "SI")
                   3683:    (set_attr "length"  "1")])
                   3684: 
                   3685: (define_insn "sleu_si_reg"
                   3686:   [(set (match_operand:SI 0 "register_operand" "=d")
                   3687:        (leu:SI (match_operand:SI 1 "register_operand" "d")
                   3688:                (match_operand:SI 2 "register_operand" "d")))]
                   3689:   "TARGET_DEBUG_C_MODE"
                   3690:   "sltu\\t%0,%z2,%1\;xori\\t%0,%0,0x0001"
                   3691:  [(set_attr "type"     "arith")
                   3692:    (set_attr "mode"    "SI")
                   3693:    (set_attr "length"  "2")])
                   3694: 
                   3695: (define_split
                   3696:   [(set (match_operand:SI 0 "register_operand" "")
                   3697:        (leu:SI (match_operand:SI 1 "register_operand" "")
                   3698:                (match_operand:SI 2 "register_operand" "")))]
                   3699:   "TARGET_DEBUG_C_MODE && !TARGET_DEBUG_D_MODE"
                   3700:   [(set (match_dup 0)
                   3701:        (ltu:SI (match_dup 2)
                   3702:                (match_dup 1)))
                   3703:    (set (match_dup 0)
                   3704:        (xor:SI (match_dup 0)
                   3705:                (const_int 1)))]
                   3706:   "")
                   3707: 
                   3708: 
                   3709: ;;
                   3710: ;;  ....................
                   3711: ;;
                   3712: ;;     FLOATING POINT COMPARISONS
                   3713: ;;
                   3714: ;;  ....................
                   3715: 
                   3716: (define_insn "seq_df"
                   3717:   [(set (reg:CC_FP 66)
                   3718:        (eq:CC_FP (match_operand:DF 0 "register_operand" "f")
                   3719:                  (match_operand:DF 1 "register_operand" "f")))]
                   3720:   ""
                   3721:   "*
                   3722: {
                   3723:   rtx xoperands[10];
                   3724:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3725:   xoperands[1] = operands[0];
                   3726:   xoperands[2] = operands[1];
                   3727: 
                   3728:   return mips_fill_delay_slot (\"c.eq.d\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3729: }"
                   3730:  [(set_attr "type"     "fcmp")
                   3731:   (set_attr "mode"     "FPSW")
                   3732:   (set_attr "length"   "1")])
                   3733: 
                   3734: (define_insn "sne_df"
                   3735:   [(set (reg:CC_REV_FP 66)
                   3736:        (ne:CC_REV_FP (match_operand:DF 0 "register_operand" "f")
                   3737:                      (match_operand:DF 1 "register_operand" "f")))]
                   3738:   ""
                   3739:   "*
                   3740: {
                   3741:   rtx xoperands[10];
                   3742:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3743:   xoperands[1] = operands[0];
                   3744:   xoperands[2] = operands[1];
                   3745: 
                   3746:   return mips_fill_delay_slot (\"c.eq.d\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3747: }"
                   3748:  [(set_attr "type"     "fcmp")
                   3749:   (set_attr "mode"     "FPSW")
                   3750:   (set_attr "length"   "1")])
                   3751: 
                   3752: (define_insn "slt_df"
                   3753:   [(set (reg:CC_FP 66)
                   3754:        (lt:CC_FP (match_operand:DF 0 "register_operand" "f")
                   3755:                  (match_operand:DF 1 "register_operand" "f")))]
                   3756:   ""
                   3757:   "*
                   3758: {
                   3759:   rtx xoperands[10];
                   3760:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3761:   xoperands[1] = operands[0];
                   3762:   xoperands[2] = operands[1];
                   3763: 
                   3764:   return mips_fill_delay_slot (\"c.lt.d\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3765: }"
                   3766:  [(set_attr "type"     "fcmp")
                   3767:   (set_attr "mode"     "FPSW")
                   3768:   (set_attr "length"   "1")])
                   3769: 
                   3770: (define_insn "sle_df"
                   3771:   [(set (reg:CC_FP 66)
                   3772:        (le:CC_FP (match_operand:DF 0 "register_operand" "f")
                   3773:                  (match_operand:DF 1 "register_operand" "f")))]
                   3774:   ""
                   3775:   "*
                   3776: {
                   3777:   rtx xoperands[10];
                   3778:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3779:   xoperands[1] = operands[0];
                   3780:   xoperands[2] = operands[1];
                   3781: 
                   3782:   return mips_fill_delay_slot (\"c.le.d\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3783: }"
                   3784:  [(set_attr "type"     "fcmp")
                   3785:   (set_attr "mode"     "FPSW")
                   3786:   (set_attr "length"   "1")])
                   3787: 
                   3788: (define_insn "sgt_df"
                   3789:   [(set (reg:CC_FP 66)
                   3790:        (gt:CC_FP (match_operand:DF 0 "register_operand" "f")
                   3791:                  (match_operand:DF 1 "register_operand" "f")))]
                   3792:   ""
                   3793:   "*
                   3794: {
                   3795:   rtx xoperands[10];
                   3796:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3797:   xoperands[1] = operands[0];
                   3798:   xoperands[2] = operands[1];
                   3799: 
                   3800:   return mips_fill_delay_slot (\"c.lt.d\\t%1,%0\", DELAY_FCMP, xoperands, insn);
                   3801: }"
                   3802:  [(set_attr "type"     "fcmp")
                   3803:   (set_attr "mode"     "FPSW")
                   3804:   (set_attr "length"   "1")])
                   3805: 
                   3806: (define_insn "sge_df"
                   3807:   [(set (reg:CC_FP 66)
                   3808:        (ge:CC_FP (match_operand:DF 0 "register_operand" "f")
                   3809:                  (match_operand:DF 1 "register_operand" "f")))]
                   3810:   ""
                   3811:   "*
                   3812: {
                   3813:   rtx xoperands[10];
                   3814:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3815:   xoperands[1] = operands[0];
                   3816:   xoperands[2] = operands[1];
                   3817: 
                   3818:   return mips_fill_delay_slot (\"c.le.d\\t%1,%0\", DELAY_FCMP, xoperands, insn);
                   3819: }"
                   3820:  [(set_attr "type"     "fcmp")
                   3821:   (set_attr "mode"     "FPSW")
                   3822:   (set_attr "length"   "1")])
                   3823: 
                   3824: (define_insn "seq_sf"
                   3825:   [(set (reg:CC_FP 66)
                   3826:        (eq:CC_FP (match_operand:SF 0 "register_operand" "f")
                   3827:                  (match_operand:SF 1 "register_operand" "f")))]
                   3828:   ""
                   3829:   "*
                   3830: {
                   3831:   rtx xoperands[10];
                   3832:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3833:   xoperands[1] = operands[0];
                   3834:   xoperands[2] = operands[1];
                   3835: 
                   3836:   return mips_fill_delay_slot (\"c.eq.s\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3837: }"
                   3838:  [(set_attr "type"     "fcmp")
                   3839:   (set_attr "mode"     "FPSW")
                   3840:   (set_attr "length"   "1")])
                   3841: 
                   3842: (define_insn "sne_sf"
                   3843:   [(set (reg:CC_REV_FP 66)
                   3844:        (ne:CC_REV_FP (match_operand:SF 0 "register_operand" "f")
                   3845:                      (match_operand:SF 1 "register_operand" "f")))]
                   3846:   ""
                   3847:   "*
                   3848: {
                   3849:   rtx xoperands[10];
                   3850:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3851:   xoperands[1] = operands[0];
                   3852:   xoperands[2] = operands[1];
                   3853: 
                   3854:   return mips_fill_delay_slot (\"c.eq.s\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3855: }"
                   3856:  [(set_attr "type"     "fcmp")
                   3857:   (set_attr "mode"     "FPSW")
                   3858:   (set_attr "length"   "1")])
                   3859: 
                   3860: (define_insn "slt_sf"
                   3861:   [(set (reg:CC_FP 66)
                   3862:        (lt:CC_FP (match_operand:SF 0 "register_operand" "f")
                   3863:                  (match_operand:SF 1 "register_operand" "f")))]
                   3864:   ""
                   3865:   "*
                   3866: {
                   3867:   rtx xoperands[10];
                   3868:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3869:   xoperands[1] = operands[0];
                   3870:   xoperands[2] = operands[1];
                   3871: 
                   3872:   return mips_fill_delay_slot (\"c.lt.s\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3873: }"
                   3874:  [(set_attr "type"     "fcmp")
                   3875:   (set_attr "mode"     "FPSW")
                   3876:   (set_attr "length"   "1")])
                   3877: 
                   3878: (define_insn "sle_sf"
                   3879:   [(set (reg:CC_FP 66)
                   3880:        (le:CC_FP (match_operand:SF 0 "register_operand" "f")
                   3881:                  (match_operand:SF 1 "register_operand" "f")))]
                   3882:   ""
                   3883:   "*
                   3884: {
                   3885:   rtx xoperands[10];
                   3886:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3887:   xoperands[1] = operands[0];
                   3888:   xoperands[2] = operands[1];
                   3889: 
                   3890:   return mips_fill_delay_slot (\"c.le.s\\t%0,%1\", DELAY_FCMP, xoperands, insn);
                   3891: }"
                   3892:  [(set_attr "type"     "fcmp")
                   3893:   (set_attr "mode"     "FPSW")
                   3894:   (set_attr "length"   "1")])
                   3895: 
                   3896: (define_insn "sgt_sf"
                   3897:   [(set (reg:CC_FP 66)
                   3898:        (gt:CC_FP (match_operand:SF 0 "register_operand" "f")
                   3899:                  (match_operand:SF 1 "register_operand" "f")))]
                   3900:   ""
                   3901:   "*
                   3902: {
                   3903:   rtx xoperands[10];
                   3904:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3905:   xoperands[1] = operands[0];
                   3906:   xoperands[2] = operands[1];
                   3907: 
                   3908:   return mips_fill_delay_slot (\"c.lt.s\\t%1,%0\", DELAY_FCMP, xoperands, insn);
                   3909: }"
                   3910:  [(set_attr "type"     "fcmp")
                   3911:   (set_attr "mode"     "FPSW")
                   3912:   (set_attr "length"   "1")])
                   3913: 
                   3914: (define_insn "sge_sf"
                   3915:   [(set (reg:CC_FP 66)
                   3916:        (ge:CC_FP (match_operand:SF 0 "register_operand" "f")
                   3917:                  (match_operand:SF 1 "register_operand" "f")))]
                   3918:   ""
                   3919:   "*
                   3920: {
                   3921:   rtx xoperands[10];
                   3922:   xoperands[0] = gen_rtx (REG, CC_FPmode, FPSW_REGNUM);
                   3923:   xoperands[1] = operands[0];
                   3924:   xoperands[2] = operands[1];
                   3925: 
                   3926:   return mips_fill_delay_slot (\"c.le.s\\t%1,%0\", DELAY_FCMP, xoperands, insn);
                   3927: }"
                   3928:  [(set_attr "type"     "fcmp")
                   3929:   (set_attr "mode"     "FPSW")
                   3930:   (set_attr "length"   "1")])
                   3931: 
                   3932: 
                   3933: ;;
                   3934: ;;  ....................
                   3935: ;;
                   3936: ;;     UNCONDITIONAL BRANCHES
                   3937: ;;
                   3938: ;;  ....................
                   3939: 
                   3940: ;; Unconditional branches.
                   3941: 
                   3942: (define_insn "jump"
                   3943:   [(set (pc)
                   3944:        (label_ref (match_operand 0 "" "")))]
                   3945:   ""
                   3946:   "*
                   3947: {
                   3948:   if (GET_CODE (operands[0]) == REG)
                   3949:     return \"%*j\\t%0\";
                   3950:   else
                   3951:     return \"%*j\\t%l0\";
                   3952: }"
                   3953:   [(set_attr "type"    "jump")
                   3954:    (set_attr "mode"    "none")
                   3955:    (set_attr "length"  "1")])
                   3956: 
                   3957: (define_insn "indirect_jump"
                   3958:   [(set (pc) (match_operand:SI 0 "register_operand" "d"))]
                   3959:   ""
                   3960:   "%*j\\t%0"
                   3961:   [(set_attr "type"    "jump")
                   3962:    (set_attr "mode"    "none")
                   3963:    (set_attr "length"  "1")])
                   3964: 
                   3965: (define_insn "tablejump"
                   3966:   [(set (pc)
                   3967:        (match_operand:SI 0 "register_operand" "d"))
                   3968:    (use (label_ref (match_operand 1 "" "")))]
                   3969:   ""
                   3970:   "%*j\\t%0"
                   3971:   [(set_attr "type"    "jump")
                   3972:    (set_attr "mode"    "none")
                   3973:    (set_attr "length"  "1")])
                   3974: 
                   3975: ;; Function return, only allow after optimization, so that we can
                   3976: ;; eliminate jumps to jumps if no stack space is used.
                   3977: 
                   3978: ;; (define_expand "return"
                   3979: ;;   [(set (pc) (reg:SI 31))]
                   3980: ;;   "simple_epilogue_p ()"
                   3981: ;;   "")
                   3982: 
                   3983: (define_expand "return"
                   3984:   [(parallel [(return)
                   3985:              (use (reg:SI 31))])]
                   3986:   "simple_epilogue_p ()"
                   3987:   "")
                   3988: 
                   3989: (define_insn "return_internal"
                   3990:   [(parallel [(return)
                   3991:               (use (match_operand:SI 0 "register_operand" "d"))])]
                   3992:   ""
                   3993:   "%*j\\t%0"
                   3994:   [(set_attr "type"    "jump")
                   3995:    (set_attr "mode"    "none")
                   3996:    (set_attr "length"  "1")])
                   3997: 
                   3998: 
                   3999: ;;
                   4000: ;;  ....................
                   4001: ;;
                   4002: ;;     Function prologue/epilogue
                   4003: ;;
                   4004: ;;  ....................
                   4005: ;;
                   4006: 
                   4007: (define_expand "prologue"
                   4008:   [(const_int 1)]
                   4009:   ""
                   4010:   "
                   4011: {
                   4012:   if (mips_isa >= 0)           /* avoid unused code warnings */
                   4013:     {
                   4014:       mips_expand_prologue ();
                   4015:       DONE;
                   4016:     }
                   4017: }")
                   4018: 
                   4019: ;; Block any insns from being moved before this point, since the
                   4020: ;; profiling call to mcount can use various registers that aren't
                   4021: ;; saved or used to pass arguments.
                   4022: 
                   4023: (define_insn "blockage"
                   4024:   [(unspec_volatile [(const_int 0)] 0)]
                   4025:   ""
                   4026:   ""
                   4027:   [(set_attr "type"    "unknown")
                   4028:    (set_attr "mode"    "none")
                   4029:    (set_attr "length"  "0")])
                   4030: 
                   4031: ;; At present, don't expand the epilogue, reorg.c will clobber the
                   4032: ;; return register in compiling gen_lowpart (emit-rtl.c).
                   4033: ;; 
                   4034: ;; (define_expand "epilogue"
                   4035: ;;   [(const_int 2)]
                   4036: ;;   ""
                   4037: ;;   "
                   4038: ;; {
                   4039: ;;   if (mips_isa >= 0)            /* avoid unused code warnings */
                   4040: ;;     {
                   4041: ;;       mips_expand_epilogue ();
                   4042: ;;       DONE;
                   4043: ;;     }
                   4044: ;; }")
                   4045: 
                   4046: 
                   4047: ;;
                   4048: ;;  ....................
                   4049: ;;
                   4050: ;;     FUNCTION CALLS
                   4051: ;;
                   4052: ;;  ....................
                   4053: 
                   4054: ;; calls.c now passes a third argument, make saber happy
                   4055: 
                   4056: (define_expand "call"
                   4057:   [(parallel [(call (match_operand 0 "memory_operand" "m")
                   4058:                    (match_operand 1 "" "i"))
                   4059:              (clobber (reg:SI 31))
                   4060:              (use (match_operand 2 "" ""))             ;; next_arg_reg
                   4061:              (use (match_operand 3 "" ""))])]          ;; struct_value_size_rtx
                   4062:   ""
                   4063:   "
                   4064: {
                   4065:   rtx addr;
                   4066: 
                   4067:   if (operands[0])             /* eliminate unused code warnings */
                   4068:     {
                   4069:       addr = XEXP (operands[0], 0);
                   4070:       if ((GET_CODE (addr) != REG && (!CONSTANT_ADDRESS_P (addr) || TARGET_LONG_CALLS))
                   4071:          || ! call_insn_operand (operands[0], VOIDmode))
                   4072:        XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, addr);
                   4073: 
                   4074:       /* In order to pass small structures by value in registers
                   4075:         compatibly with the MIPS compiler, we need to shift the value
                   4076:         into the high part of the register.  Function_arg has encoded
                   4077:         a PARALLEL rtx, holding a vector of adjustments to be made
                   4078:         as the next_arg_reg variable, so we split up the insns,
                   4079:         and emit them separately.  */
                   4080: 
                   4081:       if (operands[2] != (rtx)0 && GET_CODE (operands[2]) == PARALLEL)
                   4082:        {
                   4083:          rtvec adjust = XVEC (operands[2], 0);
                   4084:          int num = GET_NUM_ELEM (adjust);
                   4085:          int i;
                   4086: 
                   4087:          for (i = 0; i < num; i++)
                   4088:            emit_insn (RTVEC_ELT (adjust, i));
                   4089:        }
                   4090: 
                   4091:       emit_call_insn (gen_call_internal1 (operands[0], operands[1],
                   4092:                                          gen_rtx (REG, Pmode, GP_REG_FIRST + 31)));
                   4093:       DONE;
                   4094:     }
                   4095: }")
                   4096: 
                   4097: (define_insn "call_internal1"
                   4098:   [(call (match_operand 0 "call_insn_operand" "m")
                   4099:         (match_operand 1 "" "i"))
                   4100:    (clobber (match_operand:SI 2 "register_operand" "=d"))]
                   4101:   "!TARGET_ABICALLS && !TARGET_LONG_CALLS"
                   4102:   "*
                   4103: {
                   4104:   register rtx target = XEXP (operands[0], 0);
                   4105: 
                   4106:   if (GET_CODE (target) == SYMBOL_REF)
                   4107:     return \"%*jal\\t%0\";
                   4108: 
                   4109:   else if (GET_CODE (target) == CONST_INT)
                   4110:     {
                   4111:       operands[0] = target;
                   4112:       return \"%*%[li\\t%@,%0\\n\\tjal\\t%2,%@%]\";
                   4113:     }
                   4114: 
                   4115:   else
                   4116:     {
                   4117:       operands[0] = target;
                   4118:       return \"%*jal\\t%2,%0\";
                   4119:     }
                   4120: }"
                   4121:   [(set_attr "type"    "call")
                   4122:    (set_attr "mode"    "none")
                   4123:    (set_attr "length"  "1")])
                   4124: 
                   4125: (define_insn "call_internal2"
                   4126:   [(call (match_operand 0 "call_insn_operand" "m")
                   4127:         (match_operand 1 "" "i"))
                   4128:    (clobber (match_operand:SI 2 "register_operand" "=d"))]
                   4129:   "TARGET_ABICALLS && !TARGET_LONG_CALLS"
                   4130:   "*
                   4131: {
                   4132:   register rtx target = XEXP (operands[0], 0);
                   4133: 
                   4134:   if (GET_CODE (target) == SYMBOL_REF)
                   4135:     return \"jal\\t%0\";
                   4136: 
                   4137:   else if (GET_CODE (target) == CONST_INT)
                   4138:     {
                   4139:       operands[0] = target;
                   4140:       return \"li\\t%^,%0\\n\\tjal\\t%2,%^\";
                   4141:     }
                   4142: 
                   4143:   else
                   4144:     {
                   4145:       operands[0] = target;
                   4146:       if (REGNO (target) != PIC_FUNCTION_ADDR_REGNUM)
                   4147:        return \"move\\t%^,%0\\n\\tjal\\t%2,%^\";
                   4148:       else
                   4149:        return \"jal\\t%2,%0\";
                   4150:     }
                   4151: }"
                   4152:   [(set_attr "type"    "call")
                   4153:    (set_attr "mode"    "none")
                   4154:    (set_attr "length"  "2")])
                   4155: 
                   4156: (define_insn "call_internal3"
                   4157:   [(call (mem:SI (match_operand:SI 0 "register_operand" "r"))
                   4158:         (match_operand 1 "" "i"))
                   4159:    (clobber (match_operand:SI 2 "register_operand" "=d"))]
                   4160:   "!TARGET_ABICALLS && TARGET_LONG_CALLS"
                   4161:   "%*jal\\t%2,%0"
                   4162:   [(set_attr "type"    "call")
                   4163:    (set_attr "mode"    "none")
                   4164:    (set_attr "length"  "1")])
                   4165: 
                   4166: (define_insn "call_internal4"
                   4167:   [(call (mem:SI (match_operand:SI 0 "register_operand" "r"))
                   4168:         (match_operand 1 "" "i"))
                   4169:    (clobber (match_operand:SI 2 "register_operand" "=d"))]
                   4170:   "TARGET_ABICALLS && TARGET_LONG_CALLS"
                   4171:   "*
                   4172: {
                   4173:   if (REGNO (operands[0]) != PIC_FUNCTION_ADDR_REGNUM)
                   4174:     return \"move\\t%^,%0\\n\\tjal\\t%2,%^\";
                   4175:   else
                   4176:     return \"jal\\t%2,%0\";
                   4177: }"
                   4178:   [(set_attr "type"    "call")
                   4179:    (set_attr "mode"    "none")
                   4180:    (set_attr "length"  "2")])
                   4181: 
                   4182: 
                   4183: ;; calls.c now passes a fourth argument, make saber happy
                   4184: 
                   4185: (define_expand "call_value"
                   4186:   [(parallel [(set (match_operand 0 "register_operand" "=df")
                   4187:                   (call (match_operand 1 "memory_operand" "m")
                   4188:                         (match_operand 2 "" "i")))
                   4189:              (clobber (reg:SI 31))
                   4190:              (use (match_operand 3 "" ""))])]          ;; next_arg_reg
                   4191:   ""
                   4192:   "
                   4193: {
                   4194:   rtx addr;
                   4195: 
                   4196:   if (operands[0])             /* eliminate unused code warning */
                   4197:     {
                   4198:       addr = XEXP (operands[1], 0);
                   4199:       if ((GET_CODE (addr) != REG && (!CONSTANT_ADDRESS_P (addr) || TARGET_LONG_CALLS))
                   4200:          || ! call_insn_operand (operands[1], VOIDmode))
                   4201:        XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, addr);
                   4202: 
                   4203:       /* In order to pass small structures by value in registers
                   4204:         compatibly with the MIPS compiler, we need to shift the value
                   4205:         into the high part of the register.  Function_arg has encoded
                   4206:         a PARALLEL rtx, holding a vector of adjustments to be made
                   4207:         as the next_arg_reg variable, so we split up the insns,
                   4208:         and emit them separately.  */
                   4209: 
                   4210:       if (operands[3] != (rtx)0 && GET_CODE (operands[3]) == PARALLEL)
                   4211:        {
                   4212:          rtvec adjust = XVEC (operands[3], 0);
                   4213:          int num = GET_NUM_ELEM (adjust);
                   4214:          int i;
                   4215: 
                   4216:          for (i = 0; i < num; i++)
                   4217:            emit_insn (RTVEC_ELT (adjust, i));
                   4218:        }
                   4219: 
                   4220:       emit_call_insn (gen_call_value_internal1 (operands[0], operands[1], operands[2],
                   4221:                                                gen_rtx (REG, Pmode, GP_REG_FIRST + 31)));
                   4222: 
                   4223:       DONE;
                   4224:     }
                   4225: 
                   4226: }")
                   4227: 
                   4228: (define_insn "call_value_internal1"
                   4229:   [(set (match_operand 0 "register_operand" "=df")
                   4230:         (call (match_operand 1 "call_insn_operand" "m")
                   4231:               (match_operand 2 "" "i")))
                   4232:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   4233:   "!TARGET_ABICALLS && !TARGET_LONG_CALLS"
                   4234:   "*
                   4235: {
                   4236:   register rtx target = XEXP (operands[1], 0);
                   4237: 
                   4238:   if (GET_CODE (target) == SYMBOL_REF)
                   4239:     return \"%*jal\\t%1\";
                   4240: 
                   4241:   else if (GET_CODE (target) == CONST_INT)
                   4242:     {
                   4243:       operands[1] = target;
                   4244:       return \"%*%[li\\t%@,%1\\n\\tjal\\t%3,%@%]\";
                   4245:     }
                   4246: 
                   4247:   else
                   4248:     {
                   4249:       operands[1] = target;
                   4250:       return \"%*jal\\t%3,%1\";
                   4251:     }
                   4252: }"
                   4253:   [(set_attr "type"    "call")
                   4254:    (set_attr "mode"    "none")
                   4255:    (set_attr "length"  "1")])
                   4256: 
                   4257: (define_insn "call_value_internal2"
                   4258:   [(set (match_operand 0 "register_operand" "=df")
                   4259:         (call (match_operand 1 "call_insn_operand" "m")
                   4260:               (match_operand 2 "" "i")))
                   4261:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   4262:   "TARGET_ABICALLS && !TARGET_LONG_CALLS"
                   4263:   "*
                   4264: {
                   4265:   register rtx target = XEXP (operands[1], 0);
                   4266: 
                   4267:   if (GET_CODE (target) == SYMBOL_REF)
                   4268:     return \"jal\\t%1\";
                   4269: 
                   4270:   else if (GET_CODE (target) == CONST_INT)
                   4271:     {
                   4272:       operands[1] = target;
                   4273:       return \"li\\t%^,%1\\n\\tjal\\t%3,%^\";
                   4274:     }
                   4275: 
                   4276:   else
                   4277:     {
                   4278:       operands[1] = target;
                   4279:       if (REGNO (target) != PIC_FUNCTION_ADDR_REGNUM)
                   4280:        return \"move\\t%^,%1\\n\\tjal\\t%3,%^\";
                   4281:       else
                   4282:        return \"jal\\t%3,%1\";
                   4283:     }
                   4284: }"
                   4285:   [(set_attr "type"    "call")
                   4286:    (set_attr "mode"    "none")
                   4287:    (set_attr "length"  "2")])
                   4288: 
                   4289: (define_insn "call_value_internal3"
                   4290:   [(set (match_operand 0 "register_operand" "=df")
                   4291:         (call (mem:SI (match_operand:SI 1 "register_operand" "r"))
                   4292:              (match_operand 2 "" "i")))
                   4293:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   4294:   "!TARGET_ABICALLS && TARGET_LONG_CALLS"
                   4295:   "%*jal\\t%3,%1"
                   4296:   [(set_attr "type"    "call")
                   4297:    (set_attr "mode"    "none")
                   4298:    (set_attr "length"  "1")])
                   4299: 
                   4300: (define_insn "call_value_internal4"
                   4301:   [(set (match_operand 0 "register_operand" "=df")
                   4302:         (call (mem:SI (match_operand:SI 1 "register_operand" "r"))
                   4303:              (match_operand 2 "" "i")))
                   4304:    (clobber (match_operand:SI 3 "register_operand" "=d"))]
                   4305:   "TARGET_ABICALLS && TARGET_LONG_CALLS"
                   4306:   "*
                   4307: {
                   4308:   if (REGNO (operands[1]) != PIC_FUNCTION_ADDR_REGNUM)
                   4309:     return \"move\\t%^,%1\\n\\tjal\\t%3,%^\";
                   4310:   else
                   4311:     return \"jal\\t%3,%1\";
                   4312: }"
                   4313:   [(set_attr "type"    "call")
                   4314:    (set_attr "mode"    "none")
                   4315:    (set_attr "length"  "2")])
                   4316: 
                   4317: ;; Call subroutine returning any type.
                   4318: 
                   4319: (define_expand "untyped_call"
                   4320:   [(parallel [(call (match_operand 0 "" "")
                   4321:                    (const_int 0))
                   4322:              (match_operand 1 "" "")
                   4323:              (match_operand 2 "" "")])]
                   4324:   ""
                   4325:   "
                   4326: {
                   4327:   if (operands[0])             /* silence statement not reached warnings */
                   4328:     {
                   4329:       int i;
                   4330: 
                   4331:       emit_call_insn (gen_call (operands[0], const0_rtx, NULL, const0_rtx));
                   4332: 
                   4333:       for (i = 0; i < XVECLEN (operands[2], 0); i++)
                   4334:        {
                   4335:          rtx set = XVECEXP (operands[2], 0, i);
                   4336:          emit_move_insn (SET_DEST (set), SET_SRC (set));
                   4337:        }
                   4338: 
                   4339:       emit_insn (gen_blockage ());
                   4340:       DONE;
                   4341:     }
                   4342: }")
                   4343: 
                   4344: ;;
                   4345: ;;  ....................
                   4346: ;;
                   4347: ;;     MISC.
                   4348: ;;
                   4349: ;;  ....................
                   4350: ;;
                   4351: 
                   4352: (define_insn "nop"
                   4353:   [(const_int 0)]
                   4354:   ""
                   4355:   "%(nop%)"
                   4356:   [(set_attr "type"    "nop")
                   4357:    (set_attr "mode"    "none")
                   4358:    (set_attr "length"  "1")])
                   4359: 
                   4360: (define_expand "probe"
                   4361:   [(set (match_dup 0)
                   4362:        (match_dup 1))]
                   4363:   ""
                   4364:   "
                   4365: {
                   4366:   operands[0] = gen_reg_rtx (SImode);
                   4367:   operands[1] = gen_rtx (MEM, SImode, stack_pointer_rtx);
                   4368:   MEM_VOLATILE_P (operands[1]) = TRUE;
                   4369: 
                   4370:   /* fall through and generate default code */
                   4371: }")

unix.superglobalmegacorp.com

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