moved cards_offset and decks_offset into vm struct (for x86)

db4
Phil Dawes 2009-08-20 20:45:06 +01:00
parent c6d855d494
commit 5bb04857bf
6 changed files with 13 additions and 12 deletions

View File

@ -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

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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);

View File

@ -2,6 +2,4 @@
using namespace factor;
cell cards_offset;
cell decks_offset;

View File

@ -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
{