/
compile.h
46 lines (36 loc) · 1.77 KB
/
compile.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
struct MVMJitCode {
void (*func_ptr)(MVMThreadContext *tc, MVMCompUnit *cu, void * label);
size_t size;
MVMuint8 *bytecode;
MVMStaticFrame *sf;
/* The basic idea here is that /all/ label names are indexes into
* the single labels array. This isn't particularly efficient at
* runtime (because we need a second dereference to figure the
* labels out), but very simple for me now, and super-easy to
* optimise at a later date */
MVMint32 num_labels;
void **labels;
MVMint32 num_deopts;
MVMJitDeopt *deopts;
MVMint32 num_inlines;
MVMJitInline *inlines;
MVMint32 num_handlers;
MVMJitHandler *handlers;
MVMint32 spill_size;
MVMint32 seq_nr;
};
MVMJitCode* MVM_jit_compile_graph(MVMThreadContext *tc, MVMJitGraph *graph);
void MVM_jit_compile_breakpoint(void);
void MVM_jit_destroy_code(MVMThreadContext *tc, MVMJitCode *code);
void MVM_jit_enter_code(MVMThreadContext *tc, MVMCompUnit *cu,
MVMJitCode * code);
/* Peseudotile compile functions */
void MVM_jit_compile_label(MVMThreadContext *tc, MVMJitCompiler *compiler,
MVMJitExprTree *tree, MVMint32 node,
MVMJitValueDescriptor **values, MVMJitExprNode *args);
void MVM_jit_compile_branch(MVMThreadContext *tc, MVMJitCompiler *compiler,
MVMJitExprTree *tree, MVMint32 node,
MVMJitValueDescriptor **values, MVMJitExprNode *args);
void MVM_jit_compile_conditional_branch(MVMThreadContext *tc, MVMJitCompiler *compiler,
MVMJitExprTree *tree, MVMint32 node,
MVMJitValueDescriptor **values, MVMJitExprNode *args);