famec: eliminate global context ptr

saves like 25-35K of .text

current compile resource usage on i5-6600K:
            cpu  mem
gcc 5.4.0:  17.0 1.1g
clang 3.8:  1686 2.3g

FAMEC_NO_GOTOS:
gcc 5.4.0:   8.4 0.4g
clang 3.8:  20.0 0.15g
vs2008/O2: ~1800 ?
vs2008/O1:  ~720 ?
This commit is contained in:
notaz 2017-10-15 01:15:00 +03:00
parent 12f23dac6f
commit 7669591e08
7 changed files with 346 additions and 371 deletions

View file

@ -139,7 +139,6 @@ static void SekRunS68k(unsigned int to)
m68k_set_context(&PicoCpuMM68k);
#elif defined(EMU_F68K)
SekCycleCntS68k += fm68k_emulate(&PicoCpuFS68k, cyc_do, 0) - cyc_do;
g_m68kcontext = &PicoCpuFM68k;
#endif
}

View file

@ -117,15 +117,10 @@ PICO_INTERNAL void SekInitS68k(void)
}
#endif
#ifdef EMU_F68K
{
void *oldcontext = g_m68kcontext;
g_m68kcontext = &PicoCpuFS68k;
memset(&PicoCpuFS68k, 0, sizeof(PicoCpuFS68k));
fm68k_init();
PicoCpuFS68k.iack_handler = SekIntAckFS68k;
PicoCpuFS68k.sr = 0x2704; // Z flag
g_m68kcontext = oldcontext;
}
memset(&PicoCpuFS68k, 0, sizeof(PicoCpuFS68k));
fm68k_init();
PicoCpuFS68k.iack_handler = SekIntAckFS68k;
PicoCpuFS68k.sr = 0x2704; // Z flag
#endif
}
@ -149,11 +144,7 @@ PICO_INTERNAL int SekResetS68k(void)
}
#endif
#ifdef EMU_F68K
{
void *oldcontext = g_m68kcontext;
fm68k_reset(&PicoCpuFS68k);
g_m68kcontext = oldcontext;
}
fm68k_reset(&PicoCpuFS68k);
#endif
return 0;

View file

@ -30,6 +30,7 @@ static struct Cyclone *currentC68k = NULL;
#define other_is_stopped() (currentC68k->state_flags&1)
#define other_is_tracing() ((currentC68k->state_flags&2)?1:0)
#elif defined(EMU_F68K)
static struct M68K_CONTEXT *g_m68kcontext;
#define other_set_sub(s) g_m68kcontext=(s)?&PicoCpuFS68k:&PicoCpuFM68k;
#define other_get_sr() g_m68kcontext->sr
#define other_dar(i) ((unsigned int*)g_m68kcontext->dreg)[i]

View file

@ -128,15 +128,10 @@ PICO_INTERNAL void SekInit(void)
}
#endif
#ifdef EMU_F68K
{
void *oldcontext = g_m68kcontext;
g_m68kcontext = &PicoCpuFM68k;
memset(&PicoCpuFM68k, 0, sizeof(PicoCpuFM68k));
fm68k_init();
PicoCpuFM68k.iack_handler = SekIntAckF68K;
PicoCpuFM68k.sr = 0x2704; // Z flag
g_m68kcontext = oldcontext;
}
memset(&PicoCpuFM68k, 0, sizeof(PicoCpuFM68k));
fm68k_init();
PicoCpuFM68k.iack_handler = SekIntAckF68K;
PicoCpuFM68k.sr = 0x2704; // Z flag
#endif
}