mirror of
https://github.com/86Box/86Box.git
synced 2026-02-26 05:53:15 -07:00
Merge remote-tracking branch 'upstream/master' into feature/mtrr
This commit is contained in:
209
src/cpu/cpu.c
209
src/cpu/cpu.c
@@ -18,6 +18,7 @@
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
* Copyright 2018-2021 Fred N. van Kempen.
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
@@ -37,6 +38,9 @@
|
||||
#include <86box/pic.h>
|
||||
#include <86box/pci.h>
|
||||
#include <86box/gdbstub.h>
|
||||
#include <86box/plat_fallthrough.h>
|
||||
#include <86box/plat_unused.h>
|
||||
|
||||
#ifdef USE_DYNAREC
|
||||
# include "codegen.h"
|
||||
#endif
|
||||
@@ -125,6 +129,27 @@ const OpFn *x86_opcodes_REPE;
|
||||
const OpFn *x86_opcodes_REPNE;
|
||||
const OpFn *x86_opcodes_3DNOW;
|
||||
|
||||
const OpFn *x86_2386_opcodes;
|
||||
const OpFn *x86_2386_opcodes_0f;
|
||||
const OpFn *x86_2386_opcodes_d8_a16;
|
||||
const OpFn *x86_2386_opcodes_d8_a32;
|
||||
const OpFn *x86_2386_opcodes_d9_a16;
|
||||
const OpFn *x86_2386_opcodes_d9_a32;
|
||||
const OpFn *x86_2386_opcodes_da_a16;
|
||||
const OpFn *x86_2386_opcodes_da_a32;
|
||||
const OpFn *x86_2386_opcodes_db_a16;
|
||||
const OpFn *x86_2386_opcodes_db_a32;
|
||||
const OpFn *x86_2386_opcodes_dc_a16;
|
||||
const OpFn *x86_2386_opcodes_dc_a32;
|
||||
const OpFn *x86_2386_opcodes_dd_a16;
|
||||
const OpFn *x86_2386_opcodes_dd_a32;
|
||||
const OpFn *x86_2386_opcodes_de_a16;
|
||||
const OpFn *x86_2386_opcodes_de_a32;
|
||||
const OpFn *x86_2386_opcodes_df_a16;
|
||||
const OpFn *x86_2386_opcodes_df_a32;
|
||||
const OpFn *x86_2386_opcodes_REPE;
|
||||
const OpFn *x86_2386_opcodes_REPNE;
|
||||
|
||||
uint16_t cpu_fast_off_count;
|
||||
uint16_t cpu_fast_off_val;
|
||||
uint16_t temp_seg_data[4] = { 0, 0, 0, 0 };
|
||||
@@ -216,7 +241,7 @@ uint32_t cache_index = 0;
|
||||
uint8_t _cache[2048];
|
||||
|
||||
uint64_t cpu_CR4_mask;
|
||||
uint64_t tsc = 0;
|
||||
uint64_t tsc = 0;
|
||||
uint64_t pmc[2] = { 0, 0 };
|
||||
|
||||
double cpu_dmulti;
|
||||
@@ -229,7 +254,7 @@ cyrix_t cyrix;
|
||||
cpu_family_t *cpu_f;
|
||||
CPU *cpu_s;
|
||||
|
||||
uint8_t do_translate = 0;
|
||||
uint8_t do_translate = 0;
|
||||
uint8_t do_translate2 = 0;
|
||||
|
||||
void (*cpu_exec)(int cycs);
|
||||
@@ -455,7 +480,7 @@ SF_FPU_reset(void)
|
||||
fpu_state.fcs = 0;
|
||||
fpu_state.fds = 0;
|
||||
fpu_state.fdp = 0;
|
||||
memset(fpu_state.st_space, 0, sizeof(floatx80)*8);
|
||||
memset(fpu_state.st_space, 0, sizeof(floatx80) * 8);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -541,9 +566,12 @@ cpu_set(void)
|
||||
#else
|
||||
x86_setopcodes(ops_386, ops_386_0f);
|
||||
#endif
|
||||
x86_opcodes_REPE = ops_REPE;
|
||||
x86_opcodes_REPNE = ops_REPNE;
|
||||
x86_opcodes_3DNOW = ops_3DNOW;
|
||||
x86_setopcodes_2386(ops_2386_386, ops_2386_386_0f);
|
||||
x86_opcodes_REPE = ops_REPE;
|
||||
x86_opcodes_REPNE = ops_REPNE;
|
||||
x86_2386_opcodes_REPE = ops_2386_REPE;
|
||||
x86_2386_opcodes_REPNE = ops_2386_REPNE;
|
||||
x86_opcodes_3DNOW = ops_3DNOW;
|
||||
#ifdef USE_DYNAREC
|
||||
x86_dynarec_opcodes_REPE = dynarec_ops_REPE;
|
||||
x86_dynarec_opcodes_REPNE = dynarec_ops_REPNE;
|
||||
@@ -605,6 +633,23 @@ cpu_set(void)
|
||||
x86_opcodes_de_a32 = ops_sf_fpu_de_a32;
|
||||
x86_opcodes_df_a16 = ops_sf_fpu_df_a16;
|
||||
x86_opcodes_df_a32 = ops_sf_fpu_df_a32;
|
||||
|
||||
x86_2386_opcodes_d8_a16 = ops_2386_sf_fpu_d8_a16;
|
||||
x86_2386_opcodes_d8_a32 = ops_2386_sf_fpu_d8_a32;
|
||||
x86_2386_opcodes_d9_a16 = ops_2386_sf_fpu_d9_a16;
|
||||
x86_2386_opcodes_d9_a32 = ops_2386_sf_fpu_d9_a32;
|
||||
x86_2386_opcodes_da_a16 = ops_2386_sf_fpu_da_a16;
|
||||
x86_2386_opcodes_da_a32 = ops_2386_sf_fpu_da_a32;
|
||||
x86_2386_opcodes_db_a16 = ops_2386_sf_fpu_db_a16;
|
||||
x86_2386_opcodes_db_a32 = ops_2386_sf_fpu_db_a32;
|
||||
x86_2386_opcodes_dc_a16 = ops_2386_sf_fpu_dc_a16;
|
||||
x86_2386_opcodes_dc_a32 = ops_2386_sf_fpu_dc_a32;
|
||||
x86_2386_opcodes_dd_a16 = ops_2386_sf_fpu_dd_a16;
|
||||
x86_2386_opcodes_dd_a32 = ops_2386_sf_fpu_dd_a32;
|
||||
x86_2386_opcodes_de_a16 = ops_2386_sf_fpu_de_a16;
|
||||
x86_2386_opcodes_de_a32 = ops_2386_sf_fpu_de_a32;
|
||||
x86_2386_opcodes_df_a16 = ops_2386_sf_fpu_df_a16;
|
||||
x86_2386_opcodes_df_a32 = ops_2386_sf_fpu_df_a32;
|
||||
} else {
|
||||
x86_opcodes_d8_a16 = ops_fpu_d8_a16;
|
||||
x86_opcodes_d8_a32 = ops_fpu_d8_a32;
|
||||
@@ -622,6 +667,23 @@ cpu_set(void)
|
||||
x86_opcodes_de_a32 = ops_fpu_de_a32;
|
||||
x86_opcodes_df_a16 = ops_fpu_df_a16;
|
||||
x86_opcodes_df_a32 = ops_fpu_df_a32;
|
||||
|
||||
x86_2386_opcodes_d8_a16 = ops_2386_fpu_d8_a16;
|
||||
x86_2386_opcodes_d8_a32 = ops_2386_fpu_d8_a32;
|
||||
x86_2386_opcodes_d9_a16 = ops_2386_fpu_d9_a16;
|
||||
x86_2386_opcodes_d9_a32 = ops_2386_fpu_d9_a32;
|
||||
x86_2386_opcodes_da_a16 = ops_2386_fpu_da_a16;
|
||||
x86_2386_opcodes_da_a32 = ops_2386_fpu_da_a32;
|
||||
x86_2386_opcodes_db_a16 = ops_2386_fpu_db_a16;
|
||||
x86_2386_opcodes_db_a32 = ops_2386_fpu_db_a32;
|
||||
x86_2386_opcodes_dc_a16 = ops_2386_fpu_dc_a16;
|
||||
x86_2386_opcodes_dc_a32 = ops_2386_fpu_dc_a32;
|
||||
x86_2386_opcodes_dd_a16 = ops_2386_fpu_dd_a16;
|
||||
x86_2386_opcodes_dd_a32 = ops_2386_fpu_dd_a32;
|
||||
x86_2386_opcodes_de_a16 = ops_2386_fpu_de_a16;
|
||||
x86_2386_opcodes_de_a32 = ops_2386_fpu_de_a32;
|
||||
x86_2386_opcodes_df_a16 = ops_2386_fpu_df_a16;
|
||||
x86_2386_opcodes_df_a32 = ops_2386_fpu_df_a32;
|
||||
}
|
||||
} else {
|
||||
#ifdef USE_DYNAREC
|
||||
@@ -658,6 +720,23 @@ cpu_set(void)
|
||||
x86_opcodes_de_a32 = ops_nofpu_a32;
|
||||
x86_opcodes_df_a16 = ops_nofpu_a16;
|
||||
x86_opcodes_df_a32 = ops_nofpu_a32;
|
||||
|
||||
x86_2386_opcodes_d8_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_d8_a32 = ops_2386_nofpu_a32;
|
||||
x86_2386_opcodes_d9_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_d9_a32 = ops_2386_nofpu_a32;
|
||||
x86_2386_opcodes_da_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_da_a32 = ops_2386_nofpu_a32;
|
||||
x86_2386_opcodes_db_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_db_a32 = ops_2386_nofpu_a32;
|
||||
x86_2386_opcodes_dc_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_dc_a32 = ops_2386_nofpu_a32;
|
||||
x86_2386_opcodes_dd_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_dd_a32 = ops_2386_nofpu_a32;
|
||||
x86_2386_opcodes_de_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_de_a32 = ops_2386_nofpu_a32;
|
||||
x86_2386_opcodes_df_a16 = ops_2386_nofpu_a16;
|
||||
x86_2386_opcodes_df_a32 = ops_2386_nofpu_a32;
|
||||
}
|
||||
|
||||
#ifdef USE_DYNAREC
|
||||
@@ -684,6 +763,7 @@ cpu_set(void)
|
||||
#else
|
||||
x86_setopcodes(ops_186, ops_186_0f);
|
||||
#endif
|
||||
x86_setopcodes_2386(ops_2386_186, ops_2386_186_0f);
|
||||
break;
|
||||
|
||||
case CPU_286:
|
||||
@@ -692,6 +772,7 @@ cpu_set(void)
|
||||
#else
|
||||
x86_setopcodes(ops_286, ops_286_0f);
|
||||
#endif
|
||||
x86_setopcodes_2386(ops_2386_286, ops_2386_286_0f);
|
||||
|
||||
if (fpu_type == FPU_287) {
|
||||
#ifdef USE_DYNAREC
|
||||
@@ -742,6 +823,21 @@ cpu_set(void)
|
||||
x86_opcodes_de_a32 = ops_sf_fpu_287_de_a32;
|
||||
x86_opcodes_df_a16 = ops_sf_fpu_287_df_a16;
|
||||
x86_opcodes_df_a32 = ops_sf_fpu_287_df_a32;
|
||||
|
||||
x86_2386_opcodes_d9_a16 = ops_2386_sf_fpu_287_d9_a16;
|
||||
x86_2386_opcodes_d9_a32 = ops_2386_sf_fpu_287_d9_a32;
|
||||
x86_2386_opcodes_da_a16 = ops_2386_sf_fpu_287_da_a16;
|
||||
x86_2386_opcodes_da_a32 = ops_2386_sf_fpu_287_da_a32;
|
||||
x86_2386_opcodes_db_a16 = ops_2386_sf_fpu_287_db_a16;
|
||||
x86_2386_opcodes_db_a32 = ops_2386_sf_fpu_287_db_a32;
|
||||
x86_2386_opcodes_dc_a16 = ops_2386_sf_fpu_287_dc_a16;
|
||||
x86_2386_opcodes_dc_a32 = ops_2386_sf_fpu_287_dc_a32;
|
||||
x86_2386_opcodes_dd_a16 = ops_2386_sf_fpu_287_dd_a16;
|
||||
x86_2386_opcodes_dd_a32 = ops_2386_sf_fpu_287_dd_a32;
|
||||
x86_2386_opcodes_de_a16 = ops_2386_sf_fpu_287_de_a16;
|
||||
x86_2386_opcodes_de_a32 = ops_2386_sf_fpu_287_de_a32;
|
||||
x86_2386_opcodes_df_a16 = ops_2386_sf_fpu_287_df_a16;
|
||||
x86_2386_opcodes_df_a32 = ops_2386_sf_fpu_287_df_a32;
|
||||
} else {
|
||||
x86_opcodes_d9_a16 = ops_fpu_287_d9_a16;
|
||||
x86_opcodes_d9_a32 = ops_fpu_287_d9_a32;
|
||||
@@ -757,6 +853,21 @@ cpu_set(void)
|
||||
x86_opcodes_de_a32 = ops_fpu_287_de_a32;
|
||||
x86_opcodes_df_a16 = ops_fpu_287_df_a16;
|
||||
x86_opcodes_df_a32 = ops_fpu_287_df_a32;
|
||||
|
||||
x86_2386_opcodes_d9_a16 = ops_2386_fpu_287_d9_a16;
|
||||
x86_2386_opcodes_d9_a32 = ops_2386_fpu_287_d9_a32;
|
||||
x86_2386_opcodes_da_a16 = ops_2386_fpu_287_da_a16;
|
||||
x86_2386_opcodes_da_a32 = ops_2386_fpu_287_da_a32;
|
||||
x86_2386_opcodes_db_a16 = ops_2386_fpu_287_db_a16;
|
||||
x86_2386_opcodes_db_a32 = ops_2386_fpu_287_db_a32;
|
||||
x86_2386_opcodes_dc_a16 = ops_2386_fpu_287_dc_a16;
|
||||
x86_2386_opcodes_dc_a32 = ops_2386_fpu_287_dc_a32;
|
||||
x86_2386_opcodes_dd_a16 = ops_2386_fpu_287_dd_a16;
|
||||
x86_2386_opcodes_dd_a32 = ops_2386_fpu_287_dd_a32;
|
||||
x86_2386_opcodes_de_a16 = ops_2386_fpu_287_de_a16;
|
||||
x86_2386_opcodes_de_a32 = ops_2386_fpu_287_de_a32;
|
||||
x86_2386_opcodes_df_a16 = ops_2386_fpu_287_df_a16;
|
||||
x86_2386_opcodes_df_a32 = ops_2386_fpu_287_df_a32;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -799,11 +910,13 @@ cpu_set(void)
|
||||
#else
|
||||
x86_setopcodes(ops_386, ops_ibm486_0f);
|
||||
#endif
|
||||
x86_setopcodes_2386(ops_2386_386, ops_2386_ibm486_0f);
|
||||
cpu_features = CPU_FEATURE_MSR;
|
||||
/* FALLTHROUGH */
|
||||
fallthrough;
|
||||
case CPU_386SX:
|
||||
case CPU_386DX:
|
||||
if (fpu_type == FPU_287) { /* In case we get Deskpro 386 emulation */
|
||||
/* In case we get Deskpro 386 emulation */
|
||||
if (fpu_type == FPU_287) {
|
||||
#ifdef USE_DYNAREC
|
||||
if (fpu_softfloat) {
|
||||
x86_dynarec_opcodes_d9_a16 = dynarec_ops_sf_fpu_287_d9_a16;
|
||||
@@ -852,6 +965,21 @@ cpu_set(void)
|
||||
x86_opcodes_de_a32 = ops_sf_fpu_287_de_a32;
|
||||
x86_opcodes_df_a16 = ops_sf_fpu_287_df_a16;
|
||||
x86_opcodes_df_a32 = ops_sf_fpu_287_df_a32;
|
||||
|
||||
x86_2386_opcodes_d9_a16 = ops_2386_sf_fpu_287_d9_a16;
|
||||
x86_2386_opcodes_d9_a32 = ops_2386_sf_fpu_287_d9_a32;
|
||||
x86_2386_opcodes_da_a16 = ops_2386_sf_fpu_287_da_a16;
|
||||
x86_2386_opcodes_da_a32 = ops_2386_sf_fpu_287_da_a32;
|
||||
x86_2386_opcodes_db_a16 = ops_2386_sf_fpu_287_db_a16;
|
||||
x86_2386_opcodes_db_a32 = ops_2386_sf_fpu_287_db_a32;
|
||||
x86_2386_opcodes_dc_a16 = ops_2386_sf_fpu_287_dc_a16;
|
||||
x86_2386_opcodes_dc_a32 = ops_2386_sf_fpu_287_dc_a32;
|
||||
x86_2386_opcodes_dd_a16 = ops_2386_sf_fpu_287_dd_a16;
|
||||
x86_2386_opcodes_dd_a32 = ops_2386_sf_fpu_287_dd_a32;
|
||||
x86_2386_opcodes_de_a16 = ops_2386_sf_fpu_287_de_a16;
|
||||
x86_2386_opcodes_de_a32 = ops_2386_sf_fpu_287_de_a32;
|
||||
x86_2386_opcodes_df_a16 = ops_2386_sf_fpu_287_df_a16;
|
||||
x86_2386_opcodes_df_a32 = ops_2386_sf_fpu_287_df_a32;
|
||||
} else {
|
||||
x86_opcodes_d9_a16 = ops_fpu_287_d9_a16;
|
||||
x86_opcodes_d9_a32 = ops_fpu_287_d9_a32;
|
||||
@@ -867,6 +995,21 @@ cpu_set(void)
|
||||
x86_opcodes_de_a32 = ops_fpu_287_de_a32;
|
||||
x86_opcodes_df_a16 = ops_fpu_287_df_a16;
|
||||
x86_opcodes_df_a32 = ops_fpu_287_df_a32;
|
||||
|
||||
x86_2386_opcodes_d9_a16 = ops_2386_fpu_287_d9_a16;
|
||||
x86_2386_opcodes_d9_a32 = ops_2386_fpu_287_d9_a32;
|
||||
x86_2386_opcodes_da_a16 = ops_2386_fpu_287_da_a16;
|
||||
x86_2386_opcodes_da_a32 = ops_2386_fpu_287_da_a32;
|
||||
x86_2386_opcodes_db_a16 = ops_2386_fpu_287_db_a16;
|
||||
x86_2386_opcodes_db_a32 = ops_2386_fpu_287_db_a32;
|
||||
x86_2386_opcodes_dc_a16 = ops_2386_fpu_287_dc_a16;
|
||||
x86_2386_opcodes_dc_a32 = ops_2386_fpu_287_dc_a32;
|
||||
x86_2386_opcodes_dd_a16 = ops_2386_fpu_287_dd_a16;
|
||||
x86_2386_opcodes_dd_a32 = ops_2386_fpu_287_dd_a32;
|
||||
x86_2386_opcodes_de_a16 = ops_2386_fpu_287_de_a16;
|
||||
x86_2386_opcodes_de_a32 = ops_2386_fpu_287_de_a32;
|
||||
x86_2386_opcodes_df_a16 = ops_2386_fpu_287_df_a16;
|
||||
x86_2386_opcodes_df_a32 = ops_2386_fpu_287_df_a32;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -913,6 +1056,7 @@ cpu_set(void)
|
||||
#else
|
||||
x86_setopcodes(ops_386, ops_486_0f);
|
||||
#endif
|
||||
x86_setopcodes_2386(ops_2386_386, ops_2386_486_0f);
|
||||
|
||||
timing_rr = 1; /* register dest - register src */
|
||||
timing_rm = 3; /* register dest - memory src */
|
||||
@@ -952,6 +1096,7 @@ cpu_set(void)
|
||||
#else
|
||||
x86_setopcodes(ops_386, ops_486_0f);
|
||||
#endif
|
||||
x86_setopcodes_2386(ops_2386_386, ops_2386_486_0f);
|
||||
|
||||
timing_rr = 1; /* register dest - register src */
|
||||
timing_rm = 3; /* register dest - memory src */
|
||||
@@ -990,7 +1135,7 @@ cpu_set(void)
|
||||
case CPU_i486DX_SLENH:
|
||||
cpu_features = CPU_FEATURE_CR4 | CPU_FEATURE_VME;
|
||||
cpu_CR4_mask = CR4_VME | CR4_PVI | CR4_VME;
|
||||
/* FALLTHROUGH */
|
||||
fallthrough;
|
||||
case CPU_RAPIDCAD:
|
||||
case CPU_i486SX:
|
||||
case CPU_i486DX:
|
||||
@@ -1004,6 +1149,7 @@ cpu_set(void)
|
||||
#else
|
||||
x86_setopcodes(ops_386, ops_486_0f);
|
||||
#endif
|
||||
x86_setopcodes_2386(ops_2386_386, ops_2386_486_0f);
|
||||
|
||||
timing_rr = 1; /* register dest - register src */
|
||||
timing_rm = 2; /* register dest - memory src */
|
||||
@@ -1302,7 +1448,9 @@ cpu_set(void)
|
||||
x86_setopcodes(ops_386, ops_pentium_0f, dynarec_ops_386, dynarec_ops_pentium_0f);
|
||||
else
|
||||
x86_setopcodes(ops_386, ops_c6x86mx_0f, dynarec_ops_386, dynarec_ops_c6x86mx_0f);
|
||||
// x86_setopcodes(ops_386, ops_c6x86_0f, dynarec_ops_386, dynarec_ops_c6x86_0f);
|
||||
# if 0
|
||||
x86_setopcodes(ops_386, ops_c6x86_0f, dynarec_ops_386, dynarec_ops_c6x86_0f);
|
||||
# endif
|
||||
# else
|
||||
if (cpu_s->cpu_type == CPU_Cx6x86MX)
|
||||
x86_setopcodes(ops_386, ops_c6x86mx_0f);
|
||||
@@ -1310,7 +1458,9 @@ cpu_set(void)
|
||||
x86_setopcodes(ops_386, ops_pentium_0f);
|
||||
else
|
||||
x86_setopcodes(ops_386, ops_c6x86mx_0f);
|
||||
// x86_setopcodes(ops_386, ops_c6x86_0f);
|
||||
# if 0
|
||||
x86_setopcodes(ops_386, ops_c6x86_0f);
|
||||
# endif
|
||||
# endif
|
||||
|
||||
timing_rr = 1; /* register dest - register src */
|
||||
@@ -1615,7 +1765,7 @@ cpu_set(void)
|
||||
break;
|
||||
|
||||
default:
|
||||
fatal("cpu_set : unknown CPU type %llu\n", cpu_s->cpu_type);
|
||||
fatal("cpu_set : unknown CPU type %" PRIu64 "\n", cpu_s->cpu_type);
|
||||
}
|
||||
|
||||
switch (fpu_type) {
|
||||
@@ -1647,9 +1797,13 @@ cpu_set(void)
|
||||
cpu_exec = exec386_dynarec;
|
||||
else
|
||||
#endif
|
||||
cpu_exec = exec386;
|
||||
/* Use exec386 for CPU_IBM486SLC because it can reach 100 MHz. */
|
||||
if ((cpu_s->cpu_type == CPU_IBM486SLC) || (cpu_s->cpu_type > CPU_486DLC))
|
||||
cpu_exec = exec386;
|
||||
else
|
||||
cpu_exec = exec386_2386;
|
||||
} else if (cpu_s->cpu_type >= CPU_286)
|
||||
cpu_exec = exec386;
|
||||
cpu_exec = exec386_2386;
|
||||
else
|
||||
cpu_exec = execx86;
|
||||
mmx_init();
|
||||
@@ -2324,7 +2478,7 @@ cpu_ven_reset(void)
|
||||
case CPU_K6_3:
|
||||
case CPU_K6_2C:
|
||||
msr.amd_psor = (cpu_s->cpu_type >= CPU_K6_3) ? 0x008cULL : 0x018cULL;
|
||||
/* FALLTHROUGH */
|
||||
fallthrough;
|
||||
case CPU_K6_2:
|
||||
#if defined(DEV_BRANCH) && defined(USE_AMD_K5)
|
||||
case CPU_K5:
|
||||
@@ -2338,7 +2492,6 @@ cpu_ven_reset(void)
|
||||
case CPU_PENTIUM2:
|
||||
case CPU_PENTIUM2D:
|
||||
msr.mtrr_cap = 0x00000508ULL;
|
||||
/* FALLTHROUGH */
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2741,6 +2894,10 @@ amd_k_invalid_rdmsr:
|
||||
EAX = msr.ecx187 & 0xffffffff;
|
||||
EDX = msr.ecx187 >> 32;
|
||||
break;
|
||||
case 0x1d9:
|
||||
EAX = msr.debug_ctl & 0xffffffff;
|
||||
EDX = msr.debug_ctl >> 32;
|
||||
break;
|
||||
case 0x1e0:
|
||||
EAX = msr.ecx1e0 & 0xffffffff;
|
||||
EDX = msr.ecx1e0 >> 32;
|
||||
@@ -3121,7 +3278,9 @@ amd_k_invalid_wrmsr:
|
||||
break;
|
||||
case 0x1b:
|
||||
cpu_log("APIC_BASE write: %08X%08X\n", EDX, EAX);
|
||||
// msr.apic_base = EAX | ((uint64_t) EDX << 32);
|
||||
#if 0
|
||||
msr.apic_base = EAX | ((uint64_t) EDX << 32);
|
||||
#endif
|
||||
break;
|
||||
case 0x2a:
|
||||
break;
|
||||
@@ -3192,6 +3351,9 @@ amd_k_invalid_wrmsr:
|
||||
case 0x187:
|
||||
msr.ecx187 = EAX | ((uint64_t) EDX << 32);
|
||||
break;
|
||||
case 0x1d9:
|
||||
msr.debug_ctl = EAX | ((uint64_t) EDX << 32);
|
||||
break;
|
||||
case 0x1e0:
|
||||
msr.ecx1e0 = EAX | ((uint64_t) EDX << 32);
|
||||
break;
|
||||
@@ -3300,7 +3462,7 @@ i686_invalid_wrmsr:
|
||||
}
|
||||
|
||||
static void
|
||||
cpu_write(uint16_t addr, uint8_t val, void *priv)
|
||||
cpu_write(uint16_t addr, uint8_t val, UNUSED(void *priv))
|
||||
{
|
||||
if (addr == 0xf0) {
|
||||
/* Writes to F0 clear FPU error and deassert the interrupt. */
|
||||
@@ -3382,7 +3544,7 @@ cpu_write(uint16_t addr, uint8_t val, void *priv)
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
cpu_read(uint16_t addr, void *priv)
|
||||
cpu_read(uint16_t addr, UNUSED(void *priv))
|
||||
{
|
||||
if (addr == 0xf007)
|
||||
return 0x7f;
|
||||
@@ -3438,11 +3600,18 @@ x86_setopcodes(const OpFn *opcodes, const OpFn *opcodes_0f,
|
||||
#else
|
||||
x86_setopcodes(const OpFn *opcodes, const OpFn *opcodes_0f)
|
||||
{
|
||||
x86_opcodes = opcodes;
|
||||
x86_opcodes = opcodes;
|
||||
x86_opcodes_0f = opcodes_0f;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
x86_setopcodes_2386(const OpFn *opcodes, const OpFn *opcodes_0f)
|
||||
{
|
||||
x86_2386_opcodes = opcodes;
|
||||
x86_2386_opcodes_0f = opcodes_0f;
|
||||
}
|
||||
|
||||
void
|
||||
cpu_update_waitstates(void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user