root / target-arm / helpers.h @ 8984bd2e
History | View | Annotate | Download (8.9 kB)
1 | 6ddbc6e4 | pbrook | #define DEF_HELPER(name, ret, args) ret glue(helper_,name) args;
|
---|---|---|---|
2 | 1497c961 | pbrook | |
3 | 1497c961 | pbrook | #ifdef GEN_HELPER
|
4 | d9ba4830 | pbrook | #define DEF_HELPER_0_0(name, ret, args) \
|
5 | d9ba4830 | pbrook | DEF_HELPER(name, ret, args) \ |
6 | d9ba4830 | pbrook | static inline void gen_helper_##name(void) \ |
7 | d9ba4830 | pbrook | { \ |
8 | d9ba4830 | pbrook | tcg_gen_helper_0_0(helper_##name); \ |
9 | d9ba4830 | pbrook | } |
10 | d9ba4830 | pbrook | #define DEF_HELPER_0_1(name, ret, args) \
|
11 | d9ba4830 | pbrook | DEF_HELPER(name, ret, args) \ |
12 | d9ba4830 | pbrook | static inline void gen_helper_##name(TCGv arg1) \ |
13 | d9ba4830 | pbrook | { \ |
14 | d9ba4830 | pbrook | tcg_gen_helper_0_1(helper_##name, arg1); \ |
15 | d9ba4830 | pbrook | } |
16 | d9ba4830 | pbrook | #define DEF_HELPER_0_2(name, ret, args) \
|
17 | d9ba4830 | pbrook | DEF_HELPER(name, ret, args) \ |
18 | d9ba4830 | pbrook | static inline void gen_helper_##name(TCGv arg1, TCGv arg2) \ |
19 | d9ba4830 | pbrook | { \ |
20 | d9ba4830 | pbrook | tcg_gen_helper_0_2(helper_##name, arg1, arg2); \ |
21 | d9ba4830 | pbrook | } |
22 | b0109805 | pbrook | #define DEF_HELPER_0_3(name, ret, args) \
|
23 | b0109805 | pbrook | DEF_HELPER(name, ret, args) \ |
24 | b0109805 | pbrook | static inline void gen_helper_##name( \ |
25 | b0109805 | pbrook | TCGv arg1, TCGv arg2, TCGv arg3) \ |
26 | b0109805 | pbrook | { \ |
27 | b0109805 | pbrook | tcg_gen_helper_0_3(helper_##name, arg1, arg2, arg3); \ |
28 | b0109805 | pbrook | } |
29 | d9ba4830 | pbrook | #define DEF_HELPER_1_0(name, ret, args) \
|
30 | d9ba4830 | pbrook | DEF_HELPER(name, ret, args) \ |
31 | d9ba4830 | pbrook | static inline void gen_helper_##name(TCGv ret) \ |
32 | d9ba4830 | pbrook | { \ |
33 | d9ba4830 | pbrook | tcg_gen_helper_1_0(helper_##name, ret); \ |
34 | d9ba4830 | pbrook | } |
35 | 1497c961 | pbrook | #define DEF_HELPER_1_1(name, ret, args) \
|
36 | 1497c961 | pbrook | DEF_HELPER(name, ret, args) \ |
37 | 1497c961 | pbrook | static inline void gen_helper_##name(TCGv ret, TCGv arg1) \ |
38 | 1497c961 | pbrook | { \ |
39 | 1497c961 | pbrook | tcg_gen_helper_1_1(helper_##name, ret, arg1); \ |
40 | 1497c961 | pbrook | } |
41 | 1497c961 | pbrook | #define DEF_HELPER_1_2(name, ret, args) \
|
42 | 1497c961 | pbrook | DEF_HELPER(name, ret, args) \ |
43 | 1497c961 | pbrook | static inline void gen_helper_##name(TCGv ret, TCGv arg1, TCGv arg2) \ |
44 | 1497c961 | pbrook | { \ |
45 | 1497c961 | pbrook | tcg_gen_helper_1_2(helper_##name, ret, arg1, arg2); \ |
46 | 1497c961 | pbrook | } |
47 | 6ddbc6e4 | pbrook | #define DEF_HELPER_1_3(name, ret, args) \
|
48 | 6ddbc6e4 | pbrook | DEF_HELPER(name, ret, args) \ |
49 | 6ddbc6e4 | pbrook | static inline void gen_helper_##name(TCGv ret, \ |
50 | 6ddbc6e4 | pbrook | TCGv arg1, TCGv arg2, TCGv arg3) \ |
51 | 6ddbc6e4 | pbrook | { \ |
52 | 6ddbc6e4 | pbrook | tcg_gen_helper_1_3(helper_##name, ret, arg1, arg2, arg3); \ |
53 | 6ddbc6e4 | pbrook | } |
54 | 1497c961 | pbrook | #else /* !GEN_HELPER */ |
55 | d9ba4830 | pbrook | #define DEF_HELPER_0_0 DEF_HELPER
|
56 | d9ba4830 | pbrook | #define DEF_HELPER_0_1 DEF_HELPER
|
57 | d9ba4830 | pbrook | #define DEF_HELPER_0_2 DEF_HELPER
|
58 | b0109805 | pbrook | #define DEF_HELPER_0_3 DEF_HELPER
|
59 | d9ba4830 | pbrook | #define DEF_HELPER_1_0 DEF_HELPER
|
60 | 1497c961 | pbrook | #define DEF_HELPER_1_1 DEF_HELPER
|
61 | 1497c961 | pbrook | #define DEF_HELPER_1_2 DEF_HELPER
|
62 | 6ddbc6e4 | pbrook | #define DEF_HELPER_1_3 DEF_HELPER
|
63 | 6ddbc6e4 | pbrook | #define HELPER(x) glue(helper_,x)
|
64 | b26eefb6 | pbrook | #endif
|
65 | b26eefb6 | pbrook | |
66 | 1497c961 | pbrook | DEF_HELPER_1_1(clz, uint32_t, (uint32_t)) |
67 | 1497c961 | pbrook | DEF_HELPER_1_1(sxtb16, uint32_t, (uint32_t)) |
68 | 1497c961 | pbrook | DEF_HELPER_1_1(uxtb16, uint32_t, (uint32_t)) |
69 | 1497c961 | pbrook | |
70 | 1497c961 | pbrook | DEF_HELPER_1_2(add_setq, uint32_t, (uint32_t, uint32_t)) |
71 | 1497c961 | pbrook | DEF_HELPER_1_2(add_saturate, uint32_t, (uint32_t, uint32_t)) |
72 | 1497c961 | pbrook | DEF_HELPER_1_2(sub_saturate, uint32_t, (uint32_t, uint32_t)) |
73 | 1497c961 | pbrook | DEF_HELPER_1_2(add_usaturate, uint32_t, (uint32_t, uint32_t)) |
74 | 1497c961 | pbrook | DEF_HELPER_1_2(sub_usaturate, uint32_t, (uint32_t, uint32_t)) |
75 | 1497c961 | pbrook | DEF_HELPER_1_1(double_saturate, uint32_t, (int32_t)) |
76 | 3670669c | pbrook | DEF_HELPER_1_2(sdiv, int32_t, (int32_t, int32_t)) |
77 | 3670669c | pbrook | DEF_HELPER_1_2(udiv, uint32_t, (uint32_t, uint32_t)) |
78 | 3670669c | pbrook | DEF_HELPER_1_1(rbit, uint32_t, (uint32_t)) |
79 | 1497c961 | pbrook | |
80 | 6ddbc6e4 | pbrook | #define PAS_OP(pfx) \
|
81 | 6ddbc6e4 | pbrook | DEF_HELPER_1_3(pfx ## add8, uint32_t, (uint32_t, uint32_t, uint32_t *)) \ |
82 | 6ddbc6e4 | pbrook | DEF_HELPER_1_3(pfx ## sub8, uint32_t, (uint32_t, uint32_t, uint32_t *)) \ |
83 | 6ddbc6e4 | pbrook | DEF_HELPER_1_3(pfx ## sub16, uint32_t, (uint32_t, uint32_t, uint32_t *)) \ |
84 | 6ddbc6e4 | pbrook | DEF_HELPER_1_3(pfx ## add16, uint32_t, (uint32_t, uint32_t, uint32_t *)) \ |
85 | 6ddbc6e4 | pbrook | DEF_HELPER_1_3(pfx ## addsubx, uint32_t, (uint32_t, uint32_t, uint32_t *)) \ |
86 | 6ddbc6e4 | pbrook | DEF_HELPER_1_3(pfx ## subaddx, uint32_t, (uint32_t, uint32_t, uint32_t *)) |
87 | 6ddbc6e4 | pbrook | |
88 | 6ddbc6e4 | pbrook | PAS_OP(s) |
89 | 6ddbc6e4 | pbrook | PAS_OP(u) |
90 | 6ddbc6e4 | pbrook | #undef PAS_OP
|
91 | 6ddbc6e4 | pbrook | |
92 | 6ddbc6e4 | pbrook | #define PAS_OP(pfx) \
|
93 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(pfx ## add8, uint32_t, (uint32_t, uint32_t)) \ |
94 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(pfx ## sub8, uint32_t, (uint32_t, uint32_t)) \ |
95 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(pfx ## sub16, uint32_t, (uint32_t, uint32_t)) \ |
96 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(pfx ## add16, uint32_t, (uint32_t, uint32_t)) \ |
97 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(pfx ## addsubx, uint32_t, (uint32_t, uint32_t)) \ |
98 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(pfx ## subaddx, uint32_t, (uint32_t, uint32_t)) |
99 | 6ddbc6e4 | pbrook | PAS_OP(q) |
100 | 6ddbc6e4 | pbrook | PAS_OP(sh) |
101 | 6ddbc6e4 | pbrook | PAS_OP(uq) |
102 | 6ddbc6e4 | pbrook | PAS_OP(uh) |
103 | 6ddbc6e4 | pbrook | #undef PAS_OP
|
104 | 6ddbc6e4 | pbrook | |
105 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(ssat, uint32_t, (uint32_t, uint32_t)) |
106 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(usat, uint32_t, (uint32_t, uint32_t)) |
107 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(ssat16, uint32_t, (uint32_t, uint32_t)) |
108 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(usat16, uint32_t, (uint32_t, uint32_t)) |
109 | 6ddbc6e4 | pbrook | |
110 | 6ddbc6e4 | pbrook | DEF_HELPER_1_2(usad8, uint32_t, (uint32_t, uint32_t)) |
111 | 6ddbc6e4 | pbrook | |
112 | 5e3f878a | pbrook | DEF_HELPER_1_1(logicq_cc, uint32_t, (uint64_t)) |
113 | 5e3f878a | pbrook | |
114 | 6ddbc6e4 | pbrook | DEF_HELPER_1_3(sel_flags, uint32_t, (uint32_t, uint32_t, uint32_t)) |
115 | d9ba4830 | pbrook | DEF_HELPER_0_1(exception, void, (uint32_t))
|
116 | d9ba4830 | pbrook | DEF_HELPER_0_0(wfi, void, (void)) |
117 | d9ba4830 | pbrook | |
118 | d9ba4830 | pbrook | DEF_HELPER_0_2(cpsr_write, void, (uint32_t, uint32_t))
|
119 | d9ba4830 | pbrook | DEF_HELPER_1_0(cpsr_read, uint32_t, (void))
|
120 | 6ddbc6e4 | pbrook | |
121 | 8984bd2e | pbrook | DEF_HELPER_0_3(v7m_msr, void, (CPUState *, uint32_t, uint32_t))
|
122 | 8984bd2e | pbrook | DEF_HELPER_1_2(v7m_mrs, uint32_t, (CPUState *, uint32_t)) |
123 | 8984bd2e | pbrook | |
124 | 8984bd2e | pbrook | DEF_HELPER_0_3(set_cp15, void, (CPUState *, uint32_t, uint32_t))
|
125 | 8984bd2e | pbrook | DEF_HELPER_1_2(get_cp15, uint32_t, (CPUState *, uint32_t)) |
126 | 8984bd2e | pbrook | |
127 | 8984bd2e | pbrook | DEF_HELPER_0_3(set_cp, void, (CPUState *, uint32_t, uint32_t))
|
128 | 8984bd2e | pbrook | DEF_HELPER_1_2(get_cp, uint32_t, (CPUState *, uint32_t)) |
129 | 8984bd2e | pbrook | |
130 | b0109805 | pbrook | DEF_HELPER_1_2(get_r13_banked, uint32_t, (CPUState *, uint32_t)) |
131 | b0109805 | pbrook | DEF_HELPER_0_3(set_r13_banked, void, (CPUState *, uint32_t, uint32_t))
|
132 | b0109805 | pbrook | |
133 | b0109805 | pbrook | DEF_HELPER_1_1(get_user_reg, uint32_t, (uint32_t)) |
134 | b0109805 | pbrook | DEF_HELPER_0_2(set_user_reg, void, (uint32_t, uint32_t))
|
135 | b0109805 | pbrook | |
136 | 4373f3ce | pbrook | DEF_HELPER_1_1(vfp_get_fpscr, uint32_t, (CPUState *)) |
137 | 4373f3ce | pbrook | DEF_HELPER_0_2(vfp_set_fpscr, void, (CPUState *, uint32_t))
|
138 | 4373f3ce | pbrook | |
139 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_adds, float32, (float32, float32, CPUState *)) |
140 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_addd, float64, (float64, float64, CPUState *)) |
141 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_subs, float32, (float32, float32, CPUState *)) |
142 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_subd, float64, (float64, float64, CPUState *)) |
143 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_muls, float32, (float32, float32, CPUState *)) |
144 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_muld, float64, (float64, float64, CPUState *)) |
145 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_divs, float32, (float32, float32, CPUState *)) |
146 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_divd, float64, (float64, float64, CPUState *)) |
147 | 4373f3ce | pbrook | DEF_HELPER_1_1(vfp_negs, float32, (float32)) |
148 | 4373f3ce | pbrook | DEF_HELPER_1_1(vfp_negd, float64, (float64)) |
149 | 4373f3ce | pbrook | DEF_HELPER_1_1(vfp_abss, float32, (float32)) |
150 | 4373f3ce | pbrook | DEF_HELPER_1_1(vfp_absd, float64, (float64)) |
151 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_sqrts, float32, (float32, CPUState *)) |
152 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_sqrtd, float64, (float64, CPUState *)) |
153 | 4373f3ce | pbrook | DEF_HELPER_0_3(vfp_cmps, void, (float32, float32, CPUState *))
|
154 | 4373f3ce | pbrook | DEF_HELPER_0_3(vfp_cmpd, void, (float64, float64, CPUState *))
|
155 | 4373f3ce | pbrook | DEF_HELPER_0_3(vfp_cmpes, void, (float32, float32, CPUState *))
|
156 | 4373f3ce | pbrook | DEF_HELPER_0_3(vfp_cmped, void, (float64, float64, CPUState *))
|
157 | 4373f3ce | pbrook | |
158 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_fcvtds, float64, (float32, CPUState *)) |
159 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_fcvtsd, float32, (float64, CPUState *)) |
160 | 4373f3ce | pbrook | |
161 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_uitos, float32, (float32, CPUState *)) |
162 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_uitod, float64, (float32, CPUState *)) |
163 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_sitos, float32, (float32, CPUState *)) |
164 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_sitod, float64, (float32, CPUState *)) |
165 | 4373f3ce | pbrook | |
166 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_touis, float32, (float32, CPUState *)) |
167 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_touid, float32, (float64, CPUState *)) |
168 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_touizs, float32, (float32, CPUState *)) |
169 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_touizd, float32, (float64, CPUState *)) |
170 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_tosis, float32, (float32, CPUState *)) |
171 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_tosid, float32, (float64, CPUState *)) |
172 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_tosizs, float32, (float32, CPUState *)) |
173 | 4373f3ce | pbrook | DEF_HELPER_1_2(vfp_tosizd, float32, (float64, CPUState *)) |
174 | 4373f3ce | pbrook | |
175 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_toshs, float32, (float32, uint32_t, CPUState *)) |
176 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_tosls, float32, (float32, uint32_t, CPUState *)) |
177 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_touhs, float32, (float32, uint32_t, CPUState *)) |
178 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_touls, float32, (float32, uint32_t, CPUState *)) |
179 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_toshd, float64, (float64, uint32_t, CPUState *)) |
180 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_tosld, float64, (float64, uint32_t, CPUState *)) |
181 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_touhd, float64, (float64, uint32_t, CPUState *)) |
182 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_tould, float64, (float64, uint32_t, CPUState *)) |
183 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_shtos, float32, (float32, uint32_t, CPUState *)) |
184 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_sltos, float32, (float32, uint32_t, CPUState *)) |
185 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_uhtos, float32, (float32, uint32_t, CPUState *)) |
186 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_ultos, float32, (float32, uint32_t, CPUState *)) |
187 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_shtod, float64, (float64, uint32_t, CPUState *)) |
188 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_sltod, float64, (float64, uint32_t, CPUState *)) |
189 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_uhtod, float64, (float64, uint32_t, CPUState *)) |
190 | 4373f3ce | pbrook | DEF_HELPER_1_3(vfp_ultod, float64, (float64, uint32_t, CPUState *)) |
191 | 4373f3ce | pbrook | |
192 | 4373f3ce | pbrook | DEF_HELPER_1_3(recps_f32, float32, (float32, float32, CPUState *)) |
193 | 4373f3ce | pbrook | DEF_HELPER_1_3(rsqrts_f32, float32, (float32, float32, CPUState *)) |
194 | 4373f3ce | pbrook | DEF_HELPER_1_2(recpe_f32, float32, (float32, CPUState *)) |
195 | 4373f3ce | pbrook | DEF_HELPER_1_2(rsqrte_f32, float32, (float32, CPUState *)) |
196 | 4373f3ce | pbrook | DEF_HELPER_1_2(recpe_u32, uint32_t, (uint32_t, CPUState *)) |
197 | 4373f3ce | pbrook | DEF_HELPER_1_2(rsqrte_u32, uint32_t, (uint32_t, CPUState *)) |
198 | 4373f3ce | pbrook | |
199 | 8984bd2e | pbrook | DEF_HELPER_1_2(add_cc, uint32_t, (uint32_t, uint32_t)) |
200 | 8984bd2e | pbrook | DEF_HELPER_1_2(adc_cc, uint32_t, (uint32_t, uint32_t)) |
201 | 8984bd2e | pbrook | DEF_HELPER_1_2(sub_cc, uint32_t, (uint32_t, uint32_t)) |
202 | 8984bd2e | pbrook | DEF_HELPER_1_2(sbc_cc, uint32_t, (uint32_t, uint32_t)) |
203 | 8984bd2e | pbrook | |
204 | 8984bd2e | pbrook | DEF_HELPER_1_2(shl, uint32_t, (uint32_t, uint32_t)) |
205 | 8984bd2e | pbrook | DEF_HELPER_1_2(shr, uint32_t, (uint32_t, uint32_t)) |
206 | 8984bd2e | pbrook | DEF_HELPER_1_2(sar, uint32_t, (uint32_t, uint32_t)) |
207 | 8984bd2e | pbrook | DEF_HELPER_1_2(ror, uint32_t, (uint32_t, uint32_t)) |
208 | 8984bd2e | pbrook | DEF_HELPER_1_2(shl_cc, uint32_t, (uint32_t, uint32_t)) |
209 | 8984bd2e | pbrook | DEF_HELPER_1_2(shr_cc, uint32_t, (uint32_t, uint32_t)) |
210 | 8984bd2e | pbrook | DEF_HELPER_1_2(sar_cc, uint32_t, (uint32_t, uint32_t)) |
211 | 8984bd2e | pbrook | DEF_HELPER_1_2(ror_cc, uint32_t, (uint32_t, uint32_t)) |
212 | 8984bd2e | pbrook | |
213 | 1497c961 | pbrook | #undef DEF_HELPER
|
214 | d9ba4830 | pbrook | #undef DEF_HELPER_0_0
|
215 | d9ba4830 | pbrook | #undef DEF_HELPER_0_1
|
216 | d9ba4830 | pbrook | #undef DEF_HELPER_0_2
|
217 | d9ba4830 | pbrook | #undef DEF_HELPER_1_0
|
218 | 1497c961 | pbrook | #undef DEF_HELPER_1_1
|
219 | 1497c961 | pbrook | #undef DEF_HELPER_1_2
|
220 | d9ba4830 | pbrook | #undef DEF_HELPER_1_3
|
221 | 1497c961 | pbrook | #undef GEN_HELPER |