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

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

unix.superglobalmegacorp.com

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