Made softfloat work on the dynamic recompiler (not yet enabled in the Settings dialog, needs MMX and FXSAVE/FXRSTOR for softfloat first).
This commit is contained in:
@@ -607,3 +607,51 @@ RecompOpFn recomp_opcodes_REPNE[512] = {
|
|||||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
|
RecompOpFn recomp_opcodes_NULL[512] = {
|
||||||
|
// clang-format off
|
||||||
|
/*16-bit data*/
|
||||||
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
|
/*00*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*10*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*20*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*30*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*40*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*50*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*80*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*90*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*a0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*b0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*c0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*d0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*e0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*32-bit data*/
|
||||||
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
|
/*00*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*10*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*20*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*30*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*40*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*50*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*80*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*90*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*a0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*b0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*c0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*d0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*e0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
// clang-format on
|
||||||
|
};
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ extern RecompOpFn recomp_opcodes_de[512];
|
|||||||
extern RecompOpFn recomp_opcodes_df[512];
|
extern RecompOpFn recomp_opcodes_df[512];
|
||||||
extern RecompOpFn recomp_opcodes_REPE[512];
|
extern RecompOpFn recomp_opcodes_REPE[512];
|
||||||
extern RecompOpFn recomp_opcodes_REPNE[512];
|
extern RecompOpFn recomp_opcodes_REPNE[512];
|
||||||
|
extern RecompOpFn recomp_opcodes_NULL[512];
|
||||||
|
|
||||||
#define REG_EAX 0
|
#define REG_EAX 0
|
||||||
#define REG_ECX 1
|
#define REG_ECX 1
|
||||||
|
|||||||
@@ -883,7 +883,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
|
|
||||||
case 0xd8:
|
case 0xd8:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
||||||
recomp_op_table = recomp_opcodes_d8;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_d8;
|
||||||
opcode_shift = 3;
|
opcode_shift = 3;
|
||||||
opcode_mask = 0x1f;
|
opcode_mask = 0x1f;
|
||||||
over = 1;
|
over = 1;
|
||||||
@@ -893,7 +893,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xd9:
|
case 0xd9:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
||||||
recomp_op_table = recomp_opcodes_d9;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_d9;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -902,7 +902,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xda:
|
case 0xda:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
||||||
recomp_op_table = recomp_opcodes_da;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_da;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -911,7 +911,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdb:
|
case 0xdb:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
||||||
recomp_op_table = recomp_opcodes_db;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_db;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -920,7 +920,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdc:
|
case 0xdc:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
||||||
recomp_op_table = recomp_opcodes_dc;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_dc;
|
||||||
opcode_shift = 3;
|
opcode_shift = 3;
|
||||||
opcode_mask = 0x1f;
|
opcode_mask = 0x1f;
|
||||||
over = 1;
|
over = 1;
|
||||||
@@ -930,7 +930,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdd:
|
case 0xdd:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
||||||
recomp_op_table = recomp_opcodes_dd;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_dd;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -939,7 +939,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xde:
|
case 0xde:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
||||||
recomp_op_table = recomp_opcodes_de;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_de;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -948,7 +948,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdf:
|
case 0xdf:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
||||||
recomp_op_table = recomp_opcodes_df;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_df;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
|
|||||||
@@ -1921,7 +1921,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
|
|
||||||
case 0xd8:
|
case 0xd8:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
||||||
recomp_op_table = recomp_opcodes_d8;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_d8;
|
||||||
opcode_shift = 3;
|
opcode_shift = 3;
|
||||||
opcode_mask = 0x1f;
|
opcode_mask = 0x1f;
|
||||||
over = 1;
|
over = 1;
|
||||||
@@ -1931,7 +1931,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xd9:
|
case 0xd9:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
||||||
recomp_op_table = recomp_opcodes_d9;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_d9;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -1940,7 +1940,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xda:
|
case 0xda:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
||||||
recomp_op_table = recomp_opcodes_da;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_da;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -1949,7 +1949,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdb:
|
case 0xdb:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
||||||
recomp_op_table = recomp_opcodes_db;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_db;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -1958,7 +1958,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdc:
|
case 0xdc:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
||||||
recomp_op_table = recomp_opcodes_dc;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_dc;
|
||||||
opcode_shift = 3;
|
opcode_shift = 3;
|
||||||
opcode_mask = 0x1f;
|
opcode_mask = 0x1f;
|
||||||
over = 1;
|
over = 1;
|
||||||
@@ -1968,7 +1968,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdd:
|
case 0xdd:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
||||||
recomp_op_table = recomp_opcodes_dd;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_dd;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -1977,7 +1977,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xde:
|
case 0xde:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
||||||
recomp_op_table = recomp_opcodes_de;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_de;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -1986,7 +1986,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
break;
|
break;
|
||||||
case 0xdf:
|
case 0xdf:
|
||||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
||||||
recomp_op_table = recomp_opcodes_df;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_df;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
|
|||||||
@@ -439,8 +439,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xd8;
|
last_prefix = 0xd8;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_d8_a32 : (OpFn *) x86_dynarec_opcodes_d8_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
||||||
recomp_op_table = recomp_opcodes_d8;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_d8;
|
||||||
opcode_shift = 3;
|
opcode_shift = 3;
|
||||||
opcode_mask = 0x1f;
|
opcode_mask = 0x1f;
|
||||||
over = 1;
|
over = 1;
|
||||||
@@ -452,8 +452,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xd9;
|
last_prefix = 0xd9;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_d9_a32 : (OpFn *) x86_dynarec_opcodes_d9_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
||||||
recomp_op_table = recomp_opcodes_d9;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_d9;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -464,8 +464,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xda;
|
last_prefix = 0xda;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_da_a32 : (OpFn *) x86_dynarec_opcodes_da_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
||||||
recomp_op_table = recomp_opcodes_da;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_da;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -476,8 +476,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xdb;
|
last_prefix = 0xdb;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_db_a32 : (OpFn *) x86_dynarec_opcodes_db_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
||||||
recomp_op_table = recomp_opcodes_db;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_db;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -488,8 +488,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xdc;
|
last_prefix = 0xdc;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_dc_a32 : (OpFn *) x86_dynarec_opcodes_dc_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
||||||
recomp_op_table = recomp_opcodes_dc;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_dc;
|
||||||
opcode_shift = 3;
|
opcode_shift = 3;
|
||||||
opcode_mask = 0x1f;
|
opcode_mask = 0x1f;
|
||||||
over = 1;
|
over = 1;
|
||||||
@@ -501,8 +501,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xdd;
|
last_prefix = 0xdd;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_dd_a32 : (OpFn *) x86_dynarec_opcodes_dd_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
||||||
recomp_op_table = recomp_opcodes_dd;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_dd;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -513,8 +513,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xde;
|
last_prefix = 0xde;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_de_a32 : (OpFn *) x86_dynarec_opcodes_de_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
||||||
recomp_op_table = recomp_opcodes_de;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_de;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
@@ -525,8 +525,8 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
|||||||
#ifdef DEBUG_EXTRA
|
#ifdef DEBUG_EXTRA
|
||||||
last_prefix = 0xdf;
|
last_prefix = 0xdf;
|
||||||
#endif
|
#endif
|
||||||
op_table = (op_32 & 0x200) ? (OpFn *) x86_dynarec_opcodes_df_a32 : (OpFn *) x86_dynarec_opcodes_df_a16;
|
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
||||||
recomp_op_table = recomp_opcodes_df;
|
recomp_op_table = fpu_softfloat ? recomp_opcodes_NULL : recomp_opcodes_df;
|
||||||
opcode_mask = 0xff;
|
opcode_mask = 0xff;
|
||||||
over = 1;
|
over = 1;
|
||||||
pc_off = -1;
|
pc_off = -1;
|
||||||
|
|||||||
@@ -556,3 +556,52 @@ RecompOpFn recomp_opcodes_df[512] = {
|
|||||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
|
RecompOpFn recomp_opcodes_NULL[512] = {
|
||||||
|
// clang-format off
|
||||||
|
/*16-bit data*/
|
||||||
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
|
/*00*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*10*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*20*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*30*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*40*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*50*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*80*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*90*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*a0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*b0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*c0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*d0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*e0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*32-bit data*/
|
||||||
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
|
/*00*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*10*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*20*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*30*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*40*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*50*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*80*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*90*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*a0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*b0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
/*c0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*d0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*e0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
// clang-format on
|
||||||
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ extern RecompOpFn recomp_opcodes_de[512];
|
|||||||
extern RecompOpFn recomp_opcodes_df[512];
|
extern RecompOpFn recomp_opcodes_df[512];
|
||||||
/*extern RecompOpFn recomp_opcodes_REPE[512];
|
/*extern RecompOpFn recomp_opcodes_REPE[512];
|
||||||
extern RecompOpFn recomp_opcodes_REPNE[512];*/
|
extern RecompOpFn recomp_opcodes_REPNE[512];*/
|
||||||
|
extern RecompOpFn recomp_opcodes_NULL[512];
|
||||||
|
|
||||||
#define REG_EAX 0
|
#define REG_EAX 0
|
||||||
#define REG_ECX 1
|
#define REG_ECX 1
|
||||||
|
|||||||
188
src/cpu/cpu.c
188
src/cpu/cpu.c
@@ -202,7 +202,7 @@ void
|
|||||||
cpu_set_edx(void)
|
cpu_set_edx(void)
|
||||||
{
|
{
|
||||||
EDX = cpu_s->edx_reset;
|
EDX = cpu_s->edx_reset;
|
||||||
if (!cpu_use_dynarec && fpu_softfloat)
|
if (fpu_softfloat)
|
||||||
SF_FPU_reset();
|
SF_FPU_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,22 +457,41 @@ cpu_set(void)
|
|||||||
|
|
||||||
if (hasfpu) {
|
if (hasfpu) {
|
||||||
#ifdef USE_DYNAREC
|
#ifdef USE_DYNAREC
|
||||||
x86_dynarec_opcodes_d8_a16 = dynarec_ops_fpu_d8_a16;
|
if (fpu_softfloat) {
|
||||||
x86_dynarec_opcodes_d8_a32 = dynarec_ops_fpu_d8_a32;
|
x86_dynarec_opcodes_d8_a16 = dynarec_ops_sf_fpu_d8_a16;
|
||||||
x86_dynarec_opcodes_d9_a16 = dynarec_ops_fpu_d9_a16;
|
x86_dynarec_opcodes_d8_a32 = dynarec_ops_sf_fpu_d8_a32;
|
||||||
x86_dynarec_opcodes_d9_a32 = dynarec_ops_fpu_d9_a32;
|
x86_dynarec_opcodes_d9_a16 = dynarec_ops_sf_fpu_d9_a16;
|
||||||
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_da_a16;
|
x86_dynarec_opcodes_d9_a32 = dynarec_ops_sf_fpu_d9_a32;
|
||||||
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_da_a32;
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_sf_fpu_da_a16;
|
||||||
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_db_a16;
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_sf_fpu_da_a32;
|
||||||
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_db_a32;
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_sf_fpu_db_a16;
|
||||||
x86_dynarec_opcodes_dc_a16 = dynarec_ops_fpu_dc_a16;
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_sf_fpu_db_a32;
|
||||||
x86_dynarec_opcodes_dc_a32 = dynarec_ops_fpu_dc_a32;
|
x86_dynarec_opcodes_dc_a16 = dynarec_ops_sf_fpu_dc_a16;
|
||||||
x86_dynarec_opcodes_dd_a16 = dynarec_ops_fpu_dd_a16;
|
x86_dynarec_opcodes_dc_a32 = dynarec_ops_sf_fpu_dc_a32;
|
||||||
x86_dynarec_opcodes_dd_a32 = dynarec_ops_fpu_dd_a32;
|
x86_dynarec_opcodes_dd_a16 = dynarec_ops_sf_fpu_dd_a16;
|
||||||
x86_dynarec_opcodes_de_a16 = dynarec_ops_fpu_de_a16;
|
x86_dynarec_opcodes_dd_a32 = dynarec_ops_sf_fpu_dd_a32;
|
||||||
x86_dynarec_opcodes_de_a32 = dynarec_ops_fpu_de_a32;
|
x86_dynarec_opcodes_de_a16 = dynarec_ops_sf_fpu_de_a16;
|
||||||
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_df_a16;
|
x86_dynarec_opcodes_de_a32 = dynarec_ops_sf_fpu_de_a32;
|
||||||
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_df_a32;
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_sf_fpu_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_sf_fpu_df_a32;
|
||||||
|
} else {
|
||||||
|
x86_dynarec_opcodes_d8_a16 = dynarec_ops_fpu_d8_a16;
|
||||||
|
x86_dynarec_opcodes_d8_a32 = dynarec_ops_fpu_d8_a32;
|
||||||
|
x86_dynarec_opcodes_d9_a16 = dynarec_ops_fpu_d9_a16;
|
||||||
|
x86_dynarec_opcodes_d9_a32 = dynarec_ops_fpu_d9_a32;
|
||||||
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_da_a16;
|
||||||
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_da_a32;
|
||||||
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_db_a16;
|
||||||
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_db_a32;
|
||||||
|
x86_dynarec_opcodes_dc_a16 = dynarec_ops_fpu_dc_a16;
|
||||||
|
x86_dynarec_opcodes_dc_a32 = dynarec_ops_fpu_dc_a32;
|
||||||
|
x86_dynarec_opcodes_dd_a16 = dynarec_ops_fpu_dd_a16;
|
||||||
|
x86_dynarec_opcodes_dd_a32 = dynarec_ops_fpu_dd_a32;
|
||||||
|
x86_dynarec_opcodes_de_a16 = dynarec_ops_fpu_de_a16;
|
||||||
|
x86_dynarec_opcodes_de_a32 = dynarec_ops_fpu_de_a32;
|
||||||
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_df_a32;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (fpu_softfloat) {
|
if (fpu_softfloat) {
|
||||||
x86_opcodes_d8_a16 = ops_sf_fpu_d8_a16;
|
x86_opcodes_d8_a16 = ops_sf_fpu_d8_a16;
|
||||||
@@ -581,20 +600,37 @@ cpu_set(void)
|
|||||||
|
|
||||||
if (fpu_type == FPU_287) {
|
if (fpu_type == FPU_287) {
|
||||||
#ifdef USE_DYNAREC
|
#ifdef USE_DYNAREC
|
||||||
x86_dynarec_opcodes_d9_a16 = dynarec_ops_fpu_287_d9_a16;
|
if (fpu_softfloat) {
|
||||||
x86_dynarec_opcodes_d9_a32 = dynarec_ops_fpu_287_d9_a32;
|
x86_dynarec_opcodes_d9_a16 = dynarec_ops_sf_fpu_287_d9_a16;
|
||||||
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_287_da_a16;
|
x86_dynarec_opcodes_d9_a32 = dynarec_ops_sf_fpu_287_d9_a32;
|
||||||
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_287_da_a32;
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_sf_fpu_287_da_a16;
|
||||||
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_287_db_a16;
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_sf_fpu_287_da_a32;
|
||||||
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_287_db_a32;
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_sf_fpu_287_db_a16;
|
||||||
x86_dynarec_opcodes_dc_a16 = dynarec_ops_fpu_287_dc_a16;
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_sf_fpu_287_db_a32;
|
||||||
x86_dynarec_opcodes_dc_a32 = dynarec_ops_fpu_287_dc_a32;
|
x86_dynarec_opcodes_dc_a16 = dynarec_ops_sf_fpu_287_dc_a16;
|
||||||
x86_dynarec_opcodes_dd_a16 = dynarec_ops_fpu_287_dd_a16;
|
x86_dynarec_opcodes_dc_a32 = dynarec_ops_sf_fpu_287_dc_a32;
|
||||||
x86_dynarec_opcodes_dd_a32 = dynarec_ops_fpu_287_dd_a32;
|
x86_dynarec_opcodes_dd_a16 = dynarec_ops_sf_fpu_287_dd_a16;
|
||||||
x86_dynarec_opcodes_de_a16 = dynarec_ops_fpu_287_de_a16;
|
x86_dynarec_opcodes_dd_a32 = dynarec_ops_sf_fpu_287_dd_a32;
|
||||||
x86_dynarec_opcodes_de_a32 = dynarec_ops_fpu_287_de_a32;
|
x86_dynarec_opcodes_de_a16 = dynarec_ops_sf_fpu_287_de_a16;
|
||||||
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_287_df_a16;
|
x86_dynarec_opcodes_de_a32 = dynarec_ops_sf_fpu_287_de_a32;
|
||||||
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_287_df_a32;
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_sf_fpu_287_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_sf_fpu_287_df_a32;
|
||||||
|
} else {
|
||||||
|
x86_dynarec_opcodes_d9_a16 = dynarec_ops_fpu_287_d9_a16;
|
||||||
|
x86_dynarec_opcodes_d9_a32 = dynarec_ops_fpu_287_d9_a32;
|
||||||
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_287_da_a16;
|
||||||
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_287_da_a32;
|
||||||
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_287_db_a16;
|
||||||
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_287_db_a32;
|
||||||
|
x86_dynarec_opcodes_dc_a16 = dynarec_ops_fpu_287_dc_a16;
|
||||||
|
x86_dynarec_opcodes_dc_a32 = dynarec_ops_fpu_287_dc_a32;
|
||||||
|
x86_dynarec_opcodes_dd_a16 = dynarec_ops_fpu_287_dd_a16;
|
||||||
|
x86_dynarec_opcodes_dd_a32 = dynarec_ops_fpu_287_dd_a32;
|
||||||
|
x86_dynarec_opcodes_de_a16 = dynarec_ops_fpu_287_de_a16;
|
||||||
|
x86_dynarec_opcodes_de_a32 = dynarec_ops_fpu_287_de_a32;
|
||||||
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_287_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_287_df_a32;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (fpu_softfloat) {
|
if (fpu_softfloat) {
|
||||||
x86_opcodes_d9_a16 = ops_sf_fpu_287_d9_a16;
|
x86_opcodes_d9_a16 = ops_sf_fpu_287_d9_a16;
|
||||||
@@ -674,20 +710,37 @@ cpu_set(void)
|
|||||||
case CPU_386DX:
|
case CPU_386DX:
|
||||||
if (fpu_type == FPU_287) { /* In case we get Deskpro 386 emulation */
|
if (fpu_type == FPU_287) { /* In case we get Deskpro 386 emulation */
|
||||||
#ifdef USE_DYNAREC
|
#ifdef USE_DYNAREC
|
||||||
x86_dynarec_opcodes_d9_a16 = dynarec_ops_fpu_287_d9_a16;
|
if (fpu_softfloat) {
|
||||||
x86_dynarec_opcodes_d9_a32 = dynarec_ops_fpu_287_d9_a32;
|
x86_dynarec_opcodes_d9_a16 = dynarec_ops_sf_fpu_287_d9_a16;
|
||||||
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_287_da_a16;
|
x86_dynarec_opcodes_d9_a32 = dynarec_ops_sf_fpu_287_d9_a32;
|
||||||
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_287_da_a32;
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_sf_fpu_287_da_a16;
|
||||||
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_287_db_a16;
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_sf_fpu_287_da_a32;
|
||||||
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_287_db_a32;
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_sf_fpu_287_db_a16;
|
||||||
x86_dynarec_opcodes_dc_a16 = dynarec_ops_fpu_287_dc_a16;
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_sf_fpu_287_db_a32;
|
||||||
x86_dynarec_opcodes_dc_a32 = dynarec_ops_fpu_287_dc_a32;
|
x86_dynarec_opcodes_dc_a16 = dynarec_ops_sf_fpu_287_dc_a16;
|
||||||
x86_dynarec_opcodes_dd_a16 = dynarec_ops_fpu_287_dd_a16;
|
x86_dynarec_opcodes_dc_a32 = dynarec_ops_sf_fpu_287_dc_a32;
|
||||||
x86_dynarec_opcodes_dd_a32 = dynarec_ops_fpu_287_dd_a32;
|
x86_dynarec_opcodes_dd_a16 = dynarec_ops_sf_fpu_287_dd_a16;
|
||||||
x86_dynarec_opcodes_de_a16 = dynarec_ops_fpu_287_de_a16;
|
x86_dynarec_opcodes_dd_a32 = dynarec_ops_sf_fpu_287_dd_a32;
|
||||||
x86_dynarec_opcodes_de_a32 = dynarec_ops_fpu_287_de_a32;
|
x86_dynarec_opcodes_de_a16 = dynarec_ops_sf_fpu_287_de_a16;
|
||||||
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_287_df_a16;
|
x86_dynarec_opcodes_de_a32 = dynarec_ops_sf_fpu_287_de_a32;
|
||||||
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_287_df_a32;
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_sf_fpu_287_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_sf_fpu_287_df_a32;
|
||||||
|
} else {
|
||||||
|
x86_dynarec_opcodes_d9_a16 = dynarec_ops_fpu_287_d9_a16;
|
||||||
|
x86_dynarec_opcodes_d9_a32 = dynarec_ops_fpu_287_d9_a32;
|
||||||
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_287_da_a16;
|
||||||
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_287_da_a32;
|
||||||
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_287_db_a16;
|
||||||
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_287_db_a32;
|
||||||
|
x86_dynarec_opcodes_dc_a16 = dynarec_ops_fpu_287_dc_a16;
|
||||||
|
x86_dynarec_opcodes_dc_a32 = dynarec_ops_fpu_287_dc_a32;
|
||||||
|
x86_dynarec_opcodes_dd_a16 = dynarec_ops_fpu_287_dd_a16;
|
||||||
|
x86_dynarec_opcodes_dd_a32 = dynarec_ops_fpu_287_dd_a32;
|
||||||
|
x86_dynarec_opcodes_de_a16 = dynarec_ops_fpu_287_de_a16;
|
||||||
|
x86_dynarec_opcodes_de_a32 = dynarec_ops_fpu_287_de_a32;
|
||||||
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_287_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_287_df_a32;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (fpu_softfloat) {
|
if (fpu_softfloat) {
|
||||||
x86_opcodes_d9_a16 = ops_sf_fpu_287_d9_a16;
|
x86_opcodes_d9_a16 = ops_sf_fpu_287_d9_a16;
|
||||||
@@ -1114,12 +1167,21 @@ cpu_set(void)
|
|||||||
case CPU_Cx6x86MX:
|
case CPU_Cx6x86MX:
|
||||||
if (cpu_s->cpu_type == CPU_Cx6x86MX) {
|
if (cpu_s->cpu_type == CPU_Cx6x86MX) {
|
||||||
# ifdef USE_DYNAREC
|
# ifdef USE_DYNAREC
|
||||||
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_686_da_a16;
|
if (fpu_softfloat) {
|
||||||
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_686_da_a32;
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_sf_fpu_686_da_a16;
|
||||||
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_686_db_a16;
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_sf_fpu_686_da_a32;
|
||||||
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_686_db_a32;
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_sf_fpu_686_db_a16;
|
||||||
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_686_df_a16;
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_sf_fpu_686_db_a32;
|
||||||
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_686_df_a32;
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_sf_fpu_686_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_sf_fpu_686_df_a32;
|
||||||
|
} else {
|
||||||
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_686_da_a16;
|
||||||
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_686_da_a32;
|
||||||
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_686_db_a16;
|
||||||
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_686_db_a32;
|
||||||
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_686_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_686_df_a32;
|
||||||
|
}
|
||||||
# endif
|
# endif
|
||||||
if (fpu_softfloat) {
|
if (fpu_softfloat) {
|
||||||
x86_opcodes_da_a16 = ops_sf_fpu_686_da_a16;
|
x86_opcodes_da_a16 = ops_sf_fpu_686_da_a16;
|
||||||
@@ -1152,7 +1214,8 @@ cpu_set(void)
|
|||||||
else if (cpu_s->cpu_type == CPU_Cx6x86L)
|
else if (cpu_s->cpu_type == CPU_Cx6x86L)
|
||||||
x86_setopcodes(ops_386, ops_pentium_0f);
|
x86_setopcodes(ops_386, ops_pentium_0f);
|
||||||
else
|
else
|
||||||
x86_setopcodes(ops_386, ops_c6x86_0f);
|
x86_setopcodes(ops_386, ops_c6x86mx_0f);
|
||||||
|
// x86_setopcodes(ops_386, ops_c6x86_0f);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
timing_rr = 1; /* register dest - register src */
|
timing_rr = 1; /* register dest - register src */
|
||||||
@@ -1326,12 +1389,21 @@ cpu_set(void)
|
|||||||
x86_setopcodes(ops_386, ops_pentium2_0f, dynarec_ops_386, dynarec_ops_pentium2_0f);
|
x86_setopcodes(ops_386, ops_pentium2_0f, dynarec_ops_386, dynarec_ops_pentium2_0f);
|
||||||
else
|
else
|
||||||
x86_setopcodes(ops_386, ops_pentiumpro_0f, dynarec_ops_386, dynarec_ops_pentiumpro_0f);
|
x86_setopcodes(ops_386, ops_pentiumpro_0f, dynarec_ops_386, dynarec_ops_pentiumpro_0f);
|
||||||
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_686_da_a16;
|
if (fpu_softfloat) {
|
||||||
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_686_da_a32;
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_sf_fpu_686_da_a16;
|
||||||
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_686_db_a16;
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_sf_fpu_686_da_a32;
|
||||||
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_686_db_a32;
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_sf_fpu_686_db_a16;
|
||||||
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_686_df_a16;
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_sf_fpu_686_db_a32;
|
||||||
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_686_df_a32;
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_sf_fpu_686_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_sf_fpu_686_df_a32;
|
||||||
|
} else {
|
||||||
|
x86_dynarec_opcodes_da_a16 = dynarec_ops_fpu_686_da_a16;
|
||||||
|
x86_dynarec_opcodes_da_a32 = dynarec_ops_fpu_686_da_a32;
|
||||||
|
x86_dynarec_opcodes_db_a16 = dynarec_ops_fpu_686_db_a16;
|
||||||
|
x86_dynarec_opcodes_db_a32 = dynarec_ops_fpu_686_db_a32;
|
||||||
|
x86_dynarec_opcodes_df_a16 = dynarec_ops_fpu_686_df_a16;
|
||||||
|
x86_dynarec_opcodes_df_a32 = dynarec_ops_fpu_686_df_a32;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
if (cpu_s->cpu_type == CPU_PENTIUM2D)
|
if (cpu_s->cpu_type == CPU_PENTIUM2D)
|
||||||
x86_setopcodes(ops_386, ops_pentium2d_0f);
|
x86_setopcodes(ops_386, ops_pentium2d_0f);
|
||||||
|
|||||||
@@ -102,6 +102,38 @@ extern const OpFn dynarec_ops_pentiumpro_0f[1024];
|
|||||||
extern const OpFn dynarec_ops_pentium2_0f[1024];
|
extern const OpFn dynarec_ops_pentium2_0f[1024];
|
||||||
extern const OpFn dynarec_ops_pentium2d_0f[1024];
|
extern const OpFn dynarec_ops_pentium2d_0f[1024];
|
||||||
|
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_d9_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_d9_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_da_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_da_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_db_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_db_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_dc_a16[32];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_dc_a32[32];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_dd_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_dd_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_de_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_de_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_df_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_287_df_a32[256];
|
||||||
|
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_d8_a16[32];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_d8_a32[32];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_d9_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_d9_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_da_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_da_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_db_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_db_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_dc_a16[32];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_dc_a32[32];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_dd_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_dd_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_de_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_de_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_df_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_df_a32[256];
|
||||||
|
|
||||||
extern const OpFn dynarec_ops_fpu_287_d9_a16[256];
|
extern const OpFn dynarec_ops_fpu_287_d9_a16[256];
|
||||||
extern const OpFn dynarec_ops_fpu_287_d9_a32[256];
|
extern const OpFn dynarec_ops_fpu_287_d9_a32[256];
|
||||||
extern const OpFn dynarec_ops_fpu_287_da_a16[256];
|
extern const OpFn dynarec_ops_fpu_287_da_a16[256];
|
||||||
@@ -136,6 +168,13 @@ extern const OpFn dynarec_ops_fpu_df_a32[256];
|
|||||||
extern const OpFn dynarec_ops_nofpu_a16[256];
|
extern const OpFn dynarec_ops_nofpu_a16[256];
|
||||||
extern const OpFn dynarec_ops_nofpu_a32[256];
|
extern const OpFn dynarec_ops_nofpu_a32[256];
|
||||||
|
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_686_da_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_686_da_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_686_db_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_686_db_a32[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_686_df_a16[256];
|
||||||
|
extern const OpFn dynarec_ops_sf_fpu_686_df_a32[256];
|
||||||
|
|
||||||
extern const OpFn dynarec_ops_fpu_686_da_a16[256];
|
extern const OpFn dynarec_ops_fpu_686_da_a16[256];
|
||||||
extern const OpFn dynarec_ops_fpu_686_da_a32[256];
|
extern const OpFn dynarec_ops_fpu_686_da_a32[256];
|
||||||
extern const OpFn dynarec_ops_fpu_686_db_a16[256];
|
extern const OpFn dynarec_ops_fpu_686_db_a16[256];
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ opWAIT(uint32_t fetchdat)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cpu_use_dynarec && fpu_softfloat) {
|
// if (!cpu_use_dynarec && fpu_softfloat) {
|
||||||
|
if (fpu_softfloat) {
|
||||||
if (fpu_state.swd & FPU_SW_Summary) {
|
if (fpu_state.swd & FPU_SW_Summary) {
|
||||||
if (cr0 & 0x20) {
|
if (cr0 & 0x20) {
|
||||||
x86_int(16);
|
x86_int(16);
|
||||||
|
|||||||
Reference in New Issue
Block a user