Annotation of gcc/m68000.md, revision 1.1.1.1

1.1       root        1: ;;- Machine description for GNU compiler
                      2: ;;- Motorola 68000 Version
                      3: ;;   Copyright (C) 1987 Free Software Foundation, Inc.
                      4: 
                      5: ;; This file is part of GNU CC.
                      6: 
                      7: ;; GNU CC is distributed in the hope that it will be useful,
                      8: ;; but WITHOUT ANY WARRANTY.  No author or distributor
                      9: ;; accepts responsibility to anyone for the consequences of using it
                     10: ;; or for whether it serves any particular purpose or works at all,
                     11: ;; unless he says so in writing.  Refer to the GNU CC General Public
                     12: ;; License for full details.
                     13: 
                     14: ;; Everyone is granted permission to copy, modify and redistribute
                     15: ;; GNU CC, but only under the conditions described in the
                     16: ;; GNU CC General Public License.   A copy of this license is
                     17: ;; supposed to have been given to you along with GNU CC so you
                     18: ;; can know your rights and responsibilities.  It should be in a
                     19: ;; file named COPYING.  Among other things, the copyright notice
                     20: ;; and this notice must be preserved on all copies.
                     21: 
                     22: 
                     23: ;;- instruction definitions
                     24: 
                     25: ;;- @@The original PO technology requires these to be ordered by speed,
                     26: ;;- @@    so that assigner will pick the fastest.
                     27: 
                     28: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
                     29: 
                     30: ;;- When naming insn's (operand 0 of define_insn) be careful about using
                     31: ;;- names from other targets machine descriptions.
                     32: 
                     33: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
                     34: ;;- updates for most instructions.
                     35: 
                     36: ;;- Operand classes for the register allocator:
                     37: ;;- 'a' one of the address registers can be used.
                     38: ;;- 'd' one of the data registers can be used.
                     39: ;;- 'r' either a data or an address register can be used.
                     40: 
                     41: ;;- Some of these insn's are composites of several m68000 op codes.
                     42: ;;- The assembler (or final @@??) insures that the appropriate one is
                     43: ;;- selected.
                     44: 
                     45: ;; Note that DBcc cannot be used, since it deals with a 16-bit count only.
                     46: ;;-  Scc should be added.
                     47: 
                     48: (define_insn ""
                     49:   [(set (match_operand:DF 0 "push_operand" "=m")
                     50:        (match_operand:DF 1 "general_operand" "rofF"))]
                     51:   ""
                     52:   "*
                     53: {
                     54:   extern rtx adj_offsetable_operand();
                     55:   extern void output_asm_insn();
                     56:   rtx newops[2];
                     57: 
                     58:   if (FP_REG_P (operands[1]))
                     59:     return \"fmoved %1,%0\";
                     60:   if (REG_P (operands[1]))
                     61:     newops[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                     62:   else
                     63:     newops[1] = adj_offsetable_operand (operands[1], 4);
                     64:   output_asm_insn (\"movl %1,sp@-\", newops);
                     65:   return \"movl %1,sp@-\";
                     66: }")
                     67: 
                     68: (define_insn ""
                     69:   [(set (match_operand:DI 0 "push_operand" "=m")
                     70:        (match_operand:DI 1 "general_operand" "ro"))]
                     71:   ""
                     72:   "*
                     73: {
                     74:   extern rtx adj_offsetable_operand();
                     75:   extern void output_asm_insn();
                     76:   rtx newops[2];
                     77: 
                     78:   if (REG_P (operands[1]))
                     79:     newops[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                     80:   else
                     81:     newops[1] = adj_offsetable_operand (operands[1], 4);
                     82:   output_asm_insn (\"movl %1,sp@-\", newops);
                     83:   return \"movl %1,sp@-\";
                     84: }")
                     85: 
                     86: (define_insn "tstsi"
                     87:   [(set (cc0)
                     88:        (match_operand:SI 0 "general_operand" "rm"))]
                     89:   ""
                     90:   "*
                     91: { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
                     92:     return \"tstl %0\";
                     93:   return \"cmpl #0,%0\"; }")
                     94: 
                     95: (define_insn "tsthi"
                     96:   [(set (cc0)
                     97:        (match_operand:HI 0 "general_operand" "rm"))]
                     98:   ""
                     99:   "*
                    100: { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
                    101:     return \"tstw %0\";
                    102:   return \"cmpw #0,%0\"; }")
                    103: 
                    104: (define_insn "tstqi"
                    105:   [(set (cc0)
                    106:        (match_operand:QI 0 "general_operand" "dm"))]
                    107:   ""
                    108:   "tstb %0")
                    109: 
                    110: (define_insn "tstsf"
                    111:   [(set (cc0)
                    112:        (match_operand:SF 0 "general_operand" "fdm"))]
                    113:   "TARGET_68881"
                    114:   "*
                    115: {
                    116:   cc_status.flags = CC_IN_68881;
                    117:   if (FP_REG_P (operands[0]))
                    118:     return \"ftstx %0\";
                    119:   return \"ftsts %0\";
                    120: }")
                    121: 
                    122: (define_insn "tstdf"
                    123:   [(set (cc0)
                    124:        (match_operand:DF 0 "general_operand" "fm"))]
                    125:   "TARGET_68881"
                    126:   "*
                    127: {
                    128:   cc_status.flags = CC_IN_68881;
                    129:   if (FP_REG_P (operands[0]))
                    130:     return \"ftstx %0\";
                    131:   return \"ftstd %0\";
                    132: }")
                    133: 
                    134: ;;- compare instructions
                    135: ;;- A composite of the cmp, cmpa, & cmpi m68000 op codes.
                    136: (define_insn "cmpsi"
                    137:   [(set (cc0)
                    138:        (minus (match_operand:SI 0 "general_operand" "rKs,mrKs")
                    139:               (match_operand:SI 1 "general_operand" "mrKs,Ksr")))]
                    140:   ""
                    141:   "*
                    142: {
                    143:   if (REG_P (operands[1])
                    144:       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
                    145:     { cc_status.flags |= CC_REVERSED; return \"cmpl %0,%1\"; }
                    146:   return \"cmpl %1,%0\";
                    147: }")
                    148: 
                    149: (define_insn "cmphi"
                    150:   [(set (cc0)
                    151:        (minus (match_operand:HI 0 "general_operand" "ri,g")
                    152:               (match_operand:HI 1 "general_operand" "g,ir")))]
                    153:   ""
                    154:   "*
                    155: {
                    156:   if (REG_P (operands[1])
                    157:       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
                    158:     { cc_status.flags |= CC_REVERSED; return \"cmpw %0,%1\"; }
                    159:   return \"cmpw %1,%0\";
                    160: }")
                    161: 
                    162: (define_insn ""
                    163:   [(set (cc0)
                    164:        (minus (mem:QI (post_inc:SI (match_operand:SI 0 "general_operand" "+a")))
                    165:               (mem:QI (post_inc:SI (match_operand:SI 1 "general_operand" "+a")))))]
                    166:   ""
                    167:   "cmpmb %1@+,%0@+")
                    168: 
                    169: (define_insn "cmpqi"
                    170:   [(set (cc0)
                    171:        (minus (match_operand:QI 0 "general_operand" "di,m")
                    172:               (match_operand:QI 1 "general_operand" "dmi,id")))]
                    173:   ""
                    174:   "*
                    175: {
                    176:   if (REG_P (operands[1])
                    177:       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
                    178:     { cc_status.flags |= CC_REVERSED; return \"cmpb %0,%1\"; }
                    179:   return \"cmpb %1,%0\";
                    180: }")
                    181: 
                    182: (define_insn "cmpdf"
                    183:   [(set (cc0)
                    184:        (minus:DF (match_operand:DF 0 "general_operand" "f,m")
                    185:                  (match_operand:DF 1 "general_operand" "fm,f")))]
                    186:   "TARGET_68881"
                    187:   "*
                    188: {
                    189:   cc_status.flags = CC_IN_68881;
                    190:   if (REG_P (operands[0]))
                    191:     {
                    192:       if (REG_P (operands[1]))
                    193:        return \"fcmpx %1,%0\";
                    194:       else
                    195:         return \"fcmpd %1,%0\";
                    196:     }
                    197:   cc_status.flags |= CC_REVERSED;
                    198:   return \"fcmpd %0,%1\";
                    199: }")
                    200: 
                    201: (define_insn "cmpsf"
                    202:   [(set (cc0)
                    203:        (minus:SF (match_operand:SF 0 "general_operand" "f,md")
                    204:                  (match_operand:SF 1 "general_operand" "fmd,f")))]
                    205:   "TARGET_68881"
                    206:   "*
                    207: {
                    208:   cc_status.flags = CC_IN_68881;
                    209:   if (FP_REG_P (operands[0]))
                    210:     {
                    211:       if (FP_REG_P (operands[1]))
                    212:        return \"fcmpx %1,%0\";
                    213:       else
                    214:         return \"fcmps %1,%0\";
                    215:     }
                    216:   cc_status.flags |= CC_REVERSED;
                    217:   return \"fcmps %0,%1\";
                    218: }")
                    219: 
                    220: ;; Recognizers for btst instructions.
                    221: 
                    222: (define_insn ""
                    223:   [(set (cc0) (zero_extract (match_operand:QI 0 "general_operand" "dm")
                    224:                            (const_int 1)
                    225:                            (minus:SI (const_int 7)
                    226:                                      (match_operand:SI 1 "general_operand" "di"))))]
                    227:   ""
                    228:   "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
                    229: 
                    230: (define_insn ""
                    231:   [(set (cc0) (zero_extract (match_operand:SI 0 "general_operand" "d")
                    232:                            (const_int 1)
                    233:                            (minus:SI (const_int 31)
                    234:                                      (match_operand:SI 1 "general_operand" "di"))))]
                    235:   ""
                    236:   "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
                    237: 
                    238: (define_insn ""
                    239:   [(set (cc0) (zero_extract (match_operand:QI 0 "general_operand" "dm")
                    240:                            (const_int 1)
                    241:                            (match_operand:SI 1 "general_operand" "i")))]
                    242:   "GET_CODE (operands[1]) == CONST_INT"
                    243:   "*
                    244: { operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
                    245:   return output_btst (operands, operands[1], operands[0], insn, 7); }")
                    246: 
                    247: (define_insn ""
                    248:   [(set (cc0) (zero_extract (match_operand:SI 0 "general_operand" "do")
                    249:                            (const_int 1)
                    250:                            (match_operand:SI 1 "general_operand" "i")))]
                    251:   "GET_CODE (operands[1]) == CONST_INT"
                    252:   "*
                    253: {
                    254:   if (GET_CODE (operands[0]) == MEM)
                    255:     {
                    256:       operands[0] = adj_offsetable_operand (operands[0],
                    257:                                            INTVAL (operands[1]) / 8);
                    258:       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
                    259:                             7 - INTVAL (operands[1]) % 8);
                    260:       return output_btst (operands, operands[1], operands[0], insn, 7);
                    261:     }
                    262:   operands[1] = gen_rtx (CONST_INT, VOIDmode,
                    263:                         31 - INTVAL (operands[1]));
                    264:   return output_btst (operands, operands[1], operands[0], insn, 31);
                    265: }")
                    266: 
                    267: (define_insn ""
                    268:   [(set (cc0) (subreg:SI (lshiftrt:QI (match_operand:QI 0 "general_operand" "dm")
                    269:                                      (const_int 7))
                    270:                         0))]
                    271:   ""
                    272:   "*
                    273: {
                    274:   cc_status.flags = CC_Z_IN_NOT_N | CC_NOT_NEGATIVE;
                    275:   return \"tstb %0\";
                    276: }")
                    277: 
                    278: (define_insn ""
                    279:   [(set (cc0) (and:SI (sign_extend:SI (sign_extend:HI (match_operand:QI 0 "general_operand" "dm")))
                    280:                      (match_operand:SI 1 "general_operand" "i")))]
                    281:   "(GET_CODE (operands[1]) == CONST_INT
                    282:     && (unsigned) INTVAL (operands[1]) < 0x100
                    283:     && exact_log2 (INTVAL (operands[1])) >= 0)"
                    284:   "*
                    285: { register int log = exact_log2 (INTVAL (operands[1]));
                    286:   operands[1] = gen_rtx (CONST_INT, VOIDmode, log);
                    287:   return output_btst (operands, operands[1], operands[0], insn, 7);
                    288: }")
                    289: 
                    290: ;;- move instructions
                    291: (define_insn "swapsi"
                    292:   [(set (match_operand:SI 0 "general_operand" "r")
                    293:        (match_operand:SI 1 "general_operand" "r"))
                    294:    (set (match_dup 1) (match_dup 0))]
                    295:   ""
                    296:   "exg %1,%2")
                    297: 
                    298: ;; Special case of fullword move when source is zero.
                    299: ;; The reason this is special is to avoid loading a zero
                    300: ;; into a data reg with moveq in order to store it elsewhere.
                    301:    
                    302: (define_insn ""
                    303:   [(set (match_operand:SI 0 "general_operand" "=g")
                    304:        (const_int 0))]
                    305:   ""
                    306:   "*
                    307: {
                    308:   if (ADDRESS_REG_P (operands[0]))
                    309:     return \"movw #0,%0\";
                    310:   return \"clrl %0\";
                    311: }")
                    312:    
                    313: ;; Another special case in which it is not desirable
                    314: ;; to reload the constant into a data register.
                    315: (define_insn ""
                    316:   [(set (match_operand:SI 0 "push_operand" "=m")
                    317:        (match_operand:SI 1 "general_operand" "J"))]
                    318:   "GET_CODE (operands[1]) == CONST_INT
                    319:    && INTVAL (operands[1]) >= -0x8000
                    320:    && INTVAL (operands[1]) < 0x8000"
                    321:   "pea %a1")
                    322: 
                    323: ;; General case of fullword move.  The register constraints
                    324: ;; force integer constants in range for a moveq to be reloaded
                    325: ;; if they are headed for memory.
                    326: (define_insn "movsi"
                    327:   [(set (match_operand:SI 0 "general_operand" "=g,da")
                    328:        (match_operand:SI 1 "general_operand" "damKs,i"))]
                    329:   ""
                    330:   "*
                    331: {
                    332:   if (GET_CODE (operands[1]) == CONST_INT)
                    333:     {
                    334:       if (operands[1] == const0_rtx
                    335:          && (DATA_REG_P (operands[0])
                    336:              || GET_CODE (operands[0]) == MEM))
                    337:        return \"clrl %0\";
                    338:       else if (DATA_REG_P (operands[0])
                    339:               && INTVAL (operands[1]) < 128
                    340:               && INTVAL (operands[1]) >= -128)
                    341:         return \"moveq %1,%0\";
                    342:       else if (ADDRESS_REG_P (operands[0])
                    343:               && INTVAL (operands[1]) < 0x8000
                    344:               && INTVAL (operands[1]) >= -0x8000)
                    345:        return \"movw %1,%0\";
                    346:       else if (push_operand (operands[0], SImode)
                    347:               && INTVAL (operands[1]) < 0x8000
                    348:               && INTVAL (operands[1]) >= -0x8000)
                    349:         return \"pea %a1\";
                    350:     }
                    351:   else if ((GET_CODE (operands[1]) == SYMBOL_REF
                    352:            || GET_CODE (operands[1]) == CONST)
                    353:           && push_operand (operands[0], SImode))
                    354:     return \"pea %a1\";
                    355:   else if ((GET_CODE (operands[1]) == SYMBOL_REF
                    356:            || GET_CODE (operands[1]) == CONST)
                    357:           && ADDRESS_REG_P (operands[0]))
                    358:     return \"lea %a1,%0\";
                    359:   return \"movl %1,%0\";
                    360: }")
                    361: 
                    362: (define_insn "movhi"
                    363:   [(set (match_operand:HI 0 "general_operand" "=g")
                    364:        (match_operand:HI 1 "general_operand" "g"))]
                    365:   ""
                    366:   "*
                    367: {
                    368:   if (GET_CODE (operands[1]) == CONST_INT)
                    369:     {
                    370:       if (operands[1] == const0_rtx
                    371:          && (DATA_REG_P (operands[0])
                    372:              || GET_CODE (operands[0]) == MEM))
                    373:        return \"clrw %0\";
                    374:     }
                    375:   return \"movw %1,%0\";
                    376: }")
                    377: 
                    378: (define_insn "movstricthi"
                    379:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "=dm"))
                    380:        (match_operand:HI 1 "general_operand" "g"))]
                    381:   ""
                    382:   "*
                    383: {
                    384:   if (GET_CODE (operands[1]) == CONST_INT)
                    385:     {
                    386:       if (operands[1] == const0_rtx
                    387:          && (DATA_REG_P (operands[0])
                    388:              || GET_CODE (operands[0]) == MEM))
                    389:        return \"clrw %0\";
                    390:     }
                    391:   return \"movw %1,%0\";
                    392: }")
                    393: 
                    394: (define_insn "movqi"
                    395:   [(set (match_operand:QI 0 "general_operand" "=d,a,m")
                    396:        (match_operand:QI 1 "general_operand" "g,d,dmi"))]
                    397:   ""
                    398:   "*
                    399: {
                    400:   if (operands[1] == const0_rtx)
                    401:     return \"clrb %0\";
                    402:   if (ADDRESS_REG_P (operands[0]) || ADDRESS_REG_P (operands[1]))
                    403:     return \"movw %1,%0\";
                    404:   return \"movb %1,%0\";
                    405: }")
                    406: 
                    407: (define_insn "movestrictqi"
                    408:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "=d,m"))
                    409:        (match_operand:QI 1 "general_operand" "g,dmi"))]
                    410:   ""
                    411:   "*
                    412: {
                    413:   if (operands[1] == const0_rtx)
                    414:     return \"clrb %0\";
                    415:   if (ADDRESS_REG_P (operands[0]) || ADDRESS_REG_P (operands[1]))
                    416:     return \"movw %1,%0\";
                    417:   return \"movb %1,%0\";
                    418: }")
                    419: 
                    420: (define_insn "movsf"
                    421:   [(set (match_operand:SF 0 "general_operand" "=gf")
                    422:        (match_operand:SF 1 "general_operand" "gf"))]
                    423:   ""
                    424:   "*
                    425: {
                    426:   if (FP_REG_P (operands[0]))
                    427:     {
                    428:       if (FP_REG_P (operands[1]))
                    429:        return \"fmovex %1,%0\";
                    430:       else
                    431:         return \"fmoves %1,%0\";
                    432:     }
                    433:   if (FP_REG_P (operands[1]))
                    434:     return \"fmoves %1,%0\";
                    435:   return \"movl %1,%0\";
                    436: }")
                    437: 
                    438: (define_insn "movdf"
                    439:   [(set (match_operand:DF 0 "general_operand" "=rmf")
                    440:        (match_operand:DF 1 "general_operand" "rmfF"))]
                    441:   ""
                    442:   "*
                    443: {
                    444:   if (FP_REG_P (operands[0]))
                    445:     {
                    446:       if (FP_REG_P (operands[1]))
                    447:        return \"fmovex %1,%0\";
                    448:       if (DATA_REG_P (operands[1]))
                    449:        {
                    450:          rtx xoperands[2];
                    451:          xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                    452:          output_asm_insn (\"movl %1,sp@-\", xoperands);
                    453:          output_asm_insn (\"movl %1,sp@-\", operands);
                    454:          return \"fmoved sp@+,%0\";
                    455:        }
                    456:       if (GET_CODE (operands[1]) == CONST_DOUBLE)
                    457:        return output_move_const_double (operands);
                    458:       return \"fmoved %1,%0\";
                    459:     }
                    460:   else if (FP_REG_P (operands[1]))
                    461:     {
                    462:       if (DATA_REG_P (operands[0]))
                    463:        {
                    464:          output_asm_insn (\"fmoved %1,sp@-\;movl sp@+,%0\", operands);
                    465:          operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                    466:          return \"movl sp@+,%0\";
                    467:        }
                    468:       else
                    469:         return \"fmoved %1,%0\";
                    470:     }
                    471:   return output_move_double (operands);
                    472: }
                    473: ")
                    474: 
                    475: (define_insn "movdi"
                    476:   [(set (match_operand:DI 0 "general_operand" "=rmf")
                    477:        (match_operand:DI 1 "general_operand" "rmifF"))]
                    478:   ""
                    479:   "*
                    480: {
                    481:   if (FP_REG_P (operands[0]))
                    482:     {
                    483:       if (FP_REG_P (operands[1]))
                    484:        return \"fmovex %1,%0\";
                    485:       if (DATA_REG_P (operands[1]))
                    486:        {
                    487:          rtx xoperands[2];
                    488:          xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                    489:          output_asm_insn (\"movl %1,sp@-\", xoperands);
                    490:          output_asm_insn (\"movl %1,sp@-\", operands);
                    491:          return \"fmoved sp@+,%0\";
                    492:        }
                    493:       if (GET_CODE (operands[1]) == CONST_DOUBLE)
                    494:        return output_move_const_double (operands);
                    495:       return \"fmoved %1,%0\";
                    496:     }
                    497:   else if (FP_REG_P (operands[1]))
                    498:     {
                    499:       if (DATA_REG_P (operands[0]))
                    500:        {
                    501:          output_asm_insn (\"fmoved %1,sp@-\;movl sp@+,%0\", operands);
                    502:          operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                    503:          return \"movl sp@+,%0\";
                    504:        }
                    505:       else
                    506:         return \"fmoved %1,%0\";
                    507:     }
                    508:   return output_move_double (operands);
                    509: }
                    510: ")
                    511: 
                    512: ;; These go after the move instructions
                    513: ;; because the move instructions are better (require no spilling)
                    514: ;; when they can apply.  But these go before the add and subtract insns
                    515: ;; because it is often shorter to use these when both apply.
                    516: (define_insn "pushasi"
                    517:   [(set (match_operand:SI 0 "push_operand" "=m")
                    518:        (match_operand:SI 1 "address_operand" "p"))]
                    519:   ""
                    520:   "pea %a1")
                    521: 
                    522: 
                    523: (define_insn ""
                    524:   [(set (match_operand:SI 0 "general_operand" "=a")
                    525:        (match_operand:QI 1 "address_operand" "p"))]
                    526:   ""
                    527:   "lea %a1,%0")
                    528: 
                    529: ;;- conversion instructions
                    530: ;;- NONE
                    531: 
                    532: ;;- truncation instructions
                    533: (define_insn "truncsiqi2"
                    534:   [(set (match_operand:QI 0 "general_operand" "=dm")
                    535:        (truncate:QI
                    536:         (match_operand:SI 1 "general_operand" "doi")))]
                    537:   ""
                    538:   "*
                    539: {
                    540:   if (! REG_P (operands[1]))
                    541:     operands[1] = adj_offsetable_operand (operands[1], 3);
                    542:   return \"movb %1,%0\";
                    543: }")
                    544: 
                    545: (define_insn "trunchiqi2"
                    546:   [(set (match_operand:QI 0 "general_operand" "=dm")
                    547:        (truncate:QI
                    548:         (match_operand:HI 1 "general_operand" "doi")))]
                    549:   ""
                    550:   "*
                    551: {
                    552:   if (! REG_P (operands[1]))
                    553:     operands[1] = adj_offsetable_operand (operands[1], 1);
                    554:   return \"movb %1,%0\";
                    555: }")
                    556: 
                    557: (define_insn "truncsihi2"
                    558:   [(set (match_operand:HI 0 "general_operand" "=dm")
                    559:        (truncate:HI
                    560:         (match_operand:SI 1 "general_operand" "roi")))]
                    561:   ""
                    562:   "*
                    563: {
                    564:   if (! REG_P (operands[1]))
                    565:     operands[1] = adj_offsetable_operand (operands[1], 2);
                    566:   return \"movw %1,%0\";
                    567: }")
                    568: 
                    569: ;;- zero extension instructions
                    570: (define_insn "zero_extendqihi2"
                    571:   [(set (match_operand:HI 0 "general_operand" "=do<>")
                    572:        (zero_extend:HI
                    573:         (match_operand:QI 1 "general_operand" "dmi")))]
                    574:   ""
                    575:   "*
                    576: {
                    577:   if (DATA_REG_P (operands[0]))
                    578:     {
                    579:       if (GET_CODE (operands[1]) == REG
                    580:          && REGNO (operands[0]) == REGNO (operands[1]))
                    581:        return \"andw #0xFF,%0\";
                    582:       if (reg_mentioned_p (operands[0], operands[1]))
                    583:         return \"movb %1,%0\;andw #0xFF,%0\";
                    584:       return \"clrw %0\;movb %1,%0\";
                    585:     }
                    586:   else if (GET_CODE (operands[0]) == MEM
                    587:           && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
                    588:     {
                    589:       if (REGNO (XEXP (XEXP (operands[0], 0), 0))
                    590:          == STACK_POINTER_REGNUM)
                    591:        return \"clrw sp@-\;movb %1,%0\";
                    592:       else
                    593:        return \"movb %1,%0\;clrb %0\";
                    594:     }
                    595:   else if (GET_CODE (operands[0]) == MEM
                    596:           && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
                    597:     return \"clrb %0\;movb %1,%0\";
                    598:   else
                    599:     {
                    600:       output_asm_insn (\"clrb %0\", operands);
                    601:       operands[0] = adj_offsetable_operand (operands[0], 1);
                    602:       return \"movb %1,%0\";
                    603:     }
                    604: }")
                    605: 
                    606: (define_insn "zero_extendqisi2"
                    607:   [(set (match_operand:SI 0 "general_operand" "=do<>")
                    608:        (zero_extend:SI
                    609:         (match_operand:QI 1 "general_operand" "dmi")))]
                    610:   ""
                    611:   "*
                    612: {
                    613:   if (DATA_REG_P (operands[0]))
                    614:     {
                    615:       if (GET_CODE (operands[1]) == REG
                    616:          && REGNO (operands[0]) == REGNO (operands[1]))
                    617:        return \"andl #0xFF,%0\";
                    618:       if (reg_mentioned_p (operands[0], operands[1]))
                    619:         return \"movb %1,%0\;andl #0xFF,%0\";
                    620:       return \"clrl %0\;movb %1,%0\";
                    621:     }
                    622:   else if (GET_CODE (operands[0]) == MEM
                    623:           && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
                    624:     {
                    625:       operands[0] = XEXP (XEXP (operands[0], 0), 0);
                    626:       return \"clrl %0@-\;movb %1,%0@(3)\";
                    627:     }
                    628:   else if (GET_CODE (operands[0]) == MEM
                    629:           && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
                    630:     {
                    631:       operands[0] = XEXP (XEXP (operands[0], 0), 0);
                    632:       return \"clrl %0@+\;movb %1,%0@(-1)\";
                    633:     }
                    634:   else
                    635:     {
                    636:       output_asm_insn (\"clrl %0\", operands);
                    637:       operands[0] = adj_offsetable_operand (operands[0], 3);
                    638:       return \"movb %1,%0\";
                    639:     }
                    640: }")
                    641: 
                    642: (define_insn "zero_extendhisi2"
                    643:   [(set (match_operand:SI 0 "general_operand" "=do<")
                    644:        (zero_extend:SI
                    645:         (match_operand:HI 1 "general_operand" "g")))]
                    646:   ""
                    647:   "*
                    648: {
                    649:   if (DATA_REG_P (operands[0]))
                    650:     {
                    651:       if (GET_CODE (operands[1]) == REG
                    652:          && REGNO (operands[0]) == REGNO (operands[1]))
                    653:        return \"andl #0xFFFF,%0\";
                    654:       if (reg_mentioned_p (operands[0], operands[1]))
                    655:         return \"movw %1,%0\;andl #0xFFFF,%0\";
                    656:       return \"clrl %0\;movw %1,%0\";
                    657:     }
                    658:   else if (GET_CODE (operands[0]) == MEM
                    659:           && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
                    660:     return \"movw %1,%0\;clrw %0\";
                    661:   else if (GET_CODE (operands[0]) == MEM
                    662:           && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
                    663:     return \"clrw %0\;movw %1,%0\";
                    664:   else
                    665:     {
                    666:       output_asm_insn (\"clrw %0\", operands);
                    667:       operands[0] = adj_offsetable_operand (operands[0], 2);
                    668:       return \"movw %1,%0\";
                    669:     }
                    670: }")
                    671: 
                    672: ;;- sign extension instructions
                    673: (define_insn "extendqihi2"
                    674:   [(set (match_operand:HI 0 "general_operand" "=d")
                    675:        (sign_extend:HI
                    676:         (match_operand:QI 1 "general_operand" "0")))]
                    677:   ""
                    678:   "extw %0")
                    679: 
                    680: (define_insn "extendqisi2"
                    681:   [(set (match_operand:SI 0 "general_operand" "=d")
                    682:        (sign_extend:SI
                    683:         (match_operand:QI 1 "general_operand" "0")))]
                    684:   "TARGET_68020"
                    685:   "extbl %0")
                    686: 
                    687: (define_insn "extendhisi2"
                    688:   [(set (match_operand:SI 0 "general_operand" "=*d,a")
                    689:        (sign_extend:SI
                    690:         (match_operand:HI 1 "general_operand" "0,g")))]
                    691:   ""
                    692:   "*
                    693: {
                    694:   if (ADDRESS_REG_P (operands[0]))
                    695:     return \"movw %1,%0\";
                    696:   return \"extl %0\";
                    697: }")
                    698: 
                    699: ;; Conversions between float and double.
                    700: 
                    701: (define_insn "extendsfdf2"
                    702:   [(set (match_operand:DF 0 "general_operand" "=*fg,f")
                    703:        (float_extend:DF
                    704:         (match_operand:SF 1 "general_operand" "f,g")))]
                    705:   ""
                    706:   "*
                    707: {
                    708:   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
                    709:     return \"fmovex %1,%0\";
                    710:   if (FP_REG_P (operands[0]))
                    711:     return \"fmoves %1,%0\";
                    712:   if (DATA_REG_P (operands[0]) && FP_REG_P (operands[1]))
                    713:     {
                    714:       output_asm_insn (\"fmoved %1,sp@-\;movl sp@+,%0\", operands);
                    715:       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                    716:       return \"movl sp@+,%0\";
                    717:     }
                    718:   return \"fmoved %1,%0\";
                    719: }")
                    720: 
                    721: ;; This cannot output into an f-reg because there is no way to be
                    722: ;; sure of truncating in that case.
                    723: (define_insn "truncdfsf2"
                    724:   [(set (match_operand:SF 0 "general_operand" "=g")
                    725:        (float_truncate:SF
                    726:         (match_operand:DF 1 "general_operand" "f")))]
                    727:   ""
                    728:   "*
                    729: {
                    730:   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
                    731:     return \"fmovex %1,%0\";
                    732:   if (FP_REG_P (operands[0]) && DATA_REG_P (operands[1]))
                    733:     {
                    734:       rtx xoperands[2];
                    735:       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                    736:       output_asm_insn (\"movl %1,sp@-\", xoperands);
                    737:       output_asm_insn (\"movl %1,sp@-\", operands);
                    738:       return \"fmoved sp@+,%0\";
                    739:     }
                    740:   if (FP_REG_P (operands[0]))
                    741:     return \"fmoved %1,%0\";
                    742:   return \"fmoves %1,%0\";
                    743: }")
                    744: 
                    745: ;; Conversion between fixed point and floating point.
                    746: 
                    747: (define_insn "floatqisf2"
                    748:   [(set (match_operand:SF 0 "general_operand" "=f")
                    749:        (float:SF (match_operand:QI 1 "general_operand" "dmi")))]
                    750:   "TARGET_68881"
                    751:   "fmoveb %1,%0")
                    752: 
                    753: (define_insn "floatqidf2"
                    754:   [(set (match_operand:DF 0 "general_operand" "=f")
                    755:        (float:DF (match_operand:QI 1 "general_operand" "dmi")))]
                    756:   "TARGET_68881"
                    757:   "fmoveb %1,%0")
                    758: 
                    759: (define_insn "floathisf2"
                    760:   [(set (match_operand:SF 0 "general_operand" "=f")
                    761:        (float:SF (match_operand:HI 1 "general_operand" "dmi")))]
                    762:   "TARGET_68881"
                    763:   "fmovew %1,%0")
                    764: 
                    765: (define_insn "floathidf2"
                    766:   [(set (match_operand:DF 0 "general_operand" "=f")
                    767:        (float:DF (match_operand:HI 1 "general_operand" "dmi")))]
                    768:   "TARGET_68881"
                    769:   "fmovew %1,%0")
                    770: 
                    771: (define_insn "floatsisf2"
                    772:   [(set (match_operand:SF 0 "general_operand" "=f")
                    773:        (float:SF (match_operand:SI 1 "general_operand" "dmi")))]
                    774:   "TARGET_68881"
                    775:   "fmovel %1,%0")
                    776: 
                    777: (define_insn "floatsidf2"
                    778:   [(set (match_operand:DF 0 "general_operand" "=f")
                    779:        (float:DF (match_operand:SI 1 "general_operand" "dmi")))]
                    780:   "TARGET_68881"
                    781:   "fmovel %1,%0")
                    782: 
                    783: (define_insn "fixsfqi2"
                    784:   [(set (match_operand:QI 0 "general_operand" "=dm")
                    785:        (fix:QI (match_operand:SF 1 "general_operand" "f")))]
                    786:   "TARGET_68881"
                    787:   "fmoveb %1,%0")
                    788: 
                    789: (define_insn "fixsfhi2"
                    790:   [(set (match_operand:HI 0 "general_operand" "=dm")
                    791:        (fix:HI (match_operand:SF 1 "general_operand" "f")))]
                    792:   "TARGET_68881"
                    793:   "fmovew %1,%0")
                    794: 
                    795: (define_insn "fixsfsi2"
                    796:   [(set (match_operand:SI 0 "general_operand" "=dm")
                    797:        (fix:SI (match_operand:SF 1 "general_operand" "f")))]
                    798:   "TARGET_68881"
                    799:   "fmovel %1,%0")
                    800: 
                    801: (define_insn "fixdfqi2"
                    802:   [(set (match_operand:QI 0 "general_operand" "=dm")
                    803:        (fix:QI (match_operand:DF 1 "general_operand" "f")))]
                    804:   "TARGET_68881"
                    805:   "fmoveb %1,%0")
                    806: 
                    807: (define_insn "fixdfhi2"
                    808:   [(set (match_operand:HI 0 "general_operand" "=dm")
                    809:        (fix:HI (match_operand:DF 1 "general_operand" "f")))]
                    810:   "TARGET_68881"
                    811:   "fmovew %1,%0")
                    812: 
                    813: (define_insn "fixdfsi2"
                    814:   [(set (match_operand:SI 0 "general_operand" "=dm")
                    815:        (fix:SI (match_operand:DF 1 "general_operand" "f")))]
                    816:   "TARGET_68881"
                    817:   "fmovel %1,%0")
                    818: 
                    819: ;;- add instructions
                    820: ;;- A composite of the add, adda, addi, & addq m68000 op codes.
                    821: 
                    822: (define_insn "addsi3"
                    823:   [(set (match_operand:SI 0 "general_operand" "=%m,r,!a")
                    824:        (plus:SI (match_operand:SI 1 "general_operand" "0,0,a")
                    825:                 (match_operand:SI 2 "general_operand" "dIKLs,mrIKLs,rJ")))]
                    826:   ""
                    827:   "*
                    828: {
                    829:   if (! rtx_equal_p (operands[0], operands[1]))
                    830:     {
                    831:       if (GET_CODE (operands[2]) == REG)
                    832:        return \"lea %1@(%2),%0\";
                    833:       else
                    834:        return \"lea %1@(%c2),%0\";
                    835:     }
                    836:   if (GET_CODE (operands[2]) == CONST_INT)
                    837:     {
                    838:       if (INTVAL (operands[2]) > 0
                    839:          && INTVAL (operands[2]) <= 8)
                    840:        return \"addql %2,%0\";
                    841:       if (INTVAL (operands[2]) < 0
                    842:          && INTVAL (operands[2]) >= -8)
                    843:         {
                    844:          operands[2] = gen_rtx (CONST_INT, VOIDmode,
                    845:                                 - INTVAL (operands[2]));
                    846:          return \"subql %2,%0\";
                    847:        }
                    848:       if (ADDRESS_REG_P (operands[0])
                    849:          && INTVAL (operands[2]) >= -0x8000
                    850:          && INTVAL (operands[2]) < 0x8000)
                    851:        return \"addw %2,%0\";
                    852:     }
                    853:   return \"addl %2,%0\";
                    854: }")
                    855: 
                    856: (define_insn ""
                    857:   [(set (match_operand:SI 0 "general_operand" "=a")
                    858:        (plus:SI (match_operand:SI 1 "general_operand" "0")
                    859:                 (sign_extend:SI (match_operand:HI 2 "general_operand" "g"))))]
                    860:   ""
                    861:   "addw %2,%0")
                    862: 
                    863: (define_insn "addhi3"
                    864:   [(set (match_operand:HI 0 "general_operand" "=%m,r")
                    865:        (plus:HI (match_operand:HI 1 "general_operand" "0,0")
                    866:                 (match_operand:HI 2 "general_operand" "di,g")))]
                    867:   ""
                    868:   "*
                    869: {
                    870:   if (GET_CODE (operands[2]) == CONST_INT)
                    871:     {
                    872:       if (INTVAL (operands[2]) > 0
                    873:          && INTVAL (operands[2]) <= 8)
                    874:        return \"addqw %2,%0\";
                    875:     }
                    876:   return \"addw %2,%0\";
                    877: }")
                    878: 
                    879: (define_insn ""
                    880:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
                    881:        (plus:HI (match_dup 0)
                    882:                 (match_operand:HI 1 "general_operand" "di,g")))]
                    883:   ""
                    884:   "addw %1,%0")
                    885: 
                    886: (define_insn "addqi3"
                    887:   [(set (match_operand:QI 0 "general_operand" "=%m,d")
                    888:        (plus:QI (match_operand:QI 1 "general_operand" "0,0")
                    889:                 (match_operand:QI 2 "general_operand" "di,dmi")))]
                    890:   ""
                    891:   "*
                    892: {
                    893:   if (GET_CODE (operands[2]) == CONST_INT)
                    894:     {
                    895:       if (INTVAL (operands[2]) > 0
                    896:          && INTVAL (operands[2]) <= 8)
                    897:        return \"addqb %2,%0\";
                    898:     }
                    899:   return \"addb %2,%0\";
                    900: }")
                    901: 
                    902: (define_insn ""
                    903:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
                    904:        (plus:QI (match_dup 0)
                    905:                 (match_operand:QI 1 "general_operand" "di,dmi")))]
                    906:   ""
                    907:   "addb %1,%0")
                    908: 
                    909: (define_insn "adddf3"
                    910:   [(set (match_operand:DF 0 "general_operand" "=%f")
                    911:        (plus:DF (match_operand:DF 1 "general_operand" "0")
                    912:                 (match_operand:DF 2 "general_operand" "fmG")))]
                    913:   "TARGET_68881"
                    914:   "*
                    915: {
                    916:   if (REG_P (operands[2]))
                    917:     return \"faddx %2,%0\";
                    918:   return \"faddd %2,%0\";
                    919: }")
                    920: 
                    921: (define_insn "addsf3"
                    922:   [(set (match_operand:SF 0 "general_operand" "=%f")
                    923:        (plus:SF (match_operand:SF 1 "general_operand" "0")
                    924:                 (match_operand:SF 2 "general_operand" "fdmG")))]
                    925:   "TARGET_68881"
                    926:   "*
                    927: {
                    928:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
                    929:     return \"faddx %2,%0\";
                    930:   return \"fadds %2,%0\";
                    931: }")
                    932: 
                    933: ;;- subtract instructions
                    934: ;;- A composite of the sub, suba, subi, & subq m68000 op codes.
                    935: (define_insn "subsi3"
                    936:   [(set (match_operand:SI 0 "general_operand" "=m,r,!a,r")
                    937:        (minus:SI (match_operand:SI 1 "general_operand" "0,0,a,mrIKs")
                    938:                  (match_operand:SI 2 "general_operand" "dIKs,mrIKs,J,0")))]
                    939:   ""
                    940:   "*
                    941: {
                    942:   if (! rtx_equal_p (operands[0], operands[1]))
                    943:     {
                    944:       if (rtx_equal_p (operands[0], operands[2]))
                    945:        {
                    946:          if (GET_CODE (operands[1]) == CONST_INT)
                    947:            {
                    948:              if (INTVAL (operands[1]) > 0
                    949:                  && INTVAL (operands[1]) <= 8)
                    950:                return \"subql %1,%0\;negl %0\";
                    951:              if (ADDRESS_REG_P (operands[0])
                    952:                  && INTVAL (operands[1]) >= -0x8000
                    953:                  && INTVAL (operands[1]) < 0x8000)
                    954:                return \"subw %1,%0\;negl %0\";
                    955:            }
                    956:          return \"subl %1,%0\;negl %0\";
                    957:        }
                    958:       /* This case is matched by J, but negating -0x8000
                    959:          in an lea would give an invalid displacement.
                    960:         So do this specially.  */
                    961:       if (INTVAL (operands[2]) == -0x8000)
                    962:        return \"movl %1,%0\;subl %2,%0\";
                    963:       return \"lea %1@(%n2),%0\";
                    964:     }
                    965:   if (GET_CODE (operands[2]) == CONST_INT)
                    966:     {
                    967:       if (INTVAL (operands[2]) > 0
                    968:          && INTVAL (operands[2]) <= 8)
                    969:        return \"subql %2,%0\";
                    970:       if (ADDRESS_REG_P (operands[0])
                    971:          && INTVAL (operands[2]) >= -0x8000
                    972:          && INTVAL (operands[2]) < 0x8000)
                    973:        return \"subw %2,%0\";
                    974:     }
                    975:   return \"subl %2,%0\";
                    976: }")
                    977: 
                    978: (define_insn ""
                    979:   [(set (match_operand:SI 0 "general_operand" "=a")
                    980:        (minus:SI (match_operand:SI 1 "general_operand" "0")
                    981:                  (sign_extend:SI (match_operand:HI 2 "general_operand" "g"))))]
                    982:   ""
                    983:   "subw %2,%0")
                    984: 
                    985: (define_insn "subhi3"
                    986:   [(set (match_operand:HI 0 "general_operand" "=m,r")
                    987:        (minus:HI (match_operand:HI 1 "general_operand" "0,0")
                    988:                  (match_operand:HI 2 "general_operand" "di,g")))]
                    989:   ""
                    990:   "subw %2,%0")
                    991: 
                    992: (define_insn ""
                    993:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
                    994:        (minus:HI (match_dup 0)
                    995:                  (match_operand:HI 1 "general_operand" "di,g")))]
                    996:   ""
                    997:   "subw %1,%0")
                    998: 
                    999: (define_insn "subqi3"
                   1000:   [(set (match_operand:QI 0 "general_operand" "=m,d")
                   1001:        (minus:QI (match_operand:QI 1 "general_operand" "0,0")
                   1002:                  (match_operand:QI 2 "general_operand" "di,dmi")))]
                   1003:   ""
                   1004:   "subb %2,%0")
                   1005: 
                   1006: (define_insn ""
                   1007:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
                   1008:        (minus:QI (match_dup 0)
                   1009:                  (match_operand:QI 1 "general_operand" "di,dmi")))]
                   1010:   ""
                   1011:   "subb %1,%0")
                   1012: 
                   1013: (define_insn "subdf3"
                   1014:   [(set (match_operand:DF 0 "general_operand" "=f")
                   1015:        (minus:DF (match_operand:DF 1 "general_operand" "0")
                   1016:                  (match_operand:DF 2 "general_operand" "fmG")))]
                   1017:   "TARGET_68881"
                   1018:   "*
                   1019: {
                   1020:   if (REG_P (operands[2]))
                   1021:     return \"fsubx %2,%0\";
                   1022:   return \"fsubd %2,%0\";
                   1023: }")
                   1024: 
                   1025: (define_insn "subsf3"
                   1026:   [(set (match_operand:SF 0 "general_operand" "=f")
                   1027:        (minus:SF (match_operand:SF 1 "general_operand" "0")
                   1028:                  (match_operand:SF 2 "general_operand" "fdmG")))]
                   1029:   "TARGET_68881"
                   1030:   "*
                   1031: {
                   1032:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
                   1033:     return \"fsubx %2,%0\";
                   1034:   return \"fsubs %2,%0\";
                   1035: }")
                   1036: 
                   1037: ;;- multiply instructions
                   1038: 
                   1039: (define_insn "mulhi3"
                   1040:   [(set (match_operand:HI 0 "general_operand" "=%d")
                   1041:        (mult:HI (match_operand:HI 1 "general_operand" "0")
                   1042:                 (match_operand:HI 2 "general_operand" "dmi")))]
                   1043:   ""
                   1044:   "muls %2,%0")
                   1045: 
                   1046: (define_insn "mulhisi3"
                   1047:   [(set (match_operand:SI 0 "general_operand" "=%d")
                   1048:        (mult:SI (match_operand:HI 1 "general_operand" "0")
                   1049:                 (match_operand:HI 2 "general_operand" "dmi")))]
                   1050:   ""
                   1051:   "muls %2,%0")
                   1052: 
                   1053: (define_insn "mulsi3"
                   1054:   [(set (match_operand:SI 0 "general_operand" "=%d")
                   1055:        (mult:SI (match_operand:SI 1 "general_operand" "0")
                   1056:                 (match_operand:SI 2 "general_operand" "dmsK")))]
                   1057:   "TARGET_68020"
                   1058:   "mulsl %2,%0")
                   1059: 
                   1060: (define_insn "umulhi3"
                   1061:   [(set (match_operand:HI 0 "general_operand" "=%d")
                   1062:        (umult:HI (match_operand:HI 1 "general_operand" "0")
                   1063:                  (match_operand:HI 2 "general_operand" "dmi")))]
                   1064:   ""
                   1065:   "mulu %2,%0")
                   1066: 
                   1067: (define_insn "umulhisi3"
                   1068:   [(set (match_operand:SI 0 "general_operand" "=%d")
                   1069:        (umult:SI (match_operand:HI 1 "general_operand" "0")
                   1070:                  (match_operand:HI 2 "general_operand" "dmi")))]
                   1071:   ""
                   1072:   "mulu %2,%0")
                   1073: 
                   1074: (define_insn "umulsi3"
                   1075:   [(set (match_operand:SI 0 "general_operand" "=%d")
                   1076:        (umult:SI (match_operand:SI 1 "general_operand" "0")
                   1077:                  (match_operand:SI 2 "general_operand" "dmsK")))]
                   1078:   "TARGET_68020"
                   1079:   "mulul %2,%0")
                   1080: 
                   1081: (define_insn "muldf3"
                   1082:   [(set (match_operand:DF 0 "general_operand" "=%f")
                   1083:        (mult:DF (match_operand:DF 1 "general_operand" "0")
                   1084:                 (match_operand:DF 2 "general_operand" "fmG")))]
                   1085:   "TARGET_68881"
                   1086:   "*
                   1087: {
                   1088:   if (REG_P (operands[2]))
                   1089:     return \"fmulx %2,%0\";
                   1090:   return \"fmuld %2,%0\";
                   1091: }")
                   1092: 
                   1093: (define_insn "mulsf3"
                   1094:   [(set (match_operand:SF 0 "general_operand" "=%f")
                   1095:        (mult:SF (match_operand:SF 1 "general_operand" "0")
                   1096:                 (match_operand:SF 2 "general_operand" "fdmG")))]
                   1097:   "TARGET_68881"
                   1098:   "*
                   1099: {
                   1100:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
                   1101:     return \"fsglmulx %2,%0\";
                   1102:   return \"fsglmuls %2,%0\";
                   1103: }")
                   1104: 
                   1105: ;;- divide instructions
                   1106: 
                   1107: (define_insn "divhi3"
                   1108:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1109:        (div:HI (match_operand:HI 1 "general_operand" "0")
                   1110:                (match_operand:HI 2 "general_operand" "dmi")))]
                   1111:   ""
                   1112:   "extw %0\;divs %2,%0")
                   1113: 
                   1114: (define_insn "divhisi3"
                   1115:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1116:        (div:HI (match_operand:SI 1 "general_operand" "0")
                   1117:                (match_operand:HI 2 "general_operand" "dmi")))]
                   1118:   ""
                   1119:   "divs %2,%0")
                   1120: 
                   1121: (define_insn "divsi3"
                   1122:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1123:        (div:SI (match_operand:SI 1 "general_operand" "0")
                   1124:                (match_operand:SI 2 "general_operand" "dmsK")))]
                   1125:   ""
                   1126:   "divsl %2,%0")
                   1127: 
                   1128: (define_insn "udivhi3"
                   1129:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1130:        (udiv:HI (match_operand:HI 1 "general_operand" "0")
                   1131:                 (match_operand:HI 2 "general_operand" "dmi")))]
                   1132:   ""
                   1133:   "andl #0xFFFF,%0\;divu %2,%0")
                   1134: 
                   1135: (define_insn "udivhisi3"
                   1136:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1137:        (udiv:HI (match_operand:SI 1 "general_operand" "0")
                   1138:                 (match_operand:HI 2 "general_operand" "dmi")))]
                   1139:   ""
                   1140:   "divu %2,%0")
                   1141: 
                   1142: (define_insn "udivsi3"
                   1143:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1144:        (udiv:SI (match_operand:SI 1 "general_operand" "0")
                   1145:                 (match_operand:SI 2 "general_operand" "dmsK")))]
                   1146:   ""
                   1147:   "divul %2,%0")
                   1148: 
                   1149: (define_insn "divdf3"
                   1150:   [(set (match_operand:DF 0 "general_operand" "=f")
                   1151:        (div:DF (match_operand:DF 1 "general_operand" "0")
                   1152:                (match_operand:DF 2 "general_operand" "fmG")))]
                   1153:   "TARGET_68881"
                   1154:   "*
                   1155: {
                   1156:   if (REG_P (operands[2]))
                   1157:     return \"fdivx %2,%0\";
                   1158:   return \"fdivd %2,%0\";
                   1159: }")
                   1160: 
                   1161: (define_insn "divsf3"
                   1162:   [(set (match_operand:SF 0 "general_operand" "=f")
                   1163:        (div:SF (match_operand:SF 1 "general_operand" "0")
                   1164:                (match_operand:SF 2 "general_operand" "fdmG")))]
                   1165:   "TARGET_68881"
                   1166:   "*
                   1167: {
                   1168:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
                   1169:     return \"fsgldivx %2,%0\";
                   1170:   return \"fsgldivs %2,%0\";
                   1171: }")
                   1172: 
                   1173: ;; Remainder instructions.
                   1174: 
                   1175: (define_insn "modhi3"
                   1176:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1177:        (mod:HI (match_operand:HI 1 "general_operand" "0")
                   1178:                (match_operand:HI 2 "general_operand" "dmi")))]
                   1179:   ""
                   1180:   "extw %0\;divs %2,%0\;swap %0")
                   1181: 
                   1182: (define_insn "modhisi3"
                   1183:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1184:        (mod:HI (match_operand:SI 1 "general_operand" "0")
                   1185:                (match_operand:HI 2 "general_operand" "dmi")))]
                   1186:   ""
                   1187:   "divs %2,%0\;swap %0")
                   1188: 
                   1189: (define_insn "umodhi3"
                   1190:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1191:        (umod:HI (match_operand:HI 1 "general_operand" "0")
                   1192:                 (match_operand:HI 2 "general_operand" "dmi")))]
                   1193:   ""
                   1194:   "andl #0xFFFF,%0\;divu %2,%0\;swap %0")
                   1195: 
                   1196: (define_insn "umodhisi3"
                   1197:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1198:        (umod:HI (match_operand:SI 1 "general_operand" "0")
                   1199:                 (match_operand:HI 2 "general_operand" "dmi")))]
                   1200:   ""
                   1201:   "divu %2,%0\;swap %0")
                   1202: 
                   1203: (define_insn "divmodsi4"
                   1204:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1205:        (div:SI (match_operand:SI 1 "general_operand" "0")
                   1206:                (match_operand:SI 2 "general_operand" "dmsK")))
                   1207:    (set (match_operand:SI 3 "general_operand" "=d")
                   1208:        (mod:SI (match_dup 1) (match_dup 2)))]
                   1209:   "TARGET_68020"
                   1210:   "divsll %2,%3:%0")
                   1211: 
                   1212: (define_insn "udivmodsi4"
                   1213:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1214:        (udiv:SI (match_operand:SI 1 "general_operand" "0")
                   1215:                 (match_operand:SI 2 "general_operand" "dmsK")))
                   1216:    (set (match_operand:SI 3 "general_operand" "=d")
                   1217:        (umod:SI (match_dup 1) (match_dup 2)))]
                   1218:   "TARGET_68020"
                   1219:   "divull %2,%3:%0")
                   1220: 
                   1221: ;;- and instructions
                   1222: ;;- A composite of the and, & andi m68000 op codes.
                   1223: 
                   1224: ;; First, recognize a subcase of andsi that can usually be optimized.
                   1225: ;; Doing this with the main pattern for andsi would require a new
                   1226: ;; register-class letter for negative constants
                   1227: ;; and that's not worth adding for one use.
                   1228: (define_insn ""
                   1229:   [(set (match_operand:SI 0 "general_operand" "=%md")
                   1230:        (and:SI (match_operand:SI 1 "general_operand" "0")
                   1231:                (match_operand:SI 2 "general_operand" "i")))]
                   1232:   "(GET_CODE (operands[1]) == CONST_INT && (INTVAL (operands[1]) | 0xffff) == 0xffffffff)
                   1233:    || (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) | 0xffff) == 0xffffffff)"
                   1234:   "*
                   1235: {
                   1236:   if (DATA_REG_P (operands[0])
                   1237:       || offsetable_address_p (operands[0]))
                   1238:     { 
                   1239:       if (GET_CODE (operands[0]) != REG)
                   1240:         operands[0] = adj_offsetable_operand (operands[0], 2);
                   1241:       return \"andw %2,%0\";
                   1242:     }
                   1243:   return \"andl %2,%0\";
                   1244: }")
                   1245: 
                   1246: (define_insn "andsi3"
                   1247:   [(set (match_operand:SI 0 "general_operand" "=%m,d")
                   1248:        (and:SI (match_operand:SI 1 "general_operand" "0,0")
                   1249:                (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
                   1250:   ""
                   1251:   "*
                   1252: {
                   1253:   if (GET_CODE (operands[2]) == CONST_INT
                   1254:       && (INTVAL (operands[2]) | 0xffff) == 0xffffffff
                   1255:       && (DATA_REG_P (operands[0])
                   1256:          || offsetable_address_p (operands[0])))
                   1257:     { 
                   1258:       if (GET_CODE (operands[0]) != REG)
                   1259:         operands[0] = adj_offsetable_operand (operands[0], 2);
                   1260:       return \"andw %2,%0\";
                   1261:     }
                   1262:   return \"andl %2,%0\";
                   1263: }")
                   1264: 
                   1265: (define_insn "andhi3"
                   1266:   [(set (match_operand:HI 0 "general_operand" "=%m,d")
                   1267:        (and:HI (match_operand:HI 1 "general_operand" "0,0")
                   1268:                (match_operand:HI 2 "general_operand" "di,dmi")))]
                   1269:   ""
                   1270:   "andw %2,%0")
                   1271: 
                   1272: (define_insn "andqi3"
                   1273:   [(set (match_operand:QI 0 "general_operand" "=%m,d")
                   1274:        (and:QI (match_operand:QI 1 "general_operand" "0,0")
                   1275:                (match_operand:QI 2 "general_operand" "di,dmi")))]
                   1276:   ""
                   1277:   "andb %2,%0")
                   1278: 
                   1279: ;;- Bit set (inclusive or) instructions
                   1280: ;;- A composite of the or, & ori m68000 op codes.
                   1281: (define_insn "iorsi3"
                   1282:   [(set (match_operand:SI 0 "general_operand" "=%m,d")
                   1283:        (ior:SI (match_operand:SI 1 "general_operand" "0,0")
                   1284:                (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
                   1285:   ""
                   1286:   "*
                   1287: {
                   1288:   register int logval;
                   1289:   if (GET_CODE (operands[2]) == CONST_INT
                   1290:       && INTVAL (operands[2]) >> 16 == 0
                   1291:       && (DATA_REG_P (operands[0])
                   1292:          || offsetable_address_p (operands[0])))
                   1293:     { 
                   1294:       if (GET_CODE (operands[0]) != REG)
                   1295:         operands[0] = adj_offsetable_operand (operands[0], 2);
                   1296:       return \"orw %2,%0\";
                   1297:     }
                   1298:   if (GET_CODE (operands[2]) == CONST_INT
                   1299:       && (logval = exact_log2 (INTVAL (operands[2]))) >= 0
                   1300:       && (DATA_REG_P (operands[0])
                   1301:          || offsetable_address_p (operands[0])))
                   1302:     { 
                   1303:       if (DATA_REG_P (operands[0]))
                   1304:        {
                   1305:          operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
                   1306:        }
                   1307:       else
                   1308:         {
                   1309:          operands[0] = adj_offsetable_operand (operands[0], 3 - (logval / 8));
                   1310:          operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
                   1311:        }
                   1312:       return \"bset %1,%0\";
                   1313:     }
                   1314:   return \"orl %2,%0\";
                   1315: }")
                   1316: 
                   1317: (define_insn "iorhi3"
                   1318:   [(set (match_operand:HI 0 "general_operand" "=%m,d")
                   1319:        (ior:HI (match_operand:HI 1 "general_operand" "0,0")
                   1320:                (match_operand:HI 2 "general_operand" "di,dmi")))]
                   1321:   ""
                   1322:   "orw %2,%0")
                   1323: 
                   1324: (define_insn "iorqi3"
                   1325:   [(set (match_operand:QI 0 "general_operand" "=%m,d")
                   1326:        (ior:QI (match_operand:QI 1 "general_operand" "0,0")
                   1327:                (match_operand:QI 2 "general_operand" "di,dmi")))]
                   1328:   ""
                   1329:   "orb %2,%0")
                   1330: 
                   1331: ;;- xor instructions
                   1332: ;;- A composite of the eor, & eori m68000 op codes.
                   1333: (define_insn "xorsi3"
                   1334:   [(set (match_operand:SI 0 "general_operand" "=%dm")
                   1335:        (xor:SI (match_operand:SI 1 "general_operand" "0")
                   1336:                (match_operand:SI 2 "general_operand" "dKs")))]
                   1337:   ""
                   1338:   "*
                   1339: {
                   1340:   if (GET_CODE (operands[2]) == CONST_INT
                   1341:       && INTVAL (operands[2]) >> 16 == 0
                   1342:       && offsetable_address_p (operands[0]))
                   1343:     { 
                   1344:       operands[0] = adj_offsetable_operand (operands[0], 2);
                   1345:       return \"eorw %2,%0\";
                   1346:     }
                   1347:   return \"eorl %2,%0\";
                   1348: }")
                   1349: 
                   1350: (define_insn "xorhi3"
                   1351:   [(set (match_operand:HI 0 "general_operand" "=%dm")
                   1352:        (xor:HI (match_operand:HI 1 "general_operand" "0")
                   1353:                (match_operand:HI 2 "general_operand" "di")))]
                   1354:   ""
                   1355:   "eorw %2,%0")
                   1356: 
                   1357: (define_insn "xorqi3"
                   1358:   [(set (match_operand:QI 0 "general_operand" "=%dm")
                   1359:        (xor:QI (match_operand:QI 1 "general_operand" "0")
                   1360:                (match_operand:QI 2 "general_operand" "di")))]
                   1361:   ""
                   1362:   "eorb %2,%0")
                   1363: 
                   1364: ;;- negation instructions
                   1365: (define_insn "negsi2"
                   1366:   [(set (match_operand:SI 0 "general_operand" "=dm")
                   1367:        (neg:SI (match_operand:SI 1 "general_operand" "0")))]
                   1368:   ""
                   1369:   "negl %0")
                   1370: 
                   1371: (define_insn "neghi2"
                   1372:   [(set (match_operand:HI 0 "general_operand" "=dm")
                   1373:        (neg:HI (match_operand:HI 1 "general_operand" "0")))]
                   1374:   ""
                   1375:   "negw %0")
                   1376: 
                   1377: (define_insn "negqi2"
                   1378:   [(set (match_operand:QI 0 "general_operand" "=dm")
                   1379:        (neg:QI (match_operand:QI 1 "general_operand" "0")))]
                   1380:   ""
                   1381:   "negb %0")
                   1382: 
                   1383: (define_insn "negsf2"
                   1384:   [(set (match_operand:SF 0 "general_operand" "=f")
                   1385:        (neg:SF (match_operand:SF 1 "general_operand" "fdm")))]
                   1386:   "TARGET_68881"
                   1387:   "*
                   1388: {
                   1389:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
                   1390:     return \"fnegx %1,%0\";
                   1391:   return \"fnegs %1,%0\";
                   1392: }")
                   1393: 
                   1394: (define_insn "negdf2"
                   1395:   [(set (match_operand:DF 0 "general_operand" "=f")
                   1396:        (neg:DF (match_operand:DF 1 "general_operand" "fmF")))]
                   1397:   "TARGET_68881"
                   1398:   "*
                   1399: {
                   1400:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
                   1401:     return \"fnegx %1,%0\";
                   1402:   return \"fnegd %1,%0\";
                   1403: }")
                   1404: 
                   1405: ;; Absolute value instructions
                   1406: 
                   1407: (define_insn "abssf2"
                   1408:   [(set (match_operand:SF 0 "general_operand" "=f")
                   1409:        (abs:SF (match_operand:SF 1 "general_operand" "fdm")))]
                   1410:   "TARGET_68881"
                   1411:   "*
                   1412: {
                   1413:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
                   1414:     return \"fabsx %1,%0\";
                   1415:   return \"fabss %1,%0\";
                   1416: }")
                   1417: 
                   1418: (define_insn "absdf2"
                   1419:   [(set (match_operand:DF 0 "general_operand" "=f")
                   1420:        (abs:DF (match_operand:DF 1 "general_operand" "fmF")))]
                   1421:   "TARGET_68881"
                   1422:   "*
                   1423: {
                   1424:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
                   1425:     return \"fabsx %1,%0\";
                   1426:   return \"fabsd %1,%0\";
                   1427: }")
                   1428: 
                   1429: ;;- one complement instructions
                   1430: (define_insn "one_cmplsi2"
                   1431:   [(set (match_operand:SI 0 "general_operand" "=dm")
                   1432:        (not:SI (match_operand:SI 1 "general_operand" "0")))]
                   1433:   ""
                   1434:   "notl %0")
                   1435: 
                   1436: (define_insn "one_cmplhi2"
                   1437:   [(set (match_operand:HI 0 "general_operand" "=dm")
                   1438:        (not:HI (match_operand:HI 1 "general_operand" "0")))]
                   1439:   ""
                   1440:   "notw %0")
                   1441: 
                   1442: (define_insn "one_cmplqi2"
                   1443:   [(set (match_operand:QI 0 "general_operand" "=dm")
                   1444:        (not:QI (match_operand:QI 1 "general_operand" "0")))]
                   1445:   ""
                   1446:   "notb %0")
                   1447: 
                   1448: ;; Optimized special case of shifting.
                   1449: ;; Must precede the general case.
                   1450: 
                   1451: (define_insn ""
                   1452:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1453:        (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
                   1454:                     (const_int 24)))]
                   1455:   ""
                   1456:   "*
                   1457: {
                   1458:   if (TARGET_68020)
                   1459:     return \"movb %1,%0\;extbl %0\";
                   1460:   return \"movb %1,%0\;extw %0\;extl %0\";
                   1461: }")
                   1462: 
                   1463: (define_insn ""
                   1464:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1465:        (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
                   1466:                     (const_int 24)))]
                   1467:   ""
                   1468:   "*
                   1469: {
                   1470:   if (reg_mentioned_p (operands[0], operands[1]))
                   1471:     return \"movb %1,%0\;andl #0xFF,%0\";
                   1472:   return \"clrl %0\;movb %1,%0\";
                   1473: }")
                   1474: 
                   1475: (define_insn ""
                   1476:   [(set (cc0) (minus (match_operand:QI 0 "general_operand" "i")
                   1477:                     (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
                   1478:                                  (const_int 24))))]
                   1479:   "(GET_CODE (operands[0]) == CONST_INT
                   1480:     && (INTVAL (operands[0]) & ~0xff) == 0)"
                   1481:   "* cc_status.flags |= CC_REVERSED; return \"cmpb %0,%1\"; ")
                   1482: 
                   1483: (define_insn ""
                   1484:   [(set (cc0) (minus (lshiftrt:SI (match_operand:SI 0 "memory_operand" "m")
                   1485:                                  (const_int 24))
                   1486:                     (match_operand:QI 1 "general_operand" "i")))]
                   1487:   "(GET_CODE (operands[1]) == CONST_INT
                   1488:     && (INTVAL (operands[1]) & ~0xff) == 0)"
                   1489:   "cmpb %1,%0")
                   1490: 
                   1491: (define_insn ""
                   1492:   [(set (cc0) (minus (match_operand:QI 0 "general_operand" "i")
                   1493:                     (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
                   1494:                                  (const_int 24))))]
                   1495:   "(GET_CODE (operands[0]) == CONST_INT
                   1496:     && ((INTVAL (operands[0]) + 0x80) & ~0xff) == 0)"
                   1497:   "* cc_status.flags |= CC_REVERSED; return \"cmpb %0,%1\"; ")
                   1498: 
                   1499: (define_insn ""
                   1500:   [(set (cc0) (minus (ashiftrt:SI (match_operand:SI 0 "memory_operand" "m")
                   1501:                                  (const_int 24))
                   1502:                     (match_operand:QI 1 "general_operand" "i")))]
                   1503:   "(GET_CODE (operands[1]) == CONST_INT
                   1504:     && ((INTVAL (operands[1]) + 0x80) & ~0xff) == 0)"
                   1505:   "cmpb %1,%0")
                   1506: 
                   1507: ;;- arithmetic shift instructions
                   1508: ;;- don't need the shift memory by 1 bit instruction
                   1509: (define_insn "ashlsi3"
                   1510:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1511:        (ashift:SI (match_operand:SI 1 "general_operand" "0")
                   1512:                   (match_operand:SI 2 "general_operand" "dI")))]
                   1513:   ""
                   1514:   "asll %2,%0")
                   1515: 
                   1516: (define_insn "ashlhi3"
                   1517:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1518:        (ashift:HI (match_operand:HI 1 "general_operand" "0")
                   1519:                   (match_operand:HI 2 "general_operand" "dI")))]
                   1520:   ""
                   1521:   "aslw %2,%0")
                   1522: 
                   1523: (define_insn "ashlqi3"
                   1524:   [(set (match_operand:QI 0 "general_operand" "=d")
                   1525:        (ashift:QI (match_operand:QI 1 "general_operand" "0")
                   1526:                   (match_operand:QI 2 "general_operand" "dI")))]
                   1527:   ""
                   1528:   "aslb %2,%0")
                   1529: 
                   1530: (define_insn "ashrsi3"
                   1531:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1532:        (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
                   1533:                     (match_operand:SI 2 "general_operand" "dI")))]
                   1534:   ""
                   1535:   "asrl %2,%0")
                   1536: 
                   1537: (define_insn "ashrhi3"
                   1538:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1539:        (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
                   1540:                     (match_operand:HI 2 "general_operand" "dI")))]
                   1541:   ""
                   1542:   "asrw %2,%0")
                   1543: 
                   1544: (define_insn "ashrqi3"
                   1545:   [(set (match_operand:QI 0 "general_operand" "=d")
                   1546:        (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
                   1547:                     (match_operand:QI 2 "general_operand" "dI")))]
                   1548:   ""
                   1549:   "asrb %2,%0")
                   1550: 
                   1551: ;;- logical shift instructions
                   1552: ;;- don't need the shift memory by 1 bit instruction
                   1553: (define_insn "lshlsi3"
                   1554:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1555:        (lshift:SI (match_operand:SI 1 "general_operand" "0")
                   1556:                   (match_operand:SI 2 "general_operand" "dI")))]
                   1557:   ""
                   1558:   "lsll %2,%0")
                   1559: 
                   1560: (define_insn "lshlhi3"
                   1561:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1562:        (lshift:HI (match_operand:HI 1 "general_operand" "0")
                   1563:                   (match_operand:HI 2 "general_operand" "dI")))]
                   1564:   ""
                   1565:   "lslw %2,%0")
                   1566: 
                   1567: (define_insn "lshlqi3"
                   1568:   [(set (match_operand:QI 0 "general_operand" "=d")
                   1569:        (lshift:QI (match_operand:QI 1 "general_operand" "0")
                   1570:                   (match_operand:QI 2 "general_operand" "dI")))]
                   1571:   ""
                   1572:   "lslb %2,%0")
                   1573: 
                   1574: (define_insn "lshrsi3"
                   1575:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1576:        (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
                   1577:                     (match_operand:SI 2 "general_operand" "dI")))]
                   1578:   ""
                   1579:   "lsrl %2,%0")
                   1580: 
                   1581: (define_insn "lshrhi3"
                   1582:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1583:        (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
                   1584:                     (match_operand:HI 2 "general_operand" "dI")))]
                   1585:   ""
                   1586:   "lsrw %2,%0")
                   1587: 
                   1588: (define_insn "lshrqi3"
                   1589:   [(set (match_operand:QI 0 "general_operand" "=d")
                   1590:        (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
                   1591:                     (match_operand:QI 2 "general_operand" "dI")))]
                   1592:   ""
                   1593:   "lsrb %2,%0")
                   1594: 
                   1595: ;;- rotate instructions
                   1596: ;;- don't need the shift memory by 1 bit instruction
                   1597: 
                   1598: (define_insn "rotlsi3"
                   1599:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1600:        (rotate:SI (match_operand:SI 1 "general_operand" "0")
                   1601:                   (match_operand:SI 2 "general_operand" "dI")))]
                   1602:   ""
                   1603:   "roll %2,%0")
                   1604: 
                   1605: (define_insn "rotlhi3"
                   1606:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1607:        (rotate:HI (match_operand:HI 1 "general_operand" "0")
                   1608:                   (match_operand:HI 2 "general_operand" "dI")))]
                   1609:   ""
                   1610:   "rolw %2,%0")
                   1611: 
                   1612: (define_insn "rotlqi3"
                   1613:   [(set (match_operand:QI 0 "general_operand" "=d")
                   1614:        (rotate:QI (match_operand:QI 1 "general_operand" "0")
                   1615:                   (match_operand:QI 2 "general_operand" "dI")))]
                   1616:   ""
                   1617:   "rolb %2,%0")
                   1618: 
                   1619: (define_insn "rotrsi3"
                   1620:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1621:        (rotatert:SI (match_operand:SI 1 "general_operand" "0")
                   1622:                     (match_operand:SI 2 "general_operand" "dI")))]
                   1623:   ""
                   1624:   "rorl %2,%0")
                   1625: 
                   1626: (define_insn "rotrhi3"
                   1627:   [(set (match_operand:HI 0 "general_operand" "=d")
                   1628:        (rotatert:HI (match_operand:HI 1 "general_operand" "0")
                   1629:                     (match_operand:HI 2 "general_operand" "dI")))]
                   1630:   ""
                   1631:   "rorw %2,%0")
                   1632: 
                   1633: (define_insn "rotrqi3"
                   1634:   [(set (match_operand:QI 0 "general_operand" "=d")
                   1635:        (rotatert:QI (match_operand:QI 1 "general_operand" "0")
                   1636:                     (match_operand:QI 2 "general_operand" "dI")))]
                   1637:   ""
                   1638:   "rorb %2,%0")
                   1639: 
                   1640: ;; Bit field instructions.
                   1641: 
                   1642: (define_insn "extv"
                   1643:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1644:        (sign_extract:SI (match_operand:QI 1 "general_operand" "dm")
                   1645:                         (match_operand:SI 2 "general_operand" "di")
                   1646:                         (match_operand:SI 3 "general_operand" "di")))]
                   1647:   "TARGET_68020 && TARGET_BITFIELD"
                   1648:   "bfexts %1{%3:%2},%0")
                   1649: 
                   1650: (define_insn "extzv"
                   1651:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1652:        (zero_extract:SI (match_operand:QI 1 "general_operand" "dm")
                   1653:                         (match_operand:SI 2 "general_operand" "di")
                   1654:                         (match_operand:SI 3 "general_operand" "di")))]
                   1655:   "TARGET_68020 && TARGET_BITFIELD"
                   1656:   "bfextu %1{%3:%2},%0")
                   1657: 
                   1658: (define_insn ""
                   1659:   [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "+dm")
                   1660:                         (match_operand:SI 1 "general_operand" "di")
                   1661:                         (match_operand:SI 2 "general_operand" "di"))
                   1662:        (const_int 0))]
                   1663:   "TARGET_68020 && TARGET_BITFIELD"
                   1664:   "bfclr %0{%2:%1}")
                   1665: 
                   1666: (define_insn ""
                   1667:   [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "+dm")
                   1668:                         (match_operand:SI 1 "general_operand" "di")
                   1669:                         (match_operand:SI 2 "general_operand" "di"))
                   1670:        (const_int -1))]
                   1671:   "TARGET_68020 && TARGET_BITFIELD"
                   1672:   "bfset %0{%2:%1}")
                   1673: 
                   1674: ;; double d in "+ddm" increases pressure to put operand 0 in data reg.
                   1675: (define_insn "insv"
                   1676:   [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "+ddm")
                   1677:                         (match_operand:SI 1 "general_operand" "di")
                   1678:                         (match_operand:SI 2 "general_operand" "di"))
                   1679:        (match_operand:SI 3 "general_operand" "d"))]
                   1680:   "TARGET_68020 && TARGET_BITFIELD"
                   1681:   "bfins %3,%0{%2:%1}")
                   1682: 
                   1683: ;; Now recognize bit field insns that operate on registers
                   1684: ;; (or at least were intended to do so).
                   1685: 
                   1686: (define_insn ""
                   1687:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1688:        (sign_extract:SI (match_operand:SI 1 "general_operand" "d")
                   1689:                         (match_operand:SI 2 "general_operand" "di")
                   1690:                         (match_operand:SI 3 "general_operand" "di")))]
                   1691:   "TARGET_68020 && TARGET_BITFIELD"
                   1692:   "bfexts %1{%3:%2},%0")
                   1693: 
                   1694: (define_insn ""
                   1695:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1696:        (zero_extract:SI (match_operand:SI 1 "general_operand" "d")
                   1697:                         (match_operand:SI 2 "general_operand" "di")
                   1698:                         (match_operand:SI 3 "general_operand" "di")))]
                   1699:   "TARGET_68020 && TARGET_BITFIELD"
                   1700:   "bfextu %1{%3:%2},%0")
                   1701: 
                   1702: (define_insn ""
                   1703:   [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+d")
                   1704:                         (match_operand:SI 1 "general_operand" "di")
                   1705:                         (match_operand:SI 2 "general_operand" "di"))
                   1706:        (const_int 0))]
                   1707:   "TARGET_68020 && TARGET_BITFIELD"
                   1708:   "bfclr %0{%2:%1}")
                   1709: 
                   1710: (define_insn ""
                   1711:   [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+d")
                   1712:                         (match_operand:SI 1 "general_operand" "di")
                   1713:                         (match_operand:SI 2 "general_operand" "di"))
                   1714:        (const_int -1))]
                   1715:   "TARGET_68020 && TARGET_BITFIELD"
                   1716:   "bfset %0{%2:%1}")
                   1717: 
                   1718: ;; double d in "+ddm" increases pressure to put operand 0 in data reg.
                   1719: (define_insn ""
                   1720:   [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+d")
                   1721:                         (match_operand:SI 1 "general_operand" "di")
                   1722:                         (match_operand:SI 2 "general_operand" "di"))
                   1723:        (match_operand:SI 3 "general_operand" "d"))]
                   1724:   "TARGET_68020 && TARGET_BITFIELD"
                   1725:   "*
                   1726: {
                   1727:   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
                   1728:       && INTVAL (operands[1]) == 16 && INTVAL (operands[2]) == 16)
                   1729:     return \"movw %3,%0\";
                   1730:   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
                   1731:       && INTVAL (operands[1]) == 24 && INTVAL (operands[2]) == 8)
                   1732:     return \"movb %3,%0\";
                   1733:   return \"bfins %3,%0{%2:%1}\";
                   1734: }")
                   1735: 
                   1736: ;; Special patterns for optimizing bit-field instructions.
                   1737: 
                   1738: (define_insn ""
                   1739:   [(set (cc0)
                   1740:        (zero_extract:SI (match_operand:QI 0 "general_operand" "dm")
                   1741:                         (match_operand:SI 1 "general_operand" "di")
                   1742:                         (match_operand:SI 2 "general_operand" "di")))]
                   1743:   "TARGET_68020 && TARGET_BITFIELD
                   1744:    && GET_CODE (operands[1]) == CONST_INT"
                   1745:   "*
                   1746: {
                   1747:   if (operands[1] == const1_rtx
                   1748:       && GET_CODE (operands[2]) == CONST_INT)
                   1749:     {    
                   1750:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
                   1751:       return output_btst (operands,
                   1752:                          gen_rtx (CONST_INT, VOIDmode,
                   1753:                                   width - INTVAL (operands[2])),
                   1754:                          operands[0],
                   1755:                          insn, 1000);
                   1756:       /* Pass 1000 as SIGNPOS argument so that btst will
                   1757:          not think we are testing the sign bit for an `and'
                   1758:         and assume that nonzero implies a negative result.  */
                   1759:     }
                   1760:   if (INTVAL (operands[1]) != 32)
                   1761:     cc_status.flags = CC_NOT_NEGATIVE;
                   1762:   return \"bftst %0{%2:%1}\";
                   1763: }")
                   1764: 
                   1765: (define_insn ""
                   1766:   [(set (cc0)
                   1767:        (subreg:QI
                   1768:         (zero_extract:SI (match_operand:QI 0 "general_operand" "dm")
                   1769:                          (match_operand:SI 1 "general_operand" "di")
                   1770:                          (match_operand:SI 2 "general_operand" "di"))
                   1771:         0))]
                   1772:   "TARGET_68020 && TARGET_BITFIELD
                   1773:    && GET_CODE (operands[1]) == CONST_INT"
                   1774:   "*
                   1775: {
                   1776:   if (operands[1] == const1_rtx
                   1777:       && GET_CODE (operands[2]) == CONST_INT)
                   1778:     {    
                   1779:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
                   1780:       return output_btst (operands,
                   1781:                          gen_rtx (CONST_INT, VOIDmode,
                   1782:                                   width - INTVAL (operands[2])),
                   1783:                          operands[0],
                   1784:                          insn, 1000);
                   1785:       /* Pass 1000 as SIGNPOS argument so that btst will
                   1786:          not think we are testing the sign bit for an `and'
                   1787:         and assume that nonzero implies a negative result.  */
                   1788:     }
                   1789:   if (INTVAL (operands[1]) != 32)
                   1790:     cc_status.flags = CC_NOT_NEGATIVE;
                   1791:   return \"bftst %0{%2:%1}\";
                   1792: }")
                   1793: 
                   1794: (define_insn ""
                   1795:   [(set (cc0)
                   1796:        (subreg:HI
                   1797:         (zero_extract:SI (match_operand:QI 0 "general_operand" "dm")
                   1798:                          (match_operand:SI 1 "general_operand" "di")
                   1799:                          (match_operand:SI 2 "general_operand" "di"))
                   1800:         0))]
                   1801:   "TARGET_68020 && TARGET_BITFIELD
                   1802:    && GET_CODE (operands[1]) == CONST_INT"
                   1803:   "*
                   1804: {
                   1805:   if (operands[1] == const1_rtx
                   1806:       && GET_CODE (operands[2]) == CONST_INT)
                   1807:     {    
                   1808:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
                   1809:       return output_btst (operands,
                   1810:                          gen_rtx (CONST_INT, VOIDmode,
                   1811:                                   width - INTVAL (operands[2])),
                   1812:                          operands[0],
                   1813:                          insn, 1000);
                   1814:       /* Pass 1000 as SIGNPOS argument so that btst will
                   1815:          not think we are testing the sign bit for an `and'
                   1816:         and assume that nonzero implies a negative result.  */
                   1817:     }
                   1818:   if (INTVAL (operands[1]) != 32)
                   1819:     cc_status.flags = CC_NOT_NEGATIVE;
                   1820:   return \"bftst %0{%2:%1}\";
                   1821: }")
                   1822: 
                   1823: 
                   1824: (define_insn "seqsi"
                   1825:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1826:        (eq (cc0) (const_int 0)))]
                   1827:   ""
                   1828:   "* OUTPUT_JUMP (\"seq %0\", \"fseq %0\", \"seq %0\"); ")
                   1829: 
                   1830: (define_insn "snesi"
                   1831:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1832:        (ne (cc0) (const_int 0)))]
                   1833:   ""
                   1834:   "* OUTPUT_JUMP (\"sne %0\", \"fsne %0\", \"sne %0\"); ")
                   1835: 
                   1836: (define_insn "sgtsi"
                   1837:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1838:        (gt (cc0) (const_int 0)))]
                   1839:   ""
                   1840:   "* OUTPUT_JUMP (\"sgt %0\", \"fsgt %0\", \"andb #0xc,cc\;sgt %0\"); ")
                   1841: 
                   1842: (define_insn "sgtusi"
                   1843:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1844:        (gtu (cc0) (const_int 0)))]
                   1845:   ""
                   1846:   "shi %0")
                   1847: 
                   1848: (define_insn "sltsi"
                   1849:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1850:        (lt (cc0) (const_int 0)))]
                   1851:   ""
                   1852:   "* OUTPUT_JUMP (\"slt %0\", \"fslt %0\", \"smi %0\"); ")
                   1853: 
                   1854: (define_insn "sltusi"
                   1855:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1856:        (ltu (cc0) (const_int 0)))]
                   1857:   ""
                   1858:   "scs %0")
                   1859: 
                   1860: (define_insn "sgesi"
                   1861:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1862:        (ge (cc0) (const_int 0)))]
                   1863:   ""
                   1864:   "* OUTPUT_JUMP (\"sge %0\", \"fsge %0\", \"spl %0\"); ")
                   1865: 
                   1866: (define_insn "sgeusi"
                   1867:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1868:        (geu (cc0) (const_int 0)))]
                   1869:   ""
                   1870:   "scc %0")  
                   1871: 
                   1872: (define_insn "slesi"
                   1873:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1874:        (le (cc0) (const_int 0)))]
                   1875:   ""
                   1876:   "* OUTPUT_JUMP (\"sle %0\", \"fsle %0\", \"andb #0xc,cc\;sle %0\"); ")
                   1877: 
                   1878: (define_insn "sleusi"
                   1879:   [(set (match_operand:SI 0 "general_operand" "=d")
                   1880:        (leu (cc0) (const_int 0)))]
                   1881:   ""
                   1882:   "sls %0")
                   1883: 
                   1884: ;; Basic conditional jump instructions.
                   1885: 
                   1886: (define_insn "beq"
                   1887:   [(set (pc)
                   1888:        (if_then_else (eq (cc0)
                   1889:                          (const_int 0))
                   1890:                      (label_ref (match_operand 0 "" ""))
                   1891:                      (pc)))]
                   1892:   ""
                   1893:   "*
                   1894: {
                   1895:   if (cc_status.flags & CC_Z_IN_NOT_N)
                   1896:     return \"jpl %l0\";
                   1897:   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
                   1898: }")
                   1899: 
                   1900: (define_insn "bne"
                   1901:   [(set (pc)
                   1902:        (if_then_else (ne (cc0)
                   1903:                          (const_int 0))
                   1904:                      (label_ref (match_operand 0 "" ""))
                   1905:                      (pc)))]
                   1906:   ""
                   1907:   "*
                   1908: {
                   1909:   if (cc_status.flags & CC_Z_IN_NOT_N)
                   1910:     return \"jmi %l0\";
                   1911:   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
                   1912: }")
                   1913: 
                   1914: (define_insn "bgt"
                   1915:   [(set (pc)
                   1916:        (if_then_else (gt (cc0)
                   1917:                          (const_int 0))
                   1918:                      (label_ref (match_operand 0 "" ""))
                   1919:                      (pc)))]
                   1920:   ""
                   1921:   "* OUTPUT_JUMP (\"jgt %l0\", \"fjgt %l0\", \"andb #0xc,cc\;jgt %l0\"); ")
                   1922: 
                   1923: (define_insn "bgtu"
                   1924:   [(set (pc)
                   1925:        (if_then_else (gtu (cc0)
                   1926:                           (const_int 0))
                   1927:                      (label_ref (match_operand 0 "" ""))
                   1928:                      (pc)))]
                   1929:   ""
                   1930:   "jhi %l0")
                   1931: 
                   1932: (define_insn "blt"
                   1933:   [(set (pc)
                   1934:        (if_then_else (lt (cc0)
                   1935:                          (const_int 0))
                   1936:                      (label_ref (match_operand 0 "" ""))
                   1937:                      (pc)))]
                   1938:   ""
                   1939:   "* OUTPUT_JUMP (\"jlt %l0\", \"fjlt %l0\", \"jmi %l0\"); ")
                   1940: 
                   1941: (define_insn "bltu"
                   1942:   [(set (pc)
                   1943:        (if_then_else (ltu (cc0)
                   1944:                           (const_int 0))
                   1945:                      (label_ref (match_operand 0 "" ""))
                   1946:                      (pc)))]
                   1947:   ""
                   1948:   "jcs %l0")
                   1949: 
                   1950: (define_insn "bge"
                   1951:   [(set (pc)
                   1952:        (if_then_else (ge (cc0)
                   1953:                          (const_int 0))
                   1954:                      (label_ref (match_operand 0 "" ""))
                   1955:                      (pc)))]
                   1956:   ""
                   1957:   "* OUTPUT_JUMP (\"jge %l0\", \"fjge %l0\", \"jpl %l0\"); ")
                   1958: 
                   1959: (define_insn "bgeu"
                   1960:   [(set (pc)
                   1961:        (if_then_else (geu (cc0)
                   1962:                           (const_int 0))
                   1963:                      (label_ref (match_operand 0 "" ""))
                   1964:                      (pc)))]
                   1965:   ""
                   1966:   "jcc %l0")
                   1967: 
                   1968: (define_insn "ble"
                   1969:   [(set (pc)
                   1970:        (if_then_else (le (cc0)
                   1971:                          (const_int 0))
                   1972:                      (label_ref (match_operand 0 "" ""))
                   1973:                      (pc)))]
                   1974:   ""
                   1975:   "* OUTPUT_JUMP (\"jle %l0\", \"fjle %l0\", \"andb #0xc,cc\;jle %l0\"); ")
                   1976: 
                   1977: (define_insn "bleu"
                   1978:   [(set (pc)
                   1979:        (if_then_else (leu (cc0)
                   1980:                           (const_int 0))
                   1981:                      (label_ref (match_operand 0 "" ""))
                   1982:                      (pc)))]
                   1983:   ""
                   1984:   "jls %l0")
                   1985: 
                   1986: ;; Negated conditional jump instructions.
                   1987: 
                   1988: (define_insn ""
                   1989:   [(set (pc)
                   1990:        (if_then_else (eq (cc0)
                   1991:                          (const_int 0))
                   1992:                      (pc)
                   1993:                      (label_ref (match_operand 0 "" ""))))]
                   1994:   ""
                   1995:   "*
                   1996: {
                   1997:   if (cc_status.flags & CC_Z_IN_NOT_N)
                   1998:     return \"jmi %l0\";
                   1999:   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
                   2000: }")
                   2001: 
                   2002: (define_insn ""
                   2003:   [(set (pc)
                   2004:        (if_then_else (ne (cc0)
                   2005:                          (const_int 0))
                   2006:                      (pc)
                   2007:                      (label_ref (match_operand 0 "" ""))))]
                   2008:   ""
                   2009:   "*
                   2010: {
                   2011:   if (cc_status.flags & CC_Z_IN_NOT_N)
                   2012:     return \"jpl %l0\";
                   2013:   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
                   2014: }")
                   2015: 
                   2016: (define_insn ""
                   2017:   [(set (pc)
                   2018:        (if_then_else (gt (cc0)
                   2019:                          (const_int 0))
                   2020:                      (pc)
                   2021:                      (label_ref (match_operand 0 "" ""))))]
                   2022:   ""
                   2023:   "* OUTPUT_JUMP (\"jle %l0\", \"fjngt %l0\", \"andb #0xc,cc\;jle %l0\"); ")
                   2024: 
                   2025: (define_insn ""
                   2026:   [(set (pc)
                   2027:        (if_then_else (gtu (cc0)
                   2028:                           (const_int 0))
                   2029:                      (pc)
                   2030:                      (label_ref (match_operand 0 "" ""))))]
                   2031:   ""
                   2032:   "jls %l0")
                   2033: 
                   2034: (define_insn ""
                   2035:   [(set (pc)
                   2036:        (if_then_else (lt (cc0)
                   2037:                          (const_int 0))
                   2038:                      (pc)
                   2039:                      (label_ref (match_operand 0 "" ""))))]
                   2040:   ""
                   2041:   "* OUTPUT_JUMP (\"jge %l0\", \"fjnlt %l0\", \"jpl %l0\"); ")
                   2042: 
                   2043: (define_insn ""
                   2044:   [(set (pc)
                   2045:        (if_then_else (ltu (cc0)
                   2046:                           (const_int 0))
                   2047:                      (pc)
                   2048:                      (label_ref (match_operand 0 "" ""))))]
                   2049:   ""
                   2050:   "jcc %l0")
                   2051: 
                   2052: (define_insn ""
                   2053:   [(set (pc)
                   2054:        (if_then_else (ge (cc0)
                   2055:                          (const_int 0))
                   2056:                      (pc)
                   2057:                      (label_ref (match_operand 0 "" ""))))]
                   2058:   ""
                   2059:   "* OUTPUT_JUMP (\"jlt %l0\", \"fjnge %l0\", \"jmi %l0\"); ")
                   2060: 
                   2061: (define_insn ""
                   2062:   [(set (pc)
                   2063:        (if_then_else (geu (cc0)
                   2064:                           (const_int 0))
                   2065:                      (pc)
                   2066:                      (label_ref (match_operand 0 "" ""))))]
                   2067:   ""
                   2068:   "jcs %l0")
                   2069: 
                   2070: (define_insn ""
                   2071:   [(set (pc)
                   2072:        (if_then_else (le (cc0)
                   2073:                          (const_int 0))
                   2074:                      (pc)
                   2075:                      (label_ref (match_operand 0 "" ""))))]
                   2076:   ""
                   2077:   "* OUTPUT_JUMP (\"jgt %l0\", \"fjnle %l0\", \"andb #0xc,cc\;jgt %l0\"); ")
                   2078: 
                   2079: (define_insn ""
                   2080:   [(set (pc)
                   2081:        (if_then_else (leu (cc0)
                   2082:                           (const_int 0))
                   2083:                      (pc)
                   2084:                      (label_ref (match_operand 0 "" ""))))]
                   2085:   ""
                   2086:   "jhi %l0")
                   2087: 
                   2088: ;; Unconditional and other jump instructions
                   2089: (define_insn "jump"
                   2090:   [(set (pc)
                   2091:        (label_ref (match_operand 0 "" "")))]
                   2092:   ""
                   2093:   "jra %l0")
                   2094: 
                   2095: (define_insn "tablejump"
                   2096:   [(set (pc)
                   2097:        (plus:SI (pc) (match_operand:HI 0 "general_operand" "r")))]
                   2098:   ""
                   2099:   "jmp pc@(2,%0:w)")
                   2100: 
                   2101: (define_insn ""
                   2102:   [(set (pc)
                   2103:        (if_then_else
                   2104:         (ne (minus (minus:HI (match_operand:HI 0 "general_operand" "g")
                   2105:                              (const_int 1))
                   2106:                    (const_int -1))
                   2107:             (const_int 0))
                   2108:         (label_ref (match_operand 1 "" "g"))
                   2109:         (pc)))
                   2110:    (set (match_dup 0)
                   2111:        (minus:HI (match_dup 0)
                   2112:                  (const_int 1)))]
                   2113:   ""
                   2114:   "*
                   2115: {
                   2116:   if (DATA_REG_P (operands[0]))
                   2117:     return \"jdbra %0,%l1\";
                   2118:   return \"subqw #1,%0\;cmpw #-1,%0\;jne %l1\";
                   2119: }")
                   2120: 
                   2121: (define_insn ""
                   2122:   [(set (pc)
                   2123:        (if_then_else
                   2124:         (ne (minus (const_int -1)
                   2125:                    (minus:SI (match_operand:SI 0 "general_operand" "g")
                   2126:                              (const_int 1)))
                   2127:             (const_int 0))
                   2128:         (label_ref (match_operand 1 "" "g"))
                   2129:         (pc)))
                   2130:    (set (match_dup 0)
                   2131:        (minus:SI (match_dup 0)
                   2132:                  (const_int 1)))]
                   2133:   ""
                   2134:   "*
                   2135: {
                   2136:   if (DATA_REG_P (operands[0]))
                   2137:     return \"jdbra %0,%l1\;clrw %0\;subql #1,%0\;cmpl #-1,%0\;jne %l1\";
                   2138:   return \"subql #1,%0\;cmpl #-1,%0\;jne %l1\";
                   2139: }")
                   2140: 
                   2141: ;;- jump to subroutine
                   2142: (define_insn "call"
                   2143:   [(call (match_operand:QI 0 "general_operand" "m")
                   2144:         (match_operand:SI 1 "general_operand" "g"))]
                   2145:   ;;- Don't use operand 1 for the m68000.
                   2146:   ""
                   2147:   "jbsr %0")
                   2148: 
                   2149: (define_insn "return"
                   2150:   [(return)]
                   2151:   ""
                   2152:   "rts")
                   2153: 
                   2154: ;;- Local variables:
                   2155: ;;- mode:emacs-lisp
                   2156: ;;- comment-start: ";;- "
                   2157: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
                   2158: ;;- eval: (modify-syntax-entry ?[ "(]")
                   2159: ;;- eval: (modify-syntax-entry ?] ")[")
                   2160: ;;- eval: (modify-syntax-entry ?{ "(}")
                   2161: ;;- eval: (modify-syntax-entry ?} "){")
                   2162: ;;- End:

unix.superglobalmegacorp.com

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