From 2814698c08e02c65793bd9cbc9437ff56dd61fbe Mon Sep 17 00:00:00 2001 From: kitty Date: Sat, 28 Mar 2026 14:06:55 +1100 Subject: wheeee --- sanctuary.s | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 75 insertions(+), 15 deletions(-) (limited to 'sanctuary.s') diff --git a/sanctuary.s b/sanctuary.s index b333966..d37ca5a 100644 --- a/sanctuary.s +++ b/sanctuary.s @@ -253,14 +253,6 @@ defcode "parse", parse, 0 ret ; }}} -defcode "type", type, 0 - pspop rsi - pspop rdx - mov rdi, 1 - mov rax, __NR_write - syscall - ret - ; r9: processing temporary value ; r10: input size ; r11: input addr @@ -339,8 +331,8 @@ defcode "interpret", interpret, 0 jmp .loop .componly: - call dots call abort + jmp .loop .intrpnum: call number @@ -350,17 +342,13 @@ defcode "interpret", interpret, 0 jmp .loop .compl: - ; call dots pspop r11 cmp r11, false je .complnum ; dup immediate? if [imm] else normal then - ; i think this is broken (; not working) call dup - ; call dots call immediate_q - ; call dots pspop r13 cmp r13, true je .callw @@ -370,9 +358,7 @@ defcode "interpret", interpret, 0 jmp .loop .complnum: - ; call dots call number - ; call dots pspop r11 cmp r11, false je .notfound @@ -381,6 +367,7 @@ defcode "interpret", interpret, 0 .notfound: ; error handling should go here + call abort jmp .loop .eof: @@ -661,6 +648,39 @@ defcode "syscall3", syscall3, 0 syscall pspush rax ret + +defcode "syscall4", syscall4, 0 + pspop rax + pspop rdi + pspop rsi + pspop rdx + pspop r10 + syscall + pspush rax + ret + +defcode "syscall5", syscall5, 0 + pspop rax + pspop rdi + pspop rsi + pspop rdx + pspop r10 + pspop r8 + syscall + pspush rax + ret + +defcode "syscall6", syscall6, 0 + pspop rax + pspop rdi + pspop rsi + pspop rdx + pspop r10 + pspop r8 + pspop r9 + syscall + pspush rax + ret ; }}} ; stack {{{ @@ -1010,6 +1030,46 @@ defcode "0>=", zero_greatereq, 0 neg r11 pspush r11 ret + +defcode "u<", uless, 0 + pspop r11 + pspop r12 + cmp r12, r11 + setb r13b + movzx r11, r13b + neg r11 + pspush r11 + ret + +defcode "u>", ugreater, 0 + pspop r11 + pspop r12 + cmp r12, r11 + seta r13b + movzx r11, r13b + neg r11 + pspush r11 + ret + +defcode "u<=", ulesseq, 0 + pspop r11 + pspop r12 + cmp r12, r11 + setbe r13b + movzx r11, r13b + neg r11 + pspush r11 + ret + +defcode "u>=", ugreatereq, 0 + pspop r11 + pspop r12 + cmp r12, r11 + setae r13b + movzx r11, r13b + neg r11 + pspush r11 + ret ; }}} defcode "branch", branch, 0 -- cgit v1.2.3