X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=basis%2Fcpu%2Fppc%2Fppc.factor;h=b3865f273ff5b4551f2a25a70938f33af7cb45ab;hp=6a3fb9dc5260695606fa81306ddf7bcdd3ed38da;hb=bbca00e2aec26098f6d021c3f21b8246eb5aaad3;hpb=9f9b6bca013ff83c408182d3023ea5d56c1b7fe4 diff --git a/basis/cpu/ppc/ppc.factor b/basis/cpu/ppc/ppc.factor index 6a3fb9dc52..b3865f273f 100644 --- a/basis/cpu/ppc/ppc.factor +++ b/basis/cpu/ppc/ppc.factor @@ -272,7 +272,7 @@ M:: ppc %float>integer ( dst src -- ) M: ppc %copy ( dst src rep -- ) { { int-rep [ MR ] } - { double-float-rep [ FMR ] } + { double-rep [ FMR ] } } case ; M: ppc %unbox-float ( dst src -- ) float-offset LFD ; @@ -352,7 +352,7 @@ M:: ppc %box-alien ( dst src temp -- ) "f" resolve-label ] with-scope ; -M:: ppc %box-displaced-alien ( dst displacement base displacement' base' -- ) +M:: ppc %box-displaced-alien ( dst displacement base displacement' base' base-class -- ) [ "end" define-label "alloc" define-label @@ -501,7 +501,7 @@ M: ppc %epilogue ( n -- ) dst \ t %load-reference "end" get resolve-label ; inline -:: %boolean ( dst temp cc -- ) +:: %boolean ( dst cc temp -- ) cc negate-cc order-cc { { cc< [ dst temp \ BLT f (%boolean) ] } { cc<= [ dst temp \ BLE f (%boolean) ] } @@ -516,7 +516,7 @@ M: ppc %epilogue ( n -- ) : (%compare-float-unordered) ( src1 src2 -- ) [ 0 ] dip FCMPU ; inline : (%compare-float-ordered) ( src1 src2 -- ) [ 0 ] dip FCMPO ; inline -:: (%compare-float) ( cc src1 src2 -- branch1 branch2 ) +:: (%compare-float) ( src1 src2 cc -- branch1 branch2 ) cc { { cc< [ src1 src2 (%compare-float-ordered) \ BLT f ] } { cc<= [ src1 src2 (%compare-float-ordered) \ BLT \ BEQ ] } @@ -534,9 +534,11 @@ M: ppc %epilogue ( n -- ) { cc/<>= [ src1 src2 (%compare-float-unordered) \ BO f ] } } case ; inline -M: ppc %compare (%compare) %boolean ; -M: ppc %compare-imm (%compare-imm) %boolean ; -M:: ppc %compare-float ( dst temp cc src1 src2 -- ) +M: ppc %compare [ (%compare) ] 2dip %boolean ; + +M: ppc %compare-imm [ (%compare-imm) ] 2dip %boolean ; + +M:: ppc %compare-float ( dst src1 src2 cc temp -- ) cc negate-cc src1 src2 (%compare-float) :> branch2 :> branch1 dst temp branch1 branch2 (%boolean) ; @@ -550,9 +552,11 @@ M:: ppc %compare-float ( dst temp cc src1 src2 -- ) { cc/= [ label BNE ] } } case ; -M: ppc %compare-branch (%compare) %branch ; -M: ppc %compare-imm-branch (%compare-imm) %branch ; -M:: ppc %compare-float-branch ( label cc src1 src2 -- ) +M: ppc %compare-branch [ (%compare) ] 2dip %branch ; + +M: ppc %compare-imm-branch [ (%compare-imm) ] 2dip %branch ; + +M:: ppc %compare-float-branch ( label src1 src2 cc -- ) cc src1 src2 (%compare-float) :> branch2 :> branch1 label branch1 execute( label -- ) branch2 [ label branch2 execute( label -- ) ] when ; @@ -560,8 +564,8 @@ M:: ppc %compare-float-branch ( label cc src1 src2 -- ) : load-from-frame ( dst n rep -- ) { { int-rep [ [ 1 ] dip LWZ ] } - { single-float-rep [ [ 1 ] dip LFS ] } - { double-float-rep [ [ 1 ] dip LFD ] } + { float-rep [ [ 1 ] dip LFS ] } + { double-rep [ [ 1 ] dip LFD ] } { stack-params [ [ 0 1 ] dip LWZ [ 0 1 ] dip param@ STW ] } } case ; @@ -570,16 +574,16 @@ M:: ppc %compare-float-branch ( label cc src1 src2 -- ) : store-to-frame ( src n rep -- ) { { int-rep [ [ 1 ] dip STW ] } - { single-float-rep [ [ 1 ] dip STFS ] } - { double-float-rep [ [ 1 ] dip STFD ] } + { float-rep [ [ 1 ] dip STFS ] } + { double-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 %spill ( src rep n -- ) + swap [ spill@ ] dip store-to-frame ; -M: ppc %reload ( dst n rep -- ) - [ spill@ ] dip load-from-frame ; +M: ppc %reload ( dst rep n -- ) + swap [ spill@ ] dip load-from-frame ; M: ppc %loop-entry ;