compiler.cfg.*: ds-load removed
parent
cc1903bec1
commit
6559382028
|
@ -163,7 +163,7 @@ M: #push emit-node
|
||||||
|
|
||||||
: make-input-map ( #shuffle -- assoc )
|
: make-input-map ( #shuffle -- assoc )
|
||||||
[ in-d>> ds-loc ] [ in-r>> rs-loc ] bi
|
[ in-d>> ds-loc ] [ in-r>> rs-loc ] bi
|
||||||
[ over vregs>stack-locs zip ] 2bi@ append ;
|
[ over length stack-locs zip ] 2bi@ append ;
|
||||||
|
|
||||||
: height-changes ( #shuffle -- height-changes )
|
: height-changes ( #shuffle -- height-changes )
|
||||||
{ [ out-d>> ] [ in-d>> ] [ out-r>> ] [ in-r>> ] } cleave
|
{ [ out-d>> ] [ in-d>> ] [ out-r>> ] [ in-r>> ] } cleave
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2008, 2010 Slava Pestov.
|
! Copyright (C) 2008, 2010 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays byte-arrays compiler.cfg.builder.blocks
|
USING: accessors arrays byte-arrays compiler.cfg.builder.blocks
|
||||||
compiler.cfg.hats compiler.cfg.instructions compiler.cfg.stacks
|
compiler.cfg.hats compiler.cfg.instructions compiler.cfg.registers
|
||||||
compiler.constants compiler.tree.propagation.info
|
compiler.cfg.stacks compiler.constants compiler.tree.propagation.info
|
||||||
cpu.architecture fry kernel layouts locals math math.order
|
cpu.architecture fry kernel layouts locals math math.order
|
||||||
sequences ;
|
sequences ;
|
||||||
IN: compiler.cfg.intrinsics.allot
|
IN: compiler.cfg.intrinsics.allot
|
||||||
|
@ -12,11 +12,11 @@ IN: compiler.cfg.intrinsics.allot
|
||||||
|
|
||||||
: emit-simple-allot ( node -- )
|
: emit-simple-allot ( node -- )
|
||||||
[ in-d>> length ] [ node-output-infos first class>> ] bi
|
[ in-d>> length ] [ node-output-infos first class>> ] bi
|
||||||
[ drop ds-load ] [ [ 1 + cells ] dip ^^allot ] [ nip ] 2tri
|
[ drop ds-loc load-vregs ] [ [ 1 + cells ] dip ^^allot ] [ nip ] 2tri
|
||||||
[ ##set-slots, ] [ [ drop ] [ ds-push ] [ drop ] tri* ] 3bi ;
|
[ ##set-slots, ] [ [ drop ] [ ds-push ] [ drop ] tri* ] 3bi ;
|
||||||
|
|
||||||
: tuple-slot-regs ( layout -- vregs )
|
: tuple-slot-regs ( layout -- vregs )
|
||||||
[ second ds-load ] [ ^^load-literal ] bi prefix ;
|
[ second ds-loc load-vregs ] [ ^^load-literal ] bi prefix ;
|
||||||
|
|
||||||
: ^^allot-tuple ( n -- dst )
|
: ^^allot-tuple ( n -- dst )
|
||||||
2 + cells tuple ^^allot ;
|
2 + cells tuple ^^allot ;
|
||||||
|
|
|
@ -8,14 +8,14 @@ IN: compiler.cfg.stacks.local.tests
|
||||||
{ { 3 3 } { 0 0 } }
|
{ { 3 3 } { 0 0 } }
|
||||||
} [
|
} [
|
||||||
test-init
|
test-init
|
||||||
3 <ds-loc> inc-stack height-state get
|
D 3 inc-stack height-state get
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{
|
{
|
||||||
{ { 5 3 } { 0 0 } }
|
{ { 5 3 } { 0 0 } }
|
||||||
} [
|
} [
|
||||||
{ { 2 0 } { 0 0 } } height-state set
|
{ { 2 0 } { 0 0 } } height-state set
|
||||||
3 <ds-loc> inc-stack height-state get
|
D 3 inc-stack height-state get
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -40,7 +40,14 @@ IN: compiler.cfg.stacks.local.tests
|
||||||
|
|
||||||
{ 80 } [
|
{ 80 } [
|
||||||
test-init
|
test-init
|
||||||
80 D 77 replace-loc D 77 peek-loc
|
80 D 77 replace-loc
|
||||||
|
D 77 peek-loc
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ H{ { D -1 40 } } } [
|
||||||
|
test-init
|
||||||
|
D 1 inc-stack 40 D 0 replace-loc
|
||||||
|
replace-mapping get
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ 0 } [
|
{ 0 } [
|
||||||
|
|
|
@ -19,3 +19,19 @@ IN: compiler.cfg.stacks.tests
|
||||||
replace-mapping get
|
replace-mapping get
|
||||||
height-state get
|
height-state get
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! load-vregs
|
||||||
|
{
|
||||||
|
{ 1 2 3 4 5 6 7 8 }
|
||||||
|
} [
|
||||||
|
test-init 8 ds-loc load-vregs
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! 2inputs
|
||||||
|
{
|
||||||
|
1
|
||||||
|
2
|
||||||
|
{ { -2 -2 } { 0 0 } }
|
||||||
|
} [
|
||||||
|
test-init 2inputs height-state get
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -26,39 +26,36 @@ IN: compiler.cfg.stacks
|
||||||
finalize-stack-shuffling
|
finalize-stack-shuffling
|
||||||
} apply-passes ;
|
} apply-passes ;
|
||||||
|
|
||||||
: ds-drop ( -- ) -1 <ds-loc> inc-stack ;
|
: stack-locs ( loc-class n -- locs )
|
||||||
|
iota [ swap new swap >>n ] with map <reversed> ;
|
||||||
|
|
||||||
|
: (load-vregs) ( n loc-class -- vregs )
|
||||||
|
swap stack-locs [ peek-loc ] map ;
|
||||||
|
|
||||||
|
: load-vregs ( n loc-class -- vregs )
|
||||||
|
[ (load-vregs) ] [ new swap neg >>n inc-stack ] 2bi ;
|
||||||
|
|
||||||
|
: store-vregs ( vregs loc-class -- )
|
||||||
|
over length stack-locs [ replace-loc ] 2each ;
|
||||||
|
|
||||||
|
! Utility
|
||||||
|
: ds-drop ( -- ) D -1 inc-stack ;
|
||||||
|
|
||||||
: ds-peek ( -- vreg ) D 0 peek-loc ;
|
: ds-peek ( -- vreg ) D 0 peek-loc ;
|
||||||
|
|
||||||
: ds-pop ( -- vreg ) ds-peek ds-drop ;
|
: ds-pop ( -- vreg ) ds-peek ds-drop ;
|
||||||
|
|
||||||
: ds-push ( vreg -- )
|
: ds-push ( vreg -- )
|
||||||
1 <ds-loc> inc-stack D 0 replace-loc ;
|
D 1 inc-stack D 0 replace-loc ;
|
||||||
|
|
||||||
: stack-locs ( loc-class n -- locs )
|
|
||||||
iota [ swap new swap >>n ] with map <reversed> ;
|
|
||||||
|
|
||||||
: vregs>stack-locs ( loc-class vregs -- locs )
|
|
||||||
length stack-locs ;
|
|
||||||
|
|
||||||
: ds-load ( n -- vregs )
|
|
||||||
[ iota <reversed> [ <ds-loc> peek-loc ] map ]
|
|
||||||
[ neg <ds-loc> inc-stack ] bi ;
|
|
||||||
|
|
||||||
: store-vregs ( vregs loc-class -- )
|
|
||||||
over vregs>stack-locs [ replace-loc ] 2each ;
|
|
||||||
|
|
||||||
: (2inputs) ( -- vreg1 vreg2 )
|
: (2inputs) ( -- vreg1 vreg2 )
|
||||||
D 1 peek-loc D 0 peek-loc ;
|
2 ds-loc (load-vregs) first2 ;
|
||||||
|
|
||||||
: 2inputs ( -- vreg1 vreg2 )
|
: 2inputs ( -- vreg1 vreg2 )
|
||||||
(2inputs) -2 <ds-loc> inc-stack ;
|
2 ds-loc load-vregs first2 ;
|
||||||
|
|
||||||
: (3inputs) ( -- vreg1 vreg2 vreg3 )
|
|
||||||
D 2 peek-loc D 1 peek-loc D 0 peek-loc ;
|
|
||||||
|
|
||||||
: 3inputs ( -- vreg1 vreg2 vreg3 )
|
: 3inputs ( -- vreg1 vreg2 vreg3 )
|
||||||
(3inputs) -3 <ds-loc> inc-stack ;
|
3 ds-loc load-vregs first3 ;
|
||||||
|
|
||||||
: binary-op ( quot -- )
|
: binary-op ( quot -- )
|
||||||
[ 2inputs ] dip call ds-push ; inline
|
[ 2inputs ] dip call ds-push ; inline
|
||||||
|
|
Loading…
Reference in New Issue