     temp MTCTR
     BCTR ;
 
-: (%slot-imm) ( obj slot tag -- reg offset )
-    [ cells ] dip - ; inline
-
 M: ppc %slot ( dst obj slot -- ) swapd LWZX ;
-M: ppc %slot-imm ( dst obj slot tag -- ) (%slot-imm) LWZ ;
+M: ppc %slot-imm ( dst obj slot tag -- ) slot-offset LWZ ;
 M: ppc %set-slot ( src obj slot -- ) swapd STWX ;
-M: ppc %set-slot-imm ( src obj slot tag -- ) (%slot-imm) STW ;
+M: ppc %set-slot-imm ( src obj slot tag -- ) slot-offset STW ;
 
 M:: ppc %string-nth ( dst src index temp -- )
     [

    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

    "nursery" %load-vm-field-addr ;

: load-allot-ptr ( nursery-ptr allot-ptr -- )
    [ 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 0 STW ;

:: store-header ( dst class -- )
    class type-number tag-fixnum scratch-reg LI
