Optimize compile time

This commit is contained in:
drmortalwombat 2023-10-22 19:35:37 +02:00
parent 3377ac04fc
commit f8f81f6d4c
7 changed files with 128 additions and 61 deletions

View File

@ -8100,8 +8100,8 @@ void InterCodeBasicBlock::BuildConstTempSets(void)
{ {
mVisited = true; mVisited = true;
mEntryConstTemp = NumberSet(mEntryRequiredTemps.Size()); mEntryConstTemp.Reset(mEntryRequiredTemps.Size());
mExitConstTemp = NumberSet(mEntryRequiredTemps.Size()); mExitConstTemp.Reset(mEntryRequiredTemps.Size());
for (i = 0; i < mInstructions.Size(); i++) for (i = 0; i < mInstructions.Size(); i++)
{ {
@ -8594,18 +8594,20 @@ bool InterCodeBasicBlock::BuildGlobalRequiredTempSet(NumberSet& fromRequiredTemp
{ {
mVisited = true; mVisited = true;
NumberSet newRequiredTemps(mExitRequiredTemps); mNewRequiredTemps = mExitRequiredTemps;
if (mTrueJump && mTrueJump->BuildGlobalRequiredTempSet(newRequiredTemps)) revisit = true; // NumberSet newRequiredTemps(mExitRequiredTemps);
if (mFalseJump && mFalseJump->BuildGlobalRequiredTempSet(newRequiredTemps)) revisit = true;
if (!(newRequiredTemps <= mExitRequiredTemps)) if (mTrueJump && mTrueJump->BuildGlobalRequiredTempSet(mNewRequiredTemps)) revisit = true;
if (mFalseJump && mFalseJump->BuildGlobalRequiredTempSet(mNewRequiredTemps)) revisit = true;
if (!(mNewRequiredTemps <= mExitRequiredTemps))
{ {
revisit = true; revisit = true;
mExitRequiredTemps = newRequiredTemps; mExitRequiredTemps = mNewRequiredTemps;
newRequiredTemps -= mLocalProvidedTemps; mNewRequiredTemps -= mLocalProvidedTemps;
mEntryRequiredTemps |= newRequiredTemps; mEntryRequiredTemps |= mNewRequiredTemps;
} }
} }
@ -8716,13 +8718,13 @@ void InterCodeBasicBlock::BuildStaticVariableSet(const GrowingVariableArray& sta
{ {
mVisited = true; mVisited = true;
mLocalRequiredStatics = NumberSet(staticVars.Size()); mLocalRequiredStatics.Reset(staticVars.Size());
mLocalProvidedStatics = NumberSet(staticVars.Size()); mLocalProvidedStatics.Reset(staticVars.Size());
mEntryRequiredStatics = NumberSet(staticVars.Size()); mEntryRequiredStatics.Reset(staticVars.Size());
mEntryProvidedStatics = NumberSet(staticVars.Size()); mEntryProvidedStatics.Reset(staticVars.Size());
mExitRequiredStatics = NumberSet(staticVars.Size()); mExitRequiredStatics.Reset(staticVars.Size());
mExitProvidedStatics = NumberSet(staticVars.Size()); mExitProvidedStatics.Reset(staticVars.Size());
for (int i = 0; i < mInstructions.Size(); i++) for (int i = 0; i < mInstructions.Size(); i++)
mInstructions[i]->FilterStaticVarsUsage(staticVars, mLocalRequiredStatics, mLocalProvidedStatics); mInstructions[i]->FilterStaticVarsUsage(staticVars, mLocalRequiredStatics, mLocalProvidedStatics);
@ -8819,13 +8821,13 @@ void InterCodeBasicBlock::BuildStaticVariableByteSet(const GrowingVariableArray&
{ {
mVisited = true; mVisited = true;
mLocalRequiredStatics = NumberSet(bsize); mLocalRequiredStatics.Reset(bsize);
mLocalProvidedStatics = NumberSet(bsize); mLocalProvidedStatics.Reset(bsize);
mEntryRequiredStatics = NumberSet(bsize); mEntryRequiredStatics.Reset(bsize);
mEntryProvidedStatics = NumberSet(bsize); mEntryProvidedStatics.Reset(bsize);
mExitRequiredStatics = NumberSet(bsize); mExitRequiredStatics.Reset(bsize);
mExitProvidedStatics = NumberSet(bsize); mExitProvidedStatics.Reset(bsize);
for (int i = 0; i < mInstructions.Size(); i++) for (int i = 0; i < mInstructions.Size(); i++)
mInstructions[i]->FilterStaticVarsByteUsage(staticVars, mLocalRequiredStatics, mLocalProvidedStatics); mInstructions[i]->FilterStaticVarsByteUsage(staticVars, mLocalRequiredStatics, mLocalProvidedStatics);
@ -8881,21 +8883,21 @@ void InterCodeBasicBlock::BuildLocalVariableSets(const GrowingVariableArray& loc
{ {
mVisited = true; mVisited = true;
mLocalRequiredVars = NumberSet(localVars.Size()); mLocalRequiredVars.Reset(localVars.Size());
mLocalProvidedVars = NumberSet(localVars.Size()); mLocalProvidedVars.Reset(localVars.Size());
mEntryRequiredVars = NumberSet(localVars.Size()); mEntryRequiredVars.Reset(localVars.Size());
mEntryProvidedVars = NumberSet(localVars.Size()); mEntryProvidedVars.Reset(localVars.Size());
mExitRequiredVars = NumberSet(localVars.Size()); mExitRequiredVars.Reset(localVars.Size());
mExitProvidedVars = NumberSet(localVars.Size()); mExitProvidedVars.Reset(localVars.Size());
mLocalRequiredParams = NumberSet(params.Size()); mLocalRequiredParams.Reset(params.Size());
mLocalProvidedParams = NumberSet(params.Size()); mLocalProvidedParams.Reset(params.Size());
mEntryRequiredParams = NumberSet(params.Size()); mEntryRequiredParams.Reset(params.Size());
mEntryProvidedParams = NumberSet(params.Size()); mEntryProvidedParams.Reset(params.Size());
mExitRequiredParams = NumberSet(params.Size()); mExitRequiredParams.Reset(params.Size());
mExitProvidedParams = NumberSet(params.Size()); mExitProvidedParams.Reset(params.Size());
for (i = 0; i < mInstructions.Size(); i++) for (i = 0; i < mInstructions.Size(); i++)
{ {

View File

@ -368,6 +368,7 @@ public:
NumberSet mEntryRequiredTemps, mEntryProvidedTemps, mEntryPotentialTemps; NumberSet mEntryRequiredTemps, mEntryProvidedTemps, mEntryPotentialTemps;
NumberSet mExitRequiredTemps, mExitProvidedTemps, mExitPotentialTemps; NumberSet mExitRequiredTemps, mExitProvidedTemps, mExitPotentialTemps;
NumberSet mEntryConstTemp, mExitConstTemp; NumberSet mEntryConstTemp, mExitConstTemp;
NumberSet mNewRequiredTemps;
NumberSet mLocalRequiredVars, mLocalProvidedVars; NumberSet mLocalRequiredVars, mLocalProvidedVars;
NumberSet mEntryRequiredVars, mEntryProvidedVars; NumberSet mEntryRequiredVars, mEntryProvidedVars;

View File

@ -95,13 +95,9 @@ void NativeRegisterDataSet::ResetMask(void)
void NativeRegisterDataSet::ResetWorkRegs(void) void NativeRegisterDataSet::ResetWorkRegs(void)
{ {
ResetZeroPage(BC_REG_WORK_Y); ResetZeroPage(BC_REG_WORK_Y);
ResetZeroPage(BC_REG_ADDR + 0); ResetZeroPageRange(BC_REG_ADDR, 2);
ResetZeroPage(BC_REG_ADDR + 1); ResetZeroPageRange(BC_REG_ACCU, 4);
ResetZeroPageRange(BC_REG_WORK, 8);
for (int i = 0; i < 4; i++)
ResetZeroPage(BC_REG_ACCU + i);
for (int i = 0; i < 8; i++)
ResetZeroPage(BC_REG_WORK + i);
} }
void NativeRegisterDataSet::ResetWorkMasks(void) 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<num; i++)
mRegs[addr + i].Reset();
for (int i = 0; i < NUM_REGS; i++)
{
if (mRegs[i].mMode == NRDM_ZERO_PAGE && mRegs[i].mValue >= 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) int NativeRegisterDataSet::FindAbsolute(LinkerObject* linkerObject, int addr)
{ {
for (int i = 0; i < 256; i++) for (int i = 0; i < 256; i++)
@ -12467,13 +12477,13 @@ void NativeCodeBasicBlock::BuildLocalRegSets(void)
{ {
mVisited = true; mVisited = true;
mLocalRequiredRegs = NumberSet(NUM_REGS); mLocalRequiredRegs.Reset(NUM_REGS);
mLocalProvidedRegs = NumberSet(NUM_REGS); mLocalProvidedRegs.Reset(NUM_REGS);
mEntryRequiredRegs = NumberSet(NUM_REGS); mEntryRequiredRegs.Reset(NUM_REGS);
mEntryProvidedRegs = NumberSet(NUM_REGS); mEntryProvidedRegs.Reset(NUM_REGS);
mExitRequiredRegs = NumberSet(NUM_REGS); mExitRequiredRegs.Reset(NUM_REGS);
mExitProvidedRegs = NumberSet(NUM_REGS); mExitProvidedRegs.Reset(NUM_REGS);
if (mEntryRegA) if (mEntryRegA)
mLocalProvidedRegs += CPU_REG_A; mLocalProvidedRegs += CPU_REG_A;
@ -12546,18 +12556,18 @@ bool NativeCodeBasicBlock::BuildGlobalRequiredRegSet(NumberSet& fromRequiredRegs
{ {
mVisited = true; mVisited = true;
NumberSet newRequiredRegs(mExitRequiredRegs); mNewRequiredRegs = mExitRequiredRegs;
if (mTrueJump && mTrueJump->BuildGlobalRequiredRegSet(newRequiredRegs)) revisit = true; if (mTrueJump && mTrueJump->BuildGlobalRequiredRegSet(mNewRequiredRegs)) revisit = true;
if (mFalseJump && mFalseJump->BuildGlobalRequiredRegSet(newRequiredRegs)) revisit = true; if (mFalseJump && mFalseJump->BuildGlobalRequiredRegSet(mNewRequiredRegs)) revisit = true;
if (!(newRequiredRegs <= mExitRequiredRegs)) if (!(mNewRequiredRegs <= mExitRequiredRegs))
{ {
revisit = true; revisit = true;
mExitRequiredRegs = newRequiredRegs; mExitRequiredRegs = mNewRequiredRegs;
newRequiredRegs -= mLocalProvidedRegs; mNewRequiredRegs -= mLocalProvidedRegs;
mEntryRequiredRegs |= newRequiredRegs; mEntryRequiredRegs |= mNewRequiredRegs;
} }
} }

View File

@ -45,6 +45,7 @@ struct NativeRegisterDataSet
void ResetMask(void); void ResetMask(void);
void ResetZeroPage(int addr); void ResetZeroPage(int addr);
void ResetZeroPageRange(int addr, int num);
void ResetAbsolute(LinkerObject * linkerObject, int addr); void ResetAbsolute(LinkerObject * linkerObject, int addr);
int FindAbsolute(LinkerObject* linkerObject, int addr); int FindAbsolute(LinkerObject* linkerObject, int addr);
void ResetIndirect(int reg); void ResetIndirect(int reg);
@ -369,6 +370,7 @@ public:
NumberSet mLocalRequiredRegs, mLocalProvidedRegs; NumberSet mLocalRequiredRegs, mLocalProvidedRegs;
NumberSet mEntryRequiredRegs, mEntryProvidedRegs; NumberSet mEntryRequiredRegs, mEntryProvidedRegs;
NumberSet mExitRequiredRegs, mExitProvidedRegs; NumberSet mExitRequiredRegs, mExitProvidedRegs;
NumberSet mNewRequiredRegs;
NumberSet mTempRegs; NumberSet mTempRegs;
void BuildLocalRegSets(void); void BuildLocalRegSets(void);

View File

@ -74,7 +74,7 @@ int main2(int argc, const char** argv)
#else #else
strcpy(strProductName, "oscar64"); strcpy(strProductName, "oscar64");
strcpy(strProductVersion, "1.26.224"); strcpy(strProductVersion, "1.26.225");
#ifdef __APPLE__ #ifdef __APPLE__
uint32_t length = sizeof(basePath); uint32_t length = sizeof(basePath);

View File

@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,26,224,0 FILEVERSION 1,26,225,0
PRODUCTVERSION 1,26,224,0 PRODUCTVERSION 1,26,225,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.26.224.0" VALUE "FileVersion", "1.26.225.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.26.224.0" VALUE "ProductVersion", "1.26.225.0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@ -52,6 +52,12 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_071415C872DB4A94B28137BD7FE1F669"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_071CF34574024DBD95D2203D6E4279D0" "MsmKey" = "8:_071CF34574024DBD95D2203D6E4279D0"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -1150,6 +1156,12 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_ED20DE3FDC8A400296E92AE0D37D8665"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_ED5FED616EA64689AB793E5D8BD3F13D" "MsmKey" = "8:_ED5FED616EA64689AB793E5D8BD3F13D"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -1439,6 +1451,26 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "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" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_071CF34574024DBD95D2203D6E4279D0"
{ {
"SourcePath" = "8:..\\include\\opp\\iostream.h" "SourcePath" = "8:..\\include\\opp\\iostream.h"
@ -5099,6 +5131,26 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "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" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED5FED616EA64689AB793E5D8BD3F13D"
{ {
"SourcePath" = "8:..\\include\\nes\\mmc3.c" "SourcePath" = "8:..\\include\\nes\\mmc3.c"
@ -5712,15 +5764,15 @@
{ {
"Name" = "8:Microsoft Visual Studio" "Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64" "ProductName" = "8:oscar64"
"ProductCode" = "8:{F884314C-DBC1-466B-9A34-1761B921E1BD}" "ProductCode" = "8:{50B8F261-E014-4D97-807C-8B181651E0CF}"
"PackageCode" = "8:{5563B34B-0822-45A3-85A4-8007E3D57051}" "PackageCode" = "8:{73E601A2-834D-4280-AFAD-0E275AEDBF01}"
"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.26.224" "ProductVersion" = "8:1.26.225"
"Manufacturer" = "8:oscar64" "Manufacturer" = "8:oscar64"
"ARPHELPTELEPHONE" = "8:" "ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:" "ARPHELPLINK" = "8:"