[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH for-8.0 v3 30/45] tcg: Handle dh_typecode_i128 with TCG_CALL_{RET
From: |
Richard Henderson |
Subject: |
[PATCH for-8.0 v3 30/45] tcg: Handle dh_typecode_i128 with TCG_CALL_{RET, ARG}_NORMAL |
Date: |
Fri, 11 Nov 2022 17:40:46 +1000 |
Many hosts pass and return 128-bit quantities like sequential
64-bit quantities. Treat this just like we currently break
down 64-bit quantities for a 32-bit host.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/tcg.c | 33 +++++++++++++++++++++++++++++----
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/tcg/tcg.c b/tcg/tcg.c
index c5f8f4ac2c..11948256f2 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -685,11 +685,22 @@ static void init_call_layout(TCGHelperInfo *info)
case dh_typecode_s64:
info->nr_out = 64 / TCG_TARGET_REG_BITS;
info->out_kind = TCG_CALL_RET_NORMAL;
+ assert(info->nr_out <= ARRAY_SIZE(tcg_target_call_oarg_regs));
+ break;
+ case dh_typecode_i128:
+ info->nr_out = 128 / TCG_TARGET_REG_BITS;
+ info->out_kind = TCG_CALL_RET_NORMAL; /* TODO */
+ switch (/* TODO */ TCG_CALL_RET_NORMAL) {
+ case TCG_CALL_RET_NORMAL:
+ assert(info->nr_out <= ARRAY_SIZE(tcg_target_call_oarg_regs));
+ break;
+ default:
+ qemu_build_not_reached();
+ }
break;
default:
g_assert_not_reached();
}
- assert(info->nr_out <= ARRAY_SIZE(tcg_target_call_oarg_regs));
/*
* Parse and place function arguments.
@@ -736,6 +747,18 @@ static void init_call_layout(TCGHelperInfo *info)
case dh_typecode_ptr:
layout_arg_1(&cum, info, TCG_CALL_ARG_NORMAL);
break;
+ case dh_typecode_i128:
+ switch (/* TODO */ TCG_CALL_ARG_NORMAL) {
+ case TCG_CALL_ARG_EVEN:
+ layout_arg_even(&cum);
+ /* fall through */
+ case TCG_CALL_ARG_NORMAL:
+ layout_arg_normal_n(&cum, info, 128 / TCG_TARGET_REG_BITS);
+ break;
+ default:
+ qemu_build_not_reached();
+ }
+ break;
default:
g_assert_not_reached();
}
@@ -1653,11 +1676,13 @@ void tcg_gen_callN(void *func, TCGTemp *ret, int nargs,
TCGTemp **args)
op->args[pi++] = temp_arg(ret);
break;
case 2:
+ case 4:
tcg_debug_assert(ret != NULL);
- tcg_debug_assert(ret->base_type == ret->type + 1);
+ tcg_debug_assert(ret->base_type == ret->type + ctz32(n));
tcg_debug_assert(ret->temp_subindex == 0);
- op->args[pi++] = temp_arg(ret);
- op->args[pi++] = temp_arg(ret + 1);
+ for (i = 0; i < n; ++i) {
+ op->args[pi++] = temp_arg(ret + i);
+ }
break;
default:
g_assert_not_reached();
--
2.34.1
- Re: [PATCH 3/3] tcg: Move ffi_cif pointer into TCGHelperInfo, (continued)
- [PATCH for-8.0 v3 27/45] tcg/aarch64: Merge tcg_out_callr into tcg_out_call, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 24/45] tcg: Use output_pref wrapper function, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 25/45] tcg: Reorg function calls, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 28/45] tcg: Add TCGHelperInfo argument to tcg_out_call, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 31/45] tcg: Allocate objects contiguously in temp_allocate_frame, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 32/45] tcg: Introduce tcg_out_addi_ptr, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 29/45] tcg: Define TCG_TYPE_I128 and related helper macros, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 30/45] tcg: Handle dh_typecode_i128 with TCG_CALL_{RET, ARG}_NORMAL,
Richard Henderson <=
- [PATCH for-8.0 v3 33/45] tcg: Add TCG_CALL_{RET,ARG}_BY_REF, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 34/45] tcg: Introduce tcg_target_call_oarg_reg, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 35/45] tcg: Add TCG_CALL_RET_BY_VEC, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 37/45] tcg/i386: Add TCG_TARGET_CALL_{RET, ARG}_I128, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 36/45] include/qemu/int128: Use Int128 structure for TCI, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 39/45] tcg/tci: Add TCG_TARGET_CALL_{RET,ARG}_I128, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 38/45] tcg/tci: Fix big-endian return register ordering, Richard Henderson, 2022/11/11
- [PATCH for-8.0 v3 40/45] tcg: Add TCG_TARGET_CALL_{RET,ARG}_I128, Richard Henderson, 2022/11/11