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

unix.superglobalmegacorp.com

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