[PATCH for-7.1 v6 34/51] target/nios2: Enable unaligned traps for system mode

Richard Henderson posted 51 patches 3 years, 11 months ago
Maintainers: Chris Wulff <crwulff@gmail.com>, Marek Vasut <marex@denx.de>, Richard Henderson <richard.henderson@linaro.org>, Laurent Vivier <laurent@vivier.eu>, "Alex Bennée" <alex.bennee@linaro.org>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>
[PATCH for-7.1 v6 34/51] target/nios2: Enable unaligned traps for system mode
Posted by Richard Henderson 3 years, 11 months ago
Unaligned traps are optional, but required with an mmu.
Turn them on always, because the fallback behaviour is not
documented (though presumably it discards low bits).

Enable alignment checks in the config file.
Unwind the guest pc properly from do_unaligned_access.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/nios2/helper.c             | 4 ++--
 configs/targets/nios2-softmmu.mak | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/target/nios2/helper.c b/target/nios2/helper.c
index 460032adc0..bf40cff779 100644
--- a/target/nios2/helper.c
+++ b/target/nios2/helper.c
@@ -264,8 +264,8 @@ void nios2_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
     CPUNios2State *env = &cpu->env;
 
     env->ctrl[CR_BADADDR] = addr;
-    env->ctrl[CR_EXCEPTION] = FIELD_DP32(0, CR_EXCEPTION, CAUSE, EXCP_UNALIGN);
-    helper_raise_exception(env, EXCP_UNALIGN);
+    cs->exception_index = EXCP_UNALIGN;
+    cpu_loop_exit_restore(cs, retaddr);
 }
 
 bool nios2_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
diff --git a/configs/targets/nios2-softmmu.mak b/configs/targets/nios2-softmmu.mak
index 9a372f0717..1e93b54cd1 100644
--- a/configs/targets/nios2-softmmu.mak
+++ b/configs/targets/nios2-softmmu.mak
@@ -1 +1,2 @@
 TARGET_ARCH=nios2
+TARGET_ALIGNED_ONLY=y
-- 
2.25.1
Re: [PATCH for-7.1 v6 34/51] target/nios2: Enable unaligned traps for system mode
Posted by Peter Maydell 3 years, 10 months ago
On Thu, 17 Mar 2022 at 05:35, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> Unaligned traps are optional, but required with an mmu.
> Turn them on always, because the fallback behaviour is not
> documented (though presumably it discards low bits).

Mmm; the instruction descriptions just say "the operation
is undefined", so I guess we can do whatever we like :-)

> Enable alignment checks in the config file.
> Unwind the guest pc properly from do_unaligned_access.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  target/nios2/helper.c             | 4 ++--
>  configs/targets/nios2-softmmu.mak | 1 +
>  2 files changed, 3 insertions(+), 2 deletions(-)

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM