diff options
Diffstat (limited to 'test/MC/X86/x86-32.s')
-rw-r--r-- | test/MC/X86/x86-32.s | 585 |
1 files changed, 585 insertions, 0 deletions
diff --git a/test/MC/X86/x86-32.s b/test/MC/X86/x86-32.s new file mode 100644 index 0000000..fd0fd75 --- /dev/null +++ b/test/MC/X86/x86-32.s @@ -0,0 +1,585 @@ +// RUN: llvm-mc -triple i386-unknown-unknown --show-encoding %s | FileCheck %s + + pause +// CHECK: pause +// CHECK: encoding: [0xf3,0x90] + sfence +// CHECK: sfence +// CHECK: encoding: [0x0f,0xae,0xf8] + lfence +// CHECK: lfence +// CHECK: encoding: [0x0f,0xae,0xe8] + mfence +// CHECK: mfence +// CHECK: encoding: [0x0f,0xae,0xf0] + monitor +// CHECK: monitor +// CHECK: encoding: [0x0f,0x01,0xc8] + mwait +// CHECK: mwait +// CHECK: encoding: [0x0f,0x01,0xc9] + + vmcall +// CHECK: vmcall +// CHECK: encoding: [0x0f,0x01,0xc1] + vmlaunch +// CHECK: vmlaunch +// CHECK: encoding: [0x0f,0x01,0xc2] + vmresume +// CHECK: vmresume +// CHECK: encoding: [0x0f,0x01,0xc3] + vmxoff +// CHECK: vmxoff +// CHECK: encoding: [0x0f,0x01,0xc4] + swapgs +// CHECK: swapgs +// CHECK: encoding: [0x0f,0x01,0xf8] + +rdtscp +// CHECK: rdtscp +// CHECK: encoding: [0x0f,0x01,0xf9] + + +// CHECK: movl %eax, 16(%ebp) # encoding: [0x89,0x45,0x10] + movl %eax, 16(%ebp) +// CHECK: movl %eax, -16(%ebp) # encoding: [0x89,0x45,0xf0] + movl %eax, -16(%ebp) + +// CHECK: testb %bl, %cl # encoding: [0x84,0xcb] + testb %bl, %cl + +// CHECK: cmpl %eax, %ebx # encoding: [0x39,0xc3] + cmpl %eax, %ebx + +// CHECK: addw %ax, %ax # encoding: [0x66,0x01,0xc0] + addw %ax, %ax + +// CHECK: shrl %eax # encoding: [0xd1,0xe8] + shrl $1, %eax + +// moffset forms of moves, rdar://7947184 +movb 0, %al // CHECK: movb 0, %al # encoding: [0xa0,A,A,A,A] +movw 0, %ax // CHECK: movw 0, %ax # encoding: [0x66,0xa1,A,A,A,A] +movl 0, %eax // CHECK: movl 0, %eax # encoding: [0xa1,A,A,A,A] + +// rdar://7973775 +into +// CHECK: into +// CHECK: encoding: [0xce] +int3 +// CHECK: int3 +// CHECK: encoding: [0xcc] +int $4 +// CHECK: int $4 +// CHECK: encoding: [0xcd,0x04] +int $255 +// CHECK: int $255 +// CHECK: encoding: [0xcd,0xff] + +// CHECK: pushfl # encoding: [0x9c] + pushf +// CHECK: pushfl # encoding: [0x9c] + pushfl +// CHECK: popfl # encoding: [0x9d] + popf +// CHECK: popfl # encoding: [0x9d] + popfl + +// rdar://8014869 +retl +// CHECK: ret +// CHECK: encoding: [0xc3] + +// rdar://7973854 +// CHECK: cmoval %eax, %edx +// CHECK: encoding: [0x0f,0x47,0xd0] + cmoval %eax,%edx + +// CHECK: cmovael %eax, %edx +// CHECK: encoding: [0x0f,0x43,0xd0] + cmovael %eax,%edx + +// CHECK: cmovbel %eax, %edx +// CHECK: encoding: [0x0f,0x46,0xd0] + cmovbel %eax,%edx + +// CHECK: cmovbl %eax, %edx +// CHECK: encoding: [0x0f,0x42,0xd0] + cmovbl %eax,%edx + +// CHECK: cmovbw %bx, %bx +cmovnae %bx,%bx + + +// CHECK: cmovbel %eax, %edx +// CHECK: encoding: [0x0f,0x46,0xd0] + cmovbel %eax,%edx + +// CHECK: cmovbl %eax, %edx +// CHECK: encoding: [0x0f,0x42,0xd0] + cmovcl %eax,%edx + +// CHECK: cmovel %eax, %edx +// CHECK: encoding: [0x0f,0x44,0xd0] + cmovel %eax,%edx + +// CHECK: cmovgl %eax, %edx +// CHECK: encoding: [0x0f,0x4f,0xd0] + cmovgl %eax,%edx + +// CHECK: cmovgel %eax, %edx +// CHECK: encoding: [0x0f,0x4d,0xd0] + cmovgel %eax,%edx + +// CHECK: cmovll %eax, %edx +// CHECK: encoding: [0x0f,0x4c,0xd0] + cmovll %eax,%edx + +// CHECK: cmovlel %eax, %edx +// CHECK: encoding: [0x0f,0x4e,0xd0] + cmovlel %eax,%edx + +// CHECK: cmovbel %eax, %edx +// CHECK: encoding: [0x0f,0x46,0xd0] + cmovnal %eax,%edx + +// CHECK: cmovnel %eax, %edx +// CHECK: encoding: [0x0f,0x45,0xd0] + cmovnel %eax,%edx + +// CHECK: cmovael %eax, %edx +// CHECK: encoding: [0x0f,0x43,0xd0] + cmovnbl %eax,%edx + +// CHECK: cmoval %eax, %edx +// CHECK: encoding: [0x0f,0x47,0xd0] + cmovnbel %eax,%edx + +// CHECK: cmovael %eax, %edx +// CHECK: encoding: [0x0f,0x43,0xd0] + cmovncl %eax,%edx + +// CHECK: cmovnel %eax, %edx +// CHECK: encoding: [0x0f,0x45,0xd0] + cmovnel %eax,%edx + +// CHECK: cmovlel %eax, %edx +// CHECK: encoding: [0x0f,0x4e,0xd0] + cmovngl %eax,%edx + +// CHECK: cmovgel %eax, %edx +// CHECK: encoding: [0x0f,0x4d,0xd0] + cmovnl %eax,%edx + +// CHECK: cmovnel %eax, %edx +// CHECK: encoding: [0x0f,0x45,0xd0] + cmovnel %eax,%edx + +// CHECK: cmovlel %eax, %edx +// CHECK: encoding: [0x0f,0x4e,0xd0] + cmovngl %eax,%edx + +// CHECK: cmovll %eax, %edx +// CHECK: encoding: [0x0f,0x4c,0xd0] + cmovngel %eax,%edx + +// CHECK: cmovgel %eax, %edx +// CHECK: encoding: [0x0f,0x4d,0xd0] + cmovnll %eax,%edx + +// CHECK: cmovgl %eax, %edx +// CHECK: encoding: [0x0f,0x4f,0xd0] + cmovnlel %eax,%edx + +// CHECK: cmovnol %eax, %edx +// CHECK: encoding: [0x0f,0x41,0xd0] + cmovnol %eax,%edx + +// CHECK: cmovnpl %eax, %edx +// CHECK: encoding: [0x0f,0x4b,0xd0] + cmovnpl %eax,%edx + +// CHECK: cmovnsl %eax, %edx +// CHECK: encoding: [0x0f,0x49,0xd0] + cmovnsl %eax,%edx + +// CHECK: cmovnel %eax, %edx +// CHECK: encoding: [0x0f,0x45,0xd0] + cmovnzl %eax,%edx + +// CHECK: cmovol %eax, %edx +// CHECK: encoding: [0x0f,0x40,0xd0] + cmovol %eax,%edx + +// CHECK: cmovpl %eax, %edx +// CHECK: encoding: [0x0f,0x4a,0xd0] + cmovpl %eax,%edx + +// CHECK: cmovsl %eax, %edx +// CHECK: encoding: [0x0f,0x48,0xd0] + cmovsl %eax,%edx + +// CHECK: cmovel %eax, %edx +// CHECK: encoding: [0x0f,0x44,0xd0] + cmovzl %eax,%edx + +// CHECK: cmpps $0, %xmm0, %xmm1 +// CHECK: encoding: [0x0f,0xc2,0xc8,0x00] + cmpps $0, %xmm0, %xmm1 +// CHECK: cmpps $0, (%eax), %xmm1 +// CHECK: encoding: [0x0f,0xc2,0x08,0x00] + cmpps $0, 0(%eax), %xmm1 +// CHECK: cmppd $0, %xmm0, %xmm1 +// CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x00] + cmppd $0, %xmm0, %xmm1 +// CHECK: cmppd $0, (%eax), %xmm1 +// CHECK: encoding: [0x66,0x0f,0xc2,0x08,0x00] + cmppd $0, 0(%eax), %xmm1 +// CHECK: cmpss $0, %xmm0, %xmm1 +// CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x00] + cmpss $0, %xmm0, %xmm1 +// CHECK: cmpss $0, (%eax), %xmm1 +// CHECK: encoding: [0xf3,0x0f,0xc2,0x08,0x00] + cmpss $0, 0(%eax), %xmm1 +// CHECK: cmpsd $0, %xmm0, %xmm1 +// CHECK: encoding: [0xf2,0x0f,0xc2,0xc8,0x00] + cmpsd $0, %xmm0, %xmm1 +// CHECK: cmpsd $0, (%eax), %xmm1 +// CHECK: encoding: [0xf2,0x0f,0xc2,0x08,0x00] + cmpsd $0, 0(%eax), %xmm1 + +// Check matching of instructions which embed the SSE comparison code. + +// CHECK: cmpps $0, %xmm0, %xmm1 +// CHECK: encoding: [0x0f,0xc2,0xc8,0x00] + cmpeqps %xmm0, %xmm1 + +// CHECK: cmppd $1, %xmm0, %xmm1 +// CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x01] + cmpltpd %xmm0, %xmm1 + +// CHECK: cmpss $2, %xmm0, %xmm1 +// CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x02] + cmpless %xmm0, %xmm1 + +// CHECK: cmppd $3, %xmm0, %xmm1 +// CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x03] + cmpunordpd %xmm0, %xmm1 + +// CHECK: cmpps $4, %xmm0, %xmm1 +// CHECK: encoding: [0x0f,0xc2,0xc8,0x04] + cmpneqps %xmm0, %xmm1 + +// CHECK: cmppd $5, %xmm0, %xmm1 +// CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x05] + cmpnltpd %xmm0, %xmm1 + +// CHECK: cmpss $6, %xmm0, %xmm1 +// CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x06] + cmpnless %xmm0, %xmm1 + +// CHECK: cmpsd $7, %xmm0, %xmm1 +// CHECK: encoding: [0xf2,0x0f,0xc2,0xc8,0x07] + cmpordsd %xmm0, %xmm1 + +// rdar://7995856 +// CHECK: fmul %st(0) +// CHECK: encoding: [0xd8,0xc8] + fmul %st(0), %st + +// CHECK: fadd %st(0) +// CHECK: encoding: [0xd8,0xc0] + fadd %st(0), %st + +// CHECK: fsub %st(0) +// CHECK: encoding: [0xd8,0xe0] + fsub %st(0), %st + +// CHECK: fsubr %st(0) +// CHECK: encoding: [0xd8,0xe8] + fsubr %st(0), %st + +// CHECK: fdivr %st(0) +// CHECK: encoding: [0xd8,0xf8] + fdivr %st(0), %st + +// CHECK: fdiv %st(0) +// CHECK: encoding: [0xd8,0xf0] + fdiv %st(0), %st + +// radr://8017519 +// CHECK: movl %cs, %eax +// CHECK: encoding: [0x8c,0xc8] + movl %cs, %eax + +// CHECK: movw %cs, %ax +// CHECK: encoding: [0x66,0x8c,0xc8] + movw %cs, %ax + +// CHECK: movl %cs, (%eax) +// CHECK: encoding: [0x8c,0x08] + movl %cs, (%eax) + +// CHECK: movw %cs, (%eax) +// CHECK: encoding: [0x66,0x8c,0x08] + movw %cs, (%eax) + +// CHECK: movl %eax, %cs +// CHECK: encoding: [0x8e,0xc8] + movl %eax, %cs + +// CHECK: movl (%eax), %cs +// CHECK: encoding: [0x8e,0x08] + movl (%eax), %cs + +// CHECK: movw (%eax), %cs +// CHECK: encoding: [0x66,0x8e,0x08] + movw (%eax), %cs + +// radr://8033374 +// CHECK: movl %cr0, %eax +// CHECK: encoding: [0x0f,0x20,0xc0] + movl %cr0,%eax + +// CHECK: movl %cr1, %eax +// CHECK: encoding: [0x0f,0x20,0xc8] + movl %cr1,%eax + +// CHECK: movl %cr2, %eax +// CHECK: encoding: [0x0f,0x20,0xd0] + movl %cr2,%eax + +// CHECK: movl %cr3, %eax +// CHECK: encoding: [0x0f,0x20,0xd8] + movl %cr3,%eax + +// CHECK: movl %cr4, %eax +// CHECK: encoding: [0x0f,0x20,0xe0] + movl %cr4,%eax + +// CHECK: movl %dr0, %eax +// CHECK: encoding: [0x0f,0x21,0xc0] + movl %dr0,%eax + +// CHECK: movl %dr1, %eax +// CHECK: encoding: [0x0f,0x21,0xc8] + movl %dr1,%eax + +// CHECK: movl %dr1, %eax +// CHECK: encoding: [0x0f,0x21,0xc8] + movl %dr1,%eax + +// CHECK: movl %dr2, %eax +// CHECK: encoding: [0x0f,0x21,0xd0] + movl %dr2,%eax + +// CHECK: movl %dr3, %eax +// CHECK: encoding: [0x0f,0x21,0xd8] + movl %dr3,%eax + +// CHECK: movl %dr4, %eax +// CHECK: encoding: [0x0f,0x21,0xe0] + movl %dr4,%eax + +// CHECK: movl %dr5, %eax +// CHECK: encoding: [0x0f,0x21,0xe8] + movl %dr5,%eax + +// CHECK: movl %dr6, %eax +// CHECK: encoding: [0x0f,0x21,0xf0] + movl %dr6,%eax + +// CHECK: movl %dr7, %eax +// CHECK: encoding: [0x0f,0x21,0xf8] + movl %dr7,%eax + +// radr://8017522 +// CHECK: wait +// CHECK: encoding: [0x9b] + fwait + +// rdar://7873482 +// CHECK: [0x65,0x8b,0x05,0x7c,0x00,0x00,0x00] +// FIXME: This is a correct bug poor encoding: Use 65 a1 7c 00 00 00 + movl %gs:124, %eax + +// CHECK: pusha +// CHECK: encoding: [0x60] + pusha + +// CHECK: popa +// CHECK: encoding: [0x61] + popa + +// CHECK: pushal +// CHECK: encoding: [0x60] + pushal + +// CHECK: popal +// CHECK: encoding: [0x61] + popal + +// CHECK: jmpl *8(%eax) +// CHECK: encoding: [0xff,0x60,0x08] + jmp *8(%eax) + +// PR7465 +// CHECK: lcalll $2, $4660 +// CHECK: encoding: [0x9a,0x34,0x12,0x00,0x00,0x02,0x00] +lcalll $0x2, $0x1234 + + +// rdar://8061602 +L1: + jcxz L1 +// CHECK: jcxz L1 +// CHECK: encoding: [0x67,0xe3,A] + jecxz L1 +// CHECK: jecxz L1 +// CHECK: encoding: [0xe3,A] + +// rdar://8403974 +iret +// CHECK: iretl +// CHECK: encoding: [0xcf] +iretw +// CHECK: iretw +// CHECK: encoding: [0x66,0xcf] +iretl +// CHECK: iretl +// CHECK: encoding: [0xcf] + +// rdar://8403907 +sysret +// CHECK: sysretl +// CHECK: encoding: [0x0f,0x07] +sysretl +// CHECK: sysretl +// CHECK: encoding: [0x0f,0x07] + +// rdar://8018260 +testl %ecx, -24(%ebp) +// CHECK: testl -24(%ebp), %ecx +testl -24(%ebp), %ecx +// CHECK: testl -24(%ebp), %ecx + + +// rdar://8407242 +push %cs +// CHECK: pushl %cs +// CHECK: encoding: [0x0e] +push %ds +// CHECK: pushl %ds +// CHECK: encoding: [0x1e] +push %ss +// CHECK: pushl %ss +// CHECK: encoding: [0x16] +push %es +// CHECK: pushl %es +// CHECK: encoding: [0x06] +push %fs +// CHECK: pushl %fs +// CHECK: encoding: [0x0f,0xa0] +push %gs +// CHECK: pushl %gs +// CHECK: encoding: [0x0f,0xa8] + +pushw %cs +// CHECK: pushw %cs +// CHECK: encoding: [0x66,0x0e] +pushw %ds +// CHECK: pushw %ds +// CHECK: encoding: [0x66,0x1e] +pushw %ss +// CHECK: pushw %ss +// CHECK: encoding: [0x66,0x16] +pushw %es +// CHECK: pushw %es +// CHECK: encoding: [0x66,0x06] +pushw %fs +// CHECK: pushw %fs +// CHECK: encoding: [0x66,0x0f,0xa0] +pushw %gs +// CHECK: pushw %gs +// CHECK: encoding: [0x66,0x0f,0xa8] + +pop %ss +// CHECK: popl %ss +// CHECK: encoding: [0x17] +pop %ds +// CHECK: popl %ds +// CHECK: encoding: [0x1f] +pop %es +// CHECK: popl %es +// CHECK: encoding: [0x07] + +// rdar://8408129 +pushfd +// CHECK: pushfl +popfd +// CHECK: popfl +pushfl +// CHECK: pushfl +popfl +// CHECK: popfl + + +// rdar://8416805 + setc %bl + setnae %bl + setnb %bl + setnc %bl + setna %bl + setnbe %bl + setpe %bl + setpo %bl + setnge %bl + setnl %bl + setng %bl + setnle %bl + + + + +// CHECK: lcalll $31438, $31438 +// CHECK: lcalll $31438, $31438 +// CHECK: ljmpl $31438, $31438 +// CHECK: ljmpl $31438, $31438 + +calll $0x7ace,$0x7ace +lcalll $0x7ace,$0x7ace +jmpl $0x7ace,$0x7ace +ljmpl $0x7ace,$0x7ace + +// CHECK: lcalll $31438, $31438 +// CHECK: lcalll $31438, $31438 +// CHECK: ljmpl $31438, $31438 +// CHECK: ljmpl $31438, $31438 + +call $0x7ace,$0x7ace +lcall $0x7ace,$0x7ace +jmp $0x7ace,$0x7ace +ljmp $0x7ace,$0x7ace + +// rdar://8456370 +// CHECK: calll a + calll a + +// CHECK: incb %al # encoding: [0xfe,0xc0] + incb %al + +// CHECK: incw %ax # encoding: [0x66,0x40] + incw %ax + +// CHECK: incl %eax # encoding: [0x40] + incl %eax + +// CHECK: decb %al # encoding: [0xfe,0xc8] + decb %al + +// CHECK: decw %ax # encoding: [0x66,0x48] + decw %ax + +// CHECK: decl %eax # encoding: [0x48] + decl %eax + |