72 - broken

Thoroughly confused about how to manage memory at initialization time, and how
to maintain type information in the simulated machine.
This commit is contained in:
Kartik K. Agaram 2014-08-22 11:30:36 -07:00
parent 1f18a4fd0a
commit 2ee76bda37
3 changed files with 33 additions and 14 deletions

4
mu.arc
View File

@ -16,7 +16,7 @@
(def clear ()
(= types* (obj
; must be scalar or array, sum or product or primitive
type (obj size 1)
type (obj size 5 record t elems '(integer boolean boolean boolean type-array))
location (obj size 1)
integer (obj size 1)
boolean (obj size 1)
@ -155,6 +155,8 @@
(do1 fn-arg-idx
++.fn-arg-idx))
(m fn-args.idx))
type
(ty (fn-args arg.0))
otype
(ty (fn-oargs arg.0))
jmp

42
new.arc
View File

@ -1,27 +1,45 @@
; Memory management primitive.
(= Allocator_start 1000) ; lower locations reserved
(load "mu.arc")
; memory map: 0-2 for convenience numbers
; for these, address == value always; never modify them
(= Zero 0)
(= One 1)
(= Two 2)
; memory map: 3 for root custodian (size 1)
; 'new' will allocate from custodians. Custodians will be arranged in trees,
; each node knowing its parent. The root custodian controls all memory
; allocations. And it's located at..
(= Root_custodian 3)
(enq (fn ()
(run `(((,Zero integer) <- literal 0)
((,One integer) <- literal 1)
((,Two integer) <- literal 2)
((,Root_custodian location) <- literal ,Allocator_start))))
((,Two integer) <- literal 2))))
initialization-fns*)
;; simple slab allocator. Intended only to carve out isolated memory for
;; different threads/routines as they request.
; high-water mark for global memory used so far
; just on host, not in simulated memory
(= Memory-used-until 3)
(def static-new (n)
(inc Memory-used-until n))
; copy types* info into simulated machine
(= Type-table Memory-used-until)
(enq (fn ()
(each (type typeinfo) types*
(prn type " " typeinfo)))
initialization-fns*)
(reset)
(init-fn sizeof) ; todo
;; 'new' - simple slab allocator. Intended only to carve out isolated memory
;; for different threads/routines as they request.
; memory map: 3 for root custodian (size 1)
(= Root_custodian 3)
(= Allocator_start 1000) ; lower locations reserved
(enq (fn ()
(run `(((,Root_custodian location) <- literal ,Allocator_start))))
initialization-fns*)
; (type-addr val) <- new (custodian x), (type t)
; memory map: 4-5 locals for slab allocator
(init-fn new
((4 integer-address) <- copy (3 location))

View File

@ -1,4 +1,3 @@
(load "mu.arc")
(load "new.arc")
(reset)