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

1.1     ! root        1: 
        !             2: ;;- Machine description for GNU compiler
        !             3: ;;- Vax Version
        !             4: ;;   Copyright (C) 1987, 1988 Free Software Foundation, Inc.
        !             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 patterns.  When multiple patterns apply,
        !            24: ;;- the first one in the file is chosen.
        !            25: ;;-
        !            26: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
        !            27: ;;-
        !            28: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
        !            29: ;;- updates for most instructions.
        !            30: 
        !            31: ; tstsi is first test insn so that it is the one to match
        !            32: ; a constant argument.
        !            33: 
        !            34: (define_insn "tstsi"
        !            35:   [(set (cc0)
        !            36:        (match_operand:SI 0 "general_operand" "g"))]
        !            37:   ""
        !            38:   "tstl %0")
        !            39: 
        !            40: (define_insn "tsthi"
        !            41:   [(set (cc0)
        !            42:        (match_operand:HI 0 "general_operand" "g"))]
        !            43:   ""
        !            44:   "tstw %0")
        !            45: 
        !            46: (define_insn "tstqi"
        !            47:   [(set (cc0)
        !            48:        (match_operand:QI 0 "general_operand" "g"))]
        !            49:   ""
        !            50:   "tstb %0")
        !            51: 
        !            52: (define_insn "tstdf"
        !            53:   [(set (cc0)
        !            54:        (match_operand:DF 0 "general_operand" "gF"))]
        !            55:   ""
        !            56:   "tst%# %0")
        !            57: 
        !            58: (define_insn "tstsf"
        !            59:   [(set (cc0)
        !            60:        (match_operand:SF 0 "general_operand" "gF"))]
        !            61:   ""
        !            62:   "tstf %0")
        !            63: 
        !            64: ;; Put cmpsi first among compare insns so it matches two CONST_INT operands.
        !            65: 
        !            66: (define_insn "cmpsi"
        !            67:   [(set (cc0)
        !            68:        (compare (match_operand:SI 0 "general_operand" "g")
        !            69:                 (match_operand:SI 1 "general_operand" "g")))]
        !            70:   ""
        !            71:   "cmpl %0,%1")
        !            72: 
        !            73: (define_insn "cmphi"
        !            74:   [(set (cc0)
        !            75:        (compare (match_operand:HI 0 "general_operand" "g")
        !            76:                 (match_operand:HI 1 "general_operand" "g")))]
        !            77:   ""
        !            78:   "cmpw %0,%1")
        !            79: 
        !            80: (define_insn "cmpqi"
        !            81:   [(set (cc0)
        !            82:        (compare (match_operand:QI 0 "general_operand" "g")
        !            83:                 (match_operand:QI 1 "general_operand" "g")))]
        !            84:   ""
        !            85:   "cmpb %0,%1")
        !            86: 
        !            87: (define_insn "cmpdf"
        !            88:   [(set (cc0)
        !            89:        (compare (match_operand:DF 0 "general_operand" "gF")
        !            90:                 (match_operand:DF 1 "general_operand" "gF")))]
        !            91:   ""
        !            92:   "cmp%# %0,%1")
        !            93: 
        !            94: (define_insn "cmpsf"
        !            95:   [(set (cc0)
        !            96:        (compare (match_operand:SF 0 "general_operand" "gF")
        !            97:                 (match_operand:SF 1 "general_operand" "gF")))]
        !            98:   ""
        !            99:   "cmpf %0,%1")
        !           100: 
        !           101: (define_insn ""
        !           102:   [(set (cc0)
        !           103:        (and:SI (match_operand:SI 0 "general_operand" "g")
        !           104:                (match_operand:SI 1 "general_operand" "g")))]
        !           105:   ""
        !           106:   "bitl %0,%1")
        !           107: 
        !           108: (define_insn ""
        !           109:   [(set (cc0)
        !           110:        (and:HI (match_operand:HI 0 "general_operand" "g")
        !           111:                (match_operand:HI 1 "general_operand" "g")))]
        !           112:   ""
        !           113:   "bitw %0,%1")
        !           114: 
        !           115: (define_insn ""
        !           116:   [(set (cc0)
        !           117:        (and:QI (match_operand:QI 0 "general_operand" "g")
        !           118:                (match_operand:QI 1 "general_operand" "g")))]
        !           119:   ""
        !           120:   "bitb %0,%1")
        !           121: 
        !           122: (define_insn "movdf"
        !           123:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           124:        (match_operand:DF 1 "general_operand" "gF"))]
        !           125:   ""
        !           126:   "*
        !           127: {
        !           128:   if (operands[1] == dconst0_rtx)
        !           129:     return \"clr%# %0\";
        !           130:   return \"mov%# %1,%0\";
        !           131: }")
        !           132: 
        !           133: (define_insn "movsf"
        !           134:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           135:        (match_operand:SF 1 "general_operand" "gF"))]
        !           136:   ""
        !           137:   "*
        !           138: {
        !           139:   if (operands[1] == fconst0_rtx)
        !           140:     return \"clrf %0\";
        !           141:   return \"movf %1,%0\";
        !           142: }")
        !           143: 
        !           144: ;; Some vaxes don't support this instruction.
        !           145: ;;(define_insn "movti"
        !           146: ;;  [(set (match_operand:TI 0 "general_operand" "=g")
        !           147: ;;     (match_operand:TI 1 "general_operand" "g"))]
        !           148: ;;  ""
        !           149: ;;  "movh %1,%0")
        !           150: 
        !           151: (define_insn "movdi"
        !           152:   [(set (match_operand:DI 0 "general_operand" "=g")
        !           153:        (match_operand:DI 1 "general_operand" "g"))]
        !           154:   ""
        !           155:   "movq %1,%0")
        !           156: 
        !           157: (define_insn "movsi"
        !           158:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           159:        (match_operand:SI 1 "general_operand" "g"))]
        !           160:   ""
        !           161:   "*
        !           162: {
        !           163:   rtx link;
        !           164:   if (operands[1] == const1_rtx
        !           165:       && (link = find_reg_note (insn, REG_WAS_0, 0))
        !           166:       /* Make sure the insn that stored the 0 is still present.  */
        !           167:       && ! XEXP (link, 0)->volatil
        !           168:       && GET_CODE (XEXP (link, 0)) != NOTE
        !           169:       /* Make sure cross jumping didn't happen here.  */
        !           170:       && no_labels_between_p (XEXP (link, 0), insn))
        !           171:     /* Fastest way to change a 0 to a 1.  */
        !           172:     return \"incl %0\";
        !           173:   if (GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == CONST)
        !           174:     {
        !           175:       if (push_operand (operands[0], SImode))
        !           176:        return \"pushab %a1\";
        !           177:       return \"movab %a1,%0\";
        !           178:     }
        !           179:   /* this is slower than a movl, except when pushing an operand */
        !           180:   if (operands[1] == const0_rtx)
        !           181:     return \"clrl %0\";
        !           182:   if (GET_CODE (operands[1]) == CONST_INT
        !           183:       && (unsigned) INTVAL (operands[1]) >= 64)
        !           184:     {
        !           185:       int i = INTVAL (operands[1]);
        !           186:       if ((unsigned)(~i) < 64)
        !           187:        {
        !           188:          operands[1] = gen_rtx (CONST_INT, VOIDmode, ~i);
        !           189:          return \"mcoml %1,%0\";
        !           190:        }
        !           191:       if ((unsigned)i < 127)
        !           192:        {
        !           193:          operands[1] = gen_rtx (CONST_INT, VOIDmode, 63);
        !           194:          operands[2] = gen_rtx (CONST_INT, VOIDmode, i-63);
        !           195:          return \"addl3 %2,%1,%0\";
        !           196:        }
        !           197:       /* trading speed for space */
        !           198:       if ((unsigned)i < 0x100)
        !           199:        return \"movzbl %1,%0\";
        !           200:       if (i >= -0x80 && i < 0)
        !           201:        return \"cvtbl %1,%0\";
        !           202:       if ((unsigned)i < 0x10000)
        !           203:        return \"movzwl %1,%0\";
        !           204:       if (i >= -0x8000 && i < 0)
        !           205:        return \"cvtwl %1,%0\";
        !           206:     }
        !           207:   if (push_operand (operands[0], SImode))
        !           208:     return \"pushl %1\";
        !           209:   return \"movl %1,%0\";
        !           210: }")
        !           211: 
        !           212: (define_insn "movhi"
        !           213:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           214:        (match_operand:HI 1 "general_operand" "g"))]
        !           215:   ""
        !           216:   "*
        !           217: {
        !           218:   rtx link;
        !           219:   if (operands[1] == const1_rtx
        !           220:       && (link = find_reg_note (insn, REG_WAS_0, 0))
        !           221:       /* Make sure the insn that stored the 0 is still present.  */
        !           222:       && ! XEXP (link, 0)->volatil
        !           223:       && GET_CODE (XEXP (link, 0)) != NOTE
        !           224:       /* Make sure cross jumping didn't happen here.  */
        !           225:       && no_labels_between_p (XEXP (link, 0), insn))
        !           226:     /* Fastest way to change a 0 to a 1.  */
        !           227:     return \"incw %0\";
        !           228:   if (operands[1] == const0_rtx)
        !           229:     return \"clrw %0\";
        !           230:   if (GET_CODE (operands[1]) == CONST_INT
        !           231:       && (unsigned) INTVAL (operands[1]) >= 64)
        !           232:     {
        !           233:       int i = INTVAL (operands[1]);
        !           234:       if ((unsigned)((~i) & 0xffff) < 64)
        !           235:        {
        !           236:          operands[1] = gen_rtx (CONST_INT, VOIDmode, (~i) & 0xffff);
        !           237:          return \"mcomw %1,%0\";
        !           238:        }
        !           239:       if ((unsigned)(i & 0xffff) < 127)
        !           240:        {
        !           241:           operands[1] = gen_rtx (CONST_INT, VOIDmode, 63);
        !           242:           operands[2] = gen_rtx (CONST_INT, VOIDmode, (i-63) & 0xffff);
        !           243:           return \"addw3 %2,%1,%0\";
        !           244:        }
        !           245:       /* this is a lot slower, and only saves 1 measly byte! */
        !           246:       /* if ((unsigned)i < 0x100)
        !           247:           return \"movzbw %1,%0\"; */
        !           248:       /* if (i >= -0x80 && i < 0)
        !           249:           return \"cvtbw %1,%0\"; */
        !           250:     }
        !           251:   return \"movw %1,%0\";
        !           252: }")
        !           253: 
        !           254: (define_insn "movqi"
        !           255:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           256:        (match_operand:QI 1 "general_operand" "g"))]
        !           257:   ""
        !           258:   "*
        !           259: {
        !           260:   if (operands[1] == const0_rtx)
        !           261:     return \"clrb %0\";
        !           262:   if (GET_CODE (operands[1]) == CONST_INT
        !           263:       && (unsigned) INTVAL (operands[1]) >= 64)
        !           264:     {
        !           265:       int i = INTVAL (operands[1]);
        !           266:       if ((unsigned)((~i) & 0xff) < 64)
        !           267:        {
        !           268:          operands[1] = gen_rtx (CONST_INT, VOIDmode, (~i) & 0xff);
        !           269:          return \"mcomb %1,%0\";
        !           270:        }
        !           271: #if 0
        !           272:       /* ASCII alphabetics */
        !           273:       if (((unsigned) INTVAL (operands[1]) &0xff) < 127)
        !           274:        {
        !           275:          operands[1] = gen_rtx (CONST_INT, VOIDmode, 63);
        !           276:          operands[2] = gen_rtx (CONST_INT, VOIDmode, i-63);
        !           277:          return \"addb3 %2,%1,%0\";
        !           278:        }
        !           279: #endif
        !           280:     }
        !           281:   return \"movb %1,%0\";
        !           282: }")
        !           283: 
        !           284: ;; The definition of this insn does not really explain what it does,
        !           285: ;; but it should suffice
        !           286: ;; that anything generated as this insn will be recognized as one
        !           287: ;; and that it won't successfully combine with anything.
        !           288: (define_insn "movstrhi"
        !           289:   [(set (match_operand:BLK 0 "general_operand" "=g")
        !           290:        (match_operand:BLK 1 "general_operand" "g"))
        !           291:    (use (match_operand:HI 2 "general_operand" "g"))
        !           292:    (clobber (reg:SI 0))
        !           293:    (clobber (reg:SI 1))
        !           294:    (clobber (reg:SI 2))
        !           295:    (clobber (reg:SI 3))
        !           296:    (clobber (reg:SI 4))
        !           297:    (clobber (reg:SI 5))]
        !           298:   ""
        !           299:   "movc3 %2,%1,%0")
        !           300: 
        !           301: ;; Extension and truncation insns.
        !           302: ;; Those for integer source operand
        !           303: ;; are ordered widest source type first.
        !           304: 
        !           305: (define_insn "truncsiqi2"
        !           306:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           307:        (truncate:QI (match_operand:SI 1 "general_operand" "g")))]
        !           308:   ""
        !           309:   "cvtlb %1,%0")
        !           310: 
        !           311: (define_insn "truncsihi2"
        !           312:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           313:        (truncate:HI (match_operand:SI 1 "general_operand" "g")))]
        !           314:   ""
        !           315:   "cvtlw %1,%0")
        !           316: 
        !           317: (define_insn "trunchiqi2"
        !           318:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           319:        (truncate:QI (match_operand:HI 1 "general_operand" "g")))]
        !           320:   ""
        !           321:   "cvtwb %1,%0")
        !           322: 
        !           323: (define_insn "extendhisi2"
        !           324:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           325:        (sign_extend:SI (match_operand:HI 1 "general_operand" "g")))]
        !           326:   ""
        !           327:   "cvtwl %1,%0")
        !           328: 
        !           329: (define_insn "extendqihi2"
        !           330:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           331:        (sign_extend:HI (match_operand:QI 1 "general_operand" "g")))]
        !           332:   ""
        !           333:   "cvtbw %1,%0")
        !           334: 
        !           335: (define_insn "extendqisi2"
        !           336:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           337:        (sign_extend:SI (match_operand:QI 1 "general_operand" "g")))]
        !           338:   ""
        !           339:   "cvtbl %1,%0")
        !           340: 
        !           341: (define_insn "extendsfdf2"
        !           342:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           343:        (float_extend:DF (match_operand:SF 1 "general_operand" "gF")))]
        !           344:   ""
        !           345:   "cvtf%# %1,%0")
        !           346: 
        !           347: (define_insn "truncdfsf2"
        !           348:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           349:        (float_truncate:SF (match_operand:DF 1 "general_operand" "gF")))]
        !           350:   ""
        !           351:   "cvt%#f %1,%0")
        !           352: 
        !           353: (define_insn "zero_extendhisi2"
        !           354:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           355:        (zero_extend:SI (match_operand:HI 1 "general_operand" "g")))]
        !           356:   ""
        !           357:   "movzwl %1,%0")
        !           358: 
        !           359: (define_insn "zero_extendqihi2"
        !           360:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           361:        (zero_extend:HI (match_operand:QI 1 "general_operand" "g")))]
        !           362:   ""
        !           363:   "movzbw %1,%0")
        !           364: 
        !           365: (define_insn "zero_extendqisi2"
        !           366:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           367:        (zero_extend:SI (match_operand:QI 1 "general_operand" "g")))]
        !           368:   ""
        !           369:   "movzbl %1,%0")
        !           370: 
        !           371: ;; Fix-to-float conversion insns.
        !           372: ;; Note that the ones that start with SImode come first.
        !           373: ;; That is so that an operand that is a CONST_INT
        !           374: ;; (and therefore lacks a specific machine mode).
        !           375: ;; will be recognized as SImode (which is always valid)
        !           376: ;; rather than as QImode or HImode.
        !           377: 
        !           378: (define_insn "floatsisf2"
        !           379:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           380:        (float:SF (match_operand:SI 1 "general_operand" "g")))]
        !           381:   ""
        !           382:   "cvtlf %1,%0")
        !           383: 
        !           384: (define_insn "floatsidf2"
        !           385:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           386:        (float:DF (match_operand:SI 1 "general_operand" "g")))]
        !           387:   ""
        !           388:   "cvtl%# %1,%0")
        !           389: 
        !           390: (define_insn "floathisf2"
        !           391:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           392:        (float:SF (match_operand:HI 1 "general_operand" "g")))]
        !           393:   ""
        !           394:   "cvtwf %1,%0")
        !           395: 
        !           396: (define_insn "floathidf2"
        !           397:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           398:        (float:DF (match_operand:HI 1 "general_operand" "g")))]
        !           399:   ""
        !           400:   "cvtw%# %1,%0")
        !           401: 
        !           402: (define_insn "floatqisf2"
        !           403:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           404:        (float:SF (match_operand:QI 1 "general_operand" "g")))]
        !           405:   ""
        !           406:   "cvtbf %1,%0")
        !           407: 
        !           408: (define_insn "floatqidf2"
        !           409:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           410:        (float:DF (match_operand:QI 1 "general_operand" "g")))]
        !           411:   ""
        !           412:   "cvtb%# %1,%0")
        !           413: 
        !           414: ;; Float-to-fix conversion insns.
        !           415: 
        !           416: (define_insn "fix_truncsfqi2"
        !           417:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           418:        (fix:QI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
        !           419:   ""
        !           420:   "cvtfb %1,%0")
        !           421: 
        !           422: (define_insn "fix_truncsfhi2"
        !           423:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           424:        (fix:HI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
        !           425:   ""
        !           426:   "cvtfw %1,%0")
        !           427: 
        !           428: (define_insn "fix_truncsfsi2"
        !           429:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           430:        (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
        !           431:   ""
        !           432:   "cvtfl %1,%0")
        !           433: 
        !           434: (define_insn "fix_truncdfqi2"
        !           435:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           436:        (fix:QI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
        !           437:   ""
        !           438:   "cvt%#b %1,%0")
        !           439: 
        !           440: (define_insn "fix_truncdfhi2"
        !           441:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           442:        (fix:HI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
        !           443:   ""
        !           444:   "cvt%#w %1,%0")
        !           445: 
        !           446: (define_insn "fix_truncdfsi2"
        !           447:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           448:        (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
        !           449:   ""
        !           450:   "cvt%#l %1,%0")
        !           451: 
        !           452: ;;- All kinds of add instructions.
        !           453: 
        !           454: (define_insn "adddf3"
        !           455:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           456:        (plus:DF (match_operand:DF 1 "general_operand" "gF")
        !           457:                 (match_operand:DF 2 "general_operand" "gF")))]
        !           458:   ""
        !           459:   "*
        !           460: {
        !           461:   if (rtx_equal_p (operands[0], operands[1]))
        !           462:     return \"add%#2 %2,%0\";
        !           463:   if (rtx_equal_p (operands[0], operands[2]))
        !           464:     return \"add%#2 %1,%0\";
        !           465:   return \"add%#3 %1,%2,%0\";
        !           466: }")
        !           467: 
        !           468: (define_insn "addsf3"
        !           469:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           470:        (plus:SF (match_operand:SF 1 "general_operand" "gF")
        !           471:                 (match_operand:SF 2 "general_operand" "gF")))]
        !           472:   ""
        !           473:   "*
        !           474: {
        !           475:   if (rtx_equal_p (operands[0], operands[1]))
        !           476:     return \"addf2 %2,%0\";
        !           477:   if (rtx_equal_p (operands[0], operands[2]))
        !           478:     return \"addf2 %1,%0\";
        !           479:   return \"addf3 %1,%2,%0\";
        !           480: }")
        !           481: 
        !           482: (define_insn "addsi3"
        !           483:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           484:        (plus:SI (match_operand:SI 1 "general_operand" "g")
        !           485:                 (match_operand:SI 2 "general_operand" "g")))]
        !           486:   ""
        !           487:   "*
        !           488: {
        !           489:   if (rtx_equal_p (operands[0], operands[1]))
        !           490:     {
        !           491:       if (operands[2] == const1_rtx)
        !           492:        return \"incl %0\";
        !           493:       if (GET_CODE (operands[2]) == CONST_INT
        !           494:          && INTVAL (operands[2]) == -1)
        !           495:        return \"decl %0\";
        !           496:       if (GET_CODE (operands[2]) == CONST_INT
        !           497:          && (unsigned) (- INTVAL (operands[2])) < 64)
        !           498:        return \"subl2 $%n2,%0\";
        !           499:       if (GET_CODE (operands[2]) == CONST_INT
        !           500:          && (unsigned) INTVAL (operands[2]) >= 64
        !           501:          && GET_CODE (operands[1]) == REG)
        !           502:        return \"movab %c2(%1),%0\";
        !           503:       return \"addl2 %2,%0\";
        !           504:     }
        !           505:   if (rtx_equal_p (operands[0], operands[2]))
        !           506:     return \"addl2 %1,%0\";
        !           507:   if (GET_CODE (operands[2]) == CONST_INT
        !           508:       && (unsigned) (- INTVAL (operands[2])) < 64)
        !           509:     return \"subl3 $%n2,%1,%0\";
        !           510:   if (GET_CODE (operands[2]) == CONST_INT
        !           511:       && (unsigned) INTVAL (operands[2]) >= 64
        !           512:       && GET_CODE (operands[1]) == REG)
        !           513:     {
        !           514:       if (push_operand (operands[0], SImode))
        !           515:        return \"pushab %c2(%1)\";
        !           516:       return \"movab %c2(%1),%0\";
        !           517:     }
        !           518:   return \"addl3 %1,%2,%0\";
        !           519: }")
        !           520: 
        !           521: (define_insn "addhi3"
        !           522:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           523:        (plus:HI (match_operand:HI 1 "general_operand" "g")
        !           524:                 (match_operand:HI 2 "general_operand" "g")))]
        !           525:   ""
        !           526:   "*
        !           527: {
        !           528:   if (rtx_equal_p (operands[0], operands[1]))
        !           529:     {
        !           530:       if (operands[2] == const1_rtx)
        !           531:        return \"incw %0\";
        !           532:       if (GET_CODE (operands[1]) == CONST_INT
        !           533:          && INTVAL (operands[1]) == -1)
        !           534:        return \"decw %0\";
        !           535:       if (GET_CODE (operands[2]) == CONST_INT
        !           536:          && (unsigned) (- INTVAL (operands[2])) < 64)
        !           537:        return \"subw2 $%n2,%0\";
        !           538:       return \"addw2 %2,%0\";
        !           539:     }
        !           540:   if (rtx_equal_p (operands[0], operands[2]))
        !           541:     return \"addw2 %1,%0\";
        !           542:   if (GET_CODE (operands[2]) == CONST_INT
        !           543:       && (unsigned) (- INTVAL (operands[2])) < 64)
        !           544:     return \"subw3 $%n2,%1,%0\";
        !           545:   return \"addw3 %1,%2,%0\";
        !           546: }")
        !           547: 
        !           548: (define_insn "addqi3"
        !           549:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           550:        (plus:QI (match_operand:QI 1 "general_operand" "g")
        !           551:                 (match_operand:QI 2 "general_operand" "g")))]
        !           552:   ""
        !           553:   "*
        !           554: {
        !           555:   if (rtx_equal_p (operands[0], operands[1]))
        !           556:     {
        !           557:       if (operands[2] == const1_rtx)
        !           558:        return \"incb %0\";
        !           559:       if (GET_CODE (operands[1]) == CONST_INT
        !           560:          && INTVAL (operands[1]) == -1)
        !           561:        return \"decb %0\";
        !           562:       if (GET_CODE (operands[2]) == CONST_INT
        !           563:          && (unsigned) (- INTVAL (operands[2])) < 64)
        !           564:        return \"subb2 $%n2,%0\";
        !           565:       return \"addb2 %2,%0\";
        !           566:     }
        !           567:   if (rtx_equal_p (operands[0], operands[2]))
        !           568:     return \"addb2 %1,%0\";
        !           569:   if (GET_CODE (operands[2]) == CONST_INT
        !           570:       && (unsigned) (- INTVAL (operands[2])) < 64)
        !           571:     return \"subb3 $%n2,%1,%0\";
        !           572:   return \"addb3 %1,%2,%0\";
        !           573: }")
        !           574: 
        !           575: ;;- All kinds of subtract instructions.
        !           576: 
        !           577: (define_insn "subdf3"
        !           578:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           579:        (minus:DF (match_operand:DF 1 "general_operand" "gF")
        !           580:                  (match_operand:DF 2 "general_operand" "gF")))]
        !           581:   ""
        !           582:   "*
        !           583: {
        !           584:   if (rtx_equal_p (operands[0], operands[1]))
        !           585:     return \"sub%#2 %2,%0\";
        !           586:   return \"sub%#3 %2,%1,%0\";
        !           587: }")
        !           588: 
        !           589: (define_insn "subsf3"
        !           590:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           591:        (minus:SF (match_operand:SF 1 "general_operand" "gF")
        !           592:                  (match_operand:SF 2 "general_operand" "gF")))]
        !           593:   ""
        !           594:   "*
        !           595: {
        !           596:   if (rtx_equal_p (operands[0], operands[1]))
        !           597:     return \"subf2 %2,%0\";
        !           598:   return \"subf3 %2,%1,%0\";
        !           599: }")
        !           600: 
        !           601: (define_insn "subsi3"
        !           602:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           603:        (minus:SI (match_operand:SI 1 "general_operand" "g")
        !           604:                  (match_operand:SI 2 "general_operand" "g")))]
        !           605:   ""
        !           606:   "*
        !           607: {
        !           608:   if (rtx_equal_p (operands[0], operands[1]))
        !           609:     {
        !           610:       if (operands[2] == const1_rtx)
        !           611:        return \"decl %0\";
        !           612:       return \"subl2 %2,%0\";
        !           613:     }
        !           614:   return \"subl3 %2,%1,%0\";
        !           615: }")
        !           616: 
        !           617: (define_insn "subhi3"
        !           618:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           619:        (minus:HI (match_operand:HI 1 "general_operand" "g")
        !           620:                  (match_operand:HI 2 "general_operand" "g")))]
        !           621:   ""
        !           622:   "*
        !           623: {
        !           624:   if (rtx_equal_p (operands[0], operands[1]))
        !           625:     {
        !           626:       if (operands[2] == const1_rtx)
        !           627:        return \"decw %0\";
        !           628:       return \"subw2 %2,%0\";
        !           629:     }
        !           630:   return \"subw3 %2,%1,%0\";
        !           631: }")
        !           632: 
        !           633: (define_insn "subqi3"
        !           634:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           635:        (minus:QI (match_operand:QI 1 "general_operand" "g")
        !           636:                  (match_operand:QI 2 "general_operand" "g")))]
        !           637:   ""
        !           638:   "*
        !           639: {
        !           640:   if (rtx_equal_p (operands[0], operands[1]))
        !           641:     {
        !           642:       if (operands[2] == const1_rtx)
        !           643:        return \"decb %0\";
        !           644:       return \"subb2 %2,%0\";
        !           645:     }
        !           646:   return \"subb3 %2,%1,%0\";
        !           647: }")
        !           648: 
        !           649: ;;- Multiply instructions.
        !           650: 
        !           651: (define_insn "muldf3"
        !           652:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           653:        (mult:DF (match_operand:DF 1 "general_operand" "gF")
        !           654:                 (match_operand:DF 2 "general_operand" "gF")))]
        !           655:   ""
        !           656:   "*
        !           657: {
        !           658:   if (rtx_equal_p (operands[0], operands[1]))
        !           659:     return \"mul%#2 %2,%0\";
        !           660:   if (rtx_equal_p (operands[0], operands[2]))
        !           661:     return \"mul%#2 %1,%0\";
        !           662:   return \"mul%#3 %1,%2,%0\";
        !           663: }")
        !           664: 
        !           665: (define_insn "mulsf3"
        !           666:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           667:        (mult:SF (match_operand:SF 1 "general_operand" "gF")
        !           668:                 (match_operand:SF 2 "general_operand" "gF")))]
        !           669:   ""
        !           670:   "*
        !           671: {
        !           672:   if (rtx_equal_p (operands[0], operands[1]))
        !           673:     return \"mulf2 %2,%0\";
        !           674:   if (rtx_equal_p (operands[0], operands[2]))
        !           675:     return \"mulf2 %1,%0\";
        !           676:   return \"mulf3 %1,%2,%0\";
        !           677: }")
        !           678: 
        !           679: (define_insn "mulsi3"
        !           680:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           681:        (mult:SI (match_operand:SI 1 "general_operand" "g")
        !           682:                 (match_operand:SI 2 "general_operand" "g")))]
        !           683:   ""
        !           684:   "*
        !           685: {
        !           686:   if (rtx_equal_p (operands[0], operands[1]))
        !           687:     return \"mull2 %2,%0\";
        !           688:   if (rtx_equal_p (operands[0], operands[2]))
        !           689:     return \"mull2 %1,%0\";
        !           690:   return \"mull3 %1,%2,%0\";
        !           691: }")
        !           692: 
        !           693: (define_insn "mulhi3"
        !           694:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           695:        (mult:HI (match_operand:HI 1 "general_operand" "g")
        !           696:                 (match_operand:HI 2 "general_operand" "g")))]
        !           697:   ""
        !           698:   "*
        !           699: {
        !           700:   if (rtx_equal_p (operands[0], operands[1]))
        !           701:     return \"mulw2 %2,%0\";
        !           702:   if (rtx_equal_p (operands[0], operands[2]))
        !           703:     return \"mulw2 %1,%0\";
        !           704:   return \"mulw3 %1,%2,%0\";
        !           705: }")
        !           706: 
        !           707: (define_insn "mulqi3"
        !           708:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           709:        (mult:QI (match_operand:QI 1 "general_operand" "g")
        !           710:                 (match_operand:QI 2 "general_operand" "g")))]
        !           711:   ""
        !           712:   "*
        !           713: {
        !           714:   if (rtx_equal_p (operands[0], operands[1]))
        !           715:     return \"mulb2 %2,%0\";
        !           716:   if (rtx_equal_p (operands[0], operands[2]))
        !           717:     return \"mulb2 %1,%0\";
        !           718:   return \"mulb3 %1,%2,%0\";
        !           719: }")
        !           720: 
        !           721: ;;- Divide instructions.
        !           722: 
        !           723: (define_insn "divdf3"
        !           724:   [(set (match_operand:DF 0 "general_operand" "=g")
        !           725:        (div:DF (match_operand:DF 1 "general_operand" "gF")
        !           726:                (match_operand:DF 2 "general_operand" "gF")))]
        !           727:   ""
        !           728:   "*
        !           729: {
        !           730:   if (rtx_equal_p (operands[0], operands[1]))
        !           731:     return \"div%#2 %2,%0\";
        !           732:   return \"div%#3 %2,%1,%0\";
        !           733: }")
        !           734: 
        !           735: (define_insn "divsf3"
        !           736:   [(set (match_operand:SF 0 "general_operand" "=g")
        !           737:        (div:SF (match_operand:SF 1 "general_operand" "gF")
        !           738:                (match_operand:SF 2 "general_operand" "gF")))]
        !           739:   ""
        !           740:   "*
        !           741: {
        !           742:   if (rtx_equal_p (operands[0], operands[1]))
        !           743:     return \"divf2 %2,%0\";
        !           744:   return \"divf3 %2,%1,%0\";
        !           745: }")
        !           746: 
        !           747: (define_insn "divsi3"
        !           748:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           749:        (div:SI (match_operand:SI 1 "general_operand" "g")
        !           750:                (match_operand:SI 2 "general_operand" "g")))]
        !           751:   ""
        !           752:   "*
        !           753: {
        !           754:   if (rtx_equal_p (operands[0], operands[1]))
        !           755:     return \"divl2 %2,%0\";
        !           756:   return \"divl3 %2,%1,%0\";
        !           757: }")
        !           758: 
        !           759: (define_insn "divhi3"
        !           760:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           761:        (div:HI (match_operand:HI 1 "general_operand" "g")
        !           762:                (match_operand:HI 2 "general_operand" "g")))]
        !           763:   ""
        !           764:   "*
        !           765: {
        !           766:   if (rtx_equal_p (operands[0], operands[1]))
        !           767:     return \"divw2 %2,%0\";
        !           768:   return \"divw3 %2,%1,%0\";
        !           769: }")
        !           770: 
        !           771: (define_insn "divqi3"
        !           772:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           773:        (div:QI (match_operand:QI 1 "general_operand" "g")
        !           774:                (match_operand:QI 2 "general_operand" "g")))]
        !           775:   ""
        !           776:   "*
        !           777: {
        !           778:   if (rtx_equal_p (operands[0], operands[1]))
        !           779:     return \"divb2 %2,%0\";
        !           780:   return \"divb3 %2,%1,%0\";
        !           781: }")
        !           782: 
        !           783: ;This is left out because it is very slow;
        !           784: ;we are better off programming around the "lack" of this insn.
        !           785: ;(define_insn "divmoddisi4"
        !           786: ;  [(set (match_operand:SI 0 "general_operand" "=g")
        !           787: ;      (div:SI (match_operand:DI 1 "general_operand" "g")
        !           788: ;              (match_operand:SI 2 "general_operand" "g")))
        !           789: ;   (set (match_operand:SI 3 "general_operand" "=g")
        !           790: ;      (mod:SI (match_operand:DI 1 "general_operand" "g")
        !           791: ;              (match_operand:SI 2 "general_operand" "g")))]
        !           792: ;  ""
        !           793: ;  "ediv %2,%1,%0,%3")
        !           794: 
        !           795: ;; Bit-and on the vax is done with a clear-bits insn.
        !           796: (define_expand "andsi3"
        !           797:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           798:        (and:SI (match_operand:SI 1 "general_operand" "g")
        !           799:                (not:SI (match_operand:SI 2 "general_operand" "g"))))]
        !           800:   ""
        !           801:   "
        !           802: {
        !           803:   extern rtx expand_unop ();
        !           804:   if (GET_CODE (operands[2]) == CONST_INT)
        !           805:     operands[2] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
        !           806:   else
        !           807:     operands[2] = expand_unop (SImode, one_cmpl_optab, operands[2], 0, 1);
        !           808: }")
        !           809: 
        !           810: (define_expand "andhi3"
        !           811:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           812:        (and:HI (match_operand:HI 1 "general_operand" "g")
        !           813:                (not:HI (match_operand:HI 2 "general_operand" "g"))))]
        !           814:   ""
        !           815:   "
        !           816: {
        !           817:   extern rtx expand_unop ();
        !           818:   rtx op = operands[2];
        !           819:   if (GET_CODE (op) == CONST_INT)
        !           820:     operands[2] = gen_rtx (CONST_INT, VOIDmode,
        !           821:                           ((1 << 16) - 1) & ~INTVAL (op));
        !           822:   else
        !           823:     operands[2] = expand_unop (HImode, one_cmpl_optab, op, 0, 1);
        !           824: }")
        !           825: 
        !           826: (define_expand "andqi3"
        !           827:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           828:        (and:QI (match_operand:QI 1 "general_operand" "g")
        !           829:                (not:QI (match_operand:QI 2 "general_operand" "g"))))]
        !           830:   ""
        !           831:   "
        !           832: {
        !           833:   extern rtx expand_unop ();
        !           834:   rtx op = operands[2];
        !           835:   if (GET_CODE (op) == CONST_INT)
        !           836:     operands[2] = gen_rtx (CONST_INT, VOIDmode,
        !           837:                           ((1 << 8) - 1) & ~INTVAL (op));
        !           838:   else
        !           839:     operands[2] = expand_unop (QImode, one_cmpl_optab, op, 0, 1);
        !           840: }")
        !           841: 
        !           842: (define_insn "andcbsi3"
        !           843:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           844:        (and:SI (match_operand:SI 1 "general_operand" "g")
        !           845:                (not:SI (match_operand:SI 2 "general_operand" "g"))))]
        !           846:   ""
        !           847:   "*
        !           848: {
        !           849:   if (rtx_equal_p (operands[0], operands[1]))
        !           850:     return \"bicl2 %2,%0\";
        !           851:   return \"bicl3 %2,%1,%0\";
        !           852: }")
        !           853: 
        !           854: (define_insn "andcbhi3"
        !           855:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           856:        (and:HI (match_operand:HI 1 "general_operand" "g")
        !           857:                (not:HI (match_operand:HI 2 "general_operand" "g"))))]
        !           858:   ""
        !           859:   "*
        !           860: {
        !           861:   if (rtx_equal_p (operands[0], operands[1]))
        !           862:     return \"bicw2 %2,%0\";
        !           863:   return \"bicw3 %2,%1,%0\";
        !           864: }")
        !           865: 
        !           866: (define_insn "andcbqi3"
        !           867:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           868:        (and:QI (match_operand:QI 1 "general_operand" "g")
        !           869:                (not:QI (match_operand:QI 2 "general_operand" "g"))))]
        !           870:   ""
        !           871:   "*
        !           872: {
        !           873:   if (rtx_equal_p (operands[0], operands[1]))
        !           874:     return \"bicb2 %2,%0\";
        !           875:   return \"bicb3 %2,%1,%0\";
        !           876: }")
        !           877: 
        !           878: ;; The following are needed because constant propagation can
        !           879: ;; create them starting from the bic insn patterns above.
        !           880: 
        !           881: (define_insn ""
        !           882:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           883:        (and:SI (match_operand:SI 1 "general_operand" "g")
        !           884:                (match_operand:SI 2 "general_operand" "g")))]
        !           885:   "GET_CODE (operands[2]) == CONST_INT"
        !           886:   "*
        !           887: { operands[2] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
        !           888:   if (rtx_equal_p (operands[1], operands[0]))
        !           889:     return \"bicl2 %2,%0\";
        !           890:   return \"bicl3 %2,%1,%0\";
        !           891: }")
        !           892: 
        !           893: (define_insn ""
        !           894:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           895:        (and:HI (match_operand:HI 1 "general_operand" "g")
        !           896:                (match_operand:HI 2 "general_operand" "g")))]
        !           897:   "GET_CODE (operands[2]) == CONST_INT"
        !           898:   "*
        !           899: { operands[2] = gen_rtx (CONST_INT, VOIDmode, 0xffff & ~INTVAL (operands[2]));
        !           900:   if (rtx_equal_p (operands[1], operands[0]))
        !           901:     return \"bicw2 %2,%0\";
        !           902:   return \"bicw3 %2,%1,%0\";
        !           903: }")
        !           904: 
        !           905: (define_insn ""
        !           906:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           907:        (and:QI (match_operand:QI 1 "general_operand" "g")
        !           908:                (match_operand:QI 2 "general_operand" "g")))]
        !           909:   "GET_CODE (operands[2]) == CONST_INT"
        !           910:   "*
        !           911: { operands[2] = gen_rtx (CONST_INT, VOIDmode, 0xff & ~INTVAL (operands[2]));
        !           912:   if (rtx_equal_p (operands[1], operands[0]))
        !           913:     return \"bicb2 %2,%0\";
        !           914:   return \"bicb3 %2,%1,%0\";
        !           915: }")
        !           916: 
        !           917: ;;- Bit set instructions.
        !           918: 
        !           919: (define_insn "iorsi3"
        !           920:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           921:        (ior:SI (match_operand:SI 1 "general_operand" "g")
        !           922:                (match_operand:SI 2 "general_operand" "g")))]
        !           923:   ""
        !           924:   "*
        !           925: {
        !           926:   if (rtx_equal_p (operands[0], operands[1]))
        !           927:     return \"bisl2 %2,%0\";
        !           928:   if (rtx_equal_p (operands[0], operands[2]))
        !           929:     return \"bisl2 %1,%0\";
        !           930:   return \"bisl3 %2,%1,%0\";
        !           931: }")
        !           932: 
        !           933: (define_insn "iorhi3"
        !           934:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           935:        (ior:HI (match_operand:HI 1 "general_operand" "g")
        !           936:                (match_operand:HI 2 "general_operand" "g")))]
        !           937:   ""
        !           938:   "*
        !           939: {
        !           940:   if (rtx_equal_p (operands[0], operands[1]))
        !           941:     return \"bisw2 %2,%0\";
        !           942:   if (rtx_equal_p (operands[0], operands[2]))
        !           943:     return \"bisw2 %1,%0\";
        !           944:   return \"bisw3 %2,%1,%0\";
        !           945: }")
        !           946: 
        !           947: (define_insn "iorqi3"
        !           948:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           949:        (ior:QI (match_operand:QI 1 "general_operand" "g")
        !           950:                (match_operand:QI 2 "general_operand" "g")))]
        !           951:   ""
        !           952:   "*
        !           953: {
        !           954:   if (rtx_equal_p (operands[0], operands[1]))
        !           955:     return \"bisb2 %2,%0\";
        !           956:   if (rtx_equal_p (operands[0], operands[2]))
        !           957:     return \"bisb2 %1,%0\";
        !           958:   return \"bisb3 %2,%1,%0\";
        !           959: }")
        !           960: 
        !           961: ;;- xor instructions.
        !           962: 
        !           963: (define_insn "xorsi3"
        !           964:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           965:        (xor:SI (match_operand:SI 1 "general_operand" "g")
        !           966:                (match_operand:SI 2 "general_operand" "g")))]
        !           967:   ""
        !           968:   "*
        !           969: {
        !           970:   if (rtx_equal_p (operands[0], operands[1]))
        !           971:     return \"xorl2 %2,%0\";
        !           972:   if (rtx_equal_p (operands[0], operands[2]))
        !           973:     return \"xorl2 %1,%0\";
        !           974:   return \"xorl3 %2,%1,%0\";
        !           975: }")
        !           976: 
        !           977: (define_insn "xorhi3"
        !           978:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           979:        (xor:HI (match_operand:HI 1 "general_operand" "g")
        !           980:                (match_operand:HI 2 "general_operand" "g")))]
        !           981:   ""
        !           982:   "*
        !           983: {
        !           984:   if (rtx_equal_p (operands[0], operands[1]))
        !           985:     return \"xorw2 %2,%0\";
        !           986:   if (rtx_equal_p (operands[0], operands[2]))
        !           987:     return \"xorw2 %1,%0\";
        !           988:   return \"xorw3 %2,%1,%0\";
        !           989: }")
        !           990: 
        !           991: (define_insn "xorqi3"
        !           992:   [(set (match_operand:QI 0 "general_operand" "=g")
        !           993:        (xor:QI (match_operand:QI 1 "general_operand" "g")
        !           994:                (match_operand:QI 2 "general_operand" "g")))]
        !           995:   ""
        !           996:   "*
        !           997: {
        !           998:   if (rtx_equal_p (operands[0], operands[1]))
        !           999:     return \"xorb2 %2,%0\";
        !          1000:   if (rtx_equal_p (operands[0], operands[2]))
        !          1001:     return \"xorb2 %1,%0\";
        !          1002:   return \"xorb3 %2,%1,%0\";
        !          1003: }")
        !          1004: 
        !          1005: (define_insn "negdf2"
        !          1006:   [(set (match_operand:DF 0 "general_operand" "=g")
        !          1007:        (neg:DF (match_operand:DF 1 "general_operand" "gF")))]
        !          1008:   ""
        !          1009:   "mneg%# %1,%0")
        !          1010: 
        !          1011: (define_insn "negsf2"
        !          1012:   [(set (match_operand:SF 0 "general_operand" "=g")
        !          1013:        (neg:SF (match_operand:SF 1 "general_operand" "gF")))]
        !          1014:   ""
        !          1015:   "mnegf %1,%0")
        !          1016: 
        !          1017: (define_insn "negsi2"
        !          1018:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1019:        (neg:SI (match_operand:SI 1 "general_operand" "g")))]
        !          1020:   ""
        !          1021:   "mnegl %1,%0")
        !          1022: 
        !          1023: (define_insn "neghi2"
        !          1024:   [(set (match_operand:HI 0 "general_operand" "=g")
        !          1025:        (neg:HI (match_operand:HI 1 "general_operand" "g")))]
        !          1026:   ""
        !          1027:   "mnegw %1,%0")
        !          1028: 
        !          1029: (define_insn "negqi2"
        !          1030:   [(set (match_operand:QI 0 "general_operand" "=g")
        !          1031:        (neg:QI (match_operand:QI 1 "general_operand" "g")))]
        !          1032:   ""
        !          1033:   "mnegb %1,%0")
        !          1034: 
        !          1035: (define_insn "one_cmplsi2"
        !          1036:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1037:        (not:SI (match_operand:SI 1 "general_operand" "g")))]
        !          1038:   ""
        !          1039:   "mcoml %1,%0")
        !          1040: 
        !          1041: (define_insn "one_cmplhi2"
        !          1042:   [(set (match_operand:HI 0 "general_operand" "=g")
        !          1043:        (not:HI (match_operand:HI 1 "general_operand" "g")))]
        !          1044:   ""
        !          1045:   "mcomw %1,%0")
        !          1046: 
        !          1047: (define_insn "one_cmplqi2"
        !          1048:   [(set (match_operand:QI 0 "general_operand" "=g")
        !          1049:        (not:QI (match_operand:QI 1 "general_operand" "g")))]
        !          1050:   ""
        !          1051:   "mcomb %1,%0")
        !          1052: 
        !          1053: ;; Arithmetic right shift on the vax works by negating the shift count.
        !          1054: (define_expand "ashrsi3"
        !          1055:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1056:        (ashift:SI (match_operand:SI 1 "general_operand" "g")
        !          1057:                   (match_operand:QI 2 "general_operand" "g")))]
        !          1058:   ""
        !          1059:   "
        !          1060: {
        !          1061:   operands[2] = negate_rtx (QImode, operands[2]);
        !          1062: }")
        !          1063: 
        !          1064: (define_insn "ashlsi3"
        !          1065:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1066:        (ashift:SI (match_operand:SI 1 "general_operand" "g")
        !          1067:                   (match_operand:QI 2 "general_operand" "g")))]
        !          1068:   ""
        !          1069:   "*
        !          1070: {
        !          1071:   if (operands[2] == const1_rtx && rtx_equal_p (operands[0], operands[1]))
        !          1072:     return \"addl2 %0,%0\";
        !          1073:   if (GET_CODE (operands[1]) == REG
        !          1074:       && GET_CODE (operands[2]) == CONST_INT)
        !          1075:     {
        !          1076:       int i = INTVAL (operands[2]);
        !          1077:       if (i == 1)
        !          1078:        return \"addl3 %1,%1,%0\";
        !          1079:       if (i == 2)
        !          1080:        return \"moval 0[%1],%0\";
        !          1081:       if (i == 3)
        !          1082:        return \"movad 0[%1],%0\";
        !          1083:     }
        !          1084:   return \"ashl %2,%1,%0\";
        !          1085: }")
        !          1086: 
        !          1087: ;; Arithmetic right shift on the vax works by negating the shift count.
        !          1088: (define_expand "ashrdi3"
        !          1089:   [(set (match_operand:DI 0 "general_operand" "=g")
        !          1090:        (ashift:DI (match_operand:DI 1 "general_operand" "g")
        !          1091:                   (match_operand:QI 2 "general_operand" "g")))]
        !          1092:   ""
        !          1093:   "
        !          1094: {
        !          1095:   operands[2] = negate_rtx (QImode, operands[2]);
        !          1096: }")
        !          1097: 
        !          1098: (define_insn "ashldi3"
        !          1099:   [(set (match_operand:DI 0 "general_operand" "=g")
        !          1100:        (ashift:DI (match_operand:DI 1 "general_operand" "g")
        !          1101:                   (match_operand:QI 2 "general_operand" "g")))]
        !          1102:   ""
        !          1103:   "ashq %2,%1,%0")
        !          1104: 
        !          1105: ;; Rotate right on the vax works by negating the shift count.
        !          1106: (define_expand "rotrsi3"
        !          1107:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1108:        (rotate:SI (match_operand:SI 1 "general_operand" "g")
        !          1109:                   (match_operand:QI 2 "general_operand" "g")))]
        !          1110:   ""
        !          1111:   "
        !          1112: {
        !          1113:   operands[2] = negate_rtx (QImode, operands[2]);
        !          1114: }")
        !          1115: 
        !          1116: (define_insn "rotlsi3"
        !          1117:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1118:        (rotate:SI (match_operand:SI 1 "general_operand" "g")
        !          1119:                   (match_operand:QI 2 "general_operand" "g")))]
        !          1120:   ""
        !          1121:   "rotl %2,%1,%0")
        !          1122: 
        !          1123: ;This insn is probably slower than a multiply and an add.
        !          1124: ;(define_insn ""
        !          1125: ;  [(set (match_operand:SI 0 "general_operand" "=g")
        !          1126: ;      (mult:SI (plus:SI (match_operand:SI 1 "general_operand" "g")
        !          1127: ;                        (match_operand:SI 2 "general_operand" "g"))
        !          1128: ;               (match_operand:SI 3 "general_operand" "g")))]
        !          1129: ;  ""
        !          1130: ;  "index %1,$0x80000000,$0x7fffffff,%3,%2,%0")
        !          1131: 
        !          1132: ;; Special cases of bit-field insns which we should
        !          1133: ;; recognize in preference to the general case.
        !          1134: ;; These handle aligned 8-bit and 16-bit fields,
        !          1135: ;; which can usually be done with move instructions.
        !          1136: 
        !          1137: (define_insn ""
        !          1138:   [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+ro")
        !          1139:                         (match_operand:SI 1 "immediate_operand" "i")
        !          1140:                         (match_operand:SI 2 "immediate_operand" "i"))
        !          1141:        (match_operand:SI 3 "general_operand" "g"))]
        !          1142:    "GET_CODE (operands[1]) == CONST_INT
        !          1143:    && (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
        !          1144:    && GET_CODE (operands[2]) == CONST_INT
        !          1145:    && INTVAL (operands[2]) % INTVAL (operands[1]) == 0
        !          1146:    && (GET_CODE (operands[0]) == REG
        !          1147:        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
        !          1148:   "*
        !          1149: {
        !          1150:   if (REG_P (operands[0]))
        !          1151:     {
        !          1152:       if (INTVAL (operands[2]) != 0)
        !          1153:        return \"insv %3,%2,%1,%0\";
        !          1154:     }
        !          1155:   else
        !          1156:     operands[0]
        !          1157:       = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
        !          1158: 
        !          1159:   if (INTVAL (operands[1]) == 8)
        !          1160:     return \"movb %3,%0\";
        !          1161:   return \"movw %3,%0\";
        !          1162: }")
        !          1163: 
        !          1164: (define_insn ""
        !          1165:   [(set (match_operand:SI 0 "general_operand" "=&g")
        !          1166:        (zero_extract:SI (match_operand:SI 1 "general_operand" "ro")
        !          1167:                         (match_operand:SI 2 "immediate_operand" "i")
        !          1168:                         (match_operand:SI 3 "immediate_operand" "i")))]
        !          1169:    "GET_CODE (operands[2]) == CONST_INT
        !          1170:    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
        !          1171:    && GET_CODE (operands[3]) == CONST_INT
        !          1172:    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
        !          1173:    && (GET_CODE (operands[1]) == REG
        !          1174:        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
        !          1175:   "*
        !          1176: {
        !          1177:   if (REG_P (operands[1]))
        !          1178:     {
        !          1179:       if (INTVAL (operands[3]) != 0)
        !          1180:        return \"extzv %3,%2,%1,%0\";
        !          1181:     }
        !          1182:   else
        !          1183:     operands[1]
        !          1184:       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
        !          1185: 
        !          1186:   if (INTVAL (operands[2]) == 8)
        !          1187:     return \"movzbl %1,%0\";
        !          1188:   return \"movzwl %1,%0\";
        !          1189: }")
        !          1190: 
        !          1191: (define_insn ""
        !          1192:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1193:        (sign_extract:SI (match_operand:SI 1 "general_operand" "ro")
        !          1194:                         (match_operand:SI 2 "immediate_operand" "i")
        !          1195:                         (match_operand:SI 3 "immediate_operand" "i")))]
        !          1196:    "GET_CODE (operands[2]) == CONST_INT
        !          1197:    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
        !          1198:    && GET_CODE (operands[3]) == CONST_INT
        !          1199:    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
        !          1200:    && (GET_CODE (operands[1]) == REG
        !          1201:        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
        !          1202:   "*
        !          1203: {
        !          1204:   if (REG_P (operands[1]))
        !          1205:     {
        !          1206:       if (INTVAL (operands[3]) != 0)
        !          1207:        return \"extv %3,%2,%1,%0\";
        !          1208:     }
        !          1209:   else
        !          1210:     operands[1]
        !          1211:       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
        !          1212: 
        !          1213:   if (INTVAL (operands[2]) == 8)
        !          1214:     return \"cvtbl %1,%0\";
        !          1215:   return \"cvtwl %1,%0\";
        !          1216: }")
        !          1217: 
        !          1218: ;; Register-only SImode cases of bit-field insns.
        !          1219: 
        !          1220: (define_insn ""
        !          1221:   [(set (cc0)
        !          1222:        (compare
        !          1223:         (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
        !          1224:                          (match_operand:SI 1 "general_operand" "g")
        !          1225:                          (match_operand:SI 2 "general_operand" "g"))
        !          1226:         (match_operand:SI 3 "general_operand" "g")))]
        !          1227:   ""
        !          1228:   "cmpv %2,%1,%0,%3")
        !          1229: 
        !          1230: (define_insn ""
        !          1231:   [(set (cc0)
        !          1232:        (compare
        !          1233:         (zero_extract:SI (match_operand:SI 0 "general_operand" "r")
        !          1234:                          (match_operand:SI 1 "general_operand" "g")
        !          1235:                          (match_operand:SI 2 "general_operand" "g"))
        !          1236:         (match_operand:SI 3 "general_operand" "g")))]
        !          1237:   ""
        !          1238:   "cmpzv %2,%1,%0,%3")
        !          1239: 
        !          1240: (define_insn ""
        !          1241:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1242:        (sign_extract:SI (match_operand:SI 1 "general_operand" "r")
        !          1243:                         (match_operand:SI 2 "general_operand" "g")
        !          1244:                         (match_operand:SI 3 "general_operand" "g")))]
        !          1245:   ""
        !          1246:   "extv %3,%2,%1,%0")
        !          1247: 
        !          1248: (define_insn ""
        !          1249:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1250:        (zero_extract:SI (match_operand:SI 1 "general_operand" "r")
        !          1251:                         (match_operand:SI 2 "general_operand" "g")
        !          1252:                         (match_operand:SI 3 "general_operand" "g")))]
        !          1253:   ""
        !          1254:   "extzv %3,%2,%1,%0")
        !          1255: 
        !          1256: ;; Non-register cases.
        !          1257: ;; nonimmediate_operand is used to make sure that mode-ambiguous cases
        !          1258: ;; don't match these (and therefore match the cases above instead).
        !          1259: 
        !          1260: (define_insn ""
        !          1261:   [(set (cc0)
        !          1262:        (compare
        !          1263:         (sign_extract:SI (match_operand:QI 0 "nonimmediate_operand" "rm")
        !          1264:                          (match_operand:SI 1 "general_operand" "g")
        !          1265:                          (match_operand:SI 2 "general_operand" "g"))
        !          1266:         (match_operand:SI 3 "general_operand" "g")))]
        !          1267:   ""
        !          1268:   "cmpv %2,%1,%0,%3")
        !          1269: 
        !          1270: (define_insn ""
        !          1271:   [(set (cc0)
        !          1272:        (compare
        !          1273:         (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "rm")
        !          1274:                          (match_operand:SI 1 "general_operand" "g")
        !          1275:                          (match_operand:SI 2 "general_operand" "g"))
        !          1276:         (match_operand:SI 3 "general_operand" "g")))]
        !          1277:   ""
        !          1278:   "cmpzv %2,%1,%0,%3")
        !          1279: 
        !          1280: (define_insn "extv"
        !          1281:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1282:        (sign_extract:SI (match_operand:QI 1 "nonimmediate_operand" "rm")
        !          1283:                         (match_operand:SI 2 "general_operand" "g")
        !          1284:                         (match_operand:SI 3 "general_operand" "g")))]
        !          1285:   ""
        !          1286:   "extv %3,%2,%1,%0")
        !          1287: 
        !          1288: (define_insn "extzv"
        !          1289:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          1290:        (zero_extract:SI (match_operand:QI 1 "nonimmediate_operand" "rm")
        !          1291:                         (match_operand:SI 2 "general_operand" "g")
        !          1292:                         (match_operand:SI 3 "general_operand" "g")))]
        !          1293:   ""
        !          1294:   "extzv %3,%2,%1,%0")
        !          1295: 
        !          1296: (define_insn "insv"
        !          1297:   [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "+g")
        !          1298:                         (match_operand:SI 1 "general_operand" "g")
        !          1299:                         (match_operand:SI 2 "general_operand" "g"))
        !          1300:        (match_operand:SI 3 "general_operand" "g"))]
        !          1301:   ""
        !          1302:   "insv %3,%2,%1,%0")
        !          1303: 
        !          1304: (define_insn ""
        !          1305:   [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
        !          1306:                         (match_operand:SI 1 "general_operand" "g")
        !          1307:                         (match_operand:SI 2 "general_operand" "g"))
        !          1308:        (match_operand:SI 3 "general_operand" "g"))]
        !          1309:   ""
        !          1310:   "insv %3,%2,%1,%0")
        !          1311: 
        !          1312: (define_insn "jump"
        !          1313:   [(set (pc)
        !          1314:        (label_ref (match_operand 0 "" "")))]
        !          1315:   ""
        !          1316:   "jbr %l0")
        !          1317: 
        !          1318: (define_insn "beq"
        !          1319:   [(set (pc)
        !          1320:        (if_then_else (eq (cc0)
        !          1321:                          (const_int 0))
        !          1322:                      (label_ref (match_operand 0 "" ""))
        !          1323:                      (pc)))]
        !          1324:   ""
        !          1325:   "jeql %l0")
        !          1326: 
        !          1327: (define_insn "bne"
        !          1328:   [(set (pc)
        !          1329:        (if_then_else (ne (cc0)
        !          1330:                          (const_int 0))
        !          1331:                      (label_ref (match_operand 0 "" ""))
        !          1332:                      (pc)))]
        !          1333:   ""
        !          1334:   "jneq %l0")
        !          1335: 
        !          1336: (define_insn "bgt"
        !          1337:   [(set (pc)
        !          1338:        (if_then_else (gt (cc0)
        !          1339:                          (const_int 0))
        !          1340:                      (label_ref (match_operand 0 "" ""))
        !          1341:                      (pc)))]
        !          1342:   ""
        !          1343:   "jgtr %l0")
        !          1344: 
        !          1345: (define_insn "bgtu"
        !          1346:   [(set (pc)
        !          1347:        (if_then_else (gtu (cc0)
        !          1348:                           (const_int 0))
        !          1349:                      (label_ref (match_operand 0 "" ""))
        !          1350:                      (pc)))]
        !          1351:   ""
        !          1352:   "jgtru %l0")
        !          1353: 
        !          1354: (define_insn "blt"
        !          1355:   [(set (pc)
        !          1356:        (if_then_else (lt (cc0)
        !          1357:                          (const_int 0))
        !          1358:                      (label_ref (match_operand 0 "" ""))
        !          1359:                      (pc)))]
        !          1360:   ""
        !          1361:   "jlss %l0")
        !          1362: 
        !          1363: (define_insn "bltu"
        !          1364:   [(set (pc)
        !          1365:        (if_then_else (ltu (cc0)
        !          1366:                           (const_int 0))
        !          1367:                      (label_ref (match_operand 0 "" ""))
        !          1368:                      (pc)))]
        !          1369:   ""
        !          1370:   "jlssu %l0")
        !          1371: 
        !          1372: (define_insn "bge"
        !          1373:   [(set (pc)
        !          1374:        (if_then_else (ge (cc0)
        !          1375:                          (const_int 0))
        !          1376:                      (label_ref (match_operand 0 "" ""))
        !          1377:                      (pc)))]
        !          1378:   ""
        !          1379:   "jgeq %l0")
        !          1380: 
        !          1381: (define_insn "bgeu"
        !          1382:   [(set (pc)
        !          1383:        (if_then_else (geu (cc0)
        !          1384:                           (const_int 0))
        !          1385:                      (label_ref (match_operand 0 "" ""))
        !          1386:                      (pc)))]
        !          1387:   ""
        !          1388:   "jgequ %l0")
        !          1389: 
        !          1390: (define_insn "ble"
        !          1391:   [(set (pc)
        !          1392:        (if_then_else (le (cc0)
        !          1393:                          (const_int 0))
        !          1394:                      (label_ref (match_operand 0 "" ""))
        !          1395:                      (pc)))]
        !          1396:   ""
        !          1397:   "jleq %l0")
        !          1398: 
        !          1399: (define_insn "bleu"
        !          1400:   [(set (pc)
        !          1401:        (if_then_else (leu (cc0)
        !          1402:                           (const_int 0))
        !          1403:                      (label_ref (match_operand 0 "" ""))
        !          1404:                      (pc)))]
        !          1405:   ""
        !          1406:   "jlequ %l0")
        !          1407: 
        !          1408: (define_insn ""
        !          1409:   [(set (pc)
        !          1410:        (if_then_else (eq (cc0)
        !          1411:                          (const_int 0))
        !          1412:                      (pc)
        !          1413:                      (label_ref (match_operand 0 "" ""))))]
        !          1414:   ""
        !          1415:   "jneq %l0")
        !          1416: 
        !          1417: (define_insn ""
        !          1418:   [(set (pc)
        !          1419:        (if_then_else (ne (cc0)
        !          1420:                          (const_int 0))
        !          1421:                      (pc)
        !          1422:                      (label_ref (match_operand 0 "" ""))))]
        !          1423:   ""
        !          1424:   "jeql %l0")
        !          1425: 
        !          1426: (define_insn ""
        !          1427:   [(set (pc)
        !          1428:        (if_then_else (gt (cc0)
        !          1429:                          (const_int 0))
        !          1430:                      (pc)
        !          1431:                      (label_ref (match_operand 0 "" ""))))]
        !          1432:   ""
        !          1433:   "jleq %l0")
        !          1434: 
        !          1435: (define_insn ""
        !          1436:   [(set (pc)
        !          1437:        (if_then_else (gtu (cc0)
        !          1438:                           (const_int 0))
        !          1439:                      (pc)
        !          1440:                      (label_ref (match_operand 0 "" ""))))]
        !          1441:   ""
        !          1442:   "jlequ %l0")
        !          1443: 
        !          1444: (define_insn ""
        !          1445:   [(set (pc)
        !          1446:        (if_then_else (lt (cc0)
        !          1447:                          (const_int 0))
        !          1448:                      (pc)
        !          1449:                      (label_ref (match_operand 0 "" ""))))]
        !          1450:   ""
        !          1451:   "jgeq %l0")
        !          1452: 
        !          1453: (define_insn ""
        !          1454:   [(set (pc)
        !          1455:        (if_then_else (ltu (cc0)
        !          1456:                           (const_int 0))
        !          1457:                      (pc)
        !          1458:                      (label_ref (match_operand 0 "" ""))))]
        !          1459:   ""
        !          1460:   "jgequ %l0")
        !          1461: 
        !          1462: (define_insn ""
        !          1463:   [(set (pc)
        !          1464:        (if_then_else (ge (cc0)
        !          1465:                          (const_int 0))
        !          1466:                      (pc)
        !          1467:                      (label_ref (match_operand 0 "" ""))))]
        !          1468:   ""
        !          1469:   "jlss %l0")
        !          1470: 
        !          1471: (define_insn ""
        !          1472:   [(set (pc)
        !          1473:        (if_then_else (geu (cc0)
        !          1474:                           (const_int 0))
        !          1475:                      (pc)
        !          1476:                      (label_ref (match_operand 0 "" ""))))]
        !          1477:   ""
        !          1478:   "jlssu %l0")
        !          1479: 
        !          1480: (define_insn ""
        !          1481:   [(set (pc)
        !          1482:        (if_then_else (le (cc0)
        !          1483:                          (const_int 0))
        !          1484:                      (pc)
        !          1485:                      (label_ref (match_operand 0 "" ""))))]
        !          1486:   ""
        !          1487:   "jgtr %l0")
        !          1488: 
        !          1489: (define_insn ""
        !          1490:   [(set (pc)
        !          1491:        (if_then_else (leu (cc0)
        !          1492:                           (const_int 0))
        !          1493:                      (pc)
        !          1494:                      (label_ref (match_operand 0 "" ""))))]
        !          1495:   ""
        !          1496:   "jgtru %l0")
        !          1497: 
        !          1498: ;; Recognize jlbs and jlbc insns.
        !          1499: ;; These come before the jbc and jbs recognizers so these will be preferred.
        !          1500: 
        !          1501: (define_insn ""
        !          1502:   [(set (pc)
        !          1503:        (if_then_else
        !          1504:         (ne (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1505:                     (const_int 1))
        !          1506:             (const_int 0))
        !          1507:         (label_ref (match_operand 1 "" ""))
        !          1508:         (pc)))]
        !          1509:   "GET_CODE (operands[0]) != MEM
        !          1510:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1511:   "jlbs %0,%l1")
        !          1512: 
        !          1513: (define_insn ""
        !          1514:   [(set (pc)
        !          1515:        (if_then_else
        !          1516:         (eq (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1517:                     (const_int 1))
        !          1518:             (const_int 0))
        !          1519:         (label_ref (match_operand 1 "" ""))
        !          1520:         (pc)))]
        !          1521:   "GET_CODE (operands[0]) != MEM
        !          1522:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1523:   "jlbc %0,%l1")
        !          1524: 
        !          1525: (define_insn ""
        !          1526:   [(set (pc)
        !          1527:        (if_then_else
        !          1528:         (ne (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1529:                     (const_int 1))
        !          1530:             (const_int 0))
        !          1531:         (pc)
        !          1532:         (label_ref (match_operand 1 "" ""))))]
        !          1533:   "GET_CODE (operands[0]) != MEM
        !          1534:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1535:   "jlbc %0,%l1")
        !          1536: 
        !          1537: (define_insn ""
        !          1538:   [(set (pc)
        !          1539:        (if_then_else
        !          1540:         (eq (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1541:                     (const_int 1))
        !          1542:             (const_int 0))
        !          1543:         (pc)
        !          1544:         (label_ref (match_operand 1 "" ""))))]
        !          1545:   "GET_CODE (operands[0]) != MEM
        !          1546:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1547:   "jlbs %0,%l1")
        !          1548: 
        !          1549: ;; These four entries allow a jlbc or jlbs to be made
        !          1550: ;; by combination with a bic.
        !          1551: (define_insn ""
        !          1552:   [(set (pc)
        !          1553:        (if_then_else
        !          1554:         (ne (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1555:                     (not:SI (const_int -2)))
        !          1556:             (const_int 0))
        !          1557:         (label_ref (match_operand 1 "" ""))
        !          1558:         (pc)))]
        !          1559:   "GET_CODE (operands[0]) != MEM
        !          1560:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1561:   "jlbs %0,%l1")
        !          1562: 
        !          1563: (define_insn ""
        !          1564:   [(set (pc)
        !          1565:        (if_then_else
        !          1566:         (eq (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1567:                     (not:SI (const_int -2)))
        !          1568:             (const_int 0))
        !          1569:         (label_ref (match_operand 1 "" ""))
        !          1570:         (pc)))]
        !          1571:   "GET_CODE (operands[0]) != MEM
        !          1572:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1573:   "jlbc %0,%l1")
        !          1574: 
        !          1575: (define_insn ""
        !          1576:   [(set (pc)
        !          1577:        (if_then_else
        !          1578:         (ne (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1579:                     (not:SI (const_int -2)))
        !          1580:             (const_int 0))
        !          1581:         (pc)
        !          1582:         (label_ref (match_operand 1 "" ""))))]
        !          1583:   "GET_CODE (operands[0]) != MEM
        !          1584:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1585:   "jlbc %0,%l1")
        !          1586: 
        !          1587: (define_insn ""
        !          1588:   [(set (pc)
        !          1589:        (if_then_else
        !          1590:         (eq (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1591:                     (not:SI (const_int -2)))
        !          1592:             (const_int 0))
        !          1593:         (pc)
        !          1594:         (label_ref (match_operand 1 "" ""))))]
        !          1595:   "GET_CODE (operands[0]) != MEM
        !          1596:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1597:   "jlbs %0,%l1")
        !          1598: 
        !          1599: ;; Recognize jbs and jbc instructions.
        !          1600: 
        !          1601: (define_insn ""
        !          1602:   [(set (pc)
        !          1603:        (if_then_else
        !          1604:         (ne (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
        !          1605:                              (const_int 1)
        !          1606:                              (match_operand:SI 1 "general_operand" "g"))
        !          1607:             (const_int 0))
        !          1608:         (label_ref (match_operand 2 "" ""))
        !          1609:         (pc)))]
        !          1610:   ""
        !          1611:   "jbs %1,%0,%l2")
        !          1612: 
        !          1613: (define_insn ""
        !          1614:   [(set (pc)
        !          1615:        (if_then_else
        !          1616:         (eq (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
        !          1617:                              (const_int 1)
        !          1618:                              (match_operand:SI 1 "general_operand" "g"))
        !          1619:             (const_int 0))
        !          1620:         (label_ref (match_operand 2 "" ""))
        !          1621:         (pc)))]
        !          1622:   ""
        !          1623:   "jbc %1,%0,%l2")
        !          1624: 
        !          1625: (define_insn ""
        !          1626:   [(set (pc)
        !          1627:        (if_then_else
        !          1628:         (ne (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
        !          1629:                              (const_int 1)
        !          1630:                              (match_operand:SI 1 "general_operand" "g"))
        !          1631:             (const_int 0))
        !          1632:         (pc)
        !          1633:         (label_ref (match_operand 2 "" ""))))]
        !          1634:   ""
        !          1635:   "jbc %1,%0,%l2")
        !          1636: 
        !          1637: (define_insn ""
        !          1638:   [(set (pc)
        !          1639:        (if_then_else
        !          1640:         (eq (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
        !          1641:                              (const_int 1)
        !          1642:                              (match_operand:SI 1 "general_operand" "g"))
        !          1643:             (const_int 0))
        !          1644:         (pc)
        !          1645:         (label_ref (match_operand 2 "" ""))))]
        !          1646:   ""
        !          1647:   "jbs %1,%0,%l2")
        !          1648: 
        !          1649: (define_insn ""
        !          1650:   [(set (pc)
        !          1651:        (if_then_else
        !          1652:         (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
        !          1653:                              (const_int 1)
        !          1654:                              (match_operand:SI 1 "general_operand" "g"))
        !          1655:             (const_int 0))
        !          1656:         (label_ref (match_operand 2 "" ""))
        !          1657:         (pc)))]
        !          1658:   "GET_CODE (operands[0]) != MEM
        !          1659:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1660:   "jbs %1,%0,%l2")
        !          1661: 
        !          1662: (define_insn ""
        !          1663:   [(set (pc)
        !          1664:        (if_then_else
        !          1665:         (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
        !          1666:                              (const_int 1)
        !          1667:                              (match_operand:SI 1 "general_operand" "g"))
        !          1668:             (const_int 0))
        !          1669:         (label_ref (match_operand 2 "" ""))
        !          1670:         (pc)))]
        !          1671:   "GET_CODE (operands[0]) != MEM
        !          1672:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1673:   "jbc %1,%0,%l2")
        !          1674: 
        !          1675: (define_insn ""
        !          1676:   [(set (pc)
        !          1677:        (if_then_else
        !          1678:         (eq (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1679:                     (match_operand:SI 1 "general_operand" "g"))
        !          1680:             (const_int 0))
        !          1681:         (pc)
        !          1682:         (label_ref (match_operand 2 "" ""))))]
        !          1683:   "GET_CODE (operands[1]) == CONST_INT
        !          1684:    && exact_log2 (INTVAL (operands[1])) >= 0
        !          1685:    && (GET_CODE (operands[0]) != MEM
        !          1686:        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
        !          1687:   "*
        !          1688: {
        !          1689:   operands[1]
        !          1690:     = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1])));
        !          1691:   return \"jbs %1,%0,%l2\";
        !          1692: }")
        !          1693: 
        !          1694: (define_insn ""
        !          1695:   [(set (pc)
        !          1696:        (if_then_else
        !          1697:         (eq (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1698:                     (match_operand:SI 1 "general_operand" "g"))
        !          1699:             (const_int 0))
        !          1700:         (label_ref (match_operand 2 "" ""))
        !          1701:         (pc)))]
        !          1702:   "GET_CODE (operands[1]) == CONST_INT
        !          1703:    && exact_log2 (INTVAL (operands[1])) >= 0
        !          1704:    && (GET_CODE (operands[0]) != MEM
        !          1705:        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
        !          1706:   "*
        !          1707: {
        !          1708:   operands[1]
        !          1709:     = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1])));
        !          1710:   return \"jbc %1,%0,%l2\";
        !          1711: }")
        !          1712: 
        !          1713: (define_insn ""
        !          1714:   [(set (pc)
        !          1715:        (if_then_else
        !          1716:         (ne (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1717:                     (match_operand:SI 1 "general_operand" "g"))
        !          1718:             (const_int 0))
        !          1719:         (pc)
        !          1720:         (label_ref (match_operand 2 "" ""))))]
        !          1721:   "GET_CODE (operands[1]) == CONST_INT
        !          1722:    && exact_log2 (INTVAL (operands[1])) >= 0
        !          1723:    && (GET_CODE (operands[0]) != MEM
        !          1724:        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
        !          1725:   "*
        !          1726: {
        !          1727:   operands[1]
        !          1728:     = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1])));
        !          1729:   return \"jbc %1,%0,%l2\";
        !          1730: }")
        !          1731: 
        !          1732: (define_insn ""
        !          1733:   [(set (pc)
        !          1734:        (if_then_else
        !          1735:         (ne (and:SI (match_operand:SI 0 "general_operand" "g")
        !          1736:                     (match_operand:SI 1 "general_operand" "g"))
        !          1737:             (const_int 0))
        !          1738:         (label_ref (match_operand 2 "" ""))
        !          1739:         (pc)))]
        !          1740:   "GET_CODE (operands[1]) == CONST_INT
        !          1741:    && exact_log2 (INTVAL (operands[1])) >= 0
        !          1742:    && (GET_CODE (operands[0]) != MEM
        !          1743:        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
        !          1744:   "*
        !          1745: {
        !          1746:   operands[1]
        !          1747:     = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1])));
        !          1748:   return \"jbs %1,%0,%l2\";
        !          1749: }")
        !          1750: 
        !          1751: (define_insn ""
        !          1752:   [(set (pc)
        !          1753:        (if_then_else
        !          1754:         (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
        !          1755:                              (const_int 1)
        !          1756:                              (match_operand:SI 1 "general_operand" "g"))
        !          1757:             (const_int 0))
        !          1758:         (pc)
        !          1759:         (label_ref (match_operand 2 "" ""))))]
        !          1760:   "GET_CODE (operands[0]) != MEM
        !          1761:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1762:   "jbc %1,%0,%l2")
        !          1763: 
        !          1764: (define_insn ""
        !          1765:   [(set (pc)
        !          1766:        (if_then_else
        !          1767:         (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
        !          1768:                              (const_int 1)
        !          1769:                              (match_operand:SI 1 "general_operand" "g"))
        !          1770:             (const_int 0))
        !          1771:         (pc)
        !          1772:         (label_ref (match_operand 2 "" ""))))]
        !          1773:   "GET_CODE (operands[0]) != MEM
        !          1774:    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
        !          1775:   "jbs %1,%0,%l2")
        !          1776: 
        !          1777: ;; Subtract-and-jump and Add-and-jump insns.
        !          1778: ;; These are not used when output is for the Unix assembler
        !          1779: ;; because it does not know how to modify them to reach far.
        !          1780: 
        !          1781: ;; Normal sob insns.
        !          1782: 
        !          1783: (define_insn ""
        !          1784:   [(set (pc)
        !          1785:        (if_then_else
        !          1786:         (gt (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1787:                      (const_int -1))
        !          1788:             (const_int 0))
        !          1789:         (label_ref (match_operand 1 "" ""))
        !          1790:         (pc)))
        !          1791:    (set (match_dup 0)
        !          1792:        (plus:SI (match_dup 0)
        !          1793:                 (const_int -1)))]
        !          1794:   "!TARGET_UNIX_ASM"
        !          1795:   "jsobgtr %0,%l1")
        !          1796: 
        !          1797: (define_insn ""
        !          1798:   [(set (pc)
        !          1799:        (if_then_else
        !          1800:         (ge (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1801:                      (const_int -1))
        !          1802:             (const_int 0))
        !          1803:         (label_ref (match_operand 1 "" ""))
        !          1804:         (pc)))
        !          1805:    (set (match_dup 0)
        !          1806:        (plus:SI (match_dup 0)
        !          1807:                 (const_int -1)))]
        !          1808:   "!TARGET_UNIX_ASM"
        !          1809:   "jsobgeq %0,%l1")
        !          1810: 
        !          1811: ;; Reversed sob insns.
        !          1812: 
        !          1813: (define_insn ""
        !          1814:   [(set (pc)
        !          1815:        (if_then_else
        !          1816:         (le (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1817:                      (const_int -1))
        !          1818:             (const_int 0))
        !          1819:         (pc)
        !          1820:         (label_ref (match_operand 1 "" ""))))
        !          1821:    (set (match_dup 0)
        !          1822:        (plus:SI (match_dup 0)
        !          1823:                 (const_int -1)))]
        !          1824:   "!TARGET_UNIX_ASM"
        !          1825:   "jsobgtr %0,%l1")
        !          1826: 
        !          1827: (define_insn ""
        !          1828:   [(set (pc)
        !          1829:        (if_then_else
        !          1830:         (lt (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1831:                      (const_int -1))
        !          1832:             (const_int 0))
        !          1833:         (pc)
        !          1834:         (label_ref (match_operand 1 "" ""))))
        !          1835:    (set (match_dup 0)
        !          1836:        (plus:SI (match_dup 0)
        !          1837:                 (const_int -1)))]
        !          1838:   "!TARGET_UNIX_ASM"
        !          1839:   "jsobgeq %0,%l1")
        !          1840: 
        !          1841: ;; Normal aob insns.
        !          1842: (define_insn ""
        !          1843:   [(set (pc)
        !          1844:        (if_then_else
        !          1845:         (lt (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1846:                               (const_int 1))
        !          1847:                      (match_operand:SI 1 "general_operand" "g"))
        !          1848:             (const_int 0))
        !          1849:         (label_ref (match_operand 2 "" ""))
        !          1850:         (pc)))
        !          1851:    (set (match_dup 0)
        !          1852:        (plus:SI (match_dup 0)
        !          1853:                 (const_int 1)))]
        !          1854:   "!TARGET_UNIX_ASM"
        !          1855:   "jaoblss %1,%0,%l2")
        !          1856: 
        !          1857: (define_insn ""
        !          1858:   [(set (pc)
        !          1859:        (if_then_else
        !          1860:         (le (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1861:                               (const_int 1))
        !          1862:                      (match_operand:SI 1 "general_operand" "g"))
        !          1863:             (const_int 0))
        !          1864:         (label_ref (match_operand 2 "" ""))
        !          1865:         (pc)))
        !          1866:    (set (match_dup 0)
        !          1867:        (plus:SI (match_dup 0)
        !          1868:                 (const_int 1)))]
        !          1869:   "!TARGET_UNIX_ASM"
        !          1870:   "jaobleq %1,%0,%l2")
        !          1871: 
        !          1872: ;; Reverse aob insns.
        !          1873: (define_insn ""
        !          1874:   [(set (pc)
        !          1875:        (if_then_else
        !          1876:         (ge (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1877:                               (const_int 1))
        !          1878:                      (match_operand:SI 1 "general_operand" "g"))
        !          1879:             (const_int 0))
        !          1880:         (pc)
        !          1881:         (label_ref (match_operand 2 "" ""))))
        !          1882:    (set (match_dup 0)
        !          1883:        (plus:SI (match_dup 0)
        !          1884:                 (const_int 1)))]
        !          1885:   "!TARGET_UNIX_ASM"
        !          1886:   "jaoblss %1,%0,%l2")
        !          1887: 
        !          1888: (define_insn ""
        !          1889:   [(set (pc)
        !          1890:        (if_then_else
        !          1891:         (gt (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
        !          1892:                               (const_int 1))
        !          1893:                      (match_operand:SI 1 "general_operand" "g"))
        !          1894:             (const_int 0))
        !          1895:         (pc)
        !          1896:         (label_ref (match_operand 2 "" ""))))
        !          1897:    (set (match_dup 0)
        !          1898:        (plus:SI (match_dup 0)
        !          1899:                 (const_int 1)))]
        !          1900:   "!TARGET_UNIX_ASM"
        !          1901:   "jaobleq %1,%0,%l2")
        !          1902: 
        !          1903: ;; Something like a sob insn, but compares against -1.
        !          1904: ;; This finds `while (foo--)' which was changed to `while (--foo != -1)'.
        !          1905: 
        !          1906: (define_insn ""
        !          1907:   [(set (pc)
        !          1908:        (if_then_else
        !          1909:         (ne (compare (plus:SI (match_operand:SI 0 "general_operand" "g")
        !          1910:                               (const_int -1))
        !          1911:                      (const_int -1))
        !          1912:             (const_int 0))
        !          1913:         (label_ref (match_operand 1 "" ""))
        !          1914:         (pc)))
        !          1915:    (set (match_dup 0)
        !          1916:        (plus:SI (match_dup 0)
        !          1917:                 (const_int -1)))]
        !          1918:   ""
        !          1919:   "decl %0\;jgequ %l1")
        !          1920: 
        !          1921: ;; Note that operand 1 is total size of args, in bytes,
        !          1922: ;; and what the call insn wants is the number of words.
        !          1923: (define_insn "call"
        !          1924:   [(call (match_operand:QI 0 "general_operand" "g")
        !          1925:         (match_operand:QI 1 "general_operand" "g"))]
        !          1926:   ""
        !          1927:   "*
        !          1928:   if (INTVAL (operands[1]) > 255 * 4)
        !          1929:     /* Vax `calls' really uses only one byte of #args, so pop explicitly.  */
        !          1930:     return \"calls $0,%0\;addl2 %1,sp\";
        !          1931:   operands[1] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[1]) + 3)/ 4);
        !          1932:   return \"calls %1,%0\";
        !          1933: ")
        !          1934: 
        !          1935: (define_insn "call_value"
        !          1936:   [(set (match_operand 0 "" "=g")
        !          1937:        (call (match_operand:QI 1 "general_operand" "g")
        !          1938:              (match_operand:QI 2 "general_operand" "g")))]
        !          1939:   ""
        !          1940:   "*
        !          1941:   if (INTVAL (operands[2]) > 255 * 4)
        !          1942:     /* Vax `calls' really uses only one byte of #args, so pop explicitly.  */
        !          1943:     return \"calls $0,%1\;addl2 %2,sp\";
        !          1944:   operands[2] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[2]) + 3)/ 4);
        !          1945:   return \"calls %2,%1\";
        !          1946: ")
        !          1947: 
        !          1948: (define_insn "return"
        !          1949:   [(return)]
        !          1950:   ""
        !          1951:   "ret")
        !          1952: 
        !          1953: (define_insn "nop"
        !          1954:   [(const_int 0)]
        !          1955:   ""
        !          1956:   "nop")
        !          1957: 
        !          1958: (define_insn "casesi"
        !          1959:   [(set (pc)
        !          1960:        (if_then_else (le (minus:SI (match_operand:SI 0 "general_operand" "g")
        !          1961:                                    (match_operand:SI 1 "general_operand" "g"))
        !          1962:                          (match_operand:SI 2 "general_operand" "g"))
        !          1963:                      (plus:SI (sign_extend:SI
        !          1964:                                (mem:HI (plus:SI (pc)
        !          1965:                                                 (minus:SI (match_dup 0)
        !          1966:                                                           (match_dup 1)))))
        !          1967:                               (label_ref:SI (match_operand 3 "" "")))
        !          1968:                      (pc)))]
        !          1969:   ""
        !          1970:   "casel %0,%1,%2")
        !          1971: 
        !          1972: ;; This used to arise from the preceding by simplification
        !          1973: ;; if operand 1 is zero.  Perhaps it is no longer necessary.
        !          1974: (define_insn ""
        !          1975:   [(set (pc)
        !          1976:        (if_then_else (le (match_operand:SI 0 "general_operand" "g")
        !          1977:                          (match_operand:SI 1 "general_operand" "g"))
        !          1978:                      (plus:SI (sign_extend:SI
        !          1979:                                (mem:HI (plus:SI (pc)
        !          1980:                                                 (minus:SI (match_dup 0)
        !          1981:                                                           (const_int 0)))))
        !          1982:                               (label_ref:SI (match_operand 3 "" "")))
        !          1983:                      (pc)))]
        !          1984:   ""
        !          1985:   "casel %0,$0,%1")
        !          1986: 
        !          1987: ;; This arises from the preceding by simplification if operand 1 is zero.
        !          1988: (define_insn ""
        !          1989:   [(set (pc)
        !          1990:        (if_then_else (le (match_operand:SI 0 "general_operand" "g")
        !          1991:                          (match_operand:SI 1 "general_operand" "g"))
        !          1992:                      (plus:SI (sign_extend:SI
        !          1993:                                (mem:HI (plus:SI (pc)
        !          1994:                                                 (match_dup 0))))
        !          1995:                               (label_ref:SI (match_operand 3 "" "")))
        !          1996:                      (pc)))]
        !          1997:   ""
        !          1998:   "casel %0,$0,%1")
        !          1999: 
        !          2000: ;; This arises from casesi if operand 0 is a constant, in range.
        !          2001: (define_insn ""
        !          2002:   [(set (pc)
        !          2003:        (plus:SI (sign_extend:SI
        !          2004:                  (mem:HI (plus:SI (pc)
        !          2005:                                   (match_operand:SI 0 "general_operand" "g"))))
        !          2006:                 (label_ref:SI (match_operand 3 "" ""))))]
        !          2007:   ""
        !          2008:   "casel %0,$0,%0")
        !          2009: 
        !          2010: ;;- load or push effective address 
        !          2011: ;; These come after the move and add/sub patterns
        !          2012: ;; because we don't want pushl $1 turned into pushad 1.
        !          2013: ;; or addl3 r1,r2,r3 turned into movab 0(r1)[r2],r3.
        !          2014: 
        !          2015: (define_insn ""
        !          2016:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          2017:        (match_operand:QI 1 "address_operand" "p"))]
        !          2018:   ""
        !          2019:   "*
        !          2020: {
        !          2021:   if (push_operand (operands[0], SImode))
        !          2022:     return \"pushab %a1\";
        !          2023:   return \"movab %a1,%0\";
        !          2024: }")
        !          2025: 
        !          2026: (define_insn ""
        !          2027:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          2028:        (match_operand:HI 1 "address_operand" "p"))]
        !          2029:   ""
        !          2030:   "*
        !          2031: {
        !          2032:   if (push_operand (operands[0], SImode))
        !          2033:     return \"pushaw %a1\";
        !          2034:   return \"movaw %a1,%0\";
        !          2035: }")
        !          2036: 
        !          2037: (define_insn ""
        !          2038:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          2039:        (match_operand:SI 1 "address_operand" "p"))]
        !          2040:   ""
        !          2041:   "*
        !          2042: {
        !          2043:   if (push_operand (operands[0], SImode))
        !          2044:     return \"pushal %a1\";
        !          2045:   return \"moval %a1,%0\";
        !          2046: }")
        !          2047: 
        !          2048: (define_insn ""
        !          2049:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          2050:        (match_operand:SF 1 "address_operand" "p"))]
        !          2051:   ""
        !          2052:   "*
        !          2053: {
        !          2054:   if (push_operand (operands[0], SImode))
        !          2055:     return \"pushaf %a1\";
        !          2056:   return \"movaf %a1,%0\";
        !          2057: }")
        !          2058: 
        !          2059: (define_insn ""
        !          2060:   [(set (match_operand:SI 0 "general_operand" "=g")
        !          2061:        (match_operand:DF 1 "address_operand" "p"))]
        !          2062:   ""
        !          2063:   "*
        !          2064: {
        !          2065:   if (push_operand (operands[0], SImode))
        !          2066:     return \"pushad %a1\";
        !          2067:   return \"movad %a1,%0\";
        !          2068: }")
        !          2069: 
        !          2070: ;; Optimize   extzv ...,z;    andl2 ...,z
        !          2071: ;; with other operands constant.
        !          2072: (define_peephole
        !          2073:   [(set (match_operand:SI 0 "general_operand" "g")
        !          2074:        (zero_extract:SI (match_operand:SI 1 "general_operand" "g")
        !          2075:                         (match_operand:SI 2 "general_operand" "g")
        !          2076:                         (match_operand:SI 3 "general_operand" "g")))
        !          2077:    (set (match_operand:SI 4 "general_operand" "g")
        !          2078:        (and:SI (match_dup 0)
        !          2079:                (match_operand:SI 5 "general_operand" "g")))]
        !          2080:   "GET_CODE (operands[2]) == CONST_INT
        !          2081:    && GET_CODE (operands[3]) == CONST_INT
        !          2082:    && (INTVAL (operands[2]) + INTVAL (operands[3])) == 32
        !          2083:    && GET_CODE (operands[5]) == CONST_INT
        !          2084:    && dead_or_set_p (insn, operands[0])"
        !          2085:   "*
        !          2086: {
        !          2087:   unsigned long mask = INTVAL (operands[5]);
        !          2088:   operands[3] = gen_rtx (CONST_INT, VOIDmode, -INTVAL (operands[3]));
        !          2089: 
        !          2090:   if ((floor_log2 (mask) + 1) >= INTVAL (operands[2]))
        !          2091:     mask &= ((1 << INTVAL (operands[2])) - 1);
        !          2092: 
        !          2093:   operands[5] = gen_rtx (CONST_INT, VOIDmode, ~mask);
        !          2094:   if (push_operand (operands[4], SImode))
        !          2095:     {
        !          2096:       output_asm_insn (\"rotl %3,%1,%0\", operands);
        !          2097:       return \"bicl3 %5,%0,%4\";
        !          2098:     }
        !          2099:   else
        !          2100:     {
        !          2101:       output_asm_insn (\"rotl %3,%1,%4\", operands);
        !          2102:       return \"bicl2 %5,%4\";
        !          2103:     }
        !          2104: }")
        !          2105: 
        !          2106: ;; Optimize   andl3 x,y,z; extzv z,....,z
        !          2107: 
        !          2108: (define_peephole
        !          2109:   [(set (match_operand:SI 0 "general_operand" "g")
        !          2110:        (and:SI (match_operand:SI 1 "general_operand" "g")
        !          2111:                (match_operand:SI 2 "general_operand" "g")))
        !          2112:    (set (match_operand 3 "general_operand" "g")
        !          2113:        (zero_extract:SI (match_dup 0)
        !          2114:                         (match_operand:SI 4 "general_operand" "g")
        !          2115:                         (match_operand:SI 5 "general_operand" "g")))]
        !          2116:   "GET_CODE (operands[2]) == CONST_INT
        !          2117:    && GET_CODE (operands[4]) == CONST_INT
        !          2118:    && GET_CODE (operands[5]) == CONST_INT
        !          2119:    && (INTVAL (operands[4]) + INTVAL (operands[5])) == 32
        !          2120:    && dead_or_set_p (insn, operands[0])"
        !          2121:   "*
        !          2122: {
        !          2123:   unsigned long mask = INTVAL (operands[2]);
        !          2124: 
        !          2125:   mask &= ~((1 << INTVAL (operands[5])) - 1);
        !          2126:   operands[2] = gen_rtx (CONST_INT, VOIDmode, ~mask);
        !          2127: 
        !          2128:   operands[5] = gen_rtx (CONST_INT, VOIDmode, -INTVAL (operands[5]));
        !          2129: 
        !          2130:   if (rtx_equal_p (operands[0], operands[1]))
        !          2131:     output_asm_insn (\"bicl2 %2,%0\", operands);
        !          2132:   else
        !          2133:     output_asm_insn (\"bicl3 %2,%1,%0\", operands);
        !          2134:   return \"rotl %5,%0,%3\";
        !          2135: }")
        !          2136: 
        !          2137: ;;- Local variables:
        !          2138: ;;- mode:emacs-lisp
        !          2139: ;;- comment-start: ";;- "
        !          2140: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
        !          2141: ;;- eval: (modify-syntax-entry ?[ "(]")
        !          2142: ;;- eval: (modify-syntax-entry ?] ")[")
        !          2143: ;;- eval: (modify-syntax-entry ?{ "(}")
        !          2144: ;;- eval: (modify-syntax-entry ?} "){")
        !          2145: ;;- End:

unix.superglobalmegacorp.com

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