new block cache and much more...

- more reliable code invalidation detection
- blocks aren't stopped at any branch, but are being followed
if possible to get larger blocks
- idle loop recognition
- optimised literal loads, load/store cycle counting
 and loads/stores from constant addresses
This commit is contained in:
RSDuck
2019-10-03 01:10:59 +02:00
parent 5338c28f40
commit a687be9879
19 changed files with 1557 additions and 696 deletions

View File

@ -536,7 +536,7 @@ void Reset()
RCnt = 0;
#ifdef JIT_ENABLED
ARMJIT::InvalidateBlockCache();
ARMJIT::ResetBlockCache();
#endif
NDSCart::Reset();
@ -757,7 +757,7 @@ bool DoSavestate(Savestate* file)
#ifdef JIT_ENABLED
if (!file->Saving)
{
ARMJIT::InvalidateBlockCache();
ARMJIT::ResetBlockCache();
}
#endif
@ -1870,10 +1870,6 @@ u32 ARM9Read32(u32 addr)
void ARM9Write8(u32 addr, u8 val)
{
#ifdef JIT_ENABLED
ARMJIT::Invalidate16<0>(addr);
#endif
switch (addr & 0xFF000000)
{
case 0x02000000:
@ -1924,10 +1920,6 @@ void ARM9Write8(u32 addr, u8 val)
void ARM9Write16(u32 addr, u16 val)
{
#ifdef JIT_ENABLED
ARMJIT::Invalidate16<0>(addr);
#endif
switch (addr & 0xFF000000)
{
case 0x02000000:
@ -1994,10 +1986,6 @@ void ARM9Write16(u32 addr, u16 val)
void ARM9Write32(u32 addr, u32 val)
{
#ifdef JIT_ENABLED
ARMJIT::Invalidate32<0>(addr);
#endif
switch (addr & 0xFF000000)
{
case 0x02000000:
@ -2292,7 +2280,7 @@ u32 ARM7Read32(u32 addr)
void ARM7Write8(u32 addr, u8 val)
{
#ifdef JIT_ENABLED
ARMJIT::Invalidate16<1>(addr);
ARMJIT::InvalidateByAddr7(addr);
#endif
switch (addr & 0xFF800000)
@ -2355,7 +2343,7 @@ void ARM7Write8(u32 addr, u8 val)
void ARM7Write16(u32 addr, u16 val)
{
#ifdef JIT_ENABLED
ARMJIT::Invalidate16<1>(addr);
ARMJIT::InvalidateByAddr7(addr);
#endif
switch (addr & 0xFF800000)
@ -2428,7 +2416,7 @@ void ARM7Write16(u32 addr, u16 val)
void ARM7Write32(u32 addr, u32 val)
{
#ifdef JIT_ENABLED
ARMJIT::Invalidate32<1>(addr);
ARMJIT::InvalidateByAddr7(addr);
#endif
switch (addr & 0xFF800000)