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