The FP context save/restore makes only sense in the context of FP threads. Update #2270. --- cpukit/score/cpu/sparc/cpu.c | 5 +++++ cpukit/score/cpu/sparc/cpu_asm.S | 24 ++---------------------- 2 files changed, 7 insertions(+), 22 deletions(-)
diff --git a/cpukit/score/cpu/sparc/cpu.c b/cpukit/score/cpu/sparc/cpu.c index ee64b1e..bab0040 100644 --- a/cpukit/score/cpu/sparc/cpu.c +++ b/cpukit/score/cpu/sparc/cpu.c @@ -133,6 +133,11 @@ void _CPU_Initialize(void) { #if (SPARC_HAS_FPU == 1) Context_Control_fp *pointer; + uint32_t psr; + + sparc_get_psr( psr ); + psr |= SPARC_PSR_EF_MASK; + sparc_set_psr( psr ); /* * This seems to be the most appropriate way to obtain an initial diff --git a/cpukit/score/cpu/sparc/cpu_asm.S b/cpukit/score/cpu/sparc/cpu_asm.S index ddb2a13..3fa0532 100644 --- a/cpukit/score/cpu/sparc/cpu_asm.S +++ b/cpukit/score/cpu/sparc/cpu_asm.S @@ -44,17 +44,7 @@ .align 4 PUBLIC(_CPU_Context_save_fp) SYM(_CPU_Context_save_fp): - /* - * The following enables the floating point unit. - */ - - mov %psr, %o1 - sethi %hi(SPARC_PSR_EF_MASK), %o2 - or %o2, %lo(SPARC_PSR_EF_MASK), %o2 - or %o1, %o2, %o1 - mov %o1, %psr ! **** ENABLE FLOAT ACCESS **** - nop; nop; nop; ! Need three nops before EF is - ld [%o0], %o1 ! active due to pipeline delay!!! + ld [%o0], %o1 std %f0, [%o1 + FO_F1_OFFSET] std %f2, [%o1 + F2_F3_OFFSET] std %f4, [%o1 + F4_F5_OFFSET] @@ -90,17 +80,7 @@ SYM(_CPU_Context_save_fp): .align 4 PUBLIC(_CPU_Context_restore_fp) SYM(_CPU_Context_restore_fp): - /* - * The following enables the floating point unit. - */ - - mov %psr, %o1 - sethi %hi(SPARC_PSR_EF_MASK), %o2 - or %o2, %lo(SPARC_PSR_EF_MASK), %o2 - or %o1, %o2, %o1 - mov %o1, %psr ! **** ENABLE FLOAT ACCESS **** - nop; nop; nop; ! Need three nops before EF is - ld [%o0], %o1 ! active due to pipeline delay!!! + ld [%o0], %o1 ldd [%o1 + FO_F1_OFFSET], %f0 ldd [%o1 + F2_F3_OFFSET], %f2 ldd [%o1 + F4_F5_OFFSET], %f4 -- 1.8.4.5 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel