[PATCH 01/26] sparc: Remove sequences that the B2BST scan script warns about

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Oct 16 05:40:39 UTC 2020


On 29/06/2020 13:27, Daniel Hellstrom wrote:
> From: Daniel Cederman <cederman at gaisler.com>
> 
> ---
>   cpukit/score/cpu/sparc/cpu_asm.S | 6 ++++--
>   cpukit/score/cpu/sparc/syscall.S | 3 ++-
>   2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/cpukit/score/cpu/sparc/cpu_asm.S b/cpukit/score/cpu/sparc/cpu_asm.S
> index d5afd5f..bfad3fb 100644
> --- a/cpukit/score/cpu/sparc/cpu_asm.S
> +++ b/cpukit/score/cpu/sparc/cpu_asm.S
> @@ -683,11 +683,13 @@ isr_dispatch:
>           cmp     %l6, %l7
>           bne,a   .Ldisable_fp
>            andn   %l0, %l5, %l0
> +        st      %g0, [%g6 + SPARC_PER_CPU_FP_OWNER_OFFSET]
>           ba      .Lthread_dispatch_done
> -         st     %g0, [%g6 + SPARC_PER_CPU_FP_OWNER_OFFSET]
> +         nop
>   .Ldisable_fp:
> +        st       %l0, [%fp + ISF_PSR_OFFSET]
>           ba      .Lthread_dispatch_done
> -         st      %l0, [%fp + ISF_PSR_OFFSET]
> +         nop
>   .Lnon_fp_thread_dispatch:
>   #elif defined(SPARC_USE_SYNCHRONOUS_FP_SWITCH)
>           /* Test if we interrupted a floating point thread (PSR[EF] == 1) */
> diff --git a/cpukit/score/cpu/sparc/syscall.S b/cpukit/score/cpu/sparc/syscall.S
> index 4f4ef32..737a501 100644
> --- a/cpukit/score/cpu/sparc/syscall.S
> +++ b/cpukit/score/cpu/sparc/syscall.S
> @@ -218,9 +218,10 @@ SYM(syscall_lazy_fp_switch):
>   .Lfp_save_done:
>   
>   	/* Restore the floating point context if necessary */
> +	st	%g0, [%l4 + %lo(SPARC_THREAD_CONTROL_REGISTERS_FP_CONTEXT_OFFSET)]
>   	cmp	%l6, 0
>   	be	.Lfp_restore_done
> -	 st	%g0, [%l4 + %lo(SPARC_THREAD_CONTROL_REGISTERS_FP_CONTEXT_OFFSET)]
> +	 nop
>   	ldd	[%l6 + SPARC_FP_CONTEXT_OFFSET_F0_F1], %f0
>   	ldd	[%l6 + SPARC_FP_CONTEXT_OFFSET_F2_F3], %f2
>   	ldd	[%l6 + SPARC_FP_CONTEXT_OFFSET_F4_F5], %f4

Some areas use the __FIX_LEON3FT_B2BST define to enable this workaround. 
I am not sure if using the delay slots gives a measurable performance 
boost. It would be good to mention the errata in the documentation and 
give some advice how the workarounds should be applied to RTEMS.

https://docs.rtems.org/branches/master/cpu-supplement/sparc.html

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.


More information about the devel mailing list