Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
tcg: Move TCGHelperInfo and dependencies to tcg/helper-info.h
This will be required outside of tcg-internal.h soon. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
- Loading branch information
Showing
2 changed files
with
60 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| /* | ||
| * TCG Helper Infomation Structure | ||
| * | ||
| * Copyright (c) 2023 Linaro Ltd | ||
| * | ||
| * SPDX-License-Identifier: GPL-2.0-or-later | ||
| */ | ||
|
|
||
| #ifndef TCG_HELPER_INFO_H | ||
| #define TCG_HELPER_INFO_H | ||
|
|
||
| #ifdef CONFIG_TCG_INTERPRETER | ||
| #include <ffi.h> | ||
| #endif | ||
|
|
||
| /* | ||
| * Describe the calling convention of a given argument type. | ||
| */ | ||
| typedef enum { | ||
| TCG_CALL_RET_NORMAL, /* by registers */ | ||
| TCG_CALL_RET_BY_REF, /* for i128, by reference */ | ||
| TCG_CALL_RET_BY_VEC, /* for i128, by vector register */ | ||
| } TCGCallReturnKind; | ||
|
|
||
| typedef enum { | ||
| TCG_CALL_ARG_NORMAL, /* by registers (continuing onto stack) */ | ||
| TCG_CALL_ARG_EVEN, /* like normal, but skipping odd slots */ | ||
| TCG_CALL_ARG_EXTEND, /* for i32, as a sign/zero-extended i64 */ | ||
| TCG_CALL_ARG_EXTEND_U, /* ... as a zero-extended i64 */ | ||
| TCG_CALL_ARG_EXTEND_S, /* ... as a sign-extended i64 */ | ||
| TCG_CALL_ARG_BY_REF, /* for i128, by reference, first */ | ||
| TCG_CALL_ARG_BY_REF_N, /* ... by reference, subsequent */ | ||
| } TCGCallArgumentKind; | ||
|
|
||
| typedef struct TCGCallArgumentLoc { | ||
| TCGCallArgumentKind kind : 8; | ||
| unsigned arg_slot : 8; | ||
| unsigned ref_slot : 8; | ||
| unsigned arg_idx : 4; | ||
| unsigned tmp_subindex : 2; | ||
| } TCGCallArgumentLoc; | ||
|
|
||
| typedef struct TCGHelperInfo { | ||
| void *func; | ||
| const char *name; | ||
| #ifdef CONFIG_TCG_INTERPRETER | ||
| ffi_cif *cif; | ||
| #endif | ||
| unsigned typemask : 32; | ||
| unsigned flags : 8; | ||
| unsigned nr_in : 8; | ||
| unsigned nr_out : 8; | ||
| TCGCallReturnKind out_kind : 8; | ||
|
|
||
| /* Maximum physical arguments are constrained by TCG_TYPE_I128. */ | ||
| TCGCallArgumentLoc in[MAX_CALL_IARGS * (128 / TCG_TARGET_REG_BITS)]; | ||
| } TCGHelperInfo; | ||
|
|
||
| #endif /* TCG_HELPER_INFO_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters