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 5175de524SMarkus Armbruster #define HELPER_GEN_H 62ef6175aSRichard Henderson 7a9c94277SMarkus Armbruster #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 { \ 12960c50e0SRichard Henderson tcg_gen_callN(HELPER(name), dh_retvar(ret), 0, NULL); \ 132ef6175aSRichard Henderson } 142ef6175aSRichard Henderson 152ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \ 16011209e1SRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 17011209e1SRichard Henderson dh_arg_decl(t1, 1)) \ 182ef6175aSRichard Henderson { \ 19ae8b75dcSRichard Henderson TCGTemp *args[1] = { dh_arg(t1, 1) }; \ 20960c50e0SRichard Henderson tcg_gen_callN(HELPER(name), dh_retvar(ret), 1, args); \ 212ef6175aSRichard Henderson } 222ef6175aSRichard Henderson 232ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \ 24011209e1SRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 25011209e1SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2)) \ 262ef6175aSRichard Henderson { \ 27ae8b75dcSRichard Henderson TCGTemp *args[2] = { dh_arg(t1, 1), dh_arg(t2, 2) }; \ 28960c50e0SRichard Henderson tcg_gen_callN(HELPER(name), dh_retvar(ret), 2, args); \ 292ef6175aSRichard Henderson } 302ef6175aSRichard Henderson 312ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \ 32011209e1SRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 33011209e1SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3)) \ 342ef6175aSRichard Henderson { \ 35ae8b75dcSRichard Henderson TCGTemp *args[3] = { dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3) }; \ 36960c50e0SRichard Henderson tcg_gen_callN(HELPER(name), dh_retvar(ret), 3, args); \ 372ef6175aSRichard Henderson } 382ef6175aSRichard Henderson 392ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \ 40011209e1SRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 41011209e1SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), \ 42011209e1SRichard Henderson dh_arg_decl(t3, 3), dh_arg_decl(t4, 4)) \ 432ef6175aSRichard Henderson { \ 44ae8b75dcSRichard Henderson TCGTemp *args[4] = { dh_arg(t1, 1), dh_arg(t2, 2), \ 45011209e1SRichard Henderson dh_arg(t3, 3), dh_arg(t4, 4) }; \ 46960c50e0SRichard Henderson tcg_gen_callN(HELPER(name), dh_retvar(ret), 4, args); \ 472ef6175aSRichard Henderson } 482ef6175aSRichard Henderson 492ef6175aSRichard Henderson #define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \ 502ef6175aSRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 512ef6175aSRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ 522ef6175aSRichard Henderson dh_arg_decl(t4, 4), dh_arg_decl(t5, 5)) \ 532ef6175aSRichard Henderson { \ 54ae8b75dcSRichard Henderson TCGTemp *args[5] = { dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ 55011209e1SRichard Henderson dh_arg(t4, 4), dh_arg(t5, 5) }; \ 56960c50e0SRichard Henderson tcg_gen_callN(HELPER(name), dh_retvar(ret), 5, args); \ 572ef6175aSRichard Henderson } 582ef6175aSRichard Henderson 591df3caa9SRichard Henderson #define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \ 601df3caa9SRichard Henderson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 611df3caa9SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ 621df3caa9SRichard Henderson dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6)) \ 631df3caa9SRichard Henderson { \ 641df3caa9SRichard Henderson TCGTemp *args[6] = { dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ 651df3caa9SRichard Henderson dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6) }; \ 661df3caa9SRichard Henderson tcg_gen_callN(HELPER(name), dh_retvar(ret), 6, args); \ 671df3caa9SRichard Henderson } 681df3caa9SRichard Henderson 69*e6cadf49STaylor Simpson #define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7)\ 70*e6cadf49STaylor Simpson static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 71*e6cadf49STaylor Simpson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ 72*e6cadf49STaylor Simpson dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6), \ 73*e6cadf49STaylor Simpson dh_arg_decl(t7, 7)) \ 74*e6cadf49STaylor Simpson { \ 75*e6cadf49STaylor Simpson TCGTemp *args[7] = { dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ 76*e6cadf49STaylor Simpson dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6), \ 77*e6cadf49STaylor Simpson dh_arg(t7, 7) }; \ 78*e6cadf49STaylor Simpson tcg_gen_callN(HELPER(name), dh_retvar(ret), 7, args); \ 79*e6cadf49STaylor Simpson } 80*e6cadf49STaylor Simpson 812ef6175aSRichard Henderson #include "helper.h" 8276b53aa3SLluís Vilanova #include "trace/generated-helpers.h" 8376b53aa3SLluís Vilanova #include "trace/generated-helpers-wrappers.h" 84944eea96SRichard Henderson #include "tcg-runtime.h" 8538b47b19SEmilio G. Cota #include "plugin-helpers.h" 862ef6175aSRichard Henderson 872ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_0 882ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_1 892ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_2 902ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_3 912ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_4 922ef6175aSRichard Henderson #undef DEF_HELPER_FLAGS_5 931df3caa9SRichard Henderson #undef DEF_HELPER_FLAGS_6 94*e6cadf49STaylor Simpson #undef DEF_HELPER_FLAGS_7 952ef6175aSRichard Henderson #undef GEN_HELPER 962ef6175aSRichard Henderson 972ef6175aSRichard Henderson #endif /* HELPER_GEN_H */ 98