     "nursery" %load-vm-field-addr ;
 
 : load-allot-ptr ( nursery-ptr allot-ptr -- )
-    [ drop load-zone-ptr ] [ swap 4 LWZ ] 2bi ;
+    [ drop load-zone-ptr ] [ swap 0 LWZ ] 2bi ;
 
 :: inc-allot-ptr ( nursery-ptr allot-ptr n -- )
     scratch-reg allot-ptr n 8 align ADDI
-    scratch-reg nursery-ptr 4 STW ;
+    scratch-reg nursery-ptr 0 STW ;
 
 :: store-header ( dst class -- )
     class type-number tag-fixnum scratch-reg LI

    dst class store-tagged ;

: load-cards-offset ( dst -- )
    [ "cards_offset" %load-vm-field-addr ] [ dup 0 LWZ ] bi ;

: load-decks-offset ( dst -- )
    [ "decks_offset" %load-vm-field-addr ] [ dup 0 LWZ ] bi  ;

M:: ppc %write-barrier ( src card# table -- )
    card-mark scratch-reg LI

    ! Mark the card
    table load-cards-offset
    src card# card-bits SRWI
    table scratch-reg card# STBX

    ! Mark the card deck
    table load-decks-offset
    src card# deck-bits SRWI
    table scratch-reg card# STBX ;

M:: ppc %check-nursery ( label size temp1 temp2 -- )
    temp2 load-zone-ptr
    temp1 temp2 cell LWZ
    temp2 temp2 3 cells LWZ
    temp1 temp1 size ADDI
    ! is here >= end?
    temp1 0 temp2 CMP

>>

: %load-vm-addr ( reg -- )
    0 swap LOAD32 0 rc-absolute-ppc-2/2 rel-vm ;

: %load-vm-field-addr ( reg symbol -- )
    [ 0 swap LOAD32 ] dip
    vm-field-offset rc-absolute-ppc-2/2 rel-vm ;

M: ppc %vm-field-ptr ( dst field -- ) %load-vm-field-addr ;

