X-Git-Url: http://git.lukelau.me/?a=blobdiff_plain;f=codegen.scm;h=00e01296af20661539f8fda3d882c6fa39547092;hb=e561cf1ba9b2986a22cb08250247e402ac2a5871;hp=2d60c0aed64c22d3f1933544bf1a5df7101ce62c;hpb=d0e9f5296b7510fe057be4a2f9e2a31ed856652c;p=scheme.git diff --git a/codegen.scm b/codegen.scm index 2d60c0a..00e0129 100644 --- a/codegen.scm +++ b/codegen.scm @@ -1,7 +1,8 @@ (load "typecheck.scm") (load "ast.scm") +(load "platform.scm") -(define target 'darwin) +(define target host-os) (define (emit . s) (begin @@ -248,11 +249,6 @@ (emit "pop %rbp") ; restore caller's base pointer (emit "ret"))) -(define (codegen-string label) - (case target - ('darwin (emit "movq ~a@GOTPCREL(%rip), %rax" label)) - ('linux (emit "lea $~a, %rax" label)))) - (define cur-label 0) (define (fresh-label) (set! cur-label (+ 1 cur-label)) @@ -299,7 +295,8 @@ ('bool-literal (emit "movq $~a, %rax" (if e 1 0))) ('int-literal (emit "movq $~a, %rax" e)) - ('static-string (codegen-string (cadr e))) + ('static-string (emit "movq ~a@GOTPCREL(%rip), %rax" + (cadr e))) (else (error #f "don't know how to codegen this"))))