[DTrace-devel] [PATCH v2 3/3] Save instruction in dt_cg_alloca_ptr() for the common sreg==dreg case
eugene.loh at oracle.com
eugene.loh at oracle.com
Sun Jan 21 06:35:34 UTC 2024
From: Eugene Loh <eugene.loh at oracle.com>
Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
libdtrace/dt_cg.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index dad5ab58..d312e319 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -1534,19 +1534,17 @@ dt_cg_alloca_access_check(dt_irlist_t *dlp, dt_regset_t *drp, int reg,
static void
dt_cg_alloca_ptr(dt_irlist_t *dlp, dt_regset_t *drp, int dreg, int sreg)
{
- int reg = dreg;
-
if (dreg == sreg) {
+ int reg;
+
if ((reg = dt_regset_alloc(drp)) == -1)
longjmp(yypcb->pcb_jmpbuf, EDT_NOREG);
- }
-
- dt_cg_access_dctx(reg, dlp, drp, DCTX_SCRATCHMEM);
- emit(dlp, BPF_ALU64_REG(BPF_ADD, reg, sreg));
-
- if (dreg == sreg) {
- emit(dlp, BPF_MOV_REG(dreg, reg));
+ dt_cg_access_dctx(reg, dlp, drp, DCTX_SCRATCHMEM);
+ emit(dlp, BPF_ALU64_REG(BPF_ADD, sreg, reg));
dt_regset_free(drp, reg);
+ } else {
+ dt_cg_access_dctx(dreg, dlp, drp, DCTX_SCRATCHMEM);
+ emit(dlp, BPF_ALU64_REG(BPF_ADD, dreg, sreg));
}
}
--
2.18.4
More information about the DTrace-devel
mailing list