From 8fa3e8fa149203279dba9f4ace99575471cb46ac Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 11 Jun 2020 12:45:54 -0700 Subject: [PATCH] [X86] Force VIA PadLock crypto instructions to emit a 0xF3 prefix when they encode to match what GNU as does. The spec for these says they need 0xf3 but also mentions REP before the mnemonic. But I don't think its fair to users to make them write REP first. And gas doesn't make them. objdump seems to disassemble with or without the prefix and just prints any 0xf3 as REP. --- llvm/lib/Target/X86/X86InstrSystem.td | 18 +++++++++--------- llvm/test/MC/X86/padlock.s | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Target/X86/X86InstrSystem.td b/llvm/lib/Target/X86/X86InstrSystem.td index 82b6197..2523e80 100644 --- a/llvm/lib/Target/X86/X86InstrSystem.td +++ b/llvm/lib/Target/X86/X86InstrSystem.td @@ -564,25 +564,25 @@ 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; + def XSTORE : I<0xa7, MRM_C0, (outs), (ins), "xstore", []>, TB, REP; def : InstAlias<"xstorerng", (XSTORE)>; let SchedRW = [WriteSystem] in { let Defs = [RSI, RDI], Uses = [RBX, RDX, RSI, RDI] in { - def XCRYPTECB : I<0xa7, MRM_C8, (outs), (ins), "xcryptecb", []>, TB; - def XCRYPTCBC : I<0xa7, MRM_D0, (outs), (ins), "xcryptcbc", []>, TB; - def XCRYPTCTR : I<0xa7, MRM_D8, (outs), (ins), "xcryptctr", []>, TB; - def XCRYPTCFB : I<0xa7, MRM_E0, (outs), (ins), "xcryptcfb", []>, TB; - def XCRYPTOFB : I<0xa7, MRM_E8, (outs), (ins), "xcryptofb", []>, TB; + def XCRYPTECB : I<0xa7, MRM_C8, (outs), (ins), "xcryptecb", []>, TB, REP; + def XCRYPTCBC : I<0xa7, MRM_D0, (outs), (ins), "xcryptcbc", []>, TB, REP; + def XCRYPTCTR : I<0xa7, MRM_D8, (outs), (ins), "xcryptctr", []>, TB, REP; + def XCRYPTCFB : I<0xa7, MRM_E0, (outs), (ins), "xcryptcfb", []>, TB, REP; + def XCRYPTOFB : I<0xa7, MRM_E8, (outs), (ins), "xcryptofb", []>, TB, REP; } let Defs = [RAX, RSI, RDI], Uses = [RAX, RSI, RDI] in { - def XSHA1 : I<0xa6, MRM_C8, (outs), (ins), "xsha1", []>, TB; - def XSHA256 : I<0xa6, MRM_D0, (outs), (ins), "xsha256", []>, TB; + def XSHA1 : I<0xa6, MRM_C8, (outs), (ins), "xsha1", []>, TB, REP; + def XSHA256 : I<0xa6, MRM_D0, (outs), (ins), "xsha256", []>, TB, REP; } let Defs = [RAX, RDX, RSI], Uses = [RAX, RSI] in - def MONTMUL : I<0xa6, MRM_C0, (outs), (ins), "montmul", []>, TB; + def MONTMUL : I<0xa6, MRM_C0, (outs), (ins), "montmul", []>, TB, REP; } // SchedRW //==-----------------------------------------------------------------------===// diff --git a/llvm/test/MC/X86/padlock.s b/llvm/test/MC/X86/padlock.s index 6985817..f652bcf 100644 --- a/llvm/test/MC/X86/padlock.s +++ b/llvm/test/MC/X86/padlock.s @@ -2,4 +2,4 @@ xstore // CHECK: xstore -// CHECK: encoding: [0x0f,0xa7,0xc0] +// CHECK: encoding: [0xf3,0x0f,0xa7,0xc0] -- 2.7.4