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

1.1     ! root        1: ;;- Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
        !             2: ;;   Copyright (C) 1990, 1991 Free Software Foundation, Inc.
        !             3: ;;   Contributed by Richard Kenner ([email protected])
        !             4: 
        !             5: ;; This file is part of GNU CC.
        !             6: 
        !             7: ;; GNU CC is free software; you can redistribute it and/or modify
        !             8: ;; it under the terms of the GNU General Public License as published by
        !             9: ;; the Free Software Foundation; either version 2, or (at your option)
        !            10: ;; any later version.
        !            11: 
        !            12: ;; GNU CC is distributed in the hope that it will be useful,
        !            13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            15: ;; GNU General Public License for more details.
        !            16: 
        !            17: ;; You should have received a copy of the GNU General Public License
        !            18: ;; along with GNU CC; see the file COPYING.  If not, write to
        !            19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            20: 
        !            21: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
        !            22: 
        !            23: ;; Define an insn type attribute.  This is used in function unit delay
        !            24: ;; computations.
        !            25: (define_attr "type" "load,integer,fp,compare,delayed_compare,fpcompare"
        !            26:   (const_string "integer"))
        !            27: 
        !            28: ;; Memory delivers its result in two cycles.
        !            29: (define_function_unit "memory" 1 0 (eq_attr "type" "load") 2 0)
        !            30: 
        !            31: ;; We consider floating-point insns to deliver their result in two cycles
        !            32: ;; to try to intersperse integer and FP operations.
        !            33: (define_function_unit "fp" 1 0 (eq_attr "type" "fp,fpcompare") 2 0)
        !            34: 
        !            35: ;; Most integer comparisons are ready in four cycles (a stall of three).
        !            36: (define_function_unit "compare" 1 0 (eq_attr "type" "compare") 4 0)
        !            37: 
        !            38: ;; Some integer comparisons aren't ready for five cycles (a stall of four).
        !            39: (define_function_unit "compare" 1 0 (eq_attr "type" "delayed_compare") 5 0)
        !            40: 
        !            41: ;; Floating-point comparisons take eight cycles.
        !            42: (define_function_unit "compare" 1 0 (eq_attr "type" "fpcompare") 8 0)
        !            43: 
        !            44: ;; Start with fixed-point load and store insns.  Here we put only the more
        !            45: ;; complex forms.  Basic data transfer is done later.
        !            46: 
        !            47: (define_expand "zero_extendqisi2"
        !            48:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !            49:        (zero_extend:SI (match_operand:QI 1 "gen_reg_operand" "")))]
        !            50:   ""
        !            51:   "")
        !            52: 
        !            53: (define_insn ""
        !            54:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !            55:        (zero_extend:SI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
        !            56:   ""
        !            57:   "@
        !            58:    lbz%U1%X1 %0,%1
        !            59:    rlinm %0,%1,0,24,31"
        !            60:   [(set_attr "type" "load,*")])
        !            61: 
        !            62: (define_insn ""
        !            63:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !            64:        (compare:CC (zero_extend:SI (match_operand:QI 1 "gen_reg_operand" "r"))
        !            65:                    (const_int 0)))
        !            66:    (clobber (match_scratch:SI 2 "=r"))]
        !            67:   ""
        !            68:   "andil. %2,%1,255"
        !            69:   [(set_attr "type" "compare")])
        !            70: 
        !            71: (define_insn ""
        !            72:   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
        !            73:        (compare:CC (zero_extend:SI (match_operand:QI 1 "gen_reg_operand" "r"))
        !            74:                    (const_int 0)))
        !            75:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !            76:        (zero_extend:SI (match_dup 1)))]
        !            77:   ""
        !            78:   "andil. %0,%1,255"
        !            79:   [(set_attr "type" "compare")])
        !            80: 
        !            81: (define_expand "zero_extendqihi2"
        !            82:   [(set (match_operand:HI 0 "gen_reg_operand" "")
        !            83:        (zero_extend:HI (match_operand:QI 1 "gen_reg_operand" "")))]
        !            84:   ""
        !            85:   "")
        !            86: 
        !            87: (define_insn ""
        !            88:   [(set (match_operand:HI 0 "gen_reg_operand" "=r,r")
        !            89:        (zero_extend:HI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
        !            90:   ""
        !            91:   "@
        !            92:    lbz%U1%X1 %0,%1
        !            93:    rlinm %0,%1,0,24,31"
        !            94:   [(set_attr "type" "load,*")])
        !            95: 
        !            96: (define_expand "zero_extendhisi2"
        !            97:   [(set (match_operand:SI 0 "gen_reg_operand" "r")
        !            98:        (zero_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
        !            99:   ""
        !           100:   "")
        !           101: 
        !           102: (define_insn ""
        !           103:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !           104:        (zero_extend:SI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
        !           105:   ""
        !           106:   "@
        !           107:    lhz%U1%X1 %0,%1
        !           108:    rlinm %0,%1,0,16,31"
        !           109:   [(set_attr "type" "load,*")])
        !           110: 
        !           111: (define_insn ""
        !           112:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           113:        (compare:CC (zero_extend:SI (match_operand:HI 1 "gen_reg_operand" "r"))
        !           114:                    (const_int 0)))
        !           115:    (clobber (match_scratch:SI 2 "=r"))]
        !           116:   ""
        !           117:   "andil. %2,%1,65535"
        !           118:   [(set_attr "type" "compare")])
        !           119: 
        !           120: (define_insn ""
        !           121:   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
        !           122:        (compare:CC (zero_extend:SI (match_operand:HI 1 "gen_reg_operand" "r"))
        !           123:                    (const_int 0)))
        !           124:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           125:        (zero_extend:SI (match_dup 1)))]
        !           126:   ""
        !           127:   "andil. %0,%1,65535"
        !           128:   [(set_attr "type" "compare")])
        !           129: 
        !           130: (define_expand "extendhisi2"
        !           131:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !           132:        (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
        !           133:   ""
        !           134:   "")
        !           135: 
        !           136: (define_insn ""
        !           137:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !           138:        (sign_extend:SI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
        !           139:   ""
        !           140:   "@
        !           141:    lha%U1%X1 %0,%1
        !           142:    exts %0,%1"
        !           143:   [(set_attr "type" "load,*")])
        !           144: 
        !           145: (define_insn ""
        !           146:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           147:        (compare:CC (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "r"))
        !           148:                    (const_int 0)))
        !           149:    (clobber (match_scratch:SI 2 "=r"))]
        !           150:   ""
        !           151:   "exts. %2,%1"
        !           152:   [(set_attr "type" "compare")])
        !           153: 
        !           154: (define_insn ""
        !           155:   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
        !           156:        (compare:CC (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "r"))
        !           157:                    (const_int 0)))
        !           158:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           159:        (sign_extend:SI (match_dup 1)))]
        !           160:   ""
        !           161:   "exts. %0,%1"
        !           162:   [(set_attr "type" "compare")])
        !           163: 
        !           164: ;; Fixed-point arithmetic insns.
        !           165: (define_insn ""
        !           166:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !           167:        (plus:SI (match_operand:SI 1 "gen_reg_operand" "%r,b")
        !           168:                 (match_operand:SI 2 "add_operand" "rI,J")))]
        !           169:   ""
        !           170:   "@
        !           171:    a%I2 %0,%1,%2
        !           172:    cau %0,%1,%u2")
        !           173: 
        !           174: (define_insn ""
        !           175:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           176:        (compare:CC (plus:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           177:                             (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !           178:                    (const_int 0)))
        !           179:    (clobber (match_scratch:SI 3 "=r"))]
        !           180:   ""
        !           181:   "a%I2. %3,%1,%2"
        !           182:   [(set_attr "type" "compare")])
        !           183:    
        !           184: (define_insn ""
        !           185:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           186:        (compare:CC (plus:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           187:                             (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !           188:                    (const_int 0)))
        !           189:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           190:        (plus:SI (match_dup 1) (match_dup 2)))]
        !           191:   ""
        !           192:   "a%I2. %0,%1,%2"
        !           193:   [(set_attr "type" "compare")])
        !           194:    
        !           195: (define_expand "addsi3"
        !           196:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !           197:        (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           198:                 (match_operand:SI 2 "reg_or_cint_operand" "")))]
        !           199:   ""
        !           200:   "
        !           201: {
        !           202:   if (GET_CODE (operands[2]) == CONST_INT
        !           203:       && (unsigned) (INTVAL (operands[2]) + 0x8000) >= 0x10000
        !           204:       && (INTVAL (operands[2]) & 0xffff) != 0)
        !           205:     {
        !           206:       int low = INTVAL (operands[2]) & 0xffff;
        !           207:       int high = (unsigned) INTVAL (operands[2]) >> 16;
        !           208: 
        !           209:       if (low & 0x8000)
        !           210:        high++, low |= 0xffff0000;
        !           211: 
        !           212:       emit_insn (gen_addsi3 (operands[0], operands[1],
        !           213:                             gen_rtx (CONST_INT, VOIDmode, high << 16)));
        !           214:       operands[1] = operands[0];
        !           215:       operands[2] = gen_rtx (CONST_INT, VOIDmode, low);
        !           216:     }
        !           217: }")
        !           218: 
        !           219: (define_insn "one_cmplsi2"
        !           220:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           221:        (not:SI (match_operand:SI 1 "gen_reg_operand" "r")))]
        !           222:   ""
        !           223:   "sfi %0,%1,-1")
        !           224: 
        !           225: (define_insn ""
        !           226:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !           227:        (minus:SI (match_operand:SI 1 "reg_or_short_operand" "r,I")
        !           228:                  (match_operand:SI 2 "gen_reg_operand" "r,r")))]
        !           229:   ""
        !           230:   "@
        !           231:    sf %0,%2,%1
        !           232:    sfi %0,%2,%1")
        !           233: 
        !           234: (define_insn ""
        !           235:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           236:        (compare:CC (minus:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           237:                              (match_operand:SI 2 "gen_reg_operand" "r"))
        !           238:                    (const_int 0)))
        !           239:    (clobber (match_scratch:SI 3 "=r"))]
        !           240:   ""
        !           241:   "sf. %3,%2,%1"
        !           242:   [(set_attr "type" "compare")])
        !           243: 
        !           244: (define_insn ""
        !           245:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           246:        (compare:CC (minus:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           247:                              (match_operand:SI 2 "gen_reg_operand" "r"))
        !           248:                    (const_int 0)))
        !           249:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           250:        (minus:SI (match_dup 1) (match_dup 2)))]
        !           251:   ""
        !           252:   "sf. %0,%2,%1"
        !           253:   [(set_attr "type" "compare")])
        !           254: 
        !           255: (define_expand "subsi3"
        !           256:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !           257:        (minus:SI (match_operand:SI 1 "reg_or_short_operand" "")
        !           258:                  (match_operand:SI 2 "reg_or_cint_operand" "")))]
        !           259:   ""
        !           260:   "
        !           261: {
        !           262:   if (GET_CODE (operands[2]) == CONST_INT)
        !           263:     {
        !           264:       emit_insn (gen_addsi3 (operands[0], operands[1],
        !           265:                             negate_rtx (SImode, operands[2])));
        !           266:       DONE;
        !           267:     }
        !           268:   else
        !           269:     operands[2] = force_reg (SImode, operands[2]);
        !           270: }")
        !           271: 
        !           272: ;; For SMIN, SMAX, UMIN, and UMAX, we use DEFINE_EXPAND's that involve a doz[i]
        !           273: ;; instruction and some auxiliary computations.  Then we just have a single
        !           274: ;; DEFINE_INSN for doz[i].
        !           275: 
        !           276: (define_expand "sminsi3"
        !           277:   [(set (match_dup 3)
        !           278:        (if_then_else:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           279:                                (match_operand:SI 2 "reg_or_short_operand" ""))
        !           280:                         (const_int 0)
        !           281:                         (minus:SI (match_dup 2) (match_dup 1))))
        !           282:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !           283:        (minus:SI (match_dup 2) (match_dup 3)))]
        !           284:   ""
        !           285:   "
        !           286: { operands[3] = gen_reg_rtx (SImode); }")
        !           287: 
        !           288: (define_expand "smaxsi3"
        !           289:   [(set (match_dup 3)
        !           290:        (if_then_else:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           291:                                (match_operand:SI 2 "reg_or_short_operand" ""))
        !           292:                         (const_int 0)
        !           293:                         (minus:SI (match_dup 2) (match_dup 1))))
        !           294:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !           295:        (plus:SI (match_dup 3) (match_dup 1)))]
        !           296:   ""
        !           297:   "
        !           298: { operands[3] = gen_reg_rtx (SImode); }")
        !           299: 
        !           300: (define_expand "uminsi3"
        !           301:   [(set (match_dup 3) (xor:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           302:                              (const_int -2147483648)))
        !           303:    (set (match_dup 4) (xor:SI (match_operand:SI 2 "gen_reg_operand" "")
        !           304:                              (const_int -2147483648)))
        !           305:    (set (match_dup 3) (if_then_else:SI (gt (match_dup 3) (match_dup 4))
        !           306:                                       (const_int 0)
        !           307:                                       (minus:SI (match_dup 4) (match_dup 3))))
        !           308:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !           309:        (minus:SI (match_dup 2) (match_dup 3)))]
        !           310:   ""
        !           311:   "
        !           312: { operands[3] = gen_reg_rtx (SImode);  operands[4] = gen_reg_rtx (SImode); }")
        !           313: 
        !           314: (define_expand "umaxsi3"
        !           315:   [(set (match_dup 3) (xor:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           316:                              (const_int -2147483648)))
        !           317:    (set (match_dup 4) (xor:SI (match_operand:SI 2 "gen_reg_operand" "")
        !           318:                              (const_int -2147483648)))
        !           319:    (set (match_dup 3) (if_then_else:SI (gt (match_dup 3) (match_dup 4))
        !           320:                                       (const_int 0)
        !           321:                                       (minus:SI (match_dup 4) (match_dup 3))))
        !           322:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !           323:        (plus:SI (match_dup 3) (match_dup 1)))]
        !           324:   ""
        !           325:   "
        !           326: { operands[3] = gen_reg_rtx (SImode);  operands[4] = gen_reg_rtx (SImode); }")
        !           327: 
        !           328: (define_insn ""
        !           329:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           330:        (if_then_else:SI (gt (match_operand:SI 1 "gen_reg_operand" "r")
        !           331:                             (match_operand:SI 2 "reg_or_short_operand" "r"))
        !           332:                         (const_int 0)
        !           333:                         (minus:SI (match_dup 2) (match_dup 1))))]
        !           334:   ""
        !           335:   "doz%I2 %0,%1,%2")
        !           336: 
        !           337: (define_insn ""
        !           338:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           339:        (compare:CC
        !           340:         (if_then_else:SI (gt (match_operand:SI 1 "gen_reg_operand" "r")
        !           341:                              (match_operand:SI 2 "reg_or_short_operand" "r"))
        !           342:                          (const_int 0)
        !           343:                          (minus:SI (match_dup 2) (match_dup 1)))
        !           344:         (const_int 0)))
        !           345:    (clobber (match_scratch:SI 3 "=r"))]
        !           346:   ""
        !           347:   "doz%I2. %3,%1,%2"
        !           348:   [(set_attr "type" "delayed_compare")])
        !           349: 
        !           350: (define_insn ""
        !           351:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           352:        (compare:CC
        !           353:         (if_then_else:SI (gt (match_operand:SI 1 "gen_reg_operand" "r")
        !           354:                              (match_operand:SI 2 "reg_or_short_operand" "r"))
        !           355:                          (const_int 0)
        !           356:                          (minus:SI (match_dup 2) (match_dup 1)))
        !           357:         (const_int 0)))
        !           358:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           359:        (if_then_else:SI (gt (match_dup 1) (match_dup 2))
        !           360:                         (const_int 0)
        !           361:                         (minus:SI (match_dup 2) (match_dup 1))))]
        !           362:   ""
        !           363:   "doz%I2. %0,%1,%2"
        !           364:   [(set_attr "type" "delayed_compare")])
        !           365: 
        !           366: ;; We don't need abs with condition code because such comparisons should
        !           367: ;; never be done.
        !           368: (define_insn "abssi2"
        !           369:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           370:        (abs:SI (match_operand:SI 1 "gen_reg_operand" "r")))]
        !           371:   ""
        !           372:   "abs %0,%1")
        !           373: 
        !           374: (define_insn ""
        !           375:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           376:        (neg:SI (abs:SI (match_operand:SI 1 "gen_reg_operand" "r"))))]
        !           377:   ""
        !           378:   "nabs %0,%1")
        !           379: 
        !           380: (define_insn "negsi2"
        !           381:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           382:        (neg:SI (match_operand:SI 1 "gen_reg_operand" "r")))]
        !           383:   ""
        !           384:   "neg %0,%1")
        !           385: 
        !           386: (define_insn ""
        !           387:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           388:        (compare:CC (neg:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           389:                    (const_int 0)))
        !           390:    (clobber (match_scratch:SI 2 "=r"))]
        !           391:   ""
        !           392:   "neg. %2,%1"
        !           393:   [(set_attr "type" "compare")])
        !           394: 
        !           395: (define_insn ""
        !           396:   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
        !           397:        (compare:CC (neg:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           398:                    (const_int 0)))
        !           399:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           400:        (neg:SI (match_dup 1)))]
        !           401:   ""
        !           402:   "neg. %0,%1"
        !           403:   [(set_attr "type" "compare")])
        !           404: 
        !           405: (define_insn "ffssi2"
        !           406:   [(set (match_operand:SI 0 "register_operand" "=&r")
        !           407:        (ffs:SI (match_operand:SI 1 "register_operand" "r")))]
        !           408:   ""
        !           409:   "neg %0,%1\;and %0,%0,%1\;cntlz %0,%0\;sfi %0,%0,32")
        !           410: 
        !           411: ;; There is no need for (set (condition) (compare (ffs) 0)) because that
        !           412: ;; can be simplified to an ordinary comparison.  A parallel set and compare
        !           413: ;; might be used, so include it.
        !           414: 
        !           415: (define_insn ""
        !           416:   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
        !           417:        (compare:CC (ffs:SI (match_operand:SI 1 "register_operand" "r"))
        !           418:                    (const_int 0)))
        !           419:    (set (match_operand:SI 0 "register_operand" "=&r")
        !           420:        (ffs:SI (match_dup 1)))]
        !           421:   ""
        !           422:   "neg %0,%1\;and %0,%0,%1\;cntlz %0,%0\;sfi. %0,%0,32"
        !           423:   [(set_attr "type" "compare")])
        !           424: 
        !           425: (define_insn "mulsi3"
        !           426:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !           427:        (mult:SI (match_operand:SI 1 "gen_reg_operand" "%r,r")
        !           428:                 (match_operand:SI 2 "reg_or_short_operand" "r,I")))
        !           429:    (clobber (match_scratch:SI 3 "=q,q"))]
        !           430:   ""
        !           431:   "@
        !           432:    muls %0,%1,%2
        !           433:    muli %0,%1,%2")
        !           434: 
        !           435: (define_insn ""
        !           436:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           437:        (compare:CC (mult:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           438:                             (match_operand:SI 2 "gen_reg_operand" "r"))
        !           439:                    (const_int 0)))
        !           440:    (clobber (match_scratch:SI 3 "=r"))
        !           441:    (clobber (match_scratch:SI 4 "=q"))]
        !           442:   ""
        !           443:   "muls. %3,%1,%2"
        !           444:   [(set_attr "type" "delayed_compare")])
        !           445: 
        !           446: (define_insn ""
        !           447:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           448:        (compare:CC (mult:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           449:                             (match_operand:SI 2 "gen_reg_operand" "r"))
        !           450:                    (const_int 0)))
        !           451:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           452:        (mult:SI (match_dup 1) (match_dup 2)))
        !           453:    (clobber (match_scratch:SI 4 "=q"))]
        !           454:   ""
        !           455:   "muls. %0,%1,%2"
        !           456:   [(set_attr "type" "delayed_compare")])
        !           457: 
        !           458: ;; Operand 1 is divided by operand 2; quotient goes to operand
        !           459: ;; 0 and remainder to operand 3.
        !           460: ;; ??? At some point, see what, if anything, we can do about if (x % y == 0).
        !           461: 
        !           462: (define_insn "divmodsi4"
        !           463:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           464:        (div:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           465:                (match_operand:SI 2 "gen_reg_operand" "r")))
        !           466:    (set (match_operand:SI 3 "gen_reg_operand" "=q")
        !           467:        (mod:SI (match_dup 1) (match_dup 2)))]
        !           468:   ""
        !           469:   "divs %0,%1,%2")
        !           470: 
        !           471: ;; For powers of two we can do srai/aze for divide and then adjust for
        !           472: ;; modulus.  If it isn't a power of two, FAIL so divmodsi4 will be used.
        !           473: (define_expand "divsi3"
        !           474:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !           475:        (div:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           476:                (match_operand:SI 2 "reg_or_cint_operand" "")))]
        !           477:   ""
        !           478:   "
        !           479: {
        !           480:   if (GET_CODE (operands[2]) != CONST_INT
        !           481:       || exact_log2 (INTVAL (operands[2])) < 0)
        !           482:     FAIL;
        !           483: }")
        !           484: 
        !           485: (define_expand "modsi3"
        !           486:   [(set (match_dup 3)
        !           487:        (div:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           488:                (match_operand:SI 2 "reg_or_cint_operand" "")))
        !           489:    (parallel [(set (match_dup 4) (ashift:SI (match_dup 3) (match_dup 5)))
        !           490:              (clobber (scratch:SI))])
        !           491:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !           492:        (minus:SI (match_dup 1) (match_dup 4)))]
        !           493:   ""
        !           494:   "
        !           495: {
        !           496:   int i = exact_log2 (INTVAL (operands[2]));
        !           497: 
        !           498:   if (GET_CODE (operands[2]) != CONST_INT || i < 0)
        !           499:     FAIL;
        !           500: 
        !           501:   operands[3] = gen_reg_rtx (SImode);
        !           502:   operands[4] = gen_reg_rtx (SImode);
        !           503:   operands[5] = gen_rtx (CONST_INT, VOIDmode, i);
        !           504: }")
        !           505: 
        !           506: (define_insn ""
        !           507:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           508:        (div:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           509:                (match_operand:SI 2 "const_int_operand" "N")))]
        !           510:   "exact_log2 (INTVAL (operands[2])) >= 0"
        !           511:   "srai %0,%1,%p2\;aze %0,%0")
        !           512: 
        !           513: (define_insn ""
        !           514:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           515:        (div:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           516:                (match_operand:SI 2 "const_int_operand" "N")))
        !           517:    (clobber (match_scratch:SI 3 "=r"))]
        !           518:   "exact_log2 (INTVAL (operands[2])) >= 0"
        !           519:   "srai %3,%1,%p2\;aze. %3,%3"
        !           520:   [(set_attr "type" "compare")])
        !           521: 
        !           522: (define_insn ""
        !           523:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           524:        (div:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           525:                (match_operand:SI 2 "const_int_operand" "N")))
        !           526:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           527:        (div:SI (match_dup 1) (match_dup 2)))]
        !           528:   "exact_log2 (INTVAL (operands[2])) >= 0"
        !           529:   "srai %0,%1,%p2\;aze. %0,%0"
        !           530:   [(set_attr "type" "compare")])
        !           531: 
        !           532: (define_insn ""
        !           533:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           534:        (udiv:SI
        !           535:         (plus:DI (lshift:DI
        !           536:                   (zero_extend:DI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           537:                   (const_int 32))
        !           538:                  (zero_extend:DI (match_operand:SI 2 "register_operand" "*q")))
        !           539:         (match_operand:SI 3 "gen_reg_operand" "r")))
        !           540:    (set (match_operand:SI 4 "register_operand" "=*q")
        !           541:        (umod:SI
        !           542:         (plus:DI (lshift:DI
        !           543:                   (zero_extend:DI (match_dup 1)) (const_int 32))
        !           544:                  (zero_extend:DI (match_dup 2)))
        !           545:         (match_dup 3)))]
        !           546:   
        !           547:   ""
        !           548:   "div %0,%1,%3")
        !           549: 
        !           550: ;; To do unsigned divide we handle the cases of the divisor looking like a
        !           551: ;; negative number.  If it is a constant that is less than 2**31, we don't
        !           552: ;; have to worry about the branches.  So make a few subroutines here.
        !           553: ;;
        !           554: ;; First comes the normal case.
        !           555: (define_expand "udivmodsi4_normal"
        !           556:   [(set (match_dup 4) (const_int 0))
        !           557:    (parallel [(set (match_operand:SI 0 "" "")
        !           558:                   (udiv:SI (plus:DI (lshift:DI (zero_extend:DI (match_dup 4))
        !           559:                                                (const_int 32))
        !           560:                                     (zero_extend:DI (match_operand:SI 1 "" "")))
        !           561:                            (match_operand:SI 2 "" "")))
        !           562:              (set (match_operand:SI 3 "" "")
        !           563:                   (umod:SI (plus:DI (lshift:DI (zero_extend:DI (match_dup 4))
        !           564:                                                (const_int 32))
        !           565:                                     (zero_extend:DI (match_dup 1)))
        !           566:                            (match_dup 2)))])]
        !           567:   ""
        !           568:   "
        !           569: { operands[4] = gen_reg_rtx (SImode); }")
        !           570: 
        !           571: ;; This handles the branches.
        !           572: (define_expand "udivmodsi4_tests"
        !           573:   [(set (match_operand:SI 0 "" "") (const_int 0))
        !           574:    (set (match_operand:SI 3 "" "") (match_operand:SI 1 "" ""))
        !           575:    (set (match_dup 5) (compare:CCUNS (match_dup 1) (match_operand:SI 2 "" "")))
        !           576:    (set (pc) (if_then_else (ltu (match_dup 5) (const_int 0))
        !           577:                           (label_ref (match_operand:SI 4 "" "")) (pc)))
        !           578:    (set (match_dup 0) (const_int 1))
        !           579:    (set (match_dup 3) (minus:SI (match_dup 1) (match_dup 2)))
        !           580:    (set (match_dup 6) (compare:CC (match_dup 2) (const_int 0)))
        !           581:    (set (pc) (if_then_else (lt (match_dup 6) (const_int 0))
        !           582:                           (label_ref (match_dup 4)) (pc)))]
        !           583:   ""
        !           584:   "
        !           585: { operands[5] = gen_reg_rtx (CCUNSmode);
        !           586:   operands[6] = gen_reg_rtx (CCmode);
        !           587: }")
        !           588: 
        !           589: (define_expand "udivmodsi4"
        !           590:   [(parallel [(set (match_operand:SI 0 "gen_reg_operand" "")
        !           591:                   (udiv:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           592:                            (match_operand:SI 2 "reg_or_cint_operand" "")))
        !           593:              (set (match_operand:SI 3 "gen_reg_operand" "")
        !           594:                   (umod:SI (match_dup 1) (match_dup 2)))])]
        !           595:   ""
        !           596:   "
        !           597: {
        !           598:   rtx label = 0;
        !           599: 
        !           600:   if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) < 0)
        !           601:     {
        !           602:       operands[2] = force_reg (SImode, operands[2]);
        !           603:       label = gen_label_rtx ();
        !           604:       emit (gen_udivmodsi4_tests (operands[0], operands[1], operands[2],
        !           605:                                  operands[3], label));
        !           606:     }
        !           607:   else
        !           608:     operands[2] = force_reg (SImode, operands[2]);
        !           609: 
        !           610:   emit (gen_udivmodsi4_normal (operands[0], operands[1], operands[2],
        !           611:                               operands[3]));
        !           612:   if (label)
        !           613:     emit_label (label);
        !           614: 
        !           615:   DONE;
        !           616: }")
        !           617:     
        !           618: (define_insn "andsi3"
        !           619:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r")
        !           620:        (and:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r")
        !           621:                (match_operand:SI 2 "and_operand" "?r,L,K,J")))
        !           622:    (clobber (match_scratch:CC 3 "=X,X,x,x"))]
        !           623:   ""
        !           624:   "@
        !           625:    and %0,%1,%2
        !           626:    rlinm %0,%1,0,%m2,%M2
        !           627:    andil. %0,%1,%b2
        !           628:    andiu. %0,%1,%u2")
        !           629: 
        !           630: (define_insn ""
        !           631:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x")
        !           632:        (compare:CC (and:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r")
        !           633:                            (match_operand:SI 2 "and_operand" "r,K,J,L"))
        !           634:                    (const_int 0)))
        !           635:    (clobber (match_scratch:SI 3 "=r,r,r,r"))]
        !           636:   ""
        !           637:   "@
        !           638:    and. %3,%1,%2
        !           639:    andil. %3,%1,%b2
        !           640:    andiu. %3,%1,%u2
        !           641:    rlinm. %3,%1,0,%m2,%M2"
        !           642:   [(set_attr "type" "compare,compare,compare,delayed_compare")])
        !           643: 
        !           644: (define_insn ""
        !           645:   [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,x,x")
        !           646:        (compare:CC (and:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r")
        !           647:                            (match_operand:SI 2 "and_operand" "r,K,J,L"))
        !           648:                    (const_int 0)))
        !           649:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r")
        !           650:        (and:SI (match_dup 1) (match_dup 2)))]
        !           651:   ""
        !           652:   "@
        !           653:    and. %0,%1,%2
        !           654:    andil. %0,%1,%b2
        !           655:    andiu. %0,%1,%u2
        !           656:    rlinm. %0,%1,0,%m2,%M2"
        !           657:   [(set_attr "type" "compare,compare,compare,delayed_compare")]) 
        !           658: 
        !           659: (define_insn ""
        !           660:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r,r")
        !           661:        (ior:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r")
        !           662:                (match_operand:SI 2 "logical_operand" "r,K,J")))]
        !           663:   ""
        !           664:   "@
        !           665:    or %0,%1,%2
        !           666:    oril %0,%1,%b2
        !           667:    oriu %0,%1,%u2")
        !           668: 
        !           669: (define_insn ""
        !           670:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           671:        (compare:CC (ior:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           672:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           673:                    (const_int 0)))
        !           674:    (clobber (match_scratch:SI 3 "=r"))]
        !           675:   ""
        !           676:   "or. %3,%1,%2"
        !           677:   [(set_attr "type" "compare")])
        !           678: 
        !           679: (define_insn ""
        !           680:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           681:        (compare:CC (ior:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           682:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           683:                    (const_int 0)))
        !           684:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           685:        (ior:SI (match_dup 1) (match_dup 2)))]
        !           686:   ""
        !           687:   "or. %0,%1,%2"
        !           688:   [(set_attr "type" "compare")])
        !           689: 
        !           690: (define_expand "iorsi3"
        !           691:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !           692:        (ior:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           693:                (match_operand:SI 2 "reg_or_cint_operand" "")))]
        !           694:   ""
        !           695:   "
        !           696: {
        !           697:   if (GET_CODE (operands[2]) == CONST_INT
        !           698:       && ! logical_operand (operands[2], SImode))
        !           699:     {
        !           700:       emit_insn (gen_iorsi3 (operands[0], operands[1],
        !           701:                             gen_rtx (CONST_INT, VOIDmode,
        !           702:                                      INTVAL (operands[2]) & 0xffff0000)));
        !           703:       operands[1] = operands[0];
        !           704:       operands[2] = gen_rtx (CONST_INT, VOIDmode,
        !           705:                             INTVAL (operands[2]) & 0xffff);
        !           706:     }
        !           707: }")
        !           708: 
        !           709: (define_insn ""
        !           710:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r,r")
        !           711:        (xor:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r")
        !           712:                (match_operand:SI 2 "logical_operand" "r,K,J")))]
        !           713:   ""
        !           714:   "@
        !           715:    xor %0,%1,%2
        !           716:    xoril %0,%1,%b2
        !           717:    xoriu %0,%1,%u2")
        !           718: 
        !           719: (define_insn ""
        !           720:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           721:        (compare:CC (xor:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           722:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           723:                    (const_int 0)))
        !           724:    (clobber (match_scratch:SI 3 "=r"))]
        !           725:   ""
        !           726:   "xor. %3,%1,%2"
        !           727:   [(set_attr "type" "compare")])
        !           728: 
        !           729: (define_insn ""
        !           730:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           731:        (compare:CC (xor:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !           732:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           733:                    (const_int 0)))
        !           734:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           735:        (xor:SI (match_dup 1) (match_dup 2)))]
        !           736:   ""
        !           737:   "xor. %0,%1,%2"
        !           738:   [(set_attr "type" "compare")])
        !           739: 
        !           740: (define_expand "xorsi3"
        !           741:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !           742:        (xor:SI (match_operand:SI 1 "gen_reg_operand" "")
        !           743:                (match_operand:SI 2 "reg_or_cint_operand" "")))]
        !           744:   ""
        !           745:   "
        !           746: {
        !           747:   if (GET_CODE (operands[2]) == CONST_INT
        !           748:       && ! logical_operand (operands[2], SImode))
        !           749:     {
        !           750:       emit_insn (gen_xorsi3 (operands[0], operands[1],
        !           751:                             gen_rtx (CONST_INT, VOIDmode,
        !           752:                                      INTVAL (operands[2]) & 0xffff0000)));
        !           753:       operands[1] = operands[0];
        !           754:       operands[2] = gen_rtx (CONST_INT, VOIDmode,
        !           755:                             INTVAL (operands[2]) & 0xffff);
        !           756:     }
        !           757: }")
        !           758: 
        !           759: (define_insn ""
        !           760:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           761:        (not:SI (xor:SI (match_operand:SI 1 "gen_reg_operand" "%r")
        !           762:                        (match_operand:SI 2 "gen_reg_operand" "r"))))]
        !           763:    ""
        !           764:    "eqv %0,%1,%2")
        !           765: 
        !           766: (define_insn ""
        !           767:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           768:        (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gen_reg_operand" "%r")
        !           769:                                    (match_operand:SI 2 "gen_reg_operand" "r")))
        !           770:                    (const_int 0)))
        !           771:    (clobber (match_scratch:SI 3 "=r"))]
        !           772:    ""
        !           773:    "eqv. %3,%1,%2"
        !           774:    [(set_attr "type" "compare")])
        !           775: 
        !           776: (define_insn ""
        !           777:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           778:        (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gen_reg_operand" "%r")
        !           779:                                    (match_operand:SI 2 "gen_reg_operand" "r")))
        !           780:                    (const_int 0)))
        !           781:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           782:        (not:SI (xor:SI (match_dup 1) (match_dup 2))))]
        !           783:    ""
        !           784:    "eqv. %0,%1,%2"
        !           785:    [(set_attr "type" "compare")])
        !           786: 
        !           787: (define_insn ""
        !           788:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           789:        (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           790:                (match_operand:SI 2 "gen_reg_operand" "r")))]
        !           791:   ""
        !           792:   "andc %0,%2,%1")
        !           793: 
        !           794: (define_insn ""
        !           795:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           796:        (compare:CC (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           797:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           798:                    (const_int 0)))
        !           799:    (clobber (match_scratch:SI 3 "=r"))]
        !           800:   ""
        !           801:   "andc. %3,%2,%1"
        !           802:   [(set_attr "type" "compare")])
        !           803: 
        !           804: (define_insn ""
        !           805:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           806:        (compare:CC (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           807:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           808:                    (const_int 0)))
        !           809:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           810:        (and:SI (not:SI (match_dup 1)) (match_dup 2)))]
        !           811:   ""
        !           812:   "andc. %0,%2,%1"
        !           813:   [(set_attr "type" "compare")])
        !           814: 
        !           815: (define_insn ""
        !           816:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           817:        (ior:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           818:                (match_operand:SI 2 "gen_reg_operand" "r")))]
        !           819:   ""
        !           820:   "orc %0,%2,%1")
        !           821: 
        !           822: (define_insn ""
        !           823:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           824:        (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           825:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           826:                    (const_int 0)))
        !           827:    (clobber (match_scratch:SI 3 "=r"))]
        !           828:   ""
        !           829:   "orc. %3,%2,%1"
        !           830:   [(set_attr "type" "compare")])
        !           831: 
        !           832: (define_insn ""
        !           833:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           834:        (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           835:                            (match_operand:SI 2 "gen_reg_operand" "r"))
        !           836:                    (const_int 0)))
        !           837:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           838:        (ior:SI (not:SI (match_dup 1)) (match_dup 2)))]
        !           839:   ""
        !           840:   "orc. %0,%2,%1"
        !           841:   [(set_attr "type" "compare")])
        !           842: 
        !           843: (define_insn ""
        !           844:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           845:        (ior:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           846:                (not:SI (match_operand:SI 2 "gen_reg_operand" "r"))))]
        !           847:   ""
        !           848:   "nand %0,%1,%2")
        !           849: 
        !           850: (define_insn ""
        !           851:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           852:        (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           853:                            (not:SI (match_operand:SI 2 "gen_reg_operand" "r")))
        !           854:                    (const_int 0)))
        !           855:    (clobber (match_scratch:SI 3 "=r"))]
        !           856:   ""
        !           857:   "nand. %3,%1,%2"
        !           858:   [(set_attr "type" "compare")])
        !           859: 
        !           860: (define_insn ""
        !           861:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           862:        (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           863:                            (not:SI (match_operand:SI 2 "gen_reg_operand" "r")))
        !           864:                    (const_int 0)))
        !           865:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           866:        (ior:SI (not:SI (match_dup 1)) (not:SI (match_dup 2))))]
        !           867:   ""
        !           868:   "nand. %0,%1,%2"
        !           869:   [(set_attr "type" "compare")])
        !           870: 
        !           871: (define_insn ""
        !           872:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           873:        (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           874:                (not:SI (match_operand:SI 2 "gen_reg_operand" "r"))))]
        !           875:   ""
        !           876:   "nor %0,%1,%2")
        !           877: 
        !           878: (define_insn ""
        !           879:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !           880:        (compare:CC (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           881:                            (not:SI (match_operand:SI 2 "gen_reg_operand" "r")))
        !           882:                    (const_int 0)))
        !           883:    (clobber (match_scratch:SI 3 "=r"))]
        !           884:   ""
        !           885:   "nor. %3,%1,%2"
        !           886:   [(set_attr "type" "compare")])
        !           887: 
        !           888: (define_insn ""
        !           889:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !           890:        (compare:CC (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           891:                            (not:SI (match_operand:SI 2 "gen_reg_operand" "r")))
        !           892:                    (const_int 0)))
        !           893:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           894:        (and:SI (not:SI (match_dup 1)) (not:SI (match_dup 2))))]
        !           895:   ""
        !           896:   "nor. %0,%1,%2"
        !           897:   [(set_attr "type" "compare")])
        !           898: 
        !           899: ;; maskir insn.  We need four forms because things might be in arbitrary
        !           900: ;; orders.  Don't define forms that only set CR fields because these
        !           901: ;; would modify an input register.
        !           902: 
        !           903: (define_insn ""
        !           904:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           905:        (ior:SI (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           906:                        (match_operand:SI 2 "gen_reg_operand" "0"))
        !           907:                (and:SI (match_dup 1)
        !           908:                        (match_operand:SI 3 "gen_reg_operand" "r"))))]
        !           909:   ""
        !           910:   "maskir %0,%3,%1")
        !           911: 
        !           912: (define_insn ""
        !           913:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           914:        (ior:SI (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           915:                        (match_operand:SI 2 "gen_reg_operand" "0"))
        !           916:                (and:SI (match_operand:SI 3 "gen_reg_operand" "r")
        !           917:                        (match_dup 1))))]
        !           918:   ""
        !           919:   "maskir %0,%3,%1")
        !           920: 
        !           921: (define_insn ""
        !           922:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           923:        (ior:SI (and:SI (match_dup 1)
        !           924:                        (match_operand:SI 3 "gen_reg_operand" "r"))
        !           925:                (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           926:                        (match_operand:SI 2 "gen_reg_operand" "0"))))]
        !           927:   ""
        !           928:   "maskir %0,%3,%1")
        !           929: 
        !           930: (define_insn ""
        !           931:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           932:        (ior:SI (and:SI (match_operand:SI 3 "gen_reg_operand" "r")
        !           933:                        (match_dup 1))
        !           934:                (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           935:                        (match_operand:SI 2 "gen_reg_operand" "0"))))]
        !           936:   ""
        !           937:   "maskir %0,%3,%1")
        !           938: 
        !           939: (define_insn ""
        !           940:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !           941:        (compare:CC
        !           942:         (ior:SI (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           943:                         (match_operand:SI 2 "gen_reg_operand" "0"))
        !           944:                 (and:SI (match_dup 1)
        !           945:                         (match_operand:SI 3 "gen_reg_operand" "r")))
        !           946:         (const_int 0)))
        !           947:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           948:        (ior:SI (and:SI (not:SI (match_dup 1)) (match_dup 2))
        !           949:                (and:SI (match_dup 1) (match_dup 3))))]
        !           950:   ""
        !           951:   "maskir. %0,%3,%1"
        !           952:   [(set_attr "type" "compare")])
        !           953: 
        !           954: (define_insn ""
        !           955:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !           956:        (compare:CC
        !           957:         (ior:SI (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           958:                         (match_operand:SI 2 "gen_reg_operand" "0"))
        !           959:                 (and:SI (match_operand:SI 3 "gen_reg_operand" "r")
        !           960:                         (match_dup 1)))
        !           961:         (const_int 0)))
        !           962:    (set (match_operand:SI 0 "register_operand" "=r")
        !           963:        (ior:SI (and:SI (not:SI (match_dup 1)) (match_dup 2))
        !           964:                (and:SI (match_dup 3) (match_dup 1))))]
        !           965:   ""
        !           966:   "maskir. %0,%3,%1"
        !           967:   [(set_attr "type" "compare")])
        !           968: 
        !           969: (define_insn ""
        !           970:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !           971:        (compare:CC
        !           972:         (ior:SI (and:SI (match_dup 1)
        !           973:                         (match_operand:SI 3 "gen_reg_operand" "r"))
        !           974:                 (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           975:                         (match_operand:SI 2 "gen_reg_operand" "0")))
        !           976:         (const_int 0)))
        !           977:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           978:        (ior:SI (and:SI (match_dup 1) (match_dup 3))
        !           979:                (and:SI (not:SI (match_dup 1)) (match_dup 2))))]
        !           980:   ""
        !           981:   "maskir. %0,%3,%1"
        !           982:   [(set_attr "type" "compare")])
        !           983: 
        !           984: (define_insn ""
        !           985:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !           986:        (compare:CC
        !           987:         (ior:SI (and:SI (match_operand:SI 3 "gen_reg_operand" "r")
        !           988:                         (match_dup 1))
        !           989:                 (and:SI (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !           990:                         (match_operand:SI 2 "gen_reg_operand" "0")))
        !           991:         (const_int 0)))
        !           992:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !           993:        (ior:SI (and:SI (match_dup 3) (match_dup 1))
        !           994:                (and:SI (not:SI (match_dup 1)) (match_dup 2))))]
        !           995:   ""
        !           996:   "maskir. %0,%3,%1"
        !           997:   [(set_attr "type" "compare")])
        !           998: 
        !           999: ;; Rotate and shift insns, in all their variants.  These support shifts,
        !          1000: ;; field inserts and extracts, and various combinations thereof.
        !          1001: (define_insn "insv"
        !          1002:   [(set (zero_extract:SI (match_operand:SI 0 "gen_reg_operand" "+r")
        !          1003:                         (match_operand:SI 1 "const_int_operand" "i")
        !          1004:                         (match_operand:SI 2 "const_int_operand" "i"))
        !          1005:        (match_operand:SI 3 "gen_reg_operand" "r"))]
        !          1006:   ""
        !          1007:   "*
        !          1008: {
        !          1009:   int start = INTVAL (operands[2]) & 31;
        !          1010:   int size = INTVAL (operands[1]) & 31;
        !          1011: 
        !          1012:   operands[4] = gen_rtx (CONST_INT, VOIDmode, 32 - start - size);
        !          1013:   operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1);
        !          1014:   return \"rlimi %0,%3,%4,%h2,%h1\";
        !          1015: }")
        !          1016: 
        !          1017: (define_insn "extzv"
        !          1018:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1019:        (zero_extract:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1020:                         (match_operand:SI 2 "const_int_operand" "i")
        !          1021:                         (match_operand:SI 3 "const_int_operand" "i")))]
        !          1022:   ""
        !          1023:   "*
        !          1024: {
        !          1025:   int start = INTVAL (operands[3]) & 31;
        !          1026:   int size = INTVAL (operands[2]) & 31;
        !          1027: 
        !          1028:   if (start + size >= 32)
        !          1029:     operands[3] = const0_rtx;
        !          1030:   else
        !          1031:     operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
        !          1032:   return \"rlinm %0,%1,%3,%s2,31\";
        !          1033: }")
        !          1034: 
        !          1035: (define_insn ""
        !          1036:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1037:        (compare:CC (zero_extract:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1038:                         (match_operand:SI 2 "const_int_operand" "i")
        !          1039:                         (match_operand:SI 3 "const_int_operand" "i"))
        !          1040:                    (const_int 0)))
        !          1041:    (clobber (match_scratch:SI 4 "=r"))]
        !          1042:   ""
        !          1043:   "*
        !          1044: {
        !          1045:   int start = INTVAL (operands[3]) & 31;
        !          1046:   int size = INTVAL (operands[2]) & 31;
        !          1047: 
        !          1048:   if (start + size >= 32)
        !          1049:     operands[3] = const0_rtx;
        !          1050:   else
        !          1051:     operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
        !          1052:   return \"rlinm. %4,%1,%3,%s2,31\";
        !          1053: }"
        !          1054:   [(set_attr "type" "compare")])
        !          1055: 
        !          1056: (define_insn ""
        !          1057:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          1058:        (compare:CC (zero_extract:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1059:                         (match_operand:SI 2 "const_int_operand" "i")
        !          1060:                         (match_operand:SI 3 "const_int_operand" "i"))
        !          1061:                    (const_int 0)))
        !          1062:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1063:        (zero_extract:SI (match_dup 1) (match_dup 2) (match_dup 3)))]
        !          1064:   ""
        !          1065:   "*
        !          1066: {
        !          1067:   int start = INTVAL (operands[3]) & 31;
        !          1068:   int size = INTVAL (operands[2]) & 31;
        !          1069: 
        !          1070:   if (start + size >= 32)
        !          1071:     operands[3] = const0_rtx;
        !          1072:   else
        !          1073:     operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
        !          1074:   return \"rlinm. %0,%1,%3,%s2,31\";
        !          1075: }"
        !          1076:   [(set_attr "type" "delayed_compare")])
        !          1077: 
        !          1078: (define_insn "rotlsi3"
        !          1079:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1080:        (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1081:                   (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
        !          1082:   ""
        !          1083:   "rl%I2nm %0,%1,%h2,0,31")
        !          1084: 
        !          1085: (define_insn ""
        !          1086:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1087:        (compare:CC (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1088:                               (match_operand:SI 2 "reg_or_cint_operand" "ri"))
        !          1089:                    (const_int 0)))
        !          1090:    (clobber (match_scratch:SI 3 "=r"))]
        !          1091:   ""
        !          1092:   "rl%I2nm. %3,%1,%h2,0,31"
        !          1093:   [(set_attr "type" "delayed_compare")])
        !          1094: 
        !          1095: (define_insn ""
        !          1096:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          1097:        (compare:CC (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1098:                               (match_operand:SI 2 "reg_or_cint_operand" "ri"))
        !          1099:                    (const_int 0)))
        !          1100:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1101:        (rotate:SI (match_dup 1) (match_dup 2)))]
        !          1102:   ""
        !          1103:   "rl%I2nm. %0,%1,%h2,0,31"
        !          1104:   [(set_attr "type" "delayed_compare")])
        !          1105: 
        !          1106: (define_insn ""
        !          1107:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1108:        (and:SI (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1109:                           (match_operand:SI 2 "reg_or_cint_operand" "ri"))
        !          1110:                (match_operand:SI 3 "mask_operand" "L")))]
        !          1111:   ""
        !          1112:   "rl%I2nm %0,%1,%h2,%m3,%M3")
        !          1113: 
        !          1114: (define_insn ""
        !          1115:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1116:        (compare:CC (and:SI
        !          1117:                     (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1118:                                (match_operand:SI 2 "reg_or_cint_operand" "ri"))
        !          1119:                     (match_operand:SI 3 "mask_operand" "L"))
        !          1120:                    (const_int 0)))
        !          1121:    (clobber (match_scratch:SI 4 "=r"))]
        !          1122:   ""
        !          1123:   "rl%I2nm. %4,%1,%h2,%m3,%M3"
        !          1124:   [(set_attr "type" "delayed_compare")])
        !          1125: 
        !          1126: (define_insn ""
        !          1127:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          1128:        (compare:CC (and:SI
        !          1129:                     (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1130:                                (match_operand:SI 2 "reg_or_cint_operand" "ri"))
        !          1131:                     (match_operand:SI 3 "mask_operand" "L"))
        !          1132:                    (const_int 0)))
        !          1133:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1134:        (and:SI (rotate:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
        !          1135:   ""
        !          1136:   "rl%I2nm. %0,%1,%h2,%m3,%M3"
        !          1137:   [(set_attr "type" "delayed_compare")])
        !          1138: 
        !          1139: (define_insn ""
        !          1140:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1141:        (zero_extend:SI
        !          1142:         (subreg:QI
        !          1143:          (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1144:                     (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]
        !          1145:   ""
        !          1146:   "rl%I2nm %0,%1,%h2,24,31")
        !          1147: 
        !          1148: (define_insn ""
        !          1149:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1150:        (compare:CC (zero_extend:SI
        !          1151:                     (subreg:QI
        !          1152:                      (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1153:                                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
        !          1154:                    (const_int 0)))
        !          1155:    (clobber (match_scratch:SI 3 "=r"))]
        !          1156:   ""
        !          1157:   "rl%I2nm. %3,%1,%h2,24,31"
        !          1158:   [(set_attr "type" "delayed_compare")])
        !          1159: 
        !          1160: (define_insn ""
        !          1161:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          1162:        (compare:CC (zero_extend:SI
        !          1163:                     (subreg:QI
        !          1164:                      (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1165:                                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
        !          1166:                    (const_int 0)))
        !          1167:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1168:        (zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
        !          1169:   ""
        !          1170:   "rl%I2nm. %0,%1,%h2,24,31"
        !          1171:   [(set_attr "type" "delayed_compare")])
        !          1172: 
        !          1173: (define_insn ""
        !          1174:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1175:        (zero_extend:SI
        !          1176:         (subreg:HI
        !          1177:          (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1178:                     (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]
        !          1179:   ""
        !          1180:   "rl%I2nm %0,%1,%h2,16,31")
        !          1181: 
        !          1182: (define_insn ""
        !          1183:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1184:        (compare:CC (zero_extend:SI
        !          1185:                     (subreg:HI
        !          1186:                      (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1187:                                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
        !          1188:                    (const_int 0)))
        !          1189:    (clobber (match_scratch:SI 3 "=r"))]
        !          1190:   ""
        !          1191:   "rl%I2nm. %3,%1,%h2,16,31"
        !          1192:   [(set_attr "type" "delayed_compare")])
        !          1193: 
        !          1194: (define_insn ""
        !          1195:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          1196:        (compare:CC (zero_extend:SI
        !          1197:                     (subreg:HI
        !          1198:                      (rotate:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1199:                                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
        !          1200:                    (const_int 0)))
        !          1201:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1202:        (zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
        !          1203:   ""
        !          1204:   "rl%I2nm. %0,%1,%h2,16,31"
        !          1205:   [(set_attr "type" "delayed_compare")])
        !          1206: 
        !          1207: ;; Note that we use "sle." instead of "sl." so that we can set
        !          1208: ;; SHIFT_COUNT_TRUNCATED.
        !          1209: 
        !          1210: (define_insn "ashlsi3"
        !          1211:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          1212:        (ashift:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1213:                   (match_operand:SI 2 "reg_or_cint_operand" "r,i")))
        !          1214:    (clobber (match_scratch:SI 3 "=q,X"))]
        !          1215:   ""
        !          1216:   "@
        !          1217:    sle %0,%1,%2
        !          1218:    sli %0,%1,%h2")
        !          1219: 
        !          1220: (define_insn ""
        !          1221:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
        !          1222:        (compare:CC (ashift:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1223:                               (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
        !          1224:                    (const_int 0)))
        !          1225:    (clobber (match_scratch:SI 3 "=r,r"))
        !          1226:    (clobber (match_scratch:SI 4 "=q,X"))]
        !          1227:   ""
        !          1228:   "@
        !          1229:    sle. %3,%1,%2
        !          1230:    sli. %3,%1,%h2"
        !          1231:   [(set_attr "type" "delayed_compare")])
        !          1232: 
        !          1233: (define_insn ""
        !          1234:   [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
        !          1235:        (compare:CC (ashift:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1236:                               (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
        !          1237:                    (const_int 0)))
        !          1238:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          1239:        (ashift:SI (match_dup 1) (match_dup 2)))
        !          1240:    (clobber (match_scratch:SI 4 "=q,X"))]
        !          1241:   ""
        !          1242:   "@
        !          1243:    sle. %0,%1,%2
        !          1244:    sli. %0,%1,%h2"
        !          1245:   [(set_attr "type" "delayed_compare")])
        !          1246: 
        !          1247: (define_insn ""
        !          1248:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1249:        (and:SI (ashift:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1250:                           (match_operand:SI 2 "const_int_operand" "i"))
        !          1251:                (match_operand:SI 3 "mask_operand" "L")))]
        !          1252:   "includes_lshift_p (operands[2], operands[3])"
        !          1253:   "rlinm %0,%h1,%h2,%m3,%M3")
        !          1254: 
        !          1255: (define_insn ""
        !          1256:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1257:        (compare:CC
        !          1258:         (and:SI (ashift:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1259:                            (match_operand:SI 2 "const_int_operand" "i"))
        !          1260:                 (match_operand:SI 3 "mask_operand" "L"))
        !          1261:         (const_int 0)))
        !          1262:    (clobber (match_scratch:SI 4 "=r"))]
        !          1263:   "includes_lshift_p (operands[2], operands[3])"
        !          1264:   "rlinm. %4,%h1,%h2,%m3,%M3"
        !          1265:   [(set_attr "type" "delayed_compare")])
        !          1266: 
        !          1267: (define_insn ""
        !          1268:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          1269:        (compare:CC
        !          1270:         (and:SI (ashift:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1271:                            (match_operand:SI 2 "const_int_operand" "i"))
        !          1272:                 (match_operand:SI 3 "mask_operand" "L"))
        !          1273:         (const_int 0)))
        !          1274:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1275:        (and:SI (ashift:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
        !          1276:   "includes_lshift_p (operands[2], operands[3])"
        !          1277:   "rlinm. %0,%h1,%h2,%m3,%M3"
        !          1278:   [(set_attr "type" "delayed_compare")])
        !          1279: 
        !          1280: (define_insn "lshrsi3"
        !          1281:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          1282:        (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1283:                     (match_operand:SI 2 "reg_or_cint_operand" "r,i")))
        !          1284:    (clobber (match_scratch:SI 3 "=q,X"))]
        !          1285:   ""
        !          1286:   "@
        !          1287:   sre %0,%1,%2
        !          1288:   sri %0,%1,%h2")
        !          1289: 
        !          1290: (define_insn ""
        !          1291:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
        !          1292:        (compare:CC (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1293:                                 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
        !          1294:                    (const_int 0)))
        !          1295:    (clobber (match_scratch:SI 3 "=r,r"))
        !          1296:    (clobber (match_scratch:SI 4 "=q,X"))]
        !          1297:   ""
        !          1298:   "@
        !          1299:   sre. %3,%1,%2
        !          1300:   sri. %3,%1,%h2"
        !          1301:   [(set_attr "type" "delayed_compare")])
        !          1302: 
        !          1303: (define_insn ""
        !          1304:   [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
        !          1305:        (compare:CC (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1306:                                 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
        !          1307:                    (const_int 0)))
        !          1308:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          1309:        (lshiftrt:SI (match_dup 1) (match_dup 2)))
        !          1310:    (clobber (match_scratch:SI 4 "=q,X"))]
        !          1311:   ""
        !          1312:   "@
        !          1313:   sre. %0,%1,%2
        !          1314:   sri. %0,%1,%h2"
        !          1315:   [(set_attr "type" "delayed_compare")])
        !          1316: 
        !          1317: (define_insn ""
        !          1318:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1319:        (and:SI (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1320:                             (match_operand:SI 2 "const_int_operand" "i"))
        !          1321:                (match_operand:SI 3 "mask_operand" "L")))]
        !          1322:   "includes_rshift_p (operands[2], operands[3])"
        !          1323:   "rlinm %0,%1,%s2,%m3,%M3")
        !          1324: 
        !          1325: (define_insn ""
        !          1326:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1327:        (compare:CC
        !          1328:         (and:SI (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1329:                              (match_operand:SI 2 "const_int_operand" "i"))
        !          1330:                 (match_operand:SI 3 "mask_operand" "L"))
        !          1331:         (const_int 0)))
        !          1332:    (clobber (match_scratch:SI 4 "=r"))]
        !          1333:   "includes_rshift_p (operands[2], operands[3])"
        !          1334:   "rlinm. %4,%1,%s2,%m3,%M3"
        !          1335:   [(set_attr "type" "delayed_compare")])
        !          1336: 
        !          1337: (define_insn ""
        !          1338:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          1339:        (compare:CC
        !          1340:         (and:SI (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1341:                              (match_operand:SI 2 "const_int_operand" "i"))
        !          1342:                 (match_operand:SI 3 "mask_operand" "L"))
        !          1343:         (const_int 0)))
        !          1344:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1345:        (and:SI (lshiftrt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
        !          1346:   "includes_rshift_p (operands[2], operands[3])"
        !          1347:   "rlinm. %0,%1,%s2,%m3,%M3"
        !          1348:   [(set_attr "type" "delayed_compare")])
        !          1349: 
        !          1350: (define_insn ""
        !          1351:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1352:        (zero_extend:SI
        !          1353:         (subreg:QI
        !          1354:          (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1355:                       (match_operand:SI 2 "const_int_operand" "i")) 0)))]
        !          1356:   "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"
        !          1357:   "rlinm %0,%1,%s2,24,31")
        !          1358: 
        !          1359: (define_insn ""
        !          1360:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1361:        (compare:CC
        !          1362:         (zero_extend:SI
        !          1363:          (subreg:QI
        !          1364:           (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1365:                        (match_operand:SI 2 "const_int_operand" "i")) 0))
        !          1366:         (const_int 0)))
        !          1367:    (clobber (match_scratch:SI 3 "=r"))]
        !          1368:   "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"
        !          1369:   "rlinm. %3,%1,%s2,24,31"
        !          1370:   [(set_attr "type" "delayed_compare")])
        !          1371: 
        !          1372: (define_insn ""
        !          1373:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          1374:        (compare:CC
        !          1375:         (zero_extend:SI
        !          1376:          (subreg:QI
        !          1377:           (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1378:                        (match_operand:SI 2 "const_int_operand" "i")) 0))
        !          1379:         (const_int 0)))
        !          1380:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1381:        (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
        !          1382:   "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"
        !          1383:   "rlinm. %0,%1,%s2,24,31"
        !          1384:   [(set_attr "type" "delayed_compare")])
        !          1385: 
        !          1386: (define_insn ""
        !          1387:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1388:        (zero_extend:SI
        !          1389:         (subreg:HI
        !          1390:          (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1391:                       (match_operand:SI 2 "const_int_operand" "i")) 0)))]
        !          1392:   "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"
        !          1393:   "rlinm %0,%1,%s2,16,31")
        !          1394: 
        !          1395: (define_insn ""
        !          1396:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          1397:        (compare:CC
        !          1398:         (zero_extend:SI
        !          1399:          (subreg:HI
        !          1400:           (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1401:                        (match_operand:SI 2 "const_int_operand" "i")) 0))
        !          1402:         (const_int 0)))
        !          1403:    (clobber (match_scratch:SI 3 "=r"))]
        !          1404:   "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"
        !          1405:   "rlinm. %3,%1,%s2,16,31"
        !          1406:   [(set_attr "type" "delayed_compare")])
        !          1407: 
        !          1408: (define_insn ""
        !          1409:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          1410:        (compare:CC
        !          1411:         (zero_extend:SI
        !          1412:          (subreg:HI
        !          1413:           (lshiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          1414:                        (match_operand:SI 2 "const_int_operand" "i")) 0))
        !          1415:         (const_int 0)))
        !          1416:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          1417:        (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
        !          1418:   "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"
        !          1419:   "rlinm. %0,%1,%s2,16,31"
        !          1420:   [(set_attr "type" "delayed_compare")])
        !          1421: 
        !          1422: (define_insn ""
        !          1423:   [(set (zero_extract:SI (match_operand:SI 0 "gen_reg_operand" "+r")
        !          1424:                         (const_int 1)
        !          1425:                         (match_operand:SI 1 "gen_reg_operand" "r"))
        !          1426:        (ashiftrt:SI (match_operand:SI 2 "gen_reg_operand" "r")
        !          1427:                     (const_int 31)))]
        !          1428:   ""
        !          1429:   "rrib %0,%1,%2")
        !          1430: 
        !          1431: (define_insn ""
        !          1432:   [(set (zero_extract:SI (match_operand:SI 0 "gen_reg_operand" "+r")
        !          1433:                         (const_int 1)
        !          1434:                         (match_operand:SI 1 "gen_reg_operand" "r"))
        !          1435:        (lshiftrt:SI (match_operand:SI 2 "gen_reg_operand" "r")
        !          1436:                     (const_int 31)))]
        !          1437:   ""
        !          1438:   "rrib %0,%1,%2")
        !          1439: 
        !          1440: (define_insn ""
        !          1441:   [(set (zero_extract:SI (match_operand:SI 0 "gen_reg_operand" "+r")
        !          1442:                         (const_int 1)
        !          1443:                         (match_operand:SI 1 "gen_reg_operand" "r"))
        !          1444:        (zero_extract:SI (match_operand:SI 2 "gen_reg_operand" "r")
        !          1445:                         (const_int 1)
        !          1446:                         (const_int 0)))]
        !          1447:   ""
        !          1448:   "rrib %0,%1,%2")
        !          1449: 
        !          1450: (define_insn "ashrsi3"
        !          1451:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          1452:        (ashiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1453:                     (match_operand:SI 2 "reg_or_cint_operand" "r,i")))
        !          1454:    (clobber (match_scratch:SI 3 "=q,X"))]
        !          1455:   ""
        !          1456:   "@
        !          1457:    srea %0,%1,%2
        !          1458:    srai %0,%1,%h2")
        !          1459: 
        !          1460: (define_insn ""
        !          1461:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
        !          1462:        (compare:CC (ashiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1463:                                 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
        !          1464:                    (const_int 0)))
        !          1465:    (clobber (match_scratch:SI 3 "=r,r"))
        !          1466:    (clobber (match_scratch:SI 4 "=q,X"))]
        !          1467:   ""
        !          1468:   "@
        !          1469:    srea. %3,%1,%2
        !          1470:    srai. %3,%1,%h2"
        !          1471:   [(set_attr "type" "delayed_compare")])
        !          1472: 
        !          1473: (define_insn ""
        !          1474:   [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
        !          1475:        (compare:CC (ashiftrt:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          1476:                                 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
        !          1477:                    (const_int 0)))
        !          1478:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          1479:        (ashiftrt:SI (match_dup 1) (match_dup 2)))
        !          1480:    (clobber (match_scratch:SI 4 "=q,X"))]
        !          1481:   ""
        !          1482:   "@
        !          1483:    srea. %0,%1,%2
        !          1484:    srai. %0,%1,%h2"
        !          1485:   [(set_attr "type" "delayed_compare")])
        !          1486: 
        !          1487: (define_expand "extendqisi2"
        !          1488:   [(parallel [(set (match_dup 2)
        !          1489:                   (ashift:SI (match_operand:QI 1 "gen_reg_operand" "")
        !          1490:                              (const_int 24)))
        !          1491:              (clobber (scratch:SI))])
        !          1492:    (parallel [(set (match_operand:SI 0 "gen_reg_operand" "")
        !          1493:                   (ashiftrt:SI (match_dup 2)
        !          1494:                                (const_int 24)))
        !          1495:              (clobber (scratch:SI))])]
        !          1496:   ""
        !          1497:   "
        !          1498: { operands[1] = gen_lowpart (SImode, operands[1]);
        !          1499:   operands[2] = gen_reg_rtx (SImode); }")
        !          1500: 
        !          1501: (define_expand "extendqihi2"
        !          1502:   [(parallel [(set (match_dup 2)
        !          1503:                   (ashift:SI (match_operand:QI 1 "gen_reg_operand" "")
        !          1504:                              (const_int 24)))
        !          1505:              (clobber (scratch:SI))])
        !          1506:    (parallel [(set (match_operand:HI 0 "gen_reg_operand" "")
        !          1507:                   (ashiftrt:SI (match_dup 2)
        !          1508:                                (const_int 24)))
        !          1509:              (clobber (scratch:SI))])]
        !          1510:   ""
        !          1511:   "
        !          1512: { operands[0] = gen_lowpart (SImode, operands[0]);
        !          1513:   operands[1] = gen_lowpart (SImode, operands[1]);
        !          1514:   operands[2] = gen_reg_rtx (SImode); }")
        !          1515: 
        !          1516: ;; Floating-point insns, excluding normal data motion.
        !          1517: ;;
        !          1518: ;; We pretend that we have both SFmode and DFmode insns, while, in fact,
        !          1519: ;; all fp insns are actually done in double.  The only conversions we will
        !          1520: ;; do will be when storing to memory.  In that case, we will use the "frsp"
        !          1521: ;; instruction before storing.
        !          1522: ;;
        !          1523: ;; Note that when we store into a single-precision memory location, we need to
        !          1524: ;; use the frsp insn first.  If the register being stored isn't dead, we
        !          1525: ;; need a scratch register for the frsp.  But this is difficult when the store
        !          1526: ;; is done by reload.  It is not incorrect to do the frsp on the register in
        !          1527: ;; this case, we just lose precision that we would have otherwise gotten but
        !          1528: ;; is not guaranteed.  Perhaps this should be tightened up at some point.
        !          1529: 
        !          1530: (define_insn "extendsfdf2"
        !          1531:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1532:        (float_extend:DF (match_operand:SF 1 "gen_reg_operand" "f")))]
        !          1533:   ""
        !          1534:   "*
        !          1535: {
        !          1536:   if (REGNO (operands[0]) == REGNO (operands[1]))
        !          1537:     return \"\";
        !          1538:   else
        !          1539:     return \"fmr %0,%1\";
        !          1540: }"
        !          1541:   [(set_attr "type" "fp")])
        !          1542: 
        !          1543: (define_insn "truncdfsf2"
        !          1544:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1545:        (float_truncate:SF (match_operand:DF 1 "gen_reg_operand" "f")))]
        !          1546:   ""
        !          1547:   "*
        !          1548: {
        !          1549:   if (REGNO (operands[0]) == REGNO (operands[1]))
        !          1550:     return \"\";
        !          1551:   else
        !          1552:     return \"fmr %0,%1\";
        !          1553: }"
        !          1554:   [(set_attr "type" "fp")])
        !          1555: 
        !          1556: (define_insn "negsf2"
        !          1557:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1558:        (neg:SF (match_operand:SF 1 "gen_reg_operand" "f")))]
        !          1559:   ""
        !          1560:   "fneg %0,%1"
        !          1561:   [(set_attr "type" "fp")])
        !          1562: 
        !          1563: (define_insn "abssf2"
        !          1564:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1565:        (abs:SF (match_operand:SF 1 "gen_reg_operand" "f")))]
        !          1566:   ""
        !          1567:   "fabs %0,%1"
        !          1568:   [(set_attr "type" "fp")])
        !          1569: 
        !          1570: (define_insn ""
        !          1571:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1572:        (neg:SF (abs:SF (match_operand:SF 1 "gen_reg_operand" "f"))))]
        !          1573:   ""
        !          1574:   "fnabs %0,%1"
        !          1575:   [(set_attr "type" "fp")])
        !          1576: 
        !          1577: (define_insn "addsf3"
        !          1578:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1579:        (plus:SF (match_operand:SF 1 "gen_reg_operand" "%f")
        !          1580:                 (match_operand:SF 2 "gen_reg_operand" "f")))]
        !          1581:   ""
        !          1582:   "fa %0,%1,%2"
        !          1583:   [(set_attr "type" "fp")])
        !          1584: 
        !          1585: (define_insn "subsf3"
        !          1586:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1587:        (minus:SF (match_operand:SF 1 "gen_reg_operand" "f")
        !          1588:                  (match_operand:SF 2 "gen_reg_operand" "f")))]
        !          1589:   ""
        !          1590:   "fs %0,%1,%2"
        !          1591:   [(set_attr "type" "fp")])
        !          1592: 
        !          1593: (define_insn "mulsf3"
        !          1594:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1595:        (mult:SF (match_operand:SF 1 "gen_reg_operand" "%f")
        !          1596:                 (match_operand:SF 2 "gen_reg_operand" "f")))]
        !          1597:   ""
        !          1598:   "fm %0,%1,%2"
        !          1599:   [(set_attr "type" "fp")])
        !          1600: 
        !          1601: (define_insn "divsf3"
        !          1602:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1603:        (div:SF (match_operand:SF 1 "gen_reg_operand" "f")
        !          1604:                (match_operand:SF 2 "gen_reg_operand" "f")))]
        !          1605:   ""
        !          1606:   "fd %0,%1,%2"
        !          1607:   [(set_attr "type" "fp")])
        !          1608: 
        !          1609: (define_insn ""
        !          1610:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1611:        (plus:SF (mult:SF (match_operand:SF 1 "gen_reg_operand" "%f")
        !          1612:                          (match_operand:SF 2 "gen_reg_operand" "f"))
        !          1613:                 (match_operand:SF 3 "gen_reg_operand" "f")))]
        !          1614:   ""
        !          1615:   "fma %0,%1,%2,%3"
        !          1616:   [(set_attr "type" "fp")])
        !          1617: 
        !          1618: (define_insn ""
        !          1619:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1620:        (minus:SF (mult:SF (match_operand:SF 1 "gen_reg_operand" "%f")
        !          1621:                           (match_operand:SF 2 "gen_reg_operand" "f"))
        !          1622:                  (match_operand:SF 3 "gen_reg_operand" "f")))]
        !          1623:   ""
        !          1624:   "fms %0,%1,%2,%3"
        !          1625:   [(set_attr "type" "fp")])
        !          1626: 
        !          1627: (define_insn ""
        !          1628:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1629:        (neg:SF (plus:SF (mult:SF (match_operand:SF 1 "gen_reg_operand" "%f")
        !          1630:                                  (match_operand:SF 2 "gen_reg_operand" "f"))
        !          1631:                         (match_operand:SF 3 "gen_reg_operand" "f"))))]
        !          1632:   ""
        !          1633:   "fnma %0,%1,%2,%3"
        !          1634:   [(set_attr "type" "fp")])
        !          1635: 
        !          1636: (define_insn ""
        !          1637:   [(set (match_operand:SF 0 "gen_reg_operand" "=f")
        !          1638:        (neg:SF (minus:SF (mult:SF (match_operand:SF 1 "gen_reg_operand" "%f")
        !          1639:                                   (match_operand:SF 2 "gen_reg_operand" "f"))
        !          1640:                          (match_operand:SF 3 "gen_reg_operand" "f"))))]
        !          1641:   ""
        !          1642:   "fnms %0,%1,%2,%3"
        !          1643:   [(set_attr "type" "fp")])
        !          1644: 
        !          1645: (define_insn "negdf2"
        !          1646:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1647:        (neg:DF (match_operand:DF 1 "gen_reg_operand" "f")))]
        !          1648:   ""
        !          1649:   "fneg %0,%1"
        !          1650:   [(set_attr "type" "fp")])
        !          1651: 
        !          1652: (define_insn "absdf2"
        !          1653:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1654:        (abs:DF (match_operand:DF 1 "gen_reg_operand" "f")))]
        !          1655:   ""
        !          1656:   "fabs %0,%1"
        !          1657:   [(set_attr "type" "fp")])
        !          1658: 
        !          1659: (define_insn ""
        !          1660:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1661:        (neg:DF (abs:DF (match_operand:DF 1 "gen_reg_operand" "f"))))]
        !          1662:   ""
        !          1663:   "fnabs %0,%1"
        !          1664:   [(set_attr "type" "fp")])
        !          1665: 
        !          1666: (define_insn "adddf3"
        !          1667:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1668:        (plus:DF (match_operand:DF 1 "gen_reg_operand" "%f")
        !          1669:                 (match_operand:DF 2 "gen_reg_operand" "f")))]
        !          1670:   ""
        !          1671:   "fa %0,%1,%2"
        !          1672:   [(set_attr "type" "fp")])
        !          1673: 
        !          1674: (define_insn "subdf3"
        !          1675:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1676:        (minus:DF (match_operand:DF 1 "gen_reg_operand" "f")
        !          1677:                  (match_operand:DF 2 "gen_reg_operand" "f")))]
        !          1678:   ""
        !          1679:   "fs %0,%1,%2"
        !          1680:   [(set_attr "type" "fp")])
        !          1681: 
        !          1682: (define_insn "muldf3"
        !          1683:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1684:        (mult:DF (match_operand:DF 1 "gen_reg_operand" "%f")
        !          1685:                 (match_operand:DF 2 "gen_reg_operand" "f")))]
        !          1686:   ""
        !          1687:   "fm %0,%1,%2"
        !          1688:   [(set_attr "type" "fp")])
        !          1689: 
        !          1690: (define_insn "divdf3"
        !          1691:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1692:        (div:DF (match_operand:DF 1 "gen_reg_operand" "f")
        !          1693:                (match_operand:DF 2 "gen_reg_operand" "f")))]
        !          1694:   ""
        !          1695:   "fd %0,%1,%2"
        !          1696:   [(set_attr "type" "fp")])
        !          1697: 
        !          1698: (define_insn ""
        !          1699:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1700:        (plus:DF (mult:DF (match_operand:DF 1 "gen_reg_operand" "%f")
        !          1701:                          (match_operand:DF 2 "gen_reg_operand" "f"))
        !          1702:                 (match_operand:DF 3 "gen_reg_operand" "f")))]
        !          1703:   ""
        !          1704:   "fma %0,%1,%2,%3"
        !          1705:   [(set_attr "type" "fp")])
        !          1706: 
        !          1707: (define_insn ""
        !          1708:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1709:        (minus:DF (mult:DF (match_operand:DF 1 "gen_reg_operand" "%f")
        !          1710:                           (match_operand:DF 2 "gen_reg_operand" "f"))
        !          1711:                  (match_operand:DF 3 "gen_reg_operand" "f")))]
        !          1712:   ""
        !          1713:   "fms %0,%1,%2,%3"
        !          1714:   [(set_attr "type" "fp")])
        !          1715: 
        !          1716: (define_insn ""
        !          1717:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1718:        (neg:DF (plus:DF (mult:DF (match_operand:DF 1 "gen_reg_operand" "%f")
        !          1719:                                  (match_operand:DF 2 "gen_reg_operand" "f"))
        !          1720:                         (match_operand:DF 3 "gen_reg_operand" "f"))))]
        !          1721:   ""
        !          1722:   "fnma %0,%1,%2,%3"
        !          1723:   [(set_attr "type" "fp")])
        !          1724: 
        !          1725: (define_insn ""
        !          1726:   [(set (match_operand:DF 0 "gen_reg_operand" "=f")
        !          1727:        (neg:DF (minus:DF (mult:DF (match_operand:DF 1 "gen_reg_operand" "%f")
        !          1728:                                   (match_operand:DF 2 "gen_reg_operand" "f"))
        !          1729:                          (match_operand:DF 3 "gen_reg_operand" "f"))))]
        !          1730:   ""
        !          1731:   "fnms %0,%1,%2,%3"
        !          1732:   [(set_attr "type" "fp")])
        !          1733: 
        !          1734: ;; Conversions to and from floating-point.
        !          1735: (define_expand "floatsidf2"
        !          1736:   [(set (match_dup 2)
        !          1737:        (plus:DI (zero_extend:DI
        !          1738:                  (xor:SI (match_operand:SI 1 "gen_reg_operand" "")
        !          1739:                          (match_dup 3)))
        !          1740:                 (match_dup 4)))
        !          1741:    (set (match_operand:DF 0 "gen_reg_operand" "")
        !          1742:        (minus:DF (subreg:DF (match_dup 2) 0)
        !          1743:                  (match_dup 5)))]
        !          1744:   ""
        !          1745:   "
        !          1746: {
        !          1747: #if HOST_BITS_PER_INT != BITS_PER_WORD
        !          1748:   /* Maybe someone can figure out how to do this in that case.  I don't
        !          1749:      want to right now.  */
        !          1750:   abort ();
        !          1751: #endif
        !          1752: 
        !          1753:   operands[2] = gen_reg_rtx (DImode);
        !          1754:   operands[3] = gen_rtx (CONST_INT, VOIDmode, 0x80000000);
        !          1755:   operands[4] = immed_double_const (0, 0x43300000, DImode);
        !          1756:   operands[5] = force_reg (DFmode, immed_double_const (0x43300000,
        !          1757:                                                       0x80000000, DFmode));
        !          1758: }")
        !          1759: 
        !          1760: (define_expand "floatunssidf2"
        !          1761:   [(set (match_dup 2)
        !          1762:        (plus:DI (zero_extend:DI (match_operand:SI 1 "gen_reg_operand" ""))
        !          1763:                 (match_dup 3)))
        !          1764:    (set (match_operand:DF 0 "gen_reg_operand" "")
        !          1765:        (minus:DF (subreg:DF (match_dup 2) 0)
        !          1766:                  (match_dup 4)))]
        !          1767:   ""
        !          1768:   "
        !          1769: {
        !          1770: #if HOST_BITS_PER_INT != BITS_PER_WORD
        !          1771:   /* Maybe someone can figure out how to do this in that case.  I don't
        !          1772:      want to right now.  */
        !          1773:   abort ();
        !          1774: #endif
        !          1775: 
        !          1776:   operands[2] = gen_reg_rtx (DImode);
        !          1777:   operands[3] = immed_double_const (0, 0x43300000, DImode);
        !          1778:   operands[4] = force_reg (DFmode, immed_double_const (0x43300000, 0, DFmode));
        !          1779: }")
        !          1780: 
        !          1781: ;; For the above two cases, we always split.
        !          1782: (define_split
        !          1783:   [(set (match_operand:DI 0 "gen_reg_operand" "")
        !          1784:        (plus:DI (zero_extend:DI
        !          1785:                  (xor:SI (match_operand:SI 1 "gen_reg_operand" "")
        !          1786:                          (match_operand:SI 2 "logical_operand" "")))
        !          1787:                 (match_operand:DI 3 "immediate_operand" "")))]
        !          1788:   "reload_completed && HOST_BITS_PER_INT == BITS_PER_WORD
        !          1789:    && GET_CODE (operands[3]) == CONST_DOUBLE
        !          1790:    && CONST_DOUBLE_LOW (operands[3]) == 0"
        !          1791:   [(set (match_dup 6) (xor:SI (match_dup 1) (match_dup 2)))
        !          1792:    (set (match_dup 4) (match_dup 5))]
        !          1793:   "
        !          1794: { operands[4] = operand_subword (operands[0], 0, 0, DImode);
        !          1795:   operands[5] = operand_subword (operands[3], 0, 0, DImode);
        !          1796:   operands[6] = operand_subword (operands[0], 1, 0, DImode);
        !          1797: }")
        !          1798: 
        !          1799: (define_insn ""
        !          1800:   [(set (match_operand:DI 0 "gen_reg_operand" "=r")
        !          1801:        (plus:DI (zero_extend:DI
        !          1802:                  (xor:SI (match_operand:SI 1 "gen_reg_operand" "%r")
        !          1803:                          (match_operand:SI 2 "logical_operand" "rKJ")))
        !          1804:                 (match_operand:DI 3 "immediate_operand" "n")))]
        !          1805:   "HOST_BITS_PER_INT == BITS_PER_WORD
        !          1806:    && GET_CODE (operands[3]) == CONST_DOUBLE
        !          1807:    && CONST_DOUBLE_LOW (operands[3]) == 0"
        !          1808:   "#")
        !          1809:   
        !          1810: (define_split
        !          1811:   [(set (match_operand:DI 0 "gen_reg_operand" "=")
        !          1812:        (plus:DI (zero_extend:DI (match_operand:SI 1 "gen_reg_operand" ""))
        !          1813:                 (match_operand:DI 2 "immediate_operand" "")))]
        !          1814:   "reload_completed && HOST_BITS_PER_INT == BITS_PER_WORD
        !          1815:    && GET_CODE (operands[2]) == CONST_DOUBLE
        !          1816:    && CONST_DOUBLE_LOW (operands[2]) == 0"
        !          1817:   [(set (match_dup 3) (match_dup 4))
        !          1818:    (set (match_dup 5) (match_dup 1))]
        !          1819:   "
        !          1820: { operands[3] = operand_subword (operands[0], 0, 0, DImode);
        !          1821:   operands[4] = operand_subword (operands[2], 0, 0, DImode);
        !          1822:   operands[5] = operand_subword (operands[0], 1, 0, DImode);
        !          1823: 
        !          1824:   if (rtx_equal_p (operands[1], operands[5]))
        !          1825:     {
        !          1826:       emit_move_insn (operands[3], operands[4]);
        !          1827:       DONE;
        !          1828:     }
        !          1829: }")
        !          1830: 
        !          1831: (define_insn ""
        !          1832:   [(set (match_operand:DI 0 "gen_reg_operand" "=r")
        !          1833:        (plus:DI (zero_extend:DI (match_operand:SI 1 "gen_reg_operand" "r"))
        !          1834:                 (match_operand:DI 2 "immediate_operand" "n")))]
        !          1835:   "HOST_BITS_PER_INT == BITS_PER_WORD
        !          1836:    && GET_CODE (operands[2]) == CONST_DOUBLE
        !          1837:    && CONST_DOUBLE_LOW (operands[2]) == 0"
        !          1838:   "#")
        !          1839: 
        !          1840: (define_expand "fix_truncdfsi2"
        !          1841:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !          1842:        (fix:DF (match_operand:DF 1 "gen_reg_operand" "")))]
        !          1843:   ""
        !          1844:   "
        !          1845: {
        !          1846:   emit_insn (gen_trunc_call (operands[0], operands[1],
        !          1847:                             gen_rtx (SYMBOL_REF, Pmode, \"itrunc\")));
        !          1848:   DONE;
        !          1849: }")
        !          1850: 
        !          1851: (define_expand "fixuns_truncdfsi2"
        !          1852:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !          1853:        (unsigned_fix:DF (match_operand:DF 1 "gen_reg_operand" "")))]
        !          1854:   ""
        !          1855:   "
        !          1856: {
        !          1857:   emit_insn (gen_trunc_call (operands[0], operands[1],
        !          1858:                             gen_rtx (SYMBOL_REF, Pmode, \"uitrunc\")));
        !          1859:   DONE;
        !          1860: }")
        !          1861: 
        !          1862: 
        !          1863: (define_expand "trunc_call"
        !          1864:   [(parallel [(set (match_operand:SI 0 "" "")
        !          1865:                   (fix:DF (match_operand:DF 1 "" "")))
        !          1866:              (use (match_operand:SI 2 "" ""))])]
        !          1867:   ""
        !          1868:   "
        !          1869: {
        !          1870:   rtx insns = gen_trunc_call_rtl (operands[0], operands[1], operands[2]);
        !          1871:   rtx first = XVECEXP (insns, 0, 0);
        !          1872:   rtx last = XVECEXP (insns, 0, XVECLEN (insns, 0) - 1);
        !          1873: 
        !          1874:   REG_NOTES (first) = gen_rtx (INSN_LIST, REG_LIBCALL, last,
        !          1875:                               REG_NOTES (first));
        !          1876:   REG_NOTES (last) = gen_rtx (INSN_LIST, REG_RETVAL, first, REG_NOTES (last));
        !          1877: 
        !          1878:   emit_insn (insns);
        !          1879:   DONE;
        !          1880: }")
        !          1881: 
        !          1882: (define_expand "trunc_call_rtl"
        !          1883:   [(set (reg:DF 33) (match_operand:DF 1 "gen_reg_operand" ""))
        !          1884:    (use (reg:DF 33))
        !          1885:    (parallel [(set (reg:SI 3)
        !          1886:                   (call (mem:SI (match_operand 2 "" "")) (const_int 0)))
        !          1887:              (clobber (scratch:SI))])
        !          1888:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          1889:        (reg:SI 3))]
        !          1890:   ""
        !          1891:   "
        !          1892: { 
        !          1893:   rs6000_trunc_used = 1;
        !          1894: }")
        !          1895: 
        !          1896: ;; Define the DImode operations that can be done in a small number
        !          1897: ;; of instructions.
        !          1898: (define_insn "adddi3"
        !          1899:   [(set (match_operand:DI 0 "gen_reg_operand" "=r")
        !          1900:        (plus:DI (match_operand:DI 1 "gen_reg_operand" "%r")
        !          1901:                 (match_operand:DI 2 "gen_reg_operand" "r")))]
        !          1902:   ""
        !          1903:   "a %L0,%L1,%L2\;ae %0,%1,%2")
        !          1904: 
        !          1905: (define_insn "subdi3"
        !          1906:   [(set (match_operand:DI 0 "gen_reg_operand" "=r")
        !          1907:        (minus:DI (match_operand:DI 1 "gen_reg_operand" "r")
        !          1908:                  (match_operand:DI 2 "gen_reg_operand" "r")))]
        !          1909:   ""
        !          1910:   "sf %L0,%L2,%L1\;sfe %0,%2,%1")
        !          1911: 
        !          1912: (define_insn "negdi3"
        !          1913:   [(set (match_operand:DI 0 "gen_reg_operand" "=r")
        !          1914:        (neg:DI (match_operand:DI 1 "gen_reg_operand" "r")))]
        !          1915:   ""
        !          1916:   "sfi %L0,%L1,0\;sfze %0,%1")
        !          1917: 
        !          1918: (define_insn "mulsidi3"
        !          1919:   [(set (match_operand:DI 0 "gen_reg_operand" "=r")
        !          1920:        (mult:DI (sign_extend:DI (match_operand:SI 1 "gen_reg_operand" "r"))
        !          1921:                 (sign_extend:DI (match_operand:SI 2 "gen_reg_operand" "r"))))
        !          1922:    (clobber (match_scratch:SI 3 "=q"))]
        !          1923:   ""
        !          1924:   "mul %0,%1,%2\;mfmq %L0")
        !          1925: 
        !          1926: ;; If operands 0 and 2 are in the same register, we have a problem.  But
        !          1927: ;; operands 0 and 1 (the usual case) can be in the same register.  That's
        !          1928: ;; why we have the strange constraints below.
        !          1929: (define_insn "ashldi3"
        !          1930:   [(set (match_operand:DI 0 "gen_reg_operand" "=r,r,r,&r")
        !          1931:        (ashift:DI (match_operand:DI 1 "gen_reg_operand" "r,r,0,r")
        !          1932:                   (match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r")))
        !          1933:    (clobber (match_scratch:SI 3 "=X,q,q,q"))]
        !          1934:   ""
        !          1935:   "@
        !          1936:    sli %0,%L1,%h2\;cal %L0,0(0)
        !          1937:    sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2
        !          1938:    sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2
        !          1939:    sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2 ")
        !          1940: 
        !          1941: (define_insn "lshrdi3"
        !          1942:   [(set (match_operand:DI 0 "gen_reg_operand" "=r,r,r,&r")
        !          1943:        (lshiftrt:DI (match_operand:DI 1 "gen_reg_operand" "r,r,0,r")
        !          1944:                     (match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r")))
        !          1945:    (clobber (match_scratch:SI 3 "=X,q,q,q"))]
        !          1946:   ""
        !          1947:   "@
        !          1948:    cal %0,0(0)\;sri %L0,%1,%h2
        !          1949:    sr%I2q %L0,%L1,%2\;srl%I2q %0,%1,%2
        !          1950:    sr%I2q %L0,%L1,%2\;srl%I2q %0,%1,%2
        !          1951:    sr%I2q %L0,%L1,%2\;srl%I2q %0,%1,%2 ")
        !          1952: 
        !          1953: ;; Shift by a variable amount is too complex to be worth open-coding.  We
        !          1954: ;; just handle shifts by constants.
        !          1955: 
        !          1956: (define_expand "ashrdi3"
        !          1957:   [(parallel [(set (match_operand:DI 0 "gen_reg_operand" "=")
        !          1958:                   (ashiftrt:DI (match_operand:DI 1 "gen_reg_operand" "")
        !          1959:                                (match_operand:SI 2 "general_operand" "")))
        !          1960:              (clobber (match_scratch:SI 3 ""))])]
        !          1961:   ""
        !          1962:   "
        !          1963: { if (GET_CODE (operands[2]) != CONST_INT)
        !          1964:     FAIL;
        !          1965: }")
        !          1966: 
        !          1967: (define_insn ""
        !          1968:   [(set (match_operand:DI 0 "gen_reg_operand" "=r,r")
        !          1969:        (ashiftrt:DI (match_operand:DI 1 "gen_reg_operand" "r,r")
        !          1970:                     (match_operand:SI 2 "const_int_operand" "M,i")))
        !          1971:    (clobber (match_scratch:SI 3 "=X,q"))]
        !          1972:   ""
        !          1973:   "@
        !          1974:    srai %0,%1,31\;srai %L0,%1,%h2
        !          1975:    sraiq %L0,%L1,%2\;srlq %0,%1,%2")
        !          1976: 
        !          1977: ;; Now define ways of moving data around.
        !          1978: ;;
        !          1979: ;; For SI, we special-case integers that can't be loaded in one insn.  We
        !          1980: ;; do the load 16-bits at a time.  We could do this by loading from memory,
        !          1981: ;; and this is even supposed to be faster, but it is simpler not to get
        !          1982: ;; integers in the TOC.
        !          1983: (define_expand "movsi"
        !          1984:   [(set (match_operand:SI 0 "general_operand" "")
        !          1985:        (match_operand:SI 1 "any_operand" ""))]
        !          1986:   ""
        !          1987:   "
        !          1988: {
        !          1989:   if (GET_CODE (operands[0]) != REG)
        !          1990:     operands[1] = force_reg (SImode, operands[1]);
        !          1991: 
        !          1992:   if (CONSTANT_P (operands[1]) && GET_CODE (operands[1]) != CONST_INT)
        !          1993:     operands[1] = force_const_mem (SImode, operands[1]);
        !          1994: 
        !          1995:   if (GET_CODE (operands[1]) == CONST_INT
        !          1996:       && (unsigned) (INTVAL (operands[1]) + 0x8000) >= 0x10000
        !          1997:       && (INTVAL (operands[1]) & 0xffff) != 0)
        !          1998:     {
        !          1999:       emit_move_insn (operands[0],
        !          2000:                      gen_rtx (CONST_INT, VOIDmode,
        !          2001:                               INTVAL (operands[1]) & 0xffff0000));
        !          2002:       emit_insn (gen_iorsi3 (operands[0], operands[0],
        !          2003:                             gen_rtx (CONST_INT, VOIDmode,
        !          2004:                                      INTVAL (operands[1]) & 0xffff)));
        !          2005:       DONE;
        !          2006:     }
        !          2007: }")
        !          2008: 
        !          2009: (define_insn ""
        !          2010:   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,r,r,r,*h")
        !          2011:        (match_operand:SI 1 "input_operand" "r,m,r,I,J,*h,r"))]
        !          2012:   "gen_reg_operand (operands[0], SImode)
        !          2013:    || gen_reg_operand (operands[1], SImode)"
        !          2014:   "@
        !          2015:    ai %0,%1,0
        !          2016:    l%U1%X1 %0,%1
        !          2017:    st%U0%X0 %1,%0
        !          2018:    cal %0,%1(0)
        !          2019:    cau %0,0,%u1
        !          2020:    mf%1 %0
        !          2021:    mt%0 %1"
        !          2022:   [(set_attr "type" "*,load,*,*,*,*,*")])
        !          2023: 
        !          2024: (define_insn ""
        !          2025:   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
        !          2026:        (compare:CC (match_operand:SI 1 "gen_reg_operand" "r")
        !          2027:                    (const_int 0)))
        !          2028:    (set (match_operand:SI 0 "gen_reg_operand" "=r") (match_dup 1))]
        !          2029:   ""
        !          2030:   "ai. %0,%1,0"
        !          2031:   [(set_attr "type" "compare")])
        !          2032: 
        !          2033: (define_expand "movhi"
        !          2034:   [(set (match_operand:HI 0 "general_operand" "")
        !          2035:        (match_operand:HI 1 "any_operand" ""))]
        !          2036:   ""
        !          2037:   "
        !          2038: {
        !          2039:   if (GET_CODE (operands[0]) != REG)
        !          2040:     operands[1] = force_reg (HImode, operands[1]);
        !          2041: 
        !          2042:   if (CONSTANT_P (operands[1]) && GET_CODE (operands[1]) != CONST_INT)
        !          2043:     operands[1] = force_const_mem (HImode, operands[1]);
        !          2044: }")
        !          2045: 
        !          2046: (define_insn ""
        !          2047:   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r,r,*h")
        !          2048:        (match_operand:HI 1 "input_operand" "r,m,r,i,*h,r"))]
        !          2049:   "gen_reg_operand (operands[0], HImode)
        !          2050:    || gen_reg_operand (operands[1], HImode)"
        !          2051:   "@
        !          2052:    oril %0,%1,0
        !          2053:    lhz%U1%X1 %0,%1
        !          2054:    sth%U0%X0 %1,%0
        !          2055:    cal %0,%w1(0)
        !          2056:    mf%1 %0
        !          2057:    mt%0 %1"
        !          2058:   [(set_attr "type" "*,load,*,*,*,*")])
        !          2059: 
        !          2060: (define_expand "movqi"
        !          2061:   [(set (match_operand:QI 0 "general_operand" "")
        !          2062:        (match_operand:QI 1 "any_operand" ""))]
        !          2063:   ""
        !          2064:   "
        !          2065: {
        !          2066:   if (GET_CODE (operands[0]) != REG)
        !          2067:     operands[1] = force_reg (QImode, operands[1]);
        !          2068: 
        !          2069:   if (CONSTANT_P (operands[1]) && GET_CODE (operands[1]) != CONST_INT)
        !          2070:     operands[1] = force_const_mem (QImode, operands[1]);
        !          2071: }")
        !          2072: 
        !          2073: (define_insn ""
        !          2074:   [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r,r,*h")
        !          2075:        (match_operand:QI 1 "input_operand" "r,m,r,i,*h,r"))]
        !          2076:   "gen_reg_operand (operands[0], QImode)
        !          2077:    || gen_reg_operand (operands[1], QImode)"
        !          2078:   "@
        !          2079:    oril %0,%1,0
        !          2080:    lbz%U1%X1 %0,%1
        !          2081:    stb%U0%X0 %1,%0
        !          2082:    cal %0,%1(0)
        !          2083:    mf%1 %0
        !          2084:    mt%0 %1"
        !          2085:   [(set_attr "type" "*,load,*,*,*,*")])
        !          2086: 
        !          2087: ;; Here is how to move condition codes around.  When we store CC data in
        !          2088: ;; an integer register or memory, we store just the high-order 4 bits.
        !          2089: ;; This lets us not shift in the most common case of CR0.
        !          2090: (define_expand "movcc"
        !          2091:   [(set (match_operand:CC 0 "nonimmediate_operand" "")
        !          2092:        (match_operand:CC 1 "nonimmediate_operand" ""))]
        !          2093:   ""
        !          2094:   "")
        !          2095: 
        !          2096: (define_insn ""
        !          2097:   [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,y,r,r,r,r,m")
        !          2098:        (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,m,r"))]
        !          2099:   "register_operand (operands[0], CCmode)
        !          2100:    || register_operand (operands[1], CCmode)"
        !          2101:   "@
        !          2102:    mcrf %0,%1
        !          2103:    mtcrf 128,%1
        !          2104:    rlinm %1,%1,%F0,0,31\;mtcrf %R0,%1\;rlinm %1,%1,%f0,0,31
        !          2105:    mfcr %0
        !          2106:    mfcr %0\;rlinm %0,%0,%f1,0,3
        !          2107:    ai %0,%1,0
        !          2108:    l%U1%X1 %0,%1
        !          2109:    st%U0%U1 %1,%0"
        !          2110:   [(set_attr "type" "*,*,*,compare,*,*,load,*")])
        !          2111: 
        !          2112: ;; For floating-point, we normally deal with the floating-point registers.
        !          2113: ;; The sole exception is that parameter passing can produce floating-point
        !          2114: ;; values in fixed-point registers.  Unless the value is a simple constant
        !          2115: ;; or already in memory, we deal with this by allocating memory and copying
        !          2116: ;; the value explicitly via that memory location.
        !          2117: (define_expand "movsf"
        !          2118:   [(set (match_operand:SF 0 "nonimmediate_operand" "")
        !          2119:        (match_operand:SF 1 "any_operand" ""))]
        !          2120:   ""
        !          2121:   "
        !          2122: {
        !          2123:   /* If we are called from reload, we might be getting a SUBREG of a hard
        !          2124:      reg.  So expand it.  */
        !          2125:   if (GET_CODE (operands[0]) == SUBREG
        !          2126:       && GET_CODE (SUBREG_REG (operands[0])) == REG
        !          2127:       && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER)
        !          2128:     operands[0] = alter_subreg (operands[0]);
        !          2129:   if (GET_CODE (operands[1]) == SUBREG
        !          2130:       && GET_CODE (SUBREG_REG (operands[1])) == REG
        !          2131:       && REGNO (SUBREG_REG (operands[1])) < FIRST_PSEUDO_REGISTER)
        !          2132:     operands[1] = alter_subreg (operands[1]);
        !          2133: 
        !          2134:   /* If we are being called from reload, it is possible that operands[1]
        !          2135:      is a hard non-fp register.  So handle those cases.  */
        !          2136:   if (reload_in_progress && GET_CODE (operands[1]) == REG
        !          2137:       && REGNO (operands[1]) < 32)
        !          2138:     {
        !          2139:       rtx stack_slot;
        !          2140: 
        !          2141:       /* Remember that we only see a pseudo here if it didn't get a hard
        !          2142:         register, so it is memory.  */
        !          2143:       if (GET_CODE (operands[0]) == MEM
        !          2144:          || (GET_CODE (operands[0]) == REG
        !          2145:              && (REGNO (operands[0]) < 32
        !          2146:                  || REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))
        !          2147:          || (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32))
        !          2148:        {
        !          2149:          emit_move_insn (operand_subword (operands[0], 0, 0, SFmode),
        !          2150:                          operand_subword (operands[1], 0, 0, SFmode));
        !          2151:          DONE;
        !          2152:        }
        !          2153: 
        !          2154:       stack_slot = gen_rtx (MEM, SFmode, plus_constant (stack_pointer_rtx, 4));
        !          2155:       emit_move_insn (stack_slot, operands[1]);
        !          2156:       emit_move_insn (operands[0], stack_slot);
        !          2157:       DONE;
        !          2158:     }
        !          2159: 
        !          2160:   if (GET_CODE (operands[0]) == MEM)
        !          2161:     operands[1] = force_reg (SFmode, operands[1]);
        !          2162: 
        !          2163:   if (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32)
        !          2164:     {
        !          2165:       rtx stack_slot;
        !          2166: 
        !          2167:       if (GET_CODE (operands[1]) == MEM
        !          2168: #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && ! defined(REAL_IS_NOT_DOUBLE)
        !          2169:          || GET_CODE (operands[1]) == CONST_DOUBLE
        !          2170: #endif
        !          2171:          || (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32)
        !          2172:          || (reload_in_progress && GET_CODE (operands[1]) == REG
        !          2173:              && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER))
        !          2174:        {
        !          2175:          emit_move_insn (operand_subword (operands[0], 0, 0, SFmode),
        !          2176:                          operand_subword (operands[1], 0, 0, SFmode));
        !          2177:          DONE;
        !          2178:        }
        !          2179: 
        !          2180:       if (reload_in_progress)
        !          2181:        stack_slot = gen_rtx (MEM, SFmode,
        !          2182:                              plus_constant (stack_pointer_rtx, 4));
        !          2183:       else
        !          2184:        stack_slot = assign_stack_temp (SFmode, 4, 0);
        !          2185:       emit_move_insn (stack_slot, operands[1]);
        !          2186:       emit_move_insn (operands[0], stack_slot);
        !          2187:       DONE;
        !          2188:     }
        !          2189: 
        !          2190:   if (CONSTANT_P (operands[1]))
        !          2191:     {
        !          2192:       operands[1] = force_const_mem (SFmode, operands[1]);
        !          2193:       if (! memory_address_p (SFmode, XEXP (operands[1], 0))
        !          2194:          && ! reload_in_progress)
        !          2195:        operands[1] = change_address (operands[1], SFmode,
        !          2196:                                      XEXP (operands[1], 0));
        !          2197:     }
        !          2198: }")
        !          2199: 
        !          2200: (define_insn ""
        !          2201:   [(set (match_operand:SF 0 "gen_reg_operand" "=r,r")
        !          2202:        (match_operand:SF 1 "mem_or_easy_const_operand" "G,m"))]
        !          2203:   "REGNO (operands[0]) <= 31"
        !          2204:   "@
        !          2205:    #
        !          2206:    l%U1%X1 %0,%1"
        !          2207:   [(set_attr "type" "*,load")])
        !          2208: 
        !          2209: (define_split
        !          2210:   [(set (match_operand:SF 0 "gen_reg_operand" "")
        !          2211:        (match_operand:SF 1 "easy_fp_constant" ""))]
        !          2212:   "reload_completed && REGNO (operands[0]) <= 31"
        !          2213:   [(set (match_dup 2) (match_dup 3))]
        !          2214:   "
        !          2215: { operands[2] = operand_subword (operands[0], 0, 0, SFmode);
        !          2216:   operands[3] = operand_subword (operands[1], 0, 0, SFmode); }")
        !          2217:   
        !          2218: (define_insn ""
        !          2219:   [(set (match_operand:SF 0 "fp_reg_or_mem_operand" "=f,f,m")
        !          2220:        (match_operand:SF 1 "input_operand" "f,m,f"))]
        !          2221:   "gen_reg_operand (operands[0], SFmode)
        !          2222:    || gen_reg_operand (operands[1], SFmode)"
        !          2223:   "@
        !          2224:    fmr %0,%1
        !          2225:    lfs%U1%X1 %0,%1
        !          2226:    frsp %1,%1\;stfs%U0%X0 %1,%0"
        !          2227:   [(set_attr "type" "fp,load,*")])
        !          2228: 
        !          2229: (define_expand "movdf"
        !          2230:   [(set (match_operand:DF 0 "nonimmediate_operand" "")
        !          2231:        (match_operand:DF 1 "any_operand" ""))]
        !          2232:   ""
        !          2233:   "
        !          2234: {
        !          2235:   /* If we are called from reload, we might be getting a SUBREG of a hard
        !          2236:      reg.  So expand it.  */
        !          2237:   if (GET_CODE (operands[0]) == SUBREG
        !          2238:       && GET_CODE (SUBREG_REG (operands[0])) == REG
        !          2239:       && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER)
        !          2240:     operands[0] = alter_subreg (operands[0]);
        !          2241:   if (GET_CODE (operands[1]) == SUBREG
        !          2242:       && GET_CODE (SUBREG_REG (operands[1])) == REG
        !          2243:       && REGNO (SUBREG_REG (operands[1])) < FIRST_PSEUDO_REGISTER)
        !          2244:     operands[1] = alter_subreg (operands[1]);
        !          2245: 
        !          2246:   /* If we are being called from reload, it is possible that operands[1]
        !          2247:      is a hard non-fp register.  So handle those cases.  */
        !          2248:   if (reload_in_progress && GET_CODE (operands[1]) == REG
        !          2249:       && REGNO (operands[1]) < 32)
        !          2250:     {
        !          2251:       rtx stack_slot;
        !          2252: 
        !          2253:       /* Remember that we only see a pseudo here if it didn't get a hard
        !          2254:         register, so it is memory.  */
        !          2255:       if (GET_CODE (operands[0]) == MEM
        !          2256:          || (GET_CODE (operands[0]) == REG
        !          2257:              && (REGNO (operands[0]) < 32
        !          2258:                  || REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)))
        !          2259:        {
        !          2260:          emit_move_insn (operand_subword (operands[0], 0, 0, DFmode),
        !          2261:                          operand_subword (operands[1], 0, 0, DFmode));
        !          2262:          emit_move_insn (operand_subword (operands[0], 1, 0, DFmode),
        !          2263:                          operand_subword (operands[1], 1, 0, DFmode));
        !          2264:          DONE;
        !          2265:        }
        !          2266: 
        !          2267:       stack_slot = gen_rtx (MEM, DFmode, plus_constant (stack_pointer_rtx, 8));
        !          2268:       emit_move_insn (stack_slot, operands[1]);
        !          2269:       emit_move_insn (operands[0], stack_slot);
        !          2270:       DONE;
        !          2271:     }
        !          2272: 
        !          2273:   if (GET_CODE (operands[0]) == MEM)
        !          2274:     {
        !          2275:       if (GET_CODE (operands[1]) == MEM)
        !          2276:        {
        !          2277:          emit_move_insn (operand_subword (operands[0], 0, 0, DFmode),
        !          2278:                          operand_subword (operands[1], 0, 0, DFmode));
        !          2279:          emit_move_insn (operand_subword (operands[0], 1, 0, DFmode),
        !          2280:                          operand_subword (operands[1], 1, 0, DFmode));
        !          2281:          DONE;
        !          2282:        }
        !          2283:       
        !          2284:       operands[1] = force_reg (DFmode, operands[1]);
        !          2285:     }
        !          2286: 
        !          2287:   if (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32)
        !          2288:     {
        !          2289:       rtx stack_slot;
        !          2290: 
        !          2291:       if (GET_CODE (operands[1]) == MEM
        !          2292: #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && ! defined(REAL_IS_NOT_DOUBLE)
        !          2293:          || GET_CODE (operands[1]) == CONST_DOUBLE
        !          2294: #endif
        !          2295:          || (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32)
        !          2296:          || (reload_in_progress && GET_CODE (operands[1]) == REG
        !          2297:              && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER))
        !          2298:        {
        !          2299:          emit_move_insn (operand_subword (operands[0], 0, 0, DFmode),
        !          2300:                          operand_subword (operands[1], 0, 0, DFmode));
        !          2301:          emit_move_insn (operand_subword (operands[0], 1, 0, DFmode),
        !          2302:                          operand_subword (operands[1], 1, 0, DFmode));
        !          2303:          DONE;
        !          2304:        }
        !          2305: 
        !          2306:       if (reload_in_progress)
        !          2307:        stack_slot = gen_rtx (MEM, DFmode,
        !          2308:                              plus_constant (stack_pointer_rtx, 8));
        !          2309:       else
        !          2310:        stack_slot = assign_stack_temp (DFmode, 8, 0);
        !          2311:       emit_move_insn (stack_slot, operands[1]);
        !          2312:       emit_move_insn (operands[0], stack_slot);
        !          2313:       DONE;
        !          2314:     }
        !          2315: 
        !          2316:   if (CONSTANT_P (operands[1]))
        !          2317:     {
        !          2318:       operands[1] = force_const_mem (DFmode, operands[1]);
        !          2319:       if (! memory_address_p (DFmode, XEXP (operands[1], 0))
        !          2320:          && ! reload_in_progress)
        !          2321:        operands[1] = change_address (operands[1], DFmode,
        !          2322:                                      XEXP (operands[1], 0));
        !          2323:     }
        !          2324: }")
        !          2325: 
        !          2326: (define_insn ""
        !          2327:   [(set (match_operand:DF 0 "gen_reg_operand" "=r,r")
        !          2328:        (match_operand:DF 1 "mem_or_easy_const_operand" "G,m"))]
        !          2329:   "REGNO (operands[0]) <= 31"
        !          2330:   "@
        !          2331:    #
        !          2332:    l %0,%1\;l %L0,%L1"
        !          2333:   [(set_attr "type" "*,load")])
        !          2334: 
        !          2335: (define_split
        !          2336:   [(set (match_operand:DF 0 "gen_reg_operand" "")
        !          2337:        (match_operand:DF 1 "easy_fp_constant" ""))]
        !          2338:   "reload_completed && REGNO (operands[0]) <= 31"
        !          2339:   [(set (match_dup 2) (match_dup 3))
        !          2340:    (set (match_dup 4) (match_dup 5))]
        !          2341:   "
        !          2342: { operands[2] = operand_subword (operands[0], 0, 0, DFmode);
        !          2343:   operands[3] = operand_subword (operands[1], 0, 0, DFmode);
        !          2344:   operands[4] = operand_subword (operands[0], 1, 0, DFmode);
        !          2345:   operands[5] = operand_subword (operands[1], 1, 0, DFmode); }")
        !          2346:   
        !          2347: (define_insn ""
        !          2348:   [(set (match_operand:DF 0 "fp_reg_or_mem_operand" "=f,f,m")
        !          2349:        (match_operand:DF 1 "fp_reg_or_mem_operand" "f,m,f"))]
        !          2350:   "gen_reg_operand (operands[0], DFmode)
        !          2351:    || gen_reg_operand (operands[1], DFmode)"
        !          2352:   "@
        !          2353:    fmr %0,%1
        !          2354:    lfd%U1%X1 %0,%1
        !          2355:    stfd%U0%X0 %1,%0"
        !          2356:   [(set_attr "type" "fp,load,*")])
        !          2357: 
        !          2358: ;; Next come the multi-word integer load and store and the load and store
        !          2359: ;; multiple insns.
        !          2360: (define_expand "movdi"
        !          2361:   [(set (match_operand:DI 0 "general_operand" "")
        !          2362:        (match_operand:DI 1 "general_operand" ""))]
        !          2363:   ""
        !          2364:   "
        !          2365: {
        !          2366:   if (GET_CODE (operands[0]) == MEM)
        !          2367:     operands[1] = force_reg (DImode, operands[1]);
        !          2368: 
        !          2369:   else if (GET_CODE (operands[1]) == CONST_DOUBLE
        !          2370:           || GET_CODE (operands[1]) == CONST_INT)
        !          2371:     {
        !          2372:       emit_move_insn (operand_subword (operands[0], 0, 0, DImode),
        !          2373:                      operand_subword (operands[1], 0, 0, DImode));
        !          2374:       emit_move_insn (operand_subword (operands[0], 1, 0, DImode),
        !          2375:                      operand_subword (operands[1], 1, 0, DImode));
        !          2376:       DONE;
        !          2377:     }
        !          2378: }")
        !          2379: 
        !          2380: (define_insn ""
        !          2381:   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m")
        !          2382:        (match_operand:DI 1 "input_operand" "r,m,r"))]
        !          2383:   "gen_reg_operand (operands[0], DImode)
        !          2384:    || gen_reg_operand (operands[1], DImode)"
        !          2385:   "*
        !          2386: {
        !          2387:   switch (which_alternative)
        !          2388:     {
        !          2389:     case 0:
        !          2390:       /* We normally copy the low-numbered register first.  However, if
        !          2391:         the first register operand 0 is the same as the second register of
        !          2392:         operand 1, we must copy in the opposite order.  */
        !          2393:       if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
        !          2394:        return \"oril %L0,%L1,0\;oril %0,%1,0\";
        !          2395:       else
        !          2396:        return \"oril %0,%1,0\;oril %L0,%L1,0\";
        !          2397:     case 1:
        !          2398:       /* If the low-address word is used in the address, we must load it
        !          2399:         last.  Otherwise, load it first.  Note that we cannot have
        !          2400:         auto-increment in that case since the address register is known to be
        !          2401:         dead.  */
        !          2402:       if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
        !          2403:                             operands [1], 0))
        !          2404:        return \"l %L0,%L1\;l %0,%1\";
        !          2405:       else
        !          2406:        return \"l%U1 %0,%1\;l %L0,%L1\";
        !          2407:     case 2:
        !          2408:       return \"st%U0 %1,%0\;st %L1,%L0\";
        !          2409:     }
        !          2410: }"
        !          2411:   [(set_attr "type" "*,load,*")])
        !          2412: 
        !          2413: ;; TImode is similar, except that we usually want to compute the address into
        !          2414: ;; a register and use lsi/stsi (the exception is during reload).  MQ is also
        !          2415: ;; clobbered in stsi, so we need a SCRATCH for it.
        !          2416: (define_expand "movti"
        !          2417:   [(parallel [(set (match_operand:TI 0 "general_operand" "")
        !          2418:                   (match_operand:TI 1 "general_operand" ""))
        !          2419:              (clobber (scratch:SI))])]
        !          2420:   ""
        !          2421:   "
        !          2422: {
        !          2423:   if (GET_CODE (operands[0]) == MEM)
        !          2424:     operands[1] = force_reg (TImode, operands[1]);
        !          2425: 
        !          2426:   if (GET_CODE (operands[0]) == MEM
        !          2427:       && GET_CODE (XEXP (operands[0], 0)) != REG
        !          2428:       && ! reload_in_progress)
        !          2429:     operands[0] = change_address (operands[0], TImode,
        !          2430:                                  copy_addr_to_reg (XEXP (operands[0], 0)));
        !          2431: 
        !          2432:   if (GET_CODE (operands[1]) == MEM
        !          2433:       && GET_CODE (XEXP (operands[1], 0)) != REG
        !          2434:       && ! reload_in_progress)
        !          2435:     operands[1] = change_address (operands[1], TImode,
        !          2436:                                  copy_addr_to_reg (XEXP (operands[1], 0)));
        !          2437: }")
        !          2438: 
        !          2439: ;; We say that MQ is clobbered in the last alternative because the first
        !          2440: ;; alternative would never get used otherwise since it would need a reload
        !          2441: ;; while the 2nd alternative would not.  We put memory cases first so they
        !          2442: ;; are preferred.  Otherwise, we'd try to reload the output instead of
        !          2443: ;; giving the SCRATCH mq.
        !          2444: (define_insn ""
        !          2445:   [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,m,r,r,r")
        !          2446:        (match_operand:TI 1 "reg_or_mem_operand" "r,r,r,Q,m"))
        !          2447:    (clobber (match_scratch:SI 2 "=q,q#X,X,X,X"))]
        !          2448:   "gen_reg_operand (operands[0], TImode)
        !          2449:    || gen_reg_operand (operands[1], TImode)"
        !          2450:   "*
        !          2451: {
        !          2452:   switch (which_alternative)
        !          2453:     {
        !          2454:     case 0:
        !          2455:       return \"stsi %1,%P0,16\";
        !          2456: 
        !          2457:     case 1:
        !          2458:       return \"st%U0 %1,%0\;st %L1,%L0\;st %Y1,%Y0\;st %Z1,%Z0\";
        !          2459: 
        !          2460:     case 2:
        !          2461:       /* Normally copy registers with lowest numbered register copied first.
        !          2462:         But copy in the other order if the first register of the output
        !          2463:         is the second, third, or fourth register in the input.  */
        !          2464:       if (REGNO (operands[0]) >= REGNO (operands[1]) + 1
        !          2465:          && REGNO (operands[0]) <= REGNO (operands[1]) + 3)
        !          2466:        return \"oril %Z0,%Z1,0\;oril %Y0,%Y1,0\;oril %L0,%L1,0\;oril %0,%1,0\";
        !          2467:       else
        !          2468:        return \"oril %0,%1,0\;oril %L0,%L1,0\;oril %Y0,%Y1,0\;oril %Z0,%Z1,0\";
        !          2469:     case 3:
        !          2470:       /* If the address is not used in the output, we can use lsi.  Otherwise,
        !          2471:         fall through to generating four loads.  */
        !          2472:       if (! reg_overlap_mentioned_p (operands[0], operands[1]))
        !          2473:        return \"lsi %0,%P1,16\";
        !          2474:       /* ... fall through ... */
        !          2475:     case 4:
        !          2476:       /* If the address register is the same as the register for the lowest-
        !          2477:         addressed word, load it last.  Similarly for the next two words.
        !          2478:         Otherwise load lowest address to highest.  */
        !          2479:       if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
        !          2480:                             operands[1], 0))
        !          2481:        return \"l %L0,%L1\;l %Y0,%Y1\;l %Z0,%Z1\;l %0,%1\";
        !          2482:       else if (refers_to_regno_p (REGNO (operands[0]) + 1,
        !          2483:                                  REGNO (operands[0]) + 2, operands[1], 0))
        !          2484:        return \"l %0,%1\;l %Y0,%Y1\;l %Z0,%Z1\;l %L0,%L1\";
        !          2485:       else if (refers_to_regno_p (REGNO (operands[0]) + 2,
        !          2486:                                  REGNO (operands[0]) + 3, operands[1], 0))
        !          2487:        return \"l %0,%1\;l %L0,%L1\;l %Z0,%Z1\;l %Y0,%Y1\";
        !          2488:       else
        !          2489:        return \"l%U1 %0,%1\;l %L0,%L1\;l %Y0,%Y1\;l %Z0,%Z1\";
        !          2490:     }
        !          2491: }"
        !          2492:   [(set_attr "type" "*,load,load,*,*")])
        !          2493: 
        !          2494: (define_expand "load_multiple"
        !          2495:   [(match_parallel 3 "" [(set (match_operand:SI 0 "" "")
        !          2496:                              (match_operand:SI 1 "" ""))
        !          2497:                         (use (match_operand:SI 2 "" ""))])]
        !          2498:   ""
        !          2499:   "
        !          2500: {
        !          2501:   int regno;
        !          2502:   int count;
        !          2503:   rtx from;
        !          2504:   int i;
        !          2505: 
        !          2506:   /* Support only loading a constant number of fixed-point registers from
        !          2507:      memory and only bother with this if more than two; the machine
        !          2508:      doesn't support more than eight.  */
        !          2509:   if (GET_CODE (operands[2]) != CONST_INT
        !          2510:       || INTVAL (operands[2]) <= 2
        !          2511:       || INTVAL (operands[2]) > 8
        !          2512:       || GET_CODE (operands[1]) != MEM
        !          2513:       || GET_CODE (operands[0]) != REG
        !          2514:       || REGNO (operands[0]) >= 32)
        !          2515:     FAIL;
        !          2516: 
        !          2517:   count = INTVAL (operands[2]);
        !          2518:   regno = REGNO (operands[0]);
        !          2519: 
        !          2520:   operands[3] = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (count));
        !          2521:   from = force_reg (SImode, XEXP (operands[1], 0));
        !          2522: 
        !          2523:   for (i = 0; i < count; i++)
        !          2524:     XVECEXP (operands[3], 0, i)
        !          2525:       = gen_rtx (SET, VOIDmode, gen_rtx (REG, SImode, regno + i),
        !          2526:                 gen_rtx (MEM, SImode, plus_constant (from, i * 4)));
        !          2527: }")
        !          2528: 
        !          2529: (define_insn ""
        !          2530:   [(match_parallel 0 "load_multiple_operation"
        !          2531:                   [(set (match_operand:SI 1 "gen_reg_operand" "=r")
        !          2532:                         (match_operand:SI 2 "indirect_operand" "Q"))])]
        !          2533:   ""
        !          2534:   "*
        !          2535: {
        !          2536:   /* We have to handle the case where the pseudo used to contain the address
        !          2537:      is assigned to one of the output registers.  In that case, do the
        !          2538:      lsi, but then load the correct value.  This is a bit of a mess, but is
        !          2539:      the best we can do.  */
        !          2540:   static char result[100];
        !          2541:   char newload[40];
        !          2542:   int i;
        !          2543: 
        !          2544:   strcpy (result, \"lsi %1,%P2,%N0\");
        !          2545:   for (i = 0; i < XVECLEN (operands[0], 0); i++)
        !          2546:     if (refers_to_regno_p (REGNO (operands[1]) + i,
        !          2547:                           REGNO (operands[1]) + i + 1, operands[2], 0))
        !          2548:       {
        !          2549:        sprintf (newload, \"\;l %d,%d(%d)\",
        !          2550:                 REGNO (operands[1]) + i,
        !          2551:                 i * 4, REGNO (XEXP (operands[2], 0)));
        !          2552:        strcat (result, newload);
        !          2553:       }
        !          2554: 
        !          2555:   return result;
        !          2556: }"
        !          2557:   [(set_attr "type" "load")])
        !          2558: 
        !          2559: (define_expand "store_multiple"
        !          2560:   [(match_parallel 3 "" [(set (match_operand:SI 0 "" "")
        !          2561:                              (match_operand:SI 1 "" ""))
        !          2562:                         (clobber (scratch:SI))
        !          2563:                         (use (match_operand:SI 2 "" ""))])]
        !          2564:   ""
        !          2565:   "
        !          2566: {
        !          2567:   int regno;
        !          2568:   int count;
        !          2569:   rtx to;
        !          2570:   int i;
        !          2571: 
        !          2572:   /* Support only storing a constant number of fixed-point registers to
        !          2573:      memory and only bother with this if more than two; the machine
        !          2574:      doesn't support more than eight.  */
        !          2575:   if (GET_CODE (operands[2]) != CONST_INT
        !          2576:       || INTVAL (operands[2]) <= 2
        !          2577:       || INTVAL (operands[2]) > 8
        !          2578:       || GET_CODE (operands[0]) != MEM
        !          2579:       || GET_CODE (operands[1]) != REG
        !          2580:       || REGNO (operands[1]) >= 32)
        !          2581:     FAIL;
        !          2582: 
        !          2583:   count = INTVAL (operands[2]);
        !          2584:   regno = REGNO (operands[1]);
        !          2585: 
        !          2586:   operands[3] = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (count + 1));
        !          2587:   to = force_reg (SImode, XEXP (operands[0], 0));
        !          2588: 
        !          2589:   XVECEXP (operands[3], 0, 0)
        !          2590:     = gen_rtx (SET, VOIDmode, gen_rtx (MEM, SImode, to), operands[1]);
        !          2591:   XVECEXP (operands[3], 0, 1) = gen_rtx (CLOBBER, VOIDmode,
        !          2592:                                                  gen_rtx (SCRATCH, SImode));
        !          2593: 
        !          2594:   for (i = 1; i < count; i++)
        !          2595:     XVECEXP (operands[3], 0, i + 1)
        !          2596:       = gen_rtx (SET, VOIDmode,
        !          2597:                 gen_rtx (MEM, SImode, plus_constant (to, i * 4)),
        !          2598:                 gen_rtx (REG, SImode, regno + i));
        !          2599: }")
        !          2600: 
        !          2601: (define_insn ""
        !          2602:   [(match_parallel 0 "store_multiple_operation"
        !          2603:                   [(set (match_operand:SI 1 "indirect_operand" "=Q")
        !          2604:                         (match_operand:SI 2 "gen_reg_operand" "r"))
        !          2605:                    (clobber (match_scratch:SI 3 "=q"))])]
        !          2606:   ""
        !          2607:   "stsi %2,%P1,%O0")
        !          2608: 
        !          2609: ;; Define insns that do load or store with update.  Some of these we can 
        !          2610: ;; get by using pre-decrement or pre-increment, but the hardware can also
        !          2611: ;; do cases where the increment is not the size of the object.
        !          2612: ;;
        !          2613: ;; In all these cases, we use operands 0 and 1 for the register being
        !          2614: ;; incremented because those are the operands that local-alloc will
        !          2615: ;; tie and these are the pair most likely to be tieable (and the ones
        !          2616: ;; that will benefit the most).
        !          2617: 
        !          2618: (define_insn ""
        !          2619:   [(set (match_operand:SI 3 "gen_reg_operand" "=r,r")
        !          2620:        (mem:SI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2621:                         (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
        !          2622:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2623:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2624:   ""
        !          2625:   "@
        !          2626:    lux %3,%1,%2
        !          2627:    lu %3,%2(%1)"
        !          2628:   [(set_attr "type" "load,load")])
        !          2629: 
        !          2630: (define_insn ""
        !          2631:   [(set (mem:SI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2632:                         (match_operand:SI 2 "reg_or_short_operand" "r,I")))
        !          2633:        (match_operand:SI 3 "gen_reg_operand" "r,r"))
        !          2634:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2635:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2636:   ""
        !          2637:   "@
        !          2638:    stux %3,%1,%2
        !          2639:    stu %3,%2(%1)")
        !          2640: 
        !          2641: (define_insn ""
        !          2642:   [(set (match_operand:HI 3 "gen_reg_operand" "=r,r")
        !          2643:        (mem:HI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2644:                         (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
        !          2645:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2646:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2647:   ""
        !          2648:   "@
        !          2649:    lhzux %3,%1,%2
        !          2650:    lhzu %3,%2(%1)"
        !          2651:   [(set_attr "type" "load,load")])
        !          2652: 
        !          2653: (define_insn ""
        !          2654:   [(set (match_operand:SI 3 "gen_reg_operand" "=r,r")
        !          2655:        (zero_extend:SI
        !          2656:         (mem:HI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2657:                          (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
        !          2658:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2659:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2660:   ""
        !          2661:   "@
        !          2662:    lhzux %3,%1,%2
        !          2663:    lhzu %3,%2(%1)"
        !          2664:   [(set_attr "type" "load,load")])
        !          2665: 
        !          2666: (define_insn ""
        !          2667:   [(set (match_operand:SI 3 "gen_reg_operand" "=r,r")
        !          2668:        (sign_extend:SI
        !          2669:         (mem:HI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2670:                          (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
        !          2671:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2672:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2673:   ""
        !          2674:   "@
        !          2675:    lhaux %3,%1,%2
        !          2676:    lhau %3,%2(%1)"
        !          2677:   [(set_attr "type" "load,load")])
        !          2678: 
        !          2679: (define_insn ""
        !          2680:   [(set (mem:HI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2681:                         (match_operand:SI 2 "reg_or_short_operand" "r,I")))
        !          2682:        (match_operand:HI 3 "gen_reg_operand" "r,r"))
        !          2683:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2684:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2685:   ""
        !          2686:   "@
        !          2687:    sthux %3,%1,%2
        !          2688:    sthu %3,%2(%1)"
        !          2689:   [(set_attr "type" "load,load")])
        !          2690: 
        !          2691: (define_insn ""
        !          2692:   [(set (match_operand:QI 3 "gen_reg_operand" "=r,r")
        !          2693:        (mem:QI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2694:                         (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
        !          2695:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2696:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2697:   ""
        !          2698:   "@
        !          2699:    lbzux %3,%1,%2
        !          2700:    lbzu %3,%2(%1)"
        !          2701:   [(set_attr "type" "load,load")])
        !          2702: 
        !          2703: (define_insn ""
        !          2704:   [(set (match_operand:SI 3 "gen_reg_operand" "=r,r")
        !          2705:        (zero_extend:SI
        !          2706:         (mem:QI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2707:                          (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
        !          2708:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2709:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2710:   ""
        !          2711:   "@
        !          2712:    lbzux %3,%1,%2
        !          2713:    lbzu %3,%2(%1)"
        !          2714:   [(set_attr "type" "load,load")])
        !          2715: 
        !          2716: (define_insn ""
        !          2717:   [(set (mem:QI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2718:                         (match_operand:SI 2 "reg_or_short_operand" "r,I")))
        !          2719:        (match_operand:QI 3 "gen_reg_operand" "r,r"))
        !          2720:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2721:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2722:   ""
        !          2723:   "@
        !          2724:    stbux %3,%1,%2
        !          2725:    stbu %3,%2(%1)")
        !          2726: 
        !          2727: (define_insn ""
        !          2728:   [(set (match_operand:SF 3 "gen_reg_operand" "=f,f")
        !          2729:        (mem:SI (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2730:                         (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
        !          2731:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2732:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2733:   ""
        !          2734:   "@
        !          2735:    lfsux %3,%1,%2
        !          2736:    lfsu %3,%2(%1)"
        !          2737:   [(set_attr "type" "load,load")])
        !          2738: 
        !          2739: (define_insn ""
        !          2740:   [(set (mem:SF (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2741:                         (match_operand:SI 2 "reg_or_short_operand" "r,I")))
        !          2742:        (match_operand:SF 3 "gen_reg_operand" "f,f"))
        !          2743:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2744:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2745:   ""
        !          2746:   "@
        !          2747:    frsp %3,%3\;stfsux %3,%1,%2
        !          2748:    frsp %3,%3\;stfsu %3,%2(%1)")
        !          2749: 
        !          2750: (define_insn ""
        !          2751:   [(set (match_operand:DF 3 "gen_reg_operand" "=f,f")
        !          2752:        (mem:DF (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2753:                         (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
        !          2754:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2755:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2756:   ""
        !          2757:   "@
        !          2758:    lfdux %3,%1,%2
        !          2759:    lfdu %3,%2(%1)"
        !          2760:   [(set_attr "type" "load,load")])
        !          2761: 
        !          2762: (define_insn ""
        !          2763:   [(set (mem:DF (plus:SI (match_operand:SI 1 "gen_reg_operand" "0,0")
        !          2764:                         (match_operand:SI 2 "reg_or_short_operand" "r,I")))
        !          2765:        (match_operand:DF 3 "gen_reg_operand" "f,f"))
        !          2766:    (set (match_operand:SI 0 "gen_reg_operand" "=b,b")
        !          2767:        (plus:SI (match_dup 1) (match_dup 2)))]
        !          2768:   ""
        !          2769:   "@
        !          2770:    stfdux %3,%1,%2
        !          2771:    stfdu %3,%2(%1)")
        !          2772: 
        !          2773: ;; Next come insns related to the calling sequence.
        !          2774: ;;
        !          2775: ;; First, an insn to allocate new stack space for dynamic use (e.g., alloca).
        !          2776: ;; We move the back-chain and decremement the stack pointer.  This is slightly
        !          2777: ;; less efficient than it needs to be for long constants, but that case
        !          2778: ;; should be rare.
        !          2779: 
        !          2780: (define_expand "allocate_stack"
        !          2781:   [(set (reg:SI 1)
        !          2782:        (minus:SI (reg:SI 1) (match_operand:SI 0 "reg_or_cint_operand" "")))]
        !          2783:   ""
        !          2784:   "
        !          2785: { rtx chain = gen_reg_rtx (SImode);
        !          2786:   rtx stack_bot = gen_rtx (MEM, Pmode, stack_pointer_rtx);
        !          2787: 
        !          2788:   emit_move_insn (chain, stack_bot);
        !          2789:   emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, operands[0]));
        !          2790:   emit_move_insn (stack_bot, chain);
        !          2791:   DONE;
        !          2792: }")
        !          2793: 
        !          2794: ;; A function pointer is a pointer to a data area whose first word contains
        !          2795: ;; the actual address of the function, whose second word contains a pointer
        !          2796: ;; to its TOC, and whose third word contains a value to place in the static
        !          2797: ;; chain register (r11).  Note that if we load the static chain, our 
        !          2798: ;; "trampoline" need not have any executable code.
        !          2799: ;;
        !          2800: ;; operands[0] is an SImode pseudo in which we place the address of the
        !          2801: ;;            function.
        !          2802: ;; operands[1] is the address of data area of the function to call
        !          2803: 
        !          2804: (define_expand "call_via_ptr"
        !          2805:   [(set (match_operand:SI 0 "gen_reg_operand" "")
        !          2806:        (mem:SI (match_operand:SI 1 "gen_reg_operand" "")))
        !          2807:    (set (mem:SI (plus:SI (reg:SI 1) (const_int 20)))
        !          2808:        (reg:SI 2))
        !          2809:    (set (reg:SI 2)
        !          2810:        (mem:SI (plus:SI (match_dup 1)
        !          2811:                         (const_int 4))))
        !          2812:    (set (reg:SI 11)
        !          2813:        (mem:SI (plus:SI (match_dup 1)
        !          2814:                         (const_int 8))))
        !          2815:    (use (reg:SI 2))
        !          2816:    (use (reg:SI 11))]
        !          2817:   ""
        !          2818:   "")
        !          2819: 
        !          2820: (define_expand "call"
        !          2821:   [(parallel [(call (mem:SI (match_operand:SI 0 "address_operand" ""))
        !          2822:                    (match_operand 1 "" ""))
        !          2823:              (clobber (scratch:SI))])]
        !          2824:   ""
        !          2825:   "
        !          2826: {
        !          2827:   if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != CONST_INT)
        !          2828:     abort ();
        !          2829: 
        !          2830:   operands[0] = XEXP (operands[0], 0);
        !          2831:   if (GET_CODE (operands[0]) != SYMBOL_REF)
        !          2832:     {
        !          2833:       rtx temp = gen_reg_rtx (SImode);
        !          2834: 
        !          2835:       emit_insn (gen_call_via_ptr (temp, force_reg (SImode, operands[0])));
        !          2836:       operands[0] = temp;
        !          2837:     }
        !          2838: }")
        !          2839: 
        !          2840: (define_expand "call_value"
        !          2841:   [(parallel [(set (match_operand 0 "" "")
        !          2842:                   (call (mem:SI (match_operand:SI 1 "address_operand" ""))
        !          2843:                         (match_operand 2 "" "")))
        !          2844:              (clobber (scratch:SI))])]
        !          2845:   ""
        !          2846:   "
        !          2847: {
        !          2848:   if (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != CONST_INT)
        !          2849:     abort ();
        !          2850: 
        !          2851:   operands[1] = XEXP (operands[1], 0);
        !          2852:   if (GET_CODE (operands[1]) != SYMBOL_REF)
        !          2853:     {
        !          2854:       rtx temp = gen_reg_rtx (SImode);
        !          2855: 
        !          2856:       emit_insn (gen_call_via_ptr (temp, force_reg (SImode, operands[1])));
        !          2857:       operands[1] = temp;
        !          2858:     }
        !          2859: }")
        !          2860: 
        !          2861: (define_insn ""
        !          2862:   [(call (mem:SI (match_operand:SI 0 "call_operand" "l,s"))
        !          2863:         (match_operand 1 "" "fg,fg"))
        !          2864:    (clobber (match_scratch:SI 3 "=l,l"))]
        !          2865:   ""
        !          2866:   "@
        !          2867:    brl\;l 2,20(1)
        !          2868:    bl %z0\;cror 15,15,15")
        !          2869: 
        !          2870: (define_insn ""
        !          2871:   [(set (match_operand 0 "" "fg,fg")
        !          2872:        (call (mem:SI (match_operand:SI 1 "call_operand" "l,s"))
        !          2873:              (match_operand 2 "" "fg,fg")))
        !          2874:    (clobber (match_scratch:SI 3 "=l,l"))]
        !          2875:   ""
        !          2876:   "@
        !          2877:    brl\;l 2,20(1)
        !          2878:    bl %z1\;cror 15,15,15")
        !          2879: 
        !          2880: ;; Compare insns are next.  Note that the RS/6000 has two types of compares,
        !          2881: ;; signed & unsigned, and one type of branch.  
        !          2882: ;;
        !          2883: ;; Start with the DEFINE_EXPANDs to generate the rtl for compares, scc
        !          2884: ;; insns, and branches.  We store the operands of compares until we see
        !          2885: ;; how it is used.
        !          2886: (define_expand "cmpsi"
        !          2887:   [(set (cc0)
        !          2888:         (compare (match_operand:SI 0 "gen_reg_operand" "")
        !          2889:                 (match_operand:SI 1 "reg_or_short_operand" "")))]
        !          2890:   ""
        !          2891:   "
        !          2892: {
        !          2893:   /* Take care of the possibility that operands[1] might be negative but
        !          2894:      this might be a logical operation.  That insn doesn't exist.  */
        !          2895:   if (GET_CODE (operands[1]) == CONST_INT
        !          2896:       && INTVAL (operands[1]) < 0)
        !          2897:     operands[1] = force_reg (SImode, operands[1]);
        !          2898: 
        !          2899:   rs6000_compare_op0 = operands[0];
        !          2900:   rs6000_compare_op1 = operands[1];
        !          2901:   rs6000_compare_fp_p = 0;
        !          2902:   DONE;
        !          2903: }")
        !          2904: 
        !          2905: (define_expand "cmpsf"
        !          2906:   [(set (cc0) (compare (match_operand:SF 0 "gen_reg_operand" "")
        !          2907:                       (match_operand:SF 1 "gen_reg_operand" "")))]
        !          2908:   ""
        !          2909:   "
        !          2910: {
        !          2911:   rs6000_compare_op0 = operands[0];
        !          2912:   rs6000_compare_op1 = operands[1];
        !          2913:   rs6000_compare_fp_p = 1;
        !          2914:   DONE;
        !          2915: }")
        !          2916: 
        !          2917: (define_expand "cmpdf"
        !          2918:   [(set (cc0) (compare (match_operand:DF 0 "gen_reg_operand" "")
        !          2919:                       (match_operand:DF 1 "gen_reg_operand" "")))]
        !          2920:   ""
        !          2921:   "
        !          2922: {
        !          2923:   rs6000_compare_op0 = operands[0];
        !          2924:   rs6000_compare_op1 = operands[1];
        !          2925:   rs6000_compare_fp_p = 1;
        !          2926:   DONE;
        !          2927: }")
        !          2928: 
        !          2929: (define_expand "beq"
        !          2930:   [(set (match_dup 2) (match_dup 1))
        !          2931:    (set (pc)
        !          2932:        (if_then_else (eq (match_dup 2)
        !          2933:                          (const_int 0))
        !          2934:                      (label_ref (match_operand 0 "" ""))
        !          2935:                      (pc)))]
        !          2936:   ""
        !          2937:   "
        !          2938: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          2939:   operands[1] = gen_rtx (COMPARE, mode,
        !          2940:                         rs6000_compare_op0, rs6000_compare_op1);
        !          2941:   operands[2] = gen_reg_rtx (mode);
        !          2942: }")
        !          2943: 
        !          2944: (define_expand "bne"
        !          2945:   [(set (match_dup 2) (match_dup 1))
        !          2946:    (set (pc)
        !          2947:        (if_then_else (ne (match_dup 2)
        !          2948:                          (const_int 0))
        !          2949:                      (label_ref (match_operand 0 "" ""))
        !          2950:                      (pc)))]
        !          2951:   ""
        !          2952:   "
        !          2953: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          2954:   operands[1] = gen_rtx (COMPARE, mode,
        !          2955:                         rs6000_compare_op0, rs6000_compare_op1);
        !          2956:   operands[2] = gen_reg_rtx (mode);
        !          2957: }")
        !          2958: 
        !          2959: (define_expand "blt"
        !          2960:   [(set (match_dup 2) (match_dup 1))
        !          2961:    (set (pc)
        !          2962:        (if_then_else (lt (match_dup 2)
        !          2963:                          (const_int 0))
        !          2964:                      (label_ref (match_operand 0 "" ""))
        !          2965:                      (pc)))]
        !          2966:   ""
        !          2967:   "
        !          2968: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          2969:   operands[1] = gen_rtx (COMPARE, mode,
        !          2970:                         rs6000_compare_op0, rs6000_compare_op1);
        !          2971:   operands[2] = gen_reg_rtx (mode);
        !          2972: }")
        !          2973: 
        !          2974: (define_expand "bgt"
        !          2975:   [(set (match_dup 2) (match_dup 1))
        !          2976:    (set (pc)
        !          2977:        (if_then_else (gt (match_dup 2)
        !          2978:                          (const_int 0))
        !          2979:                      (label_ref (match_operand 0 "" ""))
        !          2980:                      (pc)))]
        !          2981:   ""
        !          2982:   "
        !          2983: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          2984:   operands[1] = gen_rtx (COMPARE, mode,
        !          2985:                         rs6000_compare_op0, rs6000_compare_op1);
        !          2986:   operands[2] = gen_reg_rtx (mode);
        !          2987: }")
        !          2988: 
        !          2989: (define_expand "ble"
        !          2990:   [(set (match_dup 2) (match_dup 1))
        !          2991:    (set (pc)
        !          2992:        (if_then_else (le (match_dup 2)
        !          2993:                          (const_int 0))
        !          2994:                      (label_ref (match_operand 0 "" ""))
        !          2995:                      (pc)))]
        !          2996:   ""
        !          2997:   "
        !          2998: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          2999:   operands[1] = gen_rtx (COMPARE, mode,
        !          3000:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3001:   operands[2] = gen_reg_rtx (mode);
        !          3002: }")
        !          3003: 
        !          3004: (define_expand "bge"
        !          3005:   [(set (match_dup 2) (match_dup 1))
        !          3006:    (set (pc)
        !          3007:        (if_then_else (ge (match_dup 2)
        !          3008:                          (const_int 0))
        !          3009:                      (label_ref (match_operand 0 "" ""))
        !          3010:                      (pc)))]
        !          3011:   ""
        !          3012:   "
        !          3013: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          3014:   operands[1] = gen_rtx (COMPARE, mode,
        !          3015:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3016:   operands[2] = gen_reg_rtx (mode);
        !          3017: }")
        !          3018: 
        !          3019: (define_expand "bgtu"
        !          3020:   [(set (match_dup 2) (match_dup 1))
        !          3021:    (set (pc)
        !          3022:        (if_then_else (gtu (match_dup 2)
        !          3023:                           (const_int 0))
        !          3024:                      (label_ref (match_operand 0 "" ""))
        !          3025:                      (pc)))]
        !          3026:   ""
        !          3027:   "
        !          3028: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3029:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3030:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3031: }")
        !          3032: 
        !          3033: (define_expand "bltu"
        !          3034:   [(set (match_dup 2) (match_dup 1))
        !          3035:    (set (pc)
        !          3036:        (if_then_else (ltu (match_dup 2)
        !          3037:                           (const_int 0))
        !          3038:                      (label_ref (match_operand 0 "" ""))
        !          3039:                      (pc)))]
        !          3040:   ""
        !          3041:   "
        !          3042: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3043:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3044:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3045: }")
        !          3046: 
        !          3047: (define_expand "bgeu"
        !          3048:   [(set (match_dup 2) (match_dup 1))
        !          3049:    (set (pc)
        !          3050:        (if_then_else (geu (match_dup 2)
        !          3051:                           (const_int 0))
        !          3052:                      (label_ref (match_operand 0 "" ""))
        !          3053:                      (pc)))]
        !          3054:   ""
        !          3055:   "
        !          3056: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3057:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3058:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3059: }")
        !          3060: 
        !          3061: (define_expand "bleu"
        !          3062:   [(set (match_dup 2) (match_dup 1))
        !          3063:    (set (pc)
        !          3064:        (if_then_else (leu (match_dup 2)
        !          3065:                           (const_int 0))
        !          3066:                      (label_ref (match_operand 0 "" ""))
        !          3067:                      (pc)))]
        !          3068:   ""
        !          3069:   "
        !          3070: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3071:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3072:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3073: }")
        !          3074: 
        !          3075: ;; For SNE, we would prefer that the xor/abs sequence be used for integers.
        !          3076: ;; For SEQ, likewise, except that comparisons with zero should be done
        !          3077: ;; with an scc insns.  However, due to the order that combine see the
        !          3078: ;; resulting insns, we must, in fact, allow SEQ for integers.  Fail in
        !          3079: ;; the cases we don't want to handle.
        !          3080: (define_expand "seq"
        !          3081:   [(set (match_dup 2) (match_dup 1))
        !          3082:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3083:        (eq:SI (match_dup 2) (const_int 0)))]
        !          3084:   ""
        !          3085:   "
        !          3086: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          3087:   operands[1] = gen_rtx (COMPARE, mode,
        !          3088:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3089:   operands[2] = gen_reg_rtx (mode);
        !          3090: }")
        !          3091: 
        !          3092: (define_expand "sne"
        !          3093:   [(set (match_dup 2) (match_dup 1))
        !          3094:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3095:        (ne:SI (match_dup 2) (const_int 0)))]
        !          3096:   ""
        !          3097:   "
        !          3098: { if (! rs6000_compare_fp_p)
        !          3099:     FAIL;
        !          3100: 
        !          3101:   operands[1] = gen_rtx (COMPARE, CCFPmode,
        !          3102:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3103:   operands[2] = gen_reg_rtx (CCFPmode);
        !          3104: }")
        !          3105: 
        !          3106: ;; A > 0 is best done using the portable sequence, so fail in that case.
        !          3107: (define_expand "sgt"
        !          3108:   [(set (match_dup 2) (match_dup 1))
        !          3109:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3110:        (gt:SI (match_dup 2) (const_int 0)))]
        !          3111:   ""
        !          3112:   "
        !          3113: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          3114: 
        !          3115:   if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
        !          3116:     FAIL;
        !          3117: 
        !          3118:   operands[1] = gen_rtx (COMPARE, mode,
        !          3119:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3120:   operands[2] = gen_reg_rtx (mode);
        !          3121: }")
        !          3122: 
        !          3123: ;; A < 0 is best done in the portable way for A an integer.
        !          3124: (define_expand "slt"
        !          3125:   [(set (match_dup 2) (match_dup 1))
        !          3126:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3127:        (lt:SI (match_dup 2) (const_int 0)))]
        !          3128:   ""
        !          3129:   "
        !          3130: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          3131: 
        !          3132:   if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
        !          3133:     FAIL;
        !          3134: 
        !          3135:   operands[1] = gen_rtx (COMPARE, mode,
        !          3136:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3137:   operands[2] = gen_reg_rtx (mode);
        !          3138: }")
        !          3139: 
        !          3140: (define_expand "sge"
        !          3141:   [(set (match_dup 2) (match_dup 1))
        !          3142:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3143:        (ge:SI (match_dup 2) (const_int 0)))]
        !          3144:   ""
        !          3145:   "
        !          3146: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          3147:   operands[1] = gen_rtx (COMPARE, mode,
        !          3148:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3149:   operands[2] = gen_reg_rtx (mode);
        !          3150: }")
        !          3151: 
        !          3152: ;; A <= 0 is best done the portable way for A an integer.
        !          3153: (define_expand "sle"
        !          3154:   [(set (match_dup 2) (match_dup 1))
        !          3155:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3156:        (le:SI (match_dup 2) (const_int 0)))]
        !          3157:   ""
        !          3158:   "
        !          3159: { enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
        !          3160: 
        !          3161:   if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
        !          3162:     FAIL;
        !          3163: 
        !          3164:   operands[1] = gen_rtx (COMPARE, mode,
        !          3165:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3166:   operands[2] = gen_reg_rtx (mode);
        !          3167: }")
        !          3168: 
        !          3169: (define_expand "sgtu"
        !          3170:   [(set (match_dup 2) (match_dup 1))
        !          3171:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3172:        (gtu:SI (match_dup 2) (const_int 0)))]
        !          3173:   ""
        !          3174:   "
        !          3175: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3176:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3177:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3178: }")
        !          3179: 
        !          3180: (define_expand "sltu"
        !          3181:   [(set (match_dup 2) (match_dup 1))
        !          3182:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3183:        (ltu:SI (match_dup 2) (const_int 0)))]
        !          3184:   ""
        !          3185:   "
        !          3186: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3187:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3188:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3189: }")
        !          3190: 
        !          3191: (define_expand "sgeu"
        !          3192:   [(set (match_dup 2) (match_dup 1))
        !          3193:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3194:        (geu:SI (match_dup 2) (const_int 0)))]
        !          3195:   ""
        !          3196:   "
        !          3197: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3198:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3199:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3200: }")
        !          3201: 
        !          3202: (define_expand "sleu"
        !          3203:   [(set (match_dup 2) (match_dup 1))
        !          3204:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3205:        (leu:SI (match_dup 2) (const_int 0)))]
        !          3206:   ""
        !          3207:   "
        !          3208: { operands[1] = gen_rtx (COMPARE, CCUNSmode,
        !          3209:                         rs6000_compare_op0, rs6000_compare_op1);
        !          3210:   operands[2] = gen_reg_rtx (CCUNSmode);
        !          3211: }")
        !          3212: 
        !          3213: ;; Here are the actual compare insns.
        !          3214: (define_insn ""
        !          3215:   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
        !          3216:        (compare:CC (match_operand:SI 1 "gen_reg_operand" "r")
        !          3217:                    (match_operand:SI 2 "reg_or_short_operand" "rI")))]
        !          3218:   ""
        !          3219:   "cmp%I2 %0,%1,%2"
        !          3220:   [(set_attr "type" "compare")])
        !          3221: 
        !          3222: (define_insn ""
        !          3223:   [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
        !          3224:        (compare:CCUNS (match_operand:SI 1 "gen_reg_operand" "r")
        !          3225:                       (match_operand:SI 2 "reg_or_u_short_operand" "rI")))]
        !          3226:   ""
        !          3227:   "cmpl%I2 %0,%1,%W2"
        !          3228:   [(set_attr "type" "compare")])
        !          3229: 
        !          3230: ;; The following two insns don't exist as single insns, but if we provide
        !          3231: ;; them, we can swap an add and compare, which will enable us to overlap more
        !          3232: ;; of the required delay between a compare and branch.  We generate code for
        !          3233: ;; them by splitting.
        !          3234: 
        !          3235: (define_insn ""
        !          3236:   [(set (match_operand:CC 3 "cc_reg_operand" "=y")
        !          3237:        (compare:CC (match_operand:SI 1 "gen_reg_operand" "r")
        !          3238:                    (match_operand:SI 2 "short_cint_operand" "i")))
        !          3239:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3240:        (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "i")))]
        !          3241:   ""
        !          3242:   "#")
        !          3243:    
        !          3244: (define_insn ""
        !          3245:   [(set (match_operand:CCUNS 3 "cc_reg_operand" "=y")
        !          3246:        (compare:CCUNS (match_operand:SI 1 "gen_reg_operand" "r")
        !          3247:                       (match_operand:SI 2 "u_short_cint_operand" "i")))
        !          3248:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3249:        (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "i")))]
        !          3250:   ""
        !          3251:   "#")
        !          3252:    
        !          3253: (define_split
        !          3254:   [(set (match_operand:CC 3 "cc_reg_operand" "")
        !          3255:        (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
        !          3256:                    (match_operand:SI 2 "short_cint_operand" "")))
        !          3257:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3258:        (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "")))]
        !          3259:   ""
        !          3260:   [(set (match_dup 3) (compare:CC (match_dup 1) (match_dup 2)))
        !          3261:    (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 4)))])
        !          3262: 
        !          3263: (define_split
        !          3264:   [(set (match_operand:CCUNS 3 "cc_reg_operand" "")
        !          3265:        (compare:CCUNS (match_operand:SI 1 "gen_reg_operand" "")
        !          3266:                       (match_operand:SI 2 "u_short_cint_operand" "")))
        !          3267:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          3268:        (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "")))]
        !          3269:   ""
        !          3270:   [(set (match_dup 3) (compare:CCUNS (match_dup 1) (match_dup 2)))
        !          3271:    (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 4)))])
        !          3272: 
        !          3273: (define_insn ""
        !          3274:   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
        !          3275:        (compare:CCFP (match_operand:SF 1 "gen_reg_operand" "f")
        !          3276:                      (match_operand:SF 2 "gen_reg_operand" "f")))]
        !          3277:   ""
        !          3278:   "fcmpu %0,%1,%2"
        !          3279:   [(set_attr "type" "fpcompare")])
        !          3280: 
        !          3281: (define_insn ""
        !          3282:   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
        !          3283:        (compare:CCFP (match_operand:DF 1 "gen_reg_operand" "f")
        !          3284:                      (match_operand:DF 2 "gen_reg_operand" "f")))]
        !          3285:   ""
        !          3286:   "fcmpu %0,%1,%2"
        !          3287:   [(set_attr "type" "fpcompare")])
        !          3288: 
        !          3289: ;; Now we have the scc insns.  We can do some combinations because of the
        !          3290: ;; way the machine works.
        !          3291: ;;
        !          3292: ;; Note that this is probably faster if we can put an insn between the
        !          3293: ;; mfcr and rlinm, but this is tricky.  Let's leave it for now.
        !          3294: (define_insn ""
        !          3295:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3296:        (match_operator:SI 1 "scc_comparison_operator"
        !          3297:                           [(match_operand 2 "cc_reg_operand" "y")
        !          3298:                            (const_int 0)]))]
        !          3299:   ""
        !          3300:   "%D1mfcr %0\;rlinm %0,%0,%J1,31,31")
        !          3301: 
        !          3302: (define_insn ""
        !          3303:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          3304:        (compare:CC (match_operator:SI 1 "scc_comparison_operator"
        !          3305:                                       [(match_operand 2 "cc_reg_operand" "y")
        !          3306:                                        (const_int 0)])
        !          3307:                    (const_int 0)))
        !          3308:    (set (match_operand:SI 3 "gen_reg_operand" "=r")
        !          3309:        (match_op_dup 1 [(match_dup 2) (const_int 0)]))]
        !          3310:   ""
        !          3311:   "%D1mfcr %3\;rlinm. %3,%3,%J1,30,31"
        !          3312:   [(set_attr "type" "delayed_compare")])
        !          3313: 
        !          3314: (define_insn ""
        !          3315:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3316:        (ashift:SI (match_operator:SI 1 "scc_comparison_operator"
        !          3317:                                      [(match_operand 2 "cc_reg_operand" "y")
        !          3318:                                       (const_int 0)])
        !          3319:                   (match_operand:SI 3 "const_int_operand" "n")))]
        !          3320:   ""
        !          3321:   "*
        !          3322: {
        !          3323:   int is_bit = ccr_bit (operands[1], 1);
        !          3324:   int put_bit = 31 - (INTVAL (operands[3]) & 31);
        !          3325:   int count;
        !          3326: 
        !          3327:   if (is_bit >= put_bit)
        !          3328:     count = is_bit - put_bit;
        !          3329:   else
        !          3330:     count = 32 - (put_bit - is_bit);
        !          3331: 
        !          3332:   operands[4] = gen_rtx (CONST_INT, VOIDmode, count);
        !          3333:   operands[5] = gen_rtx (CONST_INT, VOIDmode, put_bit);
        !          3334: 
        !          3335:   return \"%D1mfcr %0\;rlinm %0,%0,%4,%5,%5\";
        !          3336: }")
        !          3337: 
        !          3338: (define_insn ""
        !          3339:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          3340:        (compare:CC
        !          3341:         (ashift:SI (match_operator:SI 1 "scc_comparison_operator"
        !          3342:                                       [(match_operand 2 "cc_reg_operand" "y")
        !          3343:                                        (const_int 0)])
        !          3344:                    (match_operand:SI 3 "const_int_operand" "n"))
        !          3345:         (const_int 0)))
        !          3346:    (set (match_operand:SI 4 "gen_reg_operand" "=r")
        !          3347:        (ashift:SI (match_op_dup 1 [(match_dup 2) (const_int 0)])
        !          3348:                   (match_dup 3)))]
        !          3349:   ""
        !          3350:   "*
        !          3351: {
        !          3352:   int is_bit = ccr_bit (operands[1], 1);
        !          3353:   int put_bit = 31 - (INTVAL (operands[3]) & 31);
        !          3354:   int count;
        !          3355: 
        !          3356:   if (is_bit >= put_bit)
        !          3357:     count = is_bit - put_bit;
        !          3358:   else
        !          3359:     count = 32 - (put_bit - is_bit);
        !          3360: 
        !          3361:   operands[5] = gen_rtx (CONST_INT, VOIDmode, count);
        !          3362:   operands[6] = gen_rtx (CONST_INT, VOIDmode, put_bit);
        !          3363: 
        !          3364:   return \"%D1mfcr %4\;rlinm. %4,%4,%5,%6,%6\";
        !          3365: }"
        !          3366:   [(set_attr "type" "delayed_compare")])
        !          3367: 
        !          3368: ;; There are some scc insns that can be done directly, without a compare.
        !          3369: ;; These are faster because they don't involve the communications between
        !          3370: ;; the FXU and branch units.   In fact, we will be replacing all of the
        !          3371: ;; integer scc insns here or in the portable methods in emit_store_flag.
        !          3372: ;;
        !          3373: ;; Also support (neg (scc ..)) since that construct is used to replace
        !          3374: ;; branches, (plus (scc ..) ..) since that construct is common and
        !          3375: ;; takes no more insns than scc, and (and (neg (scc ..)) ..) in the
        !          3376: ;; cases where it is no more expensive than (neg (scc ..)).
        !          3377: 
        !          3378: ;; Have reload force a constant into a register for the simple insns that
        !          3379: ;; otherwise won't accept constants.  We do this because it is faster than
        !          3380: ;; the cmp/mfcr sequence we would otherwise generate.
        !          3381: 
        !          3382: (define_insn ""
        !          3383:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r,r")
        !          3384:        (eq:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r,r")
        !          3385:               (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I")))
        !          3386:    (clobber (match_scratch:SI 3 "=r,&r,r,r,r"))]
        !          3387:   ""
        !          3388:   "@
        !          3389:    xor %0,%1,%2\;sfi %3,%0,0\;ae %0,%3,%0
        !          3390:    sfi %3,%1,0\;ae %0,%3,%1
        !          3391:    xoril %0,%1,%b2\;sfi %3,%0,0\;ae %0,%3,%0
        !          3392:    xoriu %0,%1,%u2\;sfi %3,%0,0\;ae %0,%3,%0
        !          3393:    sfi %0,%1,%2\;sfi %3,%0,0\;ae %0,%3,%0")
        !          3394: 
        !          3395: (define_insn ""
        !          3396:   [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,x,x,x")
        !          3397:        (compare:CC 
        !          3398:         (eq:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r,r")
        !          3399:                (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
        !          3400:         (const_int 0)))
        !          3401:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r,r")
        !          3402:        (eq:SI (match_dup 1) (match_dup 2)))
        !          3403:    (clobber (match_scratch:SI 3 "=r,&r,r,r,r"))]
        !          3404:   ""
        !          3405:   "@
        !          3406:    xor %0,%1,%2\;sfi %3,%0,0\;ae. %0,%3,%0
        !          3407:    sfi %3,%1,0\;ae. %0,%3,%1
        !          3408:    xoril %0,%1,%b2\;sfi %3,%0,0\;ae. %0,%3,%0
        !          3409:    xoriu %0,%1,%u2\;sfi %3,%0,0\;ae. %0,%3,%0
        !          3410:    sfi %0,%1,%2\;sfi %3,%0,0\;ae. %0,%3,%0"
        !          3411:   [(set_attr "type" "compare")])
        !          3412: 
        !          3413: (define_insn ""
        !          3414:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r,r")
        !          3415:        (plus:SI (eq:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r,r")
        !          3416:                        (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
        !          3417:                 (match_operand:SI 3 "gen_reg_operand" "r,r,r,r,r")))
        !          3418:    (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
        !          3419:   ""
        !          3420:   "@
        !          3421:    xor %4,%1,%2\;sfi %4,%4,0\;aze %0,%3
        !          3422:    sfi %4,%1,0\;aze %0,%3
        !          3423:    xoril %4,%1,%b2\;sfi %4,%4,0\;aze %0,%3
        !          3424:    xoriu %4,%1,%u2\;sfi %4,%4,0\;aze %0,%3
        !          3425:    sfi %4,%1,%2\;sfi %4,%4,0\;aze %0,%3")
        !          3426: 
        !          3427: (define_insn ""
        !          3428:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x,x")
        !          3429:        (compare:CC 
        !          3430:         (plus:SI
        !          3431:          (eq:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r,r")
        !          3432:                 (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
        !          3433:          (match_operand:SI 3 "gen_reg_operand" "r,r,r,r,r"))
        !          3434:         (const_int 0)))
        !          3435:    (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
        !          3436:   ""
        !          3437:   "@
        !          3438:    xor %4,%1,%2\;sfi %4,%4,0\;aze. %4,%3
        !          3439:    sfi %4,%1,0\;aze. %0,%3
        !          3440:    xoril %4,%1,%b2\;sfi %4,%4,0\;aze. %4,%3
        !          3441:    xoriu %4,%1,%u2\;sfi %4,%4,0\;aze. %4,%3
        !          3442:    sfi %4,%1,%2\;sfi %4,%4,0\;aze. %4,%3"
        !          3443:   [(set_attr "type" "compare")])
        !          3444: 
        !          3445: (define_insn ""
        !          3446:   [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,x,x,x")
        !          3447:        (compare:CC 
        !          3448:         (plus:SI
        !          3449:          (eq:SI (match_operand:SI 1 "gen_reg_operand" "%r,r,r,r,r")
        !          3450:                 (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
        !          3451:          (match_operand:SI 3 "gen_reg_operand" "r,r,r,r,r"))
        !          3452:         (const_int 0)))
        !          3453:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r,r")
        !          3454:        (plus:SI (eq:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          3455:    (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
        !          3456:   ""
        !          3457:   "@
        !          3458:    xor %4,%1,%2\;sfi %4,%4,0\;aze. %0,%3
        !          3459:    sfi %4,%1,0\;aze. %4,%3
        !          3460:    xoril %4,%1,%b2\;sfi %4,%4,0\;aze. %0,%3
        !          3461:    xoriu %4,%1,%u2\;sfi %4,%4,0\;aze. %0,%3
        !          3462:    sfi %4,%1,%2\;sfi %4,%4,0\;aze. %0,%3"
        !          3463:   [(set_attr "type" "compare")])
        !          3464: 
        !          3465: (define_insn ""
        !          3466:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r,r")
        !          3467:        (neg:SI (eq:SI (match_operand:SI 1 "gen_reg_operand" "r,r,r,r,r")
        !          3468:                       (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))))]
        !          3469:   ""
        !          3470:   "@
        !          3471:    xor %0,%1,%2\;ai %0,%0,-1\;sfe %0,%0,%0
        !          3472:    ai %0,%1,-1\;sfe %0,%0,%0
        !          3473:    xoril %0,%1,%b2\;ai %0,%0,-1\;sfe %0,%0,%0
        !          3474:    xoriu %0,%1,%u2\;ai %0,%0,-1\;sfe %0,%0,%0
        !          3475:    sfi %0,%1,%2\;ai %0,%0,-1\;sfe %0,%0,%0")
        !          3476: 
        !          3477: ;; This is what (plus (ne X (const_int 0)) Y) looks like.
        !          3478: (define_insn ""
        !          3479:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3480:        (plus:SI (lshiftrt:SI
        !          3481:                  (neg:SI (abs:SI (match_operand:SI 1 "gen_reg_operand" "r")))
        !          3482:                  (const_int 31))
        !          3483:                 (match_operand:SI 2 "gen_reg_operand" "r")))
        !          3484:    (clobber (match_scratch:SI 3 "=&r"))]
        !          3485:   ""
        !          3486:   "ai %3,%1,-1\;aze %0,%2")
        !          3487: 
        !          3488: (define_insn ""
        !          3489:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          3490:        (compare:CC
        !          3491:         (plus:SI (lshiftrt:SI
        !          3492:                   (neg:SI (abs:SI (match_operand:SI 1 "gen_reg_operand" "r")))
        !          3493:                   (const_int 31))
        !          3494:                  (match_operand:SI 2 "gen_reg_operand" "r"))
        !          3495:         (const_int 0)))
        !          3496:    (clobber (match_scratch:SI 3 "=&r"))]
        !          3497:   ""
        !          3498:   "ai %3,%1,-1\;aze. %3,%2"
        !          3499:   [(set_attr "type" "compare")])
        !          3500: 
        !          3501: (define_insn ""
        !          3502:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          3503:        (compare:CC
        !          3504:         (plus:SI (lshiftrt:SI
        !          3505:                   (neg:SI (abs:SI (match_operand:SI 1 "gen_reg_operand" "r")))
        !          3506:                   (const_int 31))
        !          3507:                  (match_operand:SI 2 "gen_reg_operand" "r"))
        !          3508:         (const_int 0)))
        !          3509:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3510:        (plus:SI (lshiftrt:SI (neg:SI (abs:SI (match_dup 1))) (const_int 31))
        !          3511:                 (match_dup 2)))
        !          3512:    (clobber (match_scratch:SI 3 "=&r"))]
        !          3513:   ""
        !          3514:   "ai %3,%1,-1\;aze. %0,%2"
        !          3515:   [(set_attr "type" "compare")])
        !          3516: 
        !          3517: (define_insn ""
        !          3518:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3519:        (le:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3520:               (match_operand:SI 2 "reg_or_short_operand" "r,O")))
        !          3521:    (clobber (match_scratch:SI 3 "=r,X"))]
        !          3522:   ""
        !          3523:   "@
        !          3524:    doz %3,%2,%1\;sfi %0,%3,0\;ae %0,%0,%3
        !          3525:    ai %0,%1,-1\;aze %0,%0\;sri %0,%0,31")
        !          3526: 
        !          3527: (define_insn ""
        !          3528:   [(set (match_operand:CC 4 "cc_reg_operand" "=x,x")
        !          3529:        (compare:CC
        !          3530:         (le:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3531:                (match_operand:SI 2 "reg_or_short_operand" "r,O"))
        !          3532:         (const_int 0)))
        !          3533:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3534:        (le:SI (match_dup 1) (match_dup 2)))
        !          3535:    (clobber (match_scratch:SI 3 "=r,X"))]
        !          3536:   ""
        !          3537:   "@
        !          3538:    doz %3,%2,%1\;sfi %0,%3,0\;ae. %0,%0,%3
        !          3539:    ai %0,%1,-1\;aze %0,%0\;sri. %0,%0,31"
        !          3540:   [(set_attr "type" "delayed_compare,compare")])
        !          3541: 
        !          3542: (define_insn ""
        !          3543:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3544:        (plus:SI (le:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3545:                        (match_operand:SI 2 "reg_or_short_operand" "r,O"))
        !          3546:                 (match_operand:SI 3 "gen_reg_operand" "r,r")))
        !          3547:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          3548:   ""
        !          3549:   "@
        !          3550:    doz %4,%2,%1\;sfi %4,%4,0\;aze %0,%3
        !          3551:    srai %4,%1,31\;sf %4,%1,%4\;aze %0,%3")
        !          3552: 
        !          3553: (define_insn ""
        !          3554:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
        !          3555:        (compare:CC
        !          3556:         (plus:SI (le:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3557:                         (match_operand:SI 2 "reg_or_short_operand" "r,O"))
        !          3558:                  (match_operand:SI 3 "gen_reg_operand" "r,r"))
        !          3559:         (const_int 0)))
        !          3560:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          3561:   ""
        !          3562:   "@
        !          3563:    doz %4,%2,%1\;sfi %4,%4,0\;aze. %4,%3
        !          3564:    srai %4,%1,31\;sf %4,%1,%4\;aze. %4,%3"
        !          3565:   [(set_attr "type" "compare")])
        !          3566: 
        !          3567: (define_insn ""
        !          3568:   [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
        !          3569:        (compare:CC
        !          3570:         (plus:SI (le:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3571:                         (match_operand:SI 2 "reg_or_short_operand" "r,O"))
        !          3572:                  (match_operand:SI 3 "gen_reg_operand" "r,r"))
        !          3573:         (const_int 0)))
        !          3574:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3575:        (plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          3576:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          3577:   ""
        !          3578:   "@
        !          3579:    doz %4,%2,%1\;sfi %4,%4,0\;aze. %0,%3
        !          3580:    srai %4,%1,31\;sf %4,%1,%4\;aze. %0,%3"
        !          3581:   [(set_attr "type" "compare")])
        !          3582: 
        !          3583: (define_insn ""
        !          3584:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3585:        (neg:SI (le:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3586:                       (match_operand:SI 2 "reg_or_short_operand" "r,O"))))]
        !          3587:   ""
        !          3588:   "@
        !          3589:    doz %0,%2,%1\;ai %0,%0,-1\;sfe %0,%0,%0
        !          3590:    ai %0,%1,-1\;aze %0,%0\;srai %0,%0,31")
        !          3591: 
        !          3592: (define_insn ""
        !          3593:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3594:        (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3595:                (match_operand:SI 2 "reg_or_short_operand" "rI")))]
        !          3596:   ""
        !          3597:   "sf%I2 %0,%1,%2\;cal %0,0(0)\;ae %0,%0,%0")
        !          3598: 
        !          3599: (define_insn ""
        !          3600:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          3601:        (compare:CC
        !          3602:         (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3603:                 (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3604:         (const_int 0)))
        !          3605:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3606:        (leu:SI (match_dup 1) (match_dup 2)))]
        !          3607:    ""
        !          3608:   "sf%I2 %0,%1,%2\;cal %0,0(0)\;ae. %0,%0,%0"
        !          3609:   [(set_attr "type" "compare")])
        !          3610: 
        !          3611: (define_insn ""
        !          3612:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3613:        (plus:SI (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3614:                         (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3615:                 (match_operand:SI 3 "gen_reg_operand" "r")))
        !          3616:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3617:   ""
        !          3618:   "sf%I2 %4,%1,%2\;aze %0,%3")
        !          3619: 
        !          3620: (define_insn ""
        !          3621:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          3622:        (compare:CC
        !          3623:         (plus:SI (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3624:                          (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3625:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3626:         (const_int 0)))
        !          3627:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3628:   ""
        !          3629:   "sf%I2 %4,%1,%2\;aze. %4,%3"
        !          3630:   [(set_attr "type" "compare")])
        !          3631: 
        !          3632: (define_insn ""
        !          3633:   [(set (match_operand:CC 5 "cc_reg_operand" "=x")
        !          3634:        (compare:CC
        !          3635:         (plus:SI (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3636:                          (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3637:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3638:         (const_int 0)))
        !          3639:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3640:        (plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          3641:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3642:   ""
        !          3643:   "sf%I2 %4,%1,%2\;aze. %0,%3"
        !          3644:   [(set_attr "type" "compare")])
        !          3645: 
        !          3646: (define_insn ""
        !          3647:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3648:        (neg:SI (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3649:                        (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
        !          3650:   ""
        !          3651:   "sf%I2 %0,%1,%2\;sfe %0,%0,%0\;nand %0,%0,%0")
        !          3652: 
        !          3653: (define_insn ""
        !          3654:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3655:        (and:SI (neg:SI
        !          3656:                 (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3657:                         (match_operand:SI 2 "reg_or_short_operand" "rI")))
        !          3658:                (match_operand:SI 3 "gen_reg_operand" "r")))
        !          3659:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3660:   ""
        !          3661:   "sf%I2 %4,%1,%2\;sfe %4,%4,%4\;andc %0,%3,%4")
        !          3662: 
        !          3663: (define_insn ""
        !          3664:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          3665:        (compare:CC
        !          3666:         (and:SI (neg:SI
        !          3667:                  (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3668:                          (match_operand:SI 2 "reg_or_short_operand" "rI")))
        !          3669:                 (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3670:         (const_int 0)))
        !          3671:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3672:   ""
        !          3673:   "sf%I2 %4,%1,%2\;sfe %4,%4,%4\;andc. %4,%3,%4"
        !          3674:   [(set_attr "type" "compare")])
        !          3675: 
        !          3676: (define_insn ""
        !          3677:   [(set (match_operand:CC 5 "cc_reg_operand" "=x")
        !          3678:        (compare:CC
        !          3679:         (and:SI (neg:SI
        !          3680:                  (leu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3681:                          (match_operand:SI 2 "reg_or_short_operand" "rI")))
        !          3682:                 (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3683:         (const_int 0)))
        !          3684:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3685:        (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
        !          3686:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3687:   ""
        !          3688:   "sf%I2 %4,%1,%2\;sfe %4,%4,%4\;andc. %0,%3,%4"
        !          3689:   [(set_attr "type" "compare")])
        !          3690: 
        !          3691: (define_insn ""
        !          3692:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3693:        (lt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3694:               (match_operand:SI 2 "reg_or_short_operand" "rI")))]
        !          3695:   ""
        !          3696:   "doz%I2 %0,%1,%2\;nabs %0,%0\;sri %0,%0,31")
        !          3697: 
        !          3698: (define_insn ""
        !          3699:   [(set (match_operand:SI 3 "cc_reg_operand" "=x")
        !          3700:        (compare:CC
        !          3701:         (lt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3702:                (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3703:         (const_int 0)))
        !          3704:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3705:        (lt:SI (match_dup 1) (match_dup 2)))]
        !          3706:   ""
        !          3707:   "doz%I2 %0,%1,%2\;nabs %0,%0\;sri. %0,%0,31"
        !          3708:   [(set_attr "type" "delayed_compare")])
        !          3709: 
        !          3710: (define_insn ""
        !          3711:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3712:        (plus:SI (lt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3713:                        (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3714:                 (match_operand:SI 3 "gen_reg_operand" "r")))
        !          3715:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3716:   ""
        !          3717:   "doz%I2 %4,%1,%2\;ai %4,%4,-1\;aze %0,%3")
        !          3718: 
        !          3719: (define_insn ""
        !          3720:   [(set (match_operand:SI 0 "cc_reg_operand" "=x")
        !          3721:        (compare:CC
        !          3722:         (plus:SI (lt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3723:                         (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3724:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3725:         (const_int 0)))
        !          3726:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3727:   ""
        !          3728:   "doz%I2 %4,%1,%2\;ai %4,%4,-1\;aze. %4,%3"
        !          3729:   [(set_attr "type" "compare")])
        !          3730: 
        !          3731: (define_insn ""
        !          3732:   [(set (match_operand:SI 5 "cc_reg_operand" "=x")
        !          3733:        (compare:CC
        !          3734:         (plus:SI (lt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3735:                         (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3736:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3737:         (const_int 0)))
        !          3738:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3739:        (plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          3740:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3741:   ""
        !          3742:   "doz%I2 %4,%1,%2\;ai %4,%4,-1\;aze. %0,%3"
        !          3743:   [(set_attr "type" "compare")])
        !          3744: 
        !          3745: (define_insn ""
        !          3746:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3747:        (neg:SI (lt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3748:                       (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
        !          3749:   ""
        !          3750:   "doz%I2 %0,%1,%2\;nabs %0,%0\;srai %0,%0,31")
        !          3751: 
        !          3752: (define_insn ""
        !          3753:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3754:        (ltu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3755:                (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))]
        !          3756:   ""
        !          3757:   "@
        !          3758:    sf %0,%2,%1\;sfe %0,%0,%0\;neg %0,%0
        !          3759:    ai %0,%1,%n2\;sfe %0,%0,%0\;neg %0,%0")
        !          3760: 
        !          3761: (define_insn ""
        !          3762:   [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
        !          3763:        (compare:CC
        !          3764:         (ltu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3765:                 (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
        !          3766:         (const_int 0)))
        !          3767:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3768:        (ltu:SI (match_dup 1) (match_dup 2)))]
        !          3769:   ""
        !          3770:   "@
        !          3771:    sf %0,%2,%1\;sfe %0,%0,%0\;neg. %0,%0
        !          3772:    ai %0,%1,%n2\;sfe %0,%0,%0\;neg. %0,%0"
        !          3773:   [(set_attr "type" "compare")])
        !          3774: 
        !          3775: (define_insn ""
        !          3776:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r")
        !          3777:        (plus:SI (ltu:SI (match_operand:SI 1 "gen_reg_operand" "r,r,r,r")
        !          3778:                         (match_operand:SI 2 "reg_or_neg_short_operand" "r,r,P,P"))
        !          3779:                 (match_operand:SI 3 "reg_or_short_operand" "r,I,r,I")))
        !          3780:    (clobber (match_scratch:SI 4 "=&r,r,&r,r"))]
        !          3781:   ""
        !          3782:   "@
        !          3783:   sf %4,%2,%1\;sfe %4,%4,%4\;sf%I3 %0,%4,%3
        !          3784:   sf %4,%2,%1\;sfe %4,%4,%4\;sf%I3 %0,%4,%3
        !          3785:   ai %4,%1,%n2\;sfe %4,%4,%4\;sf%I3 %0,%4,%3
        !          3786:   ai %4,%1,%n2\;sfe %4,%4,%4\;sf%I3 %0,%4,%3")
        !          3787: 
        !          3788: (define_insn ""
        !          3789:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x")
        !          3790:        (compare:CC
        !          3791:         (plus:SI (ltu:SI (match_operand:SI 1 "gen_reg_operand" "r,r,r,r")
        !          3792:                          (match_operand:SI 2 "reg_or_neg_short_operand" "r,r,P,P"))
        !          3793:                  (match_operand:SI 3 "reg_or_short_operand" "r,I,r,I"))
        !          3794:         (const_int 0)))
        !          3795:    (clobber (match_scratch:SI 4 "=&r,r,&r,r"))]
        !          3796:   ""
        !          3797:   "@
        !          3798:    sf %4,%2,%1\;sfe %4,%4,%4\;sf%I3. %4,%4,%3
        !          3799:    sf %4,%2,%1\;sfe %4,%4,%4\;sf%I3. %4,%4,%3
        !          3800:    ai %4,%1,%n2\;sfe %4,%4,%4\;sf%I3. %4,%4,%3
        !          3801:    ai %4,%1,%n2\;sfe %4,%4,%4\;sf%I3. %4,%4,%3"
        !          3802:   [(set_attr "type" "compare")])
        !          3803: 
        !          3804: (define_insn ""
        !          3805:   [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,x,x")
        !          3806:        (compare:CC
        !          3807:         (plus:SI (ltu:SI (match_operand:SI 1 "gen_reg_operand" "r,r,r,r")
        !          3808:                          (match_operand:SI 2 "reg_or_neg_short_operand" "r,r,P,P"))
        !          3809:                  (match_operand:SI 3 "reg_or_short_operand" "r,I,r,I"))
        !          3810:         (const_int 0)))
        !          3811:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r,r,r")
        !          3812:        (plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          3813:    (clobber (match_scratch:SI 4 "=&r,r,&r,r"))]
        !          3814:   ""
        !          3815:   "@
        !          3816:    sf %4,%2,%1\;sfe %4,%4,%4\;sf%I3. %0,%4,%3
        !          3817:    sf %4,%2,%1\;sfe %4,%4,%4\;sf%I3. %0,%4,%3
        !          3818:    ai %4,%1,%n2\;sfe %4,%4,%4\;sf%I3. %0,%4,%3
        !          3819:    ai %4,%1,%n2\;sfe %4,%4,%4\;sf%I3. %0,%4,%3"
        !          3820:   [(set_attr "type" "compare")])
        !          3821: 
        !          3822: (define_insn ""
        !          3823:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3824:        (neg:SI (ltu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3825:                        (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))))]
        !          3826:   ""
        !          3827:   "@
        !          3828:    sf %0,%2,%1\;sfe %0,%0,%0
        !          3829:    ai %0,%1,%n2\;sfe %0,%0,%0")
        !          3830: 
        !          3831: (define_insn ""
        !          3832:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3833:        (ge:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3834:               (match_operand:SI 2 "reg_or_short_operand" "rI")))
        !          3835:    (clobber (match_scratch:SI 3 "=r"))]
        !          3836:   ""
        !          3837:   "doz%I2 %3,%1,%2\;sfi %0,%3,0\;ae %0,%0,%3")
        !          3838: 
        !          3839: (define_insn ""
        !          3840:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          3841:        (compare:CC
        !          3842:         (ge:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3843:                (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3844:         (const_int 0)))
        !          3845:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3846:        (ge:SI (match_dup 1) (match_dup 2)))
        !          3847:    (clobber (match_scratch:SI 3 "=r"))]
        !          3848:   ""
        !          3849:   "doz%I2 %3,%1,%2\;sfi %0,%3,0\;ae. %0,%0,%3"
        !          3850:   [(set_attr "type" "compare")])
        !          3851: 
        !          3852: (define_insn ""
        !          3853:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3854:        (plus:SI (ge:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3855:                        (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3856:                 (match_operand:SI 3 "gen_reg_operand" "r")))
        !          3857:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3858:   ""
        !          3859:   "doz%I2 %4,%1,%2\;sfi %4,%4,0\;aze %0,%3")
        !          3860: 
        !          3861: (define_insn ""
        !          3862:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          3863:        (compare:CC
        !          3864:         (plus:SI (ge:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3865:                         (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3866:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3867:         (const_int 0)))
        !          3868:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3869:   ""
        !          3870:   "doz%I2 %4,%1,%2\;sfi %4,%4,0\;aze. %4,%3"
        !          3871:   [(set_attr "type" "compare")])
        !          3872: 
        !          3873: (define_insn ""
        !          3874:   [(set (match_operand:CC 5 "cc_reg_operand" "=x")
        !          3875:        (compare:CC
        !          3876:         (plus:SI (ge:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3877:                         (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          3878:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          3879:         (const_int 0)))
        !          3880:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3881:        (plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          3882:    (clobber (match_scratch:SI 4 "=&r"))]
        !          3883:   ""
        !          3884:   "doz%I2 %4,%1,%2\;sfi %4,%4,0\;aze. %0,%3"
        !          3885:   [(set_attr "type" "compare")])
        !          3886: 
        !          3887: (define_insn ""
        !          3888:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3889:        (neg:SI (ge:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          3890:                       (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
        !          3891:   ""
        !          3892:   "doz%I2 %0,%1,%2\;ai %0,%0,-1\;sfe %0,%0,%0")
        !          3893: 
        !          3894: ;; This is (and (neg (ge X (const_int 0))) Y).
        !          3895: (define_insn ""
        !          3896:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3897:        (and:SI (neg:SI
        !          3898:                 (lshiftrt:SI
        !          3899:                  (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !          3900:                  (const_int 31)))
        !          3901:                (match_operand:SI 2 "gen_reg_operand" "r")))
        !          3902:    (clobber (match_scratch:SI 3 "=&r"))]
        !          3903:   ""
        !          3904:   "srai %3,%1,31\;andc %0,%2,%3")
        !          3905: 
        !          3906: (define_insn ""
        !          3907:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          3908:        (compare:CC
        !          3909:         (and:SI (neg:SI
        !          3910:                  (lshiftrt:SI
        !          3911:                   (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !          3912:                   (const_int 31)))
        !          3913:                 (match_operand:SI 2 "gen_reg_operand" "r"))
        !          3914:         (const_int 0)))
        !          3915:    (clobber (match_scratch:SI 3 "=&r"))]
        !          3916:   ""
        !          3917:   "srai %3,%1,31\;andc. %3,%2,%3"
        !          3918:   [(set_attr "type" "compare")])
        !          3919: 
        !          3920: (define_insn ""
        !          3921:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          3922:        (compare:CC
        !          3923:         (and:SI (neg:SI
        !          3924:                  (lshiftrt:SI
        !          3925:                   (not:SI (match_operand:SI 1 "gen_reg_operand" "r"))
        !          3926:                   (const_int 31)))
        !          3927:                 (match_operand:SI 2 "gen_reg_operand" "r"))
        !          3928:         (const_int 0)))
        !          3929:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          3930:        (and:SI (neg:SI (lshiftrt:SI (not:SI (match_dup 1))
        !          3931:                                     (const_int 31)))
        !          3932:                (match_dup 2)))
        !          3933:    (clobber (match_scratch:SI 3 "=&r"))]
        !          3934:   ""
        !          3935:   "srai %3,%1,31\;andc. %0,%2,%3"
        !          3936:   [(set_attr "type" "compare")])
        !          3937: 
        !          3938: (define_insn ""
        !          3939:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3940:        (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3941:                (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))]
        !          3942:   ""
        !          3943:   "@
        !          3944:    sf %0,%2,%1\;cal %0,0(0)\;ae %0,%0,%0
        !          3945:    ai %0,%1,%n2\;cal %0,0(0)\;ae %0,%0,%0")
        !          3946: 
        !          3947: (define_insn ""
        !          3948:   [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
        !          3949:        (compare:CC
        !          3950:         (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3951:                 (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
        !          3952:         (const_int 0)))
        !          3953:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3954:        (geu:SI (match_dup 1) (match_dup 2)))]
        !          3955:   ""
        !          3956:   "@
        !          3957:    sf %0,%2,%1\;cal %0,0(0)\;ae. %0,%0,%0
        !          3958:    ai %0,%1,%n2\;cal %0,0(0)\;ae. %0,%0,%0"
        !          3959:   [(set_attr "type" "compare")])
        !          3960: 
        !          3961: (define_insn ""
        !          3962:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3963:        (plus:SI (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3964:                         (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
        !          3965:                 (match_operand:SI 3 "gen_reg_operand" "r,r")))
        !          3966:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          3967:   ""
        !          3968:   "@
        !          3969:    sf %4,%2,%1\;aze %0,%3
        !          3970:    ai %4,%1,%n2\;aze %0,%3")
        !          3971: 
        !          3972: (define_insn ""
        !          3973:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
        !          3974:        (compare:CC
        !          3975:         (plus:SI (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3976:                          (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
        !          3977:                  (match_operand:SI 3 "gen_reg_operand" "r,r"))
        !          3978:         (const_int 0)))
        !          3979:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          3980:   ""
        !          3981:   "@
        !          3982:    sf %4,%2,%1\;aze. %4,%3
        !          3983:    ai %4,%1,%n2\;aze. %4,%3"
        !          3984:   [(set_attr "type" "compare")])
        !          3985: 
        !          3986: (define_insn ""
        !          3987:   [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
        !          3988:        (compare:CC
        !          3989:         (plus:SI (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          3990:                          (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
        !          3991:                  (match_operand:SI 3 "gen_reg_operand" "r,r"))
        !          3992:         (const_int 0)))
        !          3993:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          3994:        (plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          3995:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          3996:   ""
        !          3997:   "@
        !          3998:    sf %4,%2,%1\;aze. %0,%3
        !          3999:    ai %4,%1,%n2\;aze. %4,%3"
        !          4000:   [(set_attr "type" "compare")])
        !          4001: 
        !          4002: (define_insn ""
        !          4003:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          4004:        (neg:SI (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          4005:                        (match_operand:SI 2 "reg_or_short_operand" "r,I"))))]
        !          4006:   ""
        !          4007:   "@
        !          4008:    sf %0,%2,%1\;sfe %0,%0,%0\;nand %0,%0,%0
        !          4009:    sfi %0,%1,-1\;a%I2 %0,%0,%2\;sfe %0,%0,%0")
        !          4010: 
        !          4011: (define_insn ""
        !          4012:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          4013:        (and:SI (neg:SI
        !          4014:                 (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          4015:                         (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
        !          4016:                (match_operand:SI 3 "gen_reg_operand" "r,r")))
        !          4017:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          4018:   ""
        !          4019:   "@
        !          4020:    sf %4,%2,%1\;sfe %4,%4,%4\;andc %0,%3,%4
        !          4021:    ai %4,%1,%n2\;sfe %4,%4,%4\;andc %0,%3,%4")
        !          4022: 
        !          4023: (define_insn ""
        !          4024:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
        !          4025:        (compare:CC
        !          4026:         (and:SI (neg:SI
        !          4027:                  (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          4028:                          (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
        !          4029:                 (match_operand:SI 3 "gen_reg_operand" "r,r"))
        !          4030:         (const_int 0)))
        !          4031:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          4032:   ""
        !          4033:   "@
        !          4034:    sf %4,%2,%1\;sfe %4,%4,%4\;andc. %4,%3,%4
        !          4035:    ai %4,%1,%n2\;sfe %4,%4,%4\;andc. %4,%3,%4"
        !          4036:   [(set_attr "type" "compare")])
        !          4037: 
        !          4038: (define_insn ""
        !          4039:   [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
        !          4040:        (compare:CC
        !          4041:         (and:SI (neg:SI
        !          4042:                  (geu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          4043:                          (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
        !          4044:                 (match_operand:SI 3 "gen_reg_operand" "r,r"))
        !          4045:         (const_int 0)))
        !          4046:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          4047:        (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
        !          4048:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          4049:   ""
        !          4050:   "@
        !          4051:    sf %4,%2,%1\;sfe %4,%4,%4\;andc. %0,%3,%4
        !          4052:    ai %4,%1,%n2\;sfe %4,%4,%4\;andc. %0,%3,%4"
        !          4053:   [(set_attr "type" "compare")])
        !          4054: 
        !          4055: (define_insn ""
        !          4056:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4057:        (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4058:               (const_int 0)))]
        !          4059:   ""
        !          4060:   "sfi %0,%1,0\;ame %0,%0\;sri %0,%0,31")
        !          4061: 
        !          4062: (define_insn ""
        !          4063:   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
        !          4064:        (compare:CC
        !          4065:         (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4066:                (const_int 0))
        !          4067:         (const_int 0)))
        !          4068:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4069:        (gt:SI (match_dup 1) (const_int 0)))]
        !          4070:   ""
        !          4071:   "sfi %0,%1,0\;ame %0,%0\;sri. %0,%0,31"
        !          4072:   [(set_attr "type" "delayed_compare")])
        !          4073: 
        !          4074: (define_insn ""
        !          4075:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4076:        (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4077:               (match_operand:SI 2 "reg_or_short_operand" "r")))]
        !          4078:   ""
        !          4079:   "doz %0,%2,%1\;nabs %0,%0\;sri %0,%0,31")
        !          4080: 
        !          4081: (define_insn ""
        !          4082:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          4083:        (compare:CC
        !          4084:         (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4085:                (match_operand:SI 2 "reg_or_short_operand" "r"))
        !          4086:         (const_int 0)))
        !          4087:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4088:        (gt:SI (match_dup 1) (match_dup 2)))]
        !          4089:   ""
        !          4090:   "doz %0,%2,%1\;nabs %0,%0\;sri. %0,%0,31"
        !          4091:   [(set_attr "type" "delayed_compare")])
        !          4092: 
        !          4093: (define_insn ""
        !          4094:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4095:        (plus:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4096:                        (const_int 0))
        !          4097:                 (match_operand:SI 2 "gen_reg_operand" "r")))
        !          4098:    (clobber (match_scratch:SI 3 "=&r"))]
        !          4099:   ""
        !          4100:   "a %3,%1,%1\;sfe %3,%1,%3\;aze %0,%2")
        !          4101: 
        !          4102: (define_insn ""
        !          4103:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          4104:        (compare:CC
        !          4105:         (plus:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4106:                         (const_int 0))
        !          4107:                  (match_operand:SI 2 "gen_reg_operand" "r"))
        !          4108:         (const_int 0)))
        !          4109:    (clobber (match_scratch:SI 3 "=&r"))]
        !          4110:   ""
        !          4111:   "a %3,%1,%1\;sfe %3,%1,%3\;aze. %0,%2"
        !          4112:   [(set_attr "type" "compare")])
        !          4113: 
        !          4114: (define_insn ""
        !          4115:   [(set (match_operand:CC 4 "cc_reg_operand" "=x")
        !          4116:        (compare:CC
        !          4117:         (plus:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4118:                         (const_int 0))
        !          4119:                  (match_operand:SI 2 "gen_reg_operand" "r"))
        !          4120:         (const_int 0)))
        !          4121:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4122:        (plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))
        !          4123:    (clobber (match_scratch:SI 3 "=&r"))]
        !          4124:   ""
        !          4125:   "a %3,%1,%1\;sfe %3,%1,%3\;aze. %3,%2"
        !          4126:   [(set_attr "type" "compare")])
        !          4127: 
        !          4128: (define_insn ""
        !          4129:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4130:        (plus:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4131:                        (match_operand:SI 2 "reg_or_short_operand" "r"))
        !          4132:                 (match_operand:SI 3 "gen_reg_operand" "r")))
        !          4133:    (clobber (match_scratch:SI 4 "=&r"))]
        !          4134:   ""
        !          4135:   "doz %4,%2,%1\;ai %4,%4,-1\;aze %0,%3")
        !          4136: 
        !          4137: (define_insn ""
        !          4138:   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        !          4139:        (compare:CC
        !          4140:         (plus:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4141:                         (match_operand:SI 2 "reg_or_short_operand" "r"))
        !          4142:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          4143:         (const_int 0)))
        !          4144:    (clobber (match_scratch:SI 4 "=&r"))]
        !          4145:   ""
        !          4146:   "doz %4,%2,%1\;ai %4,%4,-1\;aze. %4,%3"
        !          4147:   [(set_attr "type" "compare")])
        !          4148: 
        !          4149: (define_insn ""
        !          4150:   [(set (match_operand:CC 5 "cc_reg_operand" "=x")
        !          4151:        (compare:CC
        !          4152:         (plus:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4153:                         (match_operand:SI 2 "reg_or_short_operand" "r"))
        !          4154:                  (match_operand:SI 3 "gen_reg_operand" "r"))
        !          4155:         (const_int 0)))
        !          4156:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4157:        (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          4158:    (clobber (match_scratch:SI 4 "=&r"))]
        !          4159:   ""
        !          4160:   "doz %4,%2,%1\;ai %4,%4,-1\;aze. %0,%3"
        !          4161:   [(set_attr "type" "compare")])
        !          4162: 
        !          4163: (define_insn ""
        !          4164:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4165:        (neg:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4166:                       (const_int 0))))]
        !          4167:   ""
        !          4168:   "sfi %0,%1,0\;ame %0,%0\;srai %0,%0,31")
        !          4169: 
        !          4170: (define_insn ""
        !          4171:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4172:        (neg:SI (gt:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4173:                       (match_operand:SI 2 "reg_or_short_operand" "r"))))]
        !          4174:   ""
        !          4175:   "doz %0,%2,%1\;nabs %0,%0\;srai %0,%0,31")
        !          4176: 
        !          4177: (define_insn ""
        !          4178:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4179:        (gtu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4180:                (match_operand:SI 2 "reg_or_short_operand" "rI")))]
        !          4181:   ""
        !          4182:   "sf%I2 %0,%1,%2\;sfe %0,%0,%0\;neg %0,%0")
        !          4183: 
        !          4184: (define_insn ""
        !          4185:   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        !          4186:        (compare:CC
        !          4187:         (gtu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4188:                 (match_operand:SI 2 "reg_or_short_operand" "rI"))
        !          4189:         (const_int 0)))
        !          4190:    (set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4191:        (gtu:SI (match_dup 1) (match_dup 2)))]
        !          4192:   ""
        !          4193:   "sf%I2 %0,%1,%2\;sfe %0,%0,%0\;neg. %0,%0"
        !          4194:   [(set_attr "type" "compare")])
        !          4195: 
        !          4196: (define_insn ""
        !          4197:   [(set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          4198:        (plus:SI (gtu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          4199:                         (match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
        !          4200:                 (match_operand:SI 3 "reg_or_short_operand" "r,I")))
        !          4201:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          4202:   ""
        !          4203:   "sf%I2 %4,%1,%2\;sfe %4,%4,%4\;sf%I3 %0,%4,%3")
        !          4204: 
        !          4205: (define_insn ""
        !          4206:   [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
        !          4207:        (compare:CC
        !          4208:         (plus:SI (gtu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          4209:                          (match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
        !          4210:                  (match_operand:SI 3 "reg_or_short_operand" "r,I"))
        !          4211:         (const_int 0)))
        !          4212:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          4213:   ""
        !          4214:   "sf%I2 %4,%1,%2\;sfe %4,%4,%4\;sf%I3. %4,%4,%3"
        !          4215:   [(set_attr "type" "compare")])
        !          4216: 
        !          4217: (define_insn ""
        !          4218:   [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
        !          4219:        (compare:CC
        !          4220:         (plus:SI (gtu:SI (match_operand:SI 1 "gen_reg_operand" "r,r")
        !          4221:                          (match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
        !          4222:                  (match_operand:SI 3 "reg_or_short_operand" "r,I"))
        !          4223:         (const_int 0)))
        !          4224:    (set (match_operand:SI 0 "gen_reg_operand" "=r,r")
        !          4225:        (plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
        !          4226:    (clobber (match_scratch:SI 4 "=&r,&r"))]
        !          4227:   ""
        !          4228:   "sf%I2 %4,%1,%2\;sfe %4,%4,%4\;sf%I3. %0,%4,%3"
        !          4229:   [(set_attr "type" "compare")])
        !          4230: 
        !          4231: (define_insn ""
        !          4232:   [(set (match_operand:SI 0 "gen_reg_operand" "=r")
        !          4233:        (neg:SI (gtu:SI (match_operand:SI 1 "gen_reg_operand" "r")
        !          4234:                        (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
        !          4235:   ""
        !          4236:   "sf%I2 %0,%1,%2\;sfe %0,%0,%0")
        !          4237: 
        !          4238: ;; Define both directions of branch and return.  If we need a reload
        !          4239: ;; register, we'd rather use CR0 since it is much easier to copy a
        !          4240: ;; register CC value to there.
        !          4241: 
        !          4242: (define_insn ""
        !          4243:   [(set (pc)
        !          4244:        (if_then_else (match_operator 1 "branch_comparison_operator"
        !          4245:                                      [(match_operand 2
        !          4246:                                                      "cc_reg_operand" "x,?y")
        !          4247:                                       (const_int 0)])
        !          4248:                      (label_ref (match_operand 0 "" ""))
        !          4249:                      (pc)))]
        !          4250:   ""
        !          4251:   "%C1bc %t1,%j1,%0")
        !          4252: 
        !          4253: (define_insn ""
        !          4254:   [(set (pc)
        !          4255:        (if_then_else (match_operator 0 "branch_comparison_operator"
        !          4256:                                      [(match_operand 1
        !          4257:                                                      "cc_reg_operand" "x,?y")
        !          4258:                                       (const_int 0)])
        !          4259:                      (return)
        !          4260:                      (pc)))]
        !          4261:   "direct_return ()"
        !          4262:   "%C0bcr %t0,%j0")
        !          4263: 
        !          4264: (define_insn ""
        !          4265:   [(set (pc)
        !          4266:        (if_then_else (match_operator 1 "branch_comparison_operator"
        !          4267:                                      [(match_operand 2
        !          4268:                                                      "cc_reg_operand" "x,?y")
        !          4269:                                       (const_int 0)])
        !          4270:                      (pc)
        !          4271:                      (label_ref (match_operand 0 "" ""))))]
        !          4272:   ""
        !          4273:   "%C1bc %T1,%j1,%0")
        !          4274: 
        !          4275: (define_insn ""
        !          4276:   [(set (pc)
        !          4277:        (if_then_else (match_operator 0 "branch_comparison_operator"
        !          4278:                                      [(match_operand 1
        !          4279:                                                      "cc_reg_operand" "x,?y")
        !          4280:                                       (const_int 0)])
        !          4281:                      (pc)
        !          4282:                      (return)))]
        !          4283:   "direct_return ()"
        !          4284:   "%C0bcr %T0,%j0")
        !          4285: 
        !          4286: ;; Unconditional branch and return.
        !          4287: 
        !          4288: (define_insn "jump"
        !          4289:   [(set (pc)
        !          4290:        (label_ref (match_operand 0 "" "")))]
        !          4291:   ""
        !          4292:   "b %l0")
        !          4293: 
        !          4294: (define_insn "return"
        !          4295:   [(return)]
        !          4296:   "direct_return ()"
        !          4297:   "br")
        !          4298: 
        !          4299: (define_insn "indirect_jump"
        !          4300:   [(set (pc) (match_operand:SI 0 "register_operand" "c,l"))]
        !          4301:   ""
        !          4302:   "@
        !          4303:    bctr
        !          4304:    br")
        !          4305: 
        !          4306: ;; Table jump for switch statements:
        !          4307: (define_expand "tablejump"
        !          4308:   [(set (match_dup 3)
        !          4309:        (plus:SI (match_operand:SI 0 "" "")
        !          4310:                 (match_dup 2)))
        !          4311:    (parallel [(set (pc) (match_dup 3))
        !          4312:              (use (label_ref (match_operand 1 "" "")))])]
        !          4313:   ""
        !          4314:   "
        !          4315: { operands[0] = force_reg (SImode, operands[0]);
        !          4316:   operands[2] = force_reg (SImode, gen_rtx (LABEL_REF, VOIDmode, operands[1]));
        !          4317:   operands[3] = gen_reg_rtx (SImode);
        !          4318: }")
        !          4319: 
        !          4320: (define_insn ""
        !          4321:   [(set (pc)
        !          4322:        (match_operand:SI 0 "register_operand" "c,r"))
        !          4323:    (use (label_ref (match_operand 1 "" "")))]
        !          4324:   ""
        !          4325:   "@
        !          4326:    bctr
        !          4327:    br")
        !          4328: 
        !          4329: (define_insn "nop"
        !          4330:   [(const_int 0)]
        !          4331:   ""
        !          4332:   "cror 0,0,0")
        !          4333: 
        !          4334: ;; Define the subtract-one-and-jump insns. 
        !          4335: ;; We need to be able to do this for any operand, including MEM, or we
        !          4336: ;; will cause reload to blow up since we don't allow output reloads on
        !          4337: ;; JUMP_INSNs. 
        !          4338: (define_insn ""
        !          4339:   [(set (pc)
        !          4340:        (if_then_else (ne (match_operand:SI 1 "register_operand" "0,*r,*r")
        !          4341:                          (const_int 1))
        !          4342:                      (label_ref (match_operand 2 "" ""))
        !          4343:                      (pc)))
        !          4344:    (set (match_operand:SI 0 "register_operand" "=c,*r,m*q*c*l")
        !          4345:        (plus:SI (match_dup 1) (const_int -1)))
        !          4346:    (clobber (match_scratch:CC 3 "=X,&x,&x"))
        !          4347:    (clobber (match_scratch:SI 4 "=X,X,r"))]
        !          4348:   ""
        !          4349:   "@
        !          4350:    bdn %l2
        !          4351:    #
        !          4352:    #")
        !          4353:                               
        !          4354: ;; Similar, but we can use GE since we have a REG_NOTES.
        !          4355: (define_insn ""
        !          4356:   [(set (pc)
        !          4357:        (if_then_else (ge (match_operand:SI 1 "register_operand" "0,*r,*r")
        !          4358:                          (const_int 0))
        !          4359:                      (label_ref (match_operand 2 "" ""))
        !          4360:                      (pc)))
        !          4361:    (set (match_operand:SI 0 "register_operand" "=c,*r,m*q*c*l")
        !          4362:        (plus:SI (match_dup 1) (const_int -1)))
        !          4363:    (clobber (match_scratch:CC 3 "=X,&x,&X"))
        !          4364:    (clobber (match_scratch:SI 4 "=X,X,r"))]
        !          4365:   "find_reg_note (insn, REG_NONNEG, 0)"
        !          4366:   "@
        !          4367:    bdn %l2
        !          4368:    #
        !          4369:    #")
        !          4370:                               
        !          4371: (define_insn ""
        !          4372:   [(set (pc)
        !          4373:        (if_then_else (eq (match_operand:SI 1 "register_operand" "0,*r,*r")
        !          4374:                          (const_int 1))
        !          4375:                      (label_ref (match_operand 2 "" ""))
        !          4376:                      (pc)))
        !          4377:    (set (match_operand:SI 0 "register_operand" "=c,*r,m*q*c*l")
        !          4378:        (plus:SI (match_dup 1) (const_int -1)))
        !          4379:    (clobber (match_scratch:CC 3 "=X,&x,&x"))
        !          4380:    (clobber (match_scratch:SI 4 "=X,X,r"))]
        !          4381:   ""
        !          4382:   "@
        !          4383:    bdz %l2
        !          4384:    #
        !          4385:    #")
        !          4386: 
        !          4387: (define_split
        !          4388:   [(set (pc)
        !          4389:        (if_then_else (match_operator 2 "comparison_operator"
        !          4390:                                      [(match_operand:SI 1 "gen_reg_operand" "")
        !          4391:                                       (const_int 1)])
        !          4392:                      (match_operand 5 "" "")
        !          4393:                      (match_operand 6 "" "")))
        !          4394:    (set (match_operand:SI 0 "gen_reg_operand" "")
        !          4395:        (plus:SI (match_dup 1) (const_int -1)))
        !          4396:    (clobber (match_scratch:CC 3 ""))
        !          4397:    (clobber (match_scratch:SI 4 ""))]
        !          4398:   "reload_completed"
        !          4399:   [(parallel [(set (match_dup 3)
        !          4400:                   (compare:CC (plus:SI (match_dup 1) (const_int -1))
        !          4401:                               (const_int 0)))
        !          4402:              (set (match_dup 0) (plus:SI (match_dup 1) (const_int -1)))])
        !          4403:    (set (pc) (if_then_else (match_dup 7) (match_dup 5) (match_dup 6)))]
        !          4404:   "
        !          4405: { operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
        !          4406:                         const0_rtx); }")
        !          4407: 
        !          4408: (define_split
        !          4409:   [(set (pc)
        !          4410:        (if_then_else (match_operator 2 "comparison_operator"
        !          4411:                                      [(match_operand:SI 1 "gen_reg_operand" "")
        !          4412:                                       (const_int 1)])
        !          4413:                      (match_operand 5 "" "")
        !          4414:                      (match_operand 6 "" "")))
        !          4415:    (set (match_operand:SI 0 "general_operand" "")
        !          4416:        (plus:SI (match_dup 1) (const_int -1)))
        !          4417:    (clobber (match_scratch:CC 3 ""))
        !          4418:    (clobber (match_scratch:SI 4 ""))]
        !          4419:   "reload_completed && ! gen_reg_operand (operands[0], SImode)"
        !          4420:   [(parallel [(set (match_dup 3)
        !          4421:                   (compare:CC (plus:SI (match_dup 1) (const_int -1))
        !          4422:                               (const_int 0)))
        !          4423:              (set (match_dup 4) (plus:SI (match_dup 1) (const_int -1)))])
        !          4424:    (set (match_dup 0) (match_dup 4))
        !          4425:    (set (pc) (if_then_else (match_dup 7) (match_dup 5) (match_dup 6)))]
        !          4426:   "
        !          4427: { operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
        !          4428:                         const0_rtx); }")
        !          4429: 
        !          4430: ;;- Local variables:
        !          4431: ;;- mode:emacs-lisp
        !          4432: ;;- comment-start: ";;- "
        !          4433: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
        !          4434: ;;- eval: (modify-syntax-entry ?[ "(]")
        !          4435: ;;- eval: (modify-syntax-entry ?] ")[")
        !          4436: ;;- eval: (modify-syntax-entry ?{ "(}")
        !          4437: ;;- eval: (modify-syntax-entry ?} "){")
        !          4438: ;;- End:

unix.superglobalmegacorp.com

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