Mercurial > hg > CbC > CbC_gcc
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") |