
516
Evaluating and Programming the 29K RISC Family
add
load
sub
sll
v1,msp, SIGCTX_SIG
0,0,lr2,v1
v1,lr2,1
v1,v1,2
;restore signal number
;get handler index
;point to addresses
;––––––––––––––––––––––––––––––––––––––––––––––––––– call C–level
;Handler must not use HIF services other than the _sigret() type.
const
v0,SigEntry
consth v0,SigEntry
add
v0,v0,v1
load
0,0,v0,v0
;determine if handler registered
cpeq
v1,v0,0
jmpt
v1,NoHandler
nop
calli
lr0,v0
;call C–level signal handler
nop
;
;––––––––––––––––––––––––––––––––––––––––––––––––– default return
NoHandler:
jmp
__sigdfl
nop
;––––––––––––––––––––––––––––––––––––––––––––––––––– support code
raise:jmp
sendsig
add
gr1,rab,0
lower:jmp
sendsig
add
gr1,rfb,0
;
;–––––––––––––––––––––––––––––––––––––––––––––––––––– repair_regs
.macro repair_regs
mtsrim cr,29–1
;restore gr96–gr124
loadm
0,0,gr96,msp
add
msp,msp,29*4
;
popsr
Q,tav,msp
;restore special registers
popsr
IPC,tav,msp
popsr
IPB,tav,msp
popsr
IPA,tav,msp
;
add
msp,msp,3*4
;space for Floating Point
;R–stack already repaired
add
msp,msp,2*4
;repair msp to User mode
pop
lr1,msp
;signal entry value
.endm