4b5a7fee14
backend into shape. It now generates binaries --- no idea whether they work or not.
89 lines
999 B
ArmAsm
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]
|