Cycle counts for recompiled blocks now generated at compile time.

This commit is contained in:
TomW 2014-11-12 19:33:49 +00:00
commit 2905c43db8
43 changed files with 1142 additions and 730 deletions

View file

@ -1,98 +1,98 @@
static int opMOV_AL_imm(uint32_t fetchdat)
{
AL = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_AH_imm(uint32_t fetchdat)
{
AH = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_BL_imm(uint32_t fetchdat)
{
BL = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_BH_imm(uint32_t fetchdat)
{
BH = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_CL_imm(uint32_t fetchdat)
{
CL = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_CH_imm(uint32_t fetchdat)
{
CH = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_DL_imm(uint32_t fetchdat)
{
DL = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_DH_imm(uint32_t fetchdat)
{
DH = getbytef();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_AX_imm(uint32_t fetchdat)
{
AX = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_BX_imm(uint32_t fetchdat)
{
BX = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_CX_imm(uint32_t fetchdat)
{
CX = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_DX_imm(uint32_t fetchdat)
{
DX = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_SI_imm(uint32_t fetchdat)
{
SI = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_DI_imm(uint32_t fetchdat)
{
DI = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_BP_imm(uint32_t fetchdat)
{
BP = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_SP_imm(uint32_t fetchdat)
{
SP = getwordf();
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
@ -100,56 +100,56 @@ static int opMOV_EAX_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
EAX = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_EBX_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
EBX = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_ECX_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
ECX = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_EDX_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
EDX = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_ESI_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
ESI = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_EDI_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
EDI = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_EBP_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
EBP = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opMOV_ESP_imm(uint32_t fetchdat)
{
uint32_t templ = getlong(); if (abrt) return 1;
ESP = templ;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
@ -159,7 +159,7 @@ static int opMOV_b_imm_a16(uint32_t fetchdat)
fetch_ea_16(fetchdat);
temp = readmemb(cs,pc); pc++; if (abrt) return 1;
seteab(temp);
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return abrt;
}
static int opMOV_b_imm_a32(uint32_t fetchdat)
@ -168,7 +168,7 @@ static int opMOV_b_imm_a32(uint32_t fetchdat)
fetch_ea_32(fetchdat);
temp = getbyte(); if (abrt) return 1;
seteab(temp);
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return abrt;
}
@ -178,7 +178,7 @@ static int opMOV_w_imm_a16(uint32_t fetchdat)
fetch_ea_16(fetchdat);
temp = getword(); if (abrt) return 1;
seteaw(temp);
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return abrt;
}
static int opMOV_w_imm_a32(uint32_t fetchdat)
@ -187,7 +187,7 @@ static int opMOV_w_imm_a32(uint32_t fetchdat)
fetch_ea_32(fetchdat);
temp = getword(); if (abrt) return 1;
seteaw(temp);
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return abrt;
}
static int opMOV_l_imm_a16(uint32_t fetchdat)
@ -196,7 +196,7 @@ static int opMOV_l_imm_a16(uint32_t fetchdat)
fetch_ea_16(fetchdat);
temp = getlong(); if (abrt) return 1;
seteal(temp);
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return abrt;
}
static int opMOV_l_imm_a32(uint32_t fetchdat)
@ -205,7 +205,7 @@ static int opMOV_l_imm_a32(uint32_t fetchdat)
fetch_ea_32(fetchdat);
temp = getlong(); if (abrt) return 1;
seteal(temp);
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return abrt;
}
@ -215,7 +215,7 @@ static int opMOV_AL_a16(uint32_t fetchdat)
uint16_t addr = getwordf();
uint8_t temp = readmemb(ea_seg->base, addr); if (abrt) return 1;
AL = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
return 0;
}
static int opMOV_AL_a32(uint32_t fetchdat)
@ -223,7 +223,7 @@ static int opMOV_AL_a32(uint32_t fetchdat)
uint32_t addr = getlong();
uint8_t temp = readmemb(ea_seg->base, addr); if (abrt) return 1;
AL = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
return 0;
}
static int opMOV_AX_a16(uint32_t fetchdat)
@ -231,7 +231,7 @@ static int opMOV_AX_a16(uint32_t fetchdat)
uint16_t addr = getwordf();
uint16_t temp = readmemw(ea_seg->base, addr); if (abrt) return 1;
AX = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
return 0;
}
static int opMOV_AX_a32(uint32_t fetchdat)
@ -239,7 +239,7 @@ static int opMOV_AX_a32(uint32_t fetchdat)
uint32_t addr = getlong();
uint16_t temp = readmemw(ea_seg->base, addr); if (abrt) return 1;
AX = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
return 0;
}
static int opMOV_EAX_a16(uint32_t fetchdat)
@ -247,7 +247,7 @@ static int opMOV_EAX_a16(uint32_t fetchdat)
uint16_t addr = getwordf();
uint32_t temp = readmeml(ea_seg->base, addr); if (abrt) return 1;
EAX = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
return 0;
}
static int opMOV_EAX_a32(uint32_t fetchdat)
@ -255,7 +255,7 @@ static int opMOV_EAX_a32(uint32_t fetchdat)
uint32_t addr = getlong();
uint32_t temp = readmeml(ea_seg->base, addr); if (abrt) return 1;
EAX = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
return 0;
}
@ -263,42 +263,42 @@ static int opMOV_a16_AL(uint32_t fetchdat)
{
uint16_t addr = getwordf();
writememb(ea_seg->base, addr, AL);
cycles -= (is486) ? 1 : 2;
CLOCK_CYCLES((is486) ? 1 : 2);
return abrt;
}
static int opMOV_a32_AL(uint32_t fetchdat)
{
uint32_t addr = getlong();
writememb(ea_seg->base, addr, AL);
cycles -= (is486) ? 1 : 2;
CLOCK_CYCLES((is486) ? 1 : 2);
return abrt;
}
static int opMOV_a16_AX(uint32_t fetchdat)
{
uint16_t addr = getwordf();
writememw(ea_seg->base, addr, AX);
cycles -= (is486) ? 1 : 2;
CLOCK_CYCLES((is486) ? 1 : 2);
return abrt;
}
static int opMOV_a32_AX(uint32_t fetchdat)
{
uint32_t addr = getlong(); if (abrt) return 1;
writememw(ea_seg->base, addr, AX);
cycles -= (is486) ? 1 : 2;
CLOCK_CYCLES((is486) ? 1 : 2);
return abrt;
}
static int opMOV_a16_EAX(uint32_t fetchdat)
{
uint16_t addr = getwordf();
writememl(ea_seg->base, addr, EAX);
cycles -= (is486) ? 1 : 2;
CLOCK_CYCLES((is486) ? 1 : 2);
return abrt;
}
static int opMOV_a32_EAX(uint32_t fetchdat)
{
uint32_t addr = getlong(); if (abrt) return 1;
writememl(ea_seg->base, addr, EAX);
cycles -= (is486) ? 1 : 2;
CLOCK_CYCLES((is486) ? 1 : 2);
return abrt;
}
@ -308,7 +308,7 @@ static int opLEA_w_a16(uint32_t fetchdat)
fetch_ea_16(fetchdat);
ILLEGAL_ON(mod == 3);
regs[reg].w = eaaddr;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opLEA_w_a32(uint32_t fetchdat)
@ -316,7 +316,7 @@ static int opLEA_w_a32(uint32_t fetchdat)
fetch_ea_32(fetchdat);
ILLEGAL_ON(mod == 3);
regs[reg].w = eaaddr;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
@ -325,7 +325,7 @@ static int opLEA_l_a16(uint32_t fetchdat)
fetch_ea_16(fetchdat);
ILLEGAL_ON(mod == 3);
regs[reg].l = eaaddr & 0xffff;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
static int opLEA_l_a32(uint32_t fetchdat)
@ -333,7 +333,7 @@ static int opLEA_l_a32(uint32_t fetchdat)
fetch_ea_32(fetchdat);
ILLEGAL_ON(mod == 3);
regs[reg].l = eaaddr;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
return 0;
}
@ -344,7 +344,7 @@ static int opXLAT_a16(uint32_t fetchdat)
uint32_t addr = (BX + AL)&0xFFFF;
uint8_t temp = readmemb(ea_seg->base, addr); if (abrt) return 1;
AL = temp;
cycles -= 5;
CLOCK_CYCLES(5);
return 0;
}
static int opXLAT_a32(uint32_t fetchdat)
@ -352,7 +352,7 @@ static int opXLAT_a32(uint32_t fetchdat)
uint32_t addr = EBX + AL;
uint8_t temp = readmemb(ea_seg->base, addr); if (abrt) return 1;
AL = temp;
cycles -= 5;
CLOCK_CYCLES(5);
return 0;
}
@ -362,14 +362,14 @@ static int opMOV_b_r_a16(uint32_t fetchdat)
{
pc++;
setr8(fetchdat & 7, getr8((fetchdat >> 3) & 7));
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
fetch_ea_16(fetchdat);
CHECK_WRITE(ea_seg, eaaddr, eaaddr);
seteab(getr8(reg));
cycles -= is486 ? 1 : 2;
CLOCK_CYCLES(is486 ? 1 : 2);
}
return abrt;
}
@ -379,14 +379,14 @@ static int opMOV_b_r_a32(uint32_t fetchdat)
{
pc++;
setr8(fetchdat & 7, getr8((fetchdat >> 3) & 7));
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
fetch_ea_32(fetchdat);
CHECK_WRITE(ea_seg, eaaddr, eaaddr);
seteab(getr8(reg));
cycles -= is486 ? 1 : 2;
CLOCK_CYCLES(is486 ? 1 : 2);
}
return abrt;
}
@ -396,14 +396,14 @@ static int opMOV_w_r_a16(uint32_t fetchdat)
{
pc++;
regs[fetchdat & 7].w = regs[(fetchdat >> 3) & 7].w;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
fetch_ea_16(fetchdat);
CHECK_WRITE(ea_seg, eaaddr, eaaddr+1);
seteaw(regs[reg].w);
cycles -= is486 ? 1 : 2;
CLOCK_CYCLES(is486 ? 1 : 2);
}
return abrt;
}
@ -413,14 +413,14 @@ static int opMOV_w_r_a32(uint32_t fetchdat)
{
pc++;
regs[fetchdat & 7].w = regs[(fetchdat >> 3) & 7].w;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
fetch_ea_32(fetchdat);
CHECK_WRITE(ea_seg, eaaddr, eaaddr+1);
seteaw(regs[reg].w);
cycles -= is486 ? 1 : 2;
CLOCK_CYCLES(is486 ? 1 : 2);
}
return abrt;
}
@ -430,14 +430,14 @@ static int opMOV_l_r_a16(uint32_t fetchdat)
{
pc++;
regs[fetchdat & 7].l = regs[(fetchdat >> 3) & 7].l;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
fetch_ea_16(fetchdat);
CHECK_WRITE(ea_seg, eaaddr, eaaddr+3);
seteal(regs[reg].l);
cycles -= is486 ? 1 : 2;
CLOCK_CYCLES(is486 ? 1 : 2);
}
return abrt;
}
@ -447,14 +447,14 @@ static int opMOV_l_r_a32(uint32_t fetchdat)
{
pc++;
regs[fetchdat & 7].l = regs[(fetchdat >> 3) & 7].l;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
fetch_ea_32(fetchdat);
CHECK_WRITE(ea_seg, eaaddr, eaaddr+3);
seteal(regs[reg].l);
cycles -= is486 ? 1 : 2;
CLOCK_CYCLES(is486 ? 1 : 2);
}
return abrt;
}
@ -465,7 +465,7 @@ static int opMOV_r_b_a16(uint32_t fetchdat)
{
pc++;
setr8((fetchdat >> 3) & 7, getr8(fetchdat & 7));
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
@ -474,7 +474,7 @@ static int opMOV_r_b_a16(uint32_t fetchdat)
CHECK_READ(ea_seg, eaaddr, eaaddr);
temp = geteab(); if (abrt) return 1;
setr8(reg, temp);
cycles -= is486 ? 1 : 4;
CLOCK_CYCLES(is486 ? 1 : 4);
}
return 0;
}
@ -484,7 +484,7 @@ static int opMOV_r_b_a32(uint32_t fetchdat)
{
pc++;
setr8((fetchdat >> 3) & 7, getr8(fetchdat & 7));
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
@ -493,7 +493,7 @@ static int opMOV_r_b_a32(uint32_t fetchdat)
CHECK_READ(ea_seg, eaaddr, eaaddr);
temp = geteab(); if (abrt) return 1;
setr8(reg, temp);
cycles -= is486 ? 1 : 4;
CLOCK_CYCLES(is486 ? 1 : 4);
}
return 0;
}
@ -503,7 +503,7 @@ static int opMOV_r_w_a16(uint32_t fetchdat)
{
pc++;
regs[(fetchdat >> 3) & 7].w = regs[fetchdat & 7].w;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
@ -512,7 +512,7 @@ static int opMOV_r_w_a16(uint32_t fetchdat)
CHECK_READ(ea_seg, eaaddr, eaaddr+1);
temp = geteaw(); if (abrt) return 1;
regs[reg].w = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
}
return 0;
}
@ -522,7 +522,7 @@ static int opMOV_r_w_a32(uint32_t fetchdat)
{
pc++;
regs[(fetchdat >> 3) & 7].w = regs[fetchdat & 7].w;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
@ -531,7 +531,7 @@ static int opMOV_r_w_a32(uint32_t fetchdat)
CHECK_READ(ea_seg, eaaddr, eaaddr+1);
temp = geteaw(); if (abrt) return 1;
regs[reg].w = temp;
cycles -= (is486) ? 1 : 4;
CLOCK_CYCLES((is486) ? 1 : 4);
}
return 0;
}
@ -541,7 +541,7 @@ static int opMOV_r_l_a16(uint32_t fetchdat)
{
pc++;
regs[(fetchdat >> 3) & 7].l = regs[fetchdat & 7].l;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
@ -550,7 +550,7 @@ static int opMOV_r_l_a16(uint32_t fetchdat)
CHECK_READ(ea_seg, eaaddr, eaaddr+3);
temp = geteal(); if (abrt) return 1;
regs[reg].l = temp;
cycles -= is486 ? 1 : 4;
CLOCK_CYCLES(is486 ? 1 : 4);
}
return 0;
}
@ -560,7 +560,7 @@ static int opMOV_r_l_a32(uint32_t fetchdat)
{
pc++;
regs[(fetchdat >> 3) & 7].l = regs[fetchdat & 7].l;
cycles -= timing_rr;
CLOCK_CYCLES(timing_rr);
}
else
{
@ -569,7 +569,7 @@ static int opMOV_r_l_a32(uint32_t fetchdat)
CHECK_READ(ea_seg, eaaddr, eaaddr+3);
temp = geteal(); if (abrt) return 1;
regs[reg].l = temp;
cycles -= is486 ? 1 : 4;
CLOCK_CYCLES(is486 ? 1 : 4);
}
return 0;
}