nursery global variable moved into vm
parent
0be499de8a
commit
c010afc345
|
@ -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
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
|
@ -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;
|
||||
|
|
|
@ -66,6 +66,3 @@ PRIMITIVE(next_object);
|
|||
PRIMITIVE(end_scan);
|
||||
|
||||
}
|
||||
|
||||
/* new objects are allocated here */
|
||||
VM_C_API factor::zone nursery;
|
||||
|
|
Loading…
Reference in New Issue