2 * TCG Helper Information Structure
4 * Copyright (c) 2023 Linaro Ltd
6 * SPDX-License-Identifier: GPL-2.0-or-later
9 #ifndef TCG_HELPER_INFO_H
10 #define TCG_HELPER_INFO_H
12 #ifdef CONFIG_TCG_INTERPRETER
17 * Describe the calling convention of a given argument type.
20 TCG_CALL_RET_NORMAL
, /* by registers */
21 TCG_CALL_RET_BY_REF
, /* for i128, by reference */
22 TCG_CALL_RET_BY_VEC
, /* for i128, by vector register */
26 TCG_CALL_ARG_NORMAL
, /* by registers (continuing onto stack) */
27 TCG_CALL_ARG_EVEN
, /* like normal, but skipping odd slots */
28 TCG_CALL_ARG_EXTEND
, /* for i32, as a sign/zero-extended i64 */
29 TCG_CALL_ARG_EXTEND_U
, /* ... as a zero-extended i64 */
30 TCG_CALL_ARG_EXTEND_S
, /* ... as a sign-extended i64 */
31 TCG_CALL_ARG_BY_REF
, /* for i128, by reference, first */
32 TCG_CALL_ARG_BY_REF_N
, /* ... by reference, subsequent */
33 } TCGCallArgumentKind
;
35 typedef struct TCGCallArgumentLoc
{
36 TCGCallArgumentKind kind
: 8;
37 unsigned arg_slot
: 8;
38 unsigned ref_slot
: 8;
40 unsigned tmp_subindex
: 2;
43 struct TCGHelperInfo
{
47 /* Used with g_once_init_enter. */
48 #ifdef CONFIG_TCG_INTERPRETER
54 unsigned typemask
: 32;
58 TCGCallReturnKind out_kind
: 8;
60 /* Maximum physical arguments are constrained by TCG_TYPE_I128. */
61 TCGCallArgumentLoc in
[MAX_CALL_IARGS
* (128 / TCG_TARGET_REG_BITS
)];
64 #endif /* TCG_HELPER_INFO_H */