[PATCH] D51122: [PowerPC][MC] Support expressions in getMemRIX16Encoding
Sean Fertile via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 27 10:38:43 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL340761: [PowerPC][MC] Support expressions in getMemRIX16Encoding. (authored by sfertile, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D51122?vs=162029&id=162707#toc
Repository:
rL LLVM
https://reviews.llvm.org/D51122
Files:
llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
llvm/trunk/test/MC/PowerPC/ppc64-dq-expr.s
Index: llvm/trunk/test/MC/PowerPC/ppc64-dq-expr.s
===================================================================
--- llvm/trunk/test/MC/PowerPC/ppc64-dq-expr.s
+++ llvm/trunk/test/MC/PowerPC/ppc64-dq-expr.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple powerpc64le-unknown-linux-gnu %s -filetype=obj -o - | \
+# RUN: llvm-objdump -D -r - | FileCheck %s
+ .text
+ .abiversion 2
+ .global test
+ .p2align 4
+ .type test, at function
+test:
+.Lgep:
+ addis 2, 12, .TOC.-.Lgep at ha
+ addi 2, 2, .TOC.-.Lgep at l
+.Llep:
+ .localentry test, .Llep-.Lgep
+ addis 3, 2, vecA at toc@ha
+ lxv 3, vecA at toc@l(3)
+ addis 3, 2, vecB at toc@ha
+ stxv 3, vecB at toc@l(3)
+ blr
+
+ .comm vecA, 16, 16
+ .comm vecB, 16, 16
+
+# CHECK: Disassembly of section .text:
+# CHECK-LABEL: test:
+# CHECK-NEXT: addis 2, 12, 0
+# CHECK-NEXT: R_PPC64_REL16_HA .TOC.
+# CHECK-NEXT: addi 2, 2, 0
+# CHECK-NEXT: R_PPC64_REL16_LO .TOC.
+# CHECK-NEXT: addis 3, 2, 0
+# CHECK-NEXT: R_PPC64_TOC16_HA vecA
+# CHECK-NEXT: lxv 3, 0(3)
+# CHECK-NEXT: R_PPC64_TOC16_LO_DS vecA
+# CHECK-NEXT: addis 3, 2, 0
+# CHECK-NEXT: R_PPC64_TOC16_HA vecB
+# CHECK-NEXT: stxv 3, 0(3)
+# CHECK-NEXT: R_PPC64_TOC16_LO_DS vecB
+# CHECK-NEXT: blr
+
Index: llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
===================================================================
--- llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
+++ llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
@@ -264,10 +264,16 @@
unsigned RegBits = getMachineOpValue(MI, MI.getOperand(OpNo+1), Fixups, STI) << 12;
const MCOperand &MO = MI.getOperand(OpNo);
- assert(MO.isImm() && !(MO.getImm() % 16) &&
- "Expecting an immediate that is a multiple of 16");
+ if (MO.isImm()) {
+ assert(!(MO.getImm() % 16) &&
+ "Expecting an immediate that is a multiple of 16");
+ return ((getMachineOpValue(MI, MO, Fixups, STI) >> 4) & 0xFFF) | RegBits;
+ }
- return ((getMachineOpValue(MI, MO, Fixups, STI) >> 4) & 0xFFF) | RegBits;
+ // Otherwise add a fixup for the displacement field.
+ Fixups.push_back(MCFixup::create(IsLittleEndian? 0 : 2, MO.getExpr(),
+ (MCFixupKind)PPC::fixup_ppc_half16ds));
+ return RegBits;
}
unsigned PPCMCCodeEmitter::getSPE8DisEncoding(const MCInst &MI, unsigned OpNo,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51122.162707.patch
Type: text/x-patch
Size: 2488 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180827/62fd52ce/attachment.bin>
More information about the llvm-commits
mailing list