http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55142



--- Comment #21 from H.J. Lu <hjl.tools at gmail dot com> 2012-11-07 22:11:46 
UTC ---

(In reply to comment #20)

> If you compile the testcase with the unmodified compiler but without -fPIC, 
> you

> get in the assembly file:

> 

>         movl    %edx, _dl_rtld_map-1073742800(,%eax,4)

> 

> I presume that's wrong, correct?  Yet the RTL instruction is:



That is not wrong.



> (insn:TI 43 38 44 4 (set (mem/f:SI (zero_extend:DI (plus:SI (ashift:SI (reg:SI

> 0 ax [87])

>                         (const_int 2 [0x2]))

>                     (const:SI (plus:SI (symbol_ref:SI ("_dl_rtld_map") [flags

> 0x42]  <var_decl 0x7ffff6d2b7b8 _dl_rtld_map>)

>                             (const_int -1073742800 [0xffffffffbffffc30]))))) 
> [3

> *_8+0 S4 A32])

>         (reg:SI 1 dx [orig:82 dyn ] [82])) pr55142.c:32 65 {*movsi_internal}

>      (expr_list:REG_DEAD (reg:SI 0 ax [87])

>         (nil)))

> 

> and there is a zero_extend.



(,%eax,4) generates a 0x67 address-size prefix, which zero-extends

32-bit address to 64-bit.

Reply via email to