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

1.1     ! root        1: ;;- Machine description for DEC Alpha for GNU C compiler
        !             2: ;;   Copyright (C) 1992 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, among other purposes.  For the most part, we use the names
        !            25: ;; defined in the EV4 documentation, but add a few that we have to know about
        !            26: ;; separately.
        !            27: 
        !            28: (define_attr "type"
        !            29:   "ld,st,ibr,fbr,jsr,iaddlog,shiftcm,icmp,imull,imulq,fpop,fdivs,fdivt,ldsym"
        !            30:   (const_string "shiftcm"))
        !            31: 
        !            32: ;; We include four function units: ABOX, which computes the address,
        !            33: ;; BBOX, used for branches, EBOX, used for integer operations, and FBOX,
        !            34: ;; used for FP operations.
        !            35: ;;
        !            36: ;; We assume that we have been successful in getting double issues and
        !            37: ;; hence multiply all costs by two insns per cycle.  The minimum time in
        !            38: ;; a function unit is 2 cycle, which will tend to produce the double
        !            39: ;; issues.
        !            40: 
        !            41: ;; Memory delivers its result in three cycles.
        !            42: (define_function_unit "abox" 1 0 (eq_attr "type" "ld,ldsym,st") 6 2)
        !            43: 
        !            44: ;; Branches have no delay cost, but do tie up the unit for two cycles.
        !            45: (define_function_unit "bbox" 1 1 (eq_attr "type" "ibr,fbr,jsr") 4 4)
        !            46: 
        !            47: ;; Arithmetic insns are normally have their results available after two
        !            48: ;; cycles.  There are a number of exceptions.  They are encoded in
        !            49: ;; ADJUST_COST.  Some of the other insns have similar exceptions.
        !            50: 
        !            51: (define_function_unit "ebox" 1 0 (eq_attr "type" "iaddlog,shiftcm,icmp") 4 2)
        !            52: 
        !            53: ;; These really don't take up the integer pipeline, but they do occupy
        !            54: ;; IBOX1; we approximate here.
        !            55: 
        !            56: (define_function_unit "ebox" 1 0 (eq_attr "type" "imull") 42 2)
        !            57: (define_function_unit "ebox" 1 0 (eq_attr "type" "imulq") 46 2)
        !            58: 
        !            59: (define_function_unit "imult" 1 0 (eq_attr "type" "imull") 42 38)
        !            60: (define_function_unit "imult" 1 0 (eq_attr "type" "imulq") 46 42)
        !            61: 
        !            62: (define_function_unit "fbox" 1 0 (eq_attr "type" "fpop") 12 2)
        !            63: 
        !            64: (define_function_unit "fbox" 1 0 (eq_attr "type" "fdivs") 68 0)
        !            65: (define_function_unit "fbox" 1 0 (eq_attr "type" "fdivt") 126 0)
        !            66: 
        !            67: (define_function_unit "divider" 1 0 (eq_attr "type" "fdivs") 68 60)
        !            68: (define_function_unit "divider" 1 0 (eq_attr "type" "fdivt") 126 118)
        !            69: 
        !            70: ;; First define the arithmetic insns.  Note that the 32-bit forms also
        !            71: ;; sign-extend.
        !            72: 
        !            73: ;; Note that we can do sign extensions in both FP and integer registers.
        !            74: ;; However, the result must be in the same type of register as the input.
        !            75: ;; The register preferencing code can't handle this case very well, so, for
        !            76: ;; now, don't let the FP case show up here for preferencing.
        !            77: (define_insn "extendsidi2"
        !            78:   [(set (match_operand:DI 0 "register_operand" "=r,r,f")
        !            79:        (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "r,m,f")))]
        !            80:   ""
        !            81:   "@
        !            82:    addl %1,$31,%0
        !            83:    ldl %0,%1
        !            84:    cvtlq %1,%0"
        !            85:   [(set_attr "type" "iaddlog,ld,fpop")])
        !            86: 
        !            87: (define_insn "addsi3"
        !            88:   [(set (match_operand:SI 0 "register_operand" "=r,r,r")
        !            89:        (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,%rJ,%rJ")
        !            90:                 (match_operand:SI 2 "add_operand" "rI,K,L")))]
        !            91:   ""
        !            92:   "@
        !            93:    addl %r1,%2,%0
        !            94:    lda %0,%2(%r1)
        !            95:    ldah %0,%h2(%r1)"
        !            96:   [(set_attr "type" "iaddlog")])
        !            97: 
        !            98: (define_split
        !            99:   [(set (match_operand:SI 0 "register_operand" "")
        !           100:        (plus:SI (match_operand:SI 1 "register_operand" "")
        !           101:                 (match_operand:SI 2 "const_int_operand" "")))]
        !           102:   "! add_operand (operands[2], SImode)"
        !           103:   [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
        !           104:    (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
        !           105:   "
        !           106: {
        !           107:   HOST_WIDE_INT val = INTVAL (operands[2]);
        !           108:   HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000);
        !           109:   HOST_WIDE_INT rest = val - low;
        !           110: 
        !           111:   operands[3] = GEN_INT (rest);
        !           112:   operands[4] = GEN_INT (low);
        !           113: }")
        !           114: 
        !           115: (define_insn ""
        !           116:   [(set (match_operand:DI 0 "register_operand" "=r,r")
        !           117:        (sign_extend:DI
        !           118:         (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,rJ")
        !           119:                  (match_operand:SI 2 "sext_add_operand" "rI,O"))))]
        !           120:   ""
        !           121:   "@
        !           122:    addl %r1,%2,%0
        !           123:    subl %r1,%n2,%0"
        !           124:   [(set_attr "type" "iaddlog")])
        !           125: 
        !           126: (define_insn "adddi3"
        !           127:   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
        !           128:        (plus:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,%rJ,%rJ")
        !           129:                 (match_operand:DI 2 "add_operand" "rI,K,L")))]
        !           130:   ""
        !           131:   "@
        !           132:    addq %r1,%2,%0
        !           133:    lda %0,%2(%r1)
        !           134:    ldah %0,%h2(%r1)"
        !           135:   [(set_attr "type" "iaddlog")])
        !           136: 
        !           137: (define_split
        !           138:   [(set (match_operand:DI 0 "register_operand" "")
        !           139:        (plus:DI (match_operand:DI 1 "register_operand" "")
        !           140:                 (match_operand:DI 2 "const_int_operand" "")))]
        !           141:   "! add_operand (operands[2], DImode)"
        !           142:   [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 3)))
        !           143:    (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))]
        !           144:   "
        !           145: {
        !           146:   HOST_WIDE_INT val = INTVAL (operands[2]);
        !           147:   HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000);
        !           148:   HOST_WIDE_INT rest = val - low;
        !           149: 
        !           150:   operands[3] = GEN_INT (rest);
        !           151:   operands[4] = GEN_INT (low);
        !           152: }")
        !           153: 
        !           154: (define_insn ""
        !           155:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           156:        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           157:                          (match_operand:SI 2 "const48_operand" "I"))
        !           158:                 (match_operand:SI 3 "reg_or_8bit_operand" "rI")))]
        !           159:   ""
        !           160:   "s%2addl %r1,%3,%0"
        !           161:   [(set_attr "type" "iaddlog")])
        !           162: 
        !           163: (define_insn ""
        !           164:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           165:        (sign_extend:DI
        !           166:         (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           167:                           (match_operand:SI 2 "const48_operand" "I"))
        !           168:                  (match_operand:SI 3 "reg_or_8bit_operand" "rI"))))]
        !           169:   ""
        !           170:   "s%2addl %r1,%3,%0"
        !           171:   [(set_attr "type" "iaddlog")])
        !           172: 
        !           173: (define_insn ""
        !           174:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           175:        (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           176:                          (match_operand:DI 2 "const48_operand" "I"))
        !           177:                 (match_operand:DI 3 "reg_or_8bit_operand" "rI")))]
        !           178:   ""
        !           179:   "s%2addq %r1,%3,%0"
        !           180:   [(set_attr "type" "iaddlog")])
        !           181: 
        !           182: ;; These variants of the above insns can occur if the third operand
        !           183: ;; is the frame pointer.  This is a kludge, but there doesn't
        !           184: ;; seem to be a way around it.  Only recognize them while reloading.
        !           185: 
        !           186: (define_insn ""
        !           187:   [(set (match_operand:SI 0 "register_operand" "=&r")
        !           188:        (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           189:                                   (match_operand:SI 2 "const48_operand" "I"))
        !           190:                          (match_operand:SI 3 "register_operand" "r"))
        !           191:                 (match_operand:SI 4 "const_int_operand" "rI")))]
        !           192:   "reload_in_progress"
        !           193:   "s%2addl %r1,%3,%0\;addl %0,%4,%0"
        !           194:   [(set_attr "type" "iaddlog")])
        !           195: 
        !           196: (define_insn ""
        !           197:   [(set (match_operand:DI 0 "register_operand" "=&r")
        !           198:        (sign_extend:DI
        !           199:         (plus:SI (plus:SI
        !           200:                   (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           201:                            (match_operand:SI 2 "const48_operand" "I"))
        !           202:                   (match_operand:SI 3 "register_operand" "r"))
        !           203:                  (match_operand:SI 4 "const_int_operand" "rI"))))]
        !           204:   "reload_in_progress"
        !           205:   "s%2addl %r1,%3,%0\;addl %0,%4,%0"
        !           206:   [(set_attr "type" "iaddlog")])
        !           207: 
        !           208: (define_insn ""
        !           209:   [(set (match_operand:DI 0 "register_operand" "=&r")
        !           210:        (plus:DI (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           211:                                   (match_operand:DI 2 "const48_operand" "I"))
        !           212:                          (match_operand:DI 3 "register_operand" "r"))
        !           213:                 (match_operand:DI 4 "const_int_operand" "rI")))]
        !           214:   "reload_in_progress"
        !           215:   "s%2addq %r1,%3,%0\;addq %0,%4,%0"
        !           216:   [(set_attr "type" "iaddlog")])
        !           217: 
        !           218: (define_insn "negsi2"
        !           219:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           220:        (neg:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI")))]
        !           221:   ""
        !           222:   "subl $31,%1,%0"
        !           223:   [(set_attr "type" "iaddlog")])
        !           224: 
        !           225: (define_insn ""
        !           226:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           227:        (sign_extend:DI (neg:SI
        !           228:                         (match_operand:SI 1 "reg_or_8bit_operand" "rI"))))]
        !           229:   ""
        !           230:   "subl $31,%1,%0"
        !           231:   [(set_attr "type" "iaddlog")])
        !           232: 
        !           233: (define_insn "negdi2"
        !           234:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           235:        (neg:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")))]
        !           236:   ""
        !           237:   "subq $31,%1,%0"
        !           238:   [(set_attr "type" "iaddlog")])
        !           239: 
        !           240: (define_insn "subsi3"
        !           241:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           242:        (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           243:                  (match_operand:SI 2 "reg_or_8bit_operand" "rI")))]
        !           244:   ""
        !           245:   "subl %r1,%2,%0"
        !           246:   [(set_attr "type" "iaddlog")])
        !           247: 
        !           248: (define_insn ""
        !           249:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           250:        (sign_extend:DI (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           251:                                  (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))]
        !           252:   ""
        !           253:   "subl %r1,%2,%0"
        !           254:   [(set_attr "type" "iaddlog")])
        !           255: 
        !           256: (define_insn "subdi3"
        !           257:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           258:        (minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           259:                  (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
        !           260:   ""
        !           261:   "subq %r1,%2,%0"
        !           262:   [(set_attr "type" "iaddlog")])
        !           263: 
        !           264: (define_insn ""
        !           265:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           266:        (minus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           267:                           (match_operand:SI 2 "const48_operand" "I"))
        !           268:                  (match_operand:SI 3 "reg_or_8bit_operand" "rI")))]
        !           269:   ""
        !           270:   "s%2subl %r1,%3,%0"
        !           271:   [(set_attr "type" "iaddlog")])
        !           272: 
        !           273: (define_insn ""
        !           274:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           275:        (sign_extend:DI
        !           276:         (minus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
        !           277:                            (match_operand:SI 2 "const48_operand" "I"))
        !           278:                   (match_operand:SI 3 "reg_or_8bit_operand" "rI"))))]
        !           279:   ""
        !           280:   "s%2subl %r1,%3,%0"
        !           281:   [(set_attr "type" "iaddlog")])
        !           282: 
        !           283: (define_insn ""
        !           284:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           285:        (minus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           286:                           (match_operand:DI 2 "const48_operand" "I"))
        !           287:                  (match_operand:DI 3 "reg_or_8bit_operand" "rI")))]
        !           288:   ""
        !           289:   "s%2subq %r1,%3,%0"
        !           290:   [(set_attr "type" "iaddlog")])
        !           291: 
        !           292: (define_insn "mulsi3"
        !           293:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           294:        (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ")
        !           295:                 (match_operand:SI 2 "reg_or_8bit_operand" "rI")))]
        !           296:   ""
        !           297:   "mull %r1,%2,%0"
        !           298:   [(set_attr "type" "imull")])
        !           299: 
        !           300: (define_insn ""
        !           301:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           302:        (sign_extend:DI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ")
        !           303:                                 (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))]
        !           304:   ""
        !           305:   "mull %r1,%2,%0"
        !           306:   [(set_attr "type" "imull")])
        !           307: 
        !           308: (define_insn "muldi3"
        !           309:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           310:        (mult:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ")
        !           311:                 (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
        !           312:   ""
        !           313:   "mulq %r1,%2,%0"
        !           314:   [(set_attr "type" "imulq")])
        !           315: 
        !           316: ;; The divide and remainder operations always take their inputs from
        !           317: ;; r24 and r25, put their output in r27, and clobber r23.
        !           318: 
        !           319: (define_expand "divsi3"
        !           320:   [(parallel [(set (reg:SI 27)
        !           321:                   (div:SI (match_operand:SI 1 "general_operand" "")
        !           322:                           (match_operand:SI 2 "general_operand" "")))
        !           323:              (clobber (reg:DI 23))])
        !           324:    (set (match_operand:SI 0 "general_operand" "")
        !           325:        (reg:SI 27))]
        !           326:   ""
        !           327:   "
        !           328: { rtx in0 = gen_rtx (REG, SImode, 24);
        !           329:   rtx in1 = gen_rtx (REG, SImode, 25);
        !           330: 
        !           331:   emit_move_insn (in0, operands[1]);
        !           332:   emit_move_insn (in1, operands[2]);
        !           333:   operands[1] = in0, operands[2] = in1;
        !           334: }")
        !           335: 
        !           336: (define_expand "udivsi3"
        !           337:   [(parallel [(set (reg:SI 27)
        !           338:                   (udiv:SI (match_operand:SI 1 "general_operand" "")
        !           339:                            (match_operand:SI 2 "general_operand" "")))
        !           340:              (clobber (reg:DI 23))])
        !           341:    (set (match_operand:SI 0 "general_operand" "")
        !           342:        (reg:SI 27))]
        !           343:   ""
        !           344:   "
        !           345: { rtx in0 = gen_rtx (REG, SImode, 24);
        !           346:   rtx in1 = gen_rtx (REG, SImode, 25);
        !           347: 
        !           348:   emit_move_insn (in0, operands[1]);
        !           349:   emit_move_insn (in1, operands[2]);
        !           350:   operands[1] = in0, operands[2] = in1;
        !           351: }")
        !           352: 
        !           353: (define_expand "modsi3"
        !           354:   [(parallel [(set (reg:SI 27)
        !           355:                   (mod:SI (match_operand:SI 1 "general_operand" "")
        !           356:                           (match_operand:SI 2 "general_operand" "")))
        !           357:              (clobber (reg:DI 23))])
        !           358:    (set (match_operand:SI 0 "general_operand" "")
        !           359:        (reg:SI 27))]
        !           360:   ""
        !           361:   "
        !           362: { rtx in0 = gen_rtx (REG, SImode, 24);
        !           363:   rtx in1 = gen_rtx (REG, SImode, 25);
        !           364: 
        !           365:   emit_move_insn (in0, operands[1]);
        !           366:   emit_move_insn (in1, operands[2]);
        !           367:   operands[1] = in0, operands[2] = in1;
        !           368: }")
        !           369: 
        !           370: (define_expand "umodsi3"
        !           371:   [(parallel [(set (reg:SI 27)
        !           372:                   (umod:SI (match_operand:SI 1 "general_operand" "")
        !           373:                            (match_operand:SI 2 "general_operand" "")))
        !           374:              (clobber (reg:DI 23))])
        !           375:    (set (match_operand:SI 0 "general_operand" "")
        !           376:        (reg:SI 27))]
        !           377:   ""
        !           378:   "
        !           379: { rtx in0 = gen_rtx (REG, SImode, 24);
        !           380:   rtx in1 = gen_rtx (REG, SImode, 25);
        !           381: 
        !           382:   emit_move_insn (in0, operands[1]);
        !           383:   emit_move_insn (in1, operands[2]);
        !           384:   operands[1] = in0, operands[2] = in1;
        !           385: }")
        !           386: 
        !           387: (define_expand "divdi3"
        !           388:   [(parallel [(set (reg:DI 27)
        !           389:                   (div:DI (match_operand:DI 1 "general_operand" "")
        !           390:                           (match_operand:DI 2 "general_operand" "")))
        !           391:              (clobber (reg:DI 23))])
        !           392:    (set (match_operand:DI 0 "general_operand" "")
        !           393:        (reg:DI 27))]
        !           394:   ""
        !           395:   "
        !           396: { rtx in0 = gen_rtx (REG, DImode, 24);
        !           397:   rtx in1 = gen_rtx (REG, DImode, 25);
        !           398: 
        !           399:   emit_move_insn (in0, operands[1]);
        !           400:   emit_move_insn (in1, operands[2]);
        !           401:   operands[1] = in0, operands[2] = in1;
        !           402: }")
        !           403: 
        !           404: (define_expand "udivdi3"
        !           405:   [(parallel [(set (reg:DI 27)
        !           406:                   (udiv:DI (match_operand:DI 1 "general_operand" "")
        !           407:                            (match_operand:DI 2 "general_operand" "")))
        !           408:              (clobber (reg:DI 23))])
        !           409:    (set (match_operand:DI 0 "general_operand" "")
        !           410:        (reg:DI 27))]
        !           411:   ""
        !           412:   "
        !           413: { rtx in0 = gen_rtx (REG, DImode, 24);
        !           414:   rtx in1 = gen_rtx (REG, DImode, 25);
        !           415: 
        !           416:   emit_move_insn (in0, operands[1]);
        !           417:   emit_move_insn (in1, operands[2]);
        !           418:   operands[1] = in0, operands[2] = in1;
        !           419: }")
        !           420: 
        !           421: (define_expand "moddi3"
        !           422:   [(parallel [(set (reg:DI 27)
        !           423:                   (mod:DI (match_operand:DI 1 "general_operand" "")
        !           424:                           (match_operand:DI 2 "general_operand" "")))
        !           425:              (clobber (reg:DI 23))])
        !           426:    (set (match_operand:DI 0 "general_operand" "")
        !           427:        (reg:DI 27))]
        !           428:   ""
        !           429:   "
        !           430: { rtx in0 = gen_rtx (REG, DImode, 24);
        !           431:   rtx in1 = gen_rtx (REG, DImode, 25);
        !           432: 
        !           433:   emit_move_insn (in0, operands[1]);
        !           434:   emit_move_insn (in1, operands[2]);
        !           435:   operands[1] = in0, operands[2] = in1;
        !           436: }")
        !           437: 
        !           438: (define_expand "umoddi3"
        !           439:   [(parallel [(set (reg:DI 27)
        !           440:                   (umod:DI (match_operand:DI 1 "general_operand" "")
        !           441:                            (match_operand:DI 2 "general_operand" "")))
        !           442:              (clobber (reg:DI 23))])
        !           443:    (set (match_operand:DI 0 "general_operand" "")
        !           444:        (reg:DI 27))]
        !           445:   ""
        !           446:   "
        !           447: { rtx in0 = gen_rtx (REG, DImode, 24);
        !           448:   rtx in1 = gen_rtx (REG, DImode, 25);
        !           449: 
        !           450:   emit_move_insn (in0, operands[1]);
        !           451:   emit_move_insn (in1, operands[2]);
        !           452:   operands[1] = in0, operands[2] = in1;
        !           453: }")
        !           454: 
        !           455: (define_insn ""
        !           456:   [(set (reg:SI 27)
        !           457:        (match_operator:SI 1 "divmod_operator"
        !           458:                        [(reg:SI 24) (reg:SI 25)]))
        !           459:    (clobber (reg:DI 23))]
        !           460:   ""
        !           461:   "%E1 $24,$25,$27")
        !           462: 
        !           463: (define_insn ""
        !           464:   [(set (reg:DI 27)
        !           465:        (match_operator:DI 1 "divmod_operator"
        !           466:                        [(reg:DI 24) (reg:DI 25)]))
        !           467:    (clobber (reg:DI 23))]
        !           468:   ""
        !           469:   "%E1 $24,$25,$27")
        !           470: 
        !           471: ;; Next are the basic logical operations.  These only exist in DImode.
        !           472: 
        !           473: (define_insn "anddi3"
        !           474:   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
        !           475:        (and:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ,rJ")
        !           476:                (match_operand:DI 2 "and_operand" "rI,N,MH")))]
        !           477:   ""
        !           478:   "@
        !           479:    and %r1,%2,%0
        !           480:    bic %r1,%N2,%0
        !           481:    zapnot %r1,%m2,%0"
        !           482:   [(set_attr "type" "iaddlog,iaddlog,shiftcm")])
        !           483: 
        !           484: ;; There are times when we can split and AND into two AND insns.  This occurs
        !           485: ;; when we can first clear any bytes and then clear anything else.  For
        !           486: ;; example "I & 0xffff07" is "(I & 0xffffff) & 0xffffffffffffff07".
        !           487: ;; Only to this when running on 64-bit host since the computations are
        !           488: ;; too messy otherwise.
        !           489: 
        !           490: (define_split
        !           491:   [(set (match_operand:DI 0 "register_operand" "")
        !           492:        (and:DI (match_operand:DI 1 "register_operand" "")
        !           493:                (match_operand:DI 2 "const_int_operand" "")))]
        !           494:   "HOST_BITS_PER_WIDE_INT == 64 && ! and_operand (operands[2], DImode)"
        !           495:   [(set (match_dup 0) (and:DI (match_dup 1) (match_dup 3)))
        !           496:    (set (match_dup 0) (and:DI (match_dup 0) (match_dup 4)))]
        !           497:   "
        !           498: {
        !           499:   unsigned HOST_WIDE_INT mask1 = INTVAL (operands[2]);
        !           500:   unsigned HOST_WIDE_INT mask2 = mask1;
        !           501:   int i;
        !           502: 
        !           503:   /* For each byte that isn't all zeros, make it all ones.  */
        !           504:   for (i = 0; i < 64; i += 8)
        !           505:     if ((mask1 & ((HOST_WIDE_INT) 0xff << i)) != 0)
        !           506:       mask1 |= (HOST_WIDE_INT) 0xff << i;
        !           507: 
        !           508:   /* Now turn on any bits we've just turned off.  */
        !           509:   mask2 |= ~ mask1;
        !           510: 
        !           511:   operands[3] = GEN_INT (mask1);
        !           512:   operands[4] = GEN_INT (mask2);
        !           513: }")
        !           514: 
        !           515: (define_insn "zero_extendqihi2"
        !           516:   [(set (match_operand:HI 0 "register_operand" "=r")
        !           517:        (zero_extend:HI (match_operand:QI 1 "register_operand" "r")))]
        !           518:   ""
        !           519:   "zapnot %1,1,%0"
        !           520:   [(set_attr "type" "iaddlog")])
        !           521: 
        !           522: (define_insn "zero_extendqisi2"
        !           523:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           524:        (zero_extend:SI (match_operand:QI 1 "register_operand" "r")))]
        !           525:   ""
        !           526:   "zapnot %1,1,%0"
        !           527:   [(set_attr "type" "iaddlog")])
        !           528: 
        !           529: (define_insn "zero_extendqidi2"
        !           530:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           531:        (zero_extend:DI (match_operand:QI 1 "register_operand" "r")))]
        !           532:   ""
        !           533:   "zapnot %1,1,%0"
        !           534:   [(set_attr "type" "iaddlog")])
        !           535: 
        !           536: (define_insn "zero_extendhisi2"
        !           537:   [(set (match_operand:SI 0 "register_operand" "=r")
        !           538:        (zero_extend:SI (match_operand:HI 1 "register_operand" "r")))]
        !           539:   ""
        !           540:   "zapnot %1,3,%0"
        !           541:   [(set_attr "type" "iaddlog")])
        !           542: 
        !           543: (define_insn "zero_extendhidi2"
        !           544:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           545:        (zero_extend:DI (match_operand:HI 1 "register_operand" "r")))]
        !           546:   ""
        !           547:   "zapnot %1,3,%0"
        !           548:   [(set_attr "type" "iaddlog")])
        !           549: 
        !           550: (define_insn "zero_extendsidi2"
        !           551:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           552:        (zero_extend:DI (match_operand:SI 1 "register_operand" "r")))]
        !           553:   ""
        !           554:   "zapnot %1,15,%0"
        !           555:   [(set_attr "type" "iaddlog")])
        !           556: 
        !           557: (define_insn  ""
        !           558:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           559:        (and:DI (not:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI"))
        !           560:                (match_operand:DI 2 "reg_or_0_operand" "rJ")))]
        !           561:   ""
        !           562:   "bic %r2,%1,%0"
        !           563:   [(set_attr "type" "iaddlog")])
        !           564: 
        !           565: (define_insn "iordi3"
        !           566:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           567:        (ior:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ")
        !           568:                (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
        !           569:   ""
        !           570:   "bis %r1,%2,%0"
        !           571:   [(set_attr "type" "iaddlog")])
        !           572: 
        !           573: (define_insn "one_cmpldi2"
        !           574:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           575:        (not:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")))]
        !           576:   ""
        !           577:   "ornot $31,%1,%0"
        !           578:   [(set_attr "type" "iaddlog")])
        !           579: 
        !           580: (define_insn ""
        !           581:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           582:        (ior:DI (not:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI"))
        !           583:                (match_operand:DI 2 "reg_or_0_operand" "rJ")))]
        !           584:   ""
        !           585:   "ornot %r2,%1,%0"
        !           586:   [(set_attr "type" "iaddlog")])
        !           587: 
        !           588: (define_insn "xordi3"
        !           589:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           590:        (xor:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           591:                (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
        !           592:   ""
        !           593:   "xor %r1,%2,%0"
        !           594:   [(set_attr "type" "iaddlog")])
        !           595: 
        !           596: (define_insn ""
        !           597:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           598:        (not:DI (xor:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           599:                        (match_operand:DI 2 "reg_or_8bit_operand" "rI"))))]
        !           600:   ""
        !           601:   "eqv %r1,%2,%0"
        !           602:   [(set_attr "type" "iaddlog")])
        !           603: 
        !           604: ;; Next come the shifts and the various extract and insert operations.
        !           605: 
        !           606: (define_insn "ashldi3"
        !           607:   [(set (match_operand:DI 0 "register_operand" "=r,r")
        !           608:        (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ")
        !           609:                   (match_operand:DI 2 "reg_or_8bit_operand" "P,rI")))]
        !           610:   ""
        !           611:   "*
        !           612: {
        !           613:   switch (which_alternative)
        !           614:     {
        !           615:     case 0:
        !           616:       if (operands[2] == const1_rtx)
        !           617:        return \"addq %r1,%r1,%0\";
        !           618:       else
        !           619:        return \"s%P2addq %r1,0,%0\";
        !           620:     case 1:
        !           621:       return \"sll %r1,%2,%0\";
        !           622:     }
        !           623: }"
        !           624:   [(set_attr "type" "iaddlog,shiftcm")])
        !           625: 
        !           626: ;; This is the same as (sign_extend (shift X [123])).
        !           627: (define_insn ""
        !           628:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           629:        (ashiftrt:DI (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           630:                                (match_operand:DI 2 "const_int_operand" "i"))
        !           631:                     (const_int 32)))]
        !           632:   "INTVAL (operands[2]) >= 33 && INTVAL (operands[2]) <= 35"
        !           633:   "*
        !           634: {
        !           635:   switch (INTVAL (operands[2]))
        !           636:     {
        !           637:     case 33:
        !           638:       return \"addl %r1,%r1,%0\";
        !           639:     case 34:
        !           640:       return \"s4addl %r1,0,%0\";
        !           641:     case 35:
        !           642:       return \"s8addl %r1,0,%0\";
        !           643:     default:
        !           644:       abort ();
        !           645:     }
        !           646: }"
        !           647:   [(set_attr "type" "iaddlog")])
        !           648:                          
        !           649: (define_insn "lshrdi3"
        !           650:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           651:        (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           652:                     (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
        !           653:   ""
        !           654:   "srl %r1,%2,%0")
        !           655: 
        !           656: (define_insn "ashrdi3"
        !           657:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           658:        (ashiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           659:                     (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
        !           660:   ""
        !           661:   "sra %r1,%2,%0")
        !           662: 
        !           663: (define_expand "extendqihi2"
        !           664:   [(set (match_dup 2)
        !           665:        (ashift:DI (match_operand:QI 1 "register_operand" "")
        !           666:                   (const_int 56)))
        !           667:    (set (match_operand:HI 0 "register_operand" "")
        !           668:        (ashiftrt:DI (match_dup 2)
        !           669:                     (const_int 56)))]
        !           670:   ""
        !           671:   "
        !           672: { operands[0] = gen_lowpart (DImode, operands[0]);
        !           673:   operands[1] = gen_lowpart (DImode, operands[1]);
        !           674:   operands[2] = gen_reg_rtx (DImode);
        !           675: }")
        !           676: 
        !           677: (define_expand "extendqisi2"
        !           678:   [(set (match_dup 2)
        !           679:        (ashift:DI (match_operand:QI 1 "register_operand" "")
        !           680:                   (const_int 56)))
        !           681:    (set (match_operand:SI 0 "register_operand" "")
        !           682:        (ashiftrt:DI (match_dup 2)
        !           683:                     (const_int 56)))]
        !           684:   ""
        !           685:   "
        !           686: { operands[0] = gen_lowpart (DImode, operands[0]);
        !           687:   operands[1] = gen_lowpart (DImode, operands[1]);
        !           688:   operands[2] = gen_reg_rtx (DImode);
        !           689: }")
        !           690: 
        !           691: (define_expand "extendqidi2"
        !           692:   [(set (match_dup 2)
        !           693:        (ashift:DI (match_operand:QI 1 "register_operand" "")
        !           694:                   (const_int 56)))
        !           695:    (set (match_operand:DI 0 "register_operand" "")
        !           696:        (ashiftrt:DI (match_dup 2)
        !           697:                     (const_int 56)))]
        !           698:   ""
        !           699:   "
        !           700: { operands[1] = gen_lowpart (DImode, operands[1]);
        !           701:   operands[2] = gen_reg_rtx (DImode);
        !           702: }")
        !           703: 
        !           704: (define_expand "extendhisi2"
        !           705:   [(set (match_dup 2)
        !           706:        (ashift:DI (match_operand:HI 1 "register_operand" "")
        !           707:                   (const_int 48)))
        !           708:    (set (match_operand:SI 0 "register_operand" "")
        !           709:        (ashiftrt:DI (match_dup 2)
        !           710:                     (const_int 48)))]
        !           711:   ""
        !           712:   "
        !           713: { operands[0] = gen_lowpart (DImode, operands[0]);
        !           714:   operands[1] = gen_lowpart (DImode, operands[1]);
        !           715:   operands[2] = gen_reg_rtx (DImode);
        !           716: }")
        !           717: 
        !           718: (define_expand "extendhidi2"
        !           719:   [(set (match_dup 2)
        !           720:        (ashift:DI (match_operand:HI 1 "register_operand" "")
        !           721:                   (const_int 48)))
        !           722:    (set (match_operand:DI 0 "register_operand" "")
        !           723:        (ashiftrt:DI (match_dup 2)
        !           724:                     (const_int 48)))]
        !           725:   ""
        !           726:   "
        !           727: { operands[1] = gen_lowpart (DImode, operands[1]);
        !           728:   operands[2] = gen_reg_rtx (DImode);
        !           729: }")
        !           730: 
        !           731: (define_insn ""
        !           732:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           733:        (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           734:                         (match_operand:DI 2 "mode_width_operand" "n")
        !           735:                         (match_operand:DI 3 "mul8_operand" "I")))]
        !           736:   ""
        !           737:   "ext%M2l %r1,%s3,%0")
        !           738: 
        !           739: (define_insn ""
        !           740:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           741:        (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           742:                         (match_operand:DI 2 "mode_width_operand" "n")
        !           743:                         (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI")
        !           744:                                    (const_int 3))))]
        !           745:   ""
        !           746:   "ext%M2l %r1,%3,%0")
        !           747: 
        !           748: (define_insn ""
        !           749:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           750:        (ashift:DI
        !           751:         (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           752:                          (const_int 8)
        !           753:                          (ashift:DI
        !           754:                           (plus:DI
        !           755:                            (match_operand:DI 2 "reg_or_8bit_operand" "rI")
        !           756:                            (const_int -1))
        !           757:                           (const_int 3)))
        !           758:         (const_int 56)))]
        !           759:   ""
        !           760:   "extqh %r1,%2,%0")
        !           761: 
        !           762: (define_insn ""
        !           763:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           764:        (ashift:DI
        !           765:         (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           766:                          (const_int 16)
        !           767:                          (ashift:DI
        !           768:                           (plus:DI
        !           769:                            (match_operand:DI 2 "reg_or_8bit_operand" "rI")
        !           770:                            (const_int -2))
        !           771:                           (const_int 3)))
        !           772:         (const_int 48)))]
        !           773:   ""
        !           774:   "extwh %r1,%2,%0")
        !           775: 
        !           776: (define_insn ""
        !           777:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           778:        (ashift:DI
        !           779:         (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !           780:                          (const_int 32)
        !           781:                          (ashift:DI
        !           782:                           (plus:DI
        !           783:                            (match_operand:DI 2 "reg_or_8bit_operand" "rI")
        !           784:                            (const_int -4))
        !           785:                           (const_int 3)))
        !           786:         (const_int 32)))]
        !           787:   ""
        !           788:   "extlh %r1,%2,%0")
        !           789: 
        !           790: ;; This converts an extXl into an extXh with an appropriate adjustment
        !           791: ;; to the address calculation.
        !           792: 
        !           793: (define_split
        !           794:   [(set (match_operand:DI 0 "register_operand" "")
        !           795:        (ashift:DI (zero_extract:DI (match_operand:DI 1 "register_operand" "")
        !           796:                                    (match_operand:DI 2 "mode_width_operand" "")
        !           797:                                    (ashift:DI (match_operand:DI 3 "" "")
        !           798:                                               (const_int 3)))
        !           799:                   (match_operand:DI 4 "const_int_operand" "")))
        !           800:    (clobber (match_operand:DI 5 "register_operand" ""))]
        !           801:   "INTVAL (operands[4]) == 64 - INTVAL (operands[2])"
        !           802:   [(set (match_dup 5) (match_dup 6))
        !           803:    (set (match_dup 0)
        !           804:        (ashift:DI (zero_extract:DI (match_dup 1) (match_dup 2)
        !           805:                                    (ashift:DI (plus:DI (match_dup 5)
        !           806:                                                        (match_dup 7))
        !           807:                                               (const_int 3)))
        !           808:                   (match_dup 4)))]
        !           809:   "
        !           810: {
        !           811:   operands[6] = plus_constant (operands[3], 
        !           812:                               INTVAL (operands[2]) / BITS_PER_UNIT);
        !           813:   operands[7] = GEN_INT (- INTVAL (operands[2]) / BITS_PER_UNIT);
        !           814: }")
        !           815:   
        !           816: (define_insn ""
        !           817:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           818:        (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
        !           819:                   (match_operand:DI 2 "mul8_operand" "I")))]
        !           820:   ""
        !           821:   "insbl %1,%s2,%0")
        !           822: 
        !           823: (define_insn ""
        !           824:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           825:        (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
        !           826:                   (match_operand:DI 2 "mul8_operand" "I")))]
        !           827:   ""
        !           828:   "inswl %1,%s2,%0")
        !           829: 
        !           830: (define_insn ""
        !           831:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           832:        (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
        !           833:                   (match_operand:DI 2 "mul8_operand" "I")))]
        !           834:   ""
        !           835:   "insll %1,%s2,%0")
        !           836: 
        !           837: (define_insn ""
        !           838:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           839:        (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
        !           840:                   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
        !           841:                              (const_int 3))))]
        !           842:   ""
        !           843:   "insbl %1,%2,%0")
        !           844: 
        !           845: (define_insn ""
        !           846:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           847:        (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
        !           848:                   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
        !           849:                              (const_int 3))))]
        !           850:   ""
        !           851:   "inswl %1,%2,%0")
        !           852: 
        !           853: (define_insn ""
        !           854:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           855:        (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
        !           856:                   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
        !           857:                              (const_int 3))))]
        !           858:   ""
        !           859:   "insll %1,%2,%0")
        !           860: 
        !           861: ;; We do not include the insXh insns because they are complex to express
        !           862: ;; and it does not appear that we would ever want to generate them.
        !           863: 
        !           864: (define_insn ""
        !           865:   [(set (match_operand:DI 0 "register_operand" "=r")
        !           866:        (and:DI (ashift:DI
        !           867:                 (match_operand:DI 2 "mode_mask_operand" "n")
        !           868:                 (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI")
        !           869:                            (const_int 3)))
        !           870:                (match_operand:DI 1 "reg_or_0_operand" "rJ")))]
        !           871:   ""
        !           872:   "msk%U2l %r1,%3,%0")
        !           873: 
        !           874: ;; We do not include the mskXh insns because it does not appear we would ever
        !           875: ;; generate one.
        !           876: 
        !           877: ;; Floating-point operations.  All the double-precision insns can extend
        !           878: ;; from single, so indicate that.  The exception are the ones that simply
        !           879: ;; play with the sign bits; it's not clear what to do there.
        !           880: 
        !           881: (define_insn "abssf2"
        !           882:   [(set (match_operand:SF 0 "register_operand" "=f")
        !           883:        (abs:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))]
        !           884:   "TARGET_FP"
        !           885:   "cpys $f31,%R1,%0"
        !           886:   [(set_attr "type" "fpop")])
        !           887: 
        !           888: (define_insn "absdf2"
        !           889:   [(set (match_operand:DF 0 "register_operand" "=f")
        !           890:        (abs:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
        !           891:   "TARGET_FP"
        !           892:   "cpys $f31,%R1,%0"
        !           893:   [(set_attr "type" "fpop")])
        !           894: 
        !           895: (define_insn "negsf2"
        !           896:   [(set (match_operand:SF 0 "register_operand" "=f")
        !           897:        (neg:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))]
        !           898:   "TARGET_FP"
        !           899:   "cpysn %1,%R1,%0"
        !           900:   [(set_attr "type" "fpop")])
        !           901: 
        !           902: (define_insn "negdf2"
        !           903:   [(set (match_operand:DF 0 "register_operand" "=f")
        !           904:        (neg:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
        !           905:   "TARGET_FP"
        !           906:   "cpysn %1,%R1,%0"
        !           907:   [(set_attr "type" "fpop")])
        !           908: 
        !           909: (define_insn "addsf3"
        !           910:   [(set (match_operand:SF 0 "register_operand" "=f")
        !           911:        (plus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG")
        !           912:                 (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
        !           913:   "TARGET_FP"
        !           914:   "adds %R1,%R2,%0"
        !           915:   [(set_attr "type" "fpop")])
        !           916: 
        !           917: (define_insn "adddf3"
        !           918:   [(set (match_operand:DF 0 "register_operand" "=f")
        !           919:        (plus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG")
        !           920:                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !           921:   "TARGET_FP"
        !           922:   "addt %R1,%R2,%0"
        !           923:   [(set_attr "type" "fpop")])
        !           924: 
        !           925: (define_insn ""
        !           926:   [(set (match_operand:DF 0 "register_operand" "=f")
        !           927:        (plus:DF (float_extend:DF
        !           928:                  (match_operand:SF 1 "reg_or_fp0_operand" "%fG"))
        !           929:                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !           930:   "TARGET_FP"
        !           931:   "addt %R1,%R2,%0"
        !           932:   [(set_attr "type" "fpop")])
        !           933: 
        !           934: (define_insn ""
        !           935:   [(set (match_operand:DF 0 "register_operand" "=f")
        !           936:        (plus:DF (float_extend:DF
        !           937:                  (match_operand:SF 1 "reg_or_fp0_operand" "%fG"))
        !           938:                 (float_extend:DF
        !           939:                  (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
        !           940:   "TARGET_FP"
        !           941:   "addt %R1,%R2,%0"
        !           942:   [(set_attr "type" "fpop")])
        !           943: 
        !           944: (define_insn "fix_truncdfdi2"
        !           945:   [(set (match_operand:DI 0 "register_operand" "=f")
        !           946:        (fix:DI (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
        !           947:   "TARGET_FP"
        !           948:   "cvttq %R1,%0"
        !           949:   [(set_attr "type" "fpop")])
        !           950: 
        !           951: (define_insn "fix_truncsfdi2"
        !           952:   [(set (match_operand:DI 0 "register_operand" "=f")
        !           953:        (fix:DI (float_extend:DF
        !           954:                 (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))]
        !           955:   "TARGET_FP"
        !           956:   "cvttq %R1,%0"
        !           957:   [(set_attr "type" "fpop")])
        !           958: 
        !           959: (define_insn "floatdisf2"
        !           960:   [(set (match_operand:SF 0 "register_operand" "=f")
        !           961:        (float:SF (match_operand:DI 1 "register_operand" "f")))]
        !           962:   "TARGET_FP"
        !           963:   "cvtqs %1,%0"
        !           964:   [(set_attr "type" "fpop")])
        !           965: 
        !           966: (define_insn "floatdidf2"
        !           967:   [(set (match_operand:DF 0 "register_operand" "=f")
        !           968:        (float:DF (match_operand:DI 1 "register_operand" "f")))]
        !           969:   "TARGET_FP"
        !           970:   "cvtqt %1,%0"
        !           971:   [(set_attr "type" "fpop")])
        !           972: 
        !           973: (define_insn "extendsfdf2"
        !           974:   [(set (match_operand:DF 0 "register_operand" "=f,f")
        !           975:        (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "f,m")))]
        !           976:   "TARGET_FP"
        !           977:   "@
        !           978:    addt $f31,%1,%0
        !           979:    lds %0,%1"
        !           980:   [(set_attr "type" "fpop,ld")])
        !           981: 
        !           982: (define_insn "truncdfsf2"
        !           983:   [(set (match_operand:SF 0 "register_operand" "=f")
        !           984:        (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
        !           985:   "TARGET_FP"
        !           986:   "cvtts %R1,%0"
        !           987:   [(set_attr "type" "fpop")])
        !           988: 
        !           989: (define_insn "divsf3"
        !           990:   [(set (match_operand:SF 0 "register_operand" "=f")
        !           991:        (div:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")
        !           992:                (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
        !           993:   "TARGET_FP"
        !           994:   "divs %R1,%R2,%0"
        !           995:   [(set_attr "type" "fdivs")])
        !           996: 
        !           997: (define_insn "divdf3"
        !           998:   [(set (match_operand:DF 0 "register_operand" "=f")
        !           999:        (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")
        !          1000:                (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !          1001:   "TARGET_FP"
        !          1002:   "divt %R1,%R2,%0"
        !          1003:   [(set_attr "type" "fdivt")])
        !          1004: 
        !          1005: (define_insn ""
        !          1006:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1007:        (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG"))
        !          1008:                (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !          1009:   "TARGET_FP"
        !          1010:   "divt %R1,%R2,%0"
        !          1011:   [(set_attr "type" "fdivt")])
        !          1012: 
        !          1013: (define_insn ""
        !          1014:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1015:        (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")
        !          1016:                (float_extend:DF
        !          1017:                 (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
        !          1018:   "TARGET_FP"
        !          1019:   "divt %R1,%R2,%0"
        !          1020:   [(set_attr "type" "fdivt")])
        !          1021: 
        !          1022: (define_insn ""
        !          1023:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1024:        (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG"))
        !          1025:                (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
        !          1026:   "TARGET_FP"
        !          1027:   "divt %R1,%R2,%0"
        !          1028:   [(set_attr "type" "fdivt")])
        !          1029: 
        !          1030: (define_insn "mulsf3"
        !          1031:   [(set (match_operand:SF 0 "register_operand" "=f")
        !          1032:        (mult:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")
        !          1033:                 (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
        !          1034:   "TARGET_FP"
        !          1035:   "muls %R1,%R2,%0"
        !          1036:   [(set_attr "type" "fpop")])
        !          1037: 
        !          1038: (define_insn "muldf3"
        !          1039:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1040:        (mult:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")
        !          1041:                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !          1042:   "TARGET_FP"
        !          1043:   "mult %R1,%R2,%0"
        !          1044:   [(set_attr "type" "fpop")])
        !          1045: 
        !          1046: (define_insn ""
        !          1047:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1048:        (mult:DF (float_extend:DF
        !          1049:                  (match_operand:SF 1 "reg_or_fp0_operand" "fG"))
        !          1050:                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !          1051:   "TARGET_FP"
        !          1052:   "mult %R1,%R2,%0"
        !          1053:   [(set_attr "type" "fpop")])
        !          1054: 
        !          1055: (define_insn ""
        !          1056:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1057:        (mult:DF (float_extend:DF
        !          1058:                  (match_operand:SF 1 "reg_or_fp0_operand" "fG"))
        !          1059:                 (float_extend:DF
        !          1060:                  (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
        !          1061:   "TARGET_FP"
        !          1062:   "mult %R1,%R2,%0"
        !          1063:   [(set_attr "type" "fpop")])
        !          1064: 
        !          1065: (define_insn "subsf3"
        !          1066:   [(set (match_operand:SF 0 "register_operand" "=f")
        !          1067:        (minus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG")
        !          1068:                  (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
        !          1069:   "TARGET_FP"
        !          1070:   "subs %R1,%R2,%0"
        !          1071:   [(set_attr "type" "fpop")])
        !          1072: 
        !          1073: (define_insn "subdf3"
        !          1074:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1075:        (minus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG")
        !          1076:                  (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !          1077:   "TARGET_FP"
        !          1078:   "subt %R1,%R2,%0"
        !          1079:   [(set_attr "type" "fpop")])
        !          1080: 
        !          1081: (define_insn ""
        !          1082:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1083:        (minus:DF (float_extend:DF
        !          1084:                   (match_operand:SF 1 "reg_or_fp0_operand" "%fG"))
        !          1085:                  (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
        !          1086:   "TARGET_FP"
        !          1087:   "subt %R1,%R2,%0"
        !          1088:   [(set_attr "type" "fpop")])
        !          1089: 
        !          1090: (define_insn ""
        !          1091:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1092:        (minus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG")
        !          1093:                  (float_extend:DF
        !          1094:                   (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
        !          1095:   "TARGET_FP"
        !          1096:   "subt %R1,%R2,%0"
        !          1097:   [(set_attr "type" "fpop")])
        !          1098: 
        !          1099: (define_insn ""
        !          1100:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1101:        (minus:DF (float_extend:DF
        !          1102:                   (match_operand:SF 1 "reg_or_fp0_operand" "%fG"))
        !          1103:                  (float_extend:DF
        !          1104:                   (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
        !          1105:   "TARGET_FP"
        !          1106:   "subt %R1,%R2,%0"
        !          1107:   [(set_attr "type" "fpop")])
        !          1108: 
        !          1109: ;; Next are all the integer comparisons, and conditional moves and branches
        !          1110: ;; and some of the related define_expand's and define_split's.
        !          1111: 
        !          1112: (define_insn ""
        !          1113:   [(set (match_operand:DI 0 "register_operand" "=r")
        !          1114:        (match_operator:DI 1 "alpha_comparison_operator"
        !          1115:                           [(match_operand:DI 2 "reg_or_0_operand" "rJ")
        !          1116:                            (match_operand:DI 3 "reg_or_8bit_operand" "rI")]))]
        !          1117:   ""
        !          1118:   "cmp%C1 %r2,%3,%0"
        !          1119:   [(set_attr "type" "icmp")])
        !          1120: 
        !          1121: (define_insn ""
        !          1122:   [(set (match_operand:DI 0 "register_operand" "=r,r")
        !          1123:        (if_then_else:DI
        !          1124:         (match_operator 2 "signed_comparison_operator"
        !          1125:                         [(match_operand:DI 3 "reg_or_0_operand" "rJ,rJ")
        !          1126:                          (const_int 0)])
        !          1127:         (match_operand:DI 1 "reg_or_8bit_operand" "rI,0")
        !          1128:         (match_operand:DI 4 "reg_or_8bit_operand" "0,rI")))]
        !          1129:   ""
        !          1130:   "@
        !          1131:    cmov%C2 %r3,%1,%0
        !          1132:    cmov%D2 %r3,%4,%0")
        !          1133: 
        !          1134: (define_insn ""
        !          1135:   [(set (match_operand:DI 0 "register_operand" "=r,r")
        !          1136:        (if_then_else:DI
        !          1137:         (eq (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
        !          1138:                              (const_int 1)
        !          1139:                              (const_int 0))
        !          1140:             (const_int 0))
        !          1141:         (match_operand:DI 1 "reg_or_8bit_operand" "rI,0")
        !          1142:         (match_operand:DI 3 "reg_or_8bit_operand" "0,rI")))]
        !          1143:   ""
        !          1144:   "@
        !          1145:    cmovlbc %r2,%1,%0
        !          1146:    cmovlbs %r2,%3,%0")
        !          1147: 
        !          1148: (define_insn ""
        !          1149:   [(set (match_operand:DI 0 "register_operand" "=r,r")
        !          1150:        (if_then_else:DI
        !          1151:         (ne (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
        !          1152:                              (const_int 1)
        !          1153:                              (const_int 0))
        !          1154:             (const_int 0))
        !          1155:         (match_operand:DI 1 "reg_or_8bit_operand" "rI,0")
        !          1156:         (match_operand:DI 3 "reg_or_8bit_operand" "0,rI")))]
        !          1157:   ""
        !          1158:   "@
        !          1159:    cmovlbs %r2,%1,%0
        !          1160:    cmovlbc %r2,%3,%0")
        !          1161: 
        !          1162: ;; This form is added since combine thinks that an IF_THEN_ELSE with both
        !          1163: ;; arms constant is a single insn, so it won't try to form it if combine
        !          1164: ;; knows they are really two insns.  This occurs in divides by powers
        !          1165: ;; of two.
        !          1166: 
        !          1167: (define_insn ""
        !          1168:   [(set (match_operand:DI 0 "register_operand" "=r")
        !          1169:        (if_then_else:DI
        !          1170:         (match_operator 2 "signed_comparison_operator"
        !          1171:                         [(match_operand:DI 3 "reg_or_0_operand" "rJ")
        !          1172:                          (const_int 0)])
        !          1173:         (plus:DI (match_dup 0)
        !          1174:                  (match_operand:DI 1 "reg_or_8bit_operand" "rI"))
        !          1175:         (match_dup 0)))
        !          1176:    (clobber (match_scratch:DI 4 "=&r"))]
        !          1177:   ""
        !          1178:   "addq %0,%1,%4\;cmov%C2 %r3,%4,%0")
        !          1179: 
        !          1180: (define_split
        !          1181:   [(set (match_operand:DI 0 "register_operand" "")
        !          1182:        (if_then_else:DI
        !          1183:         (match_operator 2 "signed_comparison_operator"
        !          1184:                         [(match_operand:DI 3 "reg_or_0_operand" "")
        !          1185:                          (const_int 0)])
        !          1186:         (plus:DI (match_dup 0)
        !          1187:                  (match_operand:DI 1 "reg_or_8bit_operand" ""))
        !          1188:         (match_dup 0)))
        !          1189:    (clobber (match_operand:DI 4 "register_operand" ""))]
        !          1190:   ""
        !          1191:   [(set (match_dup 4) (plus:DI (match_dup 0) (match_dup 1)))
        !          1192:    (set (match_dup 0) (if_then_else:DI (match_op_dup 2
        !          1193:                                                     [(match_dup 3)
        !          1194:                                                      (const_int 0)])
        !          1195:                                       (match_dup 4) (match_dup 0)))]
        !          1196:   "")
        !          1197: 
        !          1198: (define_split
        !          1199:   [(parallel
        !          1200:     [(set (match_operand:DI 0 "register_operand" "")
        !          1201:          (if_then_else:DI
        !          1202:           (match_operator 1 "comparison_operator"
        !          1203:                           [(zero_extract:DI (match_operand:DI 2 "register_operand" "")
        !          1204:                                             (const_int 1)
        !          1205:                                             (match_operand:DI 3 "const_int_operand" ""))
        !          1206:                            (const_int 0)])
        !          1207:           (match_operand:DI 4 "reg_or_8bit_operand" "")
        !          1208:           (match_operand:DI 5 "reg_or_8bit_operand" "")))
        !          1209:      (clobber (match_operand:DI 6 "register_operand" ""))])]
        !          1210:   "INTVAL (operands[3]) != 0"
        !          1211:   [(set (match_dup 6)
        !          1212:        (lshiftrt:DI (match_dup 2) (match_dup 3)))
        !          1213:    (set (match_dup 0)
        !          1214:        (if_then_else:DI (match_op_dup 1
        !          1215:                                       [(zero_extract:DI (match_dup 6)
        !          1216:                                                         (const_int 1)
        !          1217:                                                         (const_int 0))
        !          1218:                                        (const_int 0)])
        !          1219:                         (match_dup 4)
        !          1220:                         (match_dup 5)))]
        !          1221:   "")
        !          1222: 
        !          1223: ;; For ABS, we have two choices, depending on whether the input and output
        !          1224: ;; registers are the same or not.
        !          1225: (define_expand "absdi2"
        !          1226:   [(set (match_operand:DI 0 "register_operand" "")
        !          1227:        (abs:DI (match_operand:DI 1 "register_operand" "")))]
        !          1228:   ""
        !          1229:   "
        !          1230: { if (rtx_equal_p (operands[0], operands[1]))
        !          1231:     emit_insn (gen_absdi2_same (operands[0], gen_reg_rtx (DImode)));
        !          1232:   else
        !          1233:     emit_insn (gen_absdi2_diff (operands[0], operands[1]));
        !          1234: 
        !          1235:   DONE;
        !          1236: }")
        !          1237: 
        !          1238: (define_expand "absdi2_same"
        !          1239:   [(set (match_operand:DI 1 "register_operand" "")
        !          1240:        (neg:DI (match_operand:DI 0 "register_operand" "")))
        !          1241:    (set (match_dup 0)
        !          1242:        (if_then_else:DI (ge (match_dup 0) (const_int 0))
        !          1243:                         (match_dup 0)
        !          1244:                         (match_dup 1)))]
        !          1245:   ""
        !          1246:   "")
        !          1247: 
        !          1248: (define_expand "absdi2_diff"
        !          1249:   [(set (match_operand:DI 0 "register_operand" "")
        !          1250:        (neg:DI (match_operand:DI 1 "register_operand" "")))
        !          1251:    (set (match_dup 0)
        !          1252:        (if_then_else:DI (lt (match_dup 1) (const_int 0))
        !          1253:                         (match_dup 0)
        !          1254:                         (match_dup 1)))]
        !          1255:   ""
        !          1256:   "")
        !          1257: 
        !          1258: (define_split
        !          1259:   [(set (match_operand:DI 0 "register_operand" "")
        !          1260:        (abs:DI (match_dup 0)))
        !          1261:    (clobber (match_operand:DI 2 "register_operand" ""))]
        !          1262:   ""
        !          1263:   [(set (match_dup 1) (neg:DI (match_dup 0)))
        !          1264:    (set (match_dup 0) (if_then_else:DI (ge (match_dup 0) (const_int 0))
        !          1265:                                       (match_dup 0) (match_dup 1)))]
        !          1266:   "")
        !          1267: 
        !          1268: (define_split
        !          1269:   [(set (match_operand:DI 0 "register_operand" "")
        !          1270:        (abs:DI (match_operand:DI 1 "register_operand" "")))]
        !          1271:   "! rtx_equal_p (operands[0], operands[1])"
        !          1272:   [(set (match_dup 0) (neg:DI (match_dup 1)))
        !          1273:    (set (match_dup 0) (if_then_else:DI (lt (match_dup 1) (const_int 0))
        !          1274:                                       (match_dup 0) (match_dup 1)))]
        !          1275:   "")
        !          1276: 
        !          1277: (define_split
        !          1278:   [(set (match_operand:DI 0 "register_operand" "")
        !          1279:        (neg:DI (abs:DI (match_dup 0))))
        !          1280:    (clobber (match_operand:DI 2 "register_operand" ""))]
        !          1281:   ""
        !          1282:   [(set (match_dup 1) (neg:DI (match_dup 0)))
        !          1283:    (set (match_dup 0) (if_then_else:DI (le (match_dup 0) (const_int 0))
        !          1284:                                       (match_dup 0) (match_dup 1)))]
        !          1285:   "")
        !          1286: 
        !          1287: (define_split
        !          1288:   [(set (match_operand:DI 0 "register_operand" "")
        !          1289:        (neg:DI (abs:DI (match_operand:DI 1 "register_operand" ""))))]
        !          1290:   "! rtx_equal_p (operands[0], operands[1])"
        !          1291:   [(set (match_dup 0) (neg:DI (match_dup 1)))
        !          1292:    (set (match_dup 0) (if_then_else:DI (gt (match_dup 1) (const_int 0))
        !          1293:                                       (match_dup 0) (match_dup 1)))]
        !          1294:   "")
        !          1295: 
        !          1296: (define_expand "smaxdi3"
        !          1297:   [(set (match_dup 3)
        !          1298:        (le:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1299:               (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1300:    (set (match_operand:DI 0 "register_operand" "")
        !          1301:        (if_then_else:DI (eq (match_dup 3) (const_int 0))
        !          1302:                         (match_dup 1) (match_dup 2)))]
        !          1303:   ""
        !          1304:   "
        !          1305: { operands[3] = gen_reg_rtx (DImode);
        !          1306: }")
        !          1307: 
        !          1308: (define_split
        !          1309:   [(set (match_operand:DI 0 "register_operand" "")
        !          1310:        (smax:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1311:                 (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1312:    (clobber (match_operand:DI 3 "register_operand" ""))]
        !          1313:   "operands[2] != const0_rtx"
        !          1314:   [(set (match_dup 3) (le:DI (match_dup 1) (match_dup 2)))
        !          1315:    (set (match_dup 0) (if_then_else:DI (eq (match_dup 3) (const_int 0))
        !          1316:                                       (match_dup 1) (match_dup 2)))]
        !          1317:   "")
        !          1318: 
        !          1319: (define_insn ""
        !          1320:   [(set (match_operand:DI 0 "register_operand" "=r")
        !          1321:        (smax:DI (match_operand:DI 1 "register_operand" "0")
        !          1322:                 (const_int 0)))]
        !          1323:   ""
        !          1324:   "cmovlt %0,0,%0")
        !          1325: 
        !          1326: (define_expand "smindi3"
        !          1327:   [(set (match_dup 3)
        !          1328:        (lt:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1329:               (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1330:    (set (match_operand:DI 0 "register_operand" "")
        !          1331:        (if_then_else:DI (ne (match_dup 3) (const_int 0))
        !          1332:                         (match_dup 1) (match_dup 2)))]
        !          1333:   ""
        !          1334:   "
        !          1335: { operands[3] = gen_reg_rtx (DImode);
        !          1336: }")
        !          1337: 
        !          1338: (define_split
        !          1339:   [(set (match_operand:DI 0 "register_operand" "")
        !          1340:        (smin:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1341:                 (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1342:    (clobber (match_operand:DI 3 "register_operand" ""))]
        !          1343:   "operands[2] != const0_rtx"
        !          1344:   [(set (match_dup 3) (lt:DI (match_dup 1) (match_dup 2)))
        !          1345:    (set (match_dup 0) (if_then_else:DI (ne (match_dup 3) (const_int 0))
        !          1346:                                       (match_dup 1) (match_dup 2)))]
        !          1347:   "")
        !          1348: 
        !          1349: (define_insn ""
        !          1350:   [(set (match_operand:DI 0 "register_operand" "=r")
        !          1351:        (smin:DI (match_operand:DI 1 "register_operand" "0")
        !          1352:                 (const_int 0)))]
        !          1353:   ""
        !          1354:   "cmovgt %0,0,%0")
        !          1355: 
        !          1356: (define_expand "umaxdi3"
        !          1357:   [(set (match_dup 3) 
        !          1358:        (leu:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1359:                (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1360:    (set (match_operand:DI 0 "register_operand" "")
        !          1361:        (if_then_else:DI (eq (match_dup 3) (const_int 0))
        !          1362:                         (match_dup 1) (match_dup 2)))]
        !          1363:   ""
        !          1364:   "
        !          1365: { operands[3] = gen_reg_rtx (DImode);
        !          1366: }")
        !          1367: 
        !          1368: (define_split
        !          1369:   [(set (match_operand:DI 0 "register_operand" "")
        !          1370:        (umax:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1371:                 (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1372:    (clobber (match_operand:DI 3 "register_operand" ""))]
        !          1373:   "operands[2] != const0_rtx"
        !          1374:   [(set (match_dup 3) (leu:DI (match_dup 1) (match_dup 2)))
        !          1375:    (set (match_dup 0) (if_then_else:DI (eq (match_dup 3) (const_int 0))
        !          1376:                                       (match_dup 1) (match_dup 2)))]
        !          1377:   "")
        !          1378: 
        !          1379: (define_expand "umindi3"
        !          1380:   [(set (match_dup 3)
        !          1381:        (ltu:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1382:                (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1383:    (set (match_operand:DI 0 "register_operand" "")
        !          1384:        (if_then_else:DI (ne (match_dup 3) (const_int 0))
        !          1385:                         (match_dup 1) (match_dup 2)))]
        !          1386:   ""
        !          1387:   "
        !          1388: { operands[3] = gen_reg_rtx (DImode);
        !          1389: }")
        !          1390: 
        !          1391: (define_split
        !          1392:   [(set (match_operand:DI 0 "register_operand" "")
        !          1393:        (umin:DI (match_operand:DI 1 "reg_or_0_operand" "")
        !          1394:                 (match_operand:DI 2 "reg_or_8bit_operand" "")))
        !          1395:    (clobber (match_operand:DI 3 "register_operand" ""))]
        !          1396:   "operands[2] != const0_rtx"
        !          1397:   [(set (match_dup 3) (ltu:DI (match_dup 1) (match_dup 2)))
        !          1398:    (set (match_dup 0) (if_then_else:DI (ne (match_dup 3) (const_int 0))
        !          1399:                                       (match_dup 1) (match_dup 2)))]
        !          1400:   "")
        !          1401: 
        !          1402: (define_insn ""
        !          1403:   [(set (pc)
        !          1404:        (if_then_else
        !          1405:         (match_operator 1 "signed_comparison_operator"
        !          1406:                         [(match_operand:DI 2 "reg_or_0_operand" "rJ")
        !          1407:                          (const_int 0)])
        !          1408:         (label_ref (match_operand 0 "" ""))
        !          1409:         (pc)))]
        !          1410:   ""
        !          1411:   "b%C1 %r2,%0"
        !          1412:   [(set_attr "type" "ibr")])
        !          1413: 
        !          1414: (define_insn ""
        !          1415:   [(set (pc)
        !          1416:        (if_then_else
        !          1417:         (ne (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !          1418:                              (const_int 1)
        !          1419:                              (const_int 0))
        !          1420:             (const_int 0))
        !          1421:         (label_ref (match_operand 0 "" ""))
        !          1422:         (pc)))]
        !          1423:   ""
        !          1424:   "blbs %r1,%0"
        !          1425:   [(set_attr "type" "ibr")])
        !          1426: 
        !          1427: (define_insn ""
        !          1428:   [(set (pc)
        !          1429:        (if_then_else
        !          1430:         (eq (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
        !          1431:                              (const_int 1)
        !          1432:                              (const_int 0))
        !          1433:             (const_int 0))
        !          1434:         (label_ref (match_operand 0 "" ""))
        !          1435:         (pc)))]
        !          1436:   ""
        !          1437:   "blbc %r1,%0"
        !          1438:   [(set_attr "type" "ibr")])
        !          1439: 
        !          1440: (define_split
        !          1441:   [(parallel
        !          1442:     [(set (pc)
        !          1443:          (if_then_else
        !          1444:           (match_operator 1 "comparison_operator"
        !          1445:                           [(zero_extract:DI (match_operand:DI 2 "register_operand" "")
        !          1446:                                             (const_int 1)
        !          1447:                                             (match_operand:DI 3 "const_int_operand" ""))
        !          1448:                            (const_int 0)])
        !          1449:           (label_ref (match_operand 0 "" ""))
        !          1450:           (pc)))
        !          1451:      (clobber (match_operand:DI 4 "register_operand" ""))])]
        !          1452:   "INTVAL (operands[3]) != 0"
        !          1453:   [(set (match_dup 4)
        !          1454:        (lshiftrt:DI (match_dup 2) (match_dup 3)))
        !          1455:    (set (pc)
        !          1456:        (if_then_else (match_op_dup 1
        !          1457:                                    [(zero_extract:DI (match_dup 4)
        !          1458:                                                      (const_int 1)
        !          1459:                                                      (const_int 0))
        !          1460:                                     (const_int 0)])
        !          1461:                      (label_ref (match_dup 0))
        !          1462:                      (pc)))]
        !          1463:   "")
        !          1464: 
        !          1465: ;; The following are the corresponding floating-point insns.  Recall
        !          1466: ;; we need to have variants that expand the arguments from SF mode
        !          1467: ;; to DFmode.
        !          1468: 
        !          1469: (define_insn ""
        !          1470:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1471:        (match_operator:DF 1 "alpha_comparison_operator"
        !          1472:                           [(match_operand:DF 2 "reg_or_fp0_operand" "fG")
        !          1473:                            (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))]
        !          1474:   "TARGET_FP"
        !          1475:   "cmpt%C1 %R2,%R3,%0"
        !          1476:   [(set_attr "type" "fpop")])
        !          1477: 
        !          1478: (define_insn ""
        !          1479:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1480:        (match_operator:DF 1 "alpha_comparison_operator"
        !          1481:                           [(float_extend:DF
        !          1482:                             (match_operand:SF 2 "reg_or_fp0_operand" "fG"))
        !          1483:                            (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))]
        !          1484:   "TARGET_FP"
        !          1485:   "cmpt%C1 %R2,%R3,%0"
        !          1486:   [(set_attr "type" "fpop")])
        !          1487: 
        !          1488: (define_insn ""
        !          1489:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1490:        (match_operator:DF 1 "alpha_comparison_operator"
        !          1491:                           [(match_operand:DF 2 "reg_or_fp0_operand" "fG")
        !          1492:                            (float_extend:DF
        !          1493:                             (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))]
        !          1494:   "TARGET_FP"
        !          1495:   "cmpt%C1 %R2,%R3,%0"
        !          1496:   [(set_attr "type" "fpop")])
        !          1497: 
        !          1498: (define_insn ""
        !          1499:   [(set (match_operand:DF 0 "register_operand" "=f")
        !          1500:        (match_operator:DF 1 "alpha_comparison_operator"
        !          1501:                           [(float_extend:DF
        !          1502:                             (match_operand:SF 2 "reg_or_fp0_operand" "fG"))
        !          1503:                            (float_extend:DF
        !          1504:                             (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))]
        !          1505:   "TARGET_FP"
        !          1506:   "cmpt%C1 %R2,%R3,%0"
        !          1507:   [(set_attr "type" "fpop")])
        !          1508: 
        !          1509: (define_insn ""
        !          1510:   [(set (match_operand:DF 0 "register_operand" "=f,f")
        !          1511:        (if_then_else:DF 
        !          1512:         (match_operator 3 "signed_comparison_operator"
        !          1513:                         [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG")
        !          1514:                          (match_operand:DF 2 "fp0_operand" "G,G")])
        !          1515:         (match_operand:DF 1 "reg_or_fp0_operand" "fG,0")
        !          1516:         (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
        !          1517:   "TARGET_FP"
        !          1518:   "@
        !          1519:    fcmov%C3 %R4,%R1,%0
        !          1520:    fcmov%D3 %R4,%R5,%0"
        !          1521:   [(set_attr "type" "fpop")])
        !          1522: 
        !          1523: (define_insn ""
        !          1524:   [(set (match_operand:SF 0 "register_operand" "=f,f")
        !          1525:        (if_then_else:SF 
        !          1526:         (match_operator 3 "signed_comparison_operator"
        !          1527:                         [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG")
        !          1528:                          (match_operand:DF 2 "fp0_operand" "G,G")])
        !          1529:         (match_operand:SF 1 "reg_or_fp0_operand" "fG,0")
        !          1530:         (match_operand:SF 5 "reg_or_fp0_operand" "0,fG")))]
        !          1531:   "TARGET_FP"
        !          1532:   "@
        !          1533:    fcmov%C3 %R4,%R1,%0
        !          1534:    fcmov%D3 %R4,%R5,%0"
        !          1535:   [(set_attr "type" "fpop")])
        !          1536: 
        !          1537: (define_insn ""
        !          1538:   [(set (match_operand:DF 0 "register_operand" "=f,f")
        !          1539:        (if_then_else:DF 
        !          1540:         (match_operator 3 "signed_comparison_operator"
        !          1541:                         [(match_operand:DF 1 "reg_or_fp0_operand" "fG,fG")
        !          1542:                          (match_operand:DF 2 "fp0_operand" "G,G")])
        !          1543:         (float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,0"))
        !          1544:         (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
        !          1545:   "TARGET_FP"
        !          1546:   "@
        !          1547:    fcmov%C3 %R4,%R1,%0
        !          1548:    fcmov%D3 %R4,%R5,%0"
        !          1549:   [(set_attr "type" "fpop")])
        !          1550: 
        !          1551: (define_insn ""
        !          1552:   [(set (match_operand:DF 0 "register_operand" "=f,f")
        !          1553:        (if_then_else:DF 
        !          1554:         (match_operator 3 "signed_comparison_operator"
        !          1555:                         [(float_extend:DF 
        !          1556:                           (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG"))
        !          1557:                          (match_operand:DF 2 "fp0_operand" "G,G")])
        !          1558:         (match_operand:DF 1 "reg_or_fp0_operand" "fG,0")
        !          1559:         (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
        !          1560:   "TARGET_FP"
        !          1561:   "@
        !          1562:    fcmov%C3 %R4,%R1,%0
        !          1563:    fcmov%D3 %R4,%R5,%0"
        !          1564:   [(set_attr "type" "fpop")])
        !          1565: 
        !          1566: (define_insn ""
        !          1567:   [(set (match_operand:SF 0 "register_operand" "=f,f")
        !          1568:        (if_then_else:SF 
        !          1569:         (match_operator 3 "signed_comparison_operator"
        !          1570:                         [(float_extend:DF
        !          1571:                           (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG"))
        !          1572:                          (match_operand:DF 2 "fp0_operand" "G,G")])
        !          1573:         (match_operand:SF 1 "reg_or_fp0_operand" "fG,0")
        !          1574:         (match_operand:SF 5 "reg_or_fp0_operand" "0,fG")))]
        !          1575:   "TARGET_FP"
        !          1576:   "@
        !          1577:    fcmov%C3 %R4,%R1,%0
        !          1578:    fcmov%D3 %R4,%R5,%0"
        !          1579:   [(set_attr "type" "fpop")])
        !          1580: 
        !          1581: (define_insn ""
        !          1582:   [(set (match_operand:DF 0 "register_operand" "=f,f")
        !          1583:        (if_then_else:DF 
        !          1584:         (match_operator 3 "signed_comparison_operator"
        !          1585:                         [(float_extend:DF
        !          1586:                           (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG"))
        !          1587:                          (match_operand:DF 2 "fp0_operand" "G,G")])
        !          1588:         (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG,0"))
        !          1589:         (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
        !          1590:   "TARGET_FP"
        !          1591:   "@
        !          1592:    fcmov%C3 %R4,%R1,%0
        !          1593:    fcmov%D3 %R4,%R5,%0"
        !          1594:   [(set_attr "type" "fpop")])
        !          1595: 
        !          1596: (define_expand "smaxdf3"
        !          1597:   [(set (match_dup 3)
        !          1598:        (le:DF (match_operand:DF 1 "reg_or_fp0_operand" "")
        !          1599:               (match_operand:DF 2 "reg_or_fp0_operand" "")))
        !          1600:    (set (match_operand:DF 0 "register_operand" "")
        !          1601:        (if_then_else:DF (eq (match_dup 3) (const_int 0))
        !          1602:                         (match_dup 1) (match_dup 2)))]
        !          1603:   "TARGET_FP"
        !          1604:   "
        !          1605: { operands[3] = gen_reg_rtx (DFmode);
        !          1606: }")
        !          1607: 
        !          1608: (define_expand "smindf3"
        !          1609:   [(set (match_dup 3)
        !          1610:        (lt:DF (match_operand:DF 1 "reg_or_fp0_operand" "")
        !          1611:               (match_operand:DF 2 "reg_or_fp0_operand" "")))
        !          1612:    (set (match_operand:DF 0 "register_operand" "")
        !          1613:        (if_then_else:DF (ne (match_dup 3) (const_int 0))
        !          1614:                         (match_dup 1) (match_dup 2)))]
        !          1615:   "TARGET_FP"
        !          1616:   "
        !          1617: { operands[3] = gen_reg_rtx (DFmode);
        !          1618: }")
        !          1619: 
        !          1620: (define_expand "smaxsf3"
        !          1621:   [(set (match_dup 3)
        !          1622:        (le:DF (match_operand:SF 1 "reg_or_fp0_operand" "")
        !          1623:               (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" ""))))
        !          1624:    (set (match_operand:SF 0 "register_operand" "")
        !          1625:        (if_then_else:SF (eq (match_dup 3) (const_int 0))
        !          1626:                         (match_dup 1) (match_dup 2)))]
        !          1627:   "TARGET_FP"
        !          1628:   "
        !          1629: { operands[3] = gen_reg_rtx (SFmode);
        !          1630: }")
        !          1631: 
        !          1632: (define_expand "sminsf3"
        !          1633:   [(set (match_dup 3)
        !          1634:        (lt:DF (match_operand:SF 1 "reg_or_fp0_operand" "")
        !          1635:               (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" ""))))
        !          1636:    (set (match_operand:SF 0 "register_operand" "")
        !          1637:        (if_then_else:SF (ne (match_dup 3) (const_int 0))
        !          1638:                      (match_dup 1) (match_dup 2)))]
        !          1639:   "TARGET_FP"
        !          1640:   "
        !          1641: { operands[3] = gen_reg_rtx (SFmode);
        !          1642: }")
        !          1643: 
        !          1644: (define_insn ""
        !          1645:   [(set (pc)
        !          1646:        (if_then_else
        !          1647:         (match_operator 1 "signed_comparison_operator"
        !          1648:                         [(match_operand:DF 2 "reg_or_fp0_operand" "fG")
        !          1649:                          (match_operand:DF 3 "fp0_operand" "G")])
        !          1650:         (label_ref (match_operand 0 "" ""))
        !          1651:         (pc)))]
        !          1652:   "TARGET_FP"
        !          1653:   "fb%C1 %R2,%0"
        !          1654:   [(set_attr "type" "fbr")])
        !          1655: 
        !          1656: (define_insn ""
        !          1657:   [(set (pc)
        !          1658:        (if_then_else
        !          1659:         (match_operator 1 "signed_comparison_operator"
        !          1660:                         [(float_extend:DF
        !          1661:                           (match_operand:SF 2 "reg_or_fp0_operand" "fG"))
        !          1662:                          (match_operand:DF 3 "fp0_operand" "G")])
        !          1663:         (label_ref (match_operand 0 "" ""))
        !          1664:         (pc)))]
        !          1665:   "TARGET_FP"
        !          1666:   "fb%C1 %R2,%0"
        !          1667:   [(set_attr "type" "fbr")])
        !          1668: 
        !          1669: ;; These are the main define_expand's used to make conditional branches
        !          1670: ;; and compares.
        !          1671: 
        !          1672: (define_expand "cmpdf"
        !          1673:   [(set (cc0) (compare (match_operand:DF 0 "reg_or_fp0_operand" "")
        !          1674:                       (match_operand:DF 1 "reg_or_fp0_operand" "")))]
        !          1675:   ""
        !          1676:   "
        !          1677: {
        !          1678:   alpha_compare_op0 = operands[0];
        !          1679:   alpha_compare_op1 = operands[1];
        !          1680:   alpha_compare_fp_p = 1;
        !          1681:   DONE;
        !          1682: }")
        !          1683: 
        !          1684: (define_expand "cmpdi"
        !          1685:   [(set (cc0) (compare (match_operand:DI 0 "reg_or_0_operand" "")
        !          1686:                       (match_operand:DI 1 "reg_or_8bit_operand" "")))]
        !          1687:   ""
        !          1688:   "
        !          1689: {
        !          1690:   alpha_compare_op0 = operands[0];
        !          1691:   alpha_compare_op1 = operands[1];
        !          1692:   alpha_compare_fp_p = 0;
        !          1693:   DONE;
        !          1694: }")
        !          1695: 
        !          1696: (define_expand "beq"
        !          1697:   [(set (match_dup 1) (match_dup 2))
        !          1698:    (set (pc)
        !          1699:        (if_then_else (match_dup 3)
        !          1700:                      (label_ref (match_operand 0 "" ""))
        !          1701:                      (pc)))]
        !          1702:   ""
        !          1703:   "
        !          1704: {
        !          1705:   enum machine_mode mode = alpha_compare_fp_p ? DFmode : DImode;
        !          1706:   operands[1] = gen_reg_rtx (mode);
        !          1707:   operands[2] = gen_rtx (EQ, mode, alpha_compare_op0, alpha_compare_op1);
        !          1708:   operands[3] = gen_rtx (NE, VOIDmode, operands[1], CONST0_RTX (mode));
        !          1709: }")
        !          1710: 
        !          1711: (define_expand "bne"
        !          1712:   [(set (match_dup 1) (match_dup 2))
        !          1713:    (set (pc)
        !          1714:        (if_then_else (match_dup 3)
        !          1715:                      (label_ref (match_operand 0 "" ""))
        !          1716:                      (pc)))]
        !          1717:   ""
        !          1718:   "
        !          1719: {
        !          1720:   enum machine_mode mode = alpha_compare_fp_p ? DFmode : DImode;
        !          1721:   operands[1] = gen_reg_rtx (mode);
        !          1722:   operands[2] = gen_rtx (EQ, mode, alpha_compare_op0, alpha_compare_op1);
        !          1723:   operands[3] = gen_rtx (EQ, VOIDmode, operands[1], CONST0_RTX (mode));
        !          1724: }")
        !          1725: 
        !          1726: (define_expand "blt"
        !          1727:   [(set (match_dup 1) (match_dup 2))
        !          1728:    (set (pc)
        !          1729:        (if_then_else (match_dup 3)
        !          1730:                      (label_ref (match_operand 0 "" ""))
        !          1731:                      (pc)))]
        !          1732:   ""
        !          1733:   "
        !          1734: {
        !          1735:   enum machine_mode mode = alpha_compare_fp_p ? DFmode : DImode;
        !          1736:   operands[1] = gen_reg_rtx (mode);
        !          1737:   operands[2] = gen_rtx (LT, mode, alpha_compare_op0, alpha_compare_op1);
        !          1738:   operands[3] = gen_rtx (NE, VOIDmode, operands[1], CONST0_RTX (mode));
        !          1739: }")
        !          1740: 
        !          1741: (define_expand "ble"
        !          1742:   [(set (match_dup 1) (match_dup 2))
        !          1743:    (set (pc)
        !          1744:        (if_then_else (match_dup 3)
        !          1745:                      (label_ref (match_operand 0 "" ""))
        !          1746:                      (pc)))]
        !          1747:   ""
        !          1748:   "
        !          1749: {
        !          1750:   enum machine_mode mode = alpha_compare_fp_p ? DFmode : DImode;
        !          1751:   operands[1] = gen_reg_rtx (mode);
        !          1752:   operands[2] = gen_rtx (LE, mode, alpha_compare_op0, alpha_compare_op1);
        !          1753:   operands[3] = gen_rtx (NE, VOIDmode, operands[1], CONST0_RTX (mode));
        !          1754: }")
        !          1755: 
        !          1756: (define_expand "bgt"
        !          1757:   [(set (match_dup 1) (match_dup 2))
        !          1758:    (set (pc)
        !          1759:        (if_then_else (match_dup 3)
        !          1760:                      (label_ref (match_operand 0 "" ""))
        !          1761:                      (pc)))]
        !          1762:   ""
        !          1763:   "
        !          1764: {
        !          1765:   if (alpha_compare_fp_p)
        !          1766:     {
        !          1767:       operands[1] = gen_reg_rtx (DFmode);
        !          1768:       operands[2] = gen_rtx (LT, DFmode, alpha_compare_op1, alpha_compare_op0);
        !          1769:       operands[3] = gen_rtx (NE, VOIDmode, operands[1], CONST0_RTX (DFmode));
        !          1770:     }
        !          1771:   else
        !          1772:     {
        !          1773:       operands[1] = gen_reg_rtx (DImode);
        !          1774:       operands[2] = gen_rtx (LE, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1775:       operands[3] = gen_rtx (EQ, VOIDmode, operands[1], const0_rtx);
        !          1776:     }
        !          1777: }")
        !          1778: 
        !          1779: (define_expand "bge"
        !          1780:   [(set (match_dup 1) (match_dup 2))
        !          1781:    (set (pc)
        !          1782:        (if_then_else (match_dup 3)
        !          1783:                      (label_ref (match_operand 0 "" ""))
        !          1784:                      (pc)))]
        !          1785:   ""
        !          1786:   "
        !          1787: {
        !          1788:   if (alpha_compare_fp_p)
        !          1789:     {
        !          1790:       operands[1] = gen_reg_rtx (DFmode);
        !          1791:       operands[2] = gen_rtx (LE, DFmode, alpha_compare_op1, alpha_compare_op0);
        !          1792:       operands[3] = gen_rtx (NE, VOIDmode, operands[1], CONST0_RTX (DFmode));
        !          1793:     }
        !          1794:   else
        !          1795:     {
        !          1796:       operands[1] = gen_reg_rtx (DImode);
        !          1797:       operands[2] = gen_rtx (LT, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1798:       operands[3] = gen_rtx (EQ, VOIDmode, operands[1], const0_rtx);
        !          1799:     }
        !          1800: }")
        !          1801: 
        !          1802: (define_expand "bltu"
        !          1803:   [(set (match_dup 1) (match_dup 2))
        !          1804:    (set (pc)
        !          1805:        (if_then_else (match_dup 3)
        !          1806:                      (label_ref (match_operand 0 "" ""))
        !          1807:                      (pc)))]
        !          1808:   ""
        !          1809:   "
        !          1810: {
        !          1811:   operands[1] = gen_reg_rtx (DImode);
        !          1812:   operands[2] = gen_rtx (LTU, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1813:   operands[3] = gen_rtx (NE, VOIDmode, operands[1], const0_rtx);
        !          1814: }")
        !          1815: 
        !          1816: (define_expand "bleu"
        !          1817:   [(set (match_dup 1) (match_dup 2))
        !          1818:    (set (pc)
        !          1819:        (if_then_else (match_dup 3)
        !          1820:                      (label_ref (match_operand 0 "" ""))
        !          1821:                      (pc)))]
        !          1822:   ""
        !          1823:   "
        !          1824: {
        !          1825:   operands[1] = gen_reg_rtx (DImode);
        !          1826:   operands[2] = gen_rtx (LEU, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1827:   operands[3] = gen_rtx (NE, VOIDmode, operands[1], const0_rtx);
        !          1828: }")
        !          1829: 
        !          1830: (define_expand "bgtu"
        !          1831:   [(set (match_dup 1) (match_dup 2))
        !          1832:    (set (pc)
        !          1833:        (if_then_else (match_dup 3)
        !          1834:                      (label_ref (match_operand 0 "" ""))
        !          1835:                      (pc)))]
        !          1836:   ""
        !          1837:   "
        !          1838: {
        !          1839:   operands[1] = gen_reg_rtx (DImode);
        !          1840:   operands[2] = gen_rtx (LEU, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1841:   operands[3] = gen_rtx (EQ, VOIDmode, operands[1], const0_rtx);
        !          1842: }")
        !          1843: 
        !          1844: (define_expand "bgeu"
        !          1845:   [(set (match_dup 1) (match_dup 2))
        !          1846:    (set (pc)
        !          1847:        (if_then_else (match_dup 3)
        !          1848:                      (label_ref (match_operand 0 "" ""))
        !          1849:                      (pc)))]
        !          1850:   ""
        !          1851:   "
        !          1852: {
        !          1853:   operands[1] = gen_reg_rtx (DImode);
        !          1854:   operands[2] = gen_rtx (LTU, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1855:   operands[3] = gen_rtx (EQ, VOIDmode, operands[1], const0_rtx);
        !          1856: }")
        !          1857: 
        !          1858: (define_expand "seq"
        !          1859:   [(set (match_operand:DI 0 "register_operand" "")
        !          1860:        (match_dup 1))]
        !          1861:   ""
        !          1862:   "
        !          1863: {
        !          1864:   if (alpha_compare_fp_p)
        !          1865:     FAIL;
        !          1866: 
        !          1867:   operands[1] = gen_rtx (EQ, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1868: }")
        !          1869: 
        !          1870: (define_expand "sne"
        !          1871:   [(set (match_operand:DI 0 "register_operand" "")
        !          1872:        (match_dup 1))
        !          1873:    (set (match_dup 0) (xor:DI (match_dup 0) (const_int 1)))]
        !          1874:   ""
        !          1875:   "
        !          1876: {
        !          1877:   if (alpha_compare_fp_p)
        !          1878:     FAIL;
        !          1879: 
        !          1880:   operands[1] = gen_rtx (EQ, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1881: }")
        !          1882: 
        !          1883: (define_expand "slt"
        !          1884:   [(set (match_operand:DI 0 "register_operand" "")
        !          1885:        (match_dup 1))]
        !          1886:   ""
        !          1887:   "
        !          1888: {
        !          1889:   if (alpha_compare_fp_p)
        !          1890:     FAIL;
        !          1891: 
        !          1892:   operands[1] = gen_rtx (LT, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1893: }")
        !          1894: 
        !          1895: (define_expand "sle"
        !          1896:   [(set (match_operand:DI 0 "register_operand" "")
        !          1897:        (match_dup 1))]
        !          1898:   ""
        !          1899:   "
        !          1900: {
        !          1901:   if (alpha_compare_fp_p)
        !          1902:     FAIL;
        !          1903: 
        !          1904:   operands[1] = gen_rtx (LE, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1905: }")
        !          1906: 
        !          1907: (define_expand "sgt"
        !          1908:   [(set (match_operand:DI 0 "register_operand" "")
        !          1909:        (match_dup 1))]
        !          1910:   ""
        !          1911:   "
        !          1912: {
        !          1913:   if (alpha_compare_fp_p)
        !          1914:     FAIL;
        !          1915: 
        !          1916:   operands[1] = gen_rtx (LT, DImode, force_reg (DImode, alpha_compare_op1),
        !          1917:                         alpha_compare_op0);
        !          1918: }")
        !          1919: 
        !          1920: (define_expand "sge"
        !          1921:   [(set (match_operand:DI 0 "register_operand" "")
        !          1922:        (match_dup 1))]
        !          1923:   ""
        !          1924:   "
        !          1925: {
        !          1926:   if (alpha_compare_fp_p)
        !          1927:     FAIL;
        !          1928: 
        !          1929:   operands[1] = gen_rtx (LE, DImode, force_reg (DImode, alpha_compare_op1),
        !          1930:                         alpha_compare_op0);
        !          1931: }")
        !          1932: 
        !          1933: (define_expand "sltu"
        !          1934:   [(set (match_operand:DI 0 "register_operand" "")
        !          1935:        (match_dup 1))]
        !          1936:   ""
        !          1937:   "
        !          1938: {
        !          1939:   if (alpha_compare_fp_p)
        !          1940:     FAIL;
        !          1941: 
        !          1942:   operands[1] = gen_rtx (LTU, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1943: }")
        !          1944: 
        !          1945: (define_expand "sleu"
        !          1946:   [(set (match_operand:DI 0 "register_operand" "")
        !          1947:        (match_dup 1))]
        !          1948:   ""
        !          1949:   "
        !          1950: {
        !          1951:   if (alpha_compare_fp_p)
        !          1952:     FAIL;
        !          1953: 
        !          1954:   operands[1] = gen_rtx (LEU, DImode, alpha_compare_op0, alpha_compare_op1);
        !          1955: }")
        !          1956: 
        !          1957: (define_expand "sgtu"
        !          1958:   [(set (match_operand:DI 0 "register_operand" "")
        !          1959:        (match_dup 1))]
        !          1960:   ""
        !          1961:   "
        !          1962: {
        !          1963:   if (alpha_compare_fp_p)
        !          1964:     FAIL;
        !          1965: 
        !          1966:   operands[1] = gen_rtx (LTU, DImode, force_reg (DImode, alpha_compare_op1),
        !          1967:                         alpha_compare_op0);
        !          1968: }")
        !          1969: 
        !          1970: (define_expand "sgeu"
        !          1971:   [(set (match_operand:DI 0 "register_operand" "")
        !          1972:        (match_dup 1))]
        !          1973:   ""
        !          1974:   "
        !          1975: {
        !          1976:   if (alpha_compare_fp_p)
        !          1977:     FAIL;
        !          1978: 
        !          1979:   operands[1] = gen_rtx (LEU, DImode, force_reg (DImode, alpha_compare_op1),
        !          1980:                         alpha_compare_op0);
        !          1981: }")
        !          1982: 
        !          1983: ;; These define_split definitions are used in cases when comparisons have
        !          1984: ;; not be stated in the correct way and we need to reverse the second
        !          1985: ;; comparison.  For example, x >= 7 has to be done as x < 6 with the
        !          1986: ;; comparison that tests the result being reversed.  We have one define_split
        !          1987: ;; for each use of a comparison.  They do not match valid insns and need
        !          1988: ;; not generate valid insns.
        !          1989: ;;
        !          1990: ;; We can also handle equality comparisons (and inequality comparisons in
        !          1991: ;; cases where the resulting add cannot overflow) with out-of-range numbers by
        !          1992: ;; doing an add followed by a comparison with zero.  For this case, we
        !          1993: ;; also have an SImode pattern since we can merge the add and sign
        !          1994: ;; extend and the order doesn't matter.
        !          1995: ;;
        !          1996: ;; We do not do this for floating-point, since it isn't clear how the "wrong"
        !          1997: ;; operation could have been generated.
        !          1998: 
        !          1999: (define_split
        !          2000:   [(set (match_operand:DI 0 "register_operand" "")
        !          2001:        (if_then_else:DI
        !          2002:         (match_operator 1 "comparison_operator"
        !          2003:                         [(match_operand:DI 2 "reg_or_0_operand" "")
        !          2004:                          (match_operand:DI 3 "reg_or_cint_operand" "")])
        !          2005:         (match_operand:DI 4 "reg_or_cint_operand" "")
        !          2006:         (match_operand:DI 5 "reg_or_cint_operand" "")))
        !          2007:    (clobber (match_operand:DI 6 "register_operand" ""))]
        !          2008:   "operands[3] != const0_rtx"
        !          2009:   [(set (match_dup 6) (match_dup 7))
        !          2010:    (set (match_dup 0)
        !          2011:        (if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))]
        !          2012:   "
        !          2013: { enum rtx_code code = GET_CODE (operands[1]);
        !          2014:   int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU);
        !          2015: 
        !          2016:   /* If we are comparing for equality with a constant and that constant
        !          2017:      appears in the arm when the register equals the constant, use the
        !          2018:      register since that is more likely to match (and to produce better code
        !          2019:      if both would).  */
        !          2020: 
        !          2021:   if (code == EQ && GET_CODE (operands[3]) == CONST_INT
        !          2022:       && rtx_equal_p (operands[4], operands[3]))
        !          2023:     operands[4] = operands[2];
        !          2024: 
        !          2025:   else if (code == NE && GET_CODE (operands[3]) == CONST_INT
        !          2026:           && rtx_equal_p (operands[5], operands[3]))
        !          2027:     operands[5] = operands[2];
        !          2028: 
        !          2029:   if ((code == NE || code == EQ
        !          2030:        || (extended_count (operands[2], DImode, unsignedp) >= 1
        !          2031:           && extended_count (operands[3], DImode, unsignedp) >= 1))
        !          2032:       && GET_CODE (operands[3]) == CONST_INT
        !          2033:       && (unsigned) INTVAL (operands[3]) > 255)
        !          2034:     {
        !          2035:       operands[7] = gen_rtx (PLUS, DImode, operands[2],
        !          2036:                             GEN_INT (- INTVAL (operands[3])));
        !          2037:       operands[8] = gen_rtx (code, VOIDmode, operands[6], const0_rtx);
        !          2038:     }
        !          2039: 
        !          2040:   else if (code == EQ || code == LE || code == LT
        !          2041:           || code == LEU || code == LTU)
        !          2042:     {
        !          2043:       operands[7] = gen_rtx (code, DImode, operands[2], operands[3]);
        !          2044:       operands[8] = gen_rtx (NE, VOIDmode, operands[6], const0_rtx);
        !          2045:     }
        !          2046:   else
        !          2047:     {
        !          2048:       operands[7] = gen_rtx (reverse_condition (code), DImode, operands[2],
        !          2049:                             operands[3]);
        !          2050:       operands[8] = gen_rtx (EQ, VOIDmode, operands[6], const0_rtx);
        !          2051:     }
        !          2052: }")
        !          2053: 
        !          2054: (define_split
        !          2055:   [(set (match_operand:DI 0 "register_operand" "")
        !          2056:        (if_then_else:DI
        !          2057:         (match_operator 1 "comparison_operator"
        !          2058:                         [(match_operand:SI 2 "reg_or_0_operand" "")
        !          2059:                          (match_operand:SI 3 "const_int_operand" "")])
        !          2060:         (match_operand:DI 4 "reg_or_8bit_operand" "")
        !          2061:         (match_operand:DI 5 "reg_or_8bit_operand" "")))
        !          2062:    (clobber (match_operand:DI 6 "register_operand" ""))]
        !          2063:   "(unsigned) INTVAL (operands[3]) > 255"
        !          2064:   [(set (match_dup 6) (match_dup 7))
        !          2065:    (set (match_dup 0)
        !          2066:        (if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))]
        !          2067:   "
        !          2068: { enum rtx_code code = GET_CODE (operands[1]);
        !          2069:   int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU);
        !          2070: 
        !          2071:   if ((code != NE && code != EQ
        !          2072:        && ! (extended_count (operands[2], DImode, unsignedp) >= 1
        !          2073:             && extended_count (operands[3], DImode, unsignedp) >= 1)))
        !          2074:     FAIL;
        !          2075:  
        !          2076:   operands[7] = gen_rtx (SIGN_EXTEND, DImode,
        !          2077:                         gen_rtx (PLUS, SImode, operands[2],
        !          2078:                                  GEN_INT (- INTVAL (operands[3]))));
        !          2079:   operands[8] = gen_rtx (GET_CODE (operands[1]), VOIDmode, operands[6],
        !          2080:                         const0_rtx);
        !          2081: }")
        !          2082: 
        !          2083: (define_split
        !          2084:   [(set (pc)
        !          2085:        (if_then_else
        !          2086:         (match_operator 1 "comparison_operator"
        !          2087:                         [(match_operand:DI 2 "reg_or_0_operand" "")
        !          2088:                          (match_operand:DI 3 "reg_or_cint_operand" "")])
        !          2089:         (label_ref (match_operand 0 "" ""))
        !          2090:         (pc)))
        !          2091:    (clobber (match_operand:DI 4 "register_operand" ""))]
        !          2092:   "operands[3] != const0_rtx"
        !          2093:   [(set (match_dup 4) (match_dup 5))
        !          2094:    (set (pc) (if_then_else (match_dup 6) (label_ref (match_dup 0)) (pc)))]
        !          2095:   "
        !          2096: { enum rtx_code code = GET_CODE (operands[1]);
        !          2097:   int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU);
        !          2098: 
        !          2099:   if ((code == NE || code == EQ
        !          2100:        || (extended_count (operands[2], DImode, unsignedp) >= 1
        !          2101:           && extended_count (operands[3], DImode, unsignedp) >= 1))
        !          2102:       && GET_CODE (operands[3]) == CONST_INT
        !          2103:       && (unsigned) INTVAL (operands[3]) > 255)
        !          2104:     {
        !          2105:       operands[5] = gen_rtx (PLUS, DImode, operands[2],
        !          2106:                             GEN_INT (- INTVAL (operands[3])));
        !          2107:       operands[6] = gen_rtx (code, VOIDmode, operands[4], const0_rtx);
        !          2108:     }
        !          2109: 
        !          2110:   else if (code == EQ || code == LE || code == LT
        !          2111:           || code == LEU || code == LTU)
        !          2112:     {
        !          2113:       operands[5] = gen_rtx (code, DImode, operands[2], operands[3]);
        !          2114:       operands[6] = gen_rtx (NE, VOIDmode, operands[4], const0_rtx);
        !          2115:     }
        !          2116:   else
        !          2117:     {
        !          2118:       operands[5] = gen_rtx (reverse_condition (code), DImode, operands[2],
        !          2119:                             operands[3]);
        !          2120:       operands[6] = gen_rtx (EQ, VOIDmode, operands[4], const0_rtx);
        !          2121:     }
        !          2122: }")
        !          2123: 
        !          2124: (define_split
        !          2125:   [(set (pc)
        !          2126:        (if_then_else
        !          2127:         (match_operator 1 "comparison_operator"
        !          2128:                         [(match_operand:SI 2 "reg_or_0_operand" "")
        !          2129:                          (match_operand:SI 3 "const_int_operand" "")])
        !          2130:         (label_ref (match_operand 0 "" ""))
        !          2131:         (pc)))
        !          2132:    (clobber (match_operand:DI 4 "register_operand" ""))]
        !          2133:   "INTVAL (operands[3]) < 0
        !          2134:    && (GET_CODE (operands[1]) == EQ || GET_CODE (operands[1]) == NE)"
        !          2135:   [(set (match_dup 4) (match_dup 5))
        !          2136:    (set (pc) (if_then_else (match_dup 6) (label_ref (match_dup 0)) (pc)))]
        !          2137:   "
        !          2138: { operands[5] = gen_rtx (SIGN_EXTEND, DImode,
        !          2139:                         gen_rtx (PLUS, SImode, operands[2],
        !          2140:                                  GEN_INT (- INTVAL (operands[3]))));
        !          2141:   operands[6] = gen_rtx (GET_CODE (operands[1]), VOIDmode,
        !          2142:                         operands[4], const0_rtx);
        !          2143: }")
        !          2144: 
        !          2145: ;; Here are the CALL and unconditional branch insns.
        !          2146: 
        !          2147: (define_expand "call"
        !          2148:   [(parallel [(call (mem:DI (match_dup 2))
        !          2149:                    (match_operand 1 "" ""))
        !          2150:              (use (match_operand:DI 0 "" ""))
        !          2151:              (clobber (reg:DI 26))])]
        !          2152:   ""
        !          2153:   "
        !          2154: { if (GET_CODE (operands[0]) != MEM)
        !          2155:     abort ();
        !          2156:   operands[0] = XEXP (operands[0], 0);
        !          2157: 
        !          2158:   operands[2] = gen_rtx (REG, DImode, 27);
        !          2159:   emit_move_insn (operands[2], operands[0]);
        !          2160: 
        !          2161:   if (GET_CODE (operands[0]) != SYMBOL_REF)
        !          2162:     operands[0] = const0_rtx;
        !          2163: }")
        !          2164: 
        !          2165: (define_expand "call_value"
        !          2166:   [(parallel [(set (match_operand 0 "" "")
        !          2167:                   (call (mem:DI (match_dup 3))
        !          2168:                         (match_operand 2 "" "")))
        !          2169:              (use (match_operand:DI 1 "" ""))
        !          2170:              (clobber (reg:DI 26))])]
        !          2171:   ""
        !          2172:   "
        !          2173: { if (GET_CODE (operands[1]) != MEM)
        !          2174:     abort ();
        !          2175: 
        !          2176:   operands[1] = XEXP (operands[1], 0);
        !          2177: 
        !          2178:   operands[3] = gen_rtx (REG, DImode, 27);
        !          2179:   emit_move_insn (operands[3], operands[1]);
        !          2180: 
        !          2181:   if (GET_CODE (operands[1]) != SYMBOL_REF)
        !          2182:     operands[1] = const0_rtx;
        !          2183: }")
        !          2184: 
        !          2185: (define_insn ""
        !          2186:   [(call (mem:DI (reg:DI 27))
        !          2187:         (match_operand 0 "" ""))
        !          2188:    (use (match_operand:DI 1 "" ""))
        !          2189:    (clobber (reg:DI 26))]
        !          2190:   ""
        !          2191:   "*
        !          2192: { if (alpha_gp_dead_after (insn))
        !          2193:     return \"jsr $26,($27),%1\";
        !          2194:   else 
        !          2195:     return \"jsr $26,($27),%1\;ldgp $29,0($26)\";
        !          2196: }"
        !          2197:   [(set_attr "type" "jsr")])
        !          2198:       
        !          2199: (define_insn ""
        !          2200:   [(set (match_operand 0 "register_operand" "=rf")
        !          2201:        (call (mem:DI (reg:DI 27))
        !          2202:              (match_operand 1 "" "")))
        !          2203:    (use (match_operand:DI 2 "" ""))
        !          2204:    (clobber (reg:DI 26))]
        !          2205:   ""
        !          2206:   "*
        !          2207: { if (alpha_gp_dead_after (insn))
        !          2208:     return \"jsr $26,($27),%2\";
        !          2209:   else 
        !          2210:     return \"jsr $26,($27),%2\;ldgp $29,0($26)\";
        !          2211: }"
        !          2212:   [(set_attr "type" "jsr")])
        !          2213: 
        !          2214: (define_insn ""
        !          2215:   [(call (mem:DI (match_operand 1 "current_function_operand" "i"))
        !          2216:         (match_operand 0 "" ""))
        !          2217:    (use (match_dup 1))
        !          2218:    (clobber (reg:DI 26))]
        !          2219:   ""
        !          2220:   "bsr $26,%F1"
        !          2221:   [(set_attr "type" "ibr")])
        !          2222:       
        !          2223: (define_insn ""
        !          2224:   [(set (match_operand 0 "register_operand" "=rf")
        !          2225:        (call (mem:DI (match_operand 1 "current_function_operand" "i"))
        !          2226:              (match_operand 2 "" "")))
        !          2227:    (use (match_dup 1))
        !          2228:    (clobber (reg:DI 26))]
        !          2229:   ""
        !          2230:   "bsr $26,%F1"
        !          2231:   [(set_attr "type" "ibr")])
        !          2232: 
        !          2233: (define_insn "jump"
        !          2234:   [(set (pc)
        !          2235:        (label_ref (match_operand 0 "" "")))]
        !          2236:   ""
        !          2237:   "br $31,%l0"
        !          2238:   [(set_attr "type" "ibr")])
        !          2239: 
        !          2240: (define_insn "return"
        !          2241:   [(return)]
        !          2242:   "direct_return ()"
        !          2243:   "ret $31,($26),1"
        !          2244:   [(set_attr "type" "ibr")])
        !          2245: 
        !          2246: (define_insn "indirect_jump"
        !          2247:   [(set (pc) (match_operand:DI 0 "register_operand" "r"))]
        !          2248:   ""
        !          2249:   "jmp $31,(%0),0"
        !          2250:   [(set_attr "type" "ibr")])
        !          2251: 
        !          2252: (define_insn "nop"
        !          2253:   [(const_int 0)]
        !          2254:   ""
        !          2255:   "bis $31,$31,$31"
        !          2256:   [(set_attr "type" "iaddlog")])
        !          2257: 
        !          2258: (define_expand "tablejump"
        !          2259:   [(set (match_dup 3)
        !          2260:        (sign_extend:DI (match_operand:SI 0 "register_operand" "")))
        !          2261:    (parallel [(set (pc) (plus:DI (match_dup 3) (reg:DI 29)))
        !          2262:              (use (label_ref (match_operand 1 "" "")))
        !          2263:              (clobber (match_scratch:DI 2 "=r"))])]
        !          2264:   ""
        !          2265:   "
        !          2266: { operands[3] = gen_reg_rtx (DImode); }")
        !          2267: 
        !          2268: (define_insn ""
        !          2269:   [(set (pc)
        !          2270:        (plus:DI (match_operand:DI 0 "register_operand" "r")
        !          2271:                 (reg:DI 29)))
        !          2272:    (use (label_ref (match_operand 1 "" "")))
        !          2273:    (clobber (match_scratch:DI 2 "=r"))]
        !          2274:   ""
        !          2275:   "*
        !          2276: { rtx best_label = 0;
        !          2277:   rtx jump_table_insn = next_active_insn (operands[1]);
        !          2278: 
        !          2279:   if (GET_CODE (jump_table_insn) == JUMP_INSN
        !          2280:       && GET_CODE (PATTERN (jump_table_insn)) == ADDR_VEC)
        !          2281:     {
        !          2282:       rtx jump_table = PATTERN (jump_table_insn);
        !          2283:       int n_labels = XVECLEN (jump_table, 0);
        !          2284:       int best_count = -1;
        !          2285:       int i, j;
        !          2286: 
        !          2287:       for (i = 0; i < n_labels; i++)
        !          2288:        {
        !          2289:          int count = 1;
        !          2290: 
        !          2291:          for (j = i + 1; j < n_labels; j++)
        !          2292:            if (XEXP (XVECEXP (jump_table, 0, i), 0)
        !          2293:                == XEXP (XVECEXP (jump_table, 0, j), 0))
        !          2294:              count++;
        !          2295: 
        !          2296:          if (count > best_count)
        !          2297:            best_count = count, best_label = XVECEXP (jump_table, 0, i);
        !          2298:        }
        !          2299:     }
        !          2300: 
        !          2301:   if (best_label)
        !          2302:     {
        !          2303:       operands[3] = best_label;
        !          2304:       return \"addq %0,$29,%2\;jmp $31,(%2),%3\";
        !          2305:     }
        !          2306:   else
        !          2307:     return \"addq %0,$29,%2\;jmp $31,(%2),0\";
        !          2308: }"
        !          2309:   [(set_attr "type" "ibr")])
        !          2310: 
        !          2311: ;; Cache flush.  Used by INITIALIZE_TRAMPOLINE.  0x86 is PAL_imb, but we don't
        !          2312: ;; want to have to include pal.h in our .s file.
        !          2313: (define_insn ""
        !          2314:   [(unspec_volatile [(const_int 0)] 0)]
        !          2315:   ""
        !          2316:   "call_pal 0x86")
        !          2317: 
        !          2318: ;; Finally, we have the basic data motion insns.  The byte and word insns
        !          2319: ;; are done via define_expand.  Start with the floating-point insns, since
        !          2320: ;; they are simpler.
        !          2321: 
        !          2322: (define_insn ""
        !          2323:   [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m,f,f,f,m")
        !          2324:        (match_operand:SF 1 "input_operand" "r,m,rG,f,G,m,fG"))]
        !          2325:   "register_operand (operands[0], SFmode)
        !          2326:    || reg_or_fp0_operand (operands[1], SFmode)"
        !          2327:   "@
        !          2328:    bis %1,%1,%0
        !          2329:    ldl %0,%1
        !          2330:    stl %r1,%0
        !          2331:    cpys %1,%1,%0
        !          2332:    cpys $f31,$f31,%0
        !          2333:    lds %0,%1
        !          2334:    sts %R1,%0"
        !          2335:   [(set_attr "type" "iaddlog,ld,st,fpop,fpop,ld,st")])
        !          2336: 
        !          2337: (define_insn ""
        !          2338:   [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,f,f,f,m")
        !          2339:        (match_operand:DF 1 "input_operand" "r,m,rG,f,G,m,fG"))]
        !          2340:   "register_operand (operands[0], DFmode)
        !          2341:    || reg_or_fp0_operand (operands[1], DFmode)"
        !          2342:   "@
        !          2343:    bis %1,%1,%0
        !          2344:    ldq %0,%1
        !          2345:    stq %r1,%0
        !          2346:    cpys %1,%1,%0
        !          2347:    cpys $f31,$f31,%0
        !          2348:    ldt %0,%1
        !          2349:    stt %R1,%0"
        !          2350:   [(set_attr "type" "iaddlog,ld,st,fpop,fpop,ld,st")])
        !          2351: 
        !          2352: (define_expand "movsf"
        !          2353:   [(set (match_operand:SF 0 "nonimmediate_operand" "")
        !          2354:        (match_operand:SF 1 "general_operand" ""))]
        !          2355:   ""
        !          2356:   "
        !          2357: {
        !          2358:   if (GET_CODE (operands[0]) == MEM
        !          2359:       && ! reg_or_fp0_operand (operands[1], SFmode))
        !          2360:     operands[1] = force_reg (SFmode, operands[1]);
        !          2361: }")
        !          2362: 
        !          2363: (define_expand "movdf"
        !          2364:   [(set (match_operand:DF 0 "nonimmediate_operand" "")
        !          2365:        (match_operand:DF 1 "general_operand" ""))]
        !          2366:   ""
        !          2367:   "
        !          2368: {
        !          2369:   if (GET_CODE (operands[0]) == MEM
        !          2370:       && ! reg_or_fp0_operand (operands[1], DFmode))
        !          2371:     operands[1] = force_reg (DFmode, operands[1]);
        !          2372: }")
        !          2373: 
        !          2374: ;; There is a problem with 32-bit values in FP registers.  We keep such
        !          2375: ;; values in the register as a quadword.  This is done on loads by using
        !          2376: ;; the cvtlq instruction.  On stores, we can't do anything directly from
        !          2377: ;; floating-point registers.  Disallow such an operation and let reload
        !          2378: ;; use an integer register instead.  Don't encourage 32-bit values to
        !          2379: ;; be placed in FP registers at all.
        !          2380: 
        !          2381: (define_insn ""
        !          2382:   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,*f,*f,*f")
        !          2383:        (match_operand:SI 1 "input_operand" "r,J,I,K,L,m,rJ,*f,J,m"))]
        !          2384:   "register_operand (operands[0], SImode)
        !          2385:    || reg_or_0_operand (operands[1], SImode)"
        !          2386:   "@
        !          2387:    bis %1,%1,%0
        !          2388:    bis $31,$31,%0
        !          2389:    bis $31,%1,%0
        !          2390:    lda %0,%1
        !          2391:    ldah %0,%h1
        !          2392:    ldl %0,%1
        !          2393:    stl %r1,%0
        !          2394:    cpys %1,%1,%0
        !          2395:    cpys $f31,$f31,%0
        !          2396:    lds %0,%1\;cvtlq %0,%0"
        !          2397:   [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,iaddlog,ld,st,fpop,fpop,ld")])
        !          2398: 
        !          2399: (define_insn ""
        !          2400:   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
        !          2401:        (match_operand:HI 1 "input_operand" "r,J,I,n,f,J"))]
        !          2402:   "register_operand (operands[0], HImode)
        !          2403:    || register_operand (operands[1], HImode)"
        !          2404:   "@
        !          2405:    bis %1,%1,%0
        !          2406:    bis $31,$31,%0
        !          2407:    bis $31,%1,%0
        !          2408:    lda %0,%L1
        !          2409:    cpys %1,%1,%0
        !          2410:    cpys $f31,$f31,%0"
        !          2411:   [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,fpop,fpop")])
        !          2412: 
        !          2413: (define_insn ""
        !          2414:   [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
        !          2415:        (match_operand:QI 1 "input_operand" "r,J,I,n,f,J"))]
        !          2416:   "register_operand (operands[0], QImode)
        !          2417:    || register_operand (operands[1], QImode)"
        !          2418:   "@
        !          2419:    bis %1,%1,%0
        !          2420:    bis $31,$31,%0
        !          2421:    bis $31,%1,%0
        !          2422:    lda %0,%L1
        !          2423:    cpys %1,%1,%0
        !          2424:    cpys $f31,$f31,%0"
        !          2425:   [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,fpop,fpop")])
        !          2426: 
        !          2427: ;; We do two major things here: handle mem->mem and construct long
        !          2428: ;; constants.
        !          2429: 
        !          2430: (define_expand "movsi"
        !          2431:   [(set (match_operand:SI 0 "general_operand" "")
        !          2432:        (match_operand:SI 1 "general_operand" ""))]
        !          2433:   ""
        !          2434:   "
        !          2435: {
        !          2436:   if (GET_CODE (operands[0]) == MEM
        !          2437:       && ! reg_or_0_operand (operands[1], SImode))
        !          2438:     operands[1] = force_reg (SImode, operands[1]);
        !          2439: 
        !          2440:   if (! CONSTANT_P (operands[1]) || input_operand (operands[1], SImode))
        !          2441:     ;
        !          2442:   else if (GET_CODE (operands[1]) == CONST_INT)
        !          2443:     {
        !          2444:       if (alpha_emit_set_const (operands[0], INTVAL (operands[1]), 3))
        !          2445:        DONE;
        !          2446:       else
        !          2447:        abort ();
        !          2448:     }
        !          2449: }")
        !          2450: 
        !          2451: ;; Split a load of a large constant into the appropriate two-insn
        !          2452: ;; sequence.
        !          2453: 
        !          2454: (define_split
        !          2455:   [(set (match_operand:SI 0 "register_operand" "")
        !          2456:        (match_operand:SI 1 "const_int_operand" ""))]
        !          2457:   "! add_operand (operands[1], SImode)"
        !          2458:   [(set (match_dup 0) (match_dup 2))
        !          2459:    (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 3)))]
        !          2460:   "
        !          2461: { if (alpha_emit_set_const (operands[0], INTVAL (operands[1]), 2))
        !          2462:     DONE;
        !          2463:   else
        !          2464:     FAIL;
        !          2465: }")
        !          2466: 
        !          2467: (define_insn ""
        !          2468:   [(set (match_operand:DI 0 "general_operand" "=r,r,r,r,r,r,r,m,f,f,f,m")
        !          2469:        (match_operand:DI 1 "input_operand" "r,J,I,K,L,s,m,rJ,f,J,m,fG"))]
        !          2470:   "register_operand (operands[0], DImode)
        !          2471:    || reg_or_0_operand (operands[1], DImode)"
        !          2472:   "@
        !          2473:    bis %1,%1,%0
        !          2474:    bis $31,$31,%0
        !          2475:    bis $31,%1,%0
        !          2476:    lda %0,%1
        !          2477:    ldah %0,%h1
        !          2478:    lda %0,%1
        !          2479:    ldq%A1 %0,%1
        !          2480:    stq%A0 %r1,%0
        !          2481:    cpys %1,%1,%0
        !          2482:    cpys $f31,$f31,%0
        !          2483:    ldt %0,%1
        !          2484:    stt %R1,%0"
        !          2485:   [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,iaddlog,ldsym,ld,st,fpop,fpop,ld,st")])
        !          2486: 
        !          2487: ;; We do three major things here: handle mem->mem, put 64-bit constants in
        !          2488: ;; memory, and construct long 32-bit constants.
        !          2489: 
        !          2490: (define_expand "movdi"
        !          2491:   [(set (match_operand:DI 0 "general_operand" "")
        !          2492:        (match_operand:DI 1 "general_operand" ""))]
        !          2493:   ""
        !          2494:   "
        !          2495: {
        !          2496:   if (GET_CODE (operands[0]) == MEM
        !          2497:       && ! reg_or_0_operand (operands[1], DImode))
        !          2498:     operands[1] = force_reg (DImode, operands[1]);
        !          2499: 
        !          2500:   if (! CONSTANT_P (operands[1]) || input_operand (operands[1], DImode))
        !          2501:     ;
        !          2502:   else if (GET_CODE (operands[1]) == CONST_INT
        !          2503:           && alpha_emit_set_const (operands[0], INTVAL (operands[1]), 3))
        !          2504:     DONE;
        !          2505:   else if (CONSTANT_P (operands[1]))
        !          2506:     {
        !          2507:       operands[1] = force_const_mem (DImode, operands[1]);
        !          2508:       if (reload_in_progress)
        !          2509:        {
        !          2510:          emit_move_insn (operands[0], XEXP (operands[1], 0));
        !          2511:          XEXP (operands[1], 0) = operands[0];
        !          2512:        }
        !          2513:       else
        !          2514:        operands[1] = validize_mem (operands[1]);
        !          2515:     }
        !          2516:   else
        !          2517:     abort ();
        !          2518: }")
        !          2519: 
        !          2520: ;; Split a load of a large constant into the appropriate two-insn
        !          2521: ;; sequence.
        !          2522: 
        !          2523: (define_split
        !          2524:   [(set (match_operand:DI 0 "register_operand" "")
        !          2525:        (match_operand:DI 1 "const_int_operand" ""))]
        !          2526:   "! add_operand (operands[1], DImode)"
        !          2527:   [(set (match_dup 0) (match_dup 2))
        !          2528:    (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 3)))]
        !          2529:   "
        !          2530: { if (alpha_emit_set_const (operands[0], INTVAL (operands[1]), 2))
        !          2531:     DONE;
        !          2532:   else
        !          2533:     FAIL;
        !          2534: }")
        !          2535: 
        !          2536: ;; These are the partial-word cases.
        !          2537: ;;
        !          2538: ;; First we have the code to load an aligned word.  Operand 0 is the register
        !          2539: ;; in which to place the result.  It's mode is QImode or HImode.  Operand 1
        !          2540: ;; is an SImode MEM at the low-order byte of the proper word.  Operand 2 is the
        !          2541: ;; number of bits within the word that the value is.  Operand 3 is an SImode
        !          2542: ;; scratch register.  If operand 0 is a hard register, operand 3 may be the
        !          2543: ;; same register.  It is allowed to conflict with operand 1 as well.
        !          2544: 
        !          2545: (define_expand "aligned_loadqi"
        !          2546:   [(set (match_operand:SI 3 "register_operand" "")
        !          2547:        (match_operand:SI 1 "memory_operand" ""))
        !          2548:    (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0)
        !          2549:        (zero_extract:DI (subreg:DI (match_dup 3) 0)
        !          2550:                         (const_int 8)
        !          2551:                         (match_operand:DI 2 "const_int_operand" "")))]
        !          2552:         
        !          2553:   ""
        !          2554:   "")
        !          2555:   
        !          2556: (define_expand "aligned_loadhi"
        !          2557:   [(set (match_operand:SI 3 "register_operand" "")
        !          2558:        (match_operand:SI 1 "memory_operand" ""))
        !          2559:    (set (subreg:DI (match_operand:HI 0 "register_operand" "") 0)
        !          2560:        (zero_extract:DI (subreg:DI (match_dup 3) 0)
        !          2561:                         (const_int 16)
        !          2562:                         (match_operand:DI 2 "const_int_operand" "")))]
        !          2563:         
        !          2564:   ""
        !          2565:   "")
        !          2566:   
        !          2567: ;; Similar for unaligned loads.  For QImode, we use the sequence from the
        !          2568: ;; Alpha Architecture manual.  However, for HImode, we do not.  HImode pointers
        !          2569: ;; are normally aligned to the byte boundary, so an HImode object cannot
        !          2570: ;; cross a longword boundary.  We could use a sequence similar to that for
        !          2571: ;; QImode, but that would fail if the pointer, was, in fact, not aligned.
        !          2572: ;; Instead, we clear bit 1 in the address and do an ldl.  If the low-order
        !          2573: ;; bit was not aligned, this will trap and the trap handler will do what is
        !          2574: ;; needed.
        !          2575: ;;
        !          2576: ;; Here operand 1 is the address.  Operands 2 and 3 are temporaries, where
        !          2577: ;; operand 3 can overlap the input and output registers.
        !          2578: 
        !          2579: (define_expand "unaligned_loadqi"
        !          2580:   [(set (match_operand:DI 2 "register_operand" "")
        !          2581:        (mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
        !          2582:                        (const_int -8))))
        !          2583:    (set (match_operand:DI 3 "register_operand" "")
        !          2584:        (match_dup 1))
        !          2585:    (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0)
        !          2586:        (zero_extract:DI (match_dup 2)
        !          2587:                         (const_int 8)
        !          2588:                         (ashift:DI (match_dup 3) (const_int 3))))]
        !          2589:   ""
        !          2590:   "")
        !          2591: 
        !          2592: ;; For this, the address must already be in a register.  We also need two
        !          2593: ;; DImode temporaries, neither of which may overlap the input (and hence the
        !          2594: ;; output, since they might be the same register), but both of which may
        !          2595: ;; be the same.
        !          2596: 
        !          2597: (define_expand "unaligned_loadhi"
        !          2598:   [(set (match_operand:DI 2 "register_operand" "")
        !          2599:        (and:DI (match_operand:DI 1 "register_operand" "")
        !          2600:                (const_int -7)))
        !          2601:    (set (match_operand:DI 3 "register_operand" "")
        !          2602:        (mem:DI (match_dup 2)))
        !          2603:    (set (subreg:DI (match_operand:HI 0 "register_operand" "") 0)
        !          2604:        (zero_extract:DI (match_dup 3)
        !          2605:                         (const_int 16)
        !          2606:                         (ashift:DI (match_dup 1) (const_int 3))))]
        !          2607:   ""
        !          2608:   "")
        !          2609:        
        !          2610: ;; Storing an aligned byte or word requires two temporaries.  Operand 0 is the
        !          2611: ;; aligned SImode MEM.  Operand 1 is the register containing the 
        !          2612: ;; byte or word to store.  Operand 2 is the number of bits within the word that
        !          2613: ;; the value should be placed.  Operands 3 and 4 are SImode temporaries.
        !          2614: 
        !          2615: (define_expand "aligned_store"
        !          2616:   [(set (match_operand:SI 3 "register_operand" "")
        !          2617:        (match_operand:SI 0 "memory_operand" ""))
        !          2618:    (set (subreg:DI (match_dup 3) 0)
        !          2619:        (and:DI (subreg:DI (match_dup 3) 0) (match_dup 5)))
        !          2620:    (set (subreg:DI (match_operand:SI 4 "register_operand" "") 0)
        !          2621:        (ashift:DI (zero_extend:DI (match_operand 1 "register_operand" ""))
        !          2622:                   (match_operand:DI 2 "const_int_operand" "")))
        !          2623:    (set (subreg:DI (match_dup 4) 0)
        !          2624:        (ior:DI (subreg:DI (match_dup 4) 0) (subreg:DI (match_dup 3) 0)))
        !          2625:    (set (match_dup 0) (match_dup 4))]
        !          2626:   ""
        !          2627:   "
        !          2628: { operands[5] = GEN_INT (~ (GET_MODE_MASK (GET_MODE (operands[1]))
        !          2629:                            << INTVAL (operands[2])));
        !          2630: }")
        !          2631: 
        !          2632: ;; For the unaligned byte case, we use code similar to that in the
        !          2633: ;; Architecture book, but reordered to lower the number of registers
        !          2634: ;; required.  Operand 0 is the address.  Operand 1 is the data to store.
        !          2635: ;; Operands 2, 3, and 4 are DImode temporaries, where the last two may
        !          2636: ;; be the same temporary, if desired.  If the address is in a register,
        !          2637: ;; operand 2 can be that register.
        !          2638: 
        !          2639: (define_expand "unaligned_storeqi"
        !          2640:   [(set (match_operand:DI 3 "register_operand" "")
        !          2641:        (mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
        !          2642:                        (const_int -8))))
        !          2643:    (set (match_operand:DI 2 "register_operand" "")
        !          2644:        (match_dup 0))
        !          2645:    (set (match_dup 3)
        !          2646:        (and:DI (ashift:DI (const_int 255)
        !          2647:                           (ashift:DI (match_dup 2) (const_int 3)))
        !          2648:                (match_dup 3)))
        !          2649:    (set (match_operand:DI 4 "register_operand" "")
        !          2650:        (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" ""))
        !          2651:                   (ashift:DI (match_dup 2) (const_int 3))))
        !          2652:    (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
        !          2653:    (set (mem:DI (and:DI (match_dup 0) (const_int -8)))
        !          2654:        (match_dup 4))]
        !          2655:   ""
        !          2656:   "")
        !          2657: 
        !          2658: ;; This is the code for storing into an unaligned short.  It uses the same
        !          2659: ;; trick as loading from an unaligned short.  It needs lots of temporaries.
        !          2660: ;; However, during reload, we only have two registers available.  So we
        !          2661: ;; repeat code so that only two temporaries are available.  During RTL
        !          2662: ;; generation, we can use different pseudos for each temporary and CSE
        !          2663: ;; will remove the redundancies.  During reload, we have to settle with
        !          2664: ;; what we get.  Luckily, unaligned accesses of this kind produced during
        !          2665: ;; reload are quite rare.
        !          2666: ;;
        !          2667: ;; Operand 0 is the address of the memory location.  Operand 1 contains the
        !          2668: ;; data to store.  The rest of the operands are all temporaries, with
        !          2669: ;; various overlap possibilities during reload.  See reload_outhi for
        !          2670: ;; details of this use.
        !          2671: 
        !          2672: (define_expand "unaligned_storehi"
        !          2673:   [(set (match_operand:DI 2 "register_operand" "")
        !          2674:        (match_operand:DI 0 "address_operand" ""))
        !          2675:    (set (match_operand:DI 3 "register_operand" "")
        !          2676:        (and:DI (match_dup 2) (const_int -7)))
        !          2677:    (set (match_operand:DI 4 "register_operand" "")
        !          2678:        (mem:DI (match_dup 3)))
        !          2679:    (set (match_operand:DI 5 "register_operand" "")
        !          2680:        (and:DI (ashift:DI (const_int 65535)
        !          2681:                           (ashift:DI (match_dup 2) (const_int 3)))
        !          2682:                (match_dup 4)))
        !          2683:    (set (match_operand:DI 6 "register_operand" "")
        !          2684:        (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" ""))
        !          2685:                   (ashift:DI (match_dup 2) (const_int 3))))
        !          2686:    (set (match_operand:DI 7 "register_operand" "")
        !          2687:        (ior:DI (match_dup 5) (match_dup 6)))
        !          2688:    (set (match_operand:DI 8 "register_operand" "") (match_dup 0))
        !          2689:    (set (match_operand:DI 9 "register_operand" "")
        !          2690:        (and:DI (match_dup 8) (const_int -7)))
        !          2691:    (set (mem:DI (match_dup 9)) (match_dup 7))]
        !          2692:   ""
        !          2693:   "")
        !          2694: 
        !          2695: ;; Here are the define_expand's for QI and HI moves that use the above
        !          2696: ;; patterns.  We have the normal sets, plus the ones that need scratch
        !          2697: ;; registers for reload.
        !          2698: 
        !          2699: (define_expand "movqi"
        !          2700:   [(set (match_operand:QI 0 "general_operand" "")
        !          2701:        (match_operand:QI 1 "general_operand" ""))]
        !          2702:   ""
        !          2703:   "
        !          2704: { extern rtx get_unaligned_address ();
        !          2705: 
        !          2706:   /* If the output is not a register, the input must be.  */
        !          2707:   if (GET_CODE (operands[0]) == MEM)
        !          2708:     operands[1] = force_reg (QImode, operands[1]);
        !          2709: 
        !          2710:   /* Handle four memory cases, unaligned and aligned for either the input
        !          2711:      or the output.  The only case where we can be called during reload is
        !          2712:      for aligned loads; all other cases require temporaries.  */
        !          2713: 
        !          2714:   if (GET_CODE (operands[1]) == MEM
        !          2715:       || (GET_CODE (operands[1]) == SUBREG
        !          2716:          && GET_CODE (SUBREG_REG (operands[1])) == MEM)
        !          2717:       || (reload_in_progress && GET_CODE (operands[1]) == REG
        !          2718:          && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
        !          2719:       || (reload_in_progress && GET_CODE (operands[1]) == SUBREG
        !          2720:          && GET_CODE (SUBREG_REG (operands[1])) == REG
        !          2721:          && REGNO (SUBREG_REG (operands[1])) >= FIRST_PSEUDO_REGISTER))
        !          2722:     {
        !          2723:       if (aligned_memory_operand (operands[1], QImode))
        !          2724:        {
        !          2725:          rtx aligned_mem, bitnum;
        !          2726:          rtx scratch = (reload_in_progress
        !          2727:                         ? gen_rtx (REG, SImode, REGNO (operands[0]))
        !          2728:                         : gen_reg_rtx (SImode));
        !          2729: 
        !          2730:          get_aligned_mem (operands[1], &aligned_mem, &bitnum);
        !          2731: 
        !          2732:          emit_insn (gen_aligned_loadqi (operands[0], aligned_mem, bitnum,
        !          2733:                                         scratch));
        !          2734:        }
        !          2735:       else
        !          2736:        {
        !          2737:          /* Don't pass these as parameters since that makes the generated
        !          2738:             code depend on parameter evaluation order which will cause
        !          2739:             bootstrap failures.  */
        !          2740: 
        !          2741:          rtx temp1 = gen_reg_rtx (DImode);
        !          2742:          rtx temp2 = gen_reg_rtx (DImode);
        !          2743:          rtx seq = gen_unaligned_loadqi (operands[0],
        !          2744:                                          get_unaligned_address (operands[1]),
        !          2745:                                          temp1, temp2);
        !          2746: 
        !          2747:          alpha_set_memflags (seq, operands[1]);
        !          2748:          emit_insn (seq);
        !          2749:        }
        !          2750: 
        !          2751:       DONE;
        !          2752:     }
        !          2753: 
        !          2754:   else if (GET_CODE (operands[0]) == MEM
        !          2755:           || (GET_CODE (operands[0]) == SUBREG 
        !          2756:               && GET_CODE (SUBREG_REG (operands[0])) == MEM)
        !          2757:           || (reload_in_progress && GET_CODE (operands[0]) == REG
        !          2758:               && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)
        !          2759:           || (reload_in_progress && GET_CODE (operands[0]) == SUBREG
        !          2760:               && GET_CODE (SUBREG_REG (operands[0])) == REG
        !          2761:               && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))
        !          2762:     {
        !          2763:       if (aligned_memory_operand (operands[0], QImode))
        !          2764:        {
        !          2765:          rtx aligned_mem, bitnum;
        !          2766:          rtx temp1 = gen_reg_rtx (SImode);
        !          2767:          rtx temp2 = gen_reg_rtx (SImode);
        !          2768: 
        !          2769:          get_aligned_mem (operands[0], &aligned_mem, &bitnum);
        !          2770: 
        !          2771:          emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum,
        !          2772:                                        temp1, temp2));
        !          2773:        }
        !          2774:       else
        !          2775:        {
        !          2776:          rtx temp1 = gen_reg_rtx (DImode);
        !          2777:          rtx temp2 = gen_reg_rtx (DImode);
        !          2778:          rtx temp3 = gen_reg_rtx (DImode);
        !          2779:          rtx seq = gen_unaligned_storeqi (get_unaligned_address (operands[0]),
        !          2780:                                           operands[1], temp1, temp2, temp3);
        !          2781: 
        !          2782:          alpha_set_memflags (seq, operands[0]);
        !          2783:          emit_insn (seq);
        !          2784:        }
        !          2785:       DONE;
        !          2786:     }
        !          2787: }")
        !          2788: 
        !          2789: (define_expand "movhi"
        !          2790:   [(set (match_operand:HI 0 "general_operand" "")
        !          2791:        (match_operand:HI 1 "general_operand" ""))]
        !          2792:   ""
        !          2793:   "
        !          2794: { extern rtx get_unaligned_address ();
        !          2795: 
        !          2796:   /* If the output is not a register, the input must be.  */
        !          2797:   if (GET_CODE (operands[0]) == MEM)
        !          2798:     operands[1] = force_reg (HImode, operands[1]);
        !          2799: 
        !          2800:   /* Handle four memory cases, unaligned and aligned for either the input
        !          2801:      or the output.  The only case where we can be called during reload is
        !          2802:      for aligned loads; all other cases require temporaries.  */
        !          2803: 
        !          2804:   if (GET_CODE (operands[1]) == MEM
        !          2805:       || (GET_CODE (operands[1]) == SUBREG
        !          2806:          && GET_CODE (SUBREG_REG (operands[1])) == MEM)
        !          2807:       || (reload_in_progress && GET_CODE (operands[1]) == REG
        !          2808:          && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
        !          2809:       || (reload_in_progress && GET_CODE (operands[1]) == SUBREG
        !          2810:          && GET_CODE (SUBREG_REG (operands[1])) == REG
        !          2811:          && REGNO (SUBREG_REG (operands[1])) >= FIRST_PSEUDO_REGISTER))
        !          2812:     {
        !          2813:       if (aligned_memory_operand (operands[1], HImode))
        !          2814:        {
        !          2815:          rtx aligned_mem, bitnum;
        !          2816:          rtx scratch = (reload_in_progress
        !          2817:                         ? gen_rtx (REG, SImode, REGNO (operands[0]))
        !          2818:                         : gen_reg_rtx (SImode));
        !          2819: 
        !          2820:          get_aligned_mem (operands[1], &aligned_mem, &bitnum);
        !          2821: 
        !          2822:          emit_insn (gen_aligned_loadhi (operands[0], aligned_mem, bitnum,
        !          2823:                                         scratch));
        !          2824:        }
        !          2825:       else
        !          2826:        {
        !          2827:          rtx addr
        !          2828:            = force_reg (DImode,
        !          2829:                         force_operand (get_unaligned_address (operands[1]),
        !          2830:                                        NULL_RTX));
        !          2831:          rtx scratch1 = gen_reg_rtx (DImode);
        !          2832:          rtx scratch2 = gen_reg_rtx (DImode);
        !          2833:          rtx seq = gen_unaligned_loadhi (operands[0], addr, scratch1,
        !          2834:                                          scratch2);
        !          2835: 
        !          2836:          alpha_set_memflags (seq, operands[1]);
        !          2837:          emit_insn (seq);
        !          2838:        }
        !          2839: 
        !          2840:       DONE;
        !          2841:     }
        !          2842: 
        !          2843:   else if (GET_CODE (operands[0]) == MEM
        !          2844:           || (GET_CODE (operands[0]) == SUBREG 
        !          2845:               && GET_CODE (SUBREG_REG (operands[0])) == MEM)
        !          2846:           || (reload_in_progress && GET_CODE (operands[0]) == REG
        !          2847:               && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)
        !          2848:           || (reload_in_progress && GET_CODE (operands[0]) == SUBREG
        !          2849:               && GET_CODE (SUBREG_REG (operands[0])) == REG
        !          2850:               && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))
        !          2851:     {
        !          2852:       if (aligned_memory_operand (operands[0], HImode))
        !          2853:        {
        !          2854:          rtx aligned_mem, bitnum;
        !          2855:          rtx temp1 = gen_reg_rtx (SImode);
        !          2856:          rtx temp2 = gen_reg_rtx (SImode);
        !          2857: 
        !          2858:          get_aligned_mem (operands[0], &aligned_mem, &bitnum);
        !          2859: 
        !          2860:          emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum,
        !          2861:                                        temp1, temp2));
        !          2862:        }
        !          2863:       else
        !          2864:        {
        !          2865:          rtx temp1 = gen_reg_rtx (DImode);
        !          2866:          rtx temp2 = gen_reg_rtx (DImode);
        !          2867:          rtx temp3 = gen_reg_rtx (DImode);
        !          2868:          rtx temp4 = gen_reg_rtx (DImode);
        !          2869:          rtx temp5 = gen_reg_rtx (DImode);
        !          2870:          rtx temp6 = gen_reg_rtx (DImode);
        !          2871:          rtx temp7 = gen_reg_rtx (DImode);
        !          2872:          rtx temp8 = gen_reg_rtx (DImode);
        !          2873:          rtx seq = gen_unaligned_storehi (get_unaligned_address (operands[0]),
        !          2874:                                           operands[1], temp1, temp2,temp3,
        !          2875:                                           temp4, temp5, temp6,temp7, temp8);
        !          2876: 
        !          2877:          alpha_set_memflags (seq, operands[0]);
        !          2878:          emit_insn (seq);
        !          2879:        }
        !          2880: 
        !          2881:       DONE;
        !          2882:     }
        !          2883: }")
        !          2884: 
        !          2885: ;; Here are the versions for reload.  Note that in the unaligned cases
        !          2886: ;; we know that the operand must not be a pseudo-register because stack
        !          2887: ;; slots are always aligned references.
        !          2888: 
        !          2889: (define_expand "reload_inqi"
        !          2890:   [(parallel [(match_operand:QI 0 "register_operand" "=r")
        !          2891:              (match_operand:QI 1 "unaligned_memory_operand" "m")
        !          2892:              (match_operand:DI 2 "register_operand" "=&r")])]
        !          2893:   ""
        !          2894:   "
        !          2895: { extern rtx get_unaligned_address ();
        !          2896:   rtx addr = get_unaligned_address (operands[1]);
        !          2897:   rtx seq = gen_unaligned_loadqi (operands[0], addr, operands[2],
        !          2898:                                  gen_rtx (REG, DImode, REGNO (operands[0])));
        !          2899: 
        !          2900:   alpha_set_memflags (seq, operands[1]);
        !          2901:   emit_insn (seq);
        !          2902:   DONE;
        !          2903: }")
        !          2904: 
        !          2905: (define_expand "reload_inhi"
        !          2906:   [(parallel [(match_operand:HI 0 "register_operand" "=r")
        !          2907:              (match_operand:HI 1 "unaligned_memory_operand" "m")
        !          2908:              (match_operand:TI 2 "register_operand" "=&r")])]
        !          2909:   ""
        !          2910:   "
        !          2911: { extern rtx get_unaligned_address ();
        !          2912:   rtx addr = get_unaligned_address (operands[1]);
        !          2913:   rtx scratch1 = gen_rtx (REG, DImode, REGNO (operands[2]));
        !          2914:   rtx scratch2 = gen_rtx (REG, DImode, REGNO (operands[2]) + 1);
        !          2915:   rtx seq;
        !          2916: 
        !          2917:   if (GET_CODE (addr) != REG)
        !          2918:     {
        !          2919:       emit_insn (gen_rtx (SET, VOIDmode, scratch2, addr));
        !          2920:       addr = scratch2;
        !          2921:     }
        !          2922:       
        !          2923:   seq = gen_unaligned_loadhi (operands[0], addr, scratch1, scratch1);
        !          2924:   alpha_set_memflags (seq, operands[1]);
        !          2925:   emit_insn (seq);
        !          2926:   DONE;
        !          2927: }")
        !          2928: 
        !          2929: (define_expand "reload_outqi"
        !          2930:   [(parallel [(match_operand:QI 0 "any_memory_operand" "=m")
        !          2931:              (match_operand:QI 1 "register_operand" "r")
        !          2932:              (match_operand:TI 2 "register_operand" "=&r")])]
        !          2933:   ""
        !          2934:   "
        !          2935: { extern rtx get_unaligned_address ();
        !          2936: 
        !          2937:   if (aligned_memory_operand (operands[0], QImode))
        !          2938:     {
        !          2939:       rtx aligned_mem, bitnum;
        !          2940: 
        !          2941:       get_aligned_mem (operands[0], &aligned_mem, &bitnum);
        !          2942: 
        !          2943:       emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum,
        !          2944:                                    gen_rtx (REG, SImode, REGNO (operands[2])),
        !          2945:                                    gen_rtx (REG, SImode,
        !          2946:                                             REGNO (operands[2]) + 1)));
        !          2947:     }
        !          2948:   else
        !          2949:     {
        !          2950:       rtx addr = get_unaligned_address (operands[0]);
        !          2951:       rtx scratch1 = gen_rtx (REG, DImode, REGNO (operands[2]));
        !          2952:       rtx scratch2 = gen_rtx (REG, DImode, REGNO (operands[2]) + 1);
        !          2953:       rtx seq;
        !          2954: 
        !          2955:       if (GET_CODE (addr) == REG)
        !          2956:        scratch1 = addr;
        !          2957: 
        !          2958:       seq = gen_unaligned_storeqi (addr, operands[1], scratch1,
        !          2959:                                   scratch2, scratch2);
        !          2960:       alpha_set_memflags (seq, operands[0]);
        !          2961:       emit_insn (seq);
        !          2962:     }
        !          2963: 
        !          2964:   DONE;
        !          2965: }")
        !          2966: 
        !          2967: (define_expand "reload_outhi"
        !          2968:   [(parallel [(match_operand:HI 0 "any_memory_operand" "=m")
        !          2969:              (match_operand:HI 1 "register_operand" "r")
        !          2970:              (match_operand:TI 2 "register_operand" "=&r")])]
        !          2971:   ""
        !          2972:   "
        !          2973: { extern rtx get_unaligned_address ();
        !          2974: 
        !          2975:   if (aligned_memory_operand (operands[0], HImode))
        !          2976:     {
        !          2977:       rtx aligned_mem, bitnum;
        !          2978: 
        !          2979:       get_aligned_mem (operands[0], &aligned_mem, &bitnum);
        !          2980: 
        !          2981:       emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum,
        !          2982:                                    gen_rtx (REG, SImode, REGNO (operands[2])),
        !          2983:                                    gen_rtx (REG, SImode,
        !          2984:                                             REGNO (operands[2]) + 1)));
        !          2985:     }
        !          2986:   else
        !          2987:     {
        !          2988:       rtx addr = get_unaligned_address (operands[0]);
        !          2989:       rtx scratch1 = gen_rtx (REG, DImode, REGNO (operands[2]));
        !          2990:       rtx scratch2 = gen_rtx (REG, DImode, REGNO (operands[2]) + 1);
        !          2991:       rtx scratch_a = GET_CODE (addr) == REG ? addr : scratch1;
        !          2992:       rtx seq;
        !          2993: 
        !          2994:       seq = gen_unaligned_storehi (addr, operands[1], scratch_a,
        !          2995:                                   scratch2, scratch2, scratch2,
        !          2996:                                   scratch1, scratch2, scratch_a,
        !          2997:                                   scratch1);
        !          2998:       alpha_set_memflags (seq, operands[0]);
        !          2999:       emit_insn (seq);
        !          3000:     }
        !          3001: 
        !          3002:   DONE;
        !          3003: }")
        !          3004: 
        !          3005: ;;- Local variables:
        !          3006: ;;- mode:emacs-lisp
        !          3007: ;;- comment-start: ";;- "
        !          3008: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
        !          3009: ;;- eval: (modify-syntax-entry ?[ "(]")
        !          3010: ;;- eval: (modify-syntax-entry ?] ")[")
        !          3011: ;;- eval: (modify-syntax-entry ?{ "(}")
        !          3012: ;;- eval: (modify-syntax-entry ?} "){")
        !          3013: ;;- End:

unix.superglobalmegacorp.com

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