diff options
Diffstat (limited to 'src/x86_64')
-rw-r--r-- | src/x86_64/postlude.asm | 5 | ||||
-rw-r--r-- | src/x86_64/prelude.asm | 23 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/x86_64/postlude.asm b/src/x86_64/postlude.asm index 37f9df1..45be7ee 100644 --- a/src/x86_64/postlude.asm +++ b/src/x86_64/postlude.asm | |||
@@ -5,11 +5,8 @@ _start_return: | |||
5 | call display | 5 | call display |
6 | 6 | ||
7 | exit: | 7 | exit: |
8 | ; exit syscall | 8 | ;; exit syscall |
9 | mov rax, 60 | 9 | mov rax, 60 |
10 | xor rdi, rdi | 10 | xor rdi, rdi |
11 | syscall | 11 | syscall |
12 | 12 | ||
13 | section .bss | ||
14 | bdl_heap: | ||
15 | resb HEAP_SIZE | ||
diff --git a/src/x86_64/prelude.asm b/src/x86_64/prelude.asm index 3ad33f7..c9ef823 100644 --- a/src/x86_64/prelude.asm +++ b/src/x86_64/prelude.asm | |||
@@ -71,10 +71,16 @@ bool_write: | |||
71 | syscall | 71 | syscall |
72 | ret | 72 | ret |
73 | 73 | ||
74 | true_str: | 74 | printstring: |
75 | db "true", 10 | 75 | mov rsi, rdi |
76 | false_str: | 76 | mov rax, STRING_INV_MASK |
77 | db "false", 10 | 77 | and rsi, rax |
78 | mov rdx, [rsi] | ||
79 | add rsi, 8 | ||
80 | mov rax, 1 | ||
81 | mov rdi, 1 | ||
82 | syscall | ||
83 | ret | ||
78 | 84 | ||
79 | display: | 85 | display: |
80 | ;; is nil? | 86 | ;; is nil? |
@@ -91,6 +97,15 @@ display: | |||
91 | ret | 97 | ret |
92 | not_bool: | 98 | not_bool: |
93 | 99 | ||
100 | ;; is string? | ||
101 | mov rax, rdi | ||
102 | and rax, STRING_MASK | ||
103 | cmp rax, STRING_TAG | ||
104 | jne not_string | ||
105 | call printstring | ||
106 | ret | ||
107 | not_string: | ||
108 | |||
94 | ;; is fixnum? | 109 | ;; is fixnum? |
95 | mov rax, rdi | 110 | mov rax, rdi |
96 | call printdln | 111 | call printdln |