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

unix.superglobalmegacorp.com

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