Annotation of gcc/config/dsp16xx/dsp16xx.md, revision 1.1.1.1

1.1       root        1: ;;- Machine description for the AT&T DSP1600 for GNU C compiler
                      2: ;;  Copyright (C) 1994 Free Software Foundation, Inc.
                      3: ;;  Contributed by Michael Collison ([email protected]).
                      4: 
                      5: ;; This file is part of GNU CC.
                      6: 
                      7: ;; GNU CC is free software; you can redistribute it and/or modify
                      8: ;; it under the terms of the GNU General Public License as published by
                      9: ;; the Free Software Foundation; either version 2, or (at your option)
                     10: ;; any later version.
                     11: 
                     12: ;; GNU CC is distributed in the hope that it will be useful,
                     13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15: ;; GNU General Public License for more details.
                     16: 
                     17: ;; You should have received a copy of the GNU General Public License
                     18: ;; along with GNU CC; see the file COPYING.  If not, write to
                     19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     20: 
                     21: 
                     22: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
                     23: 
                     24: ;; Attribute specifications
                     25: 
                     26: ; Type of each instruction.  Default is arithmetic.
                     27: ; I'd like to write the list as this, but genattrtab won't accept it.
                     28: ;
                     29: ; "jump,cond_jump,call,                        ; flow-control instructions
                     30: ;  load_i,load, store, move            ; Y space address arithmetic instructions
                     31: ;  malu,special,f3_alu,f3_alu_i                ; data arithmetic unit instructions
                     32: ;  shift_i,shift, bfield_i, bfield     ; bit manipulation unit instructions
                     33: ;  arith,                              ; integer unit instructions
                     34: ;  nop
                     35: 
                     36: ; Classification of each insn.  Some insns of TYPE_BRANCH are multi-word.
                     37: (define_attr "type"
                     38:   "jump,cond_jump,call,load_i,load,move,store,malu,malu_mul,special,f3_alu,f3_alu_i,shift_i,shift,bfield_i,bfield,nop,ld_short_i"
                     39:   (const_string "malu"))
                     40: 
                     41: ; Length in # of instructions of each insn.  The values are not exact, but
                     42: ; are safe.
                     43: (define_attr "length" ""
                     44:   (cond [(eq_attr "type" "cond_jump,f3_alu_i,shift_i,bfield_i,load_i")
                     45:         (const_int 2)]
                     46:        (const_int 1)))
                     47: 
                     48: 
                     49: ;;  ....................
                     50: ;;
                     51: ;;  Test against 0 instructions
                     52: ;;
                     53: ;;  ....................
                     54: 
                     55: (define_expand "tsthi"
                     56:   [(set (cc0)
                     57:         (match_operand:HI 0 "register_operand" ""))]
                     58:   ""
                     59:   "
                     60: {
                     61:   dsp16xx_compare_gen = gen_tst_reg;
                     62:   dsp16xx_compare_op0 = operands[0];
                     63:   dsp16xx_compare_op1 = const0_rtx;
                     64:   DONE;
                     65: }")
                     66: 
                     67: (define_insn "tsthi_1"
                     68:   [(set (cc0)
                     69:        (match_operand:HI 0 "register_operand" "A"))]
                     70:   ""
                     71:   "%0=%0"
                     72:   [(set_attr "type" "malu")])
                     73: 
                     74: (define_expand "tstqi"
                     75:   [(set (cc0)
                     76:         (match_operand:QI 0 "register_operand" ""))]
                     77:   ""
                     78:   "
                     79: {
                     80:   dsp16xx_compare_gen = gen_tst_reg;
                     81:   dsp16xx_compare_op0 = operands[0];
                     82:   dsp16xx_compare_op1 = const0_rtx;
                     83:   DONE;
                     84: }")
                     85: 
                     86: (define_insn "tstqi_1"
                     87:   [(set (cc0)
                     88:        (match_operand:QI 0 "register_operand" "j,q"))
                     89:    (clobber (match_scratch:QI 1 "=k,u"))]
                     90:   ""
                     91:   "@
                     92:    %1=0\;%b0-0
                     93:    %1=0\;%b0-0"
                     94:   [(set_attr "type" "malu,malu")])
                     95: 
                     96: 
                     97: ;;
                     98: ;;  ....................
                     99: ;;
                    100: ;;  Bit test instructions
                    101: ;;
                    102: ;;  ....................
                    103: 
                    104: (define_insn ""
                    105:   [(set (cc0)
                    106:        (and:HI (match_operand:HI 0 "register_operand" "A,!A,A")
                    107:                (match_operand:HI 1 "nonmemory_operand" "Z,A,I")))]
                    108:   "" 
                    109:   "*
                    110: {
                    111:        switch (which_alternative)
                    112:        {
                    113:           case 0:
                    114:           case 1:
                    115:              return \"%0&%1\";
                    116: 
                    117:           case 2:
                    118:              return \"%0&%H1\";
                    119:          }
                    120: }"
                    121:   [(set_attr "type" "f3_alu,malu,f3_alu_i")])
                    122: 
                    123: 
                    124: ;;(define_insn ""
                    125: ;;  [(set (cc0)
                    126: ;;     (and:QI (match_operand:QI 0 "register_operand" "h")
                    127: ;;             (match_operand:QI 1 "const_int_operand" "I")))]
                    128: ;;  "" 
                    129: ;;  "%b0&%H1"
                    130: ;;  [(set_attr "type" "f3_alu_i")])
                    131: 
                    132: ;;
                    133: ;;
                    134: ;; Compare Instructions
                    135: ;;
                    136: 
                    137: (define_expand "cmphi"
                    138:   [(parallel [(set (cc0)
                    139:                   (compare (match_operand:HI 0 "general_operand" "")
                    140:                            (match_operand:HI 1 "general_operand" "")))
                    141:              (clobber (match_scratch:QI 2 ""))
                    142:              (clobber (match_scratch:QI 3 ""))
                    143:              (clobber (match_scratch:QI 4 ""))
                    144:              (clobber (match_scratch:QI 5 ""))])]
                    145:   ""
                    146:   "
                    147: {
                    148:   if (GET_CODE (operands[1]) == CONST_INT)
                    149:     operands[1] = force_reg (HImode, operands[1]);
                    150: 
                    151:   if (operands[0])     /* Avoid unused code warning */
                    152:     {
                    153:       dsp16xx_compare_gen = gen_compare_reg;
                    154:       dsp16xx_compare_op0 = operands[0];
                    155:       dsp16xx_compare_op1 = operands[1];
                    156:       DONE;
                    157:     }
                    158: 
                    159: }")
                    160: 
                    161: (define_insn ""
                    162:   [(set (cc0) 
                    163:        (compare (match_operand:HI 0 "general_operand" "Z*r*m*i")
                    164:                 (match_operand:HI 1 "general_operand" "Z*r*m*i")))
                    165:    (clobber (match_scratch:QI 2 "=&A"))
                    166:    (clobber (match_scratch:QI 3 "=&A"))
                    167:    (clobber (match_scratch:QI 4 "=&A"))
                    168:    (clobber (match_scratch:QI 5 "=&A"))]
                    169:   "(save_next_cc_user_code = next_cc_user_code (insn)) == GTU \
                    170:    || save_next_cc_user_code == GEU \
                    171:    || save_next_cc_user_code == LTU \
                    172:    || save_next_cc_user_code == LEU"
                    173:   "*
                    174: {
                    175:   if (GET_CODE(operands[0]) == REG)
                    176:     {
                    177:       if (REGNO (operands[0]) == REG_Y ||
                    178:          REGNO (operands[0]) == REG_PROD)
                    179:        {
                    180:          output_asm_insn (\"a0=%0\", operands);
                    181:        }
                    182:       else if (IS_YBASE_REGISTER_WINDOW (REGNO(operands[0])))
                    183:        {
                    184:          output_asm_insn (\"a0=%u0\;a0l=%w0\", operands);
                    185:        }
                    186:       else
                    187:        fatal (\"Illegal register for compare\");
                    188:     }
                    189:   else if (GET_CODE(operands[0]) == CONST_INT)
                    190:     {
                    191:       output_asm_insn (\"a0=%U0\;a0l=%H0\", operands);
                    192:     }
                    193:   else if (GET_CODE (operands[0]) == MEM)
                    194:     {
                    195:       rtx xoperands[2];
                    196: 
                    197:       xoperands[0] = gen_rtx (REG, HImode, REG_A0);
                    198:       xoperands[1] = operands[0];
                    199:       double_reg_from_memory (xoperands);
                    200:     }
                    201: 
                    202:   if (GET_CODE(operands[1]) == REG)
                    203:     {
                    204:       if (REGNO (operands[1]) == REG_Y ||
                    205:          REGNO (operands[1]) == REG_PROD)
                    206:        {
                    207:          output_asm_insn (\"a1=%1\", operands);
                    208:        }
                    209:       else if (IS_YBASE_REGISTER_WINDOW (REGNO(operands[1])))
                    210:        {
                    211:          output_asm_insn (\"a1=%u1\;a1l=%w1\", operands);
                    212:        }
                    213:       else
                    214:        fatal (\"Illegal register for compare\");
                    215:     }
                    216:   else if (GET_CODE (operands[1]) == MEM)
                    217:     {
                    218:       rtx xoperands[2];
                    219: 
                    220:       xoperands[0] = gen_rtx (REG, HImode, REG_A1);
                    221:       xoperands[1] = operands[1];
                    222:       double_reg_from_memory (xoperands);
                    223:     }
                    224:   else if (GET_CODE(operands[1]) == CONST_INT)
                    225:     {
                    226:       output_asm_insn (\"a1=%U1\;a1l=%H1\", operands);
                    227:     }
                    228:   
                    229:   return \"psw = 0\;a0 - a1\";
                    230: }")
                    231: 
                    232: (define_insn ""
                    233:   [(set (cc0) (compare (match_operand:HI 0 "register_operand" "A,!A")
                    234:                       (match_operand:HI 1 "register_operand" "Z,*A")))]
                    235:   ""
                    236:   "@
                    237:    %0-%1
                    238:    %0-%1"
                    239:   [(set_attr "type" "malu,f3_alu")])
                    240: 
                    241: (define_expand "cmpqi"
                    242:   [(parallel [(set (cc0)
                    243:                   (compare (match_operand:QI 0 "register_operand" "")
                    244:                            (match_operand:QI 1 "nonmemory_operand" "")))
                    245:              (clobber (match_operand:QI 2 "register_operand" ""))
                    246:              (clobber (match_operand:QI 3 "register_operand" ""))])]
                    247:   ""
                    248:   "
                    249:  {
                    250:   if (operands[0])     /* Avoid unused code warning */
                    251:     {
                    252:       dsp16xx_compare_gen = gen_compare_reg;
                    253:       dsp16xx_compare_op0 = operands[0];
                    254:       dsp16xx_compare_op1 = operands[1];
                    255:       DONE;
                    256:     }
                    257:  }")
                    258: 
                    259: (define_insn ""
                    260:   [(set (cc0) (compare (match_operand:QI 0 "register_operand"  "k,k,!k,k,u,u,!u,u")
                    261:                        (match_operand:QI 1 "nonmemory_operand" "w,z,u,i,w,z,k,i")))
                    262:        (clobber (match_scratch:QI 2 "=j,j,j,j,q,q,q,q"))
                    263:        (clobber (match_scratch:QI 3 "=v,y,q,X,v,y,j,X"))]
                    264:   "(save_next_cc_user_code = next_cc_user_code (insn)) == GTU \
                    265:    || save_next_cc_user_code == GEU \
                    266:    || save_next_cc_user_code == LTU \
                    267:    || save_next_cc_user_code == LEU"
                    268:   "@
                    269:    %2=0\;%3=0\;%2-%3
                    270:    %2=0\;%3=0\;%2-%3
                    271:    %2=0\;%3=0\;%2-%3
                    272:    %2=0\;%0-%H1
                    273:    %2=0\;%3=0\;%2-%3
                    274:    %2=0\;%3=0\;%2-%3
                    275:    %2=0\;%3=0\;%2-%3
                    276:    %2=0\;%0-%H1")
                    277: 
                    278: 
                    279: (define_insn ""
                    280:   [(set (cc0) (compare (match_operand:QI 0 "register_operand"  "j,j,!j,j,q,q,!q,q")
                    281:                        (match_operand:QI 1 "nonmemory_operand" "v,y,q,i,v,y,j,i")))
                    282:        (clobber (match_scratch:QI 2 "=k,k,k,k,u,u,u,u"))
                    283:        (clobber (match_scratch:QI 3 "=w,z,u,X,w,z,k,X"))]
                    284:   ""
                    285:   "@
                    286:    %2=0\;%3=0\;%0-%1
                    287:    %2=0\;%3=0\;%0-%1
                    288:    %2=0\;%3=0\;%0-%1
                    289:    %2=0\;%b0-%H1
                    290:    %2=0\;%3=0\;%0-%1
                    291:    %2=0\;%3=0\;%0-%1
                    292:    %2=0\;%3=0\;%0-%1
                    293:    %2=0\;%b0-%H1")
                    294: 
                    295: 
                    296: (define_expand "cmphf"
                    297:   [(set (cc0)
                    298:        (compare (match_operand:HF 0 "register_operand" "")
                    299:                 (match_operand:HF 1 "nonmemory_operand" "")))]
                    300:   ""
                    301:   "
                    302: {
                    303:   if (!dsp16xx_cmphf3_libcall)
                    304:     dsp16xx_cmphf3_libcall = gen_rtx (SYMBOL_REF, Pmode, CMPHF3_LIBCALL);
                    305: 
                    306:    dsp16xx_compare_gen = gen_compare_reg;
                    307:    dsp16xx_compare_op0 = operands[0];
                    308:    dsp16xx_compare_op1 = operands[1];
                    309:    emit_library_call (dsp16xx_cmphf3_libcall, 1, HImode, 2,
                    310:                      operands[0], HFmode,
                    311:                      operands[1], HFmode);
                    312:    emit_insn (gen_tsthi_1 (copy_to_reg(hard_libcall_value (HImode))));
                    313:    DONE;
                    314: }")
                    315: 
                    316: 
                    317: ;;  ....................
                    318: ;;
                    319: ;;  Add instructions
                    320: ;;
                    321: ;;  ....................
                    322: 
                    323: 
                    324: (define_insn "addhi3"
                    325:   [(set (match_operand:HI 0 "register_operand" "=A,A,A")
                    326:        (plus:HI (match_operand:HI 1 "register_operand" "%A,A,A")
                    327:                 (match_operand:HI 2 "nonmemory_operand" "Z,d,i")))]
                    328:   ""
                    329:   "@
                    330:    %0=%1+%2
                    331:    %0=%1+%2
                    332:    %0=%w1+%H2\;%0=%b0+%U2"
                    333:   [(set_attr "type" "malu,malu,f3_alu_i")])
                    334: 
                    335: (define_insn ""
                    336:   [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u")
                    337:        (plus:QI (plus:QI (match_operand:QI 1 "register_operand" "uk,uk,uk,uk")
                    338:                          (match_operand:QI 2 "register_operand" "wz,wz,uk,uk"))
                    339:                 (match_operand:QI 3 "immediate_operand" "i,i,i,i")))
                    340:    (clobber (match_scratch:QI 4 "=j,q,j,q"))]
                    341:   ""
                    342:   "@
                    343:    %m0=%m1+%m2\;%m0=%0+%H3
                    344:    %m0=%m1+%m2\;%m0=%0+%H3
                    345:    %m0=%m1+%m2\;%m0=%0+%H3
                    346:    %m0=%m1+%m2\;%m0=%0+%H3")
                    347: 
                    348: (define_expand "addqi3"
                    349:   [(parallel [(set (match_operand:QI 0 "register_operand" "")
                    350:                   (plus:QI (match_operand:QI 1 "register_operand" "")
                    351:                            (match_operand:QI 2 "nonmemory_operand" "")))
                    352:              (clobber (match_scratch:QI 3 ""))])]
                    353:   ""
                    354:   "
                    355: {
                    356:   if (reload_in_progress)
                    357:     {
                    358:       if (REG_P (operands[1]) && 
                    359:          (REGNO(operands[1]) == STACK_POINTER_REGNUM ||
                    360:           REGNO(operands[1]) == FRAME_POINTER_REGNUM) &&
                    361:          GET_CODE (operands[2]) == CONST_INT)
                    362:        {
                    363:          if (REG_P (operands[0]) && IS_ACCUM_REG(REGNO(operands[0])))
                    364:            emit_move_insn (operands[0], operands[1]);
                    365: 
                    366:          operands[1] = operands[0];
                    367:        }
                    368:     }
                    369: }")
                    370: 
                    371:        
                    372: (define_insn "match_addqi3"
                    373:   [(set (match_operand:QI 0 "register_operand" "=!a,!a,k,u,!k,!u,h,!a")
                    374:        (plus:QI (match_operand:QI 1 "register_operand" "0,0,uk,uk,uk,uk,h,0")
                    375:                 (match_operand:QI 2 "nonmemory_operand" "W,N,wzi,wzi,uk,uk,i,n")))
                    376:        (clobber (match_scratch:QI 3 "=X,X,j,q,j,q,X,W"))]
                    377:   ""
                    378:   "*
                    379: {
                    380:   switch (which_alternative)
                    381:     {
                    382:     case 0:
                    383:       return \"*%0++%2\";
                    384: 
                    385:     case 1:
                    386:       switch (INTVAL (operands[2]))
                    387:        {
                    388:        case -1:
                    389:          return \"*%0--\";
                    390: 
                    391:        case 1:
                    392:          return \"*%0++\";
                    393: 
                    394:        case -2:
                    395:          return \"*%0--\;*%0--\";
                    396: 
                    397:        case 2:
                    398:          return \"*%0++\;*%0++\";
                    399:        }
                    400: 
                    401:     case 2:
                    402:     case 3:
                    403:       if (!CONSTANT_P(operands[2]))
                    404:         return \"%m0=%m1+%m2\";
                    405:       else
                    406:         return \"%m0=%1+%H2\";
                    407: 
                    408:     case 4:
                    409:     case 5:
                    410:       return \"%m0=%m1+%m2\";
                    411: 
                    412:     case 6:
                    413:       return \"%0=%b1+%H2\";
                    414: 
                    415:     case 7:
                    416:       return \"%3=%2\;*%0++%3\";
                    417:     }
                    418: }")
                    419: 
                    420: (define_expand "addhf3"
                    421:   [(set (match_operand:HF 0 "register_operand" "")
                    422:        (plus:HF (match_operand:HF 1 "register_operand" "")
                    423:                 (match_operand:HF 2 "nonmemory_operand" "")))]
                    424:   ""
                    425:   "
                    426: {
                    427:   if (!dsp16xx_addhf3_libcall)
                    428:     dsp16xx_addhf3_libcall = gen_rtx (SYMBOL_REF, Pmode, ADDHF3_LIBCALL);
                    429: 
                    430:    emit_library_call (dsp16xx_addhf3_libcall, 1, HFmode, 2,
                    431:                      operands[1], HFmode,
                    432:                      operands[2], HFmode);
                    433:    emit_move_insn (operands[0], hard_libcall_value(HFmode));
                    434:    DONE;
                    435: }")
                    436:                      
                    437: 
                    438: ;;
                    439: ;;  ....................
                    440: ;;
                    441: ;;  Subtract instructions
                    442: ;;
                    443: ;;  ....................
                    444: 
                    445: (define_insn "subhi3"
                    446:   [(set (match_operand:HI 0 "register_operand" "=A,A,A")
                    447:        (minus:HI (match_operand:HI 1 "register_operand" "A,A,A")
                    448:                  (match_operand:HI 2 "nonmemory_operand" "Z,d,i")))]
                    449:   ""
                    450:   "@
                    451:    %0=%1-%2
                    452:    %0=%1-%2
                    453:    %0=%w1-%H2\;%0=%b0-%U2"
                    454:   [(set_attr "type" "malu,malu,f3_alu_i")])
                    455: 
                    456: (define_insn "subqi3"
                    457:   [(set (match_operand:QI 0 "register_operand" "=?*a,k,u,!k,!u")
                    458:        (minus:QI (match_operand:QI 1 "register_operand" "0,uk,uk,uk,uk")
                    459:                 (match_operand:QI 2 "nonmemory_operand" "n,wzi,wzi,uk,uk")))
                    460:        (clobber (match_scratch:QI 3 "=W,j,q,j,q"))]
                    461:   ""
                    462:   "*
                    463: {
                    464:   switch (which_alternative)
                    465:     {
                    466:     case 0:
                    467:       switch (INTVAL (operands[2]))
                    468:        {
                    469:        case 0:
                    470:          return \"\";
                    471:          
                    472:        case 1:
                    473:          return \"*%0--\";
                    474:          
                    475:        case -1:
                    476:          return \"*%0++\";
                    477:          
                    478:        default:
                    479:          operands[2] = GEN_INT (-INTVAL (operands[2]));
                    480:          
                    481:          if (SHORT_IMMEDIATE(operands[2]))
                    482:            return \"set %3=%H2\;*%0++%3\";
                    483:          else
                    484:            return \"%3=%H2\;*%0++%3\";
                    485:        }
                    486:       
                    487:     case 1:
                    488:     case 2:
                    489:       if (!CONSTANT_P(operands[2]))
                    490:         return \"%m0=%m1-%m2\";
                    491:       else
                    492:         return \"%m0=%1-%H2\";
                    493: 
                    494:     case 3:
                    495:     case 4:
                    496:       return \"%m0=%m1-%m2\";
                    497:     }
                    498: }")
                    499: 
                    500: (define_expand "subhf3"
                    501:   [(set (match_operand:HF 0 "register_operand" "")
                    502:        (minus:HF (match_operand:HF 1 "register_operand" "")
                    503:                 (match_operand:HF 2 "nonmemory_operand" "")))]
                    504:   ""
                    505:   "
                    506: {
                    507:   if (!dsp16xx_subhf3_libcall)
                    508:     dsp16xx_subhf3_libcall = gen_rtx (SYMBOL_REF, Pmode, SUBHF3_LIBCALL);
                    509:   
                    510:   emit_library_call (dsp16xx_subhf3_libcall, 1, HFmode, 2,
                    511:                     operands[1], HFmode,
                    512:                     operands[2], HFmode);
                    513:   emit_move_insn (operands[0], hard_libcall_value(HFmode));
                    514:   DONE;
                    515: }")
                    516: 
                    517: (define_insn "neghi2"
                    518:   [(set (match_operand:HI 0 "register_operand" "=A")
                    519:         (neg:HI (match_operand:HI 1 "register_operand" "A")))]
                    520:   ""
                    521:   "%0=-%1"
                    522:   [(set_attr "type" "special")])
                    523: 
                    524: (define_expand "neghf2"
                    525:   [(set (match_operand:HF 0 "general_operand" "")
                    526:        (neg:HF (match_operand:HF 1 "general_operand" "")))]
                    527:   ""
                    528: "
                    529: {
                    530:   if (!dsp16xx_neghf2_libcall)
                    531:     dsp16xx_neghf2_libcall = gen_rtx (SYMBOL_REF, Pmode, NEGHF2_LIBCALL);
                    532:   
                    533:   emit_library_call (dsp16xx_neghf2_libcall, 1, HFmode, 1,
                    534:                     operands[1], HFmode);
                    535:   emit_move_insn (operands[0], hard_libcall_value(HFmode));
                    536:   DONE;
                    537: }")
                    538: 
                    539: 
                    540: 
                    541: ;;
                    542: ;;  ....................
                    543: ;;
                    544: ;;  Multiply instructions
                    545: ;;
                    546: 
                    547: (define_expand "mulhi3"
                    548:   [(set (match_operand:HI 0 "register_operand" "")
                    549:        (mult:HI (match_operand:HI 1 "register_operand" "")
                    550:                 (match_operand:HI 2 "nonmemory_operand" "")))]
                    551:   ""
                    552:   "
                    553: {
                    554:   if (!dsp16xx_mulhi3_libcall)
                    555:     dsp16xx_mulhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, MULHI3_LIBCALL);
                    556: 
                    557:    emit_library_call (dsp16xx_mulhi3_libcall, 1, HImode, 2,
                    558:                      operands[1], HImode,
                    559:                      operands[2], HImode);
                    560:    emit_move_insn (operands[0], hard_libcall_value(HImode));
                    561:    DONE;
                    562: }")
                    563: 
                    564: (define_insn "mulqi3"
                    565:   [(set (match_operand:QI 0 "register_operand" "=w")
                    566:         (mult:QI (match_operand:QI 1 "register_operand" "%x")
                    567:                  (match_operand:QI 2 "register_operand" "y")))
                    568:    (clobber (match_scratch:QI 3 "=v"))]
                    569:   ""
                    570:   "%m0=%1*%2"
                    571:   [(set_attr "type" "malu_mul")])
                    572: 
                    573: (define_insn "mulqihi3"
                    574:   [(set (match_operand:HI 0 "register_operand" "=t")
                    575:         (mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%x"))
                    576:                  (sign_extend:HI (match_operand:QI 2 "register_operand" "y"))))]
                    577:   ""
                    578:   "%0=%1*%2"
                    579:   [(set_attr "type" "malu_mul")])
                    580: 
                    581: (define_insn "umulqihi3"
                    582:   [(set (match_operand:HI 0 "register_operand" "=t")
                    583:         (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%x"))
                    584:                  (zero_extend:HI (match_operand:QI 2 "register_operand" "y"))))]
                    585:   ""
                    586:   "%0=%1*%2"
                    587:   [(set_attr "type" "malu_mul")])
                    588: 
                    589: (define_expand "mulhf3"
                    590:   [(set (match_operand:HF 0 "register_operand" "")
                    591:        (mult:HF (match_operand:HF 1 "register_operand" "")
                    592:                 (match_operand:HF 2 "nonmemory_operand" "")))]
                    593:   ""
                    594:   "
                    595: {
                    596:   if (!dsp16xx_mulhf3_libcall)
                    597:     dsp16xx_mulhf3_libcall = gen_rtx (SYMBOL_REF, Pmode, MULHF3_LIBCALL);
                    598:   
                    599:   emit_library_call (dsp16xx_mulhf3_libcall, 1, HFmode, 2,
                    600:                     operands[1], HFmode,
                    601:                     operands[2], HFmode);
                    602:   emit_move_insn (operands[0], hard_libcall_value(HFmode));
                    603:   DONE;
                    604: }")
                    605: 
                    606: 
                    607: 
                    608: ;;
                    609: ;; *******************
                    610: ;;
                    611: ;; Divide Instructions
                    612: ;;
                    613: 
                    614: (define_expand "divhi3"
                    615:   [(set (match_operand:HI 0 "register_operand" "")
                    616:        (div:HI (match_operand:HI 1 "register_operand" "")
                    617:                 (match_operand:HI 2 "nonmemory_operand" "")))]
                    618:   ""
                    619:   "
                    620: {
                    621:   if (!dsp16xx_divhi3_libcall)
                    622:     dsp16xx_divhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, DIVHI3_LIBCALL);
                    623: 
                    624:    emit_library_call (dsp16xx_divhi3_libcall, 1, HImode, 2,
                    625:                      operands[1], HImode,
                    626:                      operands[2], HImode);
                    627:    emit_move_insn (operands[0], hard_libcall_value(HImode));
                    628:    DONE;
                    629: }")
                    630: 
                    631: (define_expand "udivhi3"
                    632:   [(set (match_operand:HI 0 "register_operand" "")
                    633:        (udiv:HI (match_operand:HI 1 "register_operand" "")
                    634:                 (match_operand:HI 2 "nonmemory_operand" "")))]
                    635:   ""
                    636:   "
                    637: {
                    638:   if (!dsp16xx_udivhi3_libcall)
                    639:     dsp16xx_udivhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, UDIVHI3_LIBCALL);
                    640:   
                    641:   emit_library_call (dsp16xx_udivhi3_libcall, 1, HImode, 2,
                    642:                     operands[1], HImode,
                    643:                     operands[2], HImode);
                    644:   emit_move_insn (operands[0], hard_libcall_value(HImode));
                    645:   DONE;
                    646: }")
                    647: 
                    648: (define_expand "divqi3"
                    649:   [(set (match_operand:QI 0 "register_operand" "")
                    650:        (div:QI (match_operand:QI 1 "register_operand" "")
                    651:                 (match_operand:QI 2 "nonmemory_operand" "")))]
                    652:   ""
                    653:   "
                    654: {
                    655:   if (!dsp16xx_divqi3_libcall)
                    656:     dsp16xx_divqi3_libcall = gen_rtx (SYMBOL_REF, Pmode, DIVQI3_LIBCALL);
                    657:   
                    658:   emit_library_call (dsp16xx_divqi3_libcall, 1, QImode, 2,
                    659:                     operands[1], QImode,
                    660:                     operands[2], QImode);
                    661:   emit_move_insn (operands[0], hard_libcall_value(QImode));
                    662:   DONE;
                    663: }")
                    664: 
                    665: (define_expand "udivqi3"
                    666:   [(set (match_operand:QI 0 "register_operand" "")
                    667:        (udiv:QI (match_operand:QI 1 "register_operand" "")
                    668:                 (match_operand:QI 2 "nonmemory_operand" "")))]
                    669:   ""
                    670:   "
                    671: {
                    672:   if (!dsp16xx_udivqi3_libcall)
                    673:     dsp16xx_udivqi3_libcall = gen_rtx (SYMBOL_REF, Pmode, UDIVQI3_LIBCALL);
                    674: 
                    675:    emit_library_call (dsp16xx_udivqi3_libcall, 1, QImode, 2,
                    676:                      operands[1], QImode,
                    677:                      operands[2], QImode);
                    678:    emit_move_insn (operands[0], hard_libcall_value(QImode));
                    679:    DONE;
                    680: }")
                    681: 
                    682: ;;
                    683: ;;  ....................
                    684: ;;
                    685: ;;  Modulo instructions
                    686: ;;
                    687: ;;  ....................
                    688: 
                    689: (define_expand "modhi3"
                    690:   [(set (match_operand:HI 0 "register_operand" "")
                    691:        (mod:HI (match_operand:HI 1 "register_operand" "")
                    692:                (match_operand:HI 2 "nonmemory_operand" "")))]
                    693:   ""
                    694:   "
                    695: {
                    696:   if (!dsp16xx_modhi3_libcall)
                    697:     dsp16xx_modhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, MODHI3_LIBCALL);
                    698:   
                    699:   emit_library_call (dsp16xx_modhi3_libcall, 1, HImode, 2,
                    700:                     operands[1], HImode,
                    701:                     operands[2], HImode);
                    702:   emit_move_insn (operands[0], hard_libcall_value(HImode));
                    703:   DONE;
                    704: }")
                    705: 
                    706: (define_expand "umodhi3"
                    707:   [(set (match_operand:HI 0 "register_operand" "")
                    708:        (umod:HI (match_operand:HI 1 "register_operand" "")
                    709:                 (match_operand:HI 2 "nonmemory_operand" "")))]
                    710:   ""
                    711:   "
                    712: {
                    713:   if (!dsp16xx_umodhi3_libcall)
                    714:     dsp16xx_umodhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, UMODHI3_LIBCALL);
                    715:   
                    716:   emit_library_call (dsp16xx_umodhi3_libcall, 1, HImode, 2,
                    717:                     operands[1], HImode,
                    718:                     operands[2], HImode);
                    719:   emit_move_insn (operands[0], hard_libcall_value(HImode));
                    720:   DONE;
                    721: }")
                    722: 
                    723: (define_expand "modqi3"
                    724:   [(set (match_operand:QI 0 "register_operand" "")
                    725:        (mod:QI (match_operand:QI 1 "register_operand" "")
                    726:                (match_operand:QI 2 "nonmemory_operand" "")))]
                    727:   ""
                    728:   "
                    729: {
                    730:   if (!dsp16xx_modqi3_libcall)
                    731:     dsp16xx_modqi3_libcall = gen_rtx (SYMBOL_REF, Pmode, MODQI3_LIBCALL);
                    732:   
                    733:   emit_library_call (dsp16xx_modqi3_libcall, 1, QImode, 2,
                    734:                     operands[1], QImode,
                    735:                     operands[2], QImode);
                    736:   emit_move_insn (operands[0], hard_libcall_value(QImode));
                    737:   DONE;
                    738: }")
                    739: 
                    740: (define_expand "umodqi3"
                    741:   [(set (match_operand:QI 0 "register_operand" "")
                    742:        (umod:QI (match_operand:QI 1 "register_operand" "")
                    743:                 (match_operand:QI 2 "nonmemory_operand" "")))]
                    744:   ""
                    745:   "
                    746: {
                    747:   if (!dsp16xx_umodqi3_libcall)
                    748:     dsp16xx_umodqi3_libcall = gen_rtx (SYMBOL_REF, Pmode, UMODQI3_LIBCALL);
                    749:   
                    750:   emit_library_call (dsp16xx_umodqi3_libcall, 1, QImode, 2,
                    751:                     operands[1], QImode,
                    752:                     operands[2], QImode);
                    753:   emit_move_insn (operands[0], hard_libcall_value(QImode));
                    754:   DONE;
                    755: }")
                    756: 
                    757: (define_expand "divhf3"
                    758:   [(set (match_operand:HF 0 "register_operand" "")
                    759:        (div:HF (match_operand:HF 1 "register_operand" "")
                    760:                (match_operand:HF 2 "nonmemory_operand" "")))]
                    761:   ""
                    762:   "
                    763: {
                    764:   if (!dsp16xx_divhf3_libcall)
                    765:     dsp16xx_divhf3_libcall = gen_rtx (SYMBOL_REF, Pmode, DIVHF3_LIBCALL);
                    766:   
                    767:   emit_library_call (dsp16xx_divhf3_libcall, 1, HFmode, 2,
                    768:                     operands[1], HFmode,
                    769:                     operands[2], HFmode);
                    770:   emit_move_insn (operands[0], hard_libcall_value(HFmode));
                    771:   DONE;
                    772: }")
                    773: 
                    774: 
                    775: 
                    776: ;;
                    777: ;; ********************
                    778: ;;
                    779: ;; Logical Instructions
                    780: ;;
                    781: 
                    782: (define_insn "andhi3"
                    783:   [(set (match_operand:HI 0 "register_operand" "=A,A,?A")
                    784:         (and:HI (match_operand:HI 1 "register_operand" "%A,!A,A")
                    785:                 (match_operand:HI 2 "nonmemory_operand" "Z,A,i")))]
                    786:   ""
                    787:   "@
                    788:    %0=%1&%2
                    789:    %0=%1&%2
                    790:    %0=%w1&%H2\;%0=%b0&%U2"
                    791:   [(set_attr "type" "f3_alu,f3_alu,f3_alu_i")])
                    792: 
                    793: (define_insn "andqi3"
                    794:   [(set (match_operand:QI 0 "register_operand" "=k,u,uk,!k,!u,j,q,jq,!j,!q")
                    795:        (and:QI (match_operand:QI 1 "register_operand" "uk,uk,uk,uk,uk,jq,jq,jq,jq,jq")
                    796:                (match_operand:QI 2 "nonmemory_operand" "wz,wz,i,uk,uk,yv,yv,i,jq,jq")))
                    797:        (clobber (match_scratch:QI 3 "=j,q,X,j,q,k,u,X,k,u"))]
                    798:    ""
                    799:    "@
                    800:     %m0=%m1&%m2
                    801:     %m0=%m1&%m2
                    802:     %m0=%1&%H2
                    803:     %m0=%m1&%m2
                    804:     %m0=%m1&%m2
                    805:     %m0=%m1&%m2
                    806:     %m0=%m1&%m2
                    807:     %m0=%b1&%H2
                    808:     %m0=%m1&%m2
                    809:     %m0=%m1&%m2")
                    810: 
                    811: (define_insn "iorhi3"
                    812:   [(set (match_operand:HI 0 "register_operand" "=A,A,A,?A")
                    813:         (ior:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A")
                    814:                 (match_operand:HI 2 "nonmemory_operand" "Z,A,I,i")))]
                    815:  ""
                    816:  "@
                    817:    %0=%u1|%u2
                    818:    %0=%u1|%u2
                    819:    %0=%w1|%H2
                    820:    %0=%w1|%H2\;%0=%b0|%U2"
                    821:   [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i")])
                    822: 
                    823: (define_insn "iorqi3"
                    824:   [(set (match_operand:QI 0 "register_operand" "=k,u,uk,!k,!u,j,q,jq,!j,!q")
                    825:        (ior:QI (match_operand:QI 1 "register_operand" "uk,uk,uk,uk,uk,jq,jq,jq,jq,jq")
                    826:                (match_operand:QI 2 "nonmemory_operand" "wz,wz,i,uk,uk,yv,yv,i,jq,jq")))
                    827:        (clobber (match_scratch:QI 3 "=j,q,X,j,q,k,u,X,k,u"))]
                    828:    ""
                    829:    "@
                    830:     %m0=%m1|%m2
                    831:     %m0=%m1|%m2
                    832:     %m0=%1|%H2
                    833:     %m0=%m1|%m2
                    834:     %m0=%m1|%m2
                    835:     %m0=%m1|%m2
                    836:     %m0=%m1|%m2
                    837:     %m0=%b1|%H2
                    838:     %m0=%m1|%m2
                    839:     %m0=%m1|%m2")
                    840: 
                    841: (define_insn "xorhi3"
                    842:   [(set (match_operand:HI 0 "register_operand" "=A,A,A,?A")
                    843:         (xor:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A")
                    844:                 (match_operand:HI 2 "nonmemory_operand" "Z,A,I,i")))]
                    845:   ""
                    846:   "@
                    847:    %0=%1^%2
                    848:    %0=%1^%2
                    849:    %0=%w1^%H2
                    850:    %0=%w1^%H2\;%0=%b0^%U2"
                    851:   [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i")])
                    852: 
                    853: (define_insn "xorqi3"
                    854:   [(set (match_operand:QI 0 "register_operand" "=k,u,uk,!k,!u,j,q,jq,!j,!q")
                    855:        (xor:QI (match_operand:QI 1 "register_operand" "uk,uk,uk,uk,uk,jq,jq,jq,jq,jq")
                    856:                (match_operand:QI 2 "nonmemory_operand" "wz,wz,i,uk,uk,yv,yv,i,jq,jq")))
                    857:        (clobber (match_scratch:QI 3 "=j,q,X,j,q,k,u,X,k,u"))]
                    858:    ""
                    859:    "@
                    860:     %m0=%m1^%m2
                    861:     %m0=%m1^%m2
                    862:     %m0=%1^%H2
                    863:     %m0=%m1^%m2
                    864:     %m0=%m1^%m2
                    865:     %m0=%m1^%m2
                    866:     %m0=%m1^%m2
                    867:     %m0=%b1^%H2
                    868:     %m0=%m1^%m2
                    869:     %m0=%m1^%m2")
                    870: 
                    871: (define_insn "one_cmplhi2"
                    872:   [(set (match_operand:HI 0 "register_operand" "=A")
                    873:         (not:HI (match_operand:HI 1 "register_operand" "A")))]
                    874:   ""
                    875:   "%0= ~%1"
                    876:   [(set_attr "type" "special")])
                    877: 
                    878: (define_insn "one_cmplqi2"
                    879:   [(set (match_operand:QI 0 "register_operand" "=ku,jq")
                    880:         (not:QI (match_operand:QI 1 "register_operand" "ku,jq")))]
                    881:   ""
                    882:   "@
                    883:    %m0= %1 ^ 0xffff
                    884:    %m0= %b1 ^ 0xffff"
                    885:   [(set_attr "type" "special")])
                    886: 
                    887: 
                    888: ;;
                    889: ;; MOVE INSTRUCTIONS
                    890: ;;
                    891: 
                    892: (define_expand "movhi"
                    893:   [(set (match_operand:HI 0 "general_operand" "")
                    894:        (match_operand:HI 1 "general_operand" ""))]
                    895:   ""
                    896:   "
                    897: {
                    898:   if (emit_move_sequence (operands, HImode))
                    899:     DONE;
                    900: }")
                    901: 
                    902: 
                    903: (define_insn "match_movhi1"
                    904:   [(set (match_operand:HI 0 "nonimmediate_operand"  "=A,Z,A,d,d,m,?d,*Y,t,f")
                    905:        (match_operand:HI 1 "general_operand"        "d,A,K,i,m,d,*Y,?d,t,f"))]
                    906:   "register_operand(operands[0], HImode)
                    907:    || register_operand(operands[1], HImode)"
                    908:   "*
                    909: {
                    910:        switch (which_alternative)
                    911:         {
                    912:                /* register to accumulator */
                    913:                case 0:
                    914:                   return \"%0=%1\";
                    915:                case 1:
                    916:                   return \"%u0=%u1\;%w0=%w1\";
                    917:                case 2:
                    918:                   return \"%0=%0^%0\";
                    919:                case 3:
                    920:                     return \"%u0=%U1\;%w0=%H1\";
                    921:                case 4:
                    922:                   double_reg_from_memory(operands);
                    923:                   return \"\";
                    924:                case 5:
                    925:                   double_reg_to_memory(operands);
                    926:                   return \"\";
                    927:                case 6:
                    928:                case 7:
                    929:                   return \"%u0=%u1\;%w0=%w1\";
                    930:                case 8:
                    931:                case 9:
                    932:                   return \"\";
                    933:         }
                    934: }"
                    935: [(set_attr "type" "move,move,load_i,load_i,load,store,load,store,move,move")])
                    936: 
                    937: 
                    938: ;; NOTE: It is cheaper to do 'y = *r0', than 'r0 = *r0'.
                    939: 
                    940: (define_expand "movqi"
                    941:   [(set (match_operand:QI 0 "nonimmediate_operand" "")
                    942:        (match_operand:QI 1 "general_operand" ""))]
                    943:   ""
                    944:   "
                    945: {
                    946:   if (emit_move_sequence (operands, QImode))
                    947:     DONE;
                    948: }")
                    949: 
                    950: ;; The movqi pattern with the parallel is used for addqi insns (which have a parallel)
                    951: ;; that are turned into moveqi insns by the flow phase. This happens when a auto-increment
                    952: ;; is detected.
                    953: 
                    954: (define_insn "match_movqi1"
                    955:   [(parallel [(set (match_operand:QI 0 "nonimmediate_operand" "=A,r,aW,c,?D,m<>,e,Y,r,xyz,m<>")
                    956:                   (match_operand:QI 1 "general_operand"       "r,A,J,i,m<>,D,Y,e,0,m<>,xyz"))
                    957:              (clobber (match_scratch:QI 2 "=X,X,X,X,X,X,X,X,X,X,X"))])]
                    958:   "register_operand(operands[0], QImode)
                    959:    || register_operand(operands[1], QImode)"
                    960:   "*
                    961: {
                    962:        switch (which_alternative)
                    963:        {
                    964:                case 0:
                    965:                   /* We have to use the move mneumonic otherwise the 1610 will
                    966:                      attempt to transfer all 32-bits of 'y', 'p' or an accumualtor
                    967:                      , which we don't want */
                    968:                   if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD
                    969:                        || IS_ACCUM_REG(REGNO(operands[1])))
                    970:                       return \"move %0=%1\";
                    971:                   else
                    972:                       return \"%0=%1\";
                    973: 
                    974:                case 1:
                    975:                   return \"%0=%1\";
                    976: 
                    977:                case 2:
                    978:                   return \"set %0=%H1\";
                    979: 
                    980:                case 3:
                    981:                    return \"%0=%H1\";
                    982: 
                    983:                case 4:
                    984:                   return \"%0=%1\";
                    985: 
                    986:                case 5:
                    987:                case 6:
                    988:                    return \"%0=%1\";
                    989: 
                    990:                case 7:
                    991:                   return \"%0=%1\";
                    992: 
                    993:                case 8:
                    994:                   return \"\";
                    995: 
                    996:                 case 9: case 10:
                    997:                   return \"%0=%1\";
                    998:        }
                    999: }")
                   1000: 
                   1001: (define_insn "match_movqi2"
                   1002:   [(set (match_operand:QI 0 "nonimmediate_operand" "=A,r,aW,c,?D,m<>,e,Y,r,xyz,m<>")
                   1003:        (match_operand:QI 1 "general_operand"       "r,A,J,i,m<>,D,Y,e,0,m<>,xyz"))]
                   1004:   "register_operand(operands[0], QImode)
                   1005:    || register_operand(operands[1], QImode)"
                   1006:   "*
                   1007: {
                   1008:        switch (which_alternative)
                   1009:        {
                   1010:                case 0:
                   1011:                   /* We have to use the move mneumonic otherwise the 1610 will
                   1012:                      attempt to transfer all 32-bits of 'y', 'p' or an accumualtor
                   1013:                      , which we don't want */
                   1014:                   if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD
                   1015:                        || IS_ACCUM_REG(REGNO(operands[1])))
                   1016:                       return \"move %0=%1\";
                   1017:                   else
                   1018:                       return \"%0=%1\";
                   1019: 
                   1020:                case 1:
                   1021:                   return \"%0=%1\";
                   1022: 
                   1023:                case 2:
                   1024:                   return \"set %0=%H1\";
                   1025: 
                   1026:                case 3:
                   1027:                    return \"%0=%H1\";
                   1028: 
                   1029:                case 4:
                   1030:                   return \"%0=%1\";
                   1031: 
                   1032:                case 5:
                   1033:                case 6:
                   1034:                    return \"%0=%1\";
                   1035: 
                   1036:                case 7:
                   1037:                   return \"%0=%1\";
                   1038: 
                   1039:                case 8:
                   1040:                   return \"\";
                   1041: 
                   1042:                 case 9: case 10:
                   1043:                   return \"%0=%1\";
                   1044:        }
                   1045: }")
                   1046: 
                   1047: (define_expand "reload_inqi"
                   1048:   [(set (match_operand:QI 0 "register_operand" "=u")
                   1049:         (match_operand:QI 1 "sp_operand" ""))
                   1050:    (clobber (match_operand:QI 2 "register_operand" "=&q"))]
                   1051:   ""
                   1052:   "
                   1053: {
                   1054:   rtx addr_reg = XEXP (operands[1], 0);
                   1055:   rtx offset = XEXP (operands[1], 1);
                   1056: 
                   1057:   /* First, move the frame or stack pointer to the accumulator */
                   1058:   emit_move_insn (operands[0], addr_reg);
                   1059: 
                   1060:   /* Then generate the add insn */
                   1061:   emit_insn (gen_rtx (PARALLEL, VOIDmode, 
                   1062:                      gen_rtvec (2,
                   1063:                                 gen_rtx (SET, VOIDmode, operands[0], 
                   1064:                                          gen_rtx (PLUS, QImode, operands[0], offset)),
                   1065:                                 gen_rtx (CLOBBER, VOIDmode, operands[2]))));
                   1066:   DONE;
                   1067: }")
                   1068: 
                   1069: (define_expand "reload_inhi"
                   1070:   [(set (match_operand:HI 0 "register_operand" "=r")
                   1071:         (match_operand:HI 1 "register_operand" "r"))
                   1072:    (clobber (match_operand:QI 2 "register_operand" "=&h"))]
                   1073:   ""
                   1074:   "
                   1075: {
                   1076:   /* Check for an overlap of operand 2 (an accumulator) with
                   1077:      the msw of operand 0. If we have an overlap we must reverse
                   1078:      the order of the moves. */
                   1079: 
                   1080:   if (REGNO(operands[2]) == REGNO(operands[0]))
                   1081:     {
                   1082:       emit_move_insn (operands[2], operand_subword (operands[1], 1, 0, HImode));
                   1083:       emit_move_insn (operand_subword (operands[0], 1, 0, HImode), operands[2]);
                   1084:       emit_move_insn (operands[2], operand_subword (operands[1], 0, 0, HImode));
                   1085:       emit_move_insn (operand_subword (operands[0], 0, 0, HImode), operands[2]);
                   1086:     }
                   1087:   else
                   1088:     {
                   1089:       emit_move_insn (operands[2], operand_subword (operands[1], 0, 0, HImode));
                   1090:       emit_move_insn (operand_subword (operands[0], 0, 0, HImode), operands[2]);
                   1091:       emit_move_insn (operands[2], operand_subword (operands[1], 1, 0, HImode));
                   1092:       emit_move_insn (operand_subword (operands[0], 1, 0, HImode), operands[2]);
                   1093:     }
                   1094: 
                   1095:   DONE;
                   1096: }")
                   1097: 
                   1098: 
                   1099: (define_expand "reload_outhi"
                   1100:   [(set (match_operand:HI 0 "register_operand" "=r")
                   1101:         (match_operand:HI 1 "register_operand" "r"))
                   1102:    (clobber (match_operand:QI 2 "register_operand" "=&h"))]
                   1103:   ""
                   1104:   "
                   1105: {
                   1106:        emit_move_insn (operands[2], operand_subword (operands[1], 0, 0, HImode));
                   1107:        emit_move_insn (operand_subword (operands[0], 0, 0, HImode), operands[2]);
                   1108:        emit_move_insn (operands[2], operand_subword (operands[1], 1, 0, HImode));
                   1109:        emit_move_insn (operand_subword (operands[0], 1, 0, HImode), operands[2]);
                   1110:        DONE;
                   1111: }")
                   1112: 
                   1113: (define_expand "movstrqi"
                   1114:   [(parallel [(set (match_operand:BLK 0 "memory_operand" "")
                   1115:                   (match_operand:BLK 1 "memory_operand" ""))
                   1116:              (use (match_operand:QI 2 "const_int_operand" ""))
                   1117:              (use (match_operand:QI 3 "const_int_operand" ""))
                   1118:              (clobber (match_scratch:QI 4 ""))
                   1119:              (clobber (match_dup 5))
                   1120:              (clobber (match_dup 6))])]
                   1121:   ""
                   1122:   "
                   1123: {
                   1124:   rtx addr0, addr1;
                   1125: 
                   1126:   if (GET_CODE (operands[2]) != CONST_INT)
                   1127:     FAIL;
                   1128: 
                   1129:   if (INTVAL(operands[2]) > 127)
                   1130:     FAIL;
                   1131: 
                   1132:   addr0 = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
                   1133:   addr1 = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
                   1134: 
                   1135:   operands[5] = addr0;
                   1136:   operands[6] = addr1;
                   1137: 
                   1138:   operands[0] = gen_rtx (MEM, BLKmode, addr0);
                   1139:   operands[1] = gen_rtx (MEM, BLKmode, addr1);
                   1140: }")
                   1141: 
                   1142: (define_insn ""
                   1143:   [(set (mem:BLK (match_operand:QI 0 "register_operand" "a"))
                   1144:        (mem:BLK (match_operand:QI 1 "register_operand" "a")))
                   1145:    (use (match_operand:QI 2 "const_int_operand" "n"))
                   1146:    (use (match_operand:QI 3 "immediate_operand" "i"))
                   1147:    (clobber (match_scratch:QI 4 "=x"))
                   1148:    (clobber (match_dup 0))
                   1149:    (clobber (match_dup 1))]
                   1150:   ""
                   1151:   "*
                   1152: { return output_block_move (operands); }")
                   1153: 
                   1154: 
                   1155: ;; Floating point move insns
                   1156: 
                   1157: 
                   1158: (define_expand "movhf"
                   1159:   [(set (match_operand:HF 0 "general_operand" "")
                   1160:        (match_operand:HF 1 "general_operand" ""))]
                   1161:   ""
                   1162:   "
                   1163: {
                   1164:   if (emit_move_sequence (operands, HFmode))
                   1165:     DONE;
                   1166: }")
                   1167: 
                   1168: (define_insn "match_movhf"
                   1169:   [(set (match_operand:HF 0 "nonimmediate_operand" "=A,Z,d,d,m,d,Y")
                   1170:        (match_operand:HF 1 "general_operand"       "d,A,F,m,d,Y,d"))]
                   1171:   ""
                   1172:   "*
                   1173: {
                   1174:        /* NOTE: When loading the register 16 bits at a time we
                   1175:           MUST load the high half FIRST (because the 1610 zeros
                   1176:           the low half) and then load the low half */
                   1177: 
                   1178:        switch (which_alternative)
                   1179:         {
                   1180:                /* register to accumulator */
                   1181:                case 0:
                   1182:                   return \"%0=%1\";
                   1183:                case 1:
                   1184:                   return \"%u0=%u1\;%w0=%w1\";
                   1185:                case 2:
                   1186:                   output_dsp16xx_float_const(operands);
                   1187:                   return \"\";
                   1188:                case 3:
                   1189:                   double_reg_from_memory(operands);
                   1190:                   return \"\";
                   1191:                case 4:
                   1192:                   double_reg_to_memory(operands);
                   1193:                   return \"\";
                   1194:                case 5:
                   1195:                case 6:
                   1196:                   return \"%u0=%u1\;%w0=%w1\";
                   1197:         }
                   1198: }"
                   1199: [(set_attr "type" "move,move,load_i,load,store,load,store")])
                   1200: 
                   1201: 
                   1202: 
                   1203: (define_expand "reload_inhf"
                   1204:   [(set (match_operand:HF 0 "register_operand" "=r")
                   1205:         (match_operand:HF 1 "register_operand" "r"))
                   1206:    (clobber (match_operand:QI 2 "register_operand" "=&h"))]
                   1207:   ""
                   1208:   "
                   1209: {
                   1210:   /* Check for an overlap of operand 2 (an accumulator) with
                   1211:      the msw of operand 0. If we have an overlap we must reverse
                   1212:      the order of the moves. */
                   1213: 
                   1214:   if (REGNO(operands[2]) == REGNO(operands[0]))
                   1215:     {
                   1216:       emit_move_insn (operands[2], operand_subword (operands[1], 1, 0, HFmode));
                   1217:       emit_move_insn (operand_subword (operands[0], 1, 0, HFmode), operands[2]);
                   1218:       emit_move_insn (operands[2], operand_subword (operands[1], 0, 0, HFmode));
                   1219:       emit_move_insn (operand_subword (operands[0], 0, 0, HFmode), operands[2]);
                   1220:     }
                   1221:   else
                   1222:     {
                   1223:       emit_move_insn (operands[2], operand_subword (operands[1], 0, 0, HFmode));
                   1224:       emit_move_insn (operand_subword (operands[0], 0, 0, HFmode), operands[2]);
                   1225:       emit_move_insn (operands[2], operand_subword (operands[1], 1, 0, HFmode));
                   1226:       emit_move_insn (operand_subword (operands[0], 1, 0, HFmode), operands[2]);
                   1227:     }
                   1228:   
                   1229:   DONE;
                   1230: }")
                   1231: 
                   1232: (define_expand "reload_outhf"
                   1233:   [(set (match_operand:HF 0 "register_operand" "=r")
                   1234:         (match_operand:HF 1 "register_operand" "r"))
                   1235:    (clobber (match_operand:QI 2 "register_operand" "=&h"))]
                   1236:   ""
                   1237:   "
                   1238: {
                   1239:        emit_move_insn (operands[2], operand_subword (operands[1], 0, 0, HFmode));
                   1240:        emit_move_insn (operand_subword (operands[0], 0, 0, HFmode), operands[2]);
                   1241:        emit_move_insn (operands[2], operand_subword (operands[1], 1, 0, HFmode));
                   1242:        emit_move_insn (operand_subword (operands[0], 1, 0, HFmode), operands[2]);
                   1243:        DONE;
                   1244: }")
                   1245: 
                   1246: 
                   1247: ;;
                   1248: ;; CONVERSION INSTRUCTIONS
                   1249: ;;
                   1250: 
                   1251: (define_expand "extendqihi2"
                   1252:   [(clobber (match_dup 2))
                   1253:    (set (match_dup 3) (match_operand:QI 1 "register_operand" ""))
                   1254:    (set (match_operand:HI 0 "register_operand" "")
                   1255:        (ashift:HI (match_dup 2)
                   1256:                   (const_int 16)))
                   1257:    (set (match_dup 0)
                   1258:        (ashiftrt:HI (match_dup 0) (const_int 16)))]
                   1259:   ""
                   1260:   "
                   1261: {
                   1262:        operands[2] = gen_reg_rtx (HImode);
                   1263:        operands[3] = gen_rtx (SUBREG, QImode, operands[2], 1);
                   1264: }")
                   1265: 
                   1266: ;;(define_insn "extendqihi2"
                   1267: ;;  [(set (match_operand:HI 0 "register_operand" "=A")
                   1268: ;;        (sign_extend:HI (match_operand:QI 1 "register_operand" "h")))]
                   1269: ;;  ""
                   1270: ;;  "%0 = %1 >> 16")
                   1271: 
                   1272: ;;(define_insn "zero_extendqihi2"
                   1273: ;;  [(set (match_operand:HI 0 "register_operand" "=t,f,A,?d,?A")
                   1274: ;;        (zero_extend:HI (match_operand:QI 1 "register_operand" "w,z,ku,A,r")))]
                   1275: ;;  ""
                   1276: ;;  "*
                   1277: ;; {
                   1278: ;;  switch (which_alternative)
                   1279: ;;    {
                   1280: ;;    case 0:
                   1281: ;;    case 1:
                   1282: ;;      return \"%0=0\";
                   1283: ;;
                   1284: ;;    case 2:
                   1285: ;;      if (REGNO(operands[1]) == (REGNO(operands[0]) + 1))
                   1286: ;;        return \"%0=0\";
                   1287: ;;      else
                   1288: ;;     return \"%w0=%1\;%0=0\";
                   1289: ;;    case 3:
                   1290: ;;      return \"%w0=%1\;%0=0\";
                   1291: ;;
                   1292: ;;    case 4:
                   1293: ;;      if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD
                   1294: ;;       || IS_ACCUM_REG(REGNO(operands[1])))
                   1295: ;;     return \"move %w0=%1\;%0=0\";
                   1296: ;;      else
                   1297: ;;     return \"%w0=%1\;%0=0\";
                   1298: ;;    }
                   1299: ;; }")
                   1300: 
                   1301: (define_expand "zero_extendqihi2"
                   1302:   [(clobber (match_dup 2))
                   1303:    (set (match_dup 3) (match_operand:QI 1 "register_operand" ""))
                   1304:    (set (match_operand:HI 0 "register_operand" "")
                   1305:        (ashift:HI (match_dup 2)
                   1306:                   (const_int 16)))
                   1307:    (set (match_dup 0)
                   1308:        (lshiftrt:HI (match_dup 0) (const_int 16)))]
                   1309:   ""
                   1310:   "
                   1311: {
                   1312:        operands[2] = gen_reg_rtx (HImode);
                   1313:        operands[3] = gen_rtx (SUBREG, QImode, operands[2], 1);
                   1314: }")
                   1315: 
                   1316: 
                   1317: (define_expand "floathihf2"
                   1318:   [(set (match_operand:HF 0 "register_operand" "")
                   1319:        (float:HF (match_operand:HI 1 "register_operand" "")))]
                   1320:   ""
                   1321:   "
                   1322: {
                   1323:   if (!dsp16xx_floathihf2_libcall)
                   1324:     dsp16xx_floathihf2_libcall = gen_rtx (SYMBOL_REF, Pmode, FLOATHIHF2_LIBCALL);
                   1325:   
                   1326:   emit_library_call (dsp16xx_floathihf2_libcall, 1, HFmode, 1,
                   1327:                     operands[1], HImode);
                   1328:   emit_move_insn (operands[0], hard_libcall_value(HFmode));
                   1329:   DONE;
                   1330: }")
                   1331: 
                   1332: (define_expand "fix_trunchfhi2"
                   1333:   [(set (match_operand:HI 0 "register_operand" "")
                   1334:        (fix:HI (match_operand:HF 1 "register_operand" "")))]
                   1335:   ""
                   1336:   "
                   1337: {
                   1338:   if (!dsp16xx_fixhfhi2_libcall)
                   1339:     dsp16xx_fixhfhi2_libcall = gen_rtx (SYMBOL_REF, Pmode, FIXHFHI2_LIBCALL);
                   1340:   
                   1341:   emit_library_call (dsp16xx_fixhfhi2_libcall, 1, HImode, 1,
                   1342:                     operands[1], HFmode);
                   1343:   emit_move_insn (operands[0], hard_libcall_value(HImode));
                   1344:   DONE;
                   1345: }")
                   1346: 
                   1347: (define_expand "fixuns_trunchfhi2"
                   1348:   [(set (match_operand:HI 0 "register_operand" "")
                   1349:        (unsigned_fix:HI (match_operand:HF 1 "register_operand" "")))]
                   1350:   ""
                   1351:   "
                   1352: {
                   1353:   rtx reg1 = gen_reg_rtx (HFmode);
                   1354:   rtx reg2 = gen_reg_rtx (HFmode);
                   1355:   rtx reg3 = gen_reg_rtx (HImode);
                   1356:   rtx label1 = gen_label_rtx ();
                   1357:   rtx label2 = gen_label_rtx ();
                   1358:   REAL_VALUE_TYPE offset = REAL_VALUE_LDEXP (1.0, 31);
                   1359: 
                   1360:   if (reg1)                    /* turn off complaints about unreached code */
                   1361:     {
                   1362:       emit_move_insn (reg1, immed_real_const_1 (offset, HFmode));
                   1363:       do_pending_stack_adjust ();
                   1364: 
                   1365:       emit_insn (gen_cmphf (operands[1], reg1));
                   1366:       emit_jump_insn (gen_bge (label1));
                   1367: 
                   1368:       emit_insn (gen_fix_trunchfhi2 (operands[0], operands[1]));
                   1369:       emit_jump_insn (gen_rtx (SET, VOIDmode, pc_rtx,
                   1370:                               gen_rtx (LABEL_REF, VOIDmode, label2)));
                   1371:       emit_barrier ();
                   1372: 
                   1373:       emit_label (label1);
                   1374:       emit_insn (gen_subhf3 (reg2, operands[1], reg1));
                   1375:       emit_move_insn (reg3, GEN_INT (0x80000000));;
                   1376: 
                   1377:       emit_insn (gen_fix_trunchfhi2 (operands[0], reg2));
                   1378:       emit_insn (gen_iorhi3 (operands[0], operands[0], reg3));
                   1379: 
                   1380:       emit_label (label2);
                   1381: 
                   1382:       /* allow REG_NOTES to be set on last insn (labels don't have enough
                   1383:         fields, and can't be used for REG_NOTES anyway).  */
                   1384:       emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
                   1385:       DONE;
                   1386:     }
                   1387: }")
                   1388: 
                   1389: ;;
                   1390: ;; SHIFT INSTRUCTIONS
                   1391: ;;
                   1392: 
                   1393: (define_insn ""
                   1394:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1395:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1396:                      (const_int 1)))]
                   1397:   ""
                   1398:   "%0=%1>>1"
                   1399:   [(set_attr "type" "special")])
                   1400: 
                   1401: (define_insn ""
                   1402:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1403:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1404:                      (const_int 4)))]
                   1405:   ""
                   1406:   "%0=%1>>4"
                   1407:   [(set_attr "type" "special")])
                   1408: 
                   1409: (define_insn ""
                   1410:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1411:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1412:                      (const_int 8)))]
                   1413:   ""
                   1414:   "%0=%1>>8"
                   1415:   [(set_attr "type" "special")])
                   1416: 
                   1417: (define_insn ""
                   1418:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1419:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1420:                      (const_int 16)))]
                   1421:   ""
                   1422:   "%0=%1>>16"
                   1423:   [(set_attr "type" "special")])
                   1424: 
                   1425: ;;
                   1426: ;; Arithmetic Right shift
                   1427: 
                   1428: (define_expand "ashrhi3"
                   1429:   [(set (match_operand:HI 0 "register_operand" "")
                   1430:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "")
                   1431:                      (match_operand:QI 2 "nonmemory_operand" "")))]
                   1432:   ""
                   1433:   "
                   1434: {
                   1435:   if (!TARGET_BMU)
                   1436:   {
                   1437:       /* If we are shifting by a constant we can do it in 1 or more
                   1438:         1600 core shift instructions. The core instructions can
                   1439:         shift by 1, 4, 8, or 16. */
                   1440:       
                   1441:       if (GET_CODE(operands[2]) == CONST_INT)
                   1442:        ;
                   1443:       else
                   1444:       {
                   1445:        rtx label1 = gen_label_rtx ();
                   1446:        rtx label2 = gen_label_rtx ();
                   1447: 
                   1448: #if 0
                   1449:        if (!dsp16xx_ashrhi3_libcall)
                   1450:          dsp16xx_ashrhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, ASHRHI3_LIBCALL);
                   1451: 
                   1452:          emit_library_call (dsp16xx_ashrhi3_libcall, 1, HImode, 2,
                   1453:                             operands[1], HImode,
                   1454:                             operands[2], QImode);
                   1455:          emit_move_insn (operands[0], hard_libcall_value(HImode));
                   1456:          DONE;
                   1457: #else
                   1458:        do_pending_stack_adjust ();
                   1459:        emit_insn (gen_tstqi (operands[2]));
                   1460:        emit_jump_insn (gen_bne (label1));
                   1461:        emit_move_insn (operands[0], operands[1]);
                   1462:        emit_jump_insn (gen_jump (label2));
                   1463:        emit_barrier ();
                   1464:        emit_label (label1);
                   1465: 
                   1466:        if (GET_CODE(operands[2]) != MEM)
                   1467:          {
                   1468:            rtx stack_slot;
                   1469:            
                   1470:            stack_slot = assign_stack_temp (QImode, GET_MODE_SIZE(QImode), 0);
                   1471:            stack_slot = change_address (stack_slot, VOIDmode, XEXP (stack_slot, 0));
                   1472:            emit_move_insn (stack_slot, operands[2]);
                   1473:            operands[2] = stack_slot;
                   1474:          }
                   1475: 
                   1476:        emit_insn (gen_match_ashrhi3_nobmu (operands[0], operands[1], operands[2]));
                   1477:        emit_label (label2);
                   1478:        DONE;
                   1479: #endif
                   1480:       }
                   1481:   }
                   1482: }")
                   1483: 
                   1484: (define_insn "match_ashrhi3_bmu"
                   1485:   [(set (match_operand:HI 0 "register_operand" "=A,A,A")
                   1486:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "A,A,!A")
                   1487:                      (match_operand:QI 2 "nonmemory_operand" "B,I,h")))]
                   1488:   "TARGET_BMU"
                   1489:   "@
                   1490:    %0=%1>>%2
                   1491:    %0=%1>>%H2
                   1492:    %0=%1>>%2"
                   1493:   [(set_attr "type" "shift,shift_i,shift")])
                   1494: 
                   1495: (define_insn "match_ashrhi3_nobmu"
                   1496:   [(set (match_operand:HI 0 "register_operand" "=A,A")
                   1497:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "A,0")
                   1498:                      (match_operand:QI 2 "general_operand" "n,m")))]
                   1499:   "!TARGET_BMU"
                   1500:   "*
                   1501: {
                   1502:   if (which_alternative == 0)
                   1503:     {
                   1504:       emit_1600_core_shift (ASHIFTRT, operands, INTVAL(operands[2]));
                   1505:       return \"\";
                   1506:     }
                   1507:   else
                   1508:     {
                   1509:       output_asm_insn (\"cloop=%2\", operands);
                   1510:       output_asm_insn (\"do 0 \{\", operands);
                   1511:       output_asm_insn (\"%0=%0>>1\", operands);
                   1512:       return \"\}\";
                   1513:     }
                   1514: }")
                   1515:                   
                   1516: 
                   1517: 
                   1518: ;;
                   1519: ;; Logical Right Shift
                   1520: 
                   1521: (define_insn ""
                   1522:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1523:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1524:                      (const_int 1)))]
                   1525:   ""
                   1526:   "%0=%1>>1\;%0=%b0&0x7fff"
                   1527:   [(set_attr "type" "special")])
                   1528: 
                   1529: (define_insn ""
                   1530:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1531:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1532:                      (const_int 4)))]
                   1533:   ""
                   1534:   "%0=%1>>4\;%0=%b0&0x0fff"
                   1535:   [(set_attr "type" "special")])
                   1536: 
                   1537: (define_insn ""
                   1538:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1539:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1540:                      (const_int 8)))]
                   1541:   ""
                   1542:   "%0=%1>>8\;%0=%b0&0x00ff"
                   1543:   [(set_attr "type" "special")])
                   1544: 
                   1545: (define_insn ""
                   1546:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1547:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "A")
                   1548:                      (const_int 16)))]
                   1549:   ""
                   1550:   "%0=%1>>16\;%0=%b0&0x0000"
                   1551:   [(set_attr "type" "special")])
                   1552: 
                   1553: (define_expand "lshrhi3"
                   1554:   [(set (match_operand:HI 0 "register_operand" "")
                   1555:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "")
                   1556:                      (match_operand:QI 2 "nonmemory_operand" "")))]
                   1557:   ""
                   1558:   "
                   1559: {
                   1560:   if (!TARGET_BMU)
                   1561:     {
                   1562:       /* If we are shifting by a constant we can do it in 1 or more
                   1563:         1600 core shift instructions. The core instructions can
                   1564:         shift by 1, 4, 8, or 16. */
                   1565:       
                   1566:       if (GET_CODE(operands[2]) == CONST_INT)
                   1567:        emit_insn (gen_match_lshrhi3_nobmu (operands[0], operands[1], operands[2]));    
                   1568:       else
                   1569:        {
                   1570:          rtx label1 = gen_label_rtx ();
                   1571:          rtx label2 = gen_label_rtx ();
                   1572: #if 0
                   1573:          if (!dsp16xx_lshrhi3_libcall)
                   1574:            dsp16xx_lshrhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, LSHRHI3_LIBCALL);
                   1575:          
                   1576:          emit_library_call (dsp16xx_lshrhi3_libcall, 1, HImode, 2,
                   1577:                             operands[1], HImode,
                   1578:                             operands[2], QImode);
                   1579:          emit_move_insn (operands[0], hard_libcall_value(HImode));
                   1580:          DONE;
                   1581: #else
                   1582:          do_pending_stack_adjust ();
                   1583:          emit_insn (gen_tstqi (operands[2]));
                   1584:          emit_jump_insn (gen_bne (label1));
                   1585:          emit_move_insn (operands[0], operands[1]);
                   1586:          emit_jump_insn (gen_jump (label2));
                   1587:          emit_barrier ();
                   1588:          emit_label (label1);
                   1589: 
                   1590:          if (GET_CODE(operands[2]) != MEM)
                   1591:            {
                   1592:              rtx stack_slot;
                   1593:            
                   1594:              stack_slot = assign_stack_temp (QImode, GET_MODE_SIZE(QImode), 0);
                   1595:              stack_slot = change_address (stack_slot, VOIDmode, XEXP (stack_slot, 0));
                   1596:              emit_move_insn (stack_slot, operands[2]);
                   1597:              operands[2] = stack_slot;
                   1598:            }
                   1599: 
                   1600:          emit_insn (gen_match_lshrhi3_nobmu (operands[0], operands[1], operands[2]));
                   1601:          emit_label (label2);
                   1602:          DONE;
                   1603: #endif
                   1604:        }
                   1605:     }
                   1606: }")
                   1607: 
                   1608: (define_insn "match_lshrhi3"
                   1609:   [(set (match_operand:HI 0 "register_operand" "=A,A,A")
                   1610:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "A,A,!A")
                   1611:                      (match_operand:QI 2 "nonmemory_operand" "B,I,h")))]
                   1612:   "TARGET_BMU"
                   1613:   "@
                   1614:    %0=%1>>>%2
                   1615:    %0=%1>>>%H2
                   1616:    %0=%1>>>%2"
                   1617:   [(set_attr "type" "shift,shift_i,shift")])
                   1618: 
                   1619: (define_insn "match_lshrhi3_nobmu"
                   1620:   [(set (match_operand:HI 0 "register_operand" "=A,A")
                   1621:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "A,0")
                   1622:                      (match_operand:QI 2 "general_operand" "n,m")))
                   1623:    (clobber (match_scratch:QI 3 "=X,Y"))]
                   1624:   "!TARGET_BMU"
                   1625:   "*
                   1626: {
                   1627:   if (which_alternative == 0)
                   1628:     {
                   1629:       emit_1600_core_shift (LSHIFTRT, operands, INTVAL(operands[2]));
                   1630:       return \"\";
                   1631:     }
                   1632:   else
                   1633:     {
                   1634:       output_asm_insn (\"%3=psw\;psw=0\",operands);
                   1635:       output_asm_insn (\"cloop=%2\", operands);
                   1636:       output_asm_insn (\"do 0 \{\", operands);
                   1637:       output_asm_insn (\"%0=%0>>1\", operands);
                   1638:       output_asm_insn (\"\}\", operands);
                   1639:       return \"psw=%3\";
                   1640:     }
                   1641: }")
                   1642: 
                   1643: 
                   1644: ;;
                   1645: ;; Arithmetic Left shift
                   1646: 
                   1647: ;; Start off with special case arithmetic left shift by 1,4,8 or 16.
                   1648: 
                   1649: 
                   1650: (define_insn ""
                   1651:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1652:         (ashift:HI (match_operand:HI 1 "register_operand" "A")
                   1653:                    (const_int 1)))]
                   1654:   ""
                   1655:   "%0=%1<<1"
                   1656:   [(set_attr "type" "special")])
                   1657: 
                   1658: (define_insn ""
                   1659:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1660:         (ashift:HI (match_operand:HI 1 "register_operand" "A")
                   1661:                    (const_int 4)))]
                   1662:   ""
                   1663:   "%0=%1<<4"
                   1664:   [(set_attr "type" "special")])
                   1665: 
                   1666: (define_insn ""
                   1667:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1668:         (ashift:HI (match_operand:HI 1 "register_operand" "A")
                   1669:                    (const_int 8)))]
                   1670:   ""
                   1671:   "%0=%1<<8"
                   1672:   [(set_attr "type" "special")])
                   1673: 
                   1674: (define_insn ""
                   1675:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1676:        (ashift:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "A"))
                   1677:                   (const_int 16)))]
                   1678:   ""
                   1679:   "%0=%1<<16"
                   1680:   [(set_attr "type" "special")])
                   1681: 
                   1682: (define_insn ""
                   1683:   [(set (match_operand:HI 0 "register_operand" "=A")
                   1684:         (ashift:HI (match_operand:HI 1 "general_operand" "A")
                   1685:                    (const_int 16)))]
                   1686:   ""
                   1687:   "%0=%1<<16"
                   1688:   [(set_attr "type" "special")])
                   1689: 
                   1690: 
                   1691: 
                   1692: ;; Normal Arithmetic Shift Left
                   1693: 
                   1694: 
                   1695: (define_expand "ashlhi3"
                   1696:   [(set (match_operand:HI 0 "register_operand" "")
                   1697:         (ashift:HI (match_operand:HI 1 "register_operand" "")
                   1698:                    (match_operand:QI 2 "nonmemory_operand" "")))]
                   1699:   ""
                   1700:   "
                   1701: {
                   1702:   if (!TARGET_BMU)
                   1703:   {
                   1704:       /* If we are shifting by a constant we can do it in 1 or more
                   1705:         1600 core shift instructions. The core instructions can
                   1706:         shift by 1, 4, 8, or 16. */
                   1707:       
                   1708:       if (GET_CODE(operands[2]) == CONST_INT)
                   1709:        ;
                   1710:       else
                   1711:       {
                   1712:        rtx label1 = gen_label_rtx ();
                   1713:        rtx label2 = gen_label_rtx ();
                   1714: #if 0
                   1715:        if (!dsp16xx_ashlhi3_libcall)
                   1716:          dsp16xx_ashlhi3_libcall = gen_rtx (SYMBOL_REF, Pmode, ASHLHI3_LIBCALL);
                   1717: 
                   1718:          emit_library_call (dsp16xx_ashlhi3_libcall, 1, HImode, 2,
                   1719:                             operands[1], HImode,
                   1720:                             operands[2], QImode);
                   1721:          emit_move_insn (operands[0], hard_libcall_value(HImode));
                   1722:          DONE;
                   1723: #else
                   1724:        do_pending_stack_adjust ();
                   1725:        emit_insn (gen_tstqi (operands[2]));
                   1726:        emit_jump_insn (gen_bne (label1));
                   1727:        emit_move_insn (operands[0], operands[1]);
                   1728:        emit_jump_insn (gen_jump (label2));
                   1729:        emit_barrier ();
                   1730:        emit_label (label1);
                   1731: 
                   1732:        if (GET_CODE(operands[2]) != MEM)
                   1733:          {
                   1734:            rtx stack_slot;
                   1735:            
                   1736:            stack_slot = assign_stack_temp (QImode, GET_MODE_SIZE(QImode), 0);
                   1737:            stack_slot = change_address (stack_slot, VOIDmode, XEXP (stack_slot, 0));
                   1738:            emit_move_insn (stack_slot, operands[2]);
                   1739:            operands[2] = stack_slot;
                   1740:          }
                   1741:        emit_insn (gen_match_ashlhi3_nobmu (operands[0], operands[1], operands[2]));
                   1742:        emit_label (label2);
                   1743:        DONE;
                   1744: #endif
                   1745:       }
                   1746:   }
                   1747: }")
                   1748: 
                   1749: (define_insn "match_ashlhi3"
                   1750:   [(set (match_operand:HI 0 "register_operand" "=A,A,A")
                   1751:         (ashift:HI (match_operand:HI 1 "register_operand" "A,A,A")
                   1752:                    (match_operand:QI 2 "nonmemory_operand" "B,I,!h")))]
                   1753:   "TARGET_BMU"
                   1754:   "@
                   1755:    %0=%1<<%2\;move %u0=%u0
                   1756:    %0=%1<<%H2\;move %u0=%u0
                   1757:    %0=%1<<%2\;move %u0=%u0"
                   1758:   [(set_attr "type" "shift,shift_i,shift")])
                   1759: 
                   1760: (define_insn "match_ashlhi3_nobmu"
                   1761:   [(set (match_operand:HI 0 "register_operand" "=A,A")
                   1762:         (ashift:HI (match_operand:HI 1 "register_operand" "A,0")
                   1763:                   (match_operand:QI 2 "general_operand" "n,m")))]
                   1764:   "!TARGET_BMU"
                   1765:   "*
                   1766: {
                   1767:   if (which_alternative == 0)
                   1768:     {
                   1769:       emit_1600_core_shift (ASHIFT, operands, INTVAL(operands[2]));
                   1770:       return \"\";
                   1771:     }
                   1772:   else
                   1773:     {
                   1774:       output_asm_insn (\"cloop=%2\", operands);
                   1775:       output_asm_insn (\"do 0 \{\", operands);
                   1776:       output_asm_insn (\"%0=%0<<1\", operands);
                   1777:       return \"\}\";
                   1778:     }
                   1779: }")
                   1780: 
                   1781: 
                   1782: 
                   1783: ;;
                   1784: ;; Jump Instructions
                   1785: ;;
                   1786: 
                   1787: (define_expand "beq"
                   1788:   [(set (pc)
                   1789:        (if_then_else (eq (match_dup 1)
                   1790:                          (const_int 0))
                   1791:                      (label_ref (match_operand 0 "" ""))
                   1792:                      (pc)))]
                   1793:   ""
                   1794:   "
                   1795: { 
                   1796:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1797:      operands[1] = (*dsp16xx_compare_gen)(EQ, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1798:    else
                   1799:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1800: }")
                   1801: 
                   1802: (define_expand "bne"
                   1803:   [(set (pc)
                   1804:        (if_then_else (ne (match_dup 1)
                   1805:                          (const_int 0))
                   1806:                      (label_ref (match_operand 0 "" ""))
                   1807:                      (pc)))]
                   1808:   ""
                   1809:   "
                   1810: { 
                   1811:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1812:      operands[1] = (*dsp16xx_compare_gen)(NE, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1813:    else
                   1814:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1815: }")
                   1816: 
                   1817: 
                   1818: (define_expand "bgt"
                   1819:   [(set (pc)
                   1820:        (if_then_else (gt (match_dup 1)
                   1821:                          (const_int 0))
                   1822:                      (label_ref (match_operand 0 "" ""))
                   1823:                      (pc)))]
                   1824:   ""
                   1825:   "
                   1826: { 
                   1827:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1828:      operands[1] = (*dsp16xx_compare_gen)(GT, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1829:    else
                   1830:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1831: }")
                   1832: 
                   1833: 
                   1834: (define_expand "bge"
                   1835:   [(set (pc)
                   1836:        (if_then_else (ge (match_dup 1)
                   1837:                          (const_int 0))
                   1838:                      (label_ref (match_operand 0 "" ""))
                   1839:                      (pc)))]
                   1840:   ""
                   1841:   "
                   1842: { 
                   1843:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1844:      operands[1] = (*dsp16xx_compare_gen)(GE, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1845:    else
                   1846:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1847: }")
                   1848: 
                   1849: 
                   1850: (define_expand "blt"
                   1851:   [(set (pc)
                   1852:        (if_then_else (lt (match_dup 1)
                   1853:                          (const_int 0))
                   1854:                      (label_ref (match_operand 0 "" ""))
                   1855:                      (pc)))]
                   1856:   ""
                   1857:   "
                   1858: { 
                   1859:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1860:      operands[1] = (*dsp16xx_compare_gen)(LT, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1861:    else
                   1862:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1863: }")
                   1864: 
                   1865: 
                   1866: (define_expand "ble"
                   1867:   [(set (pc)
                   1868:        (if_then_else (le (match_dup 1)
                   1869:                          (const_int 0))
                   1870:                      (label_ref (match_operand 0 "" ""))
                   1871:                      (pc)))]
                   1872:   ""
                   1873:   "
                   1874: { 
                   1875:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1876:      operands[1] = (*dsp16xx_compare_gen)(LE, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1877:    else
                   1878:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1879: }")
                   1880: 
                   1881: 
                   1882: (define_expand "bgtu"
                   1883:   [(set (pc)
                   1884:        (if_then_else (gtu (match_dup 1)
                   1885:                           (const_int 0))
                   1886:                      (label_ref (match_operand 0 "" ""))
                   1887:                      (pc)))]
                   1888:   ""
                   1889:   "
                   1890: { 
                   1891:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1892:      operands[1] = (*dsp16xx_compare_gen)(GTU, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1893:    else
                   1894:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1895: }")
                   1896: 
                   1897: 
                   1898: (define_expand "bgeu"
                   1899:   [(set (pc)
                   1900:        (if_then_else (geu (match_dup 1)
                   1901:                           (const_int 0))
                   1902:                      (label_ref (match_operand 0 "" ""))
                   1903:                      (pc)))]
                   1904:   ""
                   1905:   "
                   1906: { 
                   1907:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1908:      operands[1] = (*dsp16xx_compare_gen)(GEU, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1909:    else
                   1910:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1911: }")
                   1912: 
                   1913: 
                   1914: (define_expand "bltu"
                   1915:   [(set (pc)
                   1916:        (if_then_else (ltu (match_dup 1)
                   1917:                           (const_int 0))
                   1918:                      (label_ref (match_operand 0 "" ""))
                   1919:                      (pc)))]
                   1920:   ""
                   1921:   "
                   1922: { 
                   1923:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1924:      operands[1] = (*dsp16xx_compare_gen)(LTU, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1925:    else
                   1926:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1927: }")
                   1928: 
                   1929: 
                   1930: (define_expand "bleu"
                   1931:   [(set (pc)
                   1932:        (if_then_else (leu (match_dup 1)
                   1933:                           (const_int 0))
                   1934:                      (label_ref (match_operand 0 "" ""))
                   1935:                      (pc)))]
                   1936:   ""
                   1937:   "
                   1938: { 
                   1939:    if (dsp16xx_compare_gen == gen_compare_reg)
                   1940:      operands[1] = (*dsp16xx_compare_gen)(LEU, dsp16xx_compare_op0, dsp16xx_compare_op1);
                   1941:    else
                   1942:      operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0);
                   1943: }")
                   1944: 
                   1945: 
                   1946: (define_insn ""
                   1947:   [(set (pc)
                   1948:        (if_then_else (match_operator 1 "comparison_operator" 
                   1949:                                       [(cc0) (const_int 0)])
                   1950:                      (label_ref (match_operand 0 "" ""))
                   1951:                      (pc)))]
                   1952:   "!TARGET_NEAR_JUMP"
                   1953:   "pt=%l0\;if %C1 goto pt"
                   1954:   [(set_attr "type" "cond_jump")])
                   1955: 
                   1956: (define_insn ""
                   1957:   [(set (pc)
                   1958:        (if_then_else (match_operator 1 "comparison_operator" 
                   1959:                                       [(cc0) (const_int 0)])
                   1960:                      (label_ref (match_operand 0 "" ""))
                   1961:                      (pc)))]
                   1962:   "TARGET_NEAR_JUMP"
                   1963:   "if %C1 goto %l0"
                   1964:   [(set_attr "type" "cond_jump")])
                   1965: 
                   1966: ;;
                   1967: ;; Negated conditional jump instructions.
                   1968: ;; These are necessary because jump optimization can turn
                   1969: ;; direct-conditional branches into reverse-conditional
                   1970: ;; branches.
                   1971: 
                   1972: (define_insn ""
                   1973:   [(set (pc)
                   1974:        (if_then_else (match_operator 1 "comparison_operator" 
                   1975:                                       [(cc0) (const_int 0)])
                   1976:                      (pc)
                   1977:                      (label_ref (match_operand 0 "" ""))))]
                   1978:   "!TARGET_NEAR_JUMP"
                   1979:   "pt=%l0\;if %I1 goto pt"
                   1980:   [(set_attr "type" "cond_jump")])
                   1981: 
                   1982: (define_insn ""
                   1983:   [(set (pc)
                   1984:        (if_then_else (match_operator 1 "comparison_operator" 
                   1985:                                       [(cc0) (const_int 0)])
                   1986:                      (pc)
                   1987:                      (label_ref (match_operand 0 "" ""))))]
                   1988:   "TARGET_NEAR_JUMP"
                   1989:   "if %I1 goto %l0"
                   1990:   [(set_attr "type" "cond_jump")])
                   1991: 
                   1992: 
                   1993: ;;
                   1994: ;; JUMPS
                   1995: ;;
                   1996: 
                   1997: (define_insn "jump"
                   1998:   [(set (pc)
                   1999:         (label_ref (match_operand 0 "" "")))]
                   2000:   ""
                   2001:   "*
                   2002:    {
                   2003:        if (TARGET_NEAR_JUMP)
                   2004:            return \"goto %l0\";
                   2005:         else
                   2006:            return \"pt=%l0\;goto pt\";
                   2007:    }"
                   2008:    [(set_attr "type" "jump")])
                   2009: 
                   2010: 
                   2011: (define_insn "indirect_jump"
                   2012:   [(set (pc) (match_operand:QI 0 "register_operand" "A"))]
                   2013:   ""
                   2014:   "pt=%0\;goto pt"
                   2015:    [(set_attr "type" "jump")])
                   2016: 
                   2017: (define_insn "tablejump"
                   2018:   [(set (pc) (match_operand:QI 0 "register_operand" "A"))
                   2019:    (use (label_ref (match_operand 1 "" "")))]
                   2020:   ""
                   2021:   "pt=%0\;goto pt"
                   2022:    [(set_attr "type" "jump")])
                   2023: 
                   2024: ;;
                   2025: ;; FUNCTION CALLS
                   2026: ;;
                   2027: 
                   2028: ;; Call subroutine with no return value.
                   2029: 
                   2030: 
                   2031: (define_expand "call"
                   2032:   [(parallel [(call (match_operand:QI 0 "" "")
                   2033:                    (match_operand 1 "" ""))
                   2034:             (clobber (reg:QI 24))])]
                   2035:   ""
                   2036:   "
                   2037: {
                   2038:   if (GET_CODE (operands[0]) == MEM
                   2039:       && ! call_address_operand (XEXP (operands[0], 0), QImode))
                   2040:     operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
                   2041:                           force_reg (Pmode, XEXP (operands[0], 0)));
                   2042: }")
                   2043: 
                   2044: (define_insn ""
                   2045:   [(parallel [(call (mem:QI (match_operand:QI 0 "call_address_operand" "hR"))
                   2046:                            (match_operand 1 "" ""))
                   2047:              (clobber (reg:QI 24))])]
                   2048:   ""
                   2049:   "*
                   2050: {
                   2051:     if (GET_CODE (operands[0]) == REG || 
                   2052:        (GET_CODE(operands[0]) == SYMBOL_REF && !TARGET_NEAR_CALL))
                   2053:        return \"pt=%0\;call pt\";
                   2054:     else
                   2055:         return \"call %0\";
                   2056: }"
                   2057: [(set_attr "type" "call")])
                   2058: 
                   2059: ;; Call subroutine with return value.
                   2060: 
                   2061: (define_expand "call_value"
                   2062:   [(parallel [(set (match_operand 0 "register_operand" "=f")
                   2063:                  (call (match_operand:QI 1 "call_address_operand" "hR")
                   2064:                        (match_operand:QI 2 "" "")))
                   2065:              (clobber (reg:QI 24))])]
                   2066:   ""
                   2067:   "
                   2068: {
                   2069:   if (GET_CODE (operands[1]) == MEM
                   2070:       && ! call_address_operand (XEXP (operands[1], 0), QImode))
                   2071:     operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
                   2072:                           force_reg (Pmode, XEXP (operands[1], 0)));
                   2073: }")
                   2074: 
                   2075: (define_insn ""
                   2076:   [(parallel [(set (match_operand 0 "register_operand" "=f")
                   2077:                  (call (mem:QI (match_operand:QI 1 "call_address_operand" "hR"))
                   2078:                                (match_operand:QI 2 "" "")))
                   2079:              (clobber (reg:QI 24))])]
                   2080:   ""
                   2081:   "*
                   2082: {
                   2083:     if (GET_CODE (operands[1]) == REG ||
                   2084:        (GET_CODE(operands[1]) == SYMBOL_REF && !TARGET_NEAR_CALL))
                   2085:        return \"pt=%1\;call pt\";
                   2086:     else
                   2087:         return \"call %1\";
                   2088: }"
                   2089: [(set_attr "type" "call")])
                   2090: 
                   2091: 
                   2092: (define_expand "untyped_call"
                   2093:   [(parallel [(call (match_operand 0 "" "")
                   2094:                    (const_int 0))
                   2095:              (match_operand 1 "" "")
                   2096:              (match_operand 2 "" "")])]
                   2097:   ""
                   2098:   "
                   2099: {
                   2100:   int i;
                   2101: 
                   2102:   emit_call_insn (gen_call (operands[0], const0_rtx, NULL, const0_rtx));
                   2103: 
                   2104:   for (i = 0; i < XVECLEN (operands[2], 0); i++)
                   2105:     {
                   2106:       rtx set = XVECEXP (operands[2], 0, i);
                   2107:       emit_move_insn (SET_DEST (set), SET_SRC (set));
                   2108:     }
                   2109: 
                   2110:   /* The optimizer does not know that the call sets the function value
                   2111:      registers we stored in the result block.  We avoid problems by
                   2112:      claiming that all hard registers are used and clobbered at this
                   2113:      point.  */
                   2114:   emit_insn (gen_blockage ());
                   2115: 
                   2116:   DONE;
                   2117: }")
                   2118: 
                   2119: ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
                   2120: ;; all of memory.  This blocks insns from being moved across this point.
                   2121: 
                   2122: (define_insn "blockage"
                   2123:   [(unspec_volatile [(const_int 0)] 0)]
                   2124:   ""
                   2125:   "")
                   2126: 
                   2127: (define_insn "nop"
                   2128:   [(const_int 0)]
                   2129:   ""
                   2130:   "nop"
                   2131:   [(set_attr "type"     "nop")])
                   2132: 
                   2133: ;;
                   2134: ;; PEEPHOLE PATTERNS
                   2135: ;;
                   2136: 
                   2137: 
                   2138: (define_peephole
                   2139:   [(set (match_operand:QI 0 "register_operand" "=A")
                   2140:         (reg:QI 16))
                   2141:    (call (mem:QI (match_dup 0))
                   2142:         (match_operand 1 "" "i"))]
                   2143:    ""
                   2144:    "call pt")
                   2145: 
                   2146: 
                   2147: (define_peephole
                   2148:   [(set (match_operand:QI 0 "register_operand" "=A")
                   2149:         (reg:QI 16))
                   2150:    (set (match_operand 1 "" "")
                   2151:         (call (mem:QI (match_dup 0))
                   2152:              (match_operand 2 "" "i")))]
                   2153:    ""
                   2154:    "call pt")
                   2155: 
                   2156: (define_peephole
                   2157:   [(set (match_operand:HI 0 "register_operand" "=A")
                   2158:        (ashift:HI (match_operand:HI 1 "register_operand" "A")
                   2159:                   (const_int 16)))
                   2160:    (set (match_operand:HI 2 "register_operand" "")
                   2161:        (match_dup 0))
                   2162:    (set (match_dup 0)
                   2163:        (ashiftrt:HI (match_dup 0) (const_int 16)))
                   2164:    (set (match_dup 2)
                   2165:        (match_dup 0))]
                   2166:   ""
                   2167:   "%0=%1<<16\;%0=%0>>16\;%u2=%u0\;%w2=%w0")
                   2168: 
                   2169: (define_peephole
                   2170:   [(set (match_operand:HI 0 "register_operand" "=A")
                   2171:        (ashift:HI (match_operand:HI 1 "register_operand" "A")
                   2172:                   (const_int 16)))
                   2173:    (set (match_operand:HI 2 "register_operand" "")
                   2174:        (match_dup 0))
                   2175:    (set (match_dup 0)
                   2176:        (lshiftrt:HI (match_dup 0) (const_int 16)))
                   2177:    (set (match_dup 2)
                   2178:        (match_dup 0))]
                   2179:   ""
                   2180:   "%0=%1<<16\;%0=%0>>16\;%0=%b0&0x0000\;%u2=%u0\;%w2=%w0")

unix.superglobalmegacorp.com

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