Port-sparc64 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: %hi vs %lm for 64-bit constants
On Mon, 17 Aug 2009, raymond.meyer%rambler.ru@localhost wrote:
> Hi, I'm confused about sparc assembly language %hi and %lm operators
> when used on sparcv9. Both of the operators extract 22 bits, which are
> bits 10 to 31.
>
> %hi(addr) which does (addr) >> 10
> %lm(addr) which does ((addr) >> 10) & 0x3fffff
>
> Assuming that 'addr' is a 64-bit memory address, from which I need to
> extract bits 10 to 31, then it looks like %hi and %lm are duplicates of
> each other.
>
> I think %hi treats addr as a 32-bit constant and extracts bits 10 to 31
> by shifting right 10 places.
>
> And %lm treats addr as a 64-bit constant and extracts bits 10 to 31 by
> shifting right 10 places and masking least significant 22 bits.
>
> Why have both then?
%lm zeros out bits beyond 31 before the left shift. %hi does not. You
can get strange effects if you use any bits above 22 from a negative
constant.
Eduardo
Home |
Main Index |
Thread Index |
Old Index