From dbf641f1c74e76ea1f4ad490d3b3634837be42c7 Mon Sep 17 00:00:00 2001 From: wangyang Date: Tue, 11 Aug 2026 10:50:34 +0800 Subject: [PATCH] [#958] riscv: canonicalize malformed half operands for fclass.h --- arch/riscv/translate.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/riscv/translate.c b/arch/riscv/translate.c index b494feb9a..95fe57ef8 100644 --- a/arch/riscv/translate.c +++ b/arch/riscv/translate.c @@ -3662,7 +3662,10 @@ static void gen_fp_arith(DisasContext *dc, uint32_t opc, int rd, int rs1, int rs if(rm == 0x0) { /* FMV */ gen_helper_fmv_x_h(write_int_rd, cpu_env, cpu_fpr[rs1], rm_reg); } else if(rm == 0x1) { - gen_helper_fclass_h(write_int_rd, cpu_env, cpu_fpr[rs1]); + TCGv_i64 rs1_boxed = tcg_temp_local_new_i64(); + gen_unbox_float(RISCV_HALF_PRECISION, env, rs1_boxed, cpu_fpr[rs1]); + gen_helper_fclass_h(write_int_rd, cpu_env, rs1_boxed); + tcg_temp_free_i64(rs1_boxed); } else { kill_unknown(dc, RISCV_EXCP_ILLEGAL_INST); }