 !      box_displaced_alien_dynamic(dst, displacement, base, temp);
 ! }
 M:: ppc %box-displaced-alien ( dst displacement base temp base-class -- )
-    [
-        "end" define-label
-
-        ! If displacement is zero, return the base.
-        dst base MR
-        0 displacement 0 %compare-cell-imm
-        0 "end" get BEQ
-
-        ! Displacement is non-zero, we're going to be allocating a new
-        ! object
-        dst 5 cells alien temp %allot
-
-        ! Set expired to f
-        temp \ f type-number %load-immediate
-        scratch-reg 2 alien@ LI
-        temp dst scratch-reg %store-cell-x
-
-        dst displacement base temp
-        {
-            { [ base-class \ f class<= ] [ drop 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 ]
-        } cond
-
-        "end" resolve-label
-    ] with-scope ;
+    <label> :> end
+
+    ! If displacement is zero, return the base.
+    dst base MR
+    0 displacement 0 %compare-cell-imm
+    0 end BEQ
+
+    ! Displacement is non-zero, we're going to be allocating a new
+    ! object
+    dst 5 cells alien temp %allot
+
+    ! Set expired to f
+    temp \ f type-number %load-immediate
+    scratch-reg 2 alien@ LI
+    temp dst scratch-reg %store-cell-x
+
+    dst displacement base temp
+    {
+        { [ base-class \ f class<= ] [ drop box-displaced-alien/f ] }
+        { [ base-class \ alien class<= ] [ box-displaced-alien/alien ] }
+        { [ base-class \ byte-array class<= ] [ box-displaced-alien/byte-array ] }
+        [ end box-displaced-alien/dynamic ]
+    } cond
+
+    end resolve-label ;
 
 M:: ppc.32 %convert-integer ( dst src c-type -- )
     c-type {

!   dst->address = src;
! }
M:: ppc %box-alien ( dst src temp -- )
    [
        "f" define-label

        ! Is the object f?
        dst \ f type-number LI
        0 src 0 %compare-cell-imm
        0 "f" get BEQ

        ! Allocate and initialize an alien object.
        dst 5 cells alien temp %allot
        temp \ f type-number LI
        scratch-reg dst %clear-tag-bits
        temp scratch-reg 1 cells %store-cell
        temp scratch-reg 2 cells %store-cell
        src scratch-reg 3 cells %store-cell
        src scratch-reg 4 cells %store-cell

        "f" resolve-label
    ] with-scope ;

! dst->base = base;
! dst->displacement = displacement;

!   box_displaced_alien_alien(dst, displacement, base, temp);
! else
!   box_displaced_alien_byte_array(dst, displacement, base, temp);
:: box-displaced-alien/dynamic ( dst displacement base temp end -- )
    <label> :> not-f
    <label> :> not-alien

    ! Is base f?
    0 base \ f type-number %compare-cell-imm
    0 not-f BNE
    dst displacement base box-displaced-alien/f
    end B

    ! Is base an alien?
    not-f resolve-label
    temp base tag-mask get ANDI.
    0 temp alien type-number %compare-cell-imm
    0 not-alien BNE
    dst displacement base temp box-displaced-alien/alien
    end B

    ! Assume base is a byte array.
    not-alien resolve-label
    dst displacement base temp box-displaced-alien/byte-array ;

! if (displacement == 0)
