]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'master' of git://factorcode.org/git/factor
authorSlava Pestov <slava@factorcode.org>
Fri, 21 Aug 2009 23:48:44 +0000 (18:48 -0500)
committerSlava Pestov <slava@factorcode.org>
Fri, 21 Aug 2009 23:48:44 +0000 (18:48 -0500)
1  2 
basis/cpu/ppc/ppc.factor

diff --combined basis/cpu/ppc/ppc.factor
index eba209939976772eddc28b76e16a7ee61be50077,a169982445848870581b6883b1df12cd535bdada..b8e5bdbe1086801f7b85dc0652312f86c4904070
@@@ -89,8 -89,11 +89,8 @@@ HOOK: reserved-area-size os ( -- n 
  : local@ ( n -- x )
      reserved-area-size param-save-size + + ; inline
  
 -: spill-integer@ ( n -- offset )
 -    spill-integer-offset local@ ;
 -
 -: spill-float@ ( n -- offset )
 -    spill-float-offset local@ ;
 +: spill@ ( n -- offset )
 +    spill-offset local@ ;
  
  ! Some FP intrinsics need a temporary scratch area in the stack
  ! frame, 8 bytes in size. This is in the param-save area so it
@@@ -214,7 -217,7 +214,7 @@@ M:: ppc %integer>bignum ( dst src temp 
          temp dst 1 bignum@ STW
          ! Compute sign
          temp src MR
-         temp temp cell-bits 1- SRAWI
+         temp temp cell-bits 1 - SRAWI
          temp temp 1 ANDI
          ! Store sign
          temp dst 2 bignum@ STW
@@@ -272,11 -275,9 +272,11 @@@ M:: ppc %float>integer ( dst src -- 
      fp-scratch-reg 1 0 scratch@ STFD
      dst 1 4 scratch@ LWZ ;
  
 -M: ppc %copy ( dst src -- ) MR ;
 -
 -M: ppc %copy-float ( dst src -- ) FMR ;
 +M: ppc %copy ( dst src rep -- )
 +    {
 +        { int-rep [ MR ] }
 +        { double-float-rep [ FMR ] }
 +    } case ;
  
  M: ppc %unbox-float ( dst src -- ) float-offset LFD ;
  
@@@ -477,29 -478,11 +477,29 @@@ M: ppc %compare-branch (%compare) %bran
  M: ppc %compare-imm-branch (%compare-imm) %branch ;
  M: ppc %compare-float-branch (%compare-float) %branch ;
  
 -M: ppc %spill-integer ( src n -- ) spill-integer@ 1 swap STW ;
 -M: ppc %reload-integer ( dst n -- ) spill-integer@ 1 swap LWZ ;
 +: load-from-frame ( dst n rep -- )
 +    {
 +        { int-rep [ [ 1 ] dip LWZ ] }
 +        { single-float-rep [ [ 1 ] dip LFS ] }
 +        { double-float-rep [ [ 1 ] dip LFD ] }
 +        { stack-params [ [ 0 1 ] dip LWZ [ 0 1 ] dip param@ STW ] }
 +    } case ;
  
 -M: ppc %spill-float ( src n -- ) spill-float@ 1 swap STFD ;
 -M: ppc %reload-float ( dst n -- ) spill-float@ 1 swap LFD ;
 +: next-param@ ( n -- x ) param@ stack-frame get total-size>> + ;
 +
 +: store-to-frame ( src n rep -- )
 +    {
 +        { int-rep [ [ 1 ] dip STW ] }
 +        { single-float-rep [ [ 1 ] dip STFS ] }
 +        { double-float-rep [ [ 1 ] dip STFD ] }
 +        { stack-params [ [ [ 0 1 ] dip next-param@ LWZ 0 1 ] dip STW ] }
 +    } case ;
 +
 +M: ppc %spill ( src n rep -- )
 +    [ spill@ ] dip store-to-frame ;
 +
 +M: ppc %reload ( dst n rep -- )
 +    [ spill@ ] dip load-from-frame ;
  
  M: ppc %loop-entry ;
  
@@@ -507,11 -490,26 +507,11 @@@ M: int-regs return-reg drop 3 
  M: int-regs param-regs drop { 3 4 5 6 7 8 9 10 } ;
  M: float-regs return-reg drop 1 ;
  
 -M: int-regs %save-param-reg drop 1 rot local@ STW ;
 -M: int-regs %load-param-reg drop 1 rot local@ LWZ ;
 -
 -M: single-float-rep %save-param-reg drop 1 rot local@ STFS ;
 -M: single-float-rep %load-param-reg 1 rot local@ LFS ;
 -
 -M: double-float-rep %save-param-reg drop 1 rot local@ STFD ;
 -M: double-float-rep %load-param-reg 1 rot local@ LFD ;
 -
 -M: stack-params %load-param-reg ( stack reg rep -- )
 -    drop [ 0 1 rot local@ LWZ 0 1 ] dip param@ STW ;
 -
 -: next-param@ ( n -- x ) param@ stack-frame get total-size>> + ;
 +M:: ppc %save-param-reg ( stack reg rep -- )
 +    reg stack local@ rep store-to-frame ;
  
 -M: stack-params %save-param-reg ( stack reg rep -- )
 -    #! Funky. Read the parameter from the caller's stack frame.
 -    #! This word is used in callbacks
 -    drop
 -    [ 0 1 ] dip next-param@ LWZ
 -    [ 0 1 ] dip local@ STW ;
 +M:: ppc %load-param-reg ( stack reg rep -- )
 +    reg stack local@ rep load-from-frame ;
  
  M: ppc %prepare-unbox ( -- )
      ! First parameter is top of stack