summaryrefslogtreecommitdiff
path: root/sanctuary.s
diff options
context:
space:
mode:
Diffstat (limited to 'sanctuary.s')
-rw-r--r--sanctuary.s51
1 files changed, 28 insertions, 23 deletions
diff --git a/sanctuary.s b/sanctuary.s
index 53749cc..7c47326 100644
--- a/sanctuary.s
+++ b/sanctuary.s
@@ -513,16 +513,11 @@ defcode "char", char, 0
pspush r11
ret
-defcode "(execute)", do_execute, 0
+defcode "execute", execute, 0
pspop r11
call r11
ret
-defcode "execute", execute, 0
- call to_body
- call do_execute
- ret
-
; number {{{
defcode "number", number, 0 ; ( c-addr u -- ?n flag )
pspop r11 ; u
@@ -720,6 +715,12 @@ defcode "!", store, 0
mov qword [r11], r12
ret
+defcode "d!", dstore, 0
+ pspop r11
+ pspop r12
+ mov dword [r11], r12d
+ ret
+
defcode "c!", cstore, 0
pspop r11
pspop r12
@@ -740,26 +741,26 @@ defcode "-!", minusstore, 0
defcode ",", comma, 0
pspop r11
- mov r12, [here]
+ mov r12, [dp]
mov qword [r12], r11
add r12, 8
- mov qword [here], r12
+ mov qword [dp], r12
ret
defcode "d,", d_comma, 0
pspop r11
- mov r12, [here]
+ mov r12, [dp]
mov dword [r12], r11d
- inc r12
- mov qword [here], r12
+ add r12, 4
+ mov qword [dp], r12
ret
defcode "c,", c_comma, 0
pspop r11
- mov r12, [here]
+ mov r12, [dp]
mov byte [r12], r11b
inc r12
- mov qword [here], r12
+ mov qword [dp], r12
ret
defcode "cmove", _cmove, 0
@@ -825,21 +826,21 @@ defcode "/mod", divmod, 0
defcode "and", _and, 0
pspop r11
- and [r14], r11
+ and [r15], r11
ret
defcode "or", _or, 0
pspop r11
- or [r14], r11
+ or [r15], r11
ret
defcode "xor", _xor, 0
pspop r11
- xor [r14], r11
+ xor [r15], r11
ret
defcode "invert", invert, 0
- not qword [r14]
+ not qword [r15]
ret
defcode "*/mod", starslashmod, 0
@@ -970,20 +971,24 @@ defcode "0>=", zero_greatereq, 0
; }}}
defcode "branch", branch, 0
- mov r12, [here]
+ mov r12, [dp]
mov byte [r12], 0xe9
inc r12
- mov qword [here], r12
+ mov qword [dp], r12
ret
+; 4d 8b 1f mov r11, qword [r15]
+; 4d 8d 7f 08 lea r15, [r15+8]
+; 4d 85 db test r11, r11
+; 0f 84 [REL] je [REL]
defcode "?branch", q_branch, 0
- mov r12, [here]
- mov r11, 0x4d08768d4d1e8b4d ; pspop r11, first bit of test r11, r11
+ mov r12, [dp]
+ mov r11, 0x4d087f8d4d1f8b4d
mov qword [r12], r11
add r12, 8
- mov dword [r12], 0x840fdb85 ; rest of ^, je
+ mov dword [r12], 0x840fdb85
add r12, 4
- mov qword [here], r12
+ mov qword [dp], r12
ret
; error handling {{{