moved cards_offset and decks_offset into vm struct (for x86)
parent
c6d855d494
commit
5bb04857bf
|
@ -449,10 +449,10 @@ M:: ppc %allot ( dst size class nursery-ptr -- )
|
|||
dst class store-tagged ;
|
||||
|
||||
: load-cards-offset ( dst -- )
|
||||
[ "cards_offset" f %alien-global ] [ dup 0 LWZ ] bi ;
|
||||
[ "cards_offset" %load-vm-field-addr ] [ dup 0 LWZ ] bi ;
|
||||
|
||||
: load-decks-offset ( dst -- )
|
||||
[ "decks_offset" f %alien-global ] [ dup 0 LWZ ] bi ;
|
||||
[ "decks_offset" %load-vm-field-addr ] [ dup 0 LWZ ] bi ;
|
||||
|
||||
M:: ppc %write-barrier ( src card# table -- )
|
||||
card-mark scratch-reg LI
|
||||
|
|
|
@ -587,18 +587,22 @@ M:: x86 %allot ( dst size class nursery-ptr -- )
|
|||
dst class store-tagged
|
||||
nursery-ptr size inc-allot-ptr ;
|
||||
|
||||
: %vm-field-ptr ( reg field -- )
|
||||
[ drop 0 MOV rc-absolute-cell rt-vm rel-fixup ]
|
||||
[ vm-field-offset ADD ] 2bi ;
|
||||
|
||||
M:: x86 %write-barrier ( src card# table -- )
|
||||
#! Mark the card pointed to by vreg.
|
||||
! Mark the card
|
||||
card# src MOV
|
||||
card# card-bits SHR
|
||||
table "cards_offset" f %alien-global
|
||||
table "cards_offset" %vm-field-ptr
|
||||
table table [] MOV
|
||||
table card# [+] card-mark <byte> MOV
|
||||
|
||||
! Mark the card deck
|
||||
card# deck-bits card-bits - SHR
|
||||
table "decks_offset" f %alien-global
|
||||
table "decks_offset" %vm-field-ptr
|
||||
table table [] MOV
|
||||
table card# [+] card-mark <byte> MOV ;
|
||||
|
||||
|
|
|
@ -15,6 +15,8 @@ C-STRUCT: zone
|
|||
C-STRUCT: vm
|
||||
{ "context*" "stack_chain" }
|
||||
{ "zone" "nursery" }
|
||||
{ "cell" "cards_offset" }
|
||||
{ "cell" "decks_offset" }
|
||||
;
|
||||
|
||||
: vm-field-offset ( field -- offset ) "vm" offset-of ;
|
|
@ -4,9 +4,9 @@ namespace factor
|
|||
struct factorvm {
|
||||
// if you change this struct, also change vm.factor
|
||||
context *stack_chain;
|
||||
/* new objects are allocated here */
|
||||
zone nursery;
|
||||
|
||||
zone nursery; /* new objects are allocated here */
|
||||
cell cards_offset;
|
||||
cell decks_offset;
|
||||
|
||||
// segments
|
||||
inline cell align_page(cell a);
|
||||
|
|
|
@ -2,6 +2,4 @@
|
|||
|
||||
using namespace factor;
|
||||
|
||||
cell cards_offset;
|
||||
cell decks_offset;
|
||||
|
||||
|
|
|
@ -6,9 +6,6 @@ card has a slot written to.
|
|||
|
||||
the offset of the first object is set by the allocator. */
|
||||
|
||||
VM_C_API factor::cell cards_offset;
|
||||
VM_C_API factor::cell decks_offset;
|
||||
|
||||
namespace factor
|
||||
{
|
||||
|
||||
|
|
Loading…
Reference in New Issue