From 2146cae4ef92837e32ea98275cf276aa7ac6b06a Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Thu, 28 Apr 2005 18:54:25 +0000 Subject: [PATCH] release eax when fstsw is called Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2199 --- src/cpu/core_dyn_x86/decoder.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/cpu/core_dyn_x86/decoder.h b/src/cpu/core_dyn_x86/decoder.h index 108e0392..2cb67015 100644 --- a/src/cpu/core_dyn_x86/decoder.h +++ b/src/cpu/core_dyn_x86/decoder.h @@ -25,7 +25,7 @@ dyn_fill_ea(); \ gen_call_function((void*)&FPU_ESC ## code ## _EA,"%Id%Dd",decode.modrm.val,DREG(EA)); \ gen_releasereg(DREG(EA)); \ - } \ + } \ } enum REP_Type { @@ -1362,7 +1362,15 @@ restart_prefix: DYN_FPU_ESC(6); break; case 0xdf: - DYN_FPU_ESC(7); + dyn_get_modrm(); + if (decode.modrm.val >= 0xc0) { + if (decode.modrm.val == 0xe0) gen_releasereg(DREG(EAX)); /* FSTSW */ + gen_call_function((void*)&FPU_ESC7_Normal,"%Id",decode.modrm.val); + } else { + dyn_fill_ea(); + gen_call_function((void*)&FPU_ESC7_EA,"%Id%Dd",decode.modrm.val,DREG(EA)); + gen_releasereg(DREG(EA)); + } break; #endif //Loop's