From dea4c4e4d1be8c0a90bb165bde1e362dc204e061 Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Wed, 24 Jul 2019 14:29:45 +0100 Subject: [PATCH] Fix string addressing and clobbered register --- codegen.scm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/codegen.scm b/codegen.scm index 25d99a1..4848d4d 100644 --- a/codegen.scm +++ b/codegen.scm @@ -50,6 +50,9 @@ (define (codegen-print x si env) (codegen-expr x si env) ; x should be a static-string, producing a label + ; make a copy of string address since %rax and %rdi are clobbered + (emit "mov %rax, %rbx") + ; get the length of the null terminated string (emit "mov %rax, %rdi") (emit "xor %al, %al") ; set %al to 0 @@ -61,7 +64,7 @@ (emit "dec %rcx") (emit "mov %rcx, %rdx") ; number of bytes - (emit "mov %rax, %rsi") ; addr of string + (emit "mov %rbx, %rsi") ; addr of string (emit "mov $1, %rax") ; file handle 1 (stdout) (emit "mov $1, %rdi") ; syscall 1 (write) (emit "syscall")) @@ -213,7 +216,7 @@ ('bool-literal (emit "movq $~a, %rax" (if e 1 0))) ('int-literal (emit "movq $~a, %rax" e)) - ('static-string (emit "movq (~a), %rax" (cadr e))) ; move label + ('static-string (emit "lea ~a, %rax" (cadr e))) ; move label (else (error #f "don't know how to codegen this")))) -- 2.30.2