diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2017-04-20 15:36:51 -0700 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2017-04-20 15:37:49 -0700 |
commit | 3d5e80125a6e5649c6bdad8d5780e39ea422c67d (patch) | |
tree | 5db65bfac17a6dbbff36d055b0292e9addeb8d90 /arch/arc/include/asm | |
parent | 6492f09e864417d382e22b922ae30693a7ce2982 (diff) | |
download | op-kernel-dev-3d5e80125a6e5649c6bdad8d5780e39ea422c67d.zip op-kernel-dev-3d5e80125a6e5649c6bdad8d5780e39ea422c67d.tar.gz |
ARCv2: entry: save Accumulator register pair (r58:59) if present
Accumulator is present in configs with FPU and/or DSP MPY (mpy > 6)
Instead of doing this in pt_regs (and thus every kernel entry/exit),
this could have been done in context switch (and for user task only) as
currently kernel doesn't clobber these registers for its own accord.
However we will soon start using 64-bit multiply instructions for kernel
which can clobber these. Also gcc folks also plan to start using these
as GPRs, hence better to always save/restore them
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc/include/asm')
-rw-r--r-- | arch/arc/include/asm/entry-arcv2.h | 10 | ||||
-rw-r--r-- | arch/arc/include/asm/ptrace.h | 4 |
2 files changed, 14 insertions, 0 deletions
diff --git a/arch/arc/include/asm/entry-arcv2.h b/arch/arc/include/asm/entry-arcv2.h index aee1a77..ac85380 100644 --- a/arch/arc/include/asm/entry-arcv2.h +++ b/arch/arc/include/asm/entry-arcv2.h @@ -16,6 +16,11 @@ ; ; Now manually save: r12, sp, fp, gp, r25 +#ifdef CONFIG_ARC_HAS_ACCL_REGS + PUSH r59 + PUSH r58 +#endif + PUSH r30 PUSH r12 @@ -75,6 +80,11 @@ POP r12 POP r30 +#ifdef CONFIG_ARC_HAS_ACCL_REGS + POP r58 + POP r59 +#endif + .endm /*------------------------------------------------------------------------*/ diff --git a/arch/arc/include/asm/ptrace.h b/arch/arc/include/asm/ptrace.h index 47111d5..5297faa 100644 --- a/arch/arc/include/asm/ptrace.h +++ b/arch/arc/include/asm/ptrace.h @@ -86,6 +86,10 @@ struct pt_regs { unsigned long r12, r30; +#ifdef CONFIG_ARC_HAS_ACCL_REGS + unsigned long r58, r59; /* ACCL/ACCH used by FPU / DSP MPY */ +#endif + /*------- Below list auto saved by h/w -----------*/ unsigned long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11; |