Annotation of gcc/config/sh/sh.md, revision 1.1.1.1

1.1       root        1: ;;- Machine description the Hitachi SH
                      2: ;;  Copyright (C) 1993 Free Software Foundation, Inc.
                      3: ;;  Contributed by Steve Chamberlain ([email protected])
                      4: 
                      5: ;; This file is part of GNU CC.
                      6: 
                      7: ;; GNU CC is free software; you can redistribute it and/or modify
                      8: ;; it under the terms of the GNU General Public License as published by
                      9: ;; the Free Software Foundation; either version 2, or (at your option)
                     10: ;; any later version.
                     11: 
                     12: ;; GNU CC is distributed in the hope that it will be useful,
                     13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15: ;; GNU General Public License for more details.
                     16: 
                     17: ;; You should have received a copy of the GNU General Public License
                     18: ;; along with GNU CC; see the file COPYING.  If not, write to
                     19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     20: 
                     21: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
                     22: 
                     23: 
                     24: 
                     25: ;; -------------------------------------------------------------------------
                     26: ;; Attributes
                     27: ;; -------------------------------------------------------------------------
                     28: 
                     29: (define_attr "type" "cbranch,ctable,jump,arith,other"
                     30:   (const_string "other"))
                     31: 
                     32: ; If a conditional branch destination is within -100..100 bytes away 
                     33: ; from the instruction it can be 2 bytes long.  Something in the
                     34: ; range -4000..4000 bytes can be 6 bytes long, all other conditional
                     35: ; branches are 8 bytes long.
                     36: 
                     37: ; An unconditional jump which can reach forward or back 4k can be 
                     38: ; 6 bytes long (including the delay slot).  If it is too big, it
                     39: ; must be 8 bytes long.
                     40: 
                     41: ; All other instructions are two bytes long by default.
                     42: 
                     43: (define_attr "length" "" 
                     44:   (cond [(eq_attr "type" "cbranch")
                     45:          (if_then_else (and (ge (minus (pc) (match_dup 0))
                     46:                                 (const_int -100))
                     47:                             (le (minus (pc) (match_dup 0))
                     48:                                 (const_int 100)))
                     49:                        (const_int 2)
                     50:                        (if_then_else (and (ge (minus (pc) (match_dup 0))
                     51:                                               (const_int -4000))
                     52:                                           (le (minus (pc) (match_dup 0))
                     53:                                               (const_int 4000)))
                     54:                                      (const_int 6)
                     55:                                      (const_int 8)))
                     56: 
                     57:         (eq_attr "type" "jump")
                     58:                        (if_then_else (and (ge (minus (pc) (match_dup 0))
                     59:                                               (const_int -4000))
                     60:                                           (le (minus (pc) (match_dup 0))
                     61:                                               (const_int 4000)))
                     62:                                      (const_int 4)
                     63:                                      (const_int 6))
                     64:         ] (const_int 2)))
                     65:                                      
                     66: 
                     67: (define_attr "needs_delay_slot" "yes,no"
                     68:   (cond [(eq_attr "type" "jump") (const_string "yes")]
                     69:        (const_string "no")))
                     70: 
                     71: (define_attr "dump" "yes,no,must" (const_string "no"))
                     72: (define_attr "constneed" "yes,no" (const_string "no"))
                     73: (define_attr "smallestsize" "" (const_int 2))
                     74: (define_attr "largestsize" "" (const_int 8))
                     75: (define_attr "constantsize" "" (const_int 4))
                     76: 
                     77: (define_attr "in_delay_slot" "maybe,yes,no" 
                     78:   (cond [(eq_attr "type" "cbranch") (const_string "no")
                     79:         (eq_attr "type" "jump") (const_string "no")
                     80:         (eq_attr "length" "2") (const_string "yes")
                     81:         (eq_attr "length" "4,6,8,10,12") (const_string "no")
                     82:         ] (const_string "yes")))
                     83: 
                     84: 
                     85: (define_delay (eq_attr "needs_delay_slot" "yes")
                     86:   [(eq_attr "in_delay_slot" "yes") (nil) (nil)])
                     87: 
                     88: 
                     89: 
                     90: ;; -------------------------------------------------------------------------
                     91: ;; SImode signed integer comparisons
                     92: ;; -------------------------------------------------------------------------
                     93: 
                     94: (define_insn ""
                     95:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                     96:        (eq:SI (reg:SI 18)
                     97:               (const_int 1)))]
                     98:   ""
                     99:   "movt        %0 !movt1")
                    100:   
                    101: (define_insn ""
                    102:   [(set (reg:SI 18) (gt (match_operand:SI 0 "arith_reg_operand" "r")
                    103:                  (const_int 0)))]
                    104:   ""
                    105:   "cmp/pl      %0")
                    106: 
                    107: (define_insn ""
                    108:   [(set (reg:SI 18) (ge (match_operand:SI 0 "arith_reg_operand" "r")
                    109:                  (const_int 0)))]
                    110:   ""
                    111:   "cmp/pz      %0")
                    112: 
                    113: (define_insn "cmpeqsi_t"
                    114:   [(set (reg:SI 18) (eq (match_operand:SI 0 "arith_reg_operand" "r,z")
                    115:                  (match_operand:SI 1 "arith_operand" "r,I")))]
                    116:   ""
                    117:   "cmp/eq      %1,%0")
                    118: 
                    119: 
                    120: (define_insn "cmpgtsi_t"
                    121:   [(set (reg:SI 18) (gt (match_operand:SI 0 "arith_reg_operand" "r")
                    122:                  (match_operand:SI 1 "arith_reg_operand" "r")))]
                    123:   ""
                    124:   "cmp/gt      %1,%0")
                    125: 
                    126: (define_insn "cmpgesi_t"
                    127:   [(set (reg:SI 18) (ge (match_operand:SI 0 "arith_reg_operand" "r")
                    128:                  (match_operand:SI 1 "arith_reg_operand" "r")))]
                    129:   ""
                    130:   "cmp/ge      %1,%0")
                    131: 
                    132: (define_insn "cmpltsi_t"
                    133:   [(set (reg:SI 18) (lt (match_operand:SI 0 "arith_reg_operand" "r")
                    134:                  (match_operand:SI 1 "arith_reg_operand" "r")))]
                    135:   ""
                    136:   "cmp/gt      %0,%1")
                    137: 
                    138: (define_insn "cmplesi_t"
                    139:   [(set (reg:SI 18) (le (match_operand:SI 0 "arith_reg_operand" "r")
                    140:                  (match_operand:SI 1 "arith_reg_operand" "r")))]
                    141:   ""
                    142:   "cmp/ge      %0,%1")
                    143: 
                    144: 
                    145: ;; -------------------------------------------------------------------------
                    146: ;; SImode unsigned integer comparisons
                    147: ;; -------------------------------------------------------------------------
                    148: 
                    149: (define_insn "cmpgeusi_t"
                    150:   [(set (reg:SI 18) (geu (match_operand:SI 0 "arith_reg_operand" "r")
                    151:                   (match_operand:SI 1 "arith_reg_operand" "r")))]
                    152:   ""
                    153:   "cmp/hs      %1,%0")
                    154: 
                    155: (define_insn "cmpgtusi_t"
                    156:   [(set (reg:SI 18) (gtu (match_operand:SI 0 "arith_reg_operand" "r")
                    157:                   (match_operand:SI 1 "arith_reg_operand" "r")))]
                    158:   ""
                    159:   "cmp/hi      %1,%0")
                    160: 
                    161: (define_insn "cmpleusi_t"
                    162:   [(set (reg:SI 18) (leu (match_operand:SI 0 "arith_reg_operand" "r")
                    163:                   (match_operand:SI 1 "arith_reg_operand" "r")))]
                    164:   ""
                    165:   "cmp/hs      %0,%1")
                    166: 
                    167: (define_insn "cmpltusi_t"
                    168:   [(set (reg:SI 18) (ltu (match_operand:SI 0 "arith_reg_operand" "r")
                    169:                   (match_operand:SI 1 "arith_reg_operand" "r")))]
                    170:   ""
                    171:   "cmp/hi      %0,%1")
                    172: 
                    173: ;; We save the compare operands in the cmpxx patterns and use them when
                    174: ;; we generate the branch.
                    175: 
                    176: (define_expand "cmpsi"
                    177:   [(set (reg:SI 18) (compare (match_operand:SI 0 "arith_reg_operand" "")
                    178:                             (match_operand:SI 1 "arith_reg_operand" "")))]
                    179:   ""
                    180:   "
                    181: { sh_compare_op0 = operands[0];
                    182:   sh_compare_op1 = operands[1];
                    183:   DONE;
                    184: }")
                    185: 
                    186: 
                    187: ;; -------------------------------------------------------------------------
                    188: ;; Addition instructions
                    189: ;; -------------------------------------------------------------------------
                    190: 
                    191: (define_insn "adddi3"
                    192:   [(set (match_operand:DI 0 "arith_reg_operand" "=&r")
                    193:        (plus:DI (match_operand:DI 1 "arith_reg_operand" "%0")
                    194:                 (match_operand:DI 2 "arith_reg_operand" "r")))
                    195:    (clobber (reg:SI 18))]
                    196:   ""
                    197:   "clrt\;addc  %R2,%R0\;addc   %2,%0"
                    198:   [(set_attr "length" "6")
                    199:    (set_attr "in_delay_slot" "no")
                    200:    (set_attr "type" "arith")])
                    201: 
                    202: 
                    203: (define_insn "addsi3_i"
                    204:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    205:        (plus:SI (match_operand:SI 1 "arith_reg_operand" "%0")
                    206:                 (match_operand:SI 2 "arith_operand" "rI")))]
                    207:   ""
                    208:   "add %2,%0"
                    209:   [(set_attr "length" "2")
                    210:    (set_attr "type" "arith")])
                    211: 
                    212: (define_expand "addsi3"
                    213:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    214:        (plus:SI (match_operand:SI 1 "arith_reg_operand" "%0")
                    215:                 (match_operand:SI 2 "arith_operand" "rI")))]
                    216:   ""
                    217:   "")
                    218: 
                    219: 
                    220: ;; -------------------------------------------------------------------------
                    221: ;; Subtraction instructions
                    222: ;; -------------------------------------------------------------------------
                    223: 
                    224: (define_insn "subdi3"
                    225:   [(set (match_operand:DI 0 "arith_reg_operand" "=&r")
                    226:        (minus:DI (match_operand:DI 1 "arith_reg_operand" "0")
                    227:                  (match_operand:DI 2 "arith_reg_operand" "r")))
                    228:    (clobber (reg:SI 18))]
                    229:   ""
                    230:   "clrt\;subc  %R2,%R0\;subc   %2,%0"
                    231:   [(set_attr "length" "6")
                    232:    (set_attr "in_delay_slot" "no")
                    233:    (set_attr "type" "arith")])
                    234: 
                    235: (define_insn "subsi3"
                    236:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    237:        (minus:SI (match_operand:SI 1 "arith_reg_operand" "0")
                    238:                  (match_operand:SI 2 "arith_reg_operand" "r")))]
                    239:   ""
                    240:   "sub %2,%0"
                    241:   [(set_attr "type" "arith")])
                    242: 
                    243: 
                    244: ;; -------------------------------------------------------------------------
                    245: ;; Multiplication instructions
                    246: ;; -------------------------------------------------------------------------
                    247: 
                    248: 
                    249: (define_insn ""
                    250:   [(set (reg:SI 21)
                    251:        (mult:SI (zero_extend:SI
                    252:                  (match_operand:HI 1 "arith_reg_operand" "r"))
                    253:                 (zero_extend:SI
                    254:                  (match_operand:HI 2 "arith_reg_operand" "r"))))]
                    255:   ""
                    256:   "mulu        %2,%1")
                    257: 
                    258: (define_insn ""
                    259:   [(set (reg:SI 21)
                    260:        (mult:SI (sign_extend:SI
                    261:                  (match_operand:HI 1 "arith_reg_operand" "r"))
                    262:                 (sign_extend:SI
                    263:                  (match_operand:HI 2 "arith_reg_operand" "r"))))]
                    264:   ""
                    265:   "muls        %2,%1")
                    266: 
                    267: (define_expand "mulhisi3"
                    268:   [(set (reg:SI 21)
                    269:        (mult:SI (sign_extend:SI
                    270:                  (match_operand:HI 1 "arith_reg_operand" "r"))
                    271:                 (sign_extend:SI
                    272:                  (match_operand:HI 2 "arith_reg_operand" "r"))))
                    273:    (set (match_operand:SI 0 "arith_reg_operand" "=r")
                    274:        (reg:SI 21))]
                    275:   ""
                    276:   "")
                    277: 
                    278: (define_expand "umulhisi3"
                    279:   [(set (reg:SI 21)
                    280:        (mult:SI (zero_extend:SI
                    281:                  (match_operand:HI 1 "arith_reg_operand" "r"))
                    282:                 (zero_extend:SI
                    283:                  (match_operand:HI 2 "arith_reg_operand" "r"))))
                    284:    (set (match_operand:SI 0 "arith_reg_operand" "=r")
                    285:        (reg:SI 21))]
                    286:   ""
                    287:   "")
                    288: 
                    289: (define_insn ""
                    290:   [(set (reg:SI 21)
                    291:        (mult:SI (match_operand:SI 1 "arith_reg_operand" "r")
                    292:                  (match_operand:SI 2 "arith_reg_operand" "r")))]
                    293:   "TARGET_HAS_MULSI3"
                    294:   "muls.l      %2,%1")
                    295: 
                    296: (define_expand "mulsi3"
                    297:   [(set (reg:SI 21)
                    298:        (mult:SI  (match_operand:SI 1 "arith_reg_operand" "r")
                    299:                  (match_operand:SI 2 "arith_reg_operand" "r")))
                    300:    (set (match_operand:SI 0 "arith_reg_operand" "=r")
                    301:        (reg:SI 20))]
                    302:   "TARGET_HAS_MULSI3"
                    303:   "")
                    304: 
                    305: (define_insn ""
                    306:   [(set (reg:DI 20)
                    307:        (mult:DI (sign_extend:DI
                    308:                  (match_operand:SI 1 "arith_reg_operand" "r"))
                    309:                 (sign_extend:DI
                    310:                  (match_operand:SI 2 "arith_reg_operand" "r"))))]
                    311:   "TARGET_HAS_MULSI3"
                    312:   "dmuls.l     %2,%1")
                    313: 
                    314: (define_expand "mulsidi3"
                    315:   [(set (reg:DI 20)
                    316:        (mult:DI (sign_extend:DI
                    317:                  (match_operand:SI 1 "arith_reg_operand" "r"))
                    318:                 (sign_extend:DI
                    319:                  (match_operand:SI 2 "arith_reg_operand" "r"))))
                    320:    (set (match_operand:DI 0 "arith_reg_operand" "=r")
                    321:        (reg:DI 20))]
                    322:   "TARGET_HAS_MULSI3"
                    323:   "")
                    324: 
                    325: (define_insn ""
                    326:   [(set (reg:DI 20)
                    327:        (mult:DI (zero_extend:DI
                    328:                  (match_operand:SI 1 "arith_reg_operand" "r"))
                    329:                 (zero_extend:DI
                    330:                  (match_operand:SI 2 "arith_reg_operand" "r"))))]
                    331:   "TARGET_HAS_MULSI3"
                    332:   "dmulu.l     %2,%1")
                    333: 
                    334: (define_expand "umulsidi3"
                    335:   [(set (reg:DI 20)
                    336:        (mult:DI (zero_extend:DI
                    337:                  (match_operand:SI 1 "arith_reg_operand" "r"))
                    338:                 (zero_extend:DI
                    339:                  (match_operand:SI 2 "arith_reg_operand" "r"))))
                    340:    (set (match_operand:DI 0 "arith_reg_operand" "=r")
                    341:        (reg:DI 20))]
                    342:   "TARGET_HAS_MULSI3"
                    343:   "")
                    344: 
                    345: ;; -------------------------------------------------------------------------
                    346: ;; Logical operations
                    347: ;; -------------------------------------------------------------------------
                    348: 
                    349: (define_insn "andsi3"
                    350:   [(set (match_operand:SI 0 "arith_reg_operand" "=r,z")
                    351:        (and:SI (match_operand:SI 1 "arith_reg_operand" "%0,0")
                    352:                (match_operand:SI 2 "logical_operand" "r,L")))]
                    353:   ""
                    354:   "and %2,%0"
                    355:   [(set_attr "type" "arith")])
                    356: 
                    357: (define_insn "iorsi3"
                    358:   [(set (match_operand:SI 0 "arith_reg_operand" "=r,z")
                    359:        (ior:SI (match_operand:SI 1 "arith_reg_operand" "%0,0")
                    360:                (match_operand:SI 2 "logical_operand" "r,L")))]
                    361:   ""
                    362:   "or  %2,%0")
                    363: 
                    364: (define_insn "xorsi3"
                    365:   [(set (match_operand:SI 0 "arith_reg_operand" "=r,z")
                    366:        (xor:SI (match_operand:SI 1 "arith_reg_operand" "%0,0")
                    367:                (match_operand:SI 2 "logical_operand" "r,L")))]
                    368:   ""
                    369:   "xor %2,%0"
                    370:   [(set_attr "type" "arith")])
                    371: 
                    372: 
                    373: ;; -------------------------------------------------------------------------
                    374: ;; Shifts and rotates
                    375: ;; -------------------------------------------------------------------------
                    376: 
                    377: (define_insn "ashlsi3_k"
                    378:   [(set (match_operand:SI 0 "arith_reg_operand" "=r,r")
                    379:        (ashift:SI (match_operand:SI 1 "arith_reg_operand" "0,0")
                    380:                   (match_operand:SI 2 "immediate_operand" "L,n")))]
                    381:   ""
                    382:   "*return output_shift(\"shll\", operands[0], operands[2]);"
                    383:   [(set_attr "length" "2,12")
                    384:    (set_attr "in_delay_slot" "yes,no")
                    385:    (set_attr "type" "arith")])
                    386: 
                    387: (define_expand "ashlsi3"
                    388:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                    389:        (ashift:SI (match_operand:SI 1 "arith_reg_operand" "")
                    390:                   (match_operand:SI 2 "immediate_operand" "")))]
                    391:   ""
                    392:   "if (!ok_shift_value(operands[2])) FAIL;")
                    393: 
                    394: (define_insn "ashrsi3_k"
                    395:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    396:        (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
                    397:                     (const_int 1)))]
                    398:   ""
                    399:   "shar        %0"
                    400:   [(set_attr "type" "arith")])
                    401: 
                    402: (define_expand "ashrsi3"
                    403:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    404:        (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "r")
                    405:                     (match_operand:SI 2 "nonmemory_operand" "M")))]
                    406:   ""
                    407:   "
                    408: {
                    409:   if (GET_CODE (operands[2]) != CONST_INT ||
                    410:       INTVAL (operands[2]) != 1) FAIL;
                    411: }
                    412: ")
                    413: 
                    414: (define_insn "lshrsi3_k"
                    415:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    416:        (lshiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
                    417:                     (match_operand:SI 2 "immediate_operand" "L")))]
                    418:   ""
                    419:   "* return output_shift (\"shlr\", operands[0], operands[2]);"
                    420:   [(set_attr "length" "12")
                    421:    (set_attr "in_delay_slot" "no")
                    422:    (set_attr "type" "arith")])
                    423: 
                    424: (define_expand "lshrsi3"
                    425:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                    426:        (lshiftrt:SI (match_operand:SI 1 "arith_reg_operand" "")
                    427:                     (match_operand:SI 2 "nonmemory_operand" "")))]
                    428:   ""
                    429:   "if (!ok_shift_value (operands[2])) FAIL; ")
                    430: 
                    431: (define_insn "ashldi3_k"
                    432:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                    433:        (ashift:DI (match_operand:DI 1 "arith_reg_operand" "0")
                    434:                   (match_operand:DI 2 "immediate_operand" "I")))
                    435:    (clobber (reg:SI 18))]
                    436:   ""
                    437:   "shll        %R0\;rotcl      %0"
                    438:   [(set_attr "length" "4")])
                    439: 
                    440: (define_expand "ashldi3"
                    441:   [(parallel[(set (match_operand:DI 0 "arith_reg_operand" "")
                    442:                  (ashift:DI (match_operand:DI 1 "arith_reg_operand" "")
                    443:                             (match_operand:DI 2 "immediate_operand" "")))
                    444:             (clobber (reg:SI 18))])]
                    445:            
                    446:   ""
                    447:   "{ if (GET_CODE (operands[2]) != CONST_INT   
                    448:        || INTVAL (operands[2]) != 1) FAIL;} ")
                    449: 
                    450: (define_insn "lshrdi3_k"
                    451:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                    452:                   (lshiftrt:DI (match_operand:DI 1 "arith_reg_operand" "0")
                    453:                              (match_operand:DI 2 "immediate_operand" "I")))
                    454:       (clobber (reg:SI 18))]
                    455:   ""
                    456:   "shlr        %0\;rotcr       %R0"
                    457:   [(set_attr "length" "4")])
                    458: 
                    459: (define_expand "lshrdi3"
                    460:   [(parallel[(set (match_operand:DI 0 "arith_reg_operand" "")
                    461:                  (lshiftrt:DI (match_operand:DI 1 "arith_reg_operand" "")
                    462:                               (match_operand:DI 2 "immediate_operand" "")))
                    463:             (clobber (reg:SI 18))])]
                    464:   ""
                    465:   "{ if (GET_CODE (operands[2]) != CONST_INT 
                    466:        || INTVAL (operands[2]) != 1) FAIL;} ")
                    467: 
                    468: (define_insn "ashrdi3_k"
                    469:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                    470:        (ashiftrt:DI (match_operand:DI 1 "arith_reg_operand" "0")
                    471:                     (match_operand:DI 2 "immediate_operand" "")))
                    472:    (clobber (reg:SI 18))]
                    473:   ""
                    474:   "shar        %0\;rotcr       %R0"
                    475:   [(set_attr "length" "4")])
                    476: 
                    477: (define_expand "ashrdi3"
                    478:   [(parallel[(set (match_operand:DI 0 "arith_reg_operand" "")
                    479:                  (ashiftrt:DI (match_operand:DI 1 "arith_reg_operand" "")
                    480:                               (match_operand:DI 2 "immediate_operand" "")))
                    481:             (clobber (reg:SI 18))])]
                    482:   ""
                    483:   "{ if (GET_CODE (operands[2]) != CONST_INT 
                    484:        || INTVAL (operands[2]) != 1) FAIL; } ")
                    485: 
                    486: 
                    487: 
                    488: ;; -------------------------------------------------------------------------
                    489: ;; Unary arithmetic
                    490: ;; -------------------------------------------------------------------------
                    491: 
                    492: (define_insn "negdi2"
                    493:   [(set (match_operand:DI 0 "arith_reg_operand" "=&r")
                    494:        (neg:DI (match_operand:DI 1 "arith_reg_operand" "0")))
                    495:    (clobber (reg:SI 18))]
                    496:   ""
                    497:   "clrt\;negc  %R1,%R0\;negc   %1,%0"
                    498:   [(set_attr "length" "6")
                    499:    (set_attr "type" "arith")])
                    500: 
                    501: (define_insn "negsi2"
                    502:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    503:        (neg:SI (match_operand:SI 1 "arith_reg_operand" "r")))]
                    504:   ""
                    505:   "neg %1,%0"
                    506:   [(set_attr "type" "arith")])
                    507: 
                    508: (define_insn "one_cmplsi2"
                    509:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    510:        (not:SI (match_operand:SI 1 "arith_reg_operand" "r")))]
                    511:   ""
                    512:   "not %1,%0"
                    513: [  (set_attr "type" "arith")])
                    514: 
                    515: 
                    516: ;; -------------------------------------------------------------------------
                    517: ;; Zero extension instructions
                    518: ;; -------------------------------------------------------------------------
                    519: 
                    520: (define_insn "zero_extendhisi2"
                    521:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    522:        (zero_extend:SI (match_operand:HI 1 "arith_reg_operand" "r")))]
                    523:   ""
                    524:   "extu.w      %1,%0"
                    525:   [(set_attr "type" "arith")])
                    526: 
                    527: (define_insn "zero_extendqisi2"
                    528:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    529:        (zero_extend:SI (match_operand:QI 1 "arith_reg_operand" "r")))]
                    530:   ""
                    531:   "extu.b      %1,%0"
                    532:   [(set_attr "type" "arith")]) 
                    533: 
                    534: (define_insn "zero_extendqihi2"
                    535:   [(set (match_operand:HI 0 "arith_reg_operand" "=r")
                    536:        (zero_extend:HI (match_operand:QI 1 "arith_reg_operand" "r")))]
                    537:   ""
                    538:   "extu.b      %1,%0"
                    539:   [(set_attr "type" "arith")]) 
                    540: 
                    541: 
                    542: ;; -------------------------------------------------------------------------
                    543: ;; Sign extension instructions
                    544: ;; -------------------------------------------------------------------------
                    545: 
                    546: (define_insn "extendsidi2"
                    547:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                    548:        (sign_extend:DI (match_operand:SI 1 "arith_reg_operand" "0")))]
                    549:   ""
                    550:   "mov %1,%0\;shll     %0\;subc        %0,%0"
                    551:   [(set_attr "length" "6")]) 
                    552: 
                    553: (define_insn "extendhisi2"
                    554:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    555:        (sign_extend:SI (match_operand:HI 1 "arith_reg_operand" "r")))]
                    556:   ""
                    557:   "exts.w      %1,%0")
                    558: 
                    559: (define_insn "extendqisi2"
                    560:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    561:        (sign_extend:SI (match_operand:QI 1 "arith_reg_operand" "r")))]
                    562:   ""
                    563:   "exts.b      %1,%0")
                    564: 
                    565: (define_insn "extendqihi2"
                    566:   [(set (match_operand:HI 0 "arith_reg_operand" "=r")
                    567:        (sign_extend:HI (match_operand:QI 1 "arith_reg_operand" "r")))]
                    568:   ""
                    569:   "exts.b      %1,%0")
                    570: 
                    571: 
                    572: ;; -------------------------------------------------------------------------
                    573: ;; Move instructions
                    574: ;; -------------------------------------------------------------------------
                    575: 
                    576: (define_insn ""
                    577:   [(set (match_operand:SI 0 "push_operand" "=<")
                    578:        (match_operand:SI 1 "arith_reg_operand" "r"))]
                    579:    ""
                    580:    "mov.l      %1,%0")
                    581: 
                    582: (define_insn "movsi_pcrel"
                    583:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                    584:        (match_operand:SI 1 "hard_immediate_operand" "i"))]
                    585:   ""
                    586:   "* return output_movepcrel (insn, operands, SImode);"
                    587:   [(set_attr "length" "2")
                    588:    (set_attr "in_delay_slot" "no")
                    589:    (set_attr "constneed" "yes")
                    590:    (set_attr "smallestsize" "2")
                    591:    (set_attr "largestsize" "8")])
                    592:                
                    593: (define_insn "movsi_i"
                    594:   [(set (match_operand:SI 0 "general_operand" "=r,r,r,m,l,r,r,r,t")
                    595:        (match_operand:SI 1 "general_operand"  "r,I,m,r,r,l,t,x,r"))]
                    596:   ""
                    597:   "@
                    598:        mov     %1,%0
                    599:        mov     %1,%0
                    600:        mov.l   %1,%0
                    601:        mov.l   %1,%0
                    602:        mov     %1,%0
                    603:        mov     %1,%0
                    604:         movt   %0
                    605:        sts     %1,%0
                    606:        tst     %1,%1\;bt       T%*\;bra        F%*\;sett\;T%*:clrt\;F%*:%^"
                    607:        [(set_attr "length" "2,2,2,2,2,2,2,2,10")])
                    608: 
                    609: (define_expand "movsi"
                    610:   [(set (match_operand:SI 0 "general_operand" "")
                    611:        (match_operand:SI 1 "general_operand" ""))]
                    612:   ""
                    613:   "{ prepare_move_operands(operands, SImode); } ")
                    614: 
                    615: (define_insn "movqi_i"
                    616:   [(set (match_operand:QI 0 "general_operand" "=r,r,z,m,r,m,r,r")
                    617:        (match_operand:QI 1 "general_operand"  "r,n,m,z,m,r,x,t"))]
                    618:   ""
                    619:   "@
                    620:        mov     %1,%0
                    621:        mov     %1,%0
                    622:        mov.b   %1,%0 !4
                    623:        mov.b   %1,%0 !5
                    624:        mov.b   %1,%0 !6
                    625:        mov.b   %1,%0 ! 7
                    626:        sts     %1,%0
                    627:        movt    %0")
                    628: 
                    629: (define_expand "movqi"
                    630:   [(set (match_operand:QI 0 "general_operand" "")
                    631:        (match_operand:QI 1 "general_operand"  ""))]
                    632:   ""
                    633:   "prepare_move_operands(operands, QImode);")
                    634:   
                    635: (define_insn "movhi_pcrel"
                    636:   [(set (match_operand:HI 0 "arith_reg_operand" "=r")
                    637:        (match_operand:HI 1 "hard_immediate_operand" "i"))]
                    638:   ""
                    639:   "* return output_movepcrel (insn, operands, SImode);"
                    640:   [(set_attr "length" "2")
                    641:    (set_attr "in_delay_slot" "no")
                    642:    (set_attr "constneed" "yes")
                    643:    (set_attr "smallestsize" "2")
                    644:    (set_attr "largestsize" "8")])
                    645: 
                    646: (define_insn "movhi_i"
                    647:   [(set (match_operand:HI 0 "general_operand" "=r,r,m,z,m,r,r")
                    648:        (match_operand:HI 1 "general_operand"  "rI,m,r,m,z,x,t"))]
                    649:   ""
                    650:   "@
                    651:        mov     %1,%0
                    652:        mov.w   %1,%0
                    653:        mov.w   %1,%0
                    654:        mov.w   %1,%0
                    655:        mov.w   %1,%0
                    656:        sts     %1,%0
                    657:        movt    %0")
                    658: 
                    659: (define_expand "movhi"
                    660:   [(set (match_operand:HI 0 "general_operand" "")
                    661:        (match_operand:HI 1 "general_operand"  ""))]
                    662:   ""
                    663:   "prepare_move_operands (operands, HImode);")
                    664:   
                    665: (define_insn ""
                    666:   [(set (match_operand:DI 0 "push_operand" "=<")
                    667:        (match_operand:DI 1 "arith_reg_operand" "r"))]
                    668:    ""
                    669:    "mov.l      %R1,%0\;mov.l   %1,%0"
                    670:    [(set_attr "length" "4")])
                    671: 
                    672: (define_insn "movdi_pcrel"
                    673:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                    674:        (match_operand:DI 1 "hard_immediate_operand" "i"))]
                    675:   ""
                    676:   "* return output_movepcrel (insn, operands, DImode);"
                    677:   [(set_attr "length" "4")
                    678:    (set_attr "in_delay_slot" "no")
                    679:    (set_attr "constneed" "yes")
                    680:    (set_attr "smallestsize" "4")
                    681:    (set_attr "constantsize" "8")
                    682:    (set_attr "largestsize" "18")])
                    683: 
                    684: (define_insn "movdi_k"
                    685:   [(set (match_operand:DI 0 "general_operand" "=r,r,m,r,r,m,r")
                    686:        (match_operand:DI 1 "general_operand" "r,m,r,I,m,r,x"))]
                    687:   ""
                    688:   "* return output_movedouble(operands, DImode);"
                    689:   [(set_attr "length" "4")])
                    690: 
                    691: (define_expand "movdi"
                    692:   [(set (match_operand:DI 0 "general_operand" "")
                    693:        (match_operand:DI 1 "general_operand" ""))]
                    694:   ""
                    695:   "prepare_move_operands (operands, DImode);")
                    696: 
                    697: (define_insn ""
                    698:   [(set (match_operand:DF 0 "push_operand" "=<")
                    699:        (match_operand:DF 1 "arith_reg_operand" "r"))]
                    700:    ""
                    701:    "mov.l      %R1,%0\;mov.l   %1,%0"
                    702:    [(set_attr "length" "4")])
                    703: 
                    704: (define_insn "movdf_pcrel"
                    705:   [(set (match_operand:DF 0 "arith_reg_operand" "=r")
                    706:        (match_operand:DF 1 "hard_immediate_operand" "i"))]
                    707:   ""
                    708:   "* return output_movepcrel  (insn, operands, DFmode);"
                    709:   [(set_attr "length" "4")
                    710:    (set_attr "in_delay_slot" "no")
                    711:    (set_attr "constneed" "yes")
                    712:    (set_attr "smallestsize" "4")
                    713:    (set_attr "constantsize" "8")
                    714:    (set_attr "largestsize" "18")])
                    715: 
                    716: (define_insn "movdf_k"
                    717:   [(set (match_operand:DF 0 "general_operand" "=r,r,m")
                    718:        (match_operand:DF 1 "general_operand" "r,m,r"))]
                    719:   ""
                    720:   "* return output_movedouble(operands, DFmode);"
                    721:   [(set_attr "length" "4")])
                    722: 
                    723: (define_expand "movdf"
                    724:   [(set (match_operand:DF 0 "general_operand" "")
                    725:        (match_operand:DF 1 "general_operand" ""))]
                    726:   ""
                    727:   "prepare_move_operands(operands, DFmode);")
                    728: 
                    729: (define_insn ""
                    730:   [(set (match_operand:SF 0 "push_operand" "=<")
                    731:        (match_operand:SF 1 "arith_reg_operand" "r"))]
                    732:    ""
                    733:    "mov.l      %1,%0")
                    734: 
                    735: (define_insn "movsf_pcrel"
                    736:   [(set (match_operand:SF 0 "arith_reg_operand" "=r")
                    737:        (match_operand:SF 1 "hard_immediate_operand" "i"))]
                    738:   ""
                    739:   "* return output_movepcrel (insn, operands, SFmode);"
                    740:   [(set_attr "length" "2")
                    741:    (set_attr "in_delay_slot" "no")
                    742:    (set_attr "constneed" "yes")
                    743:    (set_attr "smallestsize" "2")
                    744:    (set_attr "largestsize" "8")])
                    745:                
                    746: (define_insn "movsf_i"
                    747:   [(set (match_operand:SF 0 "general_operand" "=r,r,r,m,l,r,m,r")
                    748:        (match_operand:SF 1 "general_operand"  "r,I,m,r,r,l,r,m"))]
                    749:   ""
                    750:   "@
                    751:        mov     %1,%0
                    752:        mov     %1,%0
                    753:        mov.l   %1,%0
                    754:        mov.l   %1,%0
                    755:        mov     %1,%0
                    756:        mov     %1,%0
                    757:        mov     %1,%0
                    758:        mov     %1,%0")
                    759: 
                    760: (define_expand "movsf"
                    761:   [(set (match_operand:SF 0 "general_operand" "")
                    762:        (match_operand:SF 1 "general_operand" ""))]
                    763:   ""
                    764:   "prepare_move_operands(operands, SFmode);")
                    765: 
                    766: 
                    767: ;; ------------------------------------------------------------------------
                    768: ;; Define the real conditional branch instructions.
                    769: ;; ------------------------------------------------------------------------
                    770: 
                    771: (define_insn "branch_true"
                    772:   [(set (pc) (if_then_else (eq (reg:SI 18) (const_int 1))
                    773:                           (label_ref (match_operand 0 "" ""))
                    774:                           (pc)))]
                    775:   ""
                    776:   "* return output_branch (1, insn);"
                    777:   [(set_attr "type" "cbranch")])
                    778: 
                    779: (define_insn "branch_false"
                    780:   [(set (pc) (if_then_else (ne (reg:SI 18) (const_int 1))
                    781:                           (label_ref (match_operand 0 "" ""))
                    782:                           (pc)))]
                    783:   ""
                    784:   "* return output_branch (0, insn);"
                    785:   [(set_attr "type" "cbranch")])
                    786: 
                    787: (define_insn "inverse_branch_true"
                    788:   [(set (pc) (if_then_else (eq (reg:SI 18) (const_int 1))
                    789:                           (pc)
                    790:                           (label_ref (match_operand 0 "" ""))))]
                    791:   ""
                    792:   "* return output_branch (0, insn);"
                    793:   [(set_attr "type" "cbranch")])
                    794: 
                    795: (define_insn "inverse_branch_false"
                    796:   [(set (pc) (if_then_else (ne (reg:SI 18) (const_int 1))
                    797:                           (pc)
                    798:                           (label_ref (match_operand 0 "" ""))))]
                    799:   ""
                    800:   "* return output_branch (1, insn);"
                    801:   [(set_attr "type" "cbranch")])
                    802: 
                    803: 
                    804: ;; Conditional branch insns
                    805: 
                    806: (define_expand "beq"
                    807:   [(set (reg:SI 18) (eq:SI (match_dup 1) (match_dup 2)))
                    808:    (set (pc)
                    809:        (if_then_else (eq (reg:SI 18)
                    810:                          (const_int 1))
                    811:                      (label_ref (match_operand 0 "" ""))
                    812:                      (pc)))]
                    813:   ""
                    814:   "
                    815: {
                    816:   operands[1] = sh_compare_op0;
                    817:   operands[2] = sh_compare_op1;
                    818: }")
                    819: 
                    820: 
                    821: ; There is no bne compare, so we reverse the branch arms.
                    822: 
                    823: (define_expand "bne"
                    824:   [(set (reg:SI 18) (eq:SI (match_dup 1) (match_dup 2)))
                    825:    (set (pc)
                    826:        (if_then_else (eq (reg:SI 18)
                    827:                          (const_int 1))
                    828:                      (pc)
                    829:                      (label_ref (match_operand 0 "" ""))))]
                    830:   ""
                    831:   "
                    832: {
                    833:   operands[1] = sh_compare_op0;
                    834:   operands[2] = sh_compare_op1;
                    835: }")
                    836: 
                    837: (define_expand "bgt"
                    838:   [(set (reg:SI 18) (gt:SI (match_dup 1) (match_dup 2)))
                    839:    (set (pc)
                    840:        (if_then_else (eq (reg:SI 18)
                    841:                          (const_int 1))
                    842:                      (label_ref (match_operand 0 "" ""))
                    843:                      (pc)))]
                    844:   ""
                    845:   "
                    846: {
                    847:   operands[1] = sh_compare_op0;
                    848:   operands[2] = sh_compare_op1;
                    849: }")
                    850: 
                    851: (define_expand "blt"
                    852:   [(set (reg:SI 18) (lt:SI (match_dup 1) (match_dup 2)))
                    853:    (set (pc)
                    854:        (if_then_else (eq (reg:SI 18)
                    855:                          (const_int 1))
                    856:                      (label_ref (match_operand 0 "" ""))
                    857:                      (pc)))]
                    858:   ""
                    859:   "
                    860: {
                    861:   operands[1] = sh_compare_op0;
                    862:   operands[2] = sh_compare_op1;
                    863: }")
                    864: 
                    865: (define_expand "ble"
                    866:   [(set (reg:SI 18) (le:SI (match_dup 1) (match_dup 2)))
                    867:    (set (pc)                           
                    868:        (if_then_else (eq (reg:SI 18)
                    869:                          (const_int 1))
                    870:                      (label_ref (match_operand 0 "" ""))
                    871:                      (pc)))]
                    872:   ""
                    873:   "
                    874: {
                    875:   operands[1] = sh_compare_op0;
                    876:   operands[2] = sh_compare_op1;
                    877: }")
                    878: 
                    879: (define_expand "bge"
                    880:   [(set (reg:SI 18) (ge:SI (match_dup 1) (match_dup 2)))
                    881:    (set (pc)
                    882:        (if_then_else (eq (reg:SI 18)
                    883:                          (const_int 1))
                    884:                      (label_ref (match_operand 0 "" ""))
                    885:                      (pc)))]
                    886:   ""
                    887:   "
                    888: {
                    889:   operands[1] = sh_compare_op0;
                    890:   operands[2] = sh_compare_op1;
                    891: }")
                    892: 
                    893: (define_expand "bgtu"
                    894:   [(set (reg:SI 18) (gtu:SI (match_dup 1) (match_dup 2)))
                    895:    (set (pc)
                    896:        (if_then_else (eq (reg:SI 18)
                    897:                           (const_int 1))
                    898:                      (label_ref (match_operand 0 "" ""))
                    899:                      (pc)))]
                    900:   ""
                    901:   "
                    902: {
                    903:   operands[1] = sh_compare_op0;
                    904:   operands[2] = sh_compare_op1;
                    905: }")
                    906: 
                    907: (define_expand "bltu"
                    908:   [(set (reg:SI 18) (ltu:SI (match_dup 1) (match_dup 2)))
                    909:    (set (pc)
                    910:        (if_then_else (eq (reg:SI 18)
                    911:                           (const_int 1))
                    912:                      (label_ref (match_operand 0 "" ""))
                    913:                      (pc)))]
                    914:   ""
                    915:   "
                    916: {
                    917:   operands[1] = sh_compare_op0;
                    918:   operands[2] = sh_compare_op1;
                    919: }")
                    920: 
                    921: (define_expand "bgeu"
                    922:   [(set (reg:SI 18) (geu:SI (match_dup 1) (match_dup 2)))
                    923:    (set (pc)
                    924:        (if_then_else (eq (reg:SI 18)
                    925:                           (const_int 1))
                    926:                      (label_ref (match_operand 0 "" ""))
                    927:                      (pc)))]
                    928:   ""
                    929:   "
                    930: {
                    931:   operands[1] = sh_compare_op0;
                    932:   operands[2] = sh_compare_op1;
                    933: }")
                    934: 
                    935: (define_expand "bleu"
                    936:   [(set (reg:SI 18) (leu:SI (match_dup 1) (match_dup 2)))
                    937:    (set (pc)
                    938:        (if_then_else (eq (reg:SI 18)
                    939:                           (const_int 1))
                    940:                      (label_ref (match_operand 0 "" ""))
                    941:                      (pc)))]
                    942:   ""
                    943:   "
                    944: {
                    945:   operands[1] = sh_compare_op0;
                    946:   operands[2] = sh_compare_op1;
                    947: }")
                    948: 
                    949: 
                    950: ;; ------------------------------------------------------------------------
                    951: ;; Jump and linkage insns
                    952: ;; ------------------------------------------------------------------------
                    953: 
                    954: (define_insn "jump_real"
                    955:   [(set (pc)
                    956:        (label_ref (match_operand 0 "" "")))]
                    957:   ""
                    958:   "*
                    959: {
                    960:   if (get_attr_length(insn) == 6) 
                    961:     {
                    962:       return \"mov.l   %I0,r13\;jmp    @r13%#\";
                    963:     }
                    964:   else
                    965:     {
                    966:       return   \"bra   %l0%#\";
                    967:     }
                    968: }"
                    969:   [(set_attr "type" "jump")
                    970:    (set_attr "needs_delay_slot" "yes")])
                    971: 
                    972: (define_expand "jump"
                    973:  [(set (pc) (label_ref (match_operand 0 "" "")))]
                    974:  ""
                    975:  "
                    976: {
                    977:   emit_insn(gen_jump_real(operand0));
                    978:   DONE;
                    979: }
                    980: ")
                    981: 
                    982: (define_insn "calli"
                    983:   [(call (mem:SI (match_operand:SI 0 "arith_reg_operand" "r"))
                    984:         (match_operand 1 "" ""))
                    985:    (clobber (reg:SI 17))]
                    986:   ""
                    987:   "jsr @%0%#"
                    988:   [(set_attr "needs_delay_slot" "yes")
                    989:    (set_attr "in_delay_slot" "no")
                    990:    (set_attr "length" "4")])
                    991: 
                    992: (define_insn "call_valuei"
                    993:   [(set (match_operand 0 "" "=rf")
                    994:        (call (mem:SI (match_operand:SI 1 "arith_reg_operand" "r"))
                    995:              (match_operand 2 "" "")))
                    996:    (clobber (reg:SI 17))]
                    997:   ""
                    998:   "jsr @%1%#"
                    999:   [(set_attr "needs_delay_slot" "yes")
                   1000:    (set_attr "in_delay_slot" "no")
                   1001:    (set_attr "length" "4")])
                   1002: 
                   1003: (define_expand "call"
                   1004:   [(parallel[(call (match_operand 0 "arith_reg_operand" "o")
                   1005:                   (match_operand 1 "" ""))
                   1006:             (clobber (reg:SI 17))])]
                   1007:   ""
                   1008:   "
                   1009: {
                   1010:   if (GET_CODE (operands[0]) == MEM) 
                   1011:     {
                   1012:       operands[0] 
                   1013:        = gen_rtx(MEM,GET_MODE (operands[0]),
                   1014:                  force_reg (Pmode,
                   1015:                            XEXP (operands[0], 0)));
                   1016:     }
                   1017: }")
                   1018: 
                   1019: (define_expand "call_value"
                   1020:   [(parallel[(set (match_operand 0 "" "=rf")
                   1021:                  (call (match_operand 1 "arith_reg_operand" "o")
                   1022:                        (match_operand 2 "" "")))
                   1023:             (clobber (reg:SI 17))])]
                   1024:   ""
                   1025:   "
                   1026: {
                   1027:   if (GET_CODE (operands[1]) == MEM) 
                   1028:     {
                   1029:       operands[1] 
                   1030:        = gen_rtx (MEM, GET_MODE (operands[1]),
                   1031:                   force_reg (Pmode,
                   1032:                              XEXP (operands[1], 0)));
                   1033:     }
                   1034: }")
                   1035: 
                   1036: (define_insn "indirect_jump"
                   1037:   [(set (pc)
                   1038:        (match_operand:SI 0 "arith_reg_operand" "r"))]
                   1039:   ""
                   1040:   "jmp @%0"
                   1041:   [(set_attr "needs_delay_slot" "yes")
                   1042:    (set_attr "in_delay_slot" "no")
                   1043:    (set_attr "length" "4")])
                   1044: 
                   1045: 
                   1046: 
                   1047: ;; ------------------------------------------------------------------------
                   1048: ;; Misc insns
                   1049: ;; ------------------------------------------------------------------------
                   1050: 
                   1051: 
                   1052: (define_insn "nop"
                   1053:   [(const_int 0)]
                   1054:   ""
                   1055:   "or  r0,r0")
                   1056: 
                   1057: (define_insn "tablejump"
                   1058:   [(set (pc)
                   1059:        (match_operand:SI 0 "arith_reg_operand" "r"))
                   1060:    (use (label_ref (match_operand 1 "" "")))]
                   1061:   ""
                   1062:   "!table jump\;jmp    @%0\;or r0,r0\;%!"
                   1063:   [(set_attr "needs_delay_slot" "no")
                   1064:    (set_attr "in_delay_slot" "no")
                   1065:    (set_attr "type" "jump")
                   1066:    (set_attr "dump" "no")])
                   1067: 
                   1068: ;; ------------------------------------------------------------------------
                   1069: ;; Scc instructions
                   1070: ;; ------------------------------------------------------------------------
                   1071: 
                   1072: (define_insn ""
                   1073:   [(set (match_operand:SI 0 "arith_reg_operand" "=r")
                   1074:        (eq (reg:SI 18) (const_int 1)))]
                   1075:   ""
                   1076:   "movt        %0 ! ")
                   1077: 
                   1078: (define_expand "seq"
                   1079:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1080:        (match_dup 1))]
                   1081:   ""
                   1082:   "operands[1] = prepare_scc_operands (EQ);")
                   1083: 
                   1084: (define_expand "slt"
                   1085:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1086:        (match_dup 1))]
                   1087:   ""
                   1088:   "operands[1] = prepare_scc_operands (LT);")
                   1089: 
                   1090: (define_expand "sle"
                   1091:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1092:        (match_dup 1))]
                   1093:   ""
                   1094:   "operands[1] = prepare_scc_operands (LE);")
                   1095: 
                   1096: (define_expand "sgt"
                   1097:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1098:        (match_dup 1))]
                   1099:   ""
                   1100:   "operands[1] = prepare_scc_operands (GT);")
                   1101: 
                   1102: (define_expand "sge"
                   1103:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1104:        (match_dup 1))]
                   1105:   ""
                   1106:   "operands[1] = prepare_scc_operands (GE);")
                   1107: 
                   1108: (define_expand "sgtu"
                   1109:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1110:        (match_dup 1))]
                   1111:   ""
                   1112:   "operands[1] = prepare_scc_operands (GTU);")
                   1113: 
                   1114: (define_expand "sltu"
                   1115:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1116:        (match_dup 1))]
                   1117:   ""
                   1118:   "operands[1] = prepare_scc_operands (LTU);")
                   1119: 
                   1120: (define_expand "sleu"
                   1121:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1122:        (match_dup 1))]
                   1123:   ""
                   1124:   "operands[1] = prepare_scc_operands (LEU);")
                   1125: 
                   1126: (define_expand "sgeu"
                   1127:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1128:        (match_dup 1))]
                   1129:   ""
                   1130:   "operands[1] = prepare_scc_operands (GEU);")
                   1131: 
                   1132: (define_expand "sne"
                   1133:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1134:        (match_dup 1))
                   1135:    (set (match_dup 0) (xor:SI (match_dup 0) (const_int 1)))]
                   1136:   ""
                   1137:   "operands[1] = prepare_scc_operands (EQ);")
                   1138: 
                   1139: (define_insn "anddi3"
                   1140:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                   1141:        (and:DI (match_operand:DI 1 "arith_reg_operand" "%0")
                   1142:                (match_operand:DI 2 "arith_reg_operand" "r")))]
                   1143:   ""
                   1144:   "and %2,%0\;and      %R2,%R0"
                   1145:   [(set_attr "length" "4")])
                   1146: 
                   1147: (define_insn "iordi3"
                   1148:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                   1149:        (ior:DI (match_operand:DI 1 "arith_reg_operand" "%0")
                   1150:                (match_operand:DI 2 "arith_reg_operand" "r")))]
                   1151:   ""
                   1152:   "or  %2,%0\;or       %R2,%R0"
                   1153:   [(set_attr "length" "4")])
                   1154: 
                   1155: (define_insn "xordi3"
                   1156:   [(set (match_operand:DI 0 "arith_reg_operand" "=r")
                   1157:        (xor:DI (match_operand:DI 1 "arith_reg_operand" "%0")
                   1158:                (match_operand:DI 2 "arith_reg_operand" "r")))]
                   1159:   ""
                   1160:   "xor %2,%0\;xor      %R2,%R0"
                   1161:   [(set_attr "length" "4")])
                   1162: 
                   1163: 
                   1164: ;; ------------------------------------------------------------------------
                   1165: ;; Block move
                   1166: ;; ------------------------------------------------------------------------
                   1167: 
                   1168: (define_expand "movstrsi"
                   1169:   [(parallel [(set (mem:BLK (match_operand:BLK 0 "general_operand" ""))
                   1170:                   (mem:BLK (match_operand:BLK 1 "general_operand" "")))
                   1171:             (use (match_operand:SI 2 "general_operand" ""))
                   1172:             (use (match_operand:SI 3 "immediate_operand" ""))
                   1173:   ])]
                   1174:   ""
                   1175:   "
                   1176: {
                   1177:   rtx src_ptr = copy_to_mode_reg(Pmode,XEXP(operands[1], 0));
                   1178:   rtx dst_ptr = copy_to_mode_reg(Pmode,XEXP(operands[0], 0));
                   1179:   int maxsize = GET_CODE (operands[2]) == CONST_INT    
                   1180:        ? MAX (INTVAL (operands[2]), INTVAL (operands[3])) : 1;
                   1181:   enum machine_mode mode = 
                   1182:      (maxsize >= 4) ? SImode :
                   1183:        (maxsize >= 2) ? HImode :
                   1184:          QImode;
                   1185: 
                   1186:   rtx tmpreg = gen_reg_rtx(mode);
                   1187:   rtx increment =  GEN_INT(GET_MODE_SIZE(mode));
                   1188:   rtx length = operands[2];
                   1189:   rtx label = gen_label_rtx();
                   1190:   rtx end_src_ptr = gen_reg_rtx(Pmode);
                   1191: 
                   1192:   /* If done first rtl emmiting stage we can't generate a loop */
                   1193:   /*  if    (!rtx_equal_function_value_matters)
                   1194:       FAIL;*/
                   1195:   
                   1196:   if (GET_CODE (length) != CONST_INT)
                   1197:     length = convert_to_mode (Pmode, length, 1);
                   1198: 
                   1199:   if (!arith_operand (length, SImode))
                   1200:        length = force_reg (SImode, length);
                   1201:        
                   1202:   emit_insn(gen_rtx(SET,
                   1203:                    VOIDmode, 
                   1204:                    end_src_ptr,
                   1205:                    gen_rtx(PLUS, Pmode, src_ptr, length)));
                   1206: 
                   1207: 
                   1208:   emit_label(label);
                   1209:   emit_move_insn(tmpreg, gen_rtx(MEM, mode, src_ptr));
                   1210: 
                   1211: 
                   1212:   emit_insn(gen_rtx(SET,
                   1213:                    VOIDmode,
                   1214:                    src_ptr,
                   1215:                    gen_rtx(PLUS, Pmode, src_ptr, increment)));
                   1216: 
                   1217:   emit_move_insn(gen_rtx(MEM, mode, dst_ptr), tmpreg);
                   1218: 
                   1219:   emit_insn(gen_rtx(SET, 
                   1220:                    VOIDmode,
                   1221:                    dst_ptr,
                   1222:                    gen_rtx(PLUS, Pmode, dst_ptr, increment)));
                   1223: 
                   1224:   sh_compare_op0 = src_ptr;
                   1225:   sh_compare_op1 = end_src_ptr;
                   1226:   
                   1227:   emit_insn(gen_cmpeqsi_t(src_ptr, end_src_ptr));
                   1228:   emit_jump_insn(gen_bne(label));
                   1229:   emit_insn(gen_rtx(SET, VOIDmode, dst_ptr, dst_ptr));
                   1230:   
                   1231:   DONE;        
                   1232: }
                   1233: ")
                   1234: 
                   1235: 
                   1236: 
                   1237: 
                   1238:    
                   1239: ;; -------------------------------------------------------------------------
                   1240: ;; Peepholes
                   1241: ;; -------------------------------------------------------------------------
                   1242: 
                   1243: 
                   1244: (define_peephole 
                   1245:   [(set (match_operand:QI 0 "arith_reg_operand" "")
                   1246:        (mem:QI (match_operand:SI 1 "arith_reg_operand" "")))
                   1247:    (set (match_dup 1) (plus:SI (match_dup 1) (const_int 1)))]
                   1248:   "REGNO(operands[1]) != REGNO(operands[0])"
                   1249:   "mov.b       @%1+,%0")
                   1250: 
                   1251: (define_peephole 
                   1252:   [(set (match_operand:HI 0 "arith_reg_operand" "")
                   1253:        (mem:HI (match_operand:SI 1 "arith_reg_operand" "")))
                   1254:    (set (match_dup 1) (plus:SI (match_dup 1) (const_int 2)))]
                   1255:   "REGNO(operands[1]) != REGNO(operands[0])"
                   1256:   "mov.w       @%1+,%0")
                   1257: 
                   1258: (define_peephole 
                   1259:   [(set (match_operand:SI 0 "arith_reg_operand" "")
                   1260:        (mem:SI (match_operand:SI 1 "arith_reg_operand" "")))
                   1261:    (set (match_dup 1) (plus:SI (match_dup 1) (const_int 4)))]
                   1262:   "REGNO(operands[1]) != REGNO(operands[0])"
                   1263:   "mov.l       @%1+,%0")
                   1264: 
                   1265: 

unix.superglobalmegacorp.com

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