]> gitweb.factorcode.org Git - factor.git/blob - vm/quotations.hpp
vm: emit safepoints before VM compiler prologs
[factor.git] / vm / quotations.hpp
1 namespace factor
2 {
3
4 struct quotation_jit : public jit {
5         data_root<array> elements;
6         bool compiling, relocate;
7
8         explicit quotation_jit(cell owner, bool compiling_, bool relocate_, factor_vm *vm)
9                 : jit(code_block_unoptimized,owner,vm),
10                   elements(false_object,vm),
11                   compiling(compiling_),
12                   relocate(relocate_){};
13
14         void init_quotation(cell quot);
15         void emit_mega_cache_lookup(cell methods, fixnum index, cell cache);
16         bool primitive_call_p(cell i, cell length);
17         bool trivial_quotation_p(array *elements);
18         void emit_quot(cell quot);
19         void emit_prolog(bool safepoint, bool stack_frame);
20         void emit_epilog(bool safepoint, bool stack_frame);
21         bool fast_if_p(cell i, cell length);
22         bool fast_dip_p(cell i, cell length);
23         bool fast_2dip_p(cell i, cell length);
24         bool fast_3dip_p(cell i, cell length);
25         bool mega_lookup_p(cell i, cell length);
26         bool declare_p(cell i, cell length);
27         bool special_subprimitive_p(cell obj);
28         bool word_stack_frame_p(cell obj);
29         bool word_safepoint_p(cell obj);
30         bool stack_frame_p();
31         bool safepoint_p();
32         void iterate_quotation();
33 };
34
35 VM_C_API cell lazy_jit_compile(cell quot, factor_vm *parent);
36
37 }