 !   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 -- )
-    "not-f" define-label
-    "not-alien" define-label
+:: 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" get BNE
+    0 not-f BNE
     dst displacement base box-displaced-alien/f
-    "end" get B
+    end B
 
     ! Is base an alien?
-    "not-f" resolve-label
+    not-f resolve-label
     temp base tag-mask get ANDI.
     0 temp alien type-number %compare-cell-imm
-    0 "not-alien" get BNE
+    0 not-alien BNE
     dst displacement base temp box-displaced-alien/alien
-    "end" get B
+    end B
 
     ! Assume base is a byte array.
-    "not-alien" resolve-label
+    not-alien resolve-label
     dst displacement base temp box-displaced-alien/byte-array ;
 
 ! if (displacement == 0)

! else // Assume (src & tag_mask) == BYTE_ARRAY_TYPE
!   dst = ((byte_array*)src) + 1;
M:: ppc %unbox-any-c-ptr ( dst src -- )
    [
        "end" define-label
        ! Is the object f?
        dst 0 LI
        0 src \ f type-number %compare-cell-imm
        0 "end" get BEQ

        ! Is the object an alien?
        dst src tag-mask get ANDI.
        ! Assume unboxing a byte-array.
        0 dst alien type-number %compare-cell-imm
        dst src byte-array-offset ADDI
        0 "end" get BNE

        ! Unbox the alien.
        scratch-reg alien-offset LI
        dst src scratch-reg %load-cell-x
        "end" resolve-label
    ] with-scope ;

! Be very careful with this. It cannot be used as an immediate
! offset to a load or store.

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

    ! Is the object f?
    dst \ f type-number LI
    0 src 0 %compare-cell-imm
    0 f-label 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-label resolve-label ;

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