From 701369bfb490596a7336415d01142fdee52d5415 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 9 Nov 2021 10:15:26 +0100 Subject: Add support for compiling string literals --- src/x86_64/postlude.asm | 5 +---- src/x86_64/prelude.asm | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) (limited to 'src/x86_64') 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: call display exit: - ; exit syscall + ;; exit syscall mov rax, 60 xor rdi, rdi syscall -section .bss -bdl_heap: - 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: syscall ret -true_str: - db "true", 10 -false_str: - db "false", 10 +printstring: + mov rsi, rdi + mov rax, STRING_INV_MASK + and rsi, rax + mov rdx, [rsi] + add rsi, 8 + mov rax, 1 + mov rdi, 1 + syscall + ret display: ;; is nil? @@ -91,6 +97,15 @@ display: ret not_bool: + ;; is string? + mov rax, rdi + and rax, STRING_MASK + cmp rax, STRING_TAG + jne not_string + call printstring + ret +not_string: + ;; is fixnum? mov rax, rdi call printdln -- cgit v1.2.1