uskel/include/listops.s
2023-08-06 00:25:53 +02:00

41 lines
735 B
ArmAsm

.ifndef _listops_s_file
_listops_s_file:
.include "include/primops.s"
# | n | list | -> cont
.primop2 list_int_index
mov 010(%rsi), %rdx # the list constructor id, must be 1
cmp $1, %rdx
jne list_int_index_not_found
mov 020(%rbp), %rcx
mov 010(%rcx), %rcx
test %rcx, %rcx
jz list_int_index_found #we are taking 0, all happy, return it
#more probably we need to continue, make replacement thunks
sub $1, %rcx
pushq %rcx
pushq $INT_code
mov %rsp, %r11
pushq 030(%rsi) # tail
push %r11
pushq $2
pushq $list_int_index
mov %rsp, %r11
primop2_cont_indirect %r11
list_int_index_not_found:
movq 0, %rax #fault
list_int_index_found:
mov 020(%rsi), %rax #head
primop2_cont_indirect %rax
.endif # _listops_s_file