xref: /openbmc/qemu/include/exec/helper-proto.h.inc (revision fd87be1dada5672f877e03c2ca8504458292c479)
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