1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs kernel namespaces sequences
4 compiler.cfg.instructions compiler.cfg.registers
5 compiler.cfg.renaming.functor ;
6 IN: compiler.cfg.renaming
10 : rename-value ( vreg -- vreg' )
11 renamings get ?at drop ;
13 RENAMING: rename [ rename-value ] [ rename-value ]
15 : fresh-vreg ( vreg -- vreg' )
16 reg-class>> next-vreg ;
18 GENERIC: fresh-insn-temps ( insn -- )
20 M: ##write-barrier fresh-insn-temps
21 [ fresh-vreg ] change-card#
22 [ fresh-vreg ] change-table
25 M: ##unary/temp fresh-insn-temps
26 [ fresh-vreg ] change-temp drop ;
28 M: ##allot fresh-insn-temps
29 [ fresh-vreg ] change-temp drop ;
31 M: ##dispatch fresh-insn-temps
32 [ fresh-vreg ] change-temp drop ;
34 M: ##slot fresh-insn-temps
35 [ fresh-vreg ] change-temp drop ;
37 M: ##set-slot fresh-insn-temps
38 [ fresh-vreg ] change-temp drop ;
40 M: ##string-nth fresh-insn-temps
41 [ fresh-vreg ] change-temp drop ;
43 M: ##set-string-nth-fast fresh-insn-temps
44 [ fresh-vreg ] change-temp drop ;
46 M: ##compare fresh-insn-temps
47 [ fresh-vreg ] change-temp drop ;
49 M: ##compare-imm fresh-insn-temps
50 [ fresh-vreg ] change-temp drop ;
52 M: ##compare-float fresh-insn-temps
53 [ fresh-vreg ] change-temp drop ;
55 M: ##gc fresh-insn-temps
56 [ fresh-vreg ] change-temp1
57 [ fresh-vreg ] change-temp2
60 M: _dispatch fresh-insn-temps
61 [ fresh-vreg ] change-temp drop ;
63 M: insn fresh-insn-temps drop ;