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

1.1       root        1: ; BUGS:
                      2: ;; Insert no-op between an insn with memory read-write operands
                      3: ;;   following by a scale-indexing operation.
                      4: ;; The Sequent assembler does not allow addresses to be used
                      5: ;;   except in insns which explicitly compute an effective address.
                      6: ;;   I.e., one cannot say "cmpd _p,@_x"
                      7: ;; Implement unsigned multiplication??
                      8: 
                      9: ;;- Machine descrption for GNU compiler
                     10: ;;- ns32000 Version
                     11: ;;   Copyright (C) 1988 Free Software Foundation, Inc.
                     12: ;;   Contributed by Michael Tiemann ([email protected])
                     13: 
                     14: ;; This file is part of GNU CC.
                     15: 
                     16: ;; GNU CC is free software; you can redistribute it and/or modify
                     17: ;; it under the terms of the GNU General Public License as published by
                     18: ;; the Free Software Foundation; either version 2, or (at your option)
                     19: ;; any later version.
                     20: 
                     21: ;; GNU CC is distributed in the hope that it will be useful,
                     22: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     23: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     24: ;; GNU General Public License for more details.
                     25: 
                     26: ;; You should have received a copy of the GNU General Public License
                     27: ;; along with GNU CC; see the file COPYING.  If not, write to
                     28: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     29: 
                     30: 
                     31: ;;- Instruction patterns.  When multiple patterns apply,
                     32: ;;- the first one in the file is chosen.
                     33: ;;-
                     34: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
                     35: ;;-
                     36: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
                     37: ;;- updates for most instructions.
                     38: 
                     39: ;; We don't want to allow a constant operand for test insns because
                     40: ;; (set (cc0) (const_int foo)) has no mode information.  Such insns will
                     41: ;; be folded while optimizing anyway.
                     42: 
                     43: (define_insn "tstsi"
                     44:   [(set (cc0)
                     45:        (match_operand:SI 0 "nonimmediate_operand" "rm"))]
                     46:   ""
                     47:   "*
                     48: { cc_status.flags |= CC_REVERSED;
                     49:   operands[1] = const0_rtx;
                     50:   return \"cmpqd %1,%0\"; }")
                     51: 
                     52: (define_insn "tsthi"
                     53:   [(set (cc0)
                     54:        (match_operand:HI 0 "nonimmediate_operand" "g"))]
                     55:   ""
                     56:   "*
                     57: { cc_status.flags |= CC_REVERSED;
                     58:   operands[1] = const0_rtx;
                     59:   return \"cmpqw %1,%0\"; }")
                     60: 
                     61: (define_insn "tstqi"
                     62:   [(set (cc0)
                     63:        (match_operand:QI 0 "nonimmediate_operand" "g"))]
                     64:   ""
                     65:   "*
                     66: { cc_status.flags |= CC_REVERSED;
                     67:   operands[1] = const0_rtx;
                     68:   return \"cmpqb %1,%0\"; }")
                     69: 
                     70: (define_insn "tstdf"
                     71:   [(set (cc0)
                     72:        (match_operand:DF 0 "general_operand" "fmF"))]
                     73:   "TARGET_32081"
                     74:   "*
                     75: { cc_status.flags |= CC_REVERSED;
                     76:   operands[1] = CONST0_RTX (DFmode);
                     77:   return \"cmpl %1,%0\"; }")
                     78: 
                     79: (define_insn "tstsf"
                     80:   [(set (cc0)
                     81:        (match_operand:SF 0 "general_operand" "fmF"))]
                     82:   "TARGET_32081"
                     83:   "*
                     84: { cc_status.flags |= CC_REVERSED;
                     85:   operands[1] = CONST0_RTX (SFmode);
                     86:   return \"cmpf %1,%0\"; }")
                     87: 
                     88: (define_insn "cmpsi"
                     89:   [(set (cc0)
                     90:        (compare (match_operand:SI 0 "nonimmediate_operand" "rmn")
                     91:                 (match_operand:SI 1 "general_operand" "rmn")))]
                     92:   ""
                     93:   "*
                     94: {
                     95:   if (GET_CODE (operands[1]) == CONST_INT)
                     96:     {
                     97:       int i = INTVAL (operands[1]);
                     98:       if (i <= 7 && i >= -8)
                     99:        {
                    100:          cc_status.flags |= CC_REVERSED;
                    101:          return \"cmpqd %1,%0\";
                    102:        }
                    103:     }
                    104:   cc_status.flags &= ~CC_REVERSED;
                    105:   if (GET_CODE (operands[0]) == CONST_INT)
                    106:     {
                    107:       int i = INTVAL (operands[0]);
                    108:       if (i <= 7 && i >= -8)
                    109:        return \"cmpqd %0,%1\";
                    110:     }
                    111:   return \"cmpd %0,%1\";
                    112: }")
                    113: 
                    114: (define_insn "cmphi"
                    115:   [(set (cc0)
                    116:        (compare (match_operand:HI 0 "nonimmediate_operand" "g")
                    117:                 (match_operand:HI 1 "general_operand" "g")))]
                    118:   ""
                    119:   "*
                    120: {
                    121:   if (GET_CODE (operands[1]) == CONST_INT)
                    122:     {
                    123:       short i = INTVAL (operands[1]);
                    124:     if (i <= 7 && i >= -8)
                    125:       {
                    126:        cc_status.flags |= CC_REVERSED;
                    127:        if (INTVAL (operands[1]) > 7)
                    128:          operands[1] = gen_rtx(CONST_INT, VOIDmode, i);
                    129:        return \"cmpqw %1,%0\";
                    130:       }
                    131:     }
                    132:   cc_status.flags &= ~CC_REVERSED;
                    133:   if (GET_CODE (operands[0]) == CONST_INT)
                    134:     {
                    135:       short i = INTVAL (operands[0]);
                    136:       if (i <= 7 && i >= -8)
                    137:        {
                    138:          if (INTVAL (operands[0]) > 7)
                    139:            operands[0] = gen_rtx(CONST_INT, VOIDmode, i);
                    140:          return \"cmpqw %0,%1\";
                    141:        }
                    142:     }
                    143:   return \"cmpw %0,%1\";
                    144: }")
                    145: 
                    146: (define_insn "cmpqi"
                    147:   [(set (cc0)
                    148:        (compare (match_operand:QI 0 "nonimmediate_operand" "g")
                    149:                 (match_operand:QI 1 "general_operand" "g")))]
                    150:   ""
                    151:   "*
                    152: {
                    153:   if (GET_CODE (operands[1]) == CONST_INT)
                    154:     {
                    155:       char i = INTVAL (operands[1]);
                    156:       if (i <= 7 && i >= -8)
                    157:        {
                    158:          cc_status.flags |= CC_REVERSED;
                    159:          if (INTVAL (operands[1]) > 7)
                    160:            operands[1] = gen_rtx(CONST_INT, VOIDmode, i);
                    161:          return \"cmpqb %1,%0\";
                    162:        }
                    163:     }
                    164:   cc_status.flags &= ~CC_REVERSED;
                    165:   if (GET_CODE (operands[0]) == CONST_INT)
                    166:     {
                    167:       char i = INTVAL (operands[0]);
                    168:       if (i <= 7 && i >= -8)
                    169:        {
                    170:          if (INTVAL (operands[0]) > 7)
                    171:            operands[0] = gen_rtx(CONST_INT, VOIDmode, i);
                    172:          return \"cmpqb %0,%1\";
                    173:        }
                    174:     }
                    175:   return \"cmpb %0,%1\";
                    176: }")
                    177: 
                    178: (define_insn "cmpdf"
                    179:   [(set (cc0)
                    180:        (compare (match_operand:DF 0 "general_operand" "fmF")
                    181:                 (match_operand:DF 1 "general_operand" "fmF")))]
                    182:   "TARGET_32081"
                    183:   "cmpl %0,%1")
                    184: 
                    185: (define_insn "cmpsf"
                    186:   [(set (cc0)
                    187:        (compare (match_operand:SF 0 "general_operand" "fmF")
                    188:                 (match_operand:SF 1 "general_operand" "fmF")))]
                    189:   "TARGET_32081"
                    190:   "cmpf %0,%1")
                    191: 
                    192: (define_insn "movdf"
                    193:   [(set (match_operand:DF 0 "general_operand" "=&fg<")
                    194:        (match_operand:DF 1 "general_operand" "fFg"))]
                    195:   ""
                    196:   "*
                    197: {
                    198:   if (FP_REG_P (operands[0]))
                    199:     {
                    200:       if (FP_REG_P (operands[1]) || GET_CODE (operands[1]) == CONST_DOUBLE)
                    201:        return \"movl %1,%0\";
                    202:       if (REG_P (operands[1]))
                    203:        {
                    204:          rtx xoperands[2];
                    205:          xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                    206:          output_asm_insn (\"movd %1,tos\", xoperands);
                    207:          output_asm_insn (\"movd %1,tos\", operands);
                    208:          return \"movl tos,%0\";
                    209:        }
                    210:       return \"movl %1,%0\";
                    211:     }
                    212:   else if (FP_REG_P (operands[1]))
                    213:     {
                    214:       if (REG_P (operands[0]))
                    215:        {
                    216:          output_asm_insn (\"movl %1,tos\;movd tos,%0\", operands);
                    217:          operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                    218:          return \"movd tos,%0\";
                    219:        }
                    220:       else
                    221:         return \"movl %1,%0\";
                    222:     }
                    223:   return output_move_double (operands);
                    224: }")
                    225: 
                    226: (define_insn "movsf"
                    227:   [(set (match_operand:SF 0 "general_operand" "=fg<")
                    228:        (match_operand:SF 1 "general_operand" "fFg"))]
                    229:   ""
                    230:   "*
                    231: {
                    232:   if (FP_REG_P (operands[0]))
                    233:     {
                    234:       if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 8)
                    235:        return \"movd %1,tos\;movf tos,%0\";
                    236:       else
                    237:        return \"movf %1,%0\";
                    238:     }
                    239:   else if (FP_REG_P (operands[1]))
                    240:     {
                    241:       if (REG_P (operands[0]))
                    242:        return \"movf %1,tos\;movd tos,%0\";
                    243:       return \"movf %1,%0\";
                    244:     }
                    245: #if 0
                    246: #ifndef GAS_SYNTAX
                    247:   /* GAS understands floating constants in ordinary movd instructions
                    248:      but other assemblers might object.  */
                    249:   else if (GET_CODE (operands[1]) == CONST_DOUBLE)
                    250:     {
                    251:       union {int i[2]; float f; double d;} convrt;
                    252:       convrt.i[0] = CONST_DOUBLE_LOW (operands[1]);
                    253:       convrt.i[1] = CONST_DOUBLE_HIGH (operands[1]);
                    254:       convrt.f = convrt.d;
                    255: 
                    256:       /* Is there a better machine-independent way to to this?  */
                    257:       operands[1] = gen_rtx (CONST_INT, VOIDmode, convrt.i[0]);
                    258:       return \"movd %1,%0\";
                    259:     }
                    260: #endif
                    261: #endif
                    262:   else return \"movd %1,%0\";
                    263: }")
                    264: 
                    265: (define_insn ""
                    266:   [(set (match_operand:TI 0 "memory_operand" "=m")
                    267:        (match_operand:TI 1 "memory_operand" "m"))]
                    268:   ""
                    269:   "movmd %1,%0,4")
                    270: 
                    271: (define_insn "movdi"
                    272:   [(set (match_operand:DI 0 "general_operand" "=&g<,*f,g")
                    273:        (match_operand:DI 1 "general_operand" "gF,g,*f"))]
                    274:   ""
                    275:   "*
                    276: {
                    277:   if (FP_REG_P (operands[0]))
                    278:     {
                    279:       if (FP_REG_P (operands[1]) || GET_CODE (operands[1]) == CONST_DOUBLE)
                    280:        return \"movl %1,%0\";
                    281:       if (REG_P (operands[1]))
                    282:        {
                    283:          rtx xoperands[2];
                    284:          xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                    285:          output_asm_insn (\"movd %1,tos\", xoperands);
                    286:          output_asm_insn (\"movd %1,tos\", operands);
                    287:          return \"movl tos,%0\";
                    288:        }
                    289:       return \"movl %1,%0\";
                    290:     }
                    291:   else if (FP_REG_P (operands[1]))
                    292:     {
                    293:       if (REG_P (operands[0]))
                    294:        {
                    295:          output_asm_insn (\"movl %1,tos\;movd tos,%0\", operands);
                    296:          operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                    297:          return \"movd tos,%0\";
                    298:        }
                    299:       else
                    300:         return \"movl %1,%0\";
                    301:     }
                    302:   return output_move_double (operands);
                    303: }")
                    304: 
                    305: ;; This special case must precede movsi.
                    306: (define_insn ""
                    307:   [(set (reg:SI 17)
                    308:        (match_operand:SI 0 "general_operand" "rmn"))]
                    309:   ""
                    310:   "lprd sp,%0")
                    311: 
                    312: (define_insn "movsi"
                    313:   [(set (match_operand:SI 0 "general_operand" "=g<,*f,g")
                    314:        (match_operand:SI 1 "general_operand" "gxy,g,*f"))]
                    315:   ""
                    316:   "*
                    317: {
                    318:   if (FP_REG_P (operands[0]))
                    319:     {
                    320:       if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 8)
                    321:        return \"movd %1,tos\;movf tos,%0\";
                    322:       else
                    323:        return \"movf %1,%0\";
                    324:     }
                    325:   else if (FP_REG_P (operands[1]))
                    326:     {
                    327:       if (REG_P (operands[0]))
                    328:        return \"movf %1,tos\;movd tos,%0\";
                    329:       return \"movf %1,%0\";
                    330:     }
                    331:   if (GET_CODE (operands[1]) == CONST_INT)
                    332:     {
                    333:       int i = INTVAL (operands[1]);
                    334:       if (i <= 7 && i >= -8)
                    335:        return \"movqd %1,%0\";
                    336:       if (i < 0x4000 && i >= -0x4000 && ! TARGET_32532)
                    337: #if defined (GNX_V3) || defined (UTEK_ASM)
                    338:        return \"addr %c1,%0\";
                    339: #else
                    340:        return \"addr @%c1,%0\";
                    341: #endif
                    342:       return \"movd %1,%0\";
                    343:     }
                    344:   else if (GET_CODE (operands[1]) == REG)
                    345:     {
                    346:       if (REGNO (operands[1]) < 16)
                    347:         return \"movd %1,%0\";
                    348:       else if (REGNO (operands[1]) == FRAME_POINTER_REGNUM)
                    349:        {
                    350:          if (GET_CODE(operands[0]) == REG)
                    351:            return \"sprd fp,%0\";
                    352:          else
                    353:            return \"addr 0(fp),%0\" ;
                    354:        }
                    355:       else if (REGNO (operands[1]) == STACK_POINTER_REGNUM)
                    356:        {
                    357:          if (GET_CODE(operands[0]) == REG)
                    358:            return \"sprd sp,%0\";
                    359:          else
                    360:            return \"addr 0(sp),%0\" ;
                    361:        }
                    362:       else abort ();
                    363:     }
                    364:   else if (GET_CODE (operands[1]) == MEM)
                    365:     return \"movd %1,%0\";
                    366:   /* Check if this effective address can be
                    367:      calculated faster by pulling it apart.  */
                    368:   if (REG_P (operands[0])
                    369:       && GET_CODE (operands[1]) == MULT
                    370:       && GET_CODE (XEXP (operands[1], 1)) == CONST_INT
                    371:       && (INTVAL (XEXP (operands[1], 1)) == 2
                    372:          || INTVAL (XEXP (operands[1], 1)) == 4))
                    373:     {
                    374:       rtx xoperands[3];
                    375:       xoperands[0] = operands[0];
                    376:       xoperands[1] = XEXP (operands[1], 0);
                    377:       xoperands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (XEXP (operands[1], 1)) >> 1);
                    378:       return output_shift_insn (xoperands);
                    379:     }
                    380:   return \"addr %a1,%0\";
                    381: }")
                    382: 
                    383: (define_insn "movhi"
                    384:   [(set (match_operand:HI 0 "general_operand" "=g<,*f,g")
                    385:        (match_operand:HI 1 "general_operand" "g,g,*f"))]
                    386:   ""
                    387:   "*
                    388: {
                    389:   if (GET_CODE (operands[1]) == CONST_INT)
                    390:     {
                    391:       short i = INTVAL (operands[1]);
                    392:       if (i <= 7 && i >= -8)
                    393:        {
                    394:          if (INTVAL (operands[1]) > 7)
                    395:            operands[1] =
                    396:              gen_rtx (CONST_INT, VOIDmode, i);
                    397:          return \"movqw %1,%0\";
                    398:        }
                    399:        return \"movw %1,%0\";
                    400:     }
                    401:   else if (FP_REG_P (operands[0]))
                    402:     {
                    403:       if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 8)
                    404:        return \"movwf %1,tos\;movf tos,%0\";
                    405:       else
                    406:        return \"movwf %1,%0\";
                    407:     }
                    408:   else if (FP_REG_P (operands[1]))
                    409:     {
                    410:       if (REG_P (operands[0]))
                    411:        return \"movf %1,tos\;movd tos,%0\";
                    412:       return \"movf %1,%0\";
                    413:     }
                    414:   else
                    415:      return \"movw %1,%0\";
                    416: }")
                    417: 
                    418: (define_insn "movstricthi"
                    419:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+r"))
                    420:        (match_operand:HI 1 "general_operand" "g"))]
                    421:   ""
                    422:   "*
                    423: {
                    424:   if (GET_CODE (operands[1]) == CONST_INT
                    425:       && INTVAL(operands[1]) <= 7 && INTVAL(operands[1]) >= -8)
                    426:     return \"movqw %1,%0\";
                    427:   return \"movw %1,%0\";
                    428: }")
                    429: 
                    430: (define_insn "movqi"
                    431:   [(set (match_operand:QI 0 "general_operand" "=g<,*f,g")
                    432:        (match_operand:QI 1 "general_operand" "g,g,*f"))]
                    433:   ""
                    434:   "*
                    435: { if (GET_CODE (operands[1]) == CONST_INT)
                    436:     {
                    437:       char char_val = (char)INTVAL (operands[1]);
                    438:       if (char_val <= 7 && char_val >= -8)
                    439:        {
                    440:          if (INTVAL (operands[1]) > 7)
                    441:            operands[1] =
                    442:              gen_rtx (CONST_INT, VOIDmode, char_val);
                    443:          return \"movqb %1,%0\";
                    444:        }
                    445:        return \"movb %1,%0\";
                    446:     }
                    447:   else if (FP_REG_P (operands[0]))
                    448:     {
                    449:       if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 8)
                    450:        return \"movbf %1,tos\;movf tos,%0\";
                    451:       else
                    452:        return \"movbf %1,%0\";
                    453:     }
                    454:   else if (FP_REG_P (operands[1]))
                    455:     {
                    456:       if (REG_P (operands[0]))
                    457:        return \"movf %1,tos\;movd tos,%0\";
                    458:       return \"movf %1,%0\";
                    459:     }
                    460:   else
                    461:      return \"movb %1,%0\";
                    462: }")
                    463: 
                    464: (define_insn "movstrictqi"
                    465:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+r"))
                    466:        (match_operand:QI 1 "general_operand" "g"))]
                    467:   ""
                    468:   "*
                    469: {
                    470:   if (GET_CODE (operands[1]) == CONST_INT
                    471:       && INTVAL(operands[1]) < 8 && INTVAL(operands[1]) > -9)
                    472:     return \"movqb %1,%0\";
                    473:   return \"movb %1,%0\";
                    474: }")
                    475: 
                    476: ;; The definition of this insn does not really explain what it does,
                    477: ;; but it should suffice
                    478: ;; that anything generated as this insn will be recognized as one
                    479: ;; and that it won't successfully combine with anything.
                    480: (define_insn "movstrsi"
                    481:   [(set (match_operand:BLK 0 "general_operand" "=g")
                    482:        (match_operand:BLK 1 "general_operand" "g"))
                    483:    (use (match_operand:SI 2 "general_operand" "rmn"))
                    484:    (clobber (reg:SI 0))
                    485:    (clobber (reg:SI 1))
                    486:    (clobber (reg:SI 2))]
                    487:   ""
                    488:   "*
                    489: {
                    490:   if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
                    491:     abort ();
                    492:   operands[0] = XEXP (operands[0], 0);
                    493:   operands[1] = XEXP (operands[1], 0);
                    494:   if (GET_CODE (operands[0]) == MEM)
                    495:     if (GET_CODE (operands[1]) == MEM)
                    496:       output_asm_insn (\"movd %0,r2\;movd %1,r1\", operands);
                    497:     else
                    498:       output_asm_insn (\"movd %0,r2\;addr %a1,r1\", operands);
                    499:   else if (GET_CODE (operands[1]) == MEM)
                    500:     output_asm_insn (\"addr %a0,r2\;movd %1,r1\", operands);
                    501:   else
                    502:     output_asm_insn (\"addr %a0,r2\;addr %a1,r1\", operands);
                    503: 
                    504: #ifdef UTEK_ASM
                    505:   if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) & 0x3) == 0)
                    506:     {
                    507:       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) >> 2);
                    508:       if ((unsigned) INTVAL (operands[2]) <= 7)
                    509:        return \"movqd %2,r0\;movsd $0\";
                    510:       else 
                    511:        return \"movd %2,r0\;movsd $0\";
                    512:     }
                    513:   else
                    514:     {
                    515:       return \"movd %2,r0\;movsb $0\";
                    516:     }
                    517: #else
                    518:   if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) & 0x3) == 0)
                    519:     {
                    520:       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) >> 2);
                    521:       if ((unsigned) INTVAL (operands[2]) <= 7)
                    522:        return \"movqd %2,r0\;movsd\";
                    523:       else 
                    524:        return \"movd %2,r0\;movsd\";
                    525:     }
                    526:   else
                    527:     {
                    528:       return \"movd %2,r0\;movsb\";
                    529:     }
                    530: #endif
                    531: }")
                    532: 
                    533: ;; Extension and truncation insns.
                    534: ;; Those for integer source operand
                    535: ;; are ordered widest source type first.
                    536: 
                    537: (define_insn "truncsiqi2"
                    538:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    539:        (truncate:QI (match_operand:SI 1 "nonimmediate_operand" "rmn")))]
                    540:   ""
                    541:   "movb %1,%0")
                    542: 
                    543: (define_insn "truncsihi2"
                    544:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    545:        (truncate:HI (match_operand:SI 1 "nonimmediate_operand" "rmn")))]
                    546:   ""
                    547:   "movw %1,%0")
                    548: 
                    549: (define_insn "trunchiqi2"
                    550:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    551:        (truncate:QI (match_operand:HI 1 "nonimmediate_operand" "g")))]
                    552:   ""
                    553:   "movb %1,%0")
                    554: 
                    555: (define_insn "extendhisi2"
                    556:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    557:        (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]
                    558:   ""
                    559:   "movxwd %1,%0")
                    560: 
                    561: (define_insn "extendqihi2"
                    562:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    563:        (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]
                    564:   ""
                    565:   "movxbw %1,%0")
                    566: 
                    567: (define_insn "extendqisi2"
                    568:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    569:        (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]
                    570:   ""
                    571:   "movxbd %1,%0")
                    572: 
                    573: (define_insn "extendsfdf2"
                    574:   [(set (match_operand:DF 0 "general_operand" "=fm<")
                    575:        (float_extend:DF (match_operand:SF 1 "general_operand" "fmF")))]
                    576:   "TARGET_32081"
                    577:   "movfl %1,%0")
                    578: 
                    579: (define_insn "truncdfsf2"
                    580:   [(set (match_operand:SF 0 "general_operand" "=fm<")
                    581:        (float_truncate:SF (match_operand:DF 1 "general_operand" "fmF")))]
                    582:   "TARGET_32081"
                    583:   "movlf %1,%0")
                    584: 
                    585: (define_insn "zero_extendhisi2"
                    586:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    587:        (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]
                    588:   ""
                    589:   "movzwd %1,%0")
                    590: 
                    591: (define_insn "zero_extendqihi2"
                    592:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    593:        (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]
                    594:   ""
                    595:   "movzbw %1,%0")
                    596: 
                    597: (define_insn "zero_extendqisi2"
                    598:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    599:        (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]
                    600:   ""
                    601:   "movzbd %1,%0")
                    602: 
                    603: ;; Fix-to-float conversion insns.
                    604: ;; Note that the ones that start with SImode come first.
                    605: ;; That is so that an operand that is a CONST_INT
                    606: ;; (and therefore lacks a specific machine mode).
                    607: ;; will be recognized as SImode (which is always valid)
                    608: ;; rather than as QImode or HImode.
                    609: 
                    610: ;; Rumor has it that the National part does not correctly convert
                    611: ;; constant ints to floats.  This conversion is therefore disabled.
                    612: ;; A register must be used to perform the conversion.
                    613: 
                    614: (define_insn "floatsisf2"
                    615:   [(set (match_operand:SF 0 "general_operand" "=fm<")
                    616:        (float:SF (match_operand:SI 1 "general_operand" "rm")))]
                    617:   "TARGET_32081"
                    618:   "movdf %1,%0")
                    619: 
                    620: (define_insn "floatsidf2"
                    621:   [(set (match_operand:DF 0 "general_operand" "=fm<")
                    622:        (float:DF (match_operand:SI 1 "general_operand" "rm")))]
                    623:   "TARGET_32081"
                    624:   "movdl %1,%0")
                    625: 
                    626: (define_insn "floathisf2"
                    627:   [(set (match_operand:SF 0 "general_operand" "=fm<")
                    628:        (float:SF (match_operand:HI 1 "general_operand" "rm")))]
                    629:   "TARGET_32081"
                    630:   "movwf %1,%0")
                    631: 
                    632: (define_insn "floathidf2"
                    633:   [(set (match_operand:DF 0 "general_operand" "=fm<")
                    634:        (float:DF (match_operand:HI 1 "general_operand" "rm")))]
                    635:   "TARGET_32081"
                    636:   "movwl %1,%0")
                    637: 
                    638: (define_insn "floatqisf2"
                    639:   [(set (match_operand:SF 0 "general_operand" "=fm<")
                    640:        (float:SF (match_operand:QI 1 "general_operand" "rm")))]
                    641:   "TARGET_32081"
                    642:   "movbf %1,%0")
                    643: 
                    644: ; Some assemblers warn that this insn doesn't work.
                    645: ; Maybe they know something we don't.
                    646: ;(define_insn "floatqidf2"
                    647: ;  [(set (match_operand:DF 0 "general_operand" "=fm<")
                    648: ;      (float:DF (match_operand:QI 1 "general_operand" "rm")))]
                    649: ;  "TARGET_32081"
                    650: ;  "movbl %1,%0")
                    651: 
                    652: ;; Float-to-fix conversion insns.
                    653: ;; The sequent compiler always generates "trunc" insns.
                    654: 
                    655: (define_insn "fixsfqi2"
                    656:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    657:        (fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
                    658:   "TARGET_32081"
                    659:   "truncfb %1,%0")
                    660: 
                    661: (define_insn "fixsfhi2"
                    662:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    663:        (fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
                    664:   "TARGET_32081"
                    665:   "truncfw %1,%0")
                    666: 
                    667: (define_insn "fixsfsi2"
                    668:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    669:        (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
                    670:   "TARGET_32081"
                    671:   "truncfd %1,%0")
                    672: 
                    673: (define_insn "fixdfqi2"
                    674:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    675:        (fix:QI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
                    676:   "TARGET_32081"
                    677:   "trunclb %1,%0")
                    678: 
                    679: (define_insn "fixdfhi2"
                    680:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    681:        (fix:HI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
                    682:   "TARGET_32081"
                    683:   "trunclw %1,%0")
                    684: 
                    685: (define_insn "fixdfsi2"
                    686:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    687:        (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
                    688:   "TARGET_32081"
                    689:   "truncld %1,%0")
                    690: 
                    691: ;; Unsigned
                    692: 
                    693: (define_insn "fixunssfqi2"
                    694:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    695:        (unsigned_fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
                    696:   "TARGET_32081"
                    697:   "truncfb %1,%0")
                    698: 
                    699: (define_insn "fixunssfhi2"
                    700:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    701:        (unsigned_fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
                    702:   "TARGET_32081"
                    703:   "truncfw %1,%0")
                    704: 
                    705: (define_insn "fixunssfsi2"
                    706:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    707:        (unsigned_fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
                    708:   "TARGET_32081"
                    709:   "truncfd %1,%0")
                    710: 
                    711: (define_insn "fixunsdfqi2"
                    712:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    713:        (unsigned_fix:QI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
                    714:   "TARGET_32081"
                    715:   "trunclb %1,%0")
                    716: 
                    717: (define_insn "fixunsdfhi2"
                    718:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    719:        (unsigned_fix:HI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
                    720:   "TARGET_32081"
                    721:   "trunclw %1,%0")
                    722: 
                    723: (define_insn "fixunsdfsi2"
                    724:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    725:        (unsigned_fix:SI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
                    726:   "TARGET_32081"
                    727:   "truncld %1,%0")
                    728: 
                    729: ;;; These are not yet used by GCC
                    730: (define_insn "fix_truncsfqi2"
                    731:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    732:        (fix:QI (match_operand:SF 1 "general_operand" "fm")))]
                    733:   "TARGET_32081"
                    734:   "truncfb %1,%0")
                    735: 
                    736: (define_insn "fix_truncsfhi2"
                    737:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    738:        (fix:HI (match_operand:SF 1 "general_operand" "fm")))]
                    739:   "TARGET_32081"
                    740:   "truncfw %1,%0")
                    741: 
                    742: (define_insn "fix_truncsfsi2"
                    743:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    744:        (fix:SI (match_operand:SF 1 "general_operand" "fm")))]
                    745:   "TARGET_32081"
                    746:   "truncfd %1,%0")
                    747: 
                    748: (define_insn "fix_truncdfqi2"
                    749:   [(set (match_operand:QI 0 "general_operand" "=g<")
                    750:        (fix:QI (match_operand:DF 1 "general_operand" "fm")))]
                    751:   "TARGET_32081"
                    752:   "trunclb %1,%0")
                    753: 
                    754: (define_insn "fix_truncdfhi2"
                    755:   [(set (match_operand:HI 0 "general_operand" "=g<")
                    756:        (fix:HI (match_operand:DF 1 "general_operand" "fm")))]
                    757:   "TARGET_32081"
                    758:   "trunclw %1,%0")
                    759: 
                    760: (define_insn "fix_truncdfsi2"
                    761:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    762:        (fix:SI (match_operand:DF 1 "general_operand" "fm")))]
                    763:   "TARGET_32081"
                    764:   "truncld %1,%0")
                    765: 
                    766: ;;- All kinds of add instructions.
                    767: 
                    768: (define_insn "adddf3"
                    769:   [(set (match_operand:DF 0 "general_operand" "=fm")
                    770:        (plus:DF (match_operand:DF 1 "general_operand" "%0")
                    771:                 (match_operand:DF 2 "general_operand" "fmF")))]
                    772:   "TARGET_32081"
                    773:   "addl %2,%0")
                    774: 
                    775: 
                    776: (define_insn "addsf3"
                    777:   [(set (match_operand:SF 0 "general_operand" "=fm")
                    778:        (plus:SF (match_operand:SF 1 "general_operand" "%0")
                    779:                 (match_operand:SF 2 "general_operand" "fmF")))]
                    780:   "TARGET_32081"
                    781:   "addf %2,%0")
                    782: 
                    783: (define_insn ""
                    784:   [(set (reg:SI 17)
                    785:        (plus:SI (reg:SI 17)
                    786:                 (match_operand:SI 0 "immediate_operand" "i")))]
                    787:   "GET_CODE (operands[0]) == CONST_INT"
                    788:   "*
                    789: {
                    790: #ifndef SEQUENT_ADJUST_STACK
                    791:   if (TARGET_32532)
                    792:     if (INTVAL (operands[0]) == 8)
                    793:       return \"cmpd tos,tos\";
                    794:   if (TARGET_32532 || TARGET_32332)
                    795:     if (INTVAL (operands[0]) == 4)
                    796:       return \"cmpqd %$0,tos\";
                    797: #endif
                    798:   if (! TARGET_32532)
                    799:     {
                    800:       if (INTVAL (operands[0]) < 64 && INTVAL (operands[0]) > -64)
                    801:         return \"adjspb %$%n0\";
                    802:       else if (INTVAL (operands[0]) < 8192 && INTVAL (operands[0]) >= -8192)
                    803:         return \"adjspw %$%n0\";
                    804:     }
                    805:   return \"adjspd %$%n0\";
                    806: }")
                    807: 
                    808: (define_insn ""
                    809:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    810:        (plus:SI (reg:SI 16)
                    811:                 (match_operand:SI 1 "immediate_operand" "i")))]
                    812:   "GET_CODE (operands[1]) == CONST_INT"
                    813:   "addr %c1(fp),%0")
                    814: 
                    815: (define_insn ""
                    816:   [(set (match_operand:SI 0 "general_operand" "=g<")
                    817:        (plus:SI (reg:SI 17)
                    818:                 (match_operand:SI 1 "immediate_operand" "i")))]
                    819:   "GET_CODE (operands[1]) == CONST_INT"
                    820:   "addr %c1(sp),%0")
                    821: 
                    822: (define_insn "addsi3"
                    823:   [(set (match_operand:SI 0 "general_operand" "=g,=g<")
                    824:        (plus:SI (match_operand:SI 1 "general_operand" "%0,%r")
                    825:                 (match_operand:SI 2 "general_operand" "rmn,n")))]
                    826:   ""
                    827:   "*
                    828: {
                    829:   if (which_alternative == 1)
                    830:     {
                    831:       int i = INTVAL (operands[2]);
                    832:       if ( i < 0x40000000 && i >= -0x40000000 )
                    833:          return \"addr %c2(%1),%0\";
                    834:       else
                    835:          return \"movd %1,%0\;addd %2,%0\";
                    836:     }
                    837:   if (GET_CODE (operands[2]) == CONST_INT)
                    838:     {
                    839:       int i = INTVAL (operands[2]);
                    840: 
                    841:       if (i <= 7 && i >= -8)
                    842:        return \"addqd %2,%0\";
                    843:       else if (GET_CODE (operands[0]) == REG
                    844:               && i < 0x4000 && i >= -0x4000 && ! TARGET_32532)
                    845:        return \"addr %c2(%0),%0\";
                    846:     }
                    847:   return \"addd %2,%0\";
                    848: }")
                    849: 
                    850: (define_insn "addhi3"
                    851:   [(set (match_operand:HI 0 "general_operand" "=g")
                    852:        (plus:HI (match_operand:HI 1 "general_operand" "%0")
                    853:                 (match_operand:HI 2 "general_operand" "g")))]
                    854:   ""
                    855:   "*
                    856: { if (GET_CODE (operands[2]) == CONST_INT)
                    857:     {
                    858:       int i = INTVAL (operands[2]);
                    859:       if (i <= 7 && i >= -8)
                    860:        return \"addqw %2,%0\";
                    861:     }
                    862:   return \"addw %2,%0\";
                    863: }")
                    864: 
                    865: (define_insn ""
                    866:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "=r"))
                    867:        (plus:HI (match_operand:HI 1 "general_operand" "0")
                    868:                 (match_operand:HI 2 "general_operand" "g")))]
                    869:   ""
                    870:   "*
                    871: {
                    872:   if (GET_CODE (operands[1]) == CONST_INT
                    873:       && INTVAL (operands[1]) >-9 && INTVAL(operands[1]) < 8)
                    874:     return \"addqw %1,%0\";
                    875:   return \"addw %1,%0\";
                    876: }")
                    877: 
                    878: (define_insn "addqi3"
                    879:   [(set (match_operand:QI 0 "general_operand" "=g")
                    880:        (plus:QI (match_operand:QI 1 "general_operand" "%0")
                    881:                 (match_operand:QI 2 "general_operand" "g")))]
                    882:   ""
                    883:   "*
                    884: { if (GET_CODE (operands[2]) == CONST_INT)
                    885:     {
                    886:       int i = INTVAL (operands[2]);
                    887:       if (i <= 7 && i >= -8)
                    888:        return \"addqb %2,%0\";
                    889:     }
                    890:   return \"addb %2,%0\";
                    891: }")
                    892: 
                    893: (define_insn ""
                    894:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "=r"))
                    895:        (plus:QI (match_operand:QI 1 "general_operand" "0")
                    896:                 (match_operand:QI 2 "general_operand" "g")))]
                    897:   ""
                    898:   "*
                    899: {
                    900:   if (GET_CODE (operands[1]) == CONST_INT
                    901:       && INTVAL (operands[1]) >-9 && INTVAL(operands[1]) < 8)
                    902:     return \"addqb %1,%0\";
                    903:   return \"addb %1,%0\";
                    904: }")
                    905: 
                    906: ;;- All kinds of subtract instructions.
                    907: 
                    908: (define_insn "subdf3"
                    909:   [(set (match_operand:DF 0 "general_operand" "=fm")
                    910:        (minus:DF (match_operand:DF 1 "general_operand" "0")
                    911:                  (match_operand:DF 2 "general_operand" "fmF")))]
                    912:   "TARGET_32081"
                    913:   "subl %2,%0")
                    914: 
                    915: (define_insn "subsf3"
                    916:   [(set (match_operand:SF 0 "general_operand" "=fm")
                    917:        (minus:SF (match_operand:SF 1 "general_operand" "0")
                    918:                  (match_operand:SF 2 "general_operand" "fmF")))]
                    919:   "TARGET_32081"
                    920:   "subf %2,%0")
                    921: 
                    922: (define_insn ""
                    923:   [(set (reg:SI 17)
                    924:        (minus:SI (reg:SI 17)
                    925:                  (match_operand:SI 0 "immediate_operand" "i")))]
                    926:   "GET_CODE (operands[0]) == CONST_INT"
                    927:   "*
                    928: {
                    929:   if (GET_CODE(operands[0]) == CONST_INT && INTVAL(operands[0]) < 64
                    930:       && INTVAL(operands[0]) > -64 && ! TARGET_32532)
                    931:     return \"adjspb %0\";
                    932:   return \"adjspd %0\";
                    933: }")
                    934: 
                    935: (define_insn "subsi3"
                    936:   [(set (match_operand:SI 0 "general_operand" "=g")
                    937:        (minus:SI (match_operand:SI 1 "general_operand" "0")
                    938:                  (match_operand:SI 2 "general_operand" "rmn")))]
                    939:   ""
                    940:   "*
                    941: { if (GET_CODE (operands[2]) == CONST_INT)
                    942:     {
                    943:       int i = INTVAL (operands[2]);
                    944: 
                    945:       if (i <= 8 && i >= -7)
                    946:         return \"addqd %$%n2,%0\";
                    947:     }
                    948:   return \"subd %2,%0\";
                    949: }")
                    950: 
                    951: (define_insn "subhi3"
                    952:   [(set (match_operand:HI 0 "general_operand" "=g")
                    953:        (minus:HI (match_operand:HI 1 "general_operand" "0")
                    954:                  (match_operand:HI 2 "general_operand" "g")))]
                    955:   ""
                    956:   "*
                    957: { if (GET_CODE (operands[2]) == CONST_INT)
                    958:     {
                    959:       int i = INTVAL (operands[2]);
                    960: 
                    961:       if (i <= 8 && i >= -7)
                    962:         return \"addqw %$%n2,%0\";
                    963:     }
                    964:   return \"subw %2,%0\";
                    965: }")
                    966: 
                    967: (define_insn ""
                    968:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "=r"))
                    969:        (minus:HI (match_operand:HI 1 "general_operand" "0")
                    970:                  (match_operand:HI 2 "general_operand" "g")))]
                    971:   ""
                    972:   "*
                    973: {
                    974:   if (GET_CODE (operands[1]) == CONST_INT
                    975:       && INTVAL (operands[1]) >-8 && INTVAL(operands[1]) < 9)
                    976:     return \"addqw %$%n1,%0\";
                    977:   return \"subw %1,%0\";
                    978: }")
                    979: 
                    980: (define_insn "subqi3"
                    981:   [(set (match_operand:QI 0 "general_operand" "=g")
                    982:        (minus:QI (match_operand:QI 1 "general_operand" "0")
                    983:                  (match_operand:QI 2 "general_operand" "g")))]
                    984:   ""
                    985:   "*
                    986: { if (GET_CODE (operands[2]) == CONST_INT)
                    987:     {
                    988:       int i = INTVAL (operands[2]);
                    989: 
                    990:       if (i <= 8 && i >= -7)
                    991:        return \"addqb %$%n2,%0\";
                    992:     }
                    993:   return \"subb %2,%0\";
                    994: }")
                    995: 
                    996: (define_insn ""
                    997:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "=r"))
                    998:        (minus:QI (match_operand:QI 1 "general_operand" "0")
                    999:                  (match_operand:QI 2 "general_operand" "g")))]
                   1000:   ""
                   1001:   "*
                   1002: {
                   1003:   if (GET_CODE (operands[1]) == CONST_INT
                   1004:       && INTVAL (operands[1]) >-8 && INTVAL(operands[1]) < 9)
                   1005:     return \"addqb %$%n1,%0\";
                   1006:   return \"subb %1,%0\";
                   1007: }")
                   1008: 
                   1009: ;;- Multiply instructions.
                   1010: 
                   1011: (define_insn "muldf3"
                   1012:   [(set (match_operand:DF 0 "general_operand" "=fm")
                   1013:        (mult:DF (match_operand:DF 1 "general_operand" "%0")
                   1014:                 (match_operand:DF 2 "general_operand" "fmF")))]
                   1015:   "TARGET_32081"
                   1016:   "mull %2,%0")
                   1017: 
                   1018: (define_insn "mulsf3"
                   1019:   [(set (match_operand:SF 0 "general_operand" "=fm")
                   1020:        (mult:SF (match_operand:SF 1 "general_operand" "%0")
                   1021:                 (match_operand:SF 2 "general_operand" "fmF")))]
                   1022:   "TARGET_32081"
                   1023:   "mulf %2,%0")
                   1024: 
                   1025: (define_insn "mulsi3"
                   1026:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1027:        (mult:SI (match_operand:SI 1 "general_operand" "%0")
                   1028:                 (match_operand:SI 2 "general_operand" "rmn")))]
                   1029:   ""
                   1030:   "muld %2,%0")
                   1031: 
                   1032: (define_insn "mulhi3"
                   1033:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1034:        (mult:HI (match_operand:HI 1 "general_operand" "%0")
                   1035:                 (match_operand:HI 2 "general_operand" "g")))]
                   1036:   ""
                   1037:   "mulw %2,%0")
                   1038: 
                   1039: (define_insn "mulqi3"
                   1040:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1041:        (mult:QI (match_operand:QI 1 "general_operand" "%0")
                   1042:                 (match_operand:QI 2 "general_operand" "g")))]
                   1043:   ""
                   1044:   "mulb %2,%0")
                   1045: 
                   1046: (define_insn "umulsidi3"
                   1047:   [(set (match_operand:DI 0 "general_operand" "=g")
                   1048:        (mult:DI (zero_extend:DI
                   1049:                  (match_operand:SI 1 "nonimmediate_operand" "0"))
                   1050:                 (zero_extend:DI
                   1051:                  (match_operand:SI 2 "nonimmediate_operand" "rmn"))))]
                   1052:   ""
                   1053:   "meid %2,%0")
                   1054: 
                   1055: ;;- Divide instructions.
                   1056: 
                   1057: (define_insn "divdf3"
                   1058:   [(set (match_operand:DF 0 "general_operand" "=fm")
                   1059:        (div:DF (match_operand:DF 1 "general_operand" "0")
                   1060:                (match_operand:DF 2 "general_operand" "fmF")))]
                   1061:   "TARGET_32081"
                   1062:   "divl %2,%0")
                   1063: 
                   1064: (define_insn "divsf3"
                   1065:   [(set (match_operand:SF 0 "general_operand" "=fm")
                   1066:        (div:SF (match_operand:SF 1 "general_operand" "0")
                   1067:                (match_operand:SF 2 "general_operand" "fmF")))]
                   1068:   "TARGET_32081"
                   1069:   "divf %2,%0")
                   1070: 
                   1071: (define_insn "divsi3"
                   1072:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1073:        (div:SI (match_operand:SI 1 "general_operand" "0")
                   1074:                (match_operand:SI 2 "general_operand" "rmn")))]
                   1075:   ""
                   1076:   "quod %2,%0")
                   1077: 
                   1078: (define_insn "divhi3"
                   1079:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1080:        (div:HI (match_operand:HI 1 "general_operand" "0")
                   1081:                (match_operand:HI 2 "general_operand" "g")))]
                   1082:   ""
                   1083:   "quow %2,%0")
                   1084: 
                   1085: (define_insn "divqi3"
                   1086:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1087:        (div:QI (match_operand:QI 1 "general_operand" "0")
                   1088:                (match_operand:QI 2 "general_operand" "g")))]
                   1089:   ""
                   1090:   "quob %2,%0")
                   1091: 
                   1092: (define_insn "udivsi3"
                   1093:   [(set (match_operand:SI 0 "register_operand" "=r")
                   1094:        (udiv:SI (subreg:SI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
                   1095:                 (match_operand:SI 2 "general_operand" "rmn")))]
                   1096:   ""
                   1097:   "*
                   1098: {
                   1099:   operands[1] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
                   1100:   return \"deid %2,%0\;movd %1,%0\";
                   1101: }")
                   1102: 
                   1103: (define_insn "udivhi3"
                   1104:   [(set (match_operand:HI 0 "register_operand" "=r")
                   1105:        (udiv:HI (subreg:HI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
                   1106:                 (match_operand:HI 2 "general_operand" "g")))]
                   1107:   ""
                   1108:   "*
                   1109: {
                   1110:   operands[1] = gen_rtx (REG, HImode, REGNO (operands[0]) + 1);
                   1111:   return \"deiw %2,%0\;movw %1,%0\";
                   1112: }")
                   1113: 
                   1114: (define_insn "udivqi3"
                   1115:   [(set (match_operand:QI 0 "register_operand" "=r")
                   1116:        (udiv:QI (subreg:QI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
                   1117:                 (match_operand:QI 2 "general_operand" "g")))]
                   1118:   ""
                   1119:   "*
                   1120: {
                   1121:   operands[1] = gen_rtx (REG, QImode, REGNO (operands[0]) + 1);
                   1122:   return \"deib %2,%0\;movb %1,%0\";
                   1123: }")
                   1124: 
                   1125: ;; Remainder instructions.
                   1126: 
                   1127: (define_insn "modsi3"
                   1128:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1129:        (mod:SI (match_operand:SI 1 "general_operand" "0")
                   1130:                (match_operand:SI 2 "general_operand" "rmn")))]
                   1131:   ""
                   1132:   "remd %2,%0")
                   1133: 
                   1134: (define_insn "modhi3"
                   1135:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1136:        (mod:HI (match_operand:HI 1 "general_operand" "0")
                   1137:                (match_operand:HI 2 "general_operand" "g")))]
                   1138:   ""
                   1139:   "remw %2,%0")
                   1140: 
                   1141: (define_insn "modqi3"
                   1142:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1143:        (mod:QI (match_operand:QI 1 "general_operand" "0")
                   1144:                (match_operand:QI 2 "general_operand" "g")))]
                   1145:   ""
                   1146:   "remb %2,%0")
                   1147: 
                   1148: (define_insn "umodsi3"
                   1149:   [(set (match_operand:SI 0 "register_operand" "=r")
                   1150:        (umod:SI (subreg:SI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
                   1151:                 (match_operand:SI 2 "general_operand" "rmn")))]
                   1152:   ""
                   1153:   "deid %2,%0")
                   1154: 
                   1155: (define_insn "umodhi3"
                   1156:   [(set (match_operand:HI 0 "register_operand" "=r")
                   1157:        (umod:HI (subreg:HI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
                   1158:                 (match_operand:HI 2 "general_operand" "g")))]
                   1159:   ""
                   1160:   "deiw %2,%0")
                   1161: 
                   1162: (define_insn "umodqi3"
                   1163:   [(set (match_operand:QI 0 "register_operand" "=r")
                   1164:        (umod:QI (subreg:QI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
                   1165:                 (match_operand:QI 2 "general_operand" "g")))]
                   1166:   ""
                   1167:   "deib %2,%0")
                   1168: 
                   1169: ; This isn't be usable in its current form.
                   1170: ;(define_insn "udivmoddisi4"
                   1171: ;  [(set (subreg:SI (match_operand:DI 0 "general_operand" "=r") 1)
                   1172: ;      (udiv:SI (match_operand:DI 1 "general_operand" "0")
                   1173: ;               (match_operand:SI 2 "general_operand" "rmn")))
                   1174: ;   (set (subreg:SI (match_dup 0) 0)
                   1175: ;      (umod:SI (match_dup 1) (match_dup 2)))]
                   1176: ;  ""
                   1177: ;  "deid %2,%0")
                   1178: 
                   1179: ;;- Logical Instructions: AND
                   1180: 
                   1181: (define_insn "andsi3"
                   1182:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1183:        (and:SI (match_operand:SI 1 "general_operand" "%0")
                   1184:                (match_operand:SI 2 "general_operand" "rmn")))]
                   1185:   ""
                   1186:   "*
                   1187: {
                   1188:   if (GET_CODE (operands[2]) == CONST_INT)
                   1189:     {
                   1190:       if ((INTVAL (operands[2]) | 0xff) == 0xffffffff)
                   1191:        {
                   1192:          if (INTVAL (operands[2]) == 0xffffff00)
                   1193:            return \"movqb %$0,%0\";
                   1194:          else
                   1195:            {
                   1196:              operands[2] = gen_rtx (CONST_INT, VOIDmode,
                   1197:                                     INTVAL (operands[2]) & 0xff);
                   1198:              return \"andb %2,%0\";
                   1199:            }
                   1200:        }
                   1201:       if ((INTVAL (operands[2]) | 0xffff) == 0xffffffff)
                   1202:         {
                   1203:          if (INTVAL (operands[2]) == 0xffff0000)
                   1204:            return \"movqw %$0,%0\";
                   1205:          else
                   1206:            {
                   1207:              operands[2] = gen_rtx (CONST_INT, VOIDmode,
                   1208:                                     INTVAL (operands[2]) & 0xffff);
                   1209:              return \"andw %2,%0\";
                   1210:            }
                   1211:        }
                   1212:     }
                   1213:   return \"andd %2,%0\";
                   1214: }")
                   1215: 
                   1216: (define_insn "andhi3"
                   1217:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1218:        (and:HI (match_operand:HI 1 "general_operand" "%0")
                   1219:                (match_operand:HI 2 "general_operand" "g")))]
                   1220:   ""
                   1221:   "*
                   1222: {
                   1223:   if (GET_CODE (operands[2]) == CONST_INT
                   1224:       && (INTVAL (operands[2]) | 0xff) == 0xffffffff)
                   1225:     {
                   1226:       if (INTVAL (operands[2]) == 0xffffff00)
                   1227:        return \"movqb %$0,%0\";
                   1228:       else
                   1229:        {
                   1230:          operands[2] = gen_rtx (CONST_INT, VOIDmode,
                   1231:                                 INTVAL (operands[2]) & 0xff);
                   1232:          return \"andb %2,%0\";
                   1233:        }
                   1234:     }
                   1235:   return \"andw %2,%0\";
                   1236: }")
                   1237: 
                   1238: (define_insn "andqi3"
                   1239:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1240:        (and:QI (match_operand:QI 1 "general_operand" "%0")
                   1241:                (match_operand:QI 2 "general_operand" "g")))]
                   1242:   ""
                   1243:   "andb %2,%0")
                   1244: 
                   1245: (define_insn ""
                   1246:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1247:        (and:SI (not:SI (match_operand:SI 1 "general_operand" "rmn"))
                   1248:                (match_operand:SI 2 "general_operand" "0")))]
                   1249:   ""
                   1250:   "bicd %1,%0")
                   1251: 
                   1252: (define_insn ""
                   1253:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1254:        (and:HI (not:HI (match_operand:HI 1 "general_operand" "g"))
                   1255:                (match_operand:HI 2 "general_operand" "0")))]
                   1256:   ""
                   1257:   "bicw %1,%0")
                   1258: 
                   1259: (define_insn ""
                   1260:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1261:        (and:QI (not:QI (match_operand:QI 1 "general_operand" "g"))
                   1262:                (match_operand:QI 2 "general_operand" "0")))]
                   1263:   ""
                   1264:   "bicb %1,%0")
                   1265: 
                   1266: ;;- Bit set instructions.
                   1267: 
                   1268: (define_insn "iorsi3"
                   1269:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1270:        (ior:SI (match_operand:SI 1 "general_operand" "%0")
                   1271:                (match_operand:SI 2 "general_operand" "rmn")))]
                   1272:   ""
                   1273:   "*
                   1274: {
                   1275:   if (GET_CODE (operands[2]) == CONST_INT) {
                   1276:     if ((INTVAL (operands[2]) & 0xffffff00) == 0)
                   1277:       return \"orb %2,%0\";
                   1278:     if ((INTVAL (operands[2]) & 0xffff0000) == 0)
                   1279:       return \"orw %2,%0\";
                   1280:   }
                   1281:   return \"ord %2,%0\";
                   1282: }")
                   1283: 
                   1284: (define_insn "iorhi3"
                   1285:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1286:        (ior:HI (match_operand:HI 1 "general_operand" "%0")
                   1287:                (match_operand:HI 2 "general_operand" "g")))]
                   1288:   ""
                   1289:   "*
                   1290: {
                   1291:   if (GET_CODE(operands[2]) == CONST_INT &&
                   1292:       (INTVAL(operands[2]) & 0xffffff00) == 0)
                   1293:     return \"orb %2,%0\";
                   1294:   return \"orw %2,%0\";
                   1295: }")
                   1296: 
                   1297: (define_insn "iorqi3"
                   1298:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1299:        (ior:QI (match_operand:QI 1 "general_operand" "%0")
                   1300:                (match_operand:QI 2 "general_operand" "g")))]
                   1301:   ""
                   1302:   "orb %2,%0")
                   1303: 
                   1304: ;;- xor instructions.
                   1305: 
                   1306: (define_insn "xorsi3"
                   1307:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1308:        (xor:SI (match_operand:SI 1 "general_operand" "%0")
                   1309:                (match_operand:SI 2 "general_operand" "rmn")))]
                   1310:   ""
                   1311:   "*
                   1312: {
                   1313:   if (GET_CODE (operands[2]) == CONST_INT) {
                   1314:     if ((INTVAL (operands[2]) & 0xffffff00) == 0)
                   1315:       return \"xorb %2,%0\";
                   1316:     if ((INTVAL (operands[2]) & 0xffff0000) == 0)
                   1317:       return \"xorw %2,%0\";
                   1318:   }
                   1319:   return \"xord %2,%0\";
                   1320: }")
                   1321: 
                   1322: (define_insn "xorhi3"
                   1323:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1324:        (xor:HI (match_operand:HI 1 "general_operand" "%0")
                   1325:                (match_operand:HI 2 "general_operand" "g")))]
                   1326:   ""
                   1327:   "*
                   1328: {
                   1329:   if (GET_CODE(operands[2]) == CONST_INT &&
                   1330:       (INTVAL(operands[2]) & 0xffffff00) == 0)
                   1331:     return \"xorb %2,%0\";
                   1332:   return \"xorw %2,%0\";
                   1333: }")
                   1334: 
                   1335: (define_insn "xorqi3"
                   1336:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1337:        (xor:QI (match_operand:QI 1 "general_operand" "%0")
                   1338:                (match_operand:QI 2 "general_operand" "g")))]
                   1339:   ""
                   1340:   "xorb %2,%0")
                   1341: 
                   1342: (define_insn "negdf2"
                   1343:   [(set (match_operand:DF 0 "general_operand" "=fm<")
                   1344:        (neg:DF (match_operand:DF 1 "general_operand" "fmF")))]
                   1345:   "TARGET_32081"
                   1346:   "negl %1,%0")
                   1347: 
                   1348: (define_insn "negsf2"
                   1349:   [(set (match_operand:SF 0 "general_operand" "=fm<")
                   1350:        (neg:SF (match_operand:SF 1 "general_operand" "fmF")))]
                   1351:   "TARGET_32081"
                   1352:   "negf %1,%0")
                   1353: 
                   1354: (define_insn "negsi2"
                   1355:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   1356:        (neg:SI (match_operand:SI 1 "general_operand" "rmn")))]
                   1357:   ""
                   1358:   "negd %1,%0")
                   1359: 
                   1360: (define_insn "neghi2"
                   1361:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   1362:        (neg:HI (match_operand:HI 1 "general_operand" "g")))]
                   1363:   ""
                   1364:   "negw %1,%0")
                   1365: 
                   1366: (define_insn "negqi2"
                   1367:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   1368:        (neg:QI (match_operand:QI 1 "general_operand" "g")))]
                   1369:   ""
                   1370:   "negb %1,%0")
                   1371: 
                   1372: (define_insn "one_cmplsi2"
                   1373:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   1374:        (not:SI (match_operand:SI 1 "general_operand" "rmn")))]
                   1375:   ""
                   1376:   "comd %1,%0")
                   1377: 
                   1378: (define_insn "one_cmplhi2"
                   1379:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   1380:        (not:HI (match_operand:HI 1 "general_operand" "g")))]
                   1381:   ""
                   1382:   "comw %1,%0")
                   1383: 
                   1384: (define_insn "one_cmplqi2"
                   1385:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   1386:        (not:QI (match_operand:QI 1 "general_operand" "g")))]
                   1387:   ""
                   1388:   "comb %1,%0")
                   1389: 
                   1390: ;; arithmetic left and right shift operations
                   1391: ;; on the 32532 we will always use lshd for arithmetic left shifts,
                   1392: ;; because it is three times faster.  Broken programs which
                   1393: ;; use negative shift counts are probably broken differently
                   1394: ;; than elsewhere.
                   1395: 
                   1396: ;; alternative 0 never matches on the 32532
                   1397: (define_insn "ashlsi3"
                   1398:   [(set (match_operand:SI 0 "general_operand" "=g,g")
                   1399:        (ashift:SI (match_operand:SI 1 "general_operand" "r,0")
                   1400:                   (match_operand:SI 2 "general_operand" "I,rmn")))]
                   1401:   ""
                   1402:   "*
                   1403: { if (TARGET_32532)
                   1404:     return \"lshd %2,%0\";
                   1405:   else
                   1406:     return output_shift_insn (operands);
                   1407: }")
                   1408: 
                   1409: (define_insn "ashlhi3"
                   1410:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1411:        (ashift:HI (match_operand:HI 1 "general_operand" "0")
                   1412:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1413:   ""
                   1414:   "*
                   1415: { if (GET_CODE (operands[2]) == CONST_INT)
                   1416:     {
                   1417:       if (INTVAL (operands[2]) == 1)
                   1418:        return \"addw %0,%0\";
                   1419:       else if (INTVAL (operands[2]) == 2 && !TARGET_32532)
                   1420:        return \"addw %0,%0\;addw %0,%0\";
                   1421:     }
                   1422:   if (TARGET_32532)
                   1423:     return \"lshw %2,%0\";
                   1424:   else
                   1425:     return \"ashw %2,%0\";
                   1426: }")
                   1427: 
                   1428: (define_insn "ashlqi3"
                   1429:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1430:        (ashift:QI (match_operand:QI 1 "general_operand" "0")
                   1431:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1432:   ""
                   1433:   "*
                   1434: { if (GET_CODE (operands[2]) == CONST_INT)
                   1435:     {
                   1436:       if (INTVAL (operands[2]) == 1)
                   1437:        return \"addb %0,%0\";
                   1438:       else if (INTVAL (operands[2]) == 2 && !TARGET_32532)
                   1439:        return \"addb %0,%0\;addb %0,%0\";
                   1440:     }
                   1441:   if (TARGET_32532)
                   1442:     return \"lshb %2,%0\";
                   1443:   else
                   1444:     return \"ashb %2,%0\";
                   1445: }")
                   1446: 
                   1447: ;; Arithmetic right shift on the 32k works by negating the shift count.
                   1448: (define_expand "ashrsi3"
                   1449:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1450:        (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
                   1451:                     (match_operand:SI 2 "general_operand" "g")))]
                   1452:   ""
                   1453:   "
                   1454: {
                   1455:   if (GET_CODE (operands[2]) != CONST_INT)
                   1456:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1457: }")
                   1458: 
                   1459: (define_insn ""
                   1460:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1461:        (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
                   1462:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1463:   ""
                   1464:   "ashd %$%n2,%0")
                   1465: 
                   1466: (define_insn ""
                   1467:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1468:        (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
                   1469:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1470:   ""
                   1471:   "ashd %2,%0")
                   1472: 
                   1473: (define_expand "ashrhi3"
                   1474:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1475:        (ashiftrt:HI (match_operand:HI 1 "general_operand" "g")
                   1476:                     (match_operand:SI 2 "general_operand" "g")))]
                   1477:   ""
                   1478:   "
                   1479: {
                   1480:   if (GET_CODE (operands[2]) != CONST_INT)
                   1481:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1482: }")
                   1483: 
                   1484: (define_insn ""
                   1485:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1486:        (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
                   1487:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1488:   ""
                   1489:   "ashw %$%n2,%0")
                   1490: 
                   1491: (define_insn ""
                   1492:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1493:        (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
                   1494:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1495:   ""
                   1496:   "ashw %2,%0")
                   1497: 
                   1498: (define_expand "ashrqi3"
                   1499:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1500:        (ashiftrt:QI (match_operand:QI 1 "general_operand" "g")
                   1501:                     (match_operand:SI 2 "general_operand" "g")))]
                   1502:   ""
                   1503:   "
                   1504: {
                   1505:   if (GET_CODE (operands[2]) != CONST_INT)
                   1506:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1507: }")
                   1508: 
                   1509: (define_insn ""
                   1510:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1511:        (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
                   1512:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1513:   ""
                   1514:   "ashb %$%n2,%0")
                   1515: 
                   1516: (define_insn ""
                   1517:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1518:        (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
                   1519:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1520:   ""
                   1521:   "ashb %2,%0")
                   1522: 
                   1523: ;; logical shift instructions
                   1524: 
                   1525: (define_insn "lshlsi3"
                   1526:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1527:        (lshift:SI (match_operand:SI 1 "general_operand" "0")
                   1528:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1529:   ""
                   1530:   "lshd %2,%0")
                   1531: 
                   1532: (define_insn "lshlhi3"
                   1533:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1534:        (lshift:HI (match_operand:HI 1 "general_operand" "0")
                   1535:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1536:   ""
                   1537:   "lshw %2,%0")
                   1538: 
                   1539: (define_insn "lshlqi3"
                   1540:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1541:        (lshift:QI (match_operand:QI 1 "general_operand" "0")
                   1542:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1543:   ""
                   1544:   "lshb %2,%0")
                   1545: 
                   1546: ;; Logical right shift on the 32k works by negating the shift count.
                   1547: (define_expand "lshrsi3"
                   1548:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1549:        (lshiftrt:SI (match_operand:SI 1 "general_operand" "g")
                   1550:                     (match_operand:SI 2 "general_operand" "g")))]
                   1551:   ""
                   1552:   "
                   1553: {
                   1554:   if (GET_CODE (operands[2]) != CONST_INT)
                   1555:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1556: }")
                   1557: 
                   1558: (define_insn ""
                   1559:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1560:        (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
                   1561:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1562:   ""
                   1563:   "lshd %$%n2,%0")
                   1564: 
                   1565: (define_insn ""
                   1566:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1567:        (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
                   1568:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1569:   ""
                   1570:   "lshd %2,%0")
                   1571: 
                   1572: (define_expand "lshrhi3"
                   1573:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1574:        (lshiftrt:HI (match_operand:HI 1 "general_operand" "g")
                   1575:                     (match_operand:SI 2 "general_operand" "g")))]
                   1576:   ""
                   1577:   "
                   1578: {
                   1579:   if (GET_CODE (operands[2]) != CONST_INT)
                   1580:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1581: }")
                   1582: 
                   1583: (define_insn ""
                   1584:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1585:        (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
                   1586:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1587:   ""
                   1588:   "lshw %$%n2,%0")
                   1589: 
                   1590: (define_insn ""
                   1591:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1592:        (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
                   1593:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1594:   ""
                   1595:   "lshw %2,%0")
                   1596: 
                   1597: (define_expand "lshrqi3"
                   1598:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1599:        (lshiftrt:QI (match_operand:QI 1 "general_operand" "g")
                   1600:                     (match_operand:SI 2 "general_operand" "g")))]
                   1601:   ""
                   1602:   "
                   1603: {
                   1604:   if (GET_CODE (operands[2]) != CONST_INT)
                   1605:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1606: }")
                   1607: 
                   1608: (define_insn ""
                   1609:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1610:        (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
                   1611:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1612:   ""
                   1613:   "lshb %$%n2,%0")
                   1614: 
                   1615: (define_insn ""
                   1616:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1617:        (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
                   1618:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1619:   ""
                   1620:   "lshb %2,%0")
                   1621: 
                   1622: ;; Rotate instructions
                   1623: 
                   1624: (define_insn "rotlsi3"
                   1625:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1626:        (rotate:SI (match_operand:SI 1 "general_operand" "0")
                   1627:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1628:   ""
                   1629:   "rotd %2,%0")
                   1630: 
                   1631: (define_insn "rotlhi3"
                   1632:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1633:        (rotate:HI (match_operand:HI 1 "general_operand" "0")
                   1634:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1635:   ""
                   1636:   "rotw %2,%0")
                   1637: 
                   1638: (define_insn "rotlqi3"
                   1639:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1640:        (rotate:QI (match_operand:QI 1 "general_operand" "0")
                   1641:                   (match_operand:SI 2 "general_operand" "rmn")))]
                   1642:   ""
                   1643:   "rotb %2,%0")
                   1644: 
                   1645: ;; Right rotate on the 32k works by negating the shift count.
                   1646: (define_expand "rotrsi3"
                   1647:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1648:        (rotatert:SI (match_operand:SI 1 "general_operand" "g")
                   1649:                     (match_operand:SI 2 "general_operand" "g")))]
                   1650:   ""
                   1651:   "
                   1652: {
                   1653:   if (GET_CODE (operands[2]) != CONST_INT)
                   1654:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1655: }")
                   1656: 
                   1657: (define_insn ""
                   1658:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1659:        (rotatert:SI (match_operand:SI 1 "general_operand" "0")
                   1660:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1661:   ""
                   1662:   "rotd %$%n2,%0")
                   1663: 
                   1664: (define_insn ""
                   1665:   [(set (match_operand:SI 0 "general_operand" "=g")
                   1666:        (rotatert:SI (match_operand:SI 1 "general_operand" "0")
                   1667:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1668:   ""
                   1669:   "rotd %2,%0")
                   1670: 
                   1671: (define_expand "rotrhi3"
                   1672:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1673:        (rotatert:HI (match_operand:HI 1 "general_operand" "g")
                   1674:                     (match_operand:SI 2 "general_operand" "g")))]
                   1675:   ""
                   1676:   "
                   1677: {
                   1678:   if (GET_CODE (operands[2]) != CONST_INT)
                   1679:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1680: }")
                   1681: 
                   1682: (define_insn ""
                   1683:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1684:        (rotatert:HI (match_operand:HI 1 "general_operand" "0")
                   1685:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1686:   ""
                   1687:   "rotw %$%n2,%0")
                   1688: 
                   1689: (define_insn ""
                   1690:   [(set (match_operand:HI 0 "general_operand" "=g")
                   1691:        (rotatert:HI (match_operand:HI 1 "general_operand" "0")
                   1692:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1693:   ""
                   1694:   "rotw %2,%0")
                   1695: 
                   1696: (define_expand "rotrqi3"
                   1697:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1698:        (rotatert:QI (match_operand:QI 1 "general_operand" "g")
                   1699:                     (match_operand:SI 2 "general_operand" "g")))]
                   1700:   ""
                   1701:   "
                   1702: {
                   1703:   if (GET_CODE (operands[2]) != CONST_INT)
                   1704:     operands[2] = gen_rtx (NEG, SImode, negate_rtx (SImode, operands[2]));
                   1705: }")
                   1706: 
                   1707: (define_insn ""
                   1708:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1709:        (rotatert:QI (match_operand:QI 1 "general_operand" "0")
                   1710:                     (match_operand:SI 2 "immediate_operand" "i")))]
                   1711:   ""
                   1712:   "rotb %$%n2,%0")
                   1713: 
                   1714: (define_insn ""
                   1715:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1716:        (rotatert:QI (match_operand:QI 1 "general_operand" "0")
                   1717:                     (neg:SI (match_operand:SI 2 "general_operand" "r"))))]
                   1718:   ""
                   1719:   "rotb %2,%0")
                   1720: 
                   1721: ;;- load or push effective address 
                   1722: ;; These come after the move, add, and multiply patterns
                   1723: ;; because we don't want pushl $1 turned into pushad 1.
                   1724: 
                   1725: (define_insn ""
                   1726:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   1727:        (match_operand:QI 1 "address_operand" "p"))]
                   1728:   ""
                   1729:   "*
                   1730: {
                   1731:   if (REG_P (operands[0])
                   1732:       && GET_CODE (operands[1]) == MULT
                   1733:       && GET_CODE (XEXP (operands[1], 1)) == CONST_INT
                   1734:       && (INTVAL (XEXP (operands[1], 1)) == 2
                   1735:          || INTVAL (XEXP (operands[1], 1)) == 4))
                   1736:     {
                   1737:       rtx xoperands[3];
                   1738:       xoperands[0] = operands[0];
                   1739:       xoperands[1] = XEXP (operands[1], 0);
                   1740:       xoperands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (XEXP (operands[1], 1)) >> 1);
                   1741:       return output_shift_insn (xoperands);
                   1742:     }
                   1743:   return \"addr %a1,%0\";
                   1744: }")
                   1745: 
                   1746: ;;; Index insns.  These are about the same speed as multiply-add counterparts.
                   1747: ;;; but slower then using power-of-2 shifts if we can use them
                   1748: ;
                   1749: ;(define_insn ""
                   1750: ;  [(set (match_operand:SI 0 "register_operand" "=r")
                   1751: ;      (plus:SI (match_operand:SI 1 "general_operand" "rmn")
                   1752: ;               (mult:SI (match_operand:SI 2 "register_operand" "0")
                   1753: ;                        (plus:SI (match_operand:SI 3 "general_operand" "rmn") (const_int 1)))))]
                   1754: ;  "GET_CODE (operands[3]) != CONST_INT || INTVAL (operands[3]) > 8"
                   1755: ;  "indexd %0,%3,%1")
                   1756: ;
                   1757: ;(define_insn ""
                   1758: ;  [(set (match_operand:SI 0 "register_operand" "=r")
                   1759: ;      (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "0")
                   1760: ;                        (plus:SI (match_operand:SI 2 "general_operand" "rmn") (const_int 1)))
                   1761: ;               (match_operand:SI 3 "general_operand" "rmn")))]
                   1762: ;  "GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) > 8"
                   1763: ;  "indexd %0,%2,%3")
                   1764: 
                   1765: ;; Set, Clear, and Invert bit
                   1766: 
                   1767: (define_insn ""
                   1768:   [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+g")
                   1769:                         (const_int 1)
                   1770:                         (match_operand:SI 1 "general_operand" "rmn"))
                   1771:        (const_int 1))]
                   1772:   ""
                   1773:   "sbitd %1,%0")
                   1774: 
                   1775: (define_insn ""
                   1776:   [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+g")
                   1777:                         (const_int 1)
                   1778:                         (match_operand:SI 1 "general_operand" "rmn"))
                   1779:        (const_int 0))]
                   1780:   ""
                   1781:   "cbitd %1,%0")
                   1782: 
                   1783: (define_insn ""
                   1784:   [(set (match_operand:SI 0 "general_operand" "+g")
                   1785:        (xor:SI (ashift:SI (const_int 1)
                   1786:                           (match_operand:SI 1 "general_operand" "rmn"))
                   1787:                (match_dup 0)))]
                   1788:   ""
                   1789:   "ibitd %1,%0")
                   1790: 
                   1791: (define_insn ""
                   1792:   [(set (match_operand:QI 0 "general_operand" "=g")
                   1793:        (xor:QI (subreg:QI
                   1794:                 (ashift:SI (const_int 1)
                   1795:                            (match_operand:QI 1 "general_operand" "rmn")) 0)
                   1796:                (match_dup 0)))]
                   1797:   ""
                   1798:   "ibitb %1,%0")
                   1799: 
                   1800: ;; Recognize jbs and jbc instructions.
                   1801: 
                   1802: (define_insn ""
                   1803:   [(set (cc0)
                   1804:        (zero_extract (match_operand:SI 0 "general_operand" "rm")
                   1805:                      (const_int 1)
                   1806:                      (match_operand:SI 1 "general_operand" "g")))]
                   1807:   ""
                   1808:   "*
                   1809: { cc_status.flags = CC_Z_IN_F;
                   1810:   return \"tbitd %1,%0\";
                   1811: }")
                   1812: 
                   1813: ;; extract(base, width, offset)
                   1814: ;; Signed bitfield extraction is not supported in hardware on the
                   1815: ;; NS 32032.  It is therefore better to let GCC figure out a
                   1816: ;; good strategy for generating the proper instruction sequence
                   1817: ;; and represent it as rtl.
                   1818: 
                   1819: ;; Optimize the case of extracting a byte or word from a register.
                   1820: ;; Otherwise we must load a register with the offset of the
                   1821: ;; chunk we want, and perform an extract insn (each of which
                   1822: ;; is very expensive).  Since we use the stack to do our bit-twiddling
                   1823: ;; we cannot use it for a destination.  Perhaps things are fast
                   1824: ;; enough on the 32532 that such hacks are not needed.
                   1825: 
                   1826: (define_insn ""
                   1827:   [(set (match_operand:SI 0 "general_operand" "=ro")
                   1828:        (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
                   1829:                         (match_operand:SI 2 "const_int_operand" "i")
                   1830:                         (match_operand:SI 3 "const_int_operand" "i")))]
                   1831:   "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
                   1832:    && (INTVAL (operands[3]) == 8 || INTVAL (operands[3]) == 16 || INTVAL (operands[3]) == 24)"
                   1833:   "*
                   1834: {
                   1835:   output_asm_insn (\"movd %1,tos\", operands);
                   1836:   if (INTVAL (operands[2]) == 16)
                   1837:     {
                   1838:       if (INTVAL (operands[3]) == 8)
                   1839:        output_asm_insn (\"movzwd 1(sp),%0\", operands);
                   1840:       else
                   1841:        output_asm_insn (\"movzwd 2(sp),%0\", operands);
                   1842:     }
                   1843:   else
                   1844:     {
                   1845:       if (INTVAL (operands[3]) == 8)
                   1846:        output_asm_insn (\"movzbd 1(sp),%0\", operands);
                   1847:       else if (INTVAL (operands[3]) == 16)
                   1848:        output_asm_insn (\"movzbd 2(sp),%0\", operands);
                   1849:       else
                   1850:        output_asm_insn (\"movzbd 3(sp),%0\", operands);
                   1851:     }
                   1852:   if (TARGET_32532 || TARGET_32332)
                   1853:     return \"cmpqd %$0,tos\";
                   1854:   else
                   1855:     return \"adjspb %$-4\";
                   1856: }")
                   1857: 
                   1858: (define_insn "extzv"
                   1859:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   1860:        (zero_extract:SI (match_operand:QI 1 "general_operand" "g")
                   1861:                         (match_operand:SI 2 "const_int_operand" "i")
                   1862:                         (match_operand:SI 3 "general_operand" "rK")))]
                   1863:   ""
                   1864:   "*
                   1865: { if (GET_CODE (operands[3]) == CONST_INT)
                   1866:     return \"extsd %1,%0,%3,%2\";
                   1867:   else return \"extd %3,%1,%0,%2\";
                   1868: }")
                   1869: 
                   1870: (define_insn ""
                   1871:   [(set (zero_extract:SI (match_operand:SI 0 "memory_operand" "+o")
                   1872:                         (match_operand:SI 1 "const_int_operand" "i")
                   1873:                         (match_operand:SI 2 "general_operand" "rn"))
                   1874:        (match_operand:SI 3 "general_operand" "rm"))]
                   1875:   ""
                   1876:   "*
                   1877: { if (GET_CODE (operands[2]) == CONST_INT)
                   1878:     {
                   1879:       if (INTVAL (operands[2]) >= 8)
                   1880:        {
                   1881:          operands[0] = adj_offsettable_operand (operands[0],
                   1882:                                                INTVAL (operands[2]) / 8);
                   1883:           operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) % 8);
                   1884:        }
                   1885:       if (INTVAL (operands[1]) <= 8)
                   1886:         return \"inssb %3,%0,%2,%1\";
                   1887:       else if (INTVAL (operands[1]) <= 16)
                   1888:        return \"inssw %3,%0,%2,%1\";
                   1889:       else
                   1890:        return \"inssd %3,%0,%2,%1\";
                   1891:     }
                   1892:   return \"insd %2,%3,%0,%1\";
                   1893: }")
                   1894: 
                   1895: (define_insn ""
                   1896:   [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
                   1897:                         (match_operand:SI 1 "const_int_operand" "i")
                   1898:                         (match_operand:SI 2 "general_operand" "rK"))
                   1899:        (match_operand:SI 3 "general_operand" "rm"))]
                   1900:   ""
                   1901:   "*
                   1902: { if (GET_CODE (operands[2]) == CONST_INT)
                   1903:     if (INTVAL (operands[1]) <= 8)
                   1904:       return \"inssb %3,%0,%2,%1\";
                   1905:     else if (INTVAL (operands[1]) <= 16)
                   1906:       return \"inssw %3,%0,%2,%1\";
                   1907:     else
                   1908:       return \"inssd %3,%0,%2,%1\";
                   1909:   return \"insd %2,%3,%0,%1\";
                   1910: }")
                   1911: 
                   1912: (define_insn "insv"
                   1913:   [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "+g")
                   1914:                         (match_operand:SI 1 "const_int_operand" "i")
                   1915:                         (match_operand:SI 2 "general_operand" "rK"))
                   1916:        (match_operand:SI 3 "general_operand" "rm"))]
                   1917:   ""
                   1918:   "*
                   1919: { if (GET_CODE (operands[2]) == CONST_INT)
                   1920:     if (INTVAL (operands[1]) <= 8)
                   1921:       return \"inssb %3,%0,%2,%1\";
                   1922:     else if (INTVAL (operands[1]) <= 16)
                   1923:       return \"inssw %3,%0,%2,%1\";
                   1924:     else
                   1925:       return \"inssd %3,%0,%2,%1\";
                   1926:   return \"insd %2,%3,%0,%1\";
                   1927: }")
                   1928: 
                   1929: 
                   1930: (define_insn "jump"
                   1931:   [(set (pc)
                   1932:        (label_ref (match_operand 0 "" "")))]
                   1933:   ""
                   1934:   "br %l0")
                   1935: 
                   1936: (define_insn "beq"
                   1937:   [(set (pc)
                   1938:        (if_then_else (eq (cc0)
                   1939:                          (const_int 0))
                   1940:                      (label_ref (match_operand 0 "" ""))
                   1941:                      (pc)))]
                   1942:   ""
                   1943:   "*
                   1944: { if (cc_prev_status.flags & CC_Z_IN_F)
                   1945:     return \"bfc %l0\";
                   1946:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   1947:     return \"bfs %l0\";
                   1948:   else return \"beq %l0\";
                   1949: }")
                   1950: 
                   1951: (define_insn "bne"
                   1952:   [(set (pc)
                   1953:        (if_then_else (ne (cc0)
                   1954:                          (const_int 0))
                   1955:                      (label_ref (match_operand 0 "" ""))
                   1956:                      (pc)))]
                   1957:   ""
                   1958:   "*
                   1959: { if (cc_prev_status.flags & CC_Z_IN_F)
                   1960:     return \"bfs %l0\";
                   1961:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   1962:     return \"bfc %l0\";
                   1963:   else return \"bne %l0\";
                   1964: }")
                   1965: 
                   1966: (define_insn "bgt"
                   1967:   [(set (pc)
                   1968:        (if_then_else (gt (cc0)
                   1969:                          (const_int 0))
                   1970:                      (label_ref (match_operand 0 "" ""))
                   1971:                      (pc)))]
                   1972:   ""
                   1973:   "bgt %l0")
                   1974: 
                   1975: (define_insn "bgtu"
                   1976:   [(set (pc)
                   1977:        (if_then_else (gtu (cc0)
                   1978:                           (const_int 0))
                   1979:                      (label_ref (match_operand 0 "" ""))
                   1980:                      (pc)))]
                   1981:   ""
                   1982:   "bhi %l0")
                   1983: 
                   1984: (define_insn "blt"
                   1985:   [(set (pc)
                   1986:        (if_then_else (lt (cc0)
                   1987:                          (const_int 0))
                   1988:                      (label_ref (match_operand 0 "" ""))
                   1989:                      (pc)))]
                   1990:   ""
                   1991:   "blt %l0")
                   1992: 
                   1993: (define_insn "bltu"
                   1994:   [(set (pc)
                   1995:        (if_then_else (ltu (cc0)
                   1996:                           (const_int 0))
                   1997:                      (label_ref (match_operand 0 "" ""))
                   1998:                      (pc)))]
                   1999:   ""
                   2000:   "blo %l0")
                   2001: 
                   2002: (define_insn "bge"
                   2003:   [(set (pc)
                   2004:        (if_then_else (ge (cc0)
                   2005:                          (const_int 0))
                   2006:                      (label_ref (match_operand 0 "" ""))
                   2007:                      (pc)))]
                   2008:   ""
                   2009:   "bge %l0")
                   2010: 
                   2011: (define_insn "bgeu"
                   2012:   [(set (pc)
                   2013:        (if_then_else (geu (cc0)
                   2014:                           (const_int 0))
                   2015:                      (label_ref (match_operand 0 "" ""))
                   2016:                      (pc)))]
                   2017:   ""
                   2018:   "bhs %l0")
                   2019: 
                   2020: (define_insn "ble"
                   2021:   [(set (pc)
                   2022:        (if_then_else (le (cc0)
                   2023:                          (const_int 0))
                   2024:                      (label_ref (match_operand 0 "" ""))
                   2025:                      (pc)))]
                   2026:   ""
                   2027:   "ble %l0")
                   2028: 
                   2029: (define_insn "bleu"
                   2030:   [(set (pc)
                   2031:        (if_then_else (leu (cc0)
                   2032:                           (const_int 0))
                   2033:                      (label_ref (match_operand 0 "" ""))
                   2034:                      (pc)))]
                   2035:   ""
                   2036:   "bls %l0")
                   2037: 
                   2038: (define_insn ""
                   2039:   [(set (pc)
                   2040:        (if_then_else (eq (cc0)
                   2041:                          (const_int 0))
                   2042:                      (pc)
                   2043:                      (label_ref (match_operand 0 "" ""))))]
                   2044:   ""
                   2045:   "*
                   2046: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2047:     return \"bfs %l0\";
                   2048:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2049:     return \"bfc %l0\";
                   2050:   else return \"bne %l0\";
                   2051: }")
                   2052: 
                   2053: (define_insn ""
                   2054:   [(set (pc)
                   2055:        (if_then_else (ne (cc0)
                   2056:                          (const_int 0))
                   2057:                      (pc)
                   2058:                      (label_ref (match_operand 0 "" ""))))]
                   2059:   ""
                   2060:   "*
                   2061: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2062:     return \"bfc %l0\";
                   2063:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2064:     return \"bfs %l0\";
                   2065:   else return \"beq %l0\";
                   2066: }")
                   2067: 
                   2068: (define_insn ""
                   2069:   [(set (pc)
                   2070:        (if_then_else (gt (cc0)
                   2071:                          (const_int 0))
                   2072:                      (pc)
                   2073:                      (label_ref (match_operand 0 "" ""))))]
                   2074:   ""
                   2075:   "ble %l0")
                   2076: 
                   2077: (define_insn ""
                   2078:   [(set (pc)
                   2079:        (if_then_else (gtu (cc0)
                   2080:                           (const_int 0))
                   2081:                      (pc)
                   2082:                      (label_ref (match_operand 0 "" ""))))]
                   2083:   ""
                   2084:   "bls %l0")
                   2085: 
                   2086: (define_insn ""
                   2087:   [(set (pc)
                   2088:        (if_then_else (lt (cc0)
                   2089:                          (const_int 0))
                   2090:                      (pc)
                   2091:                      (label_ref (match_operand 0 "" ""))))]
                   2092:   ""
                   2093:   "bge %l0")
                   2094: 
                   2095: (define_insn ""
                   2096:   [(set (pc)
                   2097:        (if_then_else (ltu (cc0)
                   2098:                           (const_int 0))
                   2099:                      (pc)
                   2100:                      (label_ref (match_operand 0 "" ""))))]
                   2101:   ""
                   2102:   "bhs %l0")
                   2103: 
                   2104: (define_insn ""
                   2105:   [(set (pc)
                   2106:        (if_then_else (ge (cc0)
                   2107:                          (const_int 0))
                   2108:                      (pc)
                   2109:                      (label_ref (match_operand 0 "" ""))))]
                   2110:   ""
                   2111:   "blt %l0")
                   2112: 
                   2113: (define_insn ""
                   2114:   [(set (pc)
                   2115:        (if_then_else (geu (cc0)
                   2116:                           (const_int 0))
                   2117:                      (pc)
                   2118:                      (label_ref (match_operand 0 "" ""))))]
                   2119:   ""
                   2120:   "blo %l0")
                   2121: 
                   2122: (define_insn ""
                   2123:   [(set (pc)
                   2124:        (if_then_else (le (cc0)
                   2125:                          (const_int 0))
                   2126:                      (pc)
                   2127:                      (label_ref (match_operand 0 "" ""))))]
                   2128:   ""
                   2129:   "bgt %l0")
                   2130: 
                   2131: (define_insn ""
                   2132:   [(set (pc)
                   2133:        (if_then_else (leu (cc0)
                   2134:                           (const_int 0))
                   2135:                      (pc)
                   2136:                      (label_ref (match_operand 0 "" ""))))]
                   2137:   ""
                   2138:   "bhi %l0")
                   2139: 
                   2140: ;; Subtract-and-jump and Add-and-jump insns.
                   2141: ;; These can actually be used for adding numbers in the range -8 to 7
                   2142: 
                   2143: (define_insn ""
                   2144:   [(set (pc)
                   2145:        (if_then_else
                   2146:         (ne (match_operand:SI 0 "general_operand" "+g")
                   2147:             (match_operand:SI 1 "const_int_operand" "i"))
                   2148:         (label_ref (match_operand 2 "" ""))
                   2149:         (pc)))
                   2150:   (set (match_dup 0)
                   2151:        (minus:SI (match_dup 0)
                   2152:                 (match_dup 1)))]
                   2153:   "INTVAL (operands[1]) > -8 && INTVAL (operands[1]) <= 8"
                   2154:   "acbd %$%n1,%0,%l2")
                   2155: 
                   2156: (define_insn ""
                   2157:   [(set (pc)
                   2158:        (if_then_else
                   2159:         (ne (match_operand:SI 0 "general_operand" "+g")
                   2160:             (match_operand:SI 1 "const_int_operand" "i"))
                   2161:         (label_ref (match_operand 2 "" ""))
                   2162:         (pc)))
                   2163:   (set (match_dup 0)
                   2164:        (plus:SI (match_dup 0)
                   2165:                (match_operand:SI 3 "const_int_operand" "i")))]
                   2166:   "INTVAL (operands[1]) == - INTVAL (operands[3])
                   2167:    && INTVAL (operands[3]) >= -8 && INTVAL (operands[3]) < 8"
                   2168:   "acbd %3,%0,%l2")
                   2169: 
                   2170: (define_insn "call"
                   2171:   [(call (match_operand:QI 0 "memory_operand" "m")
                   2172:         (match_operand:QI 1 "general_operand" "g"))]
                   2173:   ""
                   2174:   "*
                   2175: {
                   2176: #ifndef JSR_ALWAYS
                   2177:   if (GET_CODE (operands[0]) == MEM)
                   2178:     {
                   2179:       rtx temp = XEXP (operands[0], 0);
                   2180:       if (CONSTANT_ADDRESS_P (temp))
                   2181:        {
                   2182:          operands[0] = temp;
                   2183:          return \"bsr %0\";
                   2184: #if 0
                   2185: #ifdef GNX_V3
                   2186:          return \"bsr %0\";
                   2187: #else
                   2188:          return \"bsr %?%a0\";
                   2189: #endif
                   2190: #endif
                   2191:        }
                   2192:       if (GET_CODE (XEXP (operands[0], 0)) == REG)
                   2193:        return \"jsr %0\";
                   2194: #if 0
                   2195:         return \"jsr %a0\";
                   2196: #endif
                   2197:     }
                   2198: #endif /* not JSR_ALWAYS */
                   2199:   return \"jsr %0\";
                   2200: }")
                   2201: 
                   2202: (define_insn "call_value"
                   2203:   [(set (match_operand 0 "" "=rf")
                   2204:        (call (match_operand:QI 1 "memory_operand" "m")
                   2205:              (match_operand:QI 2 "general_operand" "g")))]
                   2206:   ""
                   2207:   "*
                   2208: {
                   2209: #ifndef JSR_ALWAYS
                   2210:   if (GET_CODE (operands[1]) == MEM)
                   2211:     {
                   2212:       rtx temp = XEXP (operands[1], 0);
                   2213:       if (CONSTANT_ADDRESS_P (temp))
                   2214:        {
                   2215:          operands[1] = temp;
                   2216:          return \"bsr %1\";
                   2217: #if 0
                   2218: #ifdef GNX_V3
                   2219:          return \"bsr %1\";
                   2220: #else
                   2221:          return \"bsr %?%a1\";
                   2222: #endif
                   2223: #endif
                   2224:        }
                   2225:       if (GET_CODE (XEXP (operands[1], 0)) == REG)
                   2226:        return \"jsr %1\";
                   2227: #if 0
                   2228:         return \"jsr %a1\";
                   2229: #endif
                   2230:     }
                   2231: #endif /* not JSR_ALWAYS */
                   2232:   return \"jsr %1\";
                   2233: }")
                   2234: 
                   2235: (define_insn "return"
                   2236:   [(return)]
                   2237:   "0"
                   2238:   "ret 0")
                   2239: 
                   2240: (define_insn "abssf2"
                   2241:   [(set (match_operand:SF 0 "general_operand" "=fm<")
                   2242:        (abs:SF (match_operand:SF 1 "general_operand" "fmF")))]
                   2243:   "TARGET_32081"
                   2244:   "absf %1,%0")
                   2245: 
                   2246: (define_insn "absdf2"
                   2247:   [(set (match_operand:DF 0 "general_operand" "=fm<")
                   2248:        (abs:DF (match_operand:DF 1 "general_operand" "fmF")))]
                   2249:   "TARGET_32081"
                   2250:   "absl %1,%0")
                   2251: 
                   2252: (define_insn "abssi2"
                   2253:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2254:        (abs:SI (match_operand:SI 1 "general_operand" "rmn")))]
                   2255:   ""
                   2256:   "absd %1,%0")
                   2257: 
                   2258: (define_insn "abshi2"
                   2259:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2260:        (abs:HI (match_operand:HI 1 "general_operand" "g")))]
                   2261:   ""
                   2262:   "absw %1,%0")
                   2263: 
                   2264: (define_insn "absqi2"
                   2265:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2266:        (abs:QI (match_operand:QI 1 "general_operand" "g")))]
                   2267:   ""
                   2268:   "absb %1,%0")
                   2269: 
                   2270: (define_insn "nop"
                   2271:   [(const_int 0)]
                   2272:   ""
                   2273:   "nop")
                   2274: 
                   2275: (define_insn "indirect_jump"
                   2276:   [(set (pc) (match_operand:SI 0 "register_operand" "r"))]
                   2277:   ""
                   2278:   "jump %0")
                   2279: 
                   2280: ;;(define_insn "tablejump"
                   2281: ;;  [(set (pc)
                   2282: ;;     (plus:SI (match_operand:SI 0 "general_operand" "g")
                   2283: ;;              (pc)))]
                   2284: ;;  ""
                   2285: ;;  "cased %0")
                   2286: 
                   2287: (define_insn "tablejump"
                   2288:   [(set (pc)
                   2289:        (plus:SI (pc) (match_operand:HI 0 "general_operand" "g")))
                   2290:    (use (label_ref (match_operand 1 "" "")))]
                   2291:   ""
                   2292:   "*
                   2293: {
                   2294:   ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"LI\",
                   2295:                             CODE_LABEL_NUMBER (operands[1]));
                   2296:   return \"casew %0\";
                   2297: }")
                   2298: 
                   2299: ;;(define_insn ""
                   2300: ;;  [(set (pc)
                   2301: ;;     (plus:SI (match_operand:QI 0 "general_operand" "g")
                   2302: ;;              (pc)))]
                   2303: ;;  ""
                   2304: ;;  "caseb %0")
                   2305: 
                   2306: ;; Scondi instructions
                   2307: (define_insn "seq"
                   2308:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2309:        (eq:SI (cc0) (const_int 0)))]
                   2310:   ""
                   2311:   "*
                   2312: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2313:     return \"sfcd %0\";
                   2314:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2315:     return \"sfsd %0\";
                   2316:   else return \"seqd %0\";
                   2317: }")
                   2318: 
                   2319: (define_insn ""
                   2320:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2321:        (eq:HI (cc0) (const_int 0)))]
                   2322:   ""
                   2323:   "*
                   2324: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2325:     return \"sfcw %0\";
                   2326:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2327:     return \"sfsw %0\";
                   2328:   else return \"seqw %0\";
                   2329: }")
                   2330: 
                   2331: (define_insn ""
                   2332:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2333:        (eq:QI (cc0) (const_int 0)))]
                   2334:   ""
                   2335:   "*
                   2336: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2337:     return \"sfcb %0\";
                   2338:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2339:     return \"sfsb %0\";
                   2340:   else return \"seqb %0\";
                   2341: }")
                   2342: 
                   2343: (define_insn "sne"
                   2344:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2345:        (ne:SI (cc0) (const_int 0)))]
                   2346:   ""
                   2347:   "*
                   2348: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2349:     return \"sfsd %0\";
                   2350:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2351:     return \"sfcd %0\";
                   2352:   else return \"sned %0\";
                   2353: }")
                   2354: 
                   2355: (define_insn ""
                   2356:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2357:        (ne:HI (cc0) (const_int 0)))]
                   2358:   ""
                   2359:   "*
                   2360: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2361:     return \"sfsw %0\";
                   2362:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2363:     return \"sfcw %0\";
                   2364:   else return \"snew %0\";
                   2365: }")
                   2366: 
                   2367: (define_insn ""
                   2368:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2369:        (ne:QI (cc0) (const_int 0)))]
                   2370:   ""
                   2371:   "*
                   2372: { if (cc_prev_status.flags & CC_Z_IN_F)
                   2373:     return \"sfsb %0\";
                   2374:   else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
                   2375:     return \"sfcb %0\";
                   2376:   else return \"sneb %0\";
                   2377: }")
                   2378: 
                   2379: (define_insn "sgt"
                   2380:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2381:        (gt:SI (cc0) (const_int 0)))]
                   2382:   ""
                   2383:   "sgtd %0")
                   2384: 
                   2385: (define_insn ""
                   2386:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2387:        (gt:HI (cc0) (const_int 0)))]
                   2388:   ""
                   2389:   "sgtw %0")
                   2390: 
                   2391: (define_insn ""
                   2392:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2393:        (gt:QI (cc0) (const_int 0)))]
                   2394:   ""
                   2395:   "sgtb %0")
                   2396: 
                   2397: (define_insn "sgtu"
                   2398:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2399:        (gtu:SI (cc0) (const_int 0)))]
                   2400:   ""
                   2401:   "shid %0")
                   2402: 
                   2403: (define_insn ""
                   2404:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2405:        (gtu:HI (cc0) (const_int 0)))]
                   2406:   ""
                   2407:   "shiw %0")
                   2408: 
                   2409: (define_insn ""
                   2410:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2411:        (gtu:QI (cc0) (const_int 0)))]
                   2412:   ""
                   2413:   "shib %0")
                   2414: 
                   2415: (define_insn "slt"
                   2416:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2417:        (lt:SI (cc0) (const_int 0)))]
                   2418:   ""
                   2419:   "sltd %0")
                   2420: 
                   2421: (define_insn ""
                   2422:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2423:        (lt:HI (cc0) (const_int 0)))]
                   2424:   ""
                   2425:   "sltw %0")
                   2426: 
                   2427: (define_insn ""
                   2428:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2429:        (lt:QI (cc0) (const_int 0)))]
                   2430:   ""
                   2431:   "sltb %0")
                   2432: 
                   2433: (define_insn "sltu"
                   2434:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2435:        (ltu:SI (cc0) (const_int 0)))]
                   2436:   ""
                   2437:   "slod %0")
                   2438: 
                   2439: (define_insn ""
                   2440:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2441:        (ltu:HI (cc0) (const_int 0)))]
                   2442:   ""
                   2443:   "slow %0")
                   2444: 
                   2445: (define_insn ""
                   2446:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2447:        (ltu:QI (cc0) (const_int 0)))]
                   2448:   ""
                   2449:   "slob %0")
                   2450: 
                   2451: (define_insn "sge"
                   2452:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2453:        (ge:SI (cc0) (const_int 0)))]
                   2454:   ""
                   2455:   "sged %0")
                   2456: 
                   2457: (define_insn ""
                   2458:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2459:        (ge:HI (cc0) (const_int 0)))]
                   2460:   ""
                   2461:   "sgew %0")
                   2462: 
                   2463: (define_insn ""
                   2464:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2465:        (ge:QI (cc0) (const_int 0)))]
                   2466:   ""
                   2467:   "sgeb %0")
                   2468: 
                   2469: (define_insn "sgeu"
                   2470:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2471:        (geu:SI (cc0) (const_int 0)))]
                   2472:   ""
                   2473:   "shsd %0")  
                   2474: 
                   2475: (define_insn ""
                   2476:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2477:        (geu:HI (cc0) (const_int 0)))]
                   2478:   ""
                   2479:   "shsw %0")  
                   2480: 
                   2481: (define_insn ""
                   2482:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2483:        (geu:QI (cc0) (const_int 0)))]
                   2484:   ""
                   2485:   "shsb %0")  
                   2486: 
                   2487: (define_insn "sle"
                   2488:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2489:        (le:SI (cc0) (const_int 0)))]
                   2490:   ""
                   2491:   "sled %0")
                   2492: 
                   2493: (define_insn ""
                   2494:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2495:        (le:HI (cc0) (const_int 0)))]
                   2496:   ""
                   2497:   "slew %0")
                   2498: 
                   2499: (define_insn ""
                   2500:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2501:        (le:QI (cc0) (const_int 0)))]
                   2502:   ""
                   2503:   "sleb %0")
                   2504: 
                   2505: (define_insn "sleu"
                   2506:   [(set (match_operand:SI 0 "general_operand" "=g<")
                   2507:        (leu:SI (cc0) (const_int 0)))]
                   2508:   ""
                   2509:   "slsd %0")
                   2510: 
                   2511: (define_insn ""
                   2512:   [(set (match_operand:HI 0 "general_operand" "=g<")
                   2513:        (leu:HI (cc0) (const_int 0)))]
                   2514:   ""
                   2515:   "slsw %0")
                   2516: 
                   2517: (define_insn ""
                   2518:   [(set (match_operand:QI 0 "general_operand" "=g<")
                   2519:        (leu:QI (cc0) (const_int 0)))]
                   2520:   ""
                   2521:   "slsb %0")
                   2522: 
                   2523: ;;- Local variables:
                   2524: ;;- mode:emacs-lisp
                   2525: ;;- comment-start: ";;- "
                   2526: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
                   2527: ;;- eval: (modify-syntax-entry ?[ "(]")
                   2528: ;;- eval: (modify-syntax-entry ?] ")[")
                   2529: ;;- eval: (modify-syntax-entry ?{ "(}")
                   2530: ;;- eval: (modify-syntax-entry ?} "){")
                   2531: ;;- End:

unix.superglobalmegacorp.com

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