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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#include <stdint.h>
typedef struct IR IR;
typedef struct IRVar IRVar;
typedef enum
{
IR_POINTER,
IR_UINT64,
IR_UINT32,
IR_UINT16,
IR_UINT8,
IR_INT64,
IR_INT32,
IR_INT16,
IR_INT8
} IRBasicType;
IR *ir_new (void);
IRVar *ir_arg (IR *ir,
int arg_no,
IRBasicType type);
IRVar *ir_var_new (IR *ir,
int n_fields,
IRBasicType type);
IRVar *ir_var_new_similar (IR *ir,
IRVar *other);
IRVar *ir_var_new_wider (IR *ir,
IRVar *other);
/* FIXME: should be iconst16, iconst32, iconst64 etc. */
IRVar *ir_iconst1 (IR *ir,
uint32_t value);
IRVar *ir_iconst2 (IR *ir,
uint32_t value);
void ir_unpack_low (IR *ir,
IRVar *dest,
IRVar *src1,
IRVar *src2);
void ir_unpack_high (IR *ir,
IRVar *dest,
IRVar *src1,
IRVar *src2);
void ir_pack (IR *ir,
IRVar *dest,
IRVar *hi,
IRVar *lo);
void ir_shuffle4 (IR *ir,
IRVar *dest,
IRVar *src1,
int s1,
int s2,
int s3,
int s4);
void ir_label (IR *ir,
const char *name);
void ir_jump_neq (IR *ir,
IRVar *op1,
IRVar *op2,
const char *label);
void ir_jump_nand (IR *ir,
IRVar *op1,
IRVar *op2,
const char *label);
void ir_mul (IR *ir,
IRVar *dest,
IRVar *src1,
IRVar *src2);
void ir_shl (IR *ir,
IRVar *dest,
IRVar *src,
int n_pos);
void ir_shrl (IR *ir,
IRVar *dest,
IRVar *src,
IRVar *n_pos);
void ir_shra (IR *ir,
IRVar *dest,
IRVar *src,
int n_pos);
void ir_mov (IR *ir,
IRVar *dest,
IRVar *src);
void ir_sub (IR *ir,
IRVar *dest,
IRVar *src1,
IRVar *src2);
void ir_add (IR *ir,
IRVar *dest,
IRVar *src1,
IRVar *src2);
void ir_xor (IR *ir,
IRVar *dest,
IRVar *src1,
IRVar *src2);
void ir_adds (IR *ir,
IRVar *dest,
IRVar *src1,
IRVar *dest2);
void ir_load128 (IR *ir,
IRVar *dest,
IRVar *pointer);
void ir_load64 (IR *ir,
IRVar *dest,
IRVar *pointer);
void ir_load32 (IR *ir,
IRVar *dest,
IRVar *pointer);
void ir_load8 (IR *ir,
IRVar *dest,
IRVar *pointer);
void ir_store (IR *ir,
IRVar *src,
IRVar *pointer);
void ir_jump (IR *ir,
const char *label);
|