[DTrace-devel] [PATCH 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
Wed Aug 30 01:54:33 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_cg.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index ef44067a..6a5af101 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -1235,20 +1235,19 @@ 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);
-	}
-
-	emit(dlp,  BPF_LOAD(BPF_DW, reg, BPF_REG_FP, DT_STK_DCTX));
-	emit(dlp,  BPF_LOAD(BPF_DW, reg, reg, DCTX_SCRATCHMEM));
-	emit(dlp,  BPF_ALU64_REG(BPF_ADD, reg, sreg));
-
-	if (dreg == sreg) {
-		emit(dlp, BPF_MOV_REG(dreg, reg));
+		emit(dlp,  BPF_LOAD(BPF_DW, reg, BPF_REG_FP, DT_STK_DCTX));
+		emit(dlp,  BPF_LOAD(BPF_DW, reg, reg, DCTX_SCRATCHMEM));
+		emit(dlp,  BPF_ALU64_REG(BPF_ADD, sreg, reg));
 		dt_regset_free(drp, reg);
+	} else {
+		emit(dlp,  BPF_LOAD(BPF_DW, dreg, BPF_REG_FP, DT_STK_DCTX));
+		emit(dlp,  BPF_LOAD(BPF_DW, dreg, dreg, DCTX_SCRATCHMEM));
+		emit(dlp,  BPF_ALU64_REG(BPF_ADD, dreg, sreg));
 	}
 }
 
-- 
2.18.4




More information about the DTrace-devel mailing list