From 74cad993376dc269e8389fbf150be9ecc36890c7 Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Sun, 6 Aug 2023 00:25:53 +0200 Subject: fibs work --- include/listops.s | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 include/listops.s (limited to 'include/listops.s') diff --git a/include/listops.s b/include/listops.s new file mode 100644 index 0000000..eb8f6cf --- /dev/null +++ b/include/listops.s @@ -0,0 +1,40 @@ + +.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 -- cgit v1.2.3