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
|
\ ##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
|
M: ppc machine-registers
|
||||||
{
|
{
|
||||||
{ int-regs $[ 2 12 [a,b] 15 29 [a,b] append ] }
|
{ 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 ;
|
M: ppc %set-alien-double swap 0 STFD ;
|
||||||
|
|
||||||
: load-zone-ptr ( reg -- )
|
: load-zone-ptr ( reg -- )
|
||||||
"nursery" f %alien-global ;
|
"nursery" %load-vm-field-addr ;
|
||||||
|
|
||||||
: load-allot-ptr ( nursery-ptr allot-ptr -- )
|
: load-allot-ptr ( nursery-ptr allot-ptr -- )
|
||||||
[ drop load-zone-ptr ] [ swap 4 LWZ ] 2bi ;
|
[ drop load-zone-ptr ] [ swap 4 LWZ ] 2bi ;
|
||||||
|
@ -678,13 +686,6 @@ M: ppc %box-large-struct ( n c-type -- )
|
||||||
! Call the function
|
! Call the function
|
||||||
"box_value_struct" f %alien-invoke ;
|
"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? -- )
|
M:: ppc %save-context ( temp1 temp2 callback-allowed? -- )
|
||||||
#! Save Factor stack pointers in case the C code calls a
|
#! Save Factor stack pointers in case the C code calls a
|
||||||
#! callback which does a GC, which must reliably trace
|
#! callback which does a GC, which must reliably trace
|
||||||
|
|
|
@ -566,7 +566,8 @@ M: x86 %sar [ SAR ] emit-shift ;
|
||||||
|
|
||||||
: load-zone-ptr ( reg -- )
|
: load-zone-ptr ( reg -- )
|
||||||
#! Load pointer to start of zone array
|
#! 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 -- )
|
: load-allot-ptr ( nursery-ptr allot-ptr -- )
|
||||||
[ drop load-zone-ptr ] [ swap cell [+] MOV ] 2bi ;
|
[ drop load-zone-ptr ] [ swap cell [+] MOV ] 2bi ;
|
||||||
|
|
|
@ -3,6 +3,18 @@
|
||||||
USING: alien.structs alien.syntax ;
|
USING: alien.structs alien.syntax ;
|
||||||
IN: vm
|
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 ;
|
: vm-field-offset ( field -- offset ) "vm" offset-of ;
|
|
@ -1,13 +1,8 @@
|
||||||
#include "master.hpp"
|
#include "master.hpp"
|
||||||
|
|
||||||
factor::zone nursery;
|
|
||||||
|
|
||||||
namespace factor
|
namespace factor
|
||||||
{
|
{
|
||||||
|
|
||||||
/* new objects are allocated here */
|
|
||||||
VM_C_API zone nursery;
|
|
||||||
|
|
||||||
cell factorvm::init_zone(zone *z, cell size, cell start)
|
cell factorvm::init_zone(zone *z, cell size, cell start)
|
||||||
{
|
{
|
||||||
z->size = size;
|
z->size = size;
|
||||||
|
|
|
@ -66,6 +66,3 @@ PRIMITIVE(next_object);
|
||||||
PRIMITIVE(end_scan);
|
PRIMITIVE(end_scan);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* new objects are allocated here */
|
|
||||||
VM_C_API factor::zone nursery;
|
|
||||||
|
|
|
@ -2,9 +2,10 @@ namespace factor
|
||||||
{
|
{
|
||||||
|
|
||||||
struct factorvm {
|
struct factorvm {
|
||||||
|
// if you change this struct, also change vm.factor
|
||||||
factor::context *stack_chain;
|
context *stack_chain;
|
||||||
|
/* new objects are allocated here */
|
||||||
|
zone nursery;
|
||||||
|
|
||||||
// segments
|
// segments
|
||||||
inline cell align_page(cell a);
|
inline cell align_page(cell a);
|
||||||
|
|
Loading…
Reference in New Issue