blob: bd9962ef1f0b6ab1f3cd75e5703352c1b4ec4126 [file] [log] [blame]
pbrook6ddbc6e2008-03-31 03:46:33 +00001#define DEF_HELPER(name, ret, args) ret glue(helper_,name) args;
pbrook1497c962008-03-31 03:45:50 +00002
3#ifdef GEN_HELPER
pbrookd9ba4832008-03-31 03:46:50 +00004#define DEF_HELPER_0_0(name, ret, args) \
5DEF_HELPER(name, ret, args) \
6static inline void gen_helper_##name(void) \
7{ \
8 tcg_gen_helper_0_0(helper_##name); \
9}
10#define DEF_HELPER_0_1(name, ret, args) \
11DEF_HELPER(name, ret, args) \
12static inline void gen_helper_##name(TCGv arg1) \
13{ \
14 tcg_gen_helper_0_1(helper_##name, arg1); \
15}
16#define DEF_HELPER_0_2(name, ret, args) \
17DEF_HELPER(name, ret, args) \
18static inline void gen_helper_##name(TCGv arg1, TCGv arg2) \
19{ \
20 tcg_gen_helper_0_2(helper_##name, arg1, arg2); \
21}
22#define DEF_HELPER_1_0(name, ret, args) \
23DEF_HELPER(name, ret, args) \
24static inline void gen_helper_##name(TCGv ret) \
25{ \
26 tcg_gen_helper_1_0(helper_##name, ret); \
27}
pbrook1497c962008-03-31 03:45:50 +000028#define DEF_HELPER_1_1(name, ret, args) \
29DEF_HELPER(name, ret, args) \
30static inline void gen_helper_##name(TCGv ret, TCGv arg1) \
31{ \
32 tcg_gen_helper_1_1(helper_##name, ret, arg1); \
33}
34#define DEF_HELPER_1_2(name, ret, args) \
35DEF_HELPER(name, ret, args) \
36static inline void gen_helper_##name(TCGv ret, TCGv arg1, TCGv arg2) \
37{ \
38 tcg_gen_helper_1_2(helper_##name, ret, arg1, arg2); \
39}
pbrook6ddbc6e2008-03-31 03:46:33 +000040#define DEF_HELPER_1_3(name, ret, args) \
41DEF_HELPER(name, ret, args) \
42static inline void gen_helper_##name(TCGv ret, \
43 TCGv arg1, TCGv arg2, TCGv arg3) \
44{ \
45 tcg_gen_helper_1_3(helper_##name, ret, arg1, arg2, arg3); \
46}
pbrook1497c962008-03-31 03:45:50 +000047#else /* !GEN_HELPER */
pbrookd9ba4832008-03-31 03:46:50 +000048#define DEF_HELPER_0_0 DEF_HELPER
49#define DEF_HELPER_0_1 DEF_HELPER
50#define DEF_HELPER_0_2 DEF_HELPER
51#define DEF_HELPER_1_0 DEF_HELPER
pbrook1497c962008-03-31 03:45:50 +000052#define DEF_HELPER_1_1 DEF_HELPER
53#define DEF_HELPER_1_2 DEF_HELPER
pbrook6ddbc6e2008-03-31 03:46:33 +000054#define DEF_HELPER_1_3 DEF_HELPER
55#define HELPER(x) glue(helper_,x)
pbrookb26eefb2008-03-31 03:44:26 +000056#endif
57
pbrook1497c962008-03-31 03:45:50 +000058DEF_HELPER_1_1(clz, uint32_t, (uint32_t))
59DEF_HELPER_1_1(sxtb16, uint32_t, (uint32_t))
60DEF_HELPER_1_1(uxtb16, uint32_t, (uint32_t))
61
62DEF_HELPER_1_2(add_setq, uint32_t, (uint32_t, uint32_t))
63DEF_HELPER_1_2(add_saturate, uint32_t, (uint32_t, uint32_t))
64DEF_HELPER_1_2(sub_saturate, uint32_t, (uint32_t, uint32_t))
65DEF_HELPER_1_2(add_usaturate, uint32_t, (uint32_t, uint32_t))
66DEF_HELPER_1_2(sub_usaturate, uint32_t, (uint32_t, uint32_t))
67DEF_HELPER_1_1(double_saturate, uint32_t, (int32_t))
pbrook36706692008-03-31 03:46:19 +000068DEF_HELPER_1_2(sdiv, int32_t, (int32_t, int32_t))
69DEF_HELPER_1_2(udiv, uint32_t, (uint32_t, uint32_t))
70DEF_HELPER_1_1(rbit, uint32_t, (uint32_t))
pbrook1497c962008-03-31 03:45:50 +000071
pbrook6ddbc6e2008-03-31 03:46:33 +000072#define PAS_OP(pfx) \
73 DEF_HELPER_1_3(pfx ## add8, uint32_t, (uint32_t, uint32_t, uint32_t *)) \
74 DEF_HELPER_1_3(pfx ## sub8, uint32_t, (uint32_t, uint32_t, uint32_t *)) \
75 DEF_HELPER_1_3(pfx ## sub16, uint32_t, (uint32_t, uint32_t, uint32_t *)) \
76 DEF_HELPER_1_3(pfx ## add16, uint32_t, (uint32_t, uint32_t, uint32_t *)) \
77 DEF_HELPER_1_3(pfx ## addsubx, uint32_t, (uint32_t, uint32_t, uint32_t *)) \
78 DEF_HELPER_1_3(pfx ## subaddx, uint32_t, (uint32_t, uint32_t, uint32_t *))
79
80PAS_OP(s)
81PAS_OP(u)
82#undef PAS_OP
83
84#define PAS_OP(pfx) \
85 DEF_HELPER_1_2(pfx ## add8, uint32_t, (uint32_t, uint32_t)) \
86 DEF_HELPER_1_2(pfx ## sub8, uint32_t, (uint32_t, uint32_t)) \
87 DEF_HELPER_1_2(pfx ## sub16, uint32_t, (uint32_t, uint32_t)) \
88 DEF_HELPER_1_2(pfx ## add16, uint32_t, (uint32_t, uint32_t)) \
89 DEF_HELPER_1_2(pfx ## addsubx, uint32_t, (uint32_t, uint32_t)) \
90 DEF_HELPER_1_2(pfx ## subaddx, uint32_t, (uint32_t, uint32_t))
91PAS_OP(q)
92PAS_OP(sh)
93PAS_OP(uq)
94PAS_OP(uh)
95#undef PAS_OP
96
97DEF_HELPER_1_2(ssat, uint32_t, (uint32_t, uint32_t))
98DEF_HELPER_1_2(usat, uint32_t, (uint32_t, uint32_t))
99DEF_HELPER_1_2(ssat16, uint32_t, (uint32_t, uint32_t))
100DEF_HELPER_1_2(usat16, uint32_t, (uint32_t, uint32_t))
101
102DEF_HELPER_1_2(usad8, uint32_t, (uint32_t, uint32_t))
103
104DEF_HELPER_1_3(sel_flags, uint32_t, (uint32_t, uint32_t, uint32_t))
pbrookd9ba4832008-03-31 03:46:50 +0000105DEF_HELPER_0_1(exception, void, (uint32_t))
106DEF_HELPER_0_0(wfi, void, (void))
107
108DEF_HELPER_0_2(cpsr_write, void, (uint32_t, uint32_t))
109DEF_HELPER_1_0(cpsr_read, uint32_t, (void))
pbrook6ddbc6e2008-03-31 03:46:33 +0000110
pbrook1497c962008-03-31 03:45:50 +0000111#undef DEF_HELPER
pbrookd9ba4832008-03-31 03:46:50 +0000112#undef DEF_HELPER_0_0
113#undef DEF_HELPER_0_1
114#undef DEF_HELPER_0_2
115#undef DEF_HELPER_1_0
pbrook1497c962008-03-31 03:45:50 +0000116#undef DEF_HELPER_1_1
117#undef DEF_HELPER_1_2
pbrookd9ba4832008-03-31 03:46:50 +0000118#undef DEF_HELPER_1_3
pbrook1497c962008-03-31 03:45:50 +0000119#undef GEN_HELPER