[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 39/43] tcg: Convert typecode_to_ffi from array to function
From: |
Richard Henderson |
Subject: |
[PATCH v5 39/43] tcg: Convert typecode_to_ffi from array to function |
Date: |
Sat, 24 Dec 2022 15:57:16 -0800 |
From: Philippe Mathieu-Daudé <philmd@linaro.org>
In the unlikely case of invalid typecode mask, the function
will abort instead of returning a NULL pointer.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20221111074101.2069454-27-richard.henderson@linaro.org>
[PMD: Split from bigger patch]
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221122180804.938-2-philmd@linaro.org>
---
tcg/tcg.c | 30 ++++++++++++++++++++----------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 74f7491d73..46cce228a0 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -555,14 +555,24 @@ static GHashTable *helper_table;
#ifdef CONFIG_TCG_INTERPRETER
static GHashTable *ffi_table;
-static ffi_type * const typecode_to_ffi[8] = {
- [dh_typecode_void] = &ffi_type_void,
- [dh_typecode_i32] = &ffi_type_uint32,
- [dh_typecode_s32] = &ffi_type_sint32,
- [dh_typecode_i64] = &ffi_type_uint64,
- [dh_typecode_s64] = &ffi_type_sint64,
- [dh_typecode_ptr] = &ffi_type_pointer,
-};
+static ffi_type *typecode_to_ffi(int argmask)
+{
+ switch (argmask) {
+ case dh_typecode_void:
+ return &ffi_type_void;
+ case dh_typecode_i32:
+ return &ffi_type_uint32;
+ case dh_typecode_s32:
+ return &ffi_type_sint32;
+ case dh_typecode_i64:
+ return &ffi_type_uint64;
+ case dh_typecode_s64:
+ return &ffi_type_sint64;
+ case dh_typecode_ptr:
+ return &ffi_type_pointer;
+ }
+ g_assert_not_reached();
+}
#endif
typedef struct TCGCumulativeArgs {
@@ -779,14 +789,14 @@ static void tcg_context_init(unsigned max_cpus)
nargs = DIV_ROUND_UP(nargs, 3);
ca = g_malloc0(sizeof(*ca) + nargs * sizeof(ffi_type *));
- ca->cif.rtype = typecode_to_ffi[typemask & 7];
+ ca->cif.rtype = typecode_to_ffi(typemask & 7);
ca->cif.nargs = nargs;
if (nargs != 0) {
ca->cif.arg_types = ca->args;
for (int j = 0; j < nargs; ++j) {
int typecode = extract32(typemask, (j + 1) * 3, 3);
- ca->args[j] = typecode_to_ffi[typecode];
+ ca->args[j] = typecode_to_ffi(typecode);
}
}
--
2.34.1
- [PATCH v5 28/43] tcg: Introduce TCGCallReturnKind and TCGCallArgumentKind, (continued)
- [PATCH v5 28/43] tcg: Introduce TCGCallReturnKind and TCGCallArgumentKind, Richard Henderson, 2022/12/24
- [PATCH v5 30/43] tcg: Replace TCG_TARGET_EXTEND_ARGS with TCG_TARGET_CALL_ARG_I32, Richard Henderson, 2022/12/24
- [PATCH v5 22/43] tcg: Move TCG_{LOW,HIGH} to tcg-internal.h, Richard Henderson, 2022/12/24
- [PATCH v5 24/43] tcg: Simplify calls to temp_sync vs mem_coherent, Richard Henderson, 2022/12/24
- [PATCH v5 37/43] tcg: Use output_pref wrapper function, Richard Henderson, 2022/12/24
- [PATCH v5 26/43] tcg: Move TCG_TYPE_COUNT outside enum, Richard Henderson, 2022/12/24
- [PATCH v5 35/43] tcg: Pass number of arguments to tcg_emit_op() / tcg_op_insert_*(), Richard Henderson, 2022/12/24
- [PATCH v5 25/43] tcg: Allocate TCGTemp pairs in host memory order, Richard Henderson, 2022/12/24
- [PATCH v5 34/43] accel/tcg/plugin: Use copy_op in append_{udata, mem}_cb, Richard Henderson, 2022/12/24
- [PATCH v5 33/43] accel/tcg/plugin: Avoid duplicate copy in copy_call, Richard Henderson, 2022/12/24
- [PATCH v5 39/43] tcg: Convert typecode_to_ffi from array to function,
Richard Henderson <=
- [PATCH v5 27/43] tcg: Introduce tcg_type_size, Richard Henderson, 2022/12/24
- [PATCH v5 29/43] tcg: Replace TCG_TARGET_CALL_ALIGN_ARGS with TCG_TARGET_CALL_ARG_I64, Richard Henderson, 2022/12/24
- [PATCH v5 32/43] accel/tcg/plugin: Don't search for the function pointer index, Richard Henderson, 2022/12/24
- [PATCH v5 36/43] tcg: Vary the allocation size for TCGOp, Richard Henderson, 2022/12/24
- [PATCH v5 38/43] tcg: Reorg function calls, Richard Henderson, 2022/12/24
- [PATCH v5 19/43] tcg: Introduce paired register allocation, Richard Henderson, 2022/12/24
- [PATCH v5 31/43] tcg: Use TCG_CALL_ARG_EVEN for TCI special case, Richard Henderson, 2022/12/24
- [PATCH v5 40/43] tcg: Factor init_ffi_layouts() out of tcg_context_init(), Richard Henderson, 2022/12/24
- [PATCH v5 42/43] tcg/aarch64: Merge tcg_out_callr into tcg_out_call, Richard Henderson, 2022/12/24
- [PATCH v5 41/43] tcg: Move ffi_cif pointer into TCGHelperInfo, Richard Henderson, 2022/12/24