|
Message
From: Matjaz Breskvar<phoenix@o...>
Date: Thu Dec 30 17:40:20 CET 2004
Subject: [openrisc] Bug in hello-uart
* Patrick Loschmidt (Patrick.Loschmidt@o...) wrote: > Matjaz Breskvar schrieb: > >>_reset: > >> l.movhi r1,hi(_stack-4) > >> l.ori r1,r1,lo(_stack-4) > >>- l.addi r2,r0,-3 > >>+ l.addi r2,r0,-4 > >> l.and r1,r1,r2 > >> > >> l.movhi r2,hi(_main) > >>I suppose that the -3 should do an alignment to 32bit words but this is > >>not the case. Because -3 is b1101 or 0xD so it should be -4 equal to > >>b1100 or 0xC. Could somebody please confirm this? > >it's readibility bug in any case. Since this is an example, let's do > >it really clearly: > > > > > >and now there is no confusion anymore. > > I found the example very usefull for my own start-up code, so I'm not > sure whether changing it to fixed addresses is a good idea, but I leave > it up to the maintainer ... ;-)
ok. maybe my problem is that i'm looking at only this 5 lines of code, but i really don't get 'the fixed addresses'...
as far as i can see (from this 5 lines of code, so i might see very wrong) the purpose of the code is to load the pointer to the stack into r1. since it may not be aligned to 0x4, we want to make sure it is. so to shave off the last two bits we now load the complete mask in the r2 explicitly instead of the former shorter but kind of more difficult to see l.addi line... the code would now be:
l.movhi r1,hi(_stack-4) l.ori r1,r1,lo(_stack-4) l.movhi r2,hi(0xfffffffc) l.ori r2,lo(0xfffffffc) l.and r1,r1,r2
why wouldn't this be ok ?
regards, p.
|
 |