[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