From 6f1a7c731cfadc3965fd0a7c6a293390e933895d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 30 Aug 2009 20:56:04 -0500 Subject: [PATCH] cpu.ppc: fix %box-displaced-alien --- basis/cpu/ppc/ppc.factor | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/basis/cpu/ppc/ppc.factor b/basis/cpu/ppc/ppc.factor index 33619ca3e3..b4f6c49183 100644 --- a/basis/cpu/ppc/ppc.factor +++ b/basis/cpu/ppc/ppc.factor @@ -338,7 +338,8 @@ M:: ppc %box-alien ( dst src temp -- ) M:: ppc %box-displaced-alien ( dst displacement base displacement' base' -- ) [ "end" define-label - "ok" define-label + "alloc" define-label + "simple-case" define-label ! If displacement is zero, return the base dst base MR 0 displacement 0 CMPI @@ -347,19 +348,21 @@ M:: ppc %box-displaced-alien ( dst displacement base displacement' base' -- ) displacement' :> temp dst 4 cells alien temp %allot ! If base is already a displaced alien, unpack it - base' base MR - displacement' displacement MR 0 base \ f tag-number CMPI - "ok" get BEQ + "simple-case" get BEQ temp base header-offset LWZ 0 temp alien type-number tag-fixnum CMPI - "ok" get BNE + "simple-case" get BNE ! displacement += base.displacement temp base 3 alien@ LWZ displacement' displacement temp ADD ! base = base.base base' base 1 alien@ LWZ - "ok" resolve-label + "alloc" get B + "simple-case" resolve-label + displacement' displacement MR + base' base MR + "alloc" resolve-label ! Store underlying-alien slot base' dst 1 alien@ STW ! Store offset