@@ -287,14 +287,19 @@ class CodeGen : public CodeGenInterface
287
287
regNumber reg2,
288
288
int spOffset,
289
289
int spDelta,
290
- bool lastSavedWasPreviousPair ,
290
+ bool useSaveNextPair ,
291
291
regNumber tmpReg,
292
292
bool * pTmpRegIsZero);
293
293
294
294
void genPrologSaveReg (regNumber reg1, int spOffset, int spDelta, regNumber tmpReg, bool * pTmpRegIsZero);
295
295
296
- void genEpilogRestoreRegPair (
297
- regNumber reg1, regNumber reg2, int spOffset, int spDelta, regNumber tmpReg, bool * pTmpRegIsZero);
296
+ void genEpilogRestoreRegPair (regNumber reg1,
297
+ regNumber reg2,
298
+ int spOffset,
299
+ int spDelta,
300
+ bool useSaveNextPair,
301
+ regNumber tmpReg,
302
+ bool * pTmpRegIsZero);
298
303
299
304
void genEpilogRestoreReg (regNumber reg1, int spOffset, int spDelta, regNumber tmpReg, bool * pTmpRegIsZero);
300
305
@@ -307,27 +312,29 @@ class CodeGen : public CodeGenInterface
307
312
{
308
313
regNumber reg1;
309
314
regNumber reg2;
315
+ bool useSaveNextPair;
310
316
311
- RegPair (regNumber reg1) : reg1(reg1), reg2(REG_NA)
317
+ RegPair (regNumber reg1) : reg1(reg1), reg2(REG_NA), useSaveNextPair( false )
312
318
{
313
319
}
314
320
315
- RegPair (regNumber reg1, regNumber reg2) : reg1(reg1), reg2(reg2)
321
+ RegPair (regNumber reg1, regNumber reg2) : reg1(reg1), reg2(reg2), useSaveNextPair( false )
316
322
{
317
323
assert (reg2 == REG_NEXT (reg1));
318
324
}
319
325
};
320
326
321
327
static void genBuildRegPairsStack (regMaskTP regsMask, ArrayStack<RegPair>* regStack);
328
+ static void genSetUseSaveNextPairs (ArrayStack<RegPair>* regStack);
322
329
323
330
static int genGetSlotSizeForRegsInMask (regMaskTP regsMask);
324
331
325
- int genSaveCalleeSavedRegisterGroup (regMaskTP regsMask,
326
- int spDelta,
327
- int spOffset DEBUGARG (bool isRegsToSaveCountOdd));
328
- int genRestoreCalleeSavedRegisterGroup (regMaskTP regsMask,
329
- int spDelta,
330
- int spOffset DEBUGARG (bool isRegsToRestoreCountOdd));
332
+ void genSaveCalleeSavedRegisterGroup (regMaskTP regsMask,
333
+ int spDelta,
334
+ int spOffset DEBUGARG (bool isRegsToSaveCountOdd));
335
+ void genRestoreCalleeSavedRegisterGroup (regMaskTP regsMask,
336
+ int spDelta,
337
+ int spOffset DEBUGARG (bool isRegsToRestoreCountOdd));
331
338
332
339
void genSaveCalleeSavedRegistersHelp (regMaskTP regsToSaveMask, int lowestCalleeSavedOffset, int spDelta);
333
340
void genRestoreCalleeSavedRegistersHelp (regMaskTP regsToRestoreMask, int lowestCalleeSavedOffset, int spDelta);
0 commit comments