Annotation of gcc/config/convex.md, revision 1.1

1.1     ! root        1: ;;- Machine description for GNU compiler
        !             2: ;;- Convex Version
        !             3: ;;   Copyright (C) 1989 Free Software Foundation, Inc.
        !             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 1, 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: ;;- Instruction patterns.  When multiple patterns apply,
        !            23: ;;- the first one in the file is chosen.
        !            24: ;;-
        !            25: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
        !            26: ;;-
        !            27: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
        !            28: ;;- updates for most instructions.
        !            29: 
        !            30: ;; Put tstsi first among test insns so it matches a CONST_INT operand.
        !            31: 
        !            32: (define_insn "tstsi"
        !            33:   [(set (cc0)
        !            34:        (match_operand:SI 0 "register_operand" "r"))]
        !            35:   ""
        !            36:   "* return set_cmp (operands[0], const0_rtx, 'w');")
        !            37: 
        !            38: (define_insn "tsthi"
        !            39:   [(set (cc0)
        !            40:        (match_operand:HI 0 "register_operand" "r"))]
        !            41:   ""
        !            42:   "* return set_cmp (operands[0], const0_rtx, 'h');")
        !            43: 
        !            44: (define_expand "tstqi"
        !            45:   [(set (match_dup 1)
        !            46:        (sign_extend:SI (match_operand:QI 0 "register_operand" "r")))
        !            47:    (set (cc0)
        !            48:        (match_dup 1))]
        !            49:   ""
        !            50:   "operands[1] = gen_reg_rtx (SImode);")
        !            51: 
        !            52: (define_insn "tstdi"
        !            53:   [(set (cc0)
        !            54:        (match_operand:DI 0 "register_operand" "d"))
        !            55:    (clobber (reg:DI 1))]
        !            56:   ""
        !            57:   "*
        !            58: {
        !            59:   output_asm_insn (\"ld.l #0,s1\");
        !            60:   return set_cmp (operands[0], gen_rtx (REG, DImode, 1), 'l');
        !            61: }")
        !            62: 
        !            63: (define_expand "tstdf"
        !            64:   [(set (cc0)
        !            65:        (compare (match_operand:DF 0 "register_operand" "d")
        !            66:                 (match_dup 1)))]
        !            67:   ""
        !            68:   "operands[1] = force_reg (DFmode, dconst0_rtx);")
        !            69: 
        !            70: (define_insn "tstsf"
        !            71:   [(set (cc0)
        !            72:        (match_operand:SF 0 "register_operand" "d"))]
        !            73:   ""
        !            74:   "* return set_cmp (operands[0], fconst0_rtx, 's');")
        !            75: 
        !            76: ;; Put cmpsi first among compare insns so it matches two CONST_INT operands.
        !            77: 
        !            78: (define_insn "cmpsi"
        !            79:   [(set (cc0)
        !            80:        (compare (match_operand:SI 0 "nonmemory_operand" "d,a,i,r")
        !            81:                 (match_operand:SI 1 "nonmemory_operand" "d,a,r,i")))]
        !            82:   ""
        !            83:   "* return set_cmp (operands[0], operands[1], 'w');")
        !            84: 
        !            85: (define_insn "cmphi"
        !            86:   [(set (cc0)
        !            87:        (compare (match_operand:HI 0 "nonmemory_operand" "d,a,r,i")
        !            88:                 (match_operand:HI 1 "nonmemory_operand" "d,a,i,r")))]
        !            89:   ""
        !            90:   "* return set_cmp (operands[0], operands[1], 'h');")
        !            91: 
        !            92: (define_insn ""
        !            93:   [(set (cc0)
        !            94:        (compare (sign_extend:SI (match_operand:QI 0 "register_operand" "d"))
        !            95:                 (sign_extend:SI (match_operand:QI 1 "register_operand" "d"))))]
        !            96:   ""
        !            97:   "* return set_cmp (operands[0], operands[1], 'b');")
        !            98: 
        !            99: (define_insn "cmpdi"
        !           100:   [(set (cc0)
        !           101:        (compare (match_operand:DI 0 "register_operand" "d")
        !           102:                 (match_operand:DI 1 "register_operand" "d")))]
        !           103:   ""
        !           104:   "* return set_cmp (operands[0], operands[1], 'l');")
        !           105: 
        !           106: (define_insn "cmpdf"
        !           107:   [(set (cc0)
        !           108:        (compare (match_operand:DF 0 "register_operand" "d")
        !           109:                 (match_operand:DF 1 "register_operand" "d")))]
        !           110:   ""
        !           111:   "* return set_cmp (operands[0], operands[1], 'd');")
        !           112: 
        !           113: (define_insn "cmpsf"
        !           114:   [(set (cc0)
        !           115:        (compare (match_operand:SF 0 "nonmemory_operand" "dF,d")
        !           116:                 (match_operand:SF 1 "nonmemory_operand" "d,F")))]
        !           117:   ""
        !           118:   "* return set_cmp (operands[0], operands[1], 's');")
        !           119: 
        !           120: (define_insn "movdf"
        !           121:   [(set (match_operand:DF 0 "general_operand" "=g,d")
        !           122:        (match_operand:DF 1 "general_operand" "d,gG"))]
        !           123:   ""
        !           124:   "*
        !           125: {
        !           126:   if (push_operand (operands[0], DFmode))
        !           127:     return \"psh.l %1\";
        !           128:   else if (GET_CODE (operands[0]) == MEM)
        !           129:     return \"st.l %1,%0\";
        !           130:   else if (GET_CODE (operands[1]) == REG)
        !           131:     return \"mov %1,%0\";
        !           132:   else if (GET_CODE (operands[1]) == CONST_DOUBLE && LD_D_P (operands[1]))
        !           133:     {
        !           134:       operands[1] = gen_rtx (CONST_INT, VOIDmode,
        !           135:                             const_double_high_int (operands[1]));
        !           136:       return \"ld.d %1,%0\";
        !           137:     }
        !           138:   else
        !           139:     return \"ld.l %1,%0\";
        !           140: }")
        !           141: 
        !           142: (define_insn "movsf"
        !           143:   [(set (match_operand:SF 0 "general_operand" "=g,d")
        !           144:        (match_operand:SF 1 "general_operand" "d,gF"))]
        !           145:   ""
        !           146:   "*
        !           147: {
        !           148:   if (push_operand (operands[0], SFmode))
        !           149:     return \"psh.w %1\";
        !           150:   else if (GET_CODE (operands[0]) == MEM)
        !           151:     return \"st.s %1,%0\";
        !           152:   else if (GET_CODE (operands[1]) == REG)
        !           153:     return \"mov.s %1,%0\";
        !           154:   else
        !           155:     return \"ld.s %1,%0\";
        !           156: }")
        !           157: 
        !           158: (define_insn "movdi"
        !           159:   [(set (match_operand:DI 0 "general_operand" "=g,d")
        !           160:        (match_operand:DI 1 "general_operand" "d,gG"))]
        !           161:   ""
        !           162:   "*
        !           163: {
        !           164:   if (push_operand (operands[0], DImode))
        !           165:     return \"psh.l %1\";
        !           166:   else if (GET_CODE (operands[0]) == MEM)
        !           167:     return \"st.l %1,%0\";
        !           168:   else if (GET_CODE (operands[1]) == REG)
        !           169:     return \"mov %1,%0\";
        !           170:   else if (GET_CODE (operands[1]) == CONST_DOUBLE && LD_D_P (operands[1]))
        !           171:     {
        !           172:       operands[1] = gen_rtx (CONST_INT, VOIDmode,
        !           173:                             const_double_high_int (operands[1]));
        !           174:       return \"ld.d %1,%0\";
        !           175:     }
        !           176:   else
        !           177:     return \"ld.l %1,%0\";
        !           178: }")
        !           179: 
        !           180: ;; Special case of movsi, needed to express A-reg preference.
        !           181: 
        !           182: (define_insn ""
        !           183:   [(set (match_operand:SI 0 "push_operand" "=<")
        !           184:        (plus:SI (match_operand:SI 1 "register_operand" "a")
        !           185:                 (match_operand:SI 2 "immediate_operand" "i")))]
        !           186:   "operands[1] != stack_pointer_rtx"
        !           187:   "pshea %a2(%1)")
        !           188: 
        !           189: (define_insn "movsi"
        !           190:   [(set (match_operand:SI 0 "general_operand" "=g,r,<")
        !           191:        (match_operand:SI 1 "general_operand" "r,g,io"))]
        !           192:   ""
        !           193:   "*
        !           194: { 
        !           195:   if (push_operand (operands[0], SImode))
        !           196:     {
        !           197:       if (GET_CODE (operands[1]) == REG)
        !           198:        return \"psh.w %1\";
        !           199:       else
        !           200:         return \"pshea %a1\";
        !           201:     }
        !           202:   if (GET_CODE (operands[0]) == MEM)
        !           203:     return \"st.w %1,%0\";
        !           204:   if (GET_CODE (operands[1]) != REG)
        !           205:     return \"ld.w %1,%0\";
        !           206:   if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
        !           207:     return \"mov.w %1,%0\";
        !           208:   return \"mov %1,%0\";
        !           209: }")
        !           210: 
        !           211: (define_insn "movhi"
        !           212:   [(set (match_operand:HI 0 "general_operand" "=g,r")
        !           213:        (match_operand:HI 1 "general_operand" "r,g"))]
        !           214:   ""
        !           215:   "*
        !           216: {
        !           217:   if (push_operand (operands[0], HImode))
        !           218:     abort ();
        !           219:   else if (GET_CODE (operands[0]) == MEM)
        !           220:     return \"st.h %1,%0\";
        !           221:   else if (GET_CODE (operands[1]) == REG) 
        !           222:     {
        !           223:       if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
        !           224:        return \"mov.w %1,%0\";
        !           225:       else
        !           226:         return \"mov %1,%0\";
        !           227:     }
        !           228:   else if (GET_CODE (operands[1]) == CONST_INT)
        !           229:     return \"ld.w %1,%0\";
        !           230:   else
        !           231:     return \"ld.h %1,%0\";
        !           232: }")
        !           233: 
        !           234: (define_insn "movqi"
        !           235:   [(set (match_operand:QI 0 "general_operand" "=g,r")
        !           236:        (match_operand:QI 1 "general_operand" "r,g"))]
        !           237:   ""
        !           238:   "*
        !           239: {
        !           240:   if (push_operand (operands[0], QImode))
        !           241:     abort ();
        !           242:   else if (GET_CODE (operands[0]) == MEM)
        !           243:     return \"st.b %1,%0\";
        !           244:   else if (GET_CODE (operands[1]) == REG)
        !           245:     {
        !           246:       if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
        !           247:        return \"mov.w %1,%0\";
        !           248:       else
        !           249:         return \"mov %1,%0\";
        !           250:     }
        !           251:   else if (GET_CODE (operands[1]) == CONST_INT)
        !           252:     return \"ld.w %1,%0\";
        !           253:   else
        !           254:     return \"ld.b %1,%0\";
        !           255: }")
        !           256: 
        !           257: ;; Extension and truncation insns.
        !           258: ;; Those for integer source operand
        !           259: ;; are ordered widest source type first.
        !           260: 
        !           261: (define_insn "truncsiqi2"
        !           262:   [(set (match_operand:QI 0 "register_operand" "=d,a")
        !           263:        (truncate:QI (match_operand:SI 1 "register_operand" "d,a")))]
        !           264:   ""
        !           265:   "cvtw.b %1,%0")
        !           266: 
        !           267: (define_insn "truncsihi2"
        !           268:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           269:        (truncate:HI (match_operand:SI 1 "register_operand" "d,a")))]
        !           270:   ""
        !           271:   "cvtw.h %1,%0")
        !           272: 
        !           273: (define_insn "trunchiqi2"
        !           274:   [(set (match_operand:QI 0 "register_operand" "=r")
        !           275:        (truncate:QI (match_operand:HI 1 "register_operand" "0")))]
        !           276:   ""
        !           277:   "")
        !           278: 
        !           279: (define_insn "truncdisi2"
        !           280:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           281:        (truncate:SI (match_operand:DI 1 "register_operand" "d")))]
        !           282:   ""
        !           283:   "cvtl.w %1,%0")
        !           284: 
        !           285: (define_insn "extendsidi2"
        !           286:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           287:        (sign_extend:DI (match_operand:SI 1 "register_operand" "d")))]
        !           288:   ""
        !           289:   "cvtw.l %1,%0")
        !           290: 
        !           291: (define_insn "extendhisi2"
        !           292:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           293:        (sign_extend:SI (match_operand:HI 1 "register_operand" "d,a")))]
        !           294:   ""
        !           295:   "cvth.w %1,%0")
        !           296: 
        !           297: (define_insn "extendqihi2"
        !           298:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           299:        (sign_extend:HI (match_operand:QI 1 "register_operand" "d,a")))]
        !           300:   ""
        !           301:   "cvtb.w %1,%0")
        !           302: 
        !           303: (define_insn "extendqisi2"
        !           304:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           305:        (sign_extend:SI (match_operand:QI 1 "register_operand" "d,a")))]
        !           306:   ""
        !           307:   "cvtb.w %1,%0")
        !           308: 
        !           309: (define_insn "extendsfdf2"
        !           310:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           311:        (float_extend:DF (match_operand:SF 1 "register_operand" "d")))]
        !           312:   ""
        !           313:   "cvts.d %1,%0")
        !           314: 
        !           315: (define_insn "truncdfsf2"
        !           316:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           317:        (float_truncate:SF (match_operand:DF 1 "register_operand" "d")))]
        !           318:   ""
        !           319:   "cvtd.s %1,%0")
        !           320: 
        !           321: (define_insn "zero_extendhisi2"
        !           322:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           323:        (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))]
        !           324:   ""
        !           325:   "and #0xffff,%0")
        !           326: 
        !           327: (define_insn "zero_extendqihi2"
        !           328:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           329:        (zero_extend:HI (match_operand:QI 1 "register_operand" "0")))]
        !           330:   ""
        !           331:   "and #0xff,%0")
        !           332: 
        !           333: (define_insn "zero_extendqisi2"
        !           334:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           335:        (zero_extend:SI (match_operand:QI 1 "register_operand" "0")))]
        !           336:   ""
        !           337:   "and #0xff,%0")
        !           338: 
        !           339: (define_insn "zero_extendsidi2"
        !           340:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           341:        (zero_extend:DI (match_operand:SI 1 "register_operand" "0")))]
        !           342:   ""
        !           343:   "ld.u #0,%0")
        !           344: 
        !           345: ;; Fix-to-float conversion insns.
        !           346: ;; Note that the ones that start with SImode come first.
        !           347: ;; That is so that an operand that is a CONST_INT
        !           348: ;; (and therefore lacks a specific machine mode).
        !           349: ;; will be recognized as SImode (which is always valid)
        !           350: ;; rather than as QImode or HImode.
        !           351: 
        !           352: (define_insn "floatsisf2"
        !           353:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           354:        (float:SF (match_operand:SI 1 "register_operand" "d")))]
        !           355:   ""
        !           356:   "cvtw.s %1,%0")
        !           357: 
        !           358: (define_insn "floatdisf2"
        !           359:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           360:        (float:SF (match_operand:DI 1 "register_operand" "d")))]
        !           361:   ""
        !           362:   "cvtl.s %1,%0")
        !           363: 
        !           364: (define_insn "floatsidf2"
        !           365:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           366:        (float:DF (match_operand:SI 1 "register_operand" "d")))]
        !           367:   "TARGET_C2"
        !           368:   "cvtw.d %1,%0")
        !           369: 
        !           370: (define_insn "floatdidf2"
        !           371:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           372:        (float:DF (match_operand:DI 1 "register_operand" "d")))]
        !           373:   ""
        !           374:   "cvtl.d %1,%0")
        !           375: 
        !           376: ;; Float-to-fix conversion insns.
        !           377: 
        !           378: (define_insn "fix_truncsfsi2"
        !           379:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           380:        (fix:SI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]
        !           381:   ""
        !           382:   "cvts.w %1,%0")
        !           383: 
        !           384: (define_insn "fix_truncsfdi2"
        !           385:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           386:        (fix:DI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]
        !           387:   ""
        !           388:   "cvts.l %1,%0")
        !           389: 
        !           390: (define_insn "fix_truncdfsi2"
        !           391:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           392:        (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]
        !           393:   ""
        !           394:   "*
        !           395: {
        !           396:   if (TARGET_C2)
        !           397:     return \"cvtd.w %1,%0\";
        !           398:   return \"cvtd.l %1,%0\";
        !           399: }")
        !           400: 
        !           401: (define_insn "fix_truncdfdi2"
        !           402:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           403:        (fix:DI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]
        !           404:   ""
        !           405:   "cvtd.l %1,%0")
        !           406: 
        !           407: ;;- All kinds of add instructions.
        !           408: 
        !           409: (define_insn "adddf3"
        !           410:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           411:        (plus:DF (match_operand:DF 1 "register_operand" "%0")
        !           412:                 (match_operand:DF 2 "register_operand" "d")))]
        !           413:   ""
        !           414:   "add.d %2,%0")
        !           415: 
        !           416: (define_insn "addsf3"
        !           417:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           418:        (plus:SF (match_operand:SF 1 "register_operand" "%0")
        !           419:                 (match_operand:SF 2 "nonmemory_operand" "dF")))]
        !           420:   ""
        !           421:   "add.s %2,%0")
        !           422: 
        !           423: (define_insn "adddi3"
        !           424:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           425:        (plus:DI (match_operand:DI 1 "register_operand" "%0")
        !           426:                 (match_operand:DI 2 "register_operand" "d")))]
        !           427:   ""
        !           428:   "add.l %2,%0")
        !           429: 
        !           430: ;; special case of addsi3, needed to specify an A reg for the destination 
        !           431: ;; when the source is a sum involving FP or AP.
        !           432: 
        !           433: (define_insn ""
        !           434:   [(set (match_operand:SI 0 "register_operand" "=a")
        !           435:        (plus:SI (match_operand:SI 1 "register_operand" "%a")
        !           436:                 (match_operand:SI 2 "immediate_operand" "i")))]
        !           437:   "operands[1] == frame_pointer_rtx || operands[1] == arg_pointer_rtx"
        !           438:   "ldea %a2(%1),%0")
        !           439: 
        !           440: (define_insn "addsi3"
        !           441:   [(set (match_operand:SI 0 "register_operand" "=d,a,a")
        !           442:        (plus:SI (match_operand:SI 1 "nonmemory_operand" "%0,0,a")
        !           443:                 (match_operand:SI 2 "nonmemory_operand" "di,ri,i")))]
        !           444:   ""
        !           445:   "* switch (which_alternative) 
        !           446: {
        !           447:  case 0:
        !           448:  case 1: 
        !           449:    return \"add.w %2,%0\";
        !           450:  case 2:
        !           451:    if ((TARGET_C2 || A_REG_P (operands[0]))
        !           452:        && operands[1] != stack_pointer_rtx)
        !           453:      return \"ldea %a2(%1),%0\";
        !           454:    else
        !           455:      return \"mov %1,%0\;add.w %2,%0\";
        !           456: }")
        !           457: 
        !           458: (define_insn "addhi3"
        !           459:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           460:        (plus:HI (match_operand:HI 1 "register_operand" "%0,0")
        !           461:                 (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
        !           462:   ""
        !           463:   "add.h %2,%0")
        !           464: 
        !           465: (define_insn "addqi3"
        !           466:   [(set (match_operand:QI 0 "register_operand" "=d")
        !           467:        (plus:QI (match_operand:QI 1 "register_operand" "%0")
        !           468:                 (match_operand:QI 2 "register_operand" "d")))]
        !           469:   ""
        !           470:   "add.b %2,%0")
        !           471: 
        !           472: ;;- All kinds of subtract instructions.
        !           473: 
        !           474: (define_insn "subdf3"
        !           475:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           476:        (minus:DF (match_operand:DF 1 "register_operand" "0")
        !           477:                  (match_operand:DF 2 "register_operand" "d")))]
        !           478:   ""
        !           479:   "sub.d %2,%0")
        !           480: 
        !           481: (define_insn "subsf3"
        !           482:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           483:        (minus:SF (match_operand:SF 1 "register_operand" "0")
        !           484:                  (match_operand:SF 2 "nonmemory_operand" "dF")))]
        !           485:   ""
        !           486:   "sub.s %2,%0")
        !           487: 
        !           488: (define_insn "subdi3"
        !           489:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           490:        (minus:DI (match_operand:DI 1 "register_operand" "0")
        !           491:                  (match_operand:DI 2 "register_operand" "d")))]
        !           492:   ""
        !           493:   "sub.l %2,%0")
        !           494: 
        !           495: (define_insn "subsi3"
        !           496:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           497:        (minus:SI (match_operand:SI 1 "register_operand" "0,0")
        !           498:                  (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
        !           499:   ""
        !           500:   "sub.w %2,%0")
        !           501: 
        !           502: (define_insn "subhi3"
        !           503:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           504:        (minus:HI (match_operand:HI 1 "register_operand" "0,0")
        !           505:                  (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
        !           506:   ""
        !           507:   "sub.h %2,%0")
        !           508: 
        !           509: (define_insn "subqi3"
        !           510:   [(set (match_operand:QI 0 "register_operand" "=d")
        !           511:        (minus:QI (match_operand:QI 1 "register_operand" "0")
        !           512:                  (match_operand:QI 2 "register_operand" "d")))]
        !           513:   ""
        !           514:   "sub.b %2,%0")
        !           515: 
        !           516: ;;- Multiply instructions.
        !           517: 
        !           518: (define_insn "muldf3"
        !           519:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           520:        (mult:DF (match_operand:DF 1 "register_operand" "%0")
        !           521:                 (match_operand:DF 2 "register_operand" "d")))]
        !           522:   ""
        !           523:   "mul.d %2,%0")
        !           524: 
        !           525: (define_insn "mulsf3"
        !           526:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           527:        (mult:SF (match_operand:SF 1 "register_operand" "%0")
        !           528:                 (match_operand:SF 2 "nonmemory_operand" "dF")))]
        !           529:   ""
        !           530:   "mul.s %2,%0")
        !           531: 
        !           532: (define_insn "muldi3"
        !           533:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           534:        (mult:DI (match_operand:DI 1 "register_operand" "%0")
        !           535:                 (match_operand:DI 2 "register_operand" "d")))]
        !           536:   ""
        !           537:   "mul.l %2,%0")
        !           538: 
        !           539: (define_insn "mulsi3"
        !           540:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           541:        (mult:SI (match_operand:SI 1 "register_operand" "%0,0")
        !           542:                 (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
        !           543:   ""
        !           544:   "mul.w %2,%0")
        !           545: 
        !           546: (define_insn "mulhi3"
        !           547:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           548:        (mult:HI (match_operand:HI 1 "register_operand" "%0,0")
        !           549:                 (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
        !           550:   ""
        !           551:   "mul.h %2,%0")
        !           552: 
        !           553: (define_insn "mulqi3"
        !           554:   [(set (match_operand:QI 0 "register_operand" "=d")
        !           555:        (mult:QI (match_operand:QI 1 "register_operand" "%0")
        !           556:                 (match_operand:QI 2 "register_operand" "d")))]
        !           557:   ""
        !           558:   "mul.b %2,%0")
        !           559: 
        !           560: ;;- Divide instructions.
        !           561: 
        !           562: (define_insn "divdf3"
        !           563:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           564:        (div:DF (match_operand:DF 1 "register_operand" "0")
        !           565:                (match_operand:DF 2 "register_operand" "d")))]
        !           566:   ""
        !           567:   "div.d %2,%0")
        !           568: 
        !           569: (define_insn "divsf3"
        !           570:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           571:        (div:SF (match_operand:SF 1 "register_operand" "0")
        !           572:                (match_operand:SF 2 "nonmemory_operand" "dF")))]
        !           573:   ""
        !           574:   "div.s %2,%0")
        !           575: 
        !           576: (define_insn "divdi3"
        !           577:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           578:        (div:DI (match_operand:DI 1 "register_operand" "0")
        !           579:                (match_operand:DI 2 "register_operand" "d")))]
        !           580:   ""
        !           581:   "div.l %2,%0")
        !           582: 
        !           583: (define_insn "udivdi3"
        !           584:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           585:        (udiv:DI (match_operand:DI 1 "register_operand" "d")
        !           586:                 (match_operand:DI 2 "register_operand" "d")))]
        !           587:   ""
        !           588:   "psh.l %2\;psh.l %1\;callq udiv64\;pop.l %0\;add.w #8,sp")
        !           589: 
        !           590: (define_insn "divsi3"
        !           591:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           592:        (div:SI (match_operand:SI 1 "register_operand" "0,0")
        !           593:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
        !           594:   ""
        !           595:   "div.w %2,%0")
        !           596: 
        !           597: (define_insn "divhi3"
        !           598:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           599:        (div:HI (match_operand:HI 1 "register_operand" "0,0")
        !           600:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
        !           601:   ""
        !           602:   "div.h %2,%0")
        !           603: 
        !           604: (define_insn "divqi3"
        !           605:   [(set (match_operand:QI 0 "register_operand" "=d")
        !           606:        (div:QI (match_operand:QI 1 "register_operand" "0")
        !           607:                (match_operand:QI 2 "register_operand" "d")))]
        !           608:   ""
        !           609:   "div.b %2,%0")
        !           610: 
        !           611: ;; - and, or, xor
        !           612: 
        !           613: (define_insn "anddi3"
        !           614:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           615:        (and:DI (match_operand:DI 1 "register_operand" "%0")
        !           616:                (match_operand:DI 2 "register_operand" "d")))]
        !           617:   ""
        !           618:   "and %2,%0")
        !           619: 
        !           620: (define_insn "andsi3"
        !           621:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           622:        (and:SI (match_operand:SI 1 "register_operand" "%0,0")
        !           623:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
        !           624:   ""
        !           625:   "and %2,%0")
        !           626: 
        !           627: (define_insn "andhi3"
        !           628:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           629:        (and:HI (match_operand:HI 1 "register_operand" "%0,0")
        !           630:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
        !           631:   ""
        !           632:   "and %2,%0")
        !           633: 
        !           634: (define_insn "andqi3"
        !           635:   [(set (match_operand:QI 0 "register_operand" "=d,a")
        !           636:        (and:QI (match_operand:QI 1 "register_operand" "%0,0")
        !           637:                (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
        !           638:   ""
        !           639:   "and %2,%0")
        !           640: 
        !           641: ;;- Bit set instructions.
        !           642: 
        !           643: (define_insn "iordi3"
        !           644:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           645:        (ior:DI (match_operand:DI 1 "register_operand" "%0")
        !           646:                (match_operand:DI 2 "register_operand" "d")))]
        !           647:   ""
        !           648:   "or %2,%0")
        !           649: 
        !           650: (define_insn "iorsi3"
        !           651:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           652:        (ior:SI (match_operand:SI 1 "register_operand" "%0,0")
        !           653:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
        !           654:   ""
        !           655:   "or %2,%0")
        !           656: 
        !           657: (define_insn "iorhi3"
        !           658:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           659:        (ior:HI (match_operand:HI 1 "register_operand" "%0,0")
        !           660:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
        !           661:   ""
        !           662:   "or %2,%0")
        !           663: 
        !           664: (define_insn "iorqi3"
        !           665:   [(set (match_operand:QI 0 "register_operand" "=d,a")
        !           666:        (ior:QI (match_operand:QI 1 "register_operand" "%0,0")
        !           667:                (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
        !           668:   ""
        !           669:   "or %2,%0")
        !           670: 
        !           671: ;;- xor instructions.
        !           672: 
        !           673: (define_insn "xordi3"
        !           674:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           675:        (xor:DI (match_operand:DI 1 "register_operand" "%0")
        !           676:                (match_operand:DI 2 "register_operand" "d")))]
        !           677:   ""
        !           678:   "xor %2,%0")
        !           679: 
        !           680: (define_insn "xorsi3"
        !           681:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           682:        (xor:SI (match_operand:SI 1 "register_operand" "%0,0")
        !           683:                (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
        !           684:   ""
        !           685:   "xor %2,%0")
        !           686: 
        !           687: (define_insn "xorhi3"
        !           688:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           689:        (xor:HI (match_operand:HI 1 "register_operand" "%0,0")
        !           690:                (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
        !           691:   ""
        !           692:   "xor %2,%0")
        !           693: 
        !           694: (define_insn "xorqi3"
        !           695:   [(set (match_operand:QI 0 "register_operand" "=d,a")
        !           696:        (xor:QI (match_operand:QI 1 "register_operand" "%0,0")
        !           697:                (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
        !           698:   ""
        !           699:   "xor %2,%0")
        !           700: 
        !           701: (define_insn "negdf2"
        !           702:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           703:        (neg:DF (match_operand:DF 1 "register_operand" "d")))]
        !           704:   ""
        !           705:   "neg.d %1,%0")
        !           706: 
        !           707: (define_insn "negsf2"
        !           708:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           709:        (neg:SF (match_operand:SF 1 "register_operand" "d")))]
        !           710:   ""
        !           711:   "neg.s %1,%0")
        !           712: 
        !           713: (define_insn "negdi2"
        !           714:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           715:        (neg:DI (match_operand:DI 1 "register_operand" "d")))]
        !           716:   ""
        !           717:   "neg.l %1,%0")
        !           718: 
        !           719: (define_insn "negsi2"
        !           720:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           721:        (neg:SI (match_operand:SI 1 "register_operand" "d,a")))]
        !           722:   ""
        !           723:   "neg.w %1,%0")
        !           724: 
        !           725: (define_insn "neghi2"
        !           726:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           727:        (neg:HI (match_operand:HI 1 "register_operand" "d,a")))]
        !           728:   ""
        !           729:   "neg.h %1,%0")
        !           730: 
        !           731: (define_insn "negqi2"
        !           732:   [(set (match_operand:QI 0 "register_operand" "=d")
        !           733:        (neg:QI (match_operand:QI 1 "register_operand" "d")))]
        !           734:   ""
        !           735:   "neg.b %1,%0")
        !           736: 
        !           737: (define_insn "one_cmpldi2"
        !           738:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           739:        (not:DI (match_operand:DI 1 "register_operand" "d")))]
        !           740:   ""
        !           741:   "not %1,%0")
        !           742: 
        !           743: (define_insn "one_cmplsi2"
        !           744:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           745:        (not:SI (match_operand:SI 1 "register_operand" "d,a")))]
        !           746:   ""
        !           747:   "not %1,%0")
        !           748: 
        !           749: (define_insn "one_cmplhi2"
        !           750:   [(set (match_operand:HI 0 "register_operand" "=d,a")
        !           751:        (not:HI (match_operand:HI 1 "register_operand" "d,a")))]
        !           752:   ""
        !           753:   "not %1,%0")
        !           754: 
        !           755: (define_insn "one_cmplqi2"
        !           756:   [(set (match_operand:QI 0 "register_operand" "=d,a")
        !           757:        (not:QI (match_operand:QI 1 "register_operand" "d,a")))]
        !           758:   ""
        !           759:   "not %1,%0")
        !           760: 
        !           761: ;;- shifts
        !           762: ;;
        !           763: ;; Convex shift instructions are unsigned.
        !           764: ;; To make signed right shifts:
        !           765: ;; for SImode, sign extend to DImode and shift, works for 0..32
        !           766: ;; for DImode, shift and then extend the sign, works for 0..63
        !           767: ;;
        !           768: ;; It is very sad that DImode right shift 64 fails, but I don't see
        !           769: ;; any reasonable way to handle it.  ANSI only requires up to 63.
        !           770: 
        !           771: (define_insn ""
        !           772:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           773:        (ashift:SI (match_operand:SI 1 "register_operand" "0")
        !           774:                   (match_operand:SI 2 "immediate_operand" "i")))]
        !           775:   "INTVAL (operands[2]) >= 0"
        !           776:   "*
        !           777: {
        !           778:   if (operands[2] == const1_rtx)
        !           779:     return \"add.w %0,%0\";
        !           780:   else if (TARGET_C2 && S_REG_P (operands[0]))
        !           781:     return \"shf.w %2,%0\";
        !           782:   else
        !           783:     return \"shf %2,%0\";
        !           784: }")
        !           785: 
        !           786: (define_insn "ashlsi3"
        !           787:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           788:        (ashift:SI (match_operand:SI 1 "register_operand" "0")
        !           789:                   (match_operand:SI 2 "nonmemory_operand" "di")))]
        !           790:   ""
        !           791:   "*
        !           792: {
        !           793:   if (operands[2] == const1_rtx)
        !           794:     return \"add.w %0,%0\";
        !           795:   else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
        !           796:     return TARGET_C2 ? \"shf.w %2,%0\" : \"shf %2,%0\";
        !           797:   else
        !           798:     return \"cvtw.l %0,%0\;shf %2,%0\";
        !           799: }")
        !           800: 
        !           801: (define_expand "ashrsi3"
        !           802:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           803:        (ashift:SI (match_operand:SI 1 "register_operand" "0")
        !           804:                   (match_operand:SI 2 "nonmemory_operand" "di")))]
        !           805:   ""
        !           806:   "operands[2] = negate_rtx (SImode, operands[2]);")
        !           807: 
        !           808: (define_insn "lshlsi3"
        !           809:   [(set (match_operand:SI 0 "register_operand" "=d,a")
        !           810:        (lshift:SI (match_operand:SI 1 "register_operand" "0,0")
        !           811:                   (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
        !           812:   ""
        !           813:   "*
        !           814: {
        !           815:   if (operands[2] == const1_rtx)
        !           816:     return \"add.w %0,%0\";
        !           817:   if (S_REG_P (operands[0]))
        !           818:     {
        !           819:       if (TARGET_C2)
        !           820:        return \"shf.w %2,%0\";
        !           821:       else if (GET_CODE (operands[2]) == CONST_INT
        !           822:               && INTVAL (operands[2]) >= 0)
        !           823:         return \"shf %2,%0\";
        !           824:       else
        !           825:         return \"ld.u #0,%0\;shf %2,%0\";
        !           826:     }
        !           827:   return \"shf %2,%0\";
        !           828: }")
        !           829: 
        !           830: (define_expand "lshrsi3"
        !           831:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           832:        (lshift:SI (match_operand:SI 1 "register_operand" "0")
        !           833:                   (match_operand:SI 2 "nonmemory_operand" "di")))]
        !           834:   ""
        !           835:   "operands[2] = negate_rtx (SImode, operands[2]);")
        !           836: 
        !           837: ;; signed  a >> b  is
        !           838: ;;     ((a >> b) ^ signbit) - signbit
        !           839: ;; where signbit is (1 << 63) >> b
        !           840: 
        !           841: (define_expand "ashldi3"
        !           842:   [(match_operand:DI 0 "register_operand" "=d")
        !           843:    (match_operand:DI 1 "register_operand" "0")
        !           844:    (match_operand:SI 2 "nonmemory_operand" "di")
        !           845:    (match_dup 3)]
        !           846:   ""
        !           847:   "
        !           848: {
        !           849:   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
        !           850:     emit_insn (gen_rtx (SET, VOIDmode, operands[0],
        !           851:                        gen_rtx (LSHIFT, DImode, operands[1], operands[2])));
        !           852:   else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
        !           853:     {
        !           854:       int rshift = - INTVAL (operands[2]);
        !           855:       operands[3] = force_reg
        !           856:        (DImode,
        !           857:         immed_double_const (1 << (63 - rshift), 1 << (31 - rshift), DImode));
        !           858:       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
        !           859:                          gen_rtx (LSHIFT, DImode, operands[1], operands[2])));
        !           860:       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
        !           861:                          gen_rtx (XOR, DImode, operands[0], operands[3])));
        !           862:       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
        !           863:                          gen_rtx (MINUS, DImode, operands[0], operands[3])));
        !           864:     }
        !           865:   else
        !           866:     {
        !           867:       operands[3] =
        !           868:        force_reg (DImode, immed_double_const (0, 1 << 31, DImode));
        !           869:       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
        !           870:                          gen_rtx (LSHIFT, DImode, operands[1], operands[2])));
        !           871:       emit_insn (gen_rtx (SET, VOIDmode, operands[3],
        !           872:                          gen_rtx (LSHIFT, DImode, operands[3], operands[2])));
        !           873:       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
        !           874:                          gen_rtx (XOR, DImode, operands[0], operands[3])));
        !           875:       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
        !           876:                          gen_rtx (MINUS, DImode, operands[0], operands[3])));
        !           877:   }
        !           878:   DONE;
        !           879: }")
        !           880: 
        !           881: (define_expand "ashrdi3"
        !           882:   [(match_operand:DI 0 "register_operand" "=d")
        !           883:    (match_operand:DI 1 "register_operand" "0")
        !           884:    (match_operand:SI 2 "nonmemory_operand" "di")]
        !           885:   ""
        !           886:   "
        !           887: {
        !           888:   emit_insn (gen_ashldi3 (operands[0], operands[1],
        !           889:                          negate_rtx (SImode, operands[2])));
        !           890:   DONE;            
        !           891: }")
        !           892: 
        !           893: (define_insn "lshldi3"
        !           894:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           895:        (lshift:DI (match_operand:DI 1 "register_operand" "0")
        !           896:                   (match_operand:SI 2 "nonmemory_operand" "di")))]
        !           897:   ""
        !           898:   "shf %2,%0")
        !           899: 
        !           900: (define_expand "lshrdi3"
        !           901:   [(set (match_operand:DI 0 "register_operand" "=d")
        !           902:        (lshift:DI (match_operand:DI 1 "register_operand" "0")
        !           903:                   (match_operand:SI 2 "nonmemory_operand" "di")))]
        !           904:   ""
        !           905:   "operands[2] = negate_rtx (SImode, operands[2]);")
        !           906: 
        !           907: ;; __builtin instructions
        !           908: 
        !           909: (define_insn "sqrtdf2"
        !           910:   [(set (match_operand:DF 0 "register_operand" "=d")
        !           911:        (sqrt:DF (match_operand:DF 1 "register_operand" "0")))]
        !           912:   "TARGET_C2"
        !           913:   "sqrt.d %0")
        !           914: 
        !           915: (define_insn "sqrtsf2"
        !           916:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           917:        (sqrt:SF (match_operand:SF 1 "register_operand" "0")))]
        !           918:   "TARGET_C2"
        !           919:   "sqrt.s %0")
        !           920: 
        !           921: (define_insn ""
        !           922:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           923:        (minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
        !           924:                  (const_int 1)))]
        !           925:   ""
        !           926:   "tzc %1,%0\;le.w #32,%0\;jbrs.f .+6\;ld.w #-1,%0")
        !           927: 
        !           928: (define_expand "ffssi2"
        !           929:   [(set (match_operand:SI 0 "register_operand" "=d")
        !           930:        (minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
        !           931:                  (const_int 1)))
        !           932:    (set (match_dup 0)
        !           933:        (plus:SI (match_dup 0)
        !           934:                 (const_int 1)))]
        !           935:   ""
        !           936:   "")
        !           937: 
        !           938: (define_insn "abssf2"
        !           939:   [(set (match_operand:SF 0 "register_operand" "=d")
        !           940:        (abs:SF (match_operand:SF 1 "register_operand" "0")))]
        !           941:   ""
        !           942:   "and #0x7fffffff,%0")
        !           943: 
        !           944: (define_expand "absdf2"
        !           945:   [(set (subreg:DI (match_operand:DF 0 "register_operand" "=d") 0)
        !           946:        (and:DI (subreg:DI (match_operand:DF 1 "register_operand" "d") 0)
        !           947:                (match_dup 2)))]
        !           948:   ""
        !           949:   "operands[2] = force_reg (DImode,
        !           950:                            immed_double_const (-1, 0x7fffffff, DImode));")
        !           951: 
        !           952: (define_insn "jump"
        !           953:   [(set (pc)
        !           954:        (label_ref (match_operand 0 "" "")))]
        !           955:   ""
        !           956:   "jbr %l0")
        !           957: 
        !           958: (define_insn "beq"
        !           959:   [(set (pc)
        !           960:        (if_then_else (eq (cc0)
        !           961:                          (const_int 0))
        !           962:                      (label_ref (match_operand 0 "" ""))
        !           963:                      (pc)))]
        !           964:   ""
        !           965:   "* return gen_cmp (operands[0], \"eq\", 't'); ")
        !           966: 
        !           967: (define_insn "bne"
        !           968:   [(set (pc)
        !           969:        (if_then_else (ne (cc0)
        !           970:                          (const_int 0))
        !           971:                      (label_ref (match_operand 0 "" ""))
        !           972:                      (pc)))]
        !           973:   ""
        !           974:   "* return gen_cmp (operands[0], \"eq\", 'f'); ")
        !           975: 
        !           976: (define_insn "bgt"
        !           977:   [(set (pc)
        !           978:        (if_then_else (gt (cc0)
        !           979:                          (const_int 0))
        !           980:                      (label_ref (match_operand 0 "" ""))
        !           981:                      (pc)))]
        !           982:   ""
        !           983:   "* return gen_cmp (operands[0], \"le\", 'f'); ")
        !           984: 
        !           985: (define_insn "bgtu"
        !           986:   [(set (pc)
        !           987:        (if_then_else (gtu (cc0)
        !           988:                           (const_int 0))
        !           989:                      (label_ref (match_operand 0 "" ""))
        !           990:                      (pc)))]
        !           991:   ""
        !           992:   "* return gen_cmp (operands[0], \"leu\", 'f'); ")
        !           993: 
        !           994: (define_insn "blt"
        !           995:   [(set (pc)
        !           996:        (if_then_else (lt (cc0)
        !           997:                          (const_int 0))
        !           998:                      (label_ref (match_operand 0 "" ""))
        !           999:                      (pc)))]
        !          1000:   ""
        !          1001:   "* return gen_cmp (operands[0], \"lt\", 't'); ")
        !          1002: 
        !          1003: (define_insn "bltu"
        !          1004:   [(set (pc)
        !          1005:        (if_then_else (ltu (cc0)
        !          1006:                           (const_int 0))
        !          1007:                      (label_ref (match_operand 0 "" ""))
        !          1008:                      (pc)))]
        !          1009:   ""
        !          1010:   "* return gen_cmp (operands[0], \"ltu\", 't'); ")
        !          1011: 
        !          1012: (define_insn "bge"
        !          1013:   [(set (pc)
        !          1014:        (if_then_else (ge (cc0)
        !          1015:                          (const_int 0))
        !          1016:                      (label_ref (match_operand 0 "" ""))
        !          1017:                      (pc)))]
        !          1018:   ""
        !          1019:   "* return gen_cmp (operands[0], \"lt\", 'f'); ")
        !          1020: 
        !          1021: (define_insn "bgeu"
        !          1022:   [(set (pc)
        !          1023:        (if_then_else (geu (cc0)
        !          1024:                           (const_int 0))
        !          1025:                      (label_ref (match_operand 0 "" ""))
        !          1026:                      (pc)))]
        !          1027:   ""
        !          1028:   "* return gen_cmp (operands[0], \"ltu\", 'f'); ")
        !          1029: 
        !          1030: (define_insn "ble"
        !          1031:   [(set (pc)
        !          1032:        (if_then_else (le (cc0)
        !          1033:                          (const_int 0))
        !          1034:                      (label_ref (match_operand 0 "" ""))
        !          1035:                      (pc)))]
        !          1036:   ""
        !          1037:   "* return gen_cmp (operands[0], \"le\", 't'); ")
        !          1038: 
        !          1039: (define_insn "bleu"
        !          1040:   [(set (pc)
        !          1041:        (if_then_else (leu (cc0)
        !          1042:                           (const_int 0))
        !          1043:                      (label_ref (match_operand 0 "" ""))
        !          1044:                      (pc)))]
        !          1045:   ""
        !          1046:   "* return gen_cmp (operands[0], \"leu\", 't'); ")
        !          1047: 
        !          1048: (define_insn ""
        !          1049:   [(set (pc)
        !          1050:        (if_then_else (eq (cc0)
        !          1051:                          (const_int 0))
        !          1052:                      (pc)
        !          1053:                      (label_ref (match_operand 0 "" ""))))]
        !          1054:   ""
        !          1055:   "* return gen_cmp (operands[0], \"eq\", 'f'); ")
        !          1056: 
        !          1057: (define_insn ""
        !          1058:   [(set (pc)
        !          1059:        (if_then_else (ne (cc0)
        !          1060:                          (const_int 0))
        !          1061:                      (pc)
        !          1062:                      (label_ref (match_operand 0 "" ""))))]
        !          1063:   ""
        !          1064:   "* return gen_cmp (operands[0], \"eq\", 't'); ")
        !          1065: 
        !          1066: (define_insn ""
        !          1067:   [(set (pc)
        !          1068:        (if_then_else (gt (cc0)
        !          1069:                          (const_int 0))
        !          1070:                      (pc)
        !          1071:                      (label_ref (match_operand 0 "" ""))))]
        !          1072:   ""
        !          1073:   "* return gen_cmp (operands[0], \"le\", 't'); ")
        !          1074: 
        !          1075: (define_insn ""
        !          1076:   [(set (pc)
        !          1077:        (if_then_else (gtu (cc0)
        !          1078:                           (const_int 0))
        !          1079:                      (pc)
        !          1080:                      (label_ref (match_operand 0 "" ""))))]
        !          1081:   ""
        !          1082:   "* return gen_cmp (operands[0], \"leu\", 't'); ")
        !          1083: 
        !          1084: (define_insn ""
        !          1085:   [(set (pc)
        !          1086:        (if_then_else (lt (cc0)
        !          1087:                          (const_int 0))
        !          1088:                      (pc)
        !          1089:                      (label_ref (match_operand 0 "" ""))))]
        !          1090:   ""
        !          1091:   "* return gen_cmp (operands[0], \"lt\", 'f'); ")
        !          1092: 
        !          1093: (define_insn ""
        !          1094:   [(set (pc)
        !          1095:        (if_then_else (ltu (cc0)
        !          1096:                           (const_int 0))
        !          1097:                      (pc)
        !          1098:                      (label_ref (match_operand 0 "" ""))))]
        !          1099:   ""
        !          1100:   "* return gen_cmp (operands[0], \"ltu\", 'f'); ")
        !          1101: 
        !          1102: (define_insn ""
        !          1103:   [(set (pc)
        !          1104:        (if_then_else (ge (cc0)
        !          1105:                          (const_int 0))
        !          1106:                      (pc)
        !          1107:                      (label_ref (match_operand 0 "" ""))))]
        !          1108:   ""
        !          1109:   "* return gen_cmp (operands[0], \"lt\", 't'); ")
        !          1110: 
        !          1111: (define_insn ""
        !          1112:   [(set (pc)
        !          1113:        (if_then_else (geu (cc0)
        !          1114:                           (const_int 0))
        !          1115:                      (pc)
        !          1116:                      (label_ref (match_operand 0 "" ""))))]
        !          1117:   ""
        !          1118:   "* return gen_cmp (operands[0], \"ltu\", 't'); ")
        !          1119: 
        !          1120: (define_insn ""
        !          1121:   [(set (pc)
        !          1122:        (if_then_else (le (cc0)
        !          1123:                          (const_int 0))
        !          1124:                      (pc)
        !          1125:                      (label_ref (match_operand 0 "" ""))))]
        !          1126:   ""
        !          1127:   "* return gen_cmp (operands[0], \"le\", 'f'); ")
        !          1128: 
        !          1129: (define_insn ""
        !          1130:   [(set (pc)
        !          1131:        (if_then_else (leu (cc0)
        !          1132:                           (const_int 0))
        !          1133:                      (pc)
        !          1134:                      (label_ref (match_operand 0 "" ""))))]
        !          1135:   ""
        !          1136:   "* return gen_cmp (operands[0], \"leu\", 'f'); ")
        !          1137: 
        !          1138: ;;  - Calls
        !          1139: ;;
        !          1140: ;; arg count word may be omitted to save a push and let gcc try to
        !          1141: ;; combine the arg list pop.  RETURN_POPS_ARGS from tm.h decides this.
        !          1142: 
        !          1143: (define_insn "call"
        !          1144:   [(call (match_operand:QI 0 "general_operand" "g")
        !          1145:         (match_operand:SI 1 "general_operand" "g"))]
        !          1146:   ""
        !          1147:   "*
        !          1148: {
        !          1149:   if (! RETURN_POPS_ARGS (ignoreme)) 
        !          1150:     {
        !          1151:       if (operands[1] == const0_rtx)
        !          1152:        return \"calls %0\";
        !          1153:       if (! reg_mentioned_p (arg_pointer_rtx, operands[0]))
        !          1154:        return \"mov sp,ap\;calls %0\;ld.w 12(fp),ap\";
        !          1155:       operands[0] = XEXP (operands[0], 0);
        !          1156:       return \"ld.w %0,a1\;mov sp,ap\;calls (a1)\;ld.w 12(fp),ap\";
        !          1157:     }
        !          1158:   operands[1] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[1]) + 3)/ 4);
        !          1159:   if (! reg_mentioned_p (arg_pointer_rtx, operands[0]))
        !          1160:     return \"mov sp,ap\;pshea %a1\;calls %0\;ld.w 12(fp),ap\;add.w #4*%a1+4,sp\";
        !          1161:   operands[0] = XEXP (operands[0], 0);
        !          1162:   return \"ld.w %0,a1\;mov sp,ap\;pshea %a1\;calls (a1)\;ld.w 12(fp),ap\;add.w #4*%a1+4,sp\";
        !          1163: }")
        !          1164: 
        !          1165: (define_insn "call_value"
        !          1166:   [(set (match_operand 0 "" "=g")
        !          1167:        (call (match_operand:QI 1 "general_operand" "g")
        !          1168:              (match_operand:SI 2 "general_operand" "g")))]
        !          1169:   ""
        !          1170:   "*
        !          1171: {
        !          1172:   if (! RETURN_POPS_ARGS (ignoreme)) 
        !          1173:     {
        !          1174:       if (operands[2] == const0_rtx)
        !          1175:        return \"calls %1\";
        !          1176:       if (! reg_mentioned_p (arg_pointer_rtx, operands[1]))
        !          1177:        return \"mov sp,ap\;calls %1\;ld.w 12(fp),ap\";
        !          1178:       operands[1] = XEXP (operands[1], 0);
        !          1179:       return \"ld.w %1,a1\;mov sp,ap\;calls (a1)\;ld.w 12(fp),ap\";
        !          1180:     }
        !          1181:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[2]) + 3) / 4);
        !          1182:   if (! reg_mentioned_p (arg_pointer_rtx, operands[1]))
        !          1183:     return \"mov sp,ap\;pshea %a2\;calls %1\;ld.w 12(fp),ap\;add.w #4*%a2+4,sp\";
        !          1184:   operands[1] = XEXP (operands[1], 0);
        !          1185:   return \"ld.w %1,a1\;mov sp,ap\;pshea %a2\;calls (a1)\;ld.w 12(fp),ap\;add.w #4*%a2+4,sp\";
        !          1186: }")
        !          1187: 
        !          1188: (define_insn "return"
        !          1189:   [(return)]
        !          1190:   ""
        !          1191:   "rtn")
        !          1192: 
        !          1193: (define_insn "nop"
        !          1194:   [(const_int 0)]
        !          1195:   ""
        !          1196:   "nop")
        !          1197: 
        !          1198: (define_insn "tablejump"
        !          1199:   [(set (pc) (match_operand:SI 0 "address_operand" "p"))
        !          1200:    (use (label_ref (match_operand 1 "" "")))]
        !          1201:   ""
        !          1202:   "jmp %a0")
        !          1203: 
        !          1204: ;; - fix up the code generated for bit field tests
        !          1205: 
        !          1206: ;; cc0 = (x >> k1) & k2  -->  cc0 = x & (k2 << k1)
        !          1207: ;; cc0 = (x << k1) & k2  -->  cc0 = x & (k2 >> k1)  
        !          1208: ;; provided k2 and (k2 << k1) don't include the sign bit
        !          1209: 
        !          1210: (define_peephole
        !          1211:   [(set (match_operand:SI 0 "register_operand" "r")
        !          1212:        (lshift:SI (match_dup 0)
        !          1213:                   (match_operand 1 "immediate_operand" "i")))
        !          1214:    (set (match_dup 0)
        !          1215:        (and:SI (match_dup 0)
        !          1216:                (match_operand 2 "immediate_operand" "i")))
        !          1217:    (set (cc0) (match_dup 0))]
        !          1218:   "dead_or_set_p (insn, operands[0])
        !          1219:    && GET_CODE (operands[1]) == CONST_INT
        !          1220:    && GET_CODE (operands[2]) == CONST_INT
        !          1221:    && INTVAL (operands[2]) >= 0
        !          1222:    && (INTVAL (operands[2]) << INTVAL (operands[1])) >= 0"
        !          1223:   "*
        !          1224: {
        !          1225:   operands[2] = gen_rtx (CONST_INT, VOIDmode, 
        !          1226:                         INTVAL (operands[2]) >> INTVAL (operands[1]));
        !          1227:   output_asm_insn (\"and %2,%0\", operands);
        !          1228:   return set_cmp (operands[0], const0_rtx, 'w');
        !          1229: }")
        !          1230: 
        !          1231: ;; same as above where x is (y & 0xff...) caused by a zero extend
        !          1232: 
        !          1233: (define_peephole
        !          1234:   [(set (match_operand:SI 0 "register_operand" "r")
        !          1235:        (zero_extend:SI (match_operand 1 "register_operand" "0")))
        !          1236:    (set (match_dup 0)
        !          1237:        (lshift:SI (match_dup 0)
        !          1238:                   (match_operand 2 "immediate_operand" "i")))
        !          1239:    (set (match_dup 0)
        !          1240:        (and:SI (match_dup 0)
        !          1241:                (match_operand 3 "immediate_operand" "i")))
        !          1242:    (set (cc0) (match_dup 0))]
        !          1243:   "dead_or_set_p (insn, operands[0])
        !          1244:    && REGNO (operands[0]) == REGNO (operands[1])
        !          1245:    && GET_CODE (operands[2]) == CONST_INT
        !          1246:    && GET_CODE (operands[3]) == CONST_INT
        !          1247:    && (INTVAL (operands[3]) << INTVAL (operands[2])) >= 0"
        !          1248:   "*
        !          1249: {
        !          1250:   operands[3] = gen_rtx (CONST_INT, VOIDmode, 
        !          1251:                         (INTVAL (operands[3]) >> INTVAL (operands[2])) &
        !          1252:                         ~((-1) << GET_MODE_BITSIZE (GET_MODE (operands[1]))));
        !          1253:   output_asm_insn (\"and %3,%0\", operands);
        !          1254:   return set_cmp (operands[0], const0_rtx, 'w');
        !          1255: }")
        !          1256: 
        !          1257: ;;- Local variables:
        !          1258: ;;- mode:emacs-lisp
        !          1259: ;;- comment-start: ";;- "
        !          1260: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
        !          1261: ;;- eval: (modify-syntax-entry ?[ "(]")
        !          1262: ;;- eval: (modify-syntax-entry ?] ")[")
        !          1263: ;;- eval: (modify-syntax-entry ?{ "(}")
        !          1264: ;;- eval: (modify-syntax-entry ?} "){")
        !          1265: ;;- End:
        !          1266: 

unix.superglobalmegacorp.com

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