Fix parameter loss in intermediate code branch forwarding
This commit is contained in:
parent
657b79cd3f
commit
3cdc9032b4
|
@ -3783,6 +3783,7 @@ void InterCodeBasicBlock::GenerateTraces(bool expand, bool compact)
|
|||
mInstructions[ns - 1]->mCode = IC_BRANCH;
|
||||
mInstructions[ns - 1]->mOperator = tj->mInstructions[0]->mOperator;
|
||||
mInstructions[ns - 1]->mSrc[0].Forward(tj->mInstructions[0]->mSrc[0]);
|
||||
mInstructions[ns - 1]->mNumOperands = 1;
|
||||
|
||||
mTrueJump = tj->mTrueJump;
|
||||
mFalseJump = tj->mFalseJump;
|
||||
|
@ -10897,6 +10898,24 @@ void InterCodeProcedure::ResetVisited(void)
|
|||
|
||||
for (i = 0; i < mBlocks.Size(); i++)
|
||||
{
|
||||
#if 0
|
||||
if (mBlocks[i]->mInstructions.Size() > 0)
|
||||
{
|
||||
const InterInstruction* ins(mBlocks[i]->mInstructions.Last());
|
||||
if (ins)
|
||||
{
|
||||
if (ins->mCode == IC_BRANCH)
|
||||
{
|
||||
assert(mBlocks[i]->mTrueJump && mBlocks[i]->mFalseJump && ins->mNumOperands >= 1 && ins->mSrc[0].mTemp >= 0);
|
||||
}
|
||||
else if (ins->mCode == IC_JUMP)
|
||||
{
|
||||
assert(mBlocks[i]->mTrueJump);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
mBlocks[i]->mVisited = false;
|
||||
mBlocks[i]->mNumEntered = 0;
|
||||
}
|
||||
|
@ -12334,6 +12353,10 @@ void InterCodeProcedure::MapCallerSavedTemps(void)
|
|||
|
||||
callerSavedTemps = freeCallerSavedTemps;
|
||||
|
||||
int maxCallerSavedTemps = mCallerSavedTemps;
|
||||
|
||||
assert(freeCallerSavedTemps <= mCallerSavedTemps);
|
||||
|
||||
mTempOffset.SetSize(0);
|
||||
mTempSizes.SetSize(0);
|
||||
|
||||
|
@ -12347,7 +12370,7 @@ void InterCodeProcedure::MapCallerSavedTemps(void)
|
|||
mTempSizes.Push(size);
|
||||
freeTemps += size;
|
||||
}
|
||||
else if (callerSavedTemps + size <= 16)
|
||||
else if (callerSavedTemps + size <= maxCallerSavedTemps)
|
||||
{
|
||||
mTempOffset.Push(callerSavedTemps);
|
||||
mTempSizes.Push(size);
|
||||
|
@ -12362,6 +12385,8 @@ void InterCodeProcedure::MapCallerSavedTemps(void)
|
|||
}
|
||||
mTempSize = calleeSavedTemps;
|
||||
mCallerSavedTemps = callerSavedTemps;
|
||||
|
||||
// printf("Map %s, %d, %d, %d, %d\n", mIdent->mString, freeTemps, callerSavedTemps, calleeSavedTemps, freeCallerSavedTemps);
|
||||
}
|
||||
|
||||
void InterCodeProcedure::Disassemble(FILE* file)
|
||||
|
|
|
@ -18490,6 +18490,8 @@ bool NativeCodeBasicBlock::OptimizeSelect(NativeCodeProcedure* proc)
|
|||
mIns.Push(NativeCodeInstruction(ASMIT_AND, ASMIM_IMMEDIATE, vt ^ vf));
|
||||
mIns.Push(NativeCodeInstruction(ASMIT_EOR, ASMIM_IMMEDIATE, vt));
|
||||
changed = true;
|
||||
|
||||
mBranch = ASMIT_JMP;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24139,6 +24141,8 @@ void NativeCodeBasicBlock::CheckLive(void)
|
|||
#if _DEBUG
|
||||
uint32 live = 0;
|
||||
|
||||
assert(mBranch == ASMIT_RTS || (mBranch == ASMIT_JMP) == (mFalseJump == nullptr));
|
||||
|
||||
if (mBranch == ASMIT_BCC || mBranch == ASMIT_BCS)
|
||||
live |= LIVE_CPU_REG_C;
|
||||
if (mBranch == ASMIT_BEQ || mBranch == ASMIT_BNE || mBranch == ASMIT_BPL || mBranch == ASMIT_BMI)
|
||||
|
@ -24447,6 +24451,7 @@ void NativeCodeBasicBlock::CopyCode(NativeCodeProcedure * proc, uint8* target)
|
|||
NativeCodeBasicBlock::NativeCodeBasicBlock(void)
|
||||
: mIns(NativeCodeInstruction(ASMIT_INV, ASMIM_IMPLIED)), mRelocations({ 0 }), mEntryBlocks(nullptr), mCode(0)
|
||||
{
|
||||
mBranch = ASMIT_RTS;
|
||||
mTrueJump = mFalseJump = NULL;
|
||||
mOffset = -1;
|
||||
mPlaced = false;
|
||||
|
@ -25051,6 +25056,11 @@ void NativeCodeProcedure::Optimize(void)
|
|||
int step = 0;
|
||||
int cnt = 0;
|
||||
|
||||
#if _DEBUG
|
||||
ResetVisited();
|
||||
mEntryBlock->CheckBlocks();
|
||||
#endif
|
||||
|
||||
bool changed, xmapped = false, ymapped = false;
|
||||
do
|
||||
{
|
||||
|
|
|
@ -74,7 +74,7 @@ int main2(int argc, const char** argv)
|
|||
|
||||
#else
|
||||
strcpy(strProductName, "oscar64");
|
||||
strcpy(strProductVersion, "1.7.136");
|
||||
strcpy(strProductVersion, "1.7.137");
|
||||
|
||||
#ifdef __APPLE__
|
||||
uint32_t length = sizeof(basePath);
|
||||
|
|
|
@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
|
|||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,7,136,0
|
||||
PRODUCTVERSION 1,7,136,0
|
||||
FILEVERSION 1,7,137,0
|
||||
PRODUCTVERSION 1,7,137,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
@ -43,12 +43,12 @@ BEGIN
|
|||
BEGIN
|
||||
VALUE "CompanyName", "oscar64"
|
||||
VALUE "FileDescription", "oscar64 compiler"
|
||||
VALUE "FileVersion", "1.7.136.0"
|
||||
VALUE "FileVersion", "1.7.137.0"
|
||||
VALUE "InternalName", "oscar64.exe"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2021"
|
||||
VALUE "OriginalFilename", "oscar64.exe"
|
||||
VALUE "ProductName", "oscar64"
|
||||
VALUE "ProductVersion", "1.7.136.0"
|
||||
VALUE "ProductVersion", "1.7.137.0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
|
|
@ -4127,15 +4127,15 @@
|
|||
{
|
||||
"Name" = "8:Microsoft Visual Studio"
|
||||
"ProductName" = "8:oscar64"
|
||||
"ProductCode" = "8:{BBBB10E0-15E4-40FE-82D3-27647FE340EE}"
|
||||
"PackageCode" = "8:{E0E1AE65-F11B-4329-9A7F-73C9326FFA33}"
|
||||
"ProductCode" = "8:{FD2A310E-C047-46DB-BC3A-E4704ECC3697}"
|
||||
"PackageCode" = "8:{C415E608-4EAB-4BF9-9990-83BC094DFF07}"
|
||||
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
|
||||
"AspNetVersion" = "8:2.0.50727.0"
|
||||
"RestartWWWService" = "11:FALSE"
|
||||
"RemovePreviousVersions" = "11:TRUE"
|
||||
"DetectNewerInstalledVersion" = "11:TRUE"
|
||||
"InstallAllUsers" = "11:FALSE"
|
||||
"ProductVersion" = "8:1.7.136"
|
||||
"ProductVersion" = "8:1.7.137"
|
||||
"Manufacturer" = "8:oscar64"
|
||||
"ARPHELPTELEPHONE" = "8:"
|
||||
"ARPHELPLINK" = "8:"
|
||||
|
|
Loading…
Reference in New Issue