Bump Version number

This commit is contained in:
drmortalwombat 2022-12-10 16:15:04 +01:00
parent 5bb21b3b0a
commit 0aa9ca0c70
10 changed files with 353 additions and 295 deletions

View File

@ -137,10 +137,10 @@ w0:
byt 0x0a
byt 0x00
byt 0x9e
byt 0x32
byt 0x30
byt 0x36
byt 0x31
byt [OSCAR_BASIC_START + 12] / 1000 % 10 + 0x30
byt [OSCAR_BASIC_START + 12] / 100 % 10 + 0x30
byt [OSCAR_BASIC_START + 12] / 10 % 10 + 0x30
byt [OSCAR_BASIC_START + 12] % 10 + 0x30
byt 0x00
byt 0x00
byt 0x00

View File

@ -384,7 +384,18 @@ void ValueSet::FlushCallAliases(const GrowingInstructionPtrArray& tvalue, const
}
}
static bool CollidingMem(const InterOperand& op1, const InterOperand& op2, const GrowingVariableArray& staticVars)
static bool CollidingMemType(InterType type1, InterType type2)
{
if (type1 == IT_NONE || type2 == IT_NONE)
return true;
else if (type1 == IT_POINTER || type1 == IT_FLOAT || type2 == IT_POINTER || type2 == IT_FLOAT)
return type1 == type2;
else
return false;
}
static bool CollidingMem(const InterOperand& op1, InterType type1, const InterOperand& op2, InterType type2, const GrowingVariableArray& staticVars)
{
if (op1.mMemory != op2.mMemory)
{
@ -395,7 +406,7 @@ static bool CollidingMem(const InterOperand& op1, const InterOperand& op2, const
else if (op2.mMemory == IM_FPARAM)
return false;
else
return true;
return CollidingMemType(type1, type2);
}
else if (op2.mMemory == IM_INDIRECT)
{
@ -404,7 +415,7 @@ static bool CollidingMem(const InterOperand& op1, const InterOperand& op2, const
else if (op1.mMemory == IM_FPARAM)
return false;
else
return true;
return CollidingMemType(type1, type2);
}
else
return false;
@ -429,18 +440,20 @@ static bool CollidingMem(const InterOperand& op1, const InterOperand& op2, const
else if (op1.mLinkerObject && op2.mLinkerObject && op1.mLinkerObject != op2.mLinkerObject)
return false;
else
return true;
return CollidingMemType(type1, type2);
default:
return false;
}
}
static bool CollidingMem(const InterOperand& op, const InterInstruction* ins, const GrowingVariableArray& staticVars)
static bool CollidingMem(const InterOperand& op, InterType type, const InterInstruction* ins, const GrowingVariableArray& staticVars)
{
if (ins->mCode == IC_LOAD)
return CollidingMem(op, ins->mSrc[0], staticVars);
return CollidingMem(op, type, ins->mSrc[0], ins->mDst.mType, staticVars);
else if (ins->mCode == IC_STORE)
return CollidingMem(op, ins->mSrc[1], staticVars);
return CollidingMem(op, type, ins->mSrc[1], ins->mSrc[0].mType, staticVars);
else if (ins->mCode == IC_COPY || ins->mCode == IC_STRCPY)
return CollidingMem(op, type, ins->mSrc[0], IT_NONE, staticVars) || CollidingMem(op, type, ins->mSrc[1], IT_NONE, staticVars);
else
return false;
}
@ -448,9 +461,11 @@ static bool CollidingMem(const InterOperand& op, const InterInstruction* ins, co
static bool CollidingMem(const InterInstruction* ins1, const InterInstruction* ins2, const GrowingVariableArray& staticVars)
{
if (ins1->mCode == IC_LOAD)
return CollidingMem(ins1->mSrc[0], ins2, staticVars);
return CollidingMem(ins1->mSrc[0], ins1->mDst.mType, ins2, staticVars);
else if (ins1->mCode == IC_STORE)
return CollidingMem(ins1->mSrc[1], ins2, staticVars);
return CollidingMem(ins1->mSrc[1], ins1->mSrc[0].mType, ins2, staticVars);
else if (ins1->mCode == IC_COPY || ins1->mCode == IC_STRCPY)
return CollidingMem(ins1->mSrc[0], IT_NONE, ins2, staticVars) || CollidingMem(ins1->mSrc[1], IT_NONE, ins2, staticVars);
else
return false;
}
@ -992,6 +1007,91 @@ static bool CanBypassLoad(const InterInstruction* lins, const InterInstruction*
return true;
}
static bool CanBypassStoreDown(const InterInstruction* sins, const InterInstruction* bins)
{
// Check ambiguity
if (bins->mCode == IC_COPY || bins->mCode == IC_STRCPY)
return false;
// Side effects
if (bins->mCode == IC_CALL || bins->mCode == IC_CALL_NATIVE || bins->mCode == IC_ASSEMBLER)
return false;
// True data dependency
if (bins->mDst.mTemp >= 0 && sins->UsesTemp(bins->mDst.mTemp))
return false;
if (bins->mCode == IC_STORE)
{
if (sins->mVolatile)
return false;
else if (sins->mSrc[1].mMemory == IM_INDIRECT && bins->mSrc[1].mMemory == IM_INDIRECT)
{
return sins->mSrc[1].mLinkerObject && bins->mSrc[1].mLinkerObject && sins->mSrc[1].mLinkerObject != bins->mSrc[1].mLinkerObject;
}
else if (sins->mSrc[1].mTemp >= 0 || bins->mSrc[1].mTemp >= 0)
return false;
else if (sins->mSrc[1].mMemory != bins->mSrc[1].mMemory)
return true;
else if (sins->mSrc[1].mMemory == IM_GLOBAL)
{
return sins->mSrc[1].mLinkerObject != bins->mSrc[1].mLinkerObject ||
sins->mSrc[1].mIntConst + sins->mSrc[1].mOperandSize <= bins->mSrc[1].mIntConst ||
sins->mSrc[1].mIntConst >= bins->mSrc[1].mIntConst + bins->mSrc[1].mOperandSize;
}
else if (sins->mSrc[1].mMemory == IM_ABSOLUTE)
{
return
sins->mSrc[1].mIntConst + sins->mSrc[1].mOperandSize <= bins->mSrc[1].mIntConst ||
sins->mSrc[1].mIntConst >= bins->mSrc[1].mIntConst + bins->mSrc[1].mOperandSize;
}
else if (sins->mSrc[1].mMemory == IM_LOCAL)
{
return sins->mSrc[1].mVarIndex != bins->mSrc[1].mVarIndex ||
sins->mSrc[1].mIntConst + sins->mSrc[1].mOperandSize <= bins->mSrc[1].mIntConst ||
sins->mSrc[1].mIntConst >= bins->mSrc[1].mIntConst + bins->mSrc[1].mOperandSize;
}
else
return false;
}
if (bins->mCode == IC_LOAD)
{
if (sins->mVolatile)
return false;
else if (sins->mSrc[1].mMemory == IM_INDIRECT && bins->mSrc[0].mMemory == IM_INDIRECT)
{
return sins->mSrc[1].mLinkerObject && bins->mSrc[0].mLinkerObject && sins->mSrc[1].mLinkerObject != bins->mSrc[0].mLinkerObject;
}
else if (sins->mSrc[1].mTemp >= 0 || bins->mSrc[0].mTemp >= 0)
return false;
else if (sins->mSrc[1].mMemory != bins->mSrc[0].mMemory)
return true;
else if (sins->mSrc[1].mMemory == IM_GLOBAL)
{
return sins->mSrc[1].mLinkerObject != bins->mSrc[0].mLinkerObject ||
sins->mSrc[1].mIntConst + sins->mSrc[1].mOperandSize <= bins->mSrc[0].mIntConst ||
sins->mSrc[1].mIntConst >= bins->mSrc[0].mIntConst + bins->mSrc[0].mOperandSize;
}
else if (sins->mSrc[1].mMemory == IM_ABSOLUTE)
{
return
sins->mSrc[1].mIntConst + sins->mSrc[1].mOperandSize <= bins->mSrc[0].mIntConst ||
sins->mSrc[1].mIntConst >= bins->mSrc[0].mIntConst + bins->mSrc[0].mOperandSize;
}
else if (sins->mSrc[1].mMemory == IM_LOCAL)
{
return sins->mSrc[1].mVarIndex != bins->mSrc[0].mVarIndex ||
sins->mSrc[1].mIntConst + sins->mSrc[1].mOperandSize <= bins->mSrc[0].mIntConst ||
sins->mSrc[1].mIntConst >= bins->mSrc[0].mIntConst + bins->mSrc[0].mOperandSize;
}
else
return false;
}
return true;
}
static bool CanBypass(const InterInstruction* lins, const InterInstruction* bins)
{
if (HasSideEffect(lins->mCode) && HasSideEffect(bins->mCode))
@ -4978,8 +5078,7 @@ bool InterCodeBasicBlock::PropagateVariableCopy(const GrowingInstructionPtrArray
j = 0;
for(int k=0; k<ltemps.Size(); k++)
{
if (!CollidingMem(ltemps[k]->mSrc[0], ins->mSrc[1], staticVars) &&
!CollidingMem(ltemps[k]->mSrc[1], ins->mSrc[1], staticVars))
if (!CollidingMem(ltemps[k], ins, staticVars))
{
ltemps[j++] = ltemps[k];
}
@ -5000,8 +5099,7 @@ bool InterCodeBasicBlock::PropagateVariableCopy(const GrowingInstructionPtrArray
j = 0;
for (int k = 0; k < ltemps.Size(); k++)
{
if (!CollidingMem(ltemps[k]->mSrc[0], ins->mSrc[1], staticVars) &&
!CollidingMem(ltemps[k]->mSrc[1], ins->mSrc[1], staticVars))
if (!CollidingMem(ltemps[k], ins, staticVars))
{
ltemps[j++] = ltemps[k];
}
@ -5466,6 +5564,11 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(const GrowingVariableArray
{
if (ins->mDst.mType == IT_INT8)
{
bool isUnsigned = false;
if (i + 1 < mInstructions.Size() && mInstructions[i + 1]->mCode == IC_CONVERSION_OPERATOR && mInstructions[i + 1]->mOperator == IA_EXT8TO16U &&
mInstructions[i + 1]->mSrc[0].mTemp == mInstructions[i + 0]->mDst.mTemp && mInstructions[i + 1]->mSrc[0].mFinal)
isUnsigned = true;
LinkerObject* lo = mInstructions[i - 1]->mSrc[1].mLinkerObject;
int mi = 0, ma = 0;
@ -5474,7 +5577,7 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(const GrowingVariableArray
{
for (int j = 0; j < lo->mSize; j++)
{
int v = (int8)(lo->mData[j]);
int v = isUnsigned ? lo->mData[j] : (int8)(lo->mData[j]);
if (v < mi)
mi = v;
if (v > ma)
@ -5486,7 +5589,7 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(const GrowingVariableArray
for (int j = 0; j < lo->mSize; j++)
{
int v = lo->mData[j];
if (v & 0x80)
if (!isUnsigned && (v & 0x80))
mi = -128;
if (v > ma)
ma = v;
@ -8509,7 +8612,7 @@ bool InterCodeBasicBlock::LoadStoreForwarding(const GrowingInstructionPtrArray&
j = 0;
while (j < mLoadStoreInstructions.Size())
{
if (!CollidingMem(ins->mSrc[1], mLoadStoreInstructions[j], staticVars))
if (!CollidingMem(ins, mLoadStoreInstructions[j], staticVars))
mLoadStoreInstructions[k++] = mLoadStoreInstructions[j];
j++;
}
@ -8864,7 +8967,9 @@ bool InterCodeBasicBlock::CanMoveInstructionDown(int si, int ti) const
}
else if (ins->mCode == IC_STORE)
{
return false;
for (int i = si + 1; i < ti; i++)
if (!CanBypassStore(ins, mInstructions[i]))
return false;
}
else if (ins->mCode == IC_COPY || ins->mCode == IC_PUSH_FRAME || ins->mCode == IC_POP_FRAME ||
ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE)
@ -8879,6 +8984,14 @@ bool InterCodeBasicBlock::CanMoveInstructionDown(int si, int ti) const
return true;
}
int InterCodeBasicBlock::FindSameInstruction(const InterInstruction* ins) const
{
int i = mInstructions.Size() - 1;
while (i >= 0 && !mInstructions[i]->IsEqual(ins))
i--;
return i;
}
bool InterCodeBasicBlock::CanMoveInstructionBehindBlock(int ii) const
{
return CanMoveInstructionDown(ii, mInstructions.Size());
@ -8977,7 +9090,41 @@ bool InterCodeBasicBlock::MergeCommonPathInstructions(void)
ti++;
}
}
#if 1
if (mNumEntries > 1)
{
int i = 0;
while (i < mEntryBlocks.Size() && mEntryBlocks[i]->mInstructions.Size() > 1 && !mEntryBlocks[i]->mFalseJump)
i++;
if (i == mEntryBlocks.Size())
{
InterCodeBasicBlock* eb = mEntryBlocks[0];
int ebi = eb->mInstructions.Size() - 2;
while (ebi >= 0)
{
InterInstruction* ins = eb->mInstructions[ebi];
if (ins && eb->CanMoveInstructionBehindBlock(ebi))
{
int j = 1, eji = -1;
while (j < mEntryBlocks.Size() && (eji = mEntryBlocks[j]->FindSameInstruction(ins)) >= 0 && mEntryBlocks[j]->CanMoveInstructionBehindBlock(eji))
j++;
if (j == mEntryBlocks.Size())
{
mInstructions.Insert(0, ins);
for (int j = 0; j < mEntryBlocks.Size(); j++)
mEntryBlocks[j]->mInstructions.Remove(mEntryBlocks[j]->FindSameInstruction(ins));
changed = true;
}
}
ebi--;
}
}
}
#endif
if (mTrueJump && mTrueJump->MergeCommonPathInstructions())
changed = true;
if (mFalseJump && mFalseJump->MergeCommonPathInstructions())
@ -10494,13 +10641,26 @@ bool InterCodeBasicBlock::SingleBlockLoopPointerSplit(int& spareTemps)
i++;
if (i == nins - 3)
{
InterInstruction* xins = nullptr;
for (int i = 0; i < mInstructions.Size() - 3; i++)
{
InterInstruction* lins = mInstructions[i];
if (xins && lins->mDst.mTemp >= 0 && lins->mDst.mTemp == xins->mDst.mTemp)
xins = nullptr;
if (lins->mCode == IC_LEA && lins->mSrc[0].mTemp == ains->mDst.mTemp && lins->mSrc[0].IsUByte() && lins->mSrc[1].mTemp >= 0 && !mLocalModifiedTemps[lins->mSrc[1].mTemp])
{
tvalues[lins->mDst.mTemp] = lins;
}
else if (lins->mCode == IC_LEA && xins && lins->mSrc[0].mTemp == xins->mDst.mTemp && lins->mSrc[0].IsUByte() && lins->mSrc[1].mTemp >= 0 && !mLocalModifiedTemps[lins->mSrc[1].mTemp])
{
tvalues[lins->mDst.mTemp] = lins;
}
else if (lins->mCode == IC_CONVERSION_OPERATOR && lins->mOperator == IA_EXT8TO16U && lins->mSrc[0].mTemp == ains->mDst.mTemp && lins->mSrc[0].IsUByte())
{
xins = lins;
}
else if (lins->mCode == IC_LEA && lins->mSrc[0].mTemp < 0 && lins->mSrc[0].mIntConst == ains->mSrc[0].mIntConst && lins->mSrc[1].mTemp == lins->mDst.mTemp &&
pi >= 0 && pblock->mInstructions[pi]->mCode == IC_CONSTANT && ains->mSrc[1].IsUByte() && pblock->mInstructions[pi]->mConst.mIntConst == 0 &&
!IsTempReferencedInRange(i + 1, mInstructions.Size(), lins->mDst.mTemp) && !IsTempModifiedInRange(0, i, lins->mDst.mTemp) &&
@ -10577,6 +10737,35 @@ bool InterCodeBasicBlock::SingleBlockLoopPointerSplit(int& spareTemps)
changed = true;
}
else if (lins->mCode == IC_LOAD && lins->mSrc[0].mTemp >= 0 && lins->mSrc[0].mIntConst >= 16 && tvalues[lins->mSrc[0].mTemp])
{
if (spareTemps + 2 >= mEntryRequiredTemps.Size() + 16)
return true;
InterInstruction* pins = tvalues[lins->mSrc[0].mTemp];
InterInstruction* nins = new InterInstruction(lins->mLocation, IC_LEA);
nins->mSrc[1] = pins->mSrc[1];
nins->mSrc[0].mTemp = -1;
nins->mSrc[0].mType = IT_INT16;
nins->mSrc[0].mIntConst = lins->mSrc[0].mIntConst;
nins->mDst.mMemory = IM_INDIRECT;
nins->mDst.mTemp = spareTemps++;
nins->mDst.mType = IT_POINTER;
pblock->mInstructions.Insert(pblock->mInstructions.Size() - 1, nins);
InterInstruction* mins = pins->Clone();
mins->mDst.mTemp = spareTemps++;
mins->mDst.mMemory = IM_INDIRECT;
mins->mSrc[1] = nins->mDst;
mInstructions.Insert(i, mins);
lins->mSrc[0].mTemp = mins->mDst.mTemp;
lins->mSrc[0].mIntConst = 0;
changed = true;
}
else if (lins->mDst.mTemp >= 0)
tvalues[lins->mDst.mTemp] = nullptr;
}
@ -10628,7 +10817,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
{
// 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], staticVars)))
while (j > i && !(mInstructions[j]->mCode == IC_STORE && CollidingMem(ins, mInstructions[j], staticVars)))
j--;
if (j > i)
@ -10699,7 +10888,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
ins->mInvariant = false;
else if (ins->mCode == IC_LOAD)
{
if (ins->mSrc[0].mTemp >= 0 || ins->mVolatile)
if ((ins->mSrc[0].mTemp >= 0 && mLocalModifiedTemps[ins->mSrc[0].mTemp]) || ins->mVolatile)
{
ins->mInvariant = false;
}
@ -10716,7 +10905,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
for (int j = 0; j < mInstructions.Size(); j++)
{
InterInstruction* sins = mInstructions[j];
if (sins->mCode == IC_STORE && CollidingMem(ins->mSrc[0], sins->mSrc[1], staticVars))
if (sins->mCode == IC_STORE && CollidingMem(ins, sins, staticVars))
{
if (sins->mSrc[1].mTemp >= 0)
{
@ -10740,7 +10929,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
ins->mInvariant = false;
}
}
else if (CollidingMem(ins->mSrc[0], sins->mSrc[1], staticVars))
else if (CollidingMem(ins, sins, staticVars))
{
ins->mInvariant = false;
}
@ -11353,6 +11542,23 @@ void InterCodeBasicBlock::CheckFinal(void)
#endif
}
void InterCodeBasicBlock::CheckBlocks(void)
{
#if _DEBUG
if (!mVisited)
{
mVisited = true;
for (int i = 0; i < mInstructions.Size(); i++)
assert(mInstructions[i] != nullptr);
if (mTrueJump) mTrueJump->CheckBlocks();
if (mFalseJump) mFalseJump->CheckBlocks();
}
#endif
}
void InterCodeBasicBlock::PeepholeOptimization(const GrowingVariableArray& staticVars)
{
int i;
@ -12728,6 +12934,12 @@ int InterCodeProcedure::AddTemporary(InterType type)
return temp;
}
void InterCodeProcedure::CheckBlocks(void)
{
ResetVisited();
mEntryBlock->CheckBlocks();
}
void InterCodeProcedure::CheckFinal(void)
{
ResetVisited();
@ -14000,6 +14212,7 @@ void InterCodeProcedure::Close(void)
TempForwarding();
#if 1
CheckBlocks();
BuildDataFlowSets();
do {
@ -14008,8 +14221,13 @@ void InterCodeProcedure::Close(void)
LoadStoreForwarding(paramMemory);
ResetEntryBlocks();
ResetVisited();
mEntryBlock->CollectEntryBlocks(nullptr);
MergeCommonPathInstructions();
#if 1
CheckBlocks();
#if 1
PushSinglePathResultInstructions();
#endif
@ -14275,7 +14493,8 @@ void InterCodeProcedure::MergeBasicBlocks(void)
eblocks.Push(eblock);
}
if (eblocks.Size() == block->mNumEntries)
bool allBlocks = eblocks.Size() == block->mNumEntries;
// if ()
{
GrowingArray<InterCodeBasicBlock* > mblocks(nullptr);
@ -14283,10 +14502,8 @@ void InterCodeProcedure::MergeBasicBlocks(void)
{
InterCodeBasicBlock* nblock;
if (eblocks.Size() || mblocks.IndexOf(block) != -1)
if (!allBlocks || eblocks.Size() || mblocks.IndexOf(block) != -1)
{
// break;
nblock = new InterCodeBasicBlock();
this->Append(nblock);

View File

@ -478,6 +478,7 @@ public:
bool CanMoveInstructionBeforeBlock(int ii, const InterInstruction * ins) const;
bool CanMoveInstructionBehindBlock(int ii) const;
bool CanMoveInstructionDown(int si, int ti) const;
int FindSameInstruction(const InterInstruction* ins) const;
bool MergeCommonPathInstructions(void);
bool IsTempModifiedInRange(int from, int to, int temp);
@ -486,6 +487,7 @@ public:
void CheckFinalLocal(void);
void CheckFinal(void);
void CheckBlocks(void);
void PeepholeOptimization(const GrowingVariableArray& staticVars);
void SingleBlockLoopOptimisation(const NumberSet& aliasedParams, const GrowingVariableArray& staticVars);
@ -605,6 +607,7 @@ protected:
void PeepholeOptimization(void);
void CheckFinal(void);
void CheckBlocks(void);
void DisassembleDebug(const char* name);
};

View File

@ -1320,7 +1320,7 @@ bool NativeCodeInstruction::MayBeSameAddress(const NativeCodeInstruction& ins, b
if (mMode == ASMIM_ABSOLUTE)
return mLinkerObject == ins.mLinkerObject && mAddress == ins.mAddress;
else if (mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y)
return mLinkerObject == ins.mLinkerObject;
return mLinkerObject == ins.mLinkerObject && mAddress <= ins.mAddress && mAddress + 256 > ins.mAddress;
else
return mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X;
}
@ -1332,6 +1332,8 @@ bool NativeCodeInstruction::MayBeSameAddress(const NativeCodeInstruction& ins, b
return false;
else if (mAddress >= ins.mAddress + 256 || ins.mAddress >= mAddress + 256)
return false;
else if (mMode == ASMIM_ABSOLUTE && ins.mAddress > mAddress)
return false;
else
return mMode != ins.mMode || !sameXY || mAddress == ins.mAddress;
}
@ -5359,7 +5361,10 @@ void NativeCodeBasicBlock::StoreByteIndexedValue(InterCodeProcedure* proc, const
{
if (i != 0)
mIns.Push(NativeCodeInstruction(ASMIT_INY, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[wins->mSrc[0].mTemp] + i));
if (wins->mSrc[0].mTemp < 0)
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, (wins->mSrc[0].mIntConst >> (8 * i)) & 0xff));
else
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[wins->mSrc[0].mTemp] + i));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_INDIRECT_Y, BC_REG_TMP + proc->mTempOffset[iins->mSrc[1].mTemp], nullptr, flags));
}
}
@ -14789,16 +14794,16 @@ NativeCodeBasicBlock * NativeCodeBasicBlock::SplitMatchingTails(NativeCodeProced
{
NativeCodeBasicBlock* bi(mEntryBlocks[i]);
if (bi->mBranch == ASMIT_JMP && bi->mIns.Size() > 1)
if (bi->mBranch == ASMIT_JMP && bi->mIns.Size() > 0)
{
for (int j = i + 1; j < mEntryBlocks.Size(); j++)
{
NativeCodeBasicBlock* bj(mEntryBlocks[j]);
if (bj->mBranch == ASMIT_JMP && bj->mIns.Size() > 1)
if (bj->mBranch == ASMIT_JMP && bj->mIns.Size() > 0)
{
if (bi->mIns[bi->mIns.Size() - 1].IsSame(bj->mIns[bj->mIns.Size() - 1]) &&
bi->mIns[bi->mIns.Size() - 2].IsSame(bj->mIns[bj->mIns.Size() - 2]))
if (bi->mIns[bi->mIns.Size() - 1].IsSame(bj->mIns[bj->mIns.Size() - 1])/* &&
bi->mIns[bi->mIns.Size() - 2].IsSame(bj->mIns[bj->mIns.Size() - 2])*/)
{
if (!nblock)
{
@ -14808,13 +14813,19 @@ NativeCodeBasicBlock * NativeCodeBasicBlock::SplitMatchingTails(NativeCodeProced
nblock->mTrueJump = this;
nblock->mEntryBlocks.Push(bi);
nblock->mNumEntries++;
bi->mTrueJump = nblock;
mEntryBlocks[i] = nullptr;
mNumEntries--;
}
nblock->mEntryBlocks.Push(bj);
nblock->mNumEntries++;
bj->mTrueJump = nblock;
mEntryBlocks[j] = nullptr;
mNumEntries--;
}
}
}
@ -14830,6 +14841,9 @@ NativeCodeBasicBlock * NativeCodeBasicBlock::SplitMatchingTails(NativeCodeProced
mEntryBlocks.Remove(i);
}
mEntryBlocks.Push(nblock);
mNumEntries++;
return nblock;
}
}
@ -19954,6 +19968,9 @@ bool NativeCodeBasicBlock::MoveLoadImmStoreAbsoluteUp(int at)
mIns.Insert(j, sins);
return true;
}
else if (mIns[j - 1].mMode == mIns[at + 1].mMode && mIns[j - 1].mAddress == mIns[at + 1].mAddress)
return false;
j--;
}
else if (mIns[j - 1].mType == ASMIT_STA && mIns[j - 1].mMode == mIns[at + 1].mMode && !(mIns[j - 1].mLinkerObject == mIns[at + 1].mLinkerObject && mIns[j - 1].mAddress == mIns[at + 1].mAddress))
@ -29153,6 +29170,29 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
mIns[i + 4].mType = ASMIT_DEC;
progress = true;
}
#if 1
else if (
mIns[i + 0].mType == ASMIT_ASL && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
mIns[i + 1].mType == ASMIT_ASL && mIns[i + 1].mMode == ASMIM_ZERO_PAGE && mIns[i + 1].mAddress == mIns[i + 0].mAddress &&
mIns[i + 2].mType == ASMIT_ASL && mIns[i + 2].mMode == ASMIM_ZERO_PAGE && mIns[i + 2].mAddress == mIns[i + 0].mAddress &&
mIns[i + 3].mType == ASMIT_ROL && mIns[i + 3].mMode == ASMIM_IMPLIED &&
mIns[i + 4].mType == ASMIT_STA && mIns[i + 4].mMode == ASMIM_ZERO_PAGE && mIns[i + 4].mAddress != mIns[i + 0].mAddress &&
!(mIns[i + 4].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
{
int a0 = mIns[i + 0].mAddress;
int a1 = mIns[i + 4].mAddress;
mIns.Insert(i, NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, a1));
mIns.Insert(i + 1, NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, a0));
mIns[i + 2].mMode = ASMIM_IMPLIED;
mIns[i + 3].mMode = ASMIM_IMPLIED;
mIns[i + 4].mMode = ASMIM_IMPLIED;
mIns[i + 5].mMode = ASMIM_ZERO_PAGE; mIns[i + 5].mAddress = a1;
mIns[i + 6].mAddress = a0;
progress = true;
}
#endif
#if 0
else if (
mIns[i + 0].mType == ASMIT_LDY && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
@ -29705,6 +29745,28 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
}
}
#endif
#if 1
if (
mIns[i + 0].mType == ASMIT_CLC &&
mIns[i + 1].mType == ASMIT_ADC && mIns[i + 1].mMode == ASMIM_ZERO_PAGE &&
mIns[i + 2].mType == ASMIT_STA && mIns[i + 2].mMode == ASMIM_ZERO_PAGE && mIns[i + 2].mAddress != mIns[i + 1].mAddress &&
mIns[i + 3].mType == ASMIT_LDA && mIns[i + 3].mMode == ASMIM_ZERO_PAGE && mIns[i + 3].mAddress == mIns[i + 1].mAddress + 1 &&
mIns[i + 4].mType == ASMIT_ADC && mIns[i + 4].mMode == ASMIM_IMMEDIATE && mIns[i + 4].mAddress == 0 &&
mIns[i + 5].mType == ASMIT_STA && mIns[i + 5].mMode == ASMIM_ZERO_PAGE && mIns[i + 5].mAddress == mIns[i + 2].mAddress + 1 &&
!(mIns[i + 5].mLive & LIVE_CPU_REG_A))
{
int yval = RetrieveYValue(i);
proc->ResetPatched();
if (CheckForwardSumYPointer(this, mIns[i + 2].mAddress, mIns[i + 1].mAddress, mIns[i + 2], i + 6, yval))
{
proc->ResetPatched();
if (PatchForwardSumYPointer(this, mIns[i + 2].mAddress, mIns[i + 1].mAddress, mIns[i + 2], i + 6, yval))
progress = true;
mIns[i + 1].mType = ASMIT_NOP; mIns[i + 1].mMode = ASMIM_IMPLIED;
}
}
#endif
#if 1
if (
@ -31320,7 +31382,7 @@ void NativeCodeProcedure::RebuildEntry(void)
void NativeCodeProcedure::Optimize(void)
{
CheckFunc = !strcmp(mInterProc->mIdent->mString, "shots_check");
CheckFunc = !strcmp(mInterProc->mIdent->mString, "test");
#if 1
int step = 0;
int cnt = 0;
@ -31445,6 +31507,7 @@ void NativeCodeProcedure::Optimize(void)
changed = true;
#endif
#if 1
if (step >= 3)
{
@ -32156,7 +32219,7 @@ void NativeCodeProcedure::CompileInterBlock(InterCodeProcedure* iproc, InterCode
else if (i + 1 < iblock->mInstructions.Size() &&
iblock->mInstructions[i + 1]->mCode == IC_STORE && iblock->mInstructions[i + 1]->mSrc[1].mTemp == ins->mDst.mTemp && iblock->mInstructions[i + 1]->mSrc[1].mFinal &&
ins->mSrc[1].mTemp >= 0 && ins->mSrc[0].IsUByte() && ins->mSrc[0].mTemp >= 0 &&
iblock->mInstructions[i + 1]->mSrc[1].mIntConst == 0 && iblock->mInstructions[i + 1]->mSrc[0].mTemp >= 0 &&
iblock->mInstructions[i + 1]->mSrc[1].mIntConst == 0 && (iblock->mInstructions[i + 1]->mSrc[0].mTemp >= 0 || iblock->mInstructions[i + 1]->mSrc[0].mType <= IT_INT32) &&
(InterTypeSize[iblock->mInstructions[i + 1]->mSrc[0].mType] == 1 || iblock->mInstructions[i + 1]->mSrc[1].mStride == 1))
{
block->StoreByteIndexedValue(iproc, ins, iblock->mInstructions[i + 1]);

View File

@ -1178,6 +1178,8 @@ Declaration* Parser::ParseDeclaration(bool variable, bool expression)
mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Variable declaration differs", ndec->mIdent);
}
pdec->mFlags |= ndec->mFlags & DTF_ZEROPAGE;
ndec = pdec;
}
else if (pdec->mFlags & DTF_EXTERN)
@ -1200,6 +1202,8 @@ Declaration* Parser::ParseDeclaration(bool variable, bool expression)
pdec->mSection = ndec->mSection;
}
pdec->mFlags |= ndec->mFlags & DTF_ZEROPAGE;
ndec = pdec;
}
else
@ -2606,6 +2610,12 @@ Expression* Parser::ParseAssemblerBaseOperand(Declaration* pcasm, int pcoffset)
mScanner->NextToken();
break;
case TK_OPEN_BRACKET:
mScanner->NextToken();
exp = ParseAssemblerOperand(pcasm, pcoffset);
ConsumeToken(TK_CLOSE_BRACKET);
break;
case TK_IDENT:
dec = mScope->Lookup(mScanner->mTokenIdent);
if (!dec)

View File

@ -958,20 +958,15 @@ void Scanner::NextRawToken(void)
}
break;
case '%':
if (mAssemblerMode)
NextChar();
if (mAssemblerMode && mTokenChar >= '0' && mTokenChar <= '1')
{
int n = 0;
int64 mant = 0;
while (NextChar())
while (mTokenChar >= '0' && mTokenChar <= '1')
{
if (mTokenChar >= '0' && mTokenChar <= '9')
mant = mant * 16 + (int)mTokenChar - (int)'0';
else if (mTokenChar >= 'a' && mTokenChar <= 'f')
mant = mant * 16 + 10 + (int)mTokenChar - (int)'a';
else if (mTokenChar >= 'A' && mTokenChar <= 'F')
mant = mant * 16 + 10 + (int)mTokenChar - (int)'A';
else
break;
mant = mant * 2 + (mTokenChar - '0');
NextChar();
n++;
}
@ -981,12 +976,14 @@ void Scanner::NextRawToken(void)
mToken = TK_INTEGER;
mTokenInteger = mant;
}
mToken = TK_MOD;
NextChar();
if (mTokenChar == '=')
else
{
NextChar();
mToken = TK_ASSIGN_MOD;
mToken = TK_MOD;
if (mTokenChar == '=')
{
NextChar();
mToken = TK_ASSIGN_MOD;
}
}
break;
case '~':

View File

@ -74,7 +74,7 @@ int main2(int argc, const char** argv)
#else
strcpy(strProductName, "oscar64");
strcpy(strProductVersion, "1.11.172");
strcpy(strProductVersion, "1.11.173");
#ifdef __APPLE__
uint32_t length = sizeof(basePath);
@ -221,6 +221,7 @@ int main2(int argc, const char** argv)
{
compiler->mCompilerOptions |= COPT_TARGET_PRG;
compiler->AddDefine(Ident::Unique("OSCAR_TARGET_PRG"), "1");
compiler->AddDefine(Ident::Unique("OSCAR_BASIC_START"), "0x0801");
}
else if (!strcmp(targetFormat, "crt"))
{
@ -236,6 +237,7 @@ int main2(int argc, const char** argv)
{
compiler->mCompilerOptions |= COPT_TARGET_LZO;
compiler->AddDefine(Ident::Unique("OSCAR_TARGET_LZO"), "1");
compiler->AddDefine(Ident::Unique("OSCAR_BASIC_START"), "0x0801");
}
else
compiler->mErrors->Error(loc, EERR_COMMAND_LINE, "Invalid target format option", targetFormat);

View File

@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,11,172,0
PRODUCTVERSION 1,11,172,0
FILEVERSION 1,11,173,0
PRODUCTVERSION 1,11,173,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -43,12 +43,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "oscar64"
VALUE "FileDescription", "oscar64 compiler"
VALUE "FileVersion", "1.11.172.0"
VALUE "FileVersion", "1.11.173.0"
VALUE "InternalName", "oscar64.exe"
VALUE "LegalCopyright", "Copyright (C) 2021"
VALUE "OriginalFilename", "oscar64.exe"
VALUE "ProductName", "oscar64"
VALUE "ProductVersion", "1.11.172.0"
VALUE "ProductVersion", "1.11.173.0"
END
END
BLOCK "VarFileInfo"

View File

@ -34,12 +34,6 @@
}
"Entry"
{
"MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_04ABABC55200450383686DD782DD1548"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -190,12 +184,6 @@
}
"Entry"
{
"MsmKey" = "8:_326B44043E3720E0A341FB5627DA8873"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -208,12 +196,6 @@
}
"Entry"
{
"MsmKey" = "8:_36B4A1247BFCE001E1BAE7560E9CFEEA"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_379EE3C17FEC4C5EA79D07668CD05FC4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -286,12 +268,6 @@
}
"Entry"
{
"MsmKey" = "8:_458189403F0009BC49371204B74F3BD3"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_47A877D439EE429BAB64C52FEF69EDA4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -430,12 +406,6 @@
}
"Entry"
{
"MsmKey" = "8:_749A2BA18335F50EB53CCE7029861FBC"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_749F54DFBD4D404DA9C2E2D5BA7CDDBF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -496,12 +466,6 @@
}
"Entry"
{
"MsmKey" = "8:_8667075410229C38BF63AC1CC776055E"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8827B6B07A1C4B32B08DF784E090381D"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -850,12 +814,6 @@
}
"Entry"
{
"MsmKey" = "8:_DD5A4DD822437085CD584319732F2D4D"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DE1058FFA9E149D1909C819592A12273"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -922,12 +880,6 @@
}
"Entry"
{
"MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -958,12 +910,6 @@
}
"Entry"
{
"MsmKey" = "8:_F20F5618C7576D758C01D89C87469AF8"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -1151,26 +1097,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\samples\\games\\lander.c"
@ -1671,26 +1597,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c"
@ -1731,26 +1637,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\samples\\memmap\\easyflash.c"
@ -1991,26 +1877,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\samples\\memmap\\largemem.c"
@ -2471,26 +2337,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\samples\\resources\\breakoutchars.bin"
@ -2691,26 +2537,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\samples\\memmap\\tsr.c"
@ -3871,26 +3697,6 @@
"IsDependency" = "11:FALSE"
"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}:_DE1058FFA9E149D1909C819592A12273"
{
"SourcePath" = "8:..\\samples\\particles\\fireworks_stripe.c"
@ -4111,26 +3917,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\samples\\kernalio\\fileread.c"
@ -4231,26 +4017,6 @@
"IsDependency" = "11:FALSE"
"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"
{
"SourcePath" = "8:..\\include\\c64\\charwin.h"
@ -4658,15 +4424,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64"
"ProductCode" = "8:{7E2B8D86-9F20-4418-BBAF-94BCC5579BE1}"
"PackageCode" = "8:{17E11F2B-4298-4907-86D7-2230A5A3C57F}"
"ProductCode" = "8:{B37C3691-BB18-4F82-B574-F47BF7A70D6E}"
"PackageCode" = "8:{1B3B4C99-2560-4BE0-8F6A-05067CD5006F}"
"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.11.172"
"ProductVersion" = "8:1.11.173"
"Manufacturer" = "8:oscar64"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"

Binary file not shown.