On Sun, May 13, 2012 at 6:32 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> Hi,
>
> I am trying to optimize memory address for x32.  X32 runs in 64-bit mode.
> 64-bit address is base + index * scale + offset:
> 1. Base is 64bit.
> 2. Index is 64bit.
> 3. Offset is 8bit or 32bit
>
> 0x67 address size prefix is used to zero-extend 32bit address to 64bit:
> 1. Upper 32bits of base or index can be none-zero.
> 2.  Index can be negative.
>
> We can avoid 0x67 prefix if
> 1. There is no index
> 2. Upper 32bits of base is zero:
>    a. When base is set via 32bit load op,  the upper 32bits are
> atomically zero-extended from the lower 32bits
> 3. Base + offset is a valid 32-bit address.
>
> Will x86 backend ever see a memory address with wrap around.
> That is to use 0xffffffff + 0x30 to represent 0x2f.

Why not? Easily from code like

long foo (long a, long b)
{
  return *((long *)(a + b));
}

no?

Richard.

> Thanks.
>
>
> --
> H.J.

Reply via email to