xref: /qemu/include/exec/helper-gen.h (revision 944eea962be94b98f8f6f570f9c4eb3b58dc296d)
12ef6175aSRichard Henderson /* Helper file for declaring TCG helper functions.
22ef6175aSRichard Henderson    This one expands generation functions for tcg opcodes.  */
32ef6175aSRichard Henderson 
42ef6175aSRichard Henderson #ifndef HELPER_GEN_H
52ef6175aSRichard Henderson #define HELPER_GEN_H 1
62ef6175aSRichard Henderson 
72ef6175aSRichard Henderson #include <exec/helper-head.h>
82ef6175aSRichard Henderson 
92ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_0(name, flags, ret) \
102ef6175aSRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl0(ret)) \
112ef6175aSRichard Henderson { \
122ef6175aSRichard Henderson   int sizemask; \
132ef6175aSRichard Henderson   sizemask = dh_is_64bit(ret); \
142ef6175aSRichard Henderson   tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 0, NULL); \
152ef6175aSRichard Henderson }
162ef6175aSRichard Henderson 
172ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
182ef6175aSRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1)) \
192ef6175aSRichard Henderson { \
202ef6175aSRichard Henderson   TCGArg args[1]; \
212ef6175aSRichard Henderson   int sizemask = 0; \
222ef6175aSRichard Henderson   dh_sizemask(ret, 0); \
232ef6175aSRichard Henderson   dh_arg(t1, 1); \
242ef6175aSRichard Henderson   tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 1, args); \
252ef6175aSRichard Henderson }
262ef6175aSRichard Henderson 
272ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
282ef6175aSRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1), \
292ef6175aSRichard Henderson     dh_arg_decl(t2, 2)) \
302ef6175aSRichard Henderson { \
312ef6175aSRichard Henderson   TCGArg args[2]; \
322ef6175aSRichard Henderson   int sizemask = 0; \
332ef6175aSRichard Henderson   dh_sizemask(ret, 0); \
342ef6175aSRichard Henderson   dh_arg(t1, 1); \
352ef6175aSRichard Henderson   dh_arg(t2, 2); \
362ef6175aSRichard Henderson   tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 2, args); \
372ef6175aSRichard Henderson }
382ef6175aSRichard Henderson 
392ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
402ef6175aSRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1), \
412ef6175aSRichard Henderson     dh_arg_decl(t2, 2), dh_arg_decl(t3, 3)) \
422ef6175aSRichard Henderson { \
432ef6175aSRichard Henderson   TCGArg args[3]; \
442ef6175aSRichard Henderson   int sizemask = 0; \
452ef6175aSRichard Henderson   dh_sizemask(ret, 0); \
462ef6175aSRichard Henderson   dh_arg(t1, 1); \
472ef6175aSRichard Henderson   dh_arg(t2, 2); \
482ef6175aSRichard Henderson   dh_arg(t3, 3); \
492ef6175aSRichard Henderson   tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 3, args); \
502ef6175aSRichard Henderson }
512ef6175aSRichard Henderson 
522ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
532ef6175aSRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1), \
542ef6175aSRichard Henderson     dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), dh_arg_decl(t4, 4)) \
552ef6175aSRichard Henderson { \
562ef6175aSRichard Henderson   TCGArg args[4]; \
572ef6175aSRichard Henderson   int sizemask = 0; \
582ef6175aSRichard Henderson   dh_sizemask(ret, 0); \
592ef6175aSRichard Henderson   dh_arg(t1, 1); \
602ef6175aSRichard Henderson   dh_arg(t2, 2); \
612ef6175aSRichard Henderson   dh_arg(t3, 3); \
622ef6175aSRichard Henderson   dh_arg(t4, 4); \
632ef6175aSRichard Henderson   tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 4, args); \
642ef6175aSRichard Henderson }
652ef6175aSRichard Henderson 
662ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \
672ef6175aSRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
682ef6175aSRichard Henderson     dh_arg_decl(t1, 1),  dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \
692ef6175aSRichard Henderson     dh_arg_decl(t4, 4), dh_arg_decl(t5, 5)) \
702ef6175aSRichard Henderson { \
712ef6175aSRichard Henderson   TCGArg args[5]; \
722ef6175aSRichard Henderson   int sizemask = 0; \
732ef6175aSRichard Henderson   dh_sizemask(ret, 0); \
742ef6175aSRichard Henderson   dh_arg(t1, 1); \
752ef6175aSRichard Henderson   dh_arg(t2, 2); \
762ef6175aSRichard Henderson   dh_arg(t3, 3); \
772ef6175aSRichard Henderson   dh_arg(t4, 4); \
782ef6175aSRichard Henderson   dh_arg(t5, 5); \
792ef6175aSRichard Henderson   tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 5, args); \
802ef6175aSRichard Henderson }
812ef6175aSRichard Henderson 
822ef6175aSRichard Henderson #include "helper.h"
83*944eea96SRichard Henderson #include "tcg-runtime.h"
842ef6175aSRichard Henderson 
852ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_0
862ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_1
872ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_2
882ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_3
892ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_4
902ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_5
912ef6175aSRichard Henderson #undef GEN_HELPER
922ef6175aSRichard Henderson 
932ef6175aSRichard Henderson #endif /* HELPER_GEN_H */
94