On Fri, Dec 16, 2011 at 3:47 PM, Matthew Hicks <[email protected]> wrote:
> On Fri, Dec 16, 2011 at 3:06 AM, Richard Herveille <[email protected]>
> wrote:
>>
>> > The problem, perhaps, is that the register clear is assuming that r0
>> > really is 0...???  Perhaps the first thing we should be doing is loading
>> > r0 with a 0:
>> >
>> > l.movhi r0,hi(0)
>> > l.ori r0,r0,0
>>
>>
>> I don't think that piece of code loads R0 with '0' ...
>> Assume R0 is NOT zero then:
>>
>> movhi r0,hi(0)  --> set MSBs to 0
>> ori r0,r0,0   --> logic OR of R0 with R0 and '0' ... This does NOT clear
>> the LSBs!!
>>
>>
>>
>> Richard
>>
>
> Actually, all you need is l.movhi, which clears the lower 16-bits.
>

I agree.

Stefan, your use of "l.andi     r0, r0, 0" still won't work because in
simulation 1'bX & 1'b0 = 1'bX

l.movhi appears also clear the lower 16-bits, regardless of the upper
16-bits, and is the only safe way, AFAIK, to source zeroes for a
register.

I think using "l.movhi r0, 0" as the very first instruction of all
OR1k reset vectors would be a good habit to get into. I'd probably
even go as far as to say we should "l.movhi rX, 0" for all GPRs at
reset, to ensure a safe state for any code in _start() or main().

    Julius
_______________________________________________
OpenRISC mailing list
[email protected]
http://lists.openrisc.net/listinfo/openrisc

Reply via email to