mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
target/riscv: Pass ra to riscv_csrrw_do64
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20250425152311.804338-3-richard.henderson@linaro.org> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
committed by
Alistair Francis
parent
6c8954cb35
commit
bfc7936f42
+7
-8
@@ -5516,7 +5516,8 @@ static inline RISCVException riscv_csrrw_check(CPURISCVState *env,
|
||||
static RISCVException riscv_csrrw_do64(CPURISCVState *env, int csrno,
|
||||
target_ulong *ret_value,
|
||||
target_ulong new_value,
|
||||
target_ulong write_mask)
|
||||
target_ulong write_mask,
|
||||
uintptr_t ra)
|
||||
{
|
||||
RISCVException ret;
|
||||
target_ulong old_value = 0;
|
||||
@@ -5546,7 +5547,7 @@ static RISCVException riscv_csrrw_do64(CPURISCVState *env, int csrno,
|
||||
if (write_mask) {
|
||||
new_value = (old_value & ~write_mask) | (new_value & write_mask);
|
||||
if (csr_ops[csrno].write) {
|
||||
ret = csr_ops[csrno].write(env, csrno, new_value, 0);
|
||||
ret = csr_ops[csrno].write(env, csrno, new_value, ra);
|
||||
if (ret != RISCV_EXCP_NONE) {
|
||||
return ret;
|
||||
}
|
||||
@@ -5569,7 +5570,7 @@ RISCVException riscv_csrr(CPURISCVState *env, int csrno,
|
||||
return ret;
|
||||
}
|
||||
|
||||
return riscv_csrrw_do64(env, csrno, ret_value, 0, 0);
|
||||
return riscv_csrrw_do64(env, csrno, ret_value, 0, 0, 0);
|
||||
}
|
||||
|
||||
RISCVException riscv_csrrw(CPURISCVState *env, int csrno,
|
||||
@@ -5581,7 +5582,7 @@ RISCVException riscv_csrrw(CPURISCVState *env, int csrno,
|
||||
return ret;
|
||||
}
|
||||
|
||||
return riscv_csrrw_do64(env, csrno, ret_value, new_value, write_mask);
|
||||
return riscv_csrrw_do64(env, csrno, ret_value, new_value, write_mask, 0);
|
||||
}
|
||||
|
||||
static RISCVException riscv_csrrw_do128(CPURISCVState *env, int csrno,
|
||||
@@ -5647,9 +5648,7 @@ RISCVException riscv_csrr_i128(CPURISCVState *env, int csrno,
|
||||
* accesses
|
||||
*/
|
||||
target_ulong old_value;
|
||||
ret = riscv_csrrw_do64(env, csrno, &old_value,
|
||||
(target_ulong)0,
|
||||
(target_ulong)0);
|
||||
ret = riscv_csrrw_do64(env, csrno, &old_value, 0, 0, 0);
|
||||
if (ret == RISCV_EXCP_NONE && ret_value) {
|
||||
*ret_value = int128_make64(old_value);
|
||||
}
|
||||
@@ -5681,7 +5680,7 @@ RISCVException riscv_csrrw_i128(CPURISCVState *env, int csrno,
|
||||
target_ulong old_value;
|
||||
ret = riscv_csrrw_do64(env, csrno, &old_value,
|
||||
int128_getlo(new_value),
|
||||
int128_getlo(write_mask));
|
||||
int128_getlo(write_mask), 0);
|
||||
if (ret == RISCV_EXCP_NONE && ret_value) {
|
||||
*ret_value = int128_make64(old_value);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user