41 lines
439 B
ArmAsm
41 lines
439 B
ArmAsm
|
.global csb
|
||
|
ECASE=20
|
||
|
|
||
|
csb:
|
||
|
! case descriptor in %o0
|
||
|
! index in %o1
|
||
|
ld [%o0], %o2 ! default jump address
|
||
|
ld [%o0+4], %o3 ! # entries
|
||
|
inc 8, %o0
|
||
|
tst %o3
|
||
|
be 3f
|
||
|
nop
|
||
|
dec %o3
|
||
|
set 0xffff, %o4
|
||
|
and %o3, %o4, %o5
|
||
|
sll %o5, 3, %o3
|
||
|
1:
|
||
|
ld [%o0+%o3], %o4
|
||
|
cmp %o4, %o1
|
||
|
be 2f
|
||
|
nop
|
||
|
deccc 8, %o3
|
||
|
bge 1b
|
||
|
nop
|
||
|
b 3f
|
||
|
nop
|
||
|
2:
|
||
|
inc 4, %o3
|
||
|
ld [%o0+%o3], %o2
|
||
|
3:
|
||
|
tst %o2
|
||
|
be 4f
|
||
|
nop
|
||
|
jmp %o2
|
||
|
nop
|
||
|
4:
|
||
|
set ECASE, %o0
|
||
|
set trp, %g1
|
||
|
jmp %g1
|
||
|
nop
|