diff --git a/src/cpu/core_dyn_x86/decoder.h b/src/cpu/core_dyn_x86/decoder.h index 4270a024..23a66dd0 100644 --- a/src/cpu/core_dyn_x86/decoder.h +++ b/src/cpu/core_dyn_x86/decoder.h @@ -1582,11 +1582,9 @@ static void dyn_mov_ev_seg(void) { } static void dyn_load_seg(SegNames seg,DynReg * src) { - if (cpu.pmode) { - gen_call_function((void *)&CPU_SetSegGeneral,"%Rd%Id%Drw",DREG(TMPB),seg,src); - dyn_check_bool_exception(DREG(TMPB)); - gen_releasereg(DREG(TMPB)); - } else gen_call_function((void *)CPU_SetSegGeneral,"%Id%Drw",seg,src); + gen_call_function((void *)&CPU_SetSegGeneral,"%Rd%Id%Drw",DREG(TMPB),seg,src); + dyn_check_bool_exception(DREG(TMPB)); + gen_releasereg(DREG(TMPB)); gen_releasereg(&DynRegs[G_ES+seg]); } @@ -1625,18 +1623,12 @@ static void dyn_push_seg(SegNames seg) { } static void dyn_pop_seg(SegNames seg) { - if (!cpu.pmode) { - dyn_pop(DREG(TMPW)); - dyn_load_seg(seg,DREG(TMPW)); - gen_releasereg(DREG(TMPW)); - } else { - gen_releasereg(DREG(ESP)); - gen_call_function((void *)&CPU_PopSeg,"%Rd%Id%Id",DREG(TMPB),seg,decode.big_op); - dyn_check_bool_exception(DREG(TMPB)); - gen_releasereg(DREG(TMPB)); - gen_releasereg(&DynRegs[G_ES+seg]); - gen_releasereg(DREG(ESP)); - } + gen_releasereg(DREG(ESP)); + gen_call_function((void *)&CPU_PopSeg,"%Rd%Id%Id",DREG(TMPB),seg,decode.big_op); + dyn_check_bool_exception(DREG(TMPB)); + gen_releasereg(DREG(TMPB)); + gen_releasereg(&DynRegs[G_ES+seg]); + gen_releasereg(DREG(ESP)); } static void dyn_pop_ev(void) { @@ -1874,17 +1866,13 @@ static void dyn_interrupt(Bitu num) { } static void dyn_add_iocheck(Bitu access_size) { - if (cpu.pmode) { - gen_call_function((void *)&CPU_IO_Exception,"%Dw%Id",DREG(EDX),access_size); - dyn_check_bool_exception_al(); - } + gen_call_function((void *)&CPU_IO_Exception,"%Dw%Id",DREG(EDX),access_size); + dyn_check_bool_exception_al(); } static void dyn_add_iocheck_var(Bit8u accessed_port,Bitu access_size) { - if (cpu.pmode) { - gen_call_function((void *)&CPU_IO_Exception,"%Id%Id",accessed_port,access_size); - dyn_check_bool_exception_al(); - } + gen_call_function((void *)&CPU_IO_Exception,"%Id%Id",accessed_port,access_size); + dyn_check_bool_exception_al(); } #ifdef X86_DYNFPU_DH_ENABLED @@ -2465,13 +2453,13 @@ restart_prefix: case 0xfa: //CLI gen_releasereg(DREG(FLAGS)); gen_call_function((void *)&CPU_CLI,"%Rd",DREG(TMPB)); - if (cpu.pmode) dyn_check_bool_exception(DREG(TMPB)); + dyn_check_bool_exception(DREG(TMPB)); gen_releasereg(DREG(TMPB)); break; case 0xfb: //STI gen_releasereg(DREG(FLAGS)); gen_call_function((void *)&CPU_STI,"%Rd",DREG(TMPB)); - if (cpu.pmode) dyn_check_bool_exception(DREG(TMPB)); + dyn_check_bool_exception(DREG(TMPB)); gen_releasereg(DREG(TMPB)); dyn_check_irqrequest(); if (max_opcodes<=0) max_opcodes=1; //Allow 1 extra opcode diff --git a/src/cpu/core_dynrec/decoder.h b/src/cpu/core_dynrec/decoder.h index 13c47b41..143e50a1 100644 --- a/src/cpu/core_dynrec/decoder.h +++ b/src/cpu/core_dynrec/decoder.h @@ -530,11 +530,11 @@ restart_prefix: case 0xfa: //CLI gen_call_function_raw((void *)&CPU_CLI); - if (cpu.pmode) dyn_check_exception(FC_RETOP); + dyn_check_exception(FC_RETOP); break; case 0xfb: //STI gen_call_function_raw((void *)&CPU_STI); - if (cpu.pmode) dyn_check_exception(FC_RETOP); + dyn_check_exception(FC_RETOP); if (max_opcodes<=0) max_opcodes=1; //Allow 1 extra opcode break; diff --git a/src/cpu/core_dynrec/decoder_opcodes.h b/src/cpu/core_dynrec/decoder_opcodes.h index 29ba55c9..1771f989 100644 --- a/src/cpu/core_dynrec/decoder_opcodes.h +++ b/src/cpu/core_dynrec/decoder_opcodes.h @@ -402,7 +402,7 @@ static void dyn_push_seg(Bit8u seg) { static void dyn_pop_seg(Bit8u seg) { gen_call_function_II((void *)&CPU_PopSeg,seg,decode.big_op); - if (cpu.pmode) dyn_check_exception(FC_RETOP); + dyn_check_exception(FC_RETOP); } static void dyn_push_reg(Bit8u reg) { @@ -468,7 +468,7 @@ static void dyn_segprefix(Bit8u seg) { gen_mov_word_to_reg(FC_RETOP,DRCD_REG_WORD(decode.modrm.rm,false),false); } gen_call_function_IR((void *)&CPU_SetSegGeneral,decode.modrm.reg,FC_RETOP); - if (cpu.pmode) dyn_check_exception(FC_RETOP); + dyn_check_exception(FC_RETOP); } static void dyn_load_seg_off_ea(Bit8u seg) { @@ -484,7 +484,7 @@ static void dyn_load_seg_off_ea(Bit8u seg) { dyn_read_word(FC_ADDR,FC_RETOP,false); gen_call_function_IR((void *)&CPU_SetSegGeneral,seg,FC_RETOP); - if (cpu.pmode) dyn_check_exception(FC_RETOP); + dyn_check_exception(FC_RETOP); gen_restore_reg(FC_OP1); gen_mov_word_from_reg(FC_OP1,DRCD_REG_WORD(decode.modrm.reg,decode.big_op),decode.big_op); @@ -1327,9 +1327,9 @@ static void dyn_write_port_word_direct(Bit8u port) { static void dyn_read_port_byte(void) { gen_mov_word_to_reg(FC_ADDR,DRCD_REG_WORD(DRC_REG_EDX,false),false); gen_extend_word(false,FC_ADDR); - if (cpu.pmode) gen_protect_addr_reg(); + gen_protect_addr_reg(); dyn_add_iocheck(FC_ADDR,1); - if (cpu.pmode) gen_restore_addr_reg(); + gen_restore_addr_reg(); gen_call_function_R((void*)&IO_ReadB,FC_ADDR); gen_mov_byte_from_reg_low(FC_RETOP,DRCD_REG_BYTE(DRC_REG_EAX,0)); } @@ -1337,9 +1337,9 @@ static void dyn_read_port_byte(void) { static void dyn_read_port_word(void) { gen_mov_word_to_reg(FC_ADDR,DRCD_REG_WORD(DRC_REG_EDX,false),false); gen_extend_word(false,FC_ADDR); - if (cpu.pmode) gen_protect_addr_reg(); + gen_protect_addr_reg(); dyn_add_iocheck(FC_ADDR,decode.big_op?4:2); - if (cpu.pmode) gen_restore_addr_reg(); + gen_restore_addr_reg(); gen_call_function_R(decode.big_op?((void*)&IO_ReadD):((void*)&IO_ReadW),FC_ADDR); gen_mov_word_from_reg(FC_RETOP,DRCD_REG_BYTE(DRC_REG_EAX,decode.big_op),decode.big_op); } @@ -1347,22 +1347,22 @@ static void dyn_read_port_word(void) { static void dyn_write_port_byte(void) { gen_mov_word_to_reg(FC_ADDR,DRCD_REG_WORD(DRC_REG_EDX,false),false); gen_extend_word(false,FC_ADDR); - if (cpu.pmode) gen_protect_addr_reg(); + gen_protect_addr_reg(); dyn_add_iocheck(FC_ADDR,1); gen_mov_byte_to_reg_low(FC_RETOP,DRCD_REG_BYTE(DRC_REG_EAX,0)); gen_extend_byte(false,FC_RETOP); - if (cpu.pmode) gen_restore_addr_reg(); + gen_restore_addr_reg(); gen_call_function_RR((void*)&IO_WriteB,FC_ADDR,FC_RETOP); } static void dyn_write_port_word(void) { gen_mov_word_to_reg(FC_ADDR,DRCD_REG_WORD(DRC_REG_EDX,false),false); gen_extend_word(false,FC_ADDR); - if (cpu.pmode) gen_protect_addr_reg(); + gen_protect_addr_reg(); dyn_add_iocheck(FC_ADDR,decode.big_op?4:2); gen_mov_word_to_reg(FC_RETOP,DRCD_REG_WORD(DRC_REG_EAX,decode.big_op),decode.big_op); if (!decode.big_op) gen_extend_word(false,FC_RETOP); - if (cpu.pmode) gen_restore_addr_reg(); + gen_restore_addr_reg(); gen_call_function_RR(decode.big_op?((void*)&IO_WriteD):((void*)&IO_WriteW),FC_ADDR,FC_RETOP); }