-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathvirtual.h
59 lines (54 loc) · 1.92 KB
/
virtual.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
47
48
49
50
51
52
53
54
55
56
57
58
59
#define INSN_OUT(c, i) \
if ((((char*)c->p->cur_ip) + sizeof(virtual_insn)) >= \
(char*)c->p->code_limit) { \
extend_dill_stream(c); \
} \
*(virtual_insn*)c->p->cur_ip = i; \
if (c->dill_debug) { \
printf("%p -- ", c->p->cur_ip); \
virtual_print_insn(c, NULL, c->p->cur_ip); \
printf("\n"); \
} \
c->p->cur_ip = ((char*)c->p->cur_ip) + sizeof(virtual_insn)
typedef struct bitv {
short len;
char vec[2];
} * bit_vec;
typedef struct basic_block {
ssize_t start;
ssize_t end;
int label;
int end_branch_label;
int fall_through;
int pred_count;
int* pred_list;
int succ_count;
int* succ_list;
bit_vec regs_used;
bit_vec regs_defined;
bit_vec live_at_end;
short* reg_assigns;
int visited;
int is_loop_start;
int is_loop_end;
} * basic_block;
typedef struct mach_info {
arg_info_list arg_info;
int bbcount;
basic_block bblist;
int prefix_code_start;
} * virtual_mach_info;
extern int
dill_type_of(dill_stream c, size_t vreg);
extern void
virtual_proc_start(dill_stream c,
char* subr_name,
int arg_count,
arg_info_list args,
dill_reg* arglist);
extern void
virtual_end(dill_stream c);
extern void
virtual_package_end(dill_stream c);
extern int
virtual_print_insn(dill_stream c, void* info_ptr, void* i);