70 lines
735 B
ArmAsm
70 lines
735 B
ArmAsm
/
|
|
/
|
|
|
|
/ catch runtime errors:
|
|
/ if (ierror(errno)) goto place
|
|
/ on call, returns 0
|
|
/ on occurrence of error, returns non-zero
|
|
|
|
.globl ierror.
|
|
.globl erret
|
|
|
|
.globl rerr
|
|
.globl retrn
|
|
|
|
ierror.:zero
|
|
.+2
|
|
mov 2(r3),r0
|
|
mov 2(r0),r1
|
|
mov $errbuf,r0
|
|
1:
|
|
cmp r0,cerrp
|
|
blo 2f
|
|
cmp cerrp,$eerbuf
|
|
blo 3f
|
|
jsr r5,rerr; 120.
|
|
3:
|
|
add $8,cerrp
|
|
br 1f
|
|
2:
|
|
cmp r1,(r0)
|
|
beq 1f
|
|
add $8,r0
|
|
br 1b
|
|
1:
|
|
mov r1,(r0)+
|
|
mov r3,(r0)+
|
|
mov 2(sp),(r0)+
|
|
mov 4(sp),(r0)+
|
|
jmp retrn
|
|
|
|
.data
|
|
erret:
|
|
jmp 9f
|
|
.text
|
|
9:
|
|
mov $errbuf,r0
|
|
cmp (r0),r1
|
|
beq 1f
|
|
add $8,r0
|
|
cmp r0,cerrp
|
|
blo 1b
|
|
rts pc
|
|
1:
|
|
add $8,r0
|
|
mov -(r0),-(sp)
|
|
mov -(r0),-(sp)
|
|
mov $one,-(sp)
|
|
mov -(r0),r3
|
|
jmp retrn
|
|
|
|
.data
|
|
one: 77777; 177777
|
|
zero: 0; 0
|
|
|
|
cerrp: errbuf
|
|
|
|
.bss
|
|
errbuf: .=.+50
|
|
eerbuf:
|