This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Will backend ever see an memory operand with address wrap around?


On Sun, May 13, 2012 at 12:01 PM, Richard Guenther
<richard.guenther@gmail.com> wrote:
> On Sun, May 13, 2012 at 6:32 PM, H.J. Lu <hjl.tools@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));
> }
>

What is the expect run-time behavior when a + b has
overflow/underflow?


-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]