Annotation of gcc/ns32k.md, revision 1.1.1.11

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

unix.superglobalmegacorp.com

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