summaryrefslogtreecommitdiff
path: root/sanctuary.s
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-03-18 16:23:26 +1100
committerkitty <nepeta@canaglie.net>2026-03-18 16:23:26 +1100
commitd1cee77ae93afa7bf6b6263933c9199e226530ef (patch)
treef39caee90dbbd67edf31bf20c951824fea949bc6 /sanctuary.s
parent6392033c9bee3da55f4e755059331ebf37c1b1c5 (diff)
stack operators
Diffstat (limited to 'sanctuary.s')
-rw-r--r--sanctuary.s67
1 files changed, 67 insertions, 0 deletions
diff --git a/sanctuary.s b/sanctuary.s
index 89db85f..f1a7047 100644
--- a/sanctuary.s
+++ b/sanctuary.s
@@ -588,6 +588,73 @@ defcode "dup", dup, 0
mov r11, [r15]
pspush r11
ret
+
+defcode "2dup", twodup, 0
+ mov r11, [r15]
+ mov r12, [r15+8]
+ pspush r12
+ pspush r11
+ ret
+
+defcode "swap", swap, 0
+ pspop r11
+ pspop r12
+
+ pspush r11
+ pspush r12
+ ret
+
+defcode "over", over, 0
+ mov r11, [r15+8]
+ pspush r11
+ ret
+
+defcode "rot", rot, 0
+ pspop r11
+ pspop r12
+ pspop r13
+ pspush r12
+ pspush r11
+ pspush r13
+ ret
+
+defcode "-rot", dash_rot, 0
+ pspop r11
+ pspop r12
+ pspop r13
+ pspush r11
+ pspush r13
+ pspush r12
+ ret
+
+defcode "r>", from_r, 0
+ pop r12 ; keep return address
+ pop r11
+ pspush r11
+ push r12
+ ret
+
+defcode ">r", to_r, 0
+ pop r12 ; ret addr
+ pspop r11
+ push r11
+ push r12
+ ret
+
+defcode "drop", drop, 0
+ pspop r11
+ ret
+
+defcode "2drop", twodrop, 0
+ pspop r11
+ pspop r11
+ ret
+
+defcode "rdrop", rdrop, 0
+ pop r12 ; ret addr
+ pop r11
+ push r12
+ ret
; }}}
; math + comparison {{{