9725e9dcbfda915c23b6d33715bebb46c5947e4d
[oota-llvm.git] / test / MC / AsmParser / X86 / x86_instructions.s
1 // RUN: llvm-mc -triple x86_64-unknown-unknown -show-encoding %s > %t 2> %t.err
2 // RUN: FileCheck < %t %s
3 // RUN: FileCheck --check-prefix=CHECK-STDERR < %t.err %s
4
5 // CHECK: subb %al, %al
6         subb %al, %al
7
8 // CHECK: addl $24, %eax
9         addl $24, %eax
10
11 // CHECK: movl %eax, 10(%ebp)
12         movl %eax, 10(%ebp)
13 // CHECK: movl %eax, 10(%ebp,%ebx)
14         movl %eax, 10(%ebp, %ebx)
15 // CHECK: movl %eax, 10(%ebp,%ebx,4)
16         movl %eax, 10(%ebp, %ebx, 4)
17 // CHECK: movl %eax, 10(,%ebx,4)
18         movl %eax, 10(, %ebx, 4)
19
20 // CHECK: movl 0, %eax        
21         movl 0, %eax
22 // CHECK: movl $0, %eax        
23         movl $0, %eax
24         
25 // CHECK: ret
26         ret
27         
28 // FIXME: Check that this matches SUB32ri8
29 // CHECK: subl $1, %eax
30         subl $1, %eax
31         
32 // FIXME: Check that this matches SUB32ri8
33 // CHECK: subl $-1, %eax
34         subl $-1, %eax
35         
36 // FIXME: Check that this matches SUB32ri
37 // CHECK: subl $256, %eax
38         subl $256, %eax
39
40 // FIXME: Check that this matches XOR64ri8
41 // CHECK: xorq $1, %rax
42         xorq $1, %rax
43         
44 // FIXME: Check that this matches XOR64ri32
45 // CHECK: xorq $256, %rax
46         xorq $256, %rax
47
48 // FIXME: Check that this matches SUB8rr
49 // CHECK: subb %al, %bl
50         subb %al, %bl
51
52 // FIXME: Check that this matches SUB16rr
53 // CHECK: subw %ax, %bx
54         subw %ax, %bx
55         
56 // FIXME: Check that this matches SUB32rr
57 // CHECK: subl %eax, %ebx
58         subl %eax, %ebx
59         
60 // FIXME: Check that this matches the correct instruction.
61 // CHECK: callq *%rax
62         call *%rax
63
64 // FIXME: Check that this matches the correct instruction.
65 // CHECK: shldl %cl, %eax, %ebx
66         shldl %cl, %eax, %ebx
67
68 // CHECK: shll $2, %eax
69         shll $2, %eax
70
71 // CHECK: shll $2, %eax
72         sall $2, %eax
73
74 // CHECK: rep
75 // CHECK: insb
76         rep;insb
77
78 // CHECK: rep
79 // CHECK: outsb
80         rep;outsb
81
82 // CHECK: rep
83 // CHECK: movsb
84         rep;movsb
85
86 // rdar://8456361
87 // CHECK: rep
88 // CHECK: movsl
89         rep movsd
90
91 // CHECK: rep
92 // CHECK: lodsb
93         rep;lodsb
94
95 // CHECK: rep
96 // CHECK: stosb
97         rep;stosb
98
99 // NOTE: repz and repe have the same opcode as rep
100 // CHECK: rep
101 // CHECK: cmpsb
102         repz;cmpsb
103
104 // NOTE: repnz has the same opcode as repne
105 // CHECK: repne
106 // CHECK: cmpsb
107         repnz;cmpsb
108
109 // NOTE: repe and repz have the same opcode as rep
110 // CHECK: rep
111 // CHECK: scasb
112         repe;scasb
113
114 // CHECK: repne
115 // CHECK: scasb
116         repne;scasb
117
118 // CHECK: lock
119 // CHECK: cmpxchgb %al, (%ebx)
120         lock;cmpxchgb %al, 0(%ebx)
121
122 // CHECK: cs
123 // CHECK: movb (%eax), %al
124         cs;movb 0(%eax), %al
125
126 // CHECK: ss
127 // CHECK: movb (%eax), %al
128         ss;movb 0(%eax), %al
129
130 // CHECK: ds
131 // CHECK: movb (%eax), %al
132         ds;movb 0(%eax), %al
133
134 // CHECK: es
135 // CHECK: movb (%eax), %al
136         es;movb 0(%eax), %al
137
138 // CHECK: fs
139 // CHECK: movb (%eax), %al
140         fs;movb 0(%eax), %al
141
142 // CHECK: gs
143 // CHECK: movb (%eax), %al
144         gs;movb 0(%eax), %al
145
146 // CHECK: fadd %st(0)
147 // CHECK: fadd %st(1)
148 // CHECK: fadd %st(7)
149
150 fadd %st(0)
151 fadd %st(1)
152 fadd %st(7)
153
154 // CHECK: leal 0, %eax
155         leal 0, %eax
156
157 // rdar://7986634 - Insensitivity on opcodes.
158 // CHECK: int3
159 INT3
160
161
162 // Allow scale factor without index register.
163 // CHECK: movaps        %xmm3, (%esi)
164 // CHECK-STDERR: warning: scale factor without index register is ignored
165 movaps %xmm3, (%esi, 2)
166
167 // CHECK: imull $12, %eax, %eax
168 imul $12, %eax
169
170 // CHECK: imull %ecx, %eax
171 imull %ecx, %eax
172
173
174 // rdar://8208481
175 // CHECK: outb  %al, $161
176 outb    %al, $161
177 // CHECK: outw  %ax, $128
178 outw    %ax, $128
179 // CHECK: inb   $161, %al
180 inb     $161, %al
181
182 // rdar://8017621
183 // CHECK: pushq $1
184 push $1
185
186 // rdar://8017530
187 // CHECK: sldtw 4
188 sldt    4
189
190 // rdar://8208499
191 // CHECK: cmovnew       %bx, %ax
192 cmovnz %bx, %ax
193 // CHECK: cmovneq       %rbx, %rax
194 cmovnzq %rbx, %rax
195
196
197 // rdar://8407928
198 // CHECK: inb   $127, %al
199 // CHECK: inw   %dx, %ax
200 // CHECK: outb  %al, $127
201 // CHECK: outw  %ax, %dx
202 // CHECK: inl   %dx, %eax
203 inb     $0x7f
204 inw     %dx
205 outb    $0x7f
206 outw    %dx
207 inl     %dx
208
209
210 // PR8114
211 // CHECK: outb  %al, %dx
212 // CHECK: outw  %ax, %dx
213 // CHECK: outl  %eax, %dx
214
215 out %al, (%dx)
216 out %ax, (%dx)
217 outl %eax, (%dx)
218
219
220 // rdar://8431422
221
222 // CHECK: fxch  %st(1)
223 // CHECK: fucom %st(1)
224 // CHECK: fucomp        %st(1)
225 // CHECK: faddp %st(1)
226 // CHECK: faddp %st(0)
227 // CHECK: fsubp %st(1)
228 // CHECK: fsubrp        %st(1)
229 // CHECK: fmulp %st(1)
230 // CHECK: fdivp %st(1)
231 // CHECK: fdivrp        %st(1)
232
233 fxch
234 fucom
235 fucomp
236 faddp
237 faddp %st
238 fsubp
239 fsubrp
240 fmulp
241 fdivp
242 fdivrp
243
244 // CHECK: fcomi %st(1), %st(0)
245 // CHECK: fcomi %st(2), %st(0)
246 // CHECK: fucomi        %st(1), %st(0)
247 // CHECK: fucomi        %st(2), %st(0)
248 // CHECK: fucomi        %st(2), %st(0)
249
250 fcomi
251 fcomi   %st(2)
252 fucomi
253 fucomi  %st(2)
254 fucomi  %st(2), %st
255
256 // CHECK: fnstsw %ax
257 // CHECK: fnstsw %ax
258 // CHECK: fnstsw %ax
259 // CHECK: fnstsw %ax
260
261 fnstsw
262 fnstsw %ax
263 fnstsw %eax
264 fnstsw %al
265
266 // rdar://8431880
267 // CHECK: rclb  $1, %bl
268 // CHECK: rcll  $1, 3735928559(%ebx,%ecx,8)
269 // CHECK: rcrl  $1, %ecx
270 // CHECK: rcrl  $1, 305419896
271
272 rcl     %bl
273 rcll    0xdeadbeef(%ebx,%ecx,8)
274 rcr     %ecx
275 rcrl    0x12345678
276
277 // rdar://8418316
278 // CHECK: shldw $1, %bx, %bx
279 // CHECK: shldw $1, %bx, %bx
280 // CHECK: shrdw $1, %bx, %bx
281 // CHECK: shrdw $1, %bx, %bx
282
283 shld    %bx,%bx
284 shld    $1, %bx,%bx
285 shrd    %bx,%bx
286 shrd    $1, %bx,%bx
287
288 // CHECK: sldtl %ecx
289 // CHECK: encoding: [0x0f,0x00,0xc1]
290 // CHECK: sldtw %cx
291 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
292
293 sldt    %ecx
294 sldt    %cx
295
296 // CHECK: lcalll        *3135175374 
297 // CHECK: ljmpl *3135175374
298 lcall   *0xbadeface
299 ljmp    *0xbadeface
300
301
302 // rdar://8444631
303 // CHECK: enter $31438, $0
304 // CHECK: encoding: [0xc8,0xce,0x7a,0x00]
305 // CHECK: enter $31438, $1
306 // CHECK: encoding: [0xc8,0xce,0x7a,0x01]
307 // CHECK: enter $31438, $127
308 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f]
309 enter $0x7ace,$0
310 enter $0x7ace,$1
311 enter $0x7ace,$0x7f
312
313
314 // rdar://8456389
315 // CHECK: fstps (%eax)
316 // CHECK: encoding: [0xd9,0x18]
317 fstp    (%eax)
318
319 // rdar://8456364
320 // CHECK: movw  %cs, %ax
321 mov %CS, %ax
322
323 // rdar://8456391
324 fcmovb %st(1), %st(0)   // CHECK: fcmovb        %st(1), %st(0)
325 fcmove %st(1), %st(0)   // CHECK: fcmove        %st(1), %st(0)
326 fcmovbe %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
327 fcmovu %st(1), %st(0)   // CHECK: fcmovu         %st(1), %st(0)
328
329 fcmovnb %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
330 fcmovne %st(1), %st(0)  // CHECK: fcmovne       %st(1), %st(0)
331 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe      %st(1), %st(0)
332 fcmovnu %st(1), %st(0)  // CHECK: fcmovnu       %st(1), %st(0)
333
334 fcmovnae %st(1), %st(0) // CHECK: fcmovb        %st(1), %st(0)
335 fcmovna %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
336
337 fcmovae %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
338 fcmova %st(1), %st(0)   // CHECK: fcmovnbe      %st(1), %st(0)
339
340 // rdar://8456417
341 .byte 88 + 1 & 15  // CHECK: .byte      9
342
343 // rdar://8456412
344 mov %rdx, %cr0
345 // CHECK: movq  %rdx, %cr0
346 // CHECK: encoding: [0x0f,0x22,0xc2]
347 mov %rdx, %cr4
348 // CHECK: movq  %rdx, %cr4
349 // CHECK: encoding: [0x0f,0x22,0xe2]
350 mov %rdx, %cr8
351 // CHECK: movq  %rdx, %cr8
352 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
353 mov %rdx, %cr15
354 // CHECK: movq  %rdx, %cr15
355 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
356
357 // rdar://8456371 - Handle commutable instructions written backward.
358 // CHECK:       faddp   %st(1)
359 // CHECK:       fmulp   %st(2)
360 faddp %st, %st(1)
361 fmulp %st, %st(2)
362
363 // rdar://8416805
364 // CHECK: xorb  %al, %al
365 // CHECK: encoding: [0x30,0xc0]
366 // CHECK: xorw  %di, %di
367 // CHECK: encoding: [0x66,0x31,0xff]
368 // CHECK: xorl  %esi, %esi
369 // CHECK: encoding: [0x31,0xf6]
370 // CHECK: xorq  %rsi, %rsi
371 // CHECK: encoding: [0x48,0x31,0xf6]
372 clrb    %al
373 clr    %di
374 clr    %esi
375 clr    %rsi
376
377