WIP - merge latest sdl1-dev changes into sdl2-dev (warning, not fully checked yet, may crash!)
This commit is contained in:
parent
6e0ab8ae90
commit
d2c43c114b
144 changed files with 25089 additions and 22234 deletions
315
src/readcpu.cpp
315
src/readcpu.cpp
|
@ -154,25 +154,25 @@ struct mnemolookup lookuptab[] = {
|
|||
|
||||
struct instr *table68k;
|
||||
|
||||
static amodes mode_from_str(const TCHAR *str)
|
||||
static amodes mode_from_str (const TCHAR *str)
|
||||
{
|
||||
if (_tcsncmp(str, _T("Dreg"), 4) == 0) return Dreg;
|
||||
if (_tcsncmp(str, _T("Areg"), 4) == 0) return Areg;
|
||||
if (_tcsncmp(str, _T("Aind"), 4) == 0) return Aind;
|
||||
if (_tcsncmp(str, _T("Apdi"), 4) == 0) return Apdi;
|
||||
if (_tcsncmp(str, _T("Aipi"), 4) == 0) return Aipi;
|
||||
if (_tcsncmp(str, _T("Ad16"), 4) == 0) return Ad16;
|
||||
if (_tcsncmp(str, _T("Ad8r"), 4) == 0) return Ad8r;
|
||||
if (_tcsncmp(str, _T("absw"), 4) == 0) return absw;
|
||||
if (_tcsncmp(str, _T("absl"), 4) == 0) return absl;
|
||||
if (_tcsncmp(str, _T("PC16"), 4) == 0) return PC16;
|
||||
if (_tcsncmp(str, _T("PC8r"), 4) == 0) return PC8r;
|
||||
if (_tcsncmp(str, _T("Immd"), 4) == 0) return imm;
|
||||
abort();
|
||||
if (_tcsncmp (str, _T("Dreg"), 4) == 0) return Dreg;
|
||||
if (_tcsncmp (str, _T("Areg"), 4) == 0) return Areg;
|
||||
if (_tcsncmp (str, _T("Aind"), 4) == 0) return Aind;
|
||||
if (_tcsncmp (str, _T("Apdi"), 4) == 0) return Apdi;
|
||||
if (_tcsncmp (str, _T("Aipi"), 4) == 0) return Aipi;
|
||||
if (_tcsncmp (str, _T("Ad16"), 4) == 0) return Ad16;
|
||||
if (_tcsncmp (str, _T("Ad8r"), 4) == 0) return Ad8r;
|
||||
if (_tcsncmp (str, _T("absw"), 4) == 0) return absw;
|
||||
if (_tcsncmp (str, _T("absl"), 4) == 0) return absl;
|
||||
if (_tcsncmp (str, _T("PC16"), 4) == 0) return PC16;
|
||||
if (_tcsncmp (str, _T("PC8r"), 4) == 0) return PC8r;
|
||||
if (_tcsncmp (str, _T("Immd"), 4) == 0) return imm;
|
||||
abort ();
|
||||
return (amodes)0;
|
||||
}
|
||||
|
||||
STATIC_INLINE amodes mode_from_mr(int mode, int reg)
|
||||
STATIC_INLINE amodes mode_from_mr (int mode, int reg)
|
||||
{
|
||||
switch (mode) {
|
||||
case 0: return Dreg;
|
||||
|
@ -194,11 +194,11 @@ STATIC_INLINE amodes mode_from_mr(int mode, int reg)
|
|||
case 7: return am_illg;
|
||||
}
|
||||
}
|
||||
abort();
|
||||
abort ();
|
||||
return (amodes)0;
|
||||
}
|
||||
|
||||
static void build_insn(int insn)
|
||||
static void build_insn (int insn)
|
||||
{
|
||||
int find = -1;
|
||||
int variants;
|
||||
|
@ -207,39 +207,39 @@ static void build_insn(int insn)
|
|||
int i, n;
|
||||
|
||||
int flaglive = 0, flagdead = 0;
|
||||
int cflow = 0;
|
||||
int cflow = 0;
|
||||
|
||||
// Mask of flags set/used
|
||||
unsigned char flags_set = 0;
|
||||
unsigned char flags_used = 0;
|
||||
// Mask of flags set/used
|
||||
unsigned char flags_set = 0;
|
||||
unsigned char flags_used = 0;
|
||||
|
||||
id = defs68k[insn];
|
||||
|
||||
// Control flow information
|
||||
cflow = id.cflow;
|
||||
// Control flow information
|
||||
cflow = id.cflow;
|
||||
|
||||
for (i = 0, n = 4; i < 5; i++, n--) {
|
||||
switch (id.flaginfo[i].flagset) {
|
||||
case fa_unset:
|
||||
case fa_isjmp:
|
||||
break;
|
||||
default:
|
||||
flags_set |= (1 << n);
|
||||
}
|
||||
for (i = 0, n = 4; i < 5; i++, n--) {
|
||||
switch (id.flaginfo[i].flagset) {
|
||||
case fa_unset:
|
||||
case fa_isjmp:
|
||||
break;
|
||||
default:
|
||||
flags_set |= (1 << n);
|
||||
}
|
||||
|
||||
switch (id.flaginfo[i].flaguse) {
|
||||
case fu_unused:
|
||||
case fu_isjmp:
|
||||
break;
|
||||
default:
|
||||
flags_used |= (1 << n);
|
||||
}
|
||||
}
|
||||
switch (id.flaginfo[i].flaguse) {
|
||||
case fu_unused:
|
||||
case fu_isjmp:
|
||||
break;
|
||||
default:
|
||||
flags_used |= (1 << n);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
switch (id.flaginfo[i].flagset) {
|
||||
switch (id.flaginfo[i].flagset){
|
||||
case fa_unset: break;
|
||||
case fa_isjmp: break;
|
||||
case fa_isjmp: break;
|
||||
case fa_zero: flagdead |= 1 << i; break;
|
||||
case fa_one: flagdead |= 1 << i; break;
|
||||
case fa_dontcare: flagdead |= 1 << i; break;
|
||||
|
@ -341,8 +341,7 @@ out2:
|
|||
break;
|
||||
default: abort();
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
mnemonic[mnp] = opcstr[pos];
|
||||
if (mnemonic[mnp] == 'f') {
|
||||
find = -1;
|
||||
|
@ -380,7 +379,7 @@ out2:
|
|||
case 'A':
|
||||
srcmode = Areg;
|
||||
switch (opcstr[pos++]) {
|
||||
case 'l': srcmode = absl; break;
|
||||
case 'l': srcmode = absl; break;
|
||||
case 'r': srcreg = bitval[bitr]; srcgather = 1; srcpos = bitpos[bitr]; break;
|
||||
case 'R': srcreg = bitval[bitR]; srcgather = 1; srcpos = bitpos[bitR]; break;
|
||||
default: abort();
|
||||
|
@ -439,16 +438,16 @@ out2:
|
|||
srcpos = bitpos[bitK];
|
||||
}
|
||||
break;
|
||||
case 'E': srcmode = immi; srcreg = bitval[bitE];
|
||||
if (CPU_EMU_SIZE < 5) {
|
||||
/* 1..255 */
|
||||
srcgather = 1;
|
||||
srctype = 6;
|
||||
srcpos = bitpos[bitE];
|
||||
}
|
||||
break;
|
||||
case 'p': srcmode = immi; srcreg = bitval[bitp];
|
||||
if (CPU_EMU_SIZE < 5) {
|
||||
case 'E': srcmode = immi; srcreg = bitval[bitE];
|
||||
if (CPU_EMU_SIZE < 5) {
|
||||
/* 1..255 */
|
||||
srcgather = 1;
|
||||
srctype = 6;
|
||||
srcpos = bitpos[bitE];
|
||||
}
|
||||
break;
|
||||
case 'p': srcmode = immi; srcreg = bitval[bitp];
|
||||
if (CPU_EMU_SIZE < 5) {
|
||||
/* 0..3 */
|
||||
srcgather = 1;
|
||||
srctype = 7;
|
||||
|
@ -460,13 +459,13 @@ out2:
|
|||
break;
|
||||
case 'd':
|
||||
srcreg = bitval[bitD];
|
||||
srcmode = mode_from_mr(bitval[bitd], bitval[bitD]);
|
||||
srcmode = mode_from_mr(bitval[bitd],bitval[bitD]);
|
||||
if (srcmode == am_illg)
|
||||
continue;
|
||||
if (CPU_EMU_SIZE < 2 &&
|
||||
(srcmode == Areg || srcmode == Dreg || srcmode == Aind
|
||||
|| srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi
|
||||
|| srcmode == Apdi))
|
||||
|| srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi
|
||||
|| srcmode == Apdi))
|
||||
{
|
||||
srcgather = 1; srcpos = bitpos[bitD];
|
||||
}
|
||||
|
@ -476,30 +475,28 @@ out2:
|
|||
/* exclusion */
|
||||
do {
|
||||
pos++;
|
||||
if (mode_from_str(opcstr + pos) == srcmode)
|
||||
if (mode_from_str(opcstr+pos) == srcmode)
|
||||
goto nomatch;
|
||||
pos += 4;
|
||||
} while (opcstr[pos] == ',');
|
||||
pos++;
|
||||
}
|
||||
else {
|
||||
if (opcstr[pos + 4] == '-') {
|
||||
} else {
|
||||
if (opcstr[pos+4] == '-') {
|
||||
/* replacement */
|
||||
if (mode_from_str(opcstr + pos) == srcmode)
|
||||
srcmode = mode_from_str(opcstr + pos + 5);
|
||||
if (mode_from_str(opcstr+pos) == srcmode)
|
||||
srcmode = mode_from_str(opcstr+pos+5);
|
||||
else
|
||||
goto nomatch;
|
||||
pos += 10;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
/* normal */
|
||||
while (mode_from_str(opcstr + pos) != srcmode) {
|
||||
while(mode_from_str(opcstr+pos) != srcmode) {
|
||||
pos += 4;
|
||||
if (opcstr[pos] == ']')
|
||||
goto nomatch;
|
||||
pos++;
|
||||
}
|
||||
while (opcstr[pos] != ']') pos++;
|
||||
while(opcstr[pos] != ']') pos++;
|
||||
pos++;
|
||||
break;
|
||||
}
|
||||
|
@ -511,14 +508,14 @@ out2:
|
|||
break;
|
||||
case 's':
|
||||
srcreg = bitval[bitS];
|
||||
srcmode = mode_from_mr(bitval[bits], bitval[bitS]);
|
||||
srcmode = mode_from_mr(bitval[bits],bitval[bitS]);
|
||||
|
||||
if (srcmode == am_illg)
|
||||
continue;
|
||||
if (CPU_EMU_SIZE < 2 &&
|
||||
(srcmode == Areg || srcmode == Dreg || srcmode == Aind
|
||||
|| srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi
|
||||
|| srcmode == Apdi))
|
||||
|| srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi
|
||||
|| srcmode == Apdi))
|
||||
{
|
||||
srcgather = 1; srcpos = bitpos[bitS];
|
||||
}
|
||||
|
@ -528,30 +525,28 @@ out2:
|
|||
/* exclusion */
|
||||
do {
|
||||
pos++;
|
||||
if (mode_from_str(opcstr + pos) == srcmode)
|
||||
if (mode_from_str(opcstr+pos) == srcmode)
|
||||
goto nomatch;
|
||||
pos += 4;
|
||||
} while (opcstr[pos] == ',');
|
||||
pos++;
|
||||
}
|
||||
else {
|
||||
if (opcstr[pos + 4] == '-') {
|
||||
} else {
|
||||
if (opcstr[pos+4] == '-') {
|
||||
/* replacement */
|
||||
if (mode_from_str(opcstr + pos) == srcmode)
|
||||
srcmode = mode_from_str(opcstr + pos + 5);
|
||||
if (mode_from_str(opcstr+pos) == srcmode)
|
||||
srcmode = mode_from_str(opcstr+pos+5);
|
||||
else
|
||||
goto nomatch;
|
||||
pos += 10;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
/* normal */
|
||||
while (mode_from_str(opcstr + pos) != srcmode) {
|
||||
while(mode_from_str(opcstr+pos) != srcmode) {
|
||||
pos += 4;
|
||||
if (opcstr[pos] == ']')
|
||||
goto nomatch;
|
||||
pos++;
|
||||
}
|
||||
while (opcstr[pos] != ']') pos++;
|
||||
while(opcstr[pos] != ']') pos++;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
@ -584,19 +579,19 @@ out2:
|
|||
default: abort();
|
||||
}
|
||||
if (dstpos < 0 || dstpos >= 32)
|
||||
abort();
|
||||
abort ();
|
||||
break;
|
||||
case 'A':
|
||||
destmode = Areg;
|
||||
switch (opcstr[pos++]) {
|
||||
case 'l': destmode = absl; break;
|
||||
case 'l': destmode = absl; break;
|
||||
case 'r': destreg = bitval[bitr]; dstgather = 1; dstpos = bitpos[bitr]; break;
|
||||
case 'R': destreg = bitval[bitR]; dstgather = 1; dstpos = bitpos[bitR]; break;
|
||||
case 'x': destreg = 0; dstgather = 0; dstpos = 0; break;
|
||||
default: abort();
|
||||
}
|
||||
if (destmode != absl && (dstpos < 0 || dstpos >= 32))
|
||||
abort();
|
||||
if (destmode != absl && (dstpos < 0 || dstpos >= 32))
|
||||
abort ();
|
||||
switch (opcstr[pos]) {
|
||||
case 'p': destmode = Apdi; pos++; break;
|
||||
case 'P': destmode = Aipi; pos++; break;
|
||||
|
@ -621,13 +616,13 @@ out2:
|
|||
break;
|
||||
case 'd':
|
||||
destreg = bitval[bitD];
|
||||
destmode = mode_from_mr(bitval[bitd], bitval[bitD]);
|
||||
destmode = mode_from_mr(bitval[bitd],bitval[bitD]);
|
||||
if (destmode == am_illg)
|
||||
continue;
|
||||
if (CPU_EMU_SIZE < 1 &&
|
||||
(destmode == Areg || destmode == Dreg || destmode == Aind
|
||||
|| destmode == Ad16 || destmode == Ad8r || destmode == Aipi
|
||||
|| destmode == Apdi))
|
||||
|| destmode == Ad16 || destmode == Ad8r || destmode == Aipi
|
||||
|| destmode == Apdi))
|
||||
{
|
||||
dstgather = 1; dstpos = bitpos[bitD];
|
||||
}
|
||||
|
@ -638,30 +633,28 @@ out2:
|
|||
/* exclusion */
|
||||
do {
|
||||
pos++;
|
||||
if (mode_from_str(opcstr + pos) == destmode)
|
||||
if (mode_from_str(opcstr+pos) == destmode)
|
||||
goto nomatch;
|
||||
pos += 4;
|
||||
} while (opcstr[pos] == ',');
|
||||
pos++;
|
||||
}
|
||||
else {
|
||||
if (opcstr[pos + 4] == '-') {
|
||||
} else {
|
||||
if (opcstr[pos+4] == '-') {
|
||||
/* replacement */
|
||||
if (mode_from_str(opcstr + pos) == destmode)
|
||||
destmode = mode_from_str(opcstr + pos + 5);
|
||||
if (mode_from_str(opcstr+pos) == destmode)
|
||||
destmode = mode_from_str(opcstr+pos+5);
|
||||
else
|
||||
goto nomatch;
|
||||
pos += 10;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
/* normal */
|
||||
while (mode_from_str(opcstr + pos) != destmode) {
|
||||
while(mode_from_str(opcstr+pos) != destmode) {
|
||||
pos += 4;
|
||||
if (opcstr[pos] == ']')
|
||||
goto nomatch;
|
||||
pos++;
|
||||
}
|
||||
while (opcstr[pos] != ']') pos++;
|
||||
while(opcstr[pos] != ']') pos++;
|
||||
pos++;
|
||||
break;
|
||||
}
|
||||
|
@ -673,14 +666,14 @@ out2:
|
|||
break;
|
||||
case 's':
|
||||
destreg = bitval[bitS];
|
||||
destmode = mode_from_mr(bitval[bits], bitval[bitS]);
|
||||
destmode = mode_from_mr(bitval[bits],bitval[bitS]);
|
||||
|
||||
if (destmode == am_illg)
|
||||
continue;
|
||||
if (CPU_EMU_SIZE < 1 &&
|
||||
(destmode == Areg || destmode == Dreg || destmode == Aind
|
||||
|| destmode == Ad16 || destmode == Ad8r || destmode == Aipi
|
||||
|| destmode == Apdi))
|
||||
|| destmode == Ad16 || destmode == Ad8r || destmode == Aipi
|
||||
|| destmode == Apdi))
|
||||
{
|
||||
dstgather = 1; dstpos = bitpos[bitS];
|
||||
}
|
||||
|
@ -691,30 +684,28 @@ out2:
|
|||
/* exclusion */
|
||||
do {
|
||||
pos++;
|
||||
if (mode_from_str(opcstr + pos) == destmode)
|
||||
if (mode_from_str(opcstr+pos) == destmode)
|
||||
goto nomatch;
|
||||
pos += 4;
|
||||
} while (opcstr[pos] == ',');
|
||||
pos++;
|
||||
}
|
||||
else {
|
||||
if (opcstr[pos + 4] == '-') {
|
||||
} else {
|
||||
if (opcstr[pos+4] == '-') {
|
||||
/* replacement */
|
||||
if (mode_from_str(opcstr + pos) == destmode)
|
||||
destmode = mode_from_str(opcstr + pos + 5);
|
||||
if (mode_from_str(opcstr+pos) == destmode)
|
||||
destmode = mode_from_str(opcstr+pos+5);
|
||||
else
|
||||
goto nomatch;
|
||||
pos += 10;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
/* normal */
|
||||
while (mode_from_str(opcstr + pos) != destmode) {
|
||||
while(mode_from_str(opcstr+pos) != destmode) {
|
||||
pos += 4;
|
||||
if (opcstr[pos] == ']')
|
||||
goto nomatch;
|
||||
pos++;
|
||||
}
|
||||
while (opcstr[pos] != ']') pos++;
|
||||
while(opcstr[pos] != ']') pos++;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
@ -732,17 +723,17 @@ out2:
|
|||
|
||||
if (destmode == Areg && sz == sz_byte)
|
||||
goto nomatch;
|
||||
endofline:
|
||||
endofline:
|
||||
/* now, we have a match */
|
||||
if (table68k[opc].mnemo != i_ILLG)
|
||||
;//write_log (_T("Double match: %x: %s\n"), opc, opcstr);
|
||||
if (find == -1) {
|
||||
for (find = 0;; find++) {
|
||||
if (_tcscmp(mnemonic, lookuptab[find].name) == 0) {
|
||||
if (_tcscmp (mnemonic, lookuptab[find].name) == 0) {
|
||||
table68k[opc].mnemo = lookuptab[find].mnemo;
|
||||
break;
|
||||
}
|
||||
if (_tcslen(lookuptab[find].name) == 0)
|
||||
if (_tcslen (lookuptab[find].name) == 0)
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
@ -783,67 +774,67 @@ out2:
|
|||
table68k[opc].clocks = id.clocks;
|
||||
table68k[opc].fetchmode = id.fetchmode;
|
||||
|
||||
// Fix flags used information for Scc, Bcc, TRAPcc, DBcc instructions
|
||||
if (table68k[opc].mnemo == i_Scc
|
||||
|| table68k[opc].mnemo == i_Bcc
|
||||
|| table68k[opc].mnemo == i_DBcc
|
||||
|| table68k[opc].mnemo == i_TRAPcc
|
||||
) {
|
||||
switch (table68k[opc].cc) {
|
||||
// CC mask: XNZVC
|
||||
// 8421
|
||||
case 0: flags_used = 0x00; break; /* T */
|
||||
case 1: flags_used = 0x00; break; /* F */
|
||||
case 2: flags_used = 0x05; break; /* HI */
|
||||
case 3: flags_used = 0x05; break; /* LS */
|
||||
case 4: flags_used = 0x01; break; /* CC */
|
||||
case 5: flags_used = 0x01; break; /* CS */
|
||||
case 6: flags_used = 0x04; break; /* NE */
|
||||
case 7: flags_used = 0x04; break; /* EQ */
|
||||
case 8: flags_used = 0x02; break; /* VC */
|
||||
case 9: flags_used = 0x02; break; /* VS */
|
||||
case 10:flags_used = 0x08; break; /* PL */
|
||||
case 11:flags_used = 0x08; break; /* MI */
|
||||
case 12:flags_used = 0x0A; break; /* GE */
|
||||
case 13:flags_used = 0x0A; break; /* LT */
|
||||
case 14:flags_used = 0x0E; break; /* GT */
|
||||
case 15:flags_used = 0x0E; break; /* LE */
|
||||
}
|
||||
// Fix flags used information for Scc, Bcc, TRAPcc, DBcc instructions
|
||||
if ( table68k[opc].mnemo == i_Scc
|
||||
|| table68k[opc].mnemo == i_Bcc
|
||||
|| table68k[opc].mnemo == i_DBcc
|
||||
|| table68k[opc].mnemo == i_TRAPcc
|
||||
) {
|
||||
switch (table68k[opc].cc) {
|
||||
// CC mask: XNZVC
|
||||
// 8421
|
||||
case 0: flags_used = 0x00; break; /* T */
|
||||
case 1: flags_used = 0x00; break; /* F */
|
||||
case 2: flags_used = 0x05; break; /* HI */
|
||||
case 3: flags_used = 0x05; break; /* LS */
|
||||
case 4: flags_used = 0x01; break; /* CC */
|
||||
case 5: flags_used = 0x01; break; /* CS */
|
||||
case 6: flags_used = 0x04; break; /* NE */
|
||||
case 7: flags_used = 0x04; break; /* EQ */
|
||||
case 8: flags_used = 0x02; break; /* VC */
|
||||
case 9: flags_used = 0x02; break; /* VS */
|
||||
case 10:flags_used = 0x08; break; /* PL */
|
||||
case 11:flags_used = 0x08; break; /* MI */
|
||||
case 12:flags_used = 0x0A; break; /* GE */
|
||||
case 13:flags_used = 0x0A; break; /* LT */
|
||||
case 14:flags_used = 0x0E; break; /* GT */
|
||||
case 15:flags_used = 0x0E; break; /* LE */
|
||||
}
|
||||
}
|
||||
|
||||
#if 1
|
||||
/* gb-- flagdead and flaglive would not have correct information */
|
||||
table68k[opc].flagdead = flags_set;
|
||||
table68k[opc].flaglive = flags_used;
|
||||
/* gb-- flagdead and flaglive would not have correct information */
|
||||
table68k[opc].flagdead = flags_set;
|
||||
table68k[opc].flaglive = flags_used;
|
||||
#else
|
||||
table68k[opc].flagdead = flagdead;
|
||||
table68k[opc].flaglive = flaglive;
|
||||
#endif
|
||||
table68k[opc].cflow = cflow;
|
||||
nomatch:
|
||||
table68k[opc].cflow = cflow;
|
||||
nomatch:
|
||||
/* FOO! */;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void read_table68k(void)
|
||||
void read_table68k (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
free(table68k);
|
||||
table68k = xmalloc(struct instr, 65536);
|
||||
free (table68k);
|
||||
table68k = xmalloc (struct instr, 65536);
|
||||
for (i = 0; i < 65536; i++) {
|
||||
table68k[i].mnemo = i_ILLG;
|
||||
table68k[i].handler = -1;
|
||||
}
|
||||
for (i = 0; i < n_defs68k; i++) {
|
||||
build_insn(i);
|
||||
build_insn (i);
|
||||
}
|
||||
}
|
||||
|
||||
static int imismatch;
|
||||
|
||||
static void handle_merges(long int opcode)
|
||||
static void handle_merges (long int opcode)
|
||||
{
|
||||
uae_u16 smsk;
|
||||
uae_u16 dmsk;
|
||||
|
@ -852,8 +843,7 @@ static void handle_merges(long int opcode)
|
|||
|
||||
if (table68k[opcode].spos == -1) {
|
||||
sbitdst = 1; smsk = 0;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
switch (table68k[opcode].stype) {
|
||||
case 0:
|
||||
smsk = 7; sbitdst = 8; break;
|
||||
|
@ -867,8 +857,8 @@ static void handle_merges(long int opcode)
|
|||
smsk = 7; sbitdst = 8; break;
|
||||
case 5:
|
||||
smsk = 63; sbitdst = 64; break;
|
||||
case 6:
|
||||
smsk = 255; sbitdst = 256; break;
|
||||
case 6:
|
||||
smsk = 255; sbitdst = 256; break;
|
||||
case 7:
|
||||
smsk = 3; sbitdst = 4; break;
|
||||
default:
|
||||
|
@ -880,13 +870,12 @@ static void handle_merges(long int opcode)
|
|||
}
|
||||
if (table68k[opcode].dpos == -1) {
|
||||
dstend = 1; dmsk = 0;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
dmsk = 7 << table68k[opcode].dpos;
|
||||
dstend = 8;
|
||||
}
|
||||
for (srcreg = 0; srcreg < sbitdst; srcreg++) {
|
||||
for (dstreg = 0; dstreg < dstend; dstreg++) {
|
||||
for (srcreg=0; srcreg < sbitdst; srcreg++) {
|
||||
for (dstreg=0; dstreg < dstend; dstreg++) {
|
||||
uae_u16 code = (uae_u16)opcode;
|
||||
|
||||
code = (code & ~smsk) | (srcreg << table68k[opcode].spos);
|
||||
|
@ -904,14 +893,14 @@ static void handle_merges(long int opcode)
|
|||
}
|
||||
if (table68k[opcode].suse
|
||||
&& (table68k[opcode].spos != table68k[code].spos
|
||||
|| table68k[opcode].smode != table68k[code].smode
|
||||
|| table68k[opcode].stype != table68k[code].stype))
|
||||
|| table68k[opcode].smode != table68k[code].smode
|
||||
|| table68k[opcode].stype != table68k[code].stype))
|
||||
{
|
||||
imismatch++; continue;
|
||||
}
|
||||
if (table68k[opcode].duse
|
||||
&& (table68k[opcode].dpos != table68k[code].dpos
|
||||
|| table68k[opcode].dmode != table68k[code].dmode))
|
||||
|| table68k[opcode].dmode != table68k[code].dmode))
|
||||
{
|
||||
imismatch++; continue;
|
||||
}
|
||||
|
@ -922,7 +911,7 @@ static void handle_merges(long int opcode)
|
|||
}
|
||||
}
|
||||
|
||||
void do_merges(void)
|
||||
void do_merges (void)
|
||||
{
|
||||
long int opcode;
|
||||
int nr = 0;
|
||||
|
@ -931,12 +920,12 @@ void do_merges(void)
|
|||
if (table68k[opcode].handler != -1 || table68k[opcode].mnemo == i_ILLG)
|
||||
continue;
|
||||
nr++;
|
||||
handle_merges(opcode);
|
||||
handle_merges (opcode);
|
||||
}
|
||||
nr_cpuop_funcs = nr;
|
||||
}
|
||||
|
||||
int get_no_mismatches(void)
|
||||
int get_no_mismatches (void)
|
||||
{
|
||||
return imismatch;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue