diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/MC/X86/intel-syntax-ambiguous.s | 44 | ||||
| -rw-r--r-- | llvm/test/MC/X86/intel-syntax-ptr-sized.s | 20 | ||||
| -rw-r--r-- | llvm/test/MC/X86/intel-syntax.s | 34 |
3 files changed, 98 insertions, 0 deletions
diff --git a/llvm/test/MC/X86/intel-syntax-ambiguous.s b/llvm/test/MC/X86/intel-syntax-ambiguous.s new file mode 100644 index 00000000000..1acfb5ba70f --- /dev/null +++ b/llvm/test/MC/X86/intel-syntax-ambiguous.s @@ -0,0 +1,44 @@ +// RUN: not llvm-mc -triple i686-unknown-unknown %s -o /dev/null 2>&1 | FileCheck %s + +.intel_syntax + +// Basic case of ambiguity for inc. + +inc [eax] +// CHECK: error: ambiguous operand size for instruction 'inc' +inc dword ptr [eax] +inc word ptr [eax] +inc byte ptr [eax] +// CHECK-NOT: error: + +// Other ambiguous instructions. Anything that doesn't take a register, +// basically. + +dec [eax] +// CHECK: error: ambiguous operand size for instruction 'dec' +mov [eax], 1 +// CHECK: error: ambiguous operand size for instruction 'mov' +and [eax], 0 +// CHECK: error: ambiguous operand size for instruction 'and' +or [eax], 1 +// CHECK: error: ambiguous operand size for instruction 'or' +add [eax], 1 +// CHECK: error: ambiguous operand size for instruction 'add' +sub [eax], 1 +// CHECK: error: ambiguous operand size for instruction 'sub' + +// gas assumes these instructions are pointer-sized by default, and we follow +// suit. +push [eax] +call [eax] +jmp [eax] +// CHECK-NOT: error: + +add byte ptr [eax], eax +// CHECK: error: invalid operand for instruction + +add byte ptr [eax], eax +// CHECK: error: invalid operand for instruction + +add rax, 3 +// CHECK: error: register %rax is only available in 64-bit mode diff --git a/llvm/test/MC/X86/intel-syntax-ptr-sized.s b/llvm/test/MC/X86/intel-syntax-ptr-sized.s new file mode 100644 index 00000000000..c052c322b80 --- /dev/null +++ b/llvm/test/MC/X86/intel-syntax-ptr-sized.s @@ -0,0 +1,20 @@ +// RUN: llvm-mc %s -triple=i686-pc-windows | FileCheck %s + +.intel_syntax + +push [eax] +// CHECK: pushl (%eax) +call [eax] +// CHECK: calll *(%eax) +jmp [eax] +// CHECK: jmpl *(%eax) + +// mode switch +.code16 + +push [eax] +// CHECK: pushw (%eax) +call [eax] +// CHECK: callw *(%eax) +jmp [eax] +// CHECK: jmpw *(%eax) diff --git a/llvm/test/MC/X86/intel-syntax.s b/llvm/test/MC/X86/intel-syntax.s index 796891880b1..bb1762e4727 100644 --- a/llvm/test/MC/X86/intel-syntax.s +++ b/llvm/test/MC/X86/intel-syntax.s @@ -607,3 +607,37 @@ fadd "?half@?0??bar@@YAXXZ@4NA" fadd "?half@?0??bar@@YAXXZ@4NA"@IMGREL // CHECK: fadds "?half@?0??bar@@YAXXZ@4NA" // CHECK: fadds "?half@?0??bar@@YAXXZ@4NA"@IMGREL32 + +inc qword ptr [rax] +inc dword ptr [rax] +inc word ptr [rax] +inc byte ptr [rax] +// CHECK: incq (%rax) +// CHECK: incl (%rax) +// CHECK: incw (%rax) +// CHECK: incb (%rax) + +dec qword ptr [rax] +dec dword ptr [rax] +dec word ptr [rax] +dec byte ptr [rax] +// CHECK: decq (%rax) +// CHECK: decl (%rax) +// CHECK: decw (%rax) +// CHECK: decb (%rax) + +add qword ptr [rax], 1 +add dword ptr [rax], 1 +add word ptr [rax], 1 +add byte ptr [rax], 1 +// CHECK: addq $1, (%rax) +// CHECK: addl $1, (%rax) +// CHECK: addw $1, (%rax) +// CHECK: addb $1, (%rax) + +fstp xword ptr [rax] +fstp qword ptr [rax] +fstp dword ptr [rax] +// CHECK: fstpt (%rax) +// CHECK: fstpl (%rax) +// CHECK: fstps (%rax) |

