summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJessica Clarke <jrtc27@jrtc27.com>2021-10-23 01:56:05 +0100
committerTom Stellard <tstellar@redhat.com>2021-12-21 16:48:10 -0800
commitae24102617c9c86552807a598fe6521ca9c6d7ee (patch)
tree1a5bd667fcfaad97a9513860d6f328f17e306147
parentc95753ff5c116134a5ff8029cf2c35c8b760a027 (diff)
downloadllvm-ae24102617c9c86552807a598fe6521ca9c6d7ee.tar.gz
[X86] Don't add implicit REP prefix to VIA PadLock xstore
Commit 8fa3e8fa1492 added an implicit REP prefix to all VIA PadLock instructions, but GNU as doesn't add one to xstore, only all the others. This resulted in a kernel panic regression in FreeBSD upon updating to LLVM 11 (https://bugs.freebsd.org/259218) which includes the commit in question. This partially reverts that commit. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D112355 (cherry picked from commit 2d8c18fbbdd1b07ab0d36ac49ef63f4d243afb8b)
-rw-r--r--llvm/lib/Target/X86/X86InstrSystem.td2
-rw-r--r--llvm/test/MC/X86/padlock.s5
2 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86InstrSystem.td b/llvm/lib/Target/X86/X86InstrSystem.td
index 48c27051a872..355ddf26e3bb 100644
--- a/llvm/lib/Target/X86/X86InstrSystem.td
+++ b/llvm/lib/Target/X86/X86InstrSystem.td
@@ -583,7 +583,7 @@ def XRSTORS64 : RI<0xC7, MRM3m, (outs), (ins opaquemem:$dst),
//===----------------------------------------------------------------------===//
// VIA PadLock crypto instructions
let Defs = [RAX, RDI], Uses = [RDX, RDI], SchedRW = [WriteSystem] in
- def XSTORE : I<0xa7, MRM_C0, (outs), (ins), "xstore", []>, TB, REP;
+ def XSTORE : I<0xa7, MRM_C0, (outs), (ins), "xstore", []>, TB;
def : InstAlias<"xstorerng", (XSTORE)>;
diff --git a/llvm/test/MC/X86/padlock.s b/llvm/test/MC/X86/padlock.s
index c79d346fa23e..9f9b16294ea0 100644
--- a/llvm/test/MC/X86/padlock.s
+++ b/llvm/test/MC/X86/padlock.s
@@ -1,8 +1,11 @@
// RUN: llvm-mc -triple i386-unknown-unknown --show-encoding %s | FileCheck %s
+/// Check xstore does not get an implicit REP prefix but all other PadLock
+/// instructions do.
+
xstore
// CHECK: xstore
-// CHECK: encoding: [0xf3,0x0f,0xa7,0xc0]
+// CHECK: encoding: [0x0f,0xa7,0xc0]
xcryptecb
// CHECK: xcryptecb
// CHECK: encoding: [0xf3,0x0f,0xa7,0xc8]