Fix add cross move in native code optimizer
This commit is contained in:
parent
30b3ed610e
commit
df733d09a8
|
@ -585,3 +585,28 @@ int lmuldiv16sby8(int a, char b, char c)
|
|||
else
|
||||
return lmuldiv16by8(a, b, c);
|
||||
}
|
||||
|
||||
unsigned usqrt(unsigned n)
|
||||
{
|
||||
unsigned p, q, r, h;
|
||||
|
||||
p = 0;
|
||||
r = n;
|
||||
|
||||
#assign q 0x4000
|
||||
#repeat
|
||||
{
|
||||
h = p | q;
|
||||
p >>= 1;
|
||||
if (r >= h)
|
||||
{
|
||||
p |= q;
|
||||
r -= h;
|
||||
}
|
||||
}
|
||||
#assign q q >> 2
|
||||
#until q == 0
|
||||
#undef q
|
||||
|
||||
return p;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,8 @@ inline int lmuldiv16sby8(int a, char b, char c);
|
|||
|
||||
__native unsigned lmuldiv8by8(char a, char b, char c);
|
||||
|
||||
__native unsigned usqrt(unsigned n);
|
||||
|
||||
#pragma compile("fixmath.c")
|
||||
|
||||
#endif
|
||||
|
|
|
@ -25991,6 +25991,13 @@ bool NativeCodeBasicBlock::MoveLoadAddZPStoreUp(int at)
|
|||
{
|
||||
if (mIns[j].mType == ASMIT_STA && mIns[j].mMode == ASMIM_ZERO_PAGE && mIns[j].mAddress == mIns[at + 0].mAddress)
|
||||
{
|
||||
while (j < at && (mIns[j].mLive & LIVE_CPU_REG_A))
|
||||
{
|
||||
if (mIns[j].ChangesAccu())
|
||||
return false;
|
||||
j++;
|
||||
}
|
||||
|
||||
mIns[at + 1].mLive |= mIns[j].mLive;
|
||||
mIns[at + 2].mLive |= mIns[j].mLive;
|
||||
|
||||
|
@ -31953,6 +31960,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
|||
if (MoveCLCLoadAddZPStoreUp(i))
|
||||
changed = true;
|
||||
}
|
||||
#if 1
|
||||
else if (
|
||||
mIns[i + 0].mType == ASMIT_LDA && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
|
||||
mIns[i + 1].mType == ASMIT_ADC && mIns[i + 1].mMode == ASMIM_ZERO_PAGE &&
|
||||
|
@ -31961,6 +31969,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
|||
if (MoveLoadAddZPStoreUp(i))
|
||||
changed = true;
|
||||
}
|
||||
#endif
|
||||
#if 1
|
||||
else if (
|
||||
mIns[i + 0].mType == ASMIT_LDA && mIns[i + 0].mMode == ASMIM_ZERO_PAGE &&
|
||||
|
@ -39596,7 +39605,6 @@ void NativeCodeProcedure::Optimize(void)
|
|||
else
|
||||
cnt++;
|
||||
|
||||
|
||||
} while (changed);
|
||||
|
||||
#if 1
|
||||
|
|
Loading…
Reference in New Issue