diff options
Diffstat (limited to 'test/MC/X86/index-operations.s')
-rw-r--r-- | test/MC/X86/index-operations.s | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/test/MC/X86/index-operations.s b/test/MC/X86/index-operations.s new file mode 100644 index 0000000..9f69b0b --- /dev/null +++ b/test/MC/X86/index-operations.s @@ -0,0 +1,146 @@ +// RUN: not llvm-mc -triple x86_64-unknown-unknown --show-encoding %s 2> %t.err | FileCheck --check-prefix=64 %s +// RUN: FileCheck --check-prefix=ERR64 < %t.err %s +// RUN: not llvm-mc -triple i386-unknown-unknown --show-encoding %s 2> %t.err | FileCheck --check-prefix=32 %s +// RUN: FileCheck --check-prefix=ERR32 < %t.err %s +// RUN: not llvm-mc -triple i386-unknown-unknown-code16 --show-encoding %s 2> %t.err | FileCheck --check-prefix=16 %s +// RUN: FileCheck --check-prefix=ERR16 < %t.err %s + +lodsb +// 64: lodsb (%rsi), %al # encoding: [0xac] +// 32: lodsb (%esi), %al # encoding: [0xac] +// 16: lodsb (%si), %al # encoding: [0xac] + +lodsb (%rsi), %al +// 64: lodsb (%rsi), %al # encoding: [0xac] +// ERR32: 64-bit +// ERR16: 64-bit + +lodsb (%esi), %al +// 64: lodsb (%esi), %al # encoding: [0x67,0xac] +// 32: lodsb (%esi), %al # encoding: [0xac] +// 16: lodsb (%esi), %al # encoding: [0x67,0xac] + +lodsb (%si), %al +// ERR64: invalid 16-bit base register +// 32: lodsb (%si), %al # encoding: [0x67,0xac] +// 16: lodsb (%si), %al # encoding: [0xac] + +lodsl %gs:(%esi) +// 64: lodsl %gs:(%esi), %eax # encoding: [0x65,0x67,0xad] +// 32: lodsl %gs:(%esi), %eax # encoding: [0x65,0xad] +// 16: lodsl %gs:(%esi), %eax # encoding: [0x66,0x65,0x67,0xad] + +lodsl (%edi), %eax +// ERR64: invalid operand +// ERR32: invalid operand +// ERR16: invalid operand + +lodsl 44(%edi), %eax +// ERR64: invalid operand +// ERR32: invalid operand +// ERR16: invalid operand + +lods (%esi), %ax +// 64: lodsw (%esi), %ax # encoding: [0x66,0x67,0xad] +// 32: lodsw (%esi), %ax # encoding: [0x66,0xad] +// 16: lodsw (%esi), %ax # encoding: [0x67,0xad] + +stosw +// 64: stosw %ax, %es:(%rdi) # encoding: [0x66,0xab] +// 32: stosw %ax, %es:(%edi) # encoding: [0x66,0xab] +// 16: stosw %ax, %es:(%di) # encoding: [0xab] + +stos %eax, (%edi) +// 64: stosl %eax, %es:(%edi) # encoding: [0x67,0xab] +// 32: stosl %eax, %es:(%edi) # encoding: [0xab] +// 16: stosl %eax, %es:(%edi) # encoding: [0x66,0x67,0xab] + +stosb %al, %fs:(%edi) +// ERR64: invalid operand for instruction +// ERR32: invalid operand for instruction +// ERR16: invalid operand for instruction + +stosb %al, %es:(%edi) +// 64: stosb %al, %es:(%edi) # encoding: [0x67,0xaa] +// 32: stosb %al, %es:(%edi) # encoding: [0xaa] +// 16: stosb %al, %es:(%edi) # encoding: [0x67,0xaa] + +stosq +// 64: stosq %rax, %es:(%rdi) # encoding: [0x48,0xab] +// ERR32: 64-bit +// ERR16: 64-bit + +stos %rax, (%edi) +// 64: stosq %rax, %es:(%edi) # encoding: [0x48,0x67,0xab] +// ERR32: only available in 64-bit mode +// ERR16: only available in 64-bit mode + +scas %es:(%edi), %al +// 64: scasb %es:(%edi), %al # encoding: [0x67,0xae] +// 32: scasb %es:(%edi), %al # encoding: [0xae] +// 16: scasb %es:(%edi), %al # encoding: [0x67,0xae] + +scasq %es:(%edi) +// 64: scasq %es:(%edi), %rax # encoding: [0x48,0x67,0xaf] +// ERR32: 64-bit +// ERR16: 64-bit + +scasl %es:(%edi), %al +// ERR64: invalid operand +// ERR32: invalid operand +// ERR16: invalid operand + +scas %es:(%di), %ax +// ERR64: invalid 16-bit base register +// 16: scasw %es:(%di), %ax # encoding: [0xaf] +// 32: scasw %es:(%di), %ax # encoding: [0x66,0x67,0xaf] + +cmpsb +// 64: cmpsb %es:(%rdi), (%rsi) # encoding: [0xa6] +// 32: cmpsb %es:(%edi), (%esi) # encoding: [0xa6] +// 16: cmpsb %es:(%di), (%si) # encoding: [0xa6] + +cmpsw (%edi), (%esi) +// 64: cmpsw %es:(%edi), (%esi) # encoding: [0x66,0x67,0xa7] +// 32: cmpsw %es:(%edi), (%esi) # encoding: [0x66,0xa7] +// 16: cmpsw %es:(%edi), (%esi) # encoding: [0x67,0xa7] + +cmpsb (%di), (%esi) +// ERR64: invalid 16-bit base register +// ERR32: mismatching source and destination +// ERR16: mismatching source and destination + +cmpsl %es:(%edi), %ss:(%esi) +// 64: cmpsl %es:(%edi), %ss:(%esi) # encoding: [0x36,0x67,0xa7] +// 32: cmpsl %es:(%edi), %ss:(%esi) # encoding: [0x36,0xa7] +// 16: cmpsl %es:(%edi), %ss:(%esi) # encoding: [0x66,0x36,0x67,0xa7] + +cmpsq (%rdi), (%rsi) +// 64: cmpsq %es:(%rdi), (%rsi) # encoding: [0x48,0xa7] +// ERR32: 64-bit +// ERR16: 64-bit + +movsb (%esi), (%edi) +// 64: movsb (%esi), %es:(%edi) # encoding: [0x67,0xa4] +// 32: movsb (%esi), %es:(%edi) # encoding: [0xa4] +// 16: movsb (%esi), %es:(%edi) # encoding: [0x67,0xa4] + +movsl %gs:(%esi), (%edi) +// 64: movsl %gs:(%esi), %es:(%edi) # encoding: [0x65,0x67,0xa5] +// 32: movsl %gs:(%esi), %es:(%edi) # encoding: [0x65,0xa5] +// 16: movsl %gs:(%esi), %es:(%edi) # encoding: [0x66,0x65,0x67,0xa5] + +outsb +// 64: outsb (%rsi), %dx # encoding: [0x6e] +// 32: outsb (%esi), %dx # encoding: [0x6e] +// 16: outsb (%si), %dx # encoding: [0x6e] + +outsw %fs:(%esi), %dx +// 64: outsw %fs:(%esi), %dx # encoding: [0x66,0x64,0x67,0x6f] +// 32: outsw %fs:(%esi), %dx # encoding: [0x66,0x64,0x6f] +// 16: outsw %fs:(%esi), %dx # encoding: [0x64,0x67,0x6f] + +insw %dx, (%edi) +// 64: insw %dx, %es:(%edi) # encoding: [0x66,0x67,0x6d] +// 32: insw %dx, %es:(%edi) # encoding: [0x66,0x6d] +// 16: insw %dx, %es:(%edi) # encoding: [0x67,0x6d] |