factor/library/compiler/x86/stack.factor

34 lines
1.0 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
2005-12-02 03:15:27 -05:00
USING: alien arrays assembler compiler inference kernel
kernel-internals lists math memory sequences words ;
2005-01-06 21:42:07 -05:00
2005-12-02 02:25:44 -05:00
: reg-stack ( n reg -- op ) swap cell * neg 2array ;
2005-09-04 17:07:59 -04:00
2005-12-04 19:56:42 -05:00
M: ds-loc v>operand ds-loc-n ds-reg reg-stack ;
2005-09-04 17:07:59 -04:00
2005-12-04 19:56:42 -05:00
M: cs-loc v>operand cs-loc-n cs-reg reg-stack ;
2005-09-04 17:07:59 -04:00
M: %peek generate-node ( vop -- )
2005-12-04 19:56:42 -05:00
drop 0 output-operand 0 input-operand MOV ;
2005-09-04 17:07:59 -04:00
M: %replace generate-node ( vop -- )
2005-12-04 19:56:42 -05:00
drop 0 output-operand 0 input-operand MOV ;
2005-01-06 21:42:07 -05:00
2005-12-04 19:56:42 -05:00
: (%inc) 0 input cell * dup 0 > [ ADD ] [ neg SUB ] if ;
2005-01-06 21:42:07 -05:00
2005-12-04 19:56:42 -05:00
M: %inc-d generate-node ( vop -- ) drop ds-reg (%inc) ;
2005-09-04 17:07:59 -04:00
2005-12-04 19:56:42 -05:00
M: %inc-r generate-node ( vop -- ) drop cs-reg (%inc) ;
2005-01-06 21:42:07 -05:00
2005-05-06 18:33:40 -04:00
M: %immediate generate-node ( vop -- )
2005-12-04 19:56:42 -05:00
drop 0 output-operand 0 input address MOV ;
2005-01-06 21:42:07 -05:00
: load-indirect ( dest literal -- )
2005-12-04 22:55:02 -05:00
add-literal address-operand 1array 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-12-04 19:56:42 -05:00
drop 0 output-operand 0 input load-indirect ;