[patch] Fix powerpc 64 alignment problem for lwa instruction

Hui-May Chang hm.chang@apple.com
Tue Nov 7 22:03:00 GMT 2006


On Nov 7, 2006, at 12:56 PM, Andrew Pinski wrote:

>> We, at Apple, found a ppc64 code generation problem where lwa_operand
>> routine didn't check the alignment of a memory operand being 32 bits
>> aligned or not.
>>
>> The following patch has been tested on ppc MacOS with "make all", "--
>> enable-languages=c,c++,objc,obj-c++", and regression tested with a  
>> top-
>> level "make check-gcc" with no regression.
>>
>> gcc/ChangeLog:
>>
>> 	* gcc/config/rs6000/predicates.md (lwa_operand): Check the  
>> alignment of
>> 	a memory operand is 32 bits aligned or not.
>
> This is the wrong fix, the memory alignment is not the issue here  
> but the offset
> field has to be multiple of 4.  This is according to the ISA  
> documents.
>
> Can you give more information about what is going wrong?  Because as  
> far as I can
> tell we check the offset to make sure it is a multiple of 4.
>  	    || GET_CODE (XEXP (XEXP (inner, 0), 1)) != CONST_INT
> 	    || INTVAL (XEXP (XEXP (inner, 0), 1)) % 4 == 0));
>
>
> Thanks,
> Andrew Pinski

For the following memory operand,
(gdb) p debug_rtx(op)
(mem/s/j:SI (lo_sum:DI (reg:DI 121)
         (const:DI (minus:DI (symbol_ref:DI ("mybox") [flags 0x382]  
<var_decl 0x41687e80 mybox>)
                 (symbol_ref:DI ("<pic base>") [flags 0x180])))) [0  
mybox.left+0 S4 A16])

     GET_CODE (XEXP (inner, 0)) == LO_SUM
     GET_CODE (XEXP (XEXP (inner, 0), 1)) == CONST

The alignment is A16, i.e., 16 bits.



More information about the Gcc-patches mailing list