diff --git a/asm/runtime.scm b/asm/runtime.scm index 820d945..3bb4726 100644 --- a/asm/runtime.scm +++ b/asm/runtime.scm @@ -31,7 +31,7 @@ alloc-do-gc (drop) (drop) ;; Run garbage collection -(push gc-start) +(push gc-run) (call) ;; Tail-call allocation (push alloc) @@ -123,6 +123,19 @@ reg-relocated (drop) (return) +gc-loop +(ref free) +(ref scan) +(<) +(branch gc-loop-done) +(ref scan) +(relocate-reg) +(push gc-loop) +(jmp) +gc-loop-done +(return) + + main ;; These need to be initialized with the runtime (push memory) diff --git a/scmvm/assembler.scm b/scmvm/assembler.scm index f2f8b31..ad527a1 100644 --- a/scmvm/assembler.scm +++ b/scmvm/assembler.scm @@ -76,7 +76,10 @@ (when (eq? (car inst) 'push) (if (number? (cadr inst)) (write-word (cadr inst)) - (write-word (assq-ref labels (cadr inst))))) + (let ([address (assq-ref labels (cadr inst))]) + (if address + (write-word (assq-ref labels (cadr inst))) + (error (format #f "Could not find label ~a" (cadr inst))))))) (assembly-pass (cdr seq) labels))])) (define (assemble instructions port)