[DTrace-devel] [PATCH 08/13] Add code for avg() aggregation function
Kris Van Hees
kris.van.hees at oracle.com
Tue Dec 8 11:17:22 PST 2020
On Wed, Dec 02, 2020 at 01:54:53PM -0500, eugene.loh at oracle.com wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
>
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_cg.c | 39 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index 6fa49bbc..43edb363 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -3071,6 +3071,35 @@ dt_cg_agg_opt_incr(dt_node_t *dnp, dt_node_t *lastarg, const char *fn,
> return incr;
> }
>
> +static void
> +dt_cg_agg_avg_impl(dt_irlist_t *dlp, dt_regset_t *drp, int dreg, int vreg)
> +{
> + TRACE_REGSET(" Impl: Begin");
> +
> + /*
> + * uint64_t dst[2], val;
> + * char *dreg = dst, *vreg = &val;
> + * // (%rd = dreg -- agg data ptr)
> + * // (%rv = vreg -- value)
> + * uint64_t *dst = dreg;
> + *
> + * dst[0]++; // mov %r0, 1
> + * // xadd [%rd + 0], %r0
> + * dst[1] += vreg; // xadd [%rd + 8], %rv
> + */
> +
> + /* dst[0]++ */
> + dt_regset_xalloc(drp, BPF_REG_0);
> + emit(dlp, BPF_MOV_IMM(BPF_REG_0, 1));
> + emit(dlp, BPF_XADD_REG(BPF_DW, dreg, 0, BPF_REG_0));
> + dt_regset_free(drp, BPF_REG_0);
> +
> + /* dst[1] += val */
> + emit(dlp, BPF_XADD_REG(BPF_DW, dreg, 8, vreg));
> +
> + TRACE_REGSET(" Impl: End ");
> +}
> +
> static void
> dt_cg_agg_avg(dt_pcb_t *pcb, dt_ident_t *aid, dt_node_t *dnp,
> dt_irlist_t *dlp, dt_regset_t *drp)
> @@ -3079,6 +3108,16 @@ dt_cg_agg_avg(dt_pcb_t *pcb, dt_ident_t *aid, dt_node_t *dnp,
>
> if (aid->di_offset == -1)
> aid->di_offset = DT_CG_AGG_OFFSET(pcb, sz);
> +
> + TRACE_REGSET(" AggAvg: Begin");
> +
> + dt_cg_node(dnp->dn_aggfun->dn_args, dlp, drp);
> +
> + DT_CG_AGG_IMPL(aid, sz, dlp, drp, dt_cg_agg_avg_impl,
> + dnp->dn_aggfun->dn_args->dn_reg);
> + dt_regset_free(drp, dnp->dn_aggfun->dn_args->dn_reg);
> +
> + TRACE_REGSET(" AggAvg: End ");
> }
>
> static void
> --
> 2.18.4
>
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list