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
5 // CHECK: subb %al, %al
8 // CHECK: addl $24, %eax
11 // CHECK: 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)
20 // CHECK: movl 0, %eax
22 // CHECK: movl $0, %eax
28 // FIXME: Check that this matches SUB32ri8
29 // CHECK: subl $1, %eax
32 // FIXME: Check that this matches SUB32ri8
33 // CHECK: subl $-1, %eax
36 // FIXME: Check that this matches SUB32ri
37 // CHECK: subl $256, %eax
40 // FIXME: Check that this matches XOR64ri8
41 // CHECK: xorq $1, %rax
44 // FIXME: Check that this matches XOR64ri32
45 // CHECK: xorq $256, %rax
48 // FIXME: Check that this matches SUB8rr
49 // CHECK: subb %al, %bl
52 // FIXME: Check that this matches SUB16rr
53 // CHECK: subw %ax, %bx
56 // FIXME: Check that this matches SUB32rr
57 // CHECK: subl %eax, %ebx
60 // FIXME: Check that this matches the correct instruction.
64 // FIXME: Check that this matches the correct instruction.
65 // CHECK: shldl %cl, %eax, %ebx
68 // CHECK: shll $2, %eax
71 // CHECK: shll $2, %eax
106 // NOTE: repz and repe have the same opcode as rep
111 // NOTE: repnz has the same opcode as repne
116 // NOTE: repe and repz have the same opcode as rep
126 // CHECK: cmpxchgb %al, (%ebx)
127 lock;cmpxchgb %al, 0(%ebx)
130 // CHECK: movb (%eax), %al
134 // CHECK: movb (%eax), %al
138 // CHECK: movb (%eax), %al
142 // CHECK: movb (%eax), %al
146 // CHECK: movb (%eax), %al
150 // CHECK: movb (%eax), %al
153 // CHECK: fadd %st(0)
154 // CHECK: fadd %st(1)
155 // CHECK: fadd %st(7)
161 // CHECK: leal 0, %eax
164 // rdar://7986634 - Insensitivity on opcodes.
169 // Allow scale factor without index register.
170 // CHECK: movaps %xmm3, (%esi)
171 // CHECK-STDERR: warning: scale factor without index register is ignored
172 movaps %xmm3, (%esi, 2)
174 // CHECK: imull $12, %eax, %eax
177 // CHECK: imull %ecx, %eax
182 // CHECK: outb %al, $161
184 // CHECK: outw %ax, $128
186 // CHECK: inb $161, %al
198 // CHECK: cmovnew %bx, %ax
200 // CHECK: cmovneq %rbx, %rax
205 // CHECK: inb $127, %al
206 // CHECK: inw %dx, %ax
207 // CHECK: outb %al, $127
208 // CHECK: outw %ax, %dx
209 // CHECK: inl %dx, %eax
218 // CHECK: outb %al, %dx
219 // CHECK: outw %ax, %dx
220 // CHECK: outl %eax, %dx
229 // CHECK: fxch %st(1)
230 // CHECK: fucom %st(1)
231 // CHECK: fucomp %st(1)
232 // CHECK: faddp %st(1)
233 // CHECK: faddp %st(0)
234 // CHECK: fsubp %st(1)
235 // CHECK: fsubrp %st(1)
236 // CHECK: fmulp %st(1)
237 // CHECK: fdivp %st(1)
238 // CHECK: fdivrp %st(1)
251 // CHECK: fcomi %st(1), %st(0)
252 // CHECK: fcomi %st(2), %st(0)
253 // CHECK: fucomi %st(1), %st(0)
254 // CHECK: fucomi %st(2), %st(0)
255 // CHECK: fucomi %st(2), %st(0)
274 // CHECK: rclb $1, %bl
275 // CHECK: rcll $1, 3735928559(%ebx,%ecx,8)
276 // CHECK: rcrl $1, %ecx
277 // CHECK: rcrl $1, 305419896
280 rcll 0xdeadbeef(%ebx,%ecx,8)
285 // CHECK: shldw $1, %bx, %bx
286 // CHECK: shldw $1, %bx, %bx
287 // CHECK: shrdw $1, %bx, %bx
288 // CHECK: shrdw $1, %bx, %bx
296 // CHECK: encoding: [0x0f,0x00,0xc1]
298 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
303 // CHECK: lcalll *3135175374
304 // CHECK: ljmpl *3135175374
310 // CHECK: enter $31438, $0
311 // CHECK: encoding: [0xc8,0xce,0x7a,0x00]
312 // CHECK: enter $31438, $1
313 // CHECK: encoding: [0xc8,0xce,0x7a,0x01]
314 // CHECK: enter $31438, $127
315 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f]
322 // CHECK: fstps (%eax)
323 // CHECK: encoding: [0xd9,0x18]
327 // CHECK: movw %cs, %ax
331 fcmovb %st(1), %st(0) // CHECK: fcmovb %st(1), %st(0)
332 fcmove %st(1), %st(0) // CHECK: fcmove %st(1), %st(0)
333 fcmovbe %st(1), %st(0) // CHECK: fcmovbe %st(1), %st(0)
334 fcmovu %st(1), %st(0) // CHECK: fcmovu %st(1), %st(0)
336 fcmovnb %st(1), %st(0) // CHECK: fcmovnb %st(1), %st(0)
337 fcmovne %st(1), %st(0) // CHECK: fcmovne %st(1), %st(0)
338 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe %st(1), %st(0)
339 fcmovnu %st(1), %st(0) // CHECK: fcmovnu %st(1), %st(0)
341 fcmovnae %st(1), %st(0) // CHECK: fcmovb %st(1), %st(0)
342 fcmovna %st(1), %st(0) // CHECK: fcmovbe %st(1), %st(0)
344 fcmovae %st(1), %st(0) // CHECK: fcmovnb %st(1), %st(0)
345 fcmova %st(1), %st(0) // CHECK: fcmovnbe %st(1), %st(0)
348 .byte 88 + 1 & 15 // CHECK: .byte 9
352 // CHECK: movq %rdx, %cr0
353 // CHECK: encoding: [0x0f,0x22,0xc2]
355 // CHECK: movq %rdx, %cr4
356 // CHECK: encoding: [0x0f,0x22,0xe2]
358 // CHECK: movq %rdx, %cr8
359 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
361 // CHECK: movq %rdx, %cr15
362 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
364 // rdar://8456371 - Handle commutable instructions written backward.
365 // CHECK: faddp %st(1)
366 // CHECK: fmulp %st(2)
370 // rdar://8468087 - Encode these accurately, they are not synonyms.
371 // CHECK: fmul %st(0), %st(1)
372 // CHECK: encoding: [0xdc,0xc9]
373 // CHECK: fmul %st(1)
374 // CHECK: encoding: [0xd8,0xc9]
378 // CHECK: fadd %st(0), %st(1)
379 // CHECK: encoding: [0xdc,0xc1]
380 // CHECK: fadd %st(1)
381 // CHECK: encoding: [0xd8,0xc1]
387 // CHECK: xorb %al, %al
388 // CHECK: encoding: [0x30,0xc0]
389 // CHECK: xorw %di, %di
390 // CHECK: encoding: [0x66,0x31,0xff]
391 // CHECK: xorl %esi, %esi
392 // CHECK: encoding: [0x31,0xf6]
393 // CHECK: xorq %rsi, %rsi
394 // CHECK: encoding: [0x48,0x31,0xf6]
411 // rdar://8456378 and PR7557 - fstsw
417 // CHECK: fnstsw (%rax)
420 // rdar://8456382 - cvtsd2si support.
422 // CHECK: cvtsd2si %xmm1, %rax
423 // CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1]
425 // CHECK: cvtsd2si %xmm1, %eax
426 // CHECK: encoding: [0xf2,0x0f,0x2d,0xc1]
428 cvttpd2dq %xmm1, %xmm0 // CHECK: cvttpd2dq %xmm1, %xmm0
429 cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0
431 cvttps2dq %xmm1, %xmm0 // CHECK: cvttps2dq %xmm1, %xmm0
432 cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0