[llvm] 09288bc - [X86] Add assembler support for .d32 and .d8 mnemonic suffixes to control displacement size.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 26 10:46:34 PDT 2020


Author: Craig Topper
Date: 2020-08-26T10:45:50-07:00
New Revision: 09288bcbf5f124a2b0e24a6b1f2d27b66dba9adf

URL: https://github.com/llvm/llvm-project/commit/09288bcbf5f124a2b0e24a6b1f2d27b66dba9adf
DIFF: https://github.com/llvm/llvm-project/commit/09288bcbf5f124a2b0e24a6b1f2d27b66dba9adf.diff

LOG: [X86] Add assembler support for .d32 and .d8 mnemonic suffixes to control displacement size.

This is an older syntax than the {disp32} and {disp8} pseudo
prefixes that were added a few weeks ago. We can reuse most of
the support for that to support .d32 and .d8 as well.

Added: 
    

Modified: 
    llvm/docs/ReleaseNotes.rst
    llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
    llvm/test/MC/X86/x86-32.s
    llvm/test/MC/X86/x86-64.s

Removed: 
    


################################################################################
diff  --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst
index c6b2a3ac9bb5..d1075da16a9d 100644
--- a/llvm/docs/ReleaseNotes.rst
+++ b/llvm/docs/ReleaseNotes.rst
@@ -98,6 +98,9 @@ During this release ...
   frontend in 10.0. Mention of the 'mpx' feature in an IR file will print a
   message to stderr, but IR should still compile.
 * Support for -march=sapphirerapids was added.
+* The assembler now has support for {disp32} and {disp8} pseudo prefixes for
+  controlling displacement size for memory operands and jump displacements. The
+  assembler also supports the .d32 and .d8 mnemonic suffixes to do the same.
 
 Changes to the AMDGPU Target
 -----------------------------

diff  --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index ddb13e46e930..5694105dcbd1 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -2670,6 +2670,13 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
     break;
   }
 
+  // Support the suffix syntax for overriding displacement size as well.
+  if (Name.consume_back(".d32")) {
+    ForcedDispEncoding = DispEncoding_Disp32;
+  } else if (Name.consume_back(".d8")) {
+    ForcedDispEncoding = DispEncoding_Disp8;
+  }
+
   StringRef PatchedName = Name;
 
   // Hack to skip "short" following Jcc.

diff  --git a/llvm/test/MC/X86/x86-32.s b/llvm/test/MC/X86/x86-32.s
index ef9f5ebfdd92..426ab617b6b0 100644
--- a/llvm/test/MC/X86/x86-32.s
+++ b/llvm/test/MC/X86/x86-32.s
@@ -1110,16 +1110,24 @@ ptwritel 0xdeadbeef(%ebx,%ecx,8)
 // CHECK:  encoding: [0xf3,0x0f,0xae,0xe0]
 ptwritel %eax
 
+// CHECK: jmp foo
+// CHECK:  encoding: [0xe9,A,A,A,A]
+// CHECK:  fixup A - offset: 1, value: foo-4, kind: FK_PCRel_4
 // CHECK: jmp foo
 // CHECK:  encoding: [0xe9,A,A,A,A]
 // CHECK:  fixup A - offset: 1, value: foo-4, kind: FK_PCRel_4
 {disp32} jmp foo
+jmp.d32 foo
 foo:
 
+// CHECK: je foo
+// CHECK:  encoding: [0x0f,0x84,A,A,A,A]
+// CHECK:  fixup A - offset: 2, value: foo-4, kind: FK_PCRel_4
 // CHECK: je foo
 // CHECK:  encoding: [0x0f,0x84,A,A,A,A]
 // CHECK:  fixup A - offset: 2, value: foo-4, kind: FK_PCRel_4
 {disp32} je foo
+je.d32 foo
 
 // CHECK: ljmpl *%cs:305419896
 // CHECK:  encoding: [0x2e,0xff,0x2d,0x78,0x56,0x34,0x12]

diff  --git a/llvm/test/MC/X86/x86-64.s b/llvm/test/MC/X86/x86-64.s
index c61cae69c3ff..911aa294fbd0 100644
--- a/llvm/test/MC/X86/x86-64.s
+++ b/llvm/test/MC/X86/x86-64.s
@@ -1912,9 +1912,15 @@ ud2b (%rbx), %rcx
 // CHECK: encoding: [0xc7,0x40,0x00,0x01,0x00,0x00,0x00]
 // CHECK: movl $1, (%rax)
 // CHECK: encoding: [0xc7,0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00]
+// CHECK: movl $1, (%rax)
+// CHECK: encoding: [0xc7,0x40,0x00,0x01,0x00,0x00,0x00]
+// CHECK: movl $1, (%rax)
+// CHECK: encoding: [0xc7,0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00]
 movl $1, (%rax)
 {disp8} movl $1, (%rax)
 {disp32} movl $1, (%rax)
+movl.d8 $1, (%rax)
+movl.d32 $1, (%rax)
 
 // Requires disp8 by default
 // CHECK: movl $1, (%rbp)


        


More information about the llvm-commits mailing list