When DWARF_FRAME_REGISTERS isn't defined, the default is
FIRST_PSEUDO_REGISTER which means that if you add faked
registers to the port, used for frame-context related
elimination, room is allocated for them in the register
context used for frame-unwinding, which is wasteful because
they're eliminated before the final form of the code that is
emitted.

Stopping after MOF saves two register slots in the unwind
contest, compared to the current default.  For regular C
programming this is uninteresting, but defining
DWARF_FRAME_REGISTERS now also avoids the need to remember
to define it later, when twiddling with additional faked
registers (alternatively suffering churn from comparing
differences in unwind context).  As expected, no effect on
test-results, coremark or local (C-specific)
microbenchmarks.

gcc:
        * config/cris/cris.h (DWARF_FRAME_REGISTERS): Define.
---
 gcc/config/cris/cris.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h
index 1f8ccc5dec98..4d04ef869f3d 100644
--- a/gcc/config/cris/cris.h
+++ b/gcc/config/cris/cris.h
@@ -588,6 +588,9 @@ enum reg_class
 
 #define STATIC_CHAIN_REGNUM CRIS_STATIC_CHAIN_REGNUM
 
+/* No unwind context is needed for faked registers nor DCCR.  Currently not MOF
+   too, but let's keep that open.  */
+#define DWARF_FRAME_REGISTERS (CRIS_MOF_REGNUM + 1)
 
 /* Node: Elimination */
 
-- 
2.11.0

Reply via email to