         { cc/<= [ label BGT ] }
     } case ;
 
+: gc-root-offsets ( seq -- seq' )
+    [ n>> spill@ ] map f like ;
+
 M: ppc %call-gc ( gc-roots -- )
-    3 swap %load-reference
+    3 swap gc-root-offsets %load-reference
     4 %load-vm-addr
     "inline_gc" f %alien-invoke ;
 


        dst displacement base temp
        {
            { [ base-class \ f class<= ] [ 2drop %box-displaced-alien/f ] }
            { [ base-class \ alien class<= ] [ %box-displaced-alien/alien ] }
            { [ base-class \ byte-array class<= ] [ %box-displaced-alien/byte-array ] }
            [ %box-displaced-alien/dynamic ]

        } case
    ] ?if ;

M: ppc %store-memory ( src base displacement scale offset rep c-type -- )
    (%memory) [
        {
            { c:char   [ STBX ] }
            { c:uchar  [ STBX ] }
            { c:short  [ STHX ] }
            { c:ushort [ STHX ] }
        } case
    ] [
        {
            { int-rep [ STWX ] }
            { float-rep [ STFSX ] }
            { double-rep [ STFDX ] }
        } case
    ] ?if ;

: load-zone-ptr ( reg -- )
    vm-reg "nursery" vm-field-offset ADDI ;

