A few years back we made the decision to split the registers between caller/callee as you see in the ABI today. This was made for a variety of reasons, compiler efficiency, balance, etc, but the decision process was not rigorous. This has been discussed before here:
viewtopic.php?f=43&t=1748&p=10829&hilit=callee#p10829
viewtopic.php?f=13&t=1578&p=9698&hilit=callee#p9698
viewtopic.php?f=23&t=549&p=3284&hilit=callee#p3284
At this point, the number of users is growing and if we ever want to make a change without angering a lot of people, this may be our last chance.
ABI Change proposal:
Make registers R32-R63 officially caller saved. (currently R32-R43 are callee saved)
Why:
-better energy/program efficiency for leaf routines, where the program will likely spend most of its time (check assumption?)
-ease of use for assembly programming ("do whatever you want with R32-R63")
Why not?
...
This is actually what I had specified back in 2011. Looked through my emails and found that I made the same arguments back in 2011. Someone must have convinced me otherwise. I can't find the email trail and can't remember what the argument was for the R32-R43 callee change?.
Feedback much appreciated.
Andreas