Home | History | Annotate | Line # | Download | only in alpha
alpha.md revision 1.1.1.1.4.2
      1  1.1.1.1.4.2  yamt ;; Machine description for DEC Alpha for GNU C compiler
      2  1.1.1.1.4.2  yamt ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
      3  1.1.1.1.4.2  yamt ;; 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
      4  1.1.1.1.4.2  yamt ;; Free Software Foundation, Inc.
      5  1.1.1.1.4.2  yamt ;; Contributed by Richard Kenner (kenner (a] vlsi1.ultra.nyu.edu)
      6  1.1.1.1.4.2  yamt ;;
      7  1.1.1.1.4.2  yamt ;; This file is part of GCC.
      8  1.1.1.1.4.2  yamt ;;
      9  1.1.1.1.4.2  yamt ;; GCC is free software; you can redistribute it and/or modify
     10  1.1.1.1.4.2  yamt ;; it under the terms of the GNU General Public License as published by
     11  1.1.1.1.4.2  yamt ;; the Free Software Foundation; either version 3, or (at your option)
     12  1.1.1.1.4.2  yamt ;; any later version.
     13  1.1.1.1.4.2  yamt ;;
     14  1.1.1.1.4.2  yamt ;; GCC is distributed in the hope that it will be useful,
     15  1.1.1.1.4.2  yamt ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
     16  1.1.1.1.4.2  yamt ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17  1.1.1.1.4.2  yamt ;; GNU General Public License for more details.
     18  1.1.1.1.4.2  yamt ;;
     19  1.1.1.1.4.2  yamt ;; You should have received a copy of the GNU General Public License
     20  1.1.1.1.4.2  yamt ;; along with GCC; see the file COPYING3.  If not see
     21  1.1.1.1.4.2  yamt ;; <http://www.gnu.org/licenses/>.
     22  1.1.1.1.4.2  yamt 
     23  1.1.1.1.4.2  yamt ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
     24  1.1.1.1.4.2  yamt 
     25  1.1.1.1.4.2  yamt ;; Uses of UNSPEC in this file:
     26  1.1.1.1.4.2  yamt 
     27  1.1.1.1.4.2  yamt (define_constants
     28  1.1.1.1.4.2  yamt   [(UNSPEC_ARG_HOME	0)
     29  1.1.1.1.4.2  yamt    (UNSPEC_LDGP1	1)
     30  1.1.1.1.4.2  yamt    (UNSPEC_INSXH	2)
     31  1.1.1.1.4.2  yamt    (UNSPEC_MSKXH	3)
     32  1.1.1.1.4.2  yamt    (UNSPEC_CVTQL	4)
     33  1.1.1.1.4.2  yamt    (UNSPEC_CVTLQ	5)
     34  1.1.1.1.4.2  yamt    (UNSPEC_UMK_LAUM	6)
     35  1.1.1.1.4.2  yamt    (UNSPEC_UMK_LALM	7)
     36  1.1.1.1.4.2  yamt    (UNSPEC_UMK_LAL	8)
     37  1.1.1.1.4.2  yamt    (UNSPEC_UMK_LOAD_CIW	9)
     38  1.1.1.1.4.2  yamt    (UNSPEC_LDGP2	10)
     39  1.1.1.1.4.2  yamt    (UNSPEC_LITERAL	11)
     40  1.1.1.1.4.2  yamt    (UNSPEC_LITUSE	12)
     41  1.1.1.1.4.2  yamt    (UNSPEC_SIBCALL	13)
     42  1.1.1.1.4.2  yamt    (UNSPEC_SYMBOL	14)
     43  1.1.1.1.4.2  yamt 
     44  1.1.1.1.4.2  yamt    ;; TLS Support
     45  1.1.1.1.4.2  yamt    (UNSPEC_TLSGD_CALL	15)
     46  1.1.1.1.4.2  yamt    (UNSPEC_TLSLDM_CALL	16)
     47  1.1.1.1.4.2  yamt    (UNSPEC_TLSGD	17)
     48  1.1.1.1.4.2  yamt    (UNSPEC_TLSLDM	18)
     49  1.1.1.1.4.2  yamt    (UNSPEC_DTPREL	19)
     50  1.1.1.1.4.2  yamt    (UNSPEC_TPREL	20)
     51  1.1.1.1.4.2  yamt    (UNSPEC_TP		21)
     52  1.1.1.1.4.2  yamt 
     53  1.1.1.1.4.2  yamt    ;; Builtins
     54  1.1.1.1.4.2  yamt    (UNSPEC_CMPBGE	22)
     55  1.1.1.1.4.2  yamt    (UNSPEC_ZAP		23)
     56  1.1.1.1.4.2  yamt    (UNSPEC_AMASK	24)
     57  1.1.1.1.4.2  yamt    (UNSPEC_IMPLVER	25)
     58  1.1.1.1.4.2  yamt    (UNSPEC_PERR		26)
     59  1.1.1.1.4.2  yamt    (UNSPEC_COPYSIGN     27)
     60  1.1.1.1.4.2  yamt 
     61  1.1.1.1.4.2  yamt    ;; Atomic operations
     62  1.1.1.1.4.2  yamt    (UNSPEC_MB		28)
     63  1.1.1.1.4.2  yamt    (UNSPEC_ATOMIC	31)
     64  1.1.1.1.4.2  yamt    (UNSPEC_CMPXCHG	32)
     65  1.1.1.1.4.2  yamt    (UNSPEC_XCHG		33)
     66  1.1.1.1.4.2  yamt   ])
     67  1.1.1.1.4.2  yamt 
     68  1.1.1.1.4.2  yamt ;; UNSPEC_VOLATILE:
     69  1.1.1.1.4.2  yamt 
     70  1.1.1.1.4.2  yamt (define_constants
     71  1.1.1.1.4.2  yamt   [(UNSPECV_IMB		0)
     72  1.1.1.1.4.2  yamt    (UNSPECV_BLOCKAGE	1)
     73  1.1.1.1.4.2  yamt    (UNSPECV_SETJMPR	2)	; builtin_setjmp_receiver
     74  1.1.1.1.4.2  yamt    (UNSPECV_LONGJMP	3)	; builtin_longjmp
     75  1.1.1.1.4.2  yamt    (UNSPECV_TRAPB	4)
     76  1.1.1.1.4.2  yamt    (UNSPECV_PSPL	5)	; prologue_stack_probe_loop
     77  1.1.1.1.4.2  yamt    (UNSPECV_REALIGN	6)
     78  1.1.1.1.4.2  yamt    (UNSPECV_EHR		7)	; exception_receiver
     79  1.1.1.1.4.2  yamt    (UNSPECV_MCOUNT	8)
     80  1.1.1.1.4.2  yamt    (UNSPECV_FORCE_MOV	9)
     81  1.1.1.1.4.2  yamt    (UNSPECV_LDGP1	10)
     82  1.1.1.1.4.2  yamt    (UNSPECV_PLDGP2	11)	; prologue ldgp
     83  1.1.1.1.4.2  yamt    (UNSPECV_SET_TP	12)
     84  1.1.1.1.4.2  yamt    (UNSPECV_RPCC	13)
     85  1.1.1.1.4.2  yamt    (UNSPECV_SETJMPR_ER	14)	; builtin_setjmp_receiver fragment
     86  1.1.1.1.4.2  yamt    (UNSPECV_LL		15)	; load-locked
     87  1.1.1.1.4.2  yamt    (UNSPECV_SC		16)	; store-conditional
     88  1.1.1.1.4.2  yamt   ])
     89  1.1.1.1.4.2  yamt 
     90  1.1.1.1.4.2  yamt ;; On non-BWX targets, CQImode must be handled the similarly to HImode
     91  1.1.1.1.4.2  yamt ;; when generating reloads.
     92  1.1.1.1.4.2  yamt (define_mode_iterator RELOAD12 [QI HI CQI])
     93  1.1.1.1.4.2  yamt (define_mode_attr reloadmode [(QI "qi") (HI "hi") (CQI "hi")])
     94  1.1.1.1.4.2  yamt 
     95  1.1.1.1.4.2  yamt ;; Other mode iterators
     96  1.1.1.1.4.2  yamt (define_mode_iterator I12MODE [QI HI])
     97  1.1.1.1.4.2  yamt (define_mode_iterator I48MODE [SI DI])
     98  1.1.1.1.4.2  yamt (define_mode_attr modesuffix [(SI "l") (DI "q")])
     99  1.1.1.1.4.2  yamt 
    100  1.1.1.1.4.2  yamt ;; Where necessary, the suffixes _le and _be are used to distinguish between
    101  1.1.1.1.4.2  yamt ;; little-endian and big-endian patterns.
    102  1.1.1.1.4.2  yamt ;;
    103  1.1.1.1.4.2  yamt ;; Note that the Unicos/Mk assembler does not support the following
    104  1.1.1.1.4.2  yamt ;; opcodes: mov, fmov, nop, fnop, unop.
    105  1.1.1.1.4.2  yamt 
    107  1.1.1.1.4.2  yamt ;; Processor type -- this attribute must exactly match the processor_type
    108  1.1.1.1.4.2  yamt ;; enumeration in alpha.h.
    109  1.1.1.1.4.2  yamt 
    110  1.1.1.1.4.2  yamt (define_attr "tune" "ev4,ev5,ev6"
    111  1.1.1.1.4.2  yamt   (const (symbol_ref "((enum attr_tune) alpha_tune)")))
    112  1.1.1.1.4.2  yamt 
    113  1.1.1.1.4.2  yamt ;; Define an insn type attribute.  This is used in function unit delay
    114  1.1.1.1.4.2  yamt ;; computations, among other purposes.  For the most part, we use the names
    115  1.1.1.1.4.2  yamt ;; defined in the EV4 documentation, but add a few that we have to know about
    116  1.1.1.1.4.2  yamt ;; separately.
    117  1.1.1.1.4.2  yamt 
    118  1.1.1.1.4.2  yamt (define_attr "type"
    119  1.1.1.1.4.2  yamt   "ild,fld,ldsym,ist,fst,ibr,callpal,fbr,jsr,iadd,ilog,shift,icmov,fcmov,
    120  1.1.1.1.4.2  yamt    icmp,imul,fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,mb,ld_l,st_c,
    121  1.1.1.1.4.2  yamt    multi,none"
    122  1.1.1.1.4.2  yamt   (const_string "iadd"))
    123  1.1.1.1.4.2  yamt 
    124  1.1.1.1.4.2  yamt ;; Describe a user's asm statement.
    125  1.1.1.1.4.2  yamt (define_asm_attributes
    126  1.1.1.1.4.2  yamt   [(set_attr "type" "multi")])
    127  1.1.1.1.4.2  yamt 
    128  1.1.1.1.4.2  yamt ;; Define the operand size an insn operates on.  Used primarily by mul
    129  1.1.1.1.4.2  yamt ;; and div operations that have size dependent timings.
    130  1.1.1.1.4.2  yamt 
    131  1.1.1.1.4.2  yamt (define_attr "opsize" "si,di,udi"
    132  1.1.1.1.4.2  yamt   (const_string "di"))
    133  1.1.1.1.4.2  yamt 
    134  1.1.1.1.4.2  yamt ;; The TRAP attribute marks instructions that may generate traps
    135  1.1.1.1.4.2  yamt ;; (which are imprecise and may need a trapb if software completion
    136  1.1.1.1.4.2  yamt ;; is desired).
    137  1.1.1.1.4.2  yamt 
    138  1.1.1.1.4.2  yamt (define_attr "trap" "no,yes"
    139  1.1.1.1.4.2  yamt   (const_string "no"))
    140  1.1.1.1.4.2  yamt 
    141  1.1.1.1.4.2  yamt ;; The ROUND_SUFFIX attribute marks which instructions require a
    142  1.1.1.1.4.2  yamt ;; rounding-mode suffix.  The value NONE indicates no suffix,
    143  1.1.1.1.4.2  yamt ;; the value NORMAL indicates a suffix controlled by alpha_fprm.
    144  1.1.1.1.4.2  yamt 
    145  1.1.1.1.4.2  yamt (define_attr "round_suffix" "none,normal,c"
    146  1.1.1.1.4.2  yamt   (const_string "none"))
    147  1.1.1.1.4.2  yamt 
    148  1.1.1.1.4.2  yamt ;; The TRAP_SUFFIX attribute marks instructions requiring a trap-mode suffix:
    149  1.1.1.1.4.2  yamt ;;   NONE	no suffix
    150  1.1.1.1.4.2  yamt ;;   SU		accepts only /su (cmpt et al)
    151  1.1.1.1.4.2  yamt ;;   SUI	accepts only /sui (cvtqt and cvtqs)
    152  1.1.1.1.4.2  yamt ;;   V_SV	accepts /v and /sv (cvtql only)
    153  1.1.1.1.4.2  yamt ;;   V_SV_SVI	accepts /v, /sv and /svi (cvttq only)
    154  1.1.1.1.4.2  yamt ;;   U_SU_SUI	accepts /u, /su and /sui (most fp instructions)
    155  1.1.1.1.4.2  yamt ;;
    156  1.1.1.1.4.2  yamt ;; The actual suffix emitted is controlled by alpha_fptm.
    157  1.1.1.1.4.2  yamt 
    158  1.1.1.1.4.2  yamt (define_attr "trap_suffix" "none,su,sui,v_sv,v_sv_svi,u_su_sui"
    159  1.1.1.1.4.2  yamt   (const_string "none"))
    160  1.1.1.1.4.2  yamt 
    161  1.1.1.1.4.2  yamt ;; The length of an instruction sequence in bytes.
    162  1.1.1.1.4.2  yamt 
    163  1.1.1.1.4.2  yamt (define_attr "length" ""
    164  1.1.1.1.4.2  yamt   (const_int 4))
    165  1.1.1.1.4.2  yamt 
    166  1.1.1.1.4.2  yamt ;; The USEGP attribute marks instructions that have relocations that use
    167  1.1.1.1.4.2  yamt ;; the GP.
    168  1.1.1.1.4.2  yamt 
    169  1.1.1.1.4.2  yamt (define_attr "usegp" "no,yes"
    170  1.1.1.1.4.2  yamt   (cond [(eq_attr "type" "ldsym,jsr")
    171  1.1.1.1.4.2  yamt 	   (const_string "yes")
    172  1.1.1.1.4.2  yamt 	 (eq_attr "type" "ild,fld,ist,fst")
    173  1.1.1.1.4.2  yamt 	   (symbol_ref "((enum attr_usegp) alpha_find_lo_sum_using_gp (insn))")
    174  1.1.1.1.4.2  yamt 	]
    175  1.1.1.1.4.2  yamt 	(const_string "no")))
    176  1.1.1.1.4.2  yamt 
    177  1.1.1.1.4.2  yamt ;; The CANNOT_COPY attribute marks instructions with relocations that
    178  1.1.1.1.4.2  yamt ;; cannot easily be duplicated.  This includes insns with gpdisp relocs
    179  1.1.1.1.4.2  yamt ;; since they have to stay in 1-1 correspondence with one another.  This
    180  1.1.1.1.4.2  yamt ;; also includes jsr insns, since they must stay in correspondence with
    181  1.1.1.1.4.2  yamt ;; the immediately following gpdisp instructions.
    182  1.1.1.1.4.2  yamt 
    183  1.1.1.1.4.2  yamt (define_attr "cannot_copy" "false,true"
    184  1.1.1.1.4.2  yamt   (const_string "false"))
    185  1.1.1.1.4.2  yamt 
    187  1.1.1.1.4.2  yamt ;; Include scheduling descriptions.
    188  1.1.1.1.4.2  yamt   
    189  1.1.1.1.4.2  yamt (include "ev4.md")
    190  1.1.1.1.4.2  yamt (include "ev5.md")
    191  1.1.1.1.4.2  yamt (include "ev6.md")
    192  1.1.1.1.4.2  yamt 
    193  1.1.1.1.4.2  yamt 
    195  1.1.1.1.4.2  yamt ;; Operand and operator predicates and constraints
    196  1.1.1.1.4.2  yamt 
    197  1.1.1.1.4.2  yamt (include "predicates.md")
    198  1.1.1.1.4.2  yamt (include "constraints.md")
    199  1.1.1.1.4.2  yamt 
    200  1.1.1.1.4.2  yamt 
    202  1.1.1.1.4.2  yamt ;; First define the arithmetic insns.  Note that the 32-bit forms also
    203  1.1.1.1.4.2  yamt ;; sign-extend.
    204  1.1.1.1.4.2  yamt 
    205  1.1.1.1.4.2  yamt ;; Handle 32-64 bit extension from memory to a floating point register
    206  1.1.1.1.4.2  yamt ;; specially, since this occurs frequently in int->double conversions.
    207  1.1.1.1.4.2  yamt ;;
    208  1.1.1.1.4.2  yamt ;; Note that while we must retain the =f case in the insn for reload's
    209  1.1.1.1.4.2  yamt ;; benefit, it should be eliminated after reload, so we should never emit
    210  1.1.1.1.4.2  yamt ;; code for that case.  But we don't reject the possibility.
    211  1.1.1.1.4.2  yamt 
    212  1.1.1.1.4.2  yamt (define_expand "extendsidi2"
    213  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    214  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))]
    215  1.1.1.1.4.2  yamt   ""
    216  1.1.1.1.4.2  yamt   "")
    217  1.1.1.1.4.2  yamt 
    218  1.1.1.1.4.2  yamt (define_insn "*cvtlq"
    219  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=f")
    220  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:SF 1 "reg_or_0_operand" "fG")]
    221  1.1.1.1.4.2  yamt 		   UNSPEC_CVTLQ))]
    222  1.1.1.1.4.2  yamt   ""
    223  1.1.1.1.4.2  yamt   "cvtlq %1,%0"
    224  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
    225  1.1.1.1.4.2  yamt 
    226  1.1.1.1.4.2  yamt (define_insn "*extendsidi2_1"
    227  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r,!*f")
    228  1.1.1.1.4.2  yamt 	(sign_extend:DI
    229  1.1.1.1.4.2  yamt 	  (match_operand:SI 1 "nonimmediate_operand" "r,m,m")))]
    230  1.1.1.1.4.2  yamt   ""
    231  1.1.1.1.4.2  yamt   "@
    232  1.1.1.1.4.2  yamt    addl $31,%1,%0
    233  1.1.1.1.4.2  yamt    ldl %0,%1
    234  1.1.1.1.4.2  yamt    lds %0,%1\;cvtlq %0,%0"
    235  1.1.1.1.4.2  yamt   [(set_attr "type" "iadd,ild,fld")
    236  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,8")])
    237  1.1.1.1.4.2  yamt 
    238  1.1.1.1.4.2  yamt (define_split
    239  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "hard_fp_register_operand" "")
    240  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 1 "memory_operand" "")))]
    241  1.1.1.1.4.2  yamt   "reload_completed"
    242  1.1.1.1.4.2  yamt   [(set (match_dup 2) (match_dup 1))
    243  1.1.1.1.4.2  yamt    (set (match_dup 0) (unspec:DI [(match_dup 2)] UNSPEC_CVTLQ))]
    244  1.1.1.1.4.2  yamt {
    245  1.1.1.1.4.2  yamt   operands[1] = adjust_address (operands[1], SFmode, 0);
    246  1.1.1.1.4.2  yamt   operands[2] = gen_rtx_REG (SFmode, REGNO (operands[0]));
    247  1.1.1.1.4.2  yamt })
    248  1.1.1.1.4.2  yamt 
    249  1.1.1.1.4.2  yamt ;; Optimize sign-extension of SImode loads.  This shows up in the wake of
    250  1.1.1.1.4.2  yamt ;; reload when converting fp->int.
    251  1.1.1.1.4.2  yamt 
    252  1.1.1.1.4.2  yamt (define_peephole2
    253  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "hard_int_register_operand" "")
    254  1.1.1.1.4.2  yamt         (match_operand:SI 1 "memory_operand" ""))
    255  1.1.1.1.4.2  yamt    (set (match_operand:DI 2 "hard_int_register_operand" "")
    256  1.1.1.1.4.2  yamt         (sign_extend:DI (match_dup 0)))]
    257  1.1.1.1.4.2  yamt   "true_regnum (operands[0]) == true_regnum (operands[2])
    258  1.1.1.1.4.2  yamt    || peep2_reg_dead_p (2, operands[0])"
    259  1.1.1.1.4.2  yamt   [(set (match_dup 2)
    260  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_dup 1)))]
    261  1.1.1.1.4.2  yamt   "")
    262  1.1.1.1.4.2  yamt 
    263  1.1.1.1.4.2  yamt (define_insn "addsi3"
    264  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
    265  1.1.1.1.4.2  yamt 	(plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,rJ,rJ,rJ")
    266  1.1.1.1.4.2  yamt 		 (match_operand:SI 2 "add_operand" "rI,O,K,L")))]
    267  1.1.1.1.4.2  yamt   ""
    268  1.1.1.1.4.2  yamt   "@
    269  1.1.1.1.4.2  yamt    addl %r1,%2,%0
    270  1.1.1.1.4.2  yamt    subl %r1,%n2,%0
    271  1.1.1.1.4.2  yamt    lda %0,%2(%r1)
    272  1.1.1.1.4.2  yamt    ldah %0,%h2(%r1)")
    273  1.1.1.1.4.2  yamt 
    274  1.1.1.1.4.2  yamt (define_split
    275  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "")
    276  1.1.1.1.4.2  yamt 	(plus:SI (match_operand:SI 1 "register_operand" "")
    277  1.1.1.1.4.2  yamt 		 (match_operand:SI 2 "const_int_operand" "")))]
    278  1.1.1.1.4.2  yamt   "! add_operand (operands[2], SImode)"
    279  1.1.1.1.4.2  yamt   [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
    280  1.1.1.1.4.2  yamt    (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
    281  1.1.1.1.4.2  yamt {
    282  1.1.1.1.4.2  yamt   HOST_WIDE_INT val = INTVAL (operands[2]);
    283  1.1.1.1.4.2  yamt   HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000);
    284  1.1.1.1.4.2  yamt   HOST_WIDE_INT rest = val - low;
    285  1.1.1.1.4.2  yamt 
    286  1.1.1.1.4.2  yamt   operands[3] = GEN_INT (rest);
    287  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (low);
    288  1.1.1.1.4.2  yamt })
    289  1.1.1.1.4.2  yamt 
    290  1.1.1.1.4.2  yamt (define_insn "*addsi_se"
    291  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
    292  1.1.1.1.4.2  yamt 	(sign_extend:DI
    293  1.1.1.1.4.2  yamt 	 (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,rJ")
    294  1.1.1.1.4.2  yamt 		  (match_operand:SI 2 "sext_add_operand" "rI,O"))))]
    295  1.1.1.1.4.2  yamt   ""
    296  1.1.1.1.4.2  yamt   "@
    297  1.1.1.1.4.2  yamt    addl %r1,%2,%0
    298  1.1.1.1.4.2  yamt    subl %r1,%n2,%0")
    299  1.1.1.1.4.2  yamt 
    300  1.1.1.1.4.2  yamt (define_insn "*addsi_se2"
    301  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
    302  1.1.1.1.4.2  yamt 	(sign_extend:DI
    303  1.1.1.1.4.2  yamt 	 (subreg:SI (plus:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ")
    304  1.1.1.1.4.2  yamt 			     (match_operand:DI 2 "sext_add_operand" "rI,O"))
    305  1.1.1.1.4.2  yamt 		    0)))]
    306  1.1.1.1.4.2  yamt   ""
    307  1.1.1.1.4.2  yamt   "@
    308  1.1.1.1.4.2  yamt    addl %r1,%2,%0
    309  1.1.1.1.4.2  yamt    subl %r1,%n2,%0")
    310  1.1.1.1.4.2  yamt 
    311  1.1.1.1.4.2  yamt (define_split
    312  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    313  1.1.1.1.4.2  yamt 	(sign_extend:DI
    314  1.1.1.1.4.2  yamt 	 (plus:SI (match_operand:SI 1 "reg_not_elim_operand" "")
    315  1.1.1.1.4.2  yamt 		  (match_operand:SI 2 "const_int_operand" ""))))
    316  1.1.1.1.4.2  yamt    (clobber (match_operand:SI 3 "reg_not_elim_operand" ""))]
    317  1.1.1.1.4.2  yamt   "! sext_add_operand (operands[2], SImode) && INTVAL (operands[2]) > 0
    318  1.1.1.1.4.2  yamt    && INTVAL (operands[2]) % 4 == 0"
    319  1.1.1.1.4.2  yamt   [(set (match_dup 3) (match_dup 4))
    320  1.1.1.1.4.2  yamt    (set (match_dup 0) (sign_extend:DI (plus:SI (mult:SI (match_dup 3)
    321  1.1.1.1.4.2  yamt 							(match_dup 5))
    322  1.1.1.1.4.2  yamt 					       (match_dup 1))))]
    323  1.1.1.1.4.2  yamt {
    324  1.1.1.1.4.2  yamt   HOST_WIDE_INT val = INTVAL (operands[2]) / 4;
    325  1.1.1.1.4.2  yamt   int mult = 4;
    326  1.1.1.1.4.2  yamt 
    327  1.1.1.1.4.2  yamt   if (val % 2 == 0)
    328  1.1.1.1.4.2  yamt     val /= 2, mult = 8;
    329  1.1.1.1.4.2  yamt 
    330  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (val);
    331  1.1.1.1.4.2  yamt   operands[5] = GEN_INT (mult);
    332  1.1.1.1.4.2  yamt })
    333  1.1.1.1.4.2  yamt 
    334  1.1.1.1.4.2  yamt (define_split
    335  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    336  1.1.1.1.4.2  yamt 	(sign_extend:DI
    337  1.1.1.1.4.2  yamt 	 (plus:SI (match_operator:SI 1 "comparison_operator"
    338  1.1.1.1.4.2  yamt 				     [(match_operand 2 "" "")
    339  1.1.1.1.4.2  yamt 				      (match_operand 3 "" "")])
    340  1.1.1.1.4.2  yamt 		  (match_operand:SI 4 "add_operand" ""))))
    341  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 5 "register_operand" ""))]
    342  1.1.1.1.4.2  yamt   ""
    343  1.1.1.1.4.2  yamt   [(set (match_dup 5) (match_dup 6))
    344  1.1.1.1.4.2  yamt    (set (match_dup 0) (sign_extend:DI (plus:SI (match_dup 7) (match_dup 4))))]
    345  1.1.1.1.4.2  yamt {
    346  1.1.1.1.4.2  yamt   operands[6] = gen_rtx_fmt_ee (GET_CODE (operands[1]), DImode,
    347  1.1.1.1.4.2  yamt 				operands[2], operands[3]);
    348  1.1.1.1.4.2  yamt   operands[7] = gen_lowpart (SImode, operands[5]);
    349  1.1.1.1.4.2  yamt })
    350  1.1.1.1.4.2  yamt 
    351  1.1.1.1.4.2  yamt (define_insn "addvsi3"
    352  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
    353  1.1.1.1.4.2  yamt 	(plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,rJ")
    354  1.1.1.1.4.2  yamt 		 (match_operand:SI 2 "sext_add_operand" "rI,O")))
    355  1.1.1.1.4.2  yamt    (trap_if (ne (plus:DI (sign_extend:DI (match_dup 1))
    356  1.1.1.1.4.2  yamt 			 (sign_extend:DI (match_dup 2)))
    357  1.1.1.1.4.2  yamt 		(sign_extend:DI (plus:SI (match_dup 1)
    358  1.1.1.1.4.2  yamt 					 (match_dup 2))))
    359  1.1.1.1.4.2  yamt 	    (const_int 0))]
    360  1.1.1.1.4.2  yamt   ""
    361  1.1.1.1.4.2  yamt   "@
    362  1.1.1.1.4.2  yamt    addlv %r1,%2,%0
    363  1.1.1.1.4.2  yamt    sublv %r1,%n2,%0")
    364  1.1.1.1.4.2  yamt 
    365  1.1.1.1.4.2  yamt (define_expand "adddi3"
    366  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    367  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "")
    368  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "add_operand" "")))]
    369  1.1.1.1.4.2  yamt   ""
    370  1.1.1.1.4.2  yamt   "")
    371  1.1.1.1.4.2  yamt 
    372  1.1.1.1.4.2  yamt (define_insn "*adddi_er_lo16_dtp"
    373  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    374  1.1.1.1.4.2  yamt 	(lo_sum:DI (match_operand:DI 1 "register_operand" "r")
    375  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "dtp16_symbolic_operand" "")))]
    376  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
    377  1.1.1.1.4.2  yamt   "lda %0,%2(%1)\t\t!dtprel")
    378  1.1.1.1.4.2  yamt 
    379  1.1.1.1.4.2  yamt (define_insn "*adddi_er_hi32_dtp"
    380  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    381  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "r")
    382  1.1.1.1.4.2  yamt 		 (high:DI (match_operand:DI 2 "dtp32_symbolic_operand" ""))))]
    383  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
    384  1.1.1.1.4.2  yamt   "ldah %0,%2(%1)\t\t!dtprelhi")
    385  1.1.1.1.4.2  yamt 
    386  1.1.1.1.4.2  yamt (define_insn "*adddi_er_lo32_dtp"
    387  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    388  1.1.1.1.4.2  yamt 	(lo_sum:DI (match_operand:DI 1 "register_operand" "r")
    389  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "dtp32_symbolic_operand" "")))]
    390  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
    391  1.1.1.1.4.2  yamt   "lda %0,%2(%1)\t\t!dtprello")
    392  1.1.1.1.4.2  yamt 
    393  1.1.1.1.4.2  yamt (define_insn "*adddi_er_lo16_tp"
    394  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    395  1.1.1.1.4.2  yamt 	(lo_sum:DI (match_operand:DI 1 "register_operand" "r")
    396  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "tp16_symbolic_operand" "")))]
    397  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
    398  1.1.1.1.4.2  yamt   "lda %0,%2(%1)\t\t!tprel")
    399  1.1.1.1.4.2  yamt 
    400  1.1.1.1.4.2  yamt (define_insn "*adddi_er_hi32_tp"
    401  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    402  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "r")
    403  1.1.1.1.4.2  yamt 		 (high:DI (match_operand:DI 2 "tp32_symbolic_operand" ""))))]
    404  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
    405  1.1.1.1.4.2  yamt   "ldah %0,%2(%1)\t\t!tprelhi")
    406  1.1.1.1.4.2  yamt 
    407  1.1.1.1.4.2  yamt (define_insn "*adddi_er_lo32_tp"
    408  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    409  1.1.1.1.4.2  yamt 	(lo_sum:DI (match_operand:DI 1 "register_operand" "r")
    410  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "tp32_symbolic_operand" "")))]
    411  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
    412  1.1.1.1.4.2  yamt   "lda %0,%2(%1)\t\t!tprello")
    413  1.1.1.1.4.2  yamt 
    414  1.1.1.1.4.2  yamt (define_insn "*adddi_er_high_l"
    415  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    416  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "r")
    417  1.1.1.1.4.2  yamt 		 (high:DI (match_operand:DI 2 "local_symbolic_operand" ""))))]
    418  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && reload_completed"
    419  1.1.1.1.4.2  yamt   "ldah %0,%2(%1)\t\t!gprelhigh"
    420  1.1.1.1.4.2  yamt   [(set_attr "usegp" "yes")])
    421  1.1.1.1.4.2  yamt 
    422  1.1.1.1.4.2  yamt (define_split
    423  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    424  1.1.1.1.4.2  yamt         (high:DI (match_operand:DI 1 "local_symbolic_operand" "")))]
    425  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && reload_completed"
    426  1.1.1.1.4.2  yamt   [(set (match_dup 0)
    427  1.1.1.1.4.2  yamt 	(plus:DI (match_dup 2) (high:DI (match_dup 1))))]
    428  1.1.1.1.4.2  yamt   "operands[2] = pic_offset_table_rtx;")
    429  1.1.1.1.4.2  yamt 
    430  1.1.1.1.4.2  yamt ;; We used to expend quite a lot of effort choosing addq/subq/lda.
    431  1.1.1.1.4.2  yamt ;; With complications like
    432  1.1.1.1.4.2  yamt ;;
    433  1.1.1.1.4.2  yamt ;;   The NT stack unwind code can't handle a subq to adjust the stack
    434  1.1.1.1.4.2  yamt ;;   (that's a bug, but not one we can do anything about).  As of NT4.0 SP3,
    435  1.1.1.1.4.2  yamt ;;   the exception handling code will loop if a subq is used and an
    436  1.1.1.1.4.2  yamt ;;   exception occurs.
    437  1.1.1.1.4.2  yamt ;;
    438  1.1.1.1.4.2  yamt ;;   The 19980616 change to emit prologues as RTL also confused some
    439  1.1.1.1.4.2  yamt ;;   versions of GDB, which also interprets prologues.  This has been
    440  1.1.1.1.4.2  yamt ;;   fixed as of GDB 4.18, but it does not harm to unconditionally
    441  1.1.1.1.4.2  yamt ;;   use lda here.
    442  1.1.1.1.4.2  yamt ;;
    443  1.1.1.1.4.2  yamt ;; and the fact that the three insns schedule exactly the same, it's
    444  1.1.1.1.4.2  yamt ;; just not worth the effort.
    445  1.1.1.1.4.2  yamt 
    446  1.1.1.1.4.2  yamt (define_insn "*adddi_internal"
    447  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
    448  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "%r,r,r")
    449  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "add_operand" "r,K,L")))]
    450  1.1.1.1.4.2  yamt   ""
    451  1.1.1.1.4.2  yamt   "@
    452  1.1.1.1.4.2  yamt    addq %1,%2,%0
    453  1.1.1.1.4.2  yamt    lda %0,%2(%1)
    454  1.1.1.1.4.2  yamt    ldah %0,%h2(%1)")
    455  1.1.1.1.4.2  yamt 
    456  1.1.1.1.4.2  yamt ;; ??? Allow large constants when basing off the frame pointer or some
    457  1.1.1.1.4.2  yamt ;; virtual register that may eliminate to the frame pointer.  This is
    458  1.1.1.1.4.2  yamt ;; done because register elimination offsets will change the hi/lo split,
    459  1.1.1.1.4.2  yamt ;; and if we split before reload, we will require additional instructions.
    460  1.1.1.1.4.2  yamt 
    461  1.1.1.1.4.2  yamt (define_insn "*adddi_fp_hack"
    462  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
    463  1.1.1.1.4.2  yamt         (plus:DI (match_operand:DI 1 "reg_no_subreg_operand" "r,r,r")
    464  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "const_int_operand" "K,L,n")))]
    465  1.1.1.1.4.2  yamt   "NONSTRICT_REG_OK_FP_BASE_P (operands[1])
    466  1.1.1.1.4.2  yamt    && INTVAL (operands[2]) >= 0
    467  1.1.1.1.4.2  yamt    /* This is the largest constant an lda+ldah pair can add, minus
    468  1.1.1.1.4.2  yamt       an upper bound on the displacement between SP and AP during
    469  1.1.1.1.4.2  yamt       register elimination.  See INITIAL_ELIMINATION_OFFSET.  */
    470  1.1.1.1.4.2  yamt    && INTVAL (operands[2])
    471  1.1.1.1.4.2  yamt 	< (0x7fff8000
    472  1.1.1.1.4.2  yamt 	   - FIRST_PSEUDO_REGISTER * UNITS_PER_WORD
    473  1.1.1.1.4.2  yamt 	   - ALPHA_ROUND(crtl->outgoing_args_size)
    474  1.1.1.1.4.2  yamt 	   - (ALPHA_ROUND (get_frame_size ()
    475  1.1.1.1.4.2  yamt 			   + max_reg_num () * UNITS_PER_WORD
    476  1.1.1.1.4.2  yamt 			   + crtl->args.pretend_args_size)
    477  1.1.1.1.4.2  yamt 	      - crtl->args.pretend_args_size))"
    478  1.1.1.1.4.2  yamt   "@
    479  1.1.1.1.4.2  yamt    lda %0,%2(%1)
    480  1.1.1.1.4.2  yamt    ldah %0,%h2(%1)
    481  1.1.1.1.4.2  yamt    #")
    482  1.1.1.1.4.2  yamt 
    483  1.1.1.1.4.2  yamt ;; Don't do this if we are adjusting SP since we don't want to do it
    484  1.1.1.1.4.2  yamt ;; in two steps.  Don't split FP sources for the reason listed above.
    485  1.1.1.1.4.2  yamt (define_split
    486  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    487  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "")
    488  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "const_int_operand" "")))]
    489  1.1.1.1.4.2  yamt   "! add_operand (operands[2], DImode)
    490  1.1.1.1.4.2  yamt    && operands[0] != stack_pointer_rtx
    491  1.1.1.1.4.2  yamt    && operands[1] != frame_pointer_rtx
    492  1.1.1.1.4.2  yamt    && operands[1] != arg_pointer_rtx"
    493  1.1.1.1.4.2  yamt   [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 3)))
    494  1.1.1.1.4.2  yamt    (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))]
    495  1.1.1.1.4.2  yamt {
    496  1.1.1.1.4.2  yamt   HOST_WIDE_INT val = INTVAL (operands[2]);
    497  1.1.1.1.4.2  yamt   HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000);
    498  1.1.1.1.4.2  yamt   HOST_WIDE_INT rest = val - low;
    499  1.1.1.1.4.2  yamt   rtx rest_rtx = GEN_INT (rest);
    500  1.1.1.1.4.2  yamt 
    501  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (low);
    502  1.1.1.1.4.2  yamt   if (satisfies_constraint_L (rest_rtx))
    503  1.1.1.1.4.2  yamt     operands[3] = rest_rtx;
    504  1.1.1.1.4.2  yamt   else if (can_create_pseudo_p ())
    505  1.1.1.1.4.2  yamt     {
    506  1.1.1.1.4.2  yamt       operands[3] = gen_reg_rtx (DImode);
    507  1.1.1.1.4.2  yamt       emit_move_insn (operands[3], operands[2]);
    508  1.1.1.1.4.2  yamt       emit_insn (gen_adddi3 (operands[0], operands[1], operands[3]));
    509  1.1.1.1.4.2  yamt       DONE;
    510  1.1.1.1.4.2  yamt     }
    511  1.1.1.1.4.2  yamt   else
    512  1.1.1.1.4.2  yamt     FAIL;
    513  1.1.1.1.4.2  yamt })
    514  1.1.1.1.4.2  yamt 
    515  1.1.1.1.4.2  yamt (define_insn "*saddl"
    516  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
    517  1.1.1.1.4.2  yamt 	(plus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r,r")
    518  1.1.1.1.4.2  yamt 			  (match_operand:SI 2 "const48_operand" "I,I"))
    519  1.1.1.1.4.2  yamt 		 (match_operand:SI 3 "sext_add_operand" "rI,O")))]
    520  1.1.1.1.4.2  yamt   ""
    521  1.1.1.1.4.2  yamt   "@
    522  1.1.1.1.4.2  yamt    s%2addl %1,%3,%0
    523  1.1.1.1.4.2  yamt    s%2subl %1,%n3,%0")
    524  1.1.1.1.4.2  yamt 
    525  1.1.1.1.4.2  yamt (define_insn "*saddl_se"
    526  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
    527  1.1.1.1.4.2  yamt 	(sign_extend:DI
    528  1.1.1.1.4.2  yamt 	 (plus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r,r")
    529  1.1.1.1.4.2  yamt 			   (match_operand:SI 2 "const48_operand" "I,I"))
    530  1.1.1.1.4.2  yamt 		  (match_operand:SI 3 "sext_add_operand" "rI,O"))))]
    531  1.1.1.1.4.2  yamt   ""
    532  1.1.1.1.4.2  yamt   "@
    533  1.1.1.1.4.2  yamt    s%2addl %1,%3,%0
    534  1.1.1.1.4.2  yamt    s%2subl %1,%n3,%0")
    535  1.1.1.1.4.2  yamt 
    536  1.1.1.1.4.2  yamt (define_split
    537  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    538  1.1.1.1.4.2  yamt 	(sign_extend:DI
    539  1.1.1.1.4.2  yamt 	 (plus:SI (mult:SI (match_operator:SI 1 "comparison_operator"
    540  1.1.1.1.4.2  yamt 					      [(match_operand 2 "" "")
    541  1.1.1.1.4.2  yamt 					       (match_operand 3 "" "")])
    542  1.1.1.1.4.2  yamt 			   (match_operand:SI 4 "const48_operand" ""))
    543  1.1.1.1.4.2  yamt 		  (match_operand:SI 5 "sext_add_operand" ""))))
    544  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 6 "reg_not_elim_operand" ""))]
    545  1.1.1.1.4.2  yamt   ""
    546  1.1.1.1.4.2  yamt   [(set (match_dup 6) (match_dup 7))
    547  1.1.1.1.4.2  yamt    (set (match_dup 0)
    548  1.1.1.1.4.2  yamt 	(sign_extend:DI (plus:SI (mult:SI (match_dup 8) (match_dup 4))
    549  1.1.1.1.4.2  yamt 				 (match_dup 5))))]
    550  1.1.1.1.4.2  yamt {
    551  1.1.1.1.4.2  yamt   operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[1]), DImode,
    552  1.1.1.1.4.2  yamt 				operands[2], operands[3]);
    553  1.1.1.1.4.2  yamt   operands[8] = gen_lowpart (SImode, operands[6]);
    554  1.1.1.1.4.2  yamt })
    555  1.1.1.1.4.2  yamt 
    556  1.1.1.1.4.2  yamt (define_insn "*saddq"
    557  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
    558  1.1.1.1.4.2  yamt 	(plus:DI (mult:DI (match_operand:DI 1 "reg_not_elim_operand" "r,r")
    559  1.1.1.1.4.2  yamt 			  (match_operand:DI 2 "const48_operand" "I,I"))
    560  1.1.1.1.4.2  yamt 		 (match_operand:DI 3 "sext_add_operand" "rI,O")))]
    561  1.1.1.1.4.2  yamt   ""
    562  1.1.1.1.4.2  yamt   "@
    563  1.1.1.1.4.2  yamt    s%2addq %1,%3,%0
    564  1.1.1.1.4.2  yamt    s%2subq %1,%n3,%0")
    565  1.1.1.1.4.2  yamt 
    566  1.1.1.1.4.2  yamt (define_insn "addvdi3"
    567  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
    568  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ")
    569  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "sext_add_operand" "rI,O")))
    570  1.1.1.1.4.2  yamt    (trap_if (ne (plus:TI (sign_extend:TI (match_dup 1))
    571  1.1.1.1.4.2  yamt 			 (sign_extend:TI (match_dup 2)))
    572  1.1.1.1.4.2  yamt 		(sign_extend:TI (plus:DI (match_dup 1)
    573  1.1.1.1.4.2  yamt 					 (match_dup 2))))
    574  1.1.1.1.4.2  yamt 	    (const_int 0))]
    575  1.1.1.1.4.2  yamt   ""
    576  1.1.1.1.4.2  yamt   "@
    577  1.1.1.1.4.2  yamt    addqv %r1,%2,%0
    578  1.1.1.1.4.2  yamt    subqv %r1,%n2,%0")
    579  1.1.1.1.4.2  yamt 
    580  1.1.1.1.4.2  yamt (define_insn "negsi2"
    581  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
    582  1.1.1.1.4.2  yamt 	(neg:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI")))]
    583  1.1.1.1.4.2  yamt   ""
    584  1.1.1.1.4.2  yamt   "subl $31,%1,%0")
    585  1.1.1.1.4.2  yamt 
    586  1.1.1.1.4.2  yamt (define_insn "*negsi_se"
    587  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    588  1.1.1.1.4.2  yamt 	(sign_extend:DI (neg:SI
    589  1.1.1.1.4.2  yamt 			 (match_operand:SI 1 "reg_or_8bit_operand" "rI"))))]
    590  1.1.1.1.4.2  yamt   ""
    591  1.1.1.1.4.2  yamt   "subl $31,%1,%0")
    592  1.1.1.1.4.2  yamt 
    593  1.1.1.1.4.2  yamt (define_insn "negvsi2"
    594  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
    595  1.1.1.1.4.2  yamt 	(neg:SI (match_operand:SI 1 "register_operand" "r")))
    596  1.1.1.1.4.2  yamt    (trap_if (ne (neg:DI (sign_extend:DI (match_dup 1)))
    597  1.1.1.1.4.2  yamt 		(sign_extend:DI (neg:SI (match_dup 1))))
    598  1.1.1.1.4.2  yamt 	    (const_int 0))]
    599  1.1.1.1.4.2  yamt   ""
    600  1.1.1.1.4.2  yamt   "sublv $31,%1,%0")
    601  1.1.1.1.4.2  yamt 
    602  1.1.1.1.4.2  yamt (define_insn "negdi2"
    603  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    604  1.1.1.1.4.2  yamt 	(neg:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")))]
    605  1.1.1.1.4.2  yamt   ""
    606  1.1.1.1.4.2  yamt   "subq $31,%1,%0")
    607  1.1.1.1.4.2  yamt 
    608  1.1.1.1.4.2  yamt (define_insn "negvdi2"
    609  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    610  1.1.1.1.4.2  yamt 	(neg:DI (match_operand:DI 1 "register_operand" "r")))
    611  1.1.1.1.4.2  yamt    (trap_if (ne (neg:TI (sign_extend:TI (match_dup 1)))
    612  1.1.1.1.4.2  yamt 		(sign_extend:TI (neg:DI (match_dup 1))))
    613  1.1.1.1.4.2  yamt 	    (const_int 0))]
    614  1.1.1.1.4.2  yamt   ""
    615  1.1.1.1.4.2  yamt   "subqv $31,%1,%0")
    616  1.1.1.1.4.2  yamt 
    617  1.1.1.1.4.2  yamt (define_insn "subsi3"
    618  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
    619  1.1.1.1.4.2  yamt 	(minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
    620  1.1.1.1.4.2  yamt 		  (match_operand:SI 2 "reg_or_8bit_operand" "rI")))]
    621  1.1.1.1.4.2  yamt   ""
    622  1.1.1.1.4.2  yamt   "subl %r1,%2,%0")
    623  1.1.1.1.4.2  yamt 
    624  1.1.1.1.4.2  yamt (define_insn "*subsi_se"
    625  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    626  1.1.1.1.4.2  yamt 	(sign_extend:DI (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
    627  1.1.1.1.4.2  yamt 				  (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))]
    628  1.1.1.1.4.2  yamt   ""
    629  1.1.1.1.4.2  yamt   "subl %r1,%2,%0")
    630  1.1.1.1.4.2  yamt 
    631  1.1.1.1.4.2  yamt (define_insn "*subsi_se2"
    632  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    633  1.1.1.1.4.2  yamt 	(sign_extend:DI
    634  1.1.1.1.4.2  yamt 	 (subreg:SI (minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
    635  1.1.1.1.4.2  yamt 			      (match_operand:DI 2 "reg_or_8bit_operand" "rI"))
    636  1.1.1.1.4.2  yamt 		    0)))]
    637  1.1.1.1.4.2  yamt   ""
    638  1.1.1.1.4.2  yamt   "subl %r1,%2,%0")
    639  1.1.1.1.4.2  yamt 
    640  1.1.1.1.4.2  yamt (define_insn "subvsi3"
    641  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
    642  1.1.1.1.4.2  yamt 	(minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
    643  1.1.1.1.4.2  yamt 		  (match_operand:SI 2 "reg_or_8bit_operand" "rI")))
    644  1.1.1.1.4.2  yamt    (trap_if (ne (minus:DI (sign_extend:DI (match_dup 1))
    645  1.1.1.1.4.2  yamt 			  (sign_extend:DI (match_dup 2)))
    646  1.1.1.1.4.2  yamt 		(sign_extend:DI (minus:SI (match_dup 1)
    647  1.1.1.1.4.2  yamt 					  (match_dup 2))))
    648  1.1.1.1.4.2  yamt 	    (const_int 0))]
    649  1.1.1.1.4.2  yamt   ""
    650  1.1.1.1.4.2  yamt   "sublv %r1,%2,%0")
    651  1.1.1.1.4.2  yamt 
    652  1.1.1.1.4.2  yamt (define_insn "subdi3"
    653  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    654  1.1.1.1.4.2  yamt 	(minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
    655  1.1.1.1.4.2  yamt 		  (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
    656  1.1.1.1.4.2  yamt   ""
    657  1.1.1.1.4.2  yamt   "subq %r1,%2,%0")
    658  1.1.1.1.4.2  yamt 
    659  1.1.1.1.4.2  yamt (define_insn "*ssubl"
    660  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
    661  1.1.1.1.4.2  yamt 	(minus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r")
    662  1.1.1.1.4.2  yamt 			   (match_operand:SI 2 "const48_operand" "I"))
    663  1.1.1.1.4.2  yamt 		  (match_operand:SI 3 "reg_or_8bit_operand" "rI")))]
    664  1.1.1.1.4.2  yamt   ""
    665  1.1.1.1.4.2  yamt   "s%2subl %1,%3,%0")
    666  1.1.1.1.4.2  yamt 
    667  1.1.1.1.4.2  yamt (define_insn "*ssubl_se"
    668  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    669  1.1.1.1.4.2  yamt 	(sign_extend:DI
    670  1.1.1.1.4.2  yamt 	 (minus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r")
    671  1.1.1.1.4.2  yamt 			    (match_operand:SI 2 "const48_operand" "I"))
    672  1.1.1.1.4.2  yamt 		   (match_operand:SI 3 "reg_or_8bit_operand" "rI"))))]
    673  1.1.1.1.4.2  yamt   ""
    674  1.1.1.1.4.2  yamt   "s%2subl %1,%3,%0")
    675  1.1.1.1.4.2  yamt 
    676  1.1.1.1.4.2  yamt (define_insn "*ssubq"
    677  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    678  1.1.1.1.4.2  yamt 	(minus:DI (mult:DI (match_operand:DI 1 "reg_not_elim_operand" "r")
    679  1.1.1.1.4.2  yamt 			   (match_operand:DI 2 "const48_operand" "I"))
    680  1.1.1.1.4.2  yamt 		  (match_operand:DI 3 "reg_or_8bit_operand" "rI")))]
    681  1.1.1.1.4.2  yamt   ""
    682  1.1.1.1.4.2  yamt   "s%2subq %1,%3,%0")
    683  1.1.1.1.4.2  yamt 
    684  1.1.1.1.4.2  yamt (define_insn "subvdi3"
    685  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    686  1.1.1.1.4.2  yamt 	(minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
    687  1.1.1.1.4.2  yamt 		  (match_operand:DI 2 "reg_or_8bit_operand" "rI")))
    688  1.1.1.1.4.2  yamt    (trap_if (ne (minus:TI (sign_extend:TI (match_dup 1))
    689  1.1.1.1.4.2  yamt 			  (sign_extend:TI (match_dup 2)))
    690  1.1.1.1.4.2  yamt 		(sign_extend:TI (minus:DI (match_dup 1)
    691  1.1.1.1.4.2  yamt 					  (match_dup 2))))
    692  1.1.1.1.4.2  yamt 	    (const_int 0))]
    693  1.1.1.1.4.2  yamt   ""
    694  1.1.1.1.4.2  yamt   "subqv %r1,%2,%0")
    695  1.1.1.1.4.2  yamt 
    696  1.1.1.1.4.2  yamt ;; The Unicos/Mk assembler doesn't support mull.
    697  1.1.1.1.4.2  yamt 
    698  1.1.1.1.4.2  yamt (define_insn "mulsi3"
    699  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
    700  1.1.1.1.4.2  yamt 	(mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ")
    701  1.1.1.1.4.2  yamt 		 (match_operand:SI 2 "reg_or_8bit_operand" "rI")))]
    702  1.1.1.1.4.2  yamt   "!TARGET_ABI_UNICOSMK"
    703  1.1.1.1.4.2  yamt   "mull %r1,%2,%0"
    704  1.1.1.1.4.2  yamt   [(set_attr "type" "imul")
    705  1.1.1.1.4.2  yamt    (set_attr "opsize" "si")])
    706  1.1.1.1.4.2  yamt 
    707  1.1.1.1.4.2  yamt (define_insn "*mulsi_se"
    708  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    709  1.1.1.1.4.2  yamt 	(sign_extend:DI
    710  1.1.1.1.4.2  yamt 	  (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ")
    711  1.1.1.1.4.2  yamt 		   (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))]
    712  1.1.1.1.4.2  yamt   "!TARGET_ABI_UNICOSMK"
    713  1.1.1.1.4.2  yamt   "mull %r1,%2,%0"
    714  1.1.1.1.4.2  yamt   [(set_attr "type" "imul")
    715  1.1.1.1.4.2  yamt    (set_attr "opsize" "si")])
    716  1.1.1.1.4.2  yamt 
    717  1.1.1.1.4.2  yamt (define_insn "mulvsi3"
    718  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
    719  1.1.1.1.4.2  yamt 	(mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ")
    720  1.1.1.1.4.2  yamt 		 (match_operand:SI 2 "reg_or_8bit_operand" "rI")))
    721  1.1.1.1.4.2  yamt    (trap_if (ne (mult:DI (sign_extend:DI (match_dup 1))
    722  1.1.1.1.4.2  yamt 			 (sign_extend:DI (match_dup 2)))
    723  1.1.1.1.4.2  yamt 		(sign_extend:DI (mult:SI (match_dup 1)
    724  1.1.1.1.4.2  yamt 					 (match_dup 2))))
    725  1.1.1.1.4.2  yamt 	    (const_int 0))]
    726  1.1.1.1.4.2  yamt   "!TARGET_ABI_UNICOSMK"
    727  1.1.1.1.4.2  yamt   "mullv %r1,%2,%0"
    728  1.1.1.1.4.2  yamt   [(set_attr "type" "imul")
    729  1.1.1.1.4.2  yamt    (set_attr "opsize" "si")])
    730  1.1.1.1.4.2  yamt 
    731  1.1.1.1.4.2  yamt (define_insn "muldi3"
    732  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    733  1.1.1.1.4.2  yamt 	(mult:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ")
    734  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
    735  1.1.1.1.4.2  yamt   ""
    736  1.1.1.1.4.2  yamt   "mulq %r1,%2,%0"
    737  1.1.1.1.4.2  yamt   [(set_attr "type" "imul")])
    738  1.1.1.1.4.2  yamt 
    739  1.1.1.1.4.2  yamt (define_insn "mulvdi3"
    740  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    741  1.1.1.1.4.2  yamt 	(mult:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ")
    742  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "reg_or_8bit_operand" "rI")))
    743  1.1.1.1.4.2  yamt    (trap_if (ne (mult:TI (sign_extend:TI (match_dup 1))
    744  1.1.1.1.4.2  yamt 			 (sign_extend:TI (match_dup 2)))
    745  1.1.1.1.4.2  yamt 		(sign_extend:TI (mult:DI (match_dup 1)
    746  1.1.1.1.4.2  yamt 					 (match_dup 2))))
    747  1.1.1.1.4.2  yamt 	    (const_int 0))]
    748  1.1.1.1.4.2  yamt   ""
    749  1.1.1.1.4.2  yamt   "mulqv %r1,%2,%0"
    750  1.1.1.1.4.2  yamt   [(set_attr "type" "imul")])
    751  1.1.1.1.4.2  yamt 
    752  1.1.1.1.4.2  yamt (define_expand "umuldi3_highpart"
    753  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
    754  1.1.1.1.4.2  yamt 	(truncate:DI
    755  1.1.1.1.4.2  yamt 	 (lshiftrt:TI
    756  1.1.1.1.4.2  yamt 	  (mult:TI (zero_extend:TI
    757  1.1.1.1.4.2  yamt 		     (match_operand:DI 1 "register_operand" ""))
    758  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "reg_or_8bit_operand" ""))
    759  1.1.1.1.4.2  yamt 	  (const_int 64))))]
    760  1.1.1.1.4.2  yamt   ""
    761  1.1.1.1.4.2  yamt {
    762  1.1.1.1.4.2  yamt   if (REG_P (operands[2]))
    763  1.1.1.1.4.2  yamt     operands[2] = gen_rtx_ZERO_EXTEND (TImode, operands[2]);
    764  1.1.1.1.4.2  yamt })
    765  1.1.1.1.4.2  yamt 
    766  1.1.1.1.4.2  yamt (define_insn "*umuldi3_highpart_reg"
    767  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    768  1.1.1.1.4.2  yamt 	(truncate:DI
    769  1.1.1.1.4.2  yamt 	 (lshiftrt:TI
    770  1.1.1.1.4.2  yamt 	  (mult:TI (zero_extend:TI
    771  1.1.1.1.4.2  yamt 		     (match_operand:DI 1 "register_operand" "r"))
    772  1.1.1.1.4.2  yamt 		   (zero_extend:TI
    773  1.1.1.1.4.2  yamt 		     (match_operand:DI 2 "register_operand" "r")))
    774  1.1.1.1.4.2  yamt 	  (const_int 64))))]
    775  1.1.1.1.4.2  yamt   ""
    776  1.1.1.1.4.2  yamt   "umulh %1,%2,%0"
    777  1.1.1.1.4.2  yamt   [(set_attr "type" "imul")
    778  1.1.1.1.4.2  yamt    (set_attr "opsize" "udi")])
    779  1.1.1.1.4.2  yamt 
    780  1.1.1.1.4.2  yamt (define_insn "*umuldi3_highpart_const"
    781  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
    782  1.1.1.1.4.2  yamt 	(truncate:DI
    783  1.1.1.1.4.2  yamt 	 (lshiftrt:TI
    784  1.1.1.1.4.2  yamt 	  (mult:TI (zero_extend:TI (match_operand:DI 1 "register_operand" "r"))
    785  1.1.1.1.4.2  yamt 		   (match_operand:TI 2 "cint8_operand" "I"))
    786  1.1.1.1.4.2  yamt 	  (const_int 64))))]
    787  1.1.1.1.4.2  yamt   ""
    788  1.1.1.1.4.2  yamt   "umulh %1,%2,%0"
    789  1.1.1.1.4.2  yamt   [(set_attr "type" "imul")
    790  1.1.1.1.4.2  yamt    (set_attr "opsize" "udi")])
    791  1.1.1.1.4.2  yamt 
    793  1.1.1.1.4.2  yamt ;; The divide and remainder operations take their inputs from r24 and
    794  1.1.1.1.4.2  yamt ;; r25, put their output in r27, and clobber r23 and r28 on all
    795  1.1.1.1.4.2  yamt ;; systems except Unicos/Mk. On Unicos, the standard library provides
    796  1.1.1.1.4.2  yamt ;; subroutines which use the standard calling convention and work on
    797  1.1.1.1.4.2  yamt ;; DImode operands.
    798  1.1.1.1.4.2  yamt 
    799  1.1.1.1.4.2  yamt ;; ??? Force sign-extension here because some versions of OSF/1 and
    800  1.1.1.1.4.2  yamt ;; Interix/NT don't do the right thing if the inputs are not properly
    801  1.1.1.1.4.2  yamt ;; sign-extended.  But Linux, for instance, does not have this
    802  1.1.1.1.4.2  yamt ;; problem.  Is it worth the complication here to eliminate the sign
    803  1.1.1.1.4.2  yamt ;; extension?
    804  1.1.1.1.4.2  yamt 
    805  1.1.1.1.4.2  yamt (define_expand "divsi3"
    806  1.1.1.1.4.2  yamt   [(set (match_dup 3)
    807  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))
    808  1.1.1.1.4.2  yamt    (set (match_dup 4)
    809  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))
    810  1.1.1.1.4.2  yamt    (parallel [(set (match_dup 5)
    811  1.1.1.1.4.2  yamt 		   (sign_extend:DI (div:SI (match_dup 3) (match_dup 4))))
    812  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    813  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])
    814  1.1.1.1.4.2  yamt    (set (match_operand:SI 0 "nonimmediate_operand" "")
    815  1.1.1.1.4.2  yamt 	(subreg:SI (match_dup 5) 0))]
    816  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    817  1.1.1.1.4.2  yamt {
    818  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
    819  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
    820  1.1.1.1.4.2  yamt   operands[5] = gen_reg_rtx (DImode);
    821  1.1.1.1.4.2  yamt })
    822  1.1.1.1.4.2  yamt 
    823  1.1.1.1.4.2  yamt (define_expand "udivsi3"
    824  1.1.1.1.4.2  yamt   [(set (match_dup 3)
    825  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))
    826  1.1.1.1.4.2  yamt    (set (match_dup 4)
    827  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))
    828  1.1.1.1.4.2  yamt    (parallel [(set (match_dup 5)
    829  1.1.1.1.4.2  yamt 		   (sign_extend:DI (udiv:SI (match_dup 3) (match_dup 4))))
    830  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    831  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])
    832  1.1.1.1.4.2  yamt    (set (match_operand:SI 0 "nonimmediate_operand" "")
    833  1.1.1.1.4.2  yamt 	(subreg:SI (match_dup 5) 0))]
    834  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    835  1.1.1.1.4.2  yamt {
    836  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
    837  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
    838  1.1.1.1.4.2  yamt   operands[5] = gen_reg_rtx (DImode);
    839  1.1.1.1.4.2  yamt })
    840  1.1.1.1.4.2  yamt 
    841  1.1.1.1.4.2  yamt (define_expand "modsi3"
    842  1.1.1.1.4.2  yamt   [(set (match_dup 3)
    843  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))
    844  1.1.1.1.4.2  yamt    (set (match_dup 4)
    845  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))
    846  1.1.1.1.4.2  yamt    (parallel [(set (match_dup 5)
    847  1.1.1.1.4.2  yamt 		   (sign_extend:DI (mod:SI (match_dup 3) (match_dup 4))))
    848  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    849  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])
    850  1.1.1.1.4.2  yamt    (set (match_operand:SI 0 "nonimmediate_operand" "")
    851  1.1.1.1.4.2  yamt 	(subreg:SI (match_dup 5) 0))]
    852  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    853  1.1.1.1.4.2  yamt {
    854  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
    855  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
    856  1.1.1.1.4.2  yamt   operands[5] = gen_reg_rtx (DImode);
    857  1.1.1.1.4.2  yamt })
    858  1.1.1.1.4.2  yamt 
    859  1.1.1.1.4.2  yamt (define_expand "umodsi3"
    860  1.1.1.1.4.2  yamt   [(set (match_dup 3)
    861  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))
    862  1.1.1.1.4.2  yamt    (set (match_dup 4)
    863  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))
    864  1.1.1.1.4.2  yamt    (parallel [(set (match_dup 5)
    865  1.1.1.1.4.2  yamt 		   (sign_extend:DI (umod:SI (match_dup 3) (match_dup 4))))
    866  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    867  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])
    868  1.1.1.1.4.2  yamt    (set (match_operand:SI 0 "nonimmediate_operand" "")
    869  1.1.1.1.4.2  yamt 	(subreg:SI (match_dup 5) 0))]
    870  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    871  1.1.1.1.4.2  yamt {
    872  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
    873  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
    874  1.1.1.1.4.2  yamt   operands[5] = gen_reg_rtx (DImode);
    875  1.1.1.1.4.2  yamt })
    876  1.1.1.1.4.2  yamt 
    877  1.1.1.1.4.2  yamt (define_expand "divdi3"
    878  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:DI 0 "register_operand" "")
    879  1.1.1.1.4.2  yamt 		   (div:DI (match_operand:DI 1 "register_operand" "")
    880  1.1.1.1.4.2  yamt 			   (match_operand:DI 2 "register_operand" "")))
    881  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    882  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])]
    883  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    884  1.1.1.1.4.2  yamt   "")
    885  1.1.1.1.4.2  yamt 
    886  1.1.1.1.4.2  yamt (define_expand "udivdi3"
    887  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:DI 0 "register_operand" "")
    888  1.1.1.1.4.2  yamt 		   (udiv:DI (match_operand:DI 1 "register_operand" "")
    889  1.1.1.1.4.2  yamt 			    (match_operand:DI 2 "register_operand" "")))
    890  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    891  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])]
    892  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    893  1.1.1.1.4.2  yamt   "")
    894  1.1.1.1.4.2  yamt 
    895  1.1.1.1.4.2  yamt (define_expand "moddi3"
    896  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
    897  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "register_operand" ""))
    898  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))]
    899  1.1.1.1.4.2  yamt   "!TARGET_ABI_OPEN_VMS"
    900  1.1.1.1.4.2  yamt {
    901  1.1.1.1.4.2  yamt   if (TARGET_ABI_UNICOSMK)
    902  1.1.1.1.4.2  yamt     emit_insn (gen_moddi3_umk (operands[0], operands[1], operands[2]));
    903  1.1.1.1.4.2  yamt   else
    904  1.1.1.1.4.2  yamt     emit_insn (gen_moddi3_dft (operands[0], operands[1], operands[2]));
    905  1.1.1.1.4.2  yamt   DONE;
    906  1.1.1.1.4.2  yamt })
    907  1.1.1.1.4.2  yamt 
    908  1.1.1.1.4.2  yamt (define_expand "moddi3_dft"
    909  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:DI 0 "register_operand" "")
    910  1.1.1.1.4.2  yamt 		   (mod:DI (match_operand:DI 1 "register_operand" "")
    911  1.1.1.1.4.2  yamt 			   (match_operand:DI 2 "register_operand" "")))
    912  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    913  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])]
    914  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    915  1.1.1.1.4.2  yamt   "")
    916  1.1.1.1.4.2  yamt 
    917  1.1.1.1.4.2  yamt ;; On Unicos/Mk, we do as the system's C compiler does:
    918  1.1.1.1.4.2  yamt ;; compute the quotient, multiply and subtract.
    919  1.1.1.1.4.2  yamt 
    920  1.1.1.1.4.2  yamt (define_expand "moddi3_umk"
    921  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
    922  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "register_operand" ""))
    923  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))]
    924  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
    925  1.1.1.1.4.2  yamt {
    926  1.1.1.1.4.2  yamt   rtx div, mul = gen_reg_rtx (DImode);
    927  1.1.1.1.4.2  yamt 
    928  1.1.1.1.4.2  yamt   div = expand_binop (DImode, sdiv_optab, operands[1], operands[2],
    929  1.1.1.1.4.2  yamt 		      NULL_RTX, 0, OPTAB_LIB);
    930  1.1.1.1.4.2  yamt   div = force_reg (DImode, div);
    931  1.1.1.1.4.2  yamt   emit_insn (gen_muldi3 (mul, operands[2], div));
    932  1.1.1.1.4.2  yamt   emit_insn (gen_subdi3 (operands[0], operands[1], mul));
    933  1.1.1.1.4.2  yamt   DONE;
    934  1.1.1.1.4.2  yamt })
    935  1.1.1.1.4.2  yamt 
    936  1.1.1.1.4.2  yamt (define_expand "umoddi3"
    937  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
    938  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "register_operand" ""))
    939  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))]
    940  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS"
    941  1.1.1.1.4.2  yamt {
    942  1.1.1.1.4.2  yamt   if (TARGET_ABI_UNICOSMK)
    943  1.1.1.1.4.2  yamt     emit_insn (gen_umoddi3_umk (operands[0], operands[1], operands[2]));
    944  1.1.1.1.4.2  yamt   else
    945  1.1.1.1.4.2  yamt     emit_insn (gen_umoddi3_dft (operands[0], operands[1], operands[2]));
    946  1.1.1.1.4.2  yamt   DONE;
    947  1.1.1.1.4.2  yamt })
    948  1.1.1.1.4.2  yamt 
    949  1.1.1.1.4.2  yamt (define_expand "umoddi3_dft"
    950  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:DI 0 "register_operand" "")
    951  1.1.1.1.4.2  yamt 		   (umod:DI (match_operand:DI 1 "register_operand" "")
    952  1.1.1.1.4.2  yamt 			    (match_operand:DI 2 "register_operand" "")))
    953  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    954  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])]
    955  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
    956  1.1.1.1.4.2  yamt   "")
    957  1.1.1.1.4.2  yamt 
    958  1.1.1.1.4.2  yamt (define_expand "umoddi3_umk"
    959  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
    960  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "register_operand" ""))
    961  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))]
    962  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
    963  1.1.1.1.4.2  yamt {
    964  1.1.1.1.4.2  yamt   rtx div, mul = gen_reg_rtx (DImode);
    965  1.1.1.1.4.2  yamt 
    966  1.1.1.1.4.2  yamt   div = expand_binop (DImode, udiv_optab, operands[1], operands[2],
    967  1.1.1.1.4.2  yamt 		      NULL_RTX, 1, OPTAB_LIB);
    968  1.1.1.1.4.2  yamt   div = force_reg (DImode, div);
    969  1.1.1.1.4.2  yamt   emit_insn (gen_muldi3 (mul, operands[2], div));
    970  1.1.1.1.4.2  yamt   emit_insn (gen_subdi3 (operands[0], operands[1], mul));
    971  1.1.1.1.4.2  yamt   DONE;
    972  1.1.1.1.4.2  yamt })
    973  1.1.1.1.4.2  yamt 
    974  1.1.1.1.4.2  yamt ;; Lengths of 8 for ldq $t12,__divq($gp); jsr $t9,($t12),__divq as
    975  1.1.1.1.4.2  yamt ;; expanded by the assembler.
    976  1.1.1.1.4.2  yamt 
    977  1.1.1.1.4.2  yamt (define_insn_and_split "*divmodsi_internal_er"
    978  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=c")
    979  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operator:SI 3 "divmod_operator"
    980  1.1.1.1.4.2  yamt 			[(match_operand:DI 1 "register_operand" "a")
    981  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "register_operand" "b")])))
    982  1.1.1.1.4.2  yamt    (clobber (reg:DI 23))
    983  1.1.1.1.4.2  yamt    (clobber (reg:DI 28))]
    984  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
    985  1.1.1.1.4.2  yamt   "#"
    986  1.1.1.1.4.2  yamt   "&& reload_completed"
    987  1.1.1.1.4.2  yamt   [(parallel [(set (match_dup 0)
    988  1.1.1.1.4.2  yamt 		   (sign_extend:DI (match_dup 3)))
    989  1.1.1.1.4.2  yamt 	      (use (match_dup 0))
    990  1.1.1.1.4.2  yamt 	      (use (match_dup 4))
    991  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
    992  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])]
    993  1.1.1.1.4.2  yamt {
    994  1.1.1.1.4.2  yamt   const char *str;
    995  1.1.1.1.4.2  yamt   switch (GET_CODE (operands[3]))
    996  1.1.1.1.4.2  yamt     {
    997  1.1.1.1.4.2  yamt     case DIV: 
    998  1.1.1.1.4.2  yamt       str = "__divl";
    999  1.1.1.1.4.2  yamt       break; 
   1000  1.1.1.1.4.2  yamt     case UDIV:
   1001  1.1.1.1.4.2  yamt       str = "__divlu";
   1002  1.1.1.1.4.2  yamt       break;
   1003  1.1.1.1.4.2  yamt     case MOD:
   1004  1.1.1.1.4.2  yamt       str = "__reml";
   1005  1.1.1.1.4.2  yamt       break;
   1006  1.1.1.1.4.2  yamt     case UMOD:
   1007  1.1.1.1.4.2  yamt       str = "__remlu";
   1008  1.1.1.1.4.2  yamt       break;
   1009  1.1.1.1.4.2  yamt     default:
   1010  1.1.1.1.4.2  yamt       gcc_unreachable ();
   1011  1.1.1.1.4.2  yamt     }
   1012  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (alpha_next_sequence_number++);
   1013  1.1.1.1.4.2  yamt   emit_insn (gen_movdi_er_high_g (operands[0], pic_offset_table_rtx,
   1014  1.1.1.1.4.2  yamt 				  gen_rtx_SYMBOL_REF (DImode, str),
   1015  1.1.1.1.4.2  yamt 				  operands[4]));
   1016  1.1.1.1.4.2  yamt }
   1017  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   1018  1.1.1.1.4.2  yamt    (set_attr "length" "8")])
   1019  1.1.1.1.4.2  yamt 
   1020  1.1.1.1.4.2  yamt (define_insn "*divmodsi_internal_er_1"
   1021  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=c")
   1022  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operator:SI 3 "divmod_operator"
   1023  1.1.1.1.4.2  yamt                         [(match_operand:DI 1 "register_operand" "a")
   1024  1.1.1.1.4.2  yamt                          (match_operand:DI 2 "register_operand" "b")])))
   1025  1.1.1.1.4.2  yamt    (use (match_operand:DI 4 "register_operand" "c"))
   1026  1.1.1.1.4.2  yamt    (use (match_operand 5 "const_int_operand" ""))
   1027  1.1.1.1.4.2  yamt    (clobber (reg:DI 23))
   1028  1.1.1.1.4.2  yamt    (clobber (reg:DI 28))]
   1029  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
   1030  1.1.1.1.4.2  yamt   "jsr $23,($27),__%E3%j5"
   1031  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   1032  1.1.1.1.4.2  yamt    (set_attr "length" "4")])
   1033  1.1.1.1.4.2  yamt 
   1034  1.1.1.1.4.2  yamt (define_insn "*divmodsi_internal"
   1035  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=c")
   1036  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operator:SI 3 "divmod_operator"
   1037  1.1.1.1.4.2  yamt 			[(match_operand:DI 1 "register_operand" "a")
   1038  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "register_operand" "b")])))
   1039  1.1.1.1.4.2  yamt    (clobber (reg:DI 23))
   1040  1.1.1.1.4.2  yamt    (clobber (reg:DI 28))]
   1041  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
   1042  1.1.1.1.4.2  yamt   "%E3 %1,%2,%0"
   1043  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   1044  1.1.1.1.4.2  yamt    (set_attr "length" "8")])
   1045  1.1.1.1.4.2  yamt 
   1046  1.1.1.1.4.2  yamt (define_insn_and_split "*divmoddi_internal_er"
   1047  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=c")
   1048  1.1.1.1.4.2  yamt 	(match_operator:DI 3 "divmod_operator"
   1049  1.1.1.1.4.2  yamt 			[(match_operand:DI 1 "register_operand" "a")
   1050  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "register_operand" "b")]))
   1051  1.1.1.1.4.2  yamt    (clobber (reg:DI 23))
   1052  1.1.1.1.4.2  yamt    (clobber (reg:DI 28))]
   1053  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
   1054  1.1.1.1.4.2  yamt   "#"
   1055  1.1.1.1.4.2  yamt   "&& reload_completed"
   1056  1.1.1.1.4.2  yamt   [(parallel [(set (match_dup 0) (match_dup 3))
   1057  1.1.1.1.4.2  yamt 	      (use (match_dup 0))
   1058  1.1.1.1.4.2  yamt 	      (use (match_dup 4))
   1059  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 23))
   1060  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 28))])]
   1061  1.1.1.1.4.2  yamt {
   1062  1.1.1.1.4.2  yamt   const char *str;
   1063  1.1.1.1.4.2  yamt   switch (GET_CODE (operands[3]))
   1064  1.1.1.1.4.2  yamt     {
   1065  1.1.1.1.4.2  yamt     case DIV: 
   1066  1.1.1.1.4.2  yamt       str = "__divq";
   1067  1.1.1.1.4.2  yamt       break; 
   1068  1.1.1.1.4.2  yamt     case UDIV:
   1069  1.1.1.1.4.2  yamt       str = "__divqu";
   1070  1.1.1.1.4.2  yamt       break;
   1071  1.1.1.1.4.2  yamt     case MOD:
   1072  1.1.1.1.4.2  yamt       str = "__remq";
   1073  1.1.1.1.4.2  yamt       break;
   1074  1.1.1.1.4.2  yamt     case UMOD:
   1075  1.1.1.1.4.2  yamt       str = "__remqu";
   1076  1.1.1.1.4.2  yamt       break;
   1077  1.1.1.1.4.2  yamt     default:
   1078  1.1.1.1.4.2  yamt       gcc_unreachable ();
   1079  1.1.1.1.4.2  yamt     }
   1080  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (alpha_next_sequence_number++);
   1081  1.1.1.1.4.2  yamt   emit_insn (gen_movdi_er_high_g (operands[0], pic_offset_table_rtx,
   1082  1.1.1.1.4.2  yamt 				  gen_rtx_SYMBOL_REF (DImode, str),
   1083  1.1.1.1.4.2  yamt 				  operands[4]));
   1084  1.1.1.1.4.2  yamt }
   1085  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   1086  1.1.1.1.4.2  yamt    (set_attr "length" "8")])
   1087  1.1.1.1.4.2  yamt 
   1088  1.1.1.1.4.2  yamt (define_insn "*divmoddi_internal_er_1"
   1089  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=c")
   1090  1.1.1.1.4.2  yamt 	(match_operator:DI 3 "divmod_operator"
   1091  1.1.1.1.4.2  yamt                         [(match_operand:DI 1 "register_operand" "a")
   1092  1.1.1.1.4.2  yamt                          (match_operand:DI 2 "register_operand" "b")]))
   1093  1.1.1.1.4.2  yamt    (use (match_operand:DI 4 "register_operand" "c"))
   1094  1.1.1.1.4.2  yamt    (use (match_operand 5 "const_int_operand" ""))
   1095  1.1.1.1.4.2  yamt    (clobber (reg:DI 23))
   1096  1.1.1.1.4.2  yamt    (clobber (reg:DI 28))]
   1097  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
   1098  1.1.1.1.4.2  yamt   "jsr $23,($27),__%E3%j5"
   1099  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   1100  1.1.1.1.4.2  yamt    (set_attr "length" "4")])
   1101  1.1.1.1.4.2  yamt 
   1102  1.1.1.1.4.2  yamt (define_insn "*divmoddi_internal"
   1103  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=c")
   1104  1.1.1.1.4.2  yamt 	(match_operator:DI 3 "divmod_operator"
   1105  1.1.1.1.4.2  yamt 			[(match_operand:DI 1 "register_operand" "a")
   1106  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "register_operand" "b")]))
   1107  1.1.1.1.4.2  yamt    (clobber (reg:DI 23))
   1108  1.1.1.1.4.2  yamt    (clobber (reg:DI 28))]
   1109  1.1.1.1.4.2  yamt   "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"
   1110  1.1.1.1.4.2  yamt   "%E3 %1,%2,%0"
   1111  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   1112  1.1.1.1.4.2  yamt    (set_attr "length" "8")])
   1113  1.1.1.1.4.2  yamt 
   1115  1.1.1.1.4.2  yamt ;; Next are the basic logical operations.  We only expose the DImode operations
   1116  1.1.1.1.4.2  yamt ;; to the rtl expanders, but SImode versions exist for combine as well as for
   1117  1.1.1.1.4.2  yamt ;; the atomic operation splitters.
   1118  1.1.1.1.4.2  yamt 
   1119  1.1.1.1.4.2  yamt (define_insn "*andsi_internal"
   1120  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r,r")
   1121  1.1.1.1.4.2  yamt 	(and:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,rJ,rJ")
   1122  1.1.1.1.4.2  yamt 		(match_operand:SI 2 "and_operand" "rI,N,MH")))]
   1123  1.1.1.1.4.2  yamt   ""
   1124  1.1.1.1.4.2  yamt   "@
   1125  1.1.1.1.4.2  yamt    and %r1,%2,%0
   1126  1.1.1.1.4.2  yamt    bic %r1,%N2,%0
   1127  1.1.1.1.4.2  yamt    zapnot %r1,%m2,%0"
   1128  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,ilog,shift")])
   1129  1.1.1.1.4.2  yamt 
   1130  1.1.1.1.4.2  yamt (define_insn "anddi3"
   1131  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r,r")
   1132  1.1.1.1.4.2  yamt 	(and:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ,rJ")
   1133  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "and_operand" "rI,N,MH")))]
   1134  1.1.1.1.4.2  yamt   ""
   1135  1.1.1.1.4.2  yamt   "@
   1136  1.1.1.1.4.2  yamt    and %r1,%2,%0
   1137  1.1.1.1.4.2  yamt    bic %r1,%N2,%0
   1138  1.1.1.1.4.2  yamt    zapnot %r1,%m2,%0"
   1139  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,ilog,shift")])
   1140  1.1.1.1.4.2  yamt 
   1141  1.1.1.1.4.2  yamt ;; There are times when we can split an AND into two AND insns.  This occurs
   1142  1.1.1.1.4.2  yamt ;; when we can first clear any bytes and then clear anything else.  For
   1143  1.1.1.1.4.2  yamt ;; example "I & 0xffff07" is "(I & 0xffffff) & 0xffffffffffffff07".
   1144  1.1.1.1.4.2  yamt ;; Only do this when running on 64-bit host since the computations are
   1145  1.1.1.1.4.2  yamt ;; too messy otherwise.
   1146  1.1.1.1.4.2  yamt 
   1147  1.1.1.1.4.2  yamt (define_split
   1148  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   1149  1.1.1.1.4.2  yamt 	(and:DI (match_operand:DI 1 "register_operand" "")
   1150  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "const_int_operand" "")))]
   1151  1.1.1.1.4.2  yamt   "HOST_BITS_PER_WIDE_INT == 64 && ! and_operand (operands[2], DImode)"
   1152  1.1.1.1.4.2  yamt   [(set (match_dup 0) (and:DI (match_dup 1) (match_dup 3)))
   1153  1.1.1.1.4.2  yamt    (set (match_dup 0) (and:DI (match_dup 0) (match_dup 4)))]
   1154  1.1.1.1.4.2  yamt {
   1155  1.1.1.1.4.2  yamt   unsigned HOST_WIDE_INT mask1 = INTVAL (operands[2]);
   1156  1.1.1.1.4.2  yamt   unsigned HOST_WIDE_INT mask2 = mask1;
   1157  1.1.1.1.4.2  yamt   int i;
   1158  1.1.1.1.4.2  yamt 
   1159  1.1.1.1.4.2  yamt   /* For each byte that isn't all zeros, make it all ones.  */
   1160  1.1.1.1.4.2  yamt   for (i = 0; i < 64; i += 8)
   1161  1.1.1.1.4.2  yamt     if ((mask1 & ((HOST_WIDE_INT) 0xff << i)) != 0)
   1162  1.1.1.1.4.2  yamt       mask1 |= (HOST_WIDE_INT) 0xff << i;
   1163  1.1.1.1.4.2  yamt 
   1164  1.1.1.1.4.2  yamt   /* Now turn on any bits we've just turned off.  */
   1165  1.1.1.1.4.2  yamt   mask2 |= ~ mask1;
   1166  1.1.1.1.4.2  yamt 
   1167  1.1.1.1.4.2  yamt   operands[3] = GEN_INT (mask1);
   1168  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (mask2);
   1169  1.1.1.1.4.2  yamt })
   1170  1.1.1.1.4.2  yamt 
   1171  1.1.1.1.4.2  yamt (define_expand "zero_extendqihi2"
   1172  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "")
   1173  1.1.1.1.4.2  yamt 	(zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]
   1174  1.1.1.1.4.2  yamt   ""
   1175  1.1.1.1.4.2  yamt {
   1176  1.1.1.1.4.2  yamt   if (! TARGET_BWX)
   1177  1.1.1.1.4.2  yamt     operands[1] = force_reg (QImode, operands[1]);
   1178  1.1.1.1.4.2  yamt })
   1179  1.1.1.1.4.2  yamt 
   1180  1.1.1.1.4.2  yamt (define_insn "*zero_extendqihi2_bwx"
   1181  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r,r")
   1182  1.1.1.1.4.2  yamt 	(zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
   1183  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1184  1.1.1.1.4.2  yamt   "@
   1185  1.1.1.1.4.2  yamt    and %1,0xff,%0
   1186  1.1.1.1.4.2  yamt    ldbu %0,%1"
   1187  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,ild")])
   1188  1.1.1.1.4.2  yamt 
   1189  1.1.1.1.4.2  yamt (define_insn "*zero_extendqihi2_nobwx"
   1190  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r")
   1191  1.1.1.1.4.2  yamt 	(zero_extend:HI (match_operand:QI 1 "register_operand" "r")))]
   1192  1.1.1.1.4.2  yamt   "! TARGET_BWX"
   1193  1.1.1.1.4.2  yamt   "and %1,0xff,%0"
   1194  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1195  1.1.1.1.4.2  yamt 
   1196  1.1.1.1.4.2  yamt (define_expand "zero_extendqisi2"
   1197  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "")
   1198  1.1.1.1.4.2  yamt 	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
   1199  1.1.1.1.4.2  yamt   ""
   1200  1.1.1.1.4.2  yamt {
   1201  1.1.1.1.4.2  yamt   if (! TARGET_BWX)
   1202  1.1.1.1.4.2  yamt     operands[1] = force_reg (QImode, operands[1]);
   1203  1.1.1.1.4.2  yamt })
   1204  1.1.1.1.4.2  yamt 
   1205  1.1.1.1.4.2  yamt (define_insn "*zero_extendqisi2_bwx"
   1206  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
   1207  1.1.1.1.4.2  yamt 	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
   1208  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1209  1.1.1.1.4.2  yamt   "@
   1210  1.1.1.1.4.2  yamt    and %1,0xff,%0
   1211  1.1.1.1.4.2  yamt    ldbu %0,%1"
   1212  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,ild")])
   1213  1.1.1.1.4.2  yamt 
   1214  1.1.1.1.4.2  yamt (define_insn "*zero_extendqisi2_nobwx"
   1215  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1216  1.1.1.1.4.2  yamt 	(zero_extend:SI (match_operand:QI 1 "register_operand" "r")))]
   1217  1.1.1.1.4.2  yamt   "! TARGET_BWX"
   1218  1.1.1.1.4.2  yamt   "and %1,0xff,%0"
   1219  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1220  1.1.1.1.4.2  yamt 
   1221  1.1.1.1.4.2  yamt (define_expand "zero_extendqidi2"
   1222  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   1223  1.1.1.1.4.2  yamt 	(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))]
   1224  1.1.1.1.4.2  yamt   ""
   1225  1.1.1.1.4.2  yamt {
   1226  1.1.1.1.4.2  yamt   if (! TARGET_BWX)
   1227  1.1.1.1.4.2  yamt     operands[1] = force_reg (QImode, operands[1]);
   1228  1.1.1.1.4.2  yamt })
   1229  1.1.1.1.4.2  yamt 
   1230  1.1.1.1.4.2  yamt (define_insn "*zero_extendqidi2_bwx"
   1231  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
   1232  1.1.1.1.4.2  yamt 	(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
   1233  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1234  1.1.1.1.4.2  yamt   "@
   1235  1.1.1.1.4.2  yamt    and %1,0xff,%0
   1236  1.1.1.1.4.2  yamt    ldbu %0,%1"
   1237  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,ild")])
   1238  1.1.1.1.4.2  yamt 
   1239  1.1.1.1.4.2  yamt (define_insn "*zero_extendqidi2_nobwx"
   1240  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1241  1.1.1.1.4.2  yamt 	(zero_extend:DI (match_operand:QI 1 "register_operand" "r")))]
   1242  1.1.1.1.4.2  yamt   "! TARGET_BWX"
   1243  1.1.1.1.4.2  yamt   "and %1,0xff,%0"
   1244  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1245  1.1.1.1.4.2  yamt 
   1246  1.1.1.1.4.2  yamt (define_expand "zero_extendhisi2"
   1247  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "")
   1248  1.1.1.1.4.2  yamt 	(zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))]
   1249  1.1.1.1.4.2  yamt   ""
   1250  1.1.1.1.4.2  yamt {
   1251  1.1.1.1.4.2  yamt   if (! TARGET_BWX)
   1252  1.1.1.1.4.2  yamt     operands[1] = force_reg (HImode, operands[1]);
   1253  1.1.1.1.4.2  yamt })
   1254  1.1.1.1.4.2  yamt 
   1255  1.1.1.1.4.2  yamt (define_insn "*zero_extendhisi2_bwx"
   1256  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
   1257  1.1.1.1.4.2  yamt 	(zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
   1258  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1259  1.1.1.1.4.2  yamt   "@
   1260  1.1.1.1.4.2  yamt    zapnot %1,3,%0
   1261  1.1.1.1.4.2  yamt    ldwu %0,%1"
   1262  1.1.1.1.4.2  yamt   [(set_attr "type" "shift,ild")])
   1263  1.1.1.1.4.2  yamt 
   1264  1.1.1.1.4.2  yamt (define_insn "*zero_extendhisi2_nobwx"
   1265  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1266  1.1.1.1.4.2  yamt 	(zero_extend:SI (match_operand:HI 1 "register_operand" "r")))]
   1267  1.1.1.1.4.2  yamt   "! TARGET_BWX"
   1268  1.1.1.1.4.2  yamt   "zapnot %1,3,%0"
   1269  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1270  1.1.1.1.4.2  yamt 
   1271  1.1.1.1.4.2  yamt (define_expand "zero_extendhidi2"
   1272  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   1273  1.1.1.1.4.2  yamt 	(zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "")))]
   1274  1.1.1.1.4.2  yamt   ""
   1275  1.1.1.1.4.2  yamt {
   1276  1.1.1.1.4.2  yamt   if (! TARGET_BWX)
   1277  1.1.1.1.4.2  yamt     operands[1] = force_reg (HImode, operands[1]);
   1278  1.1.1.1.4.2  yamt })
   1279  1.1.1.1.4.2  yamt 
   1280  1.1.1.1.4.2  yamt (define_insn "*zero_extendhidi2_bwx"
   1281  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
   1282  1.1.1.1.4.2  yamt 	(zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
   1283  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1284  1.1.1.1.4.2  yamt   "@
   1285  1.1.1.1.4.2  yamt    zapnot %1,3,%0
   1286  1.1.1.1.4.2  yamt    ldwu %0,%1"
   1287  1.1.1.1.4.2  yamt   [(set_attr "type" "shift,ild")])
   1288  1.1.1.1.4.2  yamt 
   1289  1.1.1.1.4.2  yamt (define_insn "*zero_extendhidi2_nobwx"
   1290  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1291  1.1.1.1.4.2  yamt 	(zero_extend:DI (match_operand:HI 1 "register_operand" "r")))]
   1292  1.1.1.1.4.2  yamt   ""
   1293  1.1.1.1.4.2  yamt   "zapnot %1,3,%0"
   1294  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1295  1.1.1.1.4.2  yamt 
   1296  1.1.1.1.4.2  yamt (define_insn "zero_extendsidi2"
   1297  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1298  1.1.1.1.4.2  yamt 	(zero_extend:DI (match_operand:SI 1 "register_operand" "r")))]
   1299  1.1.1.1.4.2  yamt   ""
   1300  1.1.1.1.4.2  yamt   "zapnot %1,15,%0"
   1301  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1302  1.1.1.1.4.2  yamt 
   1303  1.1.1.1.4.2  yamt (define_insn "*andnotsi3"
   1304  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1305  1.1.1.1.4.2  yamt 	(and:SI (not:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI"))
   1306  1.1.1.1.4.2  yamt 		(match_operand:SI 2 "reg_or_0_operand" "rJ")))]
   1307  1.1.1.1.4.2  yamt   ""
   1308  1.1.1.1.4.2  yamt   "bic %r2,%1,%0"
   1309  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1310  1.1.1.1.4.2  yamt 
   1311  1.1.1.1.4.2  yamt (define_insn "andnotdi3"
   1312  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1313  1.1.1.1.4.2  yamt 	(and:DI (not:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI"))
   1314  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "reg_or_0_operand" "rJ")))]
   1315  1.1.1.1.4.2  yamt   ""
   1316  1.1.1.1.4.2  yamt   "bic %r2,%1,%0"
   1317  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1318  1.1.1.1.4.2  yamt 
   1319  1.1.1.1.4.2  yamt (define_insn "*iorsi_internal"
   1320  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
   1321  1.1.1.1.4.2  yamt 	(ior:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,rJ")
   1322  1.1.1.1.4.2  yamt 		(match_operand:SI 2 "or_operand" "rI,N")))]
   1323  1.1.1.1.4.2  yamt   ""
   1324  1.1.1.1.4.2  yamt   "@
   1325  1.1.1.1.4.2  yamt    bis %r1,%2,%0
   1326  1.1.1.1.4.2  yamt    ornot %r1,%N2,%0"
   1327  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1328  1.1.1.1.4.2  yamt 
   1329  1.1.1.1.4.2  yamt (define_insn "iordi3"
   1330  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
   1331  1.1.1.1.4.2  yamt 	(ior:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ")
   1332  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "or_operand" "rI,N")))]
   1333  1.1.1.1.4.2  yamt   ""
   1334  1.1.1.1.4.2  yamt   "@
   1335  1.1.1.1.4.2  yamt    bis %r1,%2,%0
   1336  1.1.1.1.4.2  yamt    ornot %r1,%N2,%0"
   1337  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1338  1.1.1.1.4.2  yamt 
   1339  1.1.1.1.4.2  yamt (define_insn "*one_cmplsi_internal"
   1340  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1341  1.1.1.1.4.2  yamt 	(not:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI")))]
   1342  1.1.1.1.4.2  yamt   ""
   1343  1.1.1.1.4.2  yamt   "ornot $31,%1,%0"
   1344  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1345  1.1.1.1.4.2  yamt 
   1346  1.1.1.1.4.2  yamt (define_insn "one_cmpldi2"
   1347  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1348  1.1.1.1.4.2  yamt 	(not:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")))]
   1349  1.1.1.1.4.2  yamt   ""
   1350  1.1.1.1.4.2  yamt   "ornot $31,%1,%0"
   1351  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1352  1.1.1.1.4.2  yamt 
   1353  1.1.1.1.4.2  yamt (define_insn "*iornotsi3"
   1354  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1355  1.1.1.1.4.2  yamt 	(ior:SI (not:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI"))
   1356  1.1.1.1.4.2  yamt 		(match_operand:SI 2 "reg_or_0_operand" "rJ")))]
   1357  1.1.1.1.4.2  yamt   ""
   1358  1.1.1.1.4.2  yamt   "ornot %r2,%1,%0"
   1359  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1360  1.1.1.1.4.2  yamt 
   1361  1.1.1.1.4.2  yamt (define_insn "*iornotdi3"
   1362  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1363  1.1.1.1.4.2  yamt 	(ior:DI (not:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI"))
   1364  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "reg_or_0_operand" "rJ")))]
   1365  1.1.1.1.4.2  yamt   ""
   1366  1.1.1.1.4.2  yamt   "ornot %r2,%1,%0"
   1367  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1368  1.1.1.1.4.2  yamt 
   1369  1.1.1.1.4.2  yamt (define_insn "*xorsi_internal"
   1370  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
   1371  1.1.1.1.4.2  yamt 	(xor:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ,rJ")
   1372  1.1.1.1.4.2  yamt 		(match_operand:SI 2 "or_operand" "rI,N")))]
   1373  1.1.1.1.4.2  yamt   ""
   1374  1.1.1.1.4.2  yamt   "@
   1375  1.1.1.1.4.2  yamt    xor %r1,%2,%0
   1376  1.1.1.1.4.2  yamt    eqv %r1,%N2,%0"
   1377  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1378  1.1.1.1.4.2  yamt 
   1379  1.1.1.1.4.2  yamt (define_insn "xordi3"
   1380  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
   1381  1.1.1.1.4.2  yamt 	(xor:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ")
   1382  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "or_operand" "rI,N")))]
   1383  1.1.1.1.4.2  yamt   ""
   1384  1.1.1.1.4.2  yamt   "@
   1385  1.1.1.1.4.2  yamt    xor %r1,%2,%0
   1386  1.1.1.1.4.2  yamt    eqv %r1,%N2,%0"
   1387  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1388  1.1.1.1.4.2  yamt 
   1389  1.1.1.1.4.2  yamt (define_insn "*xornotsi3"
   1390  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1391  1.1.1.1.4.2  yamt 	(not:SI (xor:SI (match_operand:SI 1 "register_operand" "%rJ")
   1392  1.1.1.1.4.2  yamt 			(match_operand:SI 2 "register_operand" "rI"))))]
   1393  1.1.1.1.4.2  yamt   ""
   1394  1.1.1.1.4.2  yamt   "eqv %r1,%2,%0"
   1395  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1396  1.1.1.1.4.2  yamt 
   1397  1.1.1.1.4.2  yamt (define_insn "*xornotdi3"
   1398  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1399  1.1.1.1.4.2  yamt 	(not:DI (xor:DI (match_operand:DI 1 "register_operand" "%rJ")
   1400  1.1.1.1.4.2  yamt 			(match_operand:DI 2 "register_operand" "rI"))))]
   1401  1.1.1.1.4.2  yamt   ""
   1402  1.1.1.1.4.2  yamt   "eqv %r1,%2,%0"
   1403  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   1404  1.1.1.1.4.2  yamt 
   1406  1.1.1.1.4.2  yamt ;; Handle FFS and related insns iff we support CIX.
   1407  1.1.1.1.4.2  yamt 
   1408  1.1.1.1.4.2  yamt (define_expand "ffsdi2"
   1409  1.1.1.1.4.2  yamt   [(set (match_dup 2)
   1410  1.1.1.1.4.2  yamt 	(ctz:DI (match_operand:DI 1 "register_operand" "")))
   1411  1.1.1.1.4.2  yamt    (set (match_dup 3)
   1412  1.1.1.1.4.2  yamt 	(plus:DI (match_dup 2) (const_int 1)))
   1413  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   1414  1.1.1.1.4.2  yamt 	(if_then_else:DI (eq (match_dup 1) (const_int 0))
   1415  1.1.1.1.4.2  yamt 			 (const_int 0) (match_dup 3)))]
   1416  1.1.1.1.4.2  yamt   "TARGET_CIX"
   1417  1.1.1.1.4.2  yamt {
   1418  1.1.1.1.4.2  yamt   operands[2] = gen_reg_rtx (DImode);
   1419  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
   1420  1.1.1.1.4.2  yamt })
   1421  1.1.1.1.4.2  yamt 
   1422  1.1.1.1.4.2  yamt (define_insn "clzdi2"
   1423  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1424  1.1.1.1.4.2  yamt 	(clz:DI (match_operand:DI 1 "register_operand" "r")))]
   1425  1.1.1.1.4.2  yamt   "TARGET_CIX"
   1426  1.1.1.1.4.2  yamt   "ctlz %1,%0"
   1427  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   1428  1.1.1.1.4.2  yamt 
   1429  1.1.1.1.4.2  yamt (define_insn "ctzdi2"
   1430  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1431  1.1.1.1.4.2  yamt 	(ctz:DI (match_operand:DI 1 "register_operand" "r")))]
   1432  1.1.1.1.4.2  yamt   "TARGET_CIX"
   1433  1.1.1.1.4.2  yamt   "cttz %1,%0"
   1434  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   1435  1.1.1.1.4.2  yamt 
   1436  1.1.1.1.4.2  yamt (define_insn "popcountdi2"
   1437  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1438  1.1.1.1.4.2  yamt 	(popcount:DI (match_operand:DI 1 "register_operand" "r")))]
   1439  1.1.1.1.4.2  yamt   "TARGET_CIX"
   1440  1.1.1.1.4.2  yamt   "ctpop %1,%0"
   1441  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   1442  1.1.1.1.4.2  yamt 
   1443  1.1.1.1.4.2  yamt (define_expand "bswapsi2"
   1444  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "")
   1445  1.1.1.1.4.2  yamt 	(bswap:SI (match_operand:SI 1 "register_operand" "")))]
   1446  1.1.1.1.4.2  yamt   "!optimize_size"
   1447  1.1.1.1.4.2  yamt {
   1448  1.1.1.1.4.2  yamt   rtx t0, t1;
   1449  1.1.1.1.4.2  yamt 
   1450  1.1.1.1.4.2  yamt   t0 = gen_reg_rtx (DImode);
   1451  1.1.1.1.4.2  yamt   t1 = gen_reg_rtx (DImode);
   1452  1.1.1.1.4.2  yamt 
   1453  1.1.1.1.4.2  yamt   emit_insn (gen_insxh (t0, gen_lowpart (DImode, operands[1]),
   1454  1.1.1.1.4.2  yamt 			GEN_INT (32), GEN_INT (WORDS_BIG_ENDIAN ? 0 : 7)));
   1455  1.1.1.1.4.2  yamt   emit_insn (gen_inswl_const (t1, gen_lowpart (HImode, operands[1]),
   1456  1.1.1.1.4.2  yamt 			      GEN_INT (24)));
   1457  1.1.1.1.4.2  yamt   emit_insn (gen_iordi3 (t1, t0, t1));
   1458  1.1.1.1.4.2  yamt   emit_insn (gen_lshrdi3 (t0, t1, GEN_INT (16)));
   1459  1.1.1.1.4.2  yamt   emit_insn (gen_anddi3 (t1, t1, alpha_expand_zap_mask (0x5)));
   1460  1.1.1.1.4.2  yamt   emit_insn (gen_anddi3 (t0, t0, alpha_expand_zap_mask (0xa)));
   1461  1.1.1.1.4.2  yamt   emit_insn (gen_addsi3 (operands[0], gen_lowpart (SImode, t0),
   1462  1.1.1.1.4.2  yamt 			 gen_lowpart (SImode, t1)));
   1463  1.1.1.1.4.2  yamt   DONE;
   1464  1.1.1.1.4.2  yamt })
   1465  1.1.1.1.4.2  yamt 
   1466  1.1.1.1.4.2  yamt (define_expand "bswapdi2"
   1467  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   1468  1.1.1.1.4.2  yamt 	(bswap:DI (match_operand:DI 1 "register_operand" "")))]
   1469  1.1.1.1.4.2  yamt   "!optimize_size"
   1470  1.1.1.1.4.2  yamt {
   1471  1.1.1.1.4.2  yamt   rtx t0, t1;
   1472  1.1.1.1.4.2  yamt 
   1473  1.1.1.1.4.2  yamt   t0 = gen_reg_rtx (DImode);
   1474  1.1.1.1.4.2  yamt   t1 = gen_reg_rtx (DImode);
   1475  1.1.1.1.4.2  yamt 
   1476  1.1.1.1.4.2  yamt   /* This method of shifting and masking is not specific to Alpha, but
   1477  1.1.1.1.4.2  yamt      is only profitable on Alpha because of our handy byte zap insn.  */
   1478  1.1.1.1.4.2  yamt 
   1479  1.1.1.1.4.2  yamt   emit_insn (gen_lshrdi3 (t0, operands[1], GEN_INT (32)));
   1480  1.1.1.1.4.2  yamt   emit_insn (gen_ashldi3 (t1, operands[1], GEN_INT (32)));
   1481  1.1.1.1.4.2  yamt   emit_insn (gen_iordi3 (t1, t0, t1));
   1482  1.1.1.1.4.2  yamt 
   1483  1.1.1.1.4.2  yamt   emit_insn (gen_lshrdi3 (t0, t1, GEN_INT (16)));
   1484  1.1.1.1.4.2  yamt   emit_insn (gen_ashldi3 (t1, t1, GEN_INT (16)));
   1485  1.1.1.1.4.2  yamt   emit_insn (gen_anddi3 (t0, t0, alpha_expand_zap_mask (0xcc)));
   1486  1.1.1.1.4.2  yamt   emit_insn (gen_anddi3 (t1, t1, alpha_expand_zap_mask (0x33)));
   1487  1.1.1.1.4.2  yamt   emit_insn (gen_iordi3 (t1, t0, t1));
   1488  1.1.1.1.4.2  yamt 
   1489  1.1.1.1.4.2  yamt   emit_insn (gen_lshrdi3 (t0, t1, GEN_INT (8)));
   1490  1.1.1.1.4.2  yamt   emit_insn (gen_ashldi3 (t1, t1, GEN_INT (8)));
   1491  1.1.1.1.4.2  yamt   emit_insn (gen_anddi3 (t0, t0, alpha_expand_zap_mask (0xaa)));
   1492  1.1.1.1.4.2  yamt   emit_insn (gen_anddi3 (t1, t1, alpha_expand_zap_mask (0x55)));
   1493  1.1.1.1.4.2  yamt   emit_insn (gen_iordi3 (operands[0], t0, t1));
   1494  1.1.1.1.4.2  yamt   DONE;
   1495  1.1.1.1.4.2  yamt })
   1496  1.1.1.1.4.2  yamt 
   1498  1.1.1.1.4.2  yamt ;; Next come the shifts and the various extract and insert operations.
   1499  1.1.1.1.4.2  yamt 
   1500  1.1.1.1.4.2  yamt (define_insn "ashldi3"
   1501  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
   1502  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ")
   1503  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "reg_or_6bit_operand" "P,rS")))]
   1504  1.1.1.1.4.2  yamt   ""
   1505  1.1.1.1.4.2  yamt {
   1506  1.1.1.1.4.2  yamt   switch (which_alternative)
   1507  1.1.1.1.4.2  yamt     {
   1508  1.1.1.1.4.2  yamt     case 0:
   1509  1.1.1.1.4.2  yamt       if (operands[2] == const1_rtx)
   1510  1.1.1.1.4.2  yamt 	return "addq %r1,%r1,%0";
   1511  1.1.1.1.4.2  yamt       else
   1512  1.1.1.1.4.2  yamt 	return "s%P2addq %r1,0,%0";
   1513  1.1.1.1.4.2  yamt     case 1:
   1514  1.1.1.1.4.2  yamt       return "sll %r1,%2,%0";
   1515  1.1.1.1.4.2  yamt     default:
   1516  1.1.1.1.4.2  yamt       gcc_unreachable ();
   1517  1.1.1.1.4.2  yamt     }
   1518  1.1.1.1.4.2  yamt }
   1519  1.1.1.1.4.2  yamt   [(set_attr "type" "iadd,shift")])
   1520  1.1.1.1.4.2  yamt 
   1521  1.1.1.1.4.2  yamt (define_insn "*ashldi_se"
   1522  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1523  1.1.1.1.4.2  yamt 	(sign_extend:DI
   1524  1.1.1.1.4.2  yamt 	 (subreg:SI (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1525  1.1.1.1.4.2  yamt 			       (match_operand:DI 2 "const_int_operand" "P"))
   1526  1.1.1.1.4.2  yamt 		    0)))]
   1527  1.1.1.1.4.2  yamt   "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3"
   1528  1.1.1.1.4.2  yamt {
   1529  1.1.1.1.4.2  yamt   if (operands[2] == const1_rtx)
   1530  1.1.1.1.4.2  yamt     return "addl %r1,%r1,%0";
   1531  1.1.1.1.4.2  yamt   else
   1532  1.1.1.1.4.2  yamt     return "s%P2addl %r1,0,%0";
   1533  1.1.1.1.4.2  yamt }
   1534  1.1.1.1.4.2  yamt   [(set_attr "type" "iadd")])
   1535  1.1.1.1.4.2  yamt 
   1536  1.1.1.1.4.2  yamt (define_insn "lshrdi3"
   1537  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1538  1.1.1.1.4.2  yamt 	(lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1539  1.1.1.1.4.2  yamt 		     (match_operand:DI 2 "reg_or_6bit_operand" "rS")))]
   1540  1.1.1.1.4.2  yamt   ""
   1541  1.1.1.1.4.2  yamt   "srl %r1,%2,%0"
   1542  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1543  1.1.1.1.4.2  yamt 
   1544  1.1.1.1.4.2  yamt (define_insn "ashrdi3"
   1545  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1546  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1547  1.1.1.1.4.2  yamt 		     (match_operand:DI 2 "reg_or_6bit_operand" "rS")))]
   1548  1.1.1.1.4.2  yamt   ""
   1549  1.1.1.1.4.2  yamt   "sra %r1,%2,%0"
   1550  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1551  1.1.1.1.4.2  yamt 
   1552  1.1.1.1.4.2  yamt (define_expand "extendqihi2"
   1553  1.1.1.1.4.2  yamt   [(set (match_dup 2)
   1554  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:QI 1 "some_operand" "")
   1555  1.1.1.1.4.2  yamt 		   (const_int 56)))
   1556  1.1.1.1.4.2  yamt    (set (match_operand:HI 0 "register_operand" "")
   1557  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 2)
   1558  1.1.1.1.4.2  yamt 		     (const_int 56)))]
   1559  1.1.1.1.4.2  yamt   ""
   1560  1.1.1.1.4.2  yamt {
   1561  1.1.1.1.4.2  yamt   if (TARGET_BWX)
   1562  1.1.1.1.4.2  yamt     {
   1563  1.1.1.1.4.2  yamt       emit_insn (gen_extendqihi2x (operands[0],
   1564  1.1.1.1.4.2  yamt 				   force_reg (QImode, operands[1])));
   1565  1.1.1.1.4.2  yamt       DONE;
   1566  1.1.1.1.4.2  yamt     }
   1567  1.1.1.1.4.2  yamt 
   1568  1.1.1.1.4.2  yamt  /* If we have an unaligned MEM, extend to DImode (which we do
   1569  1.1.1.1.4.2  yamt      specially) and then copy to the result.  */
   1570  1.1.1.1.4.2  yamt   if (unaligned_memory_operand (operands[1], HImode))
   1571  1.1.1.1.4.2  yamt     {
   1572  1.1.1.1.4.2  yamt       rtx temp = gen_reg_rtx (DImode);
   1573  1.1.1.1.4.2  yamt 
   1574  1.1.1.1.4.2  yamt       emit_insn (gen_extendqidi2 (temp, operands[1]));
   1575  1.1.1.1.4.2  yamt       emit_move_insn (operands[0], gen_lowpart (HImode, temp));
   1576  1.1.1.1.4.2  yamt       DONE;
   1577  1.1.1.1.4.2  yamt     }
   1578  1.1.1.1.4.2  yamt 
   1579  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (DImode, operands[0]);
   1580  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1]));
   1581  1.1.1.1.4.2  yamt   operands[2] = gen_reg_rtx (DImode);
   1582  1.1.1.1.4.2  yamt })
   1583  1.1.1.1.4.2  yamt 
   1584  1.1.1.1.4.2  yamt (define_insn "extendqidi2x"
   1585  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1586  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:QI 1 "register_operand" "r")))]
   1587  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1588  1.1.1.1.4.2  yamt   "sextb %1,%0"
   1589  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1590  1.1.1.1.4.2  yamt 
   1591  1.1.1.1.4.2  yamt (define_insn "extendhidi2x"
   1592  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1593  1.1.1.1.4.2  yamt 	(sign_extend:DI (match_operand:HI 1 "register_operand" "r")))]
   1594  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1595  1.1.1.1.4.2  yamt   "sextw %1,%0"
   1596  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1597  1.1.1.1.4.2  yamt 
   1598  1.1.1.1.4.2  yamt (define_insn "extendqisi2x"
   1599  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1600  1.1.1.1.4.2  yamt 	(sign_extend:SI (match_operand:QI 1 "register_operand" "r")))]
   1601  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1602  1.1.1.1.4.2  yamt   "sextb %1,%0"
   1603  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1604  1.1.1.1.4.2  yamt 
   1605  1.1.1.1.4.2  yamt (define_insn "extendhisi2x"
   1606  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   1607  1.1.1.1.4.2  yamt 	(sign_extend:SI (match_operand:HI 1 "register_operand" "r")))]
   1608  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1609  1.1.1.1.4.2  yamt   "sextw %1,%0"
   1610  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1611  1.1.1.1.4.2  yamt 
   1612  1.1.1.1.4.2  yamt (define_insn "extendqihi2x"
   1613  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r")
   1614  1.1.1.1.4.2  yamt 	(sign_extend:HI (match_operand:QI 1 "register_operand" "r")))]
   1615  1.1.1.1.4.2  yamt   "TARGET_BWX"
   1616  1.1.1.1.4.2  yamt   "sextb %1,%0"
   1617  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1618  1.1.1.1.4.2  yamt 
   1619  1.1.1.1.4.2  yamt (define_expand "extendqisi2"
   1620  1.1.1.1.4.2  yamt   [(set (match_dup 2)
   1621  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:QI 1 "some_operand" "")
   1622  1.1.1.1.4.2  yamt 		   (const_int 56)))
   1623  1.1.1.1.4.2  yamt    (set (match_operand:SI 0 "register_operand" "")
   1624  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 2)
   1625  1.1.1.1.4.2  yamt 		     (const_int 56)))]
   1626  1.1.1.1.4.2  yamt   ""
   1627  1.1.1.1.4.2  yamt {
   1628  1.1.1.1.4.2  yamt   if (TARGET_BWX)
   1629  1.1.1.1.4.2  yamt     {
   1630  1.1.1.1.4.2  yamt       emit_insn (gen_extendqisi2x (operands[0],
   1631  1.1.1.1.4.2  yamt 				   force_reg (QImode, operands[1])));
   1632  1.1.1.1.4.2  yamt       DONE;
   1633  1.1.1.1.4.2  yamt     }
   1634  1.1.1.1.4.2  yamt 
   1635  1.1.1.1.4.2  yamt   /* If we have an unaligned MEM, extend to a DImode form of
   1636  1.1.1.1.4.2  yamt      the result (which we do specially).  */
   1637  1.1.1.1.4.2  yamt   if (unaligned_memory_operand (operands[1], QImode))
   1638  1.1.1.1.4.2  yamt     {
   1639  1.1.1.1.4.2  yamt       rtx temp = gen_reg_rtx (DImode);
   1640  1.1.1.1.4.2  yamt 
   1641  1.1.1.1.4.2  yamt       emit_insn (gen_extendqidi2 (temp, operands[1]));
   1642  1.1.1.1.4.2  yamt       emit_move_insn (operands[0], gen_lowpart (SImode, temp));
   1643  1.1.1.1.4.2  yamt       DONE;
   1644  1.1.1.1.4.2  yamt     }
   1645  1.1.1.1.4.2  yamt 
   1646  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (DImode, operands[0]);
   1647  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1]));
   1648  1.1.1.1.4.2  yamt   operands[2] = gen_reg_rtx (DImode);
   1649  1.1.1.1.4.2  yamt })
   1650  1.1.1.1.4.2  yamt 
   1651  1.1.1.1.4.2  yamt (define_expand "extendqidi2"
   1652  1.1.1.1.4.2  yamt   [(set (match_dup 2)
   1653  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:QI 1 "some_operand" "")
   1654  1.1.1.1.4.2  yamt 		   (const_int 56)))
   1655  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   1656  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 2)
   1657  1.1.1.1.4.2  yamt 		     (const_int 56)))]
   1658  1.1.1.1.4.2  yamt   ""
   1659  1.1.1.1.4.2  yamt {
   1660  1.1.1.1.4.2  yamt   if (TARGET_BWX)
   1661  1.1.1.1.4.2  yamt     {
   1662  1.1.1.1.4.2  yamt       emit_insn (gen_extendqidi2x (operands[0],
   1663  1.1.1.1.4.2  yamt 				   force_reg (QImode, operands[1])));
   1664  1.1.1.1.4.2  yamt       DONE;
   1665  1.1.1.1.4.2  yamt     }
   1666  1.1.1.1.4.2  yamt 
   1667  1.1.1.1.4.2  yamt   if (unaligned_memory_operand (operands[1], QImode))
   1668  1.1.1.1.4.2  yamt     {
   1669  1.1.1.1.4.2  yamt       rtx seq = gen_unaligned_extendqidi (operands[0], XEXP (operands[1], 0));
   1670  1.1.1.1.4.2  yamt       alpha_set_memflags (seq, operands[1]);
   1671  1.1.1.1.4.2  yamt       emit_insn (seq);
   1672  1.1.1.1.4.2  yamt       DONE;
   1673  1.1.1.1.4.2  yamt     }
   1674  1.1.1.1.4.2  yamt 
   1675  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1]));
   1676  1.1.1.1.4.2  yamt   operands[2] = gen_reg_rtx (DImode);
   1677  1.1.1.1.4.2  yamt })
   1678  1.1.1.1.4.2  yamt 
   1679  1.1.1.1.4.2  yamt (define_expand "extendhisi2"
   1680  1.1.1.1.4.2  yamt   [(set (match_dup 2)
   1681  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:HI 1 "some_operand" "")
   1682  1.1.1.1.4.2  yamt 		   (const_int 48)))
   1683  1.1.1.1.4.2  yamt    (set (match_operand:SI 0 "register_operand" "")
   1684  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 2)
   1685  1.1.1.1.4.2  yamt 		     (const_int 48)))]
   1686  1.1.1.1.4.2  yamt   ""
   1687  1.1.1.1.4.2  yamt {
   1688  1.1.1.1.4.2  yamt   if (TARGET_BWX)
   1689  1.1.1.1.4.2  yamt     {
   1690  1.1.1.1.4.2  yamt       emit_insn (gen_extendhisi2x (operands[0],
   1691  1.1.1.1.4.2  yamt 				   force_reg (HImode, operands[1])));
   1692  1.1.1.1.4.2  yamt       DONE;
   1693  1.1.1.1.4.2  yamt     }
   1694  1.1.1.1.4.2  yamt 
   1695  1.1.1.1.4.2  yamt   /* If we have an unaligned MEM, extend to a DImode form of
   1696  1.1.1.1.4.2  yamt      the result (which we do specially).  */
   1697  1.1.1.1.4.2  yamt   if (unaligned_memory_operand (operands[1], HImode))
   1698  1.1.1.1.4.2  yamt     {
   1699  1.1.1.1.4.2  yamt       rtx temp = gen_reg_rtx (DImode);
   1700  1.1.1.1.4.2  yamt 
   1701  1.1.1.1.4.2  yamt       emit_insn (gen_extendhidi2 (temp, operands[1]));
   1702  1.1.1.1.4.2  yamt       emit_move_insn (operands[0], gen_lowpart (SImode, temp));
   1703  1.1.1.1.4.2  yamt       DONE;
   1704  1.1.1.1.4.2  yamt     }
   1705  1.1.1.1.4.2  yamt 
   1706  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (DImode, operands[0]);
   1707  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (DImode, force_reg (HImode, operands[1]));
   1708  1.1.1.1.4.2  yamt   operands[2] = gen_reg_rtx (DImode);
   1709  1.1.1.1.4.2  yamt })
   1710  1.1.1.1.4.2  yamt 
   1711  1.1.1.1.4.2  yamt (define_expand "extendhidi2"
   1712  1.1.1.1.4.2  yamt   [(set (match_dup 2)
   1713  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:HI 1 "some_operand" "")
   1714  1.1.1.1.4.2  yamt 		   (const_int 48)))
   1715  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   1716  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 2)
   1717  1.1.1.1.4.2  yamt 		     (const_int 48)))]
   1718  1.1.1.1.4.2  yamt   ""
   1719  1.1.1.1.4.2  yamt {
   1720  1.1.1.1.4.2  yamt   if (TARGET_BWX)
   1721  1.1.1.1.4.2  yamt     {
   1722  1.1.1.1.4.2  yamt       emit_insn (gen_extendhidi2x (operands[0],
   1723  1.1.1.1.4.2  yamt 				   force_reg (HImode, operands[1])));
   1724  1.1.1.1.4.2  yamt       DONE;
   1725  1.1.1.1.4.2  yamt     }
   1726  1.1.1.1.4.2  yamt 
   1727  1.1.1.1.4.2  yamt   if (unaligned_memory_operand (operands[1], HImode))
   1728  1.1.1.1.4.2  yamt     {
   1729  1.1.1.1.4.2  yamt       rtx seq = gen_unaligned_extendhidi (operands[0], XEXP (operands[1], 0));
   1730  1.1.1.1.4.2  yamt 
   1731  1.1.1.1.4.2  yamt       alpha_set_memflags (seq, operands[1]);
   1732  1.1.1.1.4.2  yamt       emit_insn (seq);
   1733  1.1.1.1.4.2  yamt       DONE;
   1734  1.1.1.1.4.2  yamt     }
   1735  1.1.1.1.4.2  yamt 
   1736  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (DImode, force_reg (HImode, operands[1]));
   1737  1.1.1.1.4.2  yamt   operands[2] = gen_reg_rtx (DImode);
   1738  1.1.1.1.4.2  yamt })
   1739  1.1.1.1.4.2  yamt 
   1740  1.1.1.1.4.2  yamt ;; Here's how we sign extend an unaligned byte and halfword.  Doing this
   1741  1.1.1.1.4.2  yamt ;; as a pattern saves one instruction.  The code is similar to that for
   1742  1.1.1.1.4.2  yamt ;; the unaligned loads (see below).
   1743  1.1.1.1.4.2  yamt ;;
   1744  1.1.1.1.4.2  yamt ;; Operand 1 is the address, operand 0 is the result.
   1745  1.1.1.1.4.2  yamt (define_expand "unaligned_extendqidi"
   1746  1.1.1.1.4.2  yamt   [(use (match_operand:QI 0 "register_operand" ""))
   1747  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "address_operand" ""))]
   1748  1.1.1.1.4.2  yamt   ""
   1749  1.1.1.1.4.2  yamt {
   1750  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (DImode, operands[0]);
   1751  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   1752  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_extendqidi_be (operands[0], operands[1]));
   1753  1.1.1.1.4.2  yamt   else
   1754  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_extendqidi_le (operands[0], operands[1]));
   1755  1.1.1.1.4.2  yamt   DONE;
   1756  1.1.1.1.4.2  yamt })
   1757  1.1.1.1.4.2  yamt 
   1758  1.1.1.1.4.2  yamt (define_expand "unaligned_extendqidi_le"
   1759  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   1760  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
   1761  1.1.1.1.4.2  yamt    (set (match_dup 4)
   1762  1.1.1.1.4.2  yamt 	(ashift:DI (match_dup 3)
   1763  1.1.1.1.4.2  yamt 		   (minus:DI (const_int 64)
   1764  1.1.1.1.4.2  yamt 			     (ashift:DI
   1765  1.1.1.1.4.2  yamt 			      (and:DI (match_dup 2) (const_int 7))
   1766  1.1.1.1.4.2  yamt 			      (const_int 3)))))
   1767  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   1768  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 4) (const_int 56)))]
   1769  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1770  1.1.1.1.4.2  yamt {
   1771  1.1.1.1.4.2  yamt   operands[2] = get_unaligned_offset (operands[1], 1);
   1772  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
   1773  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
   1774  1.1.1.1.4.2  yamt })
   1775  1.1.1.1.4.2  yamt 
   1776  1.1.1.1.4.2  yamt (define_expand "unaligned_extendqidi_be"
   1777  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   1778  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
   1779  1.1.1.1.4.2  yamt    (set (match_dup 4)
   1780  1.1.1.1.4.2  yamt 	(ashift:DI (match_dup 3)
   1781  1.1.1.1.4.2  yamt 		   (ashift:DI
   1782  1.1.1.1.4.2  yamt 		     (and:DI
   1783  1.1.1.1.4.2  yamt 		       (plus:DI (match_dup 2) (const_int 1))
   1784  1.1.1.1.4.2  yamt 		       (const_int 7))
   1785  1.1.1.1.4.2  yamt 		     (const_int 3))))
   1786  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   1787  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 4) (const_int 56)))]
   1788  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   1789  1.1.1.1.4.2  yamt {
   1790  1.1.1.1.4.2  yamt   operands[2] = get_unaligned_offset (operands[1], -1);
   1791  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
   1792  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
   1793  1.1.1.1.4.2  yamt })
   1794  1.1.1.1.4.2  yamt 
   1795  1.1.1.1.4.2  yamt (define_expand "unaligned_extendhidi"
   1796  1.1.1.1.4.2  yamt   [(use (match_operand:QI 0 "register_operand" ""))
   1797  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "address_operand" ""))]
   1798  1.1.1.1.4.2  yamt   ""
   1799  1.1.1.1.4.2  yamt {
   1800  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (DImode, operands[0]);
   1801  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   1802  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_extendhidi_be (operands[0], operands[1]));
   1803  1.1.1.1.4.2  yamt   else
   1804  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_extendhidi_le (operands[0], operands[1]));
   1805  1.1.1.1.4.2  yamt   DONE;
   1806  1.1.1.1.4.2  yamt })
   1807  1.1.1.1.4.2  yamt 
   1808  1.1.1.1.4.2  yamt (define_expand "unaligned_extendhidi_le"
   1809  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   1810  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
   1811  1.1.1.1.4.2  yamt    (set (match_dup 4)
   1812  1.1.1.1.4.2  yamt 	(ashift:DI (match_dup 3)
   1813  1.1.1.1.4.2  yamt 		   (minus:DI (const_int 64)
   1814  1.1.1.1.4.2  yamt 			     (ashift:DI
   1815  1.1.1.1.4.2  yamt 			      (and:DI (match_dup 2) (const_int 7))
   1816  1.1.1.1.4.2  yamt 			      (const_int 3)))))
   1817  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   1818  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 4) (const_int 48)))]
   1819  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1820  1.1.1.1.4.2  yamt {
   1821  1.1.1.1.4.2  yamt   operands[2] = get_unaligned_offset (operands[1], 2);
   1822  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
   1823  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
   1824  1.1.1.1.4.2  yamt })
   1825  1.1.1.1.4.2  yamt 
   1826  1.1.1.1.4.2  yamt (define_expand "unaligned_extendhidi_be"
   1827  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   1828  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
   1829  1.1.1.1.4.2  yamt    (set (match_dup 4)
   1830  1.1.1.1.4.2  yamt 	(ashift:DI (match_dup 3)
   1831  1.1.1.1.4.2  yamt 		   (ashift:DI
   1832  1.1.1.1.4.2  yamt 		     (and:DI
   1833  1.1.1.1.4.2  yamt 		       (plus:DI (match_dup 2) (const_int 1))
   1834  1.1.1.1.4.2  yamt 		       (const_int 7))
   1835  1.1.1.1.4.2  yamt 		     (const_int 3))))
   1836  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   1837  1.1.1.1.4.2  yamt 	(ashiftrt:DI (match_dup 4) (const_int 48)))]
   1838  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   1839  1.1.1.1.4.2  yamt {
   1840  1.1.1.1.4.2  yamt   operands[2] = get_unaligned_offset (operands[1], -1);
   1841  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
   1842  1.1.1.1.4.2  yamt   operands[4] = gen_reg_rtx (DImode);
   1843  1.1.1.1.4.2  yamt })
   1844  1.1.1.1.4.2  yamt 
   1845  1.1.1.1.4.2  yamt (define_insn "*extxl_const"
   1846  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1847  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1848  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "mode_width_operand" "n")
   1849  1.1.1.1.4.2  yamt 			 (match_operand:DI 3 "mul8_operand" "I")))]
   1850  1.1.1.1.4.2  yamt   ""
   1851  1.1.1.1.4.2  yamt   "ext%M2l %r1,%s3,%0"
   1852  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1853  1.1.1.1.4.2  yamt 
   1854  1.1.1.1.4.2  yamt (define_insn "extxl_le"
   1855  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1856  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1857  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "mode_width_operand" "n")
   1858  1.1.1.1.4.2  yamt 			 (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI")
   1859  1.1.1.1.4.2  yamt 				    (const_int 3))))]
   1860  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1861  1.1.1.1.4.2  yamt   "ext%M2l %r1,%3,%0"
   1862  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1863  1.1.1.1.4.2  yamt 
   1864  1.1.1.1.4.2  yamt (define_insn "extxl_be"
   1865  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1866  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1867  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "mode_width_operand" "n")
   1868  1.1.1.1.4.2  yamt 			 (minus:DI
   1869  1.1.1.1.4.2  yamt 			   (const_int 56)
   1870  1.1.1.1.4.2  yamt 			   (ashift:DI
   1871  1.1.1.1.4.2  yamt 			     (match_operand:DI 3 "reg_or_8bit_operand" "rI")
   1872  1.1.1.1.4.2  yamt 			     (const_int 3)))))]
   1873  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   1874  1.1.1.1.4.2  yamt   "ext%M2l %r1,%3,%0"
   1875  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1876  1.1.1.1.4.2  yamt 
   1877  1.1.1.1.4.2  yamt ;; Combine has some strange notion of preserving existing undefined behavior
   1878  1.1.1.1.4.2  yamt ;; in shifts larger than a word size.  So capture these patterns that it
   1879  1.1.1.1.4.2  yamt ;; should have turned into zero_extracts.
   1880  1.1.1.1.4.2  yamt 
   1881  1.1.1.1.4.2  yamt (define_insn "*extxl_1_le"
   1882  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1883  1.1.1.1.4.2  yamt 	(and:DI (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1884  1.1.1.1.4.2  yamt 		  (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1885  1.1.1.1.4.2  yamt 			     (const_int 3)))
   1886  1.1.1.1.4.2  yamt 	     (match_operand:DI 3 "mode_mask_operand" "n")))]
   1887  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1888  1.1.1.1.4.2  yamt   "ext%U3l %1,%2,%0"
   1889  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1890  1.1.1.1.4.2  yamt 
   1891  1.1.1.1.4.2  yamt (define_insn "*extxl_1_be"
   1892  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1893  1.1.1.1.4.2  yamt 	(and:DI (lshiftrt:DI
   1894  1.1.1.1.4.2  yamt 		  (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1895  1.1.1.1.4.2  yamt 		  (minus:DI (const_int 56)
   1896  1.1.1.1.4.2  yamt 		    (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1897  1.1.1.1.4.2  yamt 			       (const_int 3))))
   1898  1.1.1.1.4.2  yamt 		(match_operand:DI 3 "mode_mask_operand" "n")))]
   1899  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   1900  1.1.1.1.4.2  yamt   "ext%U3l %1,%2,%0"
   1901  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1902  1.1.1.1.4.2  yamt 
   1903  1.1.1.1.4.2  yamt (define_insn "*extql_2_le"
   1904  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1905  1.1.1.1.4.2  yamt 	(lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1906  1.1.1.1.4.2  yamt 	  (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1907  1.1.1.1.4.2  yamt 		     (const_int 3))))]
   1908  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1909  1.1.1.1.4.2  yamt   "extql %1,%2,%0"
   1910  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1911  1.1.1.1.4.2  yamt 
   1912  1.1.1.1.4.2  yamt (define_insn "*extql_2_be"
   1913  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1914  1.1.1.1.4.2  yamt 	(lshiftrt:DI
   1915  1.1.1.1.4.2  yamt 	  (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1916  1.1.1.1.4.2  yamt 	  (minus:DI (const_int 56)
   1917  1.1.1.1.4.2  yamt 		    (ashift:DI
   1918  1.1.1.1.4.2  yamt 		      (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1919  1.1.1.1.4.2  yamt 		      (const_int 3)))))]
   1920  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   1921  1.1.1.1.4.2  yamt   "extql %1,%2,%0"
   1922  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1923  1.1.1.1.4.2  yamt 
   1924  1.1.1.1.4.2  yamt (define_insn "extqh_le"
   1925  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1926  1.1.1.1.4.2  yamt 	(ashift:DI
   1927  1.1.1.1.4.2  yamt 	 (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1928  1.1.1.1.4.2  yamt 	  (minus:DI (const_int 64)
   1929  1.1.1.1.4.2  yamt 		    (ashift:DI
   1930  1.1.1.1.4.2  yamt 		     (and:DI
   1931  1.1.1.1.4.2  yamt 		      (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1932  1.1.1.1.4.2  yamt 		      (const_int 7))
   1933  1.1.1.1.4.2  yamt 		     (const_int 3)))))]
   1934  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1935  1.1.1.1.4.2  yamt   "extqh %r1,%2,%0"
   1936  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1937  1.1.1.1.4.2  yamt 
   1938  1.1.1.1.4.2  yamt (define_insn "extqh_be"
   1939  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1940  1.1.1.1.4.2  yamt 	(ashift:DI
   1941  1.1.1.1.4.2  yamt 	  (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1942  1.1.1.1.4.2  yamt 	  (ashift:DI
   1943  1.1.1.1.4.2  yamt 	    (and:DI
   1944  1.1.1.1.4.2  yamt 	      (plus:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1945  1.1.1.1.4.2  yamt 		       (const_int 1))
   1946  1.1.1.1.4.2  yamt 	      (const_int 7))
   1947  1.1.1.1.4.2  yamt 	    (const_int 3))))]
   1948  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   1949  1.1.1.1.4.2  yamt   "extqh %r1,%2,%0"
   1950  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1951  1.1.1.1.4.2  yamt 
   1952  1.1.1.1.4.2  yamt (define_insn "extlh_le"
   1953  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1954  1.1.1.1.4.2  yamt 	(ashift:DI
   1955  1.1.1.1.4.2  yamt 	 (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1956  1.1.1.1.4.2  yamt 		 (const_int 2147483647))
   1957  1.1.1.1.4.2  yamt 	 (minus:DI (const_int 64)
   1958  1.1.1.1.4.2  yamt 		    (ashift:DI
   1959  1.1.1.1.4.2  yamt 		     (and:DI
   1960  1.1.1.1.4.2  yamt 		      (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1961  1.1.1.1.4.2  yamt 		      (const_int 7))
   1962  1.1.1.1.4.2  yamt 		     (const_int 3)))))]
   1963  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1964  1.1.1.1.4.2  yamt   "extlh %r1,%2,%0"
   1965  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1966  1.1.1.1.4.2  yamt 
   1967  1.1.1.1.4.2  yamt (define_insn "extlh_be"
   1968  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1969  1.1.1.1.4.2  yamt 	(and:DI
   1970  1.1.1.1.4.2  yamt 	  (ashift:DI
   1971  1.1.1.1.4.2  yamt 	    (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1972  1.1.1.1.4.2  yamt 	    (ashift:DI
   1973  1.1.1.1.4.2  yamt 	      (and:DI
   1974  1.1.1.1.4.2  yamt 		(plus:DI
   1975  1.1.1.1.4.2  yamt 		  (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1976  1.1.1.1.4.2  yamt 		  (const_int 1))
   1977  1.1.1.1.4.2  yamt 		(const_int 7))
   1978  1.1.1.1.4.2  yamt 	      (const_int 3)))
   1979  1.1.1.1.4.2  yamt 	  (const_int 2147483647)))]
   1980  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   1981  1.1.1.1.4.2  yamt   "extlh %r1,%2,%0"
   1982  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1983  1.1.1.1.4.2  yamt 
   1984  1.1.1.1.4.2  yamt (define_insn "extwh_le"
   1985  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   1986  1.1.1.1.4.2  yamt 	(ashift:DI
   1987  1.1.1.1.4.2  yamt 	 (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   1988  1.1.1.1.4.2  yamt 		 (const_int 65535))
   1989  1.1.1.1.4.2  yamt 	 (minus:DI (const_int 64)
   1990  1.1.1.1.4.2  yamt 		    (ashift:DI
   1991  1.1.1.1.4.2  yamt 		     (and:DI
   1992  1.1.1.1.4.2  yamt 		      (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   1993  1.1.1.1.4.2  yamt 		      (const_int 7))
   1994  1.1.1.1.4.2  yamt 		     (const_int 3)))))]
   1995  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   1996  1.1.1.1.4.2  yamt   "extwh %r1,%2,%0"
   1997  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   1998  1.1.1.1.4.2  yamt 
   1999  1.1.1.1.4.2  yamt (define_insn "extwh_be"
   2000  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2001  1.1.1.1.4.2  yamt 	(and:DI
   2002  1.1.1.1.4.2  yamt 	  (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   2003  1.1.1.1.4.2  yamt 		     (ashift:DI
   2004  1.1.1.1.4.2  yamt 		       (and:DI
   2005  1.1.1.1.4.2  yamt 			 (plus:DI
   2006  1.1.1.1.4.2  yamt 			   (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2007  1.1.1.1.4.2  yamt 			   (const_int 1))
   2008  1.1.1.1.4.2  yamt 			 (const_int 7))
   2009  1.1.1.1.4.2  yamt 		       (const_int 3)))
   2010  1.1.1.1.4.2  yamt 	  (const_int 65535)))]
   2011  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   2012  1.1.1.1.4.2  yamt   "extwh %r1,%2,%0"
   2013  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2014  1.1.1.1.4.2  yamt 
   2015  1.1.1.1.4.2  yamt ;; This converts an extXl into an extXh with an appropriate adjustment
   2016  1.1.1.1.4.2  yamt ;; to the address calculation.
   2017  1.1.1.1.4.2  yamt 
   2018  1.1.1.1.4.2  yamt ;;(define_split
   2019  1.1.1.1.4.2  yamt ;;  [(set (match_operand:DI 0 "register_operand" "")
   2020  1.1.1.1.4.2  yamt ;;	(ashift:DI (zero_extract:DI (match_operand:DI 1 "register_operand" "")
   2021  1.1.1.1.4.2  yamt ;;				    (match_operand:DI 2 "mode_width_operand" "")
   2022  1.1.1.1.4.2  yamt ;;				    (ashift:DI (match_operand:DI 3 "" "")
   2023  1.1.1.1.4.2  yamt ;;					       (const_int 3)))
   2024  1.1.1.1.4.2  yamt ;;		   (match_operand:DI 4 "const_int_operand" "")))
   2025  1.1.1.1.4.2  yamt ;;   (clobber (match_operand:DI 5 "register_operand" ""))]
   2026  1.1.1.1.4.2  yamt ;;  "INTVAL (operands[4]) == 64 - INTVAL (operands[2])"
   2027  1.1.1.1.4.2  yamt ;;  [(set (match_dup 5) (match_dup 6))
   2028  1.1.1.1.4.2  yamt ;;   (set (match_dup 0)
   2029  1.1.1.1.4.2  yamt ;;	(ashift:DI (zero_extract:DI (match_dup 1) (match_dup 2)
   2030  1.1.1.1.4.2  yamt ;;				    (ashift:DI (plus:DI (match_dup 5)
   2031  1.1.1.1.4.2  yamt ;;							(match_dup 7))
   2032  1.1.1.1.4.2  yamt ;;					       (const_int 3)))
   2033  1.1.1.1.4.2  yamt ;;		   (match_dup 4)))]
   2034  1.1.1.1.4.2  yamt ;;  "
   2035  1.1.1.1.4.2  yamt ;;{
   2036  1.1.1.1.4.2  yamt ;;  operands[6] = plus_constant (operands[3],
   2037  1.1.1.1.4.2  yamt ;;			       INTVAL (operands[2]) / BITS_PER_UNIT);
   2038  1.1.1.1.4.2  yamt ;;  operands[7] = GEN_INT (- INTVAL (operands[2]) / BITS_PER_UNIT);
   2039  1.1.1.1.4.2  yamt ;;}")
   2040  1.1.1.1.4.2  yamt 
   2041  1.1.1.1.4.2  yamt (define_insn "*insbl_const"
   2042  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2043  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
   2044  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "mul8_operand" "I")))]
   2045  1.1.1.1.4.2  yamt   ""
   2046  1.1.1.1.4.2  yamt   "insbl %1,%s2,%0"
   2047  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2048  1.1.1.1.4.2  yamt 
   2049  1.1.1.1.4.2  yamt (define_insn "inswl_const"
   2050  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2051  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
   2052  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "mul8_operand" "I")))]
   2053  1.1.1.1.4.2  yamt   ""
   2054  1.1.1.1.4.2  yamt   "inswl %1,%s2,%0"
   2055  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2056  1.1.1.1.4.2  yamt 
   2057  1.1.1.1.4.2  yamt (define_insn "*insll_const"
   2058  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2059  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
   2060  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "mul8_operand" "I")))]
   2061  1.1.1.1.4.2  yamt   ""
   2062  1.1.1.1.4.2  yamt   "insll %1,%s2,%0"
   2063  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2064  1.1.1.1.4.2  yamt 
   2065  1.1.1.1.4.2  yamt (define_insn "insbl_le"
   2066  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2067  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
   2068  1.1.1.1.4.2  yamt 		   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2069  1.1.1.1.4.2  yamt 			      (const_int 3))))]
   2070  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   2071  1.1.1.1.4.2  yamt   "insbl %1,%2,%0"
   2072  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2073  1.1.1.1.4.2  yamt 
   2074  1.1.1.1.4.2  yamt (define_insn "insbl_be"
   2075  1.1.1.1.4.2  yamt  [(set (match_operand:DI 0 "register_operand" "=r")
   2076  1.1.1.1.4.2  yamt        (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
   2077  1.1.1.1.4.2  yamt 	 (minus:DI (const_int 56)
   2078  1.1.1.1.4.2  yamt 	   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2079  1.1.1.1.4.2  yamt 		      (const_int 3)))))]
   2080  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   2081  1.1.1.1.4.2  yamt   "insbl %1,%2,%0"
   2082  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2083  1.1.1.1.4.2  yamt 
   2084  1.1.1.1.4.2  yamt (define_insn "inswl_le"
   2085  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2086  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
   2087  1.1.1.1.4.2  yamt 		   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2088  1.1.1.1.4.2  yamt 			      (const_int 3))))]
   2089  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   2090  1.1.1.1.4.2  yamt   "inswl %1,%2,%0"
   2091  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2092  1.1.1.1.4.2  yamt 
   2093  1.1.1.1.4.2  yamt (define_insn "inswl_be"
   2094  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2095  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
   2096  1.1.1.1.4.2  yamt 	  (minus:DI (const_int 56)
   2097  1.1.1.1.4.2  yamt 	    (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2098  1.1.1.1.4.2  yamt 		       (const_int 3)))))]
   2099  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   2100  1.1.1.1.4.2  yamt   "inswl %1,%2,%0"
   2101  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2102  1.1.1.1.4.2  yamt 
   2103  1.1.1.1.4.2  yamt (define_insn "insll_le"
   2104  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2105  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
   2106  1.1.1.1.4.2  yamt 		   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2107  1.1.1.1.4.2  yamt 			      (const_int 3))))]
   2108  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   2109  1.1.1.1.4.2  yamt   "insll %1,%2,%0"
   2110  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2111  1.1.1.1.4.2  yamt 
   2112  1.1.1.1.4.2  yamt (define_insn "insll_be"
   2113  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2114  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
   2115  1.1.1.1.4.2  yamt 	  (minus:DI (const_int 56)
   2116  1.1.1.1.4.2  yamt 	    (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2117  1.1.1.1.4.2  yamt 		       (const_int 3)))))]
   2118  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   2119  1.1.1.1.4.2  yamt   "insll %1,%2,%0"
   2120  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2121  1.1.1.1.4.2  yamt 
   2122  1.1.1.1.4.2  yamt (define_insn "insql_le"
   2123  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2124  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:DI 1 "register_operand" "r")
   2125  1.1.1.1.4.2  yamt 		   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2126  1.1.1.1.4.2  yamt 			      (const_int 3))))]
   2127  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   2128  1.1.1.1.4.2  yamt   "insql %1,%2,%0"
   2129  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2130  1.1.1.1.4.2  yamt 
   2131  1.1.1.1.4.2  yamt (define_insn "insql_be"
   2132  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2133  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:DI 1 "register_operand" "r")
   2134  1.1.1.1.4.2  yamt 	  (minus:DI (const_int 56)
   2135  1.1.1.1.4.2  yamt 	    (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
   2136  1.1.1.1.4.2  yamt 		       (const_int 3)))))]
   2137  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   2138  1.1.1.1.4.2  yamt   "insql %1,%2,%0"
   2139  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2140  1.1.1.1.4.2  yamt 
   2141  1.1.1.1.4.2  yamt ;; Combine has this sometimes habit of moving the and outside of the
   2142  1.1.1.1.4.2  yamt ;; shift, making life more interesting.
   2143  1.1.1.1.4.2  yamt 
   2144  1.1.1.1.4.2  yamt (define_insn "*insxl"
   2145  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2146  1.1.1.1.4.2  yamt 	(and:DI (ashift:DI (match_operand:DI 1 "register_operand" "r")
   2147  1.1.1.1.4.2  yamt 		   	   (match_operand:DI 2 "mul8_operand" "I"))
   2148  1.1.1.1.4.2  yamt 		(match_operand:DI 3 "immediate_operand" "i")))]
   2149  1.1.1.1.4.2  yamt   "HOST_BITS_PER_WIDE_INT == 64
   2150  1.1.1.1.4.2  yamt    && CONST_INT_P (operands[3])
   2151  1.1.1.1.4.2  yamt    && (((unsigned HOST_WIDE_INT) 0xff << INTVAL (operands[2])
   2152  1.1.1.1.4.2  yamt         == (unsigned HOST_WIDE_INT) INTVAL (operands[3]))
   2153  1.1.1.1.4.2  yamt        || ((unsigned HOST_WIDE_INT) 0xffff << INTVAL (operands[2])
   2154  1.1.1.1.4.2  yamt         == (unsigned HOST_WIDE_INT) INTVAL (operands[3]))
   2155  1.1.1.1.4.2  yamt        || ((unsigned HOST_WIDE_INT) 0xffffffff << INTVAL (operands[2])
   2156  1.1.1.1.4.2  yamt         == (unsigned HOST_WIDE_INT) INTVAL (operands[3])))"
   2157  1.1.1.1.4.2  yamt {
   2158  1.1.1.1.4.2  yamt #if HOST_BITS_PER_WIDE_INT == 64
   2159  1.1.1.1.4.2  yamt   if ((unsigned HOST_WIDE_INT) 0xff << INTVAL (operands[2])
   2160  1.1.1.1.4.2  yamt       == (unsigned HOST_WIDE_INT) INTVAL (operands[3]))
   2161  1.1.1.1.4.2  yamt     return "insbl %1,%s2,%0";
   2162  1.1.1.1.4.2  yamt   if ((unsigned HOST_WIDE_INT) 0xffff << INTVAL (operands[2])
   2163  1.1.1.1.4.2  yamt       == (unsigned HOST_WIDE_INT) INTVAL (operands[3]))
   2164  1.1.1.1.4.2  yamt     return "inswl %1,%s2,%0";
   2165  1.1.1.1.4.2  yamt   if ((unsigned HOST_WIDE_INT) 0xffffffff << INTVAL (operands[2])
   2166  1.1.1.1.4.2  yamt       == (unsigned HOST_WIDE_INT) INTVAL (operands[3]))
   2167  1.1.1.1.4.2  yamt     return "insll %1,%s2,%0";
   2168  1.1.1.1.4.2  yamt #endif
   2169  1.1.1.1.4.2  yamt   gcc_unreachable ();
   2170  1.1.1.1.4.2  yamt }
   2171  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2172  1.1.1.1.4.2  yamt 
   2173  1.1.1.1.4.2  yamt ;; We do not include the insXh insns because they are complex to express
   2174  1.1.1.1.4.2  yamt ;; and it does not appear that we would ever want to generate them.
   2175  1.1.1.1.4.2  yamt ;;
   2176  1.1.1.1.4.2  yamt ;; Since we need them for block moves, though, cop out and use unspec.
   2177  1.1.1.1.4.2  yamt 
   2178  1.1.1.1.4.2  yamt (define_insn "insxh"
   2179  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2180  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   2181  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "mode_width_operand" "n")
   2182  1.1.1.1.4.2  yamt 		    (match_operand:DI 3 "reg_or_8bit_operand" "rI")]
   2183  1.1.1.1.4.2  yamt 		   UNSPEC_INSXH))]
   2184  1.1.1.1.4.2  yamt   ""
   2185  1.1.1.1.4.2  yamt   "ins%M2h %1,%3,%0"
   2186  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2187  1.1.1.1.4.2  yamt 
   2188  1.1.1.1.4.2  yamt (define_insn "mskxl_le"
   2189  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2190  1.1.1.1.4.2  yamt 	(and:DI (not:DI (ashift:DI
   2191  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "mode_mask_operand" "n")
   2192  1.1.1.1.4.2  yamt 			 (ashift:DI
   2193  1.1.1.1.4.2  yamt 			  (match_operand:DI 3 "reg_or_8bit_operand" "rI")
   2194  1.1.1.1.4.2  yamt 			  (const_int 3))))
   2195  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "reg_or_0_operand" "rJ")))]
   2196  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   2197  1.1.1.1.4.2  yamt   "msk%U2l %r1,%3,%0"
   2198  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2199  1.1.1.1.4.2  yamt 
   2200  1.1.1.1.4.2  yamt (define_insn "mskxl_be"
   2201  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2202  1.1.1.1.4.2  yamt 	(and:DI (not:DI (ashift:DI
   2203  1.1.1.1.4.2  yamt 			  (match_operand:DI 2 "mode_mask_operand" "n")
   2204  1.1.1.1.4.2  yamt 			  (minus:DI (const_int 56)
   2205  1.1.1.1.4.2  yamt 			    (ashift:DI
   2206  1.1.1.1.4.2  yamt 			      (match_operand:DI 3 "reg_or_8bit_operand" "rI")
   2207  1.1.1.1.4.2  yamt 			      (const_int 3)))))
   2208  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "reg_or_0_operand" "rJ")))]
   2209  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   2210  1.1.1.1.4.2  yamt   "msk%U2l %r1,%3,%0"
   2211  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2212  1.1.1.1.4.2  yamt 
   2213  1.1.1.1.4.2  yamt ;; We do not include the mskXh insns because it does not appear we would
   2214  1.1.1.1.4.2  yamt ;; ever generate one.
   2215  1.1.1.1.4.2  yamt ;;
   2216  1.1.1.1.4.2  yamt ;; Again, we do for block moves and we use unspec again.
   2217  1.1.1.1.4.2  yamt 
   2218  1.1.1.1.4.2  yamt (define_insn "mskxh"
   2219  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2220  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   2221  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "mode_width_operand" "n")
   2222  1.1.1.1.4.2  yamt 		    (match_operand:DI 3 "reg_or_8bit_operand" "rI")]
   2223  1.1.1.1.4.2  yamt 		   UNSPEC_MSKXH))]
   2224  1.1.1.1.4.2  yamt   ""
   2225  1.1.1.1.4.2  yamt   "msk%M2h %1,%3,%0"
   2226  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   2227  1.1.1.1.4.2  yamt 
   2228  1.1.1.1.4.2  yamt ;; Prefer AND + NE over LSHIFTRT + AND.
   2229  1.1.1.1.4.2  yamt 
   2230  1.1.1.1.4.2  yamt (define_insn_and_split "*ze_and_ne"
   2231  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   2232  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   2233  1.1.1.1.4.2  yamt 			 (const_int 1)
   2234  1.1.1.1.4.2  yamt 			 (match_operand 2 "const_int_operand" "I")))]
   2235  1.1.1.1.4.2  yamt   "(unsigned HOST_WIDE_INT) INTVAL (operands[2]) < 8"
   2236  1.1.1.1.4.2  yamt   "#"
   2237  1.1.1.1.4.2  yamt   "(unsigned HOST_WIDE_INT) INTVAL (operands[2]) < 8"
   2238  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   2239  1.1.1.1.4.2  yamt 	(and:DI (match_dup 1) (match_dup 3)))
   2240  1.1.1.1.4.2  yamt    (set (match_dup 0)
   2241  1.1.1.1.4.2  yamt 	(ne:DI (match_dup 0) (const_int 0)))]
   2242  1.1.1.1.4.2  yamt   "operands[3] = GEN_INT (1 << INTVAL (operands[2]));")
   2243  1.1.1.1.4.2  yamt 
   2245  1.1.1.1.4.2  yamt ;; Floating-point operations.  All the double-precision insns can extend
   2246  1.1.1.1.4.2  yamt ;; from single, so indicate that.  The exception are the ones that simply
   2247  1.1.1.1.4.2  yamt ;; play with the sign bits; it's not clear what to do there.
   2248  1.1.1.1.4.2  yamt 
   2249  1.1.1.1.4.2  yamt (define_insn "abssf2"
   2250  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2251  1.1.1.1.4.2  yamt 	(abs:SF (match_operand:SF 1 "reg_or_0_operand" "fG")))]
   2252  1.1.1.1.4.2  yamt   "TARGET_FP"
   2253  1.1.1.1.4.2  yamt   "cpys $f31,%R1,%0"
   2254  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys")])
   2255  1.1.1.1.4.2  yamt 
   2256  1.1.1.1.4.2  yamt (define_insn "*nabssf2"
   2257  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2258  1.1.1.1.4.2  yamt 	(neg:SF (abs:SF (match_operand:SF 1 "reg_or_0_operand" "fG"))))]
   2259  1.1.1.1.4.2  yamt   "TARGET_FP"
   2260  1.1.1.1.4.2  yamt   "cpysn $f31,%R1,%0"
   2261  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2262  1.1.1.1.4.2  yamt 
   2263  1.1.1.1.4.2  yamt (define_insn "absdf2"
   2264  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2265  1.1.1.1.4.2  yamt 	(abs:DF (match_operand:DF 1 "reg_or_0_operand" "fG")))]
   2266  1.1.1.1.4.2  yamt   "TARGET_FP"
   2267  1.1.1.1.4.2  yamt   "cpys $f31,%R1,%0"
   2268  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys")])
   2269  1.1.1.1.4.2  yamt 
   2270  1.1.1.1.4.2  yamt (define_insn "*nabsdf2"
   2271  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2272  1.1.1.1.4.2  yamt 	(neg:DF (abs:DF (match_operand:DF 1 "reg_or_0_operand" "fG"))))]
   2273  1.1.1.1.4.2  yamt   "TARGET_FP"
   2274  1.1.1.1.4.2  yamt   "cpysn $f31,%R1,%0"
   2275  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2276  1.1.1.1.4.2  yamt 
   2277  1.1.1.1.4.2  yamt (define_expand "abstf2"
   2278  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:TF 0 "register_operand" "")
   2279  1.1.1.1.4.2  yamt 		   (abs:TF (match_operand:TF 1 "reg_or_0_operand" "")))
   2280  1.1.1.1.4.2  yamt 	      (use (match_dup 2))])]
   2281  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2282  1.1.1.1.4.2  yamt {
   2283  1.1.1.1.4.2  yamt #if HOST_BITS_PER_WIDE_INT >= 64
   2284  1.1.1.1.4.2  yamt   operands[2] = force_reg (DImode, GEN_INT ((HOST_WIDE_INT) 1 << 63));
   2285  1.1.1.1.4.2  yamt #else
   2286  1.1.1.1.4.2  yamt   operands[2] = force_reg (DImode, immed_double_const (0, 0x80000000, DImode));
   2287  1.1.1.1.4.2  yamt #endif
   2288  1.1.1.1.4.2  yamt })
   2289  1.1.1.1.4.2  yamt 
   2290  1.1.1.1.4.2  yamt (define_insn_and_split "*abstf_internal"
   2291  1.1.1.1.4.2  yamt   [(set (match_operand:TF 0 "register_operand" "=r")
   2292  1.1.1.1.4.2  yamt 	(abs:TF (match_operand:TF 1 "reg_or_0_operand" "rG")))
   2293  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" "r"))]
   2294  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2295  1.1.1.1.4.2  yamt   "#"
   2296  1.1.1.1.4.2  yamt   "&& reload_completed"
   2297  1.1.1.1.4.2  yamt   [(const_int 0)]
   2298  1.1.1.1.4.2  yamt   "alpha_split_tfmode_frobsign (operands, gen_andnotdi3); DONE;")
   2299  1.1.1.1.4.2  yamt 
   2300  1.1.1.1.4.2  yamt (define_insn "negsf2"
   2301  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2302  1.1.1.1.4.2  yamt 	(neg:SF (match_operand:SF 1 "reg_or_0_operand" "fG")))]
   2303  1.1.1.1.4.2  yamt   "TARGET_FP"
   2304  1.1.1.1.4.2  yamt   "cpysn %R1,%R1,%0"
   2305  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2306  1.1.1.1.4.2  yamt 
   2307  1.1.1.1.4.2  yamt (define_insn "negdf2"
   2308  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2309  1.1.1.1.4.2  yamt 	(neg:DF (match_operand:DF 1 "reg_or_0_operand" "fG")))]
   2310  1.1.1.1.4.2  yamt   "TARGET_FP"
   2311  1.1.1.1.4.2  yamt   "cpysn %R1,%R1,%0"
   2312  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2313  1.1.1.1.4.2  yamt 
   2314  1.1.1.1.4.2  yamt (define_expand "negtf2"
   2315  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:TF 0 "register_operand" "")
   2316  1.1.1.1.4.2  yamt 		   (neg:TF (match_operand:TF 1 "reg_or_0_operand" "")))
   2317  1.1.1.1.4.2  yamt 	      (use (match_dup 2))])]
   2318  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2319  1.1.1.1.4.2  yamt {
   2320  1.1.1.1.4.2  yamt #if HOST_BITS_PER_WIDE_INT >= 64
   2321  1.1.1.1.4.2  yamt   operands[2] = force_reg (DImode, GEN_INT ((HOST_WIDE_INT) 1 << 63));
   2322  1.1.1.1.4.2  yamt #else
   2323  1.1.1.1.4.2  yamt   operands[2] = force_reg (DImode, immed_double_const (0, 0x80000000, DImode));
   2324  1.1.1.1.4.2  yamt #endif
   2325  1.1.1.1.4.2  yamt })
   2326  1.1.1.1.4.2  yamt 
   2327  1.1.1.1.4.2  yamt (define_insn_and_split "*negtf_internal"
   2328  1.1.1.1.4.2  yamt   [(set (match_operand:TF 0 "register_operand" "=r")
   2329  1.1.1.1.4.2  yamt 	(neg:TF (match_operand:TF 1 "reg_or_0_operand" "rG")))
   2330  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" "r"))]
   2331  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2332  1.1.1.1.4.2  yamt   "#"
   2333  1.1.1.1.4.2  yamt   "&& reload_completed"
   2334  1.1.1.1.4.2  yamt   [(const_int 0)]
   2335  1.1.1.1.4.2  yamt   "alpha_split_tfmode_frobsign (operands, gen_xordi3); DONE;")
   2336  1.1.1.1.4.2  yamt 
   2337  1.1.1.1.4.2  yamt (define_insn "copysignsf3"
   2338  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2339  1.1.1.1.4.2  yamt 	(unspec:SF [(match_operand:SF 1 "reg_or_0_operand" "fG")
   2340  1.1.1.1.4.2  yamt 		    (match_operand:SF 2 "reg_or_0_operand" "fG")]
   2341  1.1.1.1.4.2  yamt 		   UNSPEC_COPYSIGN))]
   2342  1.1.1.1.4.2  yamt   "TARGET_FP"
   2343  1.1.1.1.4.2  yamt   "cpys %R2,%R1,%0"
   2344  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2345  1.1.1.1.4.2  yamt 
   2346  1.1.1.1.4.2  yamt (define_insn "*ncopysignsf3"
   2347  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2348  1.1.1.1.4.2  yamt 	(neg:SF (unspec:SF [(match_operand:SF 1 "reg_or_0_operand" "fG")
   2349  1.1.1.1.4.2  yamt 			    (match_operand:SF 2 "reg_or_0_operand" "fG")]
   2350  1.1.1.1.4.2  yamt 			   UNSPEC_COPYSIGN)))]
   2351  1.1.1.1.4.2  yamt   "TARGET_FP"
   2352  1.1.1.1.4.2  yamt   "cpysn %R2,%R1,%0"
   2353  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2354  1.1.1.1.4.2  yamt 
   2355  1.1.1.1.4.2  yamt (define_insn "copysigndf3"
   2356  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2357  1.1.1.1.4.2  yamt 	(unspec:DF [(match_operand:DF 1 "reg_or_0_operand" "fG")
   2358  1.1.1.1.4.2  yamt 		    (match_operand:DF 2 "reg_or_0_operand" "fG")]
   2359  1.1.1.1.4.2  yamt 		   UNSPEC_COPYSIGN))]
   2360  1.1.1.1.4.2  yamt   "TARGET_FP"
   2361  1.1.1.1.4.2  yamt   "cpys %R2,%R1,%0"
   2362  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2363  1.1.1.1.4.2  yamt 
   2364  1.1.1.1.4.2  yamt (define_insn "*ncopysigndf3"
   2365  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2366  1.1.1.1.4.2  yamt 	(neg:DF (unspec:DF [(match_operand:DF 1 "reg_or_0_operand" "fG")
   2367  1.1.1.1.4.2  yamt 			    (match_operand:DF 2 "reg_or_0_operand" "fG")]
   2368  1.1.1.1.4.2  yamt 			   UNSPEC_COPYSIGN)))]
   2369  1.1.1.1.4.2  yamt   "TARGET_FP"
   2370  1.1.1.1.4.2  yamt   "cpysn %R2,%R1,%0"
   2371  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")])
   2372  1.1.1.1.4.2  yamt 
   2373  1.1.1.1.4.2  yamt (define_insn "*addsf_ieee"
   2374  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   2375  1.1.1.1.4.2  yamt 	(plus:SF (match_operand:SF 1 "reg_or_0_operand" "%fG")
   2376  1.1.1.1.4.2  yamt 		 (match_operand:SF 2 "reg_or_0_operand" "fG")))]
   2377  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2378  1.1.1.1.4.2  yamt   "add%,%/ %R1,%R2,%0"
   2379  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2380  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2381  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2382  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2383  1.1.1.1.4.2  yamt 
   2384  1.1.1.1.4.2  yamt (define_insn "addsf3"
   2385  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2386  1.1.1.1.4.2  yamt 	(plus:SF (match_operand:SF 1 "reg_or_0_operand" "%fG")
   2387  1.1.1.1.4.2  yamt 		 (match_operand:SF 2 "reg_or_0_operand" "fG")))]
   2388  1.1.1.1.4.2  yamt   "TARGET_FP"
   2389  1.1.1.1.4.2  yamt   "add%,%/ %R1,%R2,%0"
   2390  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2391  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2392  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2393  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2394  1.1.1.1.4.2  yamt 
   2395  1.1.1.1.4.2  yamt (define_insn "*adddf_ieee"
   2396  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   2397  1.1.1.1.4.2  yamt 	(plus:DF (match_operand:DF 1 "reg_or_0_operand" "%fG")
   2398  1.1.1.1.4.2  yamt 		 (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2399  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2400  1.1.1.1.4.2  yamt   "add%-%/ %R1,%R2,%0"
   2401  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2402  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2403  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2404  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2405  1.1.1.1.4.2  yamt 
   2406  1.1.1.1.4.2  yamt (define_insn "adddf3"
   2407  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2408  1.1.1.1.4.2  yamt 	(plus:DF (match_operand:DF 1 "reg_or_0_operand" "%fG")
   2409  1.1.1.1.4.2  yamt 		 (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2410  1.1.1.1.4.2  yamt   "TARGET_FP"
   2411  1.1.1.1.4.2  yamt   "add%-%/ %R1,%R2,%0"
   2412  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2413  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2414  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2415  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2416  1.1.1.1.4.2  yamt 
   2417  1.1.1.1.4.2  yamt (define_insn "*adddf_ext1"
   2418  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2419  1.1.1.1.4.2  yamt 	(plus:DF (float_extend:DF
   2420  1.1.1.1.4.2  yamt 		  (match_operand:SF 1 "reg_or_0_operand" "fG"))
   2421  1.1.1.1.4.2  yamt 		 (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2422  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2423  1.1.1.1.4.2  yamt   "add%-%/ %R1,%R2,%0"
   2424  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2425  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2426  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2427  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2428  1.1.1.1.4.2  yamt 
   2429  1.1.1.1.4.2  yamt (define_insn "*adddf_ext2"
   2430  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2431  1.1.1.1.4.2  yamt 	(plus:DF (float_extend:DF
   2432  1.1.1.1.4.2  yamt 		  (match_operand:SF 1 "reg_or_0_operand" "%fG"))
   2433  1.1.1.1.4.2  yamt 		 (float_extend:DF
   2434  1.1.1.1.4.2  yamt 		  (match_operand:SF 2 "reg_or_0_operand" "fG"))))]
   2435  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2436  1.1.1.1.4.2  yamt   "add%-%/ %R1,%R2,%0"
   2437  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2438  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2439  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2440  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2441  1.1.1.1.4.2  yamt 
   2442  1.1.1.1.4.2  yamt (define_expand "addtf3"
   2443  1.1.1.1.4.2  yamt   [(use (match_operand 0 "register_operand" ""))
   2444  1.1.1.1.4.2  yamt    (use (match_operand 1 "general_operand" ""))
   2445  1.1.1.1.4.2  yamt    (use (match_operand 2 "general_operand" ""))]
   2446  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2447  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_arith (PLUS, operands); DONE;")
   2448  1.1.1.1.4.2  yamt 
   2449  1.1.1.1.4.2  yamt ;; Define conversion operators between DFmode and SImode, using the cvtql
   2450  1.1.1.1.4.2  yamt ;; instruction.  To allow combine et al to do useful things, we keep the
   2451  1.1.1.1.4.2  yamt ;; operation as a unit until after reload, at which point we split the
   2452  1.1.1.1.4.2  yamt ;; instructions.
   2453  1.1.1.1.4.2  yamt ;;
   2454  1.1.1.1.4.2  yamt ;; Note that we (attempt to) only consider this optimization when the
   2455  1.1.1.1.4.2  yamt ;; ultimate destination is memory.  If we will be doing further integer
   2456  1.1.1.1.4.2  yamt ;; processing, it is cheaper to do the truncation in the int regs.
   2457  1.1.1.1.4.2  yamt 
   2458  1.1.1.1.4.2  yamt (define_insn "*cvtql"
   2459  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2460  1.1.1.1.4.2  yamt 	(unspec:SF [(match_operand:DI 1 "reg_or_0_operand" "fG")]
   2461  1.1.1.1.4.2  yamt 		   UNSPEC_CVTQL))]
   2462  1.1.1.1.4.2  yamt   "TARGET_FP"
   2463  1.1.1.1.4.2  yamt   "cvtql%/ %R1,%0"
   2464  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2465  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2466  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "v_sv")])
   2467  1.1.1.1.4.2  yamt 
   2468  1.1.1.1.4.2  yamt (define_insn_and_split "*fix_truncdfsi_ieee"
   2469  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "memory_operand" "=m")
   2470  1.1.1.1.4.2  yamt 	(subreg:SI
   2471  1.1.1.1.4.2  yamt 	  (match_operator:DI 4 "fix_operator" 
   2472  1.1.1.1.4.2  yamt 	    [(match_operand:DF 1 "reg_or_0_operand" "fG")]) 0))
   2473  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 2 "=&f"))
   2474  1.1.1.1.4.2  yamt    (clobber (match_scratch:SF 3 "=&f"))]
   2475  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2476  1.1.1.1.4.2  yamt   "#"
   2477  1.1.1.1.4.2  yamt   "&& reload_completed"
   2478  1.1.1.1.4.2  yamt   [(set (match_dup 2) (match_op_dup 4 [(match_dup 1)]))
   2479  1.1.1.1.4.2  yamt    (set (match_dup 3) (unspec:SF [(match_dup 2)] UNSPEC_CVTQL))
   2480  1.1.1.1.4.2  yamt    (set (match_dup 5) (match_dup 3))]
   2481  1.1.1.1.4.2  yamt {
   2482  1.1.1.1.4.2  yamt   operands[5] = adjust_address (operands[0], SFmode, 0);
   2483  1.1.1.1.4.2  yamt }
   2484  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2485  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")])
   2486  1.1.1.1.4.2  yamt 
   2487  1.1.1.1.4.2  yamt (define_insn_and_split "*fix_truncdfsi_internal"
   2488  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "memory_operand" "=m")
   2489  1.1.1.1.4.2  yamt 	(subreg:SI
   2490  1.1.1.1.4.2  yamt 	  (match_operator:DI 3 "fix_operator" 
   2491  1.1.1.1.4.2  yamt 	    [(match_operand:DF 1 "reg_or_0_operand" "fG")]) 0))
   2492  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 2 "=f"))]
   2493  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2494  1.1.1.1.4.2  yamt   "#"
   2495  1.1.1.1.4.2  yamt   "&& reload_completed"
   2496  1.1.1.1.4.2  yamt   [(set (match_dup 2) (match_op_dup 3 [(match_dup 1)]))
   2497  1.1.1.1.4.2  yamt    (set (match_dup 4) (unspec:SF [(match_dup 2)] UNSPEC_CVTQL))
   2498  1.1.1.1.4.2  yamt    (set (match_dup 5) (match_dup 4))]
   2499  1.1.1.1.4.2  yamt {
   2500  1.1.1.1.4.2  yamt   operands[4] = gen_rtx_REG (SFmode, REGNO (operands[2]));
   2501  1.1.1.1.4.2  yamt   operands[5] = adjust_address (operands[0], SFmode, 0);
   2502  1.1.1.1.4.2  yamt }
   2503  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2504  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")])
   2505  1.1.1.1.4.2  yamt 
   2506  1.1.1.1.4.2  yamt (define_insn "*fix_truncdfdi_ieee"
   2507  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "=&f")
   2508  1.1.1.1.4.2  yamt 	(match_operator:DI 2 "fix_operator" 
   2509  1.1.1.1.4.2  yamt 	  [(match_operand:DF 1 "reg_or_0_operand" "fG")]))]
   2510  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2511  1.1.1.1.4.2  yamt   "cvt%-q%/ %R1,%0"
   2512  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2513  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2514  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "c")
   2515  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "v_sv_svi")])
   2516  1.1.1.1.4.2  yamt 
   2517  1.1.1.1.4.2  yamt (define_insn "*fix_truncdfdi2"
   2518  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "=f")
   2519  1.1.1.1.4.2  yamt 	(match_operator:DI 2 "fix_operator" 
   2520  1.1.1.1.4.2  yamt 	  [(match_operand:DF 1 "reg_or_0_operand" "fG")]))]
   2521  1.1.1.1.4.2  yamt   "TARGET_FP"
   2522  1.1.1.1.4.2  yamt   "cvt%-q%/ %R1,%0"
   2523  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2524  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2525  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "c")
   2526  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "v_sv_svi")])
   2527  1.1.1.1.4.2  yamt 
   2528  1.1.1.1.4.2  yamt (define_expand "fix_truncdfdi2"
   2529  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "")
   2530  1.1.1.1.4.2  yamt 	(fix:DI (match_operand:DF 1 "reg_or_0_operand" "")))]
   2531  1.1.1.1.4.2  yamt   "TARGET_FP"
   2532  1.1.1.1.4.2  yamt   "")
   2533  1.1.1.1.4.2  yamt 
   2534  1.1.1.1.4.2  yamt (define_expand "fixuns_truncdfdi2"
   2535  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "")
   2536  1.1.1.1.4.2  yamt 	(unsigned_fix:DI (match_operand:DF 1 "reg_or_0_operand" "")))]
   2537  1.1.1.1.4.2  yamt   "TARGET_FP"
   2538  1.1.1.1.4.2  yamt   "")
   2539  1.1.1.1.4.2  yamt 
   2540  1.1.1.1.4.2  yamt ;; Likewise between SFmode and SImode.
   2541  1.1.1.1.4.2  yamt 
   2542  1.1.1.1.4.2  yamt (define_insn_and_split "*fix_truncsfsi_ieee"
   2543  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "memory_operand" "=m")
   2544  1.1.1.1.4.2  yamt 	(subreg:SI
   2545  1.1.1.1.4.2  yamt 	  (match_operator:DI 4 "fix_operator" 
   2546  1.1.1.1.4.2  yamt 	    [(float_extend:DF
   2547  1.1.1.1.4.2  yamt 	       (match_operand:SF 1 "reg_or_0_operand" "fG"))]) 0))
   2548  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 2 "=&f"))
   2549  1.1.1.1.4.2  yamt    (clobber (match_scratch:SF 3 "=&f"))]
   2550  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2551  1.1.1.1.4.2  yamt   "#"
   2552  1.1.1.1.4.2  yamt   "&& reload_completed"
   2553  1.1.1.1.4.2  yamt   [(set (match_dup 2) (match_op_dup 4 [(float_extend:DF (match_dup 1))]))
   2554  1.1.1.1.4.2  yamt    (set (match_dup 3) (unspec:SF [(match_dup 2)] UNSPEC_CVTQL))
   2555  1.1.1.1.4.2  yamt    (set (match_dup 5) (match_dup 3))]
   2556  1.1.1.1.4.2  yamt {
   2557  1.1.1.1.4.2  yamt   operands[5] = adjust_address (operands[0], SFmode, 0);
   2558  1.1.1.1.4.2  yamt }
   2559  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2560  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")])
   2561  1.1.1.1.4.2  yamt 
   2562  1.1.1.1.4.2  yamt (define_insn_and_split "*fix_truncsfsi_internal"
   2563  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "memory_operand" "=m")
   2564  1.1.1.1.4.2  yamt 	(subreg:SI
   2565  1.1.1.1.4.2  yamt 	  (match_operator:DI 3 "fix_operator" 
   2566  1.1.1.1.4.2  yamt 	    [(float_extend:DF
   2567  1.1.1.1.4.2  yamt 	       (match_operand:SF 1 "reg_or_0_operand" "fG"))]) 0))
   2568  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 2 "=f"))]
   2569  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2570  1.1.1.1.4.2  yamt   "#"
   2571  1.1.1.1.4.2  yamt   "&& reload_completed"
   2572  1.1.1.1.4.2  yamt   [(set (match_dup 2) (match_op_dup 3 [(float_extend:DF (match_dup 1))]))
   2573  1.1.1.1.4.2  yamt    (set (match_dup 4) (unspec:SF [(match_dup 2)] UNSPEC_CVTQL))
   2574  1.1.1.1.4.2  yamt    (set (match_dup 5) (match_dup 4))]
   2575  1.1.1.1.4.2  yamt {
   2576  1.1.1.1.4.2  yamt   operands[4] = gen_rtx_REG (SFmode, REGNO (operands[2]));
   2577  1.1.1.1.4.2  yamt   operands[5] = adjust_address (operands[0], SFmode, 0);
   2578  1.1.1.1.4.2  yamt }
   2579  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2580  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")])
   2581  1.1.1.1.4.2  yamt 
   2582  1.1.1.1.4.2  yamt (define_insn "*fix_truncsfdi_ieee"
   2583  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "=&f")
   2584  1.1.1.1.4.2  yamt 	(match_operator:DI 2 "fix_operator" 
   2585  1.1.1.1.4.2  yamt 	  [(float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG"))]))]
   2586  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2587  1.1.1.1.4.2  yamt   "cvt%-q%/ %R1,%0"
   2588  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2589  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2590  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "c")
   2591  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "v_sv_svi")])
   2592  1.1.1.1.4.2  yamt 
   2593  1.1.1.1.4.2  yamt (define_insn "*fix_truncsfdi2"
   2594  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "=f")
   2595  1.1.1.1.4.2  yamt 	(match_operator:DI 2 "fix_operator" 
   2596  1.1.1.1.4.2  yamt 	  [(float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG"))]))]
   2597  1.1.1.1.4.2  yamt   "TARGET_FP"
   2598  1.1.1.1.4.2  yamt   "cvt%-q%/ %R1,%0"
   2599  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2600  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2601  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "c")
   2602  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "v_sv_svi")])
   2603  1.1.1.1.4.2  yamt 
   2604  1.1.1.1.4.2  yamt (define_expand "fix_truncsfdi2"
   2605  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "")
   2606  1.1.1.1.4.2  yamt 	(fix:DI (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" ""))))]
   2607  1.1.1.1.4.2  yamt   "TARGET_FP"
   2608  1.1.1.1.4.2  yamt   "")
   2609  1.1.1.1.4.2  yamt 
   2610  1.1.1.1.4.2  yamt (define_expand "fixuns_truncsfdi2"
   2611  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "reg_no_subreg_operand" "")
   2612  1.1.1.1.4.2  yamt 	(unsigned_fix:DI
   2613  1.1.1.1.4.2  yamt 	  (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" ""))))]
   2614  1.1.1.1.4.2  yamt   "TARGET_FP"
   2615  1.1.1.1.4.2  yamt   "")
   2616  1.1.1.1.4.2  yamt 
   2617  1.1.1.1.4.2  yamt (define_expand "fix_trunctfdi2"
   2618  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
   2619  1.1.1.1.4.2  yamt    (use (match_operand:TF 1 "general_operand" ""))]
   2620  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2621  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_cvt (FIX, operands); DONE;")
   2622  1.1.1.1.4.2  yamt 
   2623  1.1.1.1.4.2  yamt (define_expand "fixuns_trunctfdi2"
   2624  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
   2625  1.1.1.1.4.2  yamt    (use (match_operand:TF 1 "general_operand" ""))]
   2626  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2627  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_cvt (UNSIGNED_FIX, operands); DONE;")
   2628  1.1.1.1.4.2  yamt 
   2629  1.1.1.1.4.2  yamt (define_insn "*floatdisf_ieee"
   2630  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   2631  1.1.1.1.4.2  yamt 	(float:SF (match_operand:DI 1 "reg_no_subreg_operand" "f")))]
   2632  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2633  1.1.1.1.4.2  yamt   "cvtq%,%/ %1,%0"
   2634  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2635  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2636  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2637  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "sui")])
   2638  1.1.1.1.4.2  yamt 
   2639  1.1.1.1.4.2  yamt (define_insn "floatdisf2"
   2640  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2641  1.1.1.1.4.2  yamt 	(float:SF (match_operand:DI 1 "reg_no_subreg_operand" "f")))]
   2642  1.1.1.1.4.2  yamt   "TARGET_FP"
   2643  1.1.1.1.4.2  yamt   "cvtq%,%/ %1,%0"
   2644  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2645  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2646  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2647  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "sui")])
   2648  1.1.1.1.4.2  yamt 
   2649  1.1.1.1.4.2  yamt (define_insn_and_split "*floatsisf2_ieee"
   2650  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   2651  1.1.1.1.4.2  yamt 	(float:SF (match_operand:SI 1 "memory_operand" "m")))
   2652  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 2 "=&f"))
   2653  1.1.1.1.4.2  yamt    (clobber (match_scratch:SF 3 "=&f"))]
   2654  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2655  1.1.1.1.4.2  yamt   "#"
   2656  1.1.1.1.4.2  yamt   "&& reload_completed"
   2657  1.1.1.1.4.2  yamt   [(set (match_dup 3) (match_dup 1))
   2658  1.1.1.1.4.2  yamt    (set (match_dup 2) (unspec:DI [(match_dup 3)] UNSPEC_CVTLQ))
   2659  1.1.1.1.4.2  yamt    (set (match_dup 0) (float:SF (match_dup 2)))]
   2660  1.1.1.1.4.2  yamt {
   2661  1.1.1.1.4.2  yamt   operands[1] = adjust_address (operands[1], SFmode, 0);
   2662  1.1.1.1.4.2  yamt })
   2663  1.1.1.1.4.2  yamt 
   2664  1.1.1.1.4.2  yamt (define_insn_and_split "*floatsisf2"
   2665  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2666  1.1.1.1.4.2  yamt 	(float:SF (match_operand:SI 1 "memory_operand" "m")))]
   2667  1.1.1.1.4.2  yamt   "TARGET_FP"
   2668  1.1.1.1.4.2  yamt   "#"
   2669  1.1.1.1.4.2  yamt   "&& reload_completed"
   2670  1.1.1.1.4.2  yamt   [(set (match_dup 0) (match_dup 1))
   2671  1.1.1.1.4.2  yamt    (set (match_dup 2) (unspec:DI [(match_dup 0)] UNSPEC_CVTLQ))
   2672  1.1.1.1.4.2  yamt    (set (match_dup 0) (float:SF (match_dup 2)))]
   2673  1.1.1.1.4.2  yamt {
   2674  1.1.1.1.4.2  yamt   operands[1] = adjust_address (operands[1], SFmode, 0);
   2675  1.1.1.1.4.2  yamt   operands[2] = gen_rtx_REG (DImode, REGNO (operands[0]));
   2676  1.1.1.1.4.2  yamt })
   2677  1.1.1.1.4.2  yamt 
   2678  1.1.1.1.4.2  yamt (define_insn "*floatdidf_ieee"
   2679  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   2680  1.1.1.1.4.2  yamt 	(float:DF (match_operand:DI 1 "reg_no_subreg_operand" "f")))]
   2681  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2682  1.1.1.1.4.2  yamt   "cvtq%-%/ %1,%0"
   2683  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2684  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2685  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2686  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "sui")])
   2687  1.1.1.1.4.2  yamt 
   2688  1.1.1.1.4.2  yamt (define_insn "floatdidf2"
   2689  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2690  1.1.1.1.4.2  yamt 	(float:DF (match_operand:DI 1 "reg_no_subreg_operand" "f")))]
   2691  1.1.1.1.4.2  yamt   "TARGET_FP"
   2692  1.1.1.1.4.2  yamt   "cvtq%-%/ %1,%0"
   2693  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2694  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2695  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2696  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "sui")])
   2697  1.1.1.1.4.2  yamt 
   2698  1.1.1.1.4.2  yamt (define_insn_and_split "*floatsidf2_ieee"
   2699  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   2700  1.1.1.1.4.2  yamt 	(float:DF (match_operand:SI 1 "memory_operand" "m")))
   2701  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 2 "=&f"))
   2702  1.1.1.1.4.2  yamt    (clobber (match_scratch:SF 3 "=&f"))]
   2703  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2704  1.1.1.1.4.2  yamt   "#"
   2705  1.1.1.1.4.2  yamt   "&& reload_completed"
   2706  1.1.1.1.4.2  yamt   [(set (match_dup 3) (match_dup 1))
   2707  1.1.1.1.4.2  yamt    (set (match_dup 2) (unspec:DI [(match_dup 3)] UNSPEC_CVTLQ))
   2708  1.1.1.1.4.2  yamt    (set (match_dup 0) (float:DF (match_dup 2)))]
   2709  1.1.1.1.4.2  yamt {
   2710  1.1.1.1.4.2  yamt   operands[1] = adjust_address (operands[1], SFmode, 0);
   2711  1.1.1.1.4.2  yamt })
   2712  1.1.1.1.4.2  yamt 
   2713  1.1.1.1.4.2  yamt (define_insn_and_split "*floatsidf2"
   2714  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2715  1.1.1.1.4.2  yamt 	(float:DF (match_operand:SI 1 "memory_operand" "m")))]
   2716  1.1.1.1.4.2  yamt   "TARGET_FP"
   2717  1.1.1.1.4.2  yamt   "#"
   2718  1.1.1.1.4.2  yamt   "&& reload_completed"
   2719  1.1.1.1.4.2  yamt   [(set (match_dup 3) (match_dup 1))
   2720  1.1.1.1.4.2  yamt    (set (match_dup 2) (unspec:DI [(match_dup 3)] UNSPEC_CVTLQ))
   2721  1.1.1.1.4.2  yamt    (set (match_dup 0) (float:DF (match_dup 2)))]
   2722  1.1.1.1.4.2  yamt {
   2723  1.1.1.1.4.2  yamt   operands[1] = adjust_address (operands[1], SFmode, 0);
   2724  1.1.1.1.4.2  yamt   operands[2] = gen_rtx_REG (DImode, REGNO (operands[0]));
   2725  1.1.1.1.4.2  yamt   operands[3] = gen_rtx_REG (SFmode, REGNO (operands[0]));
   2726  1.1.1.1.4.2  yamt })
   2727  1.1.1.1.4.2  yamt 
   2728  1.1.1.1.4.2  yamt (define_expand "floatditf2"
   2729  1.1.1.1.4.2  yamt   [(use (match_operand:TF 0 "register_operand" ""))
   2730  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "general_operand" ""))]
   2731  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2732  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_cvt (FLOAT, operands); DONE;")
   2733  1.1.1.1.4.2  yamt 
   2734  1.1.1.1.4.2  yamt (define_expand "floatunsdisf2"
   2735  1.1.1.1.4.2  yamt   [(use (match_operand:SF 0 "register_operand" ""))
   2736  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "register_operand" ""))]
   2737  1.1.1.1.4.2  yamt   "TARGET_FP"
   2738  1.1.1.1.4.2  yamt   "alpha_emit_floatuns (operands); DONE;")
   2739  1.1.1.1.4.2  yamt 
   2740  1.1.1.1.4.2  yamt (define_expand "floatunsdidf2"
   2741  1.1.1.1.4.2  yamt   [(use (match_operand:DF 0 "register_operand" ""))
   2742  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "register_operand" ""))]
   2743  1.1.1.1.4.2  yamt   "TARGET_FP"
   2744  1.1.1.1.4.2  yamt   "alpha_emit_floatuns (operands); DONE;")
   2745  1.1.1.1.4.2  yamt 
   2746  1.1.1.1.4.2  yamt (define_expand "floatunsditf2"
   2747  1.1.1.1.4.2  yamt   [(use (match_operand:TF 0 "register_operand" ""))
   2748  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "general_operand" ""))]
   2749  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2750  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_cvt (UNSIGNED_FLOAT, operands); DONE;")
   2751  1.1.1.1.4.2  yamt 
   2752  1.1.1.1.4.2  yamt (define_expand "extendsfdf2"
   2753  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "")
   2754  1.1.1.1.4.2  yamt 	(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))]
   2755  1.1.1.1.4.2  yamt   "TARGET_FP"
   2756  1.1.1.1.4.2  yamt {
   2757  1.1.1.1.4.2  yamt   if (alpha_fptm >= ALPHA_FPTM_SU)
   2758  1.1.1.1.4.2  yamt     operands[1] = force_reg (SFmode, operands[1]);
   2759  1.1.1.1.4.2  yamt })
   2760  1.1.1.1.4.2  yamt 
   2761  1.1.1.1.4.2  yamt ;; The Unicos/Mk assembler doesn't support cvtst, but we've already
   2762  1.1.1.1.4.2  yamt ;; asserted that alpha_fptm == ALPHA_FPTM_N.
   2763  1.1.1.1.4.2  yamt 
   2764  1.1.1.1.4.2  yamt (define_insn "*extendsfdf2_ieee"
   2765  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   2766  1.1.1.1.4.2  yamt 	(float_extend:DF (match_operand:SF 1 "register_operand" "f")))]
   2767  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2768  1.1.1.1.4.2  yamt   "cvtsts %1,%0"
   2769  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2770  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")])
   2771  1.1.1.1.4.2  yamt 
   2772  1.1.1.1.4.2  yamt (define_insn "*extendsfdf2_internal"
   2773  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f,f,m")
   2774  1.1.1.1.4.2  yamt 	(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "f,m,f")))]
   2775  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2776  1.1.1.1.4.2  yamt   "@
   2777  1.1.1.1.4.2  yamt    cpys %1,%1,%0
   2778  1.1.1.1.4.2  yamt    ld%, %0,%1
   2779  1.1.1.1.4.2  yamt    st%- %1,%0"
   2780  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys,fld,fst")])
   2781  1.1.1.1.4.2  yamt 
   2782  1.1.1.1.4.2  yamt ;; Use register_operand for operand 1 to prevent compress_float_constant
   2783  1.1.1.1.4.2  yamt ;; from doing something silly.  When optimizing we'll put things back 
   2784  1.1.1.1.4.2  yamt ;; together anyway.
   2785  1.1.1.1.4.2  yamt (define_expand "extendsftf2"
   2786  1.1.1.1.4.2  yamt   [(use (match_operand:TF 0 "register_operand" ""))
   2787  1.1.1.1.4.2  yamt    (use (match_operand:SF 1 "register_operand" ""))]
   2788  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2789  1.1.1.1.4.2  yamt {
   2790  1.1.1.1.4.2  yamt   rtx tmp = gen_reg_rtx (DFmode);
   2791  1.1.1.1.4.2  yamt   emit_insn (gen_extendsfdf2 (tmp, operands[1]));
   2792  1.1.1.1.4.2  yamt   emit_insn (gen_extenddftf2 (operands[0], tmp));
   2793  1.1.1.1.4.2  yamt   DONE;
   2794  1.1.1.1.4.2  yamt })
   2795  1.1.1.1.4.2  yamt 
   2796  1.1.1.1.4.2  yamt (define_expand "extenddftf2"
   2797  1.1.1.1.4.2  yamt   [(use (match_operand:TF 0 "register_operand" ""))
   2798  1.1.1.1.4.2  yamt    (use (match_operand:DF 1 "register_operand" ""))]
   2799  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2800  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_cvt (FLOAT_EXTEND, operands); DONE;")
   2801  1.1.1.1.4.2  yamt 
   2802  1.1.1.1.4.2  yamt (define_insn "*truncdfsf2_ieee"
   2803  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   2804  1.1.1.1.4.2  yamt 	(float_truncate:SF (match_operand:DF 1 "reg_or_0_operand" "fG")))]
   2805  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2806  1.1.1.1.4.2  yamt   "cvt%-%,%/ %R1,%0"
   2807  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2808  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2809  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2810  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2811  1.1.1.1.4.2  yamt 
   2812  1.1.1.1.4.2  yamt (define_insn "truncdfsf2"
   2813  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2814  1.1.1.1.4.2  yamt 	(float_truncate:SF (match_operand:DF 1 "reg_or_0_operand" "fG")))]
   2815  1.1.1.1.4.2  yamt   "TARGET_FP"
   2816  1.1.1.1.4.2  yamt   "cvt%-%,%/ %R1,%0"
   2817  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   2818  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2819  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2820  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2821  1.1.1.1.4.2  yamt 
   2822  1.1.1.1.4.2  yamt (define_expand "trunctfdf2"
   2823  1.1.1.1.4.2  yamt   [(use (match_operand:DF 0 "register_operand" ""))
   2824  1.1.1.1.4.2  yamt    (use (match_operand:TF 1 "general_operand" ""))]
   2825  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2826  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_cvt (FLOAT_TRUNCATE, operands); DONE;")
   2827  1.1.1.1.4.2  yamt 
   2828  1.1.1.1.4.2  yamt (define_expand "trunctfsf2"
   2829  1.1.1.1.4.2  yamt   [(use (match_operand:SF 0 "register_operand" ""))
   2830  1.1.1.1.4.2  yamt    (use (match_operand:TF 1 "general_operand" ""))]
   2831  1.1.1.1.4.2  yamt   "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   2832  1.1.1.1.4.2  yamt {
   2833  1.1.1.1.4.2  yamt   rtx tmpf, sticky, arg, lo, hi;
   2834  1.1.1.1.4.2  yamt 
   2835  1.1.1.1.4.2  yamt   tmpf = gen_reg_rtx (DFmode);
   2836  1.1.1.1.4.2  yamt   sticky = gen_reg_rtx (DImode);
   2837  1.1.1.1.4.2  yamt   arg = copy_to_mode_reg (TFmode, operands[1]);
   2838  1.1.1.1.4.2  yamt   lo = gen_lowpart (DImode, arg);
   2839  1.1.1.1.4.2  yamt   hi = gen_highpart (DImode, arg);
   2840  1.1.1.1.4.2  yamt 
   2841  1.1.1.1.4.2  yamt   /* Convert the low word of the TFmode value into a sticky rounding bit,
   2842  1.1.1.1.4.2  yamt      then or it into the low bit of the high word.  This leaves the sticky
   2843  1.1.1.1.4.2  yamt      bit at bit 48 of the fraction, which is representable in DFmode,
   2844  1.1.1.1.4.2  yamt      which prevents rounding error in the final conversion to SFmode.  */
   2845  1.1.1.1.4.2  yamt 
   2846  1.1.1.1.4.2  yamt   emit_insn (gen_rtx_SET (VOIDmode, sticky,
   2847  1.1.1.1.4.2  yamt 			  gen_rtx_NE (DImode, lo, const0_rtx)));
   2848  1.1.1.1.4.2  yamt   emit_insn (gen_iordi3 (hi, hi, sticky));
   2849  1.1.1.1.4.2  yamt   emit_insn (gen_trunctfdf2 (tmpf, arg));
   2850  1.1.1.1.4.2  yamt   emit_insn (gen_truncdfsf2 (operands[0], tmpf));
   2851  1.1.1.1.4.2  yamt   DONE;
   2852  1.1.1.1.4.2  yamt })
   2853  1.1.1.1.4.2  yamt 
   2854  1.1.1.1.4.2  yamt (define_insn "*divsf3_ieee"
   2855  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   2856  1.1.1.1.4.2  yamt 	(div:SF (match_operand:SF 1 "reg_or_0_operand" "fG")
   2857  1.1.1.1.4.2  yamt 		(match_operand:SF 2 "reg_or_0_operand" "fG")))]
   2858  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2859  1.1.1.1.4.2  yamt   "div%,%/ %R1,%R2,%0"
   2860  1.1.1.1.4.2  yamt   [(set_attr "type" "fdiv")
   2861  1.1.1.1.4.2  yamt    (set_attr "opsize" "si")
   2862  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2863  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2864  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2865  1.1.1.1.4.2  yamt 
   2866  1.1.1.1.4.2  yamt (define_insn "divsf3"
   2867  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2868  1.1.1.1.4.2  yamt 	(div:SF (match_operand:SF 1 "reg_or_0_operand" "fG")
   2869  1.1.1.1.4.2  yamt 		(match_operand:SF 2 "reg_or_0_operand" "fG")))]
   2870  1.1.1.1.4.2  yamt   "TARGET_FP"
   2871  1.1.1.1.4.2  yamt   "div%,%/ %R1,%R2,%0"
   2872  1.1.1.1.4.2  yamt   [(set_attr "type" "fdiv")
   2873  1.1.1.1.4.2  yamt    (set_attr "opsize" "si")
   2874  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2875  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2876  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2877  1.1.1.1.4.2  yamt 
   2878  1.1.1.1.4.2  yamt (define_insn "*divdf3_ieee"
   2879  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   2880  1.1.1.1.4.2  yamt 	(div:DF (match_operand:DF 1 "reg_or_0_operand" "fG")
   2881  1.1.1.1.4.2  yamt 		(match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2882  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2883  1.1.1.1.4.2  yamt   "div%-%/ %R1,%R2,%0"
   2884  1.1.1.1.4.2  yamt   [(set_attr "type" "fdiv")
   2885  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2886  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2887  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2888  1.1.1.1.4.2  yamt 
   2889  1.1.1.1.4.2  yamt (define_insn "divdf3"
   2890  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2891  1.1.1.1.4.2  yamt 	(div:DF (match_operand:DF 1 "reg_or_0_operand" "fG")
   2892  1.1.1.1.4.2  yamt 		(match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2893  1.1.1.1.4.2  yamt   "TARGET_FP"
   2894  1.1.1.1.4.2  yamt   "div%-%/ %R1,%R2,%0"
   2895  1.1.1.1.4.2  yamt   [(set_attr "type" "fdiv")
   2896  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2897  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2898  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2899  1.1.1.1.4.2  yamt 
   2900  1.1.1.1.4.2  yamt (define_insn "*divdf_ext1"
   2901  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2902  1.1.1.1.4.2  yamt 	(div:DF (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG"))
   2903  1.1.1.1.4.2  yamt 		(match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2904  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2905  1.1.1.1.4.2  yamt   "div%-%/ %R1,%R2,%0"
   2906  1.1.1.1.4.2  yamt   [(set_attr "type" "fdiv")
   2907  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2908  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2909  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2910  1.1.1.1.4.2  yamt 
   2911  1.1.1.1.4.2  yamt (define_insn "*divdf_ext2"
   2912  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2913  1.1.1.1.4.2  yamt 	(div:DF (match_operand:DF 1 "reg_or_0_operand" "fG")
   2914  1.1.1.1.4.2  yamt 		(float_extend:DF
   2915  1.1.1.1.4.2  yamt 		 (match_operand:SF 2 "reg_or_0_operand" "fG"))))]
   2916  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2917  1.1.1.1.4.2  yamt   "div%-%/ %R1,%R2,%0"
   2918  1.1.1.1.4.2  yamt   [(set_attr "type" "fdiv")
   2919  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2920  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2921  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2922  1.1.1.1.4.2  yamt 
   2923  1.1.1.1.4.2  yamt (define_insn "*divdf_ext3"
   2924  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2925  1.1.1.1.4.2  yamt 	(div:DF (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG"))
   2926  1.1.1.1.4.2  yamt 		(float_extend:DF (match_operand:SF 2 "reg_or_0_operand" "fG"))))]
   2927  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2928  1.1.1.1.4.2  yamt   "div%-%/ %R1,%R2,%0"
   2929  1.1.1.1.4.2  yamt   [(set_attr "type" "fdiv")
   2930  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2931  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2932  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2933  1.1.1.1.4.2  yamt 
   2934  1.1.1.1.4.2  yamt (define_expand "divtf3"
   2935  1.1.1.1.4.2  yamt   [(use (match_operand 0 "register_operand" ""))
   2936  1.1.1.1.4.2  yamt    (use (match_operand 1 "general_operand" ""))
   2937  1.1.1.1.4.2  yamt    (use (match_operand 2 "general_operand" ""))]
   2938  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   2939  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_arith (DIV, operands); DONE;")
   2940  1.1.1.1.4.2  yamt 
   2941  1.1.1.1.4.2  yamt (define_insn "*mulsf3_ieee"
   2942  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   2943  1.1.1.1.4.2  yamt 	(mult:SF (match_operand:SF 1 "reg_or_0_operand" "%fG")
   2944  1.1.1.1.4.2  yamt 		 (match_operand:SF 2 "reg_or_0_operand" "fG")))]
   2945  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2946  1.1.1.1.4.2  yamt   "mul%,%/ %R1,%R2,%0"
   2947  1.1.1.1.4.2  yamt   [(set_attr "type" "fmul")
   2948  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2949  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2950  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2951  1.1.1.1.4.2  yamt 
   2952  1.1.1.1.4.2  yamt (define_insn "mulsf3"
   2953  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   2954  1.1.1.1.4.2  yamt 	(mult:SF (match_operand:SF 1 "reg_or_0_operand" "%fG")
   2955  1.1.1.1.4.2  yamt 		 (match_operand:SF 2 "reg_or_0_operand" "fG")))]
   2956  1.1.1.1.4.2  yamt   "TARGET_FP"
   2957  1.1.1.1.4.2  yamt   "mul%,%/ %R1,%R2,%0"
   2958  1.1.1.1.4.2  yamt   [(set_attr "type" "fmul")
   2959  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2960  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2961  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2962  1.1.1.1.4.2  yamt 
   2963  1.1.1.1.4.2  yamt (define_insn "*muldf3_ieee"
   2964  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   2965  1.1.1.1.4.2  yamt 	(mult:DF (match_operand:DF 1 "reg_or_0_operand" "%fG")
   2966  1.1.1.1.4.2  yamt 		 (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2967  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   2968  1.1.1.1.4.2  yamt   "mul%-%/ %R1,%R2,%0"
   2969  1.1.1.1.4.2  yamt   [(set_attr "type" "fmul")
   2970  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2971  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2972  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2973  1.1.1.1.4.2  yamt 
   2974  1.1.1.1.4.2  yamt (define_insn "muldf3"
   2975  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2976  1.1.1.1.4.2  yamt 	(mult:DF (match_operand:DF 1 "reg_or_0_operand" "%fG")
   2977  1.1.1.1.4.2  yamt 		 (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2978  1.1.1.1.4.2  yamt   "TARGET_FP"
   2979  1.1.1.1.4.2  yamt   "mul%-%/ %R1,%R2,%0"
   2980  1.1.1.1.4.2  yamt   [(set_attr "type" "fmul")
   2981  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2982  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2983  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2984  1.1.1.1.4.2  yamt 
   2985  1.1.1.1.4.2  yamt (define_insn "*muldf_ext1"
   2986  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2987  1.1.1.1.4.2  yamt 	(mult:DF (float_extend:DF
   2988  1.1.1.1.4.2  yamt 		  (match_operand:SF 1 "reg_or_0_operand" "fG"))
   2989  1.1.1.1.4.2  yamt 		 (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   2990  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   2991  1.1.1.1.4.2  yamt   "mul%-%/ %R1,%R2,%0"
   2992  1.1.1.1.4.2  yamt   [(set_attr "type" "fmul")
   2993  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   2994  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   2995  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   2996  1.1.1.1.4.2  yamt 
   2997  1.1.1.1.4.2  yamt (define_insn "*muldf_ext2"
   2998  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   2999  1.1.1.1.4.2  yamt 	(mult:DF (float_extend:DF
   3000  1.1.1.1.4.2  yamt 		  (match_operand:SF 1 "reg_or_0_operand" "%fG"))
   3001  1.1.1.1.4.2  yamt 		 (float_extend:DF
   3002  1.1.1.1.4.2  yamt 		  (match_operand:SF 2 "reg_or_0_operand" "fG"))))]
   3003  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3004  1.1.1.1.4.2  yamt   "mul%-%/ %R1,%R2,%0"
   3005  1.1.1.1.4.2  yamt   [(set_attr "type" "fmul")
   3006  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3007  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3008  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3009  1.1.1.1.4.2  yamt 
   3010  1.1.1.1.4.2  yamt (define_expand "multf3"
   3011  1.1.1.1.4.2  yamt   [(use (match_operand 0 "register_operand" ""))
   3012  1.1.1.1.4.2  yamt    (use (match_operand 1 "general_operand" ""))
   3013  1.1.1.1.4.2  yamt    (use (match_operand 2 "general_operand" ""))]
   3014  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   3015  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_arith (MULT, operands); DONE;")
   3016  1.1.1.1.4.2  yamt 
   3017  1.1.1.1.4.2  yamt (define_insn "*subsf3_ieee"
   3018  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   3019  1.1.1.1.4.2  yamt 	(minus:SF (match_operand:SF 1 "reg_or_0_operand" "fG")
   3020  1.1.1.1.4.2  yamt 		  (match_operand:SF 2 "reg_or_0_operand" "fG")))]
   3021  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   3022  1.1.1.1.4.2  yamt   "sub%,%/ %R1,%R2,%0"
   3023  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3024  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3025  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3026  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3027  1.1.1.1.4.2  yamt 
   3028  1.1.1.1.4.2  yamt (define_insn "subsf3"
   3029  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   3030  1.1.1.1.4.2  yamt 	(minus:SF (match_operand:SF 1 "reg_or_0_operand" "fG")
   3031  1.1.1.1.4.2  yamt 		  (match_operand:SF 2 "reg_or_0_operand" "fG")))]
   3032  1.1.1.1.4.2  yamt   "TARGET_FP"
   3033  1.1.1.1.4.2  yamt   "sub%,%/ %R1,%R2,%0"
   3034  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3035  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3036  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3037  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3038  1.1.1.1.4.2  yamt 
   3039  1.1.1.1.4.2  yamt (define_insn "*subdf3_ieee"
   3040  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   3041  1.1.1.1.4.2  yamt 	(minus:DF (match_operand:DF 1 "reg_or_0_operand" "fG")
   3042  1.1.1.1.4.2  yamt 		  (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   3043  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   3044  1.1.1.1.4.2  yamt   "sub%-%/ %R1,%R2,%0"
   3045  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3046  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3047  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3048  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3049  1.1.1.1.4.2  yamt 
   3050  1.1.1.1.4.2  yamt (define_insn "subdf3"
   3051  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3052  1.1.1.1.4.2  yamt 	(minus:DF (match_operand:DF 1 "reg_or_0_operand" "fG")
   3053  1.1.1.1.4.2  yamt 		  (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   3054  1.1.1.1.4.2  yamt   "TARGET_FP"
   3055  1.1.1.1.4.2  yamt   "sub%-%/ %R1,%R2,%0"
   3056  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3057  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3058  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3059  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3060  1.1.1.1.4.2  yamt 
   3061  1.1.1.1.4.2  yamt (define_insn "*subdf_ext1"
   3062  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3063  1.1.1.1.4.2  yamt 	(minus:DF (float_extend:DF
   3064  1.1.1.1.4.2  yamt 		   (match_operand:SF 1 "reg_or_0_operand" "fG"))
   3065  1.1.1.1.4.2  yamt 		  (match_operand:DF 2 "reg_or_0_operand" "fG")))]
   3066  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3067  1.1.1.1.4.2  yamt   "sub%-%/ %R1,%R2,%0"
   3068  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3069  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3070  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3071  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3072  1.1.1.1.4.2  yamt 
   3073  1.1.1.1.4.2  yamt (define_insn "*subdf_ext2"
   3074  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3075  1.1.1.1.4.2  yamt 	(minus:DF (match_operand:DF 1 "reg_or_0_operand" "fG")
   3076  1.1.1.1.4.2  yamt 		  (float_extend:DF
   3077  1.1.1.1.4.2  yamt 		   (match_operand:SF 2 "reg_or_0_operand" "fG"))))]
   3078  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3079  1.1.1.1.4.2  yamt   "sub%-%/ %R1,%R2,%0"
   3080  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3081  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3082  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3083  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3084  1.1.1.1.4.2  yamt 
   3085  1.1.1.1.4.2  yamt (define_insn "*subdf_ext3"
   3086  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3087  1.1.1.1.4.2  yamt 	(minus:DF (float_extend:DF
   3088  1.1.1.1.4.2  yamt 		   (match_operand:SF 1 "reg_or_0_operand" "fG"))
   3089  1.1.1.1.4.2  yamt 		  (float_extend:DF
   3090  1.1.1.1.4.2  yamt 		   (match_operand:SF 2 "reg_or_0_operand" "fG"))))]
   3091  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3092  1.1.1.1.4.2  yamt   "sub%-%/ %R1,%R2,%0"
   3093  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3094  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3095  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3096  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3097  1.1.1.1.4.2  yamt 
   3098  1.1.1.1.4.2  yamt (define_expand "subtf3"
   3099  1.1.1.1.4.2  yamt   [(use (match_operand 0 "register_operand" ""))
   3100  1.1.1.1.4.2  yamt    (use (match_operand 1 "general_operand" ""))
   3101  1.1.1.1.4.2  yamt    (use (match_operand 2 "general_operand" ""))]
   3102  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   3103  1.1.1.1.4.2  yamt   "alpha_emit_xfloating_arith (MINUS, operands); DONE;")
   3104  1.1.1.1.4.2  yamt 
   3105  1.1.1.1.4.2  yamt (define_insn "*sqrtsf2_ieee"
   3106  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=&f")
   3107  1.1.1.1.4.2  yamt 	(sqrt:SF (match_operand:SF 1 "reg_or_0_operand" "fG")))]
   3108  1.1.1.1.4.2  yamt   "TARGET_FP && TARGET_FIX && alpha_fptm >= ALPHA_FPTM_SU"
   3109  1.1.1.1.4.2  yamt   "sqrt%,%/ %R1,%0"
   3110  1.1.1.1.4.2  yamt   [(set_attr "type" "fsqrt")
   3111  1.1.1.1.4.2  yamt    (set_attr "opsize" "si")
   3112  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3113  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3114  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3115  1.1.1.1.4.2  yamt 
   3116  1.1.1.1.4.2  yamt (define_insn "sqrtsf2"
   3117  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f")
   3118  1.1.1.1.4.2  yamt 	(sqrt:SF (match_operand:SF 1 "reg_or_0_operand" "fG")))]
   3119  1.1.1.1.4.2  yamt   "TARGET_FP && TARGET_FIX"
   3120  1.1.1.1.4.2  yamt   "sqrt%,%/ %R1,%0"
   3121  1.1.1.1.4.2  yamt   [(set_attr "type" "fsqrt")
   3122  1.1.1.1.4.2  yamt    (set_attr "opsize" "si")
   3123  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3124  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3125  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3126  1.1.1.1.4.2  yamt 
   3127  1.1.1.1.4.2  yamt (define_insn "*sqrtdf2_ieee"
   3128  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   3129  1.1.1.1.4.2  yamt 	(sqrt:DF (match_operand:DF 1 "reg_or_0_operand" "fG")))]
   3130  1.1.1.1.4.2  yamt   "TARGET_FP && TARGET_FIX && alpha_fptm >= ALPHA_FPTM_SU"
   3131  1.1.1.1.4.2  yamt   "sqrt%-%/ %R1,%0"
   3132  1.1.1.1.4.2  yamt   [(set_attr "type" "fsqrt")
   3133  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3134  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3135  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3136  1.1.1.1.4.2  yamt 
   3137  1.1.1.1.4.2  yamt (define_insn "sqrtdf2"
   3138  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3139  1.1.1.1.4.2  yamt 	(sqrt:DF (match_operand:DF 1 "reg_or_0_operand" "fG")))]
   3140  1.1.1.1.4.2  yamt   "TARGET_FP && TARGET_FIX"
   3141  1.1.1.1.4.2  yamt   "sqrt%-%/ %R1,%0"
   3142  1.1.1.1.4.2  yamt   [(set_attr "type" "fsqrt")
   3143  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3144  1.1.1.1.4.2  yamt    (set_attr "round_suffix" "normal")
   3145  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "u_su_sui")])
   3146  1.1.1.1.4.2  yamt 
   3148  1.1.1.1.4.2  yamt ;; Next are all the integer comparisons, and conditional moves and branches
   3149  1.1.1.1.4.2  yamt ;; and some of the related define_expand's and define_split's.
   3150  1.1.1.1.4.2  yamt 
   3151  1.1.1.1.4.2  yamt (define_insn "*setcc_internal"
   3152  1.1.1.1.4.2  yamt   [(set (match_operand 0 "register_operand" "=r")
   3153  1.1.1.1.4.2  yamt 	(match_operator 1 "alpha_comparison_operator"
   3154  1.1.1.1.4.2  yamt 			   [(match_operand:DI 2 "register_operand" "r")
   3155  1.1.1.1.4.2  yamt 			    (match_operand:DI 3 "reg_or_8bit_operand" "rI")]))]
   3156  1.1.1.1.4.2  yamt   "GET_MODE_CLASS (GET_MODE (operands[0])) == MODE_INT
   3157  1.1.1.1.4.2  yamt    && GET_MODE_SIZE (GET_MODE (operands[0])) <= 8
   3158  1.1.1.1.4.2  yamt    && GET_MODE (operands[0]) == GET_MODE (operands[1])"
   3159  1.1.1.1.4.2  yamt   "cmp%C1 %2,%3,%0"
   3160  1.1.1.1.4.2  yamt   [(set_attr "type" "icmp")])
   3161  1.1.1.1.4.2  yamt 
   3162  1.1.1.1.4.2  yamt ;; Yes, we can technically support reg_or_8bit_operand in operand 2,
   3163  1.1.1.1.4.2  yamt ;; but that's non-canonical rtl and allowing that causes inefficiencies
   3164  1.1.1.1.4.2  yamt ;; from cse on.
   3165  1.1.1.1.4.2  yamt (define_insn "*setcc_swapped_internal"
   3166  1.1.1.1.4.2  yamt   [(set (match_operand 0 "register_operand" "=r")
   3167  1.1.1.1.4.2  yamt         (match_operator 1 "alpha_swapped_comparison_operator"
   3168  1.1.1.1.4.2  yamt 			   [(match_operand:DI 2 "register_operand" "r")
   3169  1.1.1.1.4.2  yamt 			    (match_operand:DI 3 "reg_or_0_operand" "rJ")]))]
   3170  1.1.1.1.4.2  yamt   "GET_MODE_CLASS (GET_MODE (operands[0])) == MODE_INT
   3171  1.1.1.1.4.2  yamt    && GET_MODE_SIZE (GET_MODE (operands[0])) <= 8
   3172  1.1.1.1.4.2  yamt    && GET_MODE (operands[0]) == GET_MODE (operands[1])"
   3173  1.1.1.1.4.2  yamt   "cmp%c1 %r3,%2,%0"
   3174  1.1.1.1.4.2  yamt   [(set_attr "type" "icmp")])
   3175  1.1.1.1.4.2  yamt 
   3176  1.1.1.1.4.2  yamt ;; Use match_operator rather than ne directly so that we can match
   3177  1.1.1.1.4.2  yamt ;; multiple integer modes.
   3178  1.1.1.1.4.2  yamt (define_insn "*setne_internal"
   3179  1.1.1.1.4.2  yamt   [(set (match_operand 0 "register_operand" "=r")
   3180  1.1.1.1.4.2  yamt 	(match_operator 1 "signed_comparison_operator"
   3181  1.1.1.1.4.2  yamt 			  [(match_operand:DI 2 "register_operand" "r")
   3182  1.1.1.1.4.2  yamt 			   (const_int 0)]))]
   3183  1.1.1.1.4.2  yamt   "GET_MODE_CLASS (GET_MODE (operands[0])) == MODE_INT
   3184  1.1.1.1.4.2  yamt    && GET_MODE_SIZE (GET_MODE (operands[0])) <= 8
   3185  1.1.1.1.4.2  yamt    && GET_CODE (operands[1]) == NE
   3186  1.1.1.1.4.2  yamt    && GET_MODE (operands[0]) == GET_MODE (operands[1])"
   3187  1.1.1.1.4.2  yamt   "cmpult $31,%2,%0"
   3188  1.1.1.1.4.2  yamt   [(set_attr "type" "icmp")])
   3189  1.1.1.1.4.2  yamt 
   3190  1.1.1.1.4.2  yamt ;; The mode folding trick can't be used with const_int operands, since
   3191  1.1.1.1.4.2  yamt ;; reload needs to know the proper mode.
   3192  1.1.1.1.4.2  yamt ;;
   3193  1.1.1.1.4.2  yamt ;; Use add_operand instead of the more seemingly natural reg_or_8bit_operand
   3194  1.1.1.1.4.2  yamt ;; in order to create more pairs of constants.  As long as we're allowing
   3195  1.1.1.1.4.2  yamt ;; two constants at the same time, and will have to reload one of them...
   3196  1.1.1.1.4.2  yamt 
   3197  1.1.1.1.4.2  yamt (define_insn "*movqicc_internal"
   3198  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r,r,r,r")
   3199  1.1.1.1.4.2  yamt 	(if_then_else:QI
   3200  1.1.1.1.4.2  yamt 	 (match_operator 2 "signed_comparison_operator"
   3201  1.1.1.1.4.2  yamt 			 [(match_operand:DI 3 "reg_or_0_operand" "rJ,rJ,J,J")
   3202  1.1.1.1.4.2  yamt 			  (match_operand:DI 4 "reg_or_0_operand" "J,J,rJ,rJ")])
   3203  1.1.1.1.4.2  yamt 	 (match_operand:QI 1 "add_operand" "rI,0,rI,0")
   3204  1.1.1.1.4.2  yamt 	 (match_operand:QI 5 "add_operand" "0,rI,0,rI")))]
   3205  1.1.1.1.4.2  yamt   "(operands[3] == const0_rtx) ^ (operands[4] == const0_rtx)"
   3206  1.1.1.1.4.2  yamt   "@
   3207  1.1.1.1.4.2  yamt    cmov%C2 %r3,%1,%0
   3208  1.1.1.1.4.2  yamt    cmov%D2 %r3,%5,%0
   3209  1.1.1.1.4.2  yamt    cmov%c2 %r4,%1,%0
   3210  1.1.1.1.4.2  yamt    cmov%d2 %r4,%5,%0"
   3211  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3212  1.1.1.1.4.2  yamt 
   3213  1.1.1.1.4.2  yamt (define_insn "*movhicc_internal"
   3214  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r,r,r,r")
   3215  1.1.1.1.4.2  yamt 	(if_then_else:HI
   3216  1.1.1.1.4.2  yamt 	 (match_operator 2 "signed_comparison_operator"
   3217  1.1.1.1.4.2  yamt 			 [(match_operand:DI 3 "reg_or_0_operand" "rJ,rJ,J,J")
   3218  1.1.1.1.4.2  yamt 			  (match_operand:DI 4 "reg_or_0_operand" "J,J,rJ,rJ")])
   3219  1.1.1.1.4.2  yamt 	 (match_operand:HI 1 "add_operand" "rI,0,rI,0")
   3220  1.1.1.1.4.2  yamt 	 (match_operand:HI 5 "add_operand" "0,rI,0,rI")))]
   3221  1.1.1.1.4.2  yamt   "(operands[3] == const0_rtx) ^ (operands[4] == const0_rtx)"
   3222  1.1.1.1.4.2  yamt   "@
   3223  1.1.1.1.4.2  yamt    cmov%C2 %r3,%1,%0
   3224  1.1.1.1.4.2  yamt    cmov%D2 %r3,%5,%0
   3225  1.1.1.1.4.2  yamt    cmov%c2 %r4,%1,%0
   3226  1.1.1.1.4.2  yamt    cmov%d2 %r4,%5,%0"
   3227  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3228  1.1.1.1.4.2  yamt 
   3229  1.1.1.1.4.2  yamt (define_insn "*movsicc_internal"
   3230  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
   3231  1.1.1.1.4.2  yamt 	(if_then_else:SI
   3232  1.1.1.1.4.2  yamt 	 (match_operator 2 "signed_comparison_operator"
   3233  1.1.1.1.4.2  yamt 			 [(match_operand:DI 3 "reg_or_0_operand" "rJ,rJ,J,J")
   3234  1.1.1.1.4.2  yamt 			  (match_operand:DI 4 "reg_or_0_operand" "J,J,rJ,rJ")])
   3235  1.1.1.1.4.2  yamt 	 (match_operand:SI 1 "add_operand" "rI,0,rI,0")
   3236  1.1.1.1.4.2  yamt 	 (match_operand:SI 5 "add_operand" "0,rI,0,rI")))]
   3237  1.1.1.1.4.2  yamt   "(operands[3] == const0_rtx) ^ (operands[4] == const0_rtx)"
   3238  1.1.1.1.4.2  yamt   "@
   3239  1.1.1.1.4.2  yamt    cmov%C2 %r3,%1,%0
   3240  1.1.1.1.4.2  yamt    cmov%D2 %r3,%5,%0
   3241  1.1.1.1.4.2  yamt    cmov%c2 %r4,%1,%0
   3242  1.1.1.1.4.2  yamt    cmov%d2 %r4,%5,%0"
   3243  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3244  1.1.1.1.4.2  yamt 
   3245  1.1.1.1.4.2  yamt (define_insn "*movdicc_internal"
   3246  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r,r,r")
   3247  1.1.1.1.4.2  yamt 	(if_then_else:DI
   3248  1.1.1.1.4.2  yamt 	 (match_operator 2 "signed_comparison_operator"
   3249  1.1.1.1.4.2  yamt 			 [(match_operand:DI 3 "reg_or_0_operand" "rJ,rJ,J,J")
   3250  1.1.1.1.4.2  yamt 			  (match_operand:DI 4 "reg_or_0_operand" "J,J,rJ,rJ")])
   3251  1.1.1.1.4.2  yamt 	 (match_operand:DI 1 "add_operand" "rI,0,rI,0")
   3252  1.1.1.1.4.2  yamt 	 (match_operand:DI 5 "add_operand" "0,rI,0,rI")))]
   3253  1.1.1.1.4.2  yamt   "(operands[3] == const0_rtx) ^ (operands[4] == const0_rtx)"
   3254  1.1.1.1.4.2  yamt   "@
   3255  1.1.1.1.4.2  yamt    cmov%C2 %r3,%1,%0
   3256  1.1.1.1.4.2  yamt    cmov%D2 %r3,%5,%0
   3257  1.1.1.1.4.2  yamt    cmov%c2 %r4,%1,%0
   3258  1.1.1.1.4.2  yamt    cmov%d2 %r4,%5,%0"
   3259  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3260  1.1.1.1.4.2  yamt 
   3261  1.1.1.1.4.2  yamt (define_insn "*movqicc_lbc"
   3262  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r,r")
   3263  1.1.1.1.4.2  yamt 	(if_then_else:QI
   3264  1.1.1.1.4.2  yamt 	 (eq (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3265  1.1.1.1.4.2  yamt 			      (const_int 1)
   3266  1.1.1.1.4.2  yamt 			      (const_int 0))
   3267  1.1.1.1.4.2  yamt 	     (const_int 0))
   3268  1.1.1.1.4.2  yamt 	 (match_operand:QI 1 "reg_or_8bit_operand" "rI,0")
   3269  1.1.1.1.4.2  yamt 	 (match_operand:QI 3 "reg_or_8bit_operand" "0,rI")))]
   3270  1.1.1.1.4.2  yamt   ""
   3271  1.1.1.1.4.2  yamt   "@
   3272  1.1.1.1.4.2  yamt    cmovlbc %r2,%1,%0
   3273  1.1.1.1.4.2  yamt    cmovlbs %r2,%3,%0"
   3274  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3275  1.1.1.1.4.2  yamt 
   3276  1.1.1.1.4.2  yamt (define_insn "*movhicc_lbc"
   3277  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r,r")
   3278  1.1.1.1.4.2  yamt 	(if_then_else:HI
   3279  1.1.1.1.4.2  yamt 	 (eq (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3280  1.1.1.1.4.2  yamt 			      (const_int 1)
   3281  1.1.1.1.4.2  yamt 			      (const_int 0))
   3282  1.1.1.1.4.2  yamt 	     (const_int 0))
   3283  1.1.1.1.4.2  yamt 	 (match_operand:HI 1 "reg_or_8bit_operand" "rI,0")
   3284  1.1.1.1.4.2  yamt 	 (match_operand:HI 3 "reg_or_8bit_operand" "0,rI")))]
   3285  1.1.1.1.4.2  yamt   ""
   3286  1.1.1.1.4.2  yamt   "@
   3287  1.1.1.1.4.2  yamt    cmovlbc %r2,%1,%0
   3288  1.1.1.1.4.2  yamt    cmovlbs %r2,%3,%0"
   3289  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3290  1.1.1.1.4.2  yamt 
   3291  1.1.1.1.4.2  yamt (define_insn "*movsicc_lbc"
   3292  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
   3293  1.1.1.1.4.2  yamt 	(if_then_else:SI
   3294  1.1.1.1.4.2  yamt 	 (eq (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3295  1.1.1.1.4.2  yamt 			      (const_int 1)
   3296  1.1.1.1.4.2  yamt 			      (const_int 0))
   3297  1.1.1.1.4.2  yamt 	     (const_int 0))
   3298  1.1.1.1.4.2  yamt 	 (match_operand:SI 1 "reg_or_8bit_operand" "rI,0")
   3299  1.1.1.1.4.2  yamt 	 (match_operand:SI 3 "reg_or_8bit_operand" "0,rI")))]
   3300  1.1.1.1.4.2  yamt   ""
   3301  1.1.1.1.4.2  yamt   "@
   3302  1.1.1.1.4.2  yamt    cmovlbc %r2,%1,%0
   3303  1.1.1.1.4.2  yamt    cmovlbs %r2,%3,%0"
   3304  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3305  1.1.1.1.4.2  yamt 
   3306  1.1.1.1.4.2  yamt (define_insn "*movdicc_lbc"
   3307  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
   3308  1.1.1.1.4.2  yamt 	(if_then_else:DI
   3309  1.1.1.1.4.2  yamt 	 (eq (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3310  1.1.1.1.4.2  yamt 			      (const_int 1)
   3311  1.1.1.1.4.2  yamt 			      (const_int 0))
   3312  1.1.1.1.4.2  yamt 	     (const_int 0))
   3313  1.1.1.1.4.2  yamt 	 (match_operand:DI 1 "reg_or_8bit_operand" "rI,0")
   3314  1.1.1.1.4.2  yamt 	 (match_operand:DI 3 "reg_or_8bit_operand" "0,rI")))]
   3315  1.1.1.1.4.2  yamt   ""
   3316  1.1.1.1.4.2  yamt   "@
   3317  1.1.1.1.4.2  yamt    cmovlbc %r2,%1,%0
   3318  1.1.1.1.4.2  yamt    cmovlbs %r2,%3,%0"
   3319  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3320  1.1.1.1.4.2  yamt 
   3321  1.1.1.1.4.2  yamt (define_insn "*movqicc_lbs"
   3322  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r,r")
   3323  1.1.1.1.4.2  yamt 	(if_then_else:QI
   3324  1.1.1.1.4.2  yamt 	 (ne (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3325  1.1.1.1.4.2  yamt 			      (const_int 1)
   3326  1.1.1.1.4.2  yamt 			      (const_int 0))
   3327  1.1.1.1.4.2  yamt 	     (const_int 0))
   3328  1.1.1.1.4.2  yamt 	 (match_operand:QI 1 "reg_or_8bit_operand" "rI,0")
   3329  1.1.1.1.4.2  yamt 	 (match_operand:QI 3 "reg_or_8bit_operand" "0,rI")))]
   3330  1.1.1.1.4.2  yamt   ""
   3331  1.1.1.1.4.2  yamt   "@
   3332  1.1.1.1.4.2  yamt    cmovlbs %r2,%1,%0
   3333  1.1.1.1.4.2  yamt    cmovlbc %r2,%3,%0"
   3334  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3335  1.1.1.1.4.2  yamt 
   3336  1.1.1.1.4.2  yamt (define_insn "*movhicc_lbs"
   3337  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r,r")
   3338  1.1.1.1.4.2  yamt 	(if_then_else:HI
   3339  1.1.1.1.4.2  yamt 	 (ne (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3340  1.1.1.1.4.2  yamt 			      (const_int 1)
   3341  1.1.1.1.4.2  yamt 			      (const_int 0))
   3342  1.1.1.1.4.2  yamt 	     (const_int 0))
   3343  1.1.1.1.4.2  yamt 	 (match_operand:HI 1 "reg_or_8bit_operand" "rI,0")
   3344  1.1.1.1.4.2  yamt 	 (match_operand:HI 3 "reg_or_8bit_operand" "0,rI")))]
   3345  1.1.1.1.4.2  yamt   ""
   3346  1.1.1.1.4.2  yamt   "@
   3347  1.1.1.1.4.2  yamt    cmovlbs %r2,%1,%0
   3348  1.1.1.1.4.2  yamt    cmovlbc %r2,%3,%0"
   3349  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3350  1.1.1.1.4.2  yamt 
   3351  1.1.1.1.4.2  yamt (define_insn "*movsicc_lbs"
   3352  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r,r")
   3353  1.1.1.1.4.2  yamt 	(if_then_else:SI
   3354  1.1.1.1.4.2  yamt 	 (ne (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3355  1.1.1.1.4.2  yamt 			      (const_int 1)
   3356  1.1.1.1.4.2  yamt 			      (const_int 0))
   3357  1.1.1.1.4.2  yamt 	     (const_int 0))
   3358  1.1.1.1.4.2  yamt 	 (match_operand:SI 1 "reg_or_8bit_operand" "rI,0")
   3359  1.1.1.1.4.2  yamt 	 (match_operand:SI 3 "reg_or_8bit_operand" "0,rI")))]
   3360  1.1.1.1.4.2  yamt   ""
   3361  1.1.1.1.4.2  yamt   "@
   3362  1.1.1.1.4.2  yamt    cmovlbs %r2,%1,%0
   3363  1.1.1.1.4.2  yamt    cmovlbc %r2,%3,%0"
   3364  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3365  1.1.1.1.4.2  yamt 
   3366  1.1.1.1.4.2  yamt (define_insn "*movdicc_lbs"
   3367  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r")
   3368  1.1.1.1.4.2  yamt 	(if_then_else:DI
   3369  1.1.1.1.4.2  yamt 	 (ne (zero_extract:DI (match_operand:DI 2 "reg_or_0_operand" "rJ,rJ")
   3370  1.1.1.1.4.2  yamt 			      (const_int 1)
   3371  1.1.1.1.4.2  yamt 			      (const_int 0))
   3372  1.1.1.1.4.2  yamt 	     (const_int 0))
   3373  1.1.1.1.4.2  yamt 	 (match_operand:DI 1 "reg_or_8bit_operand" "rI,0")
   3374  1.1.1.1.4.2  yamt 	 (match_operand:DI 3 "reg_or_8bit_operand" "0,rI")))]
   3375  1.1.1.1.4.2  yamt   ""
   3376  1.1.1.1.4.2  yamt   "@
   3377  1.1.1.1.4.2  yamt    cmovlbs %r2,%1,%0
   3378  1.1.1.1.4.2  yamt    cmovlbc %r2,%3,%0"
   3379  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3380  1.1.1.1.4.2  yamt 
   3381  1.1.1.1.4.2  yamt ;; For ABS, we have two choices, depending on whether the input and output
   3382  1.1.1.1.4.2  yamt ;; registers are the same or not.
   3383  1.1.1.1.4.2  yamt (define_expand "absdi2"
   3384  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3385  1.1.1.1.4.2  yamt 	(abs:DI (match_operand:DI 1 "register_operand" "")))]
   3386  1.1.1.1.4.2  yamt   ""
   3387  1.1.1.1.4.2  yamt {
   3388  1.1.1.1.4.2  yamt   if (rtx_equal_p (operands[0], operands[1]))
   3389  1.1.1.1.4.2  yamt     emit_insn (gen_absdi2_same (operands[0], gen_reg_rtx (DImode)));
   3390  1.1.1.1.4.2  yamt   else
   3391  1.1.1.1.4.2  yamt     emit_insn (gen_absdi2_diff (operands[0], operands[1]));
   3392  1.1.1.1.4.2  yamt   DONE;
   3393  1.1.1.1.4.2  yamt })
   3394  1.1.1.1.4.2  yamt 
   3395  1.1.1.1.4.2  yamt (define_expand "absdi2_same"
   3396  1.1.1.1.4.2  yamt   [(set (match_operand:DI 1 "register_operand" "")
   3397  1.1.1.1.4.2  yamt 	(neg:DI (match_operand:DI 0 "register_operand" "")))
   3398  1.1.1.1.4.2  yamt    (set (match_dup 0)
   3399  1.1.1.1.4.2  yamt 	(if_then_else:DI (ge (match_dup 0) (const_int 0))
   3400  1.1.1.1.4.2  yamt 			 (match_dup 0)
   3401  1.1.1.1.4.2  yamt 			 (match_dup 1)))]
   3402  1.1.1.1.4.2  yamt   ""
   3403  1.1.1.1.4.2  yamt   "")
   3404  1.1.1.1.4.2  yamt 
   3405  1.1.1.1.4.2  yamt (define_expand "absdi2_diff"
   3406  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3407  1.1.1.1.4.2  yamt 	(neg:DI (match_operand:DI 1 "register_operand" "")))
   3408  1.1.1.1.4.2  yamt    (set (match_dup 0)
   3409  1.1.1.1.4.2  yamt 	(if_then_else:DI (lt (match_dup 1) (const_int 0))
   3410  1.1.1.1.4.2  yamt 			 (match_dup 0)
   3411  1.1.1.1.4.2  yamt 			 (match_dup 1)))]
   3412  1.1.1.1.4.2  yamt   ""
   3413  1.1.1.1.4.2  yamt   "")
   3414  1.1.1.1.4.2  yamt 
   3415  1.1.1.1.4.2  yamt (define_split
   3416  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3417  1.1.1.1.4.2  yamt 	(abs:DI (match_dup 0)))
   3418  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 1 "register_operand" ""))]
   3419  1.1.1.1.4.2  yamt   ""
   3420  1.1.1.1.4.2  yamt   [(set (match_dup 1) (neg:DI (match_dup 0)))
   3421  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (ge (match_dup 0) (const_int 0))
   3422  1.1.1.1.4.2  yamt 				       (match_dup 0) (match_dup 1)))]
   3423  1.1.1.1.4.2  yamt   "")
   3424  1.1.1.1.4.2  yamt 
   3425  1.1.1.1.4.2  yamt (define_split
   3426  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3427  1.1.1.1.4.2  yamt 	(abs:DI (match_operand:DI 1 "register_operand" "")))]
   3428  1.1.1.1.4.2  yamt   "! rtx_equal_p (operands[0], operands[1])"
   3429  1.1.1.1.4.2  yamt   [(set (match_dup 0) (neg:DI (match_dup 1)))
   3430  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (lt (match_dup 1) (const_int 0))
   3431  1.1.1.1.4.2  yamt 				       (match_dup 0) (match_dup 1)))]
   3432  1.1.1.1.4.2  yamt   "")
   3433  1.1.1.1.4.2  yamt 
   3434  1.1.1.1.4.2  yamt (define_split
   3435  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3436  1.1.1.1.4.2  yamt 	(neg:DI (abs:DI (match_dup 0))))
   3437  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 1 "register_operand" ""))]
   3438  1.1.1.1.4.2  yamt   ""
   3439  1.1.1.1.4.2  yamt   [(set (match_dup 1) (neg:DI (match_dup 0)))
   3440  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (le (match_dup 0) (const_int 0))
   3441  1.1.1.1.4.2  yamt 				       (match_dup 0) (match_dup 1)))]
   3442  1.1.1.1.4.2  yamt   "")
   3443  1.1.1.1.4.2  yamt 
   3444  1.1.1.1.4.2  yamt (define_split
   3445  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3446  1.1.1.1.4.2  yamt 	(neg:DI (abs:DI (match_operand:DI 1 "register_operand" ""))))]
   3447  1.1.1.1.4.2  yamt   "! rtx_equal_p (operands[0], operands[1])"
   3448  1.1.1.1.4.2  yamt   [(set (match_dup 0) (neg:DI (match_dup 1)))
   3449  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (gt (match_dup 1) (const_int 0))
   3450  1.1.1.1.4.2  yamt 				       (match_dup 0) (match_dup 1)))]
   3451  1.1.1.1.4.2  yamt   "")
   3452  1.1.1.1.4.2  yamt 
   3453  1.1.1.1.4.2  yamt (define_insn "sminqi3"
   3454  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r")
   3455  1.1.1.1.4.2  yamt 	(smin:QI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
   3456  1.1.1.1.4.2  yamt 		 (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
   3457  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3458  1.1.1.1.4.2  yamt   "minsb8 %r1,%2,%0"
   3459  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3460  1.1.1.1.4.2  yamt 
   3461  1.1.1.1.4.2  yamt (define_insn "uminqi3"
   3462  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r")
   3463  1.1.1.1.4.2  yamt 	(umin:QI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
   3464  1.1.1.1.4.2  yamt 		 (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
   3465  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3466  1.1.1.1.4.2  yamt   "minub8 %r1,%2,%0"
   3467  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3468  1.1.1.1.4.2  yamt 
   3469  1.1.1.1.4.2  yamt (define_insn "smaxqi3"
   3470  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r")
   3471  1.1.1.1.4.2  yamt 	(smax:QI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
   3472  1.1.1.1.4.2  yamt 		 (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
   3473  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3474  1.1.1.1.4.2  yamt   "maxsb8 %r1,%2,%0"
   3475  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3476  1.1.1.1.4.2  yamt 
   3477  1.1.1.1.4.2  yamt (define_insn "umaxqi3"
   3478  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r")
   3479  1.1.1.1.4.2  yamt 	(umax:QI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
   3480  1.1.1.1.4.2  yamt 		 (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
   3481  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3482  1.1.1.1.4.2  yamt   "maxub8 %r1,%2,%0"
   3483  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3484  1.1.1.1.4.2  yamt 
   3485  1.1.1.1.4.2  yamt (define_insn "sminhi3"
   3486  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r")
   3487  1.1.1.1.4.2  yamt 	(smin:HI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
   3488  1.1.1.1.4.2  yamt 		 (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
   3489  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3490  1.1.1.1.4.2  yamt   "minsw4 %r1,%2,%0"
   3491  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3492  1.1.1.1.4.2  yamt 
   3493  1.1.1.1.4.2  yamt (define_insn "uminhi3"
   3494  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r")
   3495  1.1.1.1.4.2  yamt 	(umin:HI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
   3496  1.1.1.1.4.2  yamt 		 (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
   3497  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3498  1.1.1.1.4.2  yamt   "minuw4 %r1,%2,%0"
   3499  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3500  1.1.1.1.4.2  yamt 
   3501  1.1.1.1.4.2  yamt (define_insn "smaxhi3"
   3502  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r")
   3503  1.1.1.1.4.2  yamt 	(smax:HI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
   3504  1.1.1.1.4.2  yamt 		 (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
   3505  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3506  1.1.1.1.4.2  yamt   "maxsw4 %r1,%2,%0"
   3507  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3508  1.1.1.1.4.2  yamt 
   3509  1.1.1.1.4.2  yamt (define_insn "umaxhi3"
   3510  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r")
   3511  1.1.1.1.4.2  yamt 	(umax:HI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
   3512  1.1.1.1.4.2  yamt 		 (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
   3513  1.1.1.1.4.2  yamt   "TARGET_MAX"
   3514  1.1.1.1.4.2  yamt   "maxuw4 %r1,%2,%0"
   3515  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   3516  1.1.1.1.4.2  yamt 
   3517  1.1.1.1.4.2  yamt (define_expand "smaxdi3"
   3518  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3519  1.1.1.1.4.2  yamt 	(le:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3520  1.1.1.1.4.2  yamt 	       (match_operand:DI 2 "reg_or_8bit_operand" "")))
   3521  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   3522  1.1.1.1.4.2  yamt 	(if_then_else:DI (eq (match_dup 3) (const_int 0))
   3523  1.1.1.1.4.2  yamt 			 (match_dup 1) (match_dup 2)))]
   3524  1.1.1.1.4.2  yamt   ""
   3525  1.1.1.1.4.2  yamt   { operands[3] = gen_reg_rtx (DImode); })
   3526  1.1.1.1.4.2  yamt 
   3527  1.1.1.1.4.2  yamt (define_split
   3528  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3529  1.1.1.1.4.2  yamt 	(smax:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3530  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "reg_or_8bit_operand" "")))
   3531  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 3 "register_operand" ""))]
   3532  1.1.1.1.4.2  yamt   "operands[2] != const0_rtx"
   3533  1.1.1.1.4.2  yamt   [(set (match_dup 3) (le:DI (match_dup 1) (match_dup 2)))
   3534  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (eq (match_dup 3) (const_int 0))
   3535  1.1.1.1.4.2  yamt 				       (match_dup 1) (match_dup 2)))]
   3536  1.1.1.1.4.2  yamt   "")
   3537  1.1.1.1.4.2  yamt 
   3538  1.1.1.1.4.2  yamt (define_insn "*smax_const0"
   3539  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   3540  1.1.1.1.4.2  yamt 	(smax:DI (match_operand:DI 1 "register_operand" "0")
   3541  1.1.1.1.4.2  yamt 		 (const_int 0)))]
   3542  1.1.1.1.4.2  yamt   ""
   3543  1.1.1.1.4.2  yamt   "cmovlt %0,0,%0"
   3544  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3545  1.1.1.1.4.2  yamt 
   3546  1.1.1.1.4.2  yamt (define_expand "smindi3"
   3547  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3548  1.1.1.1.4.2  yamt 	(lt:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3549  1.1.1.1.4.2  yamt 	       (match_operand:DI 2 "reg_or_8bit_operand" "")))
   3550  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   3551  1.1.1.1.4.2  yamt 	(if_then_else:DI (ne (match_dup 3) (const_int 0))
   3552  1.1.1.1.4.2  yamt 			 (match_dup 1) (match_dup 2)))]
   3553  1.1.1.1.4.2  yamt   ""
   3554  1.1.1.1.4.2  yamt   { operands[3] = gen_reg_rtx (DImode); })
   3555  1.1.1.1.4.2  yamt 
   3556  1.1.1.1.4.2  yamt (define_split
   3557  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3558  1.1.1.1.4.2  yamt 	(smin:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3559  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "reg_or_8bit_operand" "")))
   3560  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 3 "register_operand" ""))]
   3561  1.1.1.1.4.2  yamt   "operands[2] != const0_rtx"
   3562  1.1.1.1.4.2  yamt   [(set (match_dup 3) (lt:DI (match_dup 1) (match_dup 2)))
   3563  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (ne (match_dup 3) (const_int 0))
   3564  1.1.1.1.4.2  yamt 				       (match_dup 1) (match_dup 2)))]
   3565  1.1.1.1.4.2  yamt   "")
   3566  1.1.1.1.4.2  yamt 
   3567  1.1.1.1.4.2  yamt (define_insn "*smin_const0"
   3568  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   3569  1.1.1.1.4.2  yamt 	(smin:DI (match_operand:DI 1 "register_operand" "0")
   3570  1.1.1.1.4.2  yamt 		 (const_int 0)))]
   3571  1.1.1.1.4.2  yamt   ""
   3572  1.1.1.1.4.2  yamt   "cmovgt %0,0,%0"
   3573  1.1.1.1.4.2  yamt   [(set_attr "type" "icmov")])
   3574  1.1.1.1.4.2  yamt 
   3575  1.1.1.1.4.2  yamt (define_expand "umaxdi3"
   3576  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3577  1.1.1.1.4.2  yamt 	(leu:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3578  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "reg_or_8bit_operand" "")))
   3579  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   3580  1.1.1.1.4.2  yamt 	(if_then_else:DI (eq (match_dup 3) (const_int 0))
   3581  1.1.1.1.4.2  yamt 			 (match_dup 1) (match_dup 2)))]
   3582  1.1.1.1.4.2  yamt   ""
   3583  1.1.1.1.4.2  yamt   "operands[3] = gen_reg_rtx (DImode);")
   3584  1.1.1.1.4.2  yamt 
   3585  1.1.1.1.4.2  yamt (define_split
   3586  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3587  1.1.1.1.4.2  yamt 	(umax:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3588  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "reg_or_8bit_operand" "")))
   3589  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 3 "register_operand" ""))]
   3590  1.1.1.1.4.2  yamt   "operands[2] != const0_rtx"
   3591  1.1.1.1.4.2  yamt   [(set (match_dup 3) (leu:DI (match_dup 1) (match_dup 2)))
   3592  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (eq (match_dup 3) (const_int 0))
   3593  1.1.1.1.4.2  yamt 				       (match_dup 1) (match_dup 2)))]
   3594  1.1.1.1.4.2  yamt   "")
   3595  1.1.1.1.4.2  yamt 
   3596  1.1.1.1.4.2  yamt (define_expand "umindi3"
   3597  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3598  1.1.1.1.4.2  yamt 	(ltu:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3599  1.1.1.1.4.2  yamt 		(match_operand:DI 2 "reg_or_8bit_operand" "")))
   3600  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   3601  1.1.1.1.4.2  yamt 	(if_then_else:DI (ne (match_dup 3) (const_int 0))
   3602  1.1.1.1.4.2  yamt 			 (match_dup 1) (match_dup 2)))]
   3603  1.1.1.1.4.2  yamt   ""
   3604  1.1.1.1.4.2  yamt   "operands[3] = gen_reg_rtx (DImode);")
   3605  1.1.1.1.4.2  yamt 
   3606  1.1.1.1.4.2  yamt (define_split
   3607  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3608  1.1.1.1.4.2  yamt 	(umin:DI (match_operand:DI 1 "reg_or_0_operand" "")
   3609  1.1.1.1.4.2  yamt 		 (match_operand:DI 2 "reg_or_8bit_operand" "")))
   3610  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 3 "register_operand" ""))]
   3611  1.1.1.1.4.2  yamt   "operands[2] != const0_rtx"
   3612  1.1.1.1.4.2  yamt   [(set (match_dup 3) (ltu:DI (match_dup 1) (match_dup 2)))
   3613  1.1.1.1.4.2  yamt    (set (match_dup 0) (if_then_else:DI (ne (match_dup 3) (const_int 0))
   3614  1.1.1.1.4.2  yamt 				       (match_dup 1) (match_dup 2)))]
   3615  1.1.1.1.4.2  yamt   "")
   3616  1.1.1.1.4.2  yamt 
   3617  1.1.1.1.4.2  yamt (define_insn "*bcc_normal"
   3618  1.1.1.1.4.2  yamt   [(set (pc)
   3619  1.1.1.1.4.2  yamt 	(if_then_else
   3620  1.1.1.1.4.2  yamt 	 (match_operator 1 "signed_comparison_operator"
   3621  1.1.1.1.4.2  yamt 			 [(match_operand:DI 2 "reg_or_0_operand" "rJ")
   3622  1.1.1.1.4.2  yamt 			  (const_int 0)])
   3623  1.1.1.1.4.2  yamt 	 (label_ref (match_operand 0 "" ""))
   3624  1.1.1.1.4.2  yamt 	 (pc)))]
   3625  1.1.1.1.4.2  yamt   ""
   3626  1.1.1.1.4.2  yamt   "b%C1 %r2,%0"
   3627  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   3628  1.1.1.1.4.2  yamt 
   3629  1.1.1.1.4.2  yamt (define_insn "*bcc_reverse"
   3630  1.1.1.1.4.2  yamt   [(set (pc)
   3631  1.1.1.1.4.2  yamt 	(if_then_else
   3632  1.1.1.1.4.2  yamt 	 (match_operator 1 "signed_comparison_operator"
   3633  1.1.1.1.4.2  yamt 			 [(match_operand:DI 2 "register_operand" "r")
   3634  1.1.1.1.4.2  yamt 			  (const_int 0)])
   3635  1.1.1.1.4.2  yamt 
   3636  1.1.1.1.4.2  yamt 	 (pc)
   3637  1.1.1.1.4.2  yamt 	 (label_ref (match_operand 0 "" ""))))]
   3638  1.1.1.1.4.2  yamt   ""
   3639  1.1.1.1.4.2  yamt   "b%c1 %2,%0"
   3640  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   3641  1.1.1.1.4.2  yamt 
   3642  1.1.1.1.4.2  yamt (define_insn "*blbs_normal"
   3643  1.1.1.1.4.2  yamt   [(set (pc)
   3644  1.1.1.1.4.2  yamt 	(if_then_else
   3645  1.1.1.1.4.2  yamt 	 (ne (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   3646  1.1.1.1.4.2  yamt 			      (const_int 1)
   3647  1.1.1.1.4.2  yamt 			      (const_int 0))
   3648  1.1.1.1.4.2  yamt 	     (const_int 0))
   3649  1.1.1.1.4.2  yamt 	 (label_ref (match_operand 0 "" ""))
   3650  1.1.1.1.4.2  yamt 	 (pc)))]
   3651  1.1.1.1.4.2  yamt   ""
   3652  1.1.1.1.4.2  yamt   "blbs %r1,%0"
   3653  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   3654  1.1.1.1.4.2  yamt 
   3655  1.1.1.1.4.2  yamt (define_insn "*blbc_normal"
   3656  1.1.1.1.4.2  yamt   [(set (pc)
   3657  1.1.1.1.4.2  yamt 	(if_then_else
   3658  1.1.1.1.4.2  yamt 	 (eq (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
   3659  1.1.1.1.4.2  yamt 			      (const_int 1)
   3660  1.1.1.1.4.2  yamt 			      (const_int 0))
   3661  1.1.1.1.4.2  yamt 	     (const_int 0))
   3662  1.1.1.1.4.2  yamt 	 (label_ref (match_operand 0 "" ""))
   3663  1.1.1.1.4.2  yamt 	 (pc)))]
   3664  1.1.1.1.4.2  yamt   ""
   3665  1.1.1.1.4.2  yamt   "blbc %r1,%0"
   3666  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   3667  1.1.1.1.4.2  yamt 
   3668  1.1.1.1.4.2  yamt (define_split
   3669  1.1.1.1.4.2  yamt   [(parallel
   3670  1.1.1.1.4.2  yamt     [(set (pc)
   3671  1.1.1.1.4.2  yamt 	  (if_then_else
   3672  1.1.1.1.4.2  yamt 	   (match_operator 1 "comparison_operator"
   3673  1.1.1.1.4.2  yamt 			   [(zero_extract:DI (match_operand:DI 2 "register_operand" "")
   3674  1.1.1.1.4.2  yamt 					     (const_int 1)
   3675  1.1.1.1.4.2  yamt 					     (match_operand:DI 3 "const_int_operand" ""))
   3676  1.1.1.1.4.2  yamt 			    (const_int 0)])
   3677  1.1.1.1.4.2  yamt 	   (label_ref (match_operand 0 "" ""))
   3678  1.1.1.1.4.2  yamt 	   (pc)))
   3679  1.1.1.1.4.2  yamt      (clobber (match_operand:DI 4 "register_operand" ""))])]
   3680  1.1.1.1.4.2  yamt   "INTVAL (operands[3]) != 0"
   3681  1.1.1.1.4.2  yamt   [(set (match_dup 4)
   3682  1.1.1.1.4.2  yamt 	(lshiftrt:DI (match_dup 2) (match_dup 3)))
   3683  1.1.1.1.4.2  yamt    (set (pc)
   3684  1.1.1.1.4.2  yamt 	(if_then_else (match_op_dup 1
   3685  1.1.1.1.4.2  yamt 				    [(zero_extract:DI (match_dup 4)
   3686  1.1.1.1.4.2  yamt 						      (const_int 1)
   3687  1.1.1.1.4.2  yamt 						      (const_int 0))
   3688  1.1.1.1.4.2  yamt 				     (const_int 0)])
   3689  1.1.1.1.4.2  yamt 		      (label_ref (match_dup 0))
   3690  1.1.1.1.4.2  yamt 		      (pc)))]
   3691  1.1.1.1.4.2  yamt   "")
   3692  1.1.1.1.4.2  yamt 
   3694  1.1.1.1.4.2  yamt ;; The following are the corresponding floating-point insns.  Recall
   3695  1.1.1.1.4.2  yamt ;; we need to have variants that expand the arguments from SFmode
   3696  1.1.1.1.4.2  yamt ;; to DFmode.
   3697  1.1.1.1.4.2  yamt 
   3698  1.1.1.1.4.2  yamt (define_insn "*cmpdf_ieee"
   3699  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=&f")
   3700  1.1.1.1.4.2  yamt 	(match_operator:DF 1 "alpha_fp_comparison_operator"
   3701  1.1.1.1.4.2  yamt 			   [(match_operand:DF 2 "reg_or_0_operand" "fG")
   3702  1.1.1.1.4.2  yamt 			    (match_operand:DF 3 "reg_or_0_operand" "fG")]))]
   3703  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU"
   3704  1.1.1.1.4.2  yamt   "cmp%-%C1%/ %R2,%R3,%0"
   3705  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3706  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3707  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "su")])
   3708  1.1.1.1.4.2  yamt 
   3709  1.1.1.1.4.2  yamt (define_insn "*cmpdf_internal"
   3710  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3711  1.1.1.1.4.2  yamt 	(match_operator:DF 1 "alpha_fp_comparison_operator"
   3712  1.1.1.1.4.2  yamt 			   [(match_operand:DF 2 "reg_or_0_operand" "fG")
   3713  1.1.1.1.4.2  yamt 			    (match_operand:DF 3 "reg_or_0_operand" "fG")]))]
   3714  1.1.1.1.4.2  yamt   "TARGET_FP"
   3715  1.1.1.1.4.2  yamt   "cmp%-%C1%/ %R2,%R3,%0"
   3716  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3717  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3718  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "su")])
   3719  1.1.1.1.4.2  yamt 
   3720  1.1.1.1.4.2  yamt (define_insn "*cmpdf_ext1"
   3721  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3722  1.1.1.1.4.2  yamt 	(match_operator:DF 1 "alpha_fp_comparison_operator"
   3723  1.1.1.1.4.2  yamt 			   [(float_extend:DF
   3724  1.1.1.1.4.2  yamt 			     (match_operand:SF 2 "reg_or_0_operand" "fG"))
   3725  1.1.1.1.4.2  yamt 			    (match_operand:DF 3 "reg_or_0_operand" "fG")]))]
   3726  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3727  1.1.1.1.4.2  yamt   "cmp%-%C1%/ %R2,%R3,%0"
   3728  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3729  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3730  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "su")])
   3731  1.1.1.1.4.2  yamt 
   3732  1.1.1.1.4.2  yamt (define_insn "*cmpdf_ext2"
   3733  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3734  1.1.1.1.4.2  yamt 	(match_operator:DF 1 "alpha_fp_comparison_operator"
   3735  1.1.1.1.4.2  yamt 			   [(match_operand:DF 2 "reg_or_0_operand" "fG")
   3736  1.1.1.1.4.2  yamt 			    (float_extend:DF
   3737  1.1.1.1.4.2  yamt 			     (match_operand:SF 3 "reg_or_0_operand" "fG"))]))]
   3738  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3739  1.1.1.1.4.2  yamt   "cmp%-%C1%/ %R2,%R3,%0"
   3740  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3741  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3742  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "su")])
   3743  1.1.1.1.4.2  yamt 
   3744  1.1.1.1.4.2  yamt (define_insn "*cmpdf_ext3"
   3745  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f")
   3746  1.1.1.1.4.2  yamt 	(match_operator:DF 1 "alpha_fp_comparison_operator"
   3747  1.1.1.1.4.2  yamt 			   [(float_extend:DF
   3748  1.1.1.1.4.2  yamt 			     (match_operand:SF 2 "reg_or_0_operand" "fG"))
   3749  1.1.1.1.4.2  yamt 			    (float_extend:DF
   3750  1.1.1.1.4.2  yamt 			     (match_operand:SF 3 "reg_or_0_operand" "fG"))]))]
   3751  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3752  1.1.1.1.4.2  yamt   "cmp%-%C1%/ %R2,%R3,%0"
   3753  1.1.1.1.4.2  yamt   [(set_attr "type" "fadd")
   3754  1.1.1.1.4.2  yamt    (set_attr "trap" "yes")
   3755  1.1.1.1.4.2  yamt    (set_attr "trap_suffix" "su")])
   3756  1.1.1.1.4.2  yamt 
   3757  1.1.1.1.4.2  yamt (define_insn "*movdfcc_internal"
   3758  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f,f")
   3759  1.1.1.1.4.2  yamt 	(if_then_else:DF
   3760  1.1.1.1.4.2  yamt 	 (match_operator 3 "signed_comparison_operator"
   3761  1.1.1.1.4.2  yamt 			 [(match_operand:DF 4 "reg_or_0_operand" "fG,fG")
   3762  1.1.1.1.4.2  yamt 			  (match_operand:DF 2 "const0_operand" "G,G")])
   3763  1.1.1.1.4.2  yamt 	 (match_operand:DF 1 "reg_or_0_operand" "fG,0")
   3764  1.1.1.1.4.2  yamt 	 (match_operand:DF 5 "reg_or_0_operand" "0,fG")))]
   3765  1.1.1.1.4.2  yamt   "TARGET_FP"
   3766  1.1.1.1.4.2  yamt   "@
   3767  1.1.1.1.4.2  yamt    fcmov%C3 %R4,%R1,%0
   3768  1.1.1.1.4.2  yamt    fcmov%D3 %R4,%R5,%0"
   3769  1.1.1.1.4.2  yamt   [(set_attr "type" "fcmov")])
   3770  1.1.1.1.4.2  yamt 
   3771  1.1.1.1.4.2  yamt (define_insn "*movsfcc_internal"
   3772  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f,f")
   3773  1.1.1.1.4.2  yamt 	(if_then_else:SF
   3774  1.1.1.1.4.2  yamt 	 (match_operator 3 "signed_comparison_operator"
   3775  1.1.1.1.4.2  yamt 			 [(match_operand:DF 4 "reg_or_0_operand" "fG,fG")
   3776  1.1.1.1.4.2  yamt 			  (match_operand:DF 2 "const0_operand" "G,G")])
   3777  1.1.1.1.4.2  yamt 	 (match_operand:SF 1 "reg_or_0_operand" "fG,0")
   3778  1.1.1.1.4.2  yamt 	 (match_operand:SF 5 "reg_or_0_operand" "0,fG")))]
   3779  1.1.1.1.4.2  yamt   "TARGET_FP"
   3780  1.1.1.1.4.2  yamt   "@
   3781  1.1.1.1.4.2  yamt    fcmov%C3 %R4,%R1,%0
   3782  1.1.1.1.4.2  yamt    fcmov%D3 %R4,%R5,%0"
   3783  1.1.1.1.4.2  yamt   [(set_attr "type" "fcmov")])
   3784  1.1.1.1.4.2  yamt 
   3785  1.1.1.1.4.2  yamt (define_insn "*movdfcc_ext1"
   3786  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f,f")
   3787  1.1.1.1.4.2  yamt 	(if_then_else:DF
   3788  1.1.1.1.4.2  yamt 	 (match_operator 3 "signed_comparison_operator"
   3789  1.1.1.1.4.2  yamt 			 [(match_operand:DF 4 "reg_or_0_operand" "fG,fG")
   3790  1.1.1.1.4.2  yamt 			  (match_operand:DF 2 "const0_operand" "G,G")])
   3791  1.1.1.1.4.2  yamt 	 (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG,0"))
   3792  1.1.1.1.4.2  yamt 	 (match_operand:DF 5 "reg_or_0_operand" "0,fG")))]
   3793  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3794  1.1.1.1.4.2  yamt   "@
   3795  1.1.1.1.4.2  yamt    fcmov%C3 %R4,%R1,%0
   3796  1.1.1.1.4.2  yamt    fcmov%D3 %R4,%R5,%0"
   3797  1.1.1.1.4.2  yamt   [(set_attr "type" "fcmov")])
   3798  1.1.1.1.4.2  yamt 
   3799  1.1.1.1.4.2  yamt (define_insn "*movdfcc_ext2"
   3800  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f,f")
   3801  1.1.1.1.4.2  yamt 	(if_then_else:DF
   3802  1.1.1.1.4.2  yamt 	 (match_operator 3 "signed_comparison_operator"
   3803  1.1.1.1.4.2  yamt 			 [(float_extend:DF
   3804  1.1.1.1.4.2  yamt 			   (match_operand:SF 4 "reg_or_0_operand" "fG,fG"))
   3805  1.1.1.1.4.2  yamt 			  (match_operand:DF 2 "const0_operand" "G,G")])
   3806  1.1.1.1.4.2  yamt 	 (match_operand:DF 1 "reg_or_0_operand" "fG,0")
   3807  1.1.1.1.4.2  yamt 	 (match_operand:DF 5 "reg_or_0_operand" "0,fG")))]
   3808  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3809  1.1.1.1.4.2  yamt   "@
   3810  1.1.1.1.4.2  yamt    fcmov%C3 %R4,%R1,%0
   3811  1.1.1.1.4.2  yamt    fcmov%D3 %R4,%R5,%0"
   3812  1.1.1.1.4.2  yamt   [(set_attr "type" "fcmov")])
   3813  1.1.1.1.4.2  yamt 
   3814  1.1.1.1.4.2  yamt (define_insn "*movdfcc_ext3"
   3815  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "=f,f")
   3816  1.1.1.1.4.2  yamt 	(if_then_else:SF
   3817  1.1.1.1.4.2  yamt 	 (match_operator 3 "signed_comparison_operator"
   3818  1.1.1.1.4.2  yamt 			 [(float_extend:DF
   3819  1.1.1.1.4.2  yamt 			   (match_operand:SF 4 "reg_or_0_operand" "fG,fG"))
   3820  1.1.1.1.4.2  yamt 			  (match_operand:DF 2 "const0_operand" "G,G")])
   3821  1.1.1.1.4.2  yamt 	 (match_operand:SF 1 "reg_or_0_operand" "fG,0")
   3822  1.1.1.1.4.2  yamt 	 (match_operand:SF 5 "reg_or_0_operand" "0,fG")))]
   3823  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3824  1.1.1.1.4.2  yamt   "@
   3825  1.1.1.1.4.2  yamt    fcmov%C3 %R4,%R1,%0
   3826  1.1.1.1.4.2  yamt    fcmov%D3 %R4,%R5,%0"
   3827  1.1.1.1.4.2  yamt   [(set_attr "type" "fcmov")])
   3828  1.1.1.1.4.2  yamt 
   3829  1.1.1.1.4.2  yamt (define_insn "*movdfcc_ext4"
   3830  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "=f,f")
   3831  1.1.1.1.4.2  yamt 	(if_then_else:DF
   3832  1.1.1.1.4.2  yamt 	 (match_operator 3 "signed_comparison_operator"
   3833  1.1.1.1.4.2  yamt 			 [(float_extend:DF
   3834  1.1.1.1.4.2  yamt 			   (match_operand:SF 4 "reg_or_0_operand" "fG,fG"))
   3835  1.1.1.1.4.2  yamt 			  (match_operand:DF 2 "const0_operand" "G,G")])
   3836  1.1.1.1.4.2  yamt 	 (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG,0"))
   3837  1.1.1.1.4.2  yamt 	 (match_operand:DF 5 "reg_or_0_operand" "0,fG")))]
   3838  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3839  1.1.1.1.4.2  yamt   "@
   3840  1.1.1.1.4.2  yamt    fcmov%C3 %R4,%R1,%0
   3841  1.1.1.1.4.2  yamt    fcmov%D3 %R4,%R5,%0"
   3842  1.1.1.1.4.2  yamt   [(set_attr "type" "fcmov")])
   3843  1.1.1.1.4.2  yamt 
   3844  1.1.1.1.4.2  yamt (define_expand "smaxdf3"
   3845  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3846  1.1.1.1.4.2  yamt 	(le:DF (match_operand:DF 1 "reg_or_0_operand" "")
   3847  1.1.1.1.4.2  yamt 	       (match_operand:DF 2 "reg_or_0_operand" "")))
   3848  1.1.1.1.4.2  yamt    (set (match_operand:DF 0 "register_operand" "")
   3849  1.1.1.1.4.2  yamt 	(if_then_else:DF (eq (match_dup 3) (match_dup 4))
   3850  1.1.1.1.4.2  yamt 			 (match_dup 1) (match_dup 2)))]
   3851  1.1.1.1.4.2  yamt   "TARGET_FP"
   3852  1.1.1.1.4.2  yamt {
   3853  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DFmode);
   3854  1.1.1.1.4.2  yamt   operands[4] = CONST0_RTX (DFmode);
   3855  1.1.1.1.4.2  yamt })
   3856  1.1.1.1.4.2  yamt 
   3857  1.1.1.1.4.2  yamt (define_expand "smindf3"
   3858  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3859  1.1.1.1.4.2  yamt 	(lt:DF (match_operand:DF 1 "reg_or_0_operand" "")
   3860  1.1.1.1.4.2  yamt 	       (match_operand:DF 2 "reg_or_0_operand" "")))
   3861  1.1.1.1.4.2  yamt    (set (match_operand:DF 0 "register_operand" "")
   3862  1.1.1.1.4.2  yamt 	(if_then_else:DF (ne (match_dup 3) (match_dup 4))
   3863  1.1.1.1.4.2  yamt 			 (match_dup 1) (match_dup 2)))]
   3864  1.1.1.1.4.2  yamt   "TARGET_FP"
   3865  1.1.1.1.4.2  yamt {
   3866  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DFmode);
   3867  1.1.1.1.4.2  yamt   operands[4] = CONST0_RTX (DFmode);
   3868  1.1.1.1.4.2  yamt })
   3869  1.1.1.1.4.2  yamt 
   3870  1.1.1.1.4.2  yamt (define_expand "smaxsf3"
   3871  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3872  1.1.1.1.4.2  yamt 	(le:DF (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" ""))
   3873  1.1.1.1.4.2  yamt 	       (float_extend:DF (match_operand:SF 2 "reg_or_0_operand" ""))))
   3874  1.1.1.1.4.2  yamt    (set (match_operand:SF 0 "register_operand" "")
   3875  1.1.1.1.4.2  yamt 	(if_then_else:SF (eq (match_dup 3) (match_dup 4))
   3876  1.1.1.1.4.2  yamt 			 (match_dup 1) (match_dup 2)))]
   3877  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3878  1.1.1.1.4.2  yamt {
   3879  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DFmode);
   3880  1.1.1.1.4.2  yamt   operands[4] = CONST0_RTX (DFmode);
   3881  1.1.1.1.4.2  yamt })
   3882  1.1.1.1.4.2  yamt 
   3883  1.1.1.1.4.2  yamt (define_expand "sminsf3"
   3884  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   3885  1.1.1.1.4.2  yamt 	(lt:DF (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" ""))
   3886  1.1.1.1.4.2  yamt 	       (float_extend:DF (match_operand:SF 2 "reg_or_0_operand" ""))))
   3887  1.1.1.1.4.2  yamt    (set (match_operand:SF 0 "register_operand" "")
   3888  1.1.1.1.4.2  yamt 	(if_then_else:SF (ne (match_dup 3) (match_dup 4))
   3889  1.1.1.1.4.2  yamt 		      (match_dup 1) (match_dup 2)))]
   3890  1.1.1.1.4.2  yamt   "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU"
   3891  1.1.1.1.4.2  yamt {
   3892  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DFmode);
   3893  1.1.1.1.4.2  yamt   operands[4] = CONST0_RTX (DFmode);
   3894  1.1.1.1.4.2  yamt })
   3895  1.1.1.1.4.2  yamt 
   3896  1.1.1.1.4.2  yamt (define_insn "*fbcc_normal"
   3897  1.1.1.1.4.2  yamt   [(set (pc)
   3898  1.1.1.1.4.2  yamt 	(if_then_else
   3899  1.1.1.1.4.2  yamt 	 (match_operator 1 "signed_comparison_operator"
   3900  1.1.1.1.4.2  yamt 			 [(match_operand:DF 2 "reg_or_0_operand" "fG")
   3901  1.1.1.1.4.2  yamt 			  (match_operand:DF 3 "const0_operand" "G")])
   3902  1.1.1.1.4.2  yamt 	 (label_ref (match_operand 0 "" ""))
   3903  1.1.1.1.4.2  yamt 	 (pc)))]
   3904  1.1.1.1.4.2  yamt   "TARGET_FP"
   3905  1.1.1.1.4.2  yamt   "fb%C1 %R2,%0"
   3906  1.1.1.1.4.2  yamt   [(set_attr "type" "fbr")])
   3907  1.1.1.1.4.2  yamt 
   3908  1.1.1.1.4.2  yamt (define_insn "*fbcc_ext_normal"
   3909  1.1.1.1.4.2  yamt   [(set (pc)
   3910  1.1.1.1.4.2  yamt 	(if_then_else
   3911  1.1.1.1.4.2  yamt 	 (match_operator 1 "signed_comparison_operator"
   3912  1.1.1.1.4.2  yamt 			 [(float_extend:DF
   3913  1.1.1.1.4.2  yamt 			   (match_operand:SF 2 "reg_or_0_operand" "fG"))
   3914  1.1.1.1.4.2  yamt 			  (match_operand:DF 3 "const0_operand" "G")])
   3915  1.1.1.1.4.2  yamt 	 (label_ref (match_operand 0 "" ""))
   3916  1.1.1.1.4.2  yamt 	 (pc)))]
   3917  1.1.1.1.4.2  yamt   "TARGET_FP"
   3918  1.1.1.1.4.2  yamt   "fb%C1 %R2,%0"
   3919  1.1.1.1.4.2  yamt   [(set_attr "type" "fbr")])
   3920  1.1.1.1.4.2  yamt 
   3922  1.1.1.1.4.2  yamt ;; These are the main define_expand's used to make conditional branches
   3923  1.1.1.1.4.2  yamt ;; and compares.
   3924  1.1.1.1.4.2  yamt 
   3925  1.1.1.1.4.2  yamt (define_expand "cbranchdf4"
   3926  1.1.1.1.4.2  yamt   [(use (match_operator 0 "alpha_cbranch_operator"
   3927  1.1.1.1.4.2  yamt          [(match_operand:DF 1 "reg_or_0_operand" "")
   3928  1.1.1.1.4.2  yamt           (match_operand:DF 2 "reg_or_0_operand" "")]))
   3929  1.1.1.1.4.2  yamt    (use (match_operand 3 ""))]
   3930  1.1.1.1.4.2  yamt   "TARGET_FP"
   3931  1.1.1.1.4.2  yamt   { alpha_emit_conditional_branch (operands, DFmode); DONE; })
   3932  1.1.1.1.4.2  yamt 
   3933  1.1.1.1.4.2  yamt (define_expand "cbranchtf4"
   3934  1.1.1.1.4.2  yamt   [(use (match_operator 0 "alpha_cbranch_operator"
   3935  1.1.1.1.4.2  yamt          [(match_operand:TF 1 "general_operand")
   3936  1.1.1.1.4.2  yamt           (match_operand:TF 2 "general_operand")]))
   3937  1.1.1.1.4.2  yamt    (use (match_operand 3 ""))]
   3938  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   3939  1.1.1.1.4.2  yamt   { alpha_emit_conditional_branch (operands, TFmode); DONE; })
   3940  1.1.1.1.4.2  yamt 
   3941  1.1.1.1.4.2  yamt (define_expand "cbranchdi4"
   3942  1.1.1.1.4.2  yamt   [(use (match_operator 0 "alpha_cbranch_operator"
   3943  1.1.1.1.4.2  yamt          [(match_operand:DI 1 "some_operand")
   3944  1.1.1.1.4.2  yamt           (match_operand:DI 2 "some_operand")]))
   3945  1.1.1.1.4.2  yamt    (use (match_operand 3 ""))]
   3946  1.1.1.1.4.2  yamt   ""
   3947  1.1.1.1.4.2  yamt   { alpha_emit_conditional_branch (operands, DImode); DONE; })
   3948  1.1.1.1.4.2  yamt 
   3949  1.1.1.1.4.2  yamt (define_expand "cstoredf4"
   3950  1.1.1.1.4.2  yamt   [(use (match_operator:DI 1 "alpha_cbranch_operator"
   3951  1.1.1.1.4.2  yamt          [(match_operand:DF 2 "reg_or_0_operand")
   3952  1.1.1.1.4.2  yamt           (match_operand:DF 3 "reg_or_0_operand")]))
   3953  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 0 "register_operand"))]
   3954  1.1.1.1.4.2  yamt   "TARGET_FP"
   3955  1.1.1.1.4.2  yamt   { if (!alpha_emit_setcc (operands, DFmode)) FAIL; else DONE; })
   3956  1.1.1.1.4.2  yamt 
   3957  1.1.1.1.4.2  yamt (define_expand "cstoretf4"
   3958  1.1.1.1.4.2  yamt   [(use (match_operator:DI 1 "alpha_cbranch_operator"
   3959  1.1.1.1.4.2  yamt          [(match_operand:TF 2 "general_operand")
   3960  1.1.1.1.4.2  yamt           (match_operand:TF 3 "general_operand")]))
   3961  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 0 "register_operand"))]
   3962  1.1.1.1.4.2  yamt   "TARGET_HAS_XFLOATING_LIBS"
   3963  1.1.1.1.4.2  yamt   { if (!alpha_emit_setcc (operands, TFmode)) FAIL; else DONE; })
   3964  1.1.1.1.4.2  yamt 
   3965  1.1.1.1.4.2  yamt (define_expand "cstoredi4"
   3966  1.1.1.1.4.2  yamt   [(use (match_operator:DI 1 "alpha_cbranch_operator"
   3967  1.1.1.1.4.2  yamt          [(match_operand:DI 2 "some_operand")
   3968  1.1.1.1.4.2  yamt           (match_operand:DI 3 "some_operand")]))
   3969  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 0 "register_operand"))]
   3970  1.1.1.1.4.2  yamt   ""
   3971  1.1.1.1.4.2  yamt   { if (!alpha_emit_setcc (operands, DImode)) FAIL; else DONE; })
   3972  1.1.1.1.4.2  yamt 
   3974  1.1.1.1.4.2  yamt ;; These are the main define_expand's used to make conditional moves.
   3975  1.1.1.1.4.2  yamt 
   3976  1.1.1.1.4.2  yamt (define_expand "movsicc"
   3977  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "")
   3978  1.1.1.1.4.2  yamt 	(if_then_else:SI (match_operand 1 "comparison_operator" "")
   3979  1.1.1.1.4.2  yamt 			 (match_operand:SI 2 "reg_or_8bit_operand" "")
   3980  1.1.1.1.4.2  yamt 			 (match_operand:SI 3 "reg_or_8bit_operand" "")))]
   3981  1.1.1.1.4.2  yamt   ""
   3982  1.1.1.1.4.2  yamt {
   3983  1.1.1.1.4.2  yamt   if ((operands[1] = alpha_emit_conditional_move (operands[1], SImode)) == 0)
   3984  1.1.1.1.4.2  yamt     FAIL;
   3985  1.1.1.1.4.2  yamt })
   3986  1.1.1.1.4.2  yamt 
   3987  1.1.1.1.4.2  yamt (define_expand "movdicc"
   3988  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   3989  1.1.1.1.4.2  yamt 	(if_then_else:DI (match_operand 1 "comparison_operator" "")
   3990  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "reg_or_8bit_operand" "")
   3991  1.1.1.1.4.2  yamt 			 (match_operand:DI 3 "reg_or_8bit_operand" "")))]
   3992  1.1.1.1.4.2  yamt   ""
   3993  1.1.1.1.4.2  yamt {
   3994  1.1.1.1.4.2  yamt   if ((operands[1] = alpha_emit_conditional_move (operands[1], DImode)) == 0)
   3995  1.1.1.1.4.2  yamt     FAIL;
   3996  1.1.1.1.4.2  yamt })
   3997  1.1.1.1.4.2  yamt 
   3998  1.1.1.1.4.2  yamt (define_expand "movsfcc"
   3999  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "register_operand" "")
   4000  1.1.1.1.4.2  yamt 	(if_then_else:SF (match_operand 1 "comparison_operator" "")
   4001  1.1.1.1.4.2  yamt 			 (match_operand:SF 2 "reg_or_8bit_operand" "")
   4002  1.1.1.1.4.2  yamt 			 (match_operand:SF 3 "reg_or_8bit_operand" "")))]
   4003  1.1.1.1.4.2  yamt   ""
   4004  1.1.1.1.4.2  yamt {
   4005  1.1.1.1.4.2  yamt   if ((operands[1] = alpha_emit_conditional_move (operands[1], SFmode)) == 0)
   4006  1.1.1.1.4.2  yamt     FAIL;
   4007  1.1.1.1.4.2  yamt })
   4008  1.1.1.1.4.2  yamt 
   4009  1.1.1.1.4.2  yamt (define_expand "movdfcc"
   4010  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "register_operand" "")
   4011  1.1.1.1.4.2  yamt 	(if_then_else:DF (match_operand 1 "comparison_operator" "")
   4012  1.1.1.1.4.2  yamt 			 (match_operand:DF 2 "reg_or_8bit_operand" "")
   4013  1.1.1.1.4.2  yamt 			 (match_operand:DF 3 "reg_or_8bit_operand" "")))]
   4014  1.1.1.1.4.2  yamt   ""
   4015  1.1.1.1.4.2  yamt {
   4016  1.1.1.1.4.2  yamt   if ((operands[1] = alpha_emit_conditional_move (operands[1], DFmode)) == 0)
   4017  1.1.1.1.4.2  yamt     FAIL;
   4018  1.1.1.1.4.2  yamt })
   4019  1.1.1.1.4.2  yamt 
   4021  1.1.1.1.4.2  yamt ;; These define_split definitions are used in cases when comparisons have
   4022  1.1.1.1.4.2  yamt ;; not be stated in the correct way and we need to reverse the second
   4023  1.1.1.1.4.2  yamt ;; comparison.  For example, x >= 7 has to be done as x < 6 with the
   4024  1.1.1.1.4.2  yamt ;; comparison that tests the result being reversed.  We have one define_split
   4025  1.1.1.1.4.2  yamt ;; for each use of a comparison.  They do not match valid insns and need
   4026  1.1.1.1.4.2  yamt ;; not generate valid insns.
   4027  1.1.1.1.4.2  yamt ;;
   4028  1.1.1.1.4.2  yamt ;; We can also handle equality comparisons (and inequality comparisons in
   4029  1.1.1.1.4.2  yamt ;; cases where the resulting add cannot overflow) by doing an add followed by
   4030  1.1.1.1.4.2  yamt ;; a comparison with zero.  This is faster since the addition takes one
   4031  1.1.1.1.4.2  yamt ;; less cycle than a compare when feeding into a conditional move.
   4032  1.1.1.1.4.2  yamt ;; For this case, we also have an SImode pattern since we can merge the add
   4033  1.1.1.1.4.2  yamt ;; and sign extend and the order doesn't matter.
   4034  1.1.1.1.4.2  yamt ;;
   4035  1.1.1.1.4.2  yamt ;; We do not do this for floating-point, since it isn't clear how the "wrong"
   4036  1.1.1.1.4.2  yamt ;; operation could have been generated.
   4037  1.1.1.1.4.2  yamt 
   4038  1.1.1.1.4.2  yamt (define_split
   4039  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   4040  1.1.1.1.4.2  yamt 	(if_then_else:DI
   4041  1.1.1.1.4.2  yamt 	 (match_operator 1 "comparison_operator"
   4042  1.1.1.1.4.2  yamt 			 [(match_operand:DI 2 "reg_or_0_operand" "")
   4043  1.1.1.1.4.2  yamt 			  (match_operand:DI 3 "reg_or_cint_operand" "")])
   4044  1.1.1.1.4.2  yamt 	 (match_operand:DI 4 "reg_or_cint_operand" "")
   4045  1.1.1.1.4.2  yamt 	 (match_operand:DI 5 "reg_or_cint_operand" "")))
   4046  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 6 "register_operand" ""))]
   4047  1.1.1.1.4.2  yamt   "operands[3] != const0_rtx"
   4048  1.1.1.1.4.2  yamt   [(set (match_dup 6) (match_dup 7))
   4049  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4050  1.1.1.1.4.2  yamt 	(if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))]
   4051  1.1.1.1.4.2  yamt {
   4052  1.1.1.1.4.2  yamt   enum rtx_code code = GET_CODE (operands[1]);
   4053  1.1.1.1.4.2  yamt   int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU);
   4054  1.1.1.1.4.2  yamt 
   4055  1.1.1.1.4.2  yamt   /* If we are comparing for equality with a constant and that constant
   4056  1.1.1.1.4.2  yamt      appears in the arm when the register equals the constant, use the
   4057  1.1.1.1.4.2  yamt      register since that is more likely to match (and to produce better code
   4058  1.1.1.1.4.2  yamt      if both would).  */
   4059  1.1.1.1.4.2  yamt 
   4060  1.1.1.1.4.2  yamt   if (code == EQ && CONST_INT_P (operands[3])
   4061  1.1.1.1.4.2  yamt       && rtx_equal_p (operands[4], operands[3]))
   4062  1.1.1.1.4.2  yamt     operands[4] = operands[2];
   4063  1.1.1.1.4.2  yamt 
   4064  1.1.1.1.4.2  yamt   else if (code == NE && CONST_INT_P (operands[3])
   4065  1.1.1.1.4.2  yamt 	   && rtx_equal_p (operands[5], operands[3]))
   4066  1.1.1.1.4.2  yamt     operands[5] = operands[2];
   4067  1.1.1.1.4.2  yamt 
   4068  1.1.1.1.4.2  yamt   if (code == NE || code == EQ
   4069  1.1.1.1.4.2  yamt       || (extended_count (operands[2], DImode, unsignedp) >= 1
   4070  1.1.1.1.4.2  yamt 	  && extended_count (operands[3], DImode, unsignedp) >= 1))
   4071  1.1.1.1.4.2  yamt     {
   4072  1.1.1.1.4.2  yamt       if (CONST_INT_P (operands[3]))
   4073  1.1.1.1.4.2  yamt 	operands[7] = gen_rtx_PLUS (DImode, operands[2],
   4074  1.1.1.1.4.2  yamt 				    GEN_INT (- INTVAL (operands[3])));
   4075  1.1.1.1.4.2  yamt       else
   4076  1.1.1.1.4.2  yamt 	operands[7] = gen_rtx_MINUS (DImode, operands[2], operands[3]);
   4077  1.1.1.1.4.2  yamt 
   4078  1.1.1.1.4.2  yamt       operands[8] = gen_rtx_fmt_ee (code, VOIDmode, operands[6], const0_rtx);
   4079  1.1.1.1.4.2  yamt     }
   4080  1.1.1.1.4.2  yamt 
   4081  1.1.1.1.4.2  yamt   else if (code == EQ || code == LE || code == LT
   4082  1.1.1.1.4.2  yamt 	   || code == LEU || code == LTU)
   4083  1.1.1.1.4.2  yamt     {
   4084  1.1.1.1.4.2  yamt       operands[7] = gen_rtx_fmt_ee (code, DImode, operands[2], operands[3]);
   4085  1.1.1.1.4.2  yamt       operands[8] = gen_rtx_NE (VOIDmode, operands[6], const0_rtx);
   4086  1.1.1.1.4.2  yamt     }
   4087  1.1.1.1.4.2  yamt   else
   4088  1.1.1.1.4.2  yamt     {
   4089  1.1.1.1.4.2  yamt       operands[7] = gen_rtx_fmt_ee (reverse_condition (code), DImode,
   4090  1.1.1.1.4.2  yamt 				    operands[2], operands[3]);
   4091  1.1.1.1.4.2  yamt       operands[8] = gen_rtx_EQ (VOIDmode, operands[6], const0_rtx);
   4092  1.1.1.1.4.2  yamt     }
   4093  1.1.1.1.4.2  yamt })
   4094  1.1.1.1.4.2  yamt 
   4095  1.1.1.1.4.2  yamt (define_split
   4096  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   4097  1.1.1.1.4.2  yamt 	(if_then_else:DI
   4098  1.1.1.1.4.2  yamt 	 (match_operator 1 "comparison_operator"
   4099  1.1.1.1.4.2  yamt 			 [(match_operand:SI 2 "reg_or_0_operand" "")
   4100  1.1.1.1.4.2  yamt 			  (match_operand:SI 3 "reg_or_cint_operand" "")])
   4101  1.1.1.1.4.2  yamt 	 (match_operand:DI 4 "reg_or_8bit_operand" "")
   4102  1.1.1.1.4.2  yamt 	 (match_operand:DI 5 "reg_or_8bit_operand" "")))
   4103  1.1.1.1.4.2  yamt    (clobber (match_operand:DI 6 "register_operand" ""))]
   4104  1.1.1.1.4.2  yamt   "operands[3] != const0_rtx
   4105  1.1.1.1.4.2  yamt    && (GET_CODE (operands[1]) == EQ || GET_CODE (operands[1]) == NE)"
   4106  1.1.1.1.4.2  yamt   [(set (match_dup 6) (match_dup 7))
   4107  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4108  1.1.1.1.4.2  yamt 	(if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))]
   4109  1.1.1.1.4.2  yamt {
   4110  1.1.1.1.4.2  yamt   enum rtx_code code = GET_CODE (operands[1]);
   4111  1.1.1.1.4.2  yamt   int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU);
   4112  1.1.1.1.4.2  yamt   rtx tem;
   4113  1.1.1.1.4.2  yamt 
   4114  1.1.1.1.4.2  yamt   if ((code != NE && code != EQ
   4115  1.1.1.1.4.2  yamt        && ! (extended_count (operands[2], DImode, unsignedp) >= 1
   4116  1.1.1.1.4.2  yamt 	     && extended_count (operands[3], DImode, unsignedp) >= 1)))
   4117  1.1.1.1.4.2  yamt     FAIL;
   4118  1.1.1.1.4.2  yamt 
   4119  1.1.1.1.4.2  yamt   if (CONST_INT_P (operands[3]))
   4120  1.1.1.1.4.2  yamt     tem = gen_rtx_PLUS (SImode, operands[2],
   4121  1.1.1.1.4.2  yamt 			GEN_INT (- INTVAL (operands[3])));
   4122  1.1.1.1.4.2  yamt   else
   4123  1.1.1.1.4.2  yamt     tem = gen_rtx_MINUS (SImode, operands[2], operands[3]);
   4124  1.1.1.1.4.2  yamt 
   4125  1.1.1.1.4.2  yamt   operands[7] = gen_rtx_SIGN_EXTEND (DImode, tem);
   4126  1.1.1.1.4.2  yamt   operands[8] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode,
   4127  1.1.1.1.4.2  yamt 				operands[6], const0_rtx);
   4128  1.1.1.1.4.2  yamt })
   4129  1.1.1.1.4.2  yamt 
   4130  1.1.1.1.4.2  yamt ;; Prefer to use cmp and arithmetic when possible instead of a cmove.
   4131  1.1.1.1.4.2  yamt 
   4132  1.1.1.1.4.2  yamt (define_split
   4133  1.1.1.1.4.2  yamt   [(set (match_operand 0 "register_operand" "")
   4134  1.1.1.1.4.2  yamt 	(if_then_else (match_operator 1 "signed_comparison_operator"
   4135  1.1.1.1.4.2  yamt 			   [(match_operand:DI 2 "reg_or_0_operand" "")
   4136  1.1.1.1.4.2  yamt 			    (const_int 0)])
   4137  1.1.1.1.4.2  yamt 	  (match_operand 3 "const_int_operand" "")
   4138  1.1.1.1.4.2  yamt 	  (match_operand 4 "const_int_operand" "")))]
   4139  1.1.1.1.4.2  yamt   ""
   4140  1.1.1.1.4.2  yamt   [(const_int 0)]
   4141  1.1.1.1.4.2  yamt {
   4142  1.1.1.1.4.2  yamt   if (alpha_split_conditional_move (GET_CODE (operands[1]), operands[0],
   4143  1.1.1.1.4.2  yamt 				    operands[2], operands[3], operands[4]))
   4144  1.1.1.1.4.2  yamt     DONE;
   4145  1.1.1.1.4.2  yamt   else
   4146  1.1.1.1.4.2  yamt     FAIL;
   4147  1.1.1.1.4.2  yamt })
   4148  1.1.1.1.4.2  yamt 
   4149  1.1.1.1.4.2  yamt ;; ??? Why combine is allowed to create such non-canonical rtl, I don't know.
   4150  1.1.1.1.4.2  yamt ;; Oh well, we match it in movcc, so it must be partially our fault.
   4151  1.1.1.1.4.2  yamt (define_split
   4152  1.1.1.1.4.2  yamt   [(set (match_operand 0 "register_operand" "")
   4153  1.1.1.1.4.2  yamt 	(if_then_else (match_operator 1 "signed_comparison_operator"
   4154  1.1.1.1.4.2  yamt 			   [(const_int 0)
   4155  1.1.1.1.4.2  yamt 			    (match_operand:DI 2 "reg_or_0_operand" "")])
   4156  1.1.1.1.4.2  yamt 	  (match_operand 3 "const_int_operand" "")
   4157  1.1.1.1.4.2  yamt 	  (match_operand 4 "const_int_operand" "")))]
   4158  1.1.1.1.4.2  yamt   ""
   4159  1.1.1.1.4.2  yamt   [(const_int 0)]
   4160  1.1.1.1.4.2  yamt {
   4161  1.1.1.1.4.2  yamt   if (alpha_split_conditional_move (swap_condition (GET_CODE (operands[1])),
   4162  1.1.1.1.4.2  yamt 				    operands[0], operands[2], operands[3],
   4163  1.1.1.1.4.2  yamt 				    operands[4]))
   4164  1.1.1.1.4.2  yamt     DONE;
   4165  1.1.1.1.4.2  yamt   else
   4166  1.1.1.1.4.2  yamt     FAIL;
   4167  1.1.1.1.4.2  yamt })
   4168  1.1.1.1.4.2  yamt 
   4169  1.1.1.1.4.2  yamt (define_insn_and_split "*cmp_sadd_di"
   4170  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   4171  1.1.1.1.4.2  yamt 	(plus:DI (if_then_else:DI
   4172  1.1.1.1.4.2  yamt 		   (match_operator 1 "alpha_zero_comparison_operator"
   4173  1.1.1.1.4.2  yamt 		     [(match_operand:DI 2 "reg_or_0_operand" "rJ")
   4174  1.1.1.1.4.2  yamt 		      (const_int 0)])
   4175  1.1.1.1.4.2  yamt 		   (match_operand:DI 3 "const48_operand" "I")
   4176  1.1.1.1.4.2  yamt 		   (const_int 0))
   4177  1.1.1.1.4.2  yamt 	         (match_operand:DI 4 "sext_add_operand" "rIO")))
   4178  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 5 "=r"))]
   4179  1.1.1.1.4.2  yamt   ""
   4180  1.1.1.1.4.2  yamt   "#"
   4181  1.1.1.1.4.2  yamt   ""
   4182  1.1.1.1.4.2  yamt   [(set (match_dup 5)
   4183  1.1.1.1.4.2  yamt 	(match_op_dup:DI 1 [(match_dup 2) (const_int 0)]))
   4184  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4185  1.1.1.1.4.2  yamt 	(plus:DI (mult:DI (match_dup 5) (match_dup 3))
   4186  1.1.1.1.4.2  yamt 		 (match_dup 4)))]
   4187  1.1.1.1.4.2  yamt {
   4188  1.1.1.1.4.2  yamt   if (can_create_pseudo_p ())
   4189  1.1.1.1.4.2  yamt     operands[5] = gen_reg_rtx (DImode);
   4190  1.1.1.1.4.2  yamt   else if (reg_overlap_mentioned_p (operands[5], operands[4]))
   4191  1.1.1.1.4.2  yamt     operands[5] = operands[0];
   4192  1.1.1.1.4.2  yamt })
   4193  1.1.1.1.4.2  yamt 
   4194  1.1.1.1.4.2  yamt (define_insn_and_split "*cmp_sadd_si"
   4195  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   4196  1.1.1.1.4.2  yamt 	(plus:SI (if_then_else:SI
   4197  1.1.1.1.4.2  yamt 		   (match_operator 1 "alpha_zero_comparison_operator"
   4198  1.1.1.1.4.2  yamt 		     [(match_operand:DI 2 "reg_or_0_operand" "rJ")
   4199  1.1.1.1.4.2  yamt 		      (const_int 0)])
   4200  1.1.1.1.4.2  yamt 		   (match_operand:SI 3 "const48_operand" "I")
   4201  1.1.1.1.4.2  yamt 		   (const_int 0))
   4202  1.1.1.1.4.2  yamt 	         (match_operand:SI 4 "sext_add_operand" "rIO")))
   4203  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 5 "=r"))]
   4204  1.1.1.1.4.2  yamt   ""
   4205  1.1.1.1.4.2  yamt   "#"
   4206  1.1.1.1.4.2  yamt   ""
   4207  1.1.1.1.4.2  yamt   [(set (match_dup 5)
   4208  1.1.1.1.4.2  yamt 	(match_op_dup:DI 1 [(match_dup 2) (const_int 0)]))
   4209  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4210  1.1.1.1.4.2  yamt 	(plus:SI (mult:SI (match_dup 6) (match_dup 3))
   4211  1.1.1.1.4.2  yamt 		 (match_dup 4)))]
   4212  1.1.1.1.4.2  yamt {
   4213  1.1.1.1.4.2  yamt   if (can_create_pseudo_p ())
   4214  1.1.1.1.4.2  yamt     operands[5] = gen_reg_rtx (DImode);
   4215  1.1.1.1.4.2  yamt   else if (reg_overlap_mentioned_p (operands[5], operands[4]))
   4216  1.1.1.1.4.2  yamt     operands[5] = gen_lowpart (DImode, operands[0]);
   4217  1.1.1.1.4.2  yamt 
   4218  1.1.1.1.4.2  yamt   operands[6] = gen_lowpart (SImode, operands[5]);
   4219  1.1.1.1.4.2  yamt })
   4220  1.1.1.1.4.2  yamt 
   4221  1.1.1.1.4.2  yamt (define_insn_and_split "*cmp_sadd_sidi"
   4222  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   4223  1.1.1.1.4.2  yamt 	(sign_extend:DI
   4224  1.1.1.1.4.2  yamt 	  (plus:SI (if_then_else:SI
   4225  1.1.1.1.4.2  yamt 		     (match_operator 1 "alpha_zero_comparison_operator"
   4226  1.1.1.1.4.2  yamt 		       [(match_operand:DI 2 "reg_or_0_operand" "rJ")
   4227  1.1.1.1.4.2  yamt 		        (const_int 0)])
   4228  1.1.1.1.4.2  yamt 		     (match_operand:SI 3 "const48_operand" "I")
   4229  1.1.1.1.4.2  yamt 		     (const_int 0))
   4230  1.1.1.1.4.2  yamt 	           (match_operand:SI 4 "sext_add_operand" "rIO"))))
   4231  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 5 "=r"))]
   4232  1.1.1.1.4.2  yamt   ""
   4233  1.1.1.1.4.2  yamt   "#"
   4234  1.1.1.1.4.2  yamt   ""
   4235  1.1.1.1.4.2  yamt   [(set (match_dup 5)
   4236  1.1.1.1.4.2  yamt 	(match_op_dup:DI 1 [(match_dup 2) (const_int 0)]))
   4237  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4238  1.1.1.1.4.2  yamt 	(sign_extend:DI (plus:SI (mult:SI (match_dup 6) (match_dup 3))
   4239  1.1.1.1.4.2  yamt 				 (match_dup 4))))]
   4240  1.1.1.1.4.2  yamt {
   4241  1.1.1.1.4.2  yamt   if (can_create_pseudo_p ())
   4242  1.1.1.1.4.2  yamt     operands[5] = gen_reg_rtx (DImode);
   4243  1.1.1.1.4.2  yamt   else if (reg_overlap_mentioned_p (operands[5], operands[4]))
   4244  1.1.1.1.4.2  yamt     operands[5] = operands[0];
   4245  1.1.1.1.4.2  yamt 
   4246  1.1.1.1.4.2  yamt   operands[6] = gen_lowpart (SImode, operands[5]);
   4247  1.1.1.1.4.2  yamt })
   4248  1.1.1.1.4.2  yamt 
   4249  1.1.1.1.4.2  yamt (define_insn_and_split "*cmp_ssub_di"
   4250  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   4251  1.1.1.1.4.2  yamt 	(minus:DI (if_then_else:DI
   4252  1.1.1.1.4.2  yamt 		    (match_operator 1 "alpha_zero_comparison_operator"
   4253  1.1.1.1.4.2  yamt 		      [(match_operand:DI 2 "reg_or_0_operand" "rJ")
   4254  1.1.1.1.4.2  yamt 		       (const_int 0)])
   4255  1.1.1.1.4.2  yamt 		    (match_operand:DI 3 "const48_operand" "I")
   4256  1.1.1.1.4.2  yamt 		    (const_int 0))
   4257  1.1.1.1.4.2  yamt 	          (match_operand:DI 4 "reg_or_8bit_operand" "rI")))
   4258  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 5 "=r"))]
   4259  1.1.1.1.4.2  yamt   ""
   4260  1.1.1.1.4.2  yamt   "#"
   4261  1.1.1.1.4.2  yamt   ""
   4262  1.1.1.1.4.2  yamt   [(set (match_dup 5)
   4263  1.1.1.1.4.2  yamt 	(match_op_dup:DI 1 [(match_dup 2) (const_int 0)]))
   4264  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4265  1.1.1.1.4.2  yamt 	(minus:DI (mult:DI (match_dup 5) (match_dup 3))
   4266  1.1.1.1.4.2  yamt 		  (match_dup 4)))]
   4267  1.1.1.1.4.2  yamt {
   4268  1.1.1.1.4.2  yamt   if (can_create_pseudo_p ())
   4269  1.1.1.1.4.2  yamt     operands[5] = gen_reg_rtx (DImode);
   4270  1.1.1.1.4.2  yamt   else if (reg_overlap_mentioned_p (operands[5], operands[4]))
   4271  1.1.1.1.4.2  yamt     operands[5] = operands[0];
   4272  1.1.1.1.4.2  yamt })
   4273  1.1.1.1.4.2  yamt 
   4274  1.1.1.1.4.2  yamt (define_insn_and_split "*cmp_ssub_si"
   4275  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "=r")
   4276  1.1.1.1.4.2  yamt 	(minus:SI (if_then_else:SI
   4277  1.1.1.1.4.2  yamt 		    (match_operator 1 "alpha_zero_comparison_operator"
   4278  1.1.1.1.4.2  yamt 		      [(match_operand:DI 2 "reg_or_0_operand" "rJ")
   4279  1.1.1.1.4.2  yamt 		       (const_int 0)])
   4280  1.1.1.1.4.2  yamt 		    (match_operand:SI 3 "const48_operand" "I")
   4281  1.1.1.1.4.2  yamt 		    (const_int 0))
   4282  1.1.1.1.4.2  yamt 	          (match_operand:SI 4 "reg_or_8bit_operand" "rI")))
   4283  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 5 "=r"))]
   4284  1.1.1.1.4.2  yamt   ""
   4285  1.1.1.1.4.2  yamt   "#"
   4286  1.1.1.1.4.2  yamt   ""
   4287  1.1.1.1.4.2  yamt   [(set (match_dup 5)
   4288  1.1.1.1.4.2  yamt 	(match_op_dup:DI 1 [(match_dup 2) (const_int 0)]))
   4289  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4290  1.1.1.1.4.2  yamt 	(minus:SI (mult:SI (match_dup 6) (match_dup 3))
   4291  1.1.1.1.4.2  yamt 		 (match_dup 4)))]
   4292  1.1.1.1.4.2  yamt {
   4293  1.1.1.1.4.2  yamt   if (can_create_pseudo_p ())
   4294  1.1.1.1.4.2  yamt     operands[5] = gen_reg_rtx (DImode);
   4295  1.1.1.1.4.2  yamt   else if (reg_overlap_mentioned_p (operands[5], operands[4]))
   4296  1.1.1.1.4.2  yamt     operands[5] = gen_lowpart (DImode, operands[0]);
   4297  1.1.1.1.4.2  yamt 
   4298  1.1.1.1.4.2  yamt   operands[6] = gen_lowpart (SImode, operands[5]);
   4299  1.1.1.1.4.2  yamt })
   4300  1.1.1.1.4.2  yamt 
   4301  1.1.1.1.4.2  yamt (define_insn_and_split "*cmp_ssub_sidi"
   4302  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   4303  1.1.1.1.4.2  yamt 	(sign_extend:DI
   4304  1.1.1.1.4.2  yamt 	  (minus:SI (if_then_else:SI
   4305  1.1.1.1.4.2  yamt 		      (match_operator 1 "alpha_zero_comparison_operator"
   4306  1.1.1.1.4.2  yamt 		        [(match_operand:DI 2 "reg_or_0_operand" "rJ")
   4307  1.1.1.1.4.2  yamt 		         (const_int 0)])
   4308  1.1.1.1.4.2  yamt 		      (match_operand:SI 3 "const48_operand" "I")
   4309  1.1.1.1.4.2  yamt 		      (const_int 0))
   4310  1.1.1.1.4.2  yamt 	            (match_operand:SI 4 "reg_or_8bit_operand" "rI"))))
   4311  1.1.1.1.4.2  yamt    (clobber (match_scratch:DI 5 "=r"))]
   4312  1.1.1.1.4.2  yamt   ""
   4313  1.1.1.1.4.2  yamt   "#"
   4314  1.1.1.1.4.2  yamt   ""
   4315  1.1.1.1.4.2  yamt   [(set (match_dup 5)
   4316  1.1.1.1.4.2  yamt 	(match_op_dup:DI 1 [(match_dup 2) (const_int 0)]))
   4317  1.1.1.1.4.2  yamt    (set (match_dup 0)
   4318  1.1.1.1.4.2  yamt 	(sign_extend:DI (minus:SI (mult:SI (match_dup 6) (match_dup 3))
   4319  1.1.1.1.4.2  yamt 				  (match_dup 4))))]
   4320  1.1.1.1.4.2  yamt {
   4321  1.1.1.1.4.2  yamt   if (can_create_pseudo_p ())
   4322  1.1.1.1.4.2  yamt     operands[5] = gen_reg_rtx (DImode);
   4323  1.1.1.1.4.2  yamt   else if (reg_overlap_mentioned_p (operands[5], operands[4]))
   4324  1.1.1.1.4.2  yamt     operands[5] = operands[0];
   4325  1.1.1.1.4.2  yamt 
   4326  1.1.1.1.4.2  yamt   operands[6] = gen_lowpart (SImode, operands[5]);
   4327  1.1.1.1.4.2  yamt })
   4328  1.1.1.1.4.2  yamt 
   4330  1.1.1.1.4.2  yamt ;; Here are the CALL and unconditional branch insns.  Calls on NT and OSF
   4331  1.1.1.1.4.2  yamt ;; work differently, so we have different patterns for each.
   4332  1.1.1.1.4.2  yamt 
   4333  1.1.1.1.4.2  yamt ;; On Unicos/Mk a call information word (CIW) must be generated for each
   4334  1.1.1.1.4.2  yamt ;; call. The CIW contains information about arguments passed in registers
   4335  1.1.1.1.4.2  yamt ;; and is stored in the caller's SSIB. Its offset relative to the beginning
   4336  1.1.1.1.4.2  yamt ;; of the SSIB is passed in $25. Handling this properly is quite complicated
   4337  1.1.1.1.4.2  yamt ;; in the presence of inlining since the CIWs for calls performed by the
   4338  1.1.1.1.4.2  yamt ;; inlined function must be stored in the SSIB of the function it is inlined
   4339  1.1.1.1.4.2  yamt ;; into as well. We encode the CIW in an unspec and append it to the list
   4340  1.1.1.1.4.2  yamt ;; of the CIWs for the current function only when the instruction for loading
   4341  1.1.1.1.4.2  yamt ;; $25 is generated.
   4342  1.1.1.1.4.2  yamt 
   4343  1.1.1.1.4.2  yamt (define_expand "call"
   4344  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "" ""))
   4345  1.1.1.1.4.2  yamt    (use (match_operand 1 "" ""))
   4346  1.1.1.1.4.2  yamt    (use (match_operand 2 "" ""))
   4347  1.1.1.1.4.2  yamt    (use (match_operand 3 "" ""))]
   4348  1.1.1.1.4.2  yamt   ""
   4349  1.1.1.1.4.2  yamt {
   4350  1.1.1.1.4.2  yamt   if (TARGET_ABI_WINDOWS_NT)
   4351  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_nt (operands[0], operands[1]));
   4352  1.1.1.1.4.2  yamt   else if (TARGET_ABI_OPEN_VMS)
   4353  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_vms (operands[0], operands[2]));
   4354  1.1.1.1.4.2  yamt   else if (TARGET_ABI_UNICOSMK)
   4355  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_umk (operands[0], operands[2]));
   4356  1.1.1.1.4.2  yamt   else
   4357  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_osf (operands[0], operands[1]));
   4358  1.1.1.1.4.2  yamt   DONE;
   4359  1.1.1.1.4.2  yamt })
   4360  1.1.1.1.4.2  yamt 
   4361  1.1.1.1.4.2  yamt (define_expand "sibcall"
   4362  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_operand 0 "" ""))
   4363  1.1.1.1.4.2  yamt 			    (match_operand 1 "" ""))
   4364  1.1.1.1.4.2  yamt 	      (unspec [(reg:DI 29)] UNSPEC_SIBCALL)])]
   4365  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   4366  1.1.1.1.4.2  yamt {
   4367  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[0]));
   4368  1.1.1.1.4.2  yamt   operands[0] = XEXP (operands[0], 0);
   4369  1.1.1.1.4.2  yamt })
   4370  1.1.1.1.4.2  yamt 
   4371  1.1.1.1.4.2  yamt (define_expand "call_osf"
   4372  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_operand 0 "" ""))
   4373  1.1.1.1.4.2  yamt 		    (match_operand 1 "" ""))
   4374  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   4375  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4376  1.1.1.1.4.2  yamt   ""
   4377  1.1.1.1.4.2  yamt {
   4378  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[0]));
   4379  1.1.1.1.4.2  yamt 
   4380  1.1.1.1.4.2  yamt   operands[0] = XEXP (operands[0], 0);
   4381  1.1.1.1.4.2  yamt   if (! call_operand (operands[0], Pmode))
   4382  1.1.1.1.4.2  yamt     operands[0] = copy_to_mode_reg (Pmode, operands[0]);
   4383  1.1.1.1.4.2  yamt })
   4384  1.1.1.1.4.2  yamt 
   4385  1.1.1.1.4.2  yamt (define_expand "call_nt"
   4386  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_operand 0 "" ""))
   4387  1.1.1.1.4.2  yamt 		    (match_operand 1 "" ""))
   4388  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4389  1.1.1.1.4.2  yamt   ""
   4390  1.1.1.1.4.2  yamt {
   4391  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[0]));
   4392  1.1.1.1.4.2  yamt 
   4393  1.1.1.1.4.2  yamt   operands[0] = XEXP (operands[0], 0);
   4394  1.1.1.1.4.2  yamt   if (GET_CODE (operands[0]) != SYMBOL_REF && !REG_P (operands[0]))
   4395  1.1.1.1.4.2  yamt     operands[0] = force_reg (DImode, operands[0]);
   4396  1.1.1.1.4.2  yamt })
   4397  1.1.1.1.4.2  yamt 
   4398  1.1.1.1.4.2  yamt ;; Calls on Unicos/Mk are always indirect.
   4399  1.1.1.1.4.2  yamt ;; op 0: symbol ref for called function
   4400  1.1.1.1.4.2  yamt ;; op 1: CIW for $25 represented by an unspec
   4401  1.1.1.1.4.2  yamt 
   4402  1.1.1.1.4.2  yamt (define_expand "call_umk"
   4403  1.1.1.1.4.2  yamt    [(parallel [(call (mem:DI (match_operand 0 "" ""))
   4404  1.1.1.1.4.2  yamt 		     (match_operand 1 "" ""))
   4405  1.1.1.1.4.2  yamt 	       (use (reg:DI 25))
   4406  1.1.1.1.4.2  yamt 	       (clobber (reg:DI 26))])]
   4407  1.1.1.1.4.2  yamt    ""
   4408  1.1.1.1.4.2  yamt {
   4409  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[0]));
   4410  1.1.1.1.4.2  yamt 
   4411  1.1.1.1.4.2  yamt   /* Always load the address of the called function into a register;
   4412  1.1.1.1.4.2  yamt      load the CIW in $25.  */
   4413  1.1.1.1.4.2  yamt 
   4414  1.1.1.1.4.2  yamt   operands[0] = XEXP (operands[0], 0);
   4415  1.1.1.1.4.2  yamt   if (!REG_P (operands[0]))
   4416  1.1.1.1.4.2  yamt     operands[0] = force_reg (DImode, operands[0]);
   4417  1.1.1.1.4.2  yamt 
   4418  1.1.1.1.4.2  yamt   emit_move_insn (gen_rtx_REG (DImode, 25), operands[1]);
   4419  1.1.1.1.4.2  yamt })
   4420  1.1.1.1.4.2  yamt 
   4421  1.1.1.1.4.2  yamt ;;
   4422  1.1.1.1.4.2  yamt ;; call openvms/alpha
   4423  1.1.1.1.4.2  yamt ;; op 0: symbol ref for called function
   4424  1.1.1.1.4.2  yamt ;; op 1: next_arg_reg (argument information value for R25)
   4425  1.1.1.1.4.2  yamt ;;
   4426  1.1.1.1.4.2  yamt (define_expand "call_vms"
   4427  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_operand 0 "" ""))
   4428  1.1.1.1.4.2  yamt 		    (match_operand 1 "" ""))
   4429  1.1.1.1.4.2  yamt 	      (use (match_dup 2))
   4430  1.1.1.1.4.2  yamt 	      (use (reg:DI 25))
   4431  1.1.1.1.4.2  yamt 	      (use (reg:DI 26))
   4432  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 27))])]
   4433  1.1.1.1.4.2  yamt   ""
   4434  1.1.1.1.4.2  yamt {
   4435  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[0]));
   4436  1.1.1.1.4.2  yamt 
   4437  1.1.1.1.4.2  yamt   operands[0] = XEXP (operands[0], 0);
   4438  1.1.1.1.4.2  yamt 
   4439  1.1.1.1.4.2  yamt   /* Always load AI with argument information, then handle symbolic and
   4440  1.1.1.1.4.2  yamt      indirect call differently.  Load RA and set operands[2] to PV in
   4441  1.1.1.1.4.2  yamt      both cases.  */
   4442  1.1.1.1.4.2  yamt 
   4443  1.1.1.1.4.2  yamt   emit_move_insn (gen_rtx_REG (DImode, 25), operands[1]);
   4444  1.1.1.1.4.2  yamt   if (GET_CODE (operands[0]) == SYMBOL_REF)
   4445  1.1.1.1.4.2  yamt     {
   4446  1.1.1.1.4.2  yamt       alpha_need_linkage (XSTR (operands[0], 0), 0);
   4447  1.1.1.1.4.2  yamt 
   4448  1.1.1.1.4.2  yamt       operands[2] = const0_rtx;
   4449  1.1.1.1.4.2  yamt     }
   4450  1.1.1.1.4.2  yamt   else
   4451  1.1.1.1.4.2  yamt     {
   4452  1.1.1.1.4.2  yamt       emit_move_insn (gen_rtx_REG (Pmode, 26),
   4453  1.1.1.1.4.2  yamt 		      gen_rtx_MEM (Pmode, plus_constant (operands[0], 8)));
   4454  1.1.1.1.4.2  yamt       operands[2] = operands[0];
   4455  1.1.1.1.4.2  yamt     }
   4456  1.1.1.1.4.2  yamt 
   4457  1.1.1.1.4.2  yamt })
   4458  1.1.1.1.4.2  yamt 
   4459  1.1.1.1.4.2  yamt (define_expand "call_value"
   4460  1.1.1.1.4.2  yamt   [(use (match_operand 0 "" ""))
   4461  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "" ""))
   4462  1.1.1.1.4.2  yamt    (use (match_operand 2 "" ""))
   4463  1.1.1.1.4.2  yamt    (use (match_operand 3 "" ""))
   4464  1.1.1.1.4.2  yamt    (use (match_operand 4 "" ""))]
   4465  1.1.1.1.4.2  yamt   ""
   4466  1.1.1.1.4.2  yamt {
   4467  1.1.1.1.4.2  yamt   if (TARGET_ABI_WINDOWS_NT)
   4468  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_value_nt (operands[0], operands[1], operands[2]));
   4469  1.1.1.1.4.2  yamt   else if (TARGET_ABI_OPEN_VMS)
   4470  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_value_vms (operands[0], operands[1],
   4471  1.1.1.1.4.2  yamt 					operands[3]));
   4472  1.1.1.1.4.2  yamt   else if (TARGET_ABI_UNICOSMK)
   4473  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_value_umk (operands[0], operands[1],
   4474  1.1.1.1.4.2  yamt 					operands[3]));
   4475  1.1.1.1.4.2  yamt   else
   4476  1.1.1.1.4.2  yamt     emit_call_insn (gen_call_value_osf (operands[0], operands[1],
   4477  1.1.1.1.4.2  yamt 					operands[2]));
   4478  1.1.1.1.4.2  yamt   DONE;
   4479  1.1.1.1.4.2  yamt })
   4480  1.1.1.1.4.2  yamt 
   4481  1.1.1.1.4.2  yamt (define_expand "sibcall_value"
   4482  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand 0 "" "")
   4483  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_operand 1 "" ""))
   4484  1.1.1.1.4.2  yamt 		         (match_operand 2 "" "")))
   4485  1.1.1.1.4.2  yamt 	      (unspec [(reg:DI 29)] UNSPEC_SIBCALL)])]
   4486  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   4487  1.1.1.1.4.2  yamt {
   4488  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[1]));
   4489  1.1.1.1.4.2  yamt   operands[1] = XEXP (operands[1], 0);
   4490  1.1.1.1.4.2  yamt })
   4491  1.1.1.1.4.2  yamt 
   4492  1.1.1.1.4.2  yamt (define_expand "call_value_osf"
   4493  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand 0 "" "")
   4494  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_operand 1 "" ""))
   4495  1.1.1.1.4.2  yamt 			 (match_operand 2 "" "")))
   4496  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   4497  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4498  1.1.1.1.4.2  yamt   ""
   4499  1.1.1.1.4.2  yamt {
   4500  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[1]));
   4501  1.1.1.1.4.2  yamt 
   4502  1.1.1.1.4.2  yamt   operands[1] = XEXP (operands[1], 0);
   4503  1.1.1.1.4.2  yamt   if (! call_operand (operands[1], Pmode))
   4504  1.1.1.1.4.2  yamt     operands[1] = copy_to_mode_reg (Pmode, operands[1]);
   4505  1.1.1.1.4.2  yamt })
   4506  1.1.1.1.4.2  yamt 
   4507  1.1.1.1.4.2  yamt (define_expand "call_value_nt"
   4508  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand 0 "" "")
   4509  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_operand 1 "" ""))
   4510  1.1.1.1.4.2  yamt 			 (match_operand 2 "" "")))
   4511  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4512  1.1.1.1.4.2  yamt   ""
   4513  1.1.1.1.4.2  yamt {
   4514  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[1]));
   4515  1.1.1.1.4.2  yamt 
   4516  1.1.1.1.4.2  yamt   operands[1] = XEXP (operands[1], 0);
   4517  1.1.1.1.4.2  yamt   if (GET_CODE (operands[1]) != SYMBOL_REF && !REG_P (operands[1]))
   4518  1.1.1.1.4.2  yamt     operands[1] = force_reg (DImode, operands[1]);
   4519  1.1.1.1.4.2  yamt })
   4520  1.1.1.1.4.2  yamt 
   4521  1.1.1.1.4.2  yamt (define_expand "call_value_vms"
   4522  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand 0 "" "")
   4523  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_operand:DI 1 "" ""))
   4524  1.1.1.1.4.2  yamt 			 (match_operand 2 "" "")))
   4525  1.1.1.1.4.2  yamt 	      (use (match_dup 3))
   4526  1.1.1.1.4.2  yamt 	      (use (reg:DI 25))
   4527  1.1.1.1.4.2  yamt 	      (use (reg:DI 26))
   4528  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 27))])]
   4529  1.1.1.1.4.2  yamt   ""
   4530  1.1.1.1.4.2  yamt {
   4531  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[1]));
   4532  1.1.1.1.4.2  yamt 
   4533  1.1.1.1.4.2  yamt   operands[1] = XEXP (operands[1], 0);
   4534  1.1.1.1.4.2  yamt 
   4535  1.1.1.1.4.2  yamt   /* Always load AI with argument information, then handle symbolic and
   4536  1.1.1.1.4.2  yamt      indirect call differently.  Load RA and set operands[3] to PV in
   4537  1.1.1.1.4.2  yamt      both cases.  */
   4538  1.1.1.1.4.2  yamt 
   4539  1.1.1.1.4.2  yamt   emit_move_insn (gen_rtx_REG (DImode, 25), operands[2]);
   4540  1.1.1.1.4.2  yamt   if (GET_CODE (operands[1]) == SYMBOL_REF)
   4541  1.1.1.1.4.2  yamt     {
   4542  1.1.1.1.4.2  yamt       alpha_need_linkage (XSTR (operands[1], 0), 0);
   4543  1.1.1.1.4.2  yamt 
   4544  1.1.1.1.4.2  yamt       operands[3] = const0_rtx;
   4545  1.1.1.1.4.2  yamt     }
   4546  1.1.1.1.4.2  yamt   else
   4547  1.1.1.1.4.2  yamt     {
   4548  1.1.1.1.4.2  yamt       emit_move_insn (gen_rtx_REG (Pmode, 26),
   4549  1.1.1.1.4.2  yamt 		      gen_rtx_MEM (Pmode, plus_constant (operands[1], 8)));
   4550  1.1.1.1.4.2  yamt       operands[3] = operands[1];
   4551  1.1.1.1.4.2  yamt     }
   4552  1.1.1.1.4.2  yamt })
   4553  1.1.1.1.4.2  yamt 
   4554  1.1.1.1.4.2  yamt (define_expand "call_value_umk"
   4555  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand 0 "" "")
   4556  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_operand 1 "" ""))
   4557  1.1.1.1.4.2  yamt 			 (match_operand 2 "" "")))
   4558  1.1.1.1.4.2  yamt 	      (use (reg:DI 25))
   4559  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4560  1.1.1.1.4.2  yamt   ""
   4561  1.1.1.1.4.2  yamt {
   4562  1.1.1.1.4.2  yamt   gcc_assert (MEM_P (operands[1]));
   4563  1.1.1.1.4.2  yamt 
   4564  1.1.1.1.4.2  yamt   operands[1] = XEXP (operands[1], 0);
   4565  1.1.1.1.4.2  yamt   if (!REG_P (operands[1]))
   4566  1.1.1.1.4.2  yamt     operands[1] = force_reg (DImode, operands[1]);
   4567  1.1.1.1.4.2  yamt 
   4568  1.1.1.1.4.2  yamt   emit_move_insn (gen_rtx_REG (DImode, 25), operands[2]);
   4569  1.1.1.1.4.2  yamt })
   4570  1.1.1.1.4.2  yamt 
   4571  1.1.1.1.4.2  yamt (define_insn "*call_osf_1_er_noreturn"
   4572  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s"))
   4573  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4574  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   4575  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4576  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF
   4577  1.1.1.1.4.2  yamt    && find_reg_note (insn, REG_NORETURN, NULL_RTX)"
   4578  1.1.1.1.4.2  yamt   "@
   4579  1.1.1.1.4.2  yamt    jsr $26,($27),0
   4580  1.1.1.1.4.2  yamt    bsr $26,%0\t\t!samegp
   4581  1.1.1.1.4.2  yamt    ldq $27,%0($29)\t\t!literal!%#\;jsr $26,($27),%0\t\t!lituse_jsr!%#"
   4582  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4583  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,8")])
   4584  1.1.1.1.4.2  yamt 
   4585  1.1.1.1.4.2  yamt (define_insn "*call_osf_1_er"
   4586  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s"))
   4587  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4588  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   4589  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4590  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   4591  1.1.1.1.4.2  yamt   "@
   4592  1.1.1.1.4.2  yamt    jsr $26,(%0),0\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*
   4593  1.1.1.1.4.2  yamt    bsr $26,%0\t\t!samegp
   4594  1.1.1.1.4.2  yamt    ldq $27,%0($29)\t\t!literal!%#\;jsr $26,($27),%0\t\t!lituse_jsr!%#\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*"
   4595  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4596  1.1.1.1.4.2  yamt    (set_attr "length" "12,*,16")])
   4597  1.1.1.1.4.2  yamt 
   4598  1.1.1.1.4.2  yamt ;; We must use peep2 instead of a split because we need accurate life
   4599  1.1.1.1.4.2  yamt ;; information for $gp.  Consider the case of { bar(); while (1); }.
   4600  1.1.1.1.4.2  yamt (define_peephole2
   4601  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_operand:DI 0 "call_operand" ""))
   4602  1.1.1.1.4.2  yamt 		    (match_operand 1 "" ""))
   4603  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   4604  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4605  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed
   4606  1.1.1.1.4.2  yamt    && ! samegp_function_operand (operands[0], Pmode)
   4607  1.1.1.1.4.2  yamt    && (peep2_regno_dead_p (1, 29)
   4608  1.1.1.1.4.2  yamt        || find_reg_note (insn, REG_NORETURN, NULL_RTX))"
   4609  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_dup 2))
   4610  1.1.1.1.4.2  yamt 		    (match_dup 1))
   4611  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   4612  1.1.1.1.4.2  yamt 	      (use (match_dup 0))
   4613  1.1.1.1.4.2  yamt 	      (use (match_dup 3))
   4614  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4615  1.1.1.1.4.2  yamt {
   4616  1.1.1.1.4.2  yamt   if (CONSTANT_P (operands[0]))
   4617  1.1.1.1.4.2  yamt     {
   4618  1.1.1.1.4.2  yamt       operands[2] = gen_rtx_REG (Pmode, 27);
   4619  1.1.1.1.4.2  yamt       operands[3] = GEN_INT (alpha_next_sequence_number++);
   4620  1.1.1.1.4.2  yamt       emit_insn (gen_movdi_er_high_g (operands[2], pic_offset_table_rtx,
   4621  1.1.1.1.4.2  yamt 				      operands[0], operands[3]));
   4622  1.1.1.1.4.2  yamt     }
   4623  1.1.1.1.4.2  yamt   else
   4624  1.1.1.1.4.2  yamt     {
   4625  1.1.1.1.4.2  yamt       operands[2] = operands[0];
   4626  1.1.1.1.4.2  yamt       operands[0] = const0_rtx;
   4627  1.1.1.1.4.2  yamt       operands[3] = const0_rtx;
   4628  1.1.1.1.4.2  yamt     }
   4629  1.1.1.1.4.2  yamt })
   4630  1.1.1.1.4.2  yamt 
   4631  1.1.1.1.4.2  yamt (define_peephole2
   4632  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_operand:DI 0 "call_operand" ""))
   4633  1.1.1.1.4.2  yamt 		    (match_operand 1 "" ""))
   4634  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   4635  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   4636  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed
   4637  1.1.1.1.4.2  yamt    && ! samegp_function_operand (operands[0], Pmode)
   4638  1.1.1.1.4.2  yamt    && ! (peep2_regno_dead_p (1, 29)
   4639  1.1.1.1.4.2  yamt          || find_reg_note (insn, REG_NORETURN, NULL_RTX))"
   4640  1.1.1.1.4.2  yamt   [(parallel [(call (mem:DI (match_dup 2))
   4641  1.1.1.1.4.2  yamt 		    (match_dup 1))
   4642  1.1.1.1.4.2  yamt 	      (set (match_dup 5)
   4643  1.1.1.1.4.2  yamt 		   (unspec:DI [(match_dup 5) (match_dup 3)] UNSPEC_LDGP1))
   4644  1.1.1.1.4.2  yamt 	      (use (match_dup 0))
   4645  1.1.1.1.4.2  yamt 	      (use (match_dup 4))
   4646  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])
   4647  1.1.1.1.4.2  yamt    (set (match_dup 5)
   4648  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 5) (match_dup 3)] UNSPEC_LDGP2))]
   4649  1.1.1.1.4.2  yamt {
   4650  1.1.1.1.4.2  yamt   if (CONSTANT_P (operands[0]))
   4651  1.1.1.1.4.2  yamt     {
   4652  1.1.1.1.4.2  yamt       operands[2] = gen_rtx_REG (Pmode, 27);
   4653  1.1.1.1.4.2  yamt       operands[4] = GEN_INT (alpha_next_sequence_number++);
   4654  1.1.1.1.4.2  yamt       emit_insn (gen_movdi_er_high_g (operands[2], pic_offset_table_rtx,
   4655  1.1.1.1.4.2  yamt 				      operands[0], operands[4]));
   4656  1.1.1.1.4.2  yamt     }
   4657  1.1.1.1.4.2  yamt   else
   4658  1.1.1.1.4.2  yamt     {
   4659  1.1.1.1.4.2  yamt       operands[2] = operands[0];
   4660  1.1.1.1.4.2  yamt       operands[0] = const0_rtx;
   4661  1.1.1.1.4.2  yamt       operands[4] = const0_rtx;
   4662  1.1.1.1.4.2  yamt     }
   4663  1.1.1.1.4.2  yamt   operands[3] = GEN_INT (alpha_next_sequence_number++);
   4664  1.1.1.1.4.2  yamt   operands[5] = pic_offset_table_rtx;
   4665  1.1.1.1.4.2  yamt })
   4666  1.1.1.1.4.2  yamt 
   4667  1.1.1.1.4.2  yamt (define_insn "*call_osf_2_er_nogp"
   4668  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "register_operand" "c"))
   4669  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4670  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   4671  1.1.1.1.4.2  yamt    (use (match_operand 2 "" ""))
   4672  1.1.1.1.4.2  yamt    (use (match_operand 3 "const_int_operand" ""))
   4673  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4674  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   4675  1.1.1.1.4.2  yamt   "jsr $26,(%0),%2%J3"
   4676  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")])
   4677  1.1.1.1.4.2  yamt 
   4678  1.1.1.1.4.2  yamt (define_insn "*call_osf_2_er"
   4679  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "register_operand" "c"))
   4680  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4681  1.1.1.1.4.2  yamt    (set (reg:DI 29)
   4682  1.1.1.1.4.2  yamt 	(unspec:DI [(reg:DI 29) (match_operand 4 "const_int_operand" "")]
   4683  1.1.1.1.4.2  yamt 		   UNSPEC_LDGP1))
   4684  1.1.1.1.4.2  yamt    (use (match_operand 2 "" ""))
   4685  1.1.1.1.4.2  yamt    (use (match_operand 3 "const_int_operand" ""))
   4686  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4687  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   4688  1.1.1.1.4.2  yamt   "jsr $26,(%0),%2%J3\;ldah $29,0($26)\t\t!gpdisp!%4"
   4689  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4690  1.1.1.1.4.2  yamt    (set_attr "cannot_copy" "true")
   4691  1.1.1.1.4.2  yamt    (set_attr "length" "8")])
   4692  1.1.1.1.4.2  yamt 
   4693  1.1.1.1.4.2  yamt (define_insn "*call_osf_1_noreturn"
   4694  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s"))
   4695  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4696  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   4697  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4698  1.1.1.1.4.2  yamt   "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF
   4699  1.1.1.1.4.2  yamt    && find_reg_note (insn, REG_NORETURN, NULL_RTX)"
   4700  1.1.1.1.4.2  yamt   "@
   4701  1.1.1.1.4.2  yamt    jsr $26,($27),0
   4702  1.1.1.1.4.2  yamt    bsr $26,$%0..ng
   4703  1.1.1.1.4.2  yamt    jsr $26,%0"
   4704  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4705  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,8")])
   4706  1.1.1.1.4.2  yamt 
   4707  1.1.1.1.4.2  yamt (define_insn "*call_osf_1"
   4708  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s"))
   4709  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4710  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   4711  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4712  1.1.1.1.4.2  yamt   "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   4713  1.1.1.1.4.2  yamt   "@
   4714  1.1.1.1.4.2  yamt    jsr $26,($27),0\;ldgp $29,0($26)
   4715  1.1.1.1.4.2  yamt    bsr $26,$%0..ng
   4716  1.1.1.1.4.2  yamt    jsr $26,%0\;ldgp $29,0($26)"
   4717  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4718  1.1.1.1.4.2  yamt    (set_attr "length" "12,*,16")])
   4719  1.1.1.1.4.2  yamt 
   4720  1.1.1.1.4.2  yamt (define_insn "*sibcall_osf_1_er"
   4721  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "symbolic_operand" "R,s"))
   4722  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4723  1.1.1.1.4.2  yamt    (unspec [(reg:DI 29)] UNSPEC_SIBCALL)]
   4724  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   4725  1.1.1.1.4.2  yamt   "@
   4726  1.1.1.1.4.2  yamt    br $31,%0\t\t!samegp
   4727  1.1.1.1.4.2  yamt    ldq $27,%0($29)\t\t!literal!%#\;jmp $31,($27),%0\t\t!lituse_jsr!%#"
   4728  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4729  1.1.1.1.4.2  yamt    (set_attr "length" "*,8")])
   4730  1.1.1.1.4.2  yamt 
   4731  1.1.1.1.4.2  yamt ;; Note that the DEC assembler expands "jmp foo" with $at, which
   4732  1.1.1.1.4.2  yamt ;; doesn't do what we want.
   4733  1.1.1.1.4.2  yamt (define_insn "*sibcall_osf_1"
   4734  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "symbolic_operand" "R,s"))
   4735  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4736  1.1.1.1.4.2  yamt    (unspec [(reg:DI 29)] UNSPEC_SIBCALL)]
   4737  1.1.1.1.4.2  yamt   "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   4738  1.1.1.1.4.2  yamt   "@
   4739  1.1.1.1.4.2  yamt    br $31,$%0..ng
   4740  1.1.1.1.4.2  yamt    lda $27,%0\;jmp $31,($27),%0"
   4741  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4742  1.1.1.1.4.2  yamt    (set_attr "length" "*,8")])
   4743  1.1.1.1.4.2  yamt 
   4744  1.1.1.1.4.2  yamt (define_insn "*call_nt_1"
   4745  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "call_operand" "r,R,s"))
   4746  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4747  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4748  1.1.1.1.4.2  yamt   "TARGET_ABI_WINDOWS_NT"
   4749  1.1.1.1.4.2  yamt   "@
   4750  1.1.1.1.4.2  yamt    jsr $26,(%0)
   4751  1.1.1.1.4.2  yamt    bsr $26,%0
   4752  1.1.1.1.4.2  yamt    jsr $26,%0"
   4753  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4754  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,12")])
   4755  1.1.1.1.4.2  yamt 
   4756  1.1.1.1.4.2  yamt ; GAS relies on the order and position of instructions output below in order
   4757  1.1.1.1.4.2  yamt ; to generate relocs for VMS link to potentially optimize the call.
   4758  1.1.1.1.4.2  yamt ; Please do not molest.
   4759  1.1.1.1.4.2  yamt (define_insn "*call_vms_1"
   4760  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "call_operand" "r,s"))
   4761  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4762  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "nonmemory_operand" "r,n"))
   4763  1.1.1.1.4.2  yamt    (use (reg:DI 25))
   4764  1.1.1.1.4.2  yamt    (use (reg:DI 26))
   4765  1.1.1.1.4.2  yamt    (clobber (reg:DI 27))]
   4766  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   4767  1.1.1.1.4.2  yamt {
   4768  1.1.1.1.4.2  yamt   switch (which_alternative)
   4769  1.1.1.1.4.2  yamt     {
   4770  1.1.1.1.4.2  yamt     case 0:
   4771  1.1.1.1.4.2  yamt    	return "mov %2,$27\;jsr $26,0\;ldq $27,0($29)";
   4772  1.1.1.1.4.2  yamt     case 1:
   4773  1.1.1.1.4.2  yamt 	operands [2] = alpha_use_linkage (operands [0], cfun->decl, 1, 0);
   4774  1.1.1.1.4.2  yamt 	operands [3] = alpha_use_linkage (operands [0], cfun->decl, 0, 0);
   4775  1.1.1.1.4.2  yamt    	return "ldq $26,%3\;ldq $27,%2\;jsr $26,%0\;ldq $27,0($29)";
   4776  1.1.1.1.4.2  yamt     default:
   4777  1.1.1.1.4.2  yamt       gcc_unreachable ();
   4778  1.1.1.1.4.2  yamt     }
   4779  1.1.1.1.4.2  yamt }
   4780  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   4781  1.1.1.1.4.2  yamt    (set_attr "length" "12,16")])
   4782  1.1.1.1.4.2  yamt 
   4783  1.1.1.1.4.2  yamt (define_insn "*call_umk_1"
   4784  1.1.1.1.4.2  yamt   [(call (mem:DI (match_operand:DI 0 "call_operand" "r"))
   4785  1.1.1.1.4.2  yamt 	 (match_operand 1 "" ""))
   4786  1.1.1.1.4.2  yamt    (use (reg:DI 25))
   4787  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   4788  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
   4789  1.1.1.1.4.2  yamt   "jsr $26,(%0)"
   4790  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")])
   4791  1.1.1.1.4.2  yamt 
   4792  1.1.1.1.4.2  yamt ;; Call subroutine returning any type.
   4793  1.1.1.1.4.2  yamt 
   4794  1.1.1.1.4.2  yamt (define_expand "untyped_call"
   4795  1.1.1.1.4.2  yamt   [(parallel [(call (match_operand 0 "" "")
   4796  1.1.1.1.4.2  yamt 		    (const_int 0))
   4797  1.1.1.1.4.2  yamt 	      (match_operand 1 "" "")
   4798  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")])]
   4799  1.1.1.1.4.2  yamt   ""
   4800  1.1.1.1.4.2  yamt {
   4801  1.1.1.1.4.2  yamt   int i;
   4802  1.1.1.1.4.2  yamt 
   4803  1.1.1.1.4.2  yamt   emit_call_insn (GEN_CALL (operands[0], const0_rtx, NULL, const0_rtx));
   4804  1.1.1.1.4.2  yamt 
   4805  1.1.1.1.4.2  yamt   for (i = 0; i < XVECLEN (operands[2], 0); i++)
   4806  1.1.1.1.4.2  yamt     {
   4807  1.1.1.1.4.2  yamt       rtx set = XVECEXP (operands[2], 0, i);
   4808  1.1.1.1.4.2  yamt       emit_move_insn (SET_DEST (set), SET_SRC (set));
   4809  1.1.1.1.4.2  yamt     }
   4810  1.1.1.1.4.2  yamt 
   4811  1.1.1.1.4.2  yamt   /* The optimizer does not know that the call sets the function value
   4812  1.1.1.1.4.2  yamt      registers we stored in the result block.  We avoid problems by
   4813  1.1.1.1.4.2  yamt      claiming that all hard registers are used and clobbered at this
   4814  1.1.1.1.4.2  yamt      point.  */
   4815  1.1.1.1.4.2  yamt   emit_insn (gen_blockage ());
   4816  1.1.1.1.4.2  yamt 
   4817  1.1.1.1.4.2  yamt   DONE;
   4818  1.1.1.1.4.2  yamt })
   4819  1.1.1.1.4.2  yamt 
   4820  1.1.1.1.4.2  yamt ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
   4821  1.1.1.1.4.2  yamt ;; all of memory.  This blocks insns from being moved across this point.
   4822  1.1.1.1.4.2  yamt 
   4823  1.1.1.1.4.2  yamt (define_insn "blockage"
   4824  1.1.1.1.4.2  yamt   [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)]
   4825  1.1.1.1.4.2  yamt   ""
   4826  1.1.1.1.4.2  yamt   ""
   4827  1.1.1.1.4.2  yamt   [(set_attr "length" "0")
   4828  1.1.1.1.4.2  yamt    (set_attr "type" "none")])
   4829  1.1.1.1.4.2  yamt 
   4830  1.1.1.1.4.2  yamt (define_insn "jump"
   4831  1.1.1.1.4.2  yamt   [(set (pc)
   4832  1.1.1.1.4.2  yamt 	(label_ref (match_operand 0 "" "")))]
   4833  1.1.1.1.4.2  yamt   ""
   4834  1.1.1.1.4.2  yamt   "br $31,%l0"
   4835  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   4836  1.1.1.1.4.2  yamt 
   4837  1.1.1.1.4.2  yamt (define_expand "return"
   4838  1.1.1.1.4.2  yamt   [(return)]
   4839  1.1.1.1.4.2  yamt   "direct_return ()"
   4840  1.1.1.1.4.2  yamt   "")
   4841  1.1.1.1.4.2  yamt 
   4842  1.1.1.1.4.2  yamt (define_insn "*return_internal"
   4843  1.1.1.1.4.2  yamt   [(return)]
   4844  1.1.1.1.4.2  yamt   "reload_completed"
   4845  1.1.1.1.4.2  yamt   "ret $31,($26),1"
   4846  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   4847  1.1.1.1.4.2  yamt 
   4848  1.1.1.1.4.2  yamt (define_insn "indirect_jump"
   4849  1.1.1.1.4.2  yamt   [(set (pc) (match_operand:DI 0 "register_operand" "r"))]
   4850  1.1.1.1.4.2  yamt   ""
   4851  1.1.1.1.4.2  yamt   "jmp $31,(%0),0"
   4852  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   4853  1.1.1.1.4.2  yamt 
   4854  1.1.1.1.4.2  yamt (define_expand "tablejump"
   4855  1.1.1.1.4.2  yamt   [(parallel [(set (pc)
   4856  1.1.1.1.4.2  yamt 		   (match_operand 0 "register_operand" ""))
   4857  1.1.1.1.4.2  yamt 	      (use (label_ref:DI (match_operand 1 "" "")))])]
   4858  1.1.1.1.4.2  yamt   ""
   4859  1.1.1.1.4.2  yamt {
   4860  1.1.1.1.4.2  yamt   if (TARGET_ABI_WINDOWS_NT)
   4861  1.1.1.1.4.2  yamt     {
   4862  1.1.1.1.4.2  yamt       rtx dest = gen_reg_rtx (DImode);
   4863  1.1.1.1.4.2  yamt       emit_insn (gen_extendsidi2 (dest, operands[0]));
   4864  1.1.1.1.4.2  yamt       operands[0] = dest;
   4865  1.1.1.1.4.2  yamt     }
   4866  1.1.1.1.4.2  yamt   else if (TARGET_ABI_OSF)
   4867  1.1.1.1.4.2  yamt     {
   4868  1.1.1.1.4.2  yamt       rtx dest = gen_reg_rtx (DImode);
   4869  1.1.1.1.4.2  yamt       emit_insn (gen_extendsidi2 (dest, operands[0]));
   4870  1.1.1.1.4.2  yamt       emit_insn (gen_adddi3 (dest, pic_offset_table_rtx, dest));	
   4871  1.1.1.1.4.2  yamt       operands[0] = dest;
   4872  1.1.1.1.4.2  yamt     }
   4873  1.1.1.1.4.2  yamt })
   4874  1.1.1.1.4.2  yamt 
   4875  1.1.1.1.4.2  yamt (define_insn "*tablejump_osf_nt_internal"
   4876  1.1.1.1.4.2  yamt   [(set (pc)
   4877  1.1.1.1.4.2  yamt 	(match_operand:DI 0 "register_operand" "r"))
   4878  1.1.1.1.4.2  yamt    (use (label_ref:DI (match_operand 1 "" "")))]
   4879  1.1.1.1.4.2  yamt   "(TARGET_ABI_OSF || TARGET_ABI_WINDOWS_NT)
   4880  1.1.1.1.4.2  yamt    && alpha_tablejump_addr_vec (insn)"
   4881  1.1.1.1.4.2  yamt {
   4882  1.1.1.1.4.2  yamt   operands[2] = alpha_tablejump_best_label (insn);
   4883  1.1.1.1.4.2  yamt   return "jmp $31,(%0),%2";
   4884  1.1.1.1.4.2  yamt }
   4885  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   4886  1.1.1.1.4.2  yamt 
   4887  1.1.1.1.4.2  yamt (define_insn "*tablejump_internal"
   4888  1.1.1.1.4.2  yamt   [(set (pc)
   4889  1.1.1.1.4.2  yamt 	(match_operand:DI 0 "register_operand" "r"))
   4890  1.1.1.1.4.2  yamt    (use (label_ref (match_operand 1 "" "")))]
   4891  1.1.1.1.4.2  yamt   ""
   4892  1.1.1.1.4.2  yamt   "jmp $31,(%0),0"
   4893  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   4894  1.1.1.1.4.2  yamt 
   4895  1.1.1.1.4.2  yamt ;; Cache flush.  Used by alpha_trampoline_init.  0x86 is PAL_imb, but we don't
   4896  1.1.1.1.4.2  yamt ;; want to have to include pal.h in our .s file.
   4897  1.1.1.1.4.2  yamt (define_insn "imb"
   4898  1.1.1.1.4.2  yamt   [(unspec_volatile [(const_int 0)] UNSPECV_IMB)]
   4899  1.1.1.1.4.2  yamt   ""
   4900  1.1.1.1.4.2  yamt   "call_pal 0x86"
   4901  1.1.1.1.4.2  yamt   [(set_attr "type" "callpal")])
   4902  1.1.1.1.4.2  yamt 
   4903  1.1.1.1.4.2  yamt ;; BUGCHK is documented common to OSF/1 and VMS PALcode.
   4904  1.1.1.1.4.2  yamt ;; NT does not document anything at 0x81 -- presumably it would generate
   4905  1.1.1.1.4.2  yamt ;; the equivalent of SIGILL, but this isn't that important.
   4906  1.1.1.1.4.2  yamt ;; ??? Presuming unicosmk uses either OSF/1 or VMS PALcode.
   4907  1.1.1.1.4.2  yamt (define_insn "trap"
   4908  1.1.1.1.4.2  yamt   [(trap_if (const_int 1) (const_int 0))]
   4909  1.1.1.1.4.2  yamt   "!TARGET_ABI_WINDOWS_NT"
   4910  1.1.1.1.4.2  yamt   "call_pal 0x81"
   4911  1.1.1.1.4.2  yamt   [(set_attr "type" "callpal")])
   4912  1.1.1.1.4.2  yamt 
   4913  1.1.1.1.4.2  yamt ;; For userland, we load the thread pointer from the TCB.
   4914  1.1.1.1.4.2  yamt ;; For the kernel, we load the per-cpu private value.
   4915  1.1.1.1.4.2  yamt 
   4916  1.1.1.1.4.2  yamt (define_insn "load_tp"
   4917  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=v")
   4918  1.1.1.1.4.2  yamt 	(unspec:DI [(const_int 0)] UNSPEC_TP))]
   4919  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   4920  1.1.1.1.4.2  yamt {
   4921  1.1.1.1.4.2  yamt   if (TARGET_TLS_KERNEL)
   4922  1.1.1.1.4.2  yamt     return "call_pal 0x32";
   4923  1.1.1.1.4.2  yamt   else
   4924  1.1.1.1.4.2  yamt     return "call_pal 0x9e";
   4925  1.1.1.1.4.2  yamt }
   4926  1.1.1.1.4.2  yamt   [(set_attr "type" "callpal")])
   4927  1.1.1.1.4.2  yamt 
   4928  1.1.1.1.4.2  yamt ;; For completeness, and possibly a __builtin function, here's how to
   4929  1.1.1.1.4.2  yamt ;; set the thread pointer.  Since we don't describe enough of this
   4930  1.1.1.1.4.2  yamt ;; quantity for CSE, we have to use a volatile unspec, and then there's
   4931  1.1.1.1.4.2  yamt ;; not much point in creating an R16_REG register class.
   4932  1.1.1.1.4.2  yamt 
   4933  1.1.1.1.4.2  yamt (define_expand "set_tp"
   4934  1.1.1.1.4.2  yamt   [(set (reg:DI 16) (match_operand:DI 0 "input_operand" ""))
   4935  1.1.1.1.4.2  yamt    (unspec_volatile [(reg:DI 16)] UNSPECV_SET_TP)]
   4936  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   4937  1.1.1.1.4.2  yamt   "")
   4938  1.1.1.1.4.2  yamt 
   4939  1.1.1.1.4.2  yamt (define_insn "*set_tp"
   4940  1.1.1.1.4.2  yamt   [(unspec_volatile [(reg:DI 16)] UNSPECV_SET_TP)]
   4941  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   4942  1.1.1.1.4.2  yamt {
   4943  1.1.1.1.4.2  yamt   if (TARGET_TLS_KERNEL)
   4944  1.1.1.1.4.2  yamt     return "call_pal 0x31";
   4945  1.1.1.1.4.2  yamt   else
   4946  1.1.1.1.4.2  yamt     return "call_pal 0x9f";
   4947  1.1.1.1.4.2  yamt }
   4948  1.1.1.1.4.2  yamt   [(set_attr "type" "callpal")])
   4949  1.1.1.1.4.2  yamt 
   4950  1.1.1.1.4.2  yamt ;; Special builtins for establishing and reverting VMS condition handlers.
   4951  1.1.1.1.4.2  yamt 
   4952  1.1.1.1.4.2  yamt (define_expand "builtin_establish_vms_condition_handler"
   4953  1.1.1.1.4.2  yamt   [(set (reg:DI 0) (match_operand:DI 0 "register_operand" ""))
   4954  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "address_operand" ""))]
   4955  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   4956  1.1.1.1.4.2  yamt {
   4957  1.1.1.1.4.2  yamt   alpha_expand_builtin_establish_vms_condition_handler (operands[0],
   4958  1.1.1.1.4.2  yamt                                                         operands[1]);
   4959  1.1.1.1.4.2  yamt })
   4960  1.1.1.1.4.2  yamt 
   4961  1.1.1.1.4.2  yamt (define_expand "builtin_revert_vms_condition_handler"
   4962  1.1.1.1.4.2  yamt   [(set (reg:DI 0) (match_operand:DI 0 "register_operand" ""))]
   4963  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   4964  1.1.1.1.4.2  yamt {
   4965  1.1.1.1.4.2  yamt   alpha_expand_builtin_revert_vms_condition_handler (operands[0]);
   4966  1.1.1.1.4.2  yamt })
   4967  1.1.1.1.4.2  yamt 
   4969  1.1.1.1.4.2  yamt ;; Finally, we have the basic data motion insns.  The byte and word insns
   4970  1.1.1.1.4.2  yamt ;; are done via define_expand.  Start with the floating-point insns, since
   4971  1.1.1.1.4.2  yamt ;; they are simpler.
   4972  1.1.1.1.4.2  yamt 
   4973  1.1.1.1.4.2  yamt (define_insn "*movsf_nofix"
   4974  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m")
   4975  1.1.1.1.4.2  yamt 	(match_operand:SF 1 "input_operand" "fG,m,*rG,m,fG,*r"))]
   4976  1.1.1.1.4.2  yamt   "TARGET_FPREGS && ! TARGET_FIX
   4977  1.1.1.1.4.2  yamt    && (register_operand (operands[0], SFmode)
   4978  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], SFmode))"
   4979  1.1.1.1.4.2  yamt   "@
   4980  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   4981  1.1.1.1.4.2  yamt    ld%, %0,%1
   4982  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   4983  1.1.1.1.4.2  yamt    ldl %0,%1
   4984  1.1.1.1.4.2  yamt    st%, %R1,%0
   4985  1.1.1.1.4.2  yamt    stl %r1,%0"
   4986  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys,fld,ilog,ild,fst,ist")])
   4987  1.1.1.1.4.2  yamt 
   4988  1.1.1.1.4.2  yamt (define_insn "*movsf_fix"
   4989  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m,f,*r")
   4990  1.1.1.1.4.2  yamt 	(match_operand:SF 1 "input_operand" "fG,m,*rG,m,fG,*r,*r,f"))]
   4991  1.1.1.1.4.2  yamt   "TARGET_FPREGS && TARGET_FIX
   4992  1.1.1.1.4.2  yamt    && (register_operand (operands[0], SFmode)
   4993  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], SFmode))"
   4994  1.1.1.1.4.2  yamt   "@
   4995  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   4996  1.1.1.1.4.2  yamt    ld%, %0,%1
   4997  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   4998  1.1.1.1.4.2  yamt    ldl %0,%1
   4999  1.1.1.1.4.2  yamt    st%, %R1,%0
   5000  1.1.1.1.4.2  yamt    stl %r1,%0
   5001  1.1.1.1.4.2  yamt    itofs %1,%0
   5002  1.1.1.1.4.2  yamt    ftois %1,%0"
   5003  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys,fld,ilog,ild,fst,ist,itof,ftoi")])
   5004  1.1.1.1.4.2  yamt 
   5005  1.1.1.1.4.2  yamt (define_insn "*movsf_nofp"
   5006  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m")
   5007  1.1.1.1.4.2  yamt 	(match_operand:SF 1 "input_operand" "rG,m,r"))]
   5008  1.1.1.1.4.2  yamt   "! TARGET_FPREGS
   5009  1.1.1.1.4.2  yamt    && (register_operand (operands[0], SFmode)
   5010  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], SFmode))"
   5011  1.1.1.1.4.2  yamt   "@
   5012  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5013  1.1.1.1.4.2  yamt    ldl %0,%1
   5014  1.1.1.1.4.2  yamt    stl %r1,%0"
   5015  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,ild,ist")])
   5016  1.1.1.1.4.2  yamt 
   5017  1.1.1.1.4.2  yamt (define_insn "*movdf_nofix"
   5018  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m")
   5019  1.1.1.1.4.2  yamt 	(match_operand:DF 1 "input_operand" "fG,m,*rG,m,fG,*r"))]
   5020  1.1.1.1.4.2  yamt   "TARGET_FPREGS && ! TARGET_FIX
   5021  1.1.1.1.4.2  yamt    && (register_operand (operands[0], DFmode)
   5022  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], DFmode))"
   5023  1.1.1.1.4.2  yamt   "@
   5024  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   5025  1.1.1.1.4.2  yamt    ld%- %0,%1
   5026  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5027  1.1.1.1.4.2  yamt    ldq %0,%1
   5028  1.1.1.1.4.2  yamt    st%- %R1,%0
   5029  1.1.1.1.4.2  yamt    stq %r1,%0"
   5030  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys,fld,ilog,ild,fst,ist")])
   5031  1.1.1.1.4.2  yamt 
   5032  1.1.1.1.4.2  yamt (define_insn "*movdf_fix"
   5033  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m,f,*r")
   5034  1.1.1.1.4.2  yamt 	(match_operand:DF 1 "input_operand" "fG,m,*rG,m,fG,*r,*r,f"))]
   5035  1.1.1.1.4.2  yamt   "TARGET_FPREGS && TARGET_FIX
   5036  1.1.1.1.4.2  yamt    && (register_operand (operands[0], DFmode)
   5037  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], DFmode))"
   5038  1.1.1.1.4.2  yamt   "@
   5039  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   5040  1.1.1.1.4.2  yamt    ld%- %0,%1
   5041  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5042  1.1.1.1.4.2  yamt    ldq %0,%1
   5043  1.1.1.1.4.2  yamt    st%- %R1,%0
   5044  1.1.1.1.4.2  yamt    stq %r1,%0
   5045  1.1.1.1.4.2  yamt    itoft %1,%0
   5046  1.1.1.1.4.2  yamt    ftoit %1,%0"
   5047  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys,fld,ilog,ild,fst,ist,itof,ftoi")])
   5048  1.1.1.1.4.2  yamt 
   5049  1.1.1.1.4.2  yamt (define_insn "*movdf_nofp"
   5050  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m")
   5051  1.1.1.1.4.2  yamt 	(match_operand:DF 1 "input_operand" "rG,m,r"))]
   5052  1.1.1.1.4.2  yamt   "! TARGET_FPREGS
   5053  1.1.1.1.4.2  yamt    && (register_operand (operands[0], DFmode)
   5054  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], DFmode))"
   5055  1.1.1.1.4.2  yamt   "@
   5056  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5057  1.1.1.1.4.2  yamt    ldq %0,%1
   5058  1.1.1.1.4.2  yamt    stq %r1,%0"
   5059  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,ild,ist")])
   5060  1.1.1.1.4.2  yamt 
   5061  1.1.1.1.4.2  yamt ;; Subregs suck for register allocation.  Pretend we can move TFmode
   5062  1.1.1.1.4.2  yamt ;; data between general registers until after reload.
   5063  1.1.1.1.4.2  yamt 
   5064  1.1.1.1.4.2  yamt (define_insn_and_split "*movtf_internal"
   5065  1.1.1.1.4.2  yamt   [(set (match_operand:TF 0 "nonimmediate_operand" "=r,o")
   5066  1.1.1.1.4.2  yamt 	(match_operand:TF 1 "input_operand" "roG,rG"))]
   5067  1.1.1.1.4.2  yamt   "register_operand (operands[0], TFmode)
   5068  1.1.1.1.4.2  yamt    || reg_or_0_operand (operands[1], TFmode)"
   5069  1.1.1.1.4.2  yamt   "#"
   5070  1.1.1.1.4.2  yamt   "reload_completed"
   5071  1.1.1.1.4.2  yamt   [(set (match_dup 0) (match_dup 2))
   5072  1.1.1.1.4.2  yamt    (set (match_dup 1) (match_dup 3))]
   5073  1.1.1.1.4.2  yamt {
   5074  1.1.1.1.4.2  yamt   alpha_split_tmode_pair (operands, TFmode, true); 
   5075  1.1.1.1.4.2  yamt })
   5076  1.1.1.1.4.2  yamt 
   5077  1.1.1.1.4.2  yamt (define_expand "movsf"
   5078  1.1.1.1.4.2  yamt   [(set (match_operand:SF 0 "nonimmediate_operand" "")
   5079  1.1.1.1.4.2  yamt 	(match_operand:SF 1 "general_operand" ""))]
   5080  1.1.1.1.4.2  yamt   ""
   5081  1.1.1.1.4.2  yamt {
   5082  1.1.1.1.4.2  yamt   if (MEM_P (operands[0])
   5083  1.1.1.1.4.2  yamt       && ! reg_or_0_operand (operands[1], SFmode))
   5084  1.1.1.1.4.2  yamt     operands[1] = force_reg (SFmode, operands[1]);
   5085  1.1.1.1.4.2  yamt })
   5086  1.1.1.1.4.2  yamt 
   5087  1.1.1.1.4.2  yamt (define_expand "movdf"
   5088  1.1.1.1.4.2  yamt   [(set (match_operand:DF 0 "nonimmediate_operand" "")
   5089  1.1.1.1.4.2  yamt 	(match_operand:DF 1 "general_operand" ""))]
   5090  1.1.1.1.4.2  yamt   ""
   5091  1.1.1.1.4.2  yamt {
   5092  1.1.1.1.4.2  yamt   if (MEM_P (operands[0])
   5093  1.1.1.1.4.2  yamt       && ! reg_or_0_operand (operands[1], DFmode))
   5094  1.1.1.1.4.2  yamt     operands[1] = force_reg (DFmode, operands[1]);
   5095  1.1.1.1.4.2  yamt })
   5096  1.1.1.1.4.2  yamt 
   5097  1.1.1.1.4.2  yamt (define_expand "movtf"
   5098  1.1.1.1.4.2  yamt   [(set (match_operand:TF 0 "nonimmediate_operand" "")
   5099  1.1.1.1.4.2  yamt 	(match_operand:TF 1 "general_operand" ""))]
   5100  1.1.1.1.4.2  yamt   ""
   5101  1.1.1.1.4.2  yamt {
   5102  1.1.1.1.4.2  yamt   if (MEM_P (operands[0])
   5103  1.1.1.1.4.2  yamt       && ! reg_or_0_operand (operands[1], TFmode))
   5104  1.1.1.1.4.2  yamt     operands[1] = force_reg (TFmode, operands[1]);
   5105  1.1.1.1.4.2  yamt })
   5106  1.1.1.1.4.2  yamt 
   5107  1.1.1.1.4.2  yamt (define_insn "*movsi"
   5108  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,m")
   5109  1.1.1.1.4.2  yamt 	(match_operand:SI 1 "input_operand" "rJ,K,L,n,m,rJ"))]
   5110  1.1.1.1.4.2  yamt   "(TARGET_ABI_OSF || TARGET_ABI_UNICOSMK)
   5111  1.1.1.1.4.2  yamt    && (register_operand (operands[0], SImode)
   5112  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], SImode))"
   5113  1.1.1.1.4.2  yamt   "@
   5114  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5115  1.1.1.1.4.2  yamt    lda %0,%1($31)
   5116  1.1.1.1.4.2  yamt    ldah %0,%h1($31)
   5117  1.1.1.1.4.2  yamt    #
   5118  1.1.1.1.4.2  yamt    ldl %0,%1
   5119  1.1.1.1.4.2  yamt    stl %r1,%0"
   5120  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,iadd,multi,ild,ist")])
   5121  1.1.1.1.4.2  yamt 
   5122  1.1.1.1.4.2  yamt (define_insn "*movsi_nt_vms"
   5123  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m")
   5124  1.1.1.1.4.2  yamt 	(match_operand:SI 1 "input_operand" "rJ,K,L,s,n,m,rJ"))]
   5125  1.1.1.1.4.2  yamt   "(TARGET_ABI_WINDOWS_NT || TARGET_ABI_OPEN_VMS)
   5126  1.1.1.1.4.2  yamt     && (register_operand (operands[0], SImode)
   5127  1.1.1.1.4.2  yamt         || reg_or_0_operand (operands[1], SImode))"
   5128  1.1.1.1.4.2  yamt   "@
   5129  1.1.1.1.4.2  yamt    bis $31,%1,%0
   5130  1.1.1.1.4.2  yamt    lda %0,%1
   5131  1.1.1.1.4.2  yamt    ldah %0,%h1
   5132  1.1.1.1.4.2  yamt    lda %0,%1
   5133  1.1.1.1.4.2  yamt    #
   5134  1.1.1.1.4.2  yamt    ldl %0,%1
   5135  1.1.1.1.4.2  yamt    stl %r1,%0"
   5136  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,iadd,ldsym,multi,ild,ist")])
   5137  1.1.1.1.4.2  yamt 
   5138  1.1.1.1.4.2  yamt (define_insn "*movhi_nobwx"
   5139  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "register_operand" "=r,r")
   5140  1.1.1.1.4.2  yamt 	(match_operand:HI 1 "input_operand" "rJ,n"))]
   5141  1.1.1.1.4.2  yamt   "! TARGET_BWX
   5142  1.1.1.1.4.2  yamt    && (register_operand (operands[0], HImode)
   5143  1.1.1.1.4.2  yamt        || register_operand (operands[1], HImode))"
   5144  1.1.1.1.4.2  yamt   "@
   5145  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5146  1.1.1.1.4.2  yamt    lda %0,%L1($31)"
   5147  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd")])
   5148  1.1.1.1.4.2  yamt 
   5149  1.1.1.1.4.2  yamt (define_insn "*movhi_bwx"
   5150  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,m")
   5151  1.1.1.1.4.2  yamt 	(match_operand:HI 1 "input_operand" "rJ,n,m,rJ"))]
   5152  1.1.1.1.4.2  yamt   "TARGET_BWX
   5153  1.1.1.1.4.2  yamt    && (register_operand (operands[0], HImode)
   5154  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], HImode))"
   5155  1.1.1.1.4.2  yamt   "@
   5156  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5157  1.1.1.1.4.2  yamt    lda %0,%L1($31)
   5158  1.1.1.1.4.2  yamt    ldwu %0,%1
   5159  1.1.1.1.4.2  yamt    stw %r1,%0"
   5160  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,ild,ist")])
   5161  1.1.1.1.4.2  yamt 
   5162  1.1.1.1.4.2  yamt (define_insn "*movqi_nobwx"
   5163  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "register_operand" "=r,r")
   5164  1.1.1.1.4.2  yamt 	(match_operand:QI 1 "input_operand" "rJ,n"))]
   5165  1.1.1.1.4.2  yamt   "! TARGET_BWX
   5166  1.1.1.1.4.2  yamt    && (register_operand (operands[0], QImode)
   5167  1.1.1.1.4.2  yamt        || register_operand (operands[1], QImode))"
   5168  1.1.1.1.4.2  yamt   "@
   5169  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5170  1.1.1.1.4.2  yamt    lda %0,%L1($31)"
   5171  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd")])
   5172  1.1.1.1.4.2  yamt 
   5173  1.1.1.1.4.2  yamt (define_insn "*movqi_bwx"
   5174  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,m")
   5175  1.1.1.1.4.2  yamt 	(match_operand:QI 1 "input_operand" "rJ,n,m,rJ"))]
   5176  1.1.1.1.4.2  yamt   "TARGET_BWX
   5177  1.1.1.1.4.2  yamt    && (register_operand (operands[0], QImode)
   5178  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], QImode))"
   5179  1.1.1.1.4.2  yamt   "@
   5180  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5181  1.1.1.1.4.2  yamt    lda %0,%L1($31)
   5182  1.1.1.1.4.2  yamt    ldbu %0,%1
   5183  1.1.1.1.4.2  yamt    stb %r1,%0"
   5184  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,ild,ist")])
   5185  1.1.1.1.4.2  yamt 
   5186  1.1.1.1.4.2  yamt ;; We do two major things here: handle mem->mem and construct long
   5187  1.1.1.1.4.2  yamt ;; constants.
   5188  1.1.1.1.4.2  yamt 
   5189  1.1.1.1.4.2  yamt (define_expand "movsi"
   5190  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "nonimmediate_operand" "")
   5191  1.1.1.1.4.2  yamt 	(match_operand:SI 1 "general_operand" ""))]
   5192  1.1.1.1.4.2  yamt   ""
   5193  1.1.1.1.4.2  yamt {
   5194  1.1.1.1.4.2  yamt   if (alpha_expand_mov (SImode, operands))
   5195  1.1.1.1.4.2  yamt     DONE;
   5196  1.1.1.1.4.2  yamt })
   5197  1.1.1.1.4.2  yamt 
   5198  1.1.1.1.4.2  yamt ;; Split a load of a large constant into the appropriate two-insn
   5199  1.1.1.1.4.2  yamt ;; sequence.
   5200  1.1.1.1.4.2  yamt 
   5201  1.1.1.1.4.2  yamt (define_split
   5202  1.1.1.1.4.2  yamt   [(set (match_operand:SI 0 "register_operand" "")
   5203  1.1.1.1.4.2  yamt 	(match_operand:SI 1 "non_add_const_operand" ""))]
   5204  1.1.1.1.4.2  yamt   ""
   5205  1.1.1.1.4.2  yamt   [(const_int 0)]
   5206  1.1.1.1.4.2  yamt {
   5207  1.1.1.1.4.2  yamt   if (alpha_split_const_mov (SImode, operands))
   5208  1.1.1.1.4.2  yamt     DONE;
   5209  1.1.1.1.4.2  yamt   else
   5210  1.1.1.1.4.2  yamt     FAIL;
   5211  1.1.1.1.4.2  yamt })
   5212  1.1.1.1.4.2  yamt 
   5213  1.1.1.1.4.2  yamt ;; Split the load of an address into a four-insn sequence on Unicos/Mk.
   5214  1.1.1.1.4.2  yamt ;; Always generate a REG_EQUAL note for the last instruction to facilitate
   5215  1.1.1.1.4.2  yamt ;; optimizations. If the symbolic operand is a label_ref, generate
   5216  1.1.1.1.4.2  yamt ;; REG_LABEL_OPERAND notes and update LABEL_NUSES because this is not done
   5217  1.1.1.1.4.2  yamt ;; automatically.  Labels may be incorrectly deleted if we don't do this.
   5218  1.1.1.1.4.2  yamt ;;
   5219  1.1.1.1.4.2  yamt ;; Describing what the individual instructions do correctly is too complicated
   5220  1.1.1.1.4.2  yamt ;; so use UNSPECs for each of the three parts of an address.
   5221  1.1.1.1.4.2  yamt 
   5222  1.1.1.1.4.2  yamt (define_split
   5223  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   5224  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "symbolic_operand" ""))]
   5225  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK && reload_completed"
   5226  1.1.1.1.4.2  yamt   [(const_int 0)]
   5227  1.1.1.1.4.2  yamt {
   5228  1.1.1.1.4.2  yamt   rtx insn1, insn2, insn3;
   5229  1.1.1.1.4.2  yamt 
   5230  1.1.1.1.4.2  yamt   insn1 = emit_insn (gen_umk_laum (operands[0], operands[1]));
   5231  1.1.1.1.4.2  yamt   emit_insn (gen_ashldi3 (operands[0], operands[0], GEN_INT (32)));
   5232  1.1.1.1.4.2  yamt   insn2 = emit_insn (gen_umk_lalm (operands[0], operands[0], operands[1]));
   5233  1.1.1.1.4.2  yamt   insn3 = emit_insn (gen_umk_lal (operands[0], operands[0], operands[1]));
   5234  1.1.1.1.4.2  yamt   set_unique_reg_note (insn3, REG_EQUAL, operands[1]);
   5235  1.1.1.1.4.2  yamt 
   5236  1.1.1.1.4.2  yamt   if (GET_CODE (operands[1]) == LABEL_REF)
   5237  1.1.1.1.4.2  yamt     {
   5238  1.1.1.1.4.2  yamt       rtx label;
   5239  1.1.1.1.4.2  yamt 
   5240  1.1.1.1.4.2  yamt       label = XEXP (operands[1], 0);
   5241  1.1.1.1.4.2  yamt       add_reg_note (insn1, REG_LABEL_OPERAND, label);
   5242  1.1.1.1.4.2  yamt       add_reg_note (insn2, REG_LABEL_OPERAND, label);
   5243  1.1.1.1.4.2  yamt       add_reg_note (insn3, REG_LABEL_OPERAND, label);
   5244  1.1.1.1.4.2  yamt       LABEL_NUSES (label) += 3;
   5245  1.1.1.1.4.2  yamt     }
   5246  1.1.1.1.4.2  yamt   DONE;
   5247  1.1.1.1.4.2  yamt })
   5248  1.1.1.1.4.2  yamt 
   5249  1.1.1.1.4.2  yamt ;; Instructions for loading the three parts of an address on Unicos/Mk.
   5250  1.1.1.1.4.2  yamt 
   5251  1.1.1.1.4.2  yamt (define_insn "umk_laum"
   5252  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5253  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
   5254  1.1.1.1.4.2  yamt 		   UNSPEC_UMK_LAUM))]
   5255  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
   5256  1.1.1.1.4.2  yamt   "laum %r0,%t1($31)"
   5257  1.1.1.1.4.2  yamt   [(set_attr "type" "iadd")])
   5258  1.1.1.1.4.2  yamt 
   5259  1.1.1.1.4.2  yamt (define_insn "umk_lalm"
   5260  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5261  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "r")
   5262  1.1.1.1.4.2  yamt 		 (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
   5263  1.1.1.1.4.2  yamt 			    UNSPEC_UMK_LALM)))] 
   5264  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
   5265  1.1.1.1.4.2  yamt   "lalm %r0,%t2(%r1)"
   5266  1.1.1.1.4.2  yamt   [(set_attr "type" "iadd")])
   5267  1.1.1.1.4.2  yamt 
   5268  1.1.1.1.4.2  yamt (define_insn "umk_lal"
   5269  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5270  1.1.1.1.4.2  yamt 	(plus:DI (match_operand:DI 1 "register_operand" "r")
   5271  1.1.1.1.4.2  yamt 		 (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
   5272  1.1.1.1.4.2  yamt 			    UNSPEC_UMK_LAL)))]
   5273  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
   5274  1.1.1.1.4.2  yamt   "lal %r0,%t2(%r1)"
   5275  1.1.1.1.4.2  yamt   [(set_attr "type" "iadd")])
   5276  1.1.1.1.4.2  yamt 
   5277  1.1.1.1.4.2  yamt ;; Add a new call information word to the current function's list of CIWs
   5278  1.1.1.1.4.2  yamt ;; and load its index into $25. Doing it here ensures that the CIW will be
   5279  1.1.1.1.4.2  yamt ;; associated with the correct function even in the presence of inlining.
   5280  1.1.1.1.4.2  yamt 
   5281  1.1.1.1.4.2  yamt (define_insn "*umk_load_ciw"
   5282  1.1.1.1.4.2  yamt   [(set (reg:DI 25)
   5283  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand 0 "" "")] UNSPEC_UMK_LOAD_CIW))]
   5284  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
   5285  1.1.1.1.4.2  yamt {
   5286  1.1.1.1.4.2  yamt   operands[0] = unicosmk_add_call_info_word (operands[0]);
   5287  1.1.1.1.4.2  yamt   return "lda $25,%0";
   5288  1.1.1.1.4.2  yamt }
   5289  1.1.1.1.4.2  yamt   [(set_attr "type" "iadd")])
   5290  1.1.1.1.4.2  yamt 
   5291  1.1.1.1.4.2  yamt (define_insn "*movdi_er_low_l"
   5292  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5293  1.1.1.1.4.2  yamt 	(lo_sum:DI (match_operand:DI 1 "register_operand" "r")
   5294  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "local_symbolic_operand" "")))]
   5295  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS"
   5296  1.1.1.1.4.2  yamt {
   5297  1.1.1.1.4.2  yamt   if (true_regnum (operands[1]) == 29)
   5298  1.1.1.1.4.2  yamt     return "lda %0,%2(%1)\t\t!gprel";
   5299  1.1.1.1.4.2  yamt   else
   5300  1.1.1.1.4.2  yamt     return "lda %0,%2(%1)\t\t!gprellow";
   5301  1.1.1.1.4.2  yamt }
   5302  1.1.1.1.4.2  yamt   [(set_attr "usegp" "yes")])
   5303  1.1.1.1.4.2  yamt 
   5304  1.1.1.1.4.2  yamt (define_split
   5305  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   5306  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "small_symbolic_operand" ""))]
   5307  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && reload_completed"
   5308  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   5309  1.1.1.1.4.2  yamt 	(lo_sum:DI (match_dup 2) (match_dup 1)))]
   5310  1.1.1.1.4.2  yamt   "operands[2] = pic_offset_table_rtx;")
   5311  1.1.1.1.4.2  yamt 
   5312  1.1.1.1.4.2  yamt (define_split
   5313  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   5314  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "local_symbolic_operand" ""))]
   5315  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && reload_completed"
   5316  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   5317  1.1.1.1.4.2  yamt 	(plus:DI (match_dup 2) (high:DI (match_dup 1))))
   5318  1.1.1.1.4.2  yamt    (set (match_dup 0)
   5319  1.1.1.1.4.2  yamt 	(lo_sum:DI (match_dup 0) (match_dup 1)))]
   5320  1.1.1.1.4.2  yamt   "operands[2] = pic_offset_table_rtx;")
   5321  1.1.1.1.4.2  yamt 
   5322  1.1.1.1.4.2  yamt (define_split
   5323  1.1.1.1.4.2  yamt   [(match_operand 0 "some_small_symbolic_operand" "")]
   5324  1.1.1.1.4.2  yamt   ""
   5325  1.1.1.1.4.2  yamt   [(match_dup 0)]
   5326  1.1.1.1.4.2  yamt   "operands[0] = split_small_symbolic_operand (operands[0]);")
   5327  1.1.1.1.4.2  yamt 
   5328  1.1.1.1.4.2  yamt ;; Accepts any symbolic, not just global, since function calls that
   5329  1.1.1.1.4.2  yamt ;; don't go via bsr still use !literal in hopes of linker relaxation.
   5330  1.1.1.1.4.2  yamt (define_insn "movdi_er_high_g"
   5331  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5332  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   5333  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "symbolic_operand" "")
   5334  1.1.1.1.4.2  yamt 		    (match_operand 3 "const_int_operand" "")]
   5335  1.1.1.1.4.2  yamt 		   UNSPEC_LITERAL))]
   5336  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS"
   5337  1.1.1.1.4.2  yamt {
   5338  1.1.1.1.4.2  yamt   if (INTVAL (operands[3]) == 0)
   5339  1.1.1.1.4.2  yamt     return "ldq %0,%2(%1)\t\t!literal";
   5340  1.1.1.1.4.2  yamt   else
   5341  1.1.1.1.4.2  yamt     return "ldq %0,%2(%1)\t\t!literal!%3";
   5342  1.1.1.1.4.2  yamt }
   5343  1.1.1.1.4.2  yamt   [(set_attr "type" "ldsym")])
   5344  1.1.1.1.4.2  yamt 
   5345  1.1.1.1.4.2  yamt (define_split
   5346  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   5347  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "global_symbolic_operand" ""))]
   5348  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && reload_completed"
   5349  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   5350  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 2)
   5351  1.1.1.1.4.2  yamt 		    (match_dup 1)
   5352  1.1.1.1.4.2  yamt 		    (const_int 0)] UNSPEC_LITERAL))]
   5353  1.1.1.1.4.2  yamt   "operands[2] = pic_offset_table_rtx;")
   5354  1.1.1.1.4.2  yamt 
   5355  1.1.1.1.4.2  yamt (define_insn "movdi_er_tlsgd"
   5356  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5357  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   5358  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "symbolic_operand" "")
   5359  1.1.1.1.4.2  yamt 		    (match_operand 3 "const_int_operand" "")]
   5360  1.1.1.1.4.2  yamt 		   UNSPEC_TLSGD))]
   5361  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
   5362  1.1.1.1.4.2  yamt {
   5363  1.1.1.1.4.2  yamt   if (INTVAL (operands[3]) == 0)
   5364  1.1.1.1.4.2  yamt     return "lda %0,%2(%1)\t\t!tlsgd";
   5365  1.1.1.1.4.2  yamt   else
   5366  1.1.1.1.4.2  yamt     return "lda %0,%2(%1)\t\t!tlsgd!%3";
   5367  1.1.1.1.4.2  yamt })
   5368  1.1.1.1.4.2  yamt 
   5369  1.1.1.1.4.2  yamt (define_insn "movdi_er_tlsldm"
   5370  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5371  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   5372  1.1.1.1.4.2  yamt 		    (match_operand 2 "const_int_operand" "")]
   5373  1.1.1.1.4.2  yamt 		   UNSPEC_TLSLDM))]
   5374  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
   5375  1.1.1.1.4.2  yamt {
   5376  1.1.1.1.4.2  yamt   if (INTVAL (operands[2]) == 0)
   5377  1.1.1.1.4.2  yamt     return "lda %0,%&(%1)\t\t!tlsldm";
   5378  1.1.1.1.4.2  yamt   else
   5379  1.1.1.1.4.2  yamt     return "lda %0,%&(%1)\t\t!tlsldm!%2";
   5380  1.1.1.1.4.2  yamt })
   5381  1.1.1.1.4.2  yamt 
   5382  1.1.1.1.4.2  yamt (define_insn "*movdi_er_gotdtp"
   5383  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5384  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   5385  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "symbolic_operand" "")]
   5386  1.1.1.1.4.2  yamt 		   UNSPEC_DTPREL))]
   5387  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
   5388  1.1.1.1.4.2  yamt   "ldq %0,%2(%1)\t\t!gotdtprel"
   5389  1.1.1.1.4.2  yamt   [(set_attr "type" "ild")
   5390  1.1.1.1.4.2  yamt    (set_attr "usegp" "yes")])
   5391  1.1.1.1.4.2  yamt 
   5392  1.1.1.1.4.2  yamt (define_split
   5393  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   5394  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "gotdtp_symbolic_operand" ""))]
   5395  1.1.1.1.4.2  yamt   "HAVE_AS_TLS && reload_completed"
   5396  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   5397  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 2)
   5398  1.1.1.1.4.2  yamt 		    (match_dup 1)] UNSPEC_DTPREL))]
   5399  1.1.1.1.4.2  yamt {
   5400  1.1.1.1.4.2  yamt   operands[1] = XVECEXP (XEXP (operands[1], 0), 0, 0);
   5401  1.1.1.1.4.2  yamt   operands[2] = pic_offset_table_rtx;
   5402  1.1.1.1.4.2  yamt })
   5403  1.1.1.1.4.2  yamt 
   5404  1.1.1.1.4.2  yamt (define_insn "*movdi_er_gottp"
   5405  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5406  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   5407  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "symbolic_operand" "")]
   5408  1.1.1.1.4.2  yamt 		   UNSPEC_TPREL))]
   5409  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
   5410  1.1.1.1.4.2  yamt   "ldq %0,%2(%1)\t\t!gottprel"
   5411  1.1.1.1.4.2  yamt   [(set_attr "type" "ild")
   5412  1.1.1.1.4.2  yamt    (set_attr "usegp" "yes")])
   5413  1.1.1.1.4.2  yamt 
   5414  1.1.1.1.4.2  yamt (define_split
   5415  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   5416  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "gottp_symbolic_operand" ""))]
   5417  1.1.1.1.4.2  yamt   "HAVE_AS_TLS && reload_completed"
   5418  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   5419  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 2)
   5420  1.1.1.1.4.2  yamt 		    (match_dup 1)] UNSPEC_TPREL))]
   5421  1.1.1.1.4.2  yamt {
   5422  1.1.1.1.4.2  yamt   operands[1] = XVECEXP (XEXP (operands[1], 0), 0, 0);
   5423  1.1.1.1.4.2  yamt   operands[2] = pic_offset_table_rtx;
   5424  1.1.1.1.4.2  yamt })
   5425  1.1.1.1.4.2  yamt 
   5426  1.1.1.1.4.2  yamt (define_insn "*movdi_er_nofix"
   5427  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,m,*f,*f,Q")
   5428  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "input_operand" "rJ,K,L,T,s,n,m,rJ,*fJ,Q,*f"))]
   5429  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && ! TARGET_FIX
   5430  1.1.1.1.4.2  yamt    && (register_operand (operands[0], DImode)
   5431  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], DImode))"
   5432  1.1.1.1.4.2  yamt   "@
   5433  1.1.1.1.4.2  yamt    mov %r1,%0
   5434  1.1.1.1.4.2  yamt    lda %0,%1($31)
   5435  1.1.1.1.4.2  yamt    ldah %0,%h1($31)
   5436  1.1.1.1.4.2  yamt    #
   5437  1.1.1.1.4.2  yamt    #
   5438  1.1.1.1.4.2  yamt    #
   5439  1.1.1.1.4.2  yamt    ldq%A1 %0,%1
   5440  1.1.1.1.4.2  yamt    stq%A0 %r1,%0
   5441  1.1.1.1.4.2  yamt    fmov %R1,%0
   5442  1.1.1.1.4.2  yamt    ldt %0,%1
   5443  1.1.1.1.4.2  yamt    stt %R1,%0"
   5444  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,iadd,iadd,ldsym,multi,ild,ist,fcpys,fld,fst")
   5445  1.1.1.1.4.2  yamt    (set_attr "usegp" "*,*,*,yes,*,*,*,*,*,*,*")])
   5446  1.1.1.1.4.2  yamt 
   5447  1.1.1.1.4.2  yamt ;; The 'U' constraint matches symbolic operands on Unicos/Mk. Those should
   5448  1.1.1.1.4.2  yamt ;; have been split up by the rules above but we shouldn't reject the
   5449  1.1.1.1.4.2  yamt ;; possibility of them getting through.
   5450  1.1.1.1.4.2  yamt 
   5451  1.1.1.1.4.2  yamt (define_insn "*movdi_nofix"
   5452  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,m,*f,*f,Q")
   5453  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "input_operand" "rJ,K,L,U,s,n,m,rJ,*fJ,Q,*f"))]
   5454  1.1.1.1.4.2  yamt   "! TARGET_FIX
   5455  1.1.1.1.4.2  yamt    && (register_operand (operands[0], DImode)
   5456  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], DImode))"
   5457  1.1.1.1.4.2  yamt   "@
   5458  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5459  1.1.1.1.4.2  yamt    lda %0,%1($31)
   5460  1.1.1.1.4.2  yamt    ldah %0,%h1($31)
   5461  1.1.1.1.4.2  yamt    laum %0,%t1($31)\;sll %0,32,%0\;lalm %0,%t1(%0)\;lal %0,%t1(%0)
   5462  1.1.1.1.4.2  yamt    lda %0,%1
   5463  1.1.1.1.4.2  yamt    #
   5464  1.1.1.1.4.2  yamt    ldq%A1 %0,%1
   5465  1.1.1.1.4.2  yamt    stq%A0 %r1,%0
   5466  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   5467  1.1.1.1.4.2  yamt    ldt %0,%1
   5468  1.1.1.1.4.2  yamt    stt %R1,%0"
   5469  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,iadd,ldsym,ldsym,multi,ild,ist,fcpys,fld,fst")
   5470  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,*,16,*,*,*,*,*,*,*")])
   5471  1.1.1.1.4.2  yamt 
   5472  1.1.1.1.4.2  yamt (define_insn "*movdi_er_fix"
   5473  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "nonimmediate_operand"
   5474  1.1.1.1.4.2  yamt 				"=r,r,r,r,r,r,r, m, *f,*f, Q, r,*f")
   5475  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "input_operand"
   5476  1.1.1.1.4.2  yamt 				"rJ,K,L,T,s,n,m,rJ,*fJ, Q,*f,*f, r"))]
   5477  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_FIX
   5478  1.1.1.1.4.2  yamt    && (register_operand (operands[0], DImode)
   5479  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], DImode))"
   5480  1.1.1.1.4.2  yamt   "@
   5481  1.1.1.1.4.2  yamt    mov %r1,%0
   5482  1.1.1.1.4.2  yamt    lda %0,%1($31)
   5483  1.1.1.1.4.2  yamt    ldah %0,%h1($31)
   5484  1.1.1.1.4.2  yamt    #
   5485  1.1.1.1.4.2  yamt    #
   5486  1.1.1.1.4.2  yamt    #
   5487  1.1.1.1.4.2  yamt    ldq%A1 %0,%1
   5488  1.1.1.1.4.2  yamt    stq%A0 %r1,%0
   5489  1.1.1.1.4.2  yamt    fmov %R1,%0
   5490  1.1.1.1.4.2  yamt    ldt %0,%1
   5491  1.1.1.1.4.2  yamt    stt %R1,%0
   5492  1.1.1.1.4.2  yamt    ftoit %1,%0
   5493  1.1.1.1.4.2  yamt    itoft %1,%0"
   5494  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,iadd,iadd,ldsym,multi,ild,ist,fcpys,fld,fst,ftoi,itof")
   5495  1.1.1.1.4.2  yamt    (set_attr "usegp" "*,*,*,yes,*,*,*,*,*,*,*,*,*")])
   5496  1.1.1.1.4.2  yamt 
   5497  1.1.1.1.4.2  yamt (define_insn "*movdi_fix"
   5498  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,*f,*f,Q,r,*f")
   5499  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "input_operand" "rJ,K,L,s,n,m,rJ,*fJ,Q,*f,*f,r"))]
   5500  1.1.1.1.4.2  yamt   "! TARGET_EXPLICIT_RELOCS && TARGET_FIX
   5501  1.1.1.1.4.2  yamt    && (register_operand (operands[0], DImode)
   5502  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], DImode))"
   5503  1.1.1.1.4.2  yamt   "@
   5504  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   5505  1.1.1.1.4.2  yamt    lda %0,%1($31)
   5506  1.1.1.1.4.2  yamt    ldah %0,%h1($31)
   5507  1.1.1.1.4.2  yamt    lda %0,%1
   5508  1.1.1.1.4.2  yamt    #
   5509  1.1.1.1.4.2  yamt    ldq%A1 %0,%1
   5510  1.1.1.1.4.2  yamt    stq%A0 %r1,%0
   5511  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   5512  1.1.1.1.4.2  yamt    ldt %0,%1
   5513  1.1.1.1.4.2  yamt    stt %R1,%0
   5514  1.1.1.1.4.2  yamt    ftoit %1,%0
   5515  1.1.1.1.4.2  yamt    itoft %1,%0"
   5516  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,iadd,iadd,ldsym,multi,ild,ist,fcpys,fld,fst,ftoi,itof")])
   5517  1.1.1.1.4.2  yamt 
   5518  1.1.1.1.4.2  yamt ;; VMS needs to set up "vms_base_regno" for unwinding.  This move
   5519  1.1.1.1.4.2  yamt ;; often appears dead to the life analysis code, at which point we
   5520  1.1.1.1.4.2  yamt ;; die for emitting dead prologue instructions.  Force this live.
   5521  1.1.1.1.4.2  yamt 
   5522  1.1.1.1.4.2  yamt (define_insn "force_movdi"
   5523  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   5524  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r")]
   5525  1.1.1.1.4.2  yamt 			    UNSPECV_FORCE_MOV))]
   5526  1.1.1.1.4.2  yamt   ""
   5527  1.1.1.1.4.2  yamt   "mov %1,%0"
   5528  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   5529  1.1.1.1.4.2  yamt 
   5530  1.1.1.1.4.2  yamt ;; We do three major things here: handle mem->mem, put 64-bit constants in
   5531  1.1.1.1.4.2  yamt ;; memory, and construct long 32-bit constants.
   5532  1.1.1.1.4.2  yamt 
   5533  1.1.1.1.4.2  yamt (define_expand "movdi"
   5534  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "nonimmediate_operand" "")
   5535  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "general_operand" ""))]
   5536  1.1.1.1.4.2  yamt   ""
   5537  1.1.1.1.4.2  yamt {
   5538  1.1.1.1.4.2  yamt   if (alpha_expand_mov (DImode, operands))
   5539  1.1.1.1.4.2  yamt     DONE;
   5540  1.1.1.1.4.2  yamt })
   5541  1.1.1.1.4.2  yamt 
   5542  1.1.1.1.4.2  yamt ;; Split a load of a large constant into the appropriate two-insn
   5543  1.1.1.1.4.2  yamt ;; sequence.
   5544  1.1.1.1.4.2  yamt 
   5545  1.1.1.1.4.2  yamt (define_split
   5546  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   5547  1.1.1.1.4.2  yamt 	(match_operand:DI 1 "non_add_const_operand" ""))]
   5548  1.1.1.1.4.2  yamt   ""
   5549  1.1.1.1.4.2  yamt   [(const_int 0)]
   5550  1.1.1.1.4.2  yamt {
   5551  1.1.1.1.4.2  yamt   if (alpha_split_const_mov (DImode, operands))
   5552  1.1.1.1.4.2  yamt     DONE;
   5553  1.1.1.1.4.2  yamt   else
   5554  1.1.1.1.4.2  yamt     FAIL;
   5555  1.1.1.1.4.2  yamt })
   5556  1.1.1.1.4.2  yamt 
   5557  1.1.1.1.4.2  yamt ;; We need to prevent reload from splitting TImode moves, because it
   5558  1.1.1.1.4.2  yamt ;; might decide to overwrite a pointer with the value it points to.
   5559  1.1.1.1.4.2  yamt ;; In that case we have to do the loads in the appropriate order so
   5560  1.1.1.1.4.2  yamt ;; that the pointer is not destroyed too early.
   5561  1.1.1.1.4.2  yamt 
   5562  1.1.1.1.4.2  yamt (define_insn_and_split "*movti_internal"
   5563  1.1.1.1.4.2  yamt   [(set (match_operand:TI 0 "nonimmediate_operand" "=r,o")
   5564  1.1.1.1.4.2  yamt         (match_operand:TI 1 "input_operand" "roJ,rJ"))]
   5565  1.1.1.1.4.2  yamt   "(register_operand (operands[0], TImode)
   5566  1.1.1.1.4.2  yamt     /* Prevent rematerialization of constants.  */
   5567  1.1.1.1.4.2  yamt     && ! CONSTANT_P (operands[1]))
   5568  1.1.1.1.4.2  yamt    || reg_or_0_operand (operands[1], TImode)"
   5569  1.1.1.1.4.2  yamt   "#"
   5570  1.1.1.1.4.2  yamt   "reload_completed"
   5571  1.1.1.1.4.2  yamt   [(set (match_dup 0) (match_dup 2))
   5572  1.1.1.1.4.2  yamt    (set (match_dup 1) (match_dup 3))]
   5573  1.1.1.1.4.2  yamt {
   5574  1.1.1.1.4.2  yamt   alpha_split_tmode_pair (operands, TImode, true);
   5575  1.1.1.1.4.2  yamt })
   5576  1.1.1.1.4.2  yamt 
   5577  1.1.1.1.4.2  yamt (define_expand "movti"
   5578  1.1.1.1.4.2  yamt   [(set (match_operand:TI 0 "nonimmediate_operand" "")
   5579  1.1.1.1.4.2  yamt         (match_operand:TI 1 "general_operand" ""))]
   5580  1.1.1.1.4.2  yamt   ""
   5581  1.1.1.1.4.2  yamt {
   5582  1.1.1.1.4.2  yamt   if (MEM_P (operands[0])
   5583  1.1.1.1.4.2  yamt       && ! reg_or_0_operand (operands[1], TImode))
   5584  1.1.1.1.4.2  yamt     operands[1] = force_reg (TImode, operands[1]);
   5585  1.1.1.1.4.2  yamt 
   5586  1.1.1.1.4.2  yamt   if (operands[1] == const0_rtx)
   5587  1.1.1.1.4.2  yamt     ;
   5588  1.1.1.1.4.2  yamt   /* We must put 64-bit constants in memory.  We could keep the
   5589  1.1.1.1.4.2  yamt      32-bit constants in TImode and rely on the splitter, but
   5590  1.1.1.1.4.2  yamt      this doesn't seem to be worth the pain.  */
   5591  1.1.1.1.4.2  yamt   else if (CONST_INT_P (operands[1])
   5592  1.1.1.1.4.2  yamt 	   || GET_CODE (operands[1]) == CONST_DOUBLE)
   5593  1.1.1.1.4.2  yamt     {
   5594  1.1.1.1.4.2  yamt       rtx in[2], out[2], target;
   5595  1.1.1.1.4.2  yamt 
   5596  1.1.1.1.4.2  yamt       gcc_assert (can_create_pseudo_p ());
   5597  1.1.1.1.4.2  yamt 
   5598  1.1.1.1.4.2  yamt       split_double (operands[1], &in[0], &in[1]);
   5599  1.1.1.1.4.2  yamt 
   5600  1.1.1.1.4.2  yamt       if (in[0] == const0_rtx)
   5601  1.1.1.1.4.2  yamt 	out[0] = const0_rtx;
   5602  1.1.1.1.4.2  yamt       else
   5603  1.1.1.1.4.2  yamt 	{
   5604  1.1.1.1.4.2  yamt 	  out[0] = gen_reg_rtx (DImode);
   5605  1.1.1.1.4.2  yamt 	  emit_insn (gen_movdi (out[0], in[0]));
   5606  1.1.1.1.4.2  yamt 	}
   5607  1.1.1.1.4.2  yamt 
   5608  1.1.1.1.4.2  yamt       if (in[1] == const0_rtx)
   5609  1.1.1.1.4.2  yamt 	out[1] = const0_rtx;
   5610  1.1.1.1.4.2  yamt       else
   5611  1.1.1.1.4.2  yamt 	{
   5612  1.1.1.1.4.2  yamt 	  out[1] = gen_reg_rtx (DImode);
   5613  1.1.1.1.4.2  yamt 	  emit_insn (gen_movdi (out[1], in[1]));
   5614  1.1.1.1.4.2  yamt 	}
   5615  1.1.1.1.4.2  yamt 
   5616  1.1.1.1.4.2  yamt       if (!REG_P (operands[0]))
   5617  1.1.1.1.4.2  yamt 	target = gen_reg_rtx (TImode);
   5618  1.1.1.1.4.2  yamt       else
   5619  1.1.1.1.4.2  yamt 	target = operands[0];
   5620  1.1.1.1.4.2  yamt 
   5621  1.1.1.1.4.2  yamt       emit_insn (gen_movdi (operand_subword (target, 0, 0, TImode), out[0]));
   5622  1.1.1.1.4.2  yamt       emit_insn (gen_movdi (operand_subword (target, 1, 0, TImode), out[1]));
   5623  1.1.1.1.4.2  yamt 
   5624  1.1.1.1.4.2  yamt       if (target != operands[0])
   5625  1.1.1.1.4.2  yamt 	emit_insn (gen_rtx_SET (VOIDmode, operands[0], target));
   5626  1.1.1.1.4.2  yamt 
   5627  1.1.1.1.4.2  yamt       DONE;
   5628  1.1.1.1.4.2  yamt     }
   5629  1.1.1.1.4.2  yamt })
   5630  1.1.1.1.4.2  yamt 
   5631  1.1.1.1.4.2  yamt ;; These are the partial-word cases.
   5632  1.1.1.1.4.2  yamt ;;
   5633  1.1.1.1.4.2  yamt ;; First we have the code to load an aligned word.  Operand 0 is the register
   5634  1.1.1.1.4.2  yamt ;; in which to place the result.  It's mode is QImode or HImode.  Operand 1
   5635  1.1.1.1.4.2  yamt ;; is an SImode MEM at the low-order byte of the proper word.  Operand 2 is the
   5636  1.1.1.1.4.2  yamt ;; number of bits within the word that the value is.  Operand 3 is an SImode
   5637  1.1.1.1.4.2  yamt ;; scratch register.  If operand 0 is a hard register, operand 3 may be the
   5638  1.1.1.1.4.2  yamt ;; same register.  It is allowed to conflict with operand 1 as well.
   5639  1.1.1.1.4.2  yamt 
   5640  1.1.1.1.4.2  yamt (define_expand "aligned_loadqi"
   5641  1.1.1.1.4.2  yamt   [(set (match_operand:SI 3 "register_operand" "")
   5642  1.1.1.1.4.2  yamt 	(match_operand:SI 1 "memory_operand" ""))
   5643  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   5644  1.1.1.1.4.2  yamt 	(zero_extract:DI (subreg:DI (match_dup 3) 0)
   5645  1.1.1.1.4.2  yamt 			 (const_int 8)
   5646  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "const_int_operand" "")))]
   5647  1.1.1.1.4.2  yamt 
   5648  1.1.1.1.4.2  yamt   ""
   5649  1.1.1.1.4.2  yamt   "")
   5650  1.1.1.1.4.2  yamt 
   5651  1.1.1.1.4.2  yamt (define_expand "aligned_loadhi"
   5652  1.1.1.1.4.2  yamt   [(set (match_operand:SI 3 "register_operand" "")
   5653  1.1.1.1.4.2  yamt 	(match_operand:SI 1 "memory_operand" ""))
   5654  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   5655  1.1.1.1.4.2  yamt 	(zero_extract:DI (subreg:DI (match_dup 3) 0)
   5656  1.1.1.1.4.2  yamt 			 (const_int 16)
   5657  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "const_int_operand" "")))]
   5658  1.1.1.1.4.2  yamt 
   5659  1.1.1.1.4.2  yamt   ""
   5660  1.1.1.1.4.2  yamt   "")
   5661  1.1.1.1.4.2  yamt 
   5662  1.1.1.1.4.2  yamt ;; Similar for unaligned loads, where we use the sequence from the
   5663  1.1.1.1.4.2  yamt ;; Alpha Architecture manual. We have to distinguish between little-endian
   5664  1.1.1.1.4.2  yamt ;; and big-endian systems as the sequences are different.
   5665  1.1.1.1.4.2  yamt ;;
   5666  1.1.1.1.4.2  yamt ;; Operand 1 is the address.  Operands 2 and 3 are temporaries, where
   5667  1.1.1.1.4.2  yamt ;; operand 3 can overlap the input and output registers.
   5668  1.1.1.1.4.2  yamt 
   5669  1.1.1.1.4.2  yamt (define_expand "unaligned_loadqi"
   5670  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
   5671  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "address_operand" ""))
   5672  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))
   5673  1.1.1.1.4.2  yamt    (use (match_operand:DI 3 "register_operand" ""))]
   5674  1.1.1.1.4.2  yamt   ""
   5675  1.1.1.1.4.2  yamt {
   5676  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   5677  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_loadqi_be (operands[0], operands[1],
   5678  1.1.1.1.4.2  yamt 					operands[2], operands[3]));
   5679  1.1.1.1.4.2  yamt   else
   5680  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_loadqi_le (operands[0], operands[1],
   5681  1.1.1.1.4.2  yamt 					operands[2], operands[3]));
   5682  1.1.1.1.4.2  yamt   DONE;
   5683  1.1.1.1.4.2  yamt })
   5684  1.1.1.1.4.2  yamt 
   5685  1.1.1.1.4.2  yamt (define_expand "unaligned_loadqi_le"
   5686  1.1.1.1.4.2  yamt   [(set (match_operand:DI 2 "register_operand" "")
   5687  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
   5688  1.1.1.1.4.2  yamt 			(const_int -8))))
   5689  1.1.1.1.4.2  yamt    (set (match_operand:DI 3 "register_operand" "")
   5690  1.1.1.1.4.2  yamt 	(match_dup 1))
   5691  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   5692  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_dup 2)
   5693  1.1.1.1.4.2  yamt 			 (const_int 8)
   5694  1.1.1.1.4.2  yamt 			 (ashift:DI (match_dup 3) (const_int 3))))]
   5695  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   5696  1.1.1.1.4.2  yamt   "")
   5697  1.1.1.1.4.2  yamt 
   5698  1.1.1.1.4.2  yamt (define_expand "unaligned_loadqi_be"
   5699  1.1.1.1.4.2  yamt   [(set (match_operand:DI 2 "register_operand" "")
   5700  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
   5701  1.1.1.1.4.2  yamt 			(const_int -8))))
   5702  1.1.1.1.4.2  yamt    (set (match_operand:DI 3 "register_operand" "")
   5703  1.1.1.1.4.2  yamt 	(match_dup 1))
   5704  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   5705  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_dup 2)
   5706  1.1.1.1.4.2  yamt 			 (const_int 8)
   5707  1.1.1.1.4.2  yamt 			 (minus:DI
   5708  1.1.1.1.4.2  yamt 			   (const_int 56)
   5709  1.1.1.1.4.2  yamt 			   (ashift:DI (match_dup 3) (const_int 3)))))]
   5710  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   5711  1.1.1.1.4.2  yamt   "")
   5712  1.1.1.1.4.2  yamt 
   5713  1.1.1.1.4.2  yamt (define_expand "unaligned_loadhi"
   5714  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" ""))
   5715  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "address_operand" ""))
   5716  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))
   5717  1.1.1.1.4.2  yamt    (use (match_operand:DI 3 "register_operand" ""))]
   5718  1.1.1.1.4.2  yamt   ""
   5719  1.1.1.1.4.2  yamt {
   5720  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   5721  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_loadhi_be (operands[0], operands[1],
   5722  1.1.1.1.4.2  yamt 					operands[2], operands[3]));
   5723  1.1.1.1.4.2  yamt   else
   5724  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_loadhi_le (operands[0], operands[1],
   5725  1.1.1.1.4.2  yamt 					operands[2], operands[3]));
   5726  1.1.1.1.4.2  yamt   DONE;
   5727  1.1.1.1.4.2  yamt })
   5728  1.1.1.1.4.2  yamt 
   5729  1.1.1.1.4.2  yamt (define_expand "unaligned_loadhi_le"
   5730  1.1.1.1.4.2  yamt   [(set (match_operand:DI 2 "register_operand" "")
   5731  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
   5732  1.1.1.1.4.2  yamt 			(const_int -8))))
   5733  1.1.1.1.4.2  yamt    (set (match_operand:DI 3 "register_operand" "")
   5734  1.1.1.1.4.2  yamt 	(match_dup 1))
   5735  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   5736  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_dup 2)
   5737  1.1.1.1.4.2  yamt 			 (const_int 16)
   5738  1.1.1.1.4.2  yamt 			 (ashift:DI (match_dup 3) (const_int 3))))]
   5739  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   5740  1.1.1.1.4.2  yamt   "")
   5741  1.1.1.1.4.2  yamt 
   5742  1.1.1.1.4.2  yamt (define_expand "unaligned_loadhi_be"
   5743  1.1.1.1.4.2  yamt   [(set (match_operand:DI 2 "register_operand" "")
   5744  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
   5745  1.1.1.1.4.2  yamt 			(const_int -8))))
   5746  1.1.1.1.4.2  yamt    (set (match_operand:DI 3 "register_operand" "")
   5747  1.1.1.1.4.2  yamt 	(plus:DI (match_dup 1) (const_int 1)))
   5748  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "")
   5749  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_dup 2)
   5750  1.1.1.1.4.2  yamt 			 (const_int 16)
   5751  1.1.1.1.4.2  yamt 			 (minus:DI
   5752  1.1.1.1.4.2  yamt 			   (const_int 56)
   5753  1.1.1.1.4.2  yamt 			   (ashift:DI (match_dup 3) (const_int 3)))))]
   5754  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   5755  1.1.1.1.4.2  yamt   "")
   5756  1.1.1.1.4.2  yamt 
   5757  1.1.1.1.4.2  yamt ;; Storing an aligned byte or word requires two temporaries.  Operand 0 is the
   5758  1.1.1.1.4.2  yamt ;; aligned SImode MEM.  Operand 1 is the register containing the
   5759  1.1.1.1.4.2  yamt ;; byte or word to store.  Operand 2 is the number of bits within the word that
   5760  1.1.1.1.4.2  yamt ;; the value should be placed.  Operands 3 and 4 are SImode temporaries.
   5761  1.1.1.1.4.2  yamt 
   5762  1.1.1.1.4.2  yamt (define_expand "aligned_store"
   5763  1.1.1.1.4.2  yamt   [(set (match_operand:SI 3 "register_operand" "")
   5764  1.1.1.1.4.2  yamt 	(match_operand:SI 0 "memory_operand" ""))
   5765  1.1.1.1.4.2  yamt    (set (subreg:DI (match_dup 3) 0)
   5766  1.1.1.1.4.2  yamt 	(and:DI (subreg:DI (match_dup 3) 0) (match_dup 5)))
   5767  1.1.1.1.4.2  yamt    (set (subreg:DI (match_operand:SI 4 "register_operand" "") 0)
   5768  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand 1 "register_operand" ""))
   5769  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "const_int_operand" "")))
   5770  1.1.1.1.4.2  yamt    (set (subreg:DI (match_dup 4) 0)
   5771  1.1.1.1.4.2  yamt 	(ior:DI (subreg:DI (match_dup 4) 0) (subreg:DI (match_dup 3) 0)))
   5772  1.1.1.1.4.2  yamt    (set (match_dup 0) (match_dup 4))]
   5773  1.1.1.1.4.2  yamt   ""
   5774  1.1.1.1.4.2  yamt {
   5775  1.1.1.1.4.2  yamt   operands[5] = GEN_INT (~ (GET_MODE_MASK (GET_MODE (operands[1]))
   5776  1.1.1.1.4.2  yamt 			    << INTVAL (operands[2])));
   5777  1.1.1.1.4.2  yamt })
   5778  1.1.1.1.4.2  yamt 
   5779  1.1.1.1.4.2  yamt ;; For the unaligned byte and halfword cases, we use code similar to that
   5780  1.1.1.1.4.2  yamt ;; in the ;; Architecture book, but reordered to lower the number of registers
   5781  1.1.1.1.4.2  yamt ;; required.  Operand 0 is the address.  Operand 1 is the data to store.
   5782  1.1.1.1.4.2  yamt ;; Operands 2, 3, and 4 are DImode temporaries, where operands 2 and 4 may
   5783  1.1.1.1.4.2  yamt ;; be the same temporary, if desired.  If the address is in a register,
   5784  1.1.1.1.4.2  yamt ;; operand 2 can be that register.
   5785  1.1.1.1.4.2  yamt 
   5786  1.1.1.1.4.2  yamt (define_expand "unaligned_storeqi"
   5787  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "address_operand" ""))
   5788  1.1.1.1.4.2  yamt    (use (match_operand:QI 1 "register_operand" ""))
   5789  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))
   5790  1.1.1.1.4.2  yamt    (use (match_operand:DI 3 "register_operand" ""))
   5791  1.1.1.1.4.2  yamt    (use (match_operand:DI 4 "register_operand" ""))]
   5792  1.1.1.1.4.2  yamt   ""
   5793  1.1.1.1.4.2  yamt {
   5794  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   5795  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_storeqi_be (operands[0], operands[1],
   5796  1.1.1.1.4.2  yamt 					 operands[2], operands[3],
   5797  1.1.1.1.4.2  yamt 					 operands[4]));
   5798  1.1.1.1.4.2  yamt   else
   5799  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_storeqi_le (operands[0], operands[1],
   5800  1.1.1.1.4.2  yamt 					 operands[2], operands[3],
   5801  1.1.1.1.4.2  yamt 					 operands[4]));
   5802  1.1.1.1.4.2  yamt   DONE;
   5803  1.1.1.1.4.2  yamt })
   5804  1.1.1.1.4.2  yamt 
   5805  1.1.1.1.4.2  yamt (define_expand "unaligned_storeqi_le"
   5806  1.1.1.1.4.2  yamt   [(set (match_operand:DI 3 "register_operand" "")
   5807  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
   5808  1.1.1.1.4.2  yamt 			(const_int -8))))
   5809  1.1.1.1.4.2  yamt    (set (match_operand:DI 2 "register_operand" "")
   5810  1.1.1.1.4.2  yamt 	(match_dup 0))
   5811  1.1.1.1.4.2  yamt    (set (match_dup 3)
   5812  1.1.1.1.4.2  yamt 	(and:DI (not:DI (ashift:DI (const_int 255)
   5813  1.1.1.1.4.2  yamt 				   (ashift:DI (match_dup 2) (const_int 3))))
   5814  1.1.1.1.4.2  yamt 		(match_dup 3)))
   5815  1.1.1.1.4.2  yamt    (set (match_operand:DI 4 "register_operand" "")
   5816  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" ""))
   5817  1.1.1.1.4.2  yamt 		   (ashift:DI (match_dup 2) (const_int 3))))
   5818  1.1.1.1.4.2  yamt    (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
   5819  1.1.1.1.4.2  yamt    (set (mem:DI (and:DI (match_dup 0) (const_int -8)))
   5820  1.1.1.1.4.2  yamt 	(match_dup 4))]
   5821  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   5822  1.1.1.1.4.2  yamt   "")
   5823  1.1.1.1.4.2  yamt 
   5824  1.1.1.1.4.2  yamt (define_expand "unaligned_storeqi_be"
   5825  1.1.1.1.4.2  yamt   [(set (match_operand:DI 3 "register_operand" "")
   5826  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
   5827  1.1.1.1.4.2  yamt 			(const_int -8))))
   5828  1.1.1.1.4.2  yamt    (set (match_operand:DI 2 "register_operand" "")
   5829  1.1.1.1.4.2  yamt 	(match_dup 0))
   5830  1.1.1.1.4.2  yamt    (set (match_dup 3)
   5831  1.1.1.1.4.2  yamt 	(and:DI (not:DI (ashift:DI (const_int 255)
   5832  1.1.1.1.4.2  yamt 			  (minus:DI (const_int 56)
   5833  1.1.1.1.4.2  yamt 				    (ashift:DI (match_dup 2) (const_int 3)))))
   5834  1.1.1.1.4.2  yamt 		(match_dup 3)))
   5835  1.1.1.1.4.2  yamt    (set (match_operand:DI 4 "register_operand" "")
   5836  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" ""))
   5837  1.1.1.1.4.2  yamt 		   (minus:DI (const_int 56)
   5838  1.1.1.1.4.2  yamt 		     (ashift:DI (match_dup 2) (const_int 3)))))
   5839  1.1.1.1.4.2  yamt    (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
   5840  1.1.1.1.4.2  yamt    (set (mem:DI (and:DI (match_dup 0) (const_int -8)))
   5841  1.1.1.1.4.2  yamt 	(match_dup 4))]
   5842  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   5843  1.1.1.1.4.2  yamt   "")
   5844  1.1.1.1.4.2  yamt 
   5845  1.1.1.1.4.2  yamt (define_expand "unaligned_storehi"
   5846  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "address_operand" ""))
   5847  1.1.1.1.4.2  yamt    (use (match_operand:HI 1 "register_operand" ""))
   5848  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "register_operand" ""))
   5849  1.1.1.1.4.2  yamt    (use (match_operand:DI 3 "register_operand" ""))
   5850  1.1.1.1.4.2  yamt    (use (match_operand:DI 4 "register_operand" ""))]
   5851  1.1.1.1.4.2  yamt   ""
   5852  1.1.1.1.4.2  yamt {
   5853  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   5854  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_storehi_be (operands[0], operands[1],
   5855  1.1.1.1.4.2  yamt 					 operands[2], operands[3],
   5856  1.1.1.1.4.2  yamt 					 operands[4]));
   5857  1.1.1.1.4.2  yamt   else
   5858  1.1.1.1.4.2  yamt     emit_insn (gen_unaligned_storehi_le (operands[0], operands[1],
   5859  1.1.1.1.4.2  yamt 					 operands[2], operands[3],
   5860  1.1.1.1.4.2  yamt 					 operands[4]));
   5861  1.1.1.1.4.2  yamt   DONE;
   5862  1.1.1.1.4.2  yamt })
   5863  1.1.1.1.4.2  yamt 
   5864  1.1.1.1.4.2  yamt (define_expand "unaligned_storehi_le"
   5865  1.1.1.1.4.2  yamt   [(set (match_operand:DI 3 "register_operand" "")
   5866  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
   5867  1.1.1.1.4.2  yamt 			(const_int -8))))
   5868  1.1.1.1.4.2  yamt    (set (match_operand:DI 2 "register_operand" "")
   5869  1.1.1.1.4.2  yamt 	(match_dup 0))
   5870  1.1.1.1.4.2  yamt    (set (match_dup 3)
   5871  1.1.1.1.4.2  yamt 	(and:DI (not:DI (ashift:DI (const_int 65535)
   5872  1.1.1.1.4.2  yamt 				   (ashift:DI (match_dup 2) (const_int 3))))
   5873  1.1.1.1.4.2  yamt 		(match_dup 3)))
   5874  1.1.1.1.4.2  yamt    (set (match_operand:DI 4 "register_operand" "")
   5875  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" ""))
   5876  1.1.1.1.4.2  yamt 		   (ashift:DI (match_dup 2) (const_int 3))))
   5877  1.1.1.1.4.2  yamt    (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
   5878  1.1.1.1.4.2  yamt    (set (mem:DI (and:DI (match_dup 0) (const_int -8)))
   5879  1.1.1.1.4.2  yamt 	(match_dup 4))]
   5880  1.1.1.1.4.2  yamt   "! WORDS_BIG_ENDIAN"
   5881  1.1.1.1.4.2  yamt   "")
   5882  1.1.1.1.4.2  yamt 
   5883  1.1.1.1.4.2  yamt (define_expand "unaligned_storehi_be"
   5884  1.1.1.1.4.2  yamt   [(set (match_operand:DI 3 "register_operand" "")
   5885  1.1.1.1.4.2  yamt 	(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
   5886  1.1.1.1.4.2  yamt 			(const_int -8))))
   5887  1.1.1.1.4.2  yamt    (set (match_operand:DI 2 "register_operand" "")
   5888  1.1.1.1.4.2  yamt 	(plus:DI (match_dup 5) (const_int 1)))
   5889  1.1.1.1.4.2  yamt    (set (match_dup 3)
   5890  1.1.1.1.4.2  yamt 	(and:DI (not:DI (ashift:DI
   5891  1.1.1.1.4.2  yamt 			  (const_int 65535)
   5892  1.1.1.1.4.2  yamt 			  (minus:DI (const_int 56)
   5893  1.1.1.1.4.2  yamt 				    (ashift:DI (match_dup 2) (const_int 3)))))
   5894  1.1.1.1.4.2  yamt 		(match_dup 3)))
   5895  1.1.1.1.4.2  yamt    (set (match_operand:DI 4 "register_operand" "")
   5896  1.1.1.1.4.2  yamt 	(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" ""))
   5897  1.1.1.1.4.2  yamt 		   (minus:DI (const_int 56)
   5898  1.1.1.1.4.2  yamt 			     (ashift:DI (match_dup 2) (const_int 3)))))
   5899  1.1.1.1.4.2  yamt    (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
   5900  1.1.1.1.4.2  yamt    (set (mem:DI (and:DI (match_dup 0) (const_int -8)))
   5901  1.1.1.1.4.2  yamt 	(match_dup 4))]
   5902  1.1.1.1.4.2  yamt   "WORDS_BIG_ENDIAN"
   5903  1.1.1.1.4.2  yamt   "operands[5] = force_reg (DImode, operands[0]);")
   5904  1.1.1.1.4.2  yamt 
   5906  1.1.1.1.4.2  yamt ;; Here are the define_expand's for QI and HI moves that use the above
   5907  1.1.1.1.4.2  yamt ;; patterns.  We have the normal sets, plus the ones that need scratch
   5908  1.1.1.1.4.2  yamt ;; registers for reload.
   5909  1.1.1.1.4.2  yamt 
   5910  1.1.1.1.4.2  yamt (define_expand "movqi"
   5911  1.1.1.1.4.2  yamt   [(set (match_operand:QI 0 "nonimmediate_operand" "")
   5912  1.1.1.1.4.2  yamt 	(match_operand:QI 1 "general_operand" ""))]
   5913  1.1.1.1.4.2  yamt   ""
   5914  1.1.1.1.4.2  yamt {
   5915  1.1.1.1.4.2  yamt   if (TARGET_BWX
   5916  1.1.1.1.4.2  yamt       ? alpha_expand_mov (QImode, operands)
   5917  1.1.1.1.4.2  yamt       : alpha_expand_mov_nobwx (QImode, operands))
   5918  1.1.1.1.4.2  yamt     DONE;
   5919  1.1.1.1.4.2  yamt })
   5920  1.1.1.1.4.2  yamt 
   5921  1.1.1.1.4.2  yamt (define_expand "movhi"
   5922  1.1.1.1.4.2  yamt   [(set (match_operand:HI 0 "nonimmediate_operand" "")
   5923  1.1.1.1.4.2  yamt 	(match_operand:HI 1 "general_operand" ""))]
   5924  1.1.1.1.4.2  yamt   ""
   5925  1.1.1.1.4.2  yamt {
   5926  1.1.1.1.4.2  yamt   if (TARGET_BWX
   5927  1.1.1.1.4.2  yamt       ? alpha_expand_mov (HImode, operands)
   5928  1.1.1.1.4.2  yamt       : alpha_expand_mov_nobwx (HImode, operands))
   5929  1.1.1.1.4.2  yamt     DONE;
   5930  1.1.1.1.4.2  yamt })
   5931  1.1.1.1.4.2  yamt 
   5932  1.1.1.1.4.2  yamt ;; We need to hook into the extra support that we have for HImode 
   5933  1.1.1.1.4.2  yamt ;; reloads when BWX insns are not available.
   5934  1.1.1.1.4.2  yamt (define_expand "movcqi"
   5935  1.1.1.1.4.2  yamt   [(set (match_operand:CQI 0 "nonimmediate_operand" "")
   5936  1.1.1.1.4.2  yamt 	(match_operand:CQI 1 "general_operand" ""))]
   5937  1.1.1.1.4.2  yamt   "!TARGET_BWX"
   5938  1.1.1.1.4.2  yamt {
   5939  1.1.1.1.4.2  yamt   if (GET_CODE (operands[0]) == CONCAT || GET_CODE (operands[1]) == CONCAT)
   5940  1.1.1.1.4.2  yamt     ;
   5941  1.1.1.1.4.2  yamt   else if (!any_memory_operand (operands[0], CQImode))
   5942  1.1.1.1.4.2  yamt     {
   5943  1.1.1.1.4.2  yamt       if (!any_memory_operand (operands[1], CQImode))
   5944  1.1.1.1.4.2  yamt 	{
   5945  1.1.1.1.4.2  yamt 	  emit_move_insn (gen_lowpart (HImode, operands[0]),
   5946  1.1.1.1.4.2  yamt 			  gen_lowpart (HImode, operands[1]));
   5947  1.1.1.1.4.2  yamt 	  DONE;
   5948  1.1.1.1.4.2  yamt 	}
   5949  1.1.1.1.4.2  yamt       if (aligned_memory_operand (operands[1], CQImode))
   5950  1.1.1.1.4.2  yamt 	{
   5951  1.1.1.1.4.2  yamt 	  bool done;
   5952  1.1.1.1.4.2  yamt 	do_aligned1:
   5953  1.1.1.1.4.2  yamt 	  operands[1] = gen_lowpart (HImode, operands[1]);
   5954  1.1.1.1.4.2  yamt 	do_aligned2:
   5955  1.1.1.1.4.2  yamt 	  operands[0] = gen_lowpart (HImode, operands[0]);
   5956  1.1.1.1.4.2  yamt 	  done = alpha_expand_mov_nobwx (HImode, operands);
   5957  1.1.1.1.4.2  yamt 	  gcc_assert (done);
   5958  1.1.1.1.4.2  yamt 	  DONE;
   5959  1.1.1.1.4.2  yamt 	}
   5960  1.1.1.1.4.2  yamt     }
   5961  1.1.1.1.4.2  yamt   else if (aligned_memory_operand (operands[0], CQImode))
   5962  1.1.1.1.4.2  yamt     {
   5963  1.1.1.1.4.2  yamt       if (MEM_P (operands[1]))
   5964  1.1.1.1.4.2  yamt 	{
   5965  1.1.1.1.4.2  yamt 	  rtx x = gen_reg_rtx (HImode);
   5966  1.1.1.1.4.2  yamt 	  emit_move_insn (gen_lowpart (CQImode, x), operands[1]);
   5967  1.1.1.1.4.2  yamt 	  operands[1] = x;
   5968  1.1.1.1.4.2  yamt 	  goto do_aligned2;
   5969  1.1.1.1.4.2  yamt 	}
   5970  1.1.1.1.4.2  yamt       goto do_aligned1;
   5971  1.1.1.1.4.2  yamt     }
   5972  1.1.1.1.4.2  yamt 
   5973  1.1.1.1.4.2  yamt   gcc_assert (!reload_in_progress);
   5974  1.1.1.1.4.2  yamt   emit_move_complex_parts (operands[0], operands[1]);
   5975  1.1.1.1.4.2  yamt   DONE;
   5976  1.1.1.1.4.2  yamt })
   5977  1.1.1.1.4.2  yamt 
   5978  1.1.1.1.4.2  yamt ;; Here are the versions for reload.
   5979  1.1.1.1.4.2  yamt ;; 
   5980  1.1.1.1.4.2  yamt ;; The aligned input case is recognized early in alpha_secondary_reload
   5981  1.1.1.1.4.2  yamt ;; in order to avoid allocating an unnecessary scratch register.
   5982  1.1.1.1.4.2  yamt ;; 
   5983  1.1.1.1.4.2  yamt ;; Note that in the unaligned cases we know that the operand must not be
   5984  1.1.1.1.4.2  yamt ;; a pseudo-register because stack slots are always aligned references.
   5985  1.1.1.1.4.2  yamt 
   5986  1.1.1.1.4.2  yamt (define_expand "reload_in<mode>"
   5987  1.1.1.1.4.2  yamt   [(parallel [(match_operand:RELOAD12 0 "register_operand" "=r")
   5988  1.1.1.1.4.2  yamt 	      (match_operand:RELOAD12 1 "any_memory_operand" "m")
   5989  1.1.1.1.4.2  yamt 	      (match_operand:TI 2 "register_operand" "=&r")])]
   5990  1.1.1.1.4.2  yamt   "!TARGET_BWX"
   5991  1.1.1.1.4.2  yamt {
   5992  1.1.1.1.4.2  yamt   rtx scratch, seq, addr;
   5993  1.1.1.1.4.2  yamt   unsigned regno = REGNO (operands[2]);
   5994  1.1.1.1.4.2  yamt 
   5995  1.1.1.1.4.2  yamt   /* It is possible that one of the registers we got for operands[2]
   5996  1.1.1.1.4.2  yamt      might coincide with that of operands[0] (which is why we made
   5997  1.1.1.1.4.2  yamt      it TImode).  Pick the other one to use as our scratch.  */
   5998  1.1.1.1.4.2  yamt   if (regno == REGNO (operands[0]))
   5999  1.1.1.1.4.2  yamt     regno++;
   6000  1.1.1.1.4.2  yamt   scratch = gen_rtx_REG (DImode, regno);
   6001  1.1.1.1.4.2  yamt 
   6002  1.1.1.1.4.2  yamt   addr = get_unaligned_address (operands[1]);
   6003  1.1.1.1.4.2  yamt   operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));
   6004  1.1.1.1.4.2  yamt   seq = gen_unaligned_load<reloadmode> (operands[0], addr,
   6005  1.1.1.1.4.2  yamt 					scratch, operands[0]);
   6006  1.1.1.1.4.2  yamt   alpha_set_memflags (seq, operands[1]);
   6007  1.1.1.1.4.2  yamt 
   6008  1.1.1.1.4.2  yamt   emit_insn (seq);
   6009  1.1.1.1.4.2  yamt   DONE;
   6010  1.1.1.1.4.2  yamt })
   6011  1.1.1.1.4.2  yamt 
   6012  1.1.1.1.4.2  yamt (define_expand "reload_out<mode>"
   6013  1.1.1.1.4.2  yamt   [(parallel [(match_operand:RELOAD12 0 "any_memory_operand" "=m")
   6014  1.1.1.1.4.2  yamt 	      (match_operand:RELOAD12 1 "register_operand" "r")
   6015  1.1.1.1.4.2  yamt 	      (match_operand:TI 2 "register_operand" "=&r")])]
   6016  1.1.1.1.4.2  yamt   "! TARGET_BWX"
   6017  1.1.1.1.4.2  yamt {
   6018  1.1.1.1.4.2  yamt   unsigned regno = REGNO (operands[2]);
   6019  1.1.1.1.4.2  yamt 
   6020  1.1.1.1.4.2  yamt   if (<MODE>mode == CQImode)
   6021  1.1.1.1.4.2  yamt     {
   6022  1.1.1.1.4.2  yamt       operands[0] = gen_lowpart (HImode, operands[0]);
   6023  1.1.1.1.4.2  yamt       operands[1] = gen_lowpart (HImode, operands[1]);
   6024  1.1.1.1.4.2  yamt     }
   6025  1.1.1.1.4.2  yamt 
   6026  1.1.1.1.4.2  yamt   if (aligned_memory_operand (operands[0], <MODE>mode))
   6027  1.1.1.1.4.2  yamt     {
   6028  1.1.1.1.4.2  yamt       emit_insn (gen_reload_out<reloadmode>_aligned
   6029  1.1.1.1.4.2  yamt 		 (operands[0], operands[1],
   6030  1.1.1.1.4.2  yamt 		  gen_rtx_REG (SImode, regno),
   6031  1.1.1.1.4.2  yamt 		  gen_rtx_REG (SImode, regno + 1)));
   6032  1.1.1.1.4.2  yamt     }
   6033  1.1.1.1.4.2  yamt   else
   6034  1.1.1.1.4.2  yamt     {
   6035  1.1.1.1.4.2  yamt       rtx addr = get_unaligned_address (operands[0]);
   6036  1.1.1.1.4.2  yamt       rtx scratch1 = gen_rtx_REG (DImode, regno);
   6037  1.1.1.1.4.2  yamt       rtx scratch2 = gen_rtx_REG (DImode, regno + 1);
   6038  1.1.1.1.4.2  yamt       rtx scratch3 = scratch1;
   6039  1.1.1.1.4.2  yamt       rtx seq;
   6040  1.1.1.1.4.2  yamt 
   6041  1.1.1.1.4.2  yamt       if (REG_P (addr))
   6042  1.1.1.1.4.2  yamt 	scratch1 = addr;
   6043  1.1.1.1.4.2  yamt 
   6044  1.1.1.1.4.2  yamt       seq = gen_unaligned_store<reloadmode> (addr, operands[1], scratch1,
   6045  1.1.1.1.4.2  yamt 					     scratch2, scratch3);
   6046  1.1.1.1.4.2  yamt       alpha_set_memflags (seq, operands[0]);
   6047  1.1.1.1.4.2  yamt       emit_insn (seq);
   6048  1.1.1.1.4.2  yamt     }
   6049  1.1.1.1.4.2  yamt   DONE;
   6050  1.1.1.1.4.2  yamt })
   6051  1.1.1.1.4.2  yamt 
   6052  1.1.1.1.4.2  yamt ;; Helpers for the above.  The way reload is structured, we can't
   6053  1.1.1.1.4.2  yamt ;; always get a proper address for a stack slot during reload_foo
   6054  1.1.1.1.4.2  yamt ;; expansion, so we must delay our address manipulations until after.
   6055  1.1.1.1.4.2  yamt 
   6056  1.1.1.1.4.2  yamt (define_insn_and_split "reload_in<mode>_aligned"
   6057  1.1.1.1.4.2  yamt   [(set (match_operand:I12MODE 0 "register_operand" "=r")
   6058  1.1.1.1.4.2  yamt         (match_operand:I12MODE 1 "memory_operand" "m"))]
   6059  1.1.1.1.4.2  yamt   "!TARGET_BWX && (reload_in_progress || reload_completed)"
   6060  1.1.1.1.4.2  yamt   "#"
   6061  1.1.1.1.4.2  yamt   "!TARGET_BWX && reload_completed"
   6062  1.1.1.1.4.2  yamt   [(const_int 0)]
   6063  1.1.1.1.4.2  yamt {
   6064  1.1.1.1.4.2  yamt   rtx aligned_mem, bitnum;
   6065  1.1.1.1.4.2  yamt   get_aligned_mem (operands[1], &aligned_mem, &bitnum);
   6066  1.1.1.1.4.2  yamt   emit_insn (gen_aligned_load<reloadmode>
   6067  1.1.1.1.4.2  yamt 	     (gen_lowpart (DImode, operands[0]), aligned_mem, bitnum,
   6068  1.1.1.1.4.2  yamt 	      gen_rtx_REG (SImode, REGNO (operands[0]))));
   6069  1.1.1.1.4.2  yamt   DONE;
   6070  1.1.1.1.4.2  yamt })
   6071  1.1.1.1.4.2  yamt 
   6072  1.1.1.1.4.2  yamt (define_insn_and_split "reload_out<mode>_aligned"
   6073  1.1.1.1.4.2  yamt   [(set (match_operand:I12MODE 0 "memory_operand" "=m")
   6074  1.1.1.1.4.2  yamt         (match_operand:I12MODE 1 "register_operand" "r"))
   6075  1.1.1.1.4.2  yamt    (clobber (match_operand:SI 2 "register_operand" "=r"))
   6076  1.1.1.1.4.2  yamt    (clobber (match_operand:SI 3 "register_operand" "=r"))]
   6077  1.1.1.1.4.2  yamt   "!TARGET_BWX && (reload_in_progress || reload_completed)"
   6078  1.1.1.1.4.2  yamt   "#"
   6079  1.1.1.1.4.2  yamt   "!TARGET_BWX && reload_completed"
   6080  1.1.1.1.4.2  yamt   [(const_int 0)]
   6081  1.1.1.1.4.2  yamt {
   6082  1.1.1.1.4.2  yamt   rtx aligned_mem, bitnum;
   6083  1.1.1.1.4.2  yamt   get_aligned_mem (operands[0], &aligned_mem, &bitnum);
   6084  1.1.1.1.4.2  yamt   emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum,
   6085  1.1.1.1.4.2  yamt 				operands[2], operands[3]));
   6086  1.1.1.1.4.2  yamt   DONE;
   6087  1.1.1.1.4.2  yamt })
   6088  1.1.1.1.4.2  yamt 
   6090  1.1.1.1.4.2  yamt ;; Vector operations
   6091  1.1.1.1.4.2  yamt 
   6092  1.1.1.1.4.2  yamt (define_mode_iterator VEC [V8QI V4HI V2SI])
   6093  1.1.1.1.4.2  yamt 
   6094  1.1.1.1.4.2  yamt (define_expand "mov<mode>"
   6095  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "nonimmediate_operand" "")
   6096  1.1.1.1.4.2  yamt         (match_operand:VEC 1 "general_operand" ""))]
   6097  1.1.1.1.4.2  yamt   ""
   6098  1.1.1.1.4.2  yamt {
   6099  1.1.1.1.4.2  yamt   if (alpha_expand_mov (<MODE>mode, operands))
   6100  1.1.1.1.4.2  yamt     DONE;
   6101  1.1.1.1.4.2  yamt })
   6102  1.1.1.1.4.2  yamt 
   6103  1.1.1.1.4.2  yamt (define_split
   6104  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "")
   6105  1.1.1.1.4.2  yamt 	(match_operand:VEC 1 "non_zero_const_operand" ""))]
   6106  1.1.1.1.4.2  yamt   ""
   6107  1.1.1.1.4.2  yamt   [(const_int 0)]
   6108  1.1.1.1.4.2  yamt {
   6109  1.1.1.1.4.2  yamt   if (alpha_split_const_mov (<MODE>mode, operands))
   6110  1.1.1.1.4.2  yamt     DONE;
   6111  1.1.1.1.4.2  yamt   else
   6112  1.1.1.1.4.2  yamt     FAIL;
   6113  1.1.1.1.4.2  yamt })
   6114  1.1.1.1.4.2  yamt 
   6115  1.1.1.1.4.2  yamt 
   6116  1.1.1.1.4.2  yamt (define_expand "movmisalign<mode>"
   6117  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "nonimmediate_operand" "")
   6118  1.1.1.1.4.2  yamt         (match_operand:VEC 1 "general_operand" ""))]
   6119  1.1.1.1.4.2  yamt   ""
   6120  1.1.1.1.4.2  yamt {
   6121  1.1.1.1.4.2  yamt   alpha_expand_movmisalign (<MODE>mode, operands);
   6122  1.1.1.1.4.2  yamt   DONE;
   6123  1.1.1.1.4.2  yamt })
   6124  1.1.1.1.4.2  yamt 
   6125  1.1.1.1.4.2  yamt (define_insn "*mov<mode>_fix"
   6126  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "nonimmediate_operand" "=r,r,r,m,*f,*f,m,r,*f")
   6127  1.1.1.1.4.2  yamt 	(match_operand:VEC 1 "input_operand" "rW,i,m,rW,*fW,m,*f,*f,r"))]
   6128  1.1.1.1.4.2  yamt   "TARGET_FIX
   6129  1.1.1.1.4.2  yamt    && (register_operand (operands[0], <MODE>mode)
   6130  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], <MODE>mode))"
   6131  1.1.1.1.4.2  yamt   "@
   6132  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   6133  1.1.1.1.4.2  yamt    #
   6134  1.1.1.1.4.2  yamt    ldq %0,%1
   6135  1.1.1.1.4.2  yamt    stq %r1,%0
   6136  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   6137  1.1.1.1.4.2  yamt    ldt %0,%1
   6138  1.1.1.1.4.2  yamt    stt %R1,%0
   6139  1.1.1.1.4.2  yamt    ftoit %1,%0
   6140  1.1.1.1.4.2  yamt    itoft %1,%0"
   6141  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,multi,ild,ist,fcpys,fld,fst,ftoi,itof")])
   6142  1.1.1.1.4.2  yamt 
   6143  1.1.1.1.4.2  yamt (define_insn "*mov<mode>_nofix"
   6144  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "nonimmediate_operand" "=r,r,r,m,*f,*f,m")
   6145  1.1.1.1.4.2  yamt 	(match_operand:VEC 1 "input_operand" "rW,i,m,rW,*fW,m,*f"))]
   6146  1.1.1.1.4.2  yamt   "! TARGET_FIX
   6147  1.1.1.1.4.2  yamt    && (register_operand (operands[0], <MODE>mode)
   6148  1.1.1.1.4.2  yamt        || reg_or_0_operand (operands[1], <MODE>mode))"
   6149  1.1.1.1.4.2  yamt   "@
   6150  1.1.1.1.4.2  yamt    bis $31,%r1,%0
   6151  1.1.1.1.4.2  yamt    #
   6152  1.1.1.1.4.2  yamt    ldq %0,%1
   6153  1.1.1.1.4.2  yamt    stq %r1,%0
   6154  1.1.1.1.4.2  yamt    cpys %R1,%R1,%0
   6155  1.1.1.1.4.2  yamt    ldt %0,%1
   6156  1.1.1.1.4.2  yamt    stt %R1,%0"
   6157  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog,multi,ild,ist,fcpys,fld,fst")])
   6158  1.1.1.1.4.2  yamt 
   6159  1.1.1.1.4.2  yamt (define_insn "uminv8qi3"
   6160  1.1.1.1.4.2  yamt   [(set (match_operand:V8QI 0 "register_operand" "=r")
   6161  1.1.1.1.4.2  yamt 	(umin:V8QI (match_operand:V8QI 1 "reg_or_0_operand" "rW")
   6162  1.1.1.1.4.2  yamt 		   (match_operand:V8QI 2 "reg_or_0_operand" "rW")))]
   6163  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6164  1.1.1.1.4.2  yamt   "minub8 %r1,%r2,%0"
   6165  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6166  1.1.1.1.4.2  yamt 
   6167  1.1.1.1.4.2  yamt (define_insn "sminv8qi3"
   6168  1.1.1.1.4.2  yamt   [(set (match_operand:V8QI 0 "register_operand" "=r")
   6169  1.1.1.1.4.2  yamt 	(smin:V8QI (match_operand:V8QI 1 "reg_or_0_operand" "rW")
   6170  1.1.1.1.4.2  yamt 		   (match_operand:V8QI 2 "reg_or_0_operand" "rW")))]
   6171  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6172  1.1.1.1.4.2  yamt   "minsb8 %r1,%r2,%0"
   6173  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6174  1.1.1.1.4.2  yamt 
   6175  1.1.1.1.4.2  yamt (define_insn "uminv4hi3"
   6176  1.1.1.1.4.2  yamt   [(set (match_operand:V4HI 0 "register_operand" "=r")
   6177  1.1.1.1.4.2  yamt 	(umin:V4HI (match_operand:V4HI 1 "reg_or_0_operand" "rW")
   6178  1.1.1.1.4.2  yamt 		   (match_operand:V4HI 2 "reg_or_0_operand" "rW")))]
   6179  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6180  1.1.1.1.4.2  yamt   "minuw4 %r1,%r2,%0"
   6181  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6182  1.1.1.1.4.2  yamt 
   6183  1.1.1.1.4.2  yamt (define_insn "sminv4hi3"
   6184  1.1.1.1.4.2  yamt   [(set (match_operand:V4HI 0 "register_operand" "=r")
   6185  1.1.1.1.4.2  yamt 	(smin:V4HI (match_operand:V4HI 1 "reg_or_0_operand" "rW")
   6186  1.1.1.1.4.2  yamt 		   (match_operand:V4HI 2 "reg_or_0_operand" "rW")))]
   6187  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6188  1.1.1.1.4.2  yamt   "minsw4 %r1,%r2,%0"
   6189  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6190  1.1.1.1.4.2  yamt 
   6191  1.1.1.1.4.2  yamt (define_insn "umaxv8qi3"
   6192  1.1.1.1.4.2  yamt   [(set (match_operand:V8QI 0 "register_operand" "=r")
   6193  1.1.1.1.4.2  yamt 	(umax:V8QI (match_operand:V8QI 1 "reg_or_0_operand" "rW")
   6194  1.1.1.1.4.2  yamt 		   (match_operand:V8QI 2 "reg_or_0_operand" "rW")))]
   6195  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6196  1.1.1.1.4.2  yamt   "maxub8 %r1,%r2,%0"
   6197  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6198  1.1.1.1.4.2  yamt 
   6199  1.1.1.1.4.2  yamt (define_insn "smaxv8qi3"
   6200  1.1.1.1.4.2  yamt   [(set (match_operand:V8QI 0 "register_operand" "=r")
   6201  1.1.1.1.4.2  yamt 	(smax:V8QI (match_operand:V8QI 1 "reg_or_0_operand" "rW")
   6202  1.1.1.1.4.2  yamt 		   (match_operand:V8QI 2 "reg_or_0_operand" "rW")))]
   6203  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6204  1.1.1.1.4.2  yamt   "maxsb8 %r1,%r2,%0"
   6205  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6206  1.1.1.1.4.2  yamt 
   6207  1.1.1.1.4.2  yamt (define_insn "umaxv4hi3"
   6208  1.1.1.1.4.2  yamt   [(set (match_operand:V4HI 0 "register_operand" "=r")
   6209  1.1.1.1.4.2  yamt 	(umax:V4HI (match_operand:V4HI 1 "reg_or_0_operand" "rW")
   6210  1.1.1.1.4.2  yamt 		   (match_operand:V4HI 2 "reg_or_0_operand" "rW")))]
   6211  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6212  1.1.1.1.4.2  yamt   "maxuw4 %r1,%r2,%0"
   6213  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6214  1.1.1.1.4.2  yamt 
   6215  1.1.1.1.4.2  yamt (define_insn "smaxv4hi3"
   6216  1.1.1.1.4.2  yamt   [(set (match_operand:V4HI 0 "register_operand" "=r")
   6217  1.1.1.1.4.2  yamt 	(smax:V4HI (match_operand:V4HI 1 "reg_or_0_operand" "rW")
   6218  1.1.1.1.4.2  yamt 		   (match_operand:V4HI 2 "reg_or_0_operand" "rW")))]
   6219  1.1.1.1.4.2  yamt   "TARGET_MAX"
   6220  1.1.1.1.4.2  yamt   "maxsw4 %r1,%r2,%0"
   6221  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   6222  1.1.1.1.4.2  yamt 
   6223  1.1.1.1.4.2  yamt (define_insn "one_cmpl<mode>2"
   6224  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "=r")
   6225  1.1.1.1.4.2  yamt 	(not:VEC (match_operand:VEC 1 "register_operand" "r")))]
   6226  1.1.1.1.4.2  yamt   ""
   6227  1.1.1.1.4.2  yamt   "ornot $31,%1,%0"
   6228  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   6229  1.1.1.1.4.2  yamt 
   6230  1.1.1.1.4.2  yamt (define_insn "and<mode>3"
   6231  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "=r")
   6232  1.1.1.1.4.2  yamt 	(and:VEC (match_operand:VEC 1 "register_operand" "r")
   6233  1.1.1.1.4.2  yamt 		 (match_operand:VEC 2 "register_operand" "r")))]
   6234  1.1.1.1.4.2  yamt   ""
   6235  1.1.1.1.4.2  yamt   "and %1,%2,%0"
   6236  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   6237  1.1.1.1.4.2  yamt 
   6238  1.1.1.1.4.2  yamt (define_insn "*andnot<mode>3"
   6239  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "=r")
   6240  1.1.1.1.4.2  yamt 	(and:VEC (not:VEC (match_operand:VEC 1 "register_operand" "r"))
   6241  1.1.1.1.4.2  yamt 		 (match_operand:VEC 2 "register_operand" "r")))]
   6242  1.1.1.1.4.2  yamt   ""
   6243  1.1.1.1.4.2  yamt   "bic %2,%1,%0"
   6244  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   6245  1.1.1.1.4.2  yamt 
   6246  1.1.1.1.4.2  yamt (define_insn "ior<mode>3"
   6247  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "=r")
   6248  1.1.1.1.4.2  yamt 	(ior:VEC (match_operand:VEC 1 "register_operand" "r")
   6249  1.1.1.1.4.2  yamt 		 (match_operand:VEC 2 "register_operand" "r")))]
   6250  1.1.1.1.4.2  yamt   ""
   6251  1.1.1.1.4.2  yamt   "bis %1,%2,%0"
   6252  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   6253  1.1.1.1.4.2  yamt 
   6254  1.1.1.1.4.2  yamt (define_insn "*iornot<mode>3"
   6255  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "=r")
   6256  1.1.1.1.4.2  yamt 	(ior:VEC (not:DI (match_operand:VEC 1 "register_operand" "r"))
   6257  1.1.1.1.4.2  yamt 		 (match_operand:VEC 2 "register_operand" "r")))]
   6258  1.1.1.1.4.2  yamt   ""
   6259  1.1.1.1.4.2  yamt   "ornot %2,%1,%0"
   6260  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   6261  1.1.1.1.4.2  yamt 
   6262  1.1.1.1.4.2  yamt (define_insn "xor<mode>3"
   6263  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "=r")
   6264  1.1.1.1.4.2  yamt 	(xor:VEC (match_operand:VEC 1 "register_operand" "r")
   6265  1.1.1.1.4.2  yamt 		 (match_operand:VEC 2 "register_operand" "r")))]
   6266  1.1.1.1.4.2  yamt   ""
   6267  1.1.1.1.4.2  yamt   "xor %1,%2,%0"
   6268  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   6269  1.1.1.1.4.2  yamt 
   6270  1.1.1.1.4.2  yamt (define_insn "*xornot<mode>3"
   6271  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "=r")
   6272  1.1.1.1.4.2  yamt 	(not:VEC (xor:VEC (match_operand:VEC 1 "register_operand" "r")
   6273  1.1.1.1.4.2  yamt 			  (match_operand:VEC 2 "register_operand" "r"))))]
   6274  1.1.1.1.4.2  yamt   ""
   6275  1.1.1.1.4.2  yamt   "eqv %1,%2,%0"
   6276  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   6277  1.1.1.1.4.2  yamt 
   6278  1.1.1.1.4.2  yamt (define_expand "vec_shl_<mode>"
   6279  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "")
   6280  1.1.1.1.4.2  yamt 	(ashift:DI (match_operand:VEC 1 "register_operand" "")
   6281  1.1.1.1.4.2  yamt 		   (match_operand:DI 2 "reg_or_6bit_operand" "")))]
   6282  1.1.1.1.4.2  yamt   ""
   6283  1.1.1.1.4.2  yamt {
   6284  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (DImode, operands[0]);
   6285  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (DImode, operands[1]);
   6286  1.1.1.1.4.2  yamt })
   6287  1.1.1.1.4.2  yamt 
   6288  1.1.1.1.4.2  yamt (define_expand "vec_shr_<mode>"
   6289  1.1.1.1.4.2  yamt   [(set (match_operand:VEC 0 "register_operand" "")
   6290  1.1.1.1.4.2  yamt         (lshiftrt:DI (match_operand:VEC 1 "register_operand" "")
   6291  1.1.1.1.4.2  yamt                      (match_operand:DI 2 "reg_or_6bit_operand" "")))]
   6292  1.1.1.1.4.2  yamt   ""
   6293  1.1.1.1.4.2  yamt {
   6294  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (DImode, operands[0]);
   6295  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (DImode, operands[1]);
   6296  1.1.1.1.4.2  yamt })
   6297  1.1.1.1.4.2  yamt 
   6299  1.1.1.1.4.2  yamt ;; Bit field extract patterns which use ext[wlq][lh]
   6300  1.1.1.1.4.2  yamt 
   6301  1.1.1.1.4.2  yamt (define_expand "extv"
   6302  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   6303  1.1.1.1.4.2  yamt 	(sign_extract:DI (match_operand:QI 1 "memory_operand" "")
   6304  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "immediate_operand" "")
   6305  1.1.1.1.4.2  yamt 			 (match_operand:DI 3 "immediate_operand" "")))]
   6306  1.1.1.1.4.2  yamt   ""
   6307  1.1.1.1.4.2  yamt {
   6308  1.1.1.1.4.2  yamt   int ofs;
   6309  1.1.1.1.4.2  yamt 
   6310  1.1.1.1.4.2  yamt   /* We can do 16, 32 and 64 bit fields, if aligned on byte boundaries.  */
   6311  1.1.1.1.4.2  yamt   if (INTVAL (operands[3]) % 8 != 0
   6312  1.1.1.1.4.2  yamt       || (INTVAL (operands[2]) != 16
   6313  1.1.1.1.4.2  yamt 	  && INTVAL (operands[2]) != 32
   6314  1.1.1.1.4.2  yamt 	  && INTVAL (operands[2]) != 64))
   6315  1.1.1.1.4.2  yamt     FAIL;
   6316  1.1.1.1.4.2  yamt 
   6317  1.1.1.1.4.2  yamt   /* From mips.md: extract_bit_field doesn't verify that our source
   6318  1.1.1.1.4.2  yamt      matches the predicate, so we force it to be a MEM here.  */
   6319  1.1.1.1.4.2  yamt   if (!MEM_P (operands[1]))
   6320  1.1.1.1.4.2  yamt     FAIL;
   6321  1.1.1.1.4.2  yamt 
   6322  1.1.1.1.4.2  yamt   /* The bit number is relative to the mode of operand 1 which is
   6323  1.1.1.1.4.2  yamt      usually QImode (this might actually be a bug in expmed.c). Note 
   6324  1.1.1.1.4.2  yamt      that the bit number is negative in big-endian mode in this case.
   6325  1.1.1.1.4.2  yamt      We have to convert that to the offset.  */
   6326  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   6327  1.1.1.1.4.2  yamt     ofs = GET_MODE_BITSIZE (GET_MODE (operands[1]))
   6328  1.1.1.1.4.2  yamt           - INTVAL (operands[2]) - INTVAL (operands[3]);
   6329  1.1.1.1.4.2  yamt   else
   6330  1.1.1.1.4.2  yamt     ofs = INTVAL (operands[3]);
   6331  1.1.1.1.4.2  yamt 
   6332  1.1.1.1.4.2  yamt   ofs = ofs / 8;
   6333  1.1.1.1.4.2  yamt 
   6334  1.1.1.1.4.2  yamt   alpha_expand_unaligned_load (operands[0], operands[1],
   6335  1.1.1.1.4.2  yamt 			       INTVAL (operands[2]) / 8,
   6336  1.1.1.1.4.2  yamt 			       ofs, 1);
   6337  1.1.1.1.4.2  yamt   DONE;
   6338  1.1.1.1.4.2  yamt })
   6339  1.1.1.1.4.2  yamt 
   6340  1.1.1.1.4.2  yamt (define_expand "extzv"
   6341  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   6342  1.1.1.1.4.2  yamt 	(zero_extract:DI (match_operand:DI 1 "nonimmediate_operand" "")
   6343  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "immediate_operand" "")
   6344  1.1.1.1.4.2  yamt 			 (match_operand:DI 3 "immediate_operand" "")))]
   6345  1.1.1.1.4.2  yamt   ""
   6346  1.1.1.1.4.2  yamt {
   6347  1.1.1.1.4.2  yamt   /* We can do 8, 16, 32 and 64 bit fields, if aligned on byte boundaries.  */
   6348  1.1.1.1.4.2  yamt   if (INTVAL (operands[3]) % 8 != 0
   6349  1.1.1.1.4.2  yamt       || (INTVAL (operands[2]) != 8
   6350  1.1.1.1.4.2  yamt 	  && INTVAL (operands[2]) != 16
   6351  1.1.1.1.4.2  yamt 	  && INTVAL (operands[2]) != 32
   6352  1.1.1.1.4.2  yamt 	  && INTVAL (operands[2]) != 64))
   6353  1.1.1.1.4.2  yamt     FAIL;
   6354  1.1.1.1.4.2  yamt 
   6355  1.1.1.1.4.2  yamt   if (MEM_P (operands[1]))
   6356  1.1.1.1.4.2  yamt     {
   6357  1.1.1.1.4.2  yamt       int ofs;
   6358  1.1.1.1.4.2  yamt 
   6359  1.1.1.1.4.2  yamt       /* Fail 8-bit fields, falling back on a simple byte load.  */
   6360  1.1.1.1.4.2  yamt       if (INTVAL (operands[2]) == 8)
   6361  1.1.1.1.4.2  yamt 	FAIL;
   6362  1.1.1.1.4.2  yamt 
   6363  1.1.1.1.4.2  yamt       /* The bit number is relative to the mode of operand 1 which is
   6364  1.1.1.1.4.2  yamt 	 usually QImode (this might actually be a bug in expmed.c). Note 
   6365  1.1.1.1.4.2  yamt 	 that the bit number is negative in big-endian mode in this case.
   6366  1.1.1.1.4.2  yamt 	 We have to convert that to the offset.  */
   6367  1.1.1.1.4.2  yamt       if (WORDS_BIG_ENDIAN)
   6368  1.1.1.1.4.2  yamt 	ofs = GET_MODE_BITSIZE (GET_MODE (operands[1]))
   6369  1.1.1.1.4.2  yamt 	      - INTVAL (operands[2]) - INTVAL (operands[3]);
   6370  1.1.1.1.4.2  yamt       else
   6371  1.1.1.1.4.2  yamt 	ofs = INTVAL (operands[3]);
   6372  1.1.1.1.4.2  yamt 
   6373  1.1.1.1.4.2  yamt       ofs = ofs / 8;
   6374  1.1.1.1.4.2  yamt 
   6375  1.1.1.1.4.2  yamt       alpha_expand_unaligned_load (operands[0], operands[1],
   6376  1.1.1.1.4.2  yamt 			           INTVAL (operands[2]) / 8,
   6377  1.1.1.1.4.2  yamt 				   ofs, 0);
   6378  1.1.1.1.4.2  yamt       DONE;
   6379  1.1.1.1.4.2  yamt     }
   6380  1.1.1.1.4.2  yamt })
   6381  1.1.1.1.4.2  yamt 
   6382  1.1.1.1.4.2  yamt (define_expand "insv"
   6383  1.1.1.1.4.2  yamt   [(set (zero_extract:DI (match_operand:QI 0 "memory_operand" "")
   6384  1.1.1.1.4.2  yamt 			 (match_operand:DI 1 "immediate_operand" "")
   6385  1.1.1.1.4.2  yamt 			 (match_operand:DI 2 "immediate_operand" ""))
   6386  1.1.1.1.4.2  yamt 	(match_operand:DI 3 "register_operand" ""))]
   6387  1.1.1.1.4.2  yamt   ""
   6388  1.1.1.1.4.2  yamt {
   6389  1.1.1.1.4.2  yamt   int ofs;
   6390  1.1.1.1.4.2  yamt 
   6391  1.1.1.1.4.2  yamt   /* We can do 16, 32 and 64 bit fields, if aligned on byte boundaries.  */
   6392  1.1.1.1.4.2  yamt   if (INTVAL (operands[2]) % 8 != 0
   6393  1.1.1.1.4.2  yamt       || (INTVAL (operands[1]) != 16
   6394  1.1.1.1.4.2  yamt 	  && INTVAL (operands[1]) != 32
   6395  1.1.1.1.4.2  yamt 	  && INTVAL (operands[1]) != 64))
   6396  1.1.1.1.4.2  yamt     FAIL;
   6397  1.1.1.1.4.2  yamt 
   6398  1.1.1.1.4.2  yamt   /* From mips.md: store_bit_field doesn't verify that our source
   6399  1.1.1.1.4.2  yamt      matches the predicate, so we force it to be a MEM here.  */
   6400  1.1.1.1.4.2  yamt   if (!MEM_P (operands[0]))
   6401  1.1.1.1.4.2  yamt     FAIL;
   6402  1.1.1.1.4.2  yamt 
   6403  1.1.1.1.4.2  yamt   /* The bit number is relative to the mode of operand 1 which is
   6404  1.1.1.1.4.2  yamt      usually QImode (this might actually be a bug in expmed.c). Note 
   6405  1.1.1.1.4.2  yamt      that the bit number is negative in big-endian mode in this case.
   6406  1.1.1.1.4.2  yamt      We have to convert that to the offset.  */
   6407  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   6408  1.1.1.1.4.2  yamt     ofs = GET_MODE_BITSIZE (GET_MODE (operands[0]))
   6409  1.1.1.1.4.2  yamt           - INTVAL (operands[1]) - INTVAL (operands[2]);
   6410  1.1.1.1.4.2  yamt   else
   6411  1.1.1.1.4.2  yamt     ofs = INTVAL (operands[2]);
   6412  1.1.1.1.4.2  yamt 
   6413  1.1.1.1.4.2  yamt   ofs = ofs / 8;
   6414  1.1.1.1.4.2  yamt 
   6415  1.1.1.1.4.2  yamt   alpha_expand_unaligned_store (operands[0], operands[3],
   6416  1.1.1.1.4.2  yamt 			        INTVAL (operands[1]) / 8, ofs);
   6417  1.1.1.1.4.2  yamt   DONE;
   6418  1.1.1.1.4.2  yamt })
   6419  1.1.1.1.4.2  yamt 
   6420  1.1.1.1.4.2  yamt ;; Block move/clear, see alpha.c for more details.
   6421  1.1.1.1.4.2  yamt ;; Argument 0 is the destination
   6422  1.1.1.1.4.2  yamt ;; Argument 1 is the source
   6423  1.1.1.1.4.2  yamt ;; Argument 2 is the length
   6424  1.1.1.1.4.2  yamt ;; Argument 3 is the alignment
   6425  1.1.1.1.4.2  yamt 
   6426  1.1.1.1.4.2  yamt (define_expand "movmemqi"
   6427  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:BLK 0 "memory_operand" "")
   6428  1.1.1.1.4.2  yamt 		   (match_operand:BLK 1 "memory_operand" ""))
   6429  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 2 "immediate_operand" ""))
   6430  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 3 "immediate_operand" ""))])]
   6431  1.1.1.1.4.2  yamt   ""
   6432  1.1.1.1.4.2  yamt {
   6433  1.1.1.1.4.2  yamt   if (alpha_expand_block_move (operands))
   6434  1.1.1.1.4.2  yamt     DONE;
   6435  1.1.1.1.4.2  yamt   else
   6436  1.1.1.1.4.2  yamt     FAIL;
   6437  1.1.1.1.4.2  yamt })
   6438  1.1.1.1.4.2  yamt 
   6439  1.1.1.1.4.2  yamt (define_expand "movmemdi"
   6440  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:BLK 0 "memory_operand" "")
   6441  1.1.1.1.4.2  yamt 		   (match_operand:BLK 1 "memory_operand" ""))
   6442  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 2 "immediate_operand" ""))
   6443  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 3 "immediate_operand" ""))
   6444  1.1.1.1.4.2  yamt 	      (use (match_dup 4))
   6445  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 25))
   6446  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 16))
   6447  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 17))
   6448  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 18))
   6449  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 19))
   6450  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 20))
   6451  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))
   6452  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 27))])]
   6453  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   6454  1.1.1.1.4.2  yamt {
   6455  1.1.1.1.4.2  yamt   operands[4] = alpha_need_linkage ("OTS$MOVE", 0);
   6456  1.1.1.1.4.2  yamt })
   6457  1.1.1.1.4.2  yamt 
   6458  1.1.1.1.4.2  yamt (define_insn "*movmemdi_1"
   6459  1.1.1.1.4.2  yamt   [(set (match_operand:BLK 0 "memory_operand" "=m,=m")
   6460  1.1.1.1.4.2  yamt 	(match_operand:BLK 1 "memory_operand" "m,m"))
   6461  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "nonmemory_operand" "r,i"))
   6462  1.1.1.1.4.2  yamt    (use (match_operand:DI 3 "immediate_operand" ""))
   6463  1.1.1.1.4.2  yamt    (use (match_operand:DI 4 "call_operand" "i,i"))
   6464  1.1.1.1.4.2  yamt    (clobber (reg:DI 25))
   6465  1.1.1.1.4.2  yamt    (clobber (reg:DI 16))
   6466  1.1.1.1.4.2  yamt    (clobber (reg:DI 17))
   6467  1.1.1.1.4.2  yamt    (clobber (reg:DI 18))
   6468  1.1.1.1.4.2  yamt    (clobber (reg:DI 19))
   6469  1.1.1.1.4.2  yamt    (clobber (reg:DI 20))
   6470  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))
   6471  1.1.1.1.4.2  yamt    (clobber (reg:DI 27))]
   6472  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   6473  1.1.1.1.4.2  yamt {
   6474  1.1.1.1.4.2  yamt   operands [5] = alpha_use_linkage (operands [4], cfun->decl, 0, 1);
   6475  1.1.1.1.4.2  yamt   switch (which_alternative)
   6476  1.1.1.1.4.2  yamt     {
   6477  1.1.1.1.4.2  yamt     case 0:
   6478  1.1.1.1.4.2  yamt 	return "lda $16,%0\;bis $31,%2,$17\;lda $18,%1\;ldq $26,%5\;lda $25,3($31)\;jsr $26,%4\;ldq $27,0($29)";
   6479  1.1.1.1.4.2  yamt     case 1:
   6480  1.1.1.1.4.2  yamt 	return "lda $16,%0\;lda $17,%2($31)\;lda $18,%1\;ldq $26,%5\;lda $25,3($31)\;jsr $26,%4\;ldq $27,0($29)";
   6481  1.1.1.1.4.2  yamt     default:
   6482  1.1.1.1.4.2  yamt       gcc_unreachable ();
   6483  1.1.1.1.4.2  yamt     }
   6484  1.1.1.1.4.2  yamt }
   6485  1.1.1.1.4.2  yamt   [(set_attr "type" "multi")
   6486  1.1.1.1.4.2  yamt    (set_attr "length" "28")])
   6487  1.1.1.1.4.2  yamt 
   6488  1.1.1.1.4.2  yamt (define_expand "setmemqi"
   6489  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:BLK 0 "memory_operand" "")
   6490  1.1.1.1.4.2  yamt 		   (match_operand 2 "const_int_operand" ""))
   6491  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 1 "immediate_operand" ""))
   6492  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 3 "immediate_operand" ""))])]
   6493  1.1.1.1.4.2  yamt   ""
   6494  1.1.1.1.4.2  yamt {
   6495  1.1.1.1.4.2  yamt   /* If value to set is not zero, use the library routine.  */
   6496  1.1.1.1.4.2  yamt   if (operands[2] != const0_rtx)
   6497  1.1.1.1.4.2  yamt     FAIL;
   6498  1.1.1.1.4.2  yamt 
   6499  1.1.1.1.4.2  yamt   if (alpha_expand_block_clear (operands))
   6500  1.1.1.1.4.2  yamt     DONE;
   6501  1.1.1.1.4.2  yamt   else
   6502  1.1.1.1.4.2  yamt     FAIL;
   6503  1.1.1.1.4.2  yamt })
   6504  1.1.1.1.4.2  yamt 
   6505  1.1.1.1.4.2  yamt (define_expand "setmemdi"
   6506  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand:BLK 0 "memory_operand" "")
   6507  1.1.1.1.4.2  yamt 		   (match_operand 2 "const_int_operand" ""))
   6508  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 1 "immediate_operand" ""))
   6509  1.1.1.1.4.2  yamt 	      (use (match_operand:DI 3 "immediate_operand" ""))
   6510  1.1.1.1.4.2  yamt 	      (use (match_dup 4))
   6511  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 25))
   6512  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 16))
   6513  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 17))
   6514  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))
   6515  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 27))])]
   6516  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   6517  1.1.1.1.4.2  yamt {
   6518  1.1.1.1.4.2  yamt   /* If value to set is not zero, use the library routine.  */
   6519  1.1.1.1.4.2  yamt   if (operands[2] != const0_rtx)
   6520  1.1.1.1.4.2  yamt     FAIL;
   6521  1.1.1.1.4.2  yamt 
   6522  1.1.1.1.4.2  yamt   operands[4] = alpha_need_linkage ("OTS$ZERO", 0);
   6523  1.1.1.1.4.2  yamt })
   6524  1.1.1.1.4.2  yamt 
   6525  1.1.1.1.4.2  yamt (define_insn "*clrmemdi_1"
   6526  1.1.1.1.4.2  yamt   [(set (match_operand:BLK 0 "memory_operand" "=m,=m")
   6527  1.1.1.1.4.2  yamt 		   (const_int 0))
   6528  1.1.1.1.4.2  yamt    (use (match_operand:DI 1 "nonmemory_operand" "r,i"))
   6529  1.1.1.1.4.2  yamt    (use (match_operand:DI 2 "immediate_operand" ""))
   6530  1.1.1.1.4.2  yamt    (use (match_operand:DI 3 "call_operand" "i,i"))
   6531  1.1.1.1.4.2  yamt    (clobber (reg:DI 25))
   6532  1.1.1.1.4.2  yamt    (clobber (reg:DI 16))
   6533  1.1.1.1.4.2  yamt    (clobber (reg:DI 17))
   6534  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))
   6535  1.1.1.1.4.2  yamt    (clobber (reg:DI 27))]
   6536  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   6537  1.1.1.1.4.2  yamt {
   6538  1.1.1.1.4.2  yamt   operands [4] = alpha_use_linkage (operands [3], cfun->decl, 0, 1);
   6539  1.1.1.1.4.2  yamt   switch (which_alternative)
   6540  1.1.1.1.4.2  yamt     {
   6541  1.1.1.1.4.2  yamt     case 0:
   6542  1.1.1.1.4.2  yamt 	return "lda $16,%0\;bis $31,%1,$17\;ldq $26,%4\;lda $25,2($31)\;jsr $26,%3\;ldq $27,0($29)";
   6543  1.1.1.1.4.2  yamt     case 1:
   6544  1.1.1.1.4.2  yamt 	return "lda $16,%0\;lda $17,%1($31)\;ldq $26,%4\;lda $25,2($31)\;jsr $26,%3\;ldq $27,0($29)";
   6545  1.1.1.1.4.2  yamt     default:
   6546  1.1.1.1.4.2  yamt       gcc_unreachable ();
   6547  1.1.1.1.4.2  yamt     }
   6548  1.1.1.1.4.2  yamt }
   6549  1.1.1.1.4.2  yamt   [(set_attr "type" "multi")
   6550  1.1.1.1.4.2  yamt    (set_attr "length" "24")])
   6551  1.1.1.1.4.2  yamt 
   6552  1.1.1.1.4.2  yamt 
   6554  1.1.1.1.4.2  yamt ;; Subroutine of stack space allocation.  Perform a stack probe.
   6555  1.1.1.1.4.2  yamt (define_expand "probe_stack"
   6556  1.1.1.1.4.2  yamt   [(set (match_dup 1) (match_operand:DI 0 "const_int_operand" ""))]
   6557  1.1.1.1.4.2  yamt   ""
   6558  1.1.1.1.4.2  yamt {
   6559  1.1.1.1.4.2  yamt   operands[1] = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx,
   6560  1.1.1.1.4.2  yamt 						    INTVAL (operands[0])));
   6561  1.1.1.1.4.2  yamt   MEM_VOLATILE_P (operands[1]) = 1;
   6562  1.1.1.1.4.2  yamt 
   6563  1.1.1.1.4.2  yamt   operands[0] = const0_rtx;
   6564  1.1.1.1.4.2  yamt })
   6565  1.1.1.1.4.2  yamt 
   6566  1.1.1.1.4.2  yamt ;; This is how we allocate stack space.  If we are allocating a
   6567  1.1.1.1.4.2  yamt ;; constant amount of space and we know it is less than 4096
   6568  1.1.1.1.4.2  yamt ;; bytes, we need do nothing.
   6569  1.1.1.1.4.2  yamt ;;
   6570  1.1.1.1.4.2  yamt ;; If it is more than 4096 bytes, we need to probe the stack
   6571  1.1.1.1.4.2  yamt ;; periodically.
   6572  1.1.1.1.4.2  yamt (define_expand "allocate_stack"
   6573  1.1.1.1.4.2  yamt   [(set (reg:DI 30)
   6574  1.1.1.1.4.2  yamt 	(plus:DI (reg:DI 30)
   6575  1.1.1.1.4.2  yamt 		 (match_operand:DI 1 "reg_or_cint_operand" "")))
   6576  1.1.1.1.4.2  yamt    (set (match_operand:DI 0 "register_operand" "=r")
   6577  1.1.1.1.4.2  yamt 	(match_dup 2))]
   6578  1.1.1.1.4.2  yamt   ""
   6579  1.1.1.1.4.2  yamt {
   6580  1.1.1.1.4.2  yamt   if (CONST_INT_P (operands[1])
   6581  1.1.1.1.4.2  yamt       && INTVAL (operands[1]) < 32768)
   6582  1.1.1.1.4.2  yamt     {
   6583  1.1.1.1.4.2  yamt       if (INTVAL (operands[1]) >= 4096)
   6584  1.1.1.1.4.2  yamt 	{
   6585  1.1.1.1.4.2  yamt 	  /* We do this the same way as in the prologue and generate explicit
   6586  1.1.1.1.4.2  yamt 	     probes.  Then we update the stack by the constant.  */
   6587  1.1.1.1.4.2  yamt 
   6588  1.1.1.1.4.2  yamt 	  int probed = 4096;
   6589  1.1.1.1.4.2  yamt 
   6590  1.1.1.1.4.2  yamt 	  emit_insn (gen_probe_stack (GEN_INT (- probed)));
   6591  1.1.1.1.4.2  yamt 	  while (probed + 8192 < INTVAL (operands[1]))
   6592  1.1.1.1.4.2  yamt 	    emit_insn (gen_probe_stack (GEN_INT (- (probed += 8192))));
   6593  1.1.1.1.4.2  yamt 
   6594  1.1.1.1.4.2  yamt 	  if (probed + 4096 < INTVAL (operands[1]))
   6595  1.1.1.1.4.2  yamt 	    emit_insn (gen_probe_stack (GEN_INT (- INTVAL(operands[1]))));
   6596  1.1.1.1.4.2  yamt 	}
   6597  1.1.1.1.4.2  yamt 
   6598  1.1.1.1.4.2  yamt       operands[1] = GEN_INT (- INTVAL (operands[1]));
   6599  1.1.1.1.4.2  yamt       operands[2] = virtual_stack_dynamic_rtx;
   6600  1.1.1.1.4.2  yamt     }
   6601  1.1.1.1.4.2  yamt   else
   6602  1.1.1.1.4.2  yamt     {
   6603  1.1.1.1.4.2  yamt       rtx out_label = 0;
   6604  1.1.1.1.4.2  yamt       rtx loop_label = gen_label_rtx ();
   6605  1.1.1.1.4.2  yamt       rtx want = gen_reg_rtx (Pmode);
   6606  1.1.1.1.4.2  yamt       rtx tmp = gen_reg_rtx (Pmode);
   6607  1.1.1.1.4.2  yamt       rtx memref, test;
   6608  1.1.1.1.4.2  yamt 
   6609  1.1.1.1.4.2  yamt       emit_insn (gen_subdi3 (want, stack_pointer_rtx,
   6610  1.1.1.1.4.2  yamt 			     force_reg (Pmode, operands[1])));
   6611  1.1.1.1.4.2  yamt       emit_insn (gen_adddi3 (tmp, stack_pointer_rtx, GEN_INT (-4096)));
   6612  1.1.1.1.4.2  yamt 
   6613  1.1.1.1.4.2  yamt       if (!CONST_INT_P (operands[1]))
   6614  1.1.1.1.4.2  yamt 	{
   6615  1.1.1.1.4.2  yamt 	  out_label = gen_label_rtx ();
   6616  1.1.1.1.4.2  yamt 	  test = gen_rtx_GEU (VOIDmode, want, tmp);
   6617  1.1.1.1.4.2  yamt 	  emit_jump_insn (gen_cbranchdi4 (test, want, tmp, out_label));
   6618  1.1.1.1.4.2  yamt 	}
   6619  1.1.1.1.4.2  yamt 
   6620  1.1.1.1.4.2  yamt       emit_label (loop_label);
   6621  1.1.1.1.4.2  yamt       memref = gen_rtx_MEM (DImode, tmp);
   6622  1.1.1.1.4.2  yamt       MEM_VOLATILE_P (memref) = 1;
   6623  1.1.1.1.4.2  yamt       emit_move_insn (memref, const0_rtx);
   6624  1.1.1.1.4.2  yamt       emit_insn (gen_adddi3 (tmp, tmp, GEN_INT(-8192)));
   6625  1.1.1.1.4.2  yamt       test = gen_rtx_GTU (VOIDmode, tmp, want);
   6626  1.1.1.1.4.2  yamt       emit_jump_insn (gen_cbranchdi4 (test, tmp, want, loop_label));
   6627  1.1.1.1.4.2  yamt 
   6628  1.1.1.1.4.2  yamt       memref = gen_rtx_MEM (DImode, want);
   6629  1.1.1.1.4.2  yamt       MEM_VOLATILE_P (memref) = 1;
   6630  1.1.1.1.4.2  yamt       emit_move_insn (memref, const0_rtx);
   6631  1.1.1.1.4.2  yamt 
   6632  1.1.1.1.4.2  yamt       if (out_label)
   6633  1.1.1.1.4.2  yamt 	emit_label (out_label);
   6634  1.1.1.1.4.2  yamt 
   6635  1.1.1.1.4.2  yamt       emit_move_insn (stack_pointer_rtx, want);
   6636  1.1.1.1.4.2  yamt       emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
   6637  1.1.1.1.4.2  yamt       DONE;
   6638  1.1.1.1.4.2  yamt     }
   6639  1.1.1.1.4.2  yamt })
   6640  1.1.1.1.4.2  yamt 
   6641  1.1.1.1.4.2  yamt ;; This is used by alpha_expand_prolog to do the same thing as above,
   6642  1.1.1.1.4.2  yamt ;; except we cannot at that time generate new basic blocks, so we hide
   6643  1.1.1.1.4.2  yamt ;; the loop in this one insn.
   6644  1.1.1.1.4.2  yamt 
   6645  1.1.1.1.4.2  yamt (define_insn "prologue_stack_probe_loop"
   6646  1.1.1.1.4.2  yamt   [(unspec_volatile [(match_operand:DI 0 "register_operand" "r")
   6647  1.1.1.1.4.2  yamt 		     (match_operand:DI 1 "register_operand" "r")]
   6648  1.1.1.1.4.2  yamt 		    UNSPECV_PSPL)]
   6649  1.1.1.1.4.2  yamt   ""
   6650  1.1.1.1.4.2  yamt {
   6651  1.1.1.1.4.2  yamt   operands[2] = gen_label_rtx ();
   6652  1.1.1.1.4.2  yamt   (*targetm.asm_out.internal_label) (asm_out_file, "L",
   6653  1.1.1.1.4.2  yamt 			     CODE_LABEL_NUMBER (operands[2]));
   6654  1.1.1.1.4.2  yamt 
   6655  1.1.1.1.4.2  yamt   return "stq $31,-8192(%1)\;subq %0,1,%0\;lda %1,-8192(%1)\;bne %0,%l2";
   6656  1.1.1.1.4.2  yamt }
   6657  1.1.1.1.4.2  yamt   [(set_attr "length" "16")
   6658  1.1.1.1.4.2  yamt    (set_attr "type" "multi")])
   6659  1.1.1.1.4.2  yamt 
   6660  1.1.1.1.4.2  yamt (define_expand "prologue"
   6661  1.1.1.1.4.2  yamt   [(clobber (const_int 0))]
   6662  1.1.1.1.4.2  yamt   ""
   6663  1.1.1.1.4.2  yamt {
   6664  1.1.1.1.4.2  yamt   alpha_expand_prologue ();
   6665  1.1.1.1.4.2  yamt   DONE;
   6666  1.1.1.1.4.2  yamt })
   6667  1.1.1.1.4.2  yamt 
   6668  1.1.1.1.4.2  yamt ;; These take care of emitting the ldgp insn in the prologue. This will be
   6669  1.1.1.1.4.2  yamt ;; an lda/ldah pair and we want to align them properly.  So we have two
   6670  1.1.1.1.4.2  yamt ;; unspec_volatile insns, the first of which emits the ldgp assembler macro
   6671  1.1.1.1.4.2  yamt ;; and the second of which emits nothing.  However, both are marked as type
   6672  1.1.1.1.4.2  yamt ;; IADD (the default) so the alignment code in alpha.c does the right thing
   6673  1.1.1.1.4.2  yamt ;; with them.
   6674  1.1.1.1.4.2  yamt 
   6675  1.1.1.1.4.2  yamt (define_expand "prologue_ldgp"
   6676  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   6677  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_dup 1) (match_dup 2)] UNSPECV_LDGP1))
   6678  1.1.1.1.4.2  yamt    (set (match_dup 0)
   6679  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_dup 0) (match_dup 2)] UNSPECV_PLDGP2))]
   6680  1.1.1.1.4.2  yamt   ""
   6681  1.1.1.1.4.2  yamt {
   6682  1.1.1.1.4.2  yamt   operands[0] = pic_offset_table_rtx;
   6683  1.1.1.1.4.2  yamt   operands[1] = gen_rtx_REG (Pmode, 27);
   6684  1.1.1.1.4.2  yamt   operands[2] = (TARGET_EXPLICIT_RELOCS
   6685  1.1.1.1.4.2  yamt 		 ? GEN_INT (alpha_next_sequence_number++)
   6686  1.1.1.1.4.2  yamt 		 : const0_rtx);
   6687  1.1.1.1.4.2  yamt })
   6688  1.1.1.1.4.2  yamt 
   6689  1.1.1.1.4.2  yamt (define_insn "*ldgp_er_1"
   6690  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   6691  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r")
   6692  1.1.1.1.4.2  yamt 			     (match_operand 2 "const_int_operand" "")]
   6693  1.1.1.1.4.2  yamt 			    UNSPECV_LDGP1))]
   6694  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   6695  1.1.1.1.4.2  yamt   "ldah %0,0(%1)\t\t!gpdisp!%2"
   6696  1.1.1.1.4.2  yamt   [(set_attr "cannot_copy" "true")])
   6697  1.1.1.1.4.2  yamt 
   6698  1.1.1.1.4.2  yamt (define_insn "*ldgp_er_2"
   6699  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   6700  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "register_operand" "r")
   6701  1.1.1.1.4.2  yamt 		    (match_operand 2 "const_int_operand" "")]
   6702  1.1.1.1.4.2  yamt 		   UNSPEC_LDGP2))]
   6703  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   6704  1.1.1.1.4.2  yamt   "lda %0,0(%1)\t\t!gpdisp!%2"
   6705  1.1.1.1.4.2  yamt   [(set_attr "cannot_copy" "true")])
   6706  1.1.1.1.4.2  yamt 
   6707  1.1.1.1.4.2  yamt (define_insn "*prologue_ldgp_er_2"
   6708  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   6709  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r")
   6710  1.1.1.1.4.2  yamt 			     (match_operand 2 "const_int_operand" "")]
   6711  1.1.1.1.4.2  yamt 		   	    UNSPECV_PLDGP2))]
   6712  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   6713  1.1.1.1.4.2  yamt   "lda %0,0(%1)\t\t!gpdisp!%2\n$%~..ng:"
   6714  1.1.1.1.4.2  yamt   [(set_attr "cannot_copy" "true")])
   6715  1.1.1.1.4.2  yamt 
   6716  1.1.1.1.4.2  yamt (define_insn "*prologue_ldgp_1"
   6717  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   6718  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r")
   6719  1.1.1.1.4.2  yamt 			     (match_operand 2 "const_int_operand" "")]
   6720  1.1.1.1.4.2  yamt 			    UNSPECV_LDGP1))]
   6721  1.1.1.1.4.2  yamt   ""
   6722  1.1.1.1.4.2  yamt   "ldgp %0,0(%1)\n$%~..ng:"
   6723  1.1.1.1.4.2  yamt   [(set_attr "cannot_copy" "true")])
   6724  1.1.1.1.4.2  yamt 
   6725  1.1.1.1.4.2  yamt (define_insn "*prologue_ldgp_2"
   6726  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   6727  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r")
   6728  1.1.1.1.4.2  yamt 			     (match_operand 2 "const_int_operand" "")]
   6729  1.1.1.1.4.2  yamt 		   	    UNSPECV_PLDGP2))]
   6730  1.1.1.1.4.2  yamt   ""
   6731  1.1.1.1.4.2  yamt   "")
   6732  1.1.1.1.4.2  yamt 
   6733  1.1.1.1.4.2  yamt ;; The _mcount profiling hook has special calling conventions, and
   6734  1.1.1.1.4.2  yamt ;; does not clobber all the registers that a normal call would.  So
   6735  1.1.1.1.4.2  yamt ;; hide the fact this is a call at all.
   6736  1.1.1.1.4.2  yamt 
   6737  1.1.1.1.4.2  yamt (define_insn "prologue_mcount"
   6738  1.1.1.1.4.2  yamt   [(unspec_volatile [(const_int 0)] UNSPECV_MCOUNT)]
   6739  1.1.1.1.4.2  yamt   ""
   6740  1.1.1.1.4.2  yamt {
   6741  1.1.1.1.4.2  yamt   if (TARGET_EXPLICIT_RELOCS)
   6742  1.1.1.1.4.2  yamt     /* Note that we cannot use a lituse_jsr reloc, since _mcount
   6743  1.1.1.1.4.2  yamt        cannot be called via the PLT.  */
   6744  1.1.1.1.4.2  yamt     return "ldq $28,_mcount($29)\t\t!literal\;jsr $28,($28),_mcount";
   6745  1.1.1.1.4.2  yamt   else
   6746  1.1.1.1.4.2  yamt     return "lda $28,_mcount\;jsr $28,($28),_mcount";
   6747  1.1.1.1.4.2  yamt }
   6748  1.1.1.1.4.2  yamt   [(set_attr "type" "multi")
   6749  1.1.1.1.4.2  yamt    (set_attr "length" "8")])
   6750  1.1.1.1.4.2  yamt 
   6751  1.1.1.1.4.2  yamt (define_insn "init_fp"
   6752  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   6753  1.1.1.1.4.2  yamt         (match_operand:DI 1 "register_operand" "r"))
   6754  1.1.1.1.4.2  yamt    (clobber (mem:BLK (match_operand:DI 2 "register_operand" "=r")))]
   6755  1.1.1.1.4.2  yamt   ""
   6756  1.1.1.1.4.2  yamt   "bis $31,%1,%0")
   6757  1.1.1.1.4.2  yamt 
   6758  1.1.1.1.4.2  yamt (define_expand "epilogue"
   6759  1.1.1.1.4.2  yamt   [(return)]
   6760  1.1.1.1.4.2  yamt   ""
   6761  1.1.1.1.4.2  yamt {
   6762  1.1.1.1.4.2  yamt   alpha_expand_epilogue ();
   6763  1.1.1.1.4.2  yamt })
   6764  1.1.1.1.4.2  yamt 
   6765  1.1.1.1.4.2  yamt (define_expand "sibcall_epilogue"
   6766  1.1.1.1.4.2  yamt   [(return)]
   6767  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   6768  1.1.1.1.4.2  yamt {
   6769  1.1.1.1.4.2  yamt   alpha_expand_epilogue ();
   6770  1.1.1.1.4.2  yamt   DONE;
   6771  1.1.1.1.4.2  yamt })
   6772  1.1.1.1.4.2  yamt 
   6773  1.1.1.1.4.2  yamt (define_expand "builtin_longjmp"
   6774  1.1.1.1.4.2  yamt   [(use (match_operand:DI 0 "register_operand" "r"))]
   6775  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   6776  1.1.1.1.4.2  yamt {
   6777  1.1.1.1.4.2  yamt   /* The elements of the buffer are, in order:  */
   6778  1.1.1.1.4.2  yamt   rtx fp = gen_rtx_MEM (Pmode, operands[0]);
   6779  1.1.1.1.4.2  yamt   rtx lab = gen_rtx_MEM (Pmode, plus_constant (operands[0], 8));
   6780  1.1.1.1.4.2  yamt   rtx stack = gen_rtx_MEM (Pmode, plus_constant (operands[0], 16));
   6781  1.1.1.1.4.2  yamt   rtx pv = gen_rtx_REG (Pmode, 27);
   6782  1.1.1.1.4.2  yamt 
   6783  1.1.1.1.4.2  yamt   /* This bit is the same as expand_builtin_longjmp.  */
   6784  1.1.1.1.4.2  yamt   emit_move_insn (hard_frame_pointer_rtx, fp);
   6785  1.1.1.1.4.2  yamt   emit_move_insn (pv, lab);
   6786  1.1.1.1.4.2  yamt   emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
   6787  1.1.1.1.4.2  yamt   emit_use (hard_frame_pointer_rtx);
   6788  1.1.1.1.4.2  yamt   emit_use (stack_pointer_rtx);
   6789  1.1.1.1.4.2  yamt 
   6790  1.1.1.1.4.2  yamt   /* Load the label we are jumping through into $27 so that we know
   6791  1.1.1.1.4.2  yamt      where to look for it when we get back to setjmp's function for
   6792  1.1.1.1.4.2  yamt      restoring the gp.  */
   6793  1.1.1.1.4.2  yamt   emit_jump_insn (gen_builtin_longjmp_internal (pv));
   6794  1.1.1.1.4.2  yamt   emit_barrier ();
   6795  1.1.1.1.4.2  yamt   DONE;
   6796  1.1.1.1.4.2  yamt })
   6797  1.1.1.1.4.2  yamt 
   6798  1.1.1.1.4.2  yamt ;; This is effectively a copy of indirect_jump, but constrained such
   6799  1.1.1.1.4.2  yamt ;; that register renaming cannot foil our cunning plan with $27.
   6800  1.1.1.1.4.2  yamt (define_insn "builtin_longjmp_internal"
   6801  1.1.1.1.4.2  yamt   [(set (pc)
   6802  1.1.1.1.4.2  yamt 	(unspec_volatile [(match_operand:DI 0 "register_operand" "c")]
   6803  1.1.1.1.4.2  yamt 			 UNSPECV_LONGJMP))]
   6804  1.1.1.1.4.2  yamt   ""
   6805  1.1.1.1.4.2  yamt   "jmp $31,(%0),0"
   6806  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   6807  1.1.1.1.4.2  yamt 
   6808  1.1.1.1.4.2  yamt (define_expand "builtin_setjmp_receiver"
   6809  1.1.1.1.4.2  yamt   [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)]
   6810  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   6811  1.1.1.1.4.2  yamt   "")
   6812  1.1.1.1.4.2  yamt 
   6813  1.1.1.1.4.2  yamt (define_insn_and_split "*builtin_setjmp_receiver_1"
   6814  1.1.1.1.4.2  yamt   [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR)]
   6815  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   6816  1.1.1.1.4.2  yamt {
   6817  1.1.1.1.4.2  yamt   if (TARGET_EXPLICIT_RELOCS)
   6818  1.1.1.1.4.2  yamt     return "#";
   6819  1.1.1.1.4.2  yamt   else
   6820  1.1.1.1.4.2  yamt     return "br $27,$LSJ%=\n$LSJ%=:\;ldgp $29,0($27)";
   6821  1.1.1.1.4.2  yamt }
   6822  1.1.1.1.4.2  yamt   "&& TARGET_EXPLICIT_RELOCS && reload_completed"
   6823  1.1.1.1.4.2  yamt   [(set (match_dup 1)
   6824  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_dup 2) (match_dup 3)] UNSPECV_LDGP1))
   6825  1.1.1.1.4.2  yamt    (set (match_dup 1)
   6826  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 1) (match_dup 3)] UNSPEC_LDGP2))]
   6827  1.1.1.1.4.2  yamt {
   6828  1.1.1.1.4.2  yamt   if (prev_nonnote_insn (curr_insn) != XEXP (operands[0], 0))
   6829  1.1.1.1.4.2  yamt     emit_insn (gen_rtx_UNSPEC_VOLATILE (VOIDmode, gen_rtvec (1, operands[0]),
   6830  1.1.1.1.4.2  yamt 					UNSPECV_SETJMPR_ER));
   6831  1.1.1.1.4.2  yamt   operands[1] = pic_offset_table_rtx;
   6832  1.1.1.1.4.2  yamt   operands[2] = gen_rtx_REG (Pmode, 27);
   6833  1.1.1.1.4.2  yamt   operands[3] = GEN_INT (alpha_next_sequence_number++);
   6834  1.1.1.1.4.2  yamt }
   6835  1.1.1.1.4.2  yamt   [(set_attr "length" "12")
   6836  1.1.1.1.4.2  yamt    (set_attr "type" "multi")])
   6837  1.1.1.1.4.2  yamt 
   6838  1.1.1.1.4.2  yamt (define_insn "*builtin_setjmp_receiver_er_sl_1"
   6839  1.1.1.1.4.2  yamt   [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR_ER)]
   6840  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF && TARGET_EXPLICIT_RELOCS && TARGET_AS_CAN_SUBTRACT_LABELS"
   6841  1.1.1.1.4.2  yamt   "lda $27,$LSJ%=-%l0($27)\n$LSJ%=:")
   6842  1.1.1.1.4.2  yamt   
   6843  1.1.1.1.4.2  yamt (define_insn "*builtin_setjmp_receiver_er_1"
   6844  1.1.1.1.4.2  yamt   [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR_ER)]
   6845  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF && TARGET_EXPLICIT_RELOCS"
   6846  1.1.1.1.4.2  yamt   "br $27,$LSJ%=\n$LSJ%=:"
   6847  1.1.1.1.4.2  yamt   [(set_attr "type" "ibr")])
   6848  1.1.1.1.4.2  yamt 
   6849  1.1.1.1.4.2  yamt ;; When flag_reorder_blocks_and_partition is in effect, compiler puts
   6850  1.1.1.1.4.2  yamt ;; exception landing pads in a cold section.  To prevent inter-section offset
   6851  1.1.1.1.4.2  yamt ;; calculation, a jump to original landing pad is emitted in the place of the
   6852  1.1.1.1.4.2  yamt ;; original landing pad.  Since landing pad is moved, RA-relative GP
   6853  1.1.1.1.4.2  yamt ;; calculation in the prologue of landing pad breaks.  To solve this problem,
   6854  1.1.1.1.4.2  yamt ;; we use alternative GP load approach, as in the case of TARGET_LD_BUGGY_LDGP.
   6855  1.1.1.1.4.2  yamt 
   6856  1.1.1.1.4.2  yamt (define_expand "exception_receiver"
   6857  1.1.1.1.4.2  yamt   [(unspec_volatile [(match_dup 0)] UNSPECV_EHR)]
   6858  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   6859  1.1.1.1.4.2  yamt {
   6860  1.1.1.1.4.2  yamt   if (TARGET_LD_BUGGY_LDGP || flag_reorder_blocks_and_partition)
   6861  1.1.1.1.4.2  yamt     operands[0] = alpha_gp_save_rtx ();
   6862  1.1.1.1.4.2  yamt   else
   6863  1.1.1.1.4.2  yamt     operands[0] = const0_rtx;
   6864  1.1.1.1.4.2  yamt })
   6865  1.1.1.1.4.2  yamt 
   6866  1.1.1.1.4.2  yamt (define_insn "*exception_receiver_2"
   6867  1.1.1.1.4.2  yamt   [(unspec_volatile [(match_operand:DI 0 "memory_operand" "m")] UNSPECV_EHR)]
   6868  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF 
   6869  1.1.1.1.4.2  yamt    && (TARGET_LD_BUGGY_LDGP || flag_reorder_blocks_and_partition)"
   6870  1.1.1.1.4.2  yamt   "ldq $29,%0"
   6871  1.1.1.1.4.2  yamt   [(set_attr "type" "ild")])
   6872  1.1.1.1.4.2  yamt 
   6873  1.1.1.1.4.2  yamt (define_insn_and_split "*exception_receiver_1"
   6874  1.1.1.1.4.2  yamt   [(unspec_volatile [(const_int 0)] UNSPECV_EHR)]
   6875  1.1.1.1.4.2  yamt   "TARGET_ABI_OSF"
   6876  1.1.1.1.4.2  yamt {
   6877  1.1.1.1.4.2  yamt   if (TARGET_EXPLICIT_RELOCS)
   6878  1.1.1.1.4.2  yamt     return "ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*";
   6879  1.1.1.1.4.2  yamt   else
   6880  1.1.1.1.4.2  yamt     return "ldgp $29,0($26)";
   6881  1.1.1.1.4.2  yamt }
   6882  1.1.1.1.4.2  yamt   "&& TARGET_EXPLICIT_RELOCS && reload_completed"
   6883  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   6884  1.1.1.1.4.2  yamt 	(unspec_volatile:DI [(match_dup 1) (match_dup 2)] UNSPECV_LDGP1))
   6885  1.1.1.1.4.2  yamt    (set (match_dup 0)
   6886  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 0) (match_dup 2)] UNSPEC_LDGP2))]
   6887  1.1.1.1.4.2  yamt {
   6888  1.1.1.1.4.2  yamt   operands[0] = pic_offset_table_rtx;
   6889  1.1.1.1.4.2  yamt   operands[1] = gen_rtx_REG (Pmode, 26);
   6890  1.1.1.1.4.2  yamt   operands[2] = GEN_INT (alpha_next_sequence_number++);
   6891  1.1.1.1.4.2  yamt }
   6892  1.1.1.1.4.2  yamt   [(set_attr "length" "8")
   6893  1.1.1.1.4.2  yamt    (set_attr "type" "multi")])
   6894  1.1.1.1.4.2  yamt 
   6895  1.1.1.1.4.2  yamt (define_expand "nonlocal_goto_receiver"
   6896  1.1.1.1.4.2  yamt   [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)
   6897  1.1.1.1.4.2  yamt    (set (reg:DI 27) (mem:DI (reg:DI 29)))
   6898  1.1.1.1.4.2  yamt    (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)
   6899  1.1.1.1.4.2  yamt    (use (reg:DI 27))]
   6900  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   6901  1.1.1.1.4.2  yamt   "")
   6902  1.1.1.1.4.2  yamt 
   6903  1.1.1.1.4.2  yamt (define_insn "arg_home"
   6904  1.1.1.1.4.2  yamt   [(unspec [(const_int 0)] UNSPEC_ARG_HOME)
   6905  1.1.1.1.4.2  yamt    (use (reg:DI 1))
   6906  1.1.1.1.4.2  yamt    (use (reg:DI 25))
   6907  1.1.1.1.4.2  yamt    (use (reg:DI 16))
   6908  1.1.1.1.4.2  yamt    (use (reg:DI 17))
   6909  1.1.1.1.4.2  yamt    (use (reg:DI 18))
   6910  1.1.1.1.4.2  yamt    (use (reg:DI 19))
   6911  1.1.1.1.4.2  yamt    (use (reg:DI 20))
   6912  1.1.1.1.4.2  yamt    (use (reg:DI 21))
   6913  1.1.1.1.4.2  yamt    (use (reg:DI 48))
   6914  1.1.1.1.4.2  yamt    (use (reg:DI 49))
   6915  1.1.1.1.4.2  yamt    (use (reg:DI 50))
   6916  1.1.1.1.4.2  yamt    (use (reg:DI 51))
   6917  1.1.1.1.4.2  yamt    (use (reg:DI 52))
   6918  1.1.1.1.4.2  yamt    (use (reg:DI 53))
   6919  1.1.1.1.4.2  yamt    (clobber (mem:BLK (const_int 0)))
   6920  1.1.1.1.4.2  yamt    (clobber (reg:DI 24))
   6921  1.1.1.1.4.2  yamt    (clobber (reg:DI 25))
   6922  1.1.1.1.4.2  yamt    (clobber (reg:DI 0))]
   6923  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   6924  1.1.1.1.4.2  yamt   "lda $0,OTS$HOME_ARGS\;ldq $0,8($0)\;jsr $0,OTS$HOME_ARGS"
   6925  1.1.1.1.4.2  yamt   [(set_attr "length" "16")
   6926  1.1.1.1.4.2  yamt    (set_attr "type" "multi")])
   6927  1.1.1.1.4.2  yamt 
   6928  1.1.1.1.4.2  yamt ;; Load the CIW into r2 for calling __T3E_MISMATCH
   6929  1.1.1.1.4.2  yamt 
   6930  1.1.1.1.4.2  yamt (define_expand "umk_mismatch_args"
   6931  1.1.1.1.4.2  yamt   [(set:DI (match_dup 1) (mem:DI (plus:DI (reg:DI 15) (const_int -16))))
   6932  1.1.1.1.4.2  yamt    (set:DI (match_dup 2) (mem:DI (plus:DI (match_dup 1) (const_int -32))))
   6933  1.1.1.1.4.2  yamt    (set:DI (reg:DI 1) (match_operand:DI 0 "const_int_operand" ""))
   6934  1.1.1.1.4.2  yamt    (set:DI (match_dup 3) (plus:DI (mult:DI (reg:DI 25)
   6935  1.1.1.1.4.2  yamt 					   (const_int 8))
   6936  1.1.1.1.4.2  yamt 				  (match_dup 2)))
   6937  1.1.1.1.4.2  yamt    (set:DI (reg:DI 2) (mem:DI (match_dup 3)))]
   6938  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
   6939  1.1.1.1.4.2  yamt {
   6940  1.1.1.1.4.2  yamt   operands[1] = gen_reg_rtx (DImode);
   6941  1.1.1.1.4.2  yamt   operands[2] = gen_reg_rtx (DImode);
   6942  1.1.1.1.4.2  yamt   operands[3] = gen_reg_rtx (DImode);
   6943  1.1.1.1.4.2  yamt })
   6944  1.1.1.1.4.2  yamt 
   6945  1.1.1.1.4.2  yamt (define_insn "arg_home_umk"
   6946  1.1.1.1.4.2  yamt   [(unspec [(const_int 0)] UNSPEC_ARG_HOME)
   6947  1.1.1.1.4.2  yamt    (use (reg:DI 1))
   6948  1.1.1.1.4.2  yamt    (use (reg:DI 2))
   6949  1.1.1.1.4.2  yamt    (use (reg:DI 16))
   6950  1.1.1.1.4.2  yamt    (use (reg:DI 17))
   6951  1.1.1.1.4.2  yamt    (use (reg:DI 18))
   6952  1.1.1.1.4.2  yamt    (use (reg:DI 19))
   6953  1.1.1.1.4.2  yamt    (use (reg:DI 20))
   6954  1.1.1.1.4.2  yamt    (use (reg:DI 21))
   6955  1.1.1.1.4.2  yamt    (use (reg:DI 48))
   6956  1.1.1.1.4.2  yamt    (use (reg:DI 49))
   6957  1.1.1.1.4.2  yamt    (use (reg:DI 50))
   6958  1.1.1.1.4.2  yamt    (use (reg:DI 51))
   6959  1.1.1.1.4.2  yamt    (use (reg:DI 52))
   6960  1.1.1.1.4.2  yamt    (use (reg:DI 53))
   6961  1.1.1.1.4.2  yamt    (clobber (mem:BLK (const_int 0)))
   6962  1.1.1.1.4.2  yamt    (parallel [
   6963  1.1.1.1.4.2  yamt    (clobber (reg:DI 22))
   6964  1.1.1.1.4.2  yamt    (clobber (reg:DI 23))
   6965  1.1.1.1.4.2  yamt    (clobber (reg:DI 24))
   6966  1.1.1.1.4.2  yamt    (clobber (reg:DI 0))
   6967  1.1.1.1.4.2  yamt    (clobber (reg:DI 1))
   6968  1.1.1.1.4.2  yamt    (clobber (reg:DI 2))
   6969  1.1.1.1.4.2  yamt    (clobber (reg:DI 3))
   6970  1.1.1.1.4.2  yamt    (clobber (reg:DI 4))
   6971  1.1.1.1.4.2  yamt    (clobber (reg:DI 5))
   6972  1.1.1.1.4.2  yamt    (clobber (reg:DI 6))
   6973  1.1.1.1.4.2  yamt    (clobber (reg:DI 7))
   6974  1.1.1.1.4.2  yamt    (clobber (reg:DI 8))])]
   6975  1.1.1.1.4.2  yamt   "TARGET_ABI_UNICOSMK"
   6976  1.1.1.1.4.2  yamt   "laum $4,__T3E_MISMATCH($31)\;sll $4,32,$4\;lalm $4,__T3E_MISMATCH($4)\;lal $4,__T3E_MISMATCH($4)\;jsr $3,($4)"
   6977  1.1.1.1.4.2  yamt   [(set_attr "length" "16")
   6978  1.1.1.1.4.2  yamt    (set_attr "type" "multi")])
   6979  1.1.1.1.4.2  yamt 
   6980  1.1.1.1.4.2  yamt ;; Prefetch data.  
   6981  1.1.1.1.4.2  yamt ;;
   6982  1.1.1.1.4.2  yamt ;; On EV4, these instructions are nops -- no load occurs.
   6983  1.1.1.1.4.2  yamt ;;
   6984  1.1.1.1.4.2  yamt ;; On EV5, these instructions act as a normal load, and thus can trap
   6985  1.1.1.1.4.2  yamt ;; if the address is invalid.  The OS may (or may not) handle this in
   6986  1.1.1.1.4.2  yamt ;; the entMM fault handler and suppress the fault.  If so, then this
   6987  1.1.1.1.4.2  yamt ;; has the effect of a read prefetch instruction.
   6988  1.1.1.1.4.2  yamt ;;
   6989  1.1.1.1.4.2  yamt ;; On EV6, these become official prefetch instructions.
   6990  1.1.1.1.4.2  yamt 
   6991  1.1.1.1.4.2  yamt (define_insn "prefetch"
   6992  1.1.1.1.4.2  yamt   [(prefetch (match_operand:DI 0 "address_operand" "p")
   6993  1.1.1.1.4.2  yamt 	     (match_operand:DI 1 "const_int_operand" "n")
   6994  1.1.1.1.4.2  yamt 	     (match_operand:DI 2 "const_int_operand" "n"))]
   6995  1.1.1.1.4.2  yamt   "TARGET_FIXUP_EV5_PREFETCH || alpha_cpu == PROCESSOR_EV6"
   6996  1.1.1.1.4.2  yamt {
   6997  1.1.1.1.4.2  yamt   /* Interpret "no temporal locality" as this data should be evicted once
   6998  1.1.1.1.4.2  yamt      it is used.  The "evict next" alternatives load the data into the cache
   6999  1.1.1.1.4.2  yamt      and leave the LRU eviction counter pointing to that block.  */
   7000  1.1.1.1.4.2  yamt   static const char * const alt[2][2] = {
   7001  1.1.1.1.4.2  yamt     { 
   7002  1.1.1.1.4.2  yamt       "ldq $31,%a0",		/* read, evict next */
   7003  1.1.1.1.4.2  yamt       "ldl $31,%a0",		/* read, evict last */
   7004  1.1.1.1.4.2  yamt     },
   7005  1.1.1.1.4.2  yamt     {
   7006  1.1.1.1.4.2  yamt       "ldt $f31,%a0",		/* write, evict next */
   7007  1.1.1.1.4.2  yamt       "lds $f31,%a0",		/* write, evict last */
   7008  1.1.1.1.4.2  yamt     }
   7009  1.1.1.1.4.2  yamt   };
   7010  1.1.1.1.4.2  yamt 
   7011  1.1.1.1.4.2  yamt   bool write = INTVAL (operands[1]) != 0;
   7012  1.1.1.1.4.2  yamt   bool lru = INTVAL (operands[2]) != 0;
   7013  1.1.1.1.4.2  yamt 
   7014  1.1.1.1.4.2  yamt   return alt[write][lru];
   7015  1.1.1.1.4.2  yamt }
   7016  1.1.1.1.4.2  yamt   [(set_attr "type" "ild")])
   7017  1.1.1.1.4.2  yamt 
   7018  1.1.1.1.4.2  yamt ;; Close the trap shadow of preceding instructions.  This is generated
   7019  1.1.1.1.4.2  yamt ;; by alpha_reorg.
   7020  1.1.1.1.4.2  yamt 
   7021  1.1.1.1.4.2  yamt (define_insn "trapb"
   7022  1.1.1.1.4.2  yamt   [(unspec_volatile [(const_int 0)] UNSPECV_TRAPB)]
   7023  1.1.1.1.4.2  yamt   ""
   7024  1.1.1.1.4.2  yamt   "trapb"
   7025  1.1.1.1.4.2  yamt   [(set_attr "type" "misc")])
   7026  1.1.1.1.4.2  yamt 
   7027  1.1.1.1.4.2  yamt ;; No-op instructions used by machine-dependent reorg to preserve
   7028  1.1.1.1.4.2  yamt ;; alignment for instruction issue.
   7029  1.1.1.1.4.2  yamt ;; The Unicos/Mk assembler does not support these opcodes.
   7030  1.1.1.1.4.2  yamt 
   7031  1.1.1.1.4.2  yamt (define_insn "nop"
   7032  1.1.1.1.4.2  yamt   [(const_int 0)]
   7033  1.1.1.1.4.2  yamt   ""
   7034  1.1.1.1.4.2  yamt   "bis $31,$31,$31"
   7035  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   7036  1.1.1.1.4.2  yamt 
   7037  1.1.1.1.4.2  yamt (define_insn "fnop"
   7038  1.1.1.1.4.2  yamt   [(const_int 1)]
   7039  1.1.1.1.4.2  yamt   "TARGET_FP"
   7040  1.1.1.1.4.2  yamt   "cpys $f31,$f31,$f31"
   7041  1.1.1.1.4.2  yamt   [(set_attr "type" "fcpys")])
   7042  1.1.1.1.4.2  yamt 
   7043  1.1.1.1.4.2  yamt (define_insn "unop"
   7044  1.1.1.1.4.2  yamt   [(const_int 2)]
   7045  1.1.1.1.4.2  yamt   ""
   7046  1.1.1.1.4.2  yamt   "ldq_u $31,0($30)")
   7047  1.1.1.1.4.2  yamt 
   7048  1.1.1.1.4.2  yamt ;; On Unicos/Mk we use a macro for aligning code.
   7049  1.1.1.1.4.2  yamt 
   7050  1.1.1.1.4.2  yamt (define_insn "realign"
   7051  1.1.1.1.4.2  yamt   [(unspec_volatile [(match_operand 0 "immediate_operand" "i")]
   7052  1.1.1.1.4.2  yamt 		    UNSPECV_REALIGN)]
   7053  1.1.1.1.4.2  yamt   ""
   7054  1.1.1.1.4.2  yamt {
   7055  1.1.1.1.4.2  yamt   if (TARGET_ABI_UNICOSMK)
   7056  1.1.1.1.4.2  yamt     return "gcc@code@align %0";
   7057  1.1.1.1.4.2  yamt   else
   7058  1.1.1.1.4.2  yamt     return ".align %0 #realign";
   7059  1.1.1.1.4.2  yamt })
   7060  1.1.1.1.4.2  yamt 
   7062  1.1.1.1.4.2  yamt ;; Instructions to be emitted from __builtins.
   7063  1.1.1.1.4.2  yamt 
   7064  1.1.1.1.4.2  yamt (define_insn "builtin_cmpbge"
   7065  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   7066  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rJ")
   7067  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "reg_or_8bit_operand" "rI")]
   7068  1.1.1.1.4.2  yamt 		   UNSPEC_CMPBGE))]
   7069  1.1.1.1.4.2  yamt   ""
   7070  1.1.1.1.4.2  yamt   "cmpbge %r1,%2,%0"
   7071  1.1.1.1.4.2  yamt   ;; The EV6 data sheets list this as ILOG.  OTOH, EV6 doesn't 
   7072  1.1.1.1.4.2  yamt   ;; actually differentiate between ILOG and ICMP in the schedule.
   7073  1.1.1.1.4.2  yamt   [(set_attr "type" "icmp")])
   7074  1.1.1.1.4.2  yamt 
   7075  1.1.1.1.4.2  yamt (define_expand "builtin_extbl"
   7076  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7077  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7078  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7079  1.1.1.1.4.2  yamt   ""
   7080  1.1.1.1.4.2  yamt {
   7081  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7082  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7083  1.1.1.1.4.2  yamt     gen = gen_extxl_be;
   7084  1.1.1.1.4.2  yamt   else
   7085  1.1.1.1.4.2  yamt     gen = gen_extxl_le;
   7086  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], GEN_INT (8), operands[2]));
   7087  1.1.1.1.4.2  yamt   DONE;
   7088  1.1.1.1.4.2  yamt })
   7089  1.1.1.1.4.2  yamt 
   7090  1.1.1.1.4.2  yamt (define_expand "builtin_extwl"
   7091  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7092  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7093  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7094  1.1.1.1.4.2  yamt   ""
   7095  1.1.1.1.4.2  yamt {
   7096  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7097  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7098  1.1.1.1.4.2  yamt     gen = gen_extxl_be;
   7099  1.1.1.1.4.2  yamt   else
   7100  1.1.1.1.4.2  yamt     gen = gen_extxl_le;
   7101  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], GEN_INT (16), operands[2]));
   7102  1.1.1.1.4.2  yamt   DONE;
   7103  1.1.1.1.4.2  yamt })
   7104  1.1.1.1.4.2  yamt 
   7105  1.1.1.1.4.2  yamt (define_expand "builtin_extll"
   7106  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7107  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7108  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7109  1.1.1.1.4.2  yamt   ""
   7110  1.1.1.1.4.2  yamt {
   7111  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7112  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7113  1.1.1.1.4.2  yamt     gen = gen_extxl_be;
   7114  1.1.1.1.4.2  yamt   else
   7115  1.1.1.1.4.2  yamt     gen = gen_extxl_le;
   7116  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], GEN_INT (32), operands[2]));
   7117  1.1.1.1.4.2  yamt   DONE;
   7118  1.1.1.1.4.2  yamt })
   7119  1.1.1.1.4.2  yamt 
   7120  1.1.1.1.4.2  yamt (define_expand "builtin_extql"
   7121  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7122  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7123  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7124  1.1.1.1.4.2  yamt   ""
   7125  1.1.1.1.4.2  yamt {
   7126  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7127  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7128  1.1.1.1.4.2  yamt     gen = gen_extxl_be;
   7129  1.1.1.1.4.2  yamt   else
   7130  1.1.1.1.4.2  yamt     gen = gen_extxl_le;
   7131  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], GEN_INT (64), operands[2]));
   7132  1.1.1.1.4.2  yamt   DONE;
   7133  1.1.1.1.4.2  yamt })
   7134  1.1.1.1.4.2  yamt 
   7135  1.1.1.1.4.2  yamt (define_expand "builtin_extwh"
   7136  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7137  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7138  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7139  1.1.1.1.4.2  yamt   ""
   7140  1.1.1.1.4.2  yamt {
   7141  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx);
   7142  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7143  1.1.1.1.4.2  yamt     gen = gen_extwh_be;
   7144  1.1.1.1.4.2  yamt   else
   7145  1.1.1.1.4.2  yamt     gen = gen_extwh_le;
   7146  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7147  1.1.1.1.4.2  yamt   DONE;
   7148  1.1.1.1.4.2  yamt })
   7149  1.1.1.1.4.2  yamt 
   7150  1.1.1.1.4.2  yamt (define_expand "builtin_extlh"
   7151  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7152  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7153  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7154  1.1.1.1.4.2  yamt   ""
   7155  1.1.1.1.4.2  yamt {
   7156  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx);
   7157  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7158  1.1.1.1.4.2  yamt     gen = gen_extlh_be;
   7159  1.1.1.1.4.2  yamt   else
   7160  1.1.1.1.4.2  yamt     gen = gen_extlh_le;
   7161  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7162  1.1.1.1.4.2  yamt   DONE;
   7163  1.1.1.1.4.2  yamt })
   7164  1.1.1.1.4.2  yamt 
   7165  1.1.1.1.4.2  yamt (define_expand "builtin_extqh"
   7166  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7167  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7168  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7169  1.1.1.1.4.2  yamt   ""
   7170  1.1.1.1.4.2  yamt {
   7171  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx);
   7172  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7173  1.1.1.1.4.2  yamt     gen = gen_extqh_be;
   7174  1.1.1.1.4.2  yamt   else
   7175  1.1.1.1.4.2  yamt     gen = gen_extqh_le;
   7176  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7177  1.1.1.1.4.2  yamt   DONE;
   7178  1.1.1.1.4.2  yamt })
   7179  1.1.1.1.4.2  yamt 
   7180  1.1.1.1.4.2  yamt (define_expand "builtin_insbl"
   7181  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7182  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7183  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7184  1.1.1.1.4.2  yamt   ""
   7185  1.1.1.1.4.2  yamt {
   7186  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx);
   7187  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7188  1.1.1.1.4.2  yamt     gen = gen_insbl_be;
   7189  1.1.1.1.4.2  yamt   else
   7190  1.1.1.1.4.2  yamt     gen = gen_insbl_le;
   7191  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (QImode, operands[1]);
   7192  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7193  1.1.1.1.4.2  yamt   DONE;
   7194  1.1.1.1.4.2  yamt })
   7195  1.1.1.1.4.2  yamt 
   7196  1.1.1.1.4.2  yamt (define_expand "builtin_inswl"
   7197  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7198  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7199  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7200  1.1.1.1.4.2  yamt   ""
   7201  1.1.1.1.4.2  yamt {
   7202  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx);
   7203  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7204  1.1.1.1.4.2  yamt     gen = gen_inswl_be;
   7205  1.1.1.1.4.2  yamt   else
   7206  1.1.1.1.4.2  yamt     gen = gen_inswl_le;
   7207  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (HImode, operands[1]);
   7208  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7209  1.1.1.1.4.2  yamt   DONE;
   7210  1.1.1.1.4.2  yamt })
   7211  1.1.1.1.4.2  yamt 
   7212  1.1.1.1.4.2  yamt (define_expand "builtin_insll"
   7213  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7214  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7215  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7216  1.1.1.1.4.2  yamt   ""
   7217  1.1.1.1.4.2  yamt {
   7218  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx);
   7219  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7220  1.1.1.1.4.2  yamt     gen = gen_insll_be;
   7221  1.1.1.1.4.2  yamt   else
   7222  1.1.1.1.4.2  yamt     gen = gen_insll_le;
   7223  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (SImode, operands[1]);
   7224  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7225  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7226  1.1.1.1.4.2  yamt   DONE;
   7227  1.1.1.1.4.2  yamt })
   7228  1.1.1.1.4.2  yamt 
   7229  1.1.1.1.4.2  yamt (define_expand "builtin_insql"
   7230  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7231  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7232  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7233  1.1.1.1.4.2  yamt   ""
   7234  1.1.1.1.4.2  yamt {
   7235  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx);
   7236  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7237  1.1.1.1.4.2  yamt     gen = gen_insql_be;
   7238  1.1.1.1.4.2  yamt   else
   7239  1.1.1.1.4.2  yamt     gen = gen_insql_le;
   7240  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], operands[2]));
   7241  1.1.1.1.4.2  yamt   DONE;
   7242  1.1.1.1.4.2  yamt })
   7243  1.1.1.1.4.2  yamt 
   7244  1.1.1.1.4.2  yamt (define_expand "builtin_inswh"
   7245  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7246  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7247  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7248  1.1.1.1.4.2  yamt   ""
   7249  1.1.1.1.4.2  yamt {
   7250  1.1.1.1.4.2  yamt   emit_insn (gen_insxh (operands[0], operands[1], GEN_INT (16), operands[2]));
   7251  1.1.1.1.4.2  yamt   DONE;
   7252  1.1.1.1.4.2  yamt })
   7253  1.1.1.1.4.2  yamt 
   7254  1.1.1.1.4.2  yamt (define_expand "builtin_inslh"
   7255  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7256  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7257  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7258  1.1.1.1.4.2  yamt   ""
   7259  1.1.1.1.4.2  yamt {
   7260  1.1.1.1.4.2  yamt   emit_insn (gen_insxh (operands[0], operands[1], GEN_INT (32), operands[2]));
   7261  1.1.1.1.4.2  yamt   DONE;
   7262  1.1.1.1.4.2  yamt })
   7263  1.1.1.1.4.2  yamt 
   7264  1.1.1.1.4.2  yamt (define_expand "builtin_insqh"
   7265  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7266  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7267  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7268  1.1.1.1.4.2  yamt   ""
   7269  1.1.1.1.4.2  yamt {
   7270  1.1.1.1.4.2  yamt   emit_insn (gen_insxh (operands[0], operands[1], GEN_INT (64), operands[2]));
   7271  1.1.1.1.4.2  yamt   DONE;
   7272  1.1.1.1.4.2  yamt })
   7273  1.1.1.1.4.2  yamt 
   7274  1.1.1.1.4.2  yamt (define_expand "builtin_mskbl"
   7275  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7276  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7277  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7278  1.1.1.1.4.2  yamt   ""
   7279  1.1.1.1.4.2  yamt {
   7280  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7281  1.1.1.1.4.2  yamt   rtx mask;
   7282  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7283  1.1.1.1.4.2  yamt     gen = gen_mskxl_be;
   7284  1.1.1.1.4.2  yamt   else
   7285  1.1.1.1.4.2  yamt     gen = gen_mskxl_le;
   7286  1.1.1.1.4.2  yamt   mask = GEN_INT (0xff);
   7287  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
   7288  1.1.1.1.4.2  yamt   DONE;
   7289  1.1.1.1.4.2  yamt })
   7290  1.1.1.1.4.2  yamt 
   7291  1.1.1.1.4.2  yamt (define_expand "builtin_mskwl"
   7292  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7293  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7294  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7295  1.1.1.1.4.2  yamt   ""
   7296  1.1.1.1.4.2  yamt {
   7297  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7298  1.1.1.1.4.2  yamt   rtx mask;
   7299  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7300  1.1.1.1.4.2  yamt     gen = gen_mskxl_be;
   7301  1.1.1.1.4.2  yamt   else
   7302  1.1.1.1.4.2  yamt     gen = gen_mskxl_le;
   7303  1.1.1.1.4.2  yamt   mask = GEN_INT (0xffff);
   7304  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
   7305  1.1.1.1.4.2  yamt   DONE;
   7306  1.1.1.1.4.2  yamt })
   7307  1.1.1.1.4.2  yamt 
   7308  1.1.1.1.4.2  yamt (define_expand "builtin_mskll"
   7309  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7310  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7311  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7312  1.1.1.1.4.2  yamt   ""
   7313  1.1.1.1.4.2  yamt {
   7314  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7315  1.1.1.1.4.2  yamt   rtx mask;
   7316  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7317  1.1.1.1.4.2  yamt     gen = gen_mskxl_be;
   7318  1.1.1.1.4.2  yamt   else
   7319  1.1.1.1.4.2  yamt     gen = gen_mskxl_le;
   7320  1.1.1.1.4.2  yamt   mask = immed_double_const (0xffffffff, 0, DImode);
   7321  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
   7322  1.1.1.1.4.2  yamt   DONE;
   7323  1.1.1.1.4.2  yamt })
   7324  1.1.1.1.4.2  yamt 
   7325  1.1.1.1.4.2  yamt (define_expand "builtin_mskql"
   7326  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7327  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7328  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7329  1.1.1.1.4.2  yamt   ""
   7330  1.1.1.1.4.2  yamt {
   7331  1.1.1.1.4.2  yamt   rtx (*gen) (rtx, rtx, rtx, rtx);
   7332  1.1.1.1.4.2  yamt   rtx mask;
   7333  1.1.1.1.4.2  yamt   if (WORDS_BIG_ENDIAN)
   7334  1.1.1.1.4.2  yamt     gen = gen_mskxl_be;
   7335  1.1.1.1.4.2  yamt   else
   7336  1.1.1.1.4.2  yamt     gen = gen_mskxl_le;
   7337  1.1.1.1.4.2  yamt   mask = constm1_rtx;
   7338  1.1.1.1.4.2  yamt   emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
   7339  1.1.1.1.4.2  yamt   DONE;
   7340  1.1.1.1.4.2  yamt })
   7341  1.1.1.1.4.2  yamt 
   7342  1.1.1.1.4.2  yamt (define_expand "builtin_mskwh"
   7343  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7344  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7345  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7346  1.1.1.1.4.2  yamt   ""
   7347  1.1.1.1.4.2  yamt {
   7348  1.1.1.1.4.2  yamt   emit_insn (gen_mskxh (operands[0], operands[1], GEN_INT (16), operands[2]));
   7349  1.1.1.1.4.2  yamt   DONE;
   7350  1.1.1.1.4.2  yamt })
   7351  1.1.1.1.4.2  yamt 
   7352  1.1.1.1.4.2  yamt (define_expand "builtin_msklh"
   7353  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7354  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7355  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7356  1.1.1.1.4.2  yamt   ""
   7357  1.1.1.1.4.2  yamt {
   7358  1.1.1.1.4.2  yamt   emit_insn (gen_mskxh (operands[0], operands[1], GEN_INT (32), operands[2]));
   7359  1.1.1.1.4.2  yamt   DONE;
   7360  1.1.1.1.4.2  yamt })
   7361  1.1.1.1.4.2  yamt 
   7362  1.1.1.1.4.2  yamt (define_expand "builtin_mskqh"
   7363  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7364  1.1.1.1.4.2  yamt    (match_operand:DI 1 "register_operand" "")
   7365  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_8bit_operand" "")]
   7366  1.1.1.1.4.2  yamt   ""
   7367  1.1.1.1.4.2  yamt {
   7368  1.1.1.1.4.2  yamt   emit_insn (gen_mskxh (operands[0], operands[1], GEN_INT (64), operands[2]));
   7369  1.1.1.1.4.2  yamt   DONE;
   7370  1.1.1.1.4.2  yamt })
   7371  1.1.1.1.4.2  yamt 
   7372  1.1.1.1.4.2  yamt (define_expand "builtin_zap"
   7373  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7374  1.1.1.1.4.2  yamt 	(and:DI (unspec:DI
   7375  1.1.1.1.4.2  yamt 		  [(match_operand:DI 2 "reg_or_cint_operand" "")]
   7376  1.1.1.1.4.2  yamt 		  UNSPEC_ZAP)
   7377  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "reg_or_cint_operand" "")))]
   7378  1.1.1.1.4.2  yamt   ""
   7379  1.1.1.1.4.2  yamt {
   7380  1.1.1.1.4.2  yamt   if (CONST_INT_P (operands[2]))
   7381  1.1.1.1.4.2  yamt     {
   7382  1.1.1.1.4.2  yamt       rtx mask = alpha_expand_zap_mask (INTVAL (operands[2]));
   7383  1.1.1.1.4.2  yamt 
   7384  1.1.1.1.4.2  yamt       if (mask == const0_rtx)
   7385  1.1.1.1.4.2  yamt 	{
   7386  1.1.1.1.4.2  yamt 	  emit_move_insn (operands[0], const0_rtx);
   7387  1.1.1.1.4.2  yamt 	  DONE;
   7388  1.1.1.1.4.2  yamt 	}
   7389  1.1.1.1.4.2  yamt       if (mask == constm1_rtx)
   7390  1.1.1.1.4.2  yamt 	{
   7391  1.1.1.1.4.2  yamt 	  emit_move_insn (operands[0], operands[1]);
   7392  1.1.1.1.4.2  yamt 	  DONE;
   7393  1.1.1.1.4.2  yamt 	}
   7394  1.1.1.1.4.2  yamt 
   7395  1.1.1.1.4.2  yamt       operands[1] = force_reg (DImode, operands[1]);
   7396  1.1.1.1.4.2  yamt       emit_insn (gen_anddi3 (operands[0], operands[1], mask));
   7397  1.1.1.1.4.2  yamt       DONE;
   7398  1.1.1.1.4.2  yamt     }
   7399  1.1.1.1.4.2  yamt 
   7400  1.1.1.1.4.2  yamt   operands[1] = force_reg (DImode, operands[1]);
   7401  1.1.1.1.4.2  yamt   operands[2] = gen_lowpart (QImode, operands[2]);
   7402  1.1.1.1.4.2  yamt })
   7403  1.1.1.1.4.2  yamt 
   7404  1.1.1.1.4.2  yamt (define_insn "*builtin_zap_1"
   7405  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r,r,r,r")
   7406  1.1.1.1.4.2  yamt 	(and:DI (unspec:DI
   7407  1.1.1.1.4.2  yamt 		  [(match_operand:QI 2 "reg_or_cint_operand" "n,n,r,r")]
   7408  1.1.1.1.4.2  yamt 		  UNSPEC_ZAP)
   7409  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "reg_or_cint_operand" "n,r,J,r")))]
   7410  1.1.1.1.4.2  yamt   ""
   7411  1.1.1.1.4.2  yamt   "@
   7412  1.1.1.1.4.2  yamt    #
   7413  1.1.1.1.4.2  yamt    #
   7414  1.1.1.1.4.2  yamt    bis $31,$31,%0
   7415  1.1.1.1.4.2  yamt    zap %r1,%2,%0"
   7416  1.1.1.1.4.2  yamt   [(set_attr "type" "shift,shift,ilog,shift")])
   7417  1.1.1.1.4.2  yamt 
   7418  1.1.1.1.4.2  yamt (define_split
   7419  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7420  1.1.1.1.4.2  yamt 	(and:DI (unspec:DI
   7421  1.1.1.1.4.2  yamt 		  [(match_operand:QI 2 "const_int_operand" "")]
   7422  1.1.1.1.4.2  yamt 		  UNSPEC_ZAP)
   7423  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "const_int_operand" "")))]
   7424  1.1.1.1.4.2  yamt   ""
   7425  1.1.1.1.4.2  yamt   [(const_int 0)]
   7426  1.1.1.1.4.2  yamt {
   7427  1.1.1.1.4.2  yamt   rtx mask = alpha_expand_zap_mask (INTVAL (operands[2]));
   7428  1.1.1.1.4.2  yamt   if (HOST_BITS_PER_WIDE_INT >= 64 || CONST_INT_P (mask))
   7429  1.1.1.1.4.2  yamt     operands[1] = gen_int_mode (INTVAL (operands[1]) & INTVAL (mask), DImode);
   7430  1.1.1.1.4.2  yamt   else
   7431  1.1.1.1.4.2  yamt     {
   7432  1.1.1.1.4.2  yamt       HOST_WIDE_INT c_lo = INTVAL (operands[1]);
   7433  1.1.1.1.4.2  yamt       HOST_WIDE_INT c_hi = (c_lo < 0 ? -1 : 0);
   7434  1.1.1.1.4.2  yamt       operands[1] = immed_double_const (c_lo & CONST_DOUBLE_LOW (mask),
   7435  1.1.1.1.4.2  yamt 					c_hi & CONST_DOUBLE_HIGH (mask),
   7436  1.1.1.1.4.2  yamt 					DImode);
   7437  1.1.1.1.4.2  yamt     }
   7438  1.1.1.1.4.2  yamt   emit_move_insn (operands[0], operands[1]);
   7439  1.1.1.1.4.2  yamt   DONE;
   7440  1.1.1.1.4.2  yamt })
   7441  1.1.1.1.4.2  yamt 
   7442  1.1.1.1.4.2  yamt (define_split
   7443  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7444  1.1.1.1.4.2  yamt 	(and:DI (unspec:DI
   7445  1.1.1.1.4.2  yamt 		  [(match_operand:QI 2 "const_int_operand" "")]
   7446  1.1.1.1.4.2  yamt 		  UNSPEC_ZAP)
   7447  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "register_operand" "")))]
   7448  1.1.1.1.4.2  yamt   ""
   7449  1.1.1.1.4.2  yamt   [(set (match_dup 0)
   7450  1.1.1.1.4.2  yamt 	(and:DI (match_dup 1) (match_dup 2)))]
   7451  1.1.1.1.4.2  yamt {
   7452  1.1.1.1.4.2  yamt   operands[2] = alpha_expand_zap_mask (INTVAL (operands[2]));
   7453  1.1.1.1.4.2  yamt   if (operands[2] == const0_rtx)
   7454  1.1.1.1.4.2  yamt     {
   7455  1.1.1.1.4.2  yamt       emit_move_insn (operands[0], const0_rtx);
   7456  1.1.1.1.4.2  yamt       DONE;
   7457  1.1.1.1.4.2  yamt     }
   7458  1.1.1.1.4.2  yamt   if (operands[2] == constm1_rtx)
   7459  1.1.1.1.4.2  yamt     {
   7460  1.1.1.1.4.2  yamt       emit_move_insn (operands[0], operands[1]);
   7461  1.1.1.1.4.2  yamt       DONE;
   7462  1.1.1.1.4.2  yamt     }
   7463  1.1.1.1.4.2  yamt })
   7464  1.1.1.1.4.2  yamt 
   7465  1.1.1.1.4.2  yamt (define_expand "builtin_zapnot"
   7466  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7467  1.1.1.1.4.2  yamt 	(and:DI (unspec:DI
   7468  1.1.1.1.4.2  yamt 		  [(not:QI (match_operand:DI 2 "reg_or_cint_operand" ""))]
   7469  1.1.1.1.4.2  yamt 		  UNSPEC_ZAP)
   7470  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "reg_or_cint_operand" "")))]
   7471  1.1.1.1.4.2  yamt   ""
   7472  1.1.1.1.4.2  yamt {
   7473  1.1.1.1.4.2  yamt   if (CONST_INT_P (operands[2]))
   7474  1.1.1.1.4.2  yamt     {
   7475  1.1.1.1.4.2  yamt       rtx mask = alpha_expand_zap_mask (~ INTVAL (operands[2]));
   7476  1.1.1.1.4.2  yamt 
   7477  1.1.1.1.4.2  yamt       if (mask == const0_rtx)
   7478  1.1.1.1.4.2  yamt 	{
   7479  1.1.1.1.4.2  yamt 	  emit_move_insn (operands[0], const0_rtx);
   7480  1.1.1.1.4.2  yamt 	  DONE;
   7481  1.1.1.1.4.2  yamt 	}
   7482  1.1.1.1.4.2  yamt       if (mask == constm1_rtx)
   7483  1.1.1.1.4.2  yamt 	{
   7484  1.1.1.1.4.2  yamt 	  emit_move_insn (operands[0], operands[1]);
   7485  1.1.1.1.4.2  yamt 	  DONE;
   7486  1.1.1.1.4.2  yamt 	}
   7487  1.1.1.1.4.2  yamt 
   7488  1.1.1.1.4.2  yamt       operands[1] = force_reg (DImode, operands[1]);
   7489  1.1.1.1.4.2  yamt       emit_insn (gen_anddi3 (operands[0], operands[1], mask));
   7490  1.1.1.1.4.2  yamt       DONE;
   7491  1.1.1.1.4.2  yamt     }
   7492  1.1.1.1.4.2  yamt 
   7493  1.1.1.1.4.2  yamt   operands[1] = force_reg (DImode, operands[1]);
   7494  1.1.1.1.4.2  yamt   operands[2] = gen_lowpart (QImode, operands[2]);
   7495  1.1.1.1.4.2  yamt })
   7496  1.1.1.1.4.2  yamt 
   7497  1.1.1.1.4.2  yamt (define_insn "*builtin_zapnot_1"
   7498  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   7499  1.1.1.1.4.2  yamt 	(and:DI (unspec:DI
   7500  1.1.1.1.4.2  yamt                   [(not:QI (match_operand:QI 2 "register_operand" "r"))]
   7501  1.1.1.1.4.2  yamt                   UNSPEC_ZAP)
   7502  1.1.1.1.4.2  yamt 		(match_operand:DI 1 "reg_or_0_operand" "rJ")))]
   7503  1.1.1.1.4.2  yamt   ""
   7504  1.1.1.1.4.2  yamt   "zapnot %r1,%2,%0"
   7505  1.1.1.1.4.2  yamt   [(set_attr "type" "shift")])
   7506  1.1.1.1.4.2  yamt 
   7507  1.1.1.1.4.2  yamt (define_insn "builtin_amask"
   7508  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   7509  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "reg_or_8bit_operand" "rI")]
   7510  1.1.1.1.4.2  yamt 		   UNSPEC_AMASK))]
   7511  1.1.1.1.4.2  yamt   ""
   7512  1.1.1.1.4.2  yamt   "amask %1,%0"
   7513  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   7514  1.1.1.1.4.2  yamt 
   7515  1.1.1.1.4.2  yamt (define_insn "builtin_implver"
   7516  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   7517  1.1.1.1.4.2  yamt   	(unspec:DI [(const_int 0)] UNSPEC_IMPLVER))]
   7518  1.1.1.1.4.2  yamt   ""
   7519  1.1.1.1.4.2  yamt   "implver %0"
   7520  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   7521  1.1.1.1.4.2  yamt 
   7522  1.1.1.1.4.2  yamt (define_insn "builtin_rpcc"
   7523  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   7524  1.1.1.1.4.2  yamt   	(unspec_volatile:DI [(const_int 0)] UNSPECV_RPCC))]
   7525  1.1.1.1.4.2  yamt   ""
   7526  1.1.1.1.4.2  yamt   "rpcc %0"
   7527  1.1.1.1.4.2  yamt   [(set_attr "type" "ilog")])
   7528  1.1.1.1.4.2  yamt 
   7529  1.1.1.1.4.2  yamt (define_expand "builtin_minub8"
   7530  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7531  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7532  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7533  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7534  1.1.1.1.4.2  yamt {
   7535  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_uminv8qi3, V8QImode, operands[0],
   7536  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7537  1.1.1.1.4.2  yamt   DONE;
   7538  1.1.1.1.4.2  yamt })
   7539  1.1.1.1.4.2  yamt 
   7540  1.1.1.1.4.2  yamt (define_expand "builtin_minsb8"
   7541  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7542  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7543  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7544  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7545  1.1.1.1.4.2  yamt {
   7546  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_sminv8qi3, V8QImode, operands[0],
   7547  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7548  1.1.1.1.4.2  yamt   DONE;
   7549  1.1.1.1.4.2  yamt })
   7550  1.1.1.1.4.2  yamt 
   7551  1.1.1.1.4.2  yamt (define_expand "builtin_minuw4"
   7552  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7553  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7554  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7555  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7556  1.1.1.1.4.2  yamt {
   7557  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_uminv4hi3, V4HImode, operands[0],
   7558  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7559  1.1.1.1.4.2  yamt   DONE;
   7560  1.1.1.1.4.2  yamt })
   7561  1.1.1.1.4.2  yamt 
   7562  1.1.1.1.4.2  yamt (define_expand "builtin_minsw4"
   7563  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7564  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7565  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7566  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7567  1.1.1.1.4.2  yamt {
   7568  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_sminv4hi3, V4HImode, operands[0],
   7569  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7570  1.1.1.1.4.2  yamt   DONE;
   7571  1.1.1.1.4.2  yamt })
   7572  1.1.1.1.4.2  yamt 
   7573  1.1.1.1.4.2  yamt (define_expand "builtin_maxub8"
   7574  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7575  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7576  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7577  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7578  1.1.1.1.4.2  yamt {
   7579  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_umaxv8qi3, V8QImode, operands[0],
   7580  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7581  1.1.1.1.4.2  yamt   DONE;
   7582  1.1.1.1.4.2  yamt })
   7583  1.1.1.1.4.2  yamt 
   7584  1.1.1.1.4.2  yamt (define_expand "builtin_maxsb8"
   7585  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7586  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7587  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7588  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7589  1.1.1.1.4.2  yamt {
   7590  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_smaxv8qi3, V8QImode, operands[0],
   7591  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7592  1.1.1.1.4.2  yamt   DONE;
   7593  1.1.1.1.4.2  yamt })
   7594  1.1.1.1.4.2  yamt 
   7595  1.1.1.1.4.2  yamt (define_expand "builtin_maxuw4"
   7596  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7597  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7598  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7599  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7600  1.1.1.1.4.2  yamt {
   7601  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_umaxv4hi3, V4HImode, operands[0],
   7602  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7603  1.1.1.1.4.2  yamt   DONE;
   7604  1.1.1.1.4.2  yamt })
   7605  1.1.1.1.4.2  yamt 
   7606  1.1.1.1.4.2  yamt (define_expand "builtin_maxsw4"
   7607  1.1.1.1.4.2  yamt   [(match_operand:DI 0 "register_operand" "")
   7608  1.1.1.1.4.2  yamt    (match_operand:DI 1 "reg_or_0_operand" "")
   7609  1.1.1.1.4.2  yamt    (match_operand:DI 2 "reg_or_0_operand" "")]
   7610  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7611  1.1.1.1.4.2  yamt {
   7612  1.1.1.1.4.2  yamt   alpha_expand_builtin_vector_binop (gen_smaxv4hi3, V4HImode, operands[0],
   7613  1.1.1.1.4.2  yamt 				     operands[1], operands[2]);
   7614  1.1.1.1.4.2  yamt   DONE;
   7615  1.1.1.1.4.2  yamt })
   7616  1.1.1.1.4.2  yamt 
   7617  1.1.1.1.4.2  yamt (define_insn "builtin_perr"
   7618  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "=r")
   7619  1.1.1.1.4.2  yamt 	(unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "%rJ")
   7620  1.1.1.1.4.2  yamt 		    (match_operand:DI 2 "reg_or_8bit_operand" "rJ")]
   7621  1.1.1.1.4.2  yamt 		   UNSPEC_PERR))]
   7622  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7623  1.1.1.1.4.2  yamt   "perr %r1,%r2,%0"
   7624  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   7625  1.1.1.1.4.2  yamt 
   7626  1.1.1.1.4.2  yamt (define_expand "builtin_pklb"
   7627  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7628  1.1.1.1.4.2  yamt 	(vec_concat:V8QI
   7629  1.1.1.1.4.2  yamt 	  (vec_concat:V4QI
   7630  1.1.1.1.4.2  yamt 	    (truncate:V2QI (match_operand:DI 1 "register_operand" ""))
   7631  1.1.1.1.4.2  yamt 	    (match_dup 2))
   7632  1.1.1.1.4.2  yamt 	  (match_dup 3)))]
   7633  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7634  1.1.1.1.4.2  yamt {
   7635  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (V8QImode, operands[0]);
   7636  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (V2SImode, operands[1]);
   7637  1.1.1.1.4.2  yamt   operands[2] = CONST0_RTX (V2QImode);
   7638  1.1.1.1.4.2  yamt   operands[3] = CONST0_RTX (V4QImode);
   7639  1.1.1.1.4.2  yamt })
   7640  1.1.1.1.4.2  yamt 
   7641  1.1.1.1.4.2  yamt (define_insn "*pklb"
   7642  1.1.1.1.4.2  yamt   [(set (match_operand:V8QI 0 "register_operand" "=r")
   7643  1.1.1.1.4.2  yamt 	(vec_concat:V8QI
   7644  1.1.1.1.4.2  yamt 	  (vec_concat:V4QI
   7645  1.1.1.1.4.2  yamt 	    (truncate:V2QI (match_operand:V2SI 1 "register_operand" "r"))
   7646  1.1.1.1.4.2  yamt 	    (match_operand:V2QI 2 "const0_operand" ""))
   7647  1.1.1.1.4.2  yamt 	  (match_operand:V4QI 3 "const0_operand" "")))]
   7648  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7649  1.1.1.1.4.2  yamt   "pklb %r1,%0"
   7650  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   7651  1.1.1.1.4.2  yamt 
   7652  1.1.1.1.4.2  yamt (define_expand "builtin_pkwb"
   7653  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7654  1.1.1.1.4.2  yamt 	(vec_concat:V8QI
   7655  1.1.1.1.4.2  yamt 	  (truncate:V4QI (match_operand:DI 1 "register_operand" ""))
   7656  1.1.1.1.4.2  yamt 	  (match_dup 2)))]
   7657  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7658  1.1.1.1.4.2  yamt {
   7659  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (V8QImode, operands[0]);
   7660  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (V4HImode, operands[1]);
   7661  1.1.1.1.4.2  yamt   operands[2] = CONST0_RTX (V4QImode);
   7662  1.1.1.1.4.2  yamt })
   7663  1.1.1.1.4.2  yamt 
   7664  1.1.1.1.4.2  yamt (define_insn "*pkwb"
   7665  1.1.1.1.4.2  yamt   [(set (match_operand:V8QI 0 "register_operand" "=r")
   7666  1.1.1.1.4.2  yamt 	(vec_concat:V8QI
   7667  1.1.1.1.4.2  yamt 	  (truncate:V4QI (match_operand:V4HI 1 "register_operand" "r"))
   7668  1.1.1.1.4.2  yamt 	  (match_operand:V4QI 2 "const0_operand" "")))]
   7669  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7670  1.1.1.1.4.2  yamt   "pkwb %r1,%0"
   7671  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   7672  1.1.1.1.4.2  yamt 
   7673  1.1.1.1.4.2  yamt (define_expand "builtin_unpkbl"
   7674  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7675  1.1.1.1.4.2  yamt 	(zero_extend:V2SI
   7676  1.1.1.1.4.2  yamt 	  (vec_select:V2QI (match_operand:DI 1 "register_operand" "")
   7677  1.1.1.1.4.2  yamt 			   (parallel [(const_int 0) (const_int 1)]))))]
   7678  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7679  1.1.1.1.4.2  yamt {
   7680  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (V2SImode, operands[0]);
   7681  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (V8QImode, operands[1]);
   7682  1.1.1.1.4.2  yamt })
   7683  1.1.1.1.4.2  yamt 
   7684  1.1.1.1.4.2  yamt (define_insn "*unpkbl"
   7685  1.1.1.1.4.2  yamt   [(set (match_operand:V2SI 0 "register_operand" "=r")
   7686  1.1.1.1.4.2  yamt 	(zero_extend:V2SI
   7687  1.1.1.1.4.2  yamt 	  (vec_select:V2QI (match_operand:V8QI 1 "reg_or_0_operand" "rW")
   7688  1.1.1.1.4.2  yamt 			   (parallel [(const_int 0) (const_int 1)]))))]
   7689  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7690  1.1.1.1.4.2  yamt   "unpkbl %r1,%0"
   7691  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   7692  1.1.1.1.4.2  yamt 
   7693  1.1.1.1.4.2  yamt (define_expand "builtin_unpkbw"
   7694  1.1.1.1.4.2  yamt   [(set (match_operand:DI 0 "register_operand" "")
   7695  1.1.1.1.4.2  yamt 	(zero_extend:V4HI
   7696  1.1.1.1.4.2  yamt 	  (vec_select:V4QI (match_operand:DI 1 "register_operand" "")
   7697  1.1.1.1.4.2  yamt 			   (parallel [(const_int 0)
   7698  1.1.1.1.4.2  yamt 				      (const_int 1)
   7699  1.1.1.1.4.2  yamt 				      (const_int 2)
   7700  1.1.1.1.4.2  yamt 				      (const_int 3)]))))]
   7701  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7702  1.1.1.1.4.2  yamt {
   7703  1.1.1.1.4.2  yamt   operands[0] = gen_lowpart (V4HImode, operands[0]);
   7704  1.1.1.1.4.2  yamt   operands[1] = gen_lowpart (V8QImode, operands[1]);
   7705  1.1.1.1.4.2  yamt })
   7706  1.1.1.1.4.2  yamt 
   7707  1.1.1.1.4.2  yamt (define_insn "*unpkbw"
   7708  1.1.1.1.4.2  yamt   [(set (match_operand:V4HI 0 "register_operand" "=r")
   7709  1.1.1.1.4.2  yamt 	(zero_extend:V4HI
   7710  1.1.1.1.4.2  yamt 	  (vec_select:V4QI (match_operand:V8QI 1 "reg_or_0_operand" "rW")
   7711  1.1.1.1.4.2  yamt 			   (parallel [(const_int 0)
   7712  1.1.1.1.4.2  yamt 				      (const_int 1)
   7713  1.1.1.1.4.2  yamt 				      (const_int 2)
   7714  1.1.1.1.4.2  yamt 				      (const_int 3)]))))]
   7715  1.1.1.1.4.2  yamt   "TARGET_MAX"
   7716  1.1.1.1.4.2  yamt   "unpkbw %r1,%0"
   7717  1.1.1.1.4.2  yamt   [(set_attr "type" "mvi")])
   7718  1.1.1.1.4.2  yamt 
   7720  1.1.1.1.4.2  yamt (include "sync.md")
   7721  1.1.1.1.4.2  yamt 
   7723  1.1.1.1.4.2  yamt ;; The call patterns are at the end of the file because their
   7724  1.1.1.1.4.2  yamt ;; wildcard operand0 interferes with nice recognition.
   7725  1.1.1.1.4.2  yamt 
   7726  1.1.1.1.4.2  yamt (define_insn "*call_value_osf_1_er_noreturn"
   7727  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7728  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "call_operand" "c,R,s"))
   7729  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7730  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   7731  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7732  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF
   7733  1.1.1.1.4.2  yamt    && find_reg_note (insn, REG_NORETURN, NULL_RTX)"
   7734  1.1.1.1.4.2  yamt   "@
   7735  1.1.1.1.4.2  yamt    jsr $26,($27),0
   7736  1.1.1.1.4.2  yamt    bsr $26,%1\t\t!samegp
   7737  1.1.1.1.4.2  yamt    ldq $27,%1($29)\t\t!literal!%#\;jsr $26,($27),%1\t\t!lituse_jsr!%#"
   7738  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7739  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,8")])
   7740  1.1.1.1.4.2  yamt 
   7741  1.1.1.1.4.2  yamt (define_insn "*call_value_osf_1_er"
   7742  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7743  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "call_operand" "c,R,s"))
   7744  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7745  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   7746  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7747  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   7748  1.1.1.1.4.2  yamt   "@
   7749  1.1.1.1.4.2  yamt    jsr $26,(%1),0\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*
   7750  1.1.1.1.4.2  yamt    bsr $26,%1\t\t!samegp
   7751  1.1.1.1.4.2  yamt    ldq $27,%1($29)\t\t!literal!%#\;jsr $26,($27),0\t\t!lituse_jsr!%#\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*"
   7752  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7753  1.1.1.1.4.2  yamt    (set_attr "length" "12,*,16")])
   7754  1.1.1.1.4.2  yamt 
   7755  1.1.1.1.4.2  yamt ;; We must use peep2 instead of a split because we need accurate life
   7756  1.1.1.1.4.2  yamt ;; information for $gp.  Consider the case of { bar(); while (1); }.
   7757  1.1.1.1.4.2  yamt (define_peephole2
   7758  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand 0 "" "")
   7759  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_operand:DI 1 "call_operand" ""))
   7760  1.1.1.1.4.2  yamt 		         (match_operand 2 "" "")))
   7761  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   7762  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   7763  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed
   7764  1.1.1.1.4.2  yamt    && ! samegp_function_operand (operands[1], Pmode)
   7765  1.1.1.1.4.2  yamt    && (peep2_regno_dead_p (1, 29)
   7766  1.1.1.1.4.2  yamt        || find_reg_note (insn, REG_NORETURN, NULL_RTX))"
   7767  1.1.1.1.4.2  yamt   [(parallel [(set (match_dup 0)
   7768  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_dup 3))
   7769  1.1.1.1.4.2  yamt 			 (match_dup 2)))
   7770  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   7771  1.1.1.1.4.2  yamt 	      (use (match_dup 1))
   7772  1.1.1.1.4.2  yamt 	      (use (match_dup 4))
   7773  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   7774  1.1.1.1.4.2  yamt {
   7775  1.1.1.1.4.2  yamt   if (CONSTANT_P (operands[1]))
   7776  1.1.1.1.4.2  yamt     {
   7777  1.1.1.1.4.2  yamt       operands[3] = gen_rtx_REG (Pmode, 27);
   7778  1.1.1.1.4.2  yamt       operands[4] = GEN_INT (alpha_next_sequence_number++);
   7779  1.1.1.1.4.2  yamt       emit_insn (gen_movdi_er_high_g (operands[3], pic_offset_table_rtx,
   7780  1.1.1.1.4.2  yamt 				      operands[1], operands[4]));
   7781  1.1.1.1.4.2  yamt     }
   7782  1.1.1.1.4.2  yamt   else
   7783  1.1.1.1.4.2  yamt     {
   7784  1.1.1.1.4.2  yamt       operands[3] = operands[1];
   7785  1.1.1.1.4.2  yamt       operands[1] = const0_rtx;
   7786  1.1.1.1.4.2  yamt       operands[4] = const0_rtx;
   7787  1.1.1.1.4.2  yamt     }
   7788  1.1.1.1.4.2  yamt })
   7789  1.1.1.1.4.2  yamt 
   7790  1.1.1.1.4.2  yamt (define_peephole2
   7791  1.1.1.1.4.2  yamt   [(parallel [(set (match_operand 0 "" "")
   7792  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_operand:DI 1 "call_operand" ""))
   7793  1.1.1.1.4.2  yamt 		         (match_operand 2 "" "")))
   7794  1.1.1.1.4.2  yamt 	      (use (reg:DI 29))
   7795  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])]
   7796  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed
   7797  1.1.1.1.4.2  yamt    && ! samegp_function_operand (operands[1], Pmode)
   7798  1.1.1.1.4.2  yamt    && ! (peep2_regno_dead_p (1, 29)
   7799  1.1.1.1.4.2  yamt          || find_reg_note (insn, REG_NORETURN, NULL_RTX))"
   7800  1.1.1.1.4.2  yamt   [(parallel [(set (match_dup 0)
   7801  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_dup 3))
   7802  1.1.1.1.4.2  yamt 			 (match_dup 2)))
   7803  1.1.1.1.4.2  yamt 	      (set (match_dup 6)
   7804  1.1.1.1.4.2  yamt 		   (unspec:DI [(match_dup 6) (match_dup 4)] UNSPEC_LDGP1))
   7805  1.1.1.1.4.2  yamt 	      (use (match_dup 1))
   7806  1.1.1.1.4.2  yamt 	      (use (match_dup 5))
   7807  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])
   7808  1.1.1.1.4.2  yamt    (set (match_dup 6)
   7809  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 6) (match_dup 4)] UNSPEC_LDGP2))]
   7810  1.1.1.1.4.2  yamt {
   7811  1.1.1.1.4.2  yamt   if (CONSTANT_P (operands[1]))
   7812  1.1.1.1.4.2  yamt     {
   7813  1.1.1.1.4.2  yamt       operands[3] = gen_rtx_REG (Pmode, 27);
   7814  1.1.1.1.4.2  yamt       operands[5] = GEN_INT (alpha_next_sequence_number++);
   7815  1.1.1.1.4.2  yamt       emit_insn (gen_movdi_er_high_g (operands[3], pic_offset_table_rtx,
   7816  1.1.1.1.4.2  yamt 				      operands[1], operands[5]));
   7817  1.1.1.1.4.2  yamt     }
   7818  1.1.1.1.4.2  yamt   else
   7819  1.1.1.1.4.2  yamt     {
   7820  1.1.1.1.4.2  yamt       operands[3] = operands[1];
   7821  1.1.1.1.4.2  yamt       operands[1] = const0_rtx;
   7822  1.1.1.1.4.2  yamt       operands[5] = const0_rtx;
   7823  1.1.1.1.4.2  yamt     }
   7824  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (alpha_next_sequence_number++);
   7825  1.1.1.1.4.2  yamt   operands[6] = pic_offset_table_rtx;
   7826  1.1.1.1.4.2  yamt })
   7827  1.1.1.1.4.2  yamt 
   7828  1.1.1.1.4.2  yamt (define_insn "*call_value_osf_2_er_nogp"
   7829  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7830  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "register_operand" "c"))
   7831  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7832  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   7833  1.1.1.1.4.2  yamt    (use (match_operand 3 "" ""))
   7834  1.1.1.1.4.2  yamt    (use (match_operand 4 "" ""))
   7835  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7836  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   7837  1.1.1.1.4.2  yamt   "jsr $26,(%1),%3%J4"
   7838  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")])
   7839  1.1.1.1.4.2  yamt 
   7840  1.1.1.1.4.2  yamt (define_insn "*call_value_osf_2_er"
   7841  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7842  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "register_operand" "c"))
   7843  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7844  1.1.1.1.4.2  yamt    (set (reg:DI 29)
   7845  1.1.1.1.4.2  yamt 	(unspec:DI [(reg:DI 29) (match_operand 5 "const_int_operand" "")]
   7846  1.1.1.1.4.2  yamt 		   UNSPEC_LDGP1))
   7847  1.1.1.1.4.2  yamt    (use (match_operand 3 "" ""))
   7848  1.1.1.1.4.2  yamt    (use (match_operand 4 "" ""))
   7849  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7850  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   7851  1.1.1.1.4.2  yamt   "jsr $26,(%1),%3%J4\;ldah $29,0($26)\t\t!gpdisp!%5"
   7852  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7853  1.1.1.1.4.2  yamt    (set_attr "cannot_copy" "true")
   7854  1.1.1.1.4.2  yamt    (set_attr "length" "8")])
   7855  1.1.1.1.4.2  yamt 
   7856  1.1.1.1.4.2  yamt (define_insn "*call_value_osf_1_noreturn"
   7857  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7858  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "call_operand" "c,R,s"))
   7859  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7860  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   7861  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7862  1.1.1.1.4.2  yamt   "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF
   7863  1.1.1.1.4.2  yamt    && find_reg_note (insn, REG_NORETURN, NULL_RTX)"
   7864  1.1.1.1.4.2  yamt   "@
   7865  1.1.1.1.4.2  yamt    jsr $26,($27),0
   7866  1.1.1.1.4.2  yamt    bsr $26,$%1..ng
   7867  1.1.1.1.4.2  yamt    jsr $26,%1"
   7868  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7869  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,8")])
   7870  1.1.1.1.4.2  yamt 
   7871  1.1.1.1.4.2  yamt (define_insn_and_split "call_value_osf_tlsgd"
   7872  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7873  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "symbolic_operand" ""))
   7874  1.1.1.1.4.2  yamt 	      (const_int 0)))
   7875  1.1.1.1.4.2  yamt    (unspec [(match_operand:DI 2 "const_int_operand" "")] UNSPEC_TLSGD_CALL)
   7876  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   7877  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7878  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
   7879  1.1.1.1.4.2  yamt   "#"
   7880  1.1.1.1.4.2  yamt   "&& reload_completed"
   7881  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   7882  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 5)
   7883  1.1.1.1.4.2  yamt 		    (match_dup 1)
   7884  1.1.1.1.4.2  yamt 		    (match_dup 2)] UNSPEC_LITERAL))
   7885  1.1.1.1.4.2  yamt    (parallel [(set (match_dup 0)
   7886  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_dup 3))
   7887  1.1.1.1.4.2  yamt 			 (const_int 0)))
   7888  1.1.1.1.4.2  yamt 	      (set (match_dup 5)
   7889  1.1.1.1.4.2  yamt 		   (unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP1))
   7890  1.1.1.1.4.2  yamt 	      (use (match_dup 1))
   7891  1.1.1.1.4.2  yamt 	      (use (unspec [(match_dup 2)] UNSPEC_TLSGD_CALL))
   7892  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])
   7893  1.1.1.1.4.2  yamt    (set (match_dup 5)
   7894  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP2))]
   7895  1.1.1.1.4.2  yamt {
   7896  1.1.1.1.4.2  yamt   operands[3] = gen_rtx_REG (Pmode, 27);
   7897  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (alpha_next_sequence_number++);
   7898  1.1.1.1.4.2  yamt   operands[5] = pic_offset_table_rtx;
   7899  1.1.1.1.4.2  yamt }
   7900  1.1.1.1.4.2  yamt   [(set_attr "type" "multi")])
   7901  1.1.1.1.4.2  yamt 
   7902  1.1.1.1.4.2  yamt (define_insn_and_split "call_value_osf_tlsldm"
   7903  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7904  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "symbolic_operand" ""))
   7905  1.1.1.1.4.2  yamt 	      (const_int 0)))
   7906  1.1.1.1.4.2  yamt    (unspec [(match_operand:DI 2 "const_int_operand" "")] UNSPEC_TLSLDM_CALL)
   7907  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   7908  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7909  1.1.1.1.4.2  yamt   "HAVE_AS_TLS"
   7910  1.1.1.1.4.2  yamt   "#"
   7911  1.1.1.1.4.2  yamt   "&& reload_completed"
   7912  1.1.1.1.4.2  yamt   [(set (match_dup 3)
   7913  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 5)
   7914  1.1.1.1.4.2  yamt 		    (match_dup 1)
   7915  1.1.1.1.4.2  yamt 		    (match_dup 2)] UNSPEC_LITERAL))
   7916  1.1.1.1.4.2  yamt    (parallel [(set (match_dup 0)
   7917  1.1.1.1.4.2  yamt 		   (call (mem:DI (match_dup 3))
   7918  1.1.1.1.4.2  yamt 			 (const_int 0)))
   7919  1.1.1.1.4.2  yamt 	      (set (match_dup 5)
   7920  1.1.1.1.4.2  yamt 		   (unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP1))
   7921  1.1.1.1.4.2  yamt 	      (use (match_dup 1))
   7922  1.1.1.1.4.2  yamt 	      (use (unspec [(match_dup 2)] UNSPEC_TLSLDM_CALL))
   7923  1.1.1.1.4.2  yamt 	      (clobber (reg:DI 26))])
   7924  1.1.1.1.4.2  yamt    (set (match_dup 5)
   7925  1.1.1.1.4.2  yamt 	(unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP2))]
   7926  1.1.1.1.4.2  yamt {
   7927  1.1.1.1.4.2  yamt   operands[3] = gen_rtx_REG (Pmode, 27);
   7928  1.1.1.1.4.2  yamt   operands[4] = GEN_INT (alpha_next_sequence_number++);
   7929  1.1.1.1.4.2  yamt   operands[5] = pic_offset_table_rtx;
   7930  1.1.1.1.4.2  yamt }
   7931  1.1.1.1.4.2  yamt   [(set_attr "type" "multi")])
   7932  1.1.1.1.4.2  yamt 
   7933  1.1.1.1.4.2  yamt (define_insn "*call_value_osf_1"
   7934  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7935  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "call_operand" "c,R,s"))
   7936  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7937  1.1.1.1.4.2  yamt    (use (reg:DI 29))
   7938  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7939  1.1.1.1.4.2  yamt   "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   7940  1.1.1.1.4.2  yamt   "@
   7941  1.1.1.1.4.2  yamt    jsr $26,($27),0\;ldgp $29,0($26)
   7942  1.1.1.1.4.2  yamt    bsr $26,$%1..ng
   7943  1.1.1.1.4.2  yamt    jsr $26,%1\;ldgp $29,0($26)"
   7944  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7945  1.1.1.1.4.2  yamt    (set_attr "length" "12,*,16")])
   7946  1.1.1.1.4.2  yamt 
   7947  1.1.1.1.4.2  yamt (define_insn "*sibcall_value_osf_1_er"
   7948  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7949  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "symbolic_operand" "R,s"))
   7950  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7951  1.1.1.1.4.2  yamt    (unspec [(reg:DI 29)] UNSPEC_SIBCALL)]
   7952  1.1.1.1.4.2  yamt   "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   7953  1.1.1.1.4.2  yamt   "@
   7954  1.1.1.1.4.2  yamt    br $31,%1\t\t!samegp
   7955  1.1.1.1.4.2  yamt    ldq $27,%1($29)\t\t!literal!%#\;jmp $31,($27),%1\t\t!lituse_jsr!%#"
   7956  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7957  1.1.1.1.4.2  yamt    (set_attr "length" "*,8")])
   7958  1.1.1.1.4.2  yamt 
   7959  1.1.1.1.4.2  yamt (define_insn "*sibcall_value_osf_1"
   7960  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7961  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "symbolic_operand" "R,s"))
   7962  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7963  1.1.1.1.4.2  yamt    (unspec [(reg:DI 29)] UNSPEC_SIBCALL)]
   7964  1.1.1.1.4.2  yamt   "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
   7965  1.1.1.1.4.2  yamt   "@
   7966  1.1.1.1.4.2  yamt    br $31,$%1..ng
   7967  1.1.1.1.4.2  yamt    lda $27,%1\;jmp $31,($27),%1"
   7968  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7969  1.1.1.1.4.2  yamt    (set_attr "length" "*,8")])
   7970  1.1.1.1.4.2  yamt 
   7971  1.1.1.1.4.2  yamt (define_insn "*call_value_nt_1"
   7972  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7973  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "call_operand" "r,R,s"))
   7974  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7975  1.1.1.1.4.2  yamt    (clobber (reg:DI 26))]
   7976  1.1.1.1.4.2  yamt   "TARGET_ABI_WINDOWS_NT"
   7977  1.1.1.1.4.2  yamt   "@
   7978  1.1.1.1.4.2  yamt    jsr $26,(%1)
   7979  1.1.1.1.4.2  yamt    bsr $26,%1
   7980  1.1.1.1.4.2  yamt    jsr $26,%1"
   7981  1.1.1.1.4.2  yamt   [(set_attr "type" "jsr")
   7982  1.1.1.1.4.2  yamt    (set_attr "length" "*,*,12")])
   7983  1.1.1.1.4.2  yamt 
   7984  1.1.1.1.4.2  yamt ; GAS relies on the order and position of instructions output below in order
   7985  1.1.1.1.4.2  yamt ; to generate relocs for VMS link to potentially optimize the call.
   7986  1.1.1.1.4.2  yamt ; Please do not molest.
   7987  1.1.1.1.4.2  yamt (define_insn "*call_value_vms_1"
   7988  1.1.1.1.4.2  yamt   [(set (match_operand 0 "" "")
   7989  1.1.1.1.4.2  yamt 	(call (mem:DI (match_operand:DI 1 "call_operand" "r,s"))
   7990  1.1.1.1.4.2  yamt 	      (match_operand 2 "" "")))
   7991  1.1.1.1.4.2  yamt    (use (match_operand:DI 3 "nonmemory_operand" "r,n"))
   7992  1.1.1.1.4.2  yamt    (use (reg:DI 25))
   7993  1.1.1.1.4.2  yamt    (use (reg:DI 26))
   7994  1.1.1.1.4.2  yamt    (clobber (reg:DI 27))]
   7995  1.1.1.1.4.2  yamt   "TARGET_ABI_OPEN_VMS"
   7996  1.1.1.1.4.2  yamt {
   7997  1.1.1.1.4.2  yamt   switch (which_alternative)
   7998                        {
   7999                        case 0:
   8000                       	return "mov %3,$27\;jsr $26,0\;ldq $27,0($29)";
   8001                        case 1:
   8002                    	operands [3] = alpha_use_linkage (operands [1], cfun->decl, 1, 0);
   8003                    	operands [4] = alpha_use_linkage (operands [1], cfun->decl, 0, 0);
   8004                       	return "ldq $26,%4\;ldq $27,%3\;jsr $26,%1\;ldq $27,0($29)";
   8005                        default:
   8006                          gcc_unreachable ();
   8007                        }
   8008                    }
   8009                      [(set_attr "type" "jsr")
   8010                       (set_attr "length" "12,16")])
   8011                    
   8012                    (define_insn "*call_value_umk"
   8013                      [(set (match_operand 0 "" "")
   8014                    	(call (mem:DI (match_operand:DI 1 "call_operand" "r"))
   8015                    	      (match_operand 2 "" "")))
   8016                       (use (reg:DI 25))
   8017                       (clobber (reg:DI 26))]
   8018                      "TARGET_ABI_UNICOSMK"
   8019                      "jsr $26,(%1)"
   8020                      [(set_attr "type" "jsr")])
   8021