Index: lib/Target/ARM/MCTargetDesc/ARMMCNaCl.cpp |
diff --git a/lib/Target/ARM/MCTargetDesc/ARMMCNaCl.cpp b/lib/Target/ARM/MCTargetDesc/ARMMCNaCl.cpp |
index 6af91dea0416cf5027c9bca40900bd28787002cc..003efd39218b69b9d3dc91e8b59b524f17df211a 100644 |
--- a/lib/Target/ARM/MCTargetDesc/ARMMCNaCl.cpp |
+++ b/lib/Target/ARM/MCTargetDesc/ARMMCNaCl.cpp |
@@ -10,6 +10,7 @@ |
//===----------------------------------------------------------------------===// |
#define DEBUG_TYPE "arm-mc-nacl" |
+#include "ARMAddressingModes.h" |
#include "MCTargetDesc/ARMBaseInfo.h" |
#include "MCTargetDesc/ARMMCExpr.h" |
#include "MCTargetDesc/ARMMCNaCl.h" |
@@ -27,10 +28,12 @@ static void EmitBICMask(const MCSubtargetInfo &STI, MCStreamer &Out, |
unsigned Addr, int64_t Pred, unsigned Mask) { |
// bic\Pred \Addr, \Addr, #Mask |
MCInst BICInst; |
+ const int32_t EncodedMask = ARM_AM::getSOImmVal(Mask); |
+ assert(EncodedMask != -1); |
BICInst.setOpcode(ARM::BICri); |
BICInst.addOperand(MCOperand::CreateReg(Addr)); // rD |
BICInst.addOperand(MCOperand::CreateReg(Addr)); // rS |
- BICInst.addOperand(MCOperand::CreateImm(Mask)); // imm |
+ BICInst.addOperand(MCOperand::CreateImm(EncodedMask)); // imm |
BICInst.addOperand(MCOperand::CreateImm(Pred)); // predicate |
BICInst.addOperand(MCOperand::CreateReg(ARM::CPSR)); // CPSR |
BICInst.addOperand(MCOperand::CreateReg(0)); // flag out |
@@ -39,7 +42,8 @@ static void EmitBICMask(const MCSubtargetInfo &STI, MCStreamer &Out, |
static void EmitTST(const MCSubtargetInfo &STI, MCStreamer &Out, unsigned Reg) { |
// tst \reg, #\MASK typically 0xc0000000 |
- const unsigned Mask = 0xC0000000; |
+ const int32_t Mask = ARM_AM::getSOImmVal(0xC0000000U); |
+ assert(Mask != -1); |
MCInst TSTInst; |
TSTInst.setOpcode(ARM::TSTri); |
TSTInst.addOperand(MCOperand::CreateReg(Reg)); // rS |