diff options
author | Qi Hu <huqi@loongson.cn> | 2022-08-04 21:24:50 +0800 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2022-08-05 08:18:30 -0700 |
commit | 00952d93e0ad3aaba3886803c812549626ac214a (patch) | |
tree | d462cc070d81bb0b7e1b407ed3c2416fcf4c15da | |
parent | 09ed077d7fae5f825e18ff9a2004dcdd1b165edb (diff) | |
download | qemu-00952d93e0ad3aaba3886803c812549626ac214a.zip qemu-00952d93e0ad3aaba3886803c812549626ac214a.tar.gz qemu-00952d93e0ad3aaba3886803c812549626ac214a.tar.bz2 |
target/loongarch: Fix macros SET_FPU_* in cpu.h
The macros SET_FPU_* are used to set corresponding bits of fcsr.
Unfortunately it forgets to set the result and it causes fcsr's
"CAUSE" never being updated. This patch is to fix this bug.
Signed-off-by: Qi Hu <huqi@loongson.cn>
Reviewed-by: Song Gao <gaosong@loongson.cn>
Message-Id: <20220804132450.314329-1-huqi@loongson.cn>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r-- | target/loongarch/cpu.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h index a36349d..dce999a 100644 --- a/target/loongarch/cpu.h +++ b/target/loongarch/cpu.h @@ -47,11 +47,23 @@ FIELD(FCSR0, FLAGS, 16, 5) FIELD(FCSR0, CAUSE, 24, 5) #define GET_FP_CAUSE(REG) FIELD_EX32(REG, FCSR0, CAUSE) -#define SET_FP_CAUSE(REG, V) FIELD_DP32(REG, FCSR0, CAUSE, V) +#define SET_FP_CAUSE(REG, V) \ + do { \ + (REG) = FIELD_DP32(REG, FCSR0, CAUSE, V); \ + } while (0) + #define GET_FP_ENABLES(REG) FIELD_EX32(REG, FCSR0, ENABLES) -#define SET_FP_ENABLES(REG, V) FIELD_DP32(REG, FCSR0, ENABLES, V) +#define SET_FP_ENABLES(REG, V) \ + do { \ + (REG) = FIELD_DP32(REG, FCSR0, ENABLES, V); \ + } while (0) + #define GET_FP_FLAGS(REG) FIELD_EX32(REG, FCSR0, FLAGS) -#define SET_FP_FLAGS(REG, V) FIELD_DP32(REG, FCSR0, FLAGS, V) +#define SET_FP_FLAGS(REG, V) \ + do { \ + (REG) = FIELD_DP32(REG, FCSR0, FLAGS, V); \ + } while (0) + #define UPDATE_FP_FLAGS(REG, V) \ do { \ (REG) |= FIELD_DP32(0, FCSR0, FLAGS, V); \ |