From 252cc94215d818e2a056f5af541b2565de132753 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Fri, 2 Jan 2004 20:49:35 +0000 Subject: [PATCH] Fix pop ss and mov ss,val instruction to release the stack mask registers Fix the mov [mem],seg instruction to only save a short Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1528 --- src/cpu/core_dyn_x86/decoder.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/cpu/core_dyn_x86/decoder.h b/src/cpu/core_dyn_x86/decoder.h index 82e8bf1c..98bc9d57 100644 --- a/src/cpu/core_dyn_x86/decoder.h +++ b/src/cpu/core_dyn_x86/decoder.h @@ -555,10 +555,10 @@ skipsave: static void dyn_mov_ev_seg(void) { dyn_get_modrm(); - gen_load_host(&Segs.val[(SegNames) decode.modrm.reg],DREG(TMPW),2); + gen_load_host(&Segs.val[decode.modrm.reg],DREG(TMPW),2); if (decode.modrm.mod<3) { dyn_fill_ea(); - dyn_write_word(DREG(EA),DREG(TMPW),decode.big_op); + dyn_write_word(DREG(EA),DREG(TMPW),false); gen_releasereg(DREG(EA)); } else { gen_dop_word(DOP_MOV,decode.big_op,&DynRegs[decode.modrm.rm],DREG(TMPW)); @@ -572,12 +572,13 @@ static void dyn_mov_seg_ev(void) { if (seg==cs) IllegalOption(); if (decode.modrm.mod<3) { dyn_fill_ea(); - dyn_read_word(DREG(EA),DREG(EA),decode.big_op); + dyn_read_word(DREG(EA),DREG(EA),false); gen_call_function((void *)&CPU_SetSegGeneral,"%Id%Drw",seg,DREG(EA)); } else { gen_call_function((void *)&CPU_SetSegGeneral,"%Id%Dw",seg,&DynRegs[decode.modrm.rm]); } gen_releasereg(&DynRegs[G_ES+seg]); + if (seg==ss) gen_releasereg(DREG(SMASK)); } @@ -592,6 +593,7 @@ static void dyn_pop_seg(SegNames seg) { dyn_pop(DREG(TMPW)); gen_call_function((void*)&CPU_SetSegGeneral,"%Id%Drw",seg,DREG(TMPW)); gen_releasereg(&DynRegs[G_ES+seg]); + if (seg==ss) gen_releasereg(DREG(SMASK)); gen_restoreflags(); } @@ -813,7 +815,7 @@ static CacheBlock * CreateCacheBlock(PhysPt start,bool big,Bitu max_opcodes) { decode.code=start; Bitu cycles=0; decode.block=cache_openblock(); - gen_save_host_direct(&core_dyn.lastblock,(Bit32u)decode.block); + gen_save_host_direct(&cache.block.running,(Bit32u)decode.block); for (i=0;i