ack/plat/pdpv7/libsys/signal.s
David Given 4b5a7fee14 Made the cgg and the cg code generator work; use this to beat the PDP/11
backend into shape. It now generates binaries --- no idea whether they work or
not.
2018-02-23 22:31:46 +01:00

89 lines
999 B
ArmAsm

#include "sys.h"
EINVAL = 026
.define _signal
.extern _errno
NSIGNALS = 024
tvect:
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
1:
mov r1,-(sp)
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
sub $tvect+4,r0
asr r0
mov r0,-(sp)
asr (sp)
jsr pc,*dvect(r0)
tst (sp)+
mov (sp)+,r4
mov (sp)+,r3
mov (sp)+,r2
mov (sp)+,r1
mov (sp)+,r0
rtt
_signal:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r1
cmp r1,$NSIGNALS
bhis 2f
mov 6(r5),r0
mov r1,0f+2
asl r1
mov dvect(r1),-(sp)
mov r0,dvect(r1)
mov r0,0f+4
beq 1f
bit $1,r0
bne 1f
asl r1
add $tvect,r1
mov r1,0f+4
1:
sys indir; .data2 0f
bcs 3f
bit $1,r0
beq 1f
mov r0,(sp)
1:
mov (sp)+,r0
mov (sp)+,r5
rts pc
2:
mov $EINVAL,r0
3:
mov r0,_errno
mov $-1,r0
mov (sp)+,r5
rts pc
.sect .data
0:
sys signal
.data2 0, 0
.sect .bss
dvect: .space [NSIGNALS*2]