Forward native code instruction if only used on single outgoing path
This commit is contained in:
parent
2feb8b9e6d
commit
e70162b2cc
|
@ -8299,6 +8299,40 @@ InterCodeBasicBlock* InterCodeBasicBlock::BuildLoopPrefix(InterCodeProcedure* pr
|
||||||
jins->mCode = IC_JUMP;
|
jins->mCode = IC_JUMP;
|
||||||
mLoopPrefix->Append(jins);
|
mLoopPrefix->Append(jins);
|
||||||
mLoopPrefix->Close(this, nullptr);
|
mLoopPrefix->Close(this, nullptr);
|
||||||
|
|
||||||
|
if (mNumEntries == 2 && mFalseJump)
|
||||||
|
{
|
||||||
|
if (mTrueJump == this && mFalseJump != this)
|
||||||
|
{
|
||||||
|
if (mFalseJump->mNumEntries > 1)
|
||||||
|
{
|
||||||
|
InterCodeBasicBlock* suffix = new InterCodeBasicBlock();
|
||||||
|
proc->Append(suffix);
|
||||||
|
InterInstruction* jins = new InterInstruction();
|
||||||
|
jins->mCode = IC_JUMP;
|
||||||
|
suffix->Append(jins);
|
||||||
|
suffix->Close(mFalseJump, nullptr);
|
||||||
|
mFalseJump->mNumEntries--;
|
||||||
|
mFalseJump = suffix;
|
||||||
|
suffix->mNumEntries = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mFalseJump == this && mTrueJump != this)
|
||||||
|
{
|
||||||
|
if (mTrueJump->mNumEntries > 1)
|
||||||
|
{
|
||||||
|
InterCodeBasicBlock* suffix = new InterCodeBasicBlock();
|
||||||
|
proc->Append(suffix);
|
||||||
|
InterInstruction* jins = new InterInstruction();
|
||||||
|
jins->mCode = IC_JUMP;
|
||||||
|
suffix->Append(jins);
|
||||||
|
suffix->Close(mTrueJump, nullptr);
|
||||||
|
mTrueJump->mNumEntries--;
|
||||||
|
mTrueJump = suffix;
|
||||||
|
suffix->mNumEntries = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8729,6 +8763,71 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
|
||||||
hasCall = true;
|
hasCall = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
if (!hasCall)
|
||||||
|
{
|
||||||
|
// Check forwarding globals
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (int i = 0; i < mInstructions.Size(); i++)
|
||||||
|
{
|
||||||
|
InterInstruction* ins = mInstructions[i];
|
||||||
|
|
||||||
|
// A global load
|
||||||
|
if (ins->mCode == IC_LOAD && ins->mSrc[0].mTemp < 0 && ins->mSrc[0].mMemory == IM_GLOBAL)
|
||||||
|
{
|
||||||
|
// Find the last store that overlaps the load
|
||||||
|
int j = mInstructions.Size() - 1;
|
||||||
|
while (j > i && !(mInstructions[j]->mCode == IC_STORE && CollidingMem(ins->mSrc[0], mInstructions[j]->mSrc[1])))
|
||||||
|
j--;
|
||||||
|
|
||||||
|
if (j > i)
|
||||||
|
{
|
||||||
|
InterInstruction* sins = mInstructions[j];
|
||||||
|
|
||||||
|
// Does a full store
|
||||||
|
if (SameMem(ins->mSrc[0], sins->mSrc[1]))
|
||||||
|
{
|
||||||
|
if (sins->mSrc[0].mTemp >= 0)
|
||||||
|
{
|
||||||
|
// Check temp not used before load
|
||||||
|
int k = 0;
|
||||||
|
while (k < i && !mInstructions[k]->UsesTemp(sins->mSrc[0].mTemp))
|
||||||
|
k++;
|
||||||
|
if (k == i)
|
||||||
|
{
|
||||||
|
// Check temp not modified after load
|
||||||
|
k = j + 1;
|
||||||
|
while (k < mInstructions.Size() && mInstructions[k]->mDst.mTemp != sins->mSrc[0].mTemp)
|
||||||
|
k++;
|
||||||
|
if (k == mInstructions.Size())
|
||||||
|
{
|
||||||
|
// Move load before loop
|
||||||
|
mLoopPrefix->mInstructions.Insert(mLoopPrefix->mInstructions.Size() - 1, ins);
|
||||||
|
InterInstruction* nins = new InterInstruction();
|
||||||
|
mInstructions[i] = nins;
|
||||||
|
nins->mCode = IC_LOAD_TEMPORARY;
|
||||||
|
nins->mDst.Forward(ins->mDst);
|
||||||
|
nins->mSrc[0].Forward(sins->mSrc[0]);
|
||||||
|
ins->mDst.Forward(sins->mSrc[0]);
|
||||||
|
sins->mSrc[0].mFinal = false;
|
||||||
|
|
||||||
|
// Move store behind loop
|
||||||
|
if (mTrueJump == this)
|
||||||
|
mFalseJump->mInstructions.Insert(0, sins);
|
||||||
|
else
|
||||||
|
mTrueJump->mInstructions.Insert(0, sins);
|
||||||
|
mInstructions.Remove(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
GrowingArray<InterInstructionPtr> tvalues(nullptr);
|
GrowingArray<InterInstructionPtr> tvalues(nullptr);
|
||||||
GrowingArray<int> nassigns(0);
|
GrowingArray<int> nassigns(0);
|
||||||
|
|
||||||
|
@ -8792,7 +8891,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
|
||||||
ins->mInvariant = false;
|
ins->mInvariant = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ins->mSrc[0].mMemory == sins->mSrc[1].mMemory && ins->mSrc[0].mVarIndex == sins->mSrc[1].mVarIndex && ins->mSrc[0].mLinkerObject == sins->mSrc[1].mLinkerObject)
|
else if (CollidingMem(ins->mSrc[0], sins->mSrc[1]))
|
||||||
{
|
{
|
||||||
ins->mInvariant = false;
|
ins->mInvariant = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,6 +172,12 @@ NativeCodeInstruction::NativeCodeInstruction(AsmInsType type, AsmInsMode mode, i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NativeCodeInstruction::NativeCodeInstruction(AsmInsType type, const NativeCodeInstruction& addr)
|
||||||
|
: mType(type), mMode(addr.mMode), mAddress(addr.mAddress), mLinkerObject(addr.mLinkerObject), mFlags(addr.mFlags), mParam(addr.mParam), mLive(LIVE_ALL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool NativeCodeInstruction::IsUsedResultInstructions(NumberSet& requiredTemps)
|
bool NativeCodeInstruction::IsUsedResultInstructions(NumberSet& requiredTemps)
|
||||||
{
|
{
|
||||||
bool used = false;
|
bool used = false;
|
||||||
|
@ -11285,6 +11291,46 @@ bool NativeCodeBasicBlock::ExpandADCToBranch(NativeCodeProcedure* proc)
|
||||||
mBranch = ASMIT_BNE;
|
mBranch = ASMIT_BNE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mIns[i + 0].mType == ASMIT_LDA &&
|
||||||
|
mIns[i + 1].mType == ASMIT_CLC &&
|
||||||
|
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 1 &&
|
||||||
|
mIns[i + 3].mType == ASMIT_STA && mIns[i + 0].SameEffectiveAddress(mIns[i + 3]) &&
|
||||||
|
mIns[i + 4].mType == ASMIT_LDA &&
|
||||||
|
mIns[i + 5].mType == ASMIT_ADC && mIns[i + 5].mMode == ASMIM_IMMEDIATE && mIns[i + 5].mAddress == 0 &&
|
||||||
|
mIns[i + 6].mType == ASMIT_STA && mIns[i + 4].SameEffectiveAddress(mIns[i + 6]) &&
|
||||||
|
HasAsmInstructionMode(ASMIT_INC, mIns[i + 3].mMode) &&
|
||||||
|
HasAsmInstructionMode(ASMIT_INC, mIns[i + 6].mMode) &&
|
||||||
|
!(mIns[i + 6].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_C | LIVE_CPU_REG_Z)))
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
|
||||||
|
NativeCodeBasicBlock* iblock = proc->AllocateBlock();
|
||||||
|
NativeCodeBasicBlock* fblock = proc->AllocateBlock();
|
||||||
|
|
||||||
|
fblock->mTrueJump = mTrueJump;
|
||||||
|
fblock->mFalseJump = mFalseJump;
|
||||||
|
fblock->mBranch = mBranch;
|
||||||
|
|
||||||
|
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 1].mType = ASMIT_NOP;
|
||||||
|
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 3].mType = ASMIT_INC; mIns[i + 3].mLive |= LIVE_CPU_REG_Z;
|
||||||
|
|
||||||
|
for (int j = i + 7; j < mIns.Size(); j++)
|
||||||
|
fblock->mIns.Push(mIns[j]);
|
||||||
|
iblock->mIns.Push(mIns[i + 6]);
|
||||||
|
mIns.SetSize(i + 4);
|
||||||
|
iblock->mIns[0].mType = ASMIT_INC;
|
||||||
|
iblock->mTrueJump = fblock;
|
||||||
|
iblock->mBranch = ASMIT_JMP;
|
||||||
|
|
||||||
|
mTrueJump = fblock;
|
||||||
|
mFalseJump = iblock;
|
||||||
|
mBranch = ASMIT_BNE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (mIns[i + 0].mType == ASMIT_CLC &&
|
if (mIns[i + 0].mType == ASMIT_CLC &&
|
||||||
mIns[i + 1].mType == ASMIT_LDA &&
|
mIns[i + 1].mType == ASMIT_LDA &&
|
||||||
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 0xff &&
|
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 0xff &&
|
||||||
|
@ -11329,6 +11375,44 @@ bool NativeCodeBasicBlock::ExpandADCToBranch(NativeCodeProcedure* proc)
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if 1
|
||||||
|
if (i + 5 < mIns.Size() &&
|
||||||
|
mIns[i + 0].ChangesAccuAndFlag() &&
|
||||||
|
mIns[i + 1].mType == ASMIT_CMP && mIns[i + 1].mMode == ASMIM_IMMEDIATE && mIns[i + 1].mAddress == 0x01 &&
|
||||||
|
mIns[i + 2].mType == ASMIT_LDA && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 0x00 &&
|
||||||
|
mIns[i + 3].mType == ASMIT_ADC && mIns[i + 3].mMode == ASMIM_IMMEDIATE && mIns[i + 3].mAddress == 0xff &&
|
||||||
|
mIns[i + 4].mType == ASMIT_AND && mIns[i + 4].mMode == ASMIM_IMMEDIATE &&
|
||||||
|
mIns[i + 5].mType == ASMIT_EOR && mIns[i + 5].mMode == ASMIM_IMMEDIATE)
|
||||||
|
{
|
||||||
|
char veq = mIns[i + 4].mAddress ^ mIns[i + 5].mAddress, vne = mIns[i + 5].mAddress;
|
||||||
|
|
||||||
|
changed = true;
|
||||||
|
|
||||||
|
NativeCodeBasicBlock* eblock = proc->AllocateBlock();
|
||||||
|
NativeCodeBasicBlock* neblock = proc->AllocateBlock();
|
||||||
|
NativeCodeBasicBlock* rblock = proc->AllocateBlock();
|
||||||
|
|
||||||
|
rblock->mTrueJump = mTrueJump;
|
||||||
|
rblock->mFalseJump = mFalseJump;
|
||||||
|
rblock->mBranch = mBranch;
|
||||||
|
|
||||||
|
for (int j = i + 6; j < mIns.Size(); j++)
|
||||||
|
rblock->mIns.Push(mIns[j]);
|
||||||
|
mIns.SetSize(i + 1);
|
||||||
|
|
||||||
|
mTrueJump = neblock;
|
||||||
|
mFalseJump = eblock;
|
||||||
|
mBranch = ASMIT_BNE;
|
||||||
|
|
||||||
|
if (veq != 0)
|
||||||
|
eblock->mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, veq));
|
||||||
|
neblock->mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, vne));
|
||||||
|
|
||||||
|
eblock->Close(rblock, nullptr, ASMIT_JMP);
|
||||||
|
neblock->Close(rblock, nullptr, ASMIT_JMP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#if 1
|
#if 1
|
||||||
if (i + 12 < mIns.Size())
|
if (i + 12 < mIns.Size())
|
||||||
{
|
{
|
||||||
|
@ -11537,6 +11621,91 @@ bool NativeCodeBasicBlock::ExpandADCToBranch(NativeCodeProcedure* proc)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mIns.Size() >= 8 && mFalseJump && (mBranch == ASMIT_BNE || mBranch == ASMIT_BEQ))
|
||||||
|
{
|
||||||
|
int sz = mIns.Size();
|
||||||
|
|
||||||
|
if (mIns[sz - 8].mType == ASMIT_LDA &&
|
||||||
|
mIns[sz - 7].mType == ASMIT_CLC &&
|
||||||
|
mIns[sz - 6].mType == ASMIT_ADC && mIns[sz - 6].mMode == ASMIM_IMMEDIATE && mIns[sz - 6].mAddress == 0xff &&
|
||||||
|
mIns[sz - 5].mType == ASMIT_STA && mIns[sz - 5].SameEffectiveAddress(mIns[sz - 8]) &&
|
||||||
|
mIns[sz - 4].mType == ASMIT_LDA &&
|
||||||
|
mIns[sz - 3].mType == ASMIT_ADC && mIns[sz - 3].mMode == ASMIM_IMMEDIATE && mIns[sz - 3].mAddress == 0xff &&
|
||||||
|
mIns[sz - 2].mType == ASMIT_STA && mIns[sz - 2].SameEffectiveAddress(mIns[sz - 4]) &&
|
||||||
|
mIns[sz - 1].mType == ASMIT_ORA && mIns[sz - 1].SameEffectiveAddress(mIns[sz - 5]) &&
|
||||||
|
HasAsmInstructionMode(ASMIT_DEC, mIns[sz - 5].mMode) &&
|
||||||
|
HasAsmInstructionMode(ASMIT_DEC, mIns[sz - 2].mMode) &&
|
||||||
|
!(mIns[sz - 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_C)))
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
|
||||||
|
NativeCodeBasicBlock* eblock, * neblock;
|
||||||
|
if (mBranch == ASMIT_BEQ)
|
||||||
|
{
|
||||||
|
eblock = mTrueJump;
|
||||||
|
neblock = mFalseJump;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eblock = mFalseJump;
|
||||||
|
neblock = mTrueJump;
|
||||||
|
}
|
||||||
|
|
||||||
|
NativeCodeBasicBlock* hblock = proc->AllocateBlock();
|
||||||
|
NativeCodeBasicBlock* lblock = proc->AllocateBlock();
|
||||||
|
NativeCodeBasicBlock* oblock = proc->AllocateBlock();
|
||||||
|
|
||||||
|
mBranch = ASMIT_BNE;
|
||||||
|
mTrueJump = lblock;
|
||||||
|
mFalseJump = hblock;
|
||||||
|
|
||||||
|
hblock->mBranch = ASMIT_JMP;
|
||||||
|
hblock->mTrueJump = lblock;
|
||||||
|
|
||||||
|
lblock->mBranch = ASMIT_BNE;
|
||||||
|
lblock->mTrueJump = neblock;
|
||||||
|
lblock->mFalseJump = oblock;
|
||||||
|
|
||||||
|
oblock->mBranch = ASMIT_BNE;
|
||||||
|
oblock->mTrueJump = neblock;
|
||||||
|
oblock->mFalseJump = eblock;
|
||||||
|
|
||||||
|
hblock->mIns.Push(NativeCodeInstruction(ASMIT_DEC, mIns[sz - 4]));
|
||||||
|
lblock->mIns.Push(NativeCodeInstruction(ASMIT_DEC, mIns[sz - 5]));
|
||||||
|
oblock->mIns.Push(NativeCodeInstruction(ASMIT_LDA, mIns[sz - 4]));
|
||||||
|
|
||||||
|
mIns[sz - 8].mLive |= LIVE_CPU_REG_Z;
|
||||||
|
mIns.SetSize(sz - 7);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
fblock->mTrueJump = mTrueJump;
|
||||||
|
fblock->mFalseJump = mFalseJump;
|
||||||
|
fblock->mBranch = mBranch;
|
||||||
|
|
||||||
|
fblock->mIns.Push(mIns[i + 1]);
|
||||||
|
fblock->mIns[0].mType = ASMIT_DEC;
|
||||||
|
|
||||||
|
mIns[i + 0].mType = ASMIT_NOP;
|
||||||
|
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 3].mType = ASMIT_LDA; mIns[i + 3].mLive |= LIVE_CPU_REG_Z;
|
||||||
|
|
||||||
|
for (int j = i + 7; j < mIns.Size(); j++)
|
||||||
|
fblock->mIns.Push(mIns[j]);
|
||||||
|
iblock->mIns.Push(mIns[i + 6]);
|
||||||
|
mIns.SetSize(i + 4);
|
||||||
|
iblock->mIns[0].mType = ASMIT_DEC;
|
||||||
|
iblock->mTrueJump = fblock;
|
||||||
|
iblock->mBranch = ASMIT_JMP;
|
||||||
|
|
||||||
|
mTrueJump = fblock;
|
||||||
|
mFalseJump = iblock;
|
||||||
|
mBranch = ASMIT_BNE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if (mIns.Size() >= 1 && mFalseJump)
|
if (mIns.Size() >= 1 && mFalseJump)
|
||||||
{
|
{
|
||||||
|
@ -12145,6 +12314,123 @@ NativeCodeBasicBlock* NativeCodeBasicBlock::AddDominatorBlock(NativeCodeProcedur
|
||||||
return pblock;
|
return pblock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool ReferencedOnPath(const NativeCodeBasicBlock* block, int start, int end, int address)
|
||||||
|
{
|
||||||
|
for (int i = start; i < end; i++)
|
||||||
|
if (block->mIns[i].ReferencesZeroPage(address))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool ChangedOnPath(const NativeCodeBasicBlock* block, int start, int end, int address)
|
||||||
|
{
|
||||||
|
for (int i = start; i < end; i++)
|
||||||
|
if (block->mIns[i].ChangesZeroPage(address))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NativeCodeBasicBlock::PropagateSinglePath(void)
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
if (!mVisited)
|
||||||
|
{
|
||||||
|
mVisited = true;
|
||||||
|
|
||||||
|
CheckLive();
|
||||||
|
|
||||||
|
if (mTrueJump && mFalseJump && mTrueJump->mNumEntries == 1 && mFalseJump->mNumEntries == 1)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
while (i < mIns.Size())
|
||||||
|
{
|
||||||
|
#if 1
|
||||||
|
if (!mExitRequiredRegs[CPU_REG_A] &&
|
||||||
|
i + 1 < mIns.Size() &&
|
||||||
|
mIns[i + 0].mType == ASMIT_LDA && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[i + 1].mType == ASMIT_STA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE)
|
||||||
|
{
|
||||||
|
if (!ReferencedOnPath(this, i + 2, mIns.Size(), mIns[i + 1].mAddress) &&
|
||||||
|
!ChangedOnPath(this, i + 2, mIns.Size(), mIns[i + 0].mAddress))
|
||||||
|
{
|
||||||
|
if (mTrueJump->mEntryRequiredRegs[mIns[i + 1].mAddress] &&
|
||||||
|
!mFalseJump->mEntryRequiredRegs[mIns[i + 1].mAddress])
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 2; j++)
|
||||||
|
mTrueJump->mIns.Insert(j, mIns[i + j]);
|
||||||
|
mIns.Remove(i + 1);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
else if (mFalseJump->mEntryRequiredRegs[mIns[i + 1].mAddress] &&
|
||||||
|
!mTrueJump->mEntryRequiredRegs[mIns[i + 1].mAddress])
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 2; j++)
|
||||||
|
mFalseJump->mIns.Insert(j, mIns[i + j]);
|
||||||
|
mIns.Remove(i + 1);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if 1
|
||||||
|
if (!mExitRequiredRegs[CPU_REG_A] &&
|
||||||
|
i + 6 < mIns.Size() &&
|
||||||
|
mIns[i + 0].mType == ASMIT_CLC &&
|
||||||
|
mIns[i + 1].mType == ASMIT_LDA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[i + 3].mType == ASMIT_STA && mIns[i + 3].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[i + 4].mType == ASMIT_LDA && mIns[i + 4].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[i + 5].mType == ASMIT_ADC && mIns[i + 5].mMode == ASMIM_IMMEDIATE &&
|
||||||
|
mIns[i + 6].mType == ASMIT_STA && mIns[i + 6].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
!(mIns[i + 6].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_C | LIVE_CPU_REG_Z)))
|
||||||
|
{
|
||||||
|
if (!ReferencedOnPath(this, i + 7, mIns.Size(), mIns[i + 3].mAddress) &&
|
||||||
|
!ReferencedOnPath(this, i + 7, mIns.Size(), mIns[i + 6].mAddress) &&
|
||||||
|
!ChangedOnPath(this, i + 7, mIns.Size(), mIns[i + 1].mAddress) &&
|
||||||
|
!ChangedOnPath(this, i + 7, mIns.Size(), mIns[i + 2].mAddress) &&
|
||||||
|
!ChangedOnPath(this, i + 7, mIns.Size(), mIns[i + 4].mAddress))
|
||||||
|
{
|
||||||
|
if (mTrueJump->mEntryRequiredRegs[mIns[i + 3].mAddress] && mTrueJump->mEntryRequiredRegs[mIns[i + 6].mAddress] &&
|
||||||
|
!mFalseJump->mEntryRequiredRegs[mIns[i + 3].mAddress] && !mFalseJump->mEntryRequiredRegs[mIns[i + 6].mAddress])
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 7; j++)
|
||||||
|
{
|
||||||
|
mTrueJump->mIns.Insert(j, mIns[i]);
|
||||||
|
mIns.Remove(i);
|
||||||
|
}
|
||||||
|
changed = true;
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
else if (mFalseJump->mEntryRequiredRegs[mIns[i + 3].mAddress] && mFalseJump->mEntryRequiredRegs[mIns[i + 6].mAddress] &&
|
||||||
|
!mTrueJump->mEntryRequiredRegs[mIns[i + 3].mAddress] && !mTrueJump->mEntryRequiredRegs[mIns[i + 6].mAddress])
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 7; j++)
|
||||||
|
{
|
||||||
|
mFalseJump->mIns.Insert(j, mIns[i]);
|
||||||
|
mIns.Remove(i);
|
||||||
|
}
|
||||||
|
changed = true;
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mTrueJump && mTrueJump->PropagateSinglePath())
|
||||||
|
changed = true;
|
||||||
|
if (mFalseJump && mFalseJump->PropagateSinglePath())
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool NativeCodeBasicBlock::JoinTailCodeSequences(NativeCodeProcedure* proc, bool loops)
|
bool NativeCodeBasicBlock::JoinTailCodeSequences(NativeCodeProcedure* proc, bool loops)
|
||||||
{
|
{
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
@ -12712,7 +12998,7 @@ bool NativeCodeBasicBlock::CheckForwardSumYPointer(const NativeCodeBasicBlock* b
|
||||||
yval = (yval - 1) & 255;
|
yval = (yval - 1) & 255;
|
||||||
else if (ins.mType == ASMIT_JSR)
|
else if (ins.mType == ASMIT_JSR)
|
||||||
{
|
{
|
||||||
if (ins.UsesZeroPage(reg) || ins.UsesZeroPage(reg + 1))
|
if (ins.UsesZeroPage(reg) || ins.UsesZeroPage(reg + 1) || ins.ChangesZeroPage(base) || ins.ChangesZeroPage(base + 1) || ins.ChangesZeroPage(index))
|
||||||
return false;
|
return false;
|
||||||
yval = -1;
|
yval = -1;
|
||||||
}
|
}
|
||||||
|
@ -14802,6 +15088,10 @@ bool NativeCodeBasicBlock::MoveLoadAddImmStoreUp(int at)
|
||||||
for (int i = j + 1; i < at; i++)
|
for (int i = j + 1; i < at; i++)
|
||||||
mIns[i].mLive |= LIVE_CPU_REG_C;
|
mIns[i].mLive |= LIVE_CPU_REG_C;
|
||||||
|
|
||||||
|
mIns[at + 0].mLive |= mIns[j].mLive;
|
||||||
|
mIns[at + 2].mLive |= mIns[j].mLive;
|
||||||
|
mIns[at + 3].mLive |= mIns[j].mLive;
|
||||||
|
|
||||||
mIns.Insert(j + 1, mIns[at + 3]); // STA
|
mIns.Insert(j + 1, mIns[at + 3]); // STA
|
||||||
mIns.Insert(j + 1, mIns[at + 3]); // ADC
|
mIns.Insert(j + 1, mIns[at + 3]); // ADC
|
||||||
mIns.Insert(j + 1, mIns[at + 2]); // CLC
|
mIns.Insert(j + 1, mIns[at + 2]); // CLC
|
||||||
|
@ -14839,6 +15129,10 @@ bool NativeCodeBasicBlock::MoveCLCLoadAddZPStoreUp(int at)
|
||||||
for (int i = j + 1; i < at; i++)
|
for (int i = j + 1; i < at; i++)
|
||||||
mIns[i].mLive |= LIVE_CPU_REG_C;
|
mIns[i].mLive |= LIVE_CPU_REG_C;
|
||||||
|
|
||||||
|
mIns[at + 0].mLive |= mIns[j].mLive;
|
||||||
|
mIns[at + 2].mLive |= mIns[j].mLive;
|
||||||
|
mIns[at + 3].mLive |= mIns[j].mLive;
|
||||||
|
|
||||||
mIns.Insert(j + 1, mIns[at + 3]); // STA
|
mIns.Insert(j + 1, mIns[at + 3]); // STA
|
||||||
mIns.Insert(j + 1, mIns[at + 3]); // ADC
|
mIns.Insert(j + 1, mIns[at + 3]); // ADC
|
||||||
mIns.Insert(j + 1, mIns[at + 2]); // CLC
|
mIns.Insert(j + 1, mIns[at + 2]); // CLC
|
||||||
|
@ -14998,6 +15292,9 @@ bool NativeCodeBasicBlock::MoveLoadAddZPStoreUp(int at)
|
||||||
{
|
{
|
||||||
if (mIns[j].mType == ASMIT_STA && mIns[j].mMode == ASMIM_ZERO_PAGE && mIns[j].mAddress == mIns[at + 0].mAddress)
|
if (mIns[j].mType == ASMIT_STA && mIns[j].mMode == ASMIM_ZERO_PAGE && mIns[j].mAddress == mIns[at + 0].mAddress)
|
||||||
{
|
{
|
||||||
|
mIns[at + 1].mLive |= mIns[j].mLive;
|
||||||
|
mIns[at + 2].mLive |= mIns[j].mLive;
|
||||||
|
|
||||||
mIns.Insert(j + 1, mIns[at + 2]); // STA
|
mIns.Insert(j + 1, mIns[at + 2]); // STA
|
||||||
mIns.Insert(j + 1, mIns[at + 2]); // ADC
|
mIns.Insert(j + 1, mIns[at + 2]); // ADC
|
||||||
|
|
||||||
|
@ -18511,6 +18808,46 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
// move ldy, sty down if live
|
||||||
|
|
||||||
|
for (int i = 0; i + 2 < mIns.Size(); i++)
|
||||||
|
{
|
||||||
|
if (mIns[i + 0].mType == ASMIT_LDY && (mIns[i + 0].mMode == ASMIM_ZERO_PAGE || mIns[i + 0].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
mIns[i + 1].mType == ASMIT_STY && (mIns[i + 1].mMode == ASMIM_ZERO_PAGE || mIns[i + 1].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
(mIns[i + 2].mLive & LIVE_CPU_REG_Y))
|
||||||
|
{
|
||||||
|
int j = i;
|
||||||
|
while (j + 2 < mIns.Size() &&
|
||||||
|
!mIns[j + 2].ReferencesYReg() && !(mIns[j + 2].SameEffectiveAddress(mIns[j + 0]) && mIns[j + 2].ChangesAddress()) && !mIns[j + 2].SameEffectiveAddress(mIns[j + 1]))
|
||||||
|
{
|
||||||
|
mIns[j + 0].mLive |= mIns[j + 2].mLive;
|
||||||
|
mIns[j + 1].mLive |= mIns[j + 2].mLive;
|
||||||
|
mIns[j + 2].mLive &= ~LIVE_CPU_REG_Y;
|
||||||
|
mIns.Insert(j, mIns[j + 2]);
|
||||||
|
mIns.Remove(j + 3);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mIns[i + 0].mType == ASMIT_LDX && (mIns[i + 0].mMode == ASMIM_ZERO_PAGE || mIns[i + 0].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
mIns[i + 1].mType == ASMIT_STX && (mIns[i + 1].mMode == ASMIM_ZERO_PAGE || mIns[i + 1].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
(mIns[i + 2].mLive & LIVE_CPU_REG_X))
|
||||||
|
{
|
||||||
|
int j = i;
|
||||||
|
while (j + 2 < mIns.Size() &&
|
||||||
|
!mIns[j + 2].ReferencesXReg() && !(mIns[j + 2].SameEffectiveAddress(mIns[j + 0]) && mIns[j + 2].ChangesAddress()) && !mIns[j + 2].SameEffectiveAddress(mIns[j + 1]))
|
||||||
|
{
|
||||||
|
mIns[j + 0].mLive |= mIns[j + 2].mLive;
|
||||||
|
mIns[j + 1].mLive |= mIns[j + 2].mLive;
|
||||||
|
mIns[j + 2].mLive &= ~LIVE_CPU_REG_X;
|
||||||
|
mIns.Insert(j, mIns[j + 2]);
|
||||||
|
mIns.Remove(j + 3);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
// move clc and sec down
|
// move clc and sec down
|
||||||
for (int i = 0; i + 1 < mIns.Size(); i++)
|
for (int i = 0; i + 1 < mIns.Size(); i++)
|
||||||
|
@ -19294,7 +19631,6 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
#if 1
|
|
||||||
else if (mIns[i + 0].mType == ASMIT_LDA && mIns[i + 0].mMode == ASMIM_IMMEDIATE && mIns[i + 0].mAddress == 0 &&
|
else if (mIns[i + 0].mType == ASMIT_LDA && mIns[i + 0].mMode == ASMIM_IMMEDIATE && mIns[i + 0].mAddress == 0 &&
|
||||||
mIns[i + 1].mType == ASMIT_CMP && !(mIns[i + 1].mLive & (LIVE_CPU_REG_C | LIVE_CPU_REG_A)))
|
mIns[i + 1].mType == ASMIT_CMP && !(mIns[i + 1].mLive & (LIVE_CPU_REG_C | LIVE_CPU_REG_A)))
|
||||||
{
|
{
|
||||||
|
@ -19302,7 +19638,6 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
mIns[i + 1].mType = ASMIT_LDA;
|
mIns[i + 1].mType = ASMIT_LDA;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
else if (mIns[i + 0].mType == ASMIT_LDA && mIns[i + 0].mMode == ASMIM_IMMEDIATE && mIns[i + 1].mType == ASMIT_ASL && mIns[i + 1].mMode == ASMIM_IMPLIED)
|
else if (mIns[i + 0].mType == ASMIT_LDA && mIns[i + 0].mMode == ASMIM_IMMEDIATE && mIns[i + 1].mType == ASMIT_ASL && mIns[i + 1].mMode == ASMIM_IMPLIED)
|
||||||
{
|
{
|
||||||
int aval = mIns[i + 0].mAddress << 1;
|
int aval = mIns[i + 0].mAddress << 1;
|
||||||
|
@ -20616,6 +20951,28 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
mIns[i + 2].mType = ASMIT_DEX; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
mIns[i + 2].mType = ASMIT_DEX; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mType == ASMIT_LDA && (mIns[i + 0].mMode == ASMIM_ZERO_PAGE || mIns[i + 0].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
mIns[i + 1].mType == ASMIT_TAX &&
|
||||||
|
mIns[i + 2].mType == ASMIT_STA && (mIns[i + 2].mMode == ASMIM_ZERO_PAGE || mIns[i + 2].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
!(mIns[i + 2].mLive & LIVE_CPU_REG_A))
|
||||||
|
{
|
||||||
|
mIns[i + 0].mType = ASMIT_LDX; mIns[i + 0].mLive |= LIVE_CPU_REG_X;
|
||||||
|
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 2].mType = ASMIT_STX;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mType == ASMIT_LDA && (mIns[i + 0].mMode == ASMIM_ZERO_PAGE || mIns[i + 0].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
mIns[i + 1].mType == ASMIT_TAY &&
|
||||||
|
mIns[i + 2].mType == ASMIT_STA && (mIns[i + 2].mMode == ASMIM_ZERO_PAGE || mIns[i + 2].mMode == ASMIM_ABSOLUTE) &&
|
||||||
|
!(mIns[i + 2].mLive & LIVE_CPU_REG_A))
|
||||||
|
{
|
||||||
|
mIns[i + 0].mType = ASMIT_LDY; mIns[i + 0].mLive |= LIVE_CPU_REG_Y;
|
||||||
|
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 2].mType = ASMIT_STY;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
mIns[i + 0].mType == ASMIT_LDY && mIns[i + 0].mMode == ASMIM_IMMEDIATE && mIns[i + 0].mAddress <= 1 &&
|
mIns[i + 0].mType == ASMIT_LDY && mIns[i + 0].mMode == ASMIM_IMMEDIATE && mIns[i + 0].mAddress <= 1 &&
|
||||||
|
@ -21840,7 +22197,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
if (mIns[i + 0].mType == ASMIT_CLC &&
|
if (mIns[i + 0].mType == ASMIT_CLC &&
|
||||||
mIns[i + 1].mType == ASMIT_LDA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE &&
|
mIns[i + 1].mType == ASMIT_LDA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE &&
|
||||||
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_ZERO_PAGE &&
|
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
@ -21867,6 +22224,34 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if 1
|
||||||
|
if (mIns[i + 0].mType == ASMIT_CLC &&
|
||||||
|
mIns[i + 1].mType == ASMIT_LDA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[i + 3].mType == ASMIT_STA && mIns[i + 3].mMode == ASMIM_ZERO_PAGE && mIns[i + 3].mAddress != mIns[i + 1].mAddress && mIns[i + 3].mAddress != mIns[i + 2].mAddress &&
|
||||||
|
mIns[i + 4].mType == ASMIT_LDA && mIns[i + 4].mMode == ASMIM_ZERO_PAGE && mIns[i + 4].mAddress == mIns[i + 1].mAddress + 1 &&
|
||||||
|
mIns[i + 5].mType == ASMIT_ADC && mIns[i + 5].mMode == ASMIM_IMMEDIATE && mIns[i + 5].mAddress == 0 &&
|
||||||
|
mIns[i + 6].mType == ASMIT_STA && mIns[i + 6].mMode == ASMIM_ZERO_PAGE && mIns[i + 6].mAddress == mIns[i + 3].mAddress + 1 &&
|
||||||
|
!(mIns[i + 6].mLive & LIVE_CPU_REG_A))
|
||||||
|
{
|
||||||
|
proc->ResetPatched();
|
||||||
|
if (CheckForwardSumYPointer(this, mIns[i + 3].mAddress, mIns[i + 1].mAddress, mIns[i + 2].mAddress, i + 7, -1))
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 2].mType = ASMIT_LDA; mIns[i + 2].mLive |= LIVE_CPU_REG_A;
|
||||||
|
|
||||||
|
mIns[i + 4].mType = ASMIT_NOP; mIns[i + 4].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 5].mType = ASMIT_NOP; mIns[i + 5].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 6].mType = ASMIT_NOP; mIns[i + 6].mMode = ASMIM_IMPLIED;
|
||||||
|
#endif
|
||||||
|
proc->ResetPatched();
|
||||||
|
if (PatchForwardSumYPointer(this, mIns[i + 3].mAddress, mIns[i + 1].mAddress, mIns[i + 2].mAddress, i + 7, -1))
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#if 1
|
#if 1
|
||||||
if (
|
if (
|
||||||
mIns[i + 0].mType == ASMIT_STA && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
|
mIns[i + 0].mType == ASMIT_STA && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
@ -21881,13 +22266,14 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
proc->ResetPatched();
|
proc->ResetPatched();
|
||||||
if (CheckForwardSumYPointer(this, mIns[i + 3].mAddress, mIns[i + 2].mAddress, mIns[i + 0].mAddress, i + 7, -1))
|
if (CheckForwardSumYPointer(this, mIns[i + 3].mAddress, mIns[i + 2].mAddress, mIns[i + 0].mAddress, i + 7, -1))
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
||||||
mIns[i + 3].mType = ASMIT_NOP; mIns[i + 3].mMode = ASMIM_IMPLIED;
|
mIns[i + 3].mType = ASMIT_NOP; mIns[i + 3].mMode = ASMIM_IMPLIED;
|
||||||
mIns[i + 4].mType = ASMIT_NOP; mIns[i + 4].mMode = ASMIM_IMPLIED;
|
mIns[i + 4].mType = ASMIT_NOP; mIns[i + 4].mMode = ASMIM_IMPLIED;
|
||||||
mIns[i + 5].mType = ASMIT_NOP; mIns[i + 5].mMode = ASMIM_IMPLIED;
|
mIns[i + 5].mType = ASMIT_NOP; mIns[i + 5].mMode = ASMIM_IMPLIED;
|
||||||
mIns[i + 6].mType = ASMIT_NOP; mIns[i + 6].mMode = ASMIM_IMPLIED;
|
mIns[i + 6].mType = ASMIT_NOP; mIns[i + 6].mMode = ASMIM_IMPLIED;
|
||||||
|
#endif
|
||||||
proc->ResetPatched();
|
proc->ResetPatched();
|
||||||
if (PatchForwardSumYPointer(this, mIns[i + 3].mAddress, mIns[i + 2].mAddress, mIns[i + 0].mAddress, i + 7, -1))
|
if (PatchForwardSumYPointer(this, mIns[i + 3].mAddress, mIns[i + 2].mAddress, mIns[i + 0].mAddress, i + 7, -1))
|
||||||
progress = true;
|
progress = true;
|
||||||
|
@ -23160,11 +23546,14 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
if (step < 6)
|
||||||
|
{
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
if (mEntryBlock->OptimizeSelect(this))
|
if (mEntryBlock->OptimizeSelect(this))
|
||||||
{
|
{
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#if 1
|
#if 1
|
||||||
if (step == 3)
|
if (step == 3)
|
||||||
{
|
{
|
||||||
|
@ -23207,6 +23596,10 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
if (mEntryBlock->JoinTailCodeSequences(this, step > 3))
|
if (mEntryBlock->JoinTailCodeSequences(this, step > 3))
|
||||||
changed = true;
|
changed = true;
|
||||||
|
|
||||||
|
ResetVisited();
|
||||||
|
if (mEntryBlock->PropagateSinglePath())
|
||||||
|
changed = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if 1
|
#if 1
|
||||||
|
|
|
@ -66,6 +66,7 @@ class NativeCodeInstruction
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NativeCodeInstruction(AsmInsType type = ASMIT_INV, AsmInsMode mode = ASMIM_IMPLIED, int address = 0, LinkerObject * linkerObject = nullptr, uint32 flags = NCIF_LOWER | NCIF_UPPER, int param = 0);
|
NativeCodeInstruction(AsmInsType type = ASMIT_INV, AsmInsMode mode = ASMIM_IMPLIED, int address = 0, LinkerObject * linkerObject = nullptr, uint32 flags = NCIF_LOWER | NCIF_UPPER, int param = 0);
|
||||||
|
NativeCodeInstruction(AsmInsType type, const NativeCodeInstruction & addr);
|
||||||
|
|
||||||
AsmInsType mType;
|
AsmInsType mType;
|
||||||
AsmInsMode mMode;
|
AsmInsMode mMode;
|
||||||
|
@ -310,6 +311,7 @@ public:
|
||||||
NativeCodeBasicBlock* AddDominatorBlock(NativeCodeProcedure* proc, NativeCodeBasicBlock* pblock);
|
NativeCodeBasicBlock* AddDominatorBlock(NativeCodeProcedure* proc, NativeCodeBasicBlock* pblock);
|
||||||
bool JoinTailCodeSequences(NativeCodeProcedure* proc, bool loops);
|
bool JoinTailCodeSequences(NativeCodeProcedure* proc, bool loops);
|
||||||
bool SameTail(const NativeCodeInstruction& ins) const;
|
bool SameTail(const NativeCodeInstruction& ins) const;
|
||||||
|
bool PropagateSinglePath(void);
|
||||||
|
|
||||||
NativeRegisterDataSet mEntryRegisterDataSet;
|
NativeRegisterDataSet mEntryRegisterDataSet;
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ int main2(int argc, const char** argv)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
strcpy(strProductName, "oscar64");
|
strcpy(strProductName, "oscar64");
|
||||||
strcpy(strProductVersion, "1.7.126");
|
strcpy(strProductVersion, "1.7.127");
|
||||||
|
|
||||||
#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,126,0
|
FILEVERSION 1,7,127,0
|
||||||
PRODUCTVERSION 1,7,126,0
|
PRODUCTVERSION 1,7,127,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.126.0"
|
VALUE "FileVersion", "1.7.127.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.126.0"
|
VALUE "ProductVersion", "1.7.127.0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -34,12 +34,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_04ABABC55200450383686DD782DD1548"
|
"MsmKey" = "8:_04ABABC55200450383686DD782DD1548"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -166,12 +160,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_326B44043E3720E0A341FB5627DA8873"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF"
|
"MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -184,12 +172,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_36B4A1247BFCE001E1BAE7560E9CFEEA"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
"MsmKey" = "8:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -262,12 +244,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_458189403F0009BC49371204B74F3BD3"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_47A877D439EE429BAB64C52FEF69EDA4"
|
"MsmKey" = "8:_47A877D439EE429BAB64C52FEF69EDA4"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -394,12 +370,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_749A2BA18335F50EB53CCE7029861FBC"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_749F54DFBD4D404DA9C2E2D5BA7CDDBF"
|
"MsmKey" = "8:_749F54DFBD4D404DA9C2E2D5BA7CDDBF"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -460,12 +430,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_8667075410229C38BF63AC1CC776055E"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_8827B6B07A1C4B32B08DF784E090381D"
|
"MsmKey" = "8:_8827B6B07A1C4B32B08DF784E090381D"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -796,12 +760,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_DD5A4DD822437085CD584319732F2D4D"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_DEADBEA270134B77800770802B21859C"
|
"MsmKey" = "8:_DEADBEA270134B77800770802B21859C"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -862,12 +820,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4"
|
"MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -898,12 +850,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_F20F5618C7576D758C01D89C87469AF8"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
"MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -1085,26 +1031,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_03D7013B0D39A89CEA9D267005ADCE39"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:VCRUNTIME140.dll"
|
|
||||||
"TargetName" = "8:VCRUNTIME140.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_04ABABC55200450383686DD782DD1548"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_04ABABC55200450383686DD782DD1548"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\games\\lander.c"
|
"SourcePath" = "8:..\\samples\\games\\lander.c"
|
||||||
|
@ -1525,26 +1451,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_326B44043E3720E0A341FB5627DA8873"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3277DE1463544F67B7E7390175F8A9CF"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3277DE1463544F67B7E7390175F8A9CF"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c"
|
"SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c"
|
||||||
|
@ -1585,26 +1491,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36B4A1247BFCE001E1BAE7560E9CFEEA"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-math-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-math-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\memmap\\easyflash.c"
|
"SourcePath" = "8:..\\samples\\memmap\\easyflash.c"
|
||||||
|
@ -1845,26 +1731,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_458189403F0009BC49371204B74F3BD3"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-string-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-string-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47A877D439EE429BAB64C52FEF69EDA4"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47A877D439EE429BAB64C52FEF69EDA4"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\memmap\\largemem.c"
|
"SourcePath" = "8:..\\samples\\memmap\\largemem.c"
|
||||||
|
@ -2285,26 +2151,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749A2BA18335F50EB53CCE7029861FBC"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749F54DFBD4D404DA9C2E2D5BA7CDDBF"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749F54DFBD4D404DA9C2E2D5BA7CDDBF"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\resources\\breakoutchars.bin"
|
"SourcePath" = "8:..\\samples\\resources\\breakoutchars.bin"
|
||||||
|
@ -2505,26 +2351,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8667075410229C38BF63AC1CC776055E"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8827B6B07A1C4B32B08DF784E090381D"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8827B6B07A1C4B32B08DF784E090381D"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\memmap\\tsr.c"
|
"SourcePath" = "8:..\\samples\\memmap\\tsr.c"
|
||||||
|
@ -3625,26 +3451,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DD5A4DD822437085CD584319732F2D4D"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-heap-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-heap-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DEADBEA270134B77800770802B21859C"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DEADBEA270134B77800770802B21859C"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\games\\connectfour.c"
|
"SourcePath" = "8:..\\samples\\games\\connectfour.c"
|
||||||
|
@ -3845,26 +3651,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:VERSION.dll"
|
|
||||||
"TargetName" = "8:VERSION.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED872D39D58443D590B7C80604BC0FF4"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED872D39D58443D590B7C80604BC0FF4"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\kernalio\\fileread.c"
|
"SourcePath" = "8:..\\samples\\kernalio\\fileread.c"
|
||||||
|
@ -3965,26 +3751,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F20F5618C7576D758C01D89C87469AF8"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-locale-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-locale-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"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:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\c64\\charwin.h"
|
"SourcePath" = "8:..\\include\\c64\\charwin.h"
|
||||||
|
@ -4361,15 +4127,15 @@
|
||||||
{
|
{
|
||||||
"Name" = "8:Microsoft Visual Studio"
|
"Name" = "8:Microsoft Visual Studio"
|
||||||
"ProductName" = "8:oscar64"
|
"ProductName" = "8:oscar64"
|
||||||
"ProductCode" = "8:{75E6858C-F4C7-408B-A9E2-E1DC9B2FD03B}"
|
"ProductCode" = "8:{DF3630AB-F113-4BB0-8CDF-4EC257D6F55B}"
|
||||||
"PackageCode" = "8:{B04A68D8-DF4C-49FC-A0A4-2C51B24676B9}"
|
"PackageCode" = "8:{6ECF2FD0-FB99-4AF4-9F9D-D8B11EB77A29}"
|
||||||
"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.126"
|
"ProductVersion" = "8:1.7.127"
|
||||||
"Manufacturer" = "8:oscar64"
|
"Manufacturer" = "8:oscar64"
|
||||||
"ARPHELPTELEPHONE" = "8:"
|
"ARPHELPTELEPHONE" = "8:"
|
||||||
"ARPHELPLINK" = "8:"
|
"ARPHELPLINK" = "8:"
|
||||||
|
|
Loading…
Reference in New Issue