introduced a hold area for temp space
authorRalph Ronnquist <ralph.ronnquist@gmail.com>
Tue, 15 Jun 2021 04:29:48 +0000 (14:29 +1000)
committerRalph Ronnquist <ralph.ronnquist@gmail.com>
Tue, 15 Jun 2021 04:29:48 +0000 (14:29 +1000)
adoc/p_tempheld.adoc [new file with mode: 0644]
reference.adoc
temp.asm
wordindex.adoc

diff --git a/adoc/p_tempheld.adoc b/adoc/p_tempheld.adoc
new file mode 100644 (file)
index 0000000..4233b2c
--- /dev/null
@@ -0,0 +1,15 @@
+// temp.asm:   WORD p_tempheld,'TEMPHELD',dovariable
+
+anchor:p_tempheld[]
+
+=== Word: TEMPHELD
+
+....
+Data stack: ( -- a )
+....
+
+"TEMPHELD" is a variable word that keeps the lowest offset of the
+<<p__tempspace,TEMPSPACE>> space to reuse upon cycling. The space
+below TEMPHELD is "held" in the sense of not being reused upon
+cycling. An application may change the TEMPSPACE offset as needed to
+dynamically preserve memory longer term.
index 1d9f60e2dd545eee7e91f38d4eb37e4cef46663e..e48dbd742b288fd8e2714e40fbd4a2dbffe8d6c1 100644 (file)
@@ -293,6 +293,8 @@ include::adoc/p_tell.adoc[]
 include::separator.adoc[]
 include::adoc/p_temp.adoc[]
 include::separator.adoc[]
+include::adoc/p_tempheld.adoc[]
+include::separator.adoc[]
 include::adoc/p_tempspace.adoc[]
 include::separator.adoc[]
 include::adoc/p_terminate0.adoc[]
index 8e0be257f11e4f7bbf022d82dba366f94528141c..7ece59078005ddfdcc740aba3d82c3afcbfa06f1 100644 (file)
--- a/temp.asm
+++ b/temp.asm
@@ -1,16 +1,23 @@
-;;; Managing a memory area for temporary objects
-;;;
-;;; A temporary object space is allocated from the current usage
-;;; level, or cycling back to be from the lowest space address when
-;;; the requested size exceeds the space edge.
+;;; Managing a memory area for temporary "objects".
 ;;;
+;;; Object space is allocated cyclically, starting subsequent to prior
+;;; allocation and cycling back when requested object size exceeds
+;;; the space edge. The "inital" part, which starts as empty, is
+;;; considered "held" space that is not reused when cycling back, and
+;;; apart from allowing for this, the space management is left open.
+
 
        WORD p_objectspace,'TEMPSPACE',dovariable
        ;; Holds size and address of the object space.
-       dq 104857600 ; [0] Total object space size (request size)
-       dq 0 ; [8] Object space base address
+       dq 1073741824 ; [0] Total object space size (request size)
+       dq 0 ; [8] Object space base address.
        dq 0 ; [16] Currently used.
 
+       WORD p_tempheld,'TEMPHELD',dovariable
+       ;; ( -- a )
+       ;; Marks the barrier for "held space"
+       dq 0 ; [24] Currently held.
+
        WORD p_temp,'TEMP',fasm
        ;; ( size -- addr )
        ;; Allocate an object of given size
@@ -26,14 +33,15 @@ p_objecthole_initialized:
        add rax,qword [p_objectspace_DFA+16]
        cmp rax,qword [p_objectspace_DFA]
        jl p_objecthole_from_tail
-       mov qword [p_objectspace_DFA+16],0
-       mov rax,qword [rsp]
+       mov rax,qword [p_tempheld_DFA] ; cycling back to here
+       mov qword [p_objectspace_DFA+16],rax
+       add rax,qword [rsp]
 p_objecthole_from_tail:
        ;; rax = new usage count
        mov rbx,qword [p_objectspace_DFA+16]
-       mov qword [p_objectspace_DFA+16],rax
        add rbx,qword [p_objectspace_DFA+8]
        mov qword [rsp],rbx
+       mov qword [p_objectspace_DFA+16],rax
        popr rsi
        next
 
index e59bfaa8e77c9e06158263f7766214cc8ce2bbd8..c30b9bf6566a9d873506545f3142b0eb3d5a5372 100644 (file)
@@ -167,6 +167,7 @@ xref:p_system[SYSTEM] {nbsp}
 xref:p_tell[TELL] {nbsp}
 xref:p_dot_temp[.TEMP] {nbsp}
 xref:p_temp.adoc[TEMP] {nbsp}
+xref:p_tempheld.adoc[TEMPHELD] {nbsp}
 xref:p_tempspace[TEMPSPACE] {nbsp}
 xref:p_terminate0[TERMINATE0] {nbsp}
 xref:p_tfa2cfa[TFA>CFA] {nbsp}