[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug 1885350] Re: RISCV dynamic rounding mode is not behaving correctly
From: |
Alistair Francis |
Subject: |
[Bug 1885350] Re: RISCV dynamic rounding mode is not behaving correctly |
Date: |
Tue, 30 Jun 2020 20:43:10 -0000 |
This does look like incorrect behaviour. I have sent a patch to the
mailing list. You can see the patch here:
cover.1593547870.git.alistair.francis@wdc.com/ea4f280e6f77e734c8e555e3c98d10085ce9f5b6.1593547870.git.alistair.francis@wdc.com/">https://patchew.org/QEMU/cover.1593547870.git.alistair.francis@wdc.com/ea4f280e6f77e734c8e555e3c98d10085ce9f5b6.1593547870.git.alistair.francis@wdc.com/
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1885350
Title:
RISCV dynamic rounding mode is not behaving correctly
Status in QEMU:
New
Bug description:
Hello,
I’ve gone through the RISC-V code in latest QEMU release
(qemu-5.0.0-rc2) and when checking the Floating point encodings I
found the rounding mode is only updated if the opcode field “rm” is
changed “ctx->frm == rm”. But according to RISC-V Volume I:
Unprivileged ISA, there’s a dynamic mode when rm=7 where the rounding
mode is set with frm value.
So for the same rm value (=7) and when changing frm value seeking
different rounding modes, and according to the below code, the
rounding mode won’t be updated. Please correct me if I got this
implementation wrong.
static void gen_set_rm(DisasContext *ctx, int rm)
{
TCGv_i32 t0;
if (ctx->frm == rm) {
return;
}
ctx->frm = rm;
t0 = tcg_const_i32(rm);
gen_helper_set_rounding_mode(cpu_env, t0);
tcg_temp_free_i32(t0);
}
My testcase:
I set statically the rm field in the instruction to 7 and before this
execution I changed the value of frm field in fcsr register. For the 1st time
it worked (according to the code above, the rm is updated so the round mode
will also be updated). But when changing fcsr register an re-execute the
instruction, there's no difference and the rounding mode is the same like the
previous frm value.
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1885350/+subscriptions