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 0x0a
byt 0x00 byt 0x00
byt 0x9e byt 0x9e
byt 0x32 byt [OSCAR_BASIC_START + 12] / 1000 % 10 + 0x30
byt 0x30 byt [OSCAR_BASIC_START + 12] / 100 % 10 + 0x30
byt 0x36 byt [OSCAR_BASIC_START + 12] / 10 % 10 + 0x30
byt 0x31 byt [OSCAR_BASIC_START + 12] % 10 + 0x30
byt 0x00 byt 0x00
byt 0x00 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) 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) else if (op2.mMemory == IM_FPARAM)
return false; return false;
else else
return true; return CollidingMemType(type1, type2);
} }
else if (op2.mMemory == IM_INDIRECT) 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) else if (op1.mMemory == IM_FPARAM)
return false; return false;
else else
return true; return CollidingMemType(type1, type2);
} }
else else
return false; 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) else if (op1.mLinkerObject && op2.mLinkerObject && op1.mLinkerObject != op2.mLinkerObject)
return false; return false;
else else
return true; return CollidingMemType(type1, type2);
default: default:
return false; 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) 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) 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 else
return false; 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) static bool CollidingMem(const InterInstruction* ins1, const InterInstruction* ins2, const GrowingVariableArray& staticVars)
{ {
if (ins1->mCode == IC_LOAD) 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) 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 else
return false; return false;
} }
@ -992,6 +1007,91 @@ static bool CanBypassLoad(const InterInstruction* lins, const InterInstruction*
return true; 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) static bool CanBypass(const InterInstruction* lins, const InterInstruction* bins)
{ {
if (HasSideEffect(lins->mCode) && HasSideEffect(bins->mCode)) if (HasSideEffect(lins->mCode) && HasSideEffect(bins->mCode))
@ -4978,8 +5078,7 @@ bool InterCodeBasicBlock::PropagateVariableCopy(const GrowingInstructionPtrArray
j = 0; j = 0;
for(int k=0; k<ltemps.Size(); k++) for(int k=0; k<ltemps.Size(); k++)
{ {
if (!CollidingMem(ltemps[k]->mSrc[0], ins->mSrc[1], staticVars) && if (!CollidingMem(ltemps[k], ins, staticVars))
!CollidingMem(ltemps[k]->mSrc[1], ins->mSrc[1], staticVars))
{ {
ltemps[j++] = ltemps[k]; ltemps[j++] = ltemps[k];
} }
@ -5000,8 +5099,7 @@ bool InterCodeBasicBlock::PropagateVariableCopy(const GrowingInstructionPtrArray
j = 0; j = 0;
for (int k = 0; k < ltemps.Size(); k++) for (int k = 0; k < ltemps.Size(); k++)
{ {
if (!CollidingMem(ltemps[k]->mSrc[0], ins->mSrc[1], staticVars) && if (!CollidingMem(ltemps[k], ins, staticVars))
!CollidingMem(ltemps[k]->mSrc[1], ins->mSrc[1], staticVars))
{ {
ltemps[j++] = ltemps[k]; ltemps[j++] = ltemps[k];
} }
@ -5466,6 +5564,11 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(const GrowingVariableArray
{ {
if (ins->mDst.mType == IT_INT8) 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; LinkerObject* lo = mInstructions[i - 1]->mSrc[1].mLinkerObject;
int mi = 0, ma = 0; int mi = 0, ma = 0;
@ -5474,7 +5577,7 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(const GrowingVariableArray
{ {
for (int j = 0; j < lo->mSize; j++) 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) if (v < mi)
mi = v; mi = v;
if (v > ma) if (v > ma)
@ -5486,7 +5589,7 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(const GrowingVariableArray
for (int j = 0; j < lo->mSize; j++) for (int j = 0; j < lo->mSize; j++)
{ {
int v = lo->mData[j]; int v = lo->mData[j];
if (v & 0x80) if (!isUnsigned && (v & 0x80))
mi = -128; mi = -128;
if (v > ma) if (v > ma)
ma = v; ma = v;
@ -8509,7 +8612,7 @@ bool InterCodeBasicBlock::LoadStoreForwarding(const GrowingInstructionPtrArray&
j = 0; j = 0;
while (j < mLoadStoreInstructions.Size()) while (j < mLoadStoreInstructions.Size())
{ {
if (!CollidingMem(ins->mSrc[1], mLoadStoreInstructions[j], staticVars)) if (!CollidingMem(ins, mLoadStoreInstructions[j], staticVars))
mLoadStoreInstructions[k++] = mLoadStoreInstructions[j]; mLoadStoreInstructions[k++] = mLoadStoreInstructions[j];
j++; j++;
} }
@ -8864,7 +8967,9 @@ bool InterCodeBasicBlock::CanMoveInstructionDown(int si, int ti) const
} }
else if (ins->mCode == IC_STORE) 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 || 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) 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; 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 bool InterCodeBasicBlock::CanMoveInstructionBehindBlock(int ii) const
{ {
return CanMoveInstructionDown(ii, mInstructions.Size()); return CanMoveInstructionDown(ii, mInstructions.Size());
@ -8977,7 +9090,41 @@ bool InterCodeBasicBlock::MergeCommonPathInstructions(void)
ti++; 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()) if (mTrueJump && mTrueJump->MergeCommonPathInstructions())
changed = true; changed = true;
if (mFalseJump && mFalseJump->MergeCommonPathInstructions()) if (mFalseJump && mFalseJump->MergeCommonPathInstructions())
@ -10494,13 +10641,26 @@ bool InterCodeBasicBlock::SingleBlockLoopPointerSplit(int& spareTemps)
i++; i++;
if (i == nins - 3) if (i == nins - 3)
{ {
InterInstruction* xins = nullptr;
for (int i = 0; i < mInstructions.Size() - 3; i++) for (int i = 0; i < mInstructions.Size() - 3; i++)
{ {
InterInstruction* lins = mInstructions[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]) 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; 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 && 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 && 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) && !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; 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) else if (lins->mDst.mTemp >= 0)
tvalues[lins->mDst.mTemp] = nullptr; tvalues[lins->mDst.mTemp] = nullptr;
} }
@ -10628,7 +10817,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
{ {
// Find the last store that overlaps the load // Find the last store that overlaps the load
int j = mInstructions.Size() - 1; 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--; j--;
if (j > i) if (j > i)
@ -10699,7 +10888,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
ins->mInvariant = false; ins->mInvariant = false;
else if (ins->mCode == IC_LOAD) 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; ins->mInvariant = false;
} }
@ -10716,7 +10905,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
for (int j = 0; j < mInstructions.Size(); j++) for (int j = 0; j < mInstructions.Size(); j++)
{ {
InterInstruction* sins = mInstructions[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) if (sins->mSrc[1].mTemp >= 0)
{ {
@ -10740,7 +10929,7 @@ void InterCodeBasicBlock::SingleBlockLoopOptimisation(const NumberSet& aliasedPa
ins->mInvariant = false; ins->mInvariant = false;
} }
} }
else if (CollidingMem(ins->mSrc[0], sins->mSrc[1], staticVars)) else if (CollidingMem(ins, sins, staticVars))
{ {
ins->mInvariant = false; ins->mInvariant = false;
} }
@ -11353,6 +11542,23 @@ void InterCodeBasicBlock::CheckFinal(void)
#endif #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) void InterCodeBasicBlock::PeepholeOptimization(const GrowingVariableArray& staticVars)
{ {
int i; int i;
@ -12728,6 +12934,12 @@ int InterCodeProcedure::AddTemporary(InterType type)
return temp; return temp;
} }
void InterCodeProcedure::CheckBlocks(void)
{
ResetVisited();
mEntryBlock->CheckBlocks();
}
void InterCodeProcedure::CheckFinal(void) void InterCodeProcedure::CheckFinal(void)
{ {
ResetVisited(); ResetVisited();
@ -14000,6 +14212,7 @@ void InterCodeProcedure::Close(void)
TempForwarding(); TempForwarding();
#if 1 #if 1
CheckBlocks();
BuildDataFlowSets(); BuildDataFlowSets();
do { do {
@ -14008,8 +14221,13 @@ void InterCodeProcedure::Close(void)
LoadStoreForwarding(paramMemory); LoadStoreForwarding(paramMemory);
ResetEntryBlocks();
ResetVisited();
mEntryBlock->CollectEntryBlocks(nullptr);
MergeCommonPathInstructions(); MergeCommonPathInstructions();
#if 1
CheckBlocks();
#if 1
PushSinglePathResultInstructions(); PushSinglePathResultInstructions();
#endif #endif
@ -14275,7 +14493,8 @@ void InterCodeProcedure::MergeBasicBlocks(void)
eblocks.Push(eblock); eblocks.Push(eblock);
} }
if (eblocks.Size() == block->mNumEntries) bool allBlocks = eblocks.Size() == block->mNumEntries;
// if ()
{ {
GrowingArray<InterCodeBasicBlock* > mblocks(nullptr); GrowingArray<InterCodeBasicBlock* > mblocks(nullptr);
@ -14283,10 +14502,8 @@ void InterCodeProcedure::MergeBasicBlocks(void)
{ {
InterCodeBasicBlock* nblock; InterCodeBasicBlock* nblock;
if (eblocks.Size() || mblocks.IndexOf(block) != -1) if (!allBlocks || eblocks.Size() || mblocks.IndexOf(block) != -1)
{ {
// break;
nblock = new InterCodeBasicBlock(); nblock = new InterCodeBasicBlock();
this->Append(nblock); this->Append(nblock);

View File

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

View File

@ -1320,7 +1320,7 @@ bool NativeCodeInstruction::MayBeSameAddress(const NativeCodeInstruction& ins, b
if (mMode == ASMIM_ABSOLUTE) if (mMode == ASMIM_ABSOLUTE)
return mLinkerObject == ins.mLinkerObject && mAddress == ins.mAddress; return mLinkerObject == ins.mLinkerObject && mAddress == ins.mAddress;
else if (mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y) 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 else
return mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X; return mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X;
} }
@ -1332,6 +1332,8 @@ bool NativeCodeInstruction::MayBeSameAddress(const NativeCodeInstruction& ins, b
return false; return false;
else if (mAddress >= ins.mAddress + 256 || ins.mAddress >= mAddress + 256) else if (mAddress >= ins.mAddress + 256 || ins.mAddress >= mAddress + 256)
return false; return false;
else if (mMode == ASMIM_ABSOLUTE && ins.mAddress > mAddress)
return false;
else else
return mMode != ins.mMode || !sameXY || mAddress == ins.mAddress; return mMode != ins.mMode || !sameXY || mAddress == ins.mAddress;
} }
@ -5359,7 +5361,10 @@ void NativeCodeBasicBlock::StoreByteIndexedValue(InterCodeProcedure* proc, const
{ {
if (i != 0) if (i != 0)
mIns.Push(NativeCodeInstruction(ASMIT_INY, ASMIM_IMPLIED)); 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)); 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]); 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++) for (int j = i + 1; j < mEntryBlocks.Size(); j++)
{ {
NativeCodeBasicBlock* bj(mEntryBlocks[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]) && 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])) bi->mIns[bi->mIns.Size() - 2].IsSame(bj->mIns[bj->mIns.Size() - 2])*/)
{ {
if (!nblock) if (!nblock)
{ {
@ -14808,13 +14813,19 @@ NativeCodeBasicBlock * NativeCodeBasicBlock::SplitMatchingTails(NativeCodeProced
nblock->mTrueJump = this; nblock->mTrueJump = this;
nblock->mEntryBlocks.Push(bi); nblock->mEntryBlocks.Push(bi);
nblock->mNumEntries++;
bi->mTrueJump = nblock; bi->mTrueJump = nblock;
mEntryBlocks[i] = nullptr; mEntryBlocks[i] = nullptr;
mNumEntries--;
} }
nblock->mEntryBlocks.Push(bj); nblock->mEntryBlocks.Push(bj);
nblock->mNumEntries++;
bj->mTrueJump = nblock; bj->mTrueJump = nblock;
mEntryBlocks[j] = nullptr; mEntryBlocks[j] = nullptr;
mNumEntries--;
} }
} }
} }
@ -14830,6 +14841,9 @@ NativeCodeBasicBlock * NativeCodeBasicBlock::SplitMatchingTails(NativeCodeProced
mEntryBlocks.Remove(i); mEntryBlocks.Remove(i);
} }
mEntryBlocks.Push(nblock);
mNumEntries++;
return nblock; return nblock;
} }
} }
@ -19954,6 +19968,9 @@ bool NativeCodeBasicBlock::MoveLoadImmStoreAbsoluteUp(int at)
mIns.Insert(j, sins); mIns.Insert(j, sins);
return true; return true;
} }
else if (mIns[j - 1].mMode == mIns[at + 1].mMode && mIns[j - 1].mAddress == mIns[at + 1].mAddress)
return false;
j--; 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)) 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; mIns[i + 4].mType = ASMIT_DEC;
progress = true; 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 #if 0
else if ( else if (
mIns[i + 0].mType == ASMIT_LDY && mIns[i + 0].mMode == ASMIM_ZERO_PAGE && 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 #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 1
if ( if (
@ -31320,7 +31382,7 @@ void NativeCodeProcedure::RebuildEntry(void)
void NativeCodeProcedure::Optimize(void) void NativeCodeProcedure::Optimize(void)
{ {
CheckFunc = !strcmp(mInterProc->mIdent->mString, "shots_check"); CheckFunc = !strcmp(mInterProc->mIdent->mString, "test");
#if 1 #if 1
int step = 0; int step = 0;
int cnt = 0; int cnt = 0;
@ -31445,6 +31507,7 @@ void NativeCodeProcedure::Optimize(void)
changed = true; changed = true;
#endif #endif
#if 1 #if 1
if (step >= 3) if (step >= 3)
{ {
@ -32156,7 +32219,7 @@ void NativeCodeProcedure::CompileInterBlock(InterCodeProcedure* iproc, InterCode
else if (i + 1 < iblock->mInstructions.Size() && 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 && 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 && 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)) (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]); 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); mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Variable declaration differs", ndec->mIdent);
} }
pdec->mFlags |= ndec->mFlags & DTF_ZEROPAGE;
ndec = pdec; ndec = pdec;
} }
else if (pdec->mFlags & DTF_EXTERN) else if (pdec->mFlags & DTF_EXTERN)
@ -1200,6 +1202,8 @@ Declaration* Parser::ParseDeclaration(bool variable, bool expression)
pdec->mSection = ndec->mSection; pdec->mSection = ndec->mSection;
} }
pdec->mFlags |= ndec->mFlags & DTF_ZEROPAGE;
ndec = pdec; ndec = pdec;
} }
else else
@ -2606,6 +2610,12 @@ Expression* Parser::ParseAssemblerBaseOperand(Declaration* pcasm, int pcoffset)
mScanner->NextToken(); mScanner->NextToken();
break; break;
case TK_OPEN_BRACKET:
mScanner->NextToken();
exp = ParseAssemblerOperand(pcasm, pcoffset);
ConsumeToken(TK_CLOSE_BRACKET);
break;
case TK_IDENT: case TK_IDENT:
dec = mScope->Lookup(mScanner->mTokenIdent); dec = mScope->Lookup(mScanner->mTokenIdent);
if (!dec) if (!dec)

View File

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

View File

@ -74,7 +74,7 @@ int main2(int argc, const char** argv)
#else #else
strcpy(strProductName, "oscar64"); strcpy(strProductName, "oscar64");
strcpy(strProductVersion, "1.11.172"); strcpy(strProductVersion, "1.11.173");
#ifdef __APPLE__ #ifdef __APPLE__
uint32_t length = sizeof(basePath); uint32_t length = sizeof(basePath);
@ -221,6 +221,7 @@ int main2(int argc, const char** argv)
{ {
compiler->mCompilerOptions |= COPT_TARGET_PRG; compiler->mCompilerOptions |= COPT_TARGET_PRG;
compiler->AddDefine(Ident::Unique("OSCAR_TARGET_PRG"), "1"); compiler->AddDefine(Ident::Unique("OSCAR_TARGET_PRG"), "1");
compiler->AddDefine(Ident::Unique("OSCAR_BASIC_START"), "0x0801");
} }
else if (!strcmp(targetFormat, "crt")) else if (!strcmp(targetFormat, "crt"))
{ {
@ -236,6 +237,7 @@ int main2(int argc, const char** argv)
{ {
compiler->mCompilerOptions |= COPT_TARGET_LZO; compiler->mCompilerOptions |= COPT_TARGET_LZO;
compiler->AddDefine(Ident::Unique("OSCAR_TARGET_LZO"), "1"); compiler->AddDefine(Ident::Unique("OSCAR_TARGET_LZO"), "1");
compiler->AddDefine(Ident::Unique("OSCAR_BASIC_START"), "0x0801");
} }
else else
compiler->mErrors->Error(loc, EERR_COMMAND_LINE, "Invalid target format option", targetFormat); 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 VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,11,172,0 FILEVERSION 1,11,173,0
PRODUCTVERSION 1,11,172,0 PRODUCTVERSION 1,11,173,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.11.172.0" VALUE "FileVersion", "1.11.173.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.11.172.0" VALUE "ProductVersion", "1.11.173.0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@ -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"
@ -190,12 +184,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"
@ -208,12 +196,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"
@ -286,12 +268,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"
@ -430,12 +406,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"
@ -496,12 +466,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"
@ -850,12 +814,6 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_DD5A4DD822437085CD584319732F2D4D"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DE1058FFA9E149D1909C819592A12273" "MsmKey" = "8:_DE1058FFA9E149D1909C819592A12273"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -922,12 +880,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"
@ -958,12 +910,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"
@ -1151,26 +1097,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"
@ -1671,26 +1597,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"
@ -1731,26 +1637,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"
@ -1991,26 +1877,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"
@ -2471,26 +2337,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"
@ -2691,26 +2537,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"
@ -3871,26 +3697,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}:_DE1058FFA9E149D1909C819592A12273" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DE1058FFA9E149D1909C819592A12273"
{ {
"SourcePath" = "8:..\\samples\\particles\\fireworks_stripe.c" "SourcePath" = "8:..\\samples\\particles\\fireworks_stripe.c"
@ -4111,26 +3917,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"
@ -4231,26 +4017,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"
@ -4658,15 +4424,15 @@
{ {
"Name" = "8:Microsoft Visual Studio" "Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64" "ProductName" = "8:oscar64"
"ProductCode" = "8:{7E2B8D86-9F20-4418-BBAF-94BCC5579BE1}" "ProductCode" = "8:{B37C3691-BB18-4F82-B574-F47BF7A70D6E}"
"PackageCode" = "8:{17E11F2B-4298-4907-86D7-2230A5A3C57F}" "PackageCode" = "8:{1B3B4C99-2560-4BE0-8F6A-05067CD5006F}"
"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.11.172" "ProductVersion" = "8:1.11.173"
"Manufacturer" = "8:oscar64" "Manufacturer" = "8:oscar64"
"ARPHELPTELEPHONE" = "8:" "ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:" "ARPHELPLINK" = "8:"

Binary file not shown.