cfgfile_write_bool (f, _T("compfpu"), p->compfpu);
#endif
cfgfile_write_bool(f, _T("comp_catchfault"), p->comp_catchfault);
- cfgfile_write (f, _T("cachesize"), _T("%d"), p->cachesize);
+ cfgfile_write(f, _T("cachesize"), _T("%d"), p->cachesize);
+ cfgfile_dwrite_str(f, _T("jit_blacklist"), p->jitblacklist);
for (i = 0; i < MAX_JPORTS; i++) {
struct jport *jp = &p->jports[i];
return 1;
if (cfgfile_string(option, value, _T("ne2000_pcmcia"), p->ne2000pcmcianame, sizeof p->ne2000pcmcianame / sizeof(TCHAR)))
return 1;
+ if (cfgfile_string(option, value, _T("jit_blacklist"), p->jitblacklist, sizeof p->jitblacklist / sizeof(TCHAR)))
+ return 1;
if (cfgfile_yesno(option, value, _T("immediate_blits"), &p->immediate_blits)
|| cfgfile_yesno(option, value, _T("fpu_no_unimplemented"), &p->fpu_no_unimplemented)
}
#endif
-static bool merge_blacklist()
+static bool merge_blacklist2(const char *blacklist)
{
-#ifdef UAE
- const char *blacklist = "";
-#else
- const char *blacklist = bx_options.jit.jitblacklist;
-#endif
#ifdef USE_JIT_FPU
for (unsigned int i = 0; i < (sizeof(jit_opcodes) / sizeof(jit_opcodes[0])); i++)
*jit_opcodes[i].disabled = false;
if (blacklist[0] != '\0') {
const char *p = blacklist;
for (;;) {
+ int len;
if (*p == 0)
return true;
+ const char *endp = strchr(p, ',');
+ if (endp) {
+ len = endp - p - 1;
+ } else {
+ len = strlen(p);
+ }
+
+ TCHAR *s = au(p);
+ bool found = false;
+ for (int i = 0; lookuptab[i].name; i++) {
+ if (!_tcsnicmp(s, lookuptab[i].name, len) && _tcslen(lookuptab[i].name) == len) {
+ int mnemo = lookuptab[i].mnemo;
+ for (int opcode = 0; opcode < 65536; opcode++) {
+ struct instr *table = &table68k[opcode];
+ if (table->mnemo == mnemo) {
+ reset_compop(cft_map(opcode));
+ jit_log("<JIT compiler> : blacklist opcode : %04x", opcode);
+ }
+ }
+ p += len;
+ if (*p)
+ p++;
+ found = true;
+ break;
+ }
+ }
+ xfree(s);
+ if (found) {
+ continue;
+ }
+
int opcode1 = read_opcode(p);
if (opcode1 < 0)
{
return true;
}
+static bool merge_blacklist(void)
+{
+ bool ret;
+#ifdef UAE
+ const char *blacklist = ua(currprefs.jitblacklist);
+ ret = merge_blacklist2(blacklist);
+ xfree((void*)blacklist);
+#else
+ const char *blacklist = bx_options.jit.jitblacklist;
+ ret = merge_blacklist2(blacklist);
+#endif
+ return ret;
+}
+
void build_comp(void)
{
#ifdef FSUAE