[PATCH] HLE encoding support

Stefanus Du Toit stefanus.du.toit at intel.com
Tue Jun 18 09:45:48 PDT 2013


Hi nadav,

Add support for encoding the HLE XACQUIRE and XRELEASE prefixes.

For decoding, keep the current behavior of always decoding these as their REP versions. In the future, this could be improved to recognize the cases where these behave as XACQUIRE and XRELEASE and decode them as such.

This is a tiny patch, but it's my first real change in the backend so I would appreciate any review comments.

http://llvm-reviews.chandlerc.com/D1002

Files:
  lib/Target/X86/X86InstrTSX.td
  test/MC/X86/x86_64-hle-encoding.s
  utils/TableGen/X86RecognizableInstr.cpp

Index: lib/Target/X86/X86InstrTSX.td
===================================================================
--- lib/Target/X86/X86InstrTSX.td
+++ lib/Target/X86/X86InstrTSX.td
@@ -37,3 +37,10 @@
 def XABORT : Ii8<0xc6, MRM_F8, (outs), (ins i8imm:$imm),
                  "xabort\t$imm",
                  [(int_x86_xabort imm:$imm)]>, Requires<[HasRTM]>;
+
+// HLE prefixes
+
+def XACQUIRE_PREFIX : I<0xF2, RawFrm, (outs), (ins), "xacquire", []>, Requires<[HasHLE]>;
+
+def XRELEASE_PREFIX : I<0xF3, RawFrm, (outs), (ins), "xrelease", []>, Requires<[HasHLE]>;
+
Index: test/MC/X86/x86_64-hle-encoding.s
===================================================================
--- /dev/null
+++ test/MC/X86/x86_64-hle-encoding.s
@@ -0,0 +1,9 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown --show-encoding %s | FileCheck %s
+
+// CHECK: xacquire
+// CHECK: [0xf2]
+    xacquire
+
+// CHECK: xrelease
+// CHECK: [0xf3]
+    xrelease
Index: utils/TableGen/X86RecognizableInstr.cpp
===================================================================
--- utils/TableGen/X86RecognizableInstr.cpp
+++ utils/TableGen/X86RecognizableInstr.cpp
@@ -461,6 +461,12 @@
       Name == "VMOVQs64rr")
     return FILTER_WEAK;
 
+  // XACQUIRE and XRELEASE reuse REPNE and REP respectively.
+  // For now, just prefer the REP versions.
+  if (Name == "XACQUIRE_PREFIX" ||
+      Name == "XRELEASE_PREFIX")
+    return FILTER_WEAK;
+
   if (HasFROperands && Name.find("MOV") != Name.npos &&
      ((Name.find("2") != Name.npos && Name.find("32") == Name.npos) ||
       (Name.find("to") != Name.npos)))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1002.1.patch
Type: text/x-patch
Size: 1579 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130618/9758aa9d/attachment.bin>


More information about the llvm-commits mailing list