On Tue, Dec 20, 2011 at 9:00 AM, Julius Baxter <[email protected]>wrote:
> On Mon, Dec 19, 2011 at 8:43 PM, Matthew Hicks <[email protected]> > wrote: > > Below is a patch the redefines the macro used for clearing general > purpose > > registers from l.or to l.movhi. Using l.or relies on other possible > > uninitialized registers while l.movhi just relies on a 0 immediate value. > > This is important in RTL simulations and environments where the memory > used > > for the reg file is NOT guaranteed to be reset to zero. I have also > added a > > line which resets r0 since before its first use since it is possible > that r0 > > may not contain the value 0, but software expects it to be 0. > > > > diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S > > index 1088b5f..1fa6b1d 100644 > > --- a/arch/openrisc/kernel/head.S > > +++ b/arch/openrisc/kernel/head.S > > @@ -33,7 +33,7 @@ > > l.add rd,rd,rs > > > > #define CLEAR_GPR(gpr) \ > > - l.or gpr,r0,r0 > > + l.movhi gpr,0 > > I reckon this is a good move. > > > > > #define LOAD_SYMBOL_2_GPR(gpr,symbol) \ > > l.movhi gpr,hi(symbol) ;\ > > @@ -441,6 +441,9 @@ _dispatch_do_ipage_fault: > > __HEAD > > .global _start > > _start: > > + /* Ensure that r0 really is 0 */ > > + CLEAR_GPR(r0) > > + > > Shouldn't this be the first instruction of the reset vector instead of > _start()? > I checked, and the few instructions executed before execution enters _start do not rely on any register having a specific value (e.g., r0 does not need to be zero). ---Matthew Hicks
_______________________________________________ OpenRISC mailing list [email protected] http://lists.openrisc.net/listinfo/openrisc
