diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-22 10:13:27 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-28 16:08:43 +0100 |
commit | 6a1b9e41521fffc0abc82cb4426fc0e4ca8ca17e (patch) | |
tree | 55facda04d71966fbffe36c1c1b6de7d8dbf547d /c/src/lib/libbsp/sparc/shared/start/start.S | |
parent | score: Fix thread queue context initialization (diff) | |
download | rtems-6a1b9e41521fffc0abc82cb4426fc0e4ca8ca17e.tar.bz2 |
sparc: Optimize _ISR_Handler()
Use _Thread_Do_dispatch() instead of _Thread_Dispatch(). Restore the
PSR[EF] state of the interrupted context via new system call
syscall_irqdis_fp in case floating-point support is enabled.
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/start/start.S')
-rw-r--r-- | c/src/lib/libbsp/sparc/shared/start/start.S | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/start/start.S b/c/src/lib/libbsp/sparc/shared/start/start.S index a7ef9fe91f..77d653eb2f 100644 --- a/c/src/lib/libbsp/sparc/shared/start/start.S +++ b/c/src/lib/libbsp/sparc/shared/start/start.S @@ -207,9 +207,14 @@ SYM(CLOCK_SPEED): */ IRQDIS_TRAP(SYM(syscall_irqdis)); ! 89 IRQ Disable syscall trap IRQEN_TRAP(SYM(syscall_irqen)); ! 8A IRQ Enable syscall trap - +#if SPARC_HAS_FPU == 1 + IRQDIS_TRAP(SYM(syscall_irqdis_fp)); ! 8B IRQ disable + ! and set PSR[EF] syscall trap +#else SOFT_TRAP; ! 8B +#endif SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 8C - 8F + SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 90 - 93 SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 94 - 97 SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; ! 98 - 9B |