Fix add cross move in native code optimizer

This commit is contained in:
drmortalwombat 2023-05-01 19:16:25 +02:00
parent 30b3ed610e
commit df733d09a8
3 changed files with 36 additions and 1 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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