| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* | |
| * Helper file for declaring TCG helper functions. | |
| * This one expands info structures for tcg helpers. | |
| * Define HELPER_H for the header file to be expanded. | |
| */ | |
| #include "tcg/tcg.h" | |
| #include "tcg/helper-info.h" | |
| #include "exec/helper-head.h" | |
| /* | |
| * Need one more level of indirection before stringification | |
| * to get all the macros expanded first. | |
| */ | |
| #define str(s) #s | |
| #define DEF_HELPER_FLAGS_0(NAME, FLAGS, RET) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) \ | |
| }; | |
| #define DEF_HELPER_FLAGS_1(NAME, FLAGS, RET, T1) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ | |
| }; | |
| #define DEF_HELPER_FLAGS_2(NAME, FLAGS, RET, T1, T2) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ | |
| | dh_typemask(T2, 2) \ | |
| }; | |
| #define DEF_HELPER_FLAGS_3(NAME, FLAGS, RET, T1, T2, T3) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ | |
| | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ | |
| }; | |
| #define DEF_HELPER_FLAGS_4(NAME, FLAGS, RET, T1, T2, T3, T4) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ | |
| | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ | |
| | dh_typemask(T4, 4) \ | |
| }; | |
| #define DEF_HELPER_FLAGS_5(NAME, FLAGS, RET, T1, T2, T3, T4, T5) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ | |
| | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ | |
| | dh_typemask(T4, 4) | dh_typemask(T5, 5) \ | |
| }; | |
| #define DEF_HELPER_FLAGS_6(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ | |
| | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ | |
| | dh_typemask(T4, 4) | dh_typemask(T5, 5) \ | |
| | dh_typemask(T6, 6) \ | |
| }; | |
| #define DEF_HELPER_FLAGS_7(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6, T7) \ | |
| TCGHelperInfo glue(helper_info_, NAME) = { \ | |
| .func = HELPER(NAME), .name = str(NAME), \ | |
| .flags = FLAGS | dh_callflag(RET), \ | |
| .typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \ | |
| | dh_typemask(T2, 2) | dh_typemask(T3, 3) \ | |
| | dh_typemask(T4, 4) | dh_typemask(T5, 5) \ | |
| | dh_typemask(T6, 6) | dh_typemask(T7, 7) \ | |
| }; | |
| #include HELPER_H | |
| #undef str | |
| #undef DEF_HELPER_FLAGS_0 | |
| #undef DEF_HELPER_FLAGS_1 | |
| #undef DEF_HELPER_FLAGS_2 | |
| #undef DEF_HELPER_FLAGS_3 | |
| #undef DEF_HELPER_FLAGS_4 | |
| #undef DEF_HELPER_FLAGS_5 | |
| #undef DEF_HELPER_FLAGS_6 | |
| #undef DEF_HELPER_FLAGS_7 |