For 0x32 hack the op to be fcomp; for the others there isn't even anything special to do.
Signed-off-by: Paolo Bonzini <[email protected]> --- target/i386/tcg/translate.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 8f50071a4f4..f47bb5de8b3 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -2777,7 +2777,12 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) break; } break; + case 0x32: /* fcomp5, undocumented op */ + /* map to fcomp; op & 7 == 2 would not pop */ + op = 0x03; + /* fallthrough */ case 0x00 ... 0x07: /* fxxx st, sti */ + case 0x22 ... 0x23: /* fcom2 and fcomp3, undocumented ops */ gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); gen_helper_fp_arith_ST0_FT0(op & 7); @@ -2790,16 +2795,6 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fpop(tcg_env); } break; - case 0x22: /* fcom2, undocumented op */ - gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fcom_ST0_FT0(tcg_env); - break; - case 0x23: /* fcomp3, undocumented op */ - case 0x32: /* fcomp5, undocumented op */ - gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fcom_ST0_FT0(tcg_env); - gen_helper_fpop(tcg_env); - break; case 0x15: /* da/5 */ switch (rm) { case 1: /* fucompp */ -- 2.52.0
