@@ -281,11 +281,18 @@ void LinearScan::updateNextFixedRef(RegRecord* regRecord, RefPosition* nextRefPo
281
281
LsraLocation nextLocation = nextRefPosition == nullptr ? MaxLocation : nextRefPosition->nodeLocation;
282
282
283
283
RefPosition* kill = nextKill;
284
+
285
+ #ifdef HAS_MORE_THAN_64_REGISTERS
286
+ SingleTypeRegSet regMask = isLow ? genSingleTypeRegMask(regRecord->regNum)
287
+ : genSingleTypeRegMask((regNumber)(regRecord->regNum - REG_HIGH_BASE));
288
+ #else
289
+ SingleTypeRegSet regMask = genSingleTypeRegMask(regRecord->regNum);
290
+ #endif
284
291
while ((kill != nullptr) && (kill->nodeLocation < nextLocation))
285
292
{
286
293
if (isLow)
287
294
{
288
- if ((kill->killedRegisters.getLow() & genSingleTypeRegMask(regRecord->regNum) ) != RBM_NONE)
295
+ if ((kill->killedRegisters.getLow() & regMask ) != RBM_NONE)
289
296
{
290
297
nextLocation = kill->nodeLocation;
291
298
break;
@@ -294,8 +301,7 @@ void LinearScan::updateNextFixedRef(RegRecord* regRecord, RefPosition* nextRefPo
294
301
#ifdef HAS_MORE_THAN_64_REGISTERS
295
302
else
296
303
{
297
- if ((kill->killedRegisters.getHigh() &
298
- genSingleTypeRegMask((regNumber)(regRecord->regNum - REG_HIGH_BASE))) != RBM_NONE)
304
+ if ((kill->killedRegisters.getHigh() & regMask) != RBM_NONE)
299
305
{
300
306
nextLocation = kill->nodeLocation;
301
307
break;
@@ -309,23 +315,23 @@ void LinearScan::updateNextFixedRef(RegRecord* regRecord, RefPosition* nextRefPo
309
315
{
310
316
if (nextLocation == MaxLocation)
311
317
{
312
- fixedRegsLow &= ~genSingleTypeRegMask(regRecord->regNum) ;
318
+ fixedRegsLow &= ~regMask ;
313
319
}
314
320
else
315
321
{
316
- fixedRegsLow |= genSingleTypeRegMask(regRecord->regNum) ;
322
+ fixedRegsLow |= regMask ;
317
323
}
318
324
}
319
325
#ifdef HAS_MORE_THAN_64_REGISTERS
320
326
else
321
327
{
322
328
if (nextLocation == MaxLocation)
323
329
{
324
- fixedRegsHigh &= ~genSingleTypeRegMask((regNumber)(regRecord->regNum - REG_HIGH_BASE)) ;
330
+ fixedRegsHigh &= ~regMask ;
325
331
}
326
332
else
327
333
{
328
- fixedRegsHigh |= genSingleTypeRegMask((regNumber)(regRecord->regNum - REG_HIGH_BASE)) ;
334
+ fixedRegsHigh |= regMask ;
329
335
}
330
336
}
331
337
#endif
0 commit comments