[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 01/11] tcg: Mark tcg_gen_op* as noinline
|
From: |
Richard Henderson |
|
Subject: |
[PATCH 01/11] tcg: Mark tcg_gen_op* as noinline |
|
Date: |
Sun, 29 Oct 2023 14:08:38 -0700 |
Encourage the compiler to tail-call rather than inline
across the dozens of opcode expanders.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/tcg-op.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
index 828eb9ee46..9aed19e957 100644
--- a/tcg/tcg-op.c
+++ b/tcg/tcg-op.c
@@ -31,20 +31,26 @@
#include "tcg-internal.h"
-void tcg_gen_op1(TCGOpcode opc, TCGArg a1)
+/*
+ * Encourage the compiler to tail-call to a function, rather than inlining.
+ * Minimizes code size across 99 bottles of beer on the wall.
+ */
+#define NI __attribute__((noinline))
+
+void NI tcg_gen_op1(TCGOpcode opc, TCGArg a1)
{
TCGOp *op = tcg_emit_op(opc, 1);
op->args[0] = a1;
}
-void tcg_gen_op2(TCGOpcode opc, TCGArg a1, TCGArg a2)
+void NI tcg_gen_op2(TCGOpcode opc, TCGArg a1, TCGArg a2)
{
TCGOp *op = tcg_emit_op(opc, 2);
op->args[0] = a1;
op->args[1] = a2;
}
-void tcg_gen_op3(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3)
+void NI tcg_gen_op3(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3)
{
TCGOp *op = tcg_emit_op(opc, 3);
op->args[0] = a1;
@@ -52,7 +58,7 @@ void tcg_gen_op3(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg
a3)
op->args[2] = a3;
}
-void tcg_gen_op4(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3, TCGArg a4)
+void NI tcg_gen_op4(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3, TCGArg a4)
{
TCGOp *op = tcg_emit_op(opc, 4);
op->args[0] = a1;
@@ -61,8 +67,8 @@ void tcg_gen_op4(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg
a3, TCGArg a4)
op->args[3] = a4;
}
-void tcg_gen_op5(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3,
- TCGArg a4, TCGArg a5)
+void NI tcg_gen_op5(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3,
+ TCGArg a4, TCGArg a5)
{
TCGOp *op = tcg_emit_op(opc, 5);
op->args[0] = a1;
@@ -72,8 +78,8 @@ void tcg_gen_op5(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg
a3,
op->args[4] = a5;
}
-void tcg_gen_op6(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3,
- TCGArg a4, TCGArg a5, TCGArg a6)
+void NI tcg_gen_op6(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3,
+ TCGArg a4, TCGArg a5, TCGArg a6)
{
TCGOp *op = tcg_emit_op(opc, 6);
op->args[0] = a1;
--
2.34.1
- [PATCH 00/11] tcg: Move tcg expanders out of line, Richard Henderson, 2023/10/29
- [PATCH 01/11] tcg: Mark tcg_gen_op* as noinline,
Richard Henderson <=
- [PATCH 02/11] tcg: Move tcg_gen_op* out of line, Richard Henderson, 2023/10/29
- [PATCH 04/11] tcg: Move 32-bit expanders out of line, Richard Henderson, 2023/10/29
- [PATCH 03/11] tcg: Move generic expanders out of line, Richard Henderson, 2023/10/29
- [PATCH 06/11] tcg: Move vec_gen_* declarations to tcg-internal.h, Richard Henderson, 2023/10/29
- [PATCH 05/11] tcg: Move 64-bit expanders out of line, Richard Henderson, 2023/10/29
- [PATCH 09/11] tcg: Move tcg_constant_* out of line, Richard Henderson, 2023/10/29
- [PATCH 08/11] tcg: Unexport tcg_gen_op*_{i32,i64}, Richard Henderson, 2023/10/29
- [PATCH 11/11] tcg: Move tcg_temp_free_* out of line, Richard Henderson, 2023/10/29
- [PATCH 10/11] tcg: Move tcg_temp_new_*, tcg_global_mem_new_* out of line, Richard Henderson, 2023/10/29
- [PATCH 07/11] tcg: Move tcg_gen_opN declarations to tcg-internal.h, Richard Henderson, 2023/10/29