]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/save-contexts/save-contexts.factor
Switch to https urls
[factor.git] / basis / compiler / cfg / save-contexts / save-contexts.factor
1 ! Copyright (C) 2009, 2010 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: compiler.cfg.instructions compiler.cfg.registers
4 compiler.cfg.rpo cpu.architecture kernel sequences ;
5 IN: compiler.cfg.save-contexts
6
7 UNION: context-modifier ##phi ##inc ##callback-inputs ;
8
9 : save-context-offset ( insns -- n )
10     [ context-modifier? not ] find drop ;
11
12 UNION: needs-save-context-insn
13     ##alien-invoke
14     ##alien-indirect
15     ##box-long-long
16     ##box ;
17
18 : insns-needs-save-context? ( insns -- ? )
19     [ needs-save-context-insn? ] any? ;
20
21 : insert-save-context ( insns -- insns' )
22     dup insns-needs-save-context? [
23         [
24             int-rep next-vreg-rep
25             int-rep next-vreg-rep
26             ##save-context new-insn
27         ] dip
28         [ save-context-offset ] keep
29         insert-nth
30     ] when ;
31
32 : insert-save-contexts ( cfg -- )
33     [ insert-save-context ] simple-optimization ;