Annotation of gcc/ns32k.md, revision 1.1.1.8

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

unix.superglobalmegacorp.com

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