On 12/10/25 07:16, Paolo Bonzini wrote:
> For 0x32 hack the op to be fcomp; for the others there isn't even anything special
> to do.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> target/i386/tcg/translate.c | 15 +++++----------
> 1 file changed, 5 insertions(+), 10 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
>
> 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 */