comparison gcc/config/i386/mmx.md @ 67:f6334be47118

update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Mar 2011 17:18:12 +0900
parents b7f97abdc517
children 04ced10e8804
comparison
equal deleted inserted replaced
65:65488c3d617d 67:f6334be47118
1 ;; GCC machine description for MMX and 3dNOW! instructions 1 ;; GCC machine description for MMX and 3dNOW! instructions
2 ;; Copyright (C) 2005, 2007, 2008, 2009 2 ;; Copyright (C) 2005, 2007, 2008, 2009, 2010
3 ;; Free Software Foundation, Inc. 3 ;; Free Software Foundation, Inc.
4 ;; 4 ;;
5 ;; This file is part of GCC. 5 ;; This file is part of GCC.
6 ;; 6 ;;
7 ;; GCC is free software; you can redistribute it and/or modify 7 ;; GCC is free software; you can redistribute it and/or modify
63 DONE; 63 DONE;
64 }) 64 })
65 65
66 (define_insn "*mov<mode>_internal_rex64" 66 (define_insn "*mov<mode>_internal_rex64"
67 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand" 67 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"
68 "=rm,r,!?y,!?y ,m ,!y,*Y2,x,x ,m,r,Yi") 68 "=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x ,m,r ,Yi")
69 (match_operand:MMXMODEI8 1 "vector_move_operand" 69 (match_operand:MMXMODEI8 1 "vector_move_operand"
70 "Cr ,m,C ,!?ym,!?y,*Y2,!y,C,xm,x,Yi,r"))] 70 "Cr ,m,C ,!y,m ,!?y,*Y2,!y ,C,xm,x,Yi,r"))]
71 "TARGET_64BIT && TARGET_MMX 71 "TARGET_64BIT && TARGET_MMX
72 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" 72 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
73 "@ 73 "@
74 mov{q}\t{%1, %0|%0, %1} 74 mov{q}\t{%1, %0|%0, %1}
75 mov{q}\t{%1, %0|%0, %1} 75 mov{q}\t{%1, %0|%0, %1}
76 pxor\t%0, %0 76 pxor\t%0, %0
77 movq\t{%1, %0|%0, %1} 77 movq\t{%1, %0|%0, %1}
78 movq\t{%1, %0|%0, %1} 78 movq\t{%1, %0|%0, %1}
79 movq\t{%1, %0|%0, %1}
79 movdq2q\t{%1, %0|%0, %1} 80 movdq2q\t{%1, %0|%0, %1}
80 movq2dq\t{%1, %0|%0, %1} 81 movq2dq\t{%1, %0|%0, %1}
81 %vpxor\t%0, %d0 82 %vpxor\t%0, %d0
82 %vmovq\t{%1, %0|%0, %1} 83 %vmovq\t{%1, %0|%0, %1}
83 %vmovq\t{%1, %0|%0, %1} 84 %vmovq\t{%1, %0|%0, %1}
84 %vmovq\t{%1, %0|%0, %1} 85 %vmovd\t{%1, %0|%0, %1}
85 %vmovq\t{%1, %0|%0, %1}" 86 %vmovd\t{%1, %0|%0, %1}"
86 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov") 87 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov")
87 (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*") 88 (set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*")
88 (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,1,*,*,*") 89 (set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,1,*,*,*")
89 (set_attr "prefix_data16" "*,*,*,*,*,*,*,*,*,1,1,1") 90 (set_attr "prefix_data16" "*,*,*,*,*,*,*,*,*,*,1,1,1")
90 (set (attr "prefix_rex") 91 (set (attr "prefix_rex")
91 (if_then_else (eq_attr "alternative" "8,9") 92 (if_then_else (eq_attr "alternative" "9,10")
92 (symbol_ref "x86_extended_reg_mentioned_p (insn)") 93 (symbol_ref "x86_extended_reg_mentioned_p (insn)")
93 (const_string "*"))) 94 (const_string "*")))
94 (set (attr "prefix") 95 (set (attr "prefix")
95 (if_then_else (eq_attr "alternative" "7,8,9,10,11") 96 (if_then_else (eq_attr "alternative" "8,9,10,11,12")
96 (const_string "maybe_vex") 97 (const_string "maybe_vex")
97 (const_string "orig"))) 98 (const_string "orig")))
98 (set_attr "mode" "DI")]) 99 (set_attr "mode" "DI")])
99 100
100 (define_insn "*mov<mode>_internal_avx" 101 (define_insn "*mov<mode>_internal_avx"
101 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand" 102 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"
102 "=!?y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,r ,m") 103 "=!?y,!y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,r ,m")
103 (match_operand:MMXMODEI8 1 "vector_move_operand" 104 (match_operand:MMXMODEI8 1 "vector_move_operand"
104 "C ,!ym,!?y,*Y2,!y ,C ,*Y2m,*Y2,irm,r"))] 105 "C ,!y,m ,!?y,*Y2,!y ,C ,*Y2m,*Y2,irm,r"))]
105 "TARGET_AVX 106 "TARGET_AVX
106 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" 107 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
107 "@ 108 "@
108 pxor\t%0, %0 109 pxor\t%0, %0
110 movq\t{%1, %0|%0, %1}
109 movq\t{%1, %0|%0, %1} 111 movq\t{%1, %0|%0, %1}
110 movq\t{%1, %0|%0, %1} 112 movq\t{%1, %0|%0, %1}
111 movdq2q\t{%1, %0|%0, %1} 113 movdq2q\t{%1, %0|%0, %1}
112 movq2dq\t{%1, %0|%0, %1} 114 movq2dq\t{%1, %0|%0, %1}
113 vpxor\t%0, %0, %0 115 vpxor\t%0, %0, %0
114 vmovq\t{%1, %0|%0, %1} 116 vmovq\t{%1, %0|%0, %1}
115 vmovq\t{%1, %0|%0, %1} 117 vmovq\t{%1, %0|%0, %1}
116 # 118 #
117 #" 119 #"
118 [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,*,*") 120 [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,*,*")
119 (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*") 121 (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*")
120 (set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*") 122 (set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*")
121 (set (attr "prefix") 123 (set (attr "prefix")
122 (if_then_else (eq_attr "alternative" "5,6,7") 124 (if_then_else (eq_attr "alternative" "6,7,8")
123 (const_string "vex") 125 (const_string "vex")
124 (const_string "orig"))) 126 (const_string "orig")))
125 (set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,DI,DI,DI")]) 127 (set_attr "mode" "DI,DI,DI,DI,DI,DI,TI,DI,DI,DI,DI")])
126 128
127 (define_insn "*mov<mode>_internal" 129 (define_insn "*mov<mode>_internal"
128 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand" 130 [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"
129 "=!?y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,*x,*x,*x,m ,r ,m") 131 "=!?y,!y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,*x,*x,*x,m ,r ,m")
130 (match_operand:MMXMODEI8 1 "vector_move_operand" 132 (match_operand:MMXMODEI8 1 "vector_move_operand"
131 "C ,!ym,!?y,*Y2,!y ,C ,*Y2m,*Y2,C ,*x,m ,*x,irm,r"))] 133 "C ,!y,m ,!?y,*Y2,!y ,C ,*Y2m,*Y2,C ,*x,m ,*x,irm,r"))]
132 "TARGET_MMX 134 "TARGET_MMX
133 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" 135 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
134 "@ 136 "@
135 pxor\t%0, %0 137 pxor\t%0, %0
138 movq\t{%1, %0|%0, %1}
136 movq\t{%1, %0|%0, %1} 139 movq\t{%1, %0|%0, %1}
137 movq\t{%1, %0|%0, %1} 140 movq\t{%1, %0|%0, %1}
138 movdq2q\t{%1, %0|%0, %1} 141 movdq2q\t{%1, %0|%0, %1}
139 movq2dq\t{%1, %0|%0, %1} 142 movq2dq\t{%1, %0|%0, %1}
140 pxor\t%0, %0 143 pxor\t%0, %0
144 movaps\t{%1, %0|%0, %1} 147 movaps\t{%1, %0|%0, %1}
145 movlps\t{%1, %0|%0, %1} 148 movlps\t{%1, %0|%0, %1}
146 movlps\t{%1, %0|%0, %1} 149 movlps\t{%1, %0|%0, %1}
147 # 150 #
148 #" 151 #"
149 [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov,*,*") 152 [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov,*,*")
150 (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*,*,*,*") 153 (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*,*,*,*")
151 (set_attr "prefix_rep" "*,*,*,1,1,*,1,*,*,*,*,*,*,*") 154 (set_attr "prefix_rep" "*,*,*,*,1,1,*,1,*,*,*,*,*,*,*")
152 (set_attr "prefix_data16" "*,*,*,*,*,*,*,1,*,*,*,*,*,*") 155 (set_attr "prefix_data16" "*,*,*,*,*,*,*,*,1,*,*,*,*,*,*")
153 (set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) 156 (set_attr "mode" "DI,DI,DI,DI,DI,DI,TI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
154 157
155 (define_expand "movv2sf" 158 (define_expand "movv2sf"
156 [(set (match_operand:V2SF 0 "nonimmediate_operand" "") 159 [(set (match_operand:V2SF 0 "nonimmediate_operand" "")
157 (match_operand:V2SF 1 "nonimmediate_operand" ""))] 160 (match_operand:V2SF 1 "nonimmediate_operand" ""))]
158 "TARGET_MMX" 161 "TARGET_MMX"
161 DONE; 164 DONE;
162 }) 165 })
163 166
164 (define_insn "*movv2sf_internal_rex64_avx" 167 (define_insn "*movv2sf_internal_rex64_avx"
165 [(set (match_operand:V2SF 0 "nonimmediate_operand" 168 [(set (match_operand:V2SF 0 "nonimmediate_operand"
166 "=rm,r ,!?y,!?y ,m ,!y,Y2,x,x,x,m,r,x") 169 "=rm,r,!?y,!y,!?y,m ,!y,Y2,x,x,x,m,r,x")
167 (match_operand:V2SF 1 "vector_move_operand" 170 (match_operand:V2SF 1 "vector_move_operand"
168 "Cr ,m ,C ,!?ym,!y,Y2,!y,C,x,m,x,x,r"))] 171 "Cr ,m,C ,!y,m ,!?y,Y2,!y,C,x,m,x,x,r"))]
169 "TARGET_64BIT && TARGET_AVX 172 "TARGET_64BIT && TARGET_AVX
170 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" 173 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
171 "@ 174 "@
172 mov{q}\t{%1, %0|%0, %1} 175 mov{q}\t{%1, %0|%0, %1}
173 mov{q}\t{%1, %0|%0, %1} 176 mov{q}\t{%1, %0|%0, %1}
174 pxor\t%0, %0 177 pxor\t%0, %0
178 movq\t{%1, %0|%0, %1}
175 movq\t{%1, %0|%0, %1} 179 movq\t{%1, %0|%0, %1}
176 movq\t{%1, %0|%0, %1} 180 movq\t{%1, %0|%0, %1}
177 movdq2q\t{%1, %0|%0, %1} 181 movdq2q\t{%1, %0|%0, %1}
178 movq2dq\t{%1, %0|%0, %1} 182 movq2dq\t{%1, %0|%0, %1}
179 vxorps\t%0, %0, %0 183 vxorps\t%0, %0, %0
180 vmovaps\t{%1, %0|%0, %1} 184 vmovaps\t{%1, %0|%0, %1}
181 vmovlps\t{%1, %0, %0|%0, %0, %1} 185 vmovlps\t{%1, %0, %0|%0, %0, %1}
182 vmovlps\t{%1, %0|%0, %1} 186 vmovlps\t{%1, %0|%0, %1}
183 vmovq\t{%1, %0|%0, %1} 187 vmovq\t{%1, %0|%0, %1}
184 vmovq\t{%1, %0|%0, %1}" 188 vmovq\t{%1, %0|%0, %1}"
185 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov") 189 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov")
186 (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*,*") 190 (set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*,*")
187 (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,*,*,*,*,*") 191 (set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,*,*,*,*,*")
188 (set_attr "length_vex" "*,*,*,*,*,*,*,*,*,*,*,4,4") 192 (set_attr "length_vex" "*,*,*,*,*,*,*,*,*,*,*,*,4,4")
189 (set (attr "prefix") 193 (set (attr "prefix")
190 (if_then_else (eq_attr "alternative" "7,8,9,10,11,12") 194 (if_then_else (eq_attr "alternative" "8,9,10,11,12,13")
191 (const_string "vex") 195 (const_string "vex")
192 (const_string "orig"))) 196 (const_string "orig")))
193 (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) 197 (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
194 198
195 (define_insn "*movv2sf_internal_rex64" 199 (define_insn "*movv2sf_internal_rex64"
196 [(set (match_operand:V2SF 0 "nonimmediate_operand" 200 [(set (match_operand:V2SF 0 "nonimmediate_operand"
197 "=rm,r ,!?y,!?y ,m ,!y,*Y2,x,x,x,m,r,Yi") 201 "=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x,x,m,r ,Yi")
198 (match_operand:V2SF 1 "vector_move_operand" 202 (match_operand:V2SF 1 "vector_move_operand"
199 "Cr ,m ,C ,!?ym,!y,*Y2,!y,C,x,m,x,Yi,r"))] 203 "Cr ,m,C ,!y,m ,!?y,*Y2,!y ,C,x,m,x,Yi,r"))]
200 "TARGET_64BIT && TARGET_MMX 204 "TARGET_64BIT && TARGET_MMX
201 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" 205 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
202 "@ 206 "@
203 mov{q}\t{%1, %0|%0, %1} 207 mov{q}\t{%1, %0|%0, %1}
204 mov{q}\t{%1, %0|%0, %1} 208 mov{q}\t{%1, %0|%0, %1}
205 pxor\t%0, %0 209 pxor\t%0, %0
210 movq\t{%1, %0|%0, %1}
206 movq\t{%1, %0|%0, %1} 211 movq\t{%1, %0|%0, %1}
207 movq\t{%1, %0|%0, %1} 212 movq\t{%1, %0|%0, %1}
208 movdq2q\t{%1, %0|%0, %1} 213 movdq2q\t{%1, %0|%0, %1}
209 movq2dq\t{%1, %0|%0, %1} 214 movq2dq\t{%1, %0|%0, %1}
210 xorps\t%0, %0 215 xorps\t%0, %0
211 movaps\t{%1, %0|%0, %1} 216 movaps\t{%1, %0|%0, %1}
212 movlps\t{%1, %0|%0, %1} 217 movlps\t{%1, %0|%0, %1}
213 movlps\t{%1, %0|%0, %1} 218 movlps\t{%1, %0|%0, %1}
214 movd\t{%1, %0|%0, %1} 219 movd\t{%1, %0|%0, %1}
215 movd\t{%1, %0|%0, %1}" 220 movd\t{%1, %0|%0, %1}"
216 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov") 221 [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov")
217 (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*,*") 222 (set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*,*")
218 (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,*,*,*,*,*") 223 (set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,*,*,*,*,*")
219 (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) 224 (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
220 225
221 (define_insn "*movv2sf_internal_avx" 226 (define_insn "*movv2sf_internal_avx"
222 [(set (match_operand:V2SF 0 "nonimmediate_operand" 227 [(set (match_operand:V2SF 0 "nonimmediate_operand"
223 "=!?y,!?y ,m ,!y ,*Y2,*x,*x,*x,m ,r ,m") 228 "=!?y,!y,!?y,m ,!y ,*Y2,*x,*x,*x,m ,r ,m")
224 (match_operand:V2SF 1 "vector_move_operand" 229 (match_operand:V2SF 1 "vector_move_operand"
225 "C ,!?ym,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))] 230 "C ,!y,m ,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))]
226 "TARGET_AVX 231 "TARGET_AVX
227 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" 232 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
228 "@ 233 "@
229 pxor\t%0, %0 234 pxor\t%0, %0
235 movq\t{%1, %0|%0, %1}
230 movq\t{%1, %0|%0, %1} 236 movq\t{%1, %0|%0, %1}
231 movq\t{%1, %0|%0, %1} 237 movq\t{%1, %0|%0, %1}
232 movdq2q\t{%1, %0|%0, %1} 238 movdq2q\t{%1, %0|%0, %1}
233 movq2dq\t{%1, %0|%0, %1} 239 movq2dq\t{%1, %0|%0, %1}
234 vxorps\t%0, %0, %0 240 vxorps\t%0, %0, %0
235 vmovaps\t{%1, %0|%0, %1} 241 vmovaps\t{%1, %0|%0, %1}
236 vmovlps\t{%1, %0, %0|%0, %0, %1} 242 vmovlps\t{%1, %0, %0|%0, %0, %1}
237 vmovlps\t{%1, %0|%0, %1} 243 vmovlps\t{%1, %0|%0, %1}
238 # 244 #
239 #" 245 #"
240 [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*") 246 [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*")
241 (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*") 247 (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*")
242 (set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*,*") 248 (set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*,*")
243 (set (attr "prefix") 249 (set (attr "prefix")
244 (if_then_else (eq_attr "alternative" "5,6,7,8") 250 (if_then_else (eq_attr "alternative" "6,7,8,9")
245 (const_string "vex") 251 (const_string "vex")
246 (const_string "orig"))) 252 (const_string "orig")))
247 (set_attr "mode" "DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) 253 (set_attr "mode" "DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
248 254
249 (define_insn "*movv2sf_internal" 255 (define_insn "*movv2sf_internal"
250 [(set (match_operand:V2SF 0 "nonimmediate_operand" 256 [(set (match_operand:V2SF 0 "nonimmediate_operand"
251 "=!?y,!?y ,m ,!y ,*Y2,*x,*x,*x,m ,r ,m") 257 "=!?y,!y,!?y,m ,!y ,*Y2,*x,*x,*x,m ,r ,m")
252 (match_operand:V2SF 1 "vector_move_operand" 258 (match_operand:V2SF 1 "vector_move_operand"
253 "C ,!?ym,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))] 259 "C ,!y,m ,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))]
254 "TARGET_MMX 260 "TARGET_MMX
255 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" 261 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
256 "@ 262 "@
257 pxor\t%0, %0 263 pxor\t%0, %0
264 movq\t{%1, %0|%0, %1}
258 movq\t{%1, %0|%0, %1} 265 movq\t{%1, %0|%0, %1}
259 movq\t{%1, %0|%0, %1} 266 movq\t{%1, %0|%0, %1}
260 movdq2q\t{%1, %0|%0, %1} 267 movdq2q\t{%1, %0|%0, %1}
261 movq2dq\t{%1, %0|%0, %1} 268 movq2dq\t{%1, %0|%0, %1}
262 xorps\t%0, %0 269 xorps\t%0, %0
263 movaps\t{%1, %0|%0, %1} 270 movaps\t{%1, %0|%0, %1}
264 movlps\t{%1, %0|%0, %1} 271 movlps\t{%1, %0|%0, %1}
265 movlps\t{%1, %0|%0, %1} 272 movlps\t{%1, %0|%0, %1}
266 # 273 #
267 #" 274 #"
268 [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*") 275 [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*")
269 (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*") 276 (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*")
270 (set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*,*") 277 (set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*,*")
271 (set_attr "mode" "DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) 278 (set_attr "mode" "DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
272 279
273 ;; %%% This multiword shite has got to go. 280 ;; %%% This multiword shite has got to go.
274 (define_split 281 (define_split
275 [(set (match_operand:MMXMODE 0 "nonimmediate_operand" "") 282 [(set (match_operand:MMXMODE 0 "nonimmediate_operand" "")
276 (match_operand:MMXMODE 1 "general_operand" ""))] 283 (match_operand:MMXMODE 1 "general_operand" ""))]
332 339
333 (define_expand "mmx_subv2sf3" 340 (define_expand "mmx_subv2sf3"
334 [(set (match_operand:V2SF 0 "register_operand" "") 341 [(set (match_operand:V2SF 0 "register_operand" "")
335 (minus:V2SF (match_operand:V2SF 1 "register_operand" "") 342 (minus:V2SF (match_operand:V2SF 1 "register_operand" "")
336 (match_operand:V2SF 2 "nonimmediate_operand" "")))] 343 (match_operand:V2SF 2 "nonimmediate_operand" "")))]
337 "TARGET_3DNOW" 344 "TARGET_3DNOW")
338 "")
339 345
340 (define_expand "mmx_subrv2sf3" 346 (define_expand "mmx_subrv2sf3"
341 [(set (match_operand:V2SF 0 "register_operand" "") 347 [(set (match_operand:V2SF 0 "register_operand" "")
342 (minus:V2SF (match_operand:V2SF 2 "register_operand" "") 348 (minus:V2SF (match_operand:V2SF 2 "register_operand" "")
343 (match_operand:V2SF 1 "nonimmediate_operand" "")))] 349 (match_operand:V2SF 1 "nonimmediate_operand" "")))]
344 "TARGET_3DNOW" 350 "TARGET_3DNOW")
345 "")
346 351
347 (define_insn "*mmx_subv2sf3" 352 (define_insn "*mmx_subv2sf3"
348 [(set (match_operand:V2SF 0 "register_operand" "=y,y") 353 [(set (match_operand:V2SF 0 "register_operand" "=y,y")
349 (minus:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "0,ym") 354 (minus:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "0,ym")
350 (match_operand:V2SF 2 "nonimmediate_operand" "ym,0")))] 355 (match_operand:V2SF 2 "nonimmediate_operand" "ym,0")))]
1614 [(set (match_operand:V8QI 0 "memory_operand" "") 1619 [(set (match_operand:V8QI 0 "memory_operand" "")
1615 (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "") 1620 (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "")
1616 (match_operand:V8QI 2 "register_operand" "") 1621 (match_operand:V8QI 2 "register_operand" "")
1617 (match_dup 0)] 1622 (match_dup 0)]
1618 UNSPEC_MASKMOV))] 1623 UNSPEC_MASKMOV))]
1619 "TARGET_SSE || TARGET_3DNOW_A" 1624 "TARGET_SSE || TARGET_3DNOW_A")
1620 "")
1621 1625
1622 (define_insn "*mmx_maskmovq" 1626 (define_insn "*mmx_maskmovq"
1623 [(set (mem:V8QI (match_operand:SI 0 "register_operand" "D")) 1627 [(set (mem:V8QI (match_operand:SI 0 "register_operand" "D"))
1624 (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y") 1628 (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y")
1625 (match_operand:V8QI 2 "register_operand" "y") 1629 (match_operand:V8QI 2 "register_operand" "y")