Annotation of gcc/config/dsp16xx/dsp16xx.md, revision 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.