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

unix.superglobalmegacorp.com

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