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

unix.superglobalmegacorp.com

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