ack/mach/sparc/libem/csa.s
1991-09-20 16:05:17 +00:00

38 lines
502 B
ArmAsm

.global csa
ECASE=20
STACK_CLICK=4
csa:
! jump table address in %o0
! index in %o1
ld [%o0], %o4 ! default address
ld [%o0+4], %o2
subcc %o1, %o2, %o1 ! index - lower bound
bl 1f
ld [%o0+2*4], %o3
cmp %o1, %o3 ! rel. index, upper - lower bound
bgt 1f
nop
sll %o1, 2, %o5
add %o0, %o5, %o3 ! %o3 = @jump address
ld [%o3+12], %o2 ! %o2 = jump address
tst %o2
be 1f
nop
jmp %o2
nop
1:
tst %o4
beq 2f
nop
jmp %o4
nop
2:
mov ECASE, %o0
set trp, %g1
jmp %g1
nop
.align 4