1e4eff8e4SRichard Henderson/* SPDX-License-Identifier: GPL-2.0-or-later */ 2e4eff8e4SRichard Henderson/* 3e4eff8e4SRichard Henderson * Helper file for declaring TCG helper functions. 4e4eff8e4SRichard Henderson * This one expands generation functions for tcg opcodes. 5e4eff8e4SRichard Henderson * Define HELPER_H for the header file to be expanded, 6e4eff8e4SRichard Henderson * and static inline to change from global file scope. 7e4eff8e4SRichard Henderson */ 8e4eff8e4SRichard Henderson 9e4eff8e4SRichard Henderson#include "tcg/tcg.h" 10e4eff8e4SRichard Henderson#include "tcg/helper-info.h" 112379866cSPhilippe Mathieu-Daudé#include "exec/helper-head.h.inc" 12e4eff8e4SRichard Henderson 13e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_0(name, flags, ret) \ 14e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 15e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl0(ret)) \ 16e4eff8e4SRichard Henderson{ \ 17*83a0ad26SRichard Henderson tcg_gen_call0(glue(helper_info_,name).func, \ 18*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret)); \ 19e4eff8e4SRichard Henderson} 20e4eff8e4SRichard Henderson 21e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \ 22e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 23e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 24e4eff8e4SRichard Henderson dh_arg_decl(t1, 1)) \ 25e4eff8e4SRichard Henderson{ \ 26*83a0ad26SRichard Henderson tcg_gen_call1(glue(helper_info_,name).func, \ 27*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret), \ 28e4eff8e4SRichard Henderson dh_arg(t1, 1)); \ 29e4eff8e4SRichard Henderson} 30e4eff8e4SRichard Henderson 31e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \ 32e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 33e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 34e4eff8e4SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2)) \ 35e4eff8e4SRichard Henderson{ \ 36*83a0ad26SRichard Henderson tcg_gen_call2(glue(helper_info_,name).func, \ 37*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret), \ 38e4eff8e4SRichard Henderson dh_arg(t1, 1), dh_arg(t2, 2)); \ 39e4eff8e4SRichard Henderson} 40e4eff8e4SRichard Henderson 41e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \ 42e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 43e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 44e4eff8e4SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3)) \ 45e4eff8e4SRichard Henderson{ \ 46*83a0ad26SRichard Henderson tcg_gen_call3(glue(helper_info_,name).func, \ 47*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret), \ 48e4eff8e4SRichard Henderson dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3)); \ 49e4eff8e4SRichard Henderson} 50e4eff8e4SRichard Henderson 51e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \ 52e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 53e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 54e4eff8e4SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), \ 55e4eff8e4SRichard Henderson dh_arg_decl(t3, 3), dh_arg_decl(t4, 4)) \ 56e4eff8e4SRichard Henderson{ \ 57*83a0ad26SRichard Henderson tcg_gen_call4(glue(helper_info_,name).func, \ 58*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret), \ 59e4eff8e4SRichard Henderson dh_arg(t1, 1), dh_arg(t2, 2), \ 60e4eff8e4SRichard Henderson dh_arg(t3, 3), dh_arg(t4, 4)); \ 61e4eff8e4SRichard Henderson} 62e4eff8e4SRichard Henderson 63e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \ 64e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 65e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 66e4eff8e4SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ 67e4eff8e4SRichard Henderson dh_arg_decl(t4, 4), dh_arg_decl(t5, 5)) \ 68e4eff8e4SRichard Henderson{ \ 69*83a0ad26SRichard Henderson tcg_gen_call5(glue(helper_info_,name).func, \ 70*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret), \ 71e4eff8e4SRichard Henderson dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ 72e4eff8e4SRichard Henderson dh_arg(t4, 4), dh_arg(t5, 5)); \ 73e4eff8e4SRichard Henderson} 74e4eff8e4SRichard Henderson 75e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \ 76e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 77e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 78e4eff8e4SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ 79e4eff8e4SRichard Henderson dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6)) \ 80e4eff8e4SRichard Henderson{ \ 81*83a0ad26SRichard Henderson tcg_gen_call6(glue(helper_info_,name).func, \ 82*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret), \ 83e4eff8e4SRichard Henderson dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ 84e4eff8e4SRichard Henderson dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6)); \ 85e4eff8e4SRichard Henderson} 86e4eff8e4SRichard Henderson 87e4eff8e4SRichard Henderson#define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7)\ 88e4eff8e4SRichard Hendersonextern TCGHelperInfo glue(helper_info_, name); \ 89e4eff8e4SRichard Hendersonstatic inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ 90e4eff8e4SRichard Henderson dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ 91e4eff8e4SRichard Henderson dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6), \ 92e4eff8e4SRichard Henderson dh_arg_decl(t7, 7)) \ 93e4eff8e4SRichard Henderson{ \ 94*83a0ad26SRichard Henderson tcg_gen_call7(glue(helper_info_,name).func, \ 95*83a0ad26SRichard Henderson &glue(helper_info_,name), dh_retvar(ret), \ 96e4eff8e4SRichard Henderson dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ 97e4eff8e4SRichard Henderson dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6), \ 98e4eff8e4SRichard Henderson dh_arg(t7, 7)); \ 99e4eff8e4SRichard Henderson} 100e4eff8e4SRichard Henderson 101e4eff8e4SRichard Henderson#include HELPER_H 102e4eff8e4SRichard Henderson 103e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_0 104e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_1 105e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_2 106e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_3 107e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_4 108e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_5 109e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_6 110e4eff8e4SRichard Henderson#undef DEF_HELPER_FLAGS_7 111