Support AVX Programming Reference (June, 2011).
[external/binutils.git] / gas / testsuite / gas / i386 / avx2.s
1 # Check i386 AVX2 instructions
2
3         .allow_index_reg
4         .text
5 _start:
6
7 # Tests for op mem256, mask,  ymm
8 # Tests for op ymm, mask, mem256
9         vpmaskmovd (%ecx),%ymm4,%ymm6
10         vpmaskmovd %ymm4,%ymm6,(%ecx)
11         vpmaskmovq (%ecx),%ymm4,%ymm6
12         vpmaskmovq %ymm4,%ymm6,(%ecx)
13
14 # Tests for op imm8, ymm/mem256, ymm
15         vpermpd $7,%ymm6,%ymm2
16         vpermpd $7,(%ecx),%ymm6
17         vpermq $7,%ymm6,%ymm2
18         vpermq $7,(%ecx),%ymm6
19
20 # Tests for op ymm/mem256, ymm, ymm
21         vpermd %ymm4,%ymm6,%ymm2
22         vpermd (%ecx),%ymm6,%ymm2
23         vpermps %ymm4,%ymm6,%ymm2
24         vpermps (%ecx),%ymm6,%ymm2
25         vpsllvd %ymm4,%ymm6,%ymm2
26         vpsllvd (%ecx),%ymm6,%ymm2
27         vpsllvq %ymm4,%ymm6,%ymm2
28         vpsllvq (%ecx),%ymm6,%ymm2
29         vpsravd %ymm4,%ymm6,%ymm2
30         vpsravd (%ecx),%ymm6,%ymm2
31         vpsrlvd %ymm4,%ymm6,%ymm2
32         vpsrlvd (%ecx),%ymm6,%ymm2
33         vpsrlvq %ymm4,%ymm6,%ymm2
34         vpsrlvq (%ecx),%ymm6,%ymm2
35
36 # Tests for op mem256, ymm
37         vmovntdqa (%ecx),%ymm4
38
39 # Tests for op ymm, xmm
40         vbroadcastsd %xmm4,%ymm6
41         vbroadcastss %xmm4,%ymm6
42
43 # Tests for op imm8, ymm/mem256, ymm, ymm
44         vpblendd $7,%ymm4,%ymm6,%ymm2
45         vpblendd $7,(%ecx),%ymm6,%ymm2
46         vperm2i128 $7,%ymm4,%ymm6,%ymm2
47         vperm2i128 $7,(%ecx),%ymm6,%ymm2
48
49 # Tests for op imm8, xmm/mem128, ymm, ymm
50         vinserti128 $7,%xmm4,%ymm4,%ymm6
51         vinserti128 $7,(%ecx),%ymm4,%ymm6
52
53 # Tests for op mem128, ymm
54         vbroadcasti128 (%ecx),%ymm4
55
56 # Tests for op xmm/mem128, xmm, xmm
57         vpsllvd %xmm4,%xmm6,%xmm2
58         vpsllvd (%ecx),%xmm6,%xmm7
59         vpsllvq %xmm4,%xmm6,%xmm2
60         vpsllvq (%ecx),%xmm6,%xmm7
61         vpsravd %xmm4,%xmm6,%xmm2
62         vpsravd (%ecx),%xmm6,%xmm7
63         vpsrlvd %xmm4,%xmm6,%xmm2
64         vpsrlvd (%ecx),%xmm6,%xmm7
65         vpsrlvq %xmm4,%xmm6,%xmm2
66         vpsrlvq (%ecx),%xmm6,%xmm7
67
68 # Tests for op mem128, xmm, xmm
69         vpmaskmovd (%ecx),%xmm4,%xmm6
70         vpmaskmovq (%ecx),%xmm4,%xmm6
71
72 # Tests for op imm8, ymm, xmm128/mem
73         vextracti128 $7,%ymm4,%xmm6
74         vextracti128 $7,%ymm4,(%ecx)
75
76 # Tests for op xmm, xmm, mem128
77         vpmaskmovd %xmm4,%xmm6,(%ecx)
78         vpmaskmovq %xmm4,%xmm6,(%ecx)
79
80 # Tests for op imm8, xmm/mem128, xmm, xmm
81         vpblendd $7,%xmm4,%xmm6,%xmm2
82         vpblendd $7,(%ecx),%xmm6,%xmm2
83
84 # Tests for op xmm/mem64, xmm
85         vpbroadcastq %xmm4,%xmm6
86         vpbroadcastq (%ecx),%xmm4
87
88 # Tests for op xmm/mem64, ymm
89         vpbroadcastq %xmm4,%ymm6
90         vpbroadcastq (%ecx),%ymm4
91
92 # Tests for op xmm/mem32, ymm
93         vpbroadcastd %xmm4,%ymm4
94         vpbroadcastd (%ecx),%ymm4
95
96 # Tests for op xmm/mem32, xmm
97         vpbroadcastd %xmm4,%xmm6
98         vpbroadcastd (%ecx),%xmm4
99
100 # Tests for op xmm/m16, xmm
101         vpbroadcastw %xmm4,%xmm6
102         vpbroadcastw (%ecx),%xmm4
103
104 # Tests for op xmm/m16, ymm
105         vpbroadcastw %xmm4,%ymm6
106         vpbroadcastw (%ecx),%ymm4
107
108 # Tests for op xmm/m8, xmm
109         vpbroadcastb %xmm4,%xmm6
110         vpbroadcastb (%ecx),%xmm4
111
112 # Tests for op xmm/m8, ymm
113         vpbroadcastb %xmm4,%ymm6
114         vpbroadcastb (%ecx),%ymm4
115
116 # Tests for op xmm, xmm
117         vbroadcastss %xmm4,%xmm6
118
119         .intel_syntax noprefix
120
121 # Tests for op mem256, mask,  ymm
122 # Tests for op ymm, mask, mem256
123         vpmaskmovd ymm6,ymm4,YMMWORD PTR [ecx]
124         vpmaskmovd YMMWORD PTR [ecx],ymm6,ymm4
125         vpmaskmovd ymm6,ymm4,[ecx]
126         vpmaskmovd [ecx],ymm6,ymm4
127         vpmaskmovq ymm6,ymm4,YMMWORD PTR [ecx]
128         vpmaskmovq YMMWORD PTR [ecx],ymm6,ymm4
129         vpmaskmovq ymm6,ymm4,[ecx]
130         vpmaskmovq [ecx],ymm6,ymm4
131
132 # Tests for op imm8, ymm/mem256, ymm
133         vpermpd ymm2,ymm6,7
134         vpermpd ymm6,YMMWORD PTR [ecx],7
135         vpermpd ymm6,[ecx],7
136         vpermq ymm2,ymm6,7
137         vpermq ymm6,YMMWORD PTR [ecx],7
138         vpermq ymm6,[ecx],7
139
140 # Tests for op ymm/mem256, ymm, ymm
141         vpermd ymm2,ymm6,ymm4
142         vpermd ymm2,ymm6,YMMWORD PTR [ecx]
143         vpermd ymm2,ymm6,[ecx]
144         vpermps ymm2,ymm6,ymm4
145         vpermps ymm2,ymm6,YMMWORD PTR [ecx]
146         vpermps ymm2,ymm6,[ecx]
147         vpsllvd ymm2,ymm6,ymm4
148         vpsllvd ymm2,ymm6,YMMWORD PTR [ecx]
149         vpsllvd ymm2,ymm6,[ecx]
150         vpsllvq ymm2,ymm6,ymm4
151         vpsllvq ymm2,ymm6,YMMWORD PTR [ecx]
152         vpsllvq ymm2,ymm6,[ecx]
153         vpsravd ymm2,ymm6,ymm4
154         vpsravd ymm2,ymm6,YMMWORD PTR [ecx]
155         vpsravd ymm2,ymm6,[ecx]
156         vpsrlvd ymm2,ymm6,ymm4
157         vpsrlvd ymm2,ymm6,YMMWORD PTR [ecx]
158         vpsrlvd ymm2,ymm6,[ecx]
159         vpsrlvq ymm2,ymm6,ymm4
160         vpsrlvq ymm2,ymm6,YMMWORD PTR [ecx]
161         vpsrlvq ymm2,ymm6,[ecx]
162
163 # Tests for op mem256, ymm
164         vmovntdqa ymm4,YMMWORD PTR [ecx]
165         vmovntdqa ymm4,[ecx]
166
167 # Tests for op ymm, xmm
168         vbroadcastsd ymm6,xmm4
169         vbroadcastss ymm6,xmm4
170
171 # Tests for op imm8, ymm/mem256, ymm, ymm
172         vpblendd ymm2,ymm6,ymm4,7
173         vpblendd ymm2,ymm6,YMMWORD PTR [ecx],7
174         vpblendd ymm2,ymm6,[ecx],7
175         vperm2i128 ymm2,ymm6,ymm4,7
176         vperm2i128 ymm2,ymm6,YMMWORD PTR [ecx],7
177         vperm2i128 ymm2,ymm6,[ecx],7
178
179 # Tests for op imm8, xmm/mem128, ymm, ymm
180         vinserti128 ymm6,ymm4,xmm4,7
181         vinserti128 ymm6,ymm4,XMMWORD PTR [ecx],7
182         vinserti128 ymm6,ymm4,[ecx],7
183
184 # Tests for op mem128, ymm
185         vbroadcasti128 ymm4,XMMWORD PTR [ecx]
186         vbroadcasti128 ymm4,[ecx]
187
188 # Tests for op xmm/mem128, xmm, xmm
189         vpsllvd xmm2,xmm6,xmm4
190         vpsllvd xmm7,xmm6,XMMWORD PTR [ecx]
191         vpsllvd xmm7,xmm6,[ecx]
192         vpsllvq xmm2,xmm6,xmm4
193         vpsllvq xmm7,xmm6,XMMWORD PTR [ecx]
194         vpsllvq xmm7,xmm6,[ecx]
195         vpsravd xmm2,xmm6,xmm4
196         vpsravd xmm7,xmm6,XMMWORD PTR [ecx]
197         vpsravd xmm7,xmm6,[ecx]
198         vpsrlvd xmm2,xmm6,xmm4
199         vpsrlvd xmm7,xmm6,XMMWORD PTR [ecx]
200         vpsrlvd xmm7,xmm6,[ecx]
201         vpsrlvq xmm2,xmm6,xmm4
202         vpsrlvq xmm7,xmm6,XMMWORD PTR [ecx]
203         vpsrlvq xmm7,xmm6,[ecx]
204
205 # Tests for op mem128, xmm, xmm
206         vpmaskmovd xmm6,xmm4,XMMWORD PTR [ecx]
207         vpmaskmovd xmm6,xmm4,[ecx]
208         vpmaskmovq xmm6,xmm4,XMMWORD PTR [ecx]
209         vpmaskmovq xmm6,xmm4,[ecx]
210
211 # Tests for op imm8, ymm, xmm128/mem
212         vextracti128 xmm6,ymm4,7
213         vextracti128 XMMWORD PTR [ecx],ymm4,7
214         vextracti128 [ecx],ymm4,7
215
216 # Tests for op xmm, xmm, mem128
217         vpmaskmovd XMMWORD PTR [ecx],xmm6,xmm4
218         vpmaskmovd [ecx],xmm6,xmm4
219         vpmaskmovq XMMWORD PTR [ecx],xmm6,xmm4
220         vpmaskmovq [ecx],xmm6,xmm4
221
222 # Tests for op imm8, xmm/mem128, xmm, xmm
223         vpblendd xmm2,xmm6,xmm4,7
224         vpblendd xmm2,xmm6,XMMWORD PTR [ecx],7
225         vpblendd xmm2,xmm6,[ecx],7
226
227 # Tests for op xmm/mem64, xmm
228         vpbroadcastq xmm6,xmm4
229         vpbroadcastq xmm4,QWORD PTR [ecx]
230         vpbroadcastq xmm4,[ecx]
231
232 # Tests for op xmm/mem64, ymm
233         vpbroadcastq ymm6,xmm4
234         vpbroadcastq ymm4,QWORD PTR [ecx]
235         vpbroadcastq ymm4,[ecx]
236
237 # Tests for op xmm/mem32, ymm
238         vpbroadcastd ymm4,xmm4
239         vpbroadcastd ymm4,DWORD PTR [ecx]
240         vpbroadcastd ymm4,[ecx]
241
242 # Tests for op xmm/mem32, xmm
243         vpbroadcastd xmm6,xmm4
244         vpbroadcastd xmm4,DWORD PTR [ecx]
245         vpbroadcastd xmm4,[ecx]
246
247 # Tests for op xmm/m16, xmm
248         vpbroadcastw xmm6,xmm4
249         vpbroadcastw xmm4,WORD PTR [ecx]
250         vpbroadcastw xmm4,[ecx]
251
252 # Tests for op xmm/m16, ymm
253         vpbroadcastw ymm6,xmm4
254         vpbroadcastw ymm4,WORD PTR [ecx]
255         vpbroadcastw ymm4,[ecx]
256
257 # Tests for op xmm/m8, xmm
258         vpbroadcastb xmm6,xmm4
259         vpbroadcastb xmm4,BYTE PTR [ecx]
260         vpbroadcastb xmm4,[ecx]
261
262 # Tests for op xmm/m8, ymm
263         vpbroadcastb ymm6,xmm4
264         vpbroadcastb ymm4,BYTE PTR [ecx]
265         vpbroadcastb ymm4,[ecx]
266
267 # Tests for op xmm, xmm
268         vbroadcastss xmm6,xmm4