mirror of
https://src.fedoraproject.org/rpms/llvm.git
synced 2024-12-01 11:38:09 +00:00
88 lines
3.3 KiB
Diff
88 lines
3.3 KiB
Diff
From 8f5f7f9cb15387ddb010894c17e788b3116fe26d Mon Sep 17 00:00:00 2001
|
|
From: Reid Kleckner <rnk@google.com>
|
|
Date: Wed, 14 Feb 2018 00:33:00 +0000
|
|
Subject: [PATCH 2/4] Merging r324645:
|
|
------------------------------------------------------------------------
|
|
r324645 | dwmw2 | 2018-02-08 12:06:05 -0800 (Thu, 08 Feb 2018) | 5 lines
|
|
|
|
[X86] Support 'V' register operand modifier
|
|
|
|
This allows the register name to be printed without the leading '%'.
|
|
This can be used for emitting calls to the retpoline thunks from inline
|
|
asm.
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_50@325089 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
---
|
|
lib/Target/X86/X86AsmPrinter.cpp | 11 ++++++++++-
|
|
test/CodeGen/X86/inline-asm-modifier-V.ll | 14 ++++++++++++++
|
|
2 files changed, 24 insertions(+), 1 deletion(-)
|
|
create mode 100644 test/CodeGen/X86/inline-asm-modifier-V.ll
|
|
|
|
diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp
|
|
index dc15aea..8c7ddd9 100644
|
|
--- a/lib/Target/X86/X86AsmPrinter.cpp
|
|
+++ b/lib/Target/X86/X86AsmPrinter.cpp
|
|
@@ -344,6 +344,8 @@ static void printIntelMemReference(X86AsmPrinter &P, const MachineInstr *MI,
|
|
static bool printAsmMRegister(X86AsmPrinter &P, const MachineOperand &MO,
|
|
char Mode, raw_ostream &O) {
|
|
unsigned Reg = MO.getReg();
|
|
+ bool EmitPercent = true;
|
|
+
|
|
switch (Mode) {
|
|
default: return true; // Unknown mode.
|
|
case 'b': // Print QImode register
|
|
@@ -358,6 +360,9 @@ static bool printAsmMRegister(X86AsmPrinter &P, const MachineOperand &MO,
|
|
case 'k': // Print SImode register
|
|
Reg = getX86SubSuperRegister(Reg, 32);
|
|
break;
|
|
+ case 'V':
|
|
+ EmitPercent = false;
|
|
+ LLVM_FALLTHROUGH;
|
|
case 'q':
|
|
// Print 64-bit register names if 64-bit integer registers are available.
|
|
// Otherwise, print 32-bit register names.
|
|
@@ -365,7 +370,10 @@ static bool printAsmMRegister(X86AsmPrinter &P, const MachineOperand &MO,
|
|
break;
|
|
}
|
|
|
|
- O << '%' << X86ATTInstPrinter::getRegisterName(Reg);
|
|
+ if (EmitPercent)
|
|
+ O << '%';
|
|
+
|
|
+ O << X86ATTInstPrinter::getRegisterName(Reg);
|
|
return false;
|
|
}
|
|
|
|
@@ -438,6 +446,7 @@ bool X86AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
|
|
case 'w': // Print HImode register
|
|
case 'k': // Print SImode register
|
|
case 'q': // Print DImode register
|
|
+ case 'V': // Print native register without '%'
|
|
if (MO.isReg())
|
|
return printAsmMRegister(*this, MO, ExtraCode[0], O);
|
|
printOperand(*this, MI, OpNo, O);
|
|
diff --git a/test/CodeGen/X86/inline-asm-modifier-V.ll b/test/CodeGen/X86/inline-asm-modifier-V.ll
|
|
new file mode 100644
|
|
index 0000000..5a7f3fd
|
|
--- /dev/null
|
|
+++ b/test/CodeGen/X86/inline-asm-modifier-V.ll
|
|
@@ -0,0 +1,14 @@
|
|
+; RUN: llc < %s -mtriple=i686-- -no-integrated-as | FileCheck -check-prefix=X86 %s
|
|
+; RUN: llc < %s -mtriple=x86_64-- -no-integrated-as | FileCheck -check-prefix=X64 %s
|
|
+
|
|
+; If the target does not have 64-bit integer registers, emit 32-bit register
|
|
+; names.
|
|
+
|
|
+; X86: call __x86_indirect_thunk_e{{[abcd]}}x
|
|
+; X64: call __x86_indirect_thunk_r
|
|
+
|
|
+define void @q_modifier(i32* %p) {
|
|
+entry:
|
|
+ tail call void asm sideeffect "call __x86_indirect_thunk_${0:V}", "r,~{dirflag},~{fpsr},~{flags}"(i32* %p)
|
|
+ ret void
|
|
+}
|
|
--
|
|
1.8.3.1
|
|
|