From: Xu Liu <[email protected]>
The Zcmt specification says JVT table entries follow the current data
endianness. Support that behavior as described by the specification so
big-endian guests can use JVT tables stored in big-endian form.
Signed-off-by: Xu Liu <[email protected]>
Reviewed-by: Alistair Francis <[email protected]>
Message-ID: <[email protected]>
Signed-off-by: Alistair Francis <[email protected]>
---
target/riscv/tcg/zce_helper.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/target/riscv/tcg/zce_helper.c b/target/riscv/tcg/zce_helper.c
index 15bf0a99c8..c6ba4c1a47 100644
--- a/target/riscv/tcg/zce_helper.c
+++ b/target/riscv/tcg/zce_helper.c
@@ -18,12 +18,14 @@
#include "qemu/osdep.h"
#include "cpu.h"
+#include "internals.h"
#include "exec/helper-proto.h"
#include "accel/tcg/cpu-ldst.h"
target_ulong HELPER(cm_jalt)(CPURISCVState *env, uint32_t index)
{
unsigned mmu_index = cpu_mmu_index(env_cpu(env), true);
+ MemOp endian = mo_endian_env(env);
MemOpIdx oi;
#if !defined(CONFIG_USER_ONLY)
@@ -45,11 +47,11 @@ target_ulong HELPER(cm_jalt)(CPURISCVState *env, uint32_t index)
}
if (xlen == 32) {
- oi = make_memop_idx(MO_LEUL, mmu_index);
+ oi = make_memop_idx(MO_UL | endian, mmu_index);
t0 = base + (index << 2);
target = cpu_ldl_code_mmu(env, t0, oi, 0);
} else {
- oi = make_memop_idx(MO_LEUQ, mmu_index);
+ oi = make_memop_idx(MO_UQ | endian, mmu_index);
t0 = base + (index << 3);
target = cpu_ldq_code_mmu(env, t0, oi, 0);
}
--
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.