summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared/start/start.S
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-22 10:13:27 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-28 16:08:43 +0100
commit6a1b9e41521fffc0abc82cb4426fc0e4ca8ca17e (patch)
tree55facda04d71966fbffe36c1c1b6de7d8dbf547d /c/src/lib/libbsp/sparc/shared/start/start.S
parentscore: Fix thread queue context initialization (diff)
downloadrtems-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.S7
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