Annotation of gcc/config/elxsi/elxsi.md, revision 1.1.1.3

1.1.1.2   root        1: ;;- Machine description for GNU compiler, Elxsi Version
                      2: ;;  Copyright (C) 1987, 1988, 1992, 1994 Free Software Foundation, Inc.
                      3: ;;  Contributed by Mike Stump <[email protected]> in 1988, and is the first
1.1       root        4: ;;  64 bit port of GNU CC.
                      5: ;;  Based upon the VAX port.
                      6: 
                      7: ;; This file is part of GNU CC.
                      8: 
                      9: ;; GNU CC is free software; you can redistribute it and/or modify
                     10: ;; it under the terms of the GNU General Public License as published by
                     11: ;; the Free Software Foundation; either version 1, or (at your option)
                     12: ;; any later version.
                     13: 
                     14: ;; GNU CC is distributed in the hope that it will be useful,
                     15: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     16: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     17: ;; GNU General Public License for more details.
                     18: 
                     19: ;; You should have received a copy of the GNU General Public License
                     20: ;; along with GNU CC; see the file COPYING.  If not, write to
1.1.1.3 ! root       21: ;; the Free Software Foundation, 59 Temple Place - Suite 330,
        !            22: ;; Boston, MA 02111-1307, USA.
1.1       root       23: 
                     24: 
                     25: ;;- Instruction patterns.  When multiple patterns apply,
                     26: ;;- the first one in the file is chosen.
                     27: ;;-
                     28: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
                     29: ;;-
                     30: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
                     31: ;;- updates for most instructions.
                     32: 
                     33: 
                     34: (define_insn ""
                     35:   [(set (reg:SI 15)
                     36:         (plus:SI (reg:SI 15)
                     37:                  (match_operand:SI 0 "general_operand" "g")))]
                     38:   ""
                     39:   "add.64\\t.sp,%0")
                     40: 
                     41: (define_insn ""
                     42:   [(set (reg:SI 15)
                     43:         (plus:SI (match_operand:SI 0 "general_operand" "g")
                     44:                  (reg:SI 15)))]
                     45:   ""
                     46:   "add.64\\t.sp,%0")
                     47: 
                     48: (define_insn ""
                     49:   [(set (match_operand:SI 0 "register_operand" "r")
                     50:         (plus:SI (reg:SI 15)
                     51:                  (match_operand:SI 1 "general_operand" "g")))]
                     52:   ""
                     53:   "ld.32\\t%0,.sp\;add.64\\t%0,%1")
                     54: 
                     55: (define_insn ""
                     56:   [(set (match_operand:SI 0 "register_operand" "r")
                     57:         (plus:SI (match_operand:SI 1 "general_operand" "g")
                     58:                  (reg:SI 15)))]
                     59:   ""
                     60:   "ld.32\\t%0,.sp\;add.64\\t%0,%1")
                     61: 
                     62: (define_insn ""
                     63:   [(set (reg:SI 15)
                     64:         (minus:SI (reg:SI 15)
                     65:                   (match_operand:SI 0 "general_operand" "g")))]
                     66:   ""
                     67:   "sub.64\\t.sp,%0")
                     68: 
                     69: (define_insn ""
                     70:   [(set (reg:SI 15)
                     71:         (match_operand:SI 0 "general_operand" "rm"))]
                     72:   ""
                     73:   "ld.32\\t.sp,%0")
                     74: 
                     75: (define_insn ""
                     76:   [(set (match_operand:SI 0 "general_operand" "m,r")
                     77:         (reg:SI 15))]
                     78:   ""
                     79:   "*
                     80:   if (which_alternative == 0)
                     81:     return \"st.32\\t.sp,%0\";
                     82:   return \"ld.32\\t%0,.sp\";
                     83: ")
                     84: 
                     85: ; tstdi is first test insn so that it is the one to match
                     86: ; a constant argument.
                     87: 
                     88: (define_insn "tstdi"
                     89:   [(set (cc0)
                     90:        (match_operand:DI 0 "register_operand" "r"))]
                     91:   ""
                     92:   "*
                     93:     extern rtx cmp_op0, cmp_op1;
                     94:     cmp_op0=operands[0]; cmp_op1=0;
                     95:     return \";\\ttstdi\\t%0\";
                     96: ")
                     97: 
                     98: (define_insn "tstdf"
                     99:   [(set (cc0)
                    100:        (match_operand:DF 0 "register_operand" "r"))]
                    101:   ""
                    102:   "*
                    103:     extern rtx cmp_op0, cmp_op1;
                    104:     cmp_op0=operands[0]; cmp_op1=0;
                    105:     return \";\\ttstdf\\t%0\";
                    106: ")
                    107: 
                    108: (define_insn "tstsf"
                    109:   [(set (cc0)
                    110:        (match_operand:SF 0 "register_operand" "r"))]
                    111:   ""
                    112:   "*
                    113:     extern rtx cmp_op0, cmp_op1;
                    114:     cmp_op0=operands[0]; cmp_op1=0;
                    115:     return \";\\ttstsf\\t%0\";
                    116: ")
                    117: 
                    118: (define_insn "cmpdi"
                    119:   [(set (cc0)
                    120:        (compare (match_operand:DI 0 "register_operand" "r")
                    121:                 (match_operand:DI 1 "general_operand" "rm")))]
                    122:   ""
                    123:   "*
                    124:     extern rtx cmp_op0, cmp_op1;
                    125:     cmp_op0=operands[0]; cmp_op1=operands[1];
                    126:     return \";\\tcmpdi\\t%0,%1\";
                    127: ")
                    128: 
                    129: (define_insn "cmpdf"
                    130:   [(set (cc0)
                    131:        (compare (match_operand:DF 0 "register_operand" "r")
                    132:                 (match_operand:DF 1 "general_operand" "rm")))]
                    133:   ""
                    134:   "*
                    135:     extern rtx cmp_op0, cmp_op1;
                    136:     cmp_op0=operands[0]; cmp_op1=operands[1];
                    137:     return \";\\tcmpdf\\t%0,%1\";
                    138: ")
                    139: 
                    140: (define_insn "cmpsf"
                    141:   [(set (cc0)
                    142:        (compare (match_operand:SF 0 "register_operand" "r")
                    143:                 (match_operand:SF 1 "general_operand" "rm")))]
                    144:   ""
                    145:   "*
                    146:     extern rtx cmp_op0, cmp_op1;
                    147:     cmp_op0=operands[0]; cmp_op1=operands[1];
                    148:     return \";\\tcmpsf\\t%0,%1\";
                    149: ")
                    150: 
                    151: (define_insn ""
                    152:   [(set (match_operand:DI 0 "register_operand" "=r")
                    153:         (eq (match_operand:DI 1 "register_operand" "r")
                    154:                 (match_operand:DI 2 "general_operand" "g")))]
                    155:   ""
                    156:   "cmp.64\\t%0,%1,%2:eq")
                    157: 
                    158: (define_insn ""
                    159:   [(set (match_operand:DI 0 "register_operand" "=r")
                    160:         (ne (match_operand:DI 1 "register_operand" "r")
                    161:                 (match_operand:DI 2 "general_operand" "g")))]
                    162:   ""
                    163:   "cmp.64\\t%0,%1,%2:ne")
                    164: 
                    165: (define_insn ""
                    166:   [(set (match_operand:DI 0 "register_operand" "=r")
                    167:         (le (match_operand:DI 1 "register_operand" "r")
                    168:                 (match_operand:DI 2 "general_operand" "g")))]
                    169:   ""
                    170:   "cmp.64\\t%0,%1,%2:le")
                    171: 
                    172: (define_insn ""
                    173:   [(set (match_operand:DI 0 "register_operand" "=r")
                    174:         (leu (match_operand:DI 1 "register_operand" "r")
                    175:                 (match_operand:DI 2 "general_operand" "g")))]
                    176:   ""
                    177:   "cmpu.64\\t%0,%1,%2:le")
                    178: 
                    179: (define_insn ""
                    180:   [(set (match_operand:DI 0 "register_operand" "=r")
                    181:         (lt (match_operand:DI 1 "register_operand" "r")
                    182:                 (match_operand:DI 2 "general_operand" "g")))]
                    183:   ""
                    184:   "cmp.64\\t%0,%1,%2:lt")
                    185: 
                    186: (define_insn ""
                    187:   [(set (match_operand:DI 0 "register_operand" "=r")
                    188:         (ltu (match_operand:DI 1 "register_operand" "r")
                    189:                 (match_operand:DI 2 "general_operand" "g")))]
                    190:   ""
                    191:   "cmpu.64\\t%0,%1,%2:lt")
                    192: 
                    193: (define_insn ""
                    194:   [(set (match_operand:DI 0 "register_operand" "=r")
                    195:         (ge (match_operand:DI 1 "register_operand" "r")
                    196:                 (match_operand:DI 2 "general_operand" "g")))]
                    197:   ""
                    198:   "cmp.64\\t%0,%1,%2:ge")
                    199: 
                    200: (define_insn ""
                    201:   [(set (match_operand:DI 0 "register_operand" "=r")
                    202:         (geu (match_operand:DI 1 "register_operand" "r")
                    203:                 (match_operand:DI 2 "general_operand" "g")))]
                    204:   ""
                    205:   "cmpu.64\\t%0,%1,%2:ge")
                    206: 
                    207: (define_insn ""
                    208:   [(set (match_operand:DI 0 "register_operand" "=r")
                    209:         (gt (match_operand:DI 1 "register_operand" "r")
                    210:                 (match_operand:DI 2 "general_operand" "g")))]
                    211:   ""
                    212:   "cmp.64\\t%0,%1,%2:gt")
                    213: 
                    214: (define_insn ""
                    215:   [(set (match_operand:DI 0 "register_operand" "=r")
                    216:         (gtu (match_operand:DI 1 "register_operand" "r")
                    217:                 (match_operand:DI 2 "general_operand" "g")))]
                    218:   ""
                    219:   "cmpu.64\\t%0,%1,%2:gt")
                    220: 
                    221: (define_insn "seq"
                    222:   [(set (match_operand:DI 0 "register_operand" "=r")
                    223:        (eq (cc0) (const_int 0)))]
                    224:   ""
                    225:   "* return cmp_set(\"\", \"eq\", operands[0]); ")
                    226: 
                    227: (define_insn "sne"
                    228:   [(set (match_operand:DI 0 "register_operand" "=r")
                    229:        (ne (cc0) (const_int 0)))]
                    230:   ""
                    231:   "* return cmp_set(\"\", \"ne\", operands[0]); ")
                    232: 
                    233: (define_insn "sle"
                    234:   [(set (match_operand:DI 0 "register_operand" "=r")
                    235:        (le (cc0) (const_int 0)))]
                    236:   ""
                    237:   "* return cmp_set(\"\", \"le\", operands[0]); ")
                    238: 
                    239: (define_insn "sleu"
                    240:   [(set (match_operand:DI 0 "register_operand" "=r")
                    241:        (leu (cc0) (const_int 0)))]
                    242:   ""
                    243:   "* return cmp_set(\"u\", \"le\", operands[0]); ")
                    244: 
                    245: (define_insn "slt"
                    246:   [(set (match_operand:DI 0 "register_operand" "=r")
                    247:        (lt (cc0) (const_int 0)))]
                    248:   ""
                    249:   "* return cmp_set(\"\", \"lt\", operands[0]); ")
                    250: 
                    251: (define_insn "sltu"
                    252:   [(set (match_operand:DI 0 "register_operand" "=r")
                    253:        (ltu (cc0) (const_int 0)))]
                    254:   ""
                    255:   "* return cmp_set(\"u\", \"lt\", operands[0]); ")
                    256: 
                    257: (define_insn "sge"
                    258:   [(set (match_operand:DI 0 "register_operand" "=r")
                    259:        (ge (cc0) (const_int 0)))]
                    260:   ""
                    261:   "* return cmp_set(\"\", \"ge\", operands[0]); ")
                    262: 
                    263: (define_insn "sgeu"
                    264:   [(set (match_operand:DI 0 "register_operand" "=r")
                    265:        (geu (cc0) (const_int 0)))]
                    266:   ""
                    267:   "* return cmp_set(\"u\", \"ge\", operands[0]); ")
                    268: 
                    269: (define_insn "sgt"
                    270:   [(set (match_operand:DI 0 "register_operand" "=r")
                    271:        (gt (cc0) (const_int 0)))]
                    272:   ""
                    273:   "* return cmp_set(\"\", \"gt\", operands[0]); ")
                    274: 
                    275: (define_insn "sgtu"
                    276:   [(set (match_operand:DI 0 "register_operand" "=r")
                    277:        (gtu (cc0) (const_int 0)))]
                    278:   ""
                    279:   "* return cmp_set(\"u\", \"gt\", operands[0]); ")
                    280: 
                    281: (define_insn ""
                    282:   [(set (match_operand:SI 0 "register_operand" "=r")
                    283:        (eq (match_operand:SI 1 "register_operand" "r")
                    284:            (match_operand:SI 2 "general_operand" "m")))]
                    285:   ""
                    286:   "cmp.32\\t%0,%1,%2:eq")
                    287: 
                    288: (define_insn ""
                    289:   [(set (match_operand:SI 0 "register_operand" "=r")
                    290:        (ne (match_operand:SI 1 "register_operand" "r")
                    291:            (match_operand:SI 2 "general_operand" "m")))]
                    292:   ""
                    293:   "cmp.32\\t%0,%1,%2:ne")
                    294: 
                    295: (define_insn ""
                    296:   [(set (match_operand:SI 0 "register_operand" "=r")
                    297:        (le (match_operand:SI 1 "register_operand" "r")
                    298:            (match_operand:SI 2 "general_operand" "m")))]
                    299:   ""
                    300:   "cmp.32\\t%0,%1,%2:le")
                    301: 
                    302: (define_insn ""
                    303:   [(set (match_operand:SI 0 "register_operand" "=r")
                    304:        (leu (match_operand:SI 1 "register_operand" "r")
                    305:            (match_operand:SI 2 "general_operand" "m")))]
                    306:   ""
                    307:   "cmpu.32\\t%0,%1,%2:le")
                    308: 
                    309: (define_insn ""
                    310:   [(set (match_operand:SI 0 "register_operand" "=r")
                    311:        (lt (match_operand:SI 1 "register_operand" "r")
                    312:            (match_operand:SI 2 "general_operand" "m")))]
                    313:   ""
                    314:   "cmp.32\\t%0,%1,%2:lt")
                    315: 
                    316: (define_insn ""
                    317:   [(set (match_operand:SI 0 "register_operand" "=r")
                    318:        (ltu (match_operand:SI 1 "register_operand" "r")
                    319:            (match_operand:SI 2 "general_operand" "m")))]
                    320:   ""
                    321:   "cmpu.32\\t%0,%1,%2:lt")
                    322: 
                    323: (define_insn ""
                    324:   [(set (match_operand:SI 0 "register_operand" "=r")
                    325:        (ge (match_operand:SI 1 "register_operand" "r")
                    326:            (match_operand:SI 2 "general_operand" "m")))]
                    327:   ""
                    328:   "cmp.32\\t%0,%1,%2:ge")
                    329: 
                    330: (define_insn ""
                    331:   [(set (match_operand:SI 0 "register_operand" "=r")
                    332:        (geu (match_operand:SI 1 "register_operand" "r")
                    333:            (match_operand:SI 2 "general_operand" "m")))]
                    334:   ""
                    335:   "cmpu.32\\t%0,%1,%2:ge")
                    336: 
                    337: (define_insn ""
                    338:   [(set (match_operand:SI 0 "register_operand" "=r")
                    339:        (gt (match_operand:SI 1 "register_operand" "r")
                    340:            (match_operand:SI 2 "general_operand" "m")))]
                    341:   ""
                    342:   "cmp.32\\t%0,%1,%2:gt")
                    343: 
                    344: (define_insn ""
                    345:   [(set (match_operand:SI 0 "register_operand" "=r")
                    346:        (gtu (match_operand:SI 1 "register_operand" "r")
                    347:            (match_operand:SI 2 "general_operand" "m")))]
                    348:   ""
                    349:   "cmpu.32\\t%0,%1,%2:gt")
                    350: 
                    351: (define_insn ""
                    352:   [(set (match_operand:HI 0 "register_operand" "=r")
                    353:        (eq (match_operand:HI 1 "register_operand" "r")
                    354:            (match_operand:HI 2 "general_operand" "m")))]
                    355:   ""
                    356:   "cmp.16\\t%0,%1,%2:eq")
                    357: 
                    358: (define_insn ""
                    359:   [(set (match_operand:HI 0 "register_operand" "=r")
                    360:        (ne (match_operand:HI 1 "register_operand" "r")
                    361:            (match_operand:HI 2 "general_operand" "m")))]
                    362:   ""
                    363:   "cmp.16\\t%0,%1,%2:ne")
                    364: 
                    365: (define_insn ""
                    366:   [(set (match_operand:HI 0 "register_operand" "=r")
                    367:        (le (match_operand:HI 1 "register_operand" "r")
                    368:            (match_operand:HI 2 "general_operand" "m")))]
                    369:   ""
                    370:   "cmp.16\\t%0,%1,%2:le")
                    371: 
                    372: (define_insn ""
                    373:   [(set (match_operand:HI 0 "register_operand" "=r")
                    374:        (leu (match_operand:HI 1 "register_operand" "r")
                    375:            (match_operand:HI 2 "general_operand" "m")))]
                    376:   ""
                    377:   "cmpu.16\\t%0,%1,%2:le")
                    378: 
                    379: (define_insn ""
                    380:   [(set (match_operand:HI 0 "register_operand" "=r")
                    381:        (lt (match_operand:HI 1 "register_operand" "r")
                    382:            (match_operand:HI 2 "general_operand" "m")))]
                    383:   ""
                    384:   "cmp.16\\t%0,%1,%2:lt")
                    385: 
                    386: (define_insn ""
                    387:   [(set (match_operand:HI 0 "register_operand" "=r")
                    388:        (ltu (match_operand:HI 1 "register_operand" "r")
                    389:            (match_operand:HI 2 "general_operand" "m")))]
                    390:   ""
                    391:   "cmpu.16\\t%0,%1,%2:lt")
                    392: 
                    393: (define_insn ""
                    394:   [(set (match_operand:HI 0 "register_operand" "=r")
                    395:        (ge (match_operand:HI 1 "register_operand" "r")
                    396:            (match_operand:HI 2 "general_operand" "m")))]
                    397:   ""
                    398:   "cmp.16\\t%0,%1,%2:ge")
                    399: 
                    400: (define_insn ""
                    401:   [(set (match_operand:HI 0 "register_operand" "=r")
                    402:        (geu (match_operand:HI 1 "register_operand" "r")
                    403:            (match_operand:HI 2 "general_operand" "m")))]
                    404:   ""
                    405:   "cmpu.16\\t%0,%1,%2:ge")
                    406: 
                    407: (define_insn ""
                    408:   [(set (match_operand:HI 0 "register_operand" "=r")
                    409:        (gt (match_operand:HI 1 "register_operand" "r")
                    410:            (match_operand:HI 2 "general_operand" "m")))]
                    411:   ""
                    412:   "cmp.16\\t%0,%1,%2:gt")
                    413: 
                    414: (define_insn ""
                    415:   [(set (match_operand:HI 0 "register_operand" "=r")
                    416:        (gtu (match_operand:HI 1 "register_operand" "r")
                    417:            (match_operand:HI 2 "general_operand" "m")))]
                    418:   ""
                    419:   "cmpu.16\\t%0,%1,%2:gt")
                    420: 
                    421: (define_insn ""
                    422:   [(set (match_operand:QI 0 "register_operand" "=r")
                    423:        (eq (match_operand:QI 1 "register_operand" "r")
                    424:            (match_operand:QI 2 "general_operand" "m")))]
                    425:   ""
                    426:   "cmp.8\\t%0,%1,%2:eq")
                    427: 
                    428: (define_insn ""
                    429:   [(set (match_operand:QI 0 "register_operand" "=r")
                    430:        (ne (match_operand:QI 1 "register_operand" "r")
                    431:            (match_operand:QI 2 "general_operand" "m")))]
                    432:   ""
                    433:   "cmp.8\\t%0,%1,%2:ne")
                    434: 
                    435: (define_insn ""
                    436:   [(set (match_operand:QI 0 "register_operand" "=r")
                    437:        (le (match_operand:QI 1 "register_operand" "r")
                    438:            (match_operand:QI 2 "general_operand" "m")))]
                    439:   ""
                    440:   "cmp.8\\t%0,%1,%2:le")
                    441: 
                    442: (define_insn ""
                    443:   [(set (match_operand:QI 0 "register_operand" "=r")
                    444:        (leu (match_operand:QI 1 "register_operand" "r")
                    445:            (match_operand:QI 2 "general_operand" "m")))]
                    446:   ""
                    447:   "cmpu.8\\t%0,%1,%2:le")
                    448: 
                    449: (define_insn ""
                    450:   [(set (match_operand:QI 0 "register_operand" "=r")
                    451:        (lt (match_operand:QI 1 "register_operand" "r")
                    452:            (match_operand:QI 2 "general_operand" "m")))]
                    453:   ""
                    454:   "cmp.8\\t%0,%1,%2:lt")
                    455: 
                    456: (define_insn ""
                    457:   [(set (match_operand:QI 0 "register_operand" "=r")
                    458:        (ltu (match_operand:QI 1 "register_operand" "r")
                    459:            (match_operand:QI 2 "general_operand" "m")))]
                    460:   ""
                    461:   "cmpu.8\\t%0,%1,%2:lt")
                    462: 
                    463: (define_insn ""
                    464:   [(set (match_operand:QI 0 "register_operand" "=r")
                    465:        (ge (match_operand:QI 1 "register_operand" "r")
                    466:            (match_operand:QI 2 "general_operand" "m")))]
                    467:   ""
                    468:   "cmp.8\\t%0,%1,%2:ge")
                    469: 
                    470: (define_insn ""
                    471:   [(set (match_operand:QI 0 "register_operand" "=r")
                    472:        (geu (match_operand:QI 1 "register_operand" "r")
                    473:            (match_operand:QI 2 "general_operand" "m")))]
                    474:   ""
                    475:   "cmpu.8\\t%0,%1,%2:ge")
                    476: 
                    477: (define_insn ""
                    478:   [(set (match_operand:QI 0 "register_operand" "=r")
                    479:        (gt (match_operand:QI 1 "register_operand" "r")
                    480:            (match_operand:QI 2 "general_operand" "m")))]
                    481:   ""
                    482:   "cmp.8\\t%0,%1,%2:gt")
                    483: 
                    484: (define_insn ""
                    485:   [(set (match_operand:QI 0 "register_operand" "=r")
                    486:        (gtu (match_operand:QI 1 "register_operand" "r")
                    487:            (match_operand:QI 2 "general_operand" "m")))]
                    488:   ""
                    489:   "cmpu.8\\t%0,%1,%2:gt")
                    490: 
                    491: 
                    492: 
                    493: (define_insn "movdf"  [(set (match_operand:DF 0 "general_operand" "=r,m")
                    494:        (match_operand:DF 1 "general_operand" "rm,r"))]
                    495:   ""
                    496:   "*
                    497: {
                    498:   if (which_alternative == 0)
                    499:     return \"ld.64\\t%0,%1\";
                    500:   return \"st.64\\t%1,%0\";
                    501: }")
                    502: 
                    503: (define_insn "movsf"
                    504:   [(set (match_operand:SF 0 "general_operand" "=r,m")
                    505:        (match_operand:SF 1 "general_operand" "rm,r"))]
                    506:   ""
                    507:   "*
                    508: {
                    509:   if (which_alternative == 0)
                    510:     return \"ld.32\\t%0,%1\";
                    511:   return \"st.32\\t%1,%0\";
                    512: }")
                    513: 
                    514: (define_insn "movdi"
                    515:   [(set (match_operand:DI 0 "general_operand" "=r,m,rm")
                    516:        (match_operand:DI 1 "general_operand" "g,r,I"))]
                    517:   ""
                    518:   "*
                    519:   if (which_alternative == 0)
                    520:     return \"ld.64\\t%0,%1\";
                    521:   else if (which_alternative == 1)
                    522:     return \"st.64\\t%1,%0\";
                    523:   else
                    524:     if (GET_CODE(operands[1])==CONST_INT) {
                    525:       if (INTVAL(operands[1]) >= 0)
                    526:         return \"sti.64\\t%c1,%0\";
                    527:       else
                    528:         return \"stin.64\\t%n1,%0\";
                    529:     }
                    530: ")
                    531: 
                    532: (define_insn "movsi"
                    533:   [(set (match_operand:SI 0 "general_operand" "=r,m,r")
                    534:        (match_operand:SI 1 "general_operand" "rm,rI,i"))]
                    535:   ""
                    536:   "*
                    537:   if (which_alternative == 0)
                    538:     return \"ld.32\\t%0,%1\";
                    539:   else if (which_alternative == 1) {
                    540:     if (GET_CODE(operands[1])==CONST_INT) {
                    541:       if (INTVAL(operands[1]) >= 0)
                    542:         return \"sti.32\\t%c1,%0\";
                    543:       else
                    544:         return \"stin.32\\t%n1,%0\";
                    545:     }
                    546:     return \"st.32\\t%1,%0\";
                    547:   } else
                    548:     return \"ld.64\\t%0,%1 ; I only want 32\";
                    549: ")
                    550: 
                    551: (define_insn "movhi"
                    552:   [(set (match_operand:HI 0 "general_operand" "=r,m,r")
                    553:        (match_operand:HI 1 "general_operand" "m,rI,ri"))]
                    554:   ""
                    555:   "*
                    556: {
                    557:   if (which_alternative == 0)
                    558:     return \"ld.16\\t%0,%1\";
                    559:   if (which_alternative == 2)
                    560:     return \"ld.64\\t%0,%1\\t; I only want 16\";
                    561:   if (GET_CODE(operands[1])==CONST_INT) {
                    562:     if (INTVAL(operands[1]) >= 0)
                    563:       return \"sti.16\\t%c1,%0\";
                    564:     else
                    565:       return \"stin.16\\t%n1,%0\";
                    566:   }
                    567:   return \"st.16\\t%1,%0\";
                    568: }")
                    569: 
                    570: (define_insn "movqi"
                    571:   [(set (match_operand:QI 0 "general_operand" "=r,m,r")
                    572:        (match_operand:QI 1 "general_operand" "m,rI,ri"))]
                    573:   ""
                    574:   "*
                    575: {
                    576:   if (which_alternative == 0)
                    577:     return \"ld.8\\t%0,%1\";
                    578:   if (which_alternative == 2)
                    579:     return \"ld.64\\t%0,%1\\t; I only want 8\";
                    580:   if (GET_CODE(operands[1])==CONST_INT) {
                    581:     if (INTVAL(operands[1]) >= 0)
                    582:       return \"sti.8\\t%c1,%0\";
                    583:     else
                    584:       return \"stin.8\\t%n1,%0\";
                    585:   }
                    586:   return \"st.8\\t%1,%0\";
                    587: }")
                    588: 
                    589: ;; Extension and truncation insns.
                    590: ;; Those for integer source operand
                    591: ;; are ordered widest source type first.
                    592: 
                    593: (define_insn "truncdfsf2"
                    594:   [(set (match_operand:SF 0 "register_operand" "=r")
                    595:        (truncate:SF (match_operand:DF 1 "general_operand" "rm")))]
                    596:   ""
                    597:   "cvt.ds\\t%0,%1")
                    598: 
                    599: (define_insn "truncdiqi2"
                    600:   [(set (match_operand:QI 0 "general_operand" "=r,m,r")
                    601:        (truncate:QI (match_operand:DI 1 "general_operand" "m,r,0")))]
                    602:   ""
                    603:   "*
                    604: {
                    605:   if (which_alternative == 0)
                    606:     return \"ld.8\\t%0,%1\";
                    607:   else if (which_alternative == 1)
                    608:     return \"st.8\\t%1,%0\";
                    609:   return \"\";
                    610: }")
                    611: 
                    612: (define_insn "truncdihi2"
                    613:   [(set (match_operand:HI 0 "general_operand" "=r,m,r")
                    614:        (truncate:HI (match_operand:DI 1 "general_operand" "m,r,0")))]
                    615:   ""
                    616:   "*
                    617: {
                    618:   if (which_alternative == 0)
                    619:     return \"ld.16\\t%0,%1\";
                    620:   if (which_alternative == 1)
                    621:     return \"st.16\\t%1,%0\";
                    622:   return \"\";
                    623: }")
                    624: 
                    625: (define_insn "truncdisi2"
                    626:   [(set (match_operand:SI 0 "general_operand" "=r,m")
                    627:        (truncate:SI (match_operand:DI 1 "general_operand" "rm,r")))]
                    628:   ""
                    629:   "*
                    630: {
                    631:   if (which_alternative == 0)
                    632:     return \"ld.32\\t%0,%1\";
                    633:   return \"st.32\\t%1,%0\";
                    634: }")
                    635: 
                    636: (define_insn "truncsiqi2"
                    637:   [(set (match_operand:QI 0 "general_operand" "=r,m,r")
                    638:        (truncate:QI (match_operand:SI 1 "general_operand" "m,r,0")))]
                    639:   ""
                    640:   "*
                    641: {
                    642:   if (which_alternative == 0)
                    643:     return \"ld.8\\t%0,%1\";
                    644:   if (which_alternative == 1)
                    645:     return \"st.8\\t%1,%0\";
                    646:   return \"\";
                    647: }")
                    648: 
                    649: (define_insn "truncsihi2"
                    650:   [(set (match_operand:HI 0 "general_operand" "=r,m,r")
                    651:        (truncate:HI (match_operand:SI 1 "general_operand" "m,r,0")))]
                    652:   ""
                    653:   "*
                    654: {
                    655:   if (which_alternative == 0)
                    656:     return \"ld.16\\t%0,%1\";
                    657:   if (which_alternative == 1)
                    658:     return \"st.16\\t%1,%0\";
                    659:   return \"\";
                    660: }")
                    661: 
                    662: (define_insn "trunchiqi2"
                    663:   [(set (match_operand:QI 0 "general_operand" "=r,m,r")
                    664:        (truncate:QI (match_operand:HI 1 "general_operand" "m,r,0")))]
                    665:   ""
                    666:   "*
                    667: {
                    668:   if (which_alternative == 0)
                    669:     return \"ld.8\\t%0,%1\";
                    670:   if (which_alternative == 1)
                    671:     return \"st.8\\t%1,%0\";
                    672:   return \"\";
                    673: }")
                    674: 
                    675: (define_insn "extendsfdf2"
                    676:   [(set (match_operand:DF 0 "register_operand" "=r")
                    677:        (sign_extend:DF (match_operand:SF 1 "general_operand" "rm")))]
                    678:   ""
                    679:   "cvt.sd\\t%0,%1")
                    680: 
                    681: (define_insn "extendsidi2"
                    682:   [(set (match_operand:DI 0 "register_operand" "=r")
                    683:        (sign_extend:DI (match_operand:SI 1 "general_operand" "rm")))]
                    684:   ""
                    685:   "ld.32\\t%0,%1")
                    686: 
                    687: (define_insn "extendhisi2"
                    688:   [(set (match_operand:SI 0 "register_operand" "=r,r")
                    689:        (sign_extend:SI (match_operand:HI 1 "general_operand" "m,r")))]
                    690:   ""
                    691:   "*
                    692:      if (which_alternative==0)
                    693:        return \"ld.16\\t%0,%1\";
                    694:      return \"extract\\t%0,%1:bit 48,16\";
                    695: ")
                    696: 
                    697: (define_insn "extendhidi2"
                    698:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    699:        (sign_extend:DI (match_operand:HI 1 "general_operand" "m,r")))]
                    700:   ""
                    701:   "*
                    702:      if (which_alternative==0)
                    703:        return \"ld.16\\t%0,%1\";
                    704:      return \"extract\\t%0,%1:bit 48,16\";
                    705: ")
                    706: 
                    707: (define_insn "extendqihi2"
                    708:   [(set (match_operand:HI 0 "register_operand" "=r,r")
                    709:        (sign_extend:HI (match_operand:QI 1 "general_operand" "m,r")))]
                    710:   ""
                    711:   "*
                    712:      if (which_alternative==0)
                    713:        return \"ld.8\\t%0,%1\";
                    714:      return \"extract\\t%0,%1:bit 56,8\";
                    715: ")
                    716: 
                    717: (define_insn "extendqisi2"
                    718:   [(set (match_operand:SI 0 "register_operand" "=r,r")
                    719:        (sign_extend:SI (match_operand:QI 1 "general_operand" "m,r")))]
                    720:   ""
                    721:   "*
                    722:      if (which_alternative==0)
                    723:        return \"ld.8\\t%0,%1\";
                    724:      return \"extract\\t%0,%1:bit 56,8\";
                    725: ")
                    726: 
                    727: (define_insn "extendqidi2"
                    728:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    729:        (sign_extend:DI (match_operand:QI 1 "general_operand" "m,r")))]
                    730:   ""
                    731:   "*
                    732:      if (which_alternative==0)
                    733:        return \"ld.8\\t%0,%1\";
                    734:      return \"extract\\t%0,%1:bit 56,8\";
                    735: ")
                    736: 
                    737: (define_insn "zero_extendsidi2"
                    738:   [(set (match_operand:DI 0 "register_operand" "=r")
                    739:        (zero_extend:DI (match_operand:SI 1 "general_operand" "rm")))]
                    740:   ""
                    741:   "ldz.32\\t%0,%1")
                    742: 
                    743: 
                    744: (define_insn "zero_extendhisi2"
                    745:   [(set (match_operand:SI 0 "register_operand" "=r,r")
                    746:        (zero_extend:SI (match_operand:HI 1 "general_operand" "m,r")))]
                    747:   ""
                    748:   "*
                    749:      if (which_alternative==0)
                    750:        return \"ldz.16\\t%0,%1\";
                    751:      return \"extractz\\t%0,%1:bit 48,16\";
                    752: ")
                    753: 
                    754: (define_insn "zero_extendhidi2"
                    755:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    756:        (zero_extend:DI (match_operand:HI 1 "general_operand" "m,r")))]
                    757:   ""
                    758:   "*
                    759:      if (which_alternative==0)
                    760:        return \"ldz.16\\t%0,%1\";
                    761:      return \"extractz\\t%0,%1:bit 48,16\";
                    762: ")
                    763: 
                    764: (define_insn "zero_extendqihi2"
                    765:   [(set (match_operand:HI 0 "register_operand" "=r,r")
                    766:        (zero_extend:HI (match_operand:QI 1 "general_operand" "m,r")))]
                    767:   ""
                    768:   "*
                    769:      if (which_alternative==0)
                    770:        return \"ldz.8\\t%0,%1\";
                    771:      return \"extractz\\t%0,%1:bit 56,8\";
                    772: ")
                    773: 
                    774: (define_insn "zero_extendqisi2"
                    775:   [(set (match_operand:SI 0 "register_operand" "=r,r")
                    776:        (zero_extend:SI (match_operand:QI 1 "general_operand" "m,r")))]
                    777:   ""
                    778:   "*
                    779:      if (which_alternative==0)
                    780:        return \"ldz.8\\t%0,%1\";
                    781:      return \"extractz\\t%0,%1:bit 56,8\";
                    782: ")
                    783: 
                    784: (define_insn "zero_extendqidi2"
                    785:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    786:        (zero_extend:DI (match_operand:QI 1 "general_operand" "m,r")))]
                    787:   ""
                    788:   "*
                    789:      if (which_alternative==0)
                    790:        return \"ldz.8\\t%0,%1\";
                    791:      return \"extractz\\t%0,%1:bit 56,8\";
                    792: ")
                    793: 
                    794: 
                    795: (define_insn "ashrdi3"
                    796:   [(set (match_operand:DI 0 "register_operand" "=r")
                    797:        (ashiftrt:DI (match_operand:DI 1 "register_operand" "r")
                    798:                   (match_operand:SI 2 "general_operand" "rn")))]
                    799:   ""
                    800:   "sra\\t%0,%1,%2")
                    801: 
                    802: (define_insn "lshrdi3"
                    803:   [(set (match_operand:DI 0 "register_operand" "=r")
                    804:        (lshiftrt:DI (match_operand:DI 1 "register_operand" "r")
                    805:                   (match_operand:SI 2 "general_operand" "rn")))]
                    806:   ""
                    807:   "srl\\t%0,%1,%2")
                    808: 
                    809: (define_insn "ashldi3"
                    810:   [(set (match_operand:DI 0 "register_operand" "=r")
                    811:        (ashift:DI (match_operand:DI 1 "register_operand" "r")
                    812:                   (match_operand:SI 2 "general_operand" "rn")))]
                    813:   ""
                    814:   "sla\\t%0,%1,%2")
                    815: 
                    816: (define_insn "anddi3"
                    817:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    818:        (and:DI (match_operand:DI 1 "general_operand" "%0,r")
                    819:                (match_operand:DI 2 "general_operand" "g,g")))]
                    820:   "1 /*which_alternative == 0 || check356(operands[2])*/"
                    821:   "*
                    822:     if (which_alternative == 0)
                    823:       return \"and\\t%0,%2\";
                    824:     return \"and\\t%0,%1,%2\";
                    825: ")
                    826: 
                    827: (define_insn "iordi3"
                    828:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    829:        (ior:DI (match_operand:DI 1 "general_operand" "%0,r")
                    830:                (match_operand:DI 2 "general_operand" "g,g")))]
                    831:   "1 /*which_alternative == 0 || check356(operands[2])*/"
                    832:   "*
                    833:     if (which_alternative == 0)
                    834:       return \"or\\t%0,%2\";
                    835:     return \"or\\t%0,%1,%2\";
                    836: ")
                    837: 
                    838: (define_insn "xordi3"
                    839:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    840:        (xor:DI (match_operand:DI 1 "general_operand" "%0,r")
                    841:                (match_operand:DI 2 "general_operand" "g,g")))]
                    842:   "1 /*which_alternative == 0 || check356(operands[2])*/"
                    843:   "*
                    844:     if (which_alternative == 0)
                    845:       return \"xor\\t%0,%2\";
                    846:     return \"xor\\t%0,%1,%2\";
                    847: ")
                    848: 
                    849: (define_insn "one_cmpldi2"
                    850:   [(set (match_operand:DI 0 "register_operand" "=r")
                    851:        (not:DI (match_operand:DI 1 "general_operand" "rm")))]
                    852:   ""
                    853:   "not\\t%0,%1")
                    854: 
                    855: ;; gcc 2.1 does not widen ~si into ~di.
                    856: (define_insn "one_cmplsi2"
                    857:   [(set (match_operand:SI 0 "register_operand" "=r")
1.1.1.2   root      858:        (not:SI (match_operand:SI 1 "register_operand" "r")))]
1.1       root      859:   ""
                    860:   "not\\t%0,%1")
                    861: 
                    862: (define_insn "negdi2"
                    863:   [(set (match_operand:DI 0 "register_operand" "=r")
                    864:        (neg:DI (match_operand:DI 1 "general_operand" "rm")))]
                    865:   ""
                    866:   "neg.64\\t%0,%1")
                    867: 
                    868: (define_insn "negsi2"
                    869:   [(set (match_operand:SI 0 "register_operand" "=r,r")
                    870:        (neg:SI (match_operand:SI 1 "general_operand" "m,r")))]
                    871:   ""
                    872:   "*
                    873:     if (which_alternative == 0)
                    874:       return \"neg.32\\t%0,%1\";
                    875:     return \"neg.64\\t%0,%1 ; I only want 32\";
                    876: ")
                    877: 
                    878: (define_insn "neghi2"
                    879:   [(set (match_operand:HI 0 "register_operand" "=r,r")
                    880:        (neg:HI (match_operand:HI 1 "general_operand" "m,r")))]
                    881:   ""
                    882:   "*
                    883:     if (which_alternative == 0)
                    884:       return \"neg.16\\t%0,%1\";
                    885:     return \"neg.64\\t%0,%1 ; I only want 16\";
                    886: ")
                    887: 
                    888: (define_insn "adddf3"
                    889:   [(set (match_operand:DF 0 "register_operand" "=r")
                    890:        (plus:DF (match_operand:DF 1 "general_operand" "%0")
                    891:                  (match_operand:DF 2 "general_operand" "rm")))]
                    892:   ""
                    893:   "fadd.64\\t%0,%2")
                    894: 
                    895: (define_insn "addsf3"
                    896:   [(set (match_operand:SF 0 "register_operand" "=r")
                    897:        (plus:SF (match_operand:SF 1 "general_operand" "%0")
                    898:                 (match_operand:SF 2 "general_operand" "rm")))]
                    899:   ""
                    900:   "fadd.32\\t%0,%2")
                    901: 
                    902: ;; There is also an addi.64  4,.r0'' optimization
                    903: (define_insn "adddi3"
                    904:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                    905:        (plus:DI (match_operand:DI 1 "general_operand" "%0,r")
                    906:                 (match_operand:DI 2 "general_operand" "g,g")))]
                    907:   "1 /*which_alternative == 0 || check356(operands[2])*/"
                    908:   "*
                    909:     if (which_alternative == 0)
                    910:       return \"add.64\\t%0,%2\";
                    911:     return \"add.64\\t%0,%1,%2\";
                    912: ")
                    913: 
                    914: (define_insn "addsi3"
                    915:   [(set (match_operand:SI 0 "register_operand" "=r,r,r")
                    916:        (plus:SI (match_operand:SI 1 "general_operand" "%0,r,0")
                    917:                 (match_operand:SI 2 "general_operand" "m,m,g")))]
                    918:   "1 /*which_alternative != 1 || check356(operands[2])*/"
                    919:   "*
                    920:     if (which_alternative == 0)
                    921:       return \"add.32\\t%0,%2\";
                    922:     if (which_alternative == 1)
                    923:       return \"add.32\\t%0,%1,%2\";
                    924:     return \"add.64\\t%0,%2 ; I only want 32\";
                    925: ")
                    926: 
                    927: (define_insn "addhi3"
                    928:   [(set (match_operand:HI 0 "register_operand" "=r,r,r")
                    929:        (plus:HI (match_operand:HI 1 "general_operand" "%0,r,0")
                    930:                 (match_operand:HI 2 "general_operand" "m,m,g")))]
                    931:   "1 /*which_alternative != 1 || check356(operands[2])*/"
                    932:   "*
                    933:     if (which_alternative == 0)
                    934:       return \"add.16\\t%0,%2\";
                    935:     if (which_alternative == 1)
                    936:       return \"add.16\\t%0,%1,%2\";
                    937:     return \"add.64\\t%0,%2 ; I only want 16\";
                    938: ")
                    939: 
                    940: (define_insn "subdf3"
                    941:   [(set (match_operand:DF 0 "register_operand" "=r")
                    942:        (minus:DF (match_operand:DF 1 "general_operand" "0")
                    943:                  (match_operand:DF 2 "general_operand" "rm")))]
                    944:   ""
                    945:   "fsub.64\\t%0,%2")
                    946: 
                    947: (define_insn "subsf3"
                    948:   [(set (match_operand:SF 0 "register_operand" "=r")
                    949:        (minus:SF (match_operand:SF 1 "general_operand" "0")
                    950:                  (match_operand:SF 2 "general_operand" "rm")))]
                    951:   ""
                    952:   "fsub.32\\t%0,%2")
                    953: 
                    954: (define_insn "subdi3"
                    955:   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
                    956:        (minus:DI (match_operand:DI 1 "general_operand" "0,g,r")
                    957:                  (match_operand:DI 2 "general_operand" "g,r,g")))]
                    958:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                    959:   "*
                    960:     if (which_alternative == 0)
                    961:       return \"sub.64\\t%0,%2\";
                    962:     else if (which_alternative == 1)
                    963:       return \"subr.64\\t%0,%2,%1\";
                    964:     else
                    965:       return \"sub.64\\t%0,%1,%2\";
                    966: ")
                    967: 
                    968: (define_insn "subsi3"
                    969:   [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
                    970:        (minus:SI (match_operand:SI 1 "general_operand" "0,m,r,0")
                    971:                  (match_operand:SI 2 "general_operand" "m,r,m,g")))]
                    972:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                    973:   "*
                    974:     if (which_alternative == 0)
                    975:       return \"sub.32\\t%0,%2\";
                    976:     else if (which_alternative == 1)
                    977:       return \"subr.32\\t%0,%2,%1\";
                    978:     else if (which_alternative == 2)
                    979:       return \"sub.32\\t%0,%1,%2\";
                    980:     else
                    981:       return \"sub.64\\t%0,%2 ; I only want 32\";
                    982: ")
                    983: 
                    984: (define_insn "subhi3"
                    985:   [(set (match_operand:HI 0 "register_operand" "=r,r,r,r")
                    986:        (minus:HI (match_operand:HI 1 "general_operand" "0,m,r,0")
                    987:                  (match_operand:HI 2 "general_operand" "m,r,m,g")))]
                    988:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                    989:   "*
                    990:     if (which_alternative == 0)
                    991:       return \"sub.16\\t%0,%2\";
                    992:     else if (which_alternative == 1)
                    993:       return \"subr.16\\t%0,%2,%1\";
                    994:     else if (which_alternative == 2)
                    995:       return \"sub.16\\t%0,%1,%2\";
                    996:     else
                    997:       return \"sub.64\\t%0,%2 ; I only want 16\";
                    998: ")
                    999: 
                   1000: (define_insn "muldf3"
                   1001:   [(set (match_operand:DF 0 "register_operand" "=r")
                   1002:        (mult:DF (match_operand:DF 1 "general_operand" "%0")
                   1003:                 (match_operand:DF 2 "general_operand" "rm")))]
                   1004:   ""
                   1005:   "fmul.64\\t%0,%2")
                   1006: 
                   1007: (define_insn "mulsf3"
                   1008:   [(set (match_operand:SF 0 "register_operand" "=r")
                   1009:        (mult:SF (match_operand:SF 1 "general_operand" "%0")
                   1010:                 (match_operand:SF 2 "general_operand" "rm")))]
                   1011:   ""
                   1012:   "fmul.32\\t%0,%2")
                   1013: 
                   1014: (define_insn "muldi3"
                   1015:   [(set (match_operand:DI 0 "register_operand" "=r,r")
                   1016:        (mult:DI (match_operand:DI 1 "general_operand" "%0,r")
                   1017:                 (match_operand:DI 2 "general_operand" "g,g")))]
                   1018:   "1 /*which_alternative == 0 || check356(operands[2])*/"
                   1019:   "*
                   1020:     if (which_alternative == 0)
                   1021:       return \"mul.64\\t%0,%2\";
                   1022:     return \"mul.64\\t%0,%1,%2\";
                   1023: ")
                   1024: 
                   1025: (define_insn "mulsi3"
                   1026:   [(set (match_operand:SI 0 "register_operand" "=r,r,r")
                   1027:        (mult:SI (match_operand:SI 1 "general_operand" "%0,r,0")
                   1028:                 (match_operand:SI 2 "general_operand" "m,m,g")))]
                   1029:   "1 /*which_alternative == 0 || check356(operands[2])*/"
                   1030:   "*
                   1031:     if (which_alternative == 0)
                   1032:       return \"mul.32\\t%0,%2\";
                   1033:     else if (which_alternative == 1)
                   1034:       return \"mul.32\\t%0,%1,%2\";
                   1035:     else
                   1036:       return \"mul.64\\t%0,%2 ; I only want 32\";
                   1037: ")
                   1038: 
                   1039: (define_insn "mulhi3"
                   1040:   [(set (match_operand:HI 0 "register_operand" "=r,r,r")
                   1041:        (mult:HI (match_operand:HI 1 "general_operand" "%0,r,0")
                   1042:                 (match_operand:HI 2 "general_operand" "m,m,g")))]
                   1043:   "1 /*which_alternative == 0 || check356(operands[2])*/"
                   1044:   "*
                   1045:     if (which_alternative == 0)
                   1046:       return \"mul.16\\t%0,%2\";
                   1047:     else if (which_alternative == 1)
                   1048:       return \"mul.16\\t%0,%1,%2\";
                   1049:     else
                   1050:       return \"mul.64\\t%0,%2 ; I only want 16\";
                   1051: ")
                   1052: 
                   1053: (define_insn "divdf3"
                   1054:   [(set (match_operand:DF 0 "register_operand" "=r")
                   1055:        (div:DF (match_operand:DF 1 "general_operand" "0")
                   1056:                (match_operand:DF 2 "general_operand" "rm")))]
                   1057:   ""
                   1058:   "fdiv.64\\t%0,%2")
                   1059: 
                   1060: (define_insn "divsf3"
                   1061:   [(set (match_operand:SF 0 "register_operand" "=r")
                   1062:        (div:SF (match_operand:SF 1 "general_operand" "0")
                   1063:                (match_operand:SF 2 "general_operand" "rm")))]
                   1064:   ""
                   1065:   "fdiv.32\\t%0,%2")
                   1066: 
                   1067: (define_insn "divdi3"
                   1068:   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
                   1069:        (div:DI (match_operand:DI 1 "general_operand" "0,g,r")
                   1070:                (match_operand:DI 2 "general_operand" "g,r,g")))]
                   1071:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                   1072:   "*
                   1073:     if (which_alternative == 0)
                   1074:       return \"div.64\\t%0,%2\";
                   1075:     else if (which_alternative == 1)
                   1076:       return \"divr.64\\t%0,%2,%1\";
                   1077:     else
                   1078:       return \"div.64\\t%0,%1,%2\";
                   1079: ")
                   1080: 
                   1081: (define_insn "divsi3"
                   1082:   [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
                   1083:        (div:SI (match_operand:SI 1 "general_operand" "0,m,r,0")
                   1084:                (match_operand:SI 2 "general_operand" "m,r,m,g")))]
                   1085:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                   1086:   "*
                   1087: /* We don't ignore high bits. */
                   1088: if (0) {
                   1089:     if (which_alternative == 0)
                   1090:       return \"div.32\\t%0,%2\";
                   1091:     else if (which_alternative == 1)
                   1092:       return \"divr.32\\t%0,%2,%1\";
                   1093:     else if (which_alternative == 2)
                   1094:       return \"div.32\\t%0,%1,%2\";
                   1095:     else
                   1096:       return \"ld.32\\t%0,%0\;div.64\\t%0,%2 ; I only want 32\";
                   1097: } else {
                   1098:     if (which_alternative == 0)
                   1099:       return \"ld.32\\t%0,%0\;div.32\\t%0,%2\";
                   1100:     else if (which_alternative == 1)
                   1101:       return \"ld.32\\t%2,%2\;divr.32\\t%0,%2,%1\";
                   1102:     else if (which_alternative == 2)
                   1103:       return \"ld.32\\t%1,%1\;div.32\\t%0,%1,%2\";
                   1104:     else
                   1105:       return \"ld.32\\t%0,%0\;div.64\\t%0,%2 ; I only want 32\";
                   1106: }
                   1107: ")
                   1108: 
                   1109: (define_insn "divhi3"
                   1110:   [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r")
                   1111:        (div:HI (match_operand:HI 1 "general_operand" "0,m,r,0,0")
                   1112:                (match_operand:HI 2 "general_operand" "m,r,m,r,i")))]
                   1113:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                   1114:   "*
                   1115:     if (which_alternative == 0)
                   1116:       return \"extract\\t%0,%0:bit 48,16\;div.16\\t%0,%2\";
                   1117:     else if (which_alternative == 1)
                   1118:       return \"extract\\t%2,%2:bit 48,16\;divr.16\\t%0,%2,%1\";
                   1119:     else if (which_alternative == 2)
                   1120:       return \"extract\\t%1,%1:bit 48,16\;div.16\\t%0,%1,%2\";
                   1121:     else if (which_alternative == 3)
                   1122:       return \"extract\\t%0,%0:bit 48,16\;extract\\t%2,%2:bit 48,16\;div.64\\t%0,%2 ; I only want 16\";
                   1123:     else
                   1124:       return \"extract\\t%0,%0:bit 48,16\;div.64\\t%0,%2 ; I only want 16\";
                   1125: ")
                   1126: 
                   1127: (define_insn "modhi3"
                   1128:   [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r")
                   1129:        (mod:HI (match_operand:HI 1 "general_operand" "0,m,r,0,0")
                   1130:                (match_operand:HI 2 "general_operand" "m,r,m,r,i")))]
                   1131:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                   1132:   "*
                   1133:     if (which_alternative == 0)
                   1134:       return \"extract\\t%0,%0:bit 48,16\;rem.16\\t%0,%2\";
                   1135:     else if (which_alternative == 1)
                   1136:       return \"extract\\t%2,%2:bit 48,16\;remr.16\\t%0,%2,%1\";
                   1137:     else if (which_alternative == 2)
                   1138:       return \"extract\\t%1,%1:bit 48,16\;rem.16\\t%0,%1,%2\";
                   1139:     else if (which_alternative == 3)
                   1140:       return \"extract\\t%0,%0:bit 48,16\;extract\\t%2,%2:bit 48,16\;rem.64\\t%0,%2 ; I only want 16\";
                   1141:     else
                   1142:       return \"extract\\t%0,%0:bit 48,16\;rem.64\\t%0,%2 ; I only want 16\";
                   1143: ")
                   1144: 
                   1145: (define_insn "moddi3"
                   1146:   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
                   1147:        (mod:DI (match_operand:DI 1 "general_operand" "0,g,r")
                   1148:                (match_operand:DI 2 "general_operand" "g,r,g")))]
                   1149:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                   1150:   "*
                   1151:     if (which_alternative == 0)
                   1152:       return \"rem.64\\t%0,%2\";
                   1153:     else if (which_alternative == 1)
                   1154:       return \"remr.64\\t%0,%2,%1\";
                   1155:     else
                   1156:       return \"rem.64\\t%0,%1,%2\";
                   1157: ")
                   1158: 
                   1159: (define_insn "modsi3"
                   1160:   [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
                   1161:        (mod:SI (match_operand:SI 1 "general_operand" "0,m,r,0")
                   1162:                (match_operand:SI 2 "general_operand" "m,r,m,g")))]
                   1163:   "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
                   1164:   "*
                   1165: /* There is a micro code bug with the below... */
                   1166: if (0) {
                   1167:     if (which_alternative == 0)
                   1168:       return \"rem.32\\t%0,%2\";
                   1169:     else if (which_alternative == 1)
                   1170:       return \"remr.32\\t%0,%2,%1\";
                   1171:     else if (which_alternative == 2)
                   1172:       return \"rem.32\\t%0,%1,%2\";
                   1173:     else
                   1174:       return \"ld.32\\t%0,%0\;rem.64\\t%0,%2 ; I only want 32\";
                   1175: } else {
                   1176:     if (which_alternative == 0)
                   1177:       return \"ld.32\\t%0,%0\;rem.32\\t%0,%2\";
                   1178:     else if (which_alternative == 1)
                   1179:       return \"ld.32\\t%2,%2\;remr.32\\t%0,%2,%1\";
                   1180:     else if (which_alternative == 2)
                   1181:       return \"ld.32\\t%1,%1\;rem.32\\t%0,%1,%2\";
                   1182:     else
                   1183:       return \"ld.32\\t%0,%0\;rem.64\\t%0,%2 ; I only want 32\";
                   1184: }
                   1185: ")
                   1186: 
                   1187: 
                   1188: (define_insn "jump"
                   1189:   [(set (pc)
                   1190:        (label_ref (match_operand 0 "" "")))]
                   1191:   ""
                   1192:   "jmp\\t%l0")
                   1193: 
                   1194: (define_insn "indirect_jump"
                   1195:   [(set (pc) (match_operand:SI 0 "register_operand" "r"))]
                   1196:   ""
                   1197: ;; Maybe %l0 is better, maybe we can relax register only.
                   1198:   "verify this before use ld.32\\t.r0,%0\;br.reg\\t.r0")
                   1199: 
                   1200: (define_insn "beq"
                   1201:   [(set (pc)
                   1202:        (if_then_else (eq (cc0)
                   1203:                          (const_int 0))
                   1204:                      (label_ref (match_operand 0 "" ""))
                   1205:                      (pc)))]
                   1206:   ""
                   1207:   "* return cmp_jmp(\"\", 2, operands[0]); ")
                   1208: 
                   1209: (define_insn "bne"
                   1210:   [(set (pc)
                   1211:        (if_then_else (ne (cc0)
                   1212:                          (const_int 0))
                   1213:                      (label_ref (match_operand 0 "" ""))
                   1214:                      (pc)))]
                   1215:   ""
                   1216:   "* return cmp_jmp(\"\", 8, operands[0]); ")
                   1217: 
                   1218: (define_insn "bgt"
                   1219:   [(set (pc)
                   1220:        (if_then_else (gt (cc0)
                   1221:                          (const_int 0))
                   1222:                      (label_ref (match_operand 0 "" ""))
                   1223:                      (pc)))]
                   1224:   ""
                   1225:   "* return cmp_jmp(\"\", 0, operands[0]); ")
                   1226: 
                   1227: (define_insn "bgtu"
                   1228:   [(set (pc)
                   1229:        (if_then_else (gtu (cc0)
                   1230:                          (const_int 0))
                   1231:                      (label_ref (match_operand 0 "" ""))
                   1232:                      (pc)))]
                   1233:   ""
                   1234:   "* return cmp_jmp(\"u\", 0, operands[0]); ")
                   1235: 
                   1236: (define_insn "blt"
                   1237:   [(set (pc)
                   1238:        (if_then_else (lt (cc0)
                   1239:                          (const_int 0))
                   1240:                      (label_ref (match_operand 0 "" ""))
                   1241:                      (pc)))]
                   1242:   ""
                   1243:   "* return cmp_jmp(\"\", 6, operands[0]); ")
                   1244: 
                   1245: (define_insn "bltu"
                   1246:   [(set (pc)
                   1247:        (if_then_else (ltu (cc0)
                   1248:                          (const_int 0))
                   1249:                      (label_ref (match_operand 0 "" ""))
                   1250:                      (pc)))]
                   1251:   ""
                   1252:   "* return cmp_jmp(\"u\", 6, operands[0]); ")
                   1253: 
                   1254: (define_insn "bge"
                   1255:   [(set (pc)
                   1256:        (if_then_else (ge (cc0)
                   1257:                          (const_int 0))
                   1258:                      (label_ref (match_operand 0 "" ""))
                   1259:                      (pc)))]
                   1260:   ""
                   1261:   "* return cmp_jmp(\"\", 4, operands[0]); ")
                   1262: 
                   1263: (define_insn "bgeu"
                   1264:   [(set (pc)
                   1265:        (if_then_else (geu (cc0)
                   1266:                          (const_int 0))
                   1267:                      (label_ref (match_operand 0 "" ""))
                   1268:                      (pc)))]
                   1269:   ""
                   1270:   "* return cmp_jmp(\"u\", 4, operands[0]); ")
                   1271: 
                   1272: (define_insn "ble"
                   1273:   [(set (pc)
                   1274:        (if_then_else (le (cc0)
                   1275:                          (const_int 0))
                   1276:                      (label_ref (match_operand 0 "" ""))
                   1277:                      (pc)))]
                   1278:   ""
                   1279:   "* return cmp_jmp(\"\", 10, operands[0]); ")
                   1280: 
                   1281: (define_insn "bleu"
                   1282:   [(set (pc)
                   1283:        (if_then_else (leu (cc0)
                   1284:                          (const_int 0))
                   1285:                      (label_ref (match_operand 0 "" ""))
                   1286:                      (pc)))]
                   1287:   ""
                   1288:   "* return cmp_jmp(\"u\", 10, operands[0]); ")
                   1289: 
                   1290: (define_insn ""
                   1291:   [(set (pc)
                   1292:        (if_then_else (eq (cc0)
                   1293:                          (const_int 0))
                   1294:                      (pc)
                   1295:                      (label_ref (match_operand 0 "" ""))))]
                   1296:   ""
                   1297:   "* return cmp_jmp(\"\", 8, operands[0]); ")
                   1298: 
                   1299: (define_insn ""
                   1300:   [(set (pc)
                   1301:        (if_then_else (ne (cc0)
                   1302:                          (const_int 0))
                   1303:                      (pc)
                   1304:                      (label_ref (match_operand 0 "" ""))))]
                   1305:   ""
                   1306:   "* return cmp_jmp(\"\", 2, operands[0]); ")
                   1307: 
                   1308: (define_insn ""
                   1309:   [(set (pc)
                   1310:        (if_then_else (gt (cc0)
                   1311:                          (const_int 0))
                   1312:                      (pc)
                   1313:                      (label_ref (match_operand 0 "" ""))))]
                   1314:   ""
                   1315:   "* return cmp_jmp(\"\", 10, operands[0]); ")
                   1316: 
                   1317: (define_insn ""
                   1318:   [(set (pc)
                   1319:        (if_then_else (gtu (cc0)
                   1320:                          (const_int 0))
                   1321:                      (pc)
                   1322:                      (label_ref (match_operand 0 "" ""))))]
                   1323:   ""
                   1324:   "* return cmp_jmp(\"u\", 10, operands[0]); ")
                   1325: 
                   1326: (define_insn ""
                   1327:   [(set (pc)
                   1328:        (if_then_else (lt (cc0)
                   1329:                          (const_int 0))
                   1330:                      (pc)
                   1331:                      (label_ref (match_operand 0 "" ""))))]
                   1332:   ""
                   1333:   "* return cmp_jmp(\"\", 4, operands[0]); ")
                   1334: 
                   1335: (define_insn ""
                   1336:   [(set (pc)
                   1337:        (if_then_else (ltu (cc0)
                   1338:                          (const_int 0))
                   1339:                      (pc)
                   1340:                      (label_ref (match_operand 0 "" ""))))]
                   1341:   ""
                   1342:   "* return cmp_jmp(\"u\", 4, operands[0]); ")
                   1343: 
                   1344: (define_insn ""
                   1345:   [(set (pc)
                   1346:        (if_then_else (ge (cc0)
                   1347:                          (const_int 0))
                   1348:                      (pc)
                   1349:                      (label_ref (match_operand 0 "" ""))))]
                   1350:   ""
                   1351:   "* return cmp_jmp(\"\", 6, operands[0]); ")
                   1352: 
                   1353: (define_insn ""
                   1354:   [(set (pc)
                   1355:        (if_then_else (geu (cc0)
                   1356:                          (const_int 0))
                   1357:                      (pc)
                   1358:                      (label_ref (match_operand 0 "" ""))))]
                   1359:   ""
                   1360:   "* return cmp_jmp(\"u\", 6, operands[0]); ")
                   1361: 
                   1362: (define_insn ""
                   1363:   [(set (pc)
                   1364:        (if_then_else (le (cc0)
                   1365:                          (const_int 0))
                   1366:                      (pc)
                   1367:                      (label_ref (match_operand 0 "" ""))))]
                   1368:   ""
                   1369:   "* return cmp_jmp(\"\", 0, operands[0]); ")
                   1370: 
                   1371: (define_insn ""
                   1372:   [(set (pc)
                   1373:        (if_then_else (leu (cc0)
                   1374:                          (const_int 0))
                   1375:                      (pc)
                   1376:                      (label_ref (match_operand 0 "" ""))))]
                   1377:   ""
                   1378:   "* return cmp_jmp(\"u\", 0, operands[0]); ")
                   1379: 
                   1380: ;; Note that operand 1 is total size of args, in bytes,
                   1381: ;; and what the call insn wants is the number of words.
                   1382: (define_insn "call"
                   1383:   [(call (match_operand:QI 0 "general_operand" "m")
                   1384:         (match_operand:QI 1 "general_operand" "g"))]
                   1385:   ""
                   1386:   "*
                   1387:   if (GET_CODE (operands[0]) == MEM && GET_CODE (XEXP (operands[0], 0)) == REG)
                   1388:     if (REGNO (XEXP (operands[0], 0)) != 0)
                   1389:       return \"add.64\\t.sp,=-4\;ld.64\\t.r0,=.+11\;st.32\\t.r0,[.sp]\;br.reg\\t%r0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\";
                   1390:     else
                   1391:       return \"add.64\\t.sp,=-4\;ld.64\\t.r1,=.+11\;st.32\\t.r1,[.sp]\;br.reg\\t%r0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\";
                   1392:   else
                   1393:     return \"add.64\\t.sp,=-4\;call\\t%0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\";
                   1394:   ")
                   1395: 
                   1396: (define_insn "call_value"
                   1397:   [(set (match_operand 0 "" "g")
                   1398:        (call (match_operand:QI 1 "general_operand" "m")
                   1399:              (match_operand:QI 2 "general_operand" "g")))]
                   1400:   ""
                   1401:   "*
                   1402:   if (GET_CODE (operands[1]) == MEM && GET_CODE (XEXP (operands[1], 0)) == REG)
                   1403:     if (REGNO (XEXP (operands[1], 0)) != 0)
                   1404:       return \"add.64\\t.sp,=-4\;ld.64\\t.r0,=.+11\;st.32\\t.r0,[.sp]\;br.reg\\t%r1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\";
                   1405:     else
                   1406:       return \"add.64\\t.sp,=-4\;ld.64\\t.r1,=.+11\;st.32\\t.r1,[.sp]\;br.reg\\t%r1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\";
                   1407:   else
                   1408:     return \"add.64\\t.sp,=-4\;call\\t%1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\";
                   1409:   ")
                   1410: 
                   1411: (define_insn "tablejump"
                   1412:   [(set (pc) (match_operand:SI 0 "register_operand" "r"))
                   1413:    (use (label_ref (match_operand 1 "" "")))]
                   1414:   ""
                   1415:   "br.reg\\t%0")
                   1416: 
                   1417: (define_insn "nop"
                   1418:   [(const_int 0)]
                   1419:   ""
                   1420:   "nop")

unix.superglobalmegacorp.com

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