Fix compiler getting stuck on optimizing infinite loop
This commit is contained in:
parent
9bd3d3391a
commit
24cc6e20c8
|
@ -7,6 +7,7 @@
|
||||||
#define MMAP_NO_BASIC 0x36
|
#define MMAP_NO_BASIC 0x36
|
||||||
#define MMAP_NO_ROM 0x35
|
#define MMAP_NO_ROM 0x35
|
||||||
#define MMAP_RAM 0x30
|
#define MMAP_RAM 0x30
|
||||||
|
#define MMAP_CHAR_ROM 0x31
|
||||||
|
|
||||||
// Install an IRQ an NMI trampoline, that routes the kernal interrupts
|
// Install an IRQ an NMI trampoline, that routes the kernal interrupts
|
||||||
// through an intermediate trampoline when the kernal ROM is not paged
|
// through an intermediate trampoline when the kernal ROM is not paged
|
||||||
|
|
|
@ -89,6 +89,9 @@ ex:
|
||||||
|
|
||||||
__asm irq1
|
__asm irq1
|
||||||
{
|
{
|
||||||
|
lda $d019
|
||||||
|
bpl ex2
|
||||||
|
|
||||||
ldx nextIRQ
|
ldx nextIRQ
|
||||||
l1:
|
l1:
|
||||||
lda rasterIRQNext, x
|
lda rasterIRQNext, x
|
||||||
|
@ -131,7 +134,6 @@ e2:
|
||||||
lda npos
|
lda npos
|
||||||
sta tpos
|
sta tpos
|
||||||
|
|
||||||
asl $d019
|
|
||||||
jmp ex
|
jmp ex
|
||||||
|
|
||||||
e1:
|
e1:
|
||||||
|
@ -144,7 +146,11 @@ e1:
|
||||||
|
|
||||||
ex:
|
ex:
|
||||||
asl $d019
|
asl $d019
|
||||||
|
jmp $ea81
|
||||||
|
|
||||||
|
ex2:
|
||||||
|
LDA $DC0D
|
||||||
|
cli
|
||||||
jmp $ea31
|
jmp $ea31
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,12 +274,13 @@ void rirq_init(bool kernalIRQ)
|
||||||
{
|
{
|
||||||
sei
|
sei
|
||||||
|
|
||||||
|
#if 0
|
||||||
// disable CIA interrupts
|
// disable CIA interrupts
|
||||||
|
|
||||||
lda #$7f
|
lda #$7f
|
||||||
sta $dc0d
|
sta $dc0d
|
||||||
sta $dd0d
|
sta $dd0d
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kernalIRQ)
|
if (kernalIRQ)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "tinyfont.h"
|
#include "tinyfont.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <c64/asm6502.h>
|
#include <c64/asm6502.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
void bm_init(Bitmap * bm, char * data, char cw, char ch)
|
void bm_init(Bitmap * bm, char * data, char cw, char ch)
|
||||||
{
|
{
|
||||||
|
|
|
@ -964,9 +964,9 @@ int scanf_func(void * fparam)
|
||||||
return getchar();
|
return getchar();
|
||||||
}
|
}
|
||||||
|
|
||||||
int sscanf(const char * fmt, const char * str, ...)
|
int sscanf(const char * str, const char * fmt, ...)
|
||||||
{
|
{
|
||||||
return fpscanf(fmt, sscanf_func, &str, (void **)((&str) + 1));
|
return fpscanf(fmt, sscanf_func, &str, (void **)((&fmt) + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanf(const char * fmt, ...)
|
int scanf(const char * fmt, ...)
|
||||||
|
|
|
@ -18,7 +18,7 @@ int sprintf(char * str, const char * fmt, ...);
|
||||||
|
|
||||||
int scanf(const char * fmt, ...);
|
int scanf(const char * fmt, ...);
|
||||||
|
|
||||||
int sscanf(const char * fmt, const char * str, ...);
|
int sscanf(const char * str, const char * fmt, ...);
|
||||||
|
|
||||||
#pragma compile("stdio.c")
|
#pragma compile("stdio.c")
|
||||||
|
|
||||||
|
|
|
@ -7872,7 +7872,7 @@ bool NativeCodeBasicBlock::MergeBasicBlocks(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (mTrueJump && mTrueJump->mIns.Size() == 0 && !mTrueJump->mFalseJump && !mTrueJump->mLocked && mTrueJump != this)
|
while (mTrueJump && mTrueJump->mIns.Size() == 0 && !mTrueJump->mFalseJump && !mTrueJump->mLocked && mTrueJump != this && mTrueJump->mTrueJump != mTrueJump)
|
||||||
{
|
{
|
||||||
mTrueJump->mNumEntries--;
|
mTrueJump->mNumEntries--;
|
||||||
mTrueJump = mTrueJump->mTrueJump;
|
mTrueJump = mTrueJump->mTrueJump;
|
||||||
|
@ -7880,7 +7880,7 @@ bool NativeCodeBasicBlock::MergeBasicBlocks(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (mFalseJump && mFalseJump->mIns.Size() == 0 && !mFalseJump->mFalseJump && !mFalseJump->mLocked && mFalseJump != this)
|
while (mFalseJump && mFalseJump->mIns.Size() == 0 && !mFalseJump->mFalseJump && !mFalseJump->mLocked && mFalseJump != this && mFalseJump->mTrueJump != mFalseJump)
|
||||||
{
|
{
|
||||||
mFalseJump->mNumEntries--;
|
mFalseJump->mNumEntries--;
|
||||||
mFalseJump = mFalseJump->mTrueJump;
|
mFalseJump = mFalseJump->mTrueJump;
|
||||||
|
@ -8585,35 +8585,41 @@ bool NativeCodeBasicBlock::JoinTailCodeSequences(void)
|
||||||
{
|
{
|
||||||
if (mTrueJump->mIns.Size() > mFalseJump->mIns.Size())
|
if (mTrueJump->mIns.Size() > mFalseJump->mIns.Size())
|
||||||
{
|
{
|
||||||
int i = 0, offset = mTrueJump->mIns.Size() - mFalseJump->mIns.Size();
|
if (mTrueJump->mTrueJump != mFalseJump)
|
||||||
while (i < mFalseJump->mIns.Size() && mFalseJump->mIns[i].IsSame(mTrueJump->mIns[i + offset]))
|
|
||||||
i++;
|
|
||||||
if (i == mFalseJump->mIns.Size())
|
|
||||||
{
|
{
|
||||||
if (mTrueJump->mTrueJump)
|
int i = 0, offset = mTrueJump->mIns.Size() - mFalseJump->mIns.Size();
|
||||||
mTrueJump->mTrueJump->RemEntryBlock(mTrueJump);
|
while (i < mFalseJump->mIns.Size() && mFalseJump->mIns[i].IsSame(mTrueJump->mIns[i + offset]))
|
||||||
mTrueJump->mTrueJump = mFalseJump;
|
i++;
|
||||||
if (mTrueJump->mTrueJump)
|
if (i == mFalseJump->mIns.Size())
|
||||||
mTrueJump->mTrueJump->AddEntryBlock(mTrueJump);
|
{
|
||||||
mTrueJump->mIns.SetSize(offset);
|
if (mTrueJump->mTrueJump)
|
||||||
|
mTrueJump->mTrueJump->RemEntryBlock(mTrueJump);
|
||||||
|
mTrueJump->mTrueJump = mFalseJump;
|
||||||
|
if (mTrueJump->mTrueJump)
|
||||||
|
mTrueJump->mTrueJump->AddEntryBlock(mTrueJump);
|
||||||
|
mTrueJump->mIns.SetSize(offset);
|
||||||
|
|
||||||
changed = true;
|
changed = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int i = 0, offset = mFalseJump->mIns.Size() - mTrueJump->mIns.Size();
|
if (mFalseJump->mTrueJump != mTrueJump)
|
||||||
while (i < mTrueJump->mIns.Size() && mTrueJump->mIns[i].IsSame(mFalseJump->mIns[i + offset]))
|
|
||||||
i++;
|
|
||||||
if (i == mTrueJump->mIns.Size())
|
|
||||||
{
|
{
|
||||||
if (mFalseJump->mTrueJump)
|
int i = 0, offset = mFalseJump->mIns.Size() - mTrueJump->mIns.Size();
|
||||||
mFalseJump->mTrueJump->RemEntryBlock(mFalseJump);
|
while (i < mTrueJump->mIns.Size() && mTrueJump->mIns[i].IsSame(mFalseJump->mIns[i + offset]))
|
||||||
mFalseJump->mTrueJump = mTrueJump;
|
i++;
|
||||||
if (mFalseJump->mTrueJump)
|
if (i == mTrueJump->mIns.Size())
|
||||||
mFalseJump->mTrueJump->AddEntryBlock(mFalseJump);
|
{
|
||||||
mFalseJump->mIns.SetSize(offset);
|
if (mFalseJump->mTrueJump)
|
||||||
changed = true;
|
mFalseJump->mTrueJump->RemEntryBlock(mFalseJump);
|
||||||
|
mFalseJump->mTrueJump = mTrueJump;
|
||||||
|
if (mFalseJump->mTrueJump)
|
||||||
|
mFalseJump->mTrueJump->AddEntryBlock(mFalseJump);
|
||||||
|
mFalseJump->mIns.SetSize(offset);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue