diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/i960/rxgen960/startup/asmfault.s | 44 |
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 */ |