diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2025-09-16 07:22:15 -0700 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2025-09-25 15:42:34 +0100 |
| commit | 1e3c93b161d721da5528041c8388b6d5931c0f48 (patch) | |
| tree | e036d2d09d2c011f28c5c2e511df2ae40aec0830 /target/arm/helper.c | |
| parent | f570b394d2cc4d1c8128dd6c2b0493b9d58bc296 (diff) | |
| download | focaccia-qemu-1e3c93b161d721da5528041c8388b6d5931c0f48.tar.gz focaccia-qemu-1e3c93b161d721da5528041c8388b6d5931c0f48.zip | |
target/arm: Replace cpreg_field_is_64bit with cpreg_field_type
Prepare for 128-bit fields by using a better query api. Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'target/arm/helper.c')
| -rw-r--r-- | target/arm/helper.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/target/arm/helper.c b/target/arm/helper.c index fe298670f1..26941ecd4f 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -63,20 +63,28 @@ int compare_u64(const void *a, const void *b) uint64_t raw_read(CPUARMState *env, const ARMCPRegInfo *ri) { assert(ri->fieldoffset); - if (cpreg_field_is_64bit(ri)) { + switch (cpreg_field_type(ri)) { + case MO_64: return CPREG_FIELD64(env, ri); - } else { + case MO_32: return CPREG_FIELD32(env, ri); + default: + g_assert_not_reached(); } } void raw_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value) { assert(ri->fieldoffset); - if (cpreg_field_is_64bit(ri)) { + switch (cpreg_field_type(ri)) { + case MO_64: CPREG_FIELD64(env, ri) = value; - } else { + break; + case MO_32: CPREG_FIELD32(env, ri) = value; + break; + default: + g_assert_not_reached(); } } @@ -2754,7 +2762,7 @@ static void vmsa_ttbr_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value) { /* If the ASID changes (with a 64-bit write), we must flush the TLB. */ - if (cpreg_field_is_64bit(ri) && + if (cpreg_field_type(ri) == MO_64 && extract64(raw_read(env, ri) ^ value, 48, 16) != 0) { ARMCPU *cpu = env_archcpu(env); tlb_flush(CPU(cpu)); |