2008-10-21 04:20:48 -04:00
|
|
|
! Copyright (C) 2008 Slava Pestov.
|
2008-09-10 23:11:03 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-10-21 04:20:48 -04:00
|
|
|
USING: math sequences kernel cpu.architecture
|
2008-10-20 02:56:28 -04:00
|
|
|
compiler.cfg.instructions compiler.cfg.registers
|
2008-10-20 21:40:15 -04:00
|
|
|
compiler.cfg.hats ;
|
|
|
|
IN: compiler.cfg.stacks
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: ds-drop ( -- )
|
|
|
|
-1 ##inc-d ;
|
2008-09-17 19:52:11 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: ds-pop ( -- vreg )
|
|
|
|
D 0 ^^peek -1 ##inc-d ;
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: ds-push ( vreg -- )
|
|
|
|
1 ##inc-d D 0 ##replace ;
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: ds-load ( n -- vregs )
|
2008-11-11 19:46:31 -05:00
|
|
|
dup 0 =
|
|
|
|
[ drop f ]
|
|
|
|
[ [ <reversed> [ <ds-loc> ^^peek ] map ] [ neg ##inc-d ] bi ] if ;
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: ds-store ( vregs -- )
|
2008-11-11 19:46:31 -05:00
|
|
|
[
|
|
|
|
<reversed>
|
|
|
|
[ length ##inc-d ]
|
|
|
|
[ [ <ds-loc> ##replace ] each-index ] bi
|
|
|
|
] unless-empty ;
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: rs-load ( n -- vregs )
|
2008-11-11 19:46:31 -05:00
|
|
|
dup 0 =
|
|
|
|
[ drop f ]
|
|
|
|
[ [ <reversed> [ <rs-loc> ^^peek ] map ] [ neg ##inc-r ] bi ] if ;
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: rs-store ( vregs -- )
|
2008-11-11 19:46:31 -05:00
|
|
|
[
|
|
|
|
<reversed>
|
|
|
|
[ length ##inc-r ]
|
|
|
|
[ [ <rs-loc> ##replace ] each-index ] bi
|
|
|
|
] unless-empty ;
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: 2inputs ( -- vreg1 vreg2 )
|
|
|
|
D 1 ^^peek D 0 ^^peek -2 ##inc-d ;
|
2008-09-10 23:11:03 -04:00
|
|
|
|
2008-10-21 04:20:48 -04:00
|
|
|
: 3inputs ( -- vreg1 vreg2 vreg3 )
|
|
|
|
D 2 ^^peek D 1 ^^peek D 0 ^^peek -3 ##inc-d ;
|