summaryrefslogtreecommitdiff
path: root/ir.h
blob: d44c6994f75f5395f8957ffdc19b845de23db811 (plain)
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);