Bump Version number
This commit is contained in:
parent
5bb21b3b0a
commit
0aa9ca0c70
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 '~':
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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.
Loading…
Reference in New Issue