mirror of
https://gitlab.com/qemu-project/qemu.git
synced 2026-08-26 22:23:12 -04:00
target/riscv: enforce even register constraints for Zdinx fcvt pairs
fcvt.d.h and fcvt.h.d access a 64-bit double held in a register pair, so under Zdinx/Zhinxmin the odd-rd (fcvt.d.h) and odd-rs1 (fcvt.h.d) encodings are reserved. Add the missing REQUIRE_EVEN checks so those encodings raise an illegal-instruction exception instead of retiring. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4109 Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: wangyang <wangyang25@otcaix.iscas.ac.cn> Message-ID: <ea287909fd6043e0bbcdbfdcb0cc8063@wangyang25.otcaix.iscas.ac.cn> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
af1e669cef
commit
e68cc2e5cd
1 changed files with 2 additions and 0 deletions
|
|
@ -419,6 +419,7 @@ static bool trans_fcvt_d_h(DisasContext *ctx, arg_fcvt_d_h *a)
|
|||
REQUIRE_FPU;
|
||||
REQUIRE_ZFHMIN_OR_ZHINXMIN(ctx);
|
||||
REQUIRE_ZDINX_OR_D(ctx);
|
||||
REQUIRE_EVEN(ctx, a->rd);
|
||||
|
||||
TCGv_i64 dest = dest_fpr(ctx, a->rd);
|
||||
TCGv_i64 src1 = get_fpr_hs(ctx, a->rs1);
|
||||
|
|
@ -453,6 +454,7 @@ static bool trans_fcvt_h_d(DisasContext *ctx, arg_fcvt_h_d *a)
|
|||
REQUIRE_FPU;
|
||||
REQUIRE_ZFHMIN_OR_ZHINXMIN(ctx);
|
||||
REQUIRE_ZDINX_OR_D(ctx);
|
||||
REQUIRE_EVEN(ctx, a->rs1);
|
||||
|
||||
TCGv_i64 dest = dest_fpr(ctx, a->rd);
|
||||
TCGv_i64 src1 = get_fpr_d(ctx, a->rs1);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue