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

1.1     ! root        1: ;;- Machine description for GNU compiler
        !             2: ;;- Motorola 68000 Version
        !             3: ;;   Copyright (C) 1987, 1988 Free Software Foundation, Inc.
        !             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 1, 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: 
        !            22: ;;- instruction definitions
        !            23: 
        !            24: ;;- @@The original PO technology requires these to be ordered by speed,
        !            25: ;;- @@    so that assigner will pick the fastest.
        !            26: 
        !            27: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
        !            28: 
        !            29: ;;- When naming insn's (operand 0 of define_insn) be careful about using
        !            30: ;;- names from other targets machine descriptions.
        !            31: 
        !            32: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
        !            33: ;;- updates for most instructions.
        !            34: 
        !            35: ;;- Operand classes for the register allocator:
        !            36: ;;- 'a' one of the address registers can be used.
        !            37: ;;- 'd' one of the data registers can be used.
        !            38: ;;- 'f' one of the m68881 registers can be used
        !            39: ;;- 'r' either a data or an address register can be used.
        !            40: ;;- 'x' if one of the Sun FPA registers                    
        !            41: ;;- 'y' if one of the Low Sun FPA registers (fpa0-fpa15).
        !            42: 
        !            43: ;;- Immediate Floating point operator constraints
        !            44: ;;- 'G' a floating point constant that is *NOT* one of the standard
        !            45: ;;   68881 constant values (to force calling output_move_const_double
        !            46: ;;   to get it from rom if it is a 68881 constant).
        !            47: ;;- 'H' one of the standard FPA constant values
        !            48: ;;
        !            49: ;;   See the functions standard_XXX_constant_p in output-m68k.c for more
        !            50: ;; info.
        !            51: 
        !            52: ;;- Immediate integer operand constraints:
        !            53: ;;- 'I'  1 .. 8
        !            54: ;;- 'J'  -32768 .. 32767
        !            55: ;;- 'K'  -128 .. 127
        !            56: ;;- 'L'  -8 .. -1
        !            57: 
        !            58: ;;-            FPA port explanation:
        !            59: 
        !            60: ;;-            Usage of the Sun FPA and the 68881 together
        !            61: 
        !            62: ;;- The current port of gcc to the sun fpa disallows use of the m68881
        !            63: ;;- instructions completely if code is targetted for the fpa.  This is
        !            64: ;;- for the following reasons:
        !            65: 
        !            66: ;;- 1) Expressing the preference hierarchy (ie. use the fpa if you
        !            67: ;;- can, the 68881 otherwise, and data registers only if you are
        !            68: ;;- forced to it) is a bitch with the current constraint scheme,
        !            69: ;;- especially since it would have to work for any combination of
        !            70: ;;- -mfpa, -m68881.
        !            71: 
        !            72: ;;- 2) There are no instructions to move between the two types of
        !            73: ;;- registers; the stack must be used as an intermediary.
        !            74: 
        !            75: ;;- It could indeed be done; I think the best way would be to have
        !            76: ;;- seperate patterns for TARGET_FPA (which implies a 68881),
        !            77: ;;- TARGET_68881, and no floating point co-processor.  Use
        !            78: ;;- define_expands for all of the named instruction patterns, and
        !            79: ;;- include code in the FPA instruction to deal with the 68881 with
        !            80: ;;- preferences specifically set to favor the fpa.  Some of this has
        !            81: ;;- already been done:
        !            82: ;;-
        !            83: ;;-    1) Separation of most of the patterns out into a TARGET_FPA
        !            84: ;;- case and a TARGET_68881 case (the exceptions are the patterns
        !            85: ;;- which would need one define_expand and three define_insn's under
        !            86: ;;- it (with alot of duplicate code between them) to replace the
        !            87: ;;- current single define_insn.  These are mov{[ds]f,[ds]i} and the
        !            88: ;;- first two patterns in the md.
        !            89: ;;-
        !            90: ;;- Some would still have to be done:
        !            91: ;;-
        !            92: ;;-    1) Add code to the fpa patterns which correspond to 68881
        !            93: ;;- patterns to deal with the 68881 case (including preferences!).
        !            94: ;;- What you might actually do here is combine the fpa and 68881 code
        !            95: ;;- back together into one pattern for those instructions where it's
        !            96: ;;- absolutely necessary and save yourself some duplicate code.  I'm
        !            97: ;;- not completely sure as to whether you could get away with doing
        !            98: ;;- this only for the mov* insns, or if you'd have to do it for all
        !            99: ;;- named insns.
        !           100: ;;-    2) Add code to the mov{[ds]f,[ds]i} instructions to handle
        !           101: ;;- moving between fpa regs and 68881 regs.
        !           102: 
        !           103: ;;- Since the fpa is more powerful than the 68881 and also has more
        !           104: ;;- registers, and since I think the reultant md would be medium ugly
        !           105: ;;- (lot's of duplicate code, ugly constraint strings), I elected not
        !           106: ;;- to do this change.
        !           107: 
        !           108: ;;- Another reason why someone *might* want to do the change is to
        !           109: ;;- control which register classes are accessed in a slightly cleaner
        !           110: ;;- way than I have.  See the blurb on CONDITIONAL_REGISTER_USAGE in
        !           111: ;;- the internals manual.
        !           112: 
        !           113: ;;- Yet another reason why someone might want to do this change is to
        !           114: ;;- allow use of some of the 68881 insns which have no equivalent on
        !           115: ;;- the fpa.  The sqrt instruction comes fairly quickly to mind.
        !           116: 
        !           117: ;;- If this is ever done, don't forget to change tm-sun3.h so that
        !           118: ;;- it *will* define __HAVE_68881__ when the FPA is in use.
        !           119: 
        !           120: ;;-            Condition code hack
        !           121: 
        !           122: ;;- When a floating point compare is done in the fpa, the resulting
        !           123: ;;- condition codes are left in the fpastatus register.  The values in
        !           124: ;;- this register must be moved into the 68000 cc register before any
        !           125: ;;- jump is executed.  Once this has been done, regular jump
        !           126: ;;- instructions are fine (ie. floating point jumps are not necessary.
        !           127: ;;- They are only done if the cc is in the 68881).
        !           128: 
        !           129: ;;- The instructions that move the fpastatus register to the 68000
        !           130: ;;- register clobber a data register (the move cannot be done direct).
        !           131: ;;- These instructions might be bundled either with the compare
        !           132: ;;- instruction, or the branch instruction.  If we were using both the
        !           133: ;;- fpa and the 68881 together, we would wish to only mark the
        !           134: ;;- register clobbered if we were doing the compare in the fpa, but I
        !           135: ;;- think that that decision (whether to clobber the register or not)
        !           136: ;;- must be done before register allocation (makes sense) and hence we
        !           137: ;;- can't know if the floating point compare will be done in the fpa
        !           138: ;;- or the fp.  So whenever we are asked for code that uses the fpa,
        !           139: ;;- we will mark a data register as clobbered.  This is reasonable, as
        !           140: ;;- almost all floating point compare operations done with fpa code
        !           141: ;;- enabled will be done in the fpa.  It's even more reasonable since
        !           142: ;;- we decided to make the 68881 and the fpa mutually exclusive.
        !           143: 
        !           144: ;;- We place to code to move the fpastatus register inside of a
        !           145: ;;- define_expand so that we can do it conditionally based on whether
        !           146: ;;- we are tagetting an fpa or not.
        !           147: 
        !           148: ;;- This still leaves us with the question of where we wish to put the
        !           149: ;;- code to move the fpastatus reg.  If we put it in the compare
        !           150: ;;- instruction, we can restrict the clobbering of the register to
        !           151: ;;- floating point compares, but we can't take advantage of floating
        !           152: ;;- point subtracts & etc. that alter the fpastatus register.  If we
        !           153: ;;- put it in the branch instruction, all branches compiled with fpa
        !           154: ;;- code enabled will clobber a data register, but we will be able to
        !           155: ;;- take advantage of fpa subtracts.  This balance favors putting the
        !           156: ;;- code in with the compare instruction.
        !           157: 
        !           158: ;;- Note that if some enterprising hacker should decide to switch
        !           159: ;;- this, he'll need to modify the code in NOTICE_UPDATE_CC.
        !           160: 
        !           161: ;;-            Usage of the top 16 fpa registers
        !           162: 
        !           163: ;;- The only locations which we may transfer fpa registers 16-31 from
        !           164: ;;- or to are the fpa registers 0-15.  (68000 registers and memory
        !           165: ;;- locations are impossible).  This causes problems in gcc, which
        !           166: ;;- assumes that mov?? instructions require no additional registers
        !           167: ;;- (see section 11.7) and since floating point moves *must* be
        !           168: ;;- supported into general registers (see section 12.3 under
        !           169: ;;- HARD_REGNO_OK_FOR_MODE_P) from anywhere.
        !           170: 
        !           171: ;;- My solution was to reserve fpa0 for moves into or out of these top
        !           172: ;;- 16 registers and to disparage the choice to reload into or out of
        !           173: ;;- these registers as much as I could.  That alternative is always
        !           174: ;;- last in the list, so it will not be used unless all else fails.  I
        !           175: ;;- will note that according to my current information, sun's compiler
        !           176: ;;- doesn't use these top 16 registers at all.
        !           177: 
        !           178: ;;- There is another possible way to do it.  I *believe* that if you
        !           179: ;;- make absolutely sure that the code will not be exectued in the
        !           180: ;;- reload pass, you can support the mov?? names with define_expands
        !           181: ;;- which require new registers.  This may be possible by the
        !           182: ;;- appropriate juggling of constraints.  I may come back to this later.
        !           183: 
        !           184: ;;-            Usage of constant RAM
        !           185: 
        !           186: ;;- This has been handled correctly (I believe) but the way I've done
        !           187: ;;- it could use a little explanation.  The constant RAM can only be
        !           188: ;;- accessed when the instruction is in "command register" mode.
        !           189: ;;- "command register" mode means that no accessing of memory or the
        !           190: ;;- 68000 registers is being done.  This can be expressed easily in
        !           191: ;;- constraints, so generally the mode of the instruction is
        !           192: ;;- determined by a branch off of which_alternative.  In outputing
        !           193: ;;- instructions, a 'w' means to output an access to the constant ram
        !           194: ;;- (if the arg is CONST_DOUBLE and is one of the available
        !           195: ;;- constants), and 'x' means to output a register pair (if the arg is
        !           196: ;;- a 68000 register) and a 'y' is the combination of the above two
        !           197: ;;- processies.  You use a 'y' in two operand DF instructions where you
        !           198: ;;- *know* the other operand is an fpa register, you use an 'x' in DF
        !           199: ;;- instructions where the arg might be a 68000 register and the
        !           200: ;;- instruction is *not* in "command register" mode, and you use a 'w'
        !           201: ;;- in two situations: 1) The instruction *is* in command register
        !           202: ;;- mode (and hence won't be accessing 68000 registers), or 2) The
        !           203: ;;- instruction is a two operand SF instruction where you know the
        !           204: ;;- other operand is an fpa register.
        !           205: 
        !           206: ;;-            Optimization issues
        !           207: 
        !           208: ;;- I actually think that I've included all of the fpa instructions
        !           209: ;;- that should be included.  Note that if someone is interested in
        !           210: ;;- doing serious floating point work on the sun fpa, I would advise
        !           211: ;;- the use of the "asm" instruction in gcc to allow you to use the
        !           212: ;;- sin, cos, and exponential functions on the fpa board.
        !           213: 
        !           214: ;;- END FPA Explanation Section.
        !           215: 
        !           216: 
        !           217: ;;- Some of these insn's are composites of several m68000 op codes.
        !           218: ;;- The assembler (or final @@??) insures that the appropriate one is
        !           219: ;;- selected.
        !           220: 
        !           221: (define_insn ""
        !           222:   [(set (match_operand:DF 0 "push_operand" "=m")
        !           223:        (match_operand:DF 1 "general_operand" "ro<>fyF"))]
        !           224:   ""
        !           225:   "*
        !           226: {
        !           227:   if (FP_REG_P (operands[1]))
        !           228:     return \"fmove%.d %f1,%0\";
        !           229:   if (FPA_REG_P (operands[1]))
        !           230:     return \"fpmove%.d %1, %x0\";
        !           231:   return output_move_double (operands);
        !           232: }")
        !           233: 
        !           234: (define_insn ""
        !           235:   [(set (match_operand:DI 0 "push_operand" "=m")
        !           236:        (match_operand:DI 1 "general_operand" "ro<>Fy"))]
        !           237:   ""
        !           238:   "*
        !           239: {
        !           240:   return output_move_double (operands);
        !           241: }")
        !           242: 
        !           243: ;; Put tstsi first among test insns so it matches a CONST_INT operand.
        !           244: 
        !           245: (define_insn "tstsi"
        !           246:   [(set (cc0)
        !           247:        (match_operand:SI 0 "general_operand" "rm"))]
        !           248:   ""
        !           249:   "*
        !           250: {
        !           251: #ifdef ISI_OV
        !           252:   /* ISI's assembler fails to handle tstl a0.  */
        !           253:   if (! ADDRESS_REG_P (operands[0]))
        !           254: #else
        !           255:   if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
        !           256: #endif
        !           257:     return \"tst%.l %0\";
        !           258:   /* If you think that the 68020 does not support tstl a0,
        !           259:      reread page B-167 of the 68020 manual more carefully.  */
        !           260:   /* On an address reg, cmpw may replace cmpl.  */
        !           261: #ifdef HPUX_ASM
        !           262:   return \"cmp%.w %0,%#0\";
        !           263: #else
        !           264:   return \"cmp%.w %#0,%0\";
        !           265: #endif
        !           266: }")
        !           267: 
        !           268: (define_insn "tsthi"
        !           269:   [(set (cc0)
        !           270:        (match_operand:HI 0 "general_operand" "rm"))]
        !           271:   ""
        !           272:   "*
        !           273: {
        !           274: #ifdef ISI_OV
        !           275:   if (! ADDRESS_REG_P (operands[0]))
        !           276: #else
        !           277:   if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
        !           278: #endif
        !           279:     return \"tst%.w %0\";
        !           280: #ifdef HPUX_ASM
        !           281:   return \"cmp%.w %0,%#0\";
        !           282: #else
        !           283:   return \"cmp%.w %#0,%0\";
        !           284: #endif
        !           285: }")
        !           286: 
        !           287: (define_insn "tstqi"
        !           288:   [(set (cc0)
        !           289:        (match_operand:QI 0 "general_operand" "dm"))]
        !           290:   ""
        !           291:   "tst%.b %0")
        !           292:   
        !           293: (define_expand "tstsf"
        !           294:   [(set (cc0)
        !           295:        (match_operand:SF 0 "general_operand" ""))]
        !           296:   "TARGET_68881 || TARGET_FPA"
        !           297:   "
        !           298: {
        !           299:   if (TARGET_FPA)
        !           300:     {
        !           301:       emit_insn (gen_rtx (PARALLEL, VOIDmode,
        !           302:                          gen_rtvec (2,
        !           303:                                     gen_rtx (SET, VOIDmode,
        !           304:                                              cc0_rtx, operands[0]),
        !           305:                                     gen_rtx (CLOBBER, VOIDmode,
        !           306:                                              gen_reg_rtx (SImode)))));
        !           307:       DONE;
        !           308:     }
        !           309: }")
        !           310: 
        !           311: (define_insn ""
        !           312:   [(set (cc0)
        !           313:        (match_operand:SF 0 "general_operand" "xmdF"))
        !           314:    (clobber (match_operand:SI 1 "general_operand" "d"))]
        !           315:   "TARGET_FPA"
        !           316:   "fptst%.s %x0\;fpmove fpastatus,%1\;movw %1,cc")
        !           317: 
        !           318: (define_insn ""
        !           319:   [(set (cc0)
        !           320:        (match_operand:SF 0 "general_operand" "fdm"))]
        !           321:   "TARGET_68881"
        !           322:   "*
        !           323: {
        !           324:   cc_status.flags = CC_IN_68881;
        !           325:   if (FP_REG_P (operands[0]))
        !           326:     return \"ftst%.x %0\";
        !           327:   return \"ftst%.s %0\";
        !           328: }")
        !           329: 
        !           330: (define_expand "tstdf"
        !           331:   [(set (cc0)
        !           332:        (match_operand:DF 0 "general_operand" ""))]
        !           333:   "TARGET_68881 || TARGET_FPA"
        !           334:   "
        !           335: {
        !           336:   if (TARGET_FPA)
        !           337:     {
        !           338:       emit_insn (gen_rtx (PARALLEL, VOIDmode,
        !           339:                          gen_rtvec (2, gen_rtx (SET, VOIDmode,
        !           340:                                                 cc0_rtx, operands[0]),
        !           341:                                     gen_rtx (CLOBBER, VOIDmode,
        !           342:                                              gen_reg_rtx (SImode)))));
        !           343:       DONE;
        !           344:     }
        !           345: }")
        !           346: 
        !           347: (define_insn ""
        !           348:   [(set (cc0)
        !           349:        (match_operand:DF 0 "general_operand" "xrmF"))
        !           350:    (clobber (match_operand:SI 1 "general_operand" "d"))]
        !           351:   "TARGET_FPA"
        !           352:   "fptst%.d %x0\;fpmove fpastatus,%1\;movw %1,cc")
        !           353: 
        !           354: (define_insn ""
        !           355:   [(set (cc0)
        !           356:        (match_operand:DF 0 "general_operand" "fm"))]
        !           357:   "TARGET_68881"
        !           358:   "*
        !           359: {
        !           360:   cc_status.flags = CC_IN_68881;
        !           361:   if (FP_REG_P (operands[0]))
        !           362:     return \"ftst%.x %0\";
        !           363:   return \"ftst%.d %0\";
        !           364: }")
        !           365: 
        !           366: ;; compare instructions.
        !           367: 
        !           368: ;; Put cmpsi first among compare insns so it matches two CONST_INT operands.
        !           369: 
        !           370: ;; A composite of the cmp, cmpa, & cmpi m68000 op codes.
        !           371: (define_insn "cmpsi"
        !           372:   [(set (cc0)
        !           373:        (compare (match_operand:SI 0 "general_operand" "rKs,mr,>")
        !           374:                 (match_operand:SI 1 "general_operand" "mr,Ksr,>")))]
        !           375:   ""
        !           376:   "*
        !           377: {
        !           378:   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
        !           379:     return \"cmpm%.l %1,%0\";
        !           380:   if (REG_P (operands[1])
        !           381:       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
        !           382:     { cc_status.flags |= CC_REVERSED;
        !           383: #ifdef HPUX_ASM
        !           384:       return \"cmp%.l %d1,%d0\";
        !           385: #else
        !           386:       return \"cmp%.l %d0,%d1\"; 
        !           387: #endif
        !           388:     }
        !           389: #ifdef HPUX_ASM
        !           390:   return \"cmp%.l %d0,%d1\";
        !           391: #else
        !           392:   return \"cmp%.l %d1,%d0\";
        !           393: #endif
        !           394: }")
        !           395: 
        !           396: (define_insn "cmphi"
        !           397:   [(set (cc0)
        !           398:        (compare (match_operand:HI 0 "general_operand" "rnm,d,n,m")
        !           399:                 (match_operand:HI 1 "general_operand" "d,rnm,m,n")))]
        !           400:   ""
        !           401:   "*
        !           402: {
        !           403:   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
        !           404:     return \"cmpm%.w %1,%0\";
        !           405:   if ((REG_P (operands[1]) && !ADDRESS_REG_P (operands[1]))
        !           406:       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
        !           407:     { cc_status.flags |= CC_REVERSED;
        !           408: #ifdef HPUX_ASM
        !           409:       return \"cmp%.w %d1,%d0\";
        !           410: #else
        !           411:       return \"cmp%.w %d0,%d1\"; 
        !           412: #endif
        !           413:     }
        !           414: #ifdef HPUX_ASM
        !           415:   return \"cmp%.w %d0,%d1\";
        !           416: #else
        !           417:   return \"cmp%.w %d1,%d0\";
        !           418: #endif
        !           419: }")
        !           420: 
        !           421: (define_insn "cmpqi"
        !           422:   [(set (cc0)
        !           423:        (compare (match_operand:QI 0 "general_operand" "dn,md,>")
        !           424:                 (match_operand:QI 1 "general_operand" "dm,nd,>")))]
        !           425:   ""
        !           426:   "*
        !           427: {
        !           428:   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
        !           429:     return \"cmpm%.b %1,%0\";
        !           430:   if (REG_P (operands[1])
        !           431:       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
        !           432:     { cc_status.flags |= CC_REVERSED;
        !           433: #ifdef HPUX_ASM
        !           434:       return \"cmp%.b %d1,%d0\";
        !           435: #else
        !           436:       return \"cmp%.b %d0,%d1\";
        !           437: #endif
        !           438:     }
        !           439: #ifdef HPUX_ASM
        !           440:   return \"cmp%.b %d0,%d1\";
        !           441: #else
        !           442:   return \"cmp%.b %d1,%d0\";
        !           443: #endif
        !           444: }")
        !           445: 
        !           446: (define_expand "cmpdf"
        !           447:   [(set (cc0)
        !           448:        (compare (match_operand:DF 0 "general_operand" "")
        !           449:                 (match_operand:DF 1 "general_operand" "")))]
        !           450:   "TARGET_68881 || TARGET_FPA"
        !           451:   "
        !           452: {
        !           453:   if (TARGET_FPA)
        !           454:     {
        !           455:       rtx set = gen_rtx (SET, VOIDmode, cc0_rtx,
        !           456:                         gen_rtx (COMPARE, VOIDmode, operands[0], operands[1]));
        !           457:       emit_insn (gen_rtx (PARALLEL, VOIDmode,
        !           458:                          gen_rtvec (2, set,
        !           459:                                     gen_rtx (CLOBBER, VOIDmode,
        !           460:                                              gen_reg_rtx (SImode)))));
        !           461:       DONE;
        !           462:     }
        !           463: }")
        !           464: 
        !           465: (define_insn ""
        !           466:   [(set (cc0)
        !           467:        (compare (match_operand:DF 0 "general_operand" "x,y")
        !           468:                 (match_operand:DF 1 "general_operand" "xH,rmF")))
        !           469:    (clobber (match_operand:SI 2 "general_operand" "d,d"))]
        !           470:   "TARGET_FPA"
        !           471:   "fpcmp%.d %y1,%0\;fpmove fpastatus,%2\;movw %2,cc")
        !           472: 
        !           473: (define_insn ""
        !           474:   [(set (cc0)
        !           475:        (compare (match_operand:DF 0 "general_operand" "f,mG")
        !           476:                 (match_operand:DF 1 "general_operand" "fmG,f")))]
        !           477:   "TARGET_68881"
        !           478:   "*
        !           479: {
        !           480:   cc_status.flags = CC_IN_68881;
        !           481: #ifdef HPUX_ASM
        !           482:   if (REG_P (operands[0]))
        !           483:     {
        !           484:       if (REG_P (operands[1]))
        !           485:        return \"fcmp%.x %0,%1\";
        !           486:       else
        !           487:         return \"fcmp%.d %0,%f1\";
        !           488:     }
        !           489:   cc_status.flags |= CC_REVERSED;
        !           490:   return \"fcmp%.d %1,%f0\";
        !           491: #else
        !           492:   if (REG_P (operands[0]))
        !           493:     {
        !           494:       if (REG_P (operands[1]))
        !           495:        return \"fcmp%.x %1,%0\";
        !           496:       else
        !           497:         return \"fcmp%.d %f1,%0\";
        !           498:     }
        !           499:   cc_status.flags |= CC_REVERSED;
        !           500:   return \"fcmp%.d %f0,%1\";
        !           501: #endif
        !           502: }")
        !           503: 
        !           504: (define_expand "cmpsf"
        !           505:  [(set (cc0)
        !           506:        (compare (match_operand:SF 0 "general_operand" "")
        !           507:                (match_operand:SF 1 "general_operand" "")))]
        !           508:  "TARGET_68881 || TARGET_FPA"
        !           509:  "
        !           510: {
        !           511:   if (TARGET_FPA)
        !           512:     {
        !           513:       rtx set = gen_rtx (SET, VOIDmode, cc0_rtx,
        !           514:                         gen_rtx (COMPARE, VOIDmode, operands[0], operands[1]));
        !           515:       emit_insn (gen_rtx (PARALLEL, VOIDmode,
        !           516:                          gen_rtvec (2, set,
        !           517:                                     gen_rtx (CLOBBER, VOIDmode,
        !           518:                                              gen_reg_rtx(SImode)))));
        !           519:       DONE;
        !           520:     }
        !           521: }")
        !           522: 
        !           523: (define_insn ""
        !           524:   [(set (cc0)
        !           525:        (compare (match_operand:SF 0 "general_operand" "x,y")
        !           526:                 (match_operand:SF 1 "general_operand" "xH,rmF")))
        !           527:    (clobber (match_operand:SI 2 "general_operand" "d,d"))]
        !           528:   "TARGET_FPA"
        !           529:   "fpcmp%.s %w1,%x0\;fpmove fpastatus,%2\;movw %2,cc")
        !           530: 
        !           531: (define_insn ""
        !           532:   [(set (cc0)
        !           533:        (compare (match_operand:SF 0 "general_operand" "f,mdG")
        !           534:                 (match_operand:SF 1 "general_operand" "fmdG,f")))]
        !           535:   "TARGET_68881"
        !           536:   "*
        !           537: {
        !           538:   cc_status.flags = CC_IN_68881;
        !           539: #ifdef HPUX_ASM
        !           540:   if (FP_REG_P (operands[0]))
        !           541:     {
        !           542:       if (FP_REG_P (operands[1]))
        !           543:        return \"fcmp%.x %0,%1\";
        !           544:       else
        !           545:         return \"fcmp%.s %0,%f1\";
        !           546:     }
        !           547:   cc_status.flags |= CC_REVERSED;
        !           548:   return \"fcmp%.s %1,%f0\";
        !           549: #else
        !           550:   if (FP_REG_P (operands[0]))
        !           551:     {
        !           552:       if (FP_REG_P (operands[1]))
        !           553:        return \"fcmp%.x %1,%0\";
        !           554:       else
        !           555:         return \"fcmp%.s %f1,%0\";
        !           556:     }
        !           557:   cc_status.flags |= CC_REVERSED;
        !           558:   return \"fcmp%.s %f0,%1\";
        !           559: #endif
        !           560: }")
        !           561: 
        !           562: ;; Recognizers for btst instructions.
        !           563: 
        !           564: (define_insn ""
        !           565:   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "do")
        !           566:                            (const_int 1)
        !           567:                            (minus:SI (const_int 7)
        !           568:                                      (match_operand:SI 1 "general_operand" "di"))))]
        !           569:   ""
        !           570:   "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
        !           571: 
        !           572: (define_insn ""
        !           573:   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "d")
        !           574:                            (const_int 1)
        !           575:                            (minus:SI (const_int 31)
        !           576:                                      (match_operand:SI 1 "general_operand" "di"))))]
        !           577:   ""
        !           578:   "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
        !           579: 
        !           580: ;; The following two patterns are like the previous two
        !           581: ;; except that they use the fact that bit-number operands
        !           582: ;; are automatically masked to 3 or 5 bits.
        !           583: 
        !           584: (define_insn ""
        !           585:   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "do")
        !           586:                            (const_int 1)
        !           587:                            (minus:SI (const_int 7)
        !           588:                                      (and:SI
        !           589:                                       (match_operand:SI 1 "general_operand" "d")
        !           590:                                       (const_int 7)))))]
        !           591:   ""
        !           592:   "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
        !           593: 
        !           594: (define_insn ""
        !           595:   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "d")
        !           596:                            (const_int 1)
        !           597:                            (minus:SI (const_int 31)
        !           598:                                      (and:SI
        !           599:                                       (match_operand:SI 1 "general_operand" "d")
        !           600:                                       (const_int 31)))))]
        !           601:   ""
        !           602:   "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
        !           603: 
        !           604: ;; Nonoffsettable mem refs are ok in this one pattern
        !           605: ;; since we don't try to adjust them.
        !           606: (define_insn ""
        !           607:   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "md")
        !           608:                            (const_int 1)
        !           609:                            (match_operand:SI 1 "general_operand" "i")))]
        !           610:   "GET_CODE (operands[1]) == CONST_INT
        !           611:    && (unsigned) INTVAL (operands[1]) < 8"
        !           612:   "*
        !           613: {
        !           614:   operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
        !           615:   return output_btst (operands, operands[1], operands[0], insn, 7);
        !           616: }")
        !           617: 
        !           618: (define_insn ""
        !           619:   ;; The constraint "o,d" here means that a nonoffsettable memref
        !           620:   ;; will match the first alternative, and its address will be reloaded.
        !           621:   ;; Copying the memory contents into a reg would be incorrect if the
        !           622:   ;; bit position is over 7.
        !           623:   [(set (cc0) (zero_extract (match_operand:HI 0 "nonimmediate_operand" "o,d")
        !           624:                            (const_int 1)
        !           625:                            (match_operand:SI 1 "general_operand" "i,i")))]
        !           626:   "GET_CODE (operands[1]) == CONST_INT"
        !           627:   "*
        !           628: {
        !           629:   if (GET_CODE (operands[0]) == MEM)
        !           630:     {
        !           631:       operands[0] = adj_offsettable_operand (operands[0],
        !           632:                                             INTVAL (operands[1]) / 8);
        !           633:       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
        !           634:                             7 - INTVAL (operands[1]) % 8);
        !           635:       return output_btst (operands, operands[1], operands[0], insn, 7);
        !           636:     }
        !           637:   operands[1] = gen_rtx (CONST_INT, VOIDmode,
        !           638:                         15 - INTVAL (operands[1]));
        !           639:   return output_btst (operands, operands[1], operands[0], insn, 15);
        !           640: }")
        !           641: 
        !           642: (define_insn ""
        !           643:   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "do")
        !           644:                            (const_int 1)
        !           645:                            (match_operand:SI 1 "general_operand" "i")))]
        !           646:   "GET_CODE (operands[1]) == CONST_INT"
        !           647:   "*
        !           648: {
        !           649:   if (GET_CODE (operands[0]) == MEM)
        !           650:     {
        !           651:       operands[0] = adj_offsettable_operand (operands[0],
        !           652:                                             INTVAL (operands[1]) / 8);
        !           653:       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
        !           654:                             7 - INTVAL (operands[1]) % 8);
        !           655:       return output_btst (operands, operands[1], operands[0], insn, 7);
        !           656:     }
        !           657:   operands[1] = gen_rtx (CONST_INT, VOIDmode,
        !           658:                         31 - INTVAL (operands[1]));
        !           659:   return output_btst (operands, operands[1], operands[0], insn, 31);
        !           660: }")
        !           661: 
        !           662: (define_insn ""
        !           663:   [(set (cc0) (subreg:SI (lshiftrt:QI (match_operand:QI 0 "nonimmediate_operand" "dm")
        !           664:                                      (const_int 7))
        !           665:                         0))]
        !           666:   ""
        !           667:   "*
        !           668: {
        !           669:   cc_status.flags = CC_Z_IN_NOT_N | CC_NOT_NEGATIVE;
        !           670:   return \"tst%.b %0\";
        !           671: }")
        !           672: 
        !           673: (define_insn ""
        !           674:   [(set (cc0) (and:SI (sign_extend:SI (sign_extend:HI (match_operand:QI 0 "nonimmediate_operand" "dm")))
        !           675:                      (match_operand:SI 1 "general_operand" "i")))]
        !           676:   "(GET_CODE (operands[1]) == CONST_INT
        !           677:     && (unsigned) INTVAL (operands[1]) < 0x100
        !           678:     && exact_log2 (INTVAL (operands[1])) >= 0)"
        !           679:   "*
        !           680: { register int log = exact_log2 (INTVAL (operands[1]));
        !           681:   operands[1] = gen_rtx (CONST_INT, VOIDmode, log);
        !           682:   return output_btst (operands, operands[1], operands[0], insn, 7);
        !           683: }")
        !           684: 
        !           685: ;; move instructions
        !           686: 
        !           687: ;; A special case in which it is not desirable
        !           688: ;; to reload the constant into a data register.
        !           689: (define_insn ""
        !           690:   [(set (match_operand:SI 0 "push_operand" "=m")
        !           691:        (match_operand:SI 1 "general_operand" "J"))]
        !           692:   "GET_CODE (operands[1]) == CONST_INT
        !           693:    && INTVAL (operands[1]) >= -0x8000
        !           694:    && INTVAL (operands[1]) < 0x8000"
        !           695:   "*
        !           696: {
        !           697:   if (operands[1] == const0_rtx)
        !           698:     return \"clr%.l %0\";
        !           699:   return \"pea %a1\";
        !           700: }")
        !           701: 
        !           702: ;This is never used.
        !           703: ;(define_insn "swapsi"
        !           704: ;  [(set (match_operand:SI 0 "general_operand" "r")
        !           705: ;      (match_operand:SI 1 "general_operand" "r"))
        !           706: ;   (set (match_dup 1) (match_dup 0))]
        !           707: ;  ""
        !           708: ;  "exg %1,%0")
        !           709: 
        !           710: ;; Special case of fullword move when source is zero.
        !           711: ;; The reason this is special is to avoid loading a zero
        !           712: ;; into a data reg with moveq in order to store it elsewhere.
        !           713:    
        !           714: (define_insn ""
        !           715:   [(set (match_operand:SI 0 "general_operand" "=g")
        !           716:        (const_int 0))]
        !           717:   ""
        !           718:   "*
        !           719: {
        !           720:   if (ADDRESS_REG_P (operands[0]))
        !           721:     return \"sub%.l %0,%0\";
        !           722:   /* moveq is faster on the 68000.  */
        !           723:   if (DATA_REG_P (operands[0]) && !TARGET_68020)
        !           724: #ifdef MOTOROLA
        !           725:     return \"moveq%.l %#0,%0\";
        !           726: #else
        !           727:     return \"moveq %#0,%0\";
        !           728: #endif
        !           729:   return \"clr%.l %0\";
        !           730: }")
        !           731: 
        !           732: ;; General case of fullword move.  The register constraints
        !           733: ;; force integer constants in range for a moveq to be reloaded
        !           734: ;; if they are headed for memory.
        !           735: (define_insn "movsi"
        !           736:   ;; Notes: make sure no alternative allows g vs g.
        !           737:   ;; We don't allow f-regs since fixed point cannot go in them.
        !           738:   ;; We do allow y and x regs since fixed point is allowed in them.
        !           739:   [(set (match_operand:SI 0 "general_operand" "=g,da,y,!*x*r*m")
        !           740:        (match_operand:SI 1 "general_operand" "daymKs,i,g,*x*r*m"))]
        !           741:   ""
        !           742:   "*
        !           743: {
        !           744:   if (which_alternative == 3)
        !           745:     return \"fpmove%.l %x1,fpa0\;fpmove%.l fpa0,%x0\"; 
        !           746:   if (FPA_REG_P (operands[1]) || FPA_REG_P (operands[0]))
        !           747:     return \"fpmove%.l %x1,%x0\";
        !           748:   if (GET_CODE (operands[1]) == CONST_INT)
        !           749:     {
        !           750:       if (operands[1] == const0_rtx
        !           751:          && (DATA_REG_P (operands[0])
        !           752:              || GET_CODE (operands[0]) == MEM))
        !           753:        return \"clr%.l %0\";
        !           754:       else if (DATA_REG_P (operands[0])
        !           755:               && INTVAL (operands[1]) < 128
        !           756:               && INTVAL (operands[1]) >= -128)
        !           757:         {
        !           758: #ifdef MOTOROLA
        !           759:           return \"moveq%.l %1,%0\";
        !           760: #else
        !           761:          return \"moveq %1,%0\";
        !           762: #endif
        !           763:        }
        !           764:       else if (ADDRESS_REG_P (operands[0])
        !           765:               && INTVAL (operands[1]) < 0x8000
        !           766:               && INTVAL (operands[1]) >= -0x8000)
        !           767:        return \"move%.w %1,%0\";
        !           768:       else if (push_operand (operands[0], SImode)
        !           769:               && INTVAL (operands[1]) < 0x8000
        !           770:               && INTVAL (operands[1]) >= -0x8000)
        !           771:         return \"pea %a1\";
        !           772:     }
        !           773:   else if ((GET_CODE (operands[1]) == SYMBOL_REF
        !           774:            || GET_CODE (operands[1]) == CONST)
        !           775:           && push_operand (operands[0], SImode))
        !           776:     return \"pea %a1\";
        !           777:   else if ((GET_CODE (operands[1]) == SYMBOL_REF
        !           778:            || GET_CODE (operands[1]) == CONST)
        !           779:           && ADDRESS_REG_P (operands[0]))
        !           780:     return \"lea %a1,%0\";
        !           781:   return \"move%.l %1,%0\";
        !           782: }")
        !           783: 
        !           784: (define_insn "movhi"
        !           785:   [(set (match_operand:HI 0 "general_operand" "=g")
        !           786:        (match_operand:HI 1 "general_operand" "g"))]
        !           787:   ""
        !           788:   "*
        !           789: {
        !           790:   if (GET_CODE (operands[1]) == CONST_INT)
        !           791:     {
        !           792:       if (operands[1] == const0_rtx
        !           793:          && (DATA_REG_P (operands[0])
        !           794:              || GET_CODE (operands[0]) == MEM))
        !           795:        return \"clr%.w %0\";
        !           796:       else if (DATA_REG_P (operands[0])
        !           797:               && INTVAL (operands[1]) < 128
        !           798:               && INTVAL (operands[1]) >= -128)
        !           799:         {
        !           800: #ifdef MOTOROLA
        !           801:           return \"moveq%.l %1,%0\";
        !           802: #else
        !           803:          return \"moveq %1,%0\";
        !           804: #endif
        !           805:        }
        !           806:       else if (INTVAL (operands[1]) < 0x8000
        !           807:               && INTVAL (operands[1]) >= -0x8000)
        !           808:        return \"move%.w %1,%0\";
        !           809:     }
        !           810:   else if (CONSTANT_P (operands[1]))
        !           811:     return \"move%.l %1,%0\";
        !           812: #ifndef SONY_ASM
        !           813:   /* Recognize the insn before a tablejump, one that refers
        !           814:      to a table of offsets.  Such an insn will need to refer
        !           815:      to a label on the insn.  So output one.  Use the label-number
        !           816:      of the table of offsets to generate this label.  */
        !           817:   if (GET_CODE (operands[1]) == MEM
        !           818:       && GET_CODE (XEXP (operands[1], 0)) == PLUS
        !           819:       && (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
        !           820:          || GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == LABEL_REF)
        !           821:       && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) != PLUS
        !           822:       && GET_CODE (XEXP (XEXP (operands[1], 0), 1)) != PLUS)
        !           823:     {
        !           824:       rtx labelref;
        !           825:       if (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF)
        !           826:        labelref = XEXP (XEXP (operands[1], 0), 0);
        !           827:       else
        !           828:        labelref = XEXP (XEXP (operands[1], 0), 1);
        !           829: #if defined (MOTOROLA) && ! defined (SGS_3B1)
        !           830: #ifdef SGS
        !           831:       fprintf (asm_out_file, \"\\tset %s%d,.+2\\n\", \"LI\",
        !           832:               CODE_LABEL_NUMBER (XEXP (labelref, 0)));
        !           833: #else /* not SGS */
        !           834:       fprintf (asm_out_file, \"\\t.set %s%d,.+2\\n\", \"LI\",
        !           835:               CODE_LABEL_NUMBER (XEXP (labelref, 0)));
        !           836: #endif /* not SGS */
        !           837: #else /* SGS_3B1 or not MOTOROLA */
        !           838:       ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"LI\",
        !           839:                                 CODE_LABEL_NUMBER (XEXP (labelref, 0)));
        !           840:       /* For sake of 3b1, set flag saying we need to define the symbol
        !           841:          LD%n (with value L%n-LI%n) at the end of the switch table.  */
        !           842:       RTX_INTEGRATED_P (next_real_insn (XEXP (labelref, 0))) = 1;
        !           843: #endif /* SGS_3B1 or not MOTOROLA */
        !           844:     }
        !           845: #endif /* SONY_ASM */
        !           846:   return \"move%.w %1,%0\";
        !           847: }")
        !           848: 
        !           849: (define_insn "movstricthi"
        !           850:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
        !           851:        (match_operand:HI 1 "general_operand" "rmn"))]
        !           852:   ""
        !           853:   "*
        !           854: {
        !           855:   if (GET_CODE (operands[1]) == CONST_INT)
        !           856:     {
        !           857:       if (operands[1] == const0_rtx
        !           858:          && (DATA_REG_P (operands[0])
        !           859:              || GET_CODE (operands[0]) == MEM))
        !           860:        return \"clr%.w %0\";
        !           861:     }
        !           862:   return \"move%.w %1,%0\";
        !           863: }")
        !           864: 
        !           865: (define_insn "movqi"
        !           866:   [(set (match_operand:QI 0 "general_operand" "=d,*a,m,m,?*a")
        !           867:        (match_operand:QI 1 "general_operand" "dmi*a,d*a,dmi,?*a,m"))]
        !           868:   ""
        !           869:   "*
        !           870: {
        !           871:   rtx xoperands[4];
        !           872:   if (ADDRESS_REG_P (operands[0]) && GET_CODE (operands[1]) == MEM)
        !           873:     {
        !           874:       xoperands[1] = operands[1];
        !           875:       xoperands[2]
        !           876:         = gen_rtx (MEM, QImode,
        !           877:                   gen_rtx (PLUS, VOIDmode, stack_pointer_rtx, const1_rtx));
        !           878:       xoperands[3] = stack_pointer_rtx;
        !           879:       /* Just pushing a byte puts it in the high byte of the halfword.  */
        !           880:       /* We must put it in the low half, the second byte.  */
        !           881:       output_asm_insn (\"subq%.w %#2,%3\;move%.b %1,%2\", xoperands);
        !           882:       return \"move%.w %+,%0\";
        !           883:     }
        !           884:   if (ADDRESS_REG_P (operands[1]) && GET_CODE (operands[0]) == MEM)
        !           885:     {
        !           886:       xoperands[0] = operands[0];
        !           887:       xoperands[1] = operands[1];
        !           888:       xoperands[2]
        !           889:         = gen_rtx (MEM, QImode,
        !           890:                   gen_rtx (PLUS, VOIDmode, stack_pointer_rtx, const1_rtx));
        !           891:       xoperands[3] = stack_pointer_rtx;
        !           892:       output_asm_insn (\"move%.w %1,%-\;move%.b %2,%0\;addq%.w %#2,%3\", xoperands);
        !           893:       return \"\";
        !           894:     }
        !           895:   if (operands[1] == const0_rtx)
        !           896:     return \"clr%.b %0\";
        !           897:   if (GET_CODE (operands[1]) == CONST_INT
        !           898:       && INTVAL (operands[1]) == -1)
        !           899:     return \"st %0\";
        !           900:   if (GET_CODE (operands[1]) != CONST_INT && CONSTANT_P (operands[1]))
        !           901:     return \"move%.l %1,%0\";
        !           902:   if (ADDRESS_REG_P (operands[0]) || ADDRESS_REG_P (operands[1]))
        !           903:     return \"move%.w %1,%0\";
        !           904:   return \"move%.b %1,%0\";
        !           905: }")
        !           906: 
        !           907: (define_insn "movstrictqi"
        !           908:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
        !           909:        (match_operand:QI 1 "general_operand" "dmn"))]
        !           910:   ""
        !           911:   "*
        !           912: {
        !           913:   if (operands[1] == const0_rtx)
        !           914:     return \"clr%.b %0\";
        !           915:   return \"move%.b %1,%0\";
        !           916: }")
        !           917: 
        !           918: (define_insn "movsf"
        !           919:   [(set (match_operand:SF 0 "general_operand" "=rmf,x,y,rm,!x,!rm")
        !           920:        (match_operand:SF 1 "general_operand" "rmfF,xH,rmF,y,rm,x"))]
        !           921: ;  [(set (match_operand:SF 0 "general_operand" "=rmf")
        !           922: ;      (match_operand:SF 1 "general_operand" "rmfF"))]
        !           923:   ""
        !           924:   "*
        !           925: {
        !           926:   if (which_alternative >= 4)
        !           927:     return \"fpmove%.s %1,fpa0\;fpmove%.s fpa0,%0\";
        !           928:   if (FPA_REG_P (operands[0]))
        !           929:     {
        !           930:       if (FPA_REG_P (operands[1]))
        !           931:        return \"fpmove%.s %x1,%x0\";
        !           932:       else if (GET_CODE (operands[1]) == CONST_DOUBLE)
        !           933:        return output_move_const_single (operands);
        !           934:       else if (FP_REG_P (operands[1]))
        !           935:         return \"fmove%.s %1,sp@-\;fpmove%.d sp@+, %0\";
        !           936:       return \"fpmove%.s %x1,%x0\";
        !           937:     }
        !           938:   if (FPA_REG_P (operands[1]))
        !           939:     {
        !           940:       if (FP_REG_P (operands[0]))
        !           941:        return \"fpmove%.s %x1,sp@-\;fmove%.s sp@+,%0\";
        !           942:       else
        !           943:        return \"fpmove%.s %x1,%x0\";
        !           944:     }
        !           945:   if (FP_REG_P (operands[0]))
        !           946:     {
        !           947:       if (FP_REG_P (operands[1]))
        !           948:        return \"fmove%.x %1,%0\";
        !           949:       else if (ADDRESS_REG_P (operands[1]))
        !           950:        return \"move%.l %1,%-\;fmove%.s %+,%0\";
        !           951:       else if (GET_CODE (operands[1]) == CONST_DOUBLE)
        !           952:        return output_move_const_single (operands);
        !           953:       return \"fmove%.s %f1,%0\";
        !           954:     }
        !           955:   if (FP_REG_P (operands[1]))
        !           956:     {
        !           957:       if (ADDRESS_REG_P (operands[0]))
        !           958:        return \"fmove%.s %1,%-\;move%.l %+,%0\";
        !           959:       return \"fmove%.s %f1,%0\";
        !           960:     }
        !           961:   return \"move%.l %1,%0\";
        !           962: }")
        !           963: 
        !           964: (define_insn "movdf"
        !           965:   [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>,y,rm,x,!x,!rm")
        !           966:        (match_operand:DF 1 "general_operand" "rf,m,rofF<>,rmF,y,xH,rm,x"))]
        !           967: ;  [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>")
        !           968: ;      (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))]
        !           969:   ""
        !           970:   "*
        !           971: {
        !           972:   if (which_alternative == 6)
        !           973:     return \"fpmove%.d %x1,fpa0\;fpmove%.d fpa0,%x0\";
        !           974:   if (FPA_REG_P (operands[0]))
        !           975:     {
        !           976:       if (GET_CODE (operands[1]) == CONST_DOUBLE)
        !           977:        return output_move_const_double (operands);
        !           978:       if (FP_REG_P (operands[1]))
        !           979:         return \"fmove%.d %1,sp@-\;fpmove%.d sp@+,%x0\";
        !           980:       return \"fpmove%.d %x1,%x0\";
        !           981:     }
        !           982:   else if (FPA_REG_P (operands[1]))
        !           983:     {
        !           984:       if (FP_REG_P(operands[0]))
        !           985:         return \"fpmove%.d %x1,sp@-\;fmoved sp@+,%0\";
        !           986:       else
        !           987:         return \"fpmove%.d %x1,%x0\";
        !           988:     }
        !           989:   if (FP_REG_P (operands[0]))
        !           990:     {
        !           991:       if (FP_REG_P (operands[1]))
        !           992:        return \"fmove%.x %1,%0\";
        !           993:       if (REG_P (operands[1]))
        !           994:        {
        !           995:          rtx xoperands[2];
        !           996:          xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
        !           997:          output_asm_insn (\"move%.l %1,%-\", xoperands);
        !           998:          output_asm_insn (\"move%.l %1,%-\", operands);
        !           999:          return \"fmove%.d %+,%0\";
        !          1000:        }
        !          1001:       if (GET_CODE (operands[1]) == CONST_DOUBLE)
        !          1002:        return output_move_const_double (operands);
        !          1003:       return \"fmove%.d %f1,%0\";
        !          1004:     }
        !          1005:   else if (FP_REG_P (operands[1]))
        !          1006:     {
        !          1007:       if (REG_P (operands[0]))
        !          1008:        {
        !          1009:          output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
        !          1010:          operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
        !          1011:          return \"move%.l %+,%0\";
        !          1012:        }
        !          1013:       else
        !          1014:         return \"fmove%.d %f1,%0\";
        !          1015:     }
        !          1016:   return output_move_double (operands);
        !          1017: }
        !          1018: ")
        !          1019: 
        !          1020: ;; movdi can apply to fp regs in some cases
        !          1021: (define_insn "movdi"
        !          1022:   ;; Let's see if it really still needs to handle fp regs, and, if so, why.
        !          1023:   [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,y,rm,!*x,!rm")
        !          1024:        (match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x"))]
        !          1025: ;  [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm")
        !          1026: ;      (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))]
        !          1027: ;  [(set (match_operand:DI 0 "general_operand" "=rm,&rf,&ro<>,!&rm,!&f")
        !          1028: ;      (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfF"))]
        !          1029:   ""
        !          1030:   "*
        !          1031: {
        !          1032:   if (which_alternative == 8)
        !          1033:     return \"fpmove%.d %x1,fpa0\;fpmove%.d fpa0,%x0\";
        !          1034:   if (FPA_REG_P (operands[0]) || FPA_REG_P (operands[1]))
        !          1035:     return \"fpmove%.d %x1,%x0\";
        !          1036:   if (FP_REG_P (operands[0]))
        !          1037:     {
        !          1038:       if (FP_REG_P (operands[1]))
        !          1039:        return \"fmove%.x %1,%0\";
        !          1040:       if (REG_P (operands[1]))
        !          1041:        {
        !          1042:          rtx xoperands[2];
        !          1043:          xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
        !          1044:          output_asm_insn (\"move%.l %1,%-\", xoperands);
        !          1045:          output_asm_insn (\"move%.l %1,%-\", operands);
        !          1046:          return \"fmove%.d %+,%0\";
        !          1047:        }
        !          1048:       if (GET_CODE (operands[1]) == CONST_DOUBLE)
        !          1049:        return output_move_const_double (operands);
        !          1050:       return \"fmove%.d %f1,%0\";
        !          1051:     }
        !          1052:   else if (FP_REG_P (operands[1]))
        !          1053:     {
        !          1054:       if (REG_P (operands[0]))
        !          1055:        {
        !          1056:          output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
        !          1057:          operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
        !          1058:          return \"move%.l %+,%0\";
        !          1059:        }
        !          1060:       else
        !          1061:         return \"fmove%.d %f1,%0\";
        !          1062:     }
        !          1063:   return output_move_double (operands);
        !          1064: }
        !          1065: ")
        !          1066: 
        !          1067: ;; Thus goes after the move instructions
        !          1068: ;; because the move instructions are better (require no spilling)
        !          1069: ;; when they can apply.  It goes before the add/sub insns
        !          1070: ;; so we will prefer it to them.
        !          1071: 
        !          1072: (define_insn "pushasi"
        !          1073:   [(set (match_operand:SI 0 "push_operand" "=m")
        !          1074:        (match_operand:SI 1 "address_operand" "p"))]
        !          1075:   ""
        !          1076:   "pea %a1")
        !          1077: 
        !          1078: ;; truncation instructions
        !          1079: (define_insn "truncsiqi2"
        !          1080:   [(set (match_operand:QI 0 "general_operand" "=dm,d")
        !          1081:        (truncate:QI
        !          1082:         (match_operand:SI 1 "general_operand" "doJ,i")))]
        !          1083:   ""
        !          1084:   "*
        !          1085: {
        !          1086:   if (GET_CODE (operands[0]) == REG)
        !          1087:     return \"move%.l %1,%0\";
        !          1088:   if (GET_CODE (operands[1]) == MEM)
        !          1089:     operands[1] = adj_offsettable_operand (operands[1], 3);
        !          1090:   return \"move%.b %1,%0\";
        !          1091: }")
        !          1092: 
        !          1093: (define_insn "trunchiqi2"
        !          1094:   [(set (match_operand:QI 0 "general_operand" "=dm,d")
        !          1095:        (truncate:QI
        !          1096:         (match_operand:HI 1 "general_operand" "doJ,i")))]
        !          1097:   ""
        !          1098:   "*
        !          1099: {
        !          1100:   if (GET_CODE (operands[0]) == REG
        !          1101:       && (GET_CODE (operands[1]) == MEM
        !          1102:          || GET_CODE (operands[1]) == CONST_INT))
        !          1103:     return \"move%.w %1,%0\";
        !          1104:   if (GET_CODE (operands[0]) == REG)
        !          1105:     return \"move%.l %1,%0\";
        !          1106:   if (GET_CODE (operands[1]) == MEM)
        !          1107:     operands[1] = adj_offsettable_operand (operands[1], 1);
        !          1108:   return \"move%.b %1,%0\";
        !          1109: }")
        !          1110: 
        !          1111: (define_insn "truncsihi2"
        !          1112:   [(set (match_operand:HI 0 "general_operand" "=dm,d")
        !          1113:        (truncate:HI
        !          1114:         (match_operand:SI 1 "general_operand" "roJ,i")))]
        !          1115:   ""
        !          1116:   "*
        !          1117: {
        !          1118:   if (GET_CODE (operands[0]) == REG)
        !          1119:     return \"move%.l %1,%0\";
        !          1120:   if (GET_CODE (operands[1]) == MEM)
        !          1121:     operands[1] = adj_offsettable_operand (operands[1], 2);
        !          1122:   return \"move%.w %1,%0\";
        !          1123: }")
        !          1124: 
        !          1125: ;; zero extension instructions
        !          1126: 
        !          1127: (define_expand "zero_extendhisi2"
        !          1128:   [(set (match_operand:SI 0 "register_operand" "")
        !          1129:        (const_int 0))
        !          1130:    (set (strict_low_part (subreg:HI (match_dup 0) 0))
        !          1131:        (match_operand:HI 1 "general_operand" ""))]
        !          1132:   ""
        !          1133:   "operands[1] = make_safe_from (operands[1], operands[0]);")
        !          1134: 
        !          1135: (define_expand "zero_extendqihi2"
        !          1136:   [(set (match_operand:HI 0 "register_operand" "")
        !          1137:        (const_int 0))
        !          1138:    (set (strict_low_part (subreg:QI (match_dup 0) 0))
        !          1139:        (match_operand:QI 1 "general_operand" ""))]
        !          1140:   ""
        !          1141:   "operands[1] = make_safe_from (operands[1], operands[0]);")
        !          1142: 
        !          1143: (define_expand "zero_extendqisi2"
        !          1144:   [(set (match_operand:SI 0 "register_operand" "")
        !          1145:        (const_int 0))
        !          1146:    (set (strict_low_part (subreg:QI (match_dup 0) 0))
        !          1147:        (match_operand:QI 1 "general_operand" ""))]
        !          1148:   ""
        !          1149:   " operands[1] = make_safe_from (operands[1], operands[0]); ")
        !          1150: 
        !          1151: ;; Patterns to recognize zero-extend insns produced by the combiner.
        !          1152: 
        !          1153: ;; Note that the one starting from HImode comes before those for QImode
        !          1154: ;; so that a constant operand will match HImode, not QImode.
        !          1155: (define_insn ""
        !          1156:   [(set (match_operand:SI 0 "general_operand" "=do<>")
        !          1157:        (zero_extend:SI
        !          1158:         (match_operand:HI 1 "general_operand" "rmn")))]
        !          1159:   ""
        !          1160:   "*
        !          1161: {
        !          1162:   if (DATA_REG_P (operands[0]))
        !          1163:     {
        !          1164:       if (GET_CODE (operands[1]) == REG
        !          1165:          && REGNO (operands[0]) == REGNO (operands[1]))
        !          1166:        return \"and%.l %#0xFFFF,%0\";
        !          1167:       if (reg_mentioned_p (operands[0], operands[1]))
        !          1168:         return \"move%.w %1,%0\;and%.l %#0xFFFF,%0\";
        !          1169:       return \"clr%.l %0\;move%.w %1,%0\";
        !          1170:     }
        !          1171:   else if (GET_CODE (operands[0]) == MEM
        !          1172:           && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
        !          1173:     return \"move%.w %1,%0\;clr%.w %0\";
        !          1174:   else if (GET_CODE (operands[0]) == MEM
        !          1175:           && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
        !          1176:     return \"clr%.w %0\;move%.w %1,%0\";
        !          1177:   else
        !          1178:     {
        !          1179:       output_asm_insn (\"clr%.w %0\", operands);
        !          1180:       operands[0] = adj_offsettable_operand (operands[0], 2);
        !          1181:       return \"move%.w %1,%0\";
        !          1182:     }
        !          1183: }")
        !          1184: 
        !          1185: (define_insn ""
        !          1186:   [(set (match_operand:HI 0 "general_operand" "=do<>")
        !          1187:        (zero_extend:HI
        !          1188:         (match_operand:QI 1 "general_operand" "dmn")))]
        !          1189:   ""
        !          1190:   "*
        !          1191: {
        !          1192:   if (DATA_REG_P (operands[0]))
        !          1193:     {
        !          1194:       if (GET_CODE (operands[1]) == REG
        !          1195:          && REGNO (operands[0]) == REGNO (operands[1]))
        !          1196:        return \"and%.w %#0xFF,%0\";
        !          1197:       if (reg_mentioned_p (operands[0], operands[1]))
        !          1198:         return \"move%.b %1,%0\;and%.w %#0xFF,%0\";
        !          1199:       return \"clr%.w %0\;move%.b %1,%0\";
        !          1200:     }
        !          1201:   else if (GET_CODE (operands[0]) == MEM
        !          1202:           && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
        !          1203:     {
        !          1204:       if (REGNO (XEXP (XEXP (operands[0], 0), 0))
        !          1205:          == STACK_POINTER_REGNUM)
        !          1206:        return \"clr%.w %-\;move%.b %1,%0\";
        !          1207:       else
        !          1208:        return \"move%.b %1,%0\;clr%.b %0\";
        !          1209:     }
        !          1210:   else if (GET_CODE (operands[0]) == MEM
        !          1211:           && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
        !          1212:     return \"clr%.b %0\;move%.b %1,%0\";
        !          1213:   else
        !          1214:     {
        !          1215:       output_asm_insn (\"clr%.b %0\", operands);
        !          1216:       operands[0] = adj_offsettable_operand (operands[0], 1);
        !          1217:       return \"move%.b %1,%0\";
        !          1218:     }
        !          1219: }")
        !          1220: 
        !          1221: (define_insn ""
        !          1222:   [(set (match_operand:SI 0 "general_operand" "=do<>")
        !          1223:        (zero_extend:SI
        !          1224:         (match_operand:QI 1 "general_operand" "dmn")))]
        !          1225:   ""
        !          1226:   "*
        !          1227: {
        !          1228:   if (DATA_REG_P (operands[0]))
        !          1229:     {
        !          1230:       if (GET_CODE (operands[1]) == REG
        !          1231:          && REGNO (operands[0]) == REGNO (operands[1]))
        !          1232:        return \"and%.l %#0xFF,%0\";
        !          1233:       if (reg_mentioned_p (operands[0], operands[1]))
        !          1234:         return \"move%.b %1,%0\;and%.l %#0xFF,%0\";
        !          1235:       return \"clr%.l %0\;move%.b %1,%0\";
        !          1236:     }
        !          1237:   else if (GET_CODE (operands[0]) == MEM
        !          1238:           && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
        !          1239:     {
        !          1240:       operands[0] = XEXP (XEXP (operands[0], 0), 0);
        !          1241: #ifdef MOTOROLA
        !          1242: #ifdef SGS
        !          1243:       return \"clr.l -(%0)\;move%.b %1,3(%0)\";
        !          1244: #else
        !          1245:       return \"clr.l -(%0)\;move%.b %1,(3,%0)\";
        !          1246: #endif
        !          1247: #else
        !          1248:       return \"clrl %0@-\;moveb %1,%0@(3)\";
        !          1249: #endif
        !          1250:     }
        !          1251:   else if (GET_CODE (operands[0]) == MEM
        !          1252:           && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
        !          1253:     {
        !          1254:       operands[0] = XEXP (XEXP (operands[0], 0), 0);
        !          1255: #ifdef MOTOROLA
        !          1256: #ifdef SGS
        !          1257:       return \"clr.l (%0)+\;move%.b %1,-1(%0)\";
        !          1258: #else
        !          1259:       return \"clr.l (%0)+\;move%.b %1,(-1,%0)\";
        !          1260: #endif
        !          1261: #else
        !          1262:       return \"clrl %0@+\;moveb %1,%0@(-1)\";
        !          1263: #endif
        !          1264:     }
        !          1265:   else
        !          1266:     {
        !          1267:       output_asm_insn (\"clr%.l %0\", operands);
        !          1268:       operands[0] = adj_offsettable_operand (operands[0], 3);
        !          1269:       return \"move%.b %1,%0\";
        !          1270:     }
        !          1271: }")
        !          1272: 
        !          1273: ;; sign extension instructions
        !          1274: ;; Note that the one starting from HImode comes before those for QImode
        !          1275: ;; so that a constant operand will match HImode, not QImode.
        !          1276: 
        !          1277: (define_insn "extendhisi2"
        !          1278:   [(set (match_operand:SI 0 "general_operand" "=*d,a")
        !          1279:        (sign_extend:SI
        !          1280:         (match_operand:HI 1 "general_operand" "0,rmn")))]
        !          1281:   ""
        !          1282:   "*
        !          1283: {
        !          1284:   if (ADDRESS_REG_P (operands[0]))
        !          1285:     return \"move%.w %1,%0\";
        !          1286:   return \"ext%.l %0\";
        !          1287: }")
        !          1288: 
        !          1289: (define_insn "extendqihi2"
        !          1290:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          1291:        (sign_extend:HI
        !          1292:         (match_operand:QI 1 "general_operand" "0")))]
        !          1293:   ""
        !          1294:   "ext%.w %0")
        !          1295: 
        !          1296: (define_insn "extendqisi2"
        !          1297:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          1298:        (sign_extend:SI
        !          1299:         (match_operand:QI 1 "general_operand" "0")))]
        !          1300:   "TARGET_68020"
        !          1301:   "extb%.l %0")
        !          1302: 
        !          1303: ;; Conversions between float and double.
        !          1304: 
        !          1305: (define_expand "extendsfdf2"
        !          1306:   [(set (match_operand:DF 0 "general_operand" "")
        !          1307:        (float_extend:DF
        !          1308:         (match_operand:SF 1 "general_operand" "")))]
        !          1309:   "TARGET_68881 || TARGET_FPA"
        !          1310:   "")
        !          1311: 
        !          1312: (define_insn ""
        !          1313:   [(set (match_operand:DF 0 "general_operand" "=x,y")
        !          1314:        (float_extend:DF
        !          1315:         (match_operand:SF 1 "general_operand" "xH,rmF")))]
        !          1316:   "TARGET_FPA"
        !          1317:   "fpstod %w1,%0")
        !          1318: 
        !          1319: (define_insn ""
        !          1320:   [(set (match_operand:DF 0 "general_operand" "=*fdm,f")
        !          1321:        (float_extend:DF
        !          1322:          (match_operand:SF 1 "general_operand" "f,dmF")))]
        !          1323:   "TARGET_68881"
        !          1324:   "*
        !          1325: {
        !          1326:   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
        !          1327:     {
        !          1328:       if (REGNO (operands[0]) == REGNO (operands[1]))
        !          1329:        {
        !          1330:          /* Extending float to double in an fp-reg is a no-op.
        !          1331:             NOTICE_UPDATE_CC has already assumed that the
        !          1332:             cc will be set.  So cancel what it did.  */
        !          1333:          cc_status = cc_prev_status;
        !          1334:          return \"\";
        !          1335:        }
        !          1336:       return \"fmove%.x %1,%0\";
        !          1337:     }
        !          1338:   if (FP_REG_P (operands[0]))
        !          1339:     return \"fmove%.s %f1,%0\";
        !          1340:   if (DATA_REG_P (operands[0]) && FP_REG_P (operands[1]))
        !          1341:     {
        !          1342:       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
        !          1343:       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
        !          1344:       return \"move%.l %+,%0\";
        !          1345:     }
        !          1346:   return \"fmove%.d %f1,%0\";
        !          1347: }")
        !          1348: 
        !          1349: ;; This cannot output into an f-reg because there is no way to be
        !          1350: ;; sure of truncating in that case.
        !          1351: ;; But on the Sun FPA, we can be sure.
        !          1352: (define_expand "truncdfsf2"
        !          1353:   [(set (match_operand:SF 0 "general_operand" "")
        !          1354:        (float_truncate:SF
        !          1355:          (match_operand:DF 1 "general_operand" "")))]
        !          1356:   "TARGET_68881 || TARGET_FPA"
        !          1357:   "")
        !          1358: 
        !          1359: (define_insn ""
        !          1360:   [(set (match_operand:SF 0 "register_operand" "=x,y")
        !          1361:        (float_truncate:SF
        !          1362:          (match_operand:DF 1 "general_operand" "xH,rmF")))]
        !          1363:   "TARGET_FPA"
        !          1364:   "fpdtos %y1,%0")
        !          1365: 
        !          1366: (define_insn ""
        !          1367:   [(set (match_operand:SF 0 "general_operand" "=dm")
        !          1368:        (float_truncate:SF
        !          1369:          (match_operand:DF 1 "general_operand" "f")))]
        !          1370:   "TARGET_68881"
        !          1371:   "fmove%.s %f1,%0")
        !          1372: 
        !          1373: ;; Conversion between fixed point and floating point.
        !          1374: ;; Note that among the fix-to-float insns
        !          1375: ;; the ones that start with SImode come first.
        !          1376: ;; That is so that an operand that is a CONST_INT
        !          1377: ;; (and therefore lacks a specific machine mode).
        !          1378: ;; will be recognized as SImode (which is always valid)
        !          1379: ;; rather than as QImode or HImode.
        !          1380: 
        !          1381: (define_expand "floatsisf2"
        !          1382:   [(set (match_operand:SF 0 "general_operand" "")
        !          1383:        (float:SF (match_operand:SI 1 "general_operand" "")))]
        !          1384:   "TARGET_68881 || TARGET_FPA"
        !          1385:   "")
        !          1386: 
        !          1387: (define_insn ""
        !          1388:   [(set (match_operand:SF 0 "general_operand" "=y,x")
        !          1389:        (float:SF (match_operand:SI 1 "general_operand" "rmi,x")))]
        !          1390:   "TARGET_FPA"
        !          1391:   "fpltos %1,%0")
        !          1392: 
        !          1393: (define_insn ""
        !          1394:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          1395:        (float:SF (match_operand:SI 1 "general_operand" "dmi")))]
        !          1396:   "TARGET_68881"
        !          1397:   "fmove%.l %1,%0")
        !          1398: 
        !          1399: (define_expand "floatsidf2"
        !          1400:   [(set (match_operand:DF 0 "general_operand" "")
        !          1401:        (float:DF (match_operand:SI 1 "general_operand" "")))]
        !          1402:   "TARGET_68881 || TARGET_FPA"
        !          1403:   "")
        !          1404: 
        !          1405: (define_insn ""
        !          1406:   [(set (match_operand:DF 0 "register_operand" "=y,x")
        !          1407:        (float:DF (match_operand:SI 1 "general_operand" "rmi,x")))]
        !          1408:   "TARGET_FPA"
        !          1409:   "fpltod %1,%0")
        !          1410: 
        !          1411: (define_insn ""
        !          1412:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          1413:        (float:DF (match_operand:SI 1 "general_operand" "dmi")))]
        !          1414:   "TARGET_68881"
        !          1415:   "fmove%.l %1,%0")
        !          1416: 
        !          1417: (define_insn "floathisf2"
        !          1418:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          1419:        (float:SF (match_operand:HI 1 "general_operand" "dmn")))]
        !          1420:   "TARGET_68881"
        !          1421:   "fmove%.w %1,%0")
        !          1422: 
        !          1423: (define_insn "floathidf2"
        !          1424:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          1425:        (float:DF (match_operand:HI 1 "general_operand" "dmn")))]
        !          1426:   "TARGET_68881"
        !          1427:   "fmove%.w %1,%0")
        !          1428: 
        !          1429: (define_insn "floatqisf2"
        !          1430:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          1431:        (float:SF (match_operand:QI 1 "general_operand" "dmn")))]
        !          1432:   "TARGET_68881"
        !          1433:   "fmove%.b %1,%0")
        !          1434: 
        !          1435: (define_insn "floatqidf2"
        !          1436:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          1437:        (float:DF (match_operand:QI 1 "general_operand" "dmn")))]
        !          1438:   "TARGET_68881"
        !          1439:   "fmove%.b %1,%0")
        !          1440: 
        !          1441: ;; Convert a float to a float whose value is an integer.
        !          1442: ;; This is the first stage of converting it to an integer type.
        !          1443: 
        !          1444: (define_insn "ftruncdf2"
        !          1445:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          1446:        (fix:DF (match_operand:DF 1 "general_operand" "fFm")))]
        !          1447:   "TARGET_68881"
        !          1448:   "*
        !          1449: {
        !          1450:   if (FP_REG_P (operands[1]))
        !          1451:     return \"fintrz%.x %f1,%0\";
        !          1452:   return \"fintrz%.d %f1,%0\";
        !          1453: }")
        !          1454: 
        !          1455: (define_insn "ftruncsf2"
        !          1456:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          1457:        (fix:SF (match_operand:SF 1 "general_operand" "dfFm")))]
        !          1458:   "TARGET_68881"
        !          1459:   "*
        !          1460: {
        !          1461:   if (FP_REG_P (operands[1]))
        !          1462:     return \"fintrz%.x %f1,%0\";
        !          1463:   return \"fintrz%.s %f1,%0\";
        !          1464: }")
        !          1465: 
        !          1466: ;; Convert a float whose value is an integer
        !          1467: ;; to an actual integer.  Second stage of converting float to integer type.
        !          1468: (define_insn "fixsfqi2"
        !          1469:   [(set (match_operand:QI 0 "general_operand" "=dm")
        !          1470:        (fix:QI (match_operand:SF 1 "general_operand" "f")))]
        !          1471:   "TARGET_68881"
        !          1472:   "fmove%.b %1,%0")
        !          1473: 
        !          1474: (define_insn "fixsfhi2"
        !          1475:   [(set (match_operand:HI 0 "general_operand" "=dm")
        !          1476:        (fix:HI (match_operand:SF 1 "general_operand" "f")))]
        !          1477:   "TARGET_68881"
        !          1478:   "fmove%.w %1,%0")
        !          1479: 
        !          1480: (define_insn "fixsfsi2"
        !          1481:   [(set (match_operand:SI 0 "general_operand" "=dm")
        !          1482:        (fix:SI (match_operand:SF 1 "general_operand" "f")))]
        !          1483:   "TARGET_68881"
        !          1484:   "fmove%.l %1,%0")
        !          1485: 
        !          1486: (define_insn "fixdfqi2"
        !          1487:   [(set (match_operand:QI 0 "general_operand" "=dm")
        !          1488:        (fix:QI (match_operand:DF 1 "general_operand" "f")))]
        !          1489:   "TARGET_68881"
        !          1490:   "fmove%.b %1,%0")
        !          1491: 
        !          1492: (define_insn "fixdfhi2"
        !          1493:   [(set (match_operand:HI 0 "general_operand" "=dm")
        !          1494:        (fix:HI (match_operand:DF 1 "general_operand" "f")))]
        !          1495:   "TARGET_68881"
        !          1496:   "fmove%.w %1,%0")
        !          1497: 
        !          1498: (define_insn "fixdfsi2"
        !          1499:   [(set (match_operand:SI 0 "general_operand" "=dm")
        !          1500:        (fix:SI (match_operand:DF 1 "general_operand" "f")))]
        !          1501:   "TARGET_68881"
        !          1502:   "fmove%.l %1,%0")
        !          1503: 
        !          1504: ;; Convert a float to an integer.
        !          1505: ;; On the Sun FPA, this is done in one step.
        !          1506: 
        !          1507: (define_insn "fix_truncsfsi2"
        !          1508:   [(set (match_operand:SI 0 "general_operand" "=x,y")
        !          1509:        (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "xH,rmF"))))]
        !          1510:   "TARGET_FPA"
        !          1511:   "fpstol %w1,%0")
        !          1512: 
        !          1513: (define_insn "fix_truncdfsi2"
        !          1514:   [(set (match_operand:SI 0 "general_operand" "=x,y")
        !          1515:        (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "xH,rmF"))))]
        !          1516:   "TARGET_FPA"
        !          1517:   "fpdtol %y1,%0")
        !          1518: 
        !          1519: ;; add instructions
        !          1520: 
        !          1521: ;; Note that the last two alternatives are near-duplicates
        !          1522: ;; in order to handle insns generated by reload.
        !          1523: ;; This is needed since they are not themselves reloaded,
        !          1524: ;; so commutativity won't apply to them.
        !          1525: (define_insn "addsi3"
        !          1526:   [(set (match_operand:SI 0 "general_operand" "=m,r,!a,!a")
        !          1527:        (plus:SI (match_operand:SI 1 "general_operand" "%0,0,a,rJK")
        !          1528:                 (match_operand:SI 2 "general_operand" "dIKLs,mrIKLs,rJK,a")))]
        !          1529:   ""
        !          1530:   "*
        !          1531: {
        !          1532:   if (! operands_match_p (operands[0], operands[1]))
        !          1533:     {
        !          1534:       if (!ADDRESS_REG_P (operands[1]))
        !          1535:        {
        !          1536:          rtx tmp = operands[1];
        !          1537: 
        !          1538:          operands[1] = operands[2];
        !          1539:          operands[2] = tmp;
        !          1540:        }
        !          1541: 
        !          1542:       /* These insns can result from reloads to access
        !          1543:         stack slots over 64k from the frame pointer.  */
        !          1544:       if (GET_CODE (operands[2]) == CONST_INT
        !          1545:          && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
        !          1546:         return \"move%.l %2,%0\;add%.l %1,%0\";
        !          1547: #ifdef SGS
        !          1548:       if (GET_CODE (operands[2]) == REG)
        !          1549:        return \"lea 0(%1,%2.l),%0\";
        !          1550:       else
        !          1551:        return \"lea %c2(%1),%0\";
        !          1552: #else /* not SGS */
        !          1553: #ifdef MOTOROLA
        !          1554:       if (GET_CODE (operands[2]) == REG)
        !          1555:        return \"lea (%1,%2.l),%0\";
        !          1556:       else
        !          1557:        return \"lea (%c2,%1),%0\";
        !          1558: #else /* not MOTOROLA (MIT syntax) */
        !          1559:       if (GET_CODE (operands[2]) == REG)
        !          1560:        return \"lea %1@(0,%2:l),%0\";
        !          1561:       else
        !          1562:        return \"lea %1@(%c2),%0\";
        !          1563: #endif /* not MOTOROLA */
        !          1564: #endif /* not SGS */
        !          1565:     }
        !          1566:   if (GET_CODE (operands[2]) == CONST_INT)
        !          1567:     {
        !          1568: #ifndef NO_ADDSUB_Q
        !          1569:       if (INTVAL (operands[2]) > 0
        !          1570:          && INTVAL (operands[2]) <= 8)
        !          1571:        return (ADDRESS_REG_P (operands[0])
        !          1572:                ? \"addq%.w %2,%0\"
        !          1573:                : \"addq%.l %2,%0\");
        !          1574:       if (INTVAL (operands[2]) < 0
        !          1575:          && INTVAL (operands[2]) >= -8)
        !          1576:         {
        !          1577:          operands[2] = gen_rtx (CONST_INT, VOIDmode,
        !          1578:                                 - INTVAL (operands[2]));
        !          1579:          return (ADDRESS_REG_P (operands[0])
        !          1580:                  ? \"subq%.w %2,%0\"
        !          1581:                  : \"subq%.l %2,%0\");
        !          1582:        }
        !          1583: #endif
        !          1584:       if (ADDRESS_REG_P (operands[0])
        !          1585:          && INTVAL (operands[2]) >= -0x8000
        !          1586:          && INTVAL (operands[2]) < 0x8000)
        !          1587:        return \"add%.w %2,%0\";
        !          1588:     }
        !          1589:   return \"add%.l %2,%0\";
        !          1590: }")
        !          1591: 
        !          1592: (define_insn ""
        !          1593:   [(set (match_operand:SI 0 "general_operand" "=a")
        !          1594:        (plus:SI (match_operand:SI 1 "general_operand" "0")
        !          1595:                 (sign_extend:SI (match_operand:HI 2 "general_operand" "rmn"))))]
        !          1596:   ""
        !          1597:   "add%.w %2,%0")
        !          1598: 
        !          1599: (define_insn "addhi3"
        !          1600:   [(set (match_operand:HI 0 "general_operand" "=m,r")
        !          1601:        (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
        !          1602:                 (match_operand:HI 2 "general_operand" "dn,rmn")))]
        !          1603:   ""
        !          1604:   "*
        !          1605: {
        !          1606: #ifndef NO_ADDSUB_Q
        !          1607:   if (GET_CODE (operands[2]) == CONST_INT)
        !          1608:     {
        !          1609:       if (INTVAL (operands[2]) > 0
        !          1610:          && INTVAL (operands[2]) <= 8)
        !          1611:        return \"addq%.w %2,%0\";
        !          1612:     }
        !          1613:   if (GET_CODE (operands[2]) == CONST_INT)
        !          1614:     {
        !          1615:       if (INTVAL (operands[2]) < 0
        !          1616:          && INTVAL (operands[2]) >= -8)
        !          1617:        {
        !          1618:          operands[2] = gen_rtx (CONST_INT, VOIDmode,
        !          1619:                                 - INTVAL (operands[2]));
        !          1620:          return \"subq%.w %2,%0\";
        !          1621:        }
        !          1622:     }
        !          1623: #endif
        !          1624:   return \"add%.w %2,%0\";
        !          1625: }")
        !          1626: 
        !          1627: (define_insn ""
        !          1628:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
        !          1629:        (plus:HI (match_dup 0)
        !          1630:                 (match_operand:HI 1 "general_operand" "dn,rmn")))]
        !          1631:   ""
        !          1632:   "add%.w %1,%0")
        !          1633: 
        !          1634: (define_insn "addqi3"
        !          1635:   [(set (match_operand:QI 0 "general_operand" "=m,d")
        !          1636:        (plus:QI (match_operand:QI 1 "general_operand" "%0,0")
        !          1637:                 (match_operand:QI 2 "general_operand" "dn,dmn")))]
        !          1638:   ""
        !          1639:   "*
        !          1640: {
        !          1641: #ifndef NO_ADDSUB_Q
        !          1642:   if (GET_CODE (operands[2]) == CONST_INT)
        !          1643:     {
        !          1644:       if (INTVAL (operands[2]) > 0
        !          1645:          && INTVAL (operands[2]) <= 8)
        !          1646:        return \"addq%.b %2,%0\";
        !          1647:     }
        !          1648:   if (GET_CODE (operands[2]) == CONST_INT)
        !          1649:     {
        !          1650:       if (INTVAL (operands[2]) < 0 && INTVAL (operands[2]) >= -8)
        !          1651:        {
        !          1652:         operands[2] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[2]));
        !          1653:         return \"subq%.b %2,%0\";
        !          1654:        }
        !          1655:     }
        !          1656: #endif
        !          1657:   return \"add%.b %2,%0\";
        !          1658: }")
        !          1659: 
        !          1660: (define_insn ""
        !          1661:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
        !          1662:        (plus:QI (match_dup 0)
        !          1663:                 (match_operand:QI 1 "general_operand" "dn,dmn")))]
        !          1664:   ""
        !          1665:   "add%.b %1,%0")
        !          1666: 
        !          1667: (define_expand "adddf3"
        !          1668:   [(set (match_operand:DF 0 "general_operand" "")
        !          1669:        (plus:DF (match_operand:DF 1 "general_operand" "")
        !          1670:                 (match_operand:DF 2 "general_operand" "")))]
        !          1671:   "TARGET_68881 || TARGET_FPA"
        !          1672:   "")
        !          1673: 
        !          1674: (define_insn ""
        !          1675:   [(set (match_operand:DF 0 "general_operand" "=x,y")
        !          1676:        (plus:DF (match_operand:DF 1 "general_operand" "%xH,y")
        !          1677:                 (match_operand:DF 2 "general_operand" "xH,dmF")))]
        !          1678:   "TARGET_FPA"
        !          1679:   "*
        !          1680: {
        !          1681:   if (rtx_equal_p (operands[0], operands[1]))
        !          1682:     return \"fpadd%.d %y2,%0\";
        !          1683:   if (rtx_equal_p (operands[0], operands[2]))
        !          1684:     return \"fpadd%.d %y1,%0\";
        !          1685:   if (which_alternative == 0)
        !          1686:     return \"fpadd3%.d %w2,%w1,%0\";
        !          1687:   return \"fpadd3%.d %x2,%x1,%0\";
        !          1688: }")
        !          1689: 
        !          1690: (define_insn ""
        !          1691:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          1692:        (plus:DF (match_operand:DF 1 "general_operand" "%0")
        !          1693:                 (match_operand:DF 2 "general_operand" "fmG")))]
        !          1694:   "TARGET_68881"
        !          1695:   "*
        !          1696: {
        !          1697:   if (REG_P (operands[2]))
        !          1698:     return \"fadd%.x %2,%0\";
        !          1699:   return \"fadd%.d %f2,%0\";
        !          1700: }")
        !          1701: 
        !          1702: (define_expand "addsf3"
        !          1703:   [(set (match_operand:SF 0 "general_operand" "")
        !          1704:        (plus:SF (match_operand:SF 1 "general_operand" "")
        !          1705:                 (match_operand:SF 2 "general_operand" "")))]
        !          1706:   "TARGET_68881 || TARGET_FPA"
        !          1707:   "")
        !          1708: 
        !          1709: (define_insn ""
        !          1710:   [(set (match_operand:SF 0 "general_operand" "=x,y")
        !          1711:        (plus:SF (match_operand:SF 1 "general_operand" "%xH,y")
        !          1712:                 (match_operand:SF 2 "general_operand" "xH,rmF")))]
        !          1713:   "TARGET_FPA"
        !          1714:   "*
        !          1715: {
        !          1716:   if (rtx_equal_p (operands[0], operands[1]))
        !          1717:     return \"fpadd%.s %w2,%0\";
        !          1718:   if (rtx_equal_p (operands[0], operands[2]))
        !          1719:     return \"fpadd%.s %w1,%0\";
        !          1720:   if (which_alternative == 0)
        !          1721:     return \"fpadd3%.s %w2,%w1,%0\";
        !          1722:   return \"fpadd3%.s %2,%1,%0\";
        !          1723: }")
        !          1724: 
        !          1725: (define_insn ""
        !          1726:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          1727:        (plus:SF (match_operand:SF 1 "general_operand" "%0")
        !          1728:                 (match_operand:SF 2 "general_operand" "fdmF")))]
        !          1729:   "TARGET_68881"
        !          1730:   "*
        !          1731: {
        !          1732:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
        !          1733:     return \"fadd%.x %2,%0\";
        !          1734:   return \"fadd%.s %f2,%0\";
        !          1735: }")
        !          1736: 
        !          1737: ;; subtract instructions
        !          1738: 
        !          1739: (define_insn "subsi3"
        !          1740:   [(set (match_operand:SI 0 "general_operand" "=m,r,!a,?d")
        !          1741:        (minus:SI (match_operand:SI 1 "general_operand" "0,0,a,mrIKs")
        !          1742:                  (match_operand:SI 2 "general_operand" "dIKs,mrIKs,J,0")))]
        !          1743:   ""
        !          1744:   "*
        !          1745: {
        !          1746:   if (! operands_match_p (operands[0], operands[1]))
        !          1747:     {
        !          1748:       if (operands_match_p (operands[0], operands[2]))
        !          1749:        {
        !          1750: #ifndef NO_ADDSUB_Q
        !          1751:          if (GET_CODE (operands[1]) == CONST_INT)
        !          1752:            {
        !          1753:              if (INTVAL (operands[1]) > 0
        !          1754:                  && INTVAL (operands[1]) <= 8)
        !          1755:                return \"subq%.l %1,%0\;neg%.l %0\";
        !          1756:            }
        !          1757: #endif
        !          1758:          return \"sub%.l %1,%0\;neg%.l %0\";
        !          1759:        }
        !          1760:       /* This case is matched by J, but negating -0x8000
        !          1761:          in an lea would give an invalid displacement.
        !          1762:         So do this specially.  */
        !          1763:       if (INTVAL (operands[2]) == -0x8000)
        !          1764:        return \"move%.l %1,%0\;sub%.l %2,%0\";
        !          1765: #ifdef SGS
        !          1766:       return \"lea %n2(%1),%0\";
        !          1767: #else
        !          1768: #ifdef MOTOROLA
        !          1769:       return \"lea (%n2,%1),%0\";
        !          1770: #else /* not MOTOROLA (MIT syntax) */
        !          1771:       return \"lea %1@(%n2),%0\";
        !          1772: #endif /* not MOTOROLA */
        !          1773: #endif /* not SGS */
        !          1774:     }
        !          1775:   if (GET_CODE (operands[2]) == CONST_INT)
        !          1776:     {
        !          1777: #ifndef NO_ADDSUB_Q
        !          1778:       if (INTVAL (operands[2]) > 0
        !          1779:          && INTVAL (operands[2]) <= 8)
        !          1780:        return \"subq%.l %2,%0\";
        !          1781: #endif
        !          1782:       if (ADDRESS_REG_P (operands[0])
        !          1783:          && INTVAL (operands[2]) >= -0x8000
        !          1784:          && INTVAL (operands[2]) < 0x8000)
        !          1785:        return \"sub%.w %2,%0\";
        !          1786:     }
        !          1787:   return \"sub%.l %2,%0\";
        !          1788: }")
        !          1789: 
        !          1790: (define_insn ""
        !          1791:   [(set (match_operand:SI 0 "general_operand" "=a")
        !          1792:        (minus:SI (match_operand:SI 1 "general_operand" "0")
        !          1793:                  (sign_extend:SI (match_operand:HI 2 "general_operand" "rmn"))))]
        !          1794:   ""
        !          1795:   "sub%.w %2,%0")
        !          1796: 
        !          1797: (define_insn "subhi3"
        !          1798:   [(set (match_operand:HI 0 "general_operand" "=m,r")
        !          1799:        (minus:HI (match_operand:HI 1 "general_operand" "0,0")
        !          1800:                  (match_operand:HI 2 "general_operand" "dn,rmn")))]
        !          1801:   ""
        !          1802:   "sub%.w %2,%0")
        !          1803: 
        !          1804: (define_insn ""
        !          1805:   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
        !          1806:        (minus:HI (match_dup 0)
        !          1807:                  (match_operand:HI 1 "general_operand" "dn,rmn")))]
        !          1808:   ""
        !          1809:   "sub%.w %1,%0")
        !          1810: 
        !          1811: (define_insn "subqi3"
        !          1812:   [(set (match_operand:QI 0 "general_operand" "=m,d")
        !          1813:        (minus:QI (match_operand:QI 1 "general_operand" "0,0")
        !          1814:                  (match_operand:QI 2 "general_operand" "dn,dmn")))]
        !          1815:   ""
        !          1816:   "sub%.b %2,%0")
        !          1817: 
        !          1818: (define_insn ""
        !          1819:   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
        !          1820:        (minus:QI (match_dup 0)
        !          1821:                  (match_operand:QI 1 "general_operand" "dn,dmn")))]
        !          1822:   ""
        !          1823:   "sub%.b %1,%0")
        !          1824: 
        !          1825: (define_expand "subdf3"
        !          1826:   [(set (match_operand:DF 0 "general_operand" "")
        !          1827:        (minus:DF (match_operand:DF 1 "general_operand" "")
        !          1828:                  (match_operand:DF 2 "general_operand" "")))]
        !          1829:   "TARGET_68881 || TARGET_FPA"
        !          1830:   "")
        !          1831: 
        !          1832: (define_insn ""
        !          1833:   [(set (match_operand:DF 0 "general_operand" "=x,y,y")
        !          1834:        (minus:DF (match_operand:DF 1 "general_operand" "xH,y,dmF")
        !          1835:                  (match_operand:DF 2 "general_operand" "xH,dmF,0")))]
        !          1836:   "TARGET_FPA"
        !          1837:   "*
        !          1838: {
        !          1839:   if (rtx_equal_p (operands[0], operands[2]))
        !          1840:     return \"fprsub%.d %y1,%0\";
        !          1841:   if (rtx_equal_p (operands[0], operands[1]))
        !          1842:     return \"fpsub%.d %y2,%0\";
        !          1843:   if (which_alternative == 0)
        !          1844:     return \"fpsub3%.d %w2,%w1,%0\";
        !          1845:   return \"fpsub3%.d %x2,%x1,%0\";
        !          1846: }")
        !          1847: 
        !          1848: (define_insn ""
        !          1849:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          1850:        (minus:DF (match_operand:DF 1 "general_operand" "0")
        !          1851:                  (match_operand:DF 2 "general_operand" "fmG")))]
        !          1852:   "TARGET_68881"
        !          1853:   "*
        !          1854: {
        !          1855:   if (REG_P (operands[2]))
        !          1856:     return \"fsub%.x %2,%0\";
        !          1857:   return \"fsub%.d %f2,%0\";
        !          1858: }")
        !          1859: 
        !          1860: (define_expand "subsf3"
        !          1861:   [(set (match_operand:SF 0 "general_operand" "")
        !          1862:        (minus:SF (match_operand:SF 1 "general_operand" "")
        !          1863:                  (match_operand:SF 2 "general_operand" "")))]
        !          1864:   "TARGET_68881 || TARGET_FPA"
        !          1865:   "")
        !          1866: 
        !          1867: (define_insn ""
        !          1868:   [(set (match_operand:SF 0 "general_operand" "=x,y,y")
        !          1869:        (minus:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
        !          1870:                  (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
        !          1871:   "TARGET_FPA"
        !          1872:   "*
        !          1873: {
        !          1874:   if (rtx_equal_p (operands[0], operands[2]))
        !          1875:     return \"fprsub%.s %w1,%0\";
        !          1876:   if (rtx_equal_p (operands[0], operands[1]))
        !          1877:     return \"fpsub%.s %w2,%0\";
        !          1878:   if (which_alternative == 0)
        !          1879:     return \"fpsub3%.s %w2,%w1,%0\";
        !          1880:   return \"fpsub3%.s %2,%1,%0\";
        !          1881: }")
        !          1882: 
        !          1883: (define_insn ""
        !          1884:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          1885:        (minus:SF (match_operand:SF 1 "general_operand" "0")
        !          1886:                  (match_operand:SF 2 "general_operand" "fdmF")))]
        !          1887:   "TARGET_68881"
        !          1888:   "*
        !          1889: {
        !          1890:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
        !          1891:     return \"fsub%.x %2,%0\";
        !          1892:   return \"fsub%.s %f2,%0\";
        !          1893: }")
        !          1894: 
        !          1895: ;; multiply instructions
        !          1896: 
        !          1897: (define_insn "mulhi3"
        !          1898:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          1899:        (mult:HI (match_operand:HI 1 "general_operand" "%0")
        !          1900:                 (match_operand:HI 2 "general_operand" "dmn")))]
        !          1901:   ""
        !          1902:   "*
        !          1903: {
        !          1904: #ifdef MOTOROLA
        !          1905:   return \"muls.w %2,%0\";
        !          1906: #else
        !          1907:   return \"muls %2,%0\";
        !          1908: #endif
        !          1909: }")
        !          1910: 
        !          1911: (define_insn "mulhisi3"
        !          1912:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          1913:        (mult:SI (match_operand:HI 1 "general_operand" "%0")
        !          1914:                 (match_operand:HI 2 "general_operand" "dmn")))]
        !          1915:   ""
        !          1916:   "*
        !          1917: {
        !          1918: #ifdef MOTOROLA
        !          1919:   return \"muls.w %2,%0\";
        !          1920: #else
        !          1921:   return \"muls %2,%0\";
        !          1922: #endif
        !          1923: }")
        !          1924: 
        !          1925: (define_insn "mulsi3"
        !          1926:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          1927:        (mult:SI (match_operand:SI 1 "general_operand" "%0")
        !          1928:                 (match_operand:SI 2 "general_operand" "dmsK")))]
        !          1929:   "TARGET_68020"
        !          1930:   "muls%.l %2,%0")
        !          1931: 
        !          1932: (define_insn "umulhi3"
        !          1933:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          1934:        (umult:HI (match_operand:HI 1 "general_operand" "%0")
        !          1935:                  (match_operand:HI 2 "general_operand" "dmn")))]
        !          1936:   ""
        !          1937:   "*
        !          1938: {
        !          1939: #ifdef MOTOROLA
        !          1940:   return \"mulu.w %2,%0\";
        !          1941: #else
        !          1942:   return \"mulu %2,%0\";
        !          1943: #endif
        !          1944: }")
        !          1945: 
        !          1946: (define_insn "umulhisi3"
        !          1947:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          1948:        (umult:SI (match_operand:HI 1 "general_operand" "%0")
        !          1949:                  (match_operand:HI 2 "general_operand" "dmn")))]
        !          1950:   ""
        !          1951:   "*
        !          1952: {
        !          1953: #ifdef MOTOROLA
        !          1954:   return \"mulu.w %2,%0\";
        !          1955: #else
        !          1956:   return \"mulu %2,%0\";
        !          1957: #endif
        !          1958: }")
        !          1959: 
        !          1960: (define_insn "umulsi3"
        !          1961:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          1962:        (umult:SI (match_operand:SI 1 "general_operand" "%0")
        !          1963:                  (match_operand:SI 2 "general_operand" "dmsK")))]
        !          1964:   "TARGET_68020"
        !          1965:   "mulu%.l %2,%0")
        !          1966: 
        !          1967: (define_expand "muldf3"
        !          1968:   [(set (match_operand:DF 0 "general_operand" "")
        !          1969:        (mult:DF (match_operand:DF 1 "general_operand" "")
        !          1970:                 (match_operand:DF 2 "general_operand" "")))]
        !          1971:   "TARGET_68881 || TARGET_FPA"
        !          1972:   "")
        !          1973: 
        !          1974: (define_insn ""
        !          1975:   [(set (match_operand:DF 0 "general_operand" "=x,y")
        !          1976:        (mult:DF (match_operand:DF 1 "general_operand" "%xH,y")
        !          1977:                 (match_operand:DF 2 "general_operand" "xH,rmF")))]
        !          1978:   "TARGET_FPA"
        !          1979:   "*
        !          1980: {
        !          1981:   if (rtx_equal_p (operands[1], operands[2]))
        !          1982:     return \"fpsqr%.d %y1,%0\";
        !          1983:   if (rtx_equal_p (operands[0], operands[1]))
        !          1984:     return \"fpmul%.d %y2,%0\";
        !          1985:   if (rtx_equal_p (operands[0], operands[2]))
        !          1986:     return \"fpmul%.d %y1,%0\";
        !          1987:   if (which_alternative == 0)
        !          1988:     return \"fpmul3%.d %w2,%w1,%0\"; 
        !          1989:   return \"fpmul3%.d %x2,%x1,%0\";
        !          1990: }")
        !          1991: 
        !          1992: (define_insn ""
        !          1993:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          1994:        (mult:DF (match_operand:DF 1 "general_operand" "%0")
        !          1995:                 (match_operand:DF 2 "general_operand" "fmG")))]
        !          1996:   "TARGET_68881"
        !          1997:   "*
        !          1998: {
        !          1999:   if (REG_P (operands[2]))
        !          2000:     return \"fmul%.x %2,%0\";
        !          2001:   return \"fmul%.d %f2,%0\";
        !          2002: }")
        !          2003: 
        !          2004: (define_expand "mulsf3"
        !          2005:   [(set (match_operand:SF 0 "general_operand" "")
        !          2006:        (mult:SF (match_operand:SF 1 "general_operand" "")
        !          2007:                 (match_operand:SF 2 "general_operand" "")))]
        !          2008:   "TARGET_68881 || TARGET_FPA"
        !          2009:   "")
        !          2010: 
        !          2011: (define_insn ""
        !          2012:   [(set (match_operand:SF 0 "general_operand" "=x,y")
        !          2013:        (mult:SF (match_operand:SF 1 "general_operand" "%xH,y")
        !          2014:                 (match_operand:SF 2 "general_operand" "xH,rmF")))]
        !          2015:   "TARGET_FPA"
        !          2016:   "*
        !          2017: {
        !          2018:   if (rtx_equal_p (operands[1], operands[2]))
        !          2019:     return \"fpsqr%.s %w1,%0\";
        !          2020:   if (rtx_equal_p (operands[0], operands[1]))
        !          2021:     return \"fpmul%.s %w2,%0\";
        !          2022:   if (rtx_equal_p (operands[0], operands[2]))
        !          2023:     return \"fpmul%.s %w1,%0\";
        !          2024:   if (which_alternative == 0)
        !          2025:     return \"fpmul3%.s %w2,%w1,%0\";
        !          2026:   return \"fpmul3%.s %2,%1,%0\";
        !          2027: }")
        !          2028: 
        !          2029: (define_insn ""
        !          2030:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          2031:        (mult:SF (match_operand:SF 1 "general_operand" "%0")
        !          2032:                 (match_operand:SF 2 "general_operand" "fdmF")))]
        !          2033:   "TARGET_68881"
        !          2034:   "*
        !          2035: {
        !          2036:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
        !          2037:     return \"fsglmul%.x %2,%0\";
        !          2038:   return \"fsglmul%.s %f2,%0\";
        !          2039: }")
        !          2040: 
        !          2041: ;; divide instructions
        !          2042: 
        !          2043: (define_insn "divhi3"
        !          2044:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2045:        (div:HI (match_operand:HI 1 "general_operand" "0")
        !          2046:                (match_operand:HI 2 "general_operand" "dmn")))]
        !          2047:   ""
        !          2048:   "*
        !          2049: {
        !          2050: #ifdef MOTOROLA
        !          2051:   return \"ext.l %0\;divs.w %2,%0\";
        !          2052: #else
        !          2053:   return \"extl %0\;divs %2,%0\";
        !          2054: #endif
        !          2055: }")
        !          2056: 
        !          2057: (define_insn "divhisi3"
        !          2058:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2059:        (div:HI (match_operand:SI 1 "general_operand" "0")
        !          2060:                (match_operand:HI 2 "general_operand" "dmn")))]
        !          2061:   ""
        !          2062:   "*
        !          2063: {
        !          2064: #ifdef MOTOROLA
        !          2065:   return \"divs.w %2,%0\";
        !          2066: #else
        !          2067:   return \"divs %2,%0\";
        !          2068: #endif
        !          2069: }")
        !          2070: 
        !          2071: (define_insn "divsi3"
        !          2072:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2073:        (div:SI (match_operand:SI 1 "general_operand" "0")
        !          2074:                (match_operand:SI 2 "general_operand" "dmsK")))]
        !          2075:   "TARGET_68020"
        !          2076:   "divs%.l %2,%0")
        !          2077: 
        !          2078: (define_insn "udivhi3"
        !          2079:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2080:        (udiv:HI (match_operand:HI 1 "general_operand" "0")
        !          2081:                 (match_operand:HI 2 "general_operand" "dmn")))]
        !          2082:   ""
        !          2083:   "*
        !          2084: {
        !          2085: #ifdef MOTOROLA
        !          2086:   return \"and.l %#0xFFFF,%0\;divu.w %2,%0\";
        !          2087: #else
        !          2088:   return \"andl %#0xFFFF,%0\;divu %2,%0\";
        !          2089: #endif
        !          2090: }")
        !          2091: 
        !          2092: (define_insn "udivhisi3"
        !          2093:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2094:        (udiv:HI (match_operand:SI 1 "general_operand" "0")
        !          2095:                 (match_operand:HI 2 "general_operand" "dmn")))]
        !          2096:   ""
        !          2097:   "*
        !          2098: {
        !          2099: #ifdef MOTOROLA
        !          2100:   return \"divu.w %2,%0\";
        !          2101: #else
        !          2102:   return \"divu %2,%0\";
        !          2103: #endif
        !          2104: }")
        !          2105: 
        !          2106: (define_insn "udivsi3"
        !          2107:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2108:        (udiv:SI (match_operand:SI 1 "general_operand" "0")
        !          2109:                 (match_operand:SI 2 "general_operand" "dmsK")))]
        !          2110:   "TARGET_68020"
        !          2111:   "divu%.l %2,%0")
        !          2112: 
        !          2113: (define_expand "divdf3"
        !          2114:   [(set (match_operand:DF 0 "general_operand" "")
        !          2115:        (div:DF (match_operand:DF 1 "general_operand" "")
        !          2116:                (match_operand:DF 2 "general_operand" "")))]
        !          2117:   "TARGET_68881 || TARGET_FPA"
        !          2118:   "")
        !          2119: 
        !          2120: (define_insn ""
        !          2121:   [(set (match_operand:DF 0 "general_operand" "=x,y,y")
        !          2122:        (div:DF (match_operand:DF 1 "general_operand" "xH,y,rmF")
        !          2123:                (match_operand:DF 2 "general_operand" "xH,rmF,0")))]
        !          2124:   "TARGET_FPA"
        !          2125:   "*
        !          2126: {
        !          2127:   if (rtx_equal_p (operands[0], operands[2]))
        !          2128:     return \"fprdiv%.d %y1,%0\";
        !          2129:   if (rtx_equal_p (operands[0], operands[1]))
        !          2130:     return \"fpdiv%.d %y2,%0\";
        !          2131:   if (which_alternative == 0)
        !          2132:     return \"fpdiv3%.d %w2,%w1,%0\";
        !          2133:   return \"fpdiv3%.d %x2,%x1,%x0\";
        !          2134: }")
        !          2135: 
        !          2136: (define_insn ""
        !          2137:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          2138:        (div:DF (match_operand:DF 1 "general_operand" "0")
        !          2139:                (match_operand:DF 2 "general_operand" "fmG")))]
        !          2140:   "TARGET_68881"
        !          2141:   "*
        !          2142: {
        !          2143:   if (REG_P (operands[2]))
        !          2144:     return \"fdiv%.x %2,%0\";
        !          2145:   return \"fdiv%.d %f2,%0\";
        !          2146: }")
        !          2147: 
        !          2148: (define_expand "divsf3"
        !          2149:   [(set (match_operand:SF 0 "general_operand" "")
        !          2150:        (div:SF (match_operand:SF 1 "general_operand" "")
        !          2151:                (match_operand:SF 2 "general_operand" "")))]
        !          2152:   "TARGET_68881 || TARGET_FPA"
        !          2153:   "")
        !          2154: 
        !          2155: (define_insn ""
        !          2156:   [(set (match_operand:SF 0 "general_operand" "=x,y,y")
        !          2157:        (div:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
        !          2158:                (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
        !          2159:   "TARGET_FPA"
        !          2160:   "*
        !          2161: {
        !          2162:   if (rtx_equal_p (operands[0], operands[1]))
        !          2163:     return \"fpdiv%.s %w2,%0\";
        !          2164:   if (rtx_equal_p (operands[0], operands[2]))
        !          2165:     return \"fprdiv%.s %w1,%0\";
        !          2166:   if (which_alternative == 0)
        !          2167:     return \"fpdiv3%.s %w2,%w1,%0\";
        !          2168:   return \"fpdiv3%.s %2,%1,%0\";
        !          2169: }")
        !          2170: 
        !          2171: (define_insn ""
        !          2172:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          2173:        (div:SF (match_operand:SF 1 "general_operand" "0")
        !          2174:                (match_operand:SF 2 "general_operand" "fdmF")))]
        !          2175:   "TARGET_68881"
        !          2176:   "*
        !          2177: {
        !          2178:   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
        !          2179:     return \"fsgldiv%.x %2,%0\";
        !          2180:   return \"fsgldiv%.s %f2,%0\";
        !          2181: }")
        !          2182: 
        !          2183: ;; Remainder instructions.
        !          2184: 
        !          2185: (define_insn "modhi3"
        !          2186:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2187:        (mod:HI (match_operand:HI 1 "general_operand" "0")
        !          2188:                (match_operand:HI 2 "general_operand" "dmn")))]
        !          2189:   ""
        !          2190:   "*
        !          2191: {
        !          2192:   /* The swap insn produces cc's that don't correspond to the result.  */
        !          2193:   CC_STATUS_INIT;
        !          2194: #ifdef MOTOROLA
        !          2195: #ifdef SGS_3B1
        !          2196:   return \"ext.l %0\;divs.w %2,%0\;swap.w %0\";
        !          2197: #else
        !          2198:   return \"ext.l %0\;divs.w %2,%0\;swap %0\";
        !          2199: #endif
        !          2200: #else
        !          2201:   return \"extl %0\;divs %2,%0\;swap %0\";
        !          2202: #endif
        !          2203: }")
        !          2204: 
        !          2205: (define_insn "modhisi3"
        !          2206:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2207:        (mod:HI (match_operand:SI 1 "general_operand" "0")
        !          2208:                (match_operand:HI 2 "general_operand" "dmn")))]
        !          2209:   ""
        !          2210:   "*
        !          2211: {
        !          2212:   /* The swap insn produces cc's that don't correspond to the result.  */
        !          2213:   CC_STATUS_INIT;
        !          2214: #ifdef MOTOROLA
        !          2215: #ifdef SGS_3B1
        !          2216:   return \"divs.w %2,%0\;swap.w %0\";
        !          2217: #else
        !          2218:   return \"divs.w %2,%0\;swap %0\";
        !          2219: #endif
        !          2220: #else
        !          2221:   return \"divs %2,%0\;swap %0\";
        !          2222: #endif
        !          2223: }")
        !          2224: 
        !          2225: (define_insn "umodhi3"
        !          2226:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2227:        (umod:HI (match_operand:HI 1 "general_operand" "0")
        !          2228:                 (match_operand:HI 2 "general_operand" "dmn")))]
        !          2229:   ""
        !          2230:   "*
        !          2231: {
        !          2232:   /* The swap insn produces cc's that don't correspond to the result.  */
        !          2233:   CC_STATUS_INIT;
        !          2234: #ifdef MOTOROLA
        !          2235: #ifdef SGS_3B1
        !          2236:   return \"and.l %#0xFFFF,%0\;divu.w %2,%0\;swap.w %0\";
        !          2237: #else
        !          2238:   return \"and.l %#0xFFFF,%0\;divu.w %2,%0\;swap %0\";
        !          2239: #endif
        !          2240: #else
        !          2241:   return \"andl %#0xFFFF,%0\;divu %2,%0\;swap %0\";
        !          2242: #endif
        !          2243: }")
        !          2244: 
        !          2245: (define_insn "umodhisi3"
        !          2246:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2247:        (umod:HI (match_operand:SI 1 "general_operand" "0")
        !          2248:                 (match_operand:HI 2 "general_operand" "dmn")))]
        !          2249:   ""
        !          2250:   "*
        !          2251: {
        !          2252:   /* The swap insn produces cc's that don't correspond to the result.  */
        !          2253:   CC_STATUS_INIT;
        !          2254: #ifdef MOTOROLA
        !          2255: #ifdef SGS_3B1
        !          2256:   return \"divu.w %2,%0\;swap.w %0\";
        !          2257: #else
        !          2258:   return \"divu.w %2,%0\;swap %0\";
        !          2259: #endif
        !          2260: #else
        !          2261:   return \"divu %2,%0\;swap %0\";
        !          2262: #endif
        !          2263: }")
        !          2264: 
        !          2265: (define_insn "divmodsi4"
        !          2266:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2267:        (div:SI (match_operand:SI 1 "general_operand" "0")
        !          2268:                (match_operand:SI 2 "general_operand" "dmsK")))
        !          2269:    (set (match_operand:SI 3 "general_operand" "=d")
        !          2270:        (mod:SI (match_dup 1) (match_dup 2)))]
        !          2271:   "TARGET_68020"
        !          2272:   "divsl%.l %2,%3:%0")
        !          2273: 
        !          2274: (define_insn "udivmodsi4"
        !          2275:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2276:        (udiv:SI (match_operand:SI 1 "general_operand" "0")
        !          2277:                 (match_operand:SI 2 "general_operand" "dmsK")))
        !          2278:    (set (match_operand:SI 3 "general_operand" "=d")
        !          2279:        (umod:SI (match_dup 1) (match_dup 2)))]
        !          2280:   "TARGET_68020"
        !          2281:   "divul%.l %2,%3:%0")
        !          2282: 
        !          2283: ;; logical-and instructions
        !          2284: 
        !          2285: (define_insn "andsi3"
        !          2286:   [(set (match_operand:SI 0 "general_operand" "=m,d")
        !          2287:        (and:SI (match_operand:SI 1 "general_operand" "%0,0")
        !          2288:                (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
        !          2289:   ""
        !          2290:   "*
        !          2291: {
        !          2292:   if (GET_CODE (operands[2]) == CONST_INT
        !          2293:       && (INTVAL (operands[2]) | 0xffff) == 0xffffffff
        !          2294:       && (DATA_REG_P (operands[0])
        !          2295:          || offsettable_memref_p (operands[0])))
        !          2296:     { 
        !          2297:       if (GET_CODE (operands[0]) != REG)
        !          2298:         operands[0] = adj_offsettable_operand (operands[0], 2);
        !          2299:       operands[2] = gen_rtx (CONST_INT, VOIDmode,
        !          2300:                             INTVAL (operands[2]) & 0xffff);
        !          2301:       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
        !          2302:       CC_STATUS_INIT;
        !          2303:       if (operands[2] == const0_rtx)
        !          2304:         return \"clr%.w %0\";
        !          2305:       return \"and%.w %2,%0\";
        !          2306:     }
        !          2307:   return \"and%.l %2,%0\";
        !          2308: }")
        !          2309: 
        !          2310: (define_insn "andhi3"
        !          2311:   [(set (match_operand:HI 0 "general_operand" "=m,d")
        !          2312:        (and:HI (match_operand:HI 1 "general_operand" "%0,0")
        !          2313:                (match_operand:HI 2 "general_operand" "dn,dmn")))]
        !          2314:   ""
        !          2315:   "and%.w %2,%0")
        !          2316: 
        !          2317: (define_insn "andqi3"
        !          2318:   [(set (match_operand:QI 0 "general_operand" "=m,d")
        !          2319:        (and:QI (match_operand:QI 1 "general_operand" "%0,0")
        !          2320:                (match_operand:QI 2 "general_operand" "dn,dmn")))]
        !          2321:   ""
        !          2322:   "and%.b %2,%0")
        !          2323: 
        !          2324: (define_insn ""
        !          2325:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2326:        (and:SI (zero_extend:SI (match_operand:HI 1 "general_operand" "dm"))
        !          2327:                (match_operand:SI 2 "general_operand" "0")))]
        !          2328:   "GET_CODE (operands[2]) == CONST_INT
        !          2329:    && (unsigned int) INTVAL (operands[2]) < (1 << GET_MODE_BITSIZE (HImode))"
        !          2330:   "and%.w %1,%0")
        !          2331: 
        !          2332: (define_insn ""
        !          2333:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2334:        (and:SI (zero_extend:SI (match_operand:QI 1 "general_operand" "dm"))
        !          2335:                (match_operand:SI 2 "general_operand" "0")))]
        !          2336:   "GET_CODE (operands[2]) == CONST_INT
        !          2337:    && (unsigned int) INTVAL (operands[2]) < (1 << GET_MODE_BITSIZE (QImode))"
        !          2338:   "and%.b %1,%0")
        !          2339: 
        !          2340: ;; inclusive-or instructions
        !          2341: 
        !          2342: (define_insn "iorsi3"
        !          2343:   [(set (match_operand:SI 0 "general_operand" "=m,d")
        !          2344:        (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
        !          2345:                (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
        !          2346:   ""
        !          2347:   "*
        !          2348: {
        !          2349:   register int logval;
        !          2350:   if (GET_CODE (operands[2]) == CONST_INT
        !          2351:       && INTVAL (operands[2]) >> 16 == 0
        !          2352:       && (DATA_REG_P (operands[0])
        !          2353:          || offsettable_memref_p (operands[0])))
        !          2354:     { 
        !          2355:       if (GET_CODE (operands[0]) != REG)
        !          2356:         operands[0] = adj_offsettable_operand (operands[0], 2);
        !          2357:       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
        !          2358:       CC_STATUS_INIT;
        !          2359:       return \"or%.w %2,%0\";
        !          2360:     }
        !          2361:   if (GET_CODE (operands[2]) == CONST_INT
        !          2362:       && (logval = exact_log2 (INTVAL (operands[2]))) >= 0
        !          2363:       && (DATA_REG_P (operands[0])
        !          2364:          || offsettable_memref_p (operands[0])))
        !          2365:     { 
        !          2366:       if (DATA_REG_P (operands[0]))
        !          2367:        {
        !          2368:          operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
        !          2369:        }
        !          2370:       else
        !          2371:         {
        !          2372:          operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8));
        !          2373:          operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
        !          2374:        }
        !          2375:       return \"bset %1,%0\";
        !          2376:     }
        !          2377:   return \"or%.l %2,%0\";
        !          2378: }")
        !          2379: 
        !          2380: (define_insn "iorhi3"
        !          2381:   [(set (match_operand:HI 0 "general_operand" "=m,d")
        !          2382:        (ior:HI (match_operand:HI 1 "general_operand" "%0,0")
        !          2383:                (match_operand:HI 2 "general_operand" "dn,dmn")))]
        !          2384:   ""
        !          2385:   "or%.w %2,%0")
        !          2386: 
        !          2387: (define_insn "iorqi3"
        !          2388:   [(set (match_operand:QI 0 "general_operand" "=m,d")
        !          2389:        (ior:QI (match_operand:QI 1 "general_operand" "%0,0")
        !          2390:                (match_operand:QI 2 "general_operand" "dn,dmn")))]
        !          2391:   ""
        !          2392:   "or%.b %2,%0")
        !          2393: 
        !          2394: ;; xor instructions
        !          2395: 
        !          2396: (define_insn "xorsi3"
        !          2397:   [(set (match_operand:SI 0 "general_operand" "=do,m")
        !          2398:        (xor:SI (match_operand:SI 1 "general_operand" "%0,0")
        !          2399:                (match_operand:SI 2 "general_operand" "di,dKs")))]
        !          2400:   ""
        !          2401:   "*
        !          2402: {
        !          2403:   if (GET_CODE (operands[2]) == CONST_INT
        !          2404:       && INTVAL (operands[2]) >> 16 == 0
        !          2405:       && (offsettable_memref_p (operands[0]) || DATA_REG_P (operands[0])))
        !          2406:     { 
        !          2407:       if (! DATA_REG_P (operands[0]))
        !          2408:        operands[0] = adj_offsettable_operand (operands[0], 2);
        !          2409:       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
        !          2410:       CC_STATUS_INIT;
        !          2411:       return \"eor%.w %2,%0\";
        !          2412:     }
        !          2413:   return \"eor%.l %2,%0\";
        !          2414: }")
        !          2415: 
        !          2416: (define_insn "xorhi3"
        !          2417:   [(set (match_operand:HI 0 "general_operand" "=dm")
        !          2418:        (xor:HI (match_operand:HI 1 "general_operand" "%0")
        !          2419:                (match_operand:HI 2 "general_operand" "dn")))]
        !          2420:   ""
        !          2421:   "eor%.w %2,%0")
        !          2422: 
        !          2423: (define_insn "xorqi3"
        !          2424:   [(set (match_operand:QI 0 "general_operand" "=dm")
        !          2425:        (xor:QI (match_operand:QI 1 "general_operand" "%0")
        !          2426:                (match_operand:QI 2 "general_operand" "dn")))]
        !          2427:   ""
        !          2428:   "eor%.b %2,%0")
        !          2429: 
        !          2430: ;; negation instructions
        !          2431: 
        !          2432: (define_insn "negsi2"
        !          2433:   [(set (match_operand:SI 0 "general_operand" "=dm")
        !          2434:        (neg:SI (match_operand:SI 1 "general_operand" "0")))]
        !          2435:   ""
        !          2436:   "neg%.l %0")
        !          2437: 
        !          2438: (define_insn "neghi2"
        !          2439:   [(set (match_operand:HI 0 "general_operand" "=dm")
        !          2440:        (neg:HI (match_operand:HI 1 "general_operand" "0")))]
        !          2441:   ""
        !          2442:   "neg%.w %0")
        !          2443: 
        !          2444: (define_insn "negqi2"
        !          2445:   [(set (match_operand:QI 0 "general_operand" "=dm")
        !          2446:        (neg:QI (match_operand:QI 1 "general_operand" "0")))]
        !          2447:   ""
        !          2448:   "neg%.b %0")
        !          2449: 
        !          2450: (define_expand "negsf2"
        !          2451:   [(set (match_operand:SF 0 "general_operand" "")
        !          2452:        (neg:SF (match_operand:SF 1 "general_operand" "")))]
        !          2453:   "TARGET_68881 || TARGET_FPA"
        !          2454:   "")
        !          2455: 
        !          2456: (define_insn ""
        !          2457:   [(set (match_operand:SF 0 "general_operand" "=x,y")
        !          2458:        (neg:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
        !          2459:   "TARGET_FPA"
        !          2460:   "fpneg%.s %w1,%0")
        !          2461: 
        !          2462: (define_insn ""
        !          2463:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          2464:        (neg:SF (match_operand:SF 1 "general_operand" "fdmF")))]
        !          2465:   "TARGET_68881"
        !          2466:   "*
        !          2467: {
        !          2468:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
        !          2469:     return \"fneg%.x %1,%0\";
        !          2470:   return \"fneg%.s %f1,%0\";
        !          2471: }")
        !          2472: 
        !          2473: (define_expand "negdf2"
        !          2474:   [(set (match_operand:DF 0 "general_operand" "")
        !          2475:        (neg:DF (match_operand:DF 1 "general_operand" "")))]
        !          2476:   "TARGET_68881 || TARGET_FPA"
        !          2477:   "")
        !          2478: 
        !          2479: (define_insn ""
        !          2480:   [(set (match_operand:DF 0 "general_operand" "=x,y")
        !          2481:        (neg:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
        !          2482:   "TARGET_FPA"
        !          2483:   "fpneg%.d %y1, %0")
        !          2484: 
        !          2485: (define_insn ""
        !          2486:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          2487:        (neg:DF (match_operand:DF 1 "general_operand" "fmF")))]
        !          2488:   "TARGET_68881"
        !          2489:   "*
        !          2490: {
        !          2491:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
        !          2492:     return \"fneg%.x %1,%0\";
        !          2493:   return \"fneg%.d %f1,%0\";
        !          2494: }")
        !          2495: 
        !          2496: ;; Absolute value instructions
        !          2497: 
        !          2498: (define_expand "abssf2"
        !          2499:   [(set (match_operand:SF 0 "general_operand" "")
        !          2500:        (abs:SF (match_operand:SF 1 "general_operand" "")))]
        !          2501:   "TARGET_68881 || TARGET_FPA"
        !          2502:   "")
        !          2503: 
        !          2504: (define_insn ""
        !          2505:   [(set (match_operand:SF 0 "general_operand" "=x,y")
        !          2506:        (abs:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
        !          2507:   "TARGET_FPA"
        !          2508:   "fpabs%.s %y1,%0")
        !          2509: 
        !          2510: (define_insn ""
        !          2511:   [(set (match_operand:SF 0 "general_operand" "=f")
        !          2512:        (abs:SF (match_operand:SF 1 "general_operand" "fdmF")))]
        !          2513:   "TARGET_68881"
        !          2514:   "*
        !          2515: {
        !          2516:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
        !          2517:     return \"fabs%.x %1,%0\";
        !          2518:   return \"fabs%.s %f1,%0\";
        !          2519: }")
        !          2520: 
        !          2521: (define_expand "absdf2"
        !          2522:   [(set (match_operand:DF 0 "general_operand" "")
        !          2523:        (abs:DF (match_operand:DF 1 "general_operand" "")))]
        !          2524:   "TARGET_68881 || TARGET_FPA"
        !          2525:   "")
        !          2526: 
        !          2527: (define_insn ""
        !          2528:   [(set (match_operand:DF 0 "general_operand" "=x,y")
        !          2529:        (abs:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
        !          2530:   "TARGET_FPA"
        !          2531:   "fpabs%.d %y1,%0")
        !          2532: 
        !          2533: (define_insn ""
        !          2534:   [(set (match_operand:DF 0 "general_operand" "=f")
        !          2535:        (abs:DF (match_operand:DF 1 "general_operand" "fmF")))]
        !          2536:   "TARGET_68881"
        !          2537:   "*
        !          2538: {
        !          2539:   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
        !          2540:     return \"fabs%.x %1,%0\";
        !          2541:   return \"fabs%.d %f1,%0\";
        !          2542: }")
        !          2543: 
        !          2544: ;; one complement instructions
        !          2545: 
        !          2546: (define_insn "one_cmplsi2"
        !          2547:   [(set (match_operand:SI 0 "general_operand" "=dm")
        !          2548:        (not:SI (match_operand:SI 1 "general_operand" "0")))]
        !          2549:   ""
        !          2550:   "not%.l %0")
        !          2551: 
        !          2552: (define_insn "one_cmplhi2"
        !          2553:   [(set (match_operand:HI 0 "general_operand" "=dm")
        !          2554:        (not:HI (match_operand:HI 1 "general_operand" "0")))]
        !          2555:   ""
        !          2556:   "not%.w %0")
        !          2557: 
        !          2558: (define_insn "one_cmplqi2"
        !          2559:   [(set (match_operand:QI 0 "general_operand" "=dm")
        !          2560:        (not:QI (match_operand:QI 1 "general_operand" "0")))]
        !          2561:   ""
        !          2562:   "not%.b %0")
        !          2563: 
        !          2564: ;; Optimized special case of shifting.
        !          2565: ;; Must precede the general case.
        !          2566: 
        !          2567: (define_insn ""
        !          2568:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2569:        (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
        !          2570:                     (const_int 24)))]
        !          2571:   "GET_CODE (XEXP (operands[1], 0)) != POST_INC
        !          2572:    && GET_CODE (XEXP (operands[1], 0)) != PRE_DEC"
        !          2573:   "*
        !          2574: {
        !          2575:   if (TARGET_68020)
        !          2576:     return \"move%.b %1,%0\;extb%.l %0\";
        !          2577:   return \"move%.b %1,%0\;ext%.w %0\;ext%.l %0\";
        !          2578: }")
        !          2579: 
        !          2580: (define_insn ""
        !          2581:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2582:        (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
        !          2583:                     (const_int 24)))]
        !          2584:   "GET_CODE (XEXP (operands[1], 0)) != POST_INC
        !          2585:    && GET_CODE (XEXP (operands[1], 0)) != PRE_DEC"
        !          2586:   "*
        !          2587: {
        !          2588:   if (reg_mentioned_p (operands[0], operands[1]))
        !          2589:     return \"move%.b %1,%0\;and%.l %#0xFF,%0\";
        !          2590:   return \"clr%.l %0\;move%.b %1,%0\";
        !          2591: }")
        !          2592: 
        !          2593: (define_insn ""
        !          2594:   [(set (cc0) (compare (match_operand:QI 0 "general_operand" "i")
        !          2595:                       (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
        !          2596:                                    (const_int 24))))]
        !          2597:   "(GET_CODE (operands[0]) == CONST_INT
        !          2598:     && (INTVAL (operands[0]) & ~0xff) == 0)"
        !          2599:   "* cc_status.flags |= CC_REVERSED;
        !          2600: #ifdef HPUX_ASM
        !          2601:   return \"cmp%.b %1,%0\";
        !          2602: #else
        !          2603:   return \"cmp%.b %0,%1\";
        !          2604: #endif
        !          2605: ")
        !          2606: 
        !          2607: (define_insn ""
        !          2608:   [(set (cc0) (compare (lshiftrt:SI (match_operand:SI 0 "memory_operand" "m")
        !          2609:                                    (const_int 24))
        !          2610:                       (match_operand:QI 1 "general_operand" "i")))]
        !          2611:   "(GET_CODE (operands[1]) == CONST_INT
        !          2612:     && (INTVAL (operands[1]) & ~0xff) == 0)"
        !          2613:   "*
        !          2614: #ifdef HPUX_ASM
        !          2615:   return \"cmp%.b %0,%1\";
        !          2616: #else
        !          2617:   return \"cmp%.b %1,%0\";
        !          2618: #endif
        !          2619: ")
        !          2620: 
        !          2621: (define_insn ""
        !          2622:   [(set (cc0) (compare (match_operand:QI 0 "general_operand" "i")
        !          2623:                       (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
        !          2624:                                    (const_int 24))))]
        !          2625:   "(GET_CODE (operands[0]) == CONST_INT
        !          2626:     && ((INTVAL (operands[0]) + 0x80) & ~0xff) == 0)"
        !          2627:   "* cc_status.flags |= CC_REVERSED;
        !          2628: #ifdef HPUX_ASM
        !          2629:   return \"cmp%.b %1,%0\";
        !          2630: #else
        !          2631:   return \"cmp%.b %0,%1\";
        !          2632: #endif
        !          2633: ")
        !          2634: 
        !          2635: (define_insn ""
        !          2636:   [(set (cc0) (compare (ashiftrt:SI (match_operand:SI 0 "memory_operand" "m")
        !          2637:                                    (const_int 24))
        !          2638:                       (match_operand:QI 1 "general_operand" "i")))]
        !          2639:   "(GET_CODE (operands[1]) == CONST_INT
        !          2640:     && ((INTVAL (operands[1]) + 0x80) & ~0xff) == 0)"
        !          2641:   "*
        !          2642: #ifdef HPUX_ASM
        !          2643:   return \"cmp%.b %0,%1\";
        !          2644: #else
        !          2645:   return \"cmp%.b %1,%0\";
        !          2646: #endif
        !          2647: ")
        !          2648: 
        !          2649: ;; arithmetic shift instructions
        !          2650: ;; We don't need the shift memory by 1 bit instruction
        !          2651: 
        !          2652: (define_insn "ashlsi3"
        !          2653:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2654:        (ashift:SI (match_operand:SI 1 "general_operand" "0")
        !          2655:                   (match_operand:SI 2 "general_operand" "dI")))]
        !          2656:   ""
        !          2657:   "asl%.l %2,%0")
        !          2658: 
        !          2659: (define_insn "ashlhi3"
        !          2660:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2661:        (ashift:HI (match_operand:HI 1 "general_operand" "0")
        !          2662:                   (match_operand:HI 2 "general_operand" "dI")))]
        !          2663:   ""
        !          2664:   "asl%.w %2,%0")
        !          2665: 
        !          2666: (define_insn "ashlqi3"
        !          2667:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          2668:        (ashift:QI (match_operand:QI 1 "general_operand" "0")
        !          2669:                   (match_operand:QI 2 "general_operand" "dI")))]
        !          2670:   ""
        !          2671:   "asl%.b %2,%0")
        !          2672: 
        !          2673: (define_insn "ashrsi3"
        !          2674:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2675:        (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
        !          2676:                     (match_operand:SI 2 "general_operand" "dI")))]
        !          2677:   ""
        !          2678:   "asr%.l %2,%0")
        !          2679: 
        !          2680: (define_insn "ashrhi3"
        !          2681:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2682:        (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
        !          2683:                     (match_operand:HI 2 "general_operand" "dI")))]
        !          2684:   ""
        !          2685:   "asr%.w %2,%0")
        !          2686: 
        !          2687: (define_insn "ashrqi3"
        !          2688:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          2689:        (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
        !          2690:                     (match_operand:QI 2 "general_operand" "dI")))]
        !          2691:   ""
        !          2692:   "asr%.b %2,%0")
        !          2693: 
        !          2694: ;; logical shift instructions
        !          2695: 
        !          2696: (define_insn "lshlsi3"
        !          2697:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2698:        (lshift:SI (match_operand:SI 1 "general_operand" "0")
        !          2699:                   (match_operand:SI 2 "general_operand" "dI")))]
        !          2700:   ""
        !          2701:   "lsl%.l %2,%0")
        !          2702: 
        !          2703: (define_insn "lshlhi3"
        !          2704:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2705:        (lshift:HI (match_operand:HI 1 "general_operand" "0")
        !          2706:                   (match_operand:HI 2 "general_operand" "dI")))]
        !          2707:   ""
        !          2708:   "lsl%.w %2,%0")
        !          2709: 
        !          2710: (define_insn "lshlqi3"
        !          2711:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          2712:        (lshift:QI (match_operand:QI 1 "general_operand" "0")
        !          2713:                   (match_operand:QI 2 "general_operand" "dI")))]
        !          2714:   ""
        !          2715:   "lsl%.b %2,%0")
        !          2716: 
        !          2717: (define_insn "lshrsi3"
        !          2718:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2719:        (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
        !          2720:                     (match_operand:SI 2 "general_operand" "dI")))]
        !          2721:   ""
        !          2722:   "lsr%.l %2,%0")
        !          2723: 
        !          2724: (define_insn "lshrhi3"
        !          2725:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2726:        (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
        !          2727:                     (match_operand:HI 2 "general_operand" "dI")))]
        !          2728:   ""
        !          2729:   "lsr%.w %2,%0")
        !          2730: 
        !          2731: (define_insn "lshrqi3"
        !          2732:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          2733:        (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
        !          2734:                     (match_operand:QI 2 "general_operand" "dI")))]
        !          2735:   ""
        !          2736:   "lsr%.b %2,%0")
        !          2737: 
        !          2738: ;; rotate instructions
        !          2739: 
        !          2740: (define_insn "rotlsi3"
        !          2741:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2742:        (rotate:SI (match_operand:SI 1 "general_operand" "0")
        !          2743:                   (match_operand:SI 2 "general_operand" "dI")))]
        !          2744:   ""
        !          2745:   "rol%.l %2,%0")
        !          2746: 
        !          2747: (define_insn "rotlhi3"
        !          2748:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2749:        (rotate:HI (match_operand:HI 1 "general_operand" "0")
        !          2750:                   (match_operand:HI 2 "general_operand" "dI")))]
        !          2751:   ""
        !          2752:   "rol%.w %2,%0")
        !          2753: 
        !          2754: (define_insn "rotlqi3"
        !          2755:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          2756:        (rotate:QI (match_operand:QI 1 "general_operand" "0")
        !          2757:                   (match_operand:QI 2 "general_operand" "dI")))]
        !          2758:   ""
        !          2759:   "rol%.b %2,%0")
        !          2760: 
        !          2761: (define_insn "rotrsi3"
        !          2762:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2763:        (rotatert:SI (match_operand:SI 1 "general_operand" "0")
        !          2764:                     (match_operand:SI 2 "general_operand" "dI")))]
        !          2765:   ""
        !          2766:   "ror%.l %2,%0")
        !          2767: 
        !          2768: (define_insn "rotrhi3"
        !          2769:   [(set (match_operand:HI 0 "general_operand" "=d")
        !          2770:        (rotatert:HI (match_operand:HI 1 "general_operand" "0")
        !          2771:                     (match_operand:HI 2 "general_operand" "dI")))]
        !          2772:   ""
        !          2773:   "ror%.w %2,%0")
        !          2774: 
        !          2775: (define_insn "rotrqi3"
        !          2776:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          2777:        (rotatert:QI (match_operand:QI 1 "general_operand" "0")
        !          2778:                     (match_operand:QI 2 "general_operand" "dI")))]
        !          2779:   ""
        !          2780:   "ror%.b %2,%0")
        !          2781: 
        !          2782: ;; Special cases of bit-field insns which we should
        !          2783: ;; recognize in preference to the general case.
        !          2784: ;; These handle aligned 8-bit and 16-bit fields,
        !          2785: ;; which can usually be done with move instructions.
        !          2786: 
        !          2787: (define_insn ""
        !          2788:   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+do")
        !          2789:                         (match_operand:SI 1 "immediate_operand" "i")
        !          2790:                         (match_operand:SI 2 "immediate_operand" "i"))
        !          2791:        (match_operand:SI 3 "general_operand" "d"))]
        !          2792:   "TARGET_68020 && TARGET_BITFIELD
        !          2793:    && GET_CODE (operands[1]) == CONST_INT
        !          2794:    && (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
        !          2795:    && GET_CODE (operands[2]) == CONST_INT
        !          2796:    && INTVAL (operands[2]) % INTVAL (operands[1]) == 0
        !          2797:    && (GET_CODE (operands[0]) == REG
        !          2798:        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
        !          2799:   "*
        !          2800: {
        !          2801:   if (REG_P (operands[0]))
        !          2802:     {
        !          2803:       if (INTVAL (operands[1]) + INTVAL (operands[2]) != 32)
        !          2804:         return \"bfins %3,%0{%b2:%b1}\";
        !          2805:     }
        !          2806:   else
        !          2807:     operands[0]
        !          2808:       = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
        !          2809: 
        !          2810:   if (GET_CODE (operands[3]) == MEM)
        !          2811:     operands[3] = adj_offsettable_operand (operands[3],
        !          2812:                                           (32 - INTVAL (operands[1])) / 8);
        !          2813:   if (INTVAL (operands[1]) == 8)
        !          2814:     return \"move%.b %3,%0\";
        !          2815:   return \"move%.w %3,%0\";
        !          2816: }")
        !          2817: 
        !          2818: (define_insn ""
        !          2819:   [(set (match_operand:SI 0 "general_operand" "=&d")
        !          2820:        (zero_extract:SI (match_operand:SI 1 "nonimmediate_operand" "do")
        !          2821:                         (match_operand:SI 2 "immediate_operand" "i")
        !          2822:                         (match_operand:SI 3 "immediate_operand" "i")))]
        !          2823:   "TARGET_68020 && TARGET_BITFIELD
        !          2824:    && GET_CODE (operands[2]) == CONST_INT
        !          2825:    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
        !          2826:    && GET_CODE (operands[3]) == CONST_INT
        !          2827:    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
        !          2828:    && (GET_CODE (operands[1]) == REG
        !          2829:        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
        !          2830:   "*
        !          2831: {
        !          2832:   if (REG_P (operands[1]))
        !          2833:     {
        !          2834:       if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
        !          2835:        return \"bfextu %1{%b3:%b2},%0\";
        !          2836:     }
        !          2837:   else
        !          2838:     operands[1]
        !          2839:       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
        !          2840: 
        !          2841:   output_asm_insn (\"clr%.l %0\", operands);
        !          2842:   if (GET_CODE (operands[0]) == MEM)
        !          2843:     operands[0] = adj_offsettable_operand (operands[0],
        !          2844:                                           (32 - INTVAL (operands[1])) / 8);
        !          2845:   if (INTVAL (operands[2]) == 8)
        !          2846:     return \"move%.b %1,%0\";
        !          2847:   return \"move%.w %1,%0\";
        !          2848: }")
        !          2849: 
        !          2850: (define_insn ""
        !          2851:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2852:        (sign_extract:SI (match_operand:SI 1 "nonimmediate_operand" "do")
        !          2853:                         (match_operand:SI 2 "immediate_operand" "i")
        !          2854:                         (match_operand:SI 3 "immediate_operand" "i")))]
        !          2855:   "TARGET_68020 && TARGET_BITFIELD
        !          2856:    && GET_CODE (operands[2]) == CONST_INT
        !          2857:    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
        !          2858:    && GET_CODE (operands[3]) == CONST_INT
        !          2859:    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
        !          2860:    && (GET_CODE (operands[1]) == REG
        !          2861:        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
        !          2862:   "*
        !          2863: {
        !          2864:   if (REG_P (operands[1]))
        !          2865:     {
        !          2866:       if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
        !          2867:        return \"bfexts %1{%b3:%b2},%0\";
        !          2868:     }
        !          2869:   else
        !          2870:     operands[1]
        !          2871:       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
        !          2872: 
        !          2873:   if (INTVAL (operands[2]) == 8)
        !          2874:     return \"move%.b %1,%0\;extb%.l %0\";
        !          2875:   return \"move%.w %1,%0\;ext%.l %0\";
        !          2876: }")
        !          2877: 
        !          2878: ;; Bit field instructions, general cases.
        !          2879: ;; "o,d" constraint causes a nonoffsettable memref to match the "o"
        !          2880: ;; so that its address is reloaded.
        !          2881: 
        !          2882: (define_insn "extv"
        !          2883:   [(set (match_operand:SI 0 "general_operand" "=d,d")
        !          2884:        (sign_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o,d")
        !          2885:                         (match_operand:SI 2 "general_operand" "di,di")
        !          2886:                         (match_operand:SI 3 "general_operand" "di,di")))]
        !          2887:   "TARGET_68020 && TARGET_BITFIELD"
        !          2888:   "bfexts %1{%b3:%b2},%0")
        !          2889: 
        !          2890: (define_insn "extzv"
        !          2891:   [(set (match_operand:SI 0 "general_operand" "=d,d")
        !          2892:        (zero_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o,d")
        !          2893:                         (match_operand:SI 2 "general_operand" "di,di")
        !          2894:                         (match_operand:SI 3 "general_operand" "di,di")))]
        !          2895:   "TARGET_68020 && TARGET_BITFIELD"
        !          2896:   "bfextu %1{%b3:%b2},%0")
        !          2897: 
        !          2898: (define_insn ""
        !          2899:   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
        !          2900:                         (match_operand:SI 1 "general_operand" "di,di")
        !          2901:                         (match_operand:SI 2 "general_operand" "di,di"))
        !          2902:         (xor:SI (zero_extract:SI (match_dup 0) (match_dup 1) (match_dup 2))
        !          2903:                (match_operand 3 "immediate_operand" "i,i")))]
        !          2904:   "TARGET_68020 && TARGET_BITFIELD
        !          2905:    && GET_CODE (operands[3]) == CONST_INT
        !          2906:    && (INTVAL (operands[3]) == -1
        !          2907:        || (GET_CODE (operands[1]) == CONST_INT
        !          2908:            && (~ INTVAL (operands[3]) & ((1 << INTVAL (operands[1]))- 1)) == 0))"
        !          2909:   "*
        !          2910: {
        !          2911:   CC_STATUS_INIT;
        !          2912:   return \"bfchg %0{%b2:%b1}\";
        !          2913: }")
        !          2914: 
        !          2915: (define_insn ""
        !          2916:   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
        !          2917:                         (match_operand:SI 1 "general_operand" "di,di")
        !          2918:                         (match_operand:SI 2 "general_operand" "di,di"))
        !          2919:        (const_int 0))]
        !          2920:   "TARGET_68020 && TARGET_BITFIELD"
        !          2921:   "*
        !          2922: {
        !          2923:   CC_STATUS_INIT;
        !          2924:   return \"bfclr %0{%b2:%b1}\";
        !          2925: }")
        !          2926: 
        !          2927: (define_insn ""
        !          2928:   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
        !          2929:                         (match_operand:SI 1 "general_operand" "di,di")
        !          2930:                         (match_operand:SI 2 "general_operand" "di,di"))
        !          2931:        (const_int -1))]
        !          2932:   "TARGET_68020 && TARGET_BITFIELD"
        !          2933:   "*
        !          2934: {
        !          2935:   CC_STATUS_INIT;
        !          2936:   return \"bfset %0{%b2:%b1}\";
        !          2937: }")
        !          2938: 
        !          2939: (define_insn "insv"
        !          2940:   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
        !          2941:                         (match_operand:SI 1 "general_operand" "di,di")
        !          2942:                         (match_operand:SI 2 "general_operand" "di,di"))
        !          2943:        (match_operand:SI 3 "general_operand" "d,d"))]
        !          2944:   "TARGET_68020 && TARGET_BITFIELD"
        !          2945:   "bfins %3,%0{%b2:%b1}")
        !          2946: 
        !          2947: ;; Now recognize bit field insns that operate on registers
        !          2948: ;; (or at least were intended to do so).
        !          2949: 
        !          2950: (define_insn ""
        !          2951:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2952:        (sign_extract:SI (match_operand:SI 1 "nonimmediate_operand" "d")
        !          2953:                         (match_operand:SI 2 "general_operand" "di")
        !          2954:                         (match_operand:SI 3 "general_operand" "di")))]
        !          2955:   "TARGET_68020 && TARGET_BITFIELD"
        !          2956:   "bfexts %1{%b3:%b2},%0")
        !          2957: 
        !          2958: (define_insn ""
        !          2959:   [(set (match_operand:SI 0 "general_operand" "=d")
        !          2960:        (zero_extract:SI (match_operand:SI 1 "nonimmediate_operand" "d")
        !          2961:                         (match_operand:SI 2 "general_operand" "di")
        !          2962:                         (match_operand:SI 3 "general_operand" "di")))]
        !          2963:   "TARGET_68020 && TARGET_BITFIELD"
        !          2964:   "bfextu %1{%b3:%b2},%0")
        !          2965: 
        !          2966: (define_insn ""
        !          2967:   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
        !          2968:                         (match_operand:SI 1 "general_operand" "di")
        !          2969:                         (match_operand:SI 2 "general_operand" "di"))
        !          2970:        (const_int 0))]
        !          2971:   "TARGET_68020 && TARGET_BITFIELD"
        !          2972:   "*
        !          2973: {
        !          2974:   CC_STATUS_INIT;
        !          2975:   return \"bfclr %0{%b2:%b1}\";
        !          2976: }")
        !          2977: 
        !          2978: (define_insn ""
        !          2979:   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
        !          2980:                         (match_operand:SI 1 "general_operand" "di")
        !          2981:                         (match_operand:SI 2 "general_operand" "di"))
        !          2982:        (const_int -1))]
        !          2983:   "TARGET_68020 && TARGET_BITFIELD"
        !          2984:   "*
        !          2985: {
        !          2986:   CC_STATUS_INIT;
        !          2987:   return \"bfset %0{%b2:%b1}\";
        !          2988: }")
        !          2989: 
        !          2990: (define_insn ""
        !          2991:   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
        !          2992:                         (match_operand:SI 1 "general_operand" "di")
        !          2993:                         (match_operand:SI 2 "general_operand" "di"))
        !          2994:        (match_operand:SI 3 "general_operand" "d"))]
        !          2995:   "TARGET_68020 && TARGET_BITFIELD"
        !          2996:   "*
        !          2997: {
        !          2998: #if 0
        !          2999:   /* These special cases are now recognized by a specific pattern.  */
        !          3000:   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
        !          3001:       && INTVAL (operands[1]) == 16 && INTVAL (operands[2]) == 16)
        !          3002:     return \"move%.w %3,%0\";
        !          3003:   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
        !          3004:       && INTVAL (operands[1]) == 24 && INTVAL (operands[2]) == 8)
        !          3005:     return \"move%.b %3,%0\";
        !          3006: #endif
        !          3007:   return \"bfins %3,%0{%b2:%b1}\";
        !          3008: }")
        !          3009: 
        !          3010: ;; Special patterns for optimizing bit-field instructions.
        !          3011: 
        !          3012: (define_insn ""
        !          3013:   [(set (cc0)
        !          3014:        (zero_extract:SI (match_operand:QI 0 "memory_operand" "o")
        !          3015:                         (match_operand:SI 1 "general_operand" "di")
        !          3016:                         (match_operand:SI 2 "general_operand" "di")))]
        !          3017:   "TARGET_68020 && TARGET_BITFIELD
        !          3018:    && GET_CODE (operands[1]) == CONST_INT"
        !          3019:   "*
        !          3020: {
        !          3021:   if (operands[1] == const1_rtx
        !          3022:       && GET_CODE (operands[2]) == CONST_INT)
        !          3023:     {    
        !          3024:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
        !          3025:       return output_btst (operands,
        !          3026:                          gen_rtx (CONST_INT, VOIDmode,
        !          3027:                                   width - INTVAL (operands[2])),
        !          3028:                          operands[0],
        !          3029:                          insn, 1000);
        !          3030:       /* Pass 1000 as SIGNPOS argument so that btst will
        !          3031:          not think we are testing the sign bit for an `and'
        !          3032:         and assume that nonzero implies a negative result.  */
        !          3033:     }
        !          3034:   if (INTVAL (operands[1]) != 32)
        !          3035:     cc_status.flags = CC_NOT_NEGATIVE;
        !          3036:   return \"bftst %0{%b2:%b1}\";
        !          3037: }")
        !          3038: 
        !          3039: (define_insn ""
        !          3040:   [(set (cc0)
        !          3041:        (subreg:QI
        !          3042:         (zero_extract:SI (match_operand:QI 0 "memory_operand" "o")
        !          3043:                          (match_operand:SI 1 "general_operand" "di")
        !          3044:                          (match_operand:SI 2 "general_operand" "di"))
        !          3045:         0))]
        !          3046:   "TARGET_68020 && TARGET_BITFIELD
        !          3047:    && GET_CODE (operands[1]) == CONST_INT"
        !          3048:   "*
        !          3049: {
        !          3050:   if (operands[1] == const1_rtx
        !          3051:       && GET_CODE (operands[2]) == CONST_INT)
        !          3052:     {    
        !          3053:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
        !          3054:       return output_btst (operands,
        !          3055:                          gen_rtx (CONST_INT, VOIDmode,
        !          3056:                                   width - INTVAL (operands[2])),
        !          3057:                          operands[0],
        !          3058:                          insn, 1000);
        !          3059:       /* Pass 1000 as SIGNPOS argument so that btst will
        !          3060:          not think we are testing the sign bit for an `and'
        !          3061:         and assume that nonzero implies a negative result.  */
        !          3062:     }
        !          3063:   if (INTVAL (operands[1]) != 32)
        !          3064:     cc_status.flags = CC_NOT_NEGATIVE;
        !          3065:   return \"bftst %0{%b2:%b1}\";
        !          3066: }")
        !          3067: 
        !          3068: (define_insn ""
        !          3069:   [(set (cc0)
        !          3070:        (subreg:HI
        !          3071:         (zero_extract:SI (match_operand:QI 0 "memory_operand" "o")
        !          3072:                          (match_operand:SI 1 "general_operand" "di")
        !          3073:                          (match_operand:SI 2 "general_operand" "di"))
        !          3074:         0))]
        !          3075:   "TARGET_68020 && TARGET_BITFIELD
        !          3076:    && GET_CODE (operands[1]) == CONST_INT"
        !          3077:   "*
        !          3078: {
        !          3079:   if (operands[1] == const1_rtx
        !          3080:       && GET_CODE (operands[2]) == CONST_INT)
        !          3081:     {    
        !          3082:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
        !          3083:       return output_btst (operands,
        !          3084:                          gen_rtx (CONST_INT, VOIDmode,
        !          3085:                                   width - INTVAL (operands[2])),
        !          3086:                          operands[0],
        !          3087:                          insn, 1000);
        !          3088:       /* Pass 1000 as SIGNPOS argument so that btst will
        !          3089:          not think we are testing the sign bit for an `and'
        !          3090:         and assume that nonzero implies a negative result.  */
        !          3091:     }
        !          3092:   if (INTVAL (operands[1]) != 32)
        !          3093:     cc_status.flags = CC_NOT_NEGATIVE;
        !          3094:   return \"bftst %0{%b2:%b1}\";
        !          3095: }")
        !          3096:   
        !          3097: ;;; now handle the register cases
        !          3098: (define_insn ""
        !          3099:   [(set (cc0)
        !          3100:        (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "d")
        !          3101:                         (match_operand:SI 1 "general_operand" "di")
        !          3102:                         (match_operand:SI 2 "general_operand" "di")))]
        !          3103:   "TARGET_68020 && TARGET_BITFIELD
        !          3104:    && GET_CODE (operands[1]) == CONST_INT"
        !          3105:   "*
        !          3106: {
        !          3107:   if (operands[1] == const1_rtx
        !          3108:       && GET_CODE (operands[2]) == CONST_INT)
        !          3109:     {    
        !          3110:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
        !          3111:       return output_btst (operands,
        !          3112:                          gen_rtx (CONST_INT, VOIDmode,
        !          3113:                                   width - INTVAL (operands[2])),
        !          3114:                          operands[0],
        !          3115:                          insn, 1000);
        !          3116:       /* Pass 1000 as SIGNPOS argument so that btst will
        !          3117:          not think we are testing the sign bit for an `and'
        !          3118:         and assume that nonzero implies a negative result.  */
        !          3119:     }
        !          3120:   if (INTVAL (operands[1]) != 32)
        !          3121:     cc_status.flags = CC_NOT_NEGATIVE;
        !          3122:   return \"bftst %0{%b2:%b1}\";
        !          3123: }")
        !          3124: 
        !          3125: (define_insn ""
        !          3126:   [(set (cc0)
        !          3127:        (subreg:QI
        !          3128:         (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "d")
        !          3129:                          (match_operand:SI 1 "general_operand" "di")
        !          3130:                          (match_operand:SI 2 "general_operand" "di"))
        !          3131:         0))]
        !          3132:   "TARGET_68020 && TARGET_BITFIELD
        !          3133:    && GET_CODE (operands[1]) == CONST_INT"
        !          3134:   "*
        !          3135: {
        !          3136:   if (operands[1] == const1_rtx
        !          3137:       && GET_CODE (operands[2]) == CONST_INT)
        !          3138:     {    
        !          3139:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
        !          3140:       return output_btst (operands,
        !          3141:                          gen_rtx (CONST_INT, VOIDmode,
        !          3142:                                   width - INTVAL (operands[2])),
        !          3143:                          operands[0],
        !          3144:                          insn, 1000);
        !          3145:       /* Pass 1000 as SIGNPOS argument so that btst will
        !          3146:          not think we are testing the sign bit for an `and'
        !          3147:         and assume that nonzero implies a negative result.  */
        !          3148:     }
        !          3149:   if (INTVAL (operands[1]) != 32)
        !          3150:     cc_status.flags = CC_NOT_NEGATIVE;
        !          3151:   return \"bftst %0{%b2:%b1}\";
        !          3152: }")
        !          3153: 
        !          3154: (define_insn ""
        !          3155:   [(set (cc0)
        !          3156:        (subreg:HI
        !          3157:         (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "d")
        !          3158:                          (match_operand:SI 1 "general_operand" "di")
        !          3159:                          (match_operand:SI 2 "general_operand" "di"))
        !          3160:         0))]
        !          3161:   "TARGET_68020 && TARGET_BITFIELD
        !          3162:    && GET_CODE (operands[1]) == CONST_INT"
        !          3163:   "*
        !          3164: {
        !          3165:   if (operands[1] == const1_rtx
        !          3166:       && GET_CODE (operands[2]) == CONST_INT)
        !          3167:     {    
        !          3168:       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
        !          3169:       return output_btst (operands,
        !          3170:                          gen_rtx (CONST_INT, VOIDmode,
        !          3171:                                   width - INTVAL (operands[2])),
        !          3172:                          operands[0],
        !          3173:                          insn, 1000);
        !          3174:       /* Pass 1000 as SIGNPOS argument so that btst will
        !          3175:          not think we are testing the sign bit for an `and'
        !          3176:         and assume that nonzero implies a negative result.  */
        !          3177:     }
        !          3178:   if (INTVAL (operands[1]) != 32)
        !          3179:     cc_status.flags = CC_NOT_NEGATIVE;
        !          3180:   return \"bftst %0{%b2:%b1}\";
        !          3181: }")
        !          3182: 
        !          3183: (define_insn "seq"
        !          3184:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3185:        (eq (cc0) (const_int 0)))]
        !          3186:   ""
        !          3187:   "*
        !          3188:   cc_status = cc_prev_status;
        !          3189:   OUTPUT_JUMP (\"seq %0\", \"fseq %0\", \"seq %0\");
        !          3190: ")
        !          3191: 
        !          3192: (define_insn "sne"
        !          3193:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3194:        (ne (cc0) (const_int 0)))]
        !          3195:   ""
        !          3196:   "*
        !          3197:   cc_status = cc_prev_status;
        !          3198:   OUTPUT_JUMP (\"sne %0\", \"fsne %0\", \"sne %0\");
        !          3199: ")
        !          3200: 
        !          3201: (define_insn "sgt"
        !          3202:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3203:        (gt (cc0) (const_int 0)))]
        !          3204:   ""
        !          3205:   "*
        !          3206:   cc_status = cc_prev_status;
        !          3207:   OUTPUT_JUMP (\"sgt %0\", \"fsgt %0\", 0);
        !          3208: ")
        !          3209: 
        !          3210: (define_insn "sgtu"
        !          3211:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3212:        (gtu (cc0) (const_int 0)))]
        !          3213:   ""
        !          3214:   "* cc_status = cc_prev_status;
        !          3215:      return \"shi %0\"; ")
        !          3216: 
        !          3217: (define_insn "slt"
        !          3218:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3219:        (lt (cc0) (const_int 0)))]
        !          3220:   ""
        !          3221:   "* cc_status = cc_prev_status;
        !          3222:      OUTPUT_JUMP (\"slt %0\", \"fslt %0\", \"smi %0\"); ")
        !          3223: 
        !          3224: (define_insn "sltu"
        !          3225:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3226:        (ltu (cc0) (const_int 0)))]
        !          3227:   ""
        !          3228:   "* cc_status = cc_prev_status;
        !          3229:      return \"scs %0\"; ")
        !          3230: 
        !          3231: (define_insn "sge"
        !          3232:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3233:        (ge (cc0) (const_int 0)))]
        !          3234:   ""
        !          3235:   "* cc_status = cc_prev_status;
        !          3236:      OUTPUT_JUMP (\"sge %0\", \"fsge %0\", \"spl %0\"); ")
        !          3237: 
        !          3238: (define_insn "sgeu"
        !          3239:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3240:        (geu (cc0) (const_int 0)))]
        !          3241:   ""
        !          3242:   "* cc_status = cc_prev_status;
        !          3243:      return \"scc %0\"; ")
        !          3244: 
        !          3245: (define_insn "sle"
        !          3246:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3247:        (le (cc0) (const_int 0)))]
        !          3248:   ""
        !          3249:   "*
        !          3250:   cc_status = cc_prev_status;
        !          3251:   OUTPUT_JUMP (\"sle %0\", \"fsle %0\", 0);
        !          3252: ")
        !          3253: 
        !          3254: (define_insn "sleu"
        !          3255:   [(set (match_operand:QI 0 "general_operand" "=d")
        !          3256:        (leu (cc0) (const_int 0)))]
        !          3257:   ""
        !          3258:   "* cc_status = cc_prev_status;
        !          3259:      return \"sls %0\"; ")
        !          3260: 
        !          3261: ;; Basic conditional jump instructions.
        !          3262: 
        !          3263: (define_insn "beq"
        !          3264:   [(set (pc)
        !          3265:        (if_then_else (eq (cc0)
        !          3266:                          (const_int 0))
        !          3267:                      (label_ref (match_operand 0 "" ""))
        !          3268:                      (pc)))]
        !          3269:   ""
        !          3270:   "*
        !          3271: {
        !          3272: #ifdef MOTOROLA
        !          3273:   OUTPUT_JUMP (\"jbeq %l0\", \"fbeq %l0\", \"jbeq %l0\");
        !          3274: #else
        !          3275:   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
        !          3276: #endif
        !          3277: }")
        !          3278: 
        !          3279: (define_insn "bne"
        !          3280:   [(set (pc)
        !          3281:        (if_then_else (ne (cc0)
        !          3282:                          (const_int 0))
        !          3283:                      (label_ref (match_operand 0 "" ""))
        !          3284:                      (pc)))]
        !          3285:   ""
        !          3286:   "*
        !          3287: {
        !          3288: #ifdef MOTOROLA
        !          3289:   OUTPUT_JUMP (\"jbne %l0\", \"fbne %l0\", \"jbne %l0\");
        !          3290: #else
        !          3291:   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
        !          3292: #endif
        !          3293: }")
        !          3294: 
        !          3295: (define_insn "bgt"
        !          3296:   [(set (pc)
        !          3297:        (if_then_else (gt (cc0)
        !          3298:                          (const_int 0))
        !          3299:                      (label_ref (match_operand 0 "" ""))
        !          3300:                      (pc)))]
        !          3301:   ""
        !          3302:   "*
        !          3303: #ifdef MOTOROLA
        !          3304:   OUTPUT_JUMP (\"jbgt %l0\", \"fbgt %l0\", 0);
        !          3305: #else
        !          3306:   OUTPUT_JUMP (\"jgt %l0\", \"fjgt %l0\", 0);
        !          3307: #endif
        !          3308: ")
        !          3309: 
        !          3310: (define_insn "bgtu"
        !          3311:   [(set (pc)
        !          3312:        (if_then_else (gtu (cc0)
        !          3313:                           (const_int 0))
        !          3314:                      (label_ref (match_operand 0 "" ""))
        !          3315:                      (pc)))]
        !          3316:   ""
        !          3317:   "*
        !          3318: #ifdef MOTOROLA
        !          3319:   return \"jbhi %l0\";
        !          3320: #else
        !          3321:   return \"jhi %l0\";
        !          3322: #endif
        !          3323: ")
        !          3324: 
        !          3325: (define_insn "blt"
        !          3326:   [(set (pc)
        !          3327:        (if_then_else (lt (cc0)
        !          3328:                          (const_int 0))
        !          3329:                      (label_ref (match_operand 0 "" ""))
        !          3330:                      (pc)))]
        !          3331:   ""
        !          3332:   "*
        !          3333: #ifdef MOTOROLA
        !          3334:   OUTPUT_JUMP (\"jblt %l0\", \"fblt %l0\", \"jbmi %l0\");
        !          3335: #else
        !          3336:   OUTPUT_JUMP (\"jlt %l0\", \"fjlt %l0\", \"jmi %l0\");
        !          3337: #endif
        !          3338: ")
        !          3339: 
        !          3340: (define_insn "bltu"
        !          3341:   [(set (pc)
        !          3342:        (if_then_else (ltu (cc0)
        !          3343:                           (const_int 0))
        !          3344:                      (label_ref (match_operand 0 "" ""))
        !          3345:                      (pc)))]
        !          3346:   ""
        !          3347:   "*
        !          3348: #ifdef MOTOROLA
        !          3349:   return \"jbcs %l0\";
        !          3350: #else
        !          3351:   return \"jcs %l0\";
        !          3352: #endif
        !          3353: ")
        !          3354: 
        !          3355: (define_insn "bge"
        !          3356:   [(set (pc)
        !          3357:        (if_then_else (ge (cc0)
        !          3358:                          (const_int 0))
        !          3359:                      (label_ref (match_operand 0 "" ""))
        !          3360:                      (pc)))]
        !          3361:   ""
        !          3362:   "*
        !          3363: #ifdef MOTOROLA
        !          3364:   OUTPUT_JUMP (\"jbge %l0\", \"fbge %l0\", \"jbpl %l0\");
        !          3365: #else
        !          3366:   OUTPUT_JUMP (\"jge %l0\", \"fjge %l0\", \"jpl %l0\");
        !          3367: #endif
        !          3368: ")
        !          3369: 
        !          3370: (define_insn "bgeu"
        !          3371:   [(set (pc)
        !          3372:        (if_then_else (geu (cc0)
        !          3373:                           (const_int 0))
        !          3374:                      (label_ref (match_operand 0 "" ""))
        !          3375:                      (pc)))]
        !          3376:   ""
        !          3377:   "*
        !          3378: #ifdef MOTOROLA
        !          3379:   return \"jbcc %l0\";
        !          3380: #else
        !          3381:   return \"jcc %l0\";
        !          3382: #endif
        !          3383: ")
        !          3384: 
        !          3385: (define_insn "ble"
        !          3386:   [(set (pc)
        !          3387:        (if_then_else (le (cc0)
        !          3388:                          (const_int 0))
        !          3389:                      (label_ref (match_operand 0 "" ""))
        !          3390:                      (pc)))]
        !          3391:   ""
        !          3392:   "*
        !          3393: #ifdef MOTOROLA
        !          3394:   OUTPUT_JUMP (\"jble %l0\", \"fble %l0\", 0);
        !          3395: #else
        !          3396:   OUTPUT_JUMP (\"jle %l0\", \"fjle %l0\", 0);
        !          3397: #endif
        !          3398: ")
        !          3399: 
        !          3400: (define_insn "bleu"
        !          3401:   [(set (pc)
        !          3402:        (if_then_else (leu (cc0)
        !          3403:                           (const_int 0))
        !          3404:                      (label_ref (match_operand 0 "" ""))
        !          3405:                      (pc)))]
        !          3406:   ""
        !          3407:   "*
        !          3408: #ifdef MOTOROLA
        !          3409:   return \"jbls %l0\";
        !          3410: #else
        !          3411:   return \"jls %l0\";
        !          3412: #endif
        !          3413: ")
        !          3414: 
        !          3415: ;; Negated conditional jump instructions.
        !          3416: 
        !          3417: (define_insn ""
        !          3418:   [(set (pc)
        !          3419:        (if_then_else (eq (cc0)
        !          3420:                          (const_int 0))
        !          3421:                      (pc)
        !          3422:                      (label_ref (match_operand 0 "" ""))))]
        !          3423:   ""
        !          3424:   "*
        !          3425: {
        !          3426: #ifdef MOTOROLA
        !          3427:   OUTPUT_JUMP (\"jbne %l0\", \"fbne %l0\", \"jbne %l0\");
        !          3428: #else
        !          3429:   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
        !          3430: #endif
        !          3431: }")
        !          3432: 
        !          3433: (define_insn ""
        !          3434:   [(set (pc)
        !          3435:        (if_then_else (ne (cc0)
        !          3436:                          (const_int 0))
        !          3437:                      (pc)
        !          3438:                      (label_ref (match_operand 0 "" ""))))]
        !          3439:   ""
        !          3440:   "*
        !          3441: {
        !          3442: #ifdef MOTOROLA
        !          3443:   OUTPUT_JUMP (\"jbeq %l0\", \"fbeq %l0\", \"jbeq %l0\");
        !          3444: #else
        !          3445:   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
        !          3446: #endif
        !          3447: }")
        !          3448: 
        !          3449: (define_insn ""
        !          3450:   [(set (pc)
        !          3451:        (if_then_else (gt (cc0)
        !          3452:                          (const_int 0))
        !          3453:                      (pc)
        !          3454:                      (label_ref (match_operand 0 "" ""))))]
        !          3455:   ""
        !          3456:   "*
        !          3457: #ifdef MOTOROLA
        !          3458:   OUTPUT_JUMP (\"jble %l0\", \"fbngt %l0\", 0);
        !          3459: #else
        !          3460:   OUTPUT_JUMP (\"jle %l0\", \"fjngt %l0\", 0);
        !          3461: #endif
        !          3462: ")
        !          3463: 
        !          3464: (define_insn ""
        !          3465:   [(set (pc)
        !          3466:        (if_then_else (gtu (cc0)
        !          3467:                           (const_int 0))
        !          3468:                      (pc)
        !          3469:                      (label_ref (match_operand 0 "" ""))))]
        !          3470:   ""
        !          3471:   "*
        !          3472: #ifdef MOTOROLA
        !          3473:   return \"jbls %l0\";
        !          3474: #else
        !          3475:   return \"jls %l0\";
        !          3476: #endif
        !          3477: ")
        !          3478: 
        !          3479: (define_insn ""
        !          3480:   [(set (pc)
        !          3481:        (if_then_else (lt (cc0)
        !          3482:                          (const_int 0))
        !          3483:                      (pc)
        !          3484:                      (label_ref (match_operand 0 "" ""))))]
        !          3485:   ""
        !          3486:   "*
        !          3487: #ifdef MOTOROLA
        !          3488:   OUTPUT_JUMP (\"jbge %l0\", \"fbnlt %l0\", \"jbpl %l0\");
        !          3489: #else
        !          3490:   OUTPUT_JUMP (\"jge %l0\", \"fjnlt %l0\", \"jpl %l0\");
        !          3491: #endif
        !          3492: ")
        !          3493: 
        !          3494: (define_insn ""
        !          3495:   [(set (pc)
        !          3496:        (if_then_else (ltu (cc0)
        !          3497:                           (const_int 0))
        !          3498:                      (pc)
        !          3499:                      (label_ref (match_operand 0 "" ""))))]
        !          3500:   ""
        !          3501:   "*
        !          3502: #ifdef MOTOROLA
        !          3503:   return \"jbcc %l0\";
        !          3504: #else
        !          3505:   return \"jcc %l0\";
        !          3506: #endif
        !          3507: ")
        !          3508: 
        !          3509: (define_insn ""
        !          3510:   [(set (pc)
        !          3511:        (if_then_else (ge (cc0)
        !          3512:                          (const_int 0))
        !          3513:                      (pc)
        !          3514:                      (label_ref (match_operand 0 "" ""))))]
        !          3515:   ""
        !          3516:   "*
        !          3517: #ifdef MOTOROLA
        !          3518:   OUTPUT_JUMP (\"jblt %l0\", \"fbnge %l0\", \"jbmi %l0\");
        !          3519: #else
        !          3520:   OUTPUT_JUMP (\"jlt %l0\", \"fjnge %l0\", \"jmi %l0\");
        !          3521: #endif
        !          3522: ")
        !          3523: 
        !          3524: (define_insn ""
        !          3525:   [(set (pc)
        !          3526:        (if_then_else (geu (cc0)
        !          3527:                           (const_int 0))
        !          3528:                      (pc)
        !          3529:                      (label_ref (match_operand 0 "" ""))))]
        !          3530:   ""
        !          3531:   "*
        !          3532: #ifdef MOTOROLA
        !          3533:   return \"jbcs %l0\";
        !          3534: #else
        !          3535:   return \"jcs %l0\";
        !          3536: #endif
        !          3537: ")
        !          3538: 
        !          3539: (define_insn ""
        !          3540:   [(set (pc)
        !          3541:        (if_then_else (le (cc0)
        !          3542:                          (const_int 0))
        !          3543:                      (pc)
        !          3544:                      (label_ref (match_operand 0 "" ""))))]
        !          3545:   ""
        !          3546:   "*
        !          3547: #ifdef MOTOROLA
        !          3548:   OUTPUT_JUMP (\"jbgt %l0\", \"fbnle %l0\", 0);
        !          3549: #else
        !          3550:   OUTPUT_JUMP (\"jgt %l0\", \"fjnle %l0\", 0);
        !          3551: #endif
        !          3552: ")
        !          3553: 
        !          3554: (define_insn ""
        !          3555:   [(set (pc)
        !          3556:        (if_then_else (leu (cc0)
        !          3557:                           (const_int 0))
        !          3558:                      (pc)
        !          3559:                      (label_ref (match_operand 0 "" ""))))]
        !          3560:   ""
        !          3561:   "*
        !          3562: #ifdef MOTOROLA
        !          3563:   return \"jbhi %l0\";
        !          3564: #else
        !          3565:   return \"jhi %l0\";
        !          3566: #endif
        !          3567: ")
        !          3568: 
        !          3569: ;; Subroutines of "casesi".
        !          3570: 
        !          3571: (define_expand "casesi_1"
        !          3572:   [(set (match_operand:SI 3 "general_operand" "")
        !          3573:        (plus:SI (match_operand:SI 0 "general_operand" "")
        !          3574:                 ;; Note operand 1 has been negated!
        !          3575:                 (match_operand:SI 1 "immediate_operand" "")))
        !          3576:    (set (cc0) (compare (match_operand:SI 2 "general_operand" "")
        !          3577:                       (match_dup 3)))
        !          3578:    (set (pc) (if_then_else (ltu (cc0) (const_int 0))
        !          3579:                           (label_ref (match_operand 4 "" "")) (pc)))]
        !          3580:   ""
        !          3581:   "")
        !          3582: 
        !          3583: (define_expand "casesi_2"
        !          3584:   [(set (match_operand:SI 0 "" "") (mem:HI (match_operand:SI 1 "" "")))
        !          3585:    ;; The USE here is so that at least one jump-insn will refer to the label,
        !          3586:    ;; to keep it alive in jump_optimize.
        !          3587:    (parallel [(set (pc)
        !          3588:                   (plus:SI (pc) (match_dup 0)))
        !          3589:              (use (label_ref (match_operand 2 "" "")))])]
        !          3590:   ""
        !          3591:   "")
        !          3592: 
        !          3593: ;; Operand 0 is index (in bytes); operand 1 is minimum, operand 2 themaximum;
        !          3594: ;; operand 3 is CODE_LABEL for the table;
        !          3595: ;; operand 4 is the CODE_LABEL to go to if index out of range.
        !          3596: (define_expand "casesi"
        !          3597:   ;; We don't use these for generating the RTL, but we must describe
        !          3598:   ;; the operands here.
        !          3599:   [(match_operand:SI 0 "general_operand" "")
        !          3600:    (match_operand:SI 1 "immediate_operand" "")
        !          3601:    (match_operand:SI 2 "general_operand" "")
        !          3602:    (match_operand 3 "" "")
        !          3603:    (match_operand 4 "" "")]
        !          3604:   ""
        !          3605:   "
        !          3606: {
        !          3607:   rtx table_elt_addr;
        !          3608:   rtx index_diff;
        !          3609: 
        !          3610:   operands[1] = negate_rtx (SImode, operands[1]);
        !          3611:   index_diff = gen_reg_rtx (SImode);
        !          3612:   /* Emit the first few insns.  */
        !          3613:   emit_insn (gen_casesi_1 (operands[0], operands[1], operands[2],
        !          3614:                           index_diff, operands[4]));
        !          3615:   /* Construct a memory address.  This may emit some insns.  */
        !          3616:   table_elt_addr
        !          3617:     = memory_address_noforce
        !          3618:         (HImode,
        !          3619:         gen_rtx (PLUS, Pmode,
        !          3620:                  gen_rtx (MULT, Pmode, index_diff,
        !          3621:                           gen_rtx (CONST_INT, VOIDmode, 2)),
        !          3622:                  gen_rtx (LABEL_REF, VOIDmode, operands[3])));
        !          3623:   /* Emit the last few insns.  */
        !          3624:   emit_insn (gen_casesi_2 (gen_reg_rtx (HImode), table_elt_addr, operands[3]));
        !          3625:   DONE;
        !          3626: }")
        !          3627: 
        !          3628: ;; Recognize one of the insns resulting from casesi_2.
        !          3629: (define_insn ""
        !          3630:   [(set (pc)
        !          3631:        (plus:SI (pc) (match_operand:HI 0 "general_operand" "r")))
        !          3632:    (use (label_ref (match_operand 1 "" "")))]
        !          3633:   ""
        !          3634:   "*
        !          3635: #ifdef SGS
        !          3636: #ifdef ASM_OUTPUT_CASE_LABEL
        !          3637:   return \"jmp 6(%%pc,%0.w)\";
        !          3638: #else
        !          3639:   return \"jmp 2(%%pc,%0.w)\";
        !          3640: #endif
        !          3641: #else /* not SGS */
        !          3642: #ifdef MOTOROLA
        !          3643:   return \"jmp (2,pc,%0.w)\";
        !          3644: #else
        !          3645:   return \"jmp pc@(2,%0:w)\";
        !          3646: #endif
        !          3647: #endif
        !          3648: ")
        !          3649: 
        !          3650: ;; Unconditional and other jump instructions
        !          3651: (define_insn "jump"
        !          3652:   [(set (pc)
        !          3653:        (label_ref (match_operand 0 "" "")))]
        !          3654:   ""
        !          3655:   "*
        !          3656: #ifdef MOTOROLA
        !          3657:   return \"jbra %l0\";
        !          3658: #else
        !          3659:   return \"jra %l0\";
        !          3660: #endif
        !          3661: ")
        !          3662: 
        !          3663: (define_insn ""
        !          3664:   [(set (pc)
        !          3665:        (if_then_else
        !          3666:         (ne (compare (plus:HI (match_operand:HI 0 "general_operand" "g")
        !          3667:                               (const_int -1))
        !          3668:                      (const_int -1))
        !          3669:             (const_int 0))
        !          3670:         (label_ref (match_operand 1 "" ""))
        !          3671:         (pc)))
        !          3672:    (set (match_dup 0)
        !          3673:        (plus:HI (match_dup 0)
        !          3674:                 (const_int -1)))]
        !          3675:   ""
        !          3676:   "*
        !          3677: {
        !          3678:   CC_STATUS_INIT;
        !          3679:   if (DATA_REG_P (operands[0]))
        !          3680:     return \"dbra %0,%l1\";
        !          3681:   if (GET_CODE (operands[0]) == MEM)
        !          3682:     {
        !          3683: #ifdef MOTOROLA
        !          3684: #ifdef NO_ADDSUB_Q
        !          3685:       return \"sub%.w %#1,%0\;jbcc %l1\";
        !          3686: #else
        !          3687:       return \"subq%.w %#1,%0\;jbcc %l1\";
        !          3688: #endif
        !          3689: #else /* not MOTOROLA */
        !          3690:       return \"subqw %#1,%0\;jcc %l1\";
        !          3691: #endif
        !          3692:     }
        !          3693: #ifdef MOTOROLA
        !          3694: #ifdef HPUX_ASM
        !          3695: #ifndef NO_ADDSUB_Q
        !          3696:   return \"sub%.w %#1,%0\;cmp%.w %0,%#-1\;jbne %l1\";
        !          3697: #else
        !          3698:   return \"subq%.w %#1,%0\;cmp%.w %0,%#-1\;jbne %l1\";
        !          3699: #endif
        !          3700: #else /* not HPUX_ASM */
        !          3701:   return \"subq%.w %#1,%0\;cmp%.w %#-1,%0\;jbne %l1\";
        !          3702: #endif
        !          3703: #else /* not MOTOROLA */
        !          3704:   return \"subqw %#1,%0\;cmpw %#-1,%0\;jne %l1\";
        !          3705: #endif
        !          3706: }")
        !          3707: 
        !          3708: (define_insn ""
        !          3709:   [(set (pc)
        !          3710:        (if_then_else
        !          3711:         (ne (compare (plus:SI (match_operand:SI 0 "general_operand" "g")
        !          3712:                               (const_int -1))
        !          3713:                      (const_int -1))
        !          3714:             (const_int 0))
        !          3715:         (label_ref (match_operand 1 "" ""))
        !          3716:         (pc)))
        !          3717:    (set (match_dup 0)
        !          3718:        (plus:SI (match_dup 0)
        !          3719:                 (const_int -1)))]
        !          3720:   ""
        !          3721:   "*
        !          3722: {
        !          3723:   CC_STATUS_INIT;
        !          3724: #ifdef MOTOROLA
        !          3725: #ifndef NO_ADDSUB_Q
        !          3726:   if (DATA_REG_P (operands[0]))
        !          3727:     return \"dbra %0,%l1\;clr.w %0\;sub.l %#1,%0\;jbcc %l1\";
        !          3728:   if (GET_CODE (operands[0]) == MEM)
        !          3729:     return \"sub.l %#1,%0\;jbcc %l1\";
        !          3730: #else
        !          3731:   if (DATA_REG_P (operands[0]))
        !          3732:     return \"dbra %0,%l1\;clr.w %0\;subq.l %#1,%0\;jbcc %l1\";
        !          3733:   if (GET_CODE (operands[0]) == MEM)
        !          3734:     return \"subq.l %#1,%0\;jbcc %l1\";
        !          3735: #endif /* not NO_ADDSUB_Q */
        !          3736: #ifdef HPUX_ASM
        !          3737: #ifndef NO_ADDSUB_Q
        !          3738:   return \"sub.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
        !          3739: #else
        !          3740:   return \"subq.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
        !          3741: #endif
        !          3742: #else
        !          3743:   return \"subq.l %#1,%0\;cmp.l %#-1,%0\;jbne %l1\";
        !          3744: #endif
        !          3745: #else
        !          3746:   if (DATA_REG_P (operands[0]))
        !          3747:     return \"dbra %0,%l1\;clrw %0\;subql %#1,%0\;jcc %l1\";
        !          3748:   if (GET_CODE (operands[0]) == MEM)
        !          3749:     return \"subql %#1,%0\;jcc %l1\";
        !          3750:   return \"subql %#1,%0\;cmpl %#-1,%0\;jne %l1\";
        !          3751: #endif
        !          3752: }")
        !          3753: 
        !          3754: ;; dbra patterns that use REG_NOTES info generated by strength_reduce.
        !          3755: 
        !          3756: (define_insn ""
        !          3757:   [(set (pc)
        !          3758:        (if_then_else
        !          3759:          (ge (plus:SI (match_operand:SI 0 "general_operand" "g")
        !          3760:                        (const_int -1))
        !          3761:              (const_int 0))
        !          3762:          (label_ref (match_operand 1 "" ""))
        !          3763:          (pc)))
        !          3764:    (set (match_dup 0)
        !          3765:        (plus:SI (match_dup 0)
        !          3766:                 (const_int -1)))]
        !          3767:   "find_reg_note (insn, REG_NONNEG, 0)"
        !          3768:   "*
        !          3769: {
        !          3770:   CC_STATUS_INIT;
        !          3771: #ifdef MOTOROLA
        !          3772: #ifndef NO_ADDSUB_Q
        !          3773:   if (DATA_REG_P (operands[0]))
        !          3774:     return \"dbra %0,%l1\;clr.w %0\;sub.l %#1,%0\;jbcc %l1\";
        !          3775:   if (GET_CODE (operands[0]) == MEM)
        !          3776:     return \"sub.l %#1,%0\;jbcc %l1\";
        !          3777: #else
        !          3778:   if (DATA_REG_P (operands[0]))
        !          3779:     return \"dbra %0,%l1\;clr.w %0\;subq.l %#1,%0\;jbcc %l1\";
        !          3780:   if (GET_CODE (operands[0]) == MEM)
        !          3781:     return \"subq.l %#1,%0\;jbcc %l1\";
        !          3782: #endif
        !          3783: #ifdef HPUX_ASM
        !          3784: #ifndef NO_ADDSUB_Q
        !          3785:   return \"sub.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
        !          3786: #else
        !          3787:   return \"subq.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
        !          3788: #endif
        !          3789: #else
        !          3790:   return \"subq.l %#1,%0\;cmp.l %#-1,%0\;jbne %l1\";
        !          3791: #endif
        !          3792: #else
        !          3793:   if (DATA_REG_P (operands[0]))
        !          3794:     return \"dbra %0,%l1\;clrw %0\;subql %#1,%0\;jcc %l1\";
        !          3795:   if (GET_CODE (operands[0]) == MEM)
        !          3796:     return \"subql %#1,%0\;jcc %l1\";
        !          3797:   return \"subql %#1,%0\;cmpl %#-1,%0\;jne %l1\";
        !          3798: #endif
        !          3799: }")
        !          3800: 
        !          3801: ;; Call subroutine with no return value.
        !          3802: (define_insn "call"
        !          3803:   [(call (match_operand:QI 0 "general_operand" "o")
        !          3804:         (match_operand:SI 1 "general_operand" "g"))]
        !          3805:   ;; Operand 1 not really used on the m68000.
        !          3806: 
        !          3807:   ""
        !          3808:   "*
        !          3809: #ifdef MOTOROLA
        !          3810:   return \"jsr %0\";
        !          3811: #else
        !          3812:   return \"jbsr %0\";
        !          3813: #endif
        !          3814: ")
        !          3815: 
        !          3816: ;; Call subroutine, returning value in operand 0
        !          3817: ;; (which must be a hard register).
        !          3818: (define_insn "call_value"
        !          3819:   [(set (match_operand 0 "" "=rf")
        !          3820:        (call (match_operand:QI 1 "general_operand" "o")
        !          3821:              (match_operand:SI 2 "general_operand" "g")))]
        !          3822:   ;; Operand 2 not really used on the m68000.
        !          3823:   ""
        !          3824:   "*
        !          3825: #ifdef MOTOROLA
        !          3826:   return \"jsr %1\";
        !          3827: #else
        !          3828:   return \"jbsr %1\";
        !          3829: #endif
        !          3830: ")
        !          3831: 
        !          3832: (define_insn "nop"
        !          3833:   [(const_int 0)]
        !          3834:   ""
        !          3835:   "nop")
        !          3836: 
        !          3837: ;; This should not be used unless the add/sub insns can't be.
        !          3838: 
        !          3839: (define_insn ""
        !          3840:   [(set (match_operand:SI 0 "general_operand" "=a")
        !          3841:        (match_operand:QI 1 "address_operand" "p"))]
        !          3842:   ""
        !          3843:   "lea %a1,%0")
        !          3844: 
        !          3845: ;; This is the first machine-dependent peephole optimization.
        !          3846: ;; It is useful when a floating value is returned from a function call
        !          3847: ;; and then is moved into an FP register.
        !          3848: ;; But it is mainly intended to test the support for these optimizations.
        !          3849: 
        !          3850: (define_peephole
        !          3851:   [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
        !          3852:    (set (match_operand:DF 0 "register_operand" "f")
        !          3853:        (match_operand:DF 1 "register_operand" "ad"))]
        !          3854:   "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
        !          3855:   "*
        !          3856: {
        !          3857:   rtx xoperands[2];
        !          3858:   xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
        !          3859:   output_asm_insn (\"move%.l %1,%@\", xoperands);
        !          3860:   output_asm_insn (\"move%.l %1,%-\", operands);
        !          3861:   return \"fmove%.d %+,%0\";
        !          3862: }
        !          3863: ")
        !          3864: 
        !          3865: ;; FPA multiply and add.
        !          3866: (define_insn ""
        !          3867:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          3868:        (plus:DF (mult:DF (match_operand:DF 1 "general_operand" "%x,dmF,y")
        !          3869:                          (match_operand:DF 2 "general_operand" "xH,y,y"))
        !          3870:                 (match_operand:DF 3 "general_operand" "xH,y,dmF")))]
        !          3871:   "TARGET_FPA"
        !          3872:   "*
        !          3873: {
        !          3874:   if (which_alternative == 0)
        !          3875:     return \"fpma%.d %1,%w2,%w3,%0\";
        !          3876:   return \"fpma%.d %x1,%x2,%x3,%0\";
        !          3877: }")
        !          3878: 
        !          3879: (define_insn ""
        !          3880:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          3881:        (plus:DF (match_operand:DF 1 "general_operand" "xH,y,dmF")
        !          3882:                 (mult:DF (match_operand:DF 2 "general_operand" "%x,dmF,y")
        !          3883:                          (match_operand:DF 3 "general_operand" "xH,y,y"))))]
        !          3884:    "TARGET_FPA"
        !          3885:    "*
        !          3886: {
        !          3887:   if (which_alternative == 0)
        !          3888:     return \"fpma%.d %2,%w3,%w1,%0\";
        !          3889:   return \"fpma%.d %x2,%x3,%x1,%0\";
        !          3890: }")
        !          3891: 
        !          3892: (define_insn ""
        !          3893:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          3894:        (plus:SF (mult:SF (match_operand:SF 1 "general_operand" "%x,ydmF,y")
        !          3895:                          (match_operand:SF 2 "general_operand" "xH,y,ydmF"))
        !          3896:                 (match_operand:SF 3 "general_operand" "xH,ydmF,ydmF")))]
        !          3897:   "TARGET_FPA"
        !          3898:   "*
        !          3899: {
        !          3900:   if (which_alternative == 0)
        !          3901:     return \"fpma%.s %1,%w2,%w3,%0\";
        !          3902:   return \"fpma%.s %1,%2,%3,%0\";
        !          3903: }")
        !          3904: 
        !          3905: (define_insn ""
        !          3906:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          3907:        (plus:SF (match_operand:SF 1 "general_operand" "xH,ydmF,ydmF")
        !          3908:                 (mult:SF (match_operand:SF 2 "general_operand" "%x,ydmF,y")
        !          3909:                          (match_operand:SF 3 "general_operand" "xH,y,ydmF"))))]
        !          3910:    "TARGET_FPA"
        !          3911:    "*
        !          3912: {
        !          3913:   if (which_alternative == 0)
        !          3914:     return \"fpma%.s %2,%w3,%w1,%0\";
        !          3915:   return \"fpma%.s %2,%3,%1,%0\";
        !          3916: }")
        !          3917: 
        !          3918: ;; FPA Multiply and subtract
        !          3919: (define_insn ""
        !          3920:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          3921:        (minus:DF (match_operand:DF 1 "general_operand" "xH,rmF,y")
        !          3922:                  (mult:DF (match_operand:DF 2 "register_operand" "%xH,y,y")
        !          3923:                           (match_operand:DF 3 "general_operand" "x,y,rmF"))))]
        !          3924:   "TARGET_FPA"
        !          3925:   "*
        !          3926: {
        !          3927:   if (which_alternative == 0)
        !          3928:     return \"fpms%.d %3,%w2,%w1,%0\";
        !          3929:   return \"fpms%.d %x3,%2,%x1,%0\";
        !          3930: }")
        !          3931: 
        !          3932: (define_insn ""
        !          3933:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          3934:        (minus:SF (match_operand:SF 1 "general_operand" "xH,rmF,yrmF")
        !          3935:                  (mult:SF (match_operand:SF 2 "register_operand" "%xH,rmF,y")
        !          3936:                           (match_operand:SF 3 "general_operand" "x,y,yrmF"))))]
        !          3937:   "TARGET_FPA"
        !          3938:   "*
        !          3939: {
        !          3940:   if (which_alternative == 0)
        !          3941:     return \"fpms%.s %3,%w2,%w1,%0\";
        !          3942:   return \"fpms%.s %3,%2,%1,%0\";
        !          3943: }")
        !          3944: 
        !          3945: (define_insn ""
        !          3946:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          3947:        (minus:DF (mult:DF (match_operand:DF 1 "register_operand" "%xH,y,y")
        !          3948:                           (match_operand:DF 2 "general_operand" "x,y,rmF"))
        !          3949:                  (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
        !          3950:   "TARGET_FPA"
        !          3951:   "*
        !          3952: {
        !          3953:   if (which_alternative == 0)
        !          3954:     return \"fpmr%.d %2,%w1,%w3,%0\";
        !          3955:   return \"fpmr%.d %x2,%1,%x3,%0\";
        !          3956: }")
        !          3957: 
        !          3958: (define_insn ""
        !          3959:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          3960:        (minus:SF (mult:SF (match_operand:SF 1 "register_operand" "%xH,rmF,y")
        !          3961:                           (match_operand:SF 2 "general_operand" "x,y,yrmF"))
        !          3962:                  (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
        !          3963:   "TARGET_FPA"
        !          3964:   "*
        !          3965: {
        !          3966:   if (which_alternative == 0)
        !          3967:     return \"fpmr%.s %2,%w1,%w3,%0\";
        !          3968:   return \"fpmr%.s %x2,%1,%x3,%0\";
        !          3969: }")
        !          3970: 
        !          3971: ;; FPA Add and multiply
        !          3972: (define_insn ""
        !          3973:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          3974:        (mult:DF (plus:DF (match_operand:DF 1 "register_operand" "%xH,y,y")
        !          3975:                          (match_operand:DF 2 "general_operand" "x,y,rmF"))
        !          3976:                 (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
        !          3977:   "TARGET_FPA"
        !          3978:   "*
        !          3979: {
        !          3980:   if (which_alternative == 0)
        !          3981:     return \"fpam%.d %2,%w1,%w3,%0\";
        !          3982:   return \"fpam%.d %x2,%1,%x3,%0\";
        !          3983: }")
        !          3984: 
        !          3985: (define_insn ""
        !          3986:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          3987:        (mult:DF (match_operand:DF 1 "general_operand" "xH,rmF,y")
        !          3988:                 (plus:DF (match_operand:DF 2 "register_operand" "%xH,y,y")
        !          3989:                          (match_operand:DF 3 "general_operand" "x,y,rmF"))))]
        !          3990:   "TARGET_FPA"
        !          3991:   "*
        !          3992: {
        !          3993:   if (which_alternative == 0)
        !          3994:     return \"fpam%.d %3,%w2,%w1,%0\";
        !          3995:   return \"fpam%.d %x3,%2,%x1,%0\";
        !          3996: }")
        !          3997: 
        !          3998: (define_insn ""
        !          3999:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          4000:        (mult:SF (plus:SF (match_operand:SF 1 "register_operand" "%xH,rmF,y")
        !          4001:                          (match_operand:SF 2 "general_operand" "x,y,yrmF"))
        !          4002:                 (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
        !          4003:   "TARGET_FPA"
        !          4004:   "*
        !          4005: {
        !          4006:   if (which_alternative == 0)
        !          4007:     return \"fpam%.s %2,%w1,%w3,%0\";
        !          4008:   return \"fpam%.s %x2,%1,%x3,%0\";
        !          4009: }")
        !          4010: 
        !          4011: (define_insn ""
        !          4012:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          4013:        (mult:SF (match_operand:SF 1 "general_operand" "xH,rmF,yrmF")
        !          4014:                 (plus:SF (match_operand:SF 2 "register_operand" "%xH,rmF,y")
        !          4015:                          (match_operand:SF 3 "general_operand" "x,y,yrmF"))))]
        !          4016:   "TARGET_FPA"
        !          4017:   "*
        !          4018: {
        !          4019:   if (which_alternative == 0)
        !          4020:     return \"fpam%.s %3,%w2,%w1,%0\";
        !          4021:   return \"fpam%.s %x3,%2,%x1,%0\";
        !          4022: }")
        !          4023: 
        !          4024: ;;FPA Subtract and multiply
        !          4025: (define_insn ""
        !          4026:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          4027:        (mult:DF (minus:DF (match_operand:DF 1 "register_operand" "xH,y,y")
        !          4028:                           (match_operand:DF 2 "general_operand" "x,y,rmF"))
        !          4029:                 (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
        !          4030:   "TARGET_FPA"
        !          4031:   "*
        !          4032: {
        !          4033:   if (which_alternative == 0)
        !          4034:     return \"fpsm%.d %2,%w1,%w3,%0\";
        !          4035:   return \"fpsm%.d %x2,%1,%x3,%0\";
        !          4036: }")
        !          4037: 
        !          4038: (define_insn ""
        !          4039:   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
        !          4040:        (mult:DF (match_operand:DF 1 "general_operand" "xH,rmF,y")
        !          4041:                 (minus:DF (match_operand:DF 2 "register_operand" "xH,y,y")
        !          4042:                           (match_operand:DF 3 "general_operand" "x,y,rmF"))))]
        !          4043:   "TARGET_FPA"
        !          4044:   "*
        !          4045: {
        !          4046:   if (which_alternative == 0)
        !          4047:     return \"fpsm%.d %3,%w2,%w1,%0\";
        !          4048:   return \"fpsm%.d %x3,%2,%x1,%0\";
        !          4049: }")
        !          4050: 
        !          4051: (define_insn ""
        !          4052:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          4053:        (mult:SF (minus:SF (match_operand:SF 1 "register_operand" "xH,rmF,y")
        !          4054:                           (match_operand:SF 2 "general_operand" "x,y,yrmF"))
        !          4055:                 (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
        !          4056:   "TARGET_FPA"
        !          4057:   "*
        !          4058: {
        !          4059:   if (which_alternative == 0)
        !          4060:     return \"fpsm%.s %2,%w1,%w3,%0\";
        !          4061:   return \"fpsm%.s %x2,%1,%x3,%0\";
        !          4062: }")
        !          4063: 
        !          4064: (define_insn ""
        !          4065:   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
        !          4066:        (mult:SF (match_operand:SF 1 "general_operand" "xH,rmF,yrmF")
        !          4067:                 (minus:SF (match_operand:SF 2 "register_operand" "xH,rmF,y")
        !          4068:                           (match_operand:SF 3 "general_operand" "x,y,yrmF"))))]
        !          4069:   "TARGET_FPA"
        !          4070:   "*
        !          4071: {
        !          4072:   if (which_alternative == 0)
        !          4073:     return \"fpsm%.s %3,%w2,%w1,%0\";
        !          4074:   return \"fpsm%.s %x3,%2,%x1,%0\";
        !          4075: }")
        !          4076: 
        !          4077: 
        !          4078: ;;- Local variables:
        !          4079: ;;- mode:emacs-lisp
        !          4080: ;;- comment-start: ";;- "
        !          4081: ;;- comment-start-skip: ";+- *"
        !          4082: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
        !          4083: ;;- eval: (modify-syntax-entry ?[ "(]")
        !          4084: ;;- eval: (modify-syntax-entry ?] ")[")
        !          4085: ;;- eval: (modify-syntax-entry ?{ "(}")
        !          4086: ;;- eval: (modify-syntax-entry ?} "){")
        !          4087: ;;- End:

unix.superglobalmegacorp.com

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