30 lines
511 B
ArmAsm
30 lines
511 B
ArmAsm
|
.define .csb
|
||
|
|
||
|
.text
|
||
|
|
||
|
!r0 contains index
|
||
|
!r1 contains pointer to csb descriptor
|
||
|
.csb:
|
||
|
save[r2,r3]
|
||
|
movd 4(r1), r2 !number of entries
|
||
|
movd r1, r3
|
||
|
1:
|
||
|
addd 8, r3 !find addres of next index
|
||
|
cmpd 0(r3), r0 !compare indices
|
||
|
beq 2f
|
||
|
acbd -1, r2, 1b
|
||
|
3: !r1 now contains right pointer
|
||
|
cmpqd 0, 0(r1) !test destination addres
|
||
|
beq 4f
|
||
|
restore[r2,r3]
|
||
|
movd 0(r1), tos !jump to destination
|
||
|
ret 4
|
||
|
2:
|
||
|
addr 4(r3), r1 !put destination pointer in r1
|
||
|
br 3b
|
||
|
4:
|
||
|
movd ECASE, tos
|
||
|
jsr @.trp
|
||
|
restore[r2,r3]
|
||
|
ret 0
|