1d53106c9SRichard Henderson/* SPDX-License-Identifier: GPL-2.0-or-later */ 2d53106c9SRichard Henderson/* 3d53106c9SRichard Henderson * Helper file for declaring TCG helper functions. 4d53106c9SRichard Henderson * This one expands info structures for tcg helpers. 5d53106c9SRichard Henderson * Define HELPER_H for the header file to be expanded. 6d53106c9SRichard Henderson */ 7d53106c9SRichard Henderson 8d53106c9SRichard Henderson#include "tcg/tcg.h" 9d53106c9SRichard Henderson#include "tcg/helper-info.h" 10*2379866cSPhilippe Mathieu-Daudé#include "exec/helper-head.h.inc" 11d53106c9SRichard Henderson 12d53106c9SRichard Henderson/* 13d53106c9SRichard Henderson * Need one more level of indirection before stringification 14d53106c9SRichard Henderson * to get all the macros expanded first. 15d53106c9SRichard Henderson */ 16d53106c9SRichard Henderson#define str(s) #s 17d53106c9SRichard Henderson 18d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_0(NAME, FLAGS, RET) \ 19d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 20d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 21d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 22d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) \ 23d53106c9SRichard Henderson }; 24d53106c9SRichard Henderson 25d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_1(NAME, FLAGS, RET, T1) \ 26d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 27d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 28d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 29d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ 30d53106c9SRichard Henderson }; 31d53106c9SRichard Henderson 32d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_2(NAME, FLAGS, RET, T1, T2) \ 33d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 34d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 35d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 36d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ 37d53106c9SRichard Henderson | dh_typemask(T2, 2) \ 38d53106c9SRichard Henderson }; 39d53106c9SRichard Henderson 40d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_3(NAME, FLAGS, RET, T1, T2, T3) \ 41d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 42d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 43d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 44d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ 45d53106c9SRichard Henderson | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ 46d53106c9SRichard Henderson }; 47d53106c9SRichard Henderson 48d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_4(NAME, FLAGS, RET, T1, T2, T3, T4) \ 49d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 50d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 51d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 52d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ 53d53106c9SRichard Henderson | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ 54d53106c9SRichard Henderson | dh_typemask(T4, 4) \ 55d53106c9SRichard Henderson }; 56d53106c9SRichard Henderson 57d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_5(NAME, FLAGS, RET, T1, T2, T3, T4, T5) \ 58d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 59d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 60d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 61d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ 62d53106c9SRichard Henderson | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ 63d53106c9SRichard Henderson | dh_typemask(T4, 4) | dh_typemask(T5, 5) \ 64d53106c9SRichard Henderson }; 65d53106c9SRichard Henderson 66d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_6(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6) \ 67d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 68d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 69d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 70d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ 71d53106c9SRichard Henderson | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ 72d53106c9SRichard Henderson | dh_typemask(T4, 4) | dh_typemask(T5, 5) \ 73d53106c9SRichard Henderson | dh_typemask(T6, 6) \ 74d53106c9SRichard Henderson }; 75d53106c9SRichard Henderson 76d53106c9SRichard Henderson#define DEF_HELPER_FLAGS_7(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6, T7) \ 77d53106c9SRichard Henderson TCGHelperInfo glue(helper_info_, NAME) = { \ 78d53106c9SRichard Henderson .func = HELPER(NAME), .name = str(NAME), \ 79d53106c9SRichard Henderson .flags = FLAGS | dh_callflag(RET), \ 80d53106c9SRichard Henderson .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ 81d53106c9SRichard Henderson | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ 82d53106c9SRichard Henderson | dh_typemask(T4, 4) | dh_typemask(T5, 5) \ 83d53106c9SRichard Henderson | dh_typemask(T6, 6) | dh_typemask(T7, 7) \ 84d53106c9SRichard Henderson }; 85d53106c9SRichard Henderson 86d53106c9SRichard Henderson#include HELPER_H 87d53106c9SRichard Henderson 88d53106c9SRichard Henderson#undef str 89d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_0 90d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_1 91d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_2 92d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_3 93d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_4 94d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_5 95d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_6 96d53106c9SRichard Henderson#undef DEF_HELPER_FLAGS_7 97