summaryrefslogtreecommitdiff
path: root/sanctuary.s
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-03-28 14:06:55 +1100
committerkitty <nepeta@canaglie.net>2026-03-28 14:06:55 +1100
commit2814698c08e02c65793bd9cbc9437ff56dd61fbe (patch)
tree5a287330fb3d23e2a86e5404586909fe83432f60 /sanctuary.s
parent839e3510d3ad5bece904001a76d65901664ec4da (diff)
wheeee
Diffstat (limited to 'sanctuary.s')
-rw-r--r--sanctuary.s90
1 files changed, 75 insertions, 15 deletions
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