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:
parent
1f18a4fd0a
commit
2ee76bda37
4
mu.arc
4
mu.arc
|
@ -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
42
new.arc
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue