summaryrefslogtreecommitdiff
path: root/jefs.s
diff options
context:
space:
mode:
Diffstat (limited to 'jefs.s')
-rw-r--r--jefs.s46
1 files changed, 46 insertions, 0 deletions
diff --git a/jefs.s b/jefs.s
index b9327dc..40ba54d 100644
--- a/jefs.s
+++ b/jefs.s
@@ -1,7 +1,53 @@
; jewelforth
;; MACROS {{{
+%macro pspush 1
+ lea r14, [r14-8]
+ mov qword [r14], r15
+ mov r15, %1
+%endmacro
+
+%macro pspop 1
+ mov %1, r15
+ mov r15, qword [r14]
+ lea r14, [r14+8]
+%endmacro
+
+;;; dictionary macros {{{
+%define mac_latest 0 ; updated through defdict
+
+%macro defdict 3 ; name asm-label flags
+ %strlen slen %1
+ global lfa_%2
+ lfa_%2: dq mac_latest
+ %define mac_latest lfa_%2
+ ffa_%2: db %3 ; FFA
+ nfa_%2: dw slen ; NFA
+ db %1
+%endmacro
+
+%macro defword 3
+ defdict %1, %2, %3
+ %2:
+%endmacro
+
+%macro defconst 4 ; ... value
+ defdict %1, %2, %3
+ %define %2 %4
+ pspush qword %4
+ ret
+%endmacro
+
+%macro defvar 4 ; ... default-value
+ %2: dq %4
+ defdict %1, %2, %3
+ pspush qword %2
+ ret
+%endmacro
+
%assign smudge_mask 0x1
+%assign immemdiate_mask 0x2
+;;; }}}
;; syscall
%assign __NR_read 0