diff options
author | Colin LeMahieu <colinl@codeaurora.org> | 2016-02-15 18:42:07 +0000 |
---|---|---|
committer | Colin LeMahieu <colinl@codeaurora.org> | 2016-02-15 18:42:07 +0000 |
commit | 5559f929ce0f3343101ee285b2e03de6b7ed3417 (patch) | |
tree | 9164677bff97042b8864135213e128ee27274a99 /lib/Target/Hexagon/HexagonAsmPrinter.cpp | |
parent | 606927f7bbd6e06f8273459b690389a3e0312aab (diff) |
[Hexagon] Wrapping all MCExprs inside MCOperands within HexagonMCExpr to simplify handling and allow flags on the expression.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260902 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Hexagon/HexagonAsmPrinter.cpp')
-rw-r--r-- | lib/Target/Hexagon/HexagonAsmPrinter.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/lib/Target/Hexagon/HexagonAsmPrinter.cpp b/lib/Target/Hexagon/HexagonAsmPrinter.cpp index 4c7c0392a13..dc6d09dd099 100644 --- a/lib/Target/Hexagon/HexagonAsmPrinter.cpp +++ b/lib/Target/Hexagon/HexagonAsmPrinter.cpp @@ -297,8 +297,8 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, MCOperand &Reg = MappedInst.getOperand(0); TmpInst.setOpcode(Hexagon::L2_loadrigp); TmpInst.addOperand(Reg); - TmpInst.addOperand(MCOperand::createExpr( - MCSymbolRefExpr::create(Sym, OutContext))); + TmpInst.addOperand(MCOperand::createExpr(HexagonMCExpr::Create( + MCSymbolRefExpr::create(Sym, OutContext), OutContext))); MappedInst = TmpInst; } break; @@ -367,7 +367,8 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, int64_t Imm; MCExpr const *Expr = MO.getExpr(); bool Success = Expr->evaluateAsAbsolute(Imm); - assert (Success && "Expected immediate and none was found");(void)Success; + assert (Success && "Expected immediate and none was found"); + (void)Success; MCInst TmpInst; if (Imm == 0) { TmpInst.setOpcode(Hexagon::S2_vsathub); @@ -381,7 +382,8 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, TmpInst.addOperand(MappedInst.getOperand(1)); const MCExpr *One = MCConstantExpr::create(1, OutContext); const MCExpr *Sub = MCBinaryExpr::createSub(Expr, One, OutContext); - TmpInst.addOperand(MCOperand::createExpr(Sub)); + TmpInst.addOperand( + MCOperand::createExpr(HexagonMCExpr::Create(Sub, OutContext))); MappedInst = TmpInst; return; } @@ -391,7 +393,8 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, MCExpr const *Expr = MO2.getExpr(); int64_t Imm; bool Success = Expr->evaluateAsAbsolute(Imm); - assert (Success && "Expected immediate and none was found");(void)Success; + assert (Success && "Expected immediate and none was found"); + (void)Success; MCInst TmpInst; if (Imm == 0) { TmpInst.setOpcode(Hexagon::A2_combinew); @@ -414,7 +417,8 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, TmpInst.addOperand(MappedInst.getOperand(1)); const MCExpr *One = MCConstantExpr::create(1, OutContext); const MCExpr *Sub = MCBinaryExpr::createSub(Expr, One, OutContext); - TmpInst.addOperand(MCOperand::createExpr(Sub)); + TmpInst.addOperand( + MCOperand::createExpr(HexagonMCExpr::Create(Sub, OutContext))); MappedInst = TmpInst; return; } @@ -424,7 +428,8 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, MCExpr const *Expr = MO.getExpr(); int64_t Imm; bool Success = Expr->evaluateAsAbsolute(Imm); - assert (Success && "Expected immediate and none was found");(void)Success; + assert (Success && "Expected immediate and none was found"); + (void)Success; MCInst TmpInst; if (Imm == 0) { TmpInst.setOpcode(Hexagon::A2_tfr); @@ -438,7 +443,8 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, TmpInst.addOperand(MappedInst.getOperand(1)); const MCExpr *One = MCConstantExpr::create(1, OutContext); const MCExpr *Sub = MCBinaryExpr::createSub(Expr, One, OutContext); - TmpInst.addOperand(MCOperand::createExpr(Sub)); + TmpInst.addOperand( + MCOperand::createExpr(HexagonMCExpr::Create(Sub, OutContext))); MappedInst = TmpInst; return; } @@ -470,10 +476,10 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, bool Success = MO.getExpr()->evaluateAsAbsolute(Imm); if (Success && Imm < 0) { const MCExpr *MOne = MCConstantExpr::create(-1, OutContext); - TmpInst.addOperand(MCOperand::createExpr(MOne)); + TmpInst.addOperand(MCOperand::createExpr(HexagonMCExpr::Create(MOne, OutContext))); } else { const MCExpr *Zero = MCConstantExpr::create(0, OutContext); - TmpInst.addOperand(MCOperand::createExpr(Zero)); + TmpInst.addOperand(MCOperand::createExpr(HexagonMCExpr::Create(Zero, OutContext))); } TmpInst.addOperand(MO); MappedInst = TmpInst; @@ -523,12 +529,13 @@ void HexagonAsmPrinter::HexagonProcessInstruction(MCInst &Inst, MCExpr const *Expr = Imm.getExpr(); int64_t Value; bool Success = Expr->evaluateAsAbsolute(Value); - assert(Success);(void)Success; + assert(Success); + (void)Success; if (Value < 0 && Value > -256) { MappedInst.setOpcode(Hexagon::M2_mpysin); - Imm.setExpr(MCUnaryExpr::createMinus(Expr, OutContext)); - } - else + Imm.setExpr(HexagonMCExpr::Create( + MCUnaryExpr::createMinus(Expr, OutContext), OutContext)); + } else MappedInst.setOpcode(Hexagon::M2_mpysip); return; } |