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