On 03/20/2012 03:50 PM, Jonas Bonn wrote:
On Tue, 2012-03-20 at 15:30 +0200, Stefan Kristiansson wrote:
On Tue, Mar 20, 2012 at 10:06:16AM +0000, R. Diez wrote:
Hi all:
I found the following about R0 in the architecture specification:
R0 is used as a constant zero.
That is the basic assumption which everybody counts upon, therefore...
R0 should never be used as a destination register.
I would add here "except for clearing it on start-up".
I agree
I don't agree... in the same way that you don't have to respect any ABI
as long as you aren't calling into "external" code, you are free to
fiddle with r0 as much as you want. "r0 contains 0" is ABI, it is not a
hardware detail. A bit weird, I agree, but not fundamentally incorrect.
The real problem is that r0 isn't _necessarily_ writable... so there's
no guarantee that you can actually run a program that changes r0 on an
arbitrary implementation.
No, the real problem is that the specification is not clear about
whether it should be possible to do a write to r0 without any side effects
(regardless if the value actually will be written or not to r0).
Like it is now it's freely up to the reader to do an implementation
that locks up the cpu when someone tries to write 0 to r0.
Although it perhaps wouldn't be a very good implementation ;)
Stefan
_______________________________________________
OpenRISC mailing list
[email protected]
http://lists.openrisc.net/listinfo/openrisc