summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i960/rxgen960/startup/asmfault.s
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/i960/rxgen960/startup/asmfault.s')
-rw-r--r--c/src/lib/libbsp/i960/rxgen960/startup/asmfault.s44
1 files changed, 44 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i960/rxgen960/startup/asmfault.s b/c/src/lib/libbsp/i960/rxgen960/startup/asmfault.s
new file mode 100644
index 0000000000..666f09e967
--- /dev/null
+++ b/c/src/lib/libbsp/i960/rxgen960/startup/asmfault.s
@@ -0,0 +1,44 @@
+/*
+ * asmfault.s
+ * Last change : 31. 1.95
+ */
+
+ .text
+ .globl _faultHndlEntry
+
+ .text
+
+_faultHndlEntry :
+ /* Raise priority. */
+ ldconst 0x1F0000, r4
+ ldconst 0xFFFFFFFF, r5
+ modpc r4, r4, r5
+ /* Where to keep state of the faulted code. */
+ ldconst _faultBuffer, r3
+ /* Save global registers. */
+ stq g0, 64+0(r3)
+ stq g4, 64+16(r3)
+ stq g8, 64+32(r3)
+ stt g12, 64+48(r3)
+ /* Faulted code's fp (g15) is our pfp. */
+ st pfp, 64+60(r3)
+ /* Make sure locals are in stack. */
+ flushreg
+ /* g3 = & previosFrame[0] */
+ andnot 0xF, pfp, g3
+ /* Save local registers of faulted procedure. */
+ ldq 0(g3), r4
+ stq r4, 0(r3)
+ ldq 16(g3), r4
+ stq r4, 16(r3)
+ ldq 32(g3), r4
+ stq r4, 32(r3)
+ ldq 48(g3), r4
+ stq r4, 48(r3)
+ /* To handling. */
+ mov fp, g0
+ mov r3, g1
+ callx _faultTblHandler
+ /* This point will never be reached ... */
+
+/* End of file */