[DTrace-devel] [PATCH 03/10] Exclude %r0 from automatic register allocation

Eugene Loh eugene.loh at oracle.com
Fri Mar 18 21:06:10 UTC 2022


Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
with

On 3/18/22 3:04 PM, Kris Van Hees via DTrace-devel wrote:
> The %r0 register is used as a scratch register in various parts of the
> coe gneerator and should therefore not be among the registers that can

s/coe/code/
s/gneerator/generator/

> be allocated when dt_regset_alloc() is called.
So this patch should also:
*) in dt_cg.c, remove those dozens of dt_regset_xalloc() calls along 
with their corresponding frees
*) in dt_regset.h, remove dt_regset_xalloc()
*) in dt_regset.c, make dt_regset_xalloc() static
> This patch also offers a minor improvement in the regset debugging
> output, reporting in-use registers by number rather than with a 'x'
> in the register list.
Well, this change unnecessarily throws away active/spill info.
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
>   libdtrace/dt_regset.c | 10 +++++-----
>   1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/libdtrace/dt_regset.c b/libdtrace/dt_regset.c
> index 11f0fdc1..143c5c24 100644
> --- a/libdtrace/dt_regset.c
> +++ b/libdtrace/dt_regset.c
> @@ -1,6 +1,6 @@
>   /*
>    * Oracle Linux DTrace.
> - * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved.
>    * Licensed under the Universal Permissive License v 1.0 as shown at
>    * http://oss.oracle.com/licenses/upl.
>    */
> @@ -62,14 +62,14 @@ dt_regset_alloc(dt_regset_t *drp)
>   {
>   	int reg;
>   
> -	for (reg = drp->dr_size - 1; reg >= 0; reg--) {
> +	for (reg = drp->dr_size - 1; reg > 0; reg--) {
>   		if (BT_TEST(drp->dr_active, reg) == 0) {
>   			BT_SET(drp->dr_active, reg);
>   			return reg;
>   		}
>   	}
>   
> -	for (reg = drp->dr_size - 1; reg >= 0; reg--) {
> +	for (reg = drp->dr_size - 1; reg > 0; reg--) {
>   		if (BT_TEST(drp->dr_spilled, reg) == 0) {
>   			drp->dr_spill_store(reg);
>   			BT_SET(drp->dr_spilled, reg);
> @@ -157,8 +157,8 @@ dt_regset_dump(dt_regset_t *drp, const char *pref)
>   
>   	fprintf(stderr, "%s: Regset: ", pref);
>   	for (reg = 0; reg < drp->dr_size; reg++) {
> -		fprintf(stderr, "%c", BT_TEST(drp->dr_active, reg) ? 'x' :
> -				      BT_TEST(drp->dr_spilled, reg) ? 's' :
> +		fprintf(stderr, "%c", BT_TEST(drp->dr_active, reg) ? '0' + reg:
> +				      BT_TEST(drp->dr_spilled, reg) ? '0' + reg:
>   				      '.');
>   	}
>   	fprintf(stderr, "\n");



More information about the DTrace-devel mailing list