Index: src/IceTargetLoweringARM32.cpp |
diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp |
index 99be924fd7c131c2f06fd205d73962d90af9a3ce..d9c57c25562296a287e29b304e7884425851d341 100644 |
--- a/src/IceTargetLoweringARM32.cpp |
+++ b/src/IceTargetLoweringARM32.cpp |
@@ -176,14 +176,16 @@ TargetARM32::TargetARM32(Cfg *Func) |
// initialize in some sort of static initializer for the class. |
// Limit this size (or do all bitsets need to be the same width)??? |
llvm::SmallBitVector IntegerRegisters(RegARM32::Reg_NUM); |
+ llvm::SmallBitVector I64PairRegisters(RegARM32::Reg_NUM); |
llvm::SmallBitVector Float32Registers(RegARM32::Reg_NUM); |
llvm::SmallBitVector Float64Registers(RegARM32::Reg_NUM); |
llvm::SmallBitVector VectorRegisters(RegARM32::Reg_NUM); |
llvm::SmallBitVector InvalidRegisters(RegARM32::Reg_NUM); |
ScratchRegs.resize(RegARM32::Reg_NUM); |
#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isFP32, isFP64, isVec128, alias_init) \ |
+ isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
IntegerRegisters[RegARM32::val] = isInt; \ |
+ I64PairRegisters[RegARM32::val] = isI64Pair; \ |
Float32Registers[RegARM32::val] = isFP32; \ |
Float64Registers[RegARM32::val] = isFP64; \ |
VectorRegisters[RegARM32::val] = isVec128; \ |
@@ -203,7 +205,7 @@ TargetARM32::TargetARM32(Cfg *Func) |
TypeToRegisterSet[IceType_i8] = IntegerRegisters; |
TypeToRegisterSet[IceType_i16] = IntegerRegisters; |
TypeToRegisterSet[IceType_i32] = IntegerRegisters; |
- TypeToRegisterSet[IceType_i64] = IntegerRegisters; |
+ TypeToRegisterSet[IceType_i64] = I64PairRegisters; |
TypeToRegisterSet[IceType_f32] = Float32Registers; |
TypeToRegisterSet[IceType_f64] = Float64Registers; |
TypeToRegisterSet[IceType_v4i1] = VectorRegisters; |
@@ -372,7 +374,7 @@ IceString TargetARM32::getRegName(SizeT RegNum, Type Ty) const { |
(void)Ty; |
static const char *RegNames[] = { |
#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isFP32, isFP64, isVec128, alias_init) \ |
+ isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
name, |
REGARM32_TABLE |
#undef X |
@@ -384,7 +386,7 @@ IceString TargetARM32::getRegName(SizeT RegNum, Type Ty) const { |
Variable *TargetARM32::getPhysicalRegister(SizeT RegNum, Type Ty) { |
static const Type DefaultType[] = { |
#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isFP32, isFP64, isVec128, alias_init) \ |
+ isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
(isFP32) \ |
? IceType_f32 \ |
: ((isFP64) ? IceType_f64 : ((isVec128 ? IceType_v4i32 : IceType_i32))), |
@@ -1165,7 +1167,7 @@ llvm::SmallBitVector TargetARM32::getRegisterSet(RegSetMask Include, |
llvm::SmallBitVector Registers(RegARM32::Reg_NUM); |
#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isFP32, isFP64, isVec128, alias_init) \ |
+ isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
if (scratch && (Include & RegSet_CallerSave)) \ |
Registers[RegARM32::val] = true; \ |
if (preserved && (Include & RegSet_CalleeSave)) \ |