diff options
Diffstat (limited to 'c/src/lib/libcpu/i960/shared/soft_reset_asm.S')
-rw-r--r-- | c/src/lib/libcpu/i960/shared/soft_reset_asm.S | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/i960/shared/soft_reset_asm.S b/c/src/lib/libcpu/i960/shared/soft_reset_asm.S new file mode 100644 index 0000000000..c178aa74bd --- /dev/null +++ b/c/src/lib/libcpu/i960/shared/soft_reset_asm.S @@ -0,0 +1,37 @@ +/* + * void __i960_soft_reset_asm + * + * Flush the register cache and save the important (fp, pfp, sp) registers, + * which are clobbered by the reinit operation. (Not documented, but it + * happens). + * + * This may not be used any longer but it is not being purged completely + * in the move to multilib things. + * + * $Id$ + */ + + .data + .align 4 +_soft_reset_reg_save: + .word 0 + .word 0 + .word 0 + .word 0 + + .globl __i960_soft_reset_asm +__i960_soft_reset_asm: + flushreg # flush register cache mov fp, r4 + mov pfp, r5 + mov sp, r6 + stt r4, _soft_reset_reg_save # save fp, pfp, sp + lda __i960_reset_done, r4 + ldconst 0x300, r5 + sysctl r5, r4, g0 # reinit: clobbers almost all registers +__i960_reset_done: + ldt _soft_reset_reg_save, r4 # restore fp, pfp, sp + mov r4, fp + mov r5, pfp + mov r6, sp + ret + |