static int brace_level;
static char outbuffer[30000];
-static int last_access_offset;
+static int last_access_offset_ipl;
static void out(const char *format, ...)
{
memcpy(outbuffer + offset + brace_level, s, len);
}
-static void set_last_access(void)
+static void set_last_access_ipl(void)
{
- last_access_offset = strlen(outbuffer);
+ if (ipl_fetched)
+ return;
+ last_access_offset_ipl = strlen(outbuffer);
}
NORETURN static void term (void)
} else if (using_ce) {
/* we must do this because execution order of (something | something2) is not defined */
if (flags & GF_NOREFILL) {
- set_last_access();
+ set_last_access_ipl();
out("%s = %s(%d) << 16;\n", name, prefetch_word, r + 2);
count_readw++;
out("%s |= regs.irc;\n", name);
do_instruction_buserror();
strcpy(bus_error_code, bus_error_code2);
bus_error_code2[0] = 0;
- set_last_access();
+ set_last_access_ipl();
out("%s |= %s(%d);\n", name, prefetch_word, r + 4);
count_readw++;
check_bus_error_ins(r + 4, -1);
}
} else if (using_prefetch) {
if (flags & GF_NOREFILL) {
- set_last_access();
+ set_last_access_ipl();
out("%s = %s(%d) << 16;\n", name, prefetch_word, r + 2);
count_readw++;
out("%s |= regs.irc;\n", name);
do_instruction_buserror();
strcpy(bus_error_code, bus_error_code2);
bus_error_code2[0] = 0;
- set_last_access();
+ set_last_access_ipl();
out("%s |= %s(%d);\n", name, prefetch_word, r + 4);
count_readw++;
check_bus_error_ins(r + 4, -1);
if (flags & GF_NOREFILL) {
strcpy(buffer, "regs.irc");
} else {
- set_last_access();
+ set_last_access_ipl();
sprintf(buffer, "%s(%d)", prefetch_word, r + 2);
count_readw++;
check_bus_error_ins(r + 2, pcoffset);
if (flags & GF_NOREFILL) {
strcpy(buffer, "regs.irc");
} else {
- set_last_access();
+ set_last_access_ipl();
sprintf(buffer, "%s(%d)", prefetch_word, r + 2);
count_readw++;
check_bus_error_ins(r + 2, pcoffset);
if (flags & GF_NOREFILL) {
strcpy(buffer, "(uae_u8)regs.irc");
} else {
- set_last_access();
+ set_last_access_ipl();
sprintf(buffer, "(uae_u8)%s(%d)", prefetch_word, r + 2);
count_readw++;
check_bus_error_ins(r + 2, pcoffset);
if (flags & GF_NOREFILL) {
strcpy(buffer, "(uae_u8)regs.irc");
} else {
- set_last_access();
+ set_last_access_ipl();
sprintf(buffer, "(uae_u8)%s(%d)", prefetch_word, r + 2);
count_readw++;
check_bus_error_ins(r + 2, pcoffset);
}
next_level_000();
}
- set_last_access();
+ set_last_access_ipl();
out("%s(%d);\n", prefetch_word, m68k_pc_offset + 2);
count_readw++;
check_prefetch_bus_error(m68k_pc_offset + 2, -1, 0);
static void fill_prefetch_1(int o)
{
if (using_prefetch) {
- set_last_access();
+ set_last_access_ipl();
out("%s(%d);\n", prefetch_word, o);
if (!loopmode || using_ce) {
count_readw++;
static void fill_prefetch_1_empty(int o)
{
if (using_prefetch) {
- set_last_access();
+ set_last_access_ipl();
out("%s(%d);\n", prefetch_word, o);
count_readw++;
check_prefetch_bus_error(o ? -2 : -1, 0, 0);
va_end(parms);
out(outbuf);
}
- set_last_access();
+ set_last_access_ipl();
out("%s(%d);\n", prefetch_word, 2);
count_readw++;
if (pctype > 0) {
fill_prefetch_next_after(0, NULL);
insn_n_cycles += 4;
}
+ check_ipl();
out("%s(%sa, %s >> 16);\n", dstwx, to, from);
sprintf(tmp, "%s >> 16", from);
count_writew++;
if (flags & GF_SECONDWORDSETFLAGS) {
genflags(flag_logical, g_instr->size, "src", "", "");
}
+ check_ipl();
out("%s(%sa + 2, %s);\n", dstwx, to, from);
count_writew++;
check_bus_error(to, 2, 1, 1, from, 1, pcoffset);
if (store_dir > 1) {
fill_prefetch_next_after(0, NULL);
}
+ check_ipl();
out("%s(%sa, %s >> 16); \n", dstwx, to, from);
sprintf(tmp, "%s >> 16", from);
count_writew++;
if (flags & GF_SECONDWORDSETFLAGS) {
genflags(flag_logical, g_instr->size, "src", "", "");
}
+ check_ipl();
out("%s(%sa + 2, %s); \n", dstwx, to, from);
count_writew++;
check_bus_error(to, 2, 1, 1, from, 1, pcoffset);
bus_error_code[0] = 0;
bus_error_code2[0] = 0;
opcode_nextcopy = 0;
- last_access_offset = -1;
+ last_access_offset_ipl = -1;
loopmode = 0;
// 68010 loop mode available if
count_readw++;
check_prefetch_bus_error(-1, 0, 0);
irc2ir();
- set_last_access();
+ set_last_access_ipl();
out("%s(%d);\n", prefetch_word, 2);
int sp = (curi->smode == Ad16 || curi->smode == absw || curi->smode == absl || curi->smode == PC16 || curi->smode == Ad8r || curi->smode == PC8r) ? -1 : 0;
copy_opcode();
fill_prefetch_finish();
sync_m68k_pc();
if ((using_ce || using_prefetch) && did_prefetch >= 0) {
- if (last_access_offset > 0) {
- insertstring("ipl_fetch();\n", last_access_offset);
+ if (last_access_offset_ipl > 0) {
+ insertstring("ipl_fetch();\n", last_access_offset_ipl);
} else {
out("// MISSING\n");
}