factor/library/compiler/x86/stack.factor

38 lines
1.1 KiB
Factor
Raw Normal View History

2005-01-06 21:42:07 -05:00
! Copyright (C) 2005 Slava Pestov.
2005-02-14 21:58:07 -05:00
! See http://factor.sf.net/license.txt for BSD license.
2005-05-09 02:34:15 -04:00
IN: compiler-backend
USING: alien assembler compiler inference kernel lists math
memory sequences words ;
2005-01-06 21:42:07 -05:00
2005-05-06 18:33:40 -04:00
: reg-stack ( reg n -- op ) cell * neg 2list ;
: ds-op ( n -- op ) ESI swap reg-stack ;
2005-09-04 17:07:59 -04:00
: cs-op ( n -- op ) EBX swap reg-stack ;
: (%peek) dup vop-out-1 v>operand swap vop-in-1 ;
M: %peek-d generate-node ( vop -- ) (%peek) ds-op MOV ;
M: %peek-r generate-node ( vop -- ) (%peek) cs-op MOV ;
: (%replace) dup vop-in-2 v>operand swap vop-in-1 ;
M: %replace-d generate-node ( vop -- ) (%replace) ds-op swap MOV ;
2005-01-06 21:42:07 -05:00
2005-09-04 17:07:59 -04:00
M: %replace-r generate-node ( vop -- ) (%replace) cs-op swap MOV ;
2005-01-06 21:42:07 -05:00
2005-09-04 17:07:59 -04:00
: (%inc) swap vop-in-1 cell * dup 0 > [ ADD ] [ neg SUB ] ifte ;
2005-01-06 21:42:07 -05:00
2005-09-04 17:07:59 -04:00
M: %inc-d generate-node ( vop -- ) ESI (%inc) ;
M: %inc-r generate-node ( vop -- ) EBX (%inc) ;
2005-01-06 21:42:07 -05:00
2005-05-06 18:33:40 -04:00
M: %immediate generate-node ( vop -- )
2005-05-16 17:01:39 -04:00
dup vop-out-1 v>operand swap vop-in-1 address MOV ;
2005-01-06 21:42:07 -05:00
: load-indirect ( dest literal -- )
intern-literal unit MOV 0 0 rel-address ;
2005-05-06 18:33:40 -04:00
M: %indirect generate-node ( vop -- )
#! indirect load of a literal through a table
2005-05-16 17:01:39 -04:00
dup vop-out-1 v>operand swap vop-in-1 load-indirect ;