Skip to content

Commit

Permalink
Merge branch 'master' into next
Browse files Browse the repository at this point in the history
  • Loading branch information
realnc committed May 24, 2020
2 parents 9a773c3 + d5573f9 commit 1d6c845
Show file tree
Hide file tree
Showing 9 changed files with 129 additions and 105 deletions.
4 changes: 4 additions & 0 deletions include/fpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ static INLINE void FPU_SET_C3(Bitu C){
if(C) fpu.sw |= 0x4000;
}

static INLINE void FPU_LOG_WARN(Bitu tree, bool ea, Bitu group, Bitu sub) {
LOG(LOG_FPU,LOG_WARN)("ESC %" sBitfs(d) "%s:Unhandled group %" sBitfs(d) " subfunction %" sBitfs(d),tree,ea?" EA":"",group,sub);
}

#define DB_FPU_STACK_CHECK_NONE 0
#define DB_FPU_STACK_CHECK_LOG 1
#define DB_FPU_STACK_CHECK_EXIT 2
Expand Down
1 change: 1 addition & 0 deletions include/logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ struct LOG
void operator()(char const* , char const*, char const*) { }

void operator()(char const* , double , double , double , char const* ) { }
void operator()(char const* , double, char const*, double, double ) {}
}; //add missing operators to here
//try to avoid anything smaller than bit32...
void GFX_ShowMsg(char const* format,...) GCC_ATTRIBUTE(__format__(__printf__, 1, 2));
Expand Down
2 changes: 1 addition & 1 deletion libretro/svn
Original file line number Diff line number Diff line change
@@ -1 +1 @@
r4340
r4345
14 changes: 13 additions & 1 deletion src/cpu/core_dyn_x86/decoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -2040,6 +2040,14 @@ static void dyn_add_iocheck_var(Bit8u accessed_port,Bitu access_size) {
dyn_check_bool_exception_al();
}

static void dyn_xlat(void) {
gen_extend_byte(false,true,DREG(TMPW),DREG(EAX),0);
gen_lea(DREG(TMPW),DREG(TMPW),DREG(EBX),0,0);
if (!decode.big_addr) gen_extend_word(false,DREG(TMPW),DREG(TMPW));
gen_lea(DREG(TMPW),DREG(TMPW),decode.segprefix ? decode.segprefix : DREG(DS),0,0);
dyn_read_byte_release(DREG(TMPW),DREG(EAX),false);
}

#ifdef X86_DYNFPU_DH_ENABLED
#include "dyn_fpu_dh.h"
#define dh_fpu_startup() { \
Expand Down Expand Up @@ -2454,6 +2462,10 @@ static CacheBlock * CreateCacheBlock(CodePageHandler * codepage,PhysPt start,Bit
//GRP2 Eb/Ev,CL
case 0xd2:dyn_grp2_eb(grp2_cl);break;
case 0xd3:dyn_grp2_ev(grp2_cl);break;
// SALC
case 0xd6:gen_needflags();gen_protectflags();gen_dop_byte(DOP_SBB,DREG(EAX),0,DREG(EAX),0);break;
// XLAT
case 0xd7:dyn_xlat();break;
//FPU
#ifdef CPU_FPU
case 0xd8:
Expand Down Expand Up @@ -2624,7 +2636,7 @@ static CacheBlock * CreateCacheBlock(CodePageHandler * codepage,PhysPt start,Bit
}
break;
case 0xf0: //LOCK
break;
goto restart_prefix;
case 0xf2: //REPNE/NZ
decode.rep=REP_NZ;
goto restart_prefix;
Expand Down
48 changes: 25 additions & 23 deletions src/cpu/core_dyn_x86/dyn_fpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ static void dyn_fpu_esc1(){
break;
case 0x02: /* UNKNOWN */
case 0x03: /* ILLEGAL */
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
FPU_LOG_WARN(1,false,group,sub);
break;
case 0x04: /* FTST */
gen_call_function((void*)&FPU_FTST,"");
Expand All @@ -183,7 +183,7 @@ static void dyn_fpu_esc1(){
break;
case 0x06: /* FTSTP (cyrix)*/
case 0x07: /* UNKNOWN */
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
FPU_LOG_WARN(1,false,group,sub);
break;
}
break;
Expand Down Expand Up @@ -211,7 +211,7 @@ static void dyn_fpu_esc1(){
gen_call_function((void*)&FPU_FLDZ,"");
break;
case 0x07: /* ILLEGAL */
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
FPU_LOG_WARN(1,false,group,sub);
break;
}
break;
Expand Down Expand Up @@ -242,7 +242,7 @@ static void dyn_fpu_esc1(){
gen_call_function((void*)&FPU_FINCSTP,"");
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
FPU_LOG_WARN(1,false,group,sub);
break;
}
break;
Expand Down Expand Up @@ -273,12 +273,12 @@ static void dyn_fpu_esc1(){
gen_call_function((void*)&FPU_FCOS,"");
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
FPU_LOG_WARN(1,false,group,sub);
break;
}
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
FPU_LOG_WARN(1,false,group,sub);
break;
}
} else {
Expand All @@ -293,7 +293,7 @@ static void dyn_fpu_esc1(){
gen_call_function((void*)&FPU_FLD_F32,"%Drd%Drd",DREG(EA),DREG(TMPB));
break;
case 0x01: /* UNKNOWN */
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(1,true,group,sub);
break;
case 0x02: /* FST float*/
gen_call_function((void*)&FPU_FST_F32,"%Drd",DREG(EA));
Expand All @@ -315,7 +315,7 @@ static void dyn_fpu_esc1(){
gen_call_function((void *)&FPU_FNSTCW,"%Drd",DREG(EA));
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(1,true,group,sub);
break;
}
}
Expand All @@ -340,12 +340,12 @@ static void dyn_fpu_esc2(){
gen_call_function((void *)&FPU_FPOP,"");
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 2:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(2,false,5,sub);
break;
}
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 2:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(2,false,group,sub);
break;
}
} else {
Expand All @@ -366,7 +366,7 @@ static void dyn_fpu_esc3(){
switch (sub) {
case 0x00: //FNENI
case 0x01: //FNDIS
LOG(LOG_FPU,LOG_ERROR)("8087 only fpu code used esc 3: group 4: subfuntion :%d",sub);
LOG(LOG_FPU,LOG_ERROR)("8087 only fpu code used esc 3: group 4: subfuntion :%" sBitfs(d),sub);
break;
case 0x02: //FNCLEX FCLEX
gen_call_function((void*)&FPU_FCLEX,"");
Expand All @@ -379,11 +379,11 @@ static void dyn_fpu_esc3(){
// LOG(LOG_FPU,LOG_ERROR)("80267 protected mode (un)set. Nothing done");
break;
default:
E_Exit("ESC 3:ILLEGAL OPCODE group %d subfunction %d",group,sub);
E_Exit("ESC 3:ILLEGAL OPCODE group %" sBitfs(d) " subfunction %" sBitfs(d),group,sub);
}
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 3:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(3,false,group,sub);
break;
}
} else {
Expand All @@ -398,7 +398,7 @@ static void dyn_fpu_esc3(){
gen_call_function((void*)&FPU_FLD_I32,"%Drd%Drd",DREG(EA),DREG(TMPB));
break;
case 0x01: /* FISTTP */
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(3,false,1,sub);
break;
case 0x02: /* FIST */
gen_call_function((void*)&FPU_FST_I32,"%Drd",DREG(EA));
Expand All @@ -416,7 +416,8 @@ static void dyn_fpu_esc3(){
gen_call_function((void*)&FPU_FPOP,"");
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(3,true,group,sub);
break;
}
}
}
Expand Down Expand Up @@ -492,7 +493,7 @@ static void dyn_fpu_esc5(){
gen_call_function((void*)&FPU_FPOP,"");
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 5:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(5,false,group,sub);
break;
}
gen_releasereg(DREG(EA));
Expand All @@ -507,7 +508,7 @@ static void dyn_fpu_esc5(){
gen_call_function((void*)&FPU_FLD_F64,"%Drd%Drd",DREG(EA),DREG(TMPB));
break;
case 0x01: /* FISTTP longint*/
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(5,true,1,sub);
break;
case 0x02: /* FST double real*/
gen_call_function((void*)&FPU_FST_F64,"%Drd",DREG(EA));
Expand All @@ -530,7 +531,8 @@ static void dyn_fpu_esc5(){
gen_call_function((void*)&mem_writew,"%Drd%Drd",DREG(EA),DREG(TMPB));
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(5,true,group,sub);
break;
}
}
}
Expand All @@ -553,7 +555,7 @@ static void dyn_fpu_esc6(){
break; /* TODO IS THIS ALLRIGHT ????????? */
case 0x03: /*FCOMPP*/
if(sub != 1) {
LOG(LOG_FPU,LOG_WARN)("ESC 6:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(6,false,3,sub);
return;
}
gen_load_host(&TOP,DREG(EA),4);
Expand Down Expand Up @@ -615,12 +617,12 @@ static void dyn_fpu_esc7(){
gen_mov_host(&fpu.sw,DREG(EAX),2);
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,false,4,sub);
break;
}
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,false,group,sub);
break;
}
} else {
Expand All @@ -632,7 +634,7 @@ static void dyn_fpu_esc7(){
gen_call_function((void*)&FPU_FLD_I16,"%Drd%Drd",DREG(EA),DREG(TMPB));
break;
case 0x01:
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,true,group,sub);
break;
case 0x02: /* FIST Bit16s */
gen_call_function((void*)&FPU_FST_I16,"%Drd",DREG(EA));
Expand Down Expand Up @@ -660,7 +662,7 @@ static void dyn_fpu_esc7(){
gen_call_function((void*)&FPU_FPOP,"");
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,true,group,sub);
break;
}
}
Expand Down
28 changes: 15 additions & 13 deletions src/cpu/core_dyn_x86/dyn_fpu_dh.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ static void dh_fpu_esc1(){
dh_fpu_mem(0xd9);
break;
case 0x01: /* UNKNOWN */
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(1,true,group,sub);
break;
case 0x02: /* FST float*/
dh_fpu_mem(0xd9);
Expand All @@ -211,7 +211,7 @@ static void dh_fpu_esc1(){
gen_call_function((void*)&FPU_FNSTCW_DH,"%Drd",DREG(EA));
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(1,true,group,sub);
break;
}
}
Expand Down Expand Up @@ -239,7 +239,7 @@ static void dh_fpu_esc3(){
switch (sub) {
case 0x00: //FNENI
case 0x01: //FNDIS
LOG(LOG_FPU,LOG_ERROR)("8087 only fpu code used esc 3: group 4: subfuntion :%d",sub);
LOG(LOG_FPU,LOG_ERROR)("8087 only fpu code used esc 3: group 4: subfuntion :%" sBitfs(d),sub);
break;
case 0x02: //FNCLEX FCLEX
cache_addb(0xdb);
Expand All @@ -255,11 +255,11 @@ static void dh_fpu_esc3(){
// LOG(LOG_FPU,LOG_ERROR)("80267 protected mode (un)set. Nothing done");
break;
default:
E_Exit("ESC 3:ILLEGAL OPCODE group %d subfunction %d",group,sub);
E_Exit("ESC 3:ILLEGAL OPCODE group %" sBitfs(d) " subfunction %" sBitfs(d),group,sub);
}
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 3:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(3,false,group,sub);
break;
}
} else {
Expand All @@ -272,7 +272,7 @@ static void dh_fpu_esc3(){
dh_fpu_mem(0xdb);
break;
case 0x01: /* FISTTP */
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(3,true,1,sub);
break;
case 0x02: /* FIST */
dh_fpu_mem(0xdb);
Expand All @@ -291,7 +291,8 @@ static void dh_fpu_esc3(){
gen_call_function((void*)&FPU_FST_80,"%Drd",DREG(EA));
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(3,true,group,sub);
break;
}
}
}
Expand Down Expand Up @@ -323,7 +324,7 @@ static void dh_fpu_esc5(){
dh_fpu_mem(0xdd);
break;
case 0x01: /* FISTTP longint*/
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(5,true,1,sub);
break;
case 0x02: /* FST double real*/
dh_fpu_mem(0xdd);
Expand All @@ -347,7 +348,8 @@ static void dh_fpu_esc5(){
gen_call_function((void*)&FPU_FST_16,"%Drd",DREG(EA));
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(5,true,group,sub);
break;
}
}
}
Expand Down Expand Up @@ -392,12 +394,12 @@ static void dh_fpu_esc7(){
gen_releasereg(DREG(TMPB));
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,false,4,sub);
break;
}
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,false,group,sub);
break;
}
} else {
Expand All @@ -408,7 +410,7 @@ static void dh_fpu_esc7(){
dh_fpu_mem(0xdf);
break;
case 0x01:
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,true,1,sub);
break;
case 0x02: /* FIST Bit16s */
dh_fpu_mem(0xdf);
Expand All @@ -435,7 +437,7 @@ static void dh_fpu_esc7(){
gen_call_function((void*)&FPU_FST_64,"%Drd",DREG(EA));
break;
default:
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
FPU_LOG_WARN(7,true,group,sub);
break;
}
}
Expand Down
Loading

0 comments on commit 1d6c845

Please sign in to comment.