uskel/apply_over.s
2023-10-31 21:07:03 +01:00

52 lines
995 B
ArmAsm

.include "include/uskel.s"
.include "include/apply.s"
.include "include/intops.s"
.include "include/io.s"
.include "include/main_exit.s"
# | int | int | -> int
.thunkcode const_int
mov %rsi, %rax
mov 020(%rbp), %rsi
enter %rax
# | int | int | -> int
.thunkcode tsnoc_int
mov %rsi, %rax
mov 030(%rbp), %rsi
enter %rax
# | int | -> (| int | int | -> int)
.primop1 if_int
mov 010(%rsi), %rax
mov $const_int, %r10
mov $tsnoc_int, %r11
test %rax, %rax
cmovz %r11, %r10
thunkto %r10, $FUN2_code, %r10, $0
primop1_cont_indirect %r10
.thunkcode main
# make integers
thunkto %r10, $INT_code, $0
thunkto %r11, $INT_code, $1
thunkto %r12, $INT_code, $2
# make the function
thunkto %r13, $FUN1_code, $if_int, $0
# send enough arguments
thunkto %r13, $apply, $4, %r13, %r10, %r11, %r12
# print the result
thunkto %r13, $print, $1, %r13
# make a continuation for main (exit) and set it for print call
thunkto %rsi, $main_exit, $0
# start evaluating the print
enter %r13