[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