From d0d42f0ec8544dadee4f6ee301852ba05de863d9 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Thu, 2 Feb 2017 20:35:12 +0000 Subject: [Hexagon] Adding opExtentBits and opExtentAlign to GPrel instructions Patch by Colin LeMahieu. llvm-svn: 293933 --- .../Target/Hexagon/AsmParser/HexagonAsmParser.cpp | 4 ++-- llvm/lib/Target/Hexagon/HexagonInstrInfoV4.td | 24 ++++++++++++++++++++ .../Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp | 26 +++++++++++++++++++++- .../Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp | 20 +++++++++-------- 4 files changed, 62 insertions(+), 12 deletions(-) (limited to 'llvm/lib') diff --git a/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp b/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp index becc086c81b..b6201ebf038 100644 --- a/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp +++ b/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp @@ -1756,8 +1756,8 @@ int HexagonAsmParser::processInstruction(MCInst &Inst, TmpInst.setOpcode(Hexagon::L2_loadrdgp); TmpInst.addOperand(MO_0); - TmpInst.addOperand( - MCOperand::createExpr(MCSymbolRefExpr::create(Sym, getContext()))); + TmpInst.addOperand(MCOperand::createExpr(HexagonMCExpr::create( + MCSymbolRefExpr::create(Sym, getContext()), getContext()))); Inst = TmpInst; } } diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfoV4.td b/llvm/lib/Target/Hexagon/HexagonInstrInfoV4.td index 500f5f340f9..85d57baecd8 100644 --- a/llvm/lib/Target/Hexagon/HexagonInstrInfoV4.td +++ b/llvm/lib/Target/Hexagon/HexagonInstrInfoV4.td @@ -2543,6 +2543,14 @@ class T_StoreAbsGP MajOp> !if (!eq(ImmOpStr, "u16_2Imm"), addr{17-2}, !if (!eq(ImmOpStr, "u16_1Imm"), addr{16-1}, /* u16_0Imm */ addr{15-0}))); + let opExtentBits = !if (!eq(ImmOpStr, "u16_3Imm"), 19, + !if (!eq(ImmOpStr, "u16_2Imm"), 18, + !if (!eq(ImmOpStr, "u16_1Imm"), 17, + /* u16_0Imm */ 16))); + let opExtentAlign = !if (!eq(ImmOpStr, "u16_3Imm"), 3, + !if (!eq(ImmOpStr, "u16_2Imm"), 2, + !if (!eq(ImmOpStr, "u16_1Imm"), 1, + /* u16_0Imm */ 0))); let IClass = 0b0100; let Inst{27} = 1; @@ -2822,6 +2838,14 @@ class T_LoadAbsGP (Expr); return HExpr.mustNotExtend(); } +void HexagonMCInstrInfo::setS23_2_reloc(MCExpr const &Expr, bool Val) { + HexagonMCExpr &HExpr = + const_cast(*llvm::cast(&Expr)); + HExpr.setS23_2_reloc(Val); +} +bool HexagonMCInstrInfo::s23_2_reloc(MCExpr const &Expr) { + HexagonMCExpr const *HExpr = llvm::dyn_cast(&Expr); + if (!HExpr) + return false; + return HExpr->s23_2_reloc(); +} void HexagonMCInstrInfo::padEndloop(MCContext &Context, MCInst &MCB) { MCInst Nop; @@ -772,15 +783,6 @@ void HexagonMCInstrInfo::setMemStoreReorderEnabled(MCInst &MCI) { Operand.setImm(Operand.getImm() | memStoreReorderEnabledMask); assert(isMemStoreReorderEnabled(MCI)); } -void HexagonMCInstrInfo::setS23_2_reloc(MCExpr const &Expr, bool Val) { - HexagonMCExpr &HExpr = - const_cast(*llvm::cast(&Expr)); - HExpr.setS23_2_reloc(Val); -} -bool HexagonMCInstrInfo::s23_2_reloc(MCExpr const &Expr) { - HexagonMCExpr const &HExpr = *llvm::cast(&Expr); - return HExpr.s23_2_reloc(); -} void HexagonMCInstrInfo::setOuterLoop(MCInst &MCI) { assert(isBundle(MCI)); -- cgit v1.2.3