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
99 // NOTE: repz and repe have the same opcode as rep
104 // NOTE: repnz has the same opcode as repne
109 // NOTE: repe and repz have the same opcode as rep
119 // CHECK: cmpxchgb %al, (%ebx)
120 lock;cmpxchgb %al, 0(%ebx)
123 // CHECK: movb (%eax), %al
127 // CHECK: movb (%eax), %al
131 // CHECK: movb (%eax), %al
135 // CHECK: movb (%eax), %al
139 // CHECK: movb (%eax), %al
143 // CHECK: movb (%eax), %al
146 // CHECK: fadd %st(0)
147 // CHECK: fadd %st(1)
148 // CHECK: fadd %st(7)
154 // CHECK: leal 0, %eax
157 // rdar://7986634 - Insensitivity on opcodes.
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)
167 // CHECK: imull $12, %eax, %eax
170 // CHECK: imull %ecx, %eax
175 // CHECK: outb %al, $161
177 // CHECK: outw %ax, $128
179 // CHECK: inb $161, %al
191 // CHECK: cmovnew %bx, %ax
193 // CHECK: cmovneq %rbx, %rax
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
211 // CHECK: outb %al, %dx
212 // CHECK: outw %ax, %dx
213 // CHECK: outl %eax, %dx
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)
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)
267 // CHECK: rclb $1, %bl
268 // CHECK: rcll $1, 3735928559(%ebx,%ecx,8)
269 // CHECK: rcrl $1, %ecx
270 // CHECK: rcrl $1, 305419896
273 rcll 0xdeadbeef(%ebx,%ecx,8)
278 // CHECK: shldw $1, %bx, %bx
279 // CHECK: shldw $1, %bx, %bx
280 // CHECK: shrdw $1, %bx, %bx
281 // CHECK: shrdw $1, %bx, %bx
289 // CHECK: encoding: [0x0f,0x00,0xc1]
291 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
296 // CHECK: lcalll *3135175374
297 // CHECK: ljmpl *3135175374
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]
315 // CHECK: fstps (%eax)
316 // CHECK: encoding: [0xd9,0x18]
320 // CHECK: movw %cs, %ax
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)
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)
334 fcmovnae %st(1), %st(0) // CHECK: fcmovb %st(1), %st(0)
335 fcmovna %st(1), %st(0) // CHECK: fcmovbe %st(1), %st(0)
337 fcmovae %st(1), %st(0) // CHECK: fcmovnb %st(1), %st(0)
338 fcmova %st(1), %st(0) // CHECK: fcmovnbe %st(1), %st(0)
341 .byte 88 + 1 & 15 // CHECK: .byte 9
345 // CHECK: movq %rdx, %cr0
346 // CHECK: encoding: [0x0f,0x22,0xc2]
348 // CHECK: movq %rdx, %cr4
349 // CHECK: encoding: [0x0f,0x22,0xe2]
351 // CHECK: movq %rdx, %cr8
352 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
354 // CHECK: movq %rdx, %cr15
355 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
357 // rdar://8456371 - Handle commutable instructions written backward.
358 // CHECK: faddp %st(1)
359 // CHECK: fmulp %st(2)
363 // rdar://8468087 - Encode these accurately, they are not synonyms.
364 // CHECK: fmul %st(0), %st(1)
365 // CHECK: encoding: [0xdc,0xc9]
366 // CHECK: fmul %st(1)
367 // CHECK: encoding: [0xd8,0xc9]
371 // CHECK: fadd %st(0), %st(1)
372 // CHECK: encoding: [0xdc,0xc1]
373 // CHECK: fadd %st(1)
374 // CHECK: encoding: [0xd8,0xc1]
380 // CHECK: xorb %al, %al
381 // CHECK: encoding: [0x30,0xc0]
382 // CHECK: xorw %di, %di
383 // CHECK: encoding: [0x66,0x31,0xff]
384 // CHECK: xorl %esi, %esi
385 // CHECK: encoding: [0x31,0xf6]
386 // CHECK: xorq %rsi, %rsi
387 // CHECK: encoding: [0x48,0x31,0xf6]