aboutsummaryrefslogtreecommitdiffstats
path: root/src/x86_64
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-11-09 10:15:26 +0100
committerBad Diode <bd@badd10de.dev>2021-11-09 10:15:26 +0100
commit701369bfb490596a7336415d01142fdee52d5415 (patch)
tree64455f8def9c65bc82d58b9054bde5f1d8b15e3a /src/x86_64
parent7b3b52e6307ceda963bd1a6c481baeb720c2beb3 (diff)
downloadbdl-701369bfb490596a7336415d01142fdee52d5415.tar.gz
bdl-701369bfb490596a7336415d01142fdee52d5415.zip
Add support for compiling string literals
Diffstat (limited to 'src/x86_64')
-rw-r--r--src/x86_64/postlude.asm5
-rw-r--r--src/x86_64/prelude.asm23
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
7exit: 7exit:
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
13section .bss
14bdl_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
74true_str: 74printstring:
75 db "true", 10 75 mov rsi, rdi
76false_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
79display: 85display:
80 ;; is nil? 86 ;; is nil?
@@ -91,6 +97,15 @@ display:
91 ret 97 ret
92not_bool: 98not_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
107not_string:
108
94 ;; is fixnum? 109 ;; is fixnum?
95 mov rax, rdi 110 mov rax, rdi
96 call printdln 111 call printdln