@@ -1415,50 +1415,30 @@ intop3b: { int op = ArOpsFR[D_MO(opc)];
14151415 CODE_FLUSH ();
14161416 goto illegal_op ;
14171417 }
1418+ PC += ModRM (opc , PC , _mode );
1419+ Gen (L_LXS2 , _mode );
14181420 if (REALADDR ()) {
1419- PC += ModRM (opc , PC , _mode );
1420- Gen (L_LXS2 , _mode );
14211421 AddrGen (A_SR_SH4 , _mode , Ofs_ES , Ofs_XES );
1422- Gen (L_LXS1 , _mode , REG1 );
14231422 }
14241423 else {
1425- unsigned short sv = 0 ;
1426- unsigned long rv ;
1427- CODE_FLUSH ();
1428- PC += ModRMSim (PC , _mode , OVERR_DS , OVERR_SS );
1429- rv = DataGetWL_U (_mode ,TheCPU .mem_ref );
1430- TheCPU .mem_ref += BT24 (BitDATA16 , _mode );
1431- sv = GetDWord (TheCPU .mem_ref );
1432- TheCPU .err = MAKESEG (_mode , Ofs_ES , sv );
1433- if (TheCPU .err ) return P0 ;
1434- SetCPU_WL (_mode , REG1 , rv );
1435- TheCPU .es = sv ;
1424+ AddrGen (A_SR_PROT , _mode , Ofs_ES , P0 );
14361425 }
1426+ Gen (L_LXS1 , _mode , REG1 );
14371427 break ;
14381428/*c5*/ case LDS :
14391429 if (Fetch (PC + 1 ) >= 0xc0 ) {
14401430 CODE_FLUSH ();
14411431 goto illegal_op ;
14421432 }
1433+ PC += ModRM (opc , PC , _mode );
1434+ Gen (L_LXS2 , _mode );
14431435 if (REALADDR ()) {
1444- PC += ModRM (opc , PC , _mode );
1445- Gen (L_LXS2 , _mode );
14461436 AddrGen (A_SR_SH4 , _mode , Ofs_DS , Ofs_XDS );
1447- Gen (L_LXS1 , _mode , REG1 );
14481437 }
14491438 else {
1450- unsigned short sv = 0 ;
1451- unsigned long rv ;
1452- CODE_FLUSH ();
1453- PC += ModRMSim (PC , _mode , OVERR_DS , OVERR_SS );
1454- rv = DataGetWL_U (_mode ,TheCPU .mem_ref );
1455- TheCPU .mem_ref += BT24 (BitDATA16 , _mode );
1456- sv = GetDWord (TheCPU .mem_ref );
1457- TheCPU .err = MAKESEG (_mode , Ofs_DS , sv );
1458- if (TheCPU .err ) return P0 ;
1459- SetCPU_WL (_mode , REG1 , rv );
1460- TheCPU .ds = sv ;
1439+ AddrGen (A_SR_PROT , _mode , Ofs_DS , P0 );
14611440 }
1441+ Gen (L_LXS1 , _mode , REG1 );
14621442 break ;
14631443/*8e*/ case MOVsrfrm :
14641444 PC += ModRM (opc , PC , _mode |SEGREG |DATA16 |MLOAD );
@@ -3348,75 +3328,45 @@ intop3b: { int op = ArOpsFR[D_MO(opc)];
33483328 CODE_FLUSH ();
33493329 goto illegal_op ;
33503330 }
3331+ PC ++ ; PC += ModRM (opc , PC , _mode );
3332+ Gen (L_LXS2 , _mode );
33513333 if (REALADDR ()) {
3352- PC ++ ; PC += ModRM (opc , PC , _mode );
3353- Gen (L_LXS2 , _mode );
33543334 AddrGen (A_SR_SH4 , _mode , Ofs_SS , Ofs_XSS );
3355- Gen (L_LXS1 , _mode , REG1 );
33563335 }
33573336 else {
3358- unsigned short sv = 0 ;
3359- unsigned long rv ;
3360- CODE_FLUSH ();
3361- PC ++ ; PC += ModRMSim (PC , _mode , OVERR_DS , OVERR_SS );
3362- rv = DataGetWL_U (_mode ,TheCPU .mem_ref );
3363- TheCPU .mem_ref += BT24 (BitDATA16 ,_mode );
3364- sv = GetDWord (TheCPU .mem_ref );
3365- TheCPU .err = MAKESEG (_mode , Ofs_SS , sv );
3366- if (TheCPU .err ) return P0 ;
3367- SetCPU_WL (_mode , REG1 , rv );
3368- TheCPU .ss = sv ;
3337+ AddrGen (A_SR_PROT , _mode , Ofs_SS , P0 );
33693338 }
3339+ Gen (L_LXS1 , _mode , REG1 );
33703340 break ;
33713341 case 0xb4 : /* LFS */
33723342 if (Fetch (PC + 2 ) >= 0xc0 ) {
33733343 CODE_FLUSH ();
33743344 goto illegal_op ;
33753345 }
3346+ PC ++ ; PC += ModRM (opc , PC , _mode );
3347+ Gen (L_LXS2 , _mode );
33763348 if (REALADDR ()) {
3377- PC ++ ; PC += ModRM (opc , PC , _mode );
3378- Gen (L_LXS2 , _mode );
33793349 AddrGen (A_SR_SH4 , _mode , Ofs_FS , Ofs_XFS );
3380- Gen (L_LXS1 , _mode , REG1 );
33813350 }
33823351 else {
3383- unsigned short sv = 0 ;
3384- unsigned long rv ;
3385- CODE_FLUSH ();
3386- PC ++ ; PC += ModRMSim (PC , _mode , OVERR_DS , OVERR_SS );
3387- rv = DataGetWL_U (_mode ,TheCPU .mem_ref );
3388- TheCPU .mem_ref += BT24 (BitDATA16 ,_mode );
3389- sv = GetDWord (TheCPU .mem_ref );
3390- TheCPU .err = MAKESEG (_mode , Ofs_FS , sv );
3391- if (TheCPU .err ) return P0 ;
3392- SetCPU_WL (_mode , REG1 , rv );
3393- TheCPU .fs = sv ;
3352+ AddrGen (A_SR_PROT , _mode , Ofs_FS , P0 );
33943353 }
3354+ Gen (L_LXS1 , _mode , REG1 );
33953355 break ;
33963356 case 0xb5 : /* LGS */
33973357 if (Fetch (PC + 2 ) >= 0xc0 ) {
33983358 CODE_FLUSH ();
33993359 goto illegal_op ;
34003360 }
3361+ PC ++ ; PC += ModRM (opc , PC , _mode );
3362+ Gen (L_LXS2 , _mode );
34013363 if (REALADDR ()) {
3402- PC ++ ; PC += ModRM (opc , PC , _mode );
3403- Gen (L_LXS2 , _mode );
34043364 AddrGen (A_SR_SH4 , _mode , Ofs_GS , Ofs_XGS );
3405- Gen (L_LXS1 , _mode , REG1 );
34063365 }
34073366 else {
3408- unsigned short sv = 0 ;
3409- unsigned long rv ;
3410- CODE_FLUSH ();
3411- PC ++ ; PC += ModRMSim (PC , _mode , OVERR_DS , OVERR_SS );
3412- rv = DataGetWL_U (_mode ,TheCPU .mem_ref );
3413- TheCPU .mem_ref += BT24 (BitDATA16 ,_mode );
3414- sv = GetDWord (TheCPU .mem_ref );
3415- TheCPU .err = MAKESEG (_mode , Ofs_GS , sv );
3416- if (TheCPU .err ) return P0 ;
3417- SetCPU_WL (_mode , REG1 , rv );
3418- TheCPU .gs = sv ;
3367+ AddrGen (A_SR_PROT , _mode , Ofs_GS , P0 );
34193368 }
3369+ Gen (L_LXS1 , _mode , REG1 );
34203370 break ;
34213371 case 0xb6 : /* MOVZXb */
34223372 PC ++ ; PC += ModRM (opc , PC , _mode |MBYTX |MLOAD );
0 commit comments