From f8f81f6d4c4f13e854628a4af5be505b6b3d8b26 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 22 Oct 2023 19:35:37 +0200 Subject: [PATCH] Optimize compile time --- oscar64/InterCode.cpp | 68 ++++++++++++++++---------------- oscar64/InterCode.h | 1 + oscar64/NativeCodeGenerator.cpp | 50 +++++++++++++---------- oscar64/NativeCodeGenerator.h | 2 + oscar64/oscar64.cpp | 2 +- oscar64/oscar64.rc | 8 ++-- oscar64setup/oscar64setup.vdproj | 58 +++++++++++++++++++++++++-- 7 files changed, 128 insertions(+), 61 deletions(-) diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index 97caaf6..09176ad 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -8100,8 +8100,8 @@ void InterCodeBasicBlock::BuildConstTempSets(void) { mVisited = true; - mEntryConstTemp = NumberSet(mEntryRequiredTemps.Size()); - mExitConstTemp = NumberSet(mEntryRequiredTemps.Size()); + mEntryConstTemp.Reset(mEntryRequiredTemps.Size()); + mExitConstTemp.Reset(mEntryRequiredTemps.Size()); for (i = 0; i < mInstructions.Size(); i++) { @@ -8594,18 +8594,20 @@ bool InterCodeBasicBlock::BuildGlobalRequiredTempSet(NumberSet& fromRequiredTemp { mVisited = true; - NumberSet newRequiredTemps(mExitRequiredTemps); + mNewRequiredTemps = mExitRequiredTemps; - if (mTrueJump && mTrueJump->BuildGlobalRequiredTempSet(newRequiredTemps)) revisit = true; - if (mFalseJump && mFalseJump->BuildGlobalRequiredTempSet(newRequiredTemps)) revisit = true; +// NumberSet newRequiredTemps(mExitRequiredTemps); - if (!(newRequiredTemps <= mExitRequiredTemps)) + if (mTrueJump && mTrueJump->BuildGlobalRequiredTempSet(mNewRequiredTemps)) revisit = true; + if (mFalseJump && mFalseJump->BuildGlobalRequiredTempSet(mNewRequiredTemps)) revisit = true; + + if (!(mNewRequiredTemps <= mExitRequiredTemps)) { revisit = true; - mExitRequiredTemps = newRequiredTemps; - newRequiredTemps -= mLocalProvidedTemps; - mEntryRequiredTemps |= newRequiredTemps; + mExitRequiredTemps = mNewRequiredTemps; + mNewRequiredTemps -= mLocalProvidedTemps; + mEntryRequiredTemps |= mNewRequiredTemps; } } @@ -8716,13 +8718,13 @@ void InterCodeBasicBlock::BuildStaticVariableSet(const GrowingVariableArray& sta { mVisited = true; - mLocalRequiredStatics = NumberSet(staticVars.Size()); - mLocalProvidedStatics = NumberSet(staticVars.Size()); + mLocalRequiredStatics.Reset(staticVars.Size()); + mLocalProvidedStatics.Reset(staticVars.Size()); - mEntryRequiredStatics = NumberSet(staticVars.Size()); - mEntryProvidedStatics = NumberSet(staticVars.Size()); - mExitRequiredStatics = NumberSet(staticVars.Size()); - mExitProvidedStatics = NumberSet(staticVars.Size()); + mEntryRequiredStatics.Reset(staticVars.Size()); + mEntryProvidedStatics.Reset(staticVars.Size()); + mExitRequiredStatics.Reset(staticVars.Size()); + mExitProvidedStatics.Reset(staticVars.Size()); for (int i = 0; i < mInstructions.Size(); i++) mInstructions[i]->FilterStaticVarsUsage(staticVars, mLocalRequiredStatics, mLocalProvidedStatics); @@ -8819,13 +8821,13 @@ void InterCodeBasicBlock::BuildStaticVariableByteSet(const GrowingVariableArray& { mVisited = true; - mLocalRequiredStatics = NumberSet(bsize); - mLocalProvidedStatics = NumberSet(bsize); + mLocalRequiredStatics.Reset(bsize); + mLocalProvidedStatics.Reset(bsize); - mEntryRequiredStatics = NumberSet(bsize); - mEntryProvidedStatics = NumberSet(bsize); - mExitRequiredStatics = NumberSet(bsize); - mExitProvidedStatics = NumberSet(bsize); + mEntryRequiredStatics.Reset(bsize); + mEntryProvidedStatics.Reset(bsize); + mExitRequiredStatics.Reset(bsize); + mExitProvidedStatics.Reset(bsize); for (int i = 0; i < mInstructions.Size(); i++) mInstructions[i]->FilterStaticVarsByteUsage(staticVars, mLocalRequiredStatics, mLocalProvidedStatics); @@ -8881,21 +8883,21 @@ void InterCodeBasicBlock::BuildLocalVariableSets(const GrowingVariableArray& loc { mVisited = true; - mLocalRequiredVars = NumberSet(localVars.Size()); - mLocalProvidedVars = NumberSet(localVars.Size()); + mLocalRequiredVars.Reset(localVars.Size()); + mLocalProvidedVars.Reset(localVars.Size()); - mEntryRequiredVars = NumberSet(localVars.Size()); - mEntryProvidedVars = NumberSet(localVars.Size()); - mExitRequiredVars = NumberSet(localVars.Size()); - mExitProvidedVars = NumberSet(localVars.Size()); + mEntryRequiredVars.Reset(localVars.Size()); + mEntryProvidedVars.Reset(localVars.Size()); + mExitRequiredVars.Reset(localVars.Size()); + mExitProvidedVars.Reset(localVars.Size()); - mLocalRequiredParams = NumberSet(params.Size()); - mLocalProvidedParams = NumberSet(params.Size()); + mLocalRequiredParams.Reset(params.Size()); + mLocalProvidedParams.Reset(params.Size()); - mEntryRequiredParams = NumberSet(params.Size()); - mEntryProvidedParams = NumberSet(params.Size()); - mExitRequiredParams = NumberSet(params.Size()); - mExitProvidedParams = NumberSet(params.Size()); + mEntryRequiredParams.Reset(params.Size()); + mEntryProvidedParams.Reset(params.Size()); + mExitRequiredParams.Reset(params.Size()); + mExitProvidedParams.Reset(params.Size()); for (i = 0; i < mInstructions.Size(); i++) { diff --git a/oscar64/InterCode.h b/oscar64/InterCode.h index 7835b2e..f12f0e3 100644 --- a/oscar64/InterCode.h +++ b/oscar64/InterCode.h @@ -368,6 +368,7 @@ public: NumberSet mEntryRequiredTemps, mEntryProvidedTemps, mEntryPotentialTemps; NumberSet mExitRequiredTemps, mExitProvidedTemps, mExitPotentialTemps; NumberSet mEntryConstTemp, mExitConstTemp; + NumberSet mNewRequiredTemps; NumberSet mLocalRequiredVars, mLocalProvidedVars; NumberSet mEntryRequiredVars, mEntryProvidedVars; diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 511e02a..73fa14c 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -95,13 +95,9 @@ void NativeRegisterDataSet::ResetMask(void) void NativeRegisterDataSet::ResetWorkRegs(void) { ResetZeroPage(BC_REG_WORK_Y); - ResetZeroPage(BC_REG_ADDR + 0); - ResetZeroPage(BC_REG_ADDR + 1); - - for (int i = 0; i < 4; i++) - ResetZeroPage(BC_REG_ACCU + i); - for (int i = 0; i < 8; i++) - ResetZeroPage(BC_REG_WORK + i); + ResetZeroPageRange(BC_REG_ADDR, 2); + ResetZeroPageRange(BC_REG_ACCU, 4); + ResetZeroPageRange(BC_REG_WORK, 8); } void NativeRegisterDataSet::ResetWorkMasks(void) @@ -129,6 +125,20 @@ void NativeRegisterDataSet::ResetZeroPage(int addr) } } +void NativeRegisterDataSet::ResetZeroPageRange(int addr, int num) +{ + for(int i=0; i= addr && mRegs[i].mValue < addr + num) + mRegs[i].Reset(); + else if (mRegs[i].mMode == NRDM_INDIRECT_Y && mRegs[i].mValue + 1 >= addr && mRegs[i].mValue < addr + num) + mRegs[i].Reset(); + } +} + + int NativeRegisterDataSet::FindAbsolute(LinkerObject* linkerObject, int addr) { for (int i = 0; i < 256; i++) @@ -12467,13 +12477,13 @@ void NativeCodeBasicBlock::BuildLocalRegSets(void) { mVisited = true; - mLocalRequiredRegs = NumberSet(NUM_REGS); - mLocalProvidedRegs = NumberSet(NUM_REGS); + mLocalRequiredRegs.Reset(NUM_REGS); + mLocalProvidedRegs.Reset(NUM_REGS); - mEntryRequiredRegs = NumberSet(NUM_REGS); - mEntryProvidedRegs = NumberSet(NUM_REGS); - mExitRequiredRegs = NumberSet(NUM_REGS); - mExitProvidedRegs = NumberSet(NUM_REGS); + mEntryRequiredRegs.Reset(NUM_REGS); + mEntryProvidedRegs.Reset(NUM_REGS); + mExitRequiredRegs.Reset(NUM_REGS); + mExitProvidedRegs.Reset(NUM_REGS); if (mEntryRegA) mLocalProvidedRegs += CPU_REG_A; @@ -12546,18 +12556,18 @@ bool NativeCodeBasicBlock::BuildGlobalRequiredRegSet(NumberSet& fromRequiredRegs { mVisited = true; - NumberSet newRequiredRegs(mExitRequiredRegs); + mNewRequiredRegs = mExitRequiredRegs; - if (mTrueJump && mTrueJump->BuildGlobalRequiredRegSet(newRequiredRegs)) revisit = true; - if (mFalseJump && mFalseJump->BuildGlobalRequiredRegSet(newRequiredRegs)) revisit = true; + if (mTrueJump && mTrueJump->BuildGlobalRequiredRegSet(mNewRequiredRegs)) revisit = true; + if (mFalseJump && mFalseJump->BuildGlobalRequiredRegSet(mNewRequiredRegs)) revisit = true; - if (!(newRequiredRegs <= mExitRequiredRegs)) + if (!(mNewRequiredRegs <= mExitRequiredRegs)) { revisit = true; - mExitRequiredRegs = newRequiredRegs; - newRequiredRegs -= mLocalProvidedRegs; - mEntryRequiredRegs |= newRequiredRegs; + mExitRequiredRegs = mNewRequiredRegs; + mNewRequiredRegs -= mLocalProvidedRegs; + mEntryRequiredRegs |= mNewRequiredRegs; } } diff --git a/oscar64/NativeCodeGenerator.h b/oscar64/NativeCodeGenerator.h index e32638d..07c27dd 100644 --- a/oscar64/NativeCodeGenerator.h +++ b/oscar64/NativeCodeGenerator.h @@ -45,6 +45,7 @@ struct NativeRegisterDataSet void ResetMask(void); void ResetZeroPage(int addr); + void ResetZeroPageRange(int addr, int num); void ResetAbsolute(LinkerObject * linkerObject, int addr); int FindAbsolute(LinkerObject* linkerObject, int addr); void ResetIndirect(int reg); @@ -369,6 +370,7 @@ public: NumberSet mLocalRequiredRegs, mLocalProvidedRegs; NumberSet mEntryRequiredRegs, mEntryProvidedRegs; NumberSet mExitRequiredRegs, mExitProvidedRegs; + NumberSet mNewRequiredRegs; NumberSet mTempRegs; void BuildLocalRegSets(void); diff --git a/oscar64/oscar64.cpp b/oscar64/oscar64.cpp index 7c48217..b588cd6 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.26.224"); + strcpy(strProductVersion, "1.26.225"); #ifdef __APPLE__ uint32_t length = sizeof(basePath); diff --git a/oscar64/oscar64.rc b/oscar64/oscar64.rc index e52501f..60ea412 100644 --- a/oscar64/oscar64.rc +++ b/oscar64/oscar64.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,224,0 - PRODUCTVERSION 1,26,224,0 + FILEVERSION 1,26,225,0 + PRODUCTVERSION 1,26,225,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,12 +43,12 @@ BEGIN BEGIN VALUE "CompanyName", "oscar64" VALUE "FileDescription", "oscar64 compiler" - VALUE "FileVersion", "1.26.224.0" + VALUE "FileVersion", "1.26.225.0" VALUE "InternalName", "oscar64.exe" VALUE "LegalCopyright", "Copyright (C) 2021" VALUE "OriginalFilename", "oscar64.exe" VALUE "ProductName", "oscar64" - VALUE "ProductVersion", "1.26.224.0" + VALUE "ProductVersion", "1.26.225.0" END END BLOCK "VarFileInfo" diff --git a/oscar64setup/oscar64setup.vdproj b/oscar64setup/oscar64setup.vdproj index 2791258..0eea676 100644 --- a/oscar64setup/oscar64setup.vdproj +++ b/oscar64setup/oscar64setup.vdproj @@ -52,6 +52,12 @@ } "Entry" { + "MsmKey" = "8:_071415C872DB4A94B28137BD7FE1F669" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_071CF34574024DBD95D2203D6E4279D0" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -1150,6 +1156,12 @@ } "Entry" { + "MsmKey" = "8:_ED20DE3FDC8A400296E92AE0D37D8665" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_ED5FED616EA64689AB793E5D8BD3F13D" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -1439,6 +1451,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_071415C872DB4A94B28137BD7FE1F669" + { + "SourcePath" = "8:..\\include\\opp\\slab.h" + "TargetName" = "8:slab.h" + "Tag" = "8:" + "Folder" = "8:_D76A1802AFD04C48A519C9F8700E53CC" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_071CF34574024DBD95D2203D6E4279D0" { "SourcePath" = "8:..\\include\\opp\\iostream.h" @@ -5099,6 +5131,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED20DE3FDC8A400296E92AE0D37D8665" + { + "SourcePath" = "8:..\\include\\opp\\static_vector.h" + "TargetName" = "8:static_vector.h" + "Tag" = "8:" + "Folder" = "8:_D76A1802AFD04C48A519C9F8700E53CC" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED5FED616EA64689AB793E5D8BD3F13D" { "SourcePath" = "8:..\\include\\nes\\mmc3.c" @@ -5712,15 +5764,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:oscar64" - "ProductCode" = "8:{F884314C-DBC1-466B-9A34-1761B921E1BD}" - "PackageCode" = "8:{5563B34B-0822-45A3-85A4-8007E3D57051}" + "ProductCode" = "8:{50B8F261-E014-4D97-807C-8B181651E0CF}" + "PackageCode" = "8:{73E601A2-834D-4280-AFAD-0E275AEDBF01}" "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.26.224" + "ProductVersion" = "8:1.26.225" "Manufacturer" = "8:oscar64" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:"