Annotation of gcc/config/1750a/1750a.md, revision 1.1

1.1     ! root        1: ;;- Machine description for GNU compiler
        !             2: ;;- MIL-STD-1750A version.
        !             3: ;; Copyright (C) 1994 Free Software Foundation, Inc.
        !             4: ;; Contributed by O.M.Kellogg, DASA ([email protected]).
        !             5: 
        !             6: ;; This file is part of GNU CC.
        !             7: 
        !             8: ;; GNU CC is free software; you can redistribute it and/or modify
        !             9: ;; it under the terms of the GNU General Public License as published by
        !            10: ;; the Free Software Foundation; either version 1, or (at your option)
        !            11: ;; any later version.
        !            12: 
        !            13: ;; GNU CC is distributed in the hope that it will be useful,
        !            14: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            15: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            16: ;; GNU General Public License for more details.
        !            17: 
        !            18: ;; You should have received a copy of the GNU General Public License
        !            19: ;; along with GNU CC; see the file COPYING.  If not, write to
        !            20: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            21: 
        !            22: 
        !            23: ;;- instruction definitions
        !            24: 
        !            25: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
        !            26: 
        !            27: ;;- When naming insn's (operand 0 of define_insn) be careful about using
        !            28: ;;- names from other targets machine descriptions.
        !            29: 
        !            30: ;; MIL-STD-1750 specific remarks:
        !            31: ;;
        !            32: ;; 1) BITS_PER_UNIT = 16
        !            33: ;;
        !            34: ;; 2) GCC   to    MIL-STD-1750       data type mappings:
        !            35: ;;    QImode => single integer (16 bits or 1 reg).
        !            36: ;;    HImode => double integer (32 bits or 2 regs).
        !            37: ;;    HFmode => single precision float (32 bits or 2 regs).
        !            38: ;;    TQFmode => extended precision float (48 bits or 3 regs).
        !            39: ;; 
        !            40: ;; 3) Immediate integer operands Constraints:
        !            41: ;;    'I'  1 .. 16
        !            42: ;;    'J' -1 ..-16
        !            43: ;;    'K'  0 .. 15
        !            44: ;;    'L'  0 .. 255
        !            45: ;;    'M' -32768 .. 32767
        !            46: ;;    'O' => 0  (for optimizations and GCC quirks)
        !            47: ;;
        !            48: ;; Further notes:
        !            49: ;;-  Assembly output ending in ".M" are macros in file M1750.INC
        !            50: 
        !            51: 
        !            52: ;; stackpush
        !            53: (define_insn ""
        !            54:   [(set (match_operand:QI 0 "push_operand" "=<")
        !            55:         (match_operand:QI 1 "general_operand" "r"))]
        !            56:   ""
        !            57:   "pshm r%1,r%1")
        !            58: 
        !            59: (define_insn ""
        !            60:   [(set (match_operand:HI 0 "push_operand" "=<")
        !            61:         (match_operand:HI 1 "general_operand" "r"))]
        !            62:   ""
        !            63:   "*
        !            64:    { 
        !            65:         rtx new_operands[2];
        !            66:         new_operands[0] = operands[1];
        !            67:         new_operands[1] = gen_rtx(CONST_INT,VOIDmode,REGNO(operands[1])+1);
        !            68:    } ")
        !            69: 
        !            70: (define_insn ""
        !            71:   [(set (match_operand:HF 0 "push_operand" "=<")
        !            72:         (match_operand:HF 1 "general_operand" "r"))]
        !            73:   ""
        !            74:   "*
        !            75:   { 
        !            76:         rtx new_operands[2];
        !            77:         new_operands[0] = operands[1];
        !            78:         new_operands[1] = gen_rtx(CONST_INT,VOIDmode,REGNO(operands[1])+1);
        !            79:         output_asm_insn(\"pshm r%0,r%1\",new_operands);
        !            80:         return \"\;\";
        !            81:    } ")
        !            82: 
        !            83: (define_insn ""
        !            84:   [(set (match_operand:TQF 0 "push_operand" "=<")
        !            85:         (match_operand:TQF 1 "general_operand" "r"))]
        !            86:   ""
        !            87:   "*
        !            88:    { 
        !            89:         rtx new_operands[2];
        !            90:         new_operands[0] = operands[1];
        !            91:         new_operands[1] = gen_rtx(CONST_INT,VOIDmode,REGNO(operands[1])+2);
        !            92:         output_asm_insn(\"pshm r%0,r%1\",new_operands);
        !            93:         return \"\;\";
        !            94:    } ")
        !            95: 
        !            96: ;; stackpop
        !            97: (define_insn ""
        !            98:   [(set (match_operand:QI 0 "general_operand" "=r")
        !            99:         (match_operand:QI 1 "push_operand" ">"))]
        !           100:   ""
        !           101:   "popm r%1,r%1")
        !           102: 
        !           103: (define_insn ""
        !           104:   [(set (match_operand:HI 0 "general_operand" "=r")
        !           105:         (match_operand:HI 1 "push_operand" ">"))]
        !           106:   ""
        !           107:   "*
        !           108:    { 
        !           109:         rtx new_operands[2];
        !           110:         new_operands[0] = operands[0];
        !           111:         new_operands[1] = gen_rtx(CONST_INT,VOIDmode,REGNO(operands[0])+1);
        !           112:         output_asm_insn(\"popm r%0,r%1\",new_operands);
        !           113:         return \"\;\";
        !           114:    } ")
        !           115: 
        !           116: (define_insn ""
        !           117:   [(set (match_operand:HF 0 "general_operand" "=r")
        !           118:         (match_operand:HF 1 "push_operand" ">"))]
        !           119:   ""
        !           120:   "*
        !           121:    { 
        !           122:         rtx new_operands[2];
        !           123:         new_operands[0] = operands[0];
        !           124:         new_operands[1] = gen_rtx(CONST_INT,VOIDmode,REGNO(operands[0])+1);
        !           125:         output_asm_insn(\"popm r%0,r%1\",new_operands);
        !           126:         return \"\;\";
        !           127:    } ")
        !           128: 
        !           129: (define_insn ""
        !           130:   [(set (match_operand:TQF 0 "general_operand" "=r")
        !           131:         (match_operand:TQF 1 "push_operand" ">"))]
        !           132:   ""
        !           133:   "*
        !           134:    { 
        !           135:         rtx new_operands[2];
        !           136:         new_operands[0] = operands[0];
        !           137:         new_operands[1] = gen_rtx(CONST_INT,VOIDmode,REGNO(operands[0])+2);
        !           138:         output_asm_insn(\"popm r%0,r%1\",new_operands);
        !           139:         return \"\;\";
        !           140:    } ")
        !           141: 
        !           142: ;; Test operations. These shouldn't really occur for 1750:
        !           143: ;; all important instructions set the cc's (see NOTICE_UPDATE_CC)
        !           144: 
        !           145: (define_insn "tstqi"
        !           146:   [(set (cc0)
        !           147:         (match_operand:QI 0 "register_operand" "r"))]
        !           148:   ""
        !           149:   "lr r%0,r%0   ; from tstqi")
        !           150: 
        !           151: (define_insn "tsthi"
        !           152:   [(set (cc0)
        !           153:         (match_operand:HI 0 "register_operand" "r"))]
        !           154:   ""
        !           155:   "dlr r%0,r%0   ; from tsthi")
        !           156: 
        !           157: (define_insn "tsthf"
        !           158:   [(set (cc0)
        !           159:         (match_operand:HF 0 "register_operand" "r"))]
        !           160:   ""
        !           161:   "dlr r%0,r%0   ; from tsthf")
        !           162: 
        !           163: ;; This one is happy with "roughly zero" :-)  (should be improved)
        !           164: (define_insn "tsttqf"
        !           165:   [(set (cc0)
        !           166:         (match_operand:TQF 0 "register_operand" "r"))]
        !           167:   ""
        !           168:   "dlr r%0,r%0   ; from tsttqf")
        !           169: 
        !           170: 
        !           171: ;; block move.
        !           172: 
        !           173: ; there is a problem with this insn in gcc-2.2.3
        !           174: ; (clobber (match_dup 2)) does not prevent use of this operand later
        !           175: ;
        !           176: (define_insn "movstrqi"
        !           177:   [(set (mem:BLK (match_operand:QI 0 "register_operand" "r"))
        !           178:        (mem:BLK (match_operand:QI 1 "register_operand" "r")))
        !           179:    (use (match_operand:QI 2 "register_operand" "r"))
        !           180:    (use (match_operand:QI 3 "immediate_operand" ""))
        !           181:    (clobber (match_dup 0))
        !           182:    (clobber (match_dup 1))
        !           183:    (clobber (match_dup 2))]
        !           184:   ""
        !           185:   "* return (char *)movcnt_regno_adjust(operands); ")
        !           186: 
        !           187: 
        !           188: ;; compare instructions.
        !           189: 
        !           190: (define_insn "cmpqi"
        !           191:   [(set (cc0)
        !           192:         (compare (match_operand:QI 0 "register_operand" "r,r,r,r,r")
        !           193:                  (match_operand:QI 1 "general_operand"  "I,J,i,r,m")))]
        !           194:   ""
        !           195:   "@
        !           196:      cisp r%0,%1
        !           197:      cisn r%0,%J1
        !           198:      cim  r%0,%1
        !           199:      cr   r%0,r%1
        !           200:      c    r%0,%1 ")
        !           201: 
        !           202: (define_insn "cmphi"
        !           203:   [(set (cc0)
        !           204:         (compare (match_operand:HI 0 "general_operand" "r,r")
        !           205:                  (match_operand:HI 1 "general_operand" "r,m")))]
        !           206:   ""
        !           207:   "@
        !           208:     dcr r%0,r%1
        !           209:     dc  r%0,%1 ")
        !           210: 
        !           211: (define_insn "cmphf"
        !           212:  [(set (cc0)
        !           213:        (compare (match_operand:HF 0 "general_operand" "r,r")
        !           214:                 (match_operand:HF 1 "general_operand" "r,m")))]
        !           215:  ""
        !           216:  "@
        !           217:    fcr r%0,r%1
        !           218:    fc  r%0,%1 ")
        !           219: 
        !           220: (define_insn "cmptqf"
        !           221:   [(set (cc0)
        !           222:         (compare (match_operand:TQF 0 "general_operand" "r,r")
        !           223:                  (match_operand:TQF 1 "general_operand" "r,m")))]
        !           224:   ""
        !           225:   "@
        !           226:     efcr r%0,r%1
        !           227:     efc  r%0,%1 ")
        !           228: 
        !           229: 
        !           230: ;; truncation instructions
        !           231: ;;- 1750: any needed?
        !           232: 
        !           233: (define_insn "trunchiqi2"
        !           234:   [(set (match_operand:QI 0 "register_operand" "=r")
        !           235:         (truncate:QI
        !           236:          (match_operand:HI 1 "register_operand" "r")))]
        !           237:   ""
        !           238:   "*
        !           239:      {
        !           240:         REGNO(operands[1]) += 1;
        !           241:         return \"lr r%0,r%1  ;trunchiqi2\";
        !           242:      } ")
        !           243: 
        !           244: ;; zero extension instructions
        !           245: 
        !           246: (define_insn "zero_extendqihi2"
        !           247:   [(set (match_operand:HI 0 "register_operand" "=r,r,r")
        !           248:         (zero_extend:HI (match_operand:QI 1 "general_operand" "r,m,i")))]
        !           249:   ""
        !           250:   "*
        !           251:       {
        !           252:         output_asm_insn(\"xorr r%0,r%0   ;zero_extendqihi2\",operands);
        !           253:         REGNO(operands[0]) += 1;
        !           254:         switch (which_alternative)
        !           255:           {
        !           256:             case 0:
        !           257:               return \"lr  r%0,r%1\";
        !           258:             case 1:
        !           259:               return \"l   r%0,%1\";
        !           260:             case 2:
        !           261:               return \"lim r%0,%1\";
        !           262:           }
        !           263:       } ")
        !           264: 
        !           265: ;; sign extension instructions
        !           266: 
        !           267: (define_insn "extendqihi2"
        !           268:   [(set (match_operand:HI 0 "register_operand" "=r,r,r")
        !           269:         (sign_extend:HI (match_operand:QI 1 "general_operand" "r,m,i")) )]
        !           270:   ""
        !           271:   "@
        !           272:     lr  r%0,r%1 ;extendqihi2\;dsra r%0,16
        !           273:     l   r%0,%1  ;extendqihi2\;dsra r%0,16
        !           274:     lim r%0,%1  ;extendqihi2\;dsra r%0,16 ")
        !           275: 
        !           276: 
        !           277: ;; Conversions between float and double.
        !           278: 
        !           279: ; 1750 HF-to-TQF extend: just append 16 bits (least signif.) with all bits zero
        !           280: (define_insn "extendhftqf2"
        !           281:   [(set (match_operand:TQF 0 "register_operand" "=r,r")
        !           282:         (float_extend:TQF
        !           283:          (match_operand:HF 1 "general_operand" "r,m")))]
        !           284:   ""
        !           285:   "*
        !           286:       {
        !           287:         REGNO(operands[0]) += 2;
        !           288:         output_asm_insn(\"xorr r%0,r%0   ;extendhftqf2\",operands);
        !           289:         REGNO(operands[0]) -= 2;
        !           290:         if (which_alternative == 0)
        !           291:           return \"dlr r%0,r%1\";
        !           292:         else
        !           293:           return \"dl  r%0,%1\";
        !           294:       } ")
        !           295: 
        !           296: ; 1750 TQF-to-HF truncate is a no-op: just leave away the least signif. 16 bits
        !           297: (define_insn "trunctqfhf2"
        !           298:   [(set (match_operand:HF 0 "register_operand" "=r,r")
        !           299:         (float_truncate:HF
        !           300:           (match_operand:TQF 1 "general_operand" "r,m")))]
        !           301:   ""
        !           302:   "@
        !           303:      dlr r%0,r%1  ;trunctqfhf2
        !           304:      dl  r%0,%1   ;trunctqfhf2 ")
        !           305: 
        !           306: 
        !           307: ;; Conversion between fixed point and floating point.
        !           308: 
        !           309: (define_insn "floatqihf2"
        !           310:   [(set           (match_operand:HF 0 "register_operand" "=r")
        !           311:         (float:HF (match_operand:QI 1 "register_operand" "r")))]
        !           312:   ""
        !           313:   "flt r%0,r%1")
        !           314: 
        !           315: (define_insn "floathitqf2"
        !           316:   [(set           (match_operand:TQF 0 "register_operand" "=r")
        !           317:         (float:TQF (match_operand:HI 1 "register_operand" "r")))]
        !           318:   ""
        !           319:   "eflt r%0,r%1")
        !           320: 
        !           321: 
        !           322: ;; Convert floats to ints
        !           323: 
        !           324: (define_insn "fix_trunchfqi2"
        !           325:   [(set                 (match_operand:QI 0 "register_operand" "=r")
        !           326:         (fix:QI (fix:HF (match_operand:HF 1 "register_operand" "r"))))]
        !           327:   ""
        !           328:   "fix r%0,r%1")
        !           329: 
        !           330: (define_insn "fix_trunctqfhi2"
        !           331:   [(set                 (match_operand:HI 0 "register_operand" "=r")
        !           332:         (fix:HI (fix:TQF (match_operand:TQF 1 "register_operand" "r"))))]
        !           333:   ""
        !           334:   "efix r%0,r%1")
        !           335: 
        !           336: 
        !           337: ;; Move instructions
        !           338: 
        !           339: ;; We can't deal with normal byte-size characters, only with WIDE characters!
        !           340: ;; This may appear as a serious restriction, but it also opens the doors
        !           341: ;; for ISO 10646  :-)
        !           342: 
        !           343: ;; 16-bit moves
        !           344: 
        !           345: (define_insn "movqi"
        !           346:   [(set (match_operand:QI 0 "general_operand" "=r,r,r,r,r,r,r,m,m")
        !           347:         (match_operand:QI 1 "general_operand"  "O,I,J,M,i,r,m,r,K"))]
        !           348:   ""
        !           349:   "@
        !           350:      xorr r%0,r%0
        !           351:      lisp r%0,%1
        !           352:      lisn r%0,%J1
        !           353:      lim  r%0,%1  ; 'M' constraint
        !           354:      lim  r%0,%1  ; 'i' constraint
        !           355:      lr   r%0,r%1
        !           356:      l    r%0,%1
        !           357:      st   r%1,%0
        !           358:      stc  %1,%0   ")
        !           359: 
        !           360: ;; 32-bit moves
        !           361: 
        !           362: ;; Set HIreg to constant
        !           363: (define_insn ""
        !           364:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           365:         (match_operand    1 "immediate_operand" "i"))]
        !           366:   ""
        !           367:   "*
        !           368:     if (GET_CODE(operands[1]) == CONST_INT)
        !           369:       {
        !           370:         int val = INTVAL(operands[1]);
        !           371:         if (val >= 0)
        !           372:           {
        !           373:             if (val <= 65535)
        !           374:               {
        !           375:                 output_asm_insn(\"xorr   r%0,r%0 ;movhi cst->reg\",operands);
        !           376:                 operands[0] = gen_rtx(REG,QImode,REGNO(operands[0]) + 1);
        !           377:                 if (val == 0)
        !           378:                   return \"xorr r%0,r%0\";
        !           379:                 else if (val <= 16)
        !           380:                   return \"lisp r%0,%1\";
        !           381:                 else
        !           382:                   return \"lim  r%0,%1\";
        !           383:               }
        !           384:           }
        !           385:         else if (val >= -16)
        !           386:           return \"lisn r%0,%J1\;dsra r%0,16 ;movhi cst\";
        !           387:         INTVAL(operands[1]) >>= 16;
        !           388:         output_asm_insn(\"lim r%0,%1 ;movhi cst->reg\",operands);
        !           389:         REGNO(operands[0]) += 1;
        !           390:         INTVAL(operands[1]) = val & 0xFFFF;
        !           391:         return \"lim r%0,%1\";
        !           392:       }
        !           393:     return \"lim r%0,%1\;dsra r%0,16 ;movhi cst\";
        !           394:   ")
        !           395: 
        !           396: (define_insn "movhi"
        !           397:   [(set (match_operand:HI 0 "general_operand" "=r,r,m")
        !           398:         (match_operand:HI 1 "general_operand"  "r,m,r"))]
        !           399:   ""
        !           400:   "@
        !           401:     dlr r%0,r%1
        !           402:     dl  r%0,%1
        !           403:     dst r%1,%0 ")
        !           404: 
        !           405: 
        !           406: ;; Single-Float moves are *same* as HImode moves:
        !           407: 
        !           408: ;(define_insn "movhf"
        !           409: ;  [(set (match_operand:HF 0 "general_operand" "=r,r,r,m")
        !           410: ;        (match_operand:HF 1 "general_operand"  "F,r,m,r"))]
        !           411: ;  ""
        !           412: ;  "@
        !           413: ;    %D1\;dl r%0,%F1
        !           414: ;    dlr r%0,r%1
        !           415: ;    dl  r%0,%1
        !           416: ;    dst r%1,%0 ")
        !           417: 
        !           418: (define_insn "movhf"
        !           419:   [(set (match_operand:HF 0 "general_operand" "=r,r,m")
        !           420:         (match_operand:HF 1 "general_operand"  "r,m,r"))]
        !           421:   ""
        !           422:   "@
        !           423:     dlr r%0,r%1
        !           424:     dl  r%0,%1
        !           425:     dst r%1,%0 ")
        !           426: 
        !           427: 
        !           428: ;; Longfloat moves
        !           429: 
        !           430: ;(define_insn "movtqf"
        !           431: ;  [(set (match_operand:TQF 0 "general_operand" "=r,r,r,m")
        !           432: ;        (match_operand:TQF 1 "general_operand"  "F,r,m,r"))]
        !           433: ;  ""
        !           434: ;  "@
        !           435: ;    %E1\;efl r%0,%G1
        !           436: ;    eflr.m %0,%1
        !           437: ;    efl  r%0,%1
        !           438: ;    efst r%1,%0 ")
        !           439: 
        !           440: (define_insn "movtqf"
        !           441:   [(set (match_operand:TQF 0 "general_operand" "=r,r,m")
        !           442:         (match_operand:TQF 1 "general_operand"  "r,m,r"))]
        !           443:   ""
        !           444:   "@
        !           445:     eflr.m %0,%1
        !           446:     efl  r%0,%1
        !           447:     efst r%1,%0 ")
        !           448: 
        !           449: 
        !           450: ;; add instructions 
        !           451: 
        !           452: ;; single integer
        !           453: 
        !           454: ;; Use "LIM Ra,sym,Rb" for adding a symbol value to a register and
        !           455: ;; transferring the result to a different register.
        !           456: ;(define_insn ""
        !           457: ;  [(set (match_operand:QI 0 "register_operand" "=r")
        !           458: ;        (plus:QI (match_operand:QI 1 "register_operand" "b")
        !           459: ;                 (match_operand:QI 2 "immediate_operand"  "i")))]
        !           460: ;   "REGNO(operands[0]) != REGNO(operands[1])"
        !           461: ;   "lim r%0,%2,r%1 ;md special addqi")
        !           462: 
        !           463: (define_insn "addqi3"
        !           464:   [(set (match_operand:QI 0 "general_operand" "=r,r,r,r,r,m,m")
        !           465:         (plus:QI (match_operand:QI 1 "general_operand" "%0,0,0,0,0,0,0")
        !           466:                  (match_operand:QI 2 "general_operand"  "I,J,i,r,m,I,J")))]
        !           467:   ""
        !           468:   "*
        !           469:     switch (which_alternative)
        !           470:       {
        !           471:         case 0:
        !           472:           return \"aisp r%0,%2\";
        !           473:         case 1:
        !           474:           return \"sisp r%0,%J2\";
        !           475:         case 2:
        !           476:           if (INTVAL(operands[2]) < 0)
        !           477:             return \"sim r%0,%J2\";
        !           478:           else
        !           479:             return \"aim r%0,%2\";
        !           480:         case 3:
        !           481:           return \"ar r%0,r%2\";
        !           482:         case 4:
        !           483:           return \"a r%0,%2\";
        !           484:         case 5:
        !           485:           return \"incm %2,%0\";
        !           486:         case 6:
        !           487:           return \"decm %J2,%0\";
        !           488:       } ")
        !           489: 
        !           490: ;; double integer
        !           491: (define_insn "addhi3"
        !           492:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           493:         (plus:HI (match_operand:HI 1 "register_operand" "%0,0")
        !           494:                  (match_operand:HI 2 "general_operand" "r,m")))]
        !           495:   ""
        !           496:   "@
        !           497:     dar r%0,r%2
        !           498:     da  r%0,%2 ")
        !           499: 
        !           500: (define_insn "addhf3"
        !           501:   [(set (match_operand:HF 0 "register_operand" "=r,r")
        !           502:         (plus:HF (match_operand:HF 1 "register_operand" "%0,0")
        !           503:                  (match_operand:HF 2 "general_operand" "m,r")))]
        !           504:   ""
        !           505:   "@
        !           506:     fa  r%0,%2
        !           507:     far r%0,r%2 ")
        !           508: 
        !           509: (define_insn "addtqf3"
        !           510:   [(set (match_operand:TQF 0 "register_operand" "=r,r")
        !           511:         (plus:TQF (match_operand:TQF 1 "register_operand" "%0,0")
        !           512:                  (match_operand:TQF 2 "general_operand" "m,r")))]
        !           513:   ""
        !           514:   "@
        !           515:     efa  r%0,%2
        !           516:     efar r%0,r%2 ")
        !           517: 
        !           518: 
        !           519: ;; subtract instructions
        !           520: 
        !           521: ;; single integer
        !           522: (define_insn "subqi3"
        !           523:   [(set (match_operand:QI 0 "general_operand" "=r,r,r,r,m")
        !           524:         (minus:QI (match_operand:QI 1 "general_operand" "0,0,0,0,0")
        !           525:                   (match_operand:QI 2 "general_operand"  "I,i,r,m,I")))]
        !           526:   ""
        !           527:   "@
        !           528:     sisp r%0,%2
        !           529:     sim  r%0,%2
        !           530:     sr   r%0,r%2
        !           531:     s    r%0,%2
        !           532:     decm %2,%0 ")
        !           533: 
        !           534: ;; double integer
        !           535: (define_insn "subhi3"
        !           536:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           537:         (minus:HI (match_operand:HI 1 "register_operand" "0,0")
        !           538:                   (match_operand:HI 2 "general_operand" "r,m")))]
        !           539:   ""
        !           540:   "@
        !           541:     dsr r%0,r%2
        !           542:     ds  r%0,%2 ")
        !           543: 
        !           544: (define_insn "subhf3"
        !           545:   [(set (match_operand:HF 0 "register_operand" "=r,r")
        !           546:         (minus:HF (match_operand:HF 1 "register_operand" "0,0")
        !           547:                   (match_operand:HF 2 "general_operand" "r,m")))]
        !           548:   ""
        !           549:   "@
        !           550:     fsr r%0,r%2
        !           551:     fs  r%0,%2 ")
        !           552: 
        !           553: (define_insn "subtqf3"
        !           554:   [(set (match_operand:TQF 0 "register_operand" "=r,r")
        !           555:         (minus:TQF (match_operand:TQF 1 "register_operand" "0,0")
        !           556:                   (match_operand:TQF 2 "general_operand" "r,m")))]
        !           557:   ""
        !           558:   "@
        !           559:     efsr r%0,r%2
        !           560:     efs  r%0,%2 ")
        !           561: 
        !           562: 
        !           563: ;; multiply instructions
        !           564: 
        !           565: (define_insn "mulqi3"
        !           566:   [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r")
        !           567:         (mult:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0")
        !           568:                  (match_operand:QI 2 "general_operand"  "I,J,M,r,m")))]
        !           569:   ""
        !           570:   "@
        !           571:      misp r%0,%2
        !           572:      misn r%0,%J2
        !           573:      msim r%0,%2
        !           574:      msr  r%0,r%2
        !           575:      ms   r%0,%2  ")
        !           576: 
        !           577: 
        !           578: ; 32-bit product
        !           579: (define_insn "mulqihi3"
        !           580:   [(set (match_operand:HI 0 "register_operand" "=r,r,r")
        !           581:         (mult:HI (match_operand:QI 1 "register_operand" "%0,0,0")
        !           582:                  (match_operand:QI 2 "general_operand" "M,r,m")))]
        !           583:   ""
        !           584:   "@
        !           585:     mim r%0,%1
        !           586:     mr  r%0,r%2
        !           587:     m   r%0,%2 ")
        !           588: 
        !           589: (define_insn "mulhi3"
        !           590:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           591:         (mult:HI (match_operand:HI 1 "register_operand" "%0,0")
        !           592:                  (match_operand:HI 2 "general_operand" "r,m")))]
        !           593:   ""
        !           594:   "@
        !           595:     dmr r%0,r%2
        !           596:     dm  r%0,%2 ")
        !           597: 
        !           598: ; not available on 1750: "umulhi3","umulhisi3","umulsi3" (unsigned multiply's)
        !           599: 
        !           600: (define_insn "mulhf3"
        !           601:   [(set (match_operand:HF 0 "register_operand" "=r,r")
        !           602:         (mult:HF (match_operand:HF 1 "register_operand" "%0,0")
        !           603:                  (match_operand:HF 2 "general_operand" "r,m")))]
        !           604:   ""
        !           605:   "@
        !           606:     fmr r%0,r%2
        !           607:     fm  r%0,%2 ")
        !           608: 
        !           609: (define_insn "multqf3"
        !           610:   [(set (match_operand:TQF 0 "register_operand" "=r,r")
        !           611:         (mult:TQF (match_operand:TQF 1 "register_operand" "%0,0")
        !           612:                  (match_operand:TQF 2 "general_operand" "r,m")))]
        !           613:   ""
        !           614:   "@
        !           615:     efmr r%0,r%2
        !           616:     efm  r%0,%2 ")
        !           617: 
        !           618: 
        !           619: ;; divide instructions
        !           620: ;; The 1750 16bit integer division instructions deliver a 16-bit
        !           621: ;; quotient and a 16-bit remainder, where the remainder is in the next higher
        !           622: ;; register number above the quotient. For now, we haven't found a way
        !           623: ;; to give the reload pass knowledge of this property. So we make do with
        !           624: ;; whatever registers the allocator wants, and willy-nilly output a pair of
        !           625: ;; register-copy ops when needed. (See mod_regno_adjust() in file aux-output.c)
        !           626: ;; A comment in the description of `divmodM4' suggests that one leave the divM3
        !           627: ;; undefined when there is a divmodM4 available.
        !           628: 
        !           629: (define_insn "divmodqi4"
        !           630:   [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r")
        !           631:         (div:QI (match_operand:QI 1 "register_operand" "0,0,0,0,0")
        !           632:                 (match_operand:QI 2 "general_operand"  "I,J,M,r,m")))
        !           633:    (set (match_operand:QI 3 "register_operand" "=r,r,r,r,r")
        !           634:         (mod:QI (match_dup 1) (match_dup 2)))]
        !           635:   ""
        !           636:   "*
        !           637:    {
        !           638:      char *istr;
        !           639:      switch(which_alternative)
        !           640:        {
        !           641:        case 0:
        !           642:          istr = \"disp\";
        !           643:          break;
        !           644:        case 1:
        !           645:          INTVAL(operands[2]) = - INTVAL(operands[2]); /* to be corrected */
        !           646:          istr = \"disn\";
        !           647:          break;
        !           648:        case 2:
        !           649:          istr = \"dvim\";
        !           650:          break;
        !           651:        case 3:
        !           652:          istr = \"dvr \";
        !           653:          break;
        !           654:        case 4:
        !           655:          istr = \"dv  \";
        !           656:          break;
        !           657:       }
        !           658:       return (char *)mod_regno_adjust(istr,operands);
        !           659:      }")
        !           660: 
        !           661: ;; Division for other types is straightforward.
        !           662: 
        !           663: (define_insn "divhi3"
        !           664:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           665:         (div:HI (match_operand:HI 1 "register_operand" "0,0")
        !           666:                 (match_operand:HI 2 "general_operand" "r,m")))]
        !           667:   ""
        !           668:   "@
        !           669:     ddr r%0,r%2
        !           670:     dd  r%0,%2 ")
        !           671: 
        !           672: (define_insn "divhf3"
        !           673:   [(set (match_operand:HF 0 "register_operand" "=r,r")
        !           674:         (div:HF (match_operand:HF 1 "register_operand" "0,0")
        !           675:                 (match_operand:HF 2 "general_operand" "r,m")))]
        !           676:   ""
        !           677:   "@
        !           678:     fdr r%0,r%2
        !           679:     fd  r%0,%2 ")
        !           680: 
        !           681: (define_insn "divtqf3"
        !           682:   [(set (match_operand:TQF 0 "register_operand" "=r,r")
        !           683:         (div:TQF (match_operand:TQF 1 "register_operand" "0,0")
        !           684:                 (match_operand:TQF 2 "general_operand" "r,m")))]
        !           685:   ""
        !           686:   "@
        !           687:     efdr r%0,r%2
        !           688:     efd  r%0,%2 ")
        !           689: 
        !           690: 
        !           691: ;; Other arithmetic instructions:
        !           692: 
        !           693: ;; Absolute value
        !           694: 
        !           695: (define_insn "absqi2"
        !           696:   [(set (match_operand:QI 0 "register_operand" "=r")
        !           697:         (abs:QI (match_operand:QI 1 "register_operand" "r")))]
        !           698:   ""
        !           699:   "abs r%0,r%1")
        !           700: 
        !           701: (define_insn "abshi2"
        !           702:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           703:         (abs:HI (match_operand:HI 1 "register_operand" "r")))]
        !           704:   ""
        !           705:   "dabs r%0,r%1")
        !           706: 
        !           707: (define_insn "abshf2"
        !           708:   [(set (match_operand:HF 0 "register_operand" "=r")
        !           709:         (abs:HF (match_operand:HF 1 "register_operand" "r")))]
        !           710:   ""
        !           711:   "fabs r%0,r%1")
        !           712: 
        !           713: 
        !           714: ;; Negation
        !           715: 
        !           716: (define_insn "negqi2"
        !           717:   [(set (match_operand:QI 0 "register_operand" "=r")
        !           718:         (neg:QI (match_operand:QI 1 "register_operand" "r")))]
        !           719:   ""
        !           720:   "neg r%0,r%1")
        !           721: 
        !           722: (define_insn "neghi2"
        !           723:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           724:         (neg:HI (match_operand:HI 1 "register_operand" "r")))]
        !           725:   ""
        !           726:   "dneg r%0,r%1")
        !           727: 
        !           728: (define_insn "neghf2"
        !           729:   [(set (match_operand:HF 0 "register_operand" "=r")
        !           730:         (neg:HF (match_operand:HF 1 "register_operand" "r")))]
        !           731:   ""
        !           732:   "fneg r%0,r%1")
        !           733: 
        !           734: ; The 1750A does not have an extended float negate instruction, so simulate.
        !           735: (define_expand "negtqf2"
        !           736:   [(set (match_operand:TQF 0 "register_operand" "=&r")
        !           737:         (neg:TQF (match_operand:TQF 1 "register_operand" "r")))]
        !           738:   ""
        !           739:   "
        !           740:    emit_insn(gen_rtx(SET,VOIDmode,operands[0],CONST0_RTX(TQFmode)));
        !           741:    emit_insn(gen_rtx(SET,VOIDmode,operands[0],
        !           742:              gen_rtx(MINUS,TQFmode,operands[0],operands[1])));
        !           743:    DONE;
        !           744:   ")
        !           745: 
        !           746: 
        !           747: ;; bit-logical instructions
        !           748: 
        !           749: ;; AND
        !           750: 
        !           751: (define_insn "andqi3"
        !           752:   [(set (match_operand:QI 0 "general_operand" "=r,r,r")
        !           753:         (and:QI (match_operand:QI 1 "general_operand" "%0,0,0")
        !           754:                 (match_operand:QI 2 "general_operand" "M,r,m")))]
        !           755:   ""
        !           756:   "@
        !           757:     andm r%0,%2
        !           758:     andr r%0,r%2
        !           759:     and  r%0,%2 ")
        !           760: 
        !           761: ; This sets incorrect condition codes. See notice_update_cc()
        !           762: (define_insn "andhi3"
        !           763:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           764:         (and:HI (match_operand:HI 1 "register_operand" "%0")
        !           765:                 (match_operand:HI 2 "register_operand" "r")))]
        !           766:   ""
        !           767:   "danr.m %0,%2")
        !           768: 
        !           769: ;; OR
        !           770: 
        !           771: (define_insn "iorqi3"
        !           772:   [(set (match_operand:QI 0 "general_operand" "=r,r,r")
        !           773:         (ior:QI  (match_operand:QI 1 "general_operand" "%0,0,0")
        !           774:                 (match_operand:QI 2 "general_operand" "M,r,m")))]
        !           775:   ""
        !           776:   "@
        !           777:     orim r%0,%2
        !           778:     orr  r%0,r%2
        !           779:     or   r%0,%2 ")
        !           780: 
        !           781: ; This sets incorrect condition codes. See notice_update_cc()
        !           782: (define_insn "iorhi3"
        !           783:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           784:         (ior:HI (match_operand:HI 1 "register_operand" "%0")
        !           785:                 (match_operand:HI 2 "register_operand" "r")))]
        !           786:   ""
        !           787:   "dorr.m %0,%2")
        !           788: 
        !           789: ;; XOR
        !           790: 
        !           791: (define_insn "xorqi3"
        !           792:   [(set (match_operand:QI 0 "register_operand" "=r,r,r")
        !           793:         (xor:QI (match_operand:QI 1 "register_operand" "%0,0,0")
        !           794:                 (match_operand:QI 2 "general_operand"  "M,r,m")))]
        !           795:   ""
        !           796:   "@
        !           797:     xorm r%0,%2
        !           798:     xorr r%0,r%2
        !           799:     xor  r%0,%2 ")
        !           800: 
        !           801: ; This sets incorrect condition codes. See notice_update_cc()
        !           802: (define_insn "xorhi3"
        !           803:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           804:         (xor:HI (match_operand:HI 1 "register_operand" "%0")
        !           805:                 (match_operand:HI 2 "register_operand" "r")))]
        !           806:   ""
        !           807:   "dxrr.m %0,%2")
        !           808: 
        !           809: ;; NAND
        !           810: 
        !           811: (define_insn ""
        !           812:   [(set (match_operand:QI 0 "register_operand" "=r,r,r")
        !           813:        (ior:QI (not:QI (match_operand:QI 1 "register_operand" "%0,0,0"))
        !           814:                (not:QI (match_operand:QI 2 "general_operand" "M,r,m"))))]
        !           815:   ""
        !           816:   "@
        !           817:     nim r%0,%2
        !           818:     nr  r%0,r%2
        !           819:     n   r%0,%2 ")
        !           820: 
        !           821: ; This sets incorrect condition codes. See notice_update_cc()
        !           822: (define_insn ""
        !           823:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           824:        (ior:HI (not:HI (match_operand:HI 1 "register_operand" "%0"))
        !           825:                (not:HI (match_operand:HI 2 "register_operand" "r"))))]
        !           826:   ""
        !           827:   "dnr.m %0,%2")
        !           828: 
        !           829: ;; NOT
        !           830: 
        !           831: (define_insn "one_cmplqi2"
        !           832:   [(set (match_operand:QI 0 "register_operand" "=r")
        !           833:         (not:QI (match_operand:QI 1 "register_operand" "0")))]
        !           834:   ""
        !           835:   "nr r%0,r%0")
        !           836: 
        !           837: ; This sets incorrect condition codes. See notice_update_cc()
        !           838: (define_insn "one_cmplhi2"
        !           839:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           840:         (not:HI (match_operand:HI 1 "register_operand" "0")))]
        !           841:   ""
        !           842:   "dnr.m %0,%0")
        !           843: 
        !           844: 
        !           845: ;; Shift instructions
        !           846: 
        !           847: ; (What to the 1750 is logical-shift-left, GCC likes to call "arithmetic")
        !           848: (define_insn "ashlqi3"
        !           849:   [(set (match_operand:QI 0 "register_operand" "=r,r,r")
        !           850:         (ashift:QI (match_operand:QI 1 "register_operand" "0,0,0")
        !           851:                    (match_operand:QI 2 "general_operand" "O,I,r")))]
        !           852:   ""
        !           853:   "@
        !           854:     ; optimized away an SLL r%0,0
        !           855:     sll r%0,%2
        !           856:     slr r%0,r%2 ")
        !           857: 
        !           858: (define_insn "ashlhi3"
        !           859:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           860:         (ashift:HI (match_operand:HI 1 "register_operand" "0,0")
        !           861:                    (match_operand:QI 2 "general_operand" "L,r")))]
        !           862:   ""                        ; the 'L' constraint is a slight imprecise...
        !           863:   "@
        !           864:      dsll r%0,%2
        !           865:      dslr r%0,r%2 ")
        !           866: 
        !           867: (define_insn "lshrqi3"
        !           868:   [(set (match_operand:QI 0 "register_operand" "=r,r")
        !           869:         (lshiftrt:QI (match_operand:QI 1 "register_operand" "0,0")
        !           870:                      (match_operand:QI 2 "general_operand" "I,r")))]
        !           871:   ""
        !           872:   "@
        !           873:     srl r%0,%2
        !           874:     neg r%2,r%2\;slr    r%0,r%2 ")
        !           875: 
        !           876: (define_insn "lshrhi3"
        !           877:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           878:         (lshiftrt:HI (match_operand:HI 1 "register_operand" "0,0")
        !           879:                      (match_operand:QI 2 "general_operand" "L,r")))]
        !           880:   ""                        ; the 'L' constraint is a slight imprecise...
        !           881:   "@
        !           882:     dsrl r%0,%2
        !           883:     neg  r%2,r%2\;dslr   r%0,r%2 ")
        !           884: 
        !           885: (define_insn "ashrqi3"
        !           886:   [(set (match_operand:QI 0 "register_operand" "=r,r")
        !           887:         (ashiftrt:QI (match_operand:QI 1 "register_operand" "0,0")
        !           888:                      (match_operand:QI 2 "general_operand" "I,r")))]
        !           889:   ""
        !           890:   "@
        !           891:      sra r%0,%2
        !           892:      neg r%2,r%2\;sar    r%0,r%2 ")
        !           893: 
        !           894: (define_insn "ashrhi3"
        !           895:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           896:         (ashiftrt:HI (match_operand:HI 1 "register_operand" "0,0")
        !           897:                      (match_operand:QI 2 "general_operand" "I,r")))]
        !           898:   ""
        !           899:   "@
        !           900:      dsra r%0,%2
        !           901:      neg  r%2,r%2\;dsar   r%0,r%2 ")
        !           902: 
        !           903: 
        !           904: ;; rotate instructions
        !           905: 
        !           906: (define_insn "rotlqi3"
        !           907:   [(set (match_operand:QI 0 "register_operand" "=r,r")
        !           908:         (rotate:QI (match_operand:QI 1 "register_operand" "0,0")
        !           909:                    (match_operand:QI 2 "general_operand" "I,r")))]
        !           910:   ""
        !           911:   "@
        !           912:     slc r%0,%2
        !           913:     scr r%0,r%2 ")
        !           914: 
        !           915: (define_insn "rotlhi3"
        !           916:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           917:         (rotate:HI (match_operand:HI 1 "register_operand" "0,0")
        !           918:                    (match_operand:QI 2 "general_operand" "I,r")))]
        !           919:   ""
        !           920:   "@
        !           921:     dslc r%0,%2
        !           922:     dscr r%0,r%2 ")
        !           923: 
        !           924: (define_insn "rotrqi3"
        !           925:   [(set (match_operand:QI 0 "register_operand" "=r,r")
        !           926:         (rotatert:QI (match_operand:QI 1 "register_operand" "0,0")
        !           927:                      (match_operand:QI 2 "general_operand" "I,r")))]
        !           928:   ""
        !           929:   "@
        !           930:     slc r%0,%2
        !           931:     neg r%2,r%2\;scr    r%0,r%2 ")
        !           932: 
        !           933: (define_insn "rotrhi3"
        !           934:   [(set (match_operand:HI 0 "register_operand" "=r,r")
        !           935:         (rotatert:HI (match_operand:HI 1 "register_operand" "0,0")
        !           936:                      (match_operand:QI 2 "general_operand" "I,r")))]
        !           937:   ""
        !           938:   "@
        !           939:     dslc r%0,%2
        !           940:     neg  r%2,r%2\;dscr   r%0,r%2 ")
        !           941: 
        !           942: 
        !           943: 
        !           944: ;; Special cases of bit-field insns which we should
        !           945: ;; recognize in preference to the general case.
        !           946: ;; These handle aligned 8-bit and 16-bit fields,
        !           947: ;; which can usually be done with move instructions.
        !           948: ;    1750: t.b.d.
        !           949: ;********************
        !           950: 
        !           951: ;; Bit field instructions, general cases.
        !           952: ;; "o,d" constraint causes a nonoffsetable memref to match the "o"
        !           953: ;; so that its address is reloaded.
        !           954: 
        !           955: ;; (define_insn "extv" ...
        !           956: 
        !           957: ;; (define_insn "extzv" ...
        !           958: 
        !           959: ;; (define_insn "insv" ...
        !           960: 
        !           961: ;; Now recognize bit field insns that operate on registers
        !           962: ;; (or at least were intended to do so).
        !           963: ;[unnamed only]
        !           964: 
        !           965: ;; Special patterns for optimizing bit-field instructions.
        !           966: ;**************************************
        !           967: 
        !           968: ; cc status test ops n.a. on 1750 ......... e.g. "sleu" on 68k:
        !           969: ;  [(set (match_operand:QI 0 "general_operand" "=d")
        !           970: ;        (leu (cc0) (const_int 0)))]
        !           971: ;  ""
        !           972: ;  "* cc_status = cc_prev_status;
        !           973: ;     return \"sls %0\"; ")
        !           974: 
        !           975: 
        !           976: ;; Basic conditional jump instructions.
        !           977: 
        !           978: (define_insn "beq"
        !           979:   [(set (pc)
        !           980:         (if_then_else (eq (cc0)
        !           981:                           (const_int 0))
        !           982:                       (label_ref (match_operand 0 "" ""))
        !           983:                       (pc)))]
        !           984:   ""
        !           985:   "* return (char *)branch_or_jump(\"ez\",CODE_LABEL_NUMBER(operands[0]));
        !           986:   ")
        !           987: 
        !           988: (define_insn "bne"
        !           989:   [(set (pc)
        !           990:         (if_then_else (ne (cc0)
        !           991:                           (const_int 0))
        !           992:                       (label_ref (match_operand 0 "" ""))
        !           993:                       (pc)))]
        !           994:   ""
        !           995:   "* return (char *)branch_or_jump(\"nz\",CODE_LABEL_NUMBER(operands[0]));
        !           996:   ")
        !           997: 
        !           998: (define_insn "bgt"
        !           999:   [(set (pc)
        !          1000:         (if_then_else (gt (cc0)
        !          1001:                           (const_int 0))
        !          1002:                       (label_ref (match_operand 0 "" ""))
        !          1003:                       (pc)))]
        !          1004:   ""
        !          1005:   "* return (char *)branch_or_jump(\"gt\",CODE_LABEL_NUMBER(operands[0]));
        !          1006:   ")
        !          1007: 
        !          1008: (define_insn "blt"
        !          1009:   [(set (pc)
        !          1010:         (if_then_else (lt (cc0)
        !          1011:                           (const_int 0))
        !          1012:                       (label_ref (match_operand 0 "" ""))
        !          1013:                       (pc)))]
        !          1014:   ""
        !          1015:   "* return (char *)branch_or_jump(\"lt\",CODE_LABEL_NUMBER(operands[0]));
        !          1016:   ")
        !          1017: 
        !          1018: (define_insn "bge"
        !          1019:   [(set (pc)
        !          1020:         (if_then_else (ge (cc0)
        !          1021:                           (const_int 0))
        !          1022:                       (label_ref (match_operand 0 "" ""))
        !          1023:                       (pc)))]
        !          1024:   ""
        !          1025:   "* return (char *)branch_or_jump(\"ge\",CODE_LABEL_NUMBER(operands[0]));
        !          1026:   ")
        !          1027: 
        !          1028: (define_insn "ble"
        !          1029:   [(set (pc)
        !          1030:         (if_then_else (le (cc0)
        !          1031:                           (const_int 0))
        !          1032:                       (label_ref (match_operand 0 "" ""))
        !          1033:                       (pc)))]
        !          1034:   ""
        !          1035:   "* return (char *)branch_or_jump(\"le\",CODE_LABEL_NUMBER(operands[0]));
        !          1036:   ")
        !          1037: 
        !          1038: 
        !          1039: ; no unsigned branches available on 1750. But GCC still needs them, so faking:
        !          1040: 
        !          1041: (define_insn "bgtu"
        !          1042:   [(set (pc)
        !          1043:         (if_then_else (gtu (cc0)
        !          1044:                           (const_int 0))
        !          1045:                       (label_ref (match_operand 0 "" ""))
        !          1046:                       (pc)))]
        !          1047:   ""
        !          1048:   "jc gt,%l0 ; Warning: this should be an *unsigned* test!")
        !          1049: 
        !          1050: (define_insn "bltu"
        !          1051:   [(set (pc)
        !          1052:         (if_then_else (ltu (cc0)
        !          1053:                           (const_int 0))
        !          1054:                       (label_ref (match_operand 0 "" ""))
        !          1055:                       (pc)))]
        !          1056:   ""
        !          1057:   "jc lt,%l0 ; Warning: this should be an *unsigned* test!")
        !          1058: 
        !          1059: (define_insn "bgeu"
        !          1060:   [(set (pc)
        !          1061:         (if_then_else (geu (cc0)
        !          1062:                           (const_int 0))
        !          1063:                       (label_ref (match_operand 0 "" ""))
        !          1064:                       (pc)))]
        !          1065:   ""
        !          1066:   "jc ge,%l0 ; Warning: this should be an *unsigned* test!")
        !          1067: 
        !          1068: (define_insn "bleu"
        !          1069:   [(set (pc)
        !          1070:         (if_then_else (leu (cc0)
        !          1071:                           (const_int 0))
        !          1072:                       (label_ref (match_operand 0 "" ""))
        !          1073:                       (pc)))]
        !          1074:   ""
        !          1075:   "jc le,%l0 ; Warning: this should be an *unsigned* test!")
        !          1076: 
        !          1077: 
        !          1078: ;; Negated conditional jump instructions.
        !          1079: 
        !          1080: (define_insn ""
        !          1081:   [(set (pc)
        !          1082:         (if_then_else (eq (cc0)
        !          1083:                           (const_int 0))
        !          1084:                       (pc)
        !          1085:                       (label_ref (match_operand 0 "" ""))))]
        !          1086:   ""
        !          1087:   "* return (char *)branch_or_jump(\"nz\",CODE_LABEL_NUMBER(operands[0]));
        !          1088:   ")
        !          1089: 
        !          1090: (define_insn ""
        !          1091:   [(set (pc)
        !          1092:         (if_then_else (ne (cc0)
        !          1093:                           (const_int 0))
        !          1094:                       (pc)
        !          1095:                       (label_ref (match_operand 0 "" ""))))]
        !          1096:   ""
        !          1097:   "* return (char *)branch_or_jump(\"ez\",CODE_LABEL_NUMBER(operands[0]));
        !          1098:   ")
        !          1099: 
        !          1100: (define_insn ""
        !          1101:   [(set (pc)
        !          1102:         (if_then_else (gt (cc0)
        !          1103:                           (const_int 0))
        !          1104:                       (pc)
        !          1105:                       (label_ref (match_operand 0 "" ""))))]
        !          1106:   ""
        !          1107:   "* return (char *)branch_or_jump(\"le\",CODE_LABEL_NUMBER(operands[0]));
        !          1108:   ")
        !          1109: 
        !          1110: (define_insn ""
        !          1111:   [(set (pc)
        !          1112:         (if_then_else (lt (cc0)
        !          1113:                           (const_int 0))
        !          1114:                       (pc)
        !          1115:                       (label_ref (match_operand 0 "" ""))))]
        !          1116:   ""
        !          1117:   "* return (char *)branch_or_jump(\"ge\",CODE_LABEL_NUMBER(operands[0]));
        !          1118:   ")
        !          1119: 
        !          1120: (define_insn ""
        !          1121:   [(set (pc)
        !          1122:         (if_then_else (ge (cc0)
        !          1123:                           (const_int 0))
        !          1124:                       (pc)
        !          1125:                       (label_ref (match_operand 0 "" ""))))]
        !          1126:   ""
        !          1127:   "* return (char *)branch_or_jump(\"lt\",CODE_LABEL_NUMBER(operands[0]));
        !          1128:   ")
        !          1129: 
        !          1130: (define_insn ""
        !          1131:   [(set (pc)
        !          1132:         (if_then_else (le (cc0)
        !          1133:                           (const_int 0))
        !          1134:                       (pc)
        !          1135:                       (label_ref (match_operand 0 "" ""))))]
        !          1136:   ""
        !          1137:   "* return (char *)branch_or_jump(\"gt\",CODE_LABEL_NUMBER(operands[0]));
        !          1138:   ")
        !          1139: 
        !          1140: 
        !          1141: ;; Negated unsigned conditional jump instructions (faked for 1750).
        !          1142: 
        !          1143: (define_insn ""
        !          1144:   [(set (pc)
        !          1145:         (if_then_else (gtu (cc0)
        !          1146:                           (const_int 0))
        !          1147:                       (pc)
        !          1148:                       (label_ref (match_operand 0 "" ""))))]
        !          1149:   ""
        !          1150:   "jc le,%l0 ;inv.cond. ;Warning: this should be an *unsigned* test!")
        !          1151: 
        !          1152: (define_insn ""
        !          1153:   [(set (pc)
        !          1154:         (if_then_else (ltu (cc0)
        !          1155:                           (const_int 0))
        !          1156:                       (pc)
        !          1157:                       (label_ref (match_operand 0 "" ""))))]
        !          1158:   ""
        !          1159:   "jc ge,%l0 ;inv.cond. ;Warning: this should be an *unsigned* test!")
        !          1160: 
        !          1161: (define_insn ""
        !          1162:   [(set (pc)
        !          1163:         (if_then_else (geu (cc0)
        !          1164:                           (const_int 0))
        !          1165:                       (pc)
        !          1166:                       (label_ref (match_operand 0 "" ""))))]
        !          1167:   ""
        !          1168:   "jc lt,%l0 ;inv.cond. ;Warning: this should be an *unsigned* test!")
        !          1169: 
        !          1170: (define_insn ""
        !          1171:   [(set (pc)
        !          1172:         (if_then_else (leu (cc0)
        !          1173:                           (const_int 0))
        !          1174:                       (pc)
        !          1175:                       (label_ref (match_operand 0 "" ""))))]
        !          1176:   ""
        !          1177:   "jc gt,%l0 ;inv.cond. ;Warning: this should be an *unsigned* test!")
        !          1178: 
        !          1179: ;; Tablejump 
        !          1180: ;; 1750 note: CASE_VECTOR_PC_RELATIVE is not defined
        !          1181: (define_insn "tablejump"
        !          1182:   [(set (pc)
        !          1183:         (match_operand:QI 0 "register_operand" "b"))
        !          1184:    (use (label_ref (match_operand 1 "" "")))]
        !          1185:   ""
        !          1186:   "jc 15,0,r%0   ; tablejump label_ref=%1")
        !          1187: 
        !          1188: 
        !          1189: ;; Unconditional jump
        !          1190: (define_insn "jump"
        !          1191:   [(set (pc)
        !          1192:         (label_ref (match_operand 0 "" "")))]
        !          1193:   ""
        !          1194:   "jc uc,%0")
        !          1195: 
        !          1196: ;; Call subroutine, returning value in operand 0
        !          1197: ;; (which must be a hard register).
        !          1198: (define_insn "call_value"
        !          1199:   [(set (match_operand 0 "register_operand" "r")
        !          1200:         (call (match_operand:QI 1 "memory_operand" "m")
        !          1201:               (match_operand:QI 2 "general_operand" "g")))]
        !          1202:   ;; Operand 2 not really used for 1750.
        !          1203:   ""
        !          1204:   "sjs r15,%1   ; return value in R0")
        !          1205: 
        !          1206: ;; Call subroutine with no return value.
        !          1207: 
        !          1208: ;;  Operand 1 not really used in MIL-STD-1750.
        !          1209: (define_insn ""
        !          1210:   [(call (match_operand:QI 0 "memory_operand" "mp")
        !          1211:          (match_operand:QI 1 "general_operand" ""))]
        !          1212:   ""
        !          1213:   "sjs r15,%0   ; no return value")
        !          1214: 
        !          1215: ;;;;;;;;;;;; 1750: NOT READY YET.
        !          1216: (define_insn "call"
        !          1217:   [(call (match_operand:QI 0 "" "")
        !          1218:          (match_operand:QI 1 "" ""))]
        !          1219:   ""
        !          1220:   "ANYCALL %0")
        !          1221: 
        !          1222: 
        !          1223: ; (define_insn "return"
        !          1224: ;   [(return)]
        !          1225: ;   ""
        !          1226: ;   "*
        !          1227: ;    { 
        !          1228: ;         rtx oprnd = gen_rtx(CONST_INT,VOIDmode,get_frame_size());
        !          1229: ;         output_asm_insn(\"ret.m  %0\",&oprnd);
        !          1230: ;         return \"\;\";
        !          1231: ;    } ")
        !          1232: 
        !          1233: (define_insn "indirect_jump"
        !          1234:   [(set (pc) (match_operand:QI 0 "address_operand" "p"))]
        !          1235:   ""
        !          1236:   "jci 15,%0")
        !          1237: 
        !          1238: (define_insn "nop"
        !          1239:   [(const_int 0)]
        !          1240:   ""
        !          1241:   "nop")
        !          1242: 
        !          1243: 
        !          1244: ;; Subtract One and Jump (if non-zero)
        !          1245: (define_peephole 
        !          1246:   [(set (match_operand:QI 0 "register_operand" "=r")
        !          1247:         (plus:QI (match_operand:QI 1 "register_operand" "%0")
        !          1248:                  (match_operand:QI 2 "immediate_operand" "J")))
        !          1249:    (set (cc0) (match_dup 0))
        !          1250:    (set (pc)
        !          1251:         (if_then_else (ne (cc0) (const_int 0))
        !          1252:          (label_ref (match_operand 3 "" ""))
        !          1253:          (pc)))
        !          1254:    ]
        !          1255:   "INTVAL(operands[2]) == -1"
        !          1256:   "soj r%0,%3")
        !          1257: 
        !          1258: ;;;End.
        !          1259: 

unix.superglobalmegacorp.com

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