From 6ab000cc527c1cc01c772c4b4e95e77597588242 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 14 Jul 2008 03:06:20 -0500 Subject: [PATCH] Updating PowerPC backend --- core/cpu/ppc/bootstrap.factor | 15 ++++++++++----- core/cpu/ppc/intrinsics/intrinsics.factor | 19 +++++++++---------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/core/cpu/ppc/bootstrap.factor b/core/cpu/ppc/bootstrap.factor index bb6917cea1..705ddac06d 100755 --- a/core/cpu/ppc/bootstrap.factor +++ b/core/cpu/ppc/bootstrap.factor @@ -135,7 +135,6 @@ big-endian on 3 ds-reg 0 STW ] f f f \ slot define-sub-primitive - ! Shufflers [ ds-reg dup 4 SUBI @@ -248,7 +247,7 @@ big-endian on ] f f f \ >r define-sub-primitive [ - 3 rs-reg 0 STW + 3 rs-reg 0 LWZ rs-reg dup 4 SUBI 3 ds-reg 4 STWU ] f f f \ r> define-sub-primitive @@ -261,11 +260,11 @@ big-endian on 5 ds-reg -4 LWZU 5 0 4 CMP 2 swap execute ! magic number - 3 \ f tag-number LI + \ f tag-number 3 LI 3 ds-reg 0 STW ; : define-jit-compare ( insn word -- ) - [ [ jit-compare ] curry rc-absolute-ppc-2/2 rt-literal 0 ] dip + [ [ jit-compare ] curry rc-absolute-ppc-2/2 rt-literal 1 ] dip define-sub-primitive ; \ BEQ \ eq? define-jit-compare @@ -285,7 +284,13 @@ big-endian on [ \ SUBF jit-math ] f f f \ fixnum-fast define-sub-primitive -[ \ MULLW jit-math ] f f f \ fixnum*fast define-sub-primitive +[ + 3 ds-reg 0 LWZ + 4 ds-reg -4 LWZU + 4 4 tag-bits get SRAWI + 5 3 4 MULLW + 5 ds-reg 0 STW +] f f f \ fixnum*fast define-sub-primitive [ \ AND jit-math ] f f f \ fixnum-bitand define-sub-primitive diff --git a/core/cpu/ppc/intrinsics/intrinsics.factor b/core/cpu/ppc/intrinsics/intrinsics.factor index 5a39cbca71..4e1c3512af 100755 --- a/core/cpu/ppc/intrinsics/intrinsics.factor +++ b/core/cpu/ppc/intrinsics/intrinsics.factor @@ -1,14 +1,13 @@ ! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.accessors alien.c-types arrays cpu.ppc.assembler -cpu.ppc.architecture cpu.ppc.allot cpu.architecture kernel -kernel.private math math.private namespaces sequences words -generic quotations byte-arrays hashtables hashtables.private -generator generator.registers generator.fixup sequences.private -sbufs vectors system layouts math.floats.private -classes classes.tuple classes.tuple.private sbufs.private -vectors.private strings.private slots.private combinators -compiler.constants ; +USING: accessors alien alien.accessors alien.c-types arrays +cpu.ppc.assembler cpu.ppc.architecture cpu.ppc.allot +cpu.architecture kernel kernel.private math math.private +namespaces sequences words generic quotations byte-arrays +hashtables hashtables.private generator generator.registers +generator.fixup sequences.private sbufs vectors system layouts +math.floats.private classes slots.private combinators +compiler.constants optimizer.allot ; IN: cpu.ppc.intrinsics : %slot-literal-known-tag @@ -445,7 +444,7 @@ IN: cpu.ppc.intrinsics ! Store tagged ptr in reg "tuple" get tuple %store-tagged ] H{ - { +input+ { { [ tuple-layout? ] "layout" } } } + { +input+ { { [ ] "layout" } } } { +scratch+ { { f "tuple" } } } { +output+ { "tuple" } } } define-intrinsic