mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
477847f6ac
Currently "<type> ptr <reg name>" treated as <reg name> in MS inline asm, ignoring the "<type> ptr" completely and possibly ignoring the intention of the user. Fixed llvm to produce an error when encountering "<type> ptr <reg name>" operands. For example: andpd xmm1,xmmword ptr xmm1 --> andpd xmm1, xmm1 though andpd has 2 possible matching formats - andpd xmm, xmm/m128 Patch by: ziv.izhar@intel.com Differential Revision: http://reviews.llvm.org/D14607 llvm-svn: 254607
60 lines
1.8 KiB
ArmAsm
60 lines
1.8 KiB
ArmAsm
// 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
|
|
|
|
fadd "?half@?0??bar@@YAXXZ@4NA"
|
|
// CHECK: error: ambiguous operand size for instruction 'fadd'
|
|
|
|
// Instruction line with PTR inside check that they don't accept register as memory.
|
|
|
|
// CHECK: error: expected memory operand after 'ptr', found register operand instead
|
|
// CHECK: andps xmm1, xmmword ptr xmm1
|
|
andps xmm1, xmmword ptr xmm1
|
|
// CHECK: error: expected memory operand after 'ptr', found register operand instead
|
|
// CHECK: andps xmmword ptr xmm1, xmm1
|
|
andps xmmword ptr xmm1, xmm1
|
|
// CHECK: error: expected memory operand after 'ptr', found register operand instead
|
|
// CHECK: mov dword ptr eax, ebx
|
|
mov dword ptr eax, ebx
|