]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/hats/hats.factor
Merge branch 'master' into experimental (untested!)
[factor.git] / basis / compiler / cfg / hats / hats.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays byte-arrays kernel layouts math namespaces
4 sequences classes.tuple cpu.architecture compiler.cfg.registers
5 compiler.cfg.instructions ;
6 IN: compiler.cfg.hats
7
8 : i int-regs next-vreg ; inline
9 : ^^i i dup ; inline
10 : ^^i1 [ ^^i ] dip ; inline
11 : ^^i2 [ ^^i ] 2dip ; inline
12 : ^^i3 [ ^^i ] 3dip ; inline
13
14 : d double-float-regs next-vreg ; inline
15 : ^^d d dup ; inline
16 : ^^d1 [ ^^d ] dip ; inline
17 : ^^d2 [ ^^d ] 2dip ; inline
18 : ^^d3 [ ^^d ] 3dip ; inline
19
20 : ^^load-literal ( obj -- dst ) ^^i1 ##load-literal ; inline
21 : ^^peek ( loc -- dst ) ^^i1 ##peek ; inline
22 : ^^slot ( obj slot tag -- dst ) ^^i3 i ##slot ; inline
23 : ^^slot-imm ( obj slot tag -- dst ) ^^i3 ##slot-imm ; inline
24 : ^^set-slot ( src obj slot tag -- ) i ##set-slot ; inline
25 : ^^string-nth ( obj index -- dst ) ^^i2 i ##string-nth ; inline
26 : ^^add ( src1 src2 -- dst ) ^^i2 ##add ; inline
27 : ^^add-imm ( src1 src2 -- dst ) ^^i2 ##add-imm ; inline
28 : ^^sub ( src1 src2 -- dst ) ^^i2 ##sub ; inline
29 : ^^sub-imm ( src1 src2 -- dst ) ^^i2 ##sub-imm ; inline
30 : ^^mul ( src1 src2 -- dst ) ^^i2 ##mul ; inline
31 : ^^mul-imm ( src1 src2 -- dst ) ^^i2 ##mul-imm ; inline
32 : ^^and ( input mask -- output ) ^^i2 ##and ; inline
33 : ^^and-imm ( input mask -- output ) ^^i2 ##and-imm ; inline
34 : ^^or ( src1 src2 -- dst ) ^^i2 ##or ; inline
35 : ^^or-imm ( src1 src2 -- dst ) ^^i2 ##or-imm ; inline
36 : ^^xor ( src1 src2 -- dst ) ^^i2 ##xor ; inline
37 : ^^xor-imm ( src1 src2 -- dst ) ^^i2 ##xor-imm ; inline
38 : ^^shl-imm ( src1 src2 -- dst ) ^^i2 ##shl-imm ; inline
39 : ^^shr-imm ( src1 src2 -- dst ) ^^i2 ##shr-imm ; inline
40 : ^^sar-imm ( src1 src2 -- dst ) ^^i2 ##sar-imm ; inline
41 : ^^not ( src -- dst ) ^^i1 ##not ; inline
42 : ^^log2 ( src -- dst ) ^^i1 ##log2 ; inline
43 : ^^bignum>integer ( src -- dst ) ^^i1 i ##bignum>integer ; inline
44 : ^^integer>bignum ( src -- dst ) ^^i1 i ##integer>bignum ; inline
45 : ^^add-float ( src1 src2 -- dst ) ^^d2 ##add-float ; inline
46 : ^^sub-float ( src1 src2 -- dst ) ^^d2 ##sub-float ; inline
47 : ^^mul-float ( src1 src2 -- dst ) ^^d2 ##mul-float ; inline
48 : ^^div-float ( src1 src2 -- dst ) ^^d2 ##div-float ; inline
49 : ^^float>integer ( src -- dst ) ^^i1 ##float>integer ; inline
50 : ^^integer>float ( src -- dst ) ^^d1 ##integer>float ; inline
51 : ^^allot ( size class -- dst ) ^^i2 i ##allot ; inline
52 : ^^allot-tuple ( n -- dst ) 2 + cells tuple ^^allot ; inline
53 : ^^allot-array ( n -- dst ) 2 + cells array ^^allot ; inline
54 : ^^allot-byte-array ( n -- dst ) 2 cells + byte-array ^^allot ; inline
55 : ^^box-float ( src -- dst ) ^^i1 i ##box-float ; inline
56 : ^^unbox-float ( src -- dst ) ^^d1 ##unbox-float ; inline
57 : ^^box-alien ( src -- dst ) ^^i1 i ##box-alien ; inline
58 : ^^unbox-alien ( src -- dst ) ^^i1 ##unbox-alien ; inline
59 : ^^unbox-c-ptr ( src class -- dst ) ^^i2 i ##unbox-c-ptr ;
60 : ^^alien-unsigned-1 ( src -- dst ) ^^i1 ##alien-unsigned-1 ; inline
61 : ^^alien-unsigned-2 ( src -- dst ) ^^i1 ##alien-unsigned-2 ; inline
62 : ^^alien-unsigned-4 ( src -- dst ) ^^i1 ##alien-unsigned-4 ; inline
63 : ^^alien-signed-1 ( src -- dst ) ^^i1 ##alien-signed-1 ; inline
64 : ^^alien-signed-2 ( src -- dst ) ^^i1 ##alien-signed-2 ; inline
65 : ^^alien-signed-4 ( src -- dst ) ^^i1 ##alien-signed-4 ; inline
66 : ^^alien-cell ( src -- dst ) ^^i1 ##alien-cell ; inline
67 : ^^alien-float ( src -- dst ) ^^d1 ##alien-float ; inline
68 : ^^alien-double ( src -- dst ) ^^d1 ##alien-double ; inline
69 : ^^alien-global ( symbol library -- dst ) ^^i2 ##alien-global ; inline
70 : ^^compare ( src1 src2 cc -- dst ) ^^i3 i ##compare ; inline
71 : ^^compare-imm ( src1 src2 cc -- dst ) ^^i3 i ##compare-imm ; inline
72 : ^^compare-float ( src1 src2 cc -- dst ) ^^i3 i ##compare-float ; inline
73 : ^^offset>slot ( vreg -- vreg' ) cell 4 = [ 1 ^^shr-imm ] when ; inline
74 : ^^tag-fixnum ( src -- dst ) ^^i1 ##tag-fixnum ; inline
75 : ^^untag-fixnum ( src -- dst ) ^^i1 ##untag-fixnum ; inline