diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index 0f0b401..12d1431 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -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) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index bdc4cce..5e1f6ee 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -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 { diff --git a/oscar64/oscar64.cpp b/oscar64/oscar64.cpp index 262ede8..0c6c096 100644 --- a/oscar64/oscar64.cpp +++ b/oscar64/oscar64.cpp @@ -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); diff --git a/oscar64/oscar64.rc b/oscar64/oscar64.rc index b513212..c5654a5 100644 --- a/oscar64/oscar64.rc +++ b/oscar64/oscar64.rc @@ -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" diff --git a/oscar64setup/oscar64setup.vdproj b/oscar64setup/oscar64setup.vdproj index 3a8aab8..5c25de0 100644 --- a/oscar64setup/oscar64setup.vdproj +++ b/oscar64setup/oscar64setup.vdproj @@ -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:"