[DTrace-devel] [PATCH 03/10] Exclude %r0 from automatic register allocation
Kris Van Hees
kris.van.hees at oracle.com
Fri Mar 18 19:04:29 UTC 2022
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
be allocated when dt_regset_alloc() is called.
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.
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");
--
2.34.1
More information about the DTrace-devel
mailing list