From ab558d9f608cf6b5523ed272fae149937a7a0eaf Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Sat, 28 Jun 2025 10:35:46 -0500 Subject: [PATCH] WIP runtime re-write --- asm/runtime.scm | 70 ++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 45 deletions(-) diff --git a/asm/runtime.scm b/asm/runtime.scm index 010b6fb..43f5d3b 100644 --- a/asm/runtime.scm +++ b/asm/runtime.scm @@ -1,33 +1,28 @@ ;; Note that this is scheme syntax wrapping asm for a stack machine +(variable eom 1024) +;; These need to be initialized with the runtime (variable scan 0) (variable free 0) -(variable eom 1024) -;; These need to be initialized later (variable root 0) -(variable the-cars 0) -(variable the-cdrs 0) -(variable new-cars 0) -(variable new-cdrs 0) - +(variable old 0) +(variable new 0) (push main) (jmp) -alloc +alloc ;; ( -- p) ;; Test if free will go beyond eom -(push free) -(@) +(ref free) (dup) ; ( -- free free) (push 8) (+) (dup) ; ( -- free free+8 free+8) -(push eom) -(@) +(ref eom) (<) ; ( -- free free+8 (free+8 < eom)) -(branch alloc-do-gc) +(push alloc-do-gc) +(if) ;; write free+8 to free -(push free) -(!) +(set! free) ;; return the old free, it is memory the program can use (return) alloc-do-gc @@ -41,36 +36,21 @@ alloc-do-gc (push alloc) (jmp) -gc-start -; Move scan & free back to 0 -(push 0) -(push free) -(!) -(push 0) -(push scan) -(!) -; Push the first cons to relocate (root) -(push root) -(@) -; Call the relocation routine +gc-start ;; ( -- ) +; Move scan & free to start of new memory +(ref new) +(dup) +(set! free) +(set! scan) +(ref root) +(push relocate-object) +(call) (push gc-loop) (call) -; Swap new and old cars and cdrs -(push new-cars) -(@) -(push the-cars) -(@) -(push new-cars) -(!) -(push the-cars) -(!) -(push new-cdrs) -(@) -(push the-cdrs) -(@) -(push new-cdrs) -(!) -(push the-cdrs) -(!) -; return to allocation (return) + +relocate-object ;; (o -- ) +;; TODO + +main +;; TODO