diff options
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 2 | ||||
-rw-r--r-- | llvm/test/MC/X86/intel-syntax-unsized-memory.s | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index 8ef2a5558da..65ceb620f0a 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -2626,7 +2626,7 @@ bool X86AsmParser::MatchAndEmitIntelInstruction(SMLoc IDLoc, unsigned &Opcode, SmallVector<unsigned, 8> Match; uint64_t ErrorInfoMissingFeature = 0; if (UnsizedMemOp && UnsizedMemOp->isMemUnsized()) { - static const unsigned MopSizes[] = {8, 16, 32, 64, 80}; + static const unsigned MopSizes[] = {8, 16, 32, 64, 80, 128, 256, 512}; for (unsigned Size : MopSizes) { UnsizedMemOp->Mem.Size = Size; uint64_t ErrorInfoIgnore; diff --git a/llvm/test/MC/X86/intel-syntax-unsized-memory.s b/llvm/test/MC/X86/intel-syntax-unsized-memory.s new file mode 100644 index 00000000000..3467f8fb3e8 --- /dev/null +++ b/llvm/test/MC/X86/intel-syntax-unsized-memory.s @@ -0,0 +1,26 @@ +// RUN: llvm-mc -triple x86_64-unknown-unknown -x86-asm-syntax=intel -mcpu=knl %s | FileCheck %s + +// Check that we deduce unsized memory operands in the general, unambiguous, case. +// We can't deduce xword memory operands, because there is no instruction +// unambiguously accessing 80-bit memory. + +// CHECK: movb %al, (%rax) +mov [rax], al + +// CHECK: movw %ax, (%rax) +mov [rax], ax + +// CHECK: movl %eax, (%rax) +mov [rax], eax + +// CHECK: movq %rax, (%rax) +mov [rax], rax + +// CHECK: movdqa %xmm0, (%rax) +movdqa [rax], xmm0 + +// CHECK: vmovdqa %ymm0, (%rax) +vmovdqa [rax], ymm0 + +// CHECK: vaddps (%rax), %zmm1, %zmm1 +vaddps zmm1, zmm1, [rax] |