1c213ee2dSRichard Henderson/* SPDX-License-Identifier: GPL-2.0-or-later */ 2c213ee2dSRichard Henderson/* 3c213ee2dSRichard Henderson * Helper file for declaring TCG helper functions. 4c213ee2dSRichard Henderson * This one expands prototypes for the helper functions. 5c213ee2dSRichard Henderson * Define HELPER_H for the header file to be expanded. 6c213ee2dSRichard Henderson */ 7c213ee2dSRichard Henderson 8*2379866cSPhilippe Mathieu-Daudé#include "exec/helper-head.h.inc" 9c213ee2dSRichard Henderson 10c213ee2dSRichard Henderson/* 11c213ee2dSRichard Henderson * Work around an issue with --enable-lto, in which GCC's ipa-split pass 12c213ee2dSRichard Henderson * decides to split out the noreturn code paths that raise an exception, 13c213ee2dSRichard Henderson * taking the __builtin_return_address() along into the new function, 14c213ee2dSRichard Henderson * where it no longer computes a value that returns to TCG generated code. 15c213ee2dSRichard Henderson * Despite the name, the noinline attribute affects splitter, so this 16c213ee2dSRichard Henderson * prevents the optimization in question. Given that helpers should not 17c213ee2dSRichard Henderson * otherwise be called directly, this should not have any other visible effect. 18c213ee2dSRichard Henderson * 19c213ee2dSRichard Henderson * See https://gitlab.com/qemu-project/qemu/-/issues/1454 20c213ee2dSRichard Henderson */ 21c213ee2dSRichard Henderson#define DEF_HELPER_ATTR __attribute__((noinline)) 22c213ee2dSRichard Henderson 23c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_0(name, flags, ret) \ 24c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (void) DEF_HELPER_ATTR; 25c213ee2dSRichard Henderson 26c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \ 27c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (dh_ctype(t1)) DEF_HELPER_ATTR; 28c213ee2dSRichard Henderson 29c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \ 30c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2)) DEF_HELPER_ATTR; 31c213ee2dSRichard Henderson 32c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \ 33c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), \ 34c213ee2dSRichard Henderson dh_ctype(t3)) DEF_HELPER_ATTR; 35c213ee2dSRichard Henderson 36c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \ 37c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \ 38c213ee2dSRichard Henderson dh_ctype(t4)) DEF_HELPER_ATTR; 39c213ee2dSRichard Henderson 40c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \ 41c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \ 42c213ee2dSRichard Henderson dh_ctype(t4), dh_ctype(t5)) DEF_HELPER_ATTR; 43c213ee2dSRichard Henderson 44c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \ 45c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \ 46c213ee2dSRichard Henderson dh_ctype(t4), dh_ctype(t5), \ 47c213ee2dSRichard Henderson dh_ctype(t6)) DEF_HELPER_ATTR; 48c213ee2dSRichard Henderson 49c213ee2dSRichard Henderson#define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7) \ 50c213ee2dSRichard Hendersondh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \ 51c213ee2dSRichard Henderson dh_ctype(t4), dh_ctype(t5), dh_ctype(t6), \ 52c213ee2dSRichard Henderson dh_ctype(t7)) DEF_HELPER_ATTR; 53c213ee2dSRichard Henderson 54c213ee2dSRichard Henderson#define IN_HELPER_PROTO 55c213ee2dSRichard Henderson 56c213ee2dSRichard Henderson#include HELPER_H 57c213ee2dSRichard Henderson 58c213ee2dSRichard Henderson#undef IN_HELPER_PROTO 59c213ee2dSRichard Henderson 60c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_0 61c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_1 62c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_2 63c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_3 64c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_4 65c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_5 66c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_6 67c213ee2dSRichard Henderson#undef DEF_HELPER_FLAGS_7 68c213ee2dSRichard Henderson#undef DEF_HELPER_ATTR 69