]> gitweb.factorcode.org Git - factor.git/commitdiff
nursery global variable moved into vm
authorPhil Dawes <phil@phildawes.net>
Thu, 20 Aug 2009 19:20:35 +0000 (20:20 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:16:31 +0000 (08:16 +0100)
basis/cpu/ppc/ppc.factor
basis/cpu/x86/x86.factor
basis/vm/vm.factor
vm/data_heap.cpp
vm/data_heap.hpp
vm/vm.hpp

index 8491a933dbd892b20767a40694f067a840443b58..a6d70f88e8075c9e089b57643ae7e80ed4f32370 100644 (file)
@@ -29,6 +29,14 @@ enable-float-intrinsics
 \ ##float>integer t frame-required? set-word-prop
 >>
 
+: %load-vm-addr ( reg -- )
+    0 swap LOAD32 rc-absolute-ppc-2/2 rt-vm rel-fixup ;
+
+: %load-vm-field-addr ( reg symbol -- )
+    [ drop %load-vm-addr ]
+    [ [ dup ] dip vm-field-offset ADDI ] 2bi ;
+
+
 M: ppc machine-registers
     {
         { int-regs $[ 2 12 [a,b] 15 29 [a,b] append ] }
@@ -418,7 +426,7 @@ M: ppc %set-alien-float swap 0 STFS ;
 M: ppc %set-alien-double swap 0 STFD ;
 
 : load-zone-ptr ( reg -- )
-    "nursery" f %alien-global ;
+    "nursery" %load-vm-field-addr ;
 
 : load-allot-ptr ( nursery-ptr allot-ptr -- )
     [ drop load-zone-ptr ] [ swap 4 LWZ ] 2bi ;
@@ -678,13 +686,6 @@ M: ppc %box-large-struct ( n c-type -- )
     ! Call the function
     "box_value_struct" f %alien-invoke ;
 
-: %load-vm-addr ( reg -- )
-    0 swap LOAD32 rc-absolute-ppc-2/2 rt-vm rel-fixup ;
-
-: %load-vm-field-addr ( reg symbol -- )
-    [ drop %load-vm-addr ]
-    [ [ dup ] dip vm-field-offset ADDI ] 2bi ;
-
 M:: ppc %save-context ( temp1 temp2 callback-allowed? -- )
     #! Save Factor stack pointers in case the C code calls a
     #! callback which does a GC, which must reliably trace
index 9222e63b7fec153f63ae791322d75d4409eb0d66..4f79f50f96830dd1f1ae57f215bcce9acf7f3ecc 100644 (file)
@@ -566,7 +566,8 @@ M: x86 %sar [ SAR ] emit-shift ;
 
 : load-zone-ptr ( reg -- )
     #! Load pointer to start of zone array
-    0 MOV "nursery" f rc-absolute-cell rel-dlsym ;
+    [ 0 MOV rc-absolute-cell rt-vm rel-fixup ]
+    [ "nursery" vm-field-offset ADD ] bi ;
 
 : load-allot-ptr ( nursery-ptr allot-ptr -- )
     [ drop load-zone-ptr ] [ swap cell [+] MOV ] 2bi ;
index 5ae82c1c7a732b27bc4560e28abcc5c4a0cb323c..19d009f1212250453a1dad8757bd5cf2f0f5cab9 100644 (file)
@@ -3,6 +3,18 @@
 USING: alien.structs alien.syntax ;
 IN: vm
 
-C-STRUCT: vm { "context*" "stack_chain" } ;
+TYPEDEF: void* cell
+
+C-STRUCT: zone
+    { "cell" "start" }
+    { "cell" "here" }
+    { "cell" "size" }
+    { "cell" "end" }
+    ;
+
+C-STRUCT: vm
+    { "context*" "stack_chain" }
+    { "zone" "nursery" }
+    ;
 
 : vm-field-offset ( field -- offset ) "vm" offset-of ;
\ No newline at end of file
index e790c6312230c65ab162988a6668401dd06cc5ac..de3d8d87bebba266aa38758367bca0f86a986c3d 100755 (executable)
@@ -1,13 +1,8 @@
 #include "master.hpp"
 
-factor::zone nursery;
-
 namespace factor
 {
 
-/* new objects are allocated here */
-VM_C_API zone nursery;
-
 cell factorvm::init_zone(zone *z, cell size, cell start)
 {
        z->size = size;
index 88316ffd8d02293aae4df6bee552387b8d9c9c8f..7e6ff81e705974c9f6dbf847eed65981db5f1a01 100755 (executable)
@@ -66,6 +66,3 @@ PRIMITIVE(next_object);
 PRIMITIVE(end_scan);
 
 }
-
-/* new objects are allocated here */
-VM_C_API factor::zone nursery;
index 40be36b249a9024ee9055b2aaad01ccb0d02ce3b..12f767404f5d9747228b4374bea0a3fafae05d7c 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -2,9 +2,10 @@ namespace factor
 {
 
 struct factorvm {
-
-       factor::context *stack_chain; 
-
+       // if you change this struct, also change vm.factor
+       context *stack_chain; 
+       /* new objects are allocated here */
+       zone nursery;
 
        // segments
        inline cell align_page(cell a);