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

unix.superglobalmegacorp.com

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