aboutsummaryrefslogtreecommitdiffstats
path: root/src/x86_64/prelude.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/x86_64/prelude.asm')
-rw-r--r--src/x86_64/prelude.asm30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/x86_64/prelude.asm b/src/x86_64/prelude.asm
index c314ba4..6bb6627 100644
--- a/src/x86_64/prelude.asm
+++ b/src/x86_64/prelude.asm
@@ -1,12 +1,3 @@
1;; Value types.
2%define NIL_VAL 1
3%define BOOL_MASK 3
4%define BOOL_TAG 3
5%define BOOL_SHIFT 2
6%define FIXNUM_MASK 1
7%define FIXNUM_TAG 0
8%define FIXNUM_SHIFT 1
9
10printdln: 1printdln:
11 sar rdi, FIXNUM_SHIFT 2 sar rdi, FIXNUM_SHIFT
12 sub rsp, 40 3 sub rsp, 40
@@ -84,6 +75,27 @@ true_str:
84false_str: 75false_str:
85 db "false", 10 76 db "false", 10
86 77
78display:
79 ;; is nil?
80 mov rax, rdi
81 cmp rax, NIL_VAL
82 je display_end
83
84 ; ;; is boolean?
85 mov rax, rdi
86 and rax, BOOL_MASK
87 cmp rax, BOOL_TAG
88 jne not_bool
89 call printbool
90 ret
91not_bool:
92
93 ;; is fixnum?
94 mov rax, rdi
95 call printdln
96display_end:
97 ret
98
87global _start 99global _start
88_start: 100_start:
89 push NIL_VAL 101 push NIL_VAL