Fix atan2, failed in mathtest.c
This commit is contained in:
parent
064bf0f8e5
commit
da20b4d27a
|
@ -54,6 +54,9 @@ rem @echo off
|
|||
@call :testh stdlibtest.c
|
||||
@if %errorlevel% neq 0 goto :error
|
||||
|
||||
@call :test mathtest.c
|
||||
@if %errorlevel% neq 0 goto :error
|
||||
|
||||
@call :test testint16.c
|
||||
@if %errorlevel% neq 0 goto :error
|
||||
|
||||
|
|
|
@ -218,22 +218,30 @@ void vspr_hide(char sp)
|
|||
|
||||
void vspr_sort(void)
|
||||
{
|
||||
spriteYPos[1] = vspriteYLow[spriteOrder[0]];
|
||||
byte rm = vspriteYLow[spriteOrder[0]];
|
||||
spriteYPos[1] = rm;
|
||||
|
||||
for(char i = 1; i<VSPRITES_MAX; i++)
|
||||
{
|
||||
byte ri = spriteOrder[i];
|
||||
byte rr = vspriteYLow[ri];
|
||||
byte j = i, rj = spriteYPos[j];
|
||||
while (rr < rj)
|
||||
if (rr < rm)
|
||||
{
|
||||
spriteYPos[j + 1] = rj;
|
||||
spriteOrder[j] = spriteOrder[j - 1];
|
||||
rj = spriteYPos[j - 1];
|
||||
j--;
|
||||
byte j = i, rj = rm;
|
||||
do {
|
||||
spriteYPos[j + 1] = rj;
|
||||
spriteOrder[j] = spriteOrder[j - 1];
|
||||
rj = spriteYPos[j - 1];
|
||||
j--;
|
||||
} while (rr < rj);
|
||||
spriteOrder[j] = ri;
|
||||
spriteYPos[j + 1] = rr;
|
||||
}
|
||||
else
|
||||
{
|
||||
spriteYPos[i + 1] = rr;
|
||||
rm = rr;
|
||||
}
|
||||
spriteOrder[j] = ri;
|
||||
spriteYPos[j + 1] = rr;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3099,7 +3099,8 @@ void InterOperand::ForwardMem(const InterOperand& op)
|
|||
void InterOperand::Forward(const InterOperand& op)
|
||||
{
|
||||
mTemp = op.mTemp;
|
||||
mType = op.mType;
|
||||
if (mType != IT_INT8 || op.mType != IT_INT16 && op.mType != IT_INT32)
|
||||
mType = op.mType;
|
||||
mRange = op.mRange;
|
||||
mFinal = false;
|
||||
}
|
||||
|
@ -19144,7 +19145,7 @@ void InterCodeProcedure::Close(void)
|
|||
{
|
||||
GrowingTypeArray tstack(IT_NONE);
|
||||
|
||||
CheckFunc = !strcmp(mIdent->mString, "interpret_statement");
|
||||
CheckFunc = !strcmp(mIdent->mString, "tile_collide");
|
||||
CheckCase = false;
|
||||
|
||||
mEntryBlock = mBlocks[0];
|
||||
|
|
|
@ -28686,6 +28686,15 @@ bool NativeCodeBasicBlock::IsFinalZeroPageUseTail(const NativeCodeBasicBlock* bl
|
|||
}
|
||||
else if (mIns[i].ReferencesZeroPage(to) || (pair && mIns[i].ReferencesZeroPage(to + 1)))
|
||||
return false;
|
||||
else if (mIns[i].mType == ASMIT_JSR)
|
||||
{
|
||||
if (mIns[i].mFlags & NCIF_USE_ZP_32_X)
|
||||
{
|
||||
if (to >= mIns[i].mParam && to < mIns[i].mParam + 4 ||
|
||||
from >= mIns[i].mParam && from < mIns[i].mParam + 4)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mTrueJump && !mTrueJump->IsFinalZeroPageUseTail(block, from, to, pair))
|
||||
|
@ -42657,7 +42666,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
|||
if (mFalseJump)
|
||||
mFalseJump->CheckLive();
|
||||
#if 1
|
||||
if (pass < 7 && i + 1 < mIns.Size())
|
||||
if (pass < 10 && i + 1 < mIns.Size())
|
||||
{
|
||||
if (
|
||||
mIns[i + 0].mType == ASMIT_LDA && (mIns[i + 0].mMode == ASMIM_ABSOLUTE || mIns[i + 0].mMode == ASMIM_ABSOLUTE_X || mIns[i + 0].mMode == ASMIM_ABSOLUTE_Y || mIns[i + 0].mMode == ASMIM_INDIRECT_Y) &&
|
||||
|
@ -45130,7 +45139,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc)
|
|||
{
|
||||
mInterProc = proc;
|
||||
|
||||
CheckFunc = !strcmp(mInterProc->mIdent->mString, "test");
|
||||
CheckFunc = !strcmp(mInterProc->mIdent->mString, "atan2");
|
||||
|
||||
int nblocks = proc->mBlocks.Size();
|
||||
tblocks = new NativeCodeBasicBlock * [nblocks];
|
||||
|
@ -45936,6 +45945,7 @@ void NativeCodeProcedure::Optimize(void)
|
|||
changed = true;
|
||||
|
||||
#endif
|
||||
|
||||
if (step == 2)
|
||||
{
|
||||
ResetVisited();
|
||||
|
@ -46614,6 +46624,7 @@ void NativeCodeProcedure::Optimize(void)
|
|||
else
|
||||
cnt++;
|
||||
|
||||
|
||||
} while (changed);
|
||||
|
||||
#if 1
|
||||
|
|
|
@ -463,6 +463,23 @@ void SourceFile::ReadCharPad(SourceFileDecoder decoder)
|
|||
}
|
||||
return;
|
||||
}
|
||||
else if (decoder == SFD_CTM_TILES_8_SW)
|
||||
{
|
||||
mMemSize = numTiles * tileWidth * tileHeight;
|
||||
mLimit = mMemSize;
|
||||
mMemPos = 0;
|
||||
mMemData = new uint8[mMemSize];
|
||||
for (int j = 0; j < numTiles; j++)
|
||||
{
|
||||
for (int i = 0; i < tileWidth * tileHeight; i++)
|
||||
{
|
||||
int16 d;
|
||||
fread(&d, 2, 1, mFile);
|
||||
mMemData[j + i * numTiles] = uint8(d);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR);
|
||||
|
||||
|
@ -564,6 +581,7 @@ void SourceFile::Limit(SourceFileDecoder decoder, int skip, int limit)
|
|||
case SFD_CTM_CHAR_ATTRIB_1:
|
||||
case SFD_CTM_CHAR_ATTRIB_2:
|
||||
case SFD_CTM_TILES_8:
|
||||
case SFD_CTM_TILES_8_SW:
|
||||
case SFD_CTM_TILES_16:
|
||||
case SFD_CTM_MAP_8:
|
||||
case SFD_CTM_MAP_16:
|
||||
|
|
|
@ -30,6 +30,7 @@ enum SourceFileDecoder
|
|||
SFD_CTM_CHAR_ATTRIB_1,
|
||||
SFD_CTM_CHAR_ATTRIB_2,
|
||||
SFD_CTM_TILES_8,
|
||||
SFD_CTM_TILES_8_SW,
|
||||
SFD_CTM_TILES_16,
|
||||
SFD_CTM_MAP_8,
|
||||
SFD_CTM_MAP_16,
|
||||
|
|
|
@ -880,6 +880,8 @@ void Scanner::NextPreToken(void)
|
|||
decoder = SFD_CTM_CHAR_ATTRIB_2;
|
||||
else if (!strcmp(mTokenIdent->mString, "ctm_tiles8"))
|
||||
decoder = SFD_CTM_TILES_8;
|
||||
else if (!strcmp(mTokenIdent->mString, "ctm_tiles8sw"))
|
||||
decoder = SFD_CTM_TILES_8_SW;
|
||||
else if (!strcmp(mTokenIdent->mString, "ctm_tiles16"))
|
||||
decoder = SFD_CTM_TILES_16;
|
||||
else if (!strcmp(mTokenIdent->mString, "ctm_map8"))
|
||||
|
|
Loading…
Reference in New Issue