aboutsummaryrefslogtreecommitdiff
path: root/target/riscv
diff options
context:
space:
mode:
authorAlistair Francis <alistair.francis@wdc.com>2020-01-31 17:02:44 -0800
committerPalmer Dabbelt <palmerdabbelt@google.com>2020-02-27 13:45:47 -0800
commit29409c1d921d607873268671bf11a088efb5558e (patch)
treeca19b70bdab0008d549da3e0bdc486967d3e1c10 /target/riscv
parente28eaed87902c5e852c3ed043b27204e879aa4e2 (diff)
downloadqemu-29409c1d921d607873268671bf11a088efb5558e.zip
qemu-29409c1d921d607873268671bf11a088efb5558e.tar.gz
qemu-29409c1d921d607873268671bf11a088efb5558e.tar.bz2
target/riscv: Disable guest FP support based on virtual status
When the Hypervisor extension is in use we only enable floating point support when both status and vsstatus have enabled floating point support. Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
Diffstat (limited to 'target/riscv')
-rw-r--r--target/riscv/cpu_helper.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
index 895b6ca..d9a29d7 100644
--- a/target/riscv/cpu_helper.c
+++ b/target/riscv/cpu_helper.c
@@ -99,6 +99,9 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
bool riscv_cpu_fp_enabled(CPURISCVState *env)
{
if (env->mstatus & MSTATUS_FS) {
+ if (riscv_cpu_virt_enabled(env) && !(env->mstatus_hs & MSTATUS_FS)) {
+ return false;
+ }
return true;
}