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

1.1       root        1: ;;- Machine description for GNU compiler
                      2: ;;- Convex Version
                      3: ;;   Copyright (C) 1988, 1993 Free Software Foundation, Inc.
                      4: 
                      5: ;; This file is part of GNU CC.
                      6: 
                      7: ;; GNU CC is free software; you can redistribute it and/or modify
                      8: ;; it under the terms of the GNU General Public License as published by
                      9: ;; the Free Software Foundation; either version 2, or (at your option)
                     10: ;; any later version.
                     11: 
                     12: ;; GNU CC is distributed in the hope that it will be useful,
                     13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15: ;; GNU General Public License for more details.
                     16: 
                     17: ;; You should have received a copy of the GNU General Public License
                     18: ;; along with GNU CC; see the file COPYING.  If not, write to
                     19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     20: 
                     21: ;; Attribute specifications
                     22: 
                     23: ; Target CPU
                     24: (define_attr "cpu" "c1,c32,c34,c38"
                     25:   (const (symbol_ref "(enum attr_cpu) target_cpu")))
                     26: 
                     27: ;; Instruction classification
                     28: 
                     29: (define_attr "type"
                     30:   "alu,xalu,mldw,mldl,mldb,mst,adds,addd,mulw,mull,muls,muld,divw,divl,divs,divd,shfw,shfl,cvts,cvtd"
                     31:   (const_string "alu"))
                     32: 
                     33: ;; Instruction times
                     34: 
                     35: (define_function_unit "mem" 1 0
                     36:   (and (eq_attr "cpu" "c1") (eq_attr "type" "mldw")) 2 0)
                     37: (define_function_unit "mem" 1 0
                     38:   (and (eq_attr "cpu" "c1") (eq_attr "type" "mldl")) 4 0)
                     39: (define_function_unit "mem" 1 0
                     40:   (and (eq_attr "cpu" "c32") (eq_attr "type" "mldw,mldl")) 2 0)
                     41: (define_function_unit "mem" 1 0
                     42:   (and (eq_attr "cpu" "c34") (eq_attr "type" "mldw,mldl")) 4 0)
                     43: (define_function_unit "mem" 1 0
                     44:   (and (eq_attr "cpu" "c38") (eq_attr "type" "mldw,mldl")) 2 0)
                     45: 
                     46: (define_function_unit "mem" 1 0
                     47:   (and (eq_attr "cpu" "c32") (eq_attr "type" "mldb")) 9 0)
                     48: (define_function_unit "mem" 1 0
                     49:   (and (eq_attr "cpu" "c34") (eq_attr "type" "mldb")) 36 0)
                     50: (define_function_unit "mem" 1 0
                     51:   (and (eq_attr "cpu" "c38") (eq_attr "type" "mldb")) 21 0)
                     52: 
                     53: (define_function_unit "mem" 1 0
                     54:   (and (eq_attr "cpu" "c1") (eq_attr "type" "xalu")) 1 0)
                     55: (define_function_unit "mem" 1 0
                     56:   (and (eq_attr "cpu" "c32") (eq_attr "type" "xalu")) 1 0)
                     57: (define_function_unit "mem" 1 0
                     58:   (and (eq_attr "cpu" "c34") (eq_attr "type" "xalu")) 5 0)
                     59: (define_function_unit "mem" 1 0
                     60:   (and (eq_attr "cpu" "c38") (eq_attr "type" "xalu")) 2 0)
                     61: 
                     62: (define_function_unit "add" 1 0
                     63:   (and (eq_attr "cpu" "c1") (eq_attr "type" "adds,addd")) 3 2)
                     64: (define_function_unit "add" 1 0
                     65:   (and (eq_attr "cpu" "c32") (eq_attr "type" "adds,addd")) 2 1)
                     66: (define_function_unit "add" 1 0
                     67:   (and (eq_attr "cpu" "c34") (eq_attr "type" "adds,addd")) 5 2)
                     68: (define_function_unit "add" 1 0
                     69:   (and (eq_attr "cpu" "c38") (eq_attr "type" "adds,addd")) 2 1)
                     70: 
                     71: (define_function_unit "mul" 1 0
                     72:   (and (eq_attr "cpu" "c1") (eq_attr "type" "mulw,muls")) 3 2)
                     73: (define_function_unit "mul" 1 0
                     74:   (and (eq_attr "cpu" "c32") (eq_attr "type" "mulw,muls")) 4 2)
                     75: (define_function_unit "mul" 1 0
                     76:   (and (eq_attr "cpu" "c34") (eq_attr "type" "mulw,muls")) 6 2)
                     77: (define_function_unit "mul" 1 0
                     78:   (and (eq_attr "cpu" "c38") (eq_attr "type" "mulw,muls")) 3 2)
                     79: 
                     80: (define_function_unit "mul" 1 0
                     81:   (and (eq_attr "cpu" "c1") (eq_attr "type" "mull,muld")) 4 3)
                     82: (define_function_unit "mul" 1 0
                     83:   (and (eq_attr "cpu" "c32") (eq_attr "type" "mull")) 10 7)
                     84: (define_function_unit "mul" 1 0
                     85:   (and (eq_attr "cpu" "c32") (eq_attr "type" "muld")) 5 2)
                     86: (define_function_unit "mul" 1 0
                     87:   (and (eq_attr "cpu" "c34") (eq_attr "type" "mull,muld")) 7 3)
                     88: (define_function_unit "mul" 1 0
                     89:   (and (eq_attr "cpu" "c38") (eq_attr "type" "mull,muld")) 4 3)
                     90: 
                     91: (define_function_unit "div" 1 0
                     92:   (and (eq_attr "cpu" "c1") (eq_attr "type" "divw")) 24 24)
                     93: (define_function_unit "div" 1 0
                     94:   (and (eq_attr "cpu" "c32") (eq_attr "type" "divw")) 44 6)
                     95: (define_function_unit "div" 1 0
                     96:   (and (eq_attr "cpu" "c34") (eq_attr "type" "divw")) 14 10)
                     97: (define_function_unit "div" 1 0
                     98:   (and (eq_attr "cpu" "c38") (eq_attr "type" "divw")) 11 10)
                     99: 
                    100: (define_function_unit "div" 1 0
                    101:   (and (eq_attr "cpu" "c1") (eq_attr "type" "divl")) 41 42)
                    102: (define_function_unit "div" 1 0
                    103:   (and (eq_attr "cpu" "c32") (eq_attr "type" "divl")) 76 5)
                    104: (define_function_unit "div" 1 0
                    105:   (and (eq_attr "cpu" "c34") (eq_attr "type" "divl")) 22 18)
                    106: (define_function_unit "div" 1 0
                    107:   (and (eq_attr "cpu" "c38") (eq_attr "type" "divl")) 19 18)
                    108: 
                    109: (define_function_unit "div" 1 0
                    110:   (and (eq_attr "cpu" "c1") (eq_attr "type" "divs")) 22 22)
                    111: (define_function_unit "div" 1 0
                    112:   (and (eq_attr "cpu" "c32") (eq_attr "type" "divs")) 8 6)
                    113: (define_function_unit "div" 1 0
                    114:   (and (eq_attr "cpu" "c34") (eq_attr "type" "divs")) 13 9)
                    115: (define_function_unit "div" 1 0
                    116:   (and (eq_attr "cpu" "c38") (eq_attr "type" "divs")) 10 9)
                    117: 
                    118: (define_function_unit "div" 1 0
                    119:   (and (eq_attr "cpu" "c1") (eq_attr "type" "divd")) 37 38)
                    120: (define_function_unit "div" 1 0
                    121:   (and (eq_attr "cpu" "c32") (eq_attr "type" "divd")) 12 8)
                    122: (define_function_unit "div" 1 0
                    123:   (and (eq_attr "cpu" "c34") (eq_attr "type" "divd")) 20 16)
                    124: (define_function_unit "div" 1 0
                    125:   (and (eq_attr "cpu" "c38") (eq_attr "type" "divd")) 17 16)
                    126: 
                    127: (define_function_unit "misc" 1 0
                    128:   (and (eq_attr "cpu" "c1") (eq_attr "type" "cvts,cvtd")) 4 3)
                    129: (define_function_unit "misc" 1 0
                    130:   (and (eq_attr "cpu" "c32") (eq_attr "type" "cvts")) 9 7)
                    131: (define_function_unit "misc" 1 0
                    132:   (and (eq_attr "cpu" "c32") (eq_attr "type" "cvtd")) 9 6)
                    133: (define_function_unit "misc" 1 0
                    134:   (and (eq_attr "cpu" "c34") (eq_attr "type" "cvts")) 6 2)
                    135: (define_function_unit "misc" 1 0
                    136:   (and (eq_attr "cpu" "c34") (eq_attr "type" "cvtd")) 6 1)
                    137: (define_function_unit "misc" 1 0
                    138:   (and (eq_attr "cpu" "c38") (eq_attr "type" "cvts,cvtd")) 3 1)
                    139: 
                    140: (define_function_unit "misc" 1 0
                    141:   (and (eq_attr "cpu" "c1") (eq_attr "type" "shfw,shfl")) 3 2)
                    142: (define_function_unit "misc" 1 0
                    143:   (and (eq_attr "cpu" "c32") (eq_attr "type" "shfw")) 7 5)
                    144: (define_function_unit "misc" 1 0
                    145:   (and (eq_attr "cpu" "c32") (eq_attr "type" "shfl")) 7 4)
                    146: (define_function_unit "misc" 1 0
                    147:   (and (eq_attr "cpu" "c38") (eq_attr "type" "shfw,shfl")) 3 1)
                    148: 
                    149: (define_function_unit "mystery_latch" 1 1
                    150:   (and (eq_attr "type" "!alu,mldw,mldl,adds,addd") (eq_attr "cpu" "c32")) 2 2)
                    151: 
                    152: ;(define_function_unit "ip" 1 1
                    153: ;  (and (eq_attr "cpu" "c1")
                    154: ;       (eq_attr "type" "divw,divl,divs,divd,xalu")) 2 2)
                    155: ;(define_function_unit "ip" 1 1
                    156: ;  (and (eq_attr "cpu" "c1")
                    157: ;       (eq_attr "type" "!divw,divl,divs,divd,xalu")) 1 1)
                    158: ;(define_function_unit "ip" 1 1
                    159: ;  (and (eq_attr "cpu" "c32")
                    160: ;       (eq_attr "type" "mull,muld,divl,divd,shfl,cvtd,xalu")) 2 2)
                    161: ;(define_function_unit "ip" 1 1
                    162: ;  (and (eq_attr "cpu" "c32")
                    163: ;       (eq_attr "type" "!mull,muld,divl,divd,shfl,cvtd,xalu")) 1 1)
                    164: ;(define_function_unit "ip" 1 1
                    165: ;  (and (eq_attr "cpu" "c34")
                    166: ;       (eq_attr "type" "addd,mull,muld,divl,divd,cvtd,xalu")) 2 2)
                    167: ;(define_function_unit "ip" 1 1
                    168: ;  (and (eq_attr "cpu" "c34")
                    169: ;       (eq_attr "type" "!addd,mull,muld,divl,divd,cvtd,xalu")) 1 1)
                    170: 
                    171: ;; Make the first thing a real insn in case of genattrtab bug
                    172: 
                    173: (define_insn "nop"
                    174:   [(const_int 0)]
                    175:   ""
                    176:   "nop")
                    177: 
                    178: ;; Moves
                    179: 
                    180: (define_expand "movdf"
                    181:   [(set (match_operand:DF 0 "general_operand" "")
                    182:        (match_operand:DF 1 "general_operand" ""))]
                    183:   ""
                    184:   "if (GET_CODE (operands[0]) != REG)
                    185:      operands[1] = force_reg (DFmode, operands[1]);")
                    186: 
                    187: (define_insn ""
                    188:   [(set (match_operand:DF 0 "general_operand" "=d,d,d,d,d,<,m")
                    189:        (match_operand:DF 1 "general_operand"  "d,Q,m,G,H,d,d"))]
                    190:   "register_operand (operands[0], DFmode)
                    191:    || register_operand (operands[1], DFmode)"
                    192:   "@
                    193:    mov %1,%0
                    194:    ldb.d %1,%0
                    195:    ld.d %1,%0
                    196:    ld.d %u1,%0
                    197:    ld.l %v1,%0
                    198:    psh.l %1
                    199:    st.d %1,%0"
                    200:   [(set_attr "type" "alu,mldb,mldl,alu,alu,alu,mst")])
                    201: 
                    202: ;; This is here so we can load any result of RTL constant folding
                    203: ;; but do not use it on constants that can be loaded from memory.
                    204: ;; It is never better and can be worse.
                    205: 
                    206: (define_insn ""
                    207:   [(set (match_operand:DF 0 "register_operand" "=d")
                    208:        (match_operand:DF 1 "const_double_operand" "F"))]
                    209:   "CONST_DOUBLE_MEM (operands[1]) == const0_rtx"
                    210:   "ld.u %u1,%0\;ld.w %v1,%0"
                    211:   [(set_attr "type" "xalu")])
                    212: 
                    213: (define_expand "movsf"
                    214:   [(set (match_operand:SF 0 "general_operand" "")
                    215:        (match_operand:SF 1 "general_operand" ""))]
                    216:   ""
                    217:   "if (GET_CODE (operands[0]) != REG)
                    218:      operands[1] = force_reg (SFmode, operands[1]);")
                    219: 
                    220: (define_insn ""
                    221:   [(set (match_operand:SF 0 "general_operand" "=d,d,d,d,<,m")
                    222:        (match_operand:SF 1 "general_operand" "d,Q,m,F,d,d"))]
                    223:   "register_operand (operands[0], SFmode)
                    224:    || register_operand (operands[1], SFmode)"
                    225:   "@
                    226:    mov.s %1,%0
                    227:    ldb.s %1,%0
                    228:    ld.s %1,%0
                    229:    ld.s %1,%0
                    230:    psh.w %1
                    231:    st.s %1,%0"
                    232:   [(set_attr "type" "alu,mldb,mldw,alu,alu,mst")])
                    233: 
                    234: (define_expand "movdi"
                    235:   [(set (match_operand:DI 0 "general_operand" "")
                    236:        (match_operand:DI 1 "general_operand" ""))]
                    237:   ""
                    238:   "if (GET_CODE (operands[0]) != REG)
                    239:      operands[1] = force_reg (DImode, operands[1]);")
                    240: 
                    241: (define_insn ""
                    242:   [(set (match_operand:DI 0 "general_operand" "=d,d,d,d,d,<,m")
                    243:        (match_operand:DI 1 "general_operand" "d,Q,m,G,HI,d,d"))]
                    244:   "register_operand (operands[0], DImode)
                    245:    || register_operand (operands[1], DImode)"
                    246:   "@
                    247:    mov %1,%0
                    248:    ldb.l %1,%0
                    249:    ld.l %1,%0
                    250:    ld.d %u1,%0
                    251:    ld.l %1,%0
                    252:    psh.l %1
                    253:    st.l %1,%0"
                    254:   [(set_attr "type" "alu,mldb,mldl,alu,alu,alu,mst")])
                    255: 
                    256: ;; This is here so we can load any result of RTL constant folding
                    257: ;; but do not use it on constants that can be loaded from memory.
                    258: ;; It is never better and can be worse.
                    259: 
                    260: (define_insn ""
                    261:   [(set (match_operand:DI 0 "register_operand" "=d")
                    262:        (match_operand:DI 1 "const_double_operand" "F"))]
                    263:   "CONST_DOUBLE_MEM (operands[1]) == const0_rtx"
                    264:   "ld.u %u1,%0\;ld.w %v1,%0"
                    265:   [(set_attr "type" "xalu")])
                    266: 
                    267: (define_expand "movsi"
                    268:   [(set (match_operand:SI 0 "general_operand" "")
                    269:        (match_operand:SI 1 "general_operand" ""))]
                    270:   ""
                    271:   "if (GET_CODE (operands[0]) != REG)
                    272:      operands[1] = force_reg (SImode, operands[1]);")
                    273: 
                    274: (define_insn ""
                    275:   [(set (match_operand:SI 0 "push_operand" "=<,<")
                    276:        (match_operand:SI 1 "nonmemory_operand" "Ad,i"))]
                    277:   ""
                    278:   "@
                    279:    psh.w %1
                    280:    pshea %a1")
                    281: 
                    282: (define_insn ""
                    283:   [(set (match_operand:SI 0 "general_operand" "=d,r,d,r,r,m")
                    284:        (match_operand:SI 1 "general_operand" "d,r,Q,m,i,r"))]
                    285:   "register_operand (operands[0], SImode)
                    286:    || register_operand (operands[1], SImode)"
                    287:   "@
                    288:    mov.w %1,%0
                    289:    mov %1,%0
                    290:    ldb.w %1,%0
                    291:    ld.w %1,%0
                    292:    ld.w %1,%0
                    293:    st.w %1,%0"
                    294:   [(set_attr "type" "alu,alu,mldb,mldw,alu,mst")])
                    295: 
                    296: (define_expand "movstrictsi"
                    297:   [(set (strict_low_part (match_operand:SI 0 "general_operand" ""))
                    298:        (match_operand:SI 1 "general_operand" ""))]
                    299:   ""
                    300:   "if (GET_CODE (operands[0]) != REG)
                    301:      operands[1] = force_reg (SImode, operands[1]);")
                    302: 
                    303: (define_insn ""
                    304:   [(set (strict_low_part (match_operand:SI 0 "general_operand" "=d,r,d,r,r,m"))
                    305:        (match_operand:SI 1 "general_operand" "d,r,Q,m,i,r"))]
                    306:   "register_operand (operands[0], SImode)
                    307:    || register_operand (operands[1], SImode)"
                    308:   "@
                    309:    mov.w %1,%0
                    310:    mov %1,%0
                    311:    ldb.w %1,%0
                    312:    ld.w %1,%0
                    313:    ld.w %1,%0
                    314:    st.w %1,%0"
                    315:   [(set_attr "type" "alu,alu,mldb,mldw,alu,mst")])
                    316: 
                    317: (define_expand "movhi"
                    318:   [(set (match_operand:HI 0 "general_operand" "")
                    319:        (match_operand:HI 1 "general_operand" ""))]
                    320:   ""
                    321:   "if (GET_CODE (operands[0]) != REG)
                    322:      operands[1] = force_reg (HImode, operands[1]);")
                    323: 
                    324: (define_insn ""
                    325:   [(set (match_operand:HI 0 "general_operand" "=d,r,d,r,r,<,m")
                    326:        (match_operand:HI 1 "general_operand" "d,r,Q,m,i,Ad,r"))]
                    327:   "register_operand (operands[0], HImode)
                    328:    || register_operand (operands[1], HImode)"
                    329:   "@
                    330:    mov.w %1,%0
                    331:    mov %1,%0
                    332:    ldb.h %1,%0
                    333:    ld.h %1,%0
                    334:    ld.w %1,%0
                    335:    psh.w %1
                    336:    st.h %1,%0"
                    337:   [(set_attr "type" "alu,alu,mldb,mldw,alu,alu,mst")])
                    338: 
                    339: (define_expand "movqi"
                    340:   [(set (match_operand:QI 0 "general_operand" "")
                    341:        (match_operand:QI 1 "general_operand" ""))]
                    342:   ""
                    343:   "if (GET_CODE (operands[0]) != REG)
                    344:      operands[1] = force_reg (QImode, operands[1]);")
                    345: 
                    346: (define_insn ""
                    347:   [(set (match_operand:QI 0 "general_operand" "=d,r,d,r,r,<,m")
                    348:        (match_operand:QI 1 "general_operand" "d,r,Q,m,i,Ad,r"))]
                    349:   "register_operand (operands[0], QImode)
                    350:    || register_operand (operands[1], QImode)"
                    351:   "@
                    352:    mov.w %1,%0
                    353:    mov %1,%0
                    354:    ldb.b %1,%0
                    355:    ld.b %1,%0
                    356:    ld.w %1,%0
                    357:    psh.w %1
                    358:    st.b %1,%0"
                    359:   [(set_attr "type" "alu,alu,mldb,mldw,alu,alu,mst")])
                    360: 
                    361: ;; Expand block moves manually to get code that pipelines the loads.
                    362: 
                    363: (define_expand "movstrsi"
                    364:   [(set (match_operand:BLK 0 "memory_operand" "=m")
                    365:        (match_operand:BLK 1 "memory_operand" "m"))
                    366:    (use (match_operand:SI 2 "const_int_operand" "i"))
                    367:    (use (match_operand:SI 3 "const_int_operand" "i"))]
                    368:   ""
                    369:   " expand_movstr (operands); DONE; ")
                    370: 
                    371: ;; Extension and truncation insns.
                    372: ;; Those for integer source operand
                    373: ;; are ordered widest source type first.
                    374: 
                    375: (define_insn "truncsiqi2"
                    376:   [(set (match_operand:QI 0 "register_operand" "=d,a")
                    377:        (truncate:QI (match_operand:SI 1 "register_operand" "d,a")))]
                    378:   ""
                    379:   "cvtw.b %1,%0")
                    380: 
                    381: (define_insn "truncsihi2"
                    382:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    383:        (truncate:HI (match_operand:SI 1 "register_operand" "d,a")))]
                    384:   ""
                    385:   "cvtw.h %1,%0")
                    386: 
                    387: (define_insn "trunchiqi2"
                    388:   [(set (match_operand:QI 0 "register_operand" "=r")
                    389:        (truncate:QI (match_operand:HI 1 "register_operand" "0")))]
                    390:   ""
                    391:   "")
                    392: 
                    393: (define_insn "truncdisi2"
                    394:   [(set (match_operand:SI 0 "register_operand" "=d")
                    395:        (truncate:SI (match_operand:DI 1 "register_operand" "d")))]
                    396:   ""
                    397:   "cvtl.w %1,%0")
                    398: 
                    399: (define_insn "extendsidi2"
                    400:   [(set (match_operand:DI 0 "register_operand" "=d")
                    401:        (sign_extend:DI (match_operand:SI 1 "register_operand" "d")))]
                    402:   ""
                    403:   "cvtw.l %1,%0")
                    404: 
                    405: (define_insn "extendhisi2"
                    406:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    407:        (sign_extend:SI (match_operand:HI 1 "register_operand" "d,a")))]
                    408:   ""
                    409:   "cvth.w %1,%0")
                    410: 
                    411: (define_insn "extendqihi2"
                    412:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    413:        (sign_extend:HI (match_operand:QI 1 "register_operand" "d,a")))]
                    414:   ""
                    415:   "cvtb.w %1,%0")
                    416: 
                    417: (define_insn "extendqisi2"
                    418:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    419:        (sign_extend:SI (match_operand:QI 1 "register_operand" "d,a")))]
                    420:   ""
                    421:   "cvtb.w %1,%0")
                    422: 
                    423: (define_insn "extendsfdf2"
                    424:   [(set (match_operand:DF 0 "register_operand" "=d")
                    425:        (float_extend:DF (match_operand:SF 1 "register_operand" "d")))]
                    426:   ""
                    427:   "cvts.d %1,%0"
                    428:   [(set_attr "type" "cvts")])
                    429: 
                    430: (define_insn "truncdfsf2"
                    431:   [(set (match_operand:SF 0 "register_operand" "=d")
                    432:        (float_truncate:SF (match_operand:DF 1 "register_operand" "d")))]
                    433:   ""
                    434:   "cvtd.s %1,%0"
                    435:   [(set_attr "type" "cvtd")])
                    436: 
                    437: (define_insn "zero_extendhisi2"
                    438:   [(set (match_operand:SI 0 "register_operand" "=r")
                    439:        (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))]
                    440:   ""
                    441:   "and #0xffff,%0")
                    442: 
                    443: (define_insn "zero_extendqihi2"
                    444:   [(set (match_operand:HI 0 "register_operand" "=r")
                    445:        (zero_extend:HI (match_operand:QI 1 "register_operand" "0")))]
                    446:   ""
                    447:   "and #0xff,%0")
                    448: 
                    449: (define_insn "zero_extendqisi2"
                    450:   [(set (match_operand:SI 0 "register_operand" "=r")
                    451:        (zero_extend:SI (match_operand:QI 1 "register_operand" "0")))]
                    452:   ""
                    453:   "and #0xff,%0")
                    454: 
                    455: (define_insn "zero_extendsidi2"
                    456:   [(set (match_operand:DI 0 "register_operand" "=d")
                    457:        (zero_extend:DI (match_operand:SI 1 "register_operand" "0")))]
                    458:   ""
                    459:   "ld.u #0,%0")
                    460: 
                    461: ;; Fix-to-float conversion insns.
                    462: ;; Note that the ones that start with SImode come first.
                    463: ;; That is so that an operand that is a CONST_INT
                    464: ;; (and therefore lacks a specific machine mode).
                    465: ;; will be recognized as SImode (which is always valid)
                    466: ;; rather than as QImode or HImode.
                    467: 
                    468: (define_insn "floatsisf2"
                    469:   [(set (match_operand:SF 0 "register_operand" "=d")
                    470:        (float:SF (match_operand:SI 1 "register_operand" "d")))]
                    471:   ""
                    472:   "cvtw.s %1,%0"
                    473:   [(set_attr "type" "cvts")])
                    474: 
                    475: (define_insn "floatdisf2"
                    476:   [(set (match_operand:SF 0 "register_operand" "=d")
                    477:        (float:SF (match_operand:DI 1 "register_operand" "d")))]
                    478:   ""
                    479:   "cvtl.s %1,%0"
                    480:   [(set_attr "type" "cvtd")])
                    481: 
                    482: (define_insn "floatsidf2"
                    483:   [(set (match_operand:DF 0 "register_operand" "=d")
                    484:        (float:DF (match_operand:SI 1 "register_operand" "d")))]
                    485:   "! TARGET_C1"
                    486:   "cvtw.d %1,%0"
                    487:   [(set_attr "type" "cvts")])
                    488: 
                    489: (define_insn "floatdidf2"
                    490:   [(set (match_operand:DF 0 "register_operand" "=d")
                    491:        (float:DF (match_operand:DI 1 "register_operand" "d")))]
                    492:   ""
                    493:   "cvtl.d %1,%0"
                    494:   [(set_attr "type" "cvtd")])
                    495: 
                    496: ;; These are a little slower than gcc's normal way of doing unsigned
                    497: ;; DI floats (if the DI number is "negative") but they avoid double
                    498: ;; rounding and they avoid explicit constants.
                    499: 
                    500: (define_expand "floatunsdidf2"
                    501:   [(set (match_operand:DF 0 "register_operand" "=d")
                    502:        (float:DF (match_operand:DI 1 "register_operand" "d")))
                    503:    (set (cc0) (compare:DI (match_dup 3) (match_dup 1)))
                    504:    (set (pc)
                    505:        (if_then_else (le (cc0) (const_int 0))
                    506:                      (label_ref (match_dup 4))
                    507:                      (pc)))
                    508:    (set (match_dup 2) (lshiftrt:DI (match_dup 1) (const_int 1)))
                    509:    (set (match_dup 0) (float:DF (match_dup 2)))
                    510:    (set (match_dup 0) (plus:DF (match_dup 0) (match_dup 0)))
                    511:    (match_dup 4)
                    512:    (set (match_dup 0) (match_dup 0))]
                    513:   ""
                    514:   "
                    515: {
                    516:   operands[2] = gen_reg_rtx (DImode);
                    517:   operands[3] = force_reg (DImode, const0_rtx);
                    518:   operands[4] = gen_label_rtx ();
                    519: }")
                    520: 
                    521: (define_expand "floatunsdisf2"
                    522:   [(set (match_operand:SF 0 "register_operand" "=d")
                    523:        (float:SF (match_operand:DI 1 "register_operand" "d")))
                    524:    (set (cc0) (compare:DI (match_dup 3) (match_dup 1)))
                    525:    (set (pc)
                    526:        (if_then_else (le (cc0) (const_int 0))
                    527:                      (label_ref (match_dup 4))
                    528:                      (pc)))
                    529:    (set (match_dup 2) (lshiftrt:DI (match_dup 1) (const_int 1)))
                    530:    (set (match_dup 0) (float:SF (match_dup 2)))
                    531:    (set (match_dup 0) (plus:SF (match_dup 0) (match_dup 0)))
                    532:    (match_dup 4)
                    533:    (set (match_dup 0) (match_dup 0))]
                    534:   ""
                    535:   "
                    536: {
                    537:   operands[2] = gen_reg_rtx (DImode);
                    538:   operands[3] = force_reg (DImode, const0_rtx);
                    539:   operands[4] = gen_label_rtx ();
                    540: }")
                    541: 
                    542: ;; These patterns are identical to gcc's default action 
                    543: ;; if DI->DF and DI->SF are not present.  There are here
                    544: ;; only to prevent SI->*F from promoting to DI->*F.
                    545: 
                    546: (define_expand "floatunssidf2"
                    547:   [(set (match_dup 2)
                    548:        (zero_extend:DI (match_operand:SI 1 "register_operand" "")))
                    549:    (set (match_operand:DF 0 "register_operand" "")
                    550:        (float:DF (match_dup 2)))]
                    551:   ""
                    552:   "operands[2] = gen_reg_rtx (DImode);")
                    553: 
                    554: (define_expand "floatunssisf2"
                    555:   [(set (match_dup 2)
                    556:         (zero_extend:DI (match_operand:SI 1 "register_operand" "")))
                    557:    (set (match_operand:SF 0 "register_operand" "")
                    558:         (float:SF (match_dup 2)))]
                    559:   ""
                    560:   "operands[2] = gen_reg_rtx (DImode);")
                    561: 
                    562: ;; Float-to-fix conversion insns.
                    563: 
                    564: (define_insn "fix_truncsfsi2"
                    565:   [(set (match_operand:SI 0 "register_operand" "=d")
                    566:        (fix:SI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]
                    567:   ""
                    568:   "cvts.w %1,%0"
                    569:   [(set_attr "type" "cvts")])
                    570: 
                    571: (define_insn "fix_truncsfdi2"
                    572:   [(set (match_operand:DI 0 "register_operand" "=d")
                    573:        (fix:DI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]
                    574:   ""
                    575:   "cvts.l %1,%0"
                    576:   [(set_attr "type" "cvts")])
                    577: 
                    578: (define_insn "fix_truncdfsi2"
                    579:   [(set (match_operand:SI 0 "register_operand" "=d")
                    580:        (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]
                    581:   ""
                    582:   "cvtd.l %1,%0"
                    583:   [(set_attr "type" "cvtd")])
                    584: 
                    585: (define_insn "fix_truncdfdi2"
                    586:   [(set (match_operand:DI 0 "register_operand" "=d")
                    587:        (fix:DI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]
                    588:   ""
                    589:   "cvtd.l %1,%0"
                    590:   [(set_attr "type" "cvtd")])
                    591: 
                    592: ;;- All kinds of add instructions.
                    593: 
                    594: (define_insn "adddf3"
                    595:   [(set (match_operand:DF 0 "register_operand" "=d")
                    596:        (plus:DF (match_operand:DF 1 "register_operand" "%0")
                    597:                 (match_operand:DF 2 "register_operand" "d")))]
                    598:   ""
                    599:   "add.d %2,%0"
                    600:   [(set_attr "type" "addd")])
                    601: 
                    602: (define_insn "addsf3"
                    603:   [(set (match_operand:SF 0 "register_operand" "=d")
                    604:        (plus:SF (match_operand:SF 1 "register_operand" "%0")
                    605:                 (match_operand:SF 2 "nonmemory_operand" "dF")))]
                    606:   ""
                    607:   "add.s %2,%0"
                    608:   [(set_attr "type" "adds")])
                    609: 
                    610: (define_insn "adddi3"
                    611:   [(set (match_operand:DI 0 "register_operand" "=d")
                    612:        (plus:DI (match_operand:DI 1 "register_operand" "%0")
                    613:                 (match_operand:DI 2 "register_operand" "d")))]
                    614:   ""
                    615:   "add.l %2,%0")
                    616: 
                    617: (define_expand "addsi3"
                    618:   [(set (match_operand:SI 0 "register_operand" "")
                    619:        (plus:SI (match_operand:SI 1 "register_operand" "")
                    620:                 (match_operand:SI 2 "nonmemory_operand" "")))]
                    621:   ""
                    622:   "")
                    623: 
                    624: (define_insn ""
                    625:   [(set (match_operand:SI 0 "register_operand" "=a")
                    626:        (plus:SI (match_operand:SI 1 "register_operand" "%A")
                    627:                 (match_operand:SI 2 "immediate_operand" "i")))]
                    628:   "operands[1] == frame_pointer_rtx || operands[1] == arg_pointer_rtx"
                    629:   "ldea %a2(%1),%0")
                    630: 
                    631: (define_insn ""
                    632:   [(set (match_operand:SI 0 "register_operand" "=a")
                    633:        (plus:SI (match_operand:SI 1 "register_operand" "%a")
                    634:                 (match_operand:SI 2 "nonmemory_operand" "ri")))]
                    635:   "operands[1] == stack_pointer_rtx && operands[0] != stack_pointer_rtx"
                    636:   "mov %1,%0\;add.w %2,%0")
                    637: 
                    638: (define_insn ""
                    639:   [(set (match_operand:SI 0 "push_operand" "=<")
                    640:        (plus:SI (match_operand:SI 1 "register_operand" "A")
                    641:                 (match_operand:SI 2 "immediate_operand" "i")))]
                    642:   "operands[1] != stack_pointer_rtx"
                    643:   "pshea %a2(%1)"
                    644:   [(set_attr "type" "mst")])
                    645: 
                    646: (define_insn ""
                    647:   [(set (match_operand:SI 0 "register_operand" "=d,a,a")
                    648:        (plus:SI (match_operand:SI 1 "register_operand" "%0,0,A")
                    649:                 (match_operand:SI 2 "nonmemory_operand" "di,ri,i")))]
                    650:   "TARGET_C1"
                    651:   "@
                    652:    add.w %2,%0
                    653:    add.w %2,%0
                    654:    ldea %a2(%1),%0")
                    655: 
                    656: (define_insn ""
                    657:   [(set (match_operand:SI 0 "register_operand" "=d,a,r")
                    658:        (plus:SI (match_operand:SI 1 "register_operand" "%0,0,A")
                    659:                 (match_operand:SI 2 "nonmemory_operand" "di,ri,i")))]
                    660:   ""
                    661:   "@
                    662:    add.w %2,%0
                    663:    add.w %2,%0
                    664:    ldea %a2(%1),%0")
                    665: 
                    666: (define_insn "addhi3"
                    667:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    668:        (plus:HI (match_operand:HI 1 "register_operand" "%0,0")
                    669:                 (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
                    670:   ""
                    671:   "add.h %2,%0")
                    672: 
                    673: (define_insn "addqi3"
                    674:   [(set (match_operand:QI 0 "register_operand" "=d,d")
                    675:        (plus:QI (match_operand:QI 1 "register_operand" "%0,0")
                    676:                 (match_operand:QI 2 "nonmemory_operand" "d,i")))]
                    677:   ""
                    678:   "@
                    679:    add.b %2,%0
                    680:    add.w %2,%0")
                    681: 
                    682: ;;- All kinds of subtract instructions.
                    683: 
                    684: (define_insn "subdf3"
                    685:   [(set (match_operand:DF 0 "register_operand" "=d")
                    686:        (minus:DF (match_operand:DF 1 "register_operand" "0")
                    687:                  (match_operand:DF 2 "register_operand" "d")))]
                    688:   ""
                    689:   "sub.d %2,%0"
                    690:   [(set_attr "type" "addd")])
                    691: 
                    692: (define_insn "subsf3"
                    693:   [(set (match_operand:SF 0 "register_operand" "=d")
                    694:        (minus:SF (match_operand:SF 1 "register_operand" "0")
                    695:                  (match_operand:SF 2 "nonmemory_operand" "dF")))]
                    696:   ""
                    697:   "sub.s %2,%0"
                    698:   [(set_attr "type" "adds")])
                    699: 
                    700: (define_insn "subdi3"
                    701:   [(set (match_operand:DI 0 "register_operand" "=d")
                    702:        (minus:DI (match_operand:DI 1 "register_operand" "0")
                    703:                  (match_operand:DI 2 "register_operand" "d")))]
                    704:   ""
                    705:   "sub.l %2,%0")
                    706: 
                    707: (define_insn "subsi3"
                    708:   [(set (match_operand:SI 0 "register_operand" "=d,a,?d,?a")
                    709:        (minus:SI (match_operand:SI 1 "nonmemory_operand" "0,0,di,ai")
                    710:                  (match_operand:SI 2 "nonmemory_operand" "di,ai,0,0")))]
                    711:   ""
                    712:   "@
                    713:   sub.w %2,%0
                    714:   sub.w %2,%0
                    715:   sub.w %1,%0\;neg.w %0,%0
                    716:   sub.w %1,%0\;neg.w %0,%0")
                    717: 
                    718: (define_insn "subhi3"
                    719:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    720:        (minus:HI (match_operand:HI 1 "register_operand" "0,0")
                    721:                  (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
                    722:   ""
                    723:   "sub.h %2,%0")
                    724: 
                    725: (define_insn "subqi3"
                    726:   [(set (match_operand:QI 0 "register_operand" "=d,d")
                    727:        (minus:QI (match_operand:QI 1 "register_operand" "0,0")
                    728:                  (match_operand:QI 2 "nonmemory_operand" "d,i")))]
                    729:   ""
                    730:   "@
                    731:    sub.b %2,%0
                    732:    sub.w %2,%0")
                    733: 
                    734: ;;- Multiply instructions.
                    735: 
                    736: (define_insn "muldf3"
                    737:   [(set (match_operand:DF 0 "register_operand" "=d")
                    738:        (mult:DF (match_operand:DF 1 "register_operand" "%0")
                    739:                 (match_operand:DF 2 "register_operand" "d")))]
                    740:   ""
                    741:   "mul.d %2,%0"
                    742:   [(set_attr "type" "muld")])
                    743: 
                    744: (define_insn "mulsf3"
                    745:   [(set (match_operand:SF 0 "register_operand" "=d")
                    746:        (mult:SF (match_operand:SF 1 "register_operand" "%0")
                    747:                 (match_operand:SF 2 "nonmemory_operand" "dF")))]
                    748:   ""
                    749:   "mul.s %2,%0"
                    750:   [(set_attr "type" "muls")])
                    751: 
                    752: (define_insn "muldi3"
                    753:   [(set (match_operand:DI 0 "register_operand" "=d")
                    754:        (mult:DI (match_operand:DI 1 "register_operand" "%0")
                    755:                 (match_operand:DI 2 "register_operand" "d")))]
                    756:   ""
                    757:   "mul.l %2,%0"
                    758:   [(set_attr "type" "mull")])
                    759: 
                    760: (define_insn "mulsi3"
                    761:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    762:        (mult:SI (match_operand:SI 1 "register_operand" "%0,0")
                    763:                 (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                    764:   ""
                    765:   "mul.w %2,%0"
                    766:   [(set_attr "type" "mulw")])
                    767: 
                    768: (define_insn "mulhi3"
                    769:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    770:        (mult:HI (match_operand:HI 1 "register_operand" "%0,0")
                    771:                 (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
                    772:   ""
                    773:   "mul.h %2,%0"
                    774:   [(set_attr "type" "mulw")])
                    775: 
                    776: (define_insn "mulqi3"
                    777:   [(set (match_operand:QI 0 "register_operand" "=d,d")
                    778:        (mult:QI (match_operand:QI 1 "register_operand" "%0,0")
                    779:                 (match_operand:QI 2 "nonmemory_operand" "d,i")))]
                    780:   ""
                    781:   "@
                    782:    mul.b %2,%0
                    783:    mul.w %2,%0"
                    784:   [(set_attr "type" "mulw,mulw")])
                    785: 
                    786: ;;- Divide instructions.
                    787: 
                    788: (define_insn "divdf3"
                    789:   [(set (match_operand:DF 0 "register_operand" "=d")
                    790:        (div:DF (match_operand:DF 1 "register_operand" "0")
                    791:                (match_operand:DF 2 "register_operand" "d")))]
                    792:   ""
                    793:   "div.d %2,%0"
                    794:   [(set_attr "type" "divd")])
                    795: 
                    796: (define_insn "divsf3"
                    797:   [(set (match_operand:SF 0 "register_operand" "=d")
                    798:        (div:SF (match_operand:SF 1 "register_operand" "0")
                    799:                (match_operand:SF 2 "nonmemory_operand" "dF")))]
                    800:   ""
                    801:   "div.s %2,%0"
                    802:   [(set_attr "type" "divs")])
                    803: 
                    804: (define_insn "divdi3"
                    805:   [(set (match_operand:DI 0 "register_operand" "=d")
                    806:        (div:DI (match_operand:DI 1 "register_operand" "0")
                    807:                (match_operand:DI 2 "register_operand" "d")))]
                    808:   ""
                    809:   "div.l %2,%0"
                    810:   [(set_attr "type" "divl")])
                    811: 
                    812: (define_expand "udivsi3"
                    813:   [(set (match_dup 3)
                    814:        (zero_extend:DI (match_operand:SI 1 "register_operand" "")))
                    815:    (set (match_dup 4)
                    816:        (zero_extend:DI (match_operand:SI 2 "register_operand" "")))
                    817:    (set (match_dup 3)
                    818:        (div:DI (match_dup 3) (match_dup 4)))
                    819:    (set (match_operand:SI 0 "register_operand" "")
                    820:        (subreg:SI (match_dup 3) 0))]
                    821:   ""
                    822:   "operands[3] = gen_reg_rtx (DImode);
                    823:    operands[4] = gen_reg_rtx (DImode); ")
                    824: 
                    825: (define_insn "udivdi3"
                    826:   [(set (match_operand:DI 0 "register_operand" "=d")
                    827:        (udiv:DI (match_operand:DI 1 "register_operand" "d")
                    828:                 (match_operand:DI 2 "register_operand" "d")))]
                    829:   ""
                    830:   "psh.l %2\;psh.l %1\;callq udiv64\;pop.l %0\;add.w #8,sp")
                    831: 
                    832: (define_insn "divsi3"
                    833:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    834:        (div:SI (match_operand:SI 1 "register_operand" "0,0")
                    835:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                    836:   ""
                    837:   "div.w %2,%0"
                    838:   [(set_attr "type" "divw")])
                    839: 
                    840: (define_insn "divhi3"
                    841:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    842:        (div:HI (match_operand:HI 1 "register_operand" "0,0")
                    843:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
                    844:   ""
                    845:   "div.h %2,%0"
                    846:   [(set_attr "type" "divw")])
                    847: 
                    848: (define_insn "divqi3"
                    849:   [(set (match_operand:QI 0 "register_operand" "=d")
                    850:        (div:QI (match_operand:QI 1 "register_operand" "0")
                    851:                (match_operand:QI 2 "register_operand" "d")))]
                    852:   ""
                    853:   "div.b %2,%0"
                    854:   [(set_attr "type" "divw")])
                    855: 
                    856: ;;- Bit clear instructions.
                    857: 
                    858: (define_insn ""
                    859:   [(set (match_operand:DI 0 "register_operand" "=d")
                    860:        (and:DI (match_operand:DI 1 "register_operand" "%0")
                    861:                (match_operand:DI 2 "" "")))]
                    862:   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
                    863:    || (GET_CODE (operands[2]) == CONST_DOUBLE
                    864:        && CONST_DOUBLE_HIGH (operands[2]) == -1)"
                    865:   "and %2,%0")
                    866: 
                    867: (define_insn "anddi3"
                    868:   [(set (match_operand:DI 0 "register_operand" "=d")
                    869:        (and:DI (match_operand:DI 1 "register_operand" "%0")
                    870:                (match_operand:DI 2 "register_operand" "d")))]
                    871:   ""
                    872:   "and %2,%0")
                    873: 
                    874: (define_insn "andsi3"
                    875:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    876:        (and:SI (match_operand:SI 1 "register_operand" "%0,0")
                    877:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                    878:   ""
                    879:   "and %2,%0")
                    880: 
                    881: (define_insn "andhi3"
                    882:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    883:        (and:HI (match_operand:HI 1 "register_operand" "%0,0")
                    884:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
                    885:   ""
                    886:   "and %2,%0")
                    887: 
                    888: (define_insn "andqi3"
                    889:   [(set (match_operand:QI 0 "register_operand" "=d,a")
                    890:        (and:QI (match_operand:QI 1 "register_operand" "%0,0")
                    891:                (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
                    892:   ""
                    893:   "and %2,%0")
                    894: 
                    895: ;;- Bit set instructions.
                    896: 
                    897: (define_insn ""
                    898:   [(set (match_operand:DI 0 "register_operand" "=d")
                    899:        (ior:DI (match_operand:DI 1 "register_operand" "%0")
                    900:                (match_operand:DI 2 "" "")))]
                    901:   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
                    902:    || (GET_CODE (operands[2]) == CONST_DOUBLE
                    903:        && CONST_DOUBLE_HIGH (operands[2]) == 0)"
                    904:   "or %2,%0")
                    905: 
                    906: (define_insn "iordi3"
                    907:   [(set (match_operand:DI 0 "register_operand" "=d")
                    908:        (ior:DI (match_operand:DI 1 "register_operand" "%0")
                    909:                (match_operand:DI 2 "register_operand" "d")))]
                    910:   ""
                    911:   "or %2,%0")
                    912: 
                    913: (define_insn "iorsi3"
                    914:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    915:        (ior:SI (match_operand:SI 1 "register_operand" "%0,0")
                    916:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                    917:   ""
                    918:   "or %2,%0")
                    919: 
                    920: (define_insn "iorhi3"
                    921:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    922:        (ior:HI (match_operand:HI 1 "register_operand" "%0,0")
                    923:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
                    924:   ""
                    925:   "or %2,%0")
                    926: 
                    927: (define_insn "iorqi3"
                    928:   [(set (match_operand:QI 0 "register_operand" "=d,a")
                    929:        (ior:QI (match_operand:QI 1 "register_operand" "%0,0")
                    930:                (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
                    931:   ""
                    932:   "or %2,%0")
                    933: 
                    934: ;;- xor instructions.
                    935: 
                    936: (define_insn ""
                    937:   [(set (match_operand:DI 0 "register_operand" "=d")
                    938:        (xor:DI (match_operand:DI 1 "register_operand" "%0")
                    939:                (match_operand:DI 2 "" "")))]
                    940:   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
                    941:    || (GET_CODE (operands[2]) == CONST_DOUBLE
                    942:        && CONST_DOUBLE_HIGH (operands[2]) == 0)"
                    943:   "xor %2,%0")
                    944: 
                    945: (define_insn "xordi3"
                    946:   [(set (match_operand:DI 0 "register_operand" "=d")
                    947:        (xor:DI (match_operand:DI 1 "register_operand" "%0")
                    948:                (match_operand:DI 2 "register_operand" "d")))]
                    949:   ""
                    950:   "xor %2,%0")
                    951: 
                    952: (define_insn "xorsi3"
                    953:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    954:        (xor:SI (match_operand:SI 1 "register_operand" "%0,0")
                    955:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                    956:   ""
                    957:   "xor %2,%0")
                    958: 
                    959: (define_insn "xorhi3"
                    960:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                    961:        (xor:HI (match_operand:HI 1 "register_operand" "%0,0")
                    962:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
                    963:   ""
                    964:   "xor %2,%0")
                    965: 
                    966: (define_insn "xorqi3"
                    967:   [(set (match_operand:QI 0 "register_operand" "=d,a")
                    968:        (xor:QI (match_operand:QI 1 "register_operand" "%0,0")
                    969:                (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
                    970:   ""
                    971:   "xor %2,%0")
                    972: 
                    973: (define_insn "negdf2"
                    974:   [(set (match_operand:DF 0 "register_operand" "=d")
                    975:        (neg:DF (match_operand:DF 1 "register_operand" "d")))]
                    976:   ""
                    977:   "neg.d %1,%0"
                    978:   [(set_attr "type" "addd")])
                    979: 
                    980: (define_insn "negsf2"
                    981:   [(set (match_operand:SF 0 "register_operand" "=d")
                    982:        (neg:SF (match_operand:SF 1 "register_operand" "d")))]
                    983:   ""
                    984:   "neg.s %1,%0"
                    985:   [(set_attr "type" "adds")])
                    986: 
                    987: (define_insn "negdi2"
                    988:   [(set (match_operand:DI 0 "register_operand" "=d")
                    989:        (neg:DI (match_operand:DI 1 "register_operand" "d")))]
                    990:   ""
                    991:   "neg.l %1,%0")
                    992: 
                    993: (define_insn "negsi2"
                    994:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                    995:        (neg:SI (match_operand:SI 1 "register_operand" "d,a")))]
                    996:   ""
                    997:   "neg.w %1,%0")
                    998: 
                    999: (define_insn "neghi2"
                   1000:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                   1001:        (neg:HI (match_operand:HI 1 "register_operand" "d,a")))]
                   1002:   ""
                   1003:   "neg.h %1,%0")
                   1004: 
                   1005: (define_insn "negqi2"
                   1006:   [(set (match_operand:QI 0 "register_operand" "=d")
                   1007:        (neg:QI (match_operand:QI 1 "register_operand" "d")))]
                   1008:   ""
                   1009:   "neg.b %1,%0")
                   1010: 
                   1011: (define_insn "one_cmpldi2"
                   1012:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1013:        (not:DI (match_operand:DI 1 "register_operand" "d")))]
                   1014:   ""
                   1015:   "not %1,%0")
                   1016: 
                   1017: (define_insn "one_cmplsi2"
                   1018:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                   1019:        (not:SI (match_operand:SI 1 "register_operand" "d,a")))]
                   1020:   ""
                   1021:   "not %1,%0")
                   1022: 
                   1023: (define_insn "one_cmplhi2"
                   1024:   [(set (match_operand:HI 0 "register_operand" "=d,a")
                   1025:        (not:HI (match_operand:HI 1 "register_operand" "d,a")))]
                   1026:   ""
                   1027:   "not %1,%0")
                   1028: 
                   1029: (define_insn "one_cmplqi2"
                   1030:   [(set (match_operand:QI 0 "register_operand" "=d,a")
                   1031:        (not:QI (match_operand:QI 1 "register_operand" "d,a")))]
                   1032:   ""
                   1033:   "not %1,%0")
                   1034: 
                   1035: ;;- Shifts
                   1036: ;;
                   1037: ;; The extreme profusion of patterns here is due to the different-speed
                   1038: ;; shifts on different machines, and the C1's lack of word shift S-register
                   1039: ;; instructions.
                   1040: 
                   1041: ;; SImode
                   1042: 
                   1043: ;; Logical left 1, 1 cycle on all machines via add
                   1044: 
                   1045: (define_insn ""
                   1046:   [(set (match_operand:SI 0 "register_operand" "=r")
                   1047:        (lshift:SI (match_operand:SI 1 "register_operand" "0")
                   1048:                   (const_int 1)))]
                   1049:   ""
                   1050:   "add.w %0,%0")
                   1051: 
                   1052: ;; C34 general shift is 1 cycle
                   1053: 
                   1054: (define_insn ""
                   1055:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                   1056:        (lshift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1057:                   (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                   1058:   "TARGET_C34"
                   1059:   "@
                   1060:    shf.w %2,%0
                   1061:    shf %2,%0"
                   1062:   [(set_attr "type" "shfw,shfw")])
                   1063: 
                   1064: ;; else shift left 0..7 is 1 cycle if we use an A register
                   1065: 
                   1066: (define_insn ""
                   1067:   [(set (match_operand:SI 0 "register_operand" "=a,?d")
                   1068:        (lshift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1069:                   (match_operand:SI 2 "immediate_operand" "ai,di")))]
                   1070:   "TARGET_C1 && INTVAL (operands[2]) < (unsigned) 8"
                   1071:   "@
                   1072:    shf %2,%0
                   1073:    shf %2,%0"
                   1074:   [(set_attr "type" "alu,shfl")])
                   1075: 
                   1076: (define_insn ""
                   1077:   [(set (match_operand:SI 0 "register_operand" "=a,?d")
                   1078:        (lshift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1079:                   (match_operand:SI 2 "immediate_operand" "ai,di")))]
                   1080:   "INTVAL (operands[2]) < (unsigned) 8"
                   1081:   "@
                   1082:    shf %2,%0
                   1083:    shf.w %2,%0"
                   1084:   [(set_attr "type" "alu,shfw")])
                   1085: 
                   1086: ;; else general left shift
                   1087: 
                   1088: (define_insn ""
                   1089:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                   1090:        (lshift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1091:                   (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                   1092:   "TARGET_C1"
                   1093:   "@
                   1094:    shf %2,%0
                   1095:    shf %2,%0"
                   1096:   [(set_attr "type" "shfl,shfw")])
                   1097: 
                   1098: ;; (but C2 shift left by a constant can is faster via multiply)
                   1099: 
                   1100: (define_insn ""
                   1101:   [(set (match_operand:SI 0 "register_operand" "=r")
                   1102:        (lshift:SI (match_operand:SI 1 "register_operand" "0")
                   1103:                   (match_operand:SI 2 "const_int_operand" "i")))]
                   1104:   "TARGET_C2 && INTVAL (operands[2]) < (unsigned) 32"
                   1105:   "mul.w %z2,%0"
                   1106:   [(set_attr "type" "mulw")])
                   1107: 
                   1108: (define_insn "lshlsi3"
                   1109:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                   1110:        (lshift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1111:                   (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                   1112:   ""
                   1113:   "@
                   1114:    shf.w %2,%0
                   1115:    shf %2,%0"
                   1116:   [(set_attr "type" "shfw,shfw")])
                   1117: 
                   1118: ;; Arithmetic left 1, 1 cycle on all machines via add
                   1119: 
                   1120: (define_insn ""
                   1121:   [(set (match_operand:SI 0 "register_operand" "=r")
                   1122:        (ashift:SI (match_operand:SI 1 "register_operand" "0")
                   1123:                   (const_int 1)))]
                   1124:   ""
                   1125:   "add.w %0,%0")
                   1126: 
                   1127: ;; C34 general shift is 1 cycle
                   1128: 
                   1129: (define_insn ""
                   1130:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                   1131:        (ashift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1132:                   (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                   1133:   "TARGET_C34"
                   1134:   "@
                   1135:    shf.w %2,%0
                   1136:    shf %2,%0"
                   1137:   [(set_attr "type" "shfw,shfw")])
                   1138: 
                   1139: ;; else shift left 0..7 is 1 cycle if we use an A register
                   1140: 
                   1141: (define_insn ""
                   1142:   [(set (match_operand:SI 0 "register_operand" "=a,?d")
                   1143:        (ashift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1144:                   (match_operand:SI 2 "immediate_operand" "ai,di")))]
                   1145:   "TARGET_C1 && INTVAL (operands[2]) < (unsigned) 8"
                   1146:   "@
                   1147:    shf %2,%0
                   1148:    shf %2,%0"
                   1149:   [(set_attr "type" "alu,shfl")])
                   1150: 
                   1151: (define_insn ""
                   1152:   [(set (match_operand:SI 0 "register_operand" "=a,?d")
                   1153:        (ashift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1154:                   (match_operand:SI 2 "immediate_operand" "ai,di")))]
                   1155:   "INTVAL (operands[2]) < (unsigned) 8"
                   1156:   "@
                   1157:    shf %2,%0
                   1158:    shf.w %2,%0"
                   1159:   [(set_attr "type" "alu,shfw")])
                   1160: 
                   1161: ;; else general left shift
                   1162: 
                   1163: (define_insn ""
                   1164:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                   1165:        (ashift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1166:                   (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                   1167:   "TARGET_C1"
                   1168:   "@
                   1169:    shf %2,%0
                   1170:    shf %2,%0"
                   1171:   [(set_attr "type" "shfl,shfw")])
                   1172: 
                   1173: (define_insn ""
                   1174:   [(set (match_operand:SI 0 "register_operand" "=r")
                   1175:        (ashift:SI (match_operand:SI 1 "register_operand" "0")
                   1176:                   (match_operand:SI 2 "const_int_operand" "i")))]
                   1177:   "TARGET_C2 && INTVAL (operands[2]) < (unsigned) 32"
                   1178:   "mul.w %z2,%0"
                   1179:   [(set_attr "type" "mulw")])
                   1180: 
                   1181: (define_insn "ashlsi3"
                   1182:   [(set (match_operand:SI 0 "register_operand" "=d,a")
                   1183:        (ashift:SI (match_operand:SI 1 "register_operand" "0,0")
                   1184:                   (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
                   1185:   ""
                   1186:   "@
                   1187:    shf.w %2,%0
                   1188:    shf %2,%0"
                   1189:   [(set_attr "type" "shfw,shfw")])
                   1190: 
                   1191: ;; Logical right, general
                   1192: ;; The hardware wants the negative of the shift count
                   1193: 
                   1194: (define_expand "lshrsi3"
                   1195:   [(set (match_operand:SI 0 "register_operand" "")
                   1196:        (lshiftrt:SI (match_operand:SI 1 "register_operand" "")
                   1197:                     (neg:SI (match_operand:SI 2 "nonmemory_operand" ""))))]
                   1198:   ""
                   1199:   "operands[2] = negate_rtx (SImode, operands[2]);")
                   1200: 
                   1201: ;; C1 lacks word shift S reg
                   1202: 
                   1203: (define_insn ""
                   1204:   [(set
                   1205:     (match_operand:SI 0 "register_operand" "=a,?d")
                   1206:     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0")
                   1207:                 (neg:SI (match_operand:SI 2 "nonmemory_operand" "ai,di"))))]
                   1208:   "TARGET_C1"
                   1209:   "@
                   1210:    shf %2,%0
                   1211:    ld.u #0,%0\;shf %2,%0"
                   1212:   [(set_attr "type" "shfw,shfl")])
                   1213: 
                   1214: ;; general case
                   1215: 
                   1216: (define_insn ""
                   1217:   [(set
                   1218:     (match_operand:SI 0 "register_operand" "=d,a")
                   1219:     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0")
                   1220:                 (neg:SI (match_operand:SI 2 "nonmemory_operand" "di,ai"))))]
                   1221:   ""
                   1222:   "@
                   1223:    shf.w %2,%0
                   1224:    shf %2,%0"
                   1225:   [(set_attr "type" "shfw,shfw")])
                   1226: 
                   1227: ;; Patterns without neg produced by constant folding
                   1228: 
                   1229: (define_insn ""
                   1230:   [(set
                   1231:     (match_operand:SI 0 "register_operand" "=a,?d")
                   1232:     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0")
                   1233:                 (match_operand:SI 2 "immediate_operand" "i,i")))]
                   1234:   "TARGET_C1"
                   1235:   "@
                   1236:    shf #%n2,%0
                   1237:    ld.u #0,%0\;shf #%n2,%0"
                   1238:   [(set_attr "type" "shfw,shfl")])
                   1239: 
                   1240: (define_insn ""
                   1241:   [(set
                   1242:     (match_operand:SI 0 "register_operand" "=d,a")
                   1243:     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0")
                   1244:                 (match_operand:SI 2 "immediate_operand" "i,i")))]
                   1245:   ""
                   1246:   "@
                   1247:    shf.w #%n2,%0
                   1248:    shf #%n2,%0"
                   1249:   [(set_attr "type" "shfw,shfw")])
                   1250: 
                   1251: ;; Arithmetic right, general
                   1252: ;; Sign-extend to 64 bits, then shift that.  Works for 0..32.
                   1253: 
                   1254: (define_expand "ashrsi3"
                   1255:   [(set (match_operand:SI 0 "register_operand" "")
                   1256:        (ashiftrt:SI (match_operand:SI 1 "register_operand" "")
                   1257:                     (neg:SI (match_operand:SI 2 "nonmemory_operand" ""))))]
                   1258:   ""
                   1259:   "operands[2] = negate_rtx (SImode, operands[2]);")
                   1260: 
                   1261: (define_insn ""
                   1262:   [(set (match_operand:SI 0 "register_operand" "=d,&d")
                   1263:        (ashiftrt:SI (match_operand:SI 1 "register_operand" "0,d")
                   1264:                     (neg:SI
                   1265:                      (match_operand:SI 2 "nonmemory_operand" "di,di"))))]
                   1266:   ""
                   1267:   "cvtw.l %1,%0\;shf %2,%0"
                   1268:   [(set_attr "type" "shfl,shfl")])
                   1269: 
                   1270: (define_insn ""
                   1271:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1272:        (ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
                   1273:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1274:   ""
                   1275:   "cvtw.l %1,%0\;shf #%n2,%0"
                   1276:   [(set_attr "type" "shfl")])
                   1277: 
                   1278: ;; DImode
                   1279: ;; Logical left, 1-cycle
                   1280: 
                   1281: (define_insn ""
                   1282:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1283:        (lshift:DI (match_operand:DI 1 "register_operand" "0")
                   1284:                   (const_int 1)))]
                   1285:   ""
                   1286:   "add.l %0,%0")
                   1287: 
                   1288: ;; Logical left, general
                   1289: 
                   1290: (define_insn "lshldi3"
                   1291:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1292:        (lshift:DI (match_operand:DI 1 "register_operand" "0")
                   1293:                   (match_operand:SI 2 "nonmemory_operand" "di")))]
                   1294:   ""
                   1295:   "shf %2,%0"
                   1296:   [(set_attr "type" "shfl")])
                   1297: 
                   1298: ;; Arithmetic left, 1-cycle
                   1299: 
                   1300: (define_insn ""
                   1301:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1302:        (ashift:DI (match_operand:DI 1 "register_operand" "0")
                   1303:                   (const_int 1)))]
                   1304:   ""
                   1305:   "add.l %0,%0")
                   1306: 
                   1307: ;; Arithmetic left, general
                   1308: 
                   1309: (define_insn "ashldi3"
                   1310:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1311:        (ashift:DI (match_operand:DI 1 "register_operand" "0")
                   1312:                   (match_operand:SI 2 "nonmemory_operand" "di")))]
                   1313:   ""
                   1314:   "shf %2,%0"
                   1315:   [(set_attr "type" "shfl")])
                   1316: 
                   1317: ;; Can omit zero- or sign-extend if shift is 32 or more.
                   1318: 
                   1319: (define_insn ""
                   1320:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1321:        (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "0"))
                   1322:                   (match_operand:SI 2 "const_int_operand" "i")))]
                   1323:   "INTVAL (operands[2]) >= 32"
                   1324:   "shf %2,%0"
                   1325:   [(set_attr "type" "shfl")])
                   1326: 
                   1327: (define_insn ""
                   1328:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1329:        (ashift:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "0"))
                   1330:                   (match_operand:SI 2 "const_int_operand" "i")))]
                   1331:   "INTVAL (operands[2]) >= 32"
                   1332:   "shf %2,%0"
                   1333:   [(set_attr "type" "shfl")])
                   1334: 
                   1335: ;; Logical right, general
                   1336: 
                   1337: (define_expand "lshrdi3"
                   1338:   [(set (match_operand:DI 0 "register_operand" "")
                   1339:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   1340:                     (neg:SI (match_operand:SI 2 "nonmemory_operand" ""))))]
                   1341:   ""
                   1342:   "operands[2] = negate_rtx (SImode, operands[2]);")
                   1343: 
                   1344: (define_insn ""
                   1345:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1346:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
                   1347:                     (neg:SI (match_operand:SI 2 "nonmemory_operand" "di"))))]
                   1348:   ""
                   1349:   "shf %2,%0"
                   1350:   [(set_attr "type" "shfl")])
                   1351: 
                   1352: (define_insn ""
                   1353:   [(set (match_operand:DI 0 "register_operand" "=d")
                   1354:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
                   1355:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1356:   ""
                   1357:   "shf #%n2,%0"
                   1358:   [(set_attr "type" "shfl")])
                   1359: 
                   1360: ;; Arithmetic right, general
                   1361: ;; Use
                   1362: ;;     ((a >> b) ^ signbit) - signbit
                   1363: ;; where signbit is (1 << 63) >> b
                   1364: ;; Works for 0..63.  Does not work for 64; unfortunate but legal.
                   1365: 
                   1366: (define_expand "ashrdi3"
                   1367:   [(set (match_operand:DI 0 "register_operand" "")
                   1368:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   1369:                     (neg:SI (match_operand:SI 2 "nonmemory_operand" ""))))
                   1370:    (set (match_dup 3) (lshiftrt:DI (match_dup 3) (neg:SI (match_dup 2))))
                   1371:    (set (match_dup 0) (xor:DI (match_dup 0) (match_dup 3)))
                   1372:    (set (match_dup 0) (minus:DI (match_dup 0) (match_dup 3)))]
                   1373:   ""
                   1374:   "
                   1375: {
                   1376:   if (GET_CODE (operands[2]) == CONST_INT)
                   1377:     switch (INTVAL (operands[2]))
                   1378:       {
                   1379:       case 32:
                   1380:        emit_insn (gen_ashrdi3_32 (operands[0], operands[1]));
                   1381:        DONE;
                   1382:       }
                   1383: 
                   1384:   operands[2] = negate_rtx (SImode, operands[2]);
                   1385:   operands[3] = force_reg (DImode, immed_double_const (0, 1 << 31, DImode));
                   1386: }")
                   1387: 
                   1388: ;; Arithmetic right 32, a common case that can save a couple of insns.
                   1389: 
                   1390: (define_expand "ashrdi3_32"
                   1391:   [(set (match_operand:DI 0 "register_operand" "")
                   1392:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
                   1393:                     (const_int 32)))
                   1394:    (set (match_dup 0)
                   1395:        (sign_extend:DI (subreg:SI (match_dup 0) 0)))]
                   1396:   ""
                   1397:   "")
                   1398: 
                   1399: ;; __builtin instructions
                   1400: 
                   1401: (define_insn "sqrtdf2"
                   1402:   [(set (match_operand:DF 0 "register_operand" "=d")
                   1403:        (sqrt:DF (match_operand:DF 1 "register_operand" "0")))]
                   1404:   "! TARGET_C1 && flag_fast_math"
                   1405:   "sqrt.d %0"
                   1406:   [(set_attr "type" "divd")])
                   1407: 
                   1408: (define_insn "sqrtsf2"
                   1409:   [(set (match_operand:SF 0 "register_operand" "=d")
                   1410:        (sqrt:SF (match_operand:SF 1 "register_operand" "0")))]
                   1411:   "! TARGET_C1 && flag_fast_math"
                   1412:   "sqrt.s %0"
                   1413:   [(set_attr "type" "divs")])
                   1414: 
                   1415: (define_insn "sindf2"
                   1416:   [(set (match_operand:DF 0 "register_operand" "=d")
                   1417:        (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))]
                   1418:   "! TARGET_C1 && flag_fast_math"
                   1419:   "sin.d %0")
                   1420: 
                   1421: (define_insn "sinsf2"
                   1422:   [(set (match_operand:SF 0 "register_operand" "=d")
                   1423:        (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))]
                   1424:   "! TARGET_C1 && flag_fast_math"
                   1425:   "sin.s %0")
                   1426: 
                   1427: (define_insn "cosdf2"
                   1428:   [(set (match_operand:DF 0 "register_operand" "=d")
                   1429:        (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))]
                   1430:   "! TARGET_C1 && flag_fast_math"
                   1431:   "cos.d %0")
                   1432: 
                   1433: (define_insn "cossf2"
                   1434:   [(set (match_operand:SF 0 "register_operand" "=d")
                   1435:        (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))]
                   1436:   "! TARGET_C1 && flag_fast_math"
                   1437:   "cos.s %0")
                   1438: 
                   1439: (define_insn "ftruncdf2"
                   1440:   [(set (match_operand:DF 0 "register_operand" "=d")
                   1441:        (fix:DF (match_operand:DF 1 "register_operand" "d")))]
                   1442:   "! TARGET_C1"
                   1443:   "frint.d %1,%0"
                   1444:   [(set_attr "type" "cvtd")])
                   1445: 
                   1446: (define_insn "ftruncsf2"
                   1447:   [(set (match_operand:SF 0 "register_operand" "=d")
                   1448:        (fix:SF (match_operand:SF 1 "register_operand" "d")))]
                   1449:   "! TARGET_C1"
                   1450:   "frint.s %1,%0"
                   1451:   [(set_attr "type" "cvts")])
                   1452: 
                   1453: (define_insn ""
                   1454:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1455:        (minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
                   1456:                  (const_int 1)))]
                   1457:   ""
                   1458:   "tzc %1,%0\;le.w #32,%0\;jbrs.f L0%=\;ld.w #-1,%0\\nL0%=:")
                   1459: 
                   1460: (define_expand "ffssi2"
                   1461:   [(set (match_operand:SI 0 "register_operand" "=d")
                   1462:        (minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
                   1463:                  (const_int 1)))
                   1464:    (set (match_dup 0)
                   1465:        (plus:SI (match_dup 0)
                   1466:                 (const_int 1)))]
                   1467:   ""
                   1468:   "")
                   1469: 
                   1470: (define_insn "abssf2"
                   1471:   [(set (match_operand:SF 0 "register_operand" "=d")
                   1472:        (abs:SF (match_operand:SF 1 "register_operand" "0")))]
                   1473:   ""
                   1474:   "and #0x7fffffff,%0")
                   1475: 
                   1476: (define_expand "absdf2"
                   1477:   [(set (subreg:DI (match_operand:DF 0 "register_operand" "=d") 0)
                   1478:        (and:DI (subreg:DI (match_operand:DF 1 "register_operand" "d") 0)
                   1479:                (match_dup 2)))]
                   1480:   ""
                   1481:   "operands[2] = force_reg (DImode,
                   1482:                             immed_double_const (-1, 0x7fffffff, DImode));")
                   1483: 
                   1484: ;;- Compares
                   1485: 
                   1486: (define_insn "cmpdi"
                   1487:   [(set (cc0)
                   1488:        (compare (match_operand:DI 0 "register_operand" "d")
                   1489:                 (match_operand:DI 1 "register_operand" "d")))]
                   1490:   ""
                   1491:   "* return output_cmp (operands[0], operands[1], 'l');")
                   1492: 
                   1493: (define_insn ""
                   1494:   [(set (cc0) (match_operand:DI 0 "register_operand" "d"))
                   1495:    (clobber (match_scratch:DI 1 "=d"))]
                   1496:   "next_insn_tests_no_inequality (insn)"
                   1497:   "* return output_cmp (operands[0], operands[1], 'L');")
                   1498: 
                   1499: (define_insn "cmpsi"
                   1500:   [(set (cc0)
                   1501:        (compare (match_operand:SI 0 "register_operand" "d,a")
                   1502:                 (match_operand:SI 1 "nonmemory_operand" "di,ai")))]
                   1503:   ""
                   1504:   "* return output_cmp (operands[0], operands[1], 'w');")
                   1505: 
                   1506: (define_insn "cmphi"
                   1507:   [(set (cc0)
                   1508:        (compare (match_operand:HI 0 "register_operand" "d,a")
                   1509:                 (match_operand:HI 1 "nonmemory_operand" "di,ai")))]
                   1510:   ""
                   1511:   "* return output_cmp (operands[0], operands[1], 'h');")
                   1512: 
                   1513: ; cmpqi is intentionally omitted.
                   1514: ;
                   1515: ; gcc will sign-extend or zero-extend the operands to the next
                   1516: ; wider mode, HImode.
                   1517: ;
                   1518: ; For reg .cmp. constant, we just go with the halfword immediate
                   1519: ; instruction.  Perhaps the widening insn can be cse'd or combined away.
                   1520: ; If not, we're still as good as loading a byte constant into a register
                   1521: ; to do a reg-reg byte compare.
                   1522: ;
                   1523: ; The following patterns pick up cases that can use reg .cmp. reg after all.
                   1524: 
                   1525: (define_insn ""
                   1526:   [(set (cc0)
                   1527:        (compare
                   1528:         (sign_extend:HI (match_operand:QI 0 "register_operand" "d"))
                   1529:         (sign_extend:HI (match_operand:QI 1 "register_operand" "d"))))]
                   1530:   ""
                   1531:   "* return output_cmp (operands[0], operands[1], 'b');")
                   1532: 
                   1533: (define_insn ""
                   1534:   [(set (cc0)
                   1535:        (compare
                   1536:         (ashift:HI (subreg:HI (match_operand:QI 0 "register_operand" "d") 0)
                   1537:                    (const_int 8))
                   1538:         (ashift:HI (subreg:HI (match_operand:QI 1 "register_operand" "d") 0)
                   1539:                    (const_int 8))))]
                   1540:   ""
                   1541:   "* return output_cmp (operands[0], operands[1], 'b');")
                   1542: 
                   1543: (define_insn ""
                   1544:   [(set (cc0)
                   1545:        (compare (match_operand:QI 0 "register_operand" "d")
                   1546:                 (match_operand:QI 1 "register_operand" "d")))]
                   1547:   ""
                   1548:   "* return output_cmp (operands[0], operands[1], 'b');")
                   1549: 
                   1550: (define_insn ""
                   1551:   [(set (cc0) (match_operand:QI 0 "register_operand" "d,a"))
                   1552:    (clobber (match_scratch:QI 1 "=d,a"))]
                   1553:   "next_insn_tests_no_inequality (insn)"
                   1554:   "* return output_cmp (operands[0], operands[1], 'B');")
                   1555: 
                   1556: (define_insn ""
                   1557:   [(set (cc0) (subreg (match_operand:QI 0 "register_operand" "d,a") 0))
                   1558:    (clobber (match_scratch:QI 1 "=d,a"))]
                   1559:   "next_insn_tests_no_inequality (insn)"
                   1560:   "* return output_cmp (operands[0], operands[1], 'B');")
                   1561: 
                   1562: (define_insn ""
                   1563:   [(set (cc0)
                   1564:        (zero_extend (subreg (match_operand:QI 0 "register_operand" "d,a") 0)))
                   1565:    (clobber (match_scratch:QI 1 "=d,a"))]
                   1566:   "next_insn_tests_no_inequality (insn)"
                   1567:   "* return output_cmp (operands[0], operands[1], 'B');")
                   1568: 
                   1569: (define_insn "cmpdf"
                   1570:   [(set (cc0)
                   1571:        (compare (match_operand:DF 0 "register_operand" "d")
                   1572:                 (match_operand:DF 1 "register_operand" "d")))]
                   1573:   ""
                   1574:   "* return output_cmp (operands[0], operands[1], 'd');")
                   1575: 
                   1576: (define_insn "cmpsf"
                   1577:   [(set (cc0)
                   1578:        (compare (match_operand:SF 0 "register_operand" "d")
                   1579:                 (match_operand:SF 1 "nonmemory_cmpsf_operand" "dF")))]
                   1580:   ""
                   1581:   "* return output_cmp (operands[0], operands[1], 's');")
                   1582: 
                   1583: ;; decrement-and-set-cc0 insns.
                   1584: ;;
                   1585: ;; The most important case where we can use the carry bit from an
                   1586: ;; arithmetic insn to eliminate a redundant compare is the decrement in
                   1587: ;; constructs like while (n--) and while (--n >= 0).  
                   1588: ;;
                   1589: ;; We do it with combine patterns instead of NOTICE_UPDATE_CC because
                   1590: ;; the decrement needs to be kept at the end of the block during scheduling.
                   1591: ;; 
                   1592: ;; These patterns must have memory alternatives because reload refuses
                   1593: ;; to do output reloads for an insn that sets cc0 (since it does not
                   1594: ;; want to clobber cc0 with its moves).  Convex moves do not clobber
                   1595: ;; cc0, but there is no evident way to get reload to know that.
                   1596: 
                   1597: (define_insn ""
                   1598:   [(set (cc0)
                   1599:        (match_operand:SI 0 "register_operand" "+r,*m"))
                   1600:    (set (match_dup 0)
                   1601:        (plus:SI (match_dup 0)
                   1602:                 (const_int -1)))]
                   1603:   "next_insn_tests_no_inequality (insn)"
                   1604:   "*
                   1605: {
                   1606:   if (which_alternative == 0)
                   1607:     {
                   1608:       output_cmp (operands[0], constm1_rtx, 'W');
                   1609:       return \"add.w #-1,%0\";
                   1610:     }
                   1611:   else
                   1612:     {
                   1613:       output_cmp (gen_rtx (REG, SImode, 7), constm1_rtx, 'W');
                   1614:       return \"psh.w s7\;ld.w %0,s7\;add.w #-1,s7\;st.w s7,%0\;pop.w s7\";
                   1615:     }
                   1616: }")
                   1617:      
                   1618: (define_insn ""
                   1619:   [(set (cc0)
                   1620:        (plus:SI (match_operand:SI 0 "register_operand" "+r,*m")
                   1621:                 (const_int -1)))
                   1622:    (set (match_dup 0)
                   1623:        (plus:SI (match_dup 0)
                   1624:                 (const_int -1)))]
                   1625:   "find_reg_note (next_cc0_user (insn), REG_NONNEG, 0)"
                   1626:   "*
                   1627: {
                   1628:   if (which_alternative == 0)
                   1629:     {
                   1630:       output_cmp (operands[0], const0_rtx, 'W');
                   1631:       return \"add.w #-1,%0\";
                   1632:     }
                   1633:   else
                   1634:     {
                   1635:       output_cmp (gen_rtx (REG, SImode, 7), const0_rtx, 'W');
                   1636:       return \"psh.w s7\;ld.w %0,s7\;add.w #-1,s7\;st.w s7,%0\;pop.w s7\";
                   1637:     }
                   1638: }")
                   1639: 
                   1640: (define_insn ""
                   1641:   [(set (cc0)
                   1642:        (match_operand:HI 0 "register_operand" "+r,*m"))
                   1643:    (set (match_dup 0)
                   1644:        (plus:HI (match_dup 0)
                   1645:                 (const_int -1)))]
                   1646:   "next_insn_tests_no_inequality (insn)"
                   1647:   "*
                   1648: {
                   1649:   if (which_alternative == 0)
                   1650:     {
                   1651:       output_cmp (operands[0], constm1_rtx, 'W');
                   1652:       return \"add.w #-1,%0\";
                   1653:     }
                   1654:   else
                   1655:     {
                   1656:       output_cmp (gen_rtx (REG, HImode, 7), constm1_rtx, 'W');
                   1657:       return \"psh.w s7\;ld.h %0,s7\;add.h #-1,s7\;st.h s7,%0\;pop.w s7\";
                   1658:     }
                   1659: }")
                   1660:      
                   1661: (define_insn ""
                   1662:   [(set (cc0)
                   1663:        (plus:HI (match_operand:HI 0 "register_operand" "+r,*m")
                   1664:                 (const_int -1)))
                   1665:    (set (match_dup 0)
                   1666:        (plus:HI (match_dup 0)
                   1667:                 (const_int -1)))]
                   1668:   "find_reg_note (next_cc0_user (insn), REG_NONNEG, 0)"
                   1669:   "*
                   1670: {
                   1671:   if (which_alternative == 0)
                   1672:     {
                   1673:       output_cmp (operands[0], const0_rtx, 'W');
                   1674:       return \"add.w #-1,%0\";
                   1675:     }
                   1676:   else
                   1677:     {
                   1678:       output_cmp (gen_rtx (REG, HImode, 7), const0_rtx, 'W');
                   1679:       return \"psh.w s7\;ld.h %0,s7\;add.h #-1,s7\;st.h s7,%0\;pop.w s7\";
                   1680:     }
                   1681: }")
                   1682: 
                   1683: ;;- Jumps
                   1684: 
                   1685: (define_insn "jump"
                   1686:   [(set (pc)
                   1687:        (label_ref (match_operand 0 "" "")))]
                   1688:   ""
                   1689:   "jbr %l0")
                   1690: 
                   1691: (define_insn "beq"
                   1692:   [(set (pc)
                   1693:        (if_then_else (eq (cc0)
                   1694:                          (const_int 0))
                   1695:                      (label_ref (match_operand 0 "" ""))
                   1696:                      (pc)))]
                   1697:   ""
                   1698:   "* return output_condjump (operands[0], \"eq\", 't'); ")
                   1699: 
                   1700: (define_insn "bne"
                   1701:   [(set (pc)
                   1702:        (if_then_else (ne (cc0)
                   1703:                          (const_int 0))
                   1704:                      (label_ref (match_operand 0 "" ""))
                   1705:                      (pc)))]
                   1706:   ""
                   1707:   "* return output_condjump (operands[0], \"eq\", 'f'); ")
                   1708: 
                   1709: (define_insn "bgt"
                   1710:   [(set (pc)
                   1711:        (if_then_else (gt (cc0)
                   1712:                          (const_int 0))
                   1713:                      (label_ref (match_operand 0 "" ""))
                   1714:                      (pc)))]
                   1715:   ""
                   1716:   "* return output_condjump (operands[0], \"le\", 'f'); ")
                   1717: 
                   1718: (define_insn "bgtu"
                   1719:   [(set (pc)
                   1720:        (if_then_else (gtu (cc0)
                   1721:                           (const_int 0))
                   1722:                      (label_ref (match_operand 0 "" ""))
                   1723:                      (pc)))]
                   1724:   ""
                   1725:   "* return output_condjump (operands[0], \"leu\", 'f'); ")
                   1726: 
                   1727: (define_insn "blt"
                   1728:   [(set (pc)
                   1729:        (if_then_else (lt (cc0)
                   1730:                          (const_int 0))
                   1731:                      (label_ref (match_operand 0 "" ""))
                   1732:                      (pc)))]
                   1733:   ""
                   1734:   "* return output_condjump (operands[0], \"lt\", 't'); ")
                   1735: 
                   1736: (define_insn "bltu"
                   1737:   [(set (pc)
                   1738:        (if_then_else (ltu (cc0)
                   1739:                           (const_int 0))
                   1740:                      (label_ref (match_operand 0 "" ""))
                   1741:                      (pc)))]
                   1742:   ""
                   1743:   "* return output_condjump (operands[0], \"ltu\", 't'); ")
                   1744: 
                   1745: (define_insn "bge"
                   1746:   [(set (pc)
                   1747:        (if_then_else (ge (cc0)
                   1748:                          (const_int 0))
                   1749:                      (label_ref (match_operand 0 "" ""))
                   1750:                      (pc)))]
                   1751:   ""
                   1752:   "* return output_condjump (operands[0], \"lt\", 'f'); ")
                   1753: 
                   1754: (define_insn "bgeu"
                   1755:   [(set (pc)
                   1756:        (if_then_else (geu (cc0)
                   1757:                           (const_int 0))
                   1758:                      (label_ref (match_operand 0 "" ""))
                   1759:                      (pc)))]
                   1760:   ""
                   1761:   "* return output_condjump (operands[0], \"ltu\", 'f'); ")
                   1762: 
                   1763: (define_insn "ble"
                   1764:   [(set (pc)
                   1765:        (if_then_else (le (cc0)
                   1766:                          (const_int 0))
                   1767:                      (label_ref (match_operand 0 "" ""))
                   1768:                      (pc)))]
                   1769:   ""
                   1770:   "* return output_condjump (operands[0], \"le\", 't'); ")
                   1771: 
                   1772: (define_insn "bleu"
                   1773:   [(set (pc)
                   1774:        (if_then_else (leu (cc0)
                   1775:                           (const_int 0))
                   1776:                      (label_ref (match_operand 0 "" ""))
                   1777:                      (pc)))]
                   1778:   ""
                   1779:   "* return output_condjump (operands[0], \"leu\", 't'); ")
                   1780: 
                   1781: (define_insn ""
                   1782:   [(set (pc)
                   1783:        (if_then_else (eq (cc0)
                   1784:                          (const_int 0))
                   1785:                      (pc)
                   1786:                      (label_ref (match_operand 0 "" ""))))]
                   1787:   ""
                   1788:   "* return output_condjump (operands[0], \"eq\", 'f'); ")
                   1789: 
                   1790: (define_insn ""
                   1791:   [(set (pc)
                   1792:        (if_then_else (ne (cc0)
                   1793:                          (const_int 0))
                   1794:                      (pc)
                   1795:                      (label_ref (match_operand 0 "" ""))))]
                   1796:   ""
                   1797:   "* return output_condjump (operands[0], \"eq\", 't'); ")
                   1798: 
                   1799: (define_insn ""
                   1800:   [(set (pc)
                   1801:        (if_then_else (gt (cc0)
                   1802:                          (const_int 0))
                   1803:                      (pc)
                   1804:                      (label_ref (match_operand 0 "" ""))))]
                   1805:   ""
                   1806:   "* return output_condjump (operands[0], \"le\", 't'); ")
                   1807: 
                   1808: (define_insn ""
                   1809:   [(set (pc)
                   1810:        (if_then_else (gtu (cc0)
                   1811:                           (const_int 0))
                   1812:                      (pc)
                   1813:                      (label_ref (match_operand 0 "" ""))))]
                   1814:   ""
                   1815:   "* return output_condjump (operands[0], \"leu\", 't'); ")
                   1816: 
                   1817: (define_insn ""
                   1818:   [(set (pc)
                   1819:        (if_then_else (lt (cc0)
                   1820:                          (const_int 0))
                   1821:                      (pc)
                   1822:                      (label_ref (match_operand 0 "" ""))))]
                   1823:   ""
                   1824:   "* return output_condjump (operands[0], \"lt\", 'f'); ")
                   1825: 
                   1826: (define_insn ""
                   1827:   [(set (pc)
                   1828:        (if_then_else (ltu (cc0)
                   1829:                           (const_int 0))
                   1830:                      (pc)
                   1831:                      (label_ref (match_operand 0 "" ""))))]
                   1832:   ""
                   1833:   "* return output_condjump (operands[0], \"ltu\", 'f'); ")
                   1834: 
                   1835: (define_insn ""
                   1836:   [(set (pc)
                   1837:        (if_then_else (ge (cc0)
                   1838:                          (const_int 0))
                   1839:                      (pc)
                   1840:                      (label_ref (match_operand 0 "" ""))))]
                   1841:   ""
                   1842:   "* return output_condjump (operands[0], \"lt\", 't'); ")
                   1843: 
                   1844: (define_insn ""
                   1845:   [(set (pc)
                   1846:        (if_then_else (geu (cc0)
                   1847:                           (const_int 0))
                   1848:                      (pc)
                   1849:                      (label_ref (match_operand 0 "" ""))))]
                   1850:   ""
                   1851:   "* return output_condjump (operands[0], \"ltu\", 't'); ")
                   1852: 
                   1853: (define_insn ""
                   1854:   [(set (pc)
                   1855:        (if_then_else (le (cc0)
                   1856:                          (const_int 0))
                   1857:                      (pc)
                   1858:                      (label_ref (match_operand 0 "" ""))))]
                   1859:   ""
                   1860:   "* return output_condjump (operands[0], \"le\", 'f'); ")
                   1861: 
                   1862: (define_insn ""
                   1863:   [(set (pc)
                   1864:        (if_then_else (leu (cc0)
                   1865:                           (const_int 0))
                   1866:                      (pc)
                   1867:                      (label_ref (match_operand 0 "" ""))))]
                   1868:   ""
                   1869:   "* return output_condjump (operands[0], \"leu\", 'f'); ")
                   1870: 
                   1871: ;;- Calls
                   1872: 
                   1873: (define_expand "call_pop"
                   1874:   [(parallel [(call (match_operand:QI 0 "memory_operand" "m")
                   1875:                    (match_operand:SI 1 "const_int_operand" "i"))
                   1876:              (match_operand:SI 2 "const_int_operand" "i")
                   1877:              (match_operand:SI 3 "const_int_operand" "i")
                   1878:              (reg:SI 8)])]
                   1879:   ""
                   1880:   "")
                   1881: 
                   1882: (define_insn ""
                   1883:   [(call (match_operand:QI 0 "memory_operand" "m")
                   1884:         (match_operand:SI 1 "const_int_operand" "i"))
                   1885:    (match_operand:SI 2 "const_int_operand" "i")
                   1886:    (match_operand:SI 3 "const_int_operand" "i")
                   1887:    (match_operand:SI 4 "" "")]
                   1888:   ""
                   1889:   "* return output_call (insn, &operands[0]);")
                   1890: 
                   1891: (define_expand "call_value_pop"
                   1892:   [(parallel [(set (match_operand 0 "" "=g")
                   1893:                   (call (match_operand:QI 1 "memory_operand" "m")
                   1894:                         (match_operand:SI 2 "const_int_operand" "i")))
                   1895:              (match_operand:SI 3 "const_int_operand" "i")
                   1896:              (match_operand:SI 4 "const_int_operand" "i")
                   1897:              (reg:SI 8)])]
                   1898:   ""
                   1899:   "")
                   1900: 
                   1901: (define_insn ""
                   1902:   [(set (match_operand 0 "" "=g")
                   1903:        (call (match_operand:QI 1 "memory_operand" "m")
                   1904:              (match_operand:SI 2 "const_int_operand" "i")))
                   1905:    (match_operand:SI 3 "const_int_operand" "i")
                   1906:    (match_operand:SI 4 "const_int_operand" "i")
                   1907:    (match_operand:SI 5 "" "")]
                   1908:   ""
                   1909:   "* return output_call (insn, &operands[1]); ")
                   1910: 
                   1911: ;; Call subroutine returning any type.
                   1912: 
                   1913: (define_expand "untyped_call"
                   1914:   [(parallel [(call (match_operand 0 "" "")
                   1915:                   (const_int 0))
                   1916:             (match_operand 1 "" "")
                   1917:             (match_operand 2 "" "")])]
                   1918:   ""
                   1919:   "
                   1920: {
                   1921:   int i;
                   1922: 
                   1923:   emit_call_insn (gen_call_pop (operands[0], const0_rtx,
                   1924:                                const0_rtx, const0_rtx));
                   1925: 
                   1926:   for (i = 0; i < XVECLEN (operands[2], 0); i++)
                   1927:     {
                   1928:       rtx set = XVECEXP (operands[2], 0, i);
                   1929:       emit_move_insn (SET_DEST (set), SET_SRC (set));
                   1930:     }
                   1931: 
                   1932:   /* The optimizer does not know that the call sets the function value
                   1933:      registers we stored in the result block.  We avoid problems by
                   1934:      claiming that all hard registers are used and clobbered at this
                   1935:      point.  */
                   1936:   emit_insn (gen_blockage ());
                   1937: 
                   1938:   DONE;
                   1939: }")
                   1940: 
                   1941: ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
                   1942: ;; all of memory.  This blocks insns from being moved across this point.
                   1943: 
                   1944: (define_insn "blockage"
                   1945:   [(unspec_volatile [(const_int 0)] 0)]
                   1946:   ""
                   1947:   "")
                   1948: 
                   1949: (define_expand "return"
                   1950:   [(return)]
                   1951:   ""
                   1952:   " replace_arg_pushes (); ")
                   1953: 
                   1954: (define_insn ""
                   1955:   [(return)]
                   1956:   ""
                   1957:   "rtn")
                   1958: 
                   1959: (define_expand "prologue"
                   1960:   [(const_int 0)]
                   1961:   ""
                   1962:   "
                   1963: {
                   1964:   emit_ap_optimizations ();
                   1965:   DONE; 
                   1966: }")
                   1967: 
                   1968: (define_insn "tablejump"
                   1969:   [(set (pc) (match_operand:SI 0 "address_operand" "p"))
                   1970:    (use (label_ref (match_operand 1 "" "")))]
                   1971:   ""
                   1972:   "jmp %a0")
                   1973: 
                   1974: (define_insn "indirect_jump"
                   1975:   [(set (pc) (match_operand:SI 0 "address_operand" "p"))]
                   1976:   ""
                   1977:   "jmp %a0")

unix.superglobalmegacorp.com

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