An alpha egcs bug

H.J. Lu hjl@lucon.org
Wed Oct 22 16:49:00 GMT 1997


>   > On Wed, Oct 22, 1997 at 12:48:44PM -0700, H.J. Lu wrote:
>   > > But alpha.md doesn't reflect that detail. With my inline.cc, egcs
>   > > generates incorrect asm code. Here is my kludge. It seems to work on
>   > > my test case. I hope someone can find a better fix.
>   > 
>   > I don't see what your patch changes at all, except to make two patterns
>   > where once there was one.  The problem is in reload, pure and simple. 
>   > 
>   > Or as simple as reload ever gets.
> I didn't read this thread real close, but it might be worth
> looking at CLASS_CANNOT_CHANGE_SIZE.
> 

>From what I read in tm.texi:

`CLASS_CANNOT_CHANGE_SIZE'
     If defined, a C expression for a class that contains registers
     which the compiler must always access in a mode that is the same
     size as the mode in which it loaded the register.
 
     For the example, loading 32-bit integer or floating-point objects
     into floating-point registers on the Alpha extends them to 64-bits.
     Therefore loading a 64-bit object and then storing it as a 32-bit
     object does not store the low-order 32-bits, as would be the case
     for a normal register.  Therefore, `alpha.h' defines this macro as
     `FLOAT_REGS'.

it implies it doesn't apply to normal registers.

-- 
H.J. Lu (hjl@gnu.ai.mit.edu)



More information about the Gcc mailing list