}
else
{
-// This interval is no longer assigned to this register.
-#ifdef _TARGET_ARM_
+ // This interval is no longer assigned to this register.
updateAssignedInterval(targetRegRecord, nullptr, assignedInterval->registerType);
-#else
- targetRegRecord->assignedInterval = nullptr;
-#endif
}
}
assignPhysReg(targetRegRecord, interval);
#endif // DEBUG
}
-#ifdef _TARGET_ARM_
//-----------------------------------------------------------------------------
-// updateAssignedInterval: Update assigned interval of register for ARM32
-// considering register type. When register type is TYP_DOUBLE, update
-// two float registers consisting a double register.
+// updateAssignedInterval: Update assigned interval of register.
//
// Arguments:
// reg - register to be updated
// None
//
// Assumptions:
-// When "regType" is TYP_DOUBLE, "reg" should be a even-numbered float register,
-// i.e. lower half of double register.
+// For ARM32, when "regType" is TYP_DOUBLE, "reg" should be a even-numbered
+// float register, i.e. lower half of double register.
+//
+// Note:
+// For ARM32, two float registers consisting a double register are updated
+// together when "regType" is TYP_DOUBLE.
//
void LinearScan::updateAssignedInterval(RegRecord* reg, Interval* interval, RegisterType regType)
{
reg->assignedInterval = interval;
+#ifdef _TARGET_ARM_
// Update overlapping floating point register for TYP_DOUBLE
if (regType == TYP_DOUBLE)
{
anotherHalfReg->assignedInterval = interval;
}
-}
#endif
+}
// LinearScan::resolveLocalRef
// Description:
varDsc->lvRegNum = REG_STK;
if (interval->assignedReg != nullptr && interval->assignedReg->assignedInterval == interval)
{
-#ifdef _TARGET_ARM_
updateAssignedInterval(interval->assignedReg, nullptr, interval->registerType);
-#else
- interval->assignedReg->assignedInterval = nullptr;
-#endif
}
interval->assignedReg = nullptr;
interval->physReg = REG_NA;
RegRecord* oldRegRecord = getRegisterRecord(oldAssignedReg);
if (oldRegRecord->assignedInterval == interval)
{
-#ifdef _TARGET_ARM_
updateAssignedInterval(oldRegRecord, nullptr, interval->registerType);
-#else
- oldRegRecord->assignedInterval = nullptr;
-#endif
}
}
}
interval->assignedReg = nullptr;
interval->physReg = REG_NA;
-#ifdef _TARGET_ARM_
updateAssignedInterval(physRegRecord, nullptr, interval->registerType);
-#else
- physRegRecord->assignedInterval = nullptr;
-#endif
}
else
{
interval->isActive = true;
interval->assignedReg = physRegRecord;
-#ifdef _TARGET_ARM_
updateAssignedInterval(physRegRecord, interval, interval->registerType);
-#else
- physRegRecord->assignedInterval = interval;
-#endif
}
}
tempRegFlt = getTempRegForResolution(fromBlock, toBlock, TYP_FLOAT);
}
#else
- tempRegFlt = getTempRegForResolution(fromBlock, toBlock, TYP_FLOAT);
+ tempRegFlt = getTempRegForResolution(fromBlock, toBlock, TYP_FLOAT);
#endif
}