Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Use saveNext unwind opcode on arm64. #21683

Merged
merged 4 commits into from
Jan 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/jit/arraystack.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ class ArrayStack
}

// return a reference to the i'th from the bottom
T BottomRef(int indx)
T& BottomRef(int indx)
{
assert(tosIndex > indx);
return data[indx];
Expand Down
29 changes: 18 additions & 11 deletions src/jit/codegen.h
Original file line number Diff line number Diff line change
Expand Up @@ -287,14 +287,19 @@ class CodeGen : public CodeGenInterface
regNumber reg2,
int spOffset,
int spDelta,
bool lastSavedWasPreviousPair,
bool useSaveNextPair,
regNumber tmpReg,
bool* pTmpRegIsZero);

void genPrologSaveReg(regNumber reg1, int spOffset, int spDelta, regNumber tmpReg, bool* pTmpRegIsZero);

void genEpilogRestoreRegPair(
regNumber reg1, regNumber reg2, int spOffset, int spDelta, regNumber tmpReg, bool* pTmpRegIsZero);
void genEpilogRestoreRegPair(regNumber reg1,
regNumber reg2,
int spOffset,
int spDelta,
bool useSaveNextPair,
regNumber tmpReg,
bool* pTmpRegIsZero);

void genEpilogRestoreReg(regNumber reg1, int spOffset, int spDelta, regNumber tmpReg, bool* pTmpRegIsZero);

Expand All @@ -307,27 +312,29 @@ class CodeGen : public CodeGenInterface
{
regNumber reg1;
regNumber reg2;
bool useSaveNextPair;

RegPair(regNumber reg1) : reg1(reg1), reg2(REG_NA)
RegPair(regNumber reg1) : reg1(reg1), reg2(REG_NA), useSaveNextPair(false)
{
}

RegPair(regNumber reg1, regNumber reg2) : reg1(reg1), reg2(reg2)
RegPair(regNumber reg1, regNumber reg2) : reg1(reg1), reg2(reg2), useSaveNextPair(false)
{
assert(reg2 == REG_NEXT(reg1));
}
};

static void genBuildRegPairsStack(regMaskTP regsMask, ArrayStack<RegPair>* regStack);
static void genSetUseSaveNextPairs(ArrayStack<RegPair>* regStack);

static int genGetSlotSizeForRegsInMask(regMaskTP regsMask);

int genSaveCalleeSavedRegisterGroup(regMaskTP regsMask,
int spDelta,
int spOffset DEBUGARG(bool isRegsToSaveCountOdd));
int genRestoreCalleeSavedRegisterGroup(regMaskTP regsMask,
int spDelta,
int spOffset DEBUGARG(bool isRegsToRestoreCountOdd));
void genSaveCalleeSavedRegisterGroup(regMaskTP regsMask,
int spDelta,
int spOffset DEBUGARG(bool isRegsToSaveCountOdd));
void genRestoreCalleeSavedRegisterGroup(regMaskTP regsMask,
int spDelta,
int spOffset DEBUGARG(bool isRegsToRestoreCountOdd));

void genSaveCalleeSavedRegistersHelp(regMaskTP regsToSaveMask, int lowestCalleeSavedOffset, int spDelta);
void genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask, int lowestCalleeSavedOffset, int spDelta);
Expand Down
Loading