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: GCC 4.3.4 is casting my QImode vars to SImode for libcall


On Tue, Jun 15, 2010 at 9:17 AM, Paulo J. Matos <pocmatos@gmail.com> wrote:
> On Mon, Jun 14, 2010 at 8:56 PM, Joseph S. Myers
> <joseph@codesourcery.com> wrote:
>>
>> Every hardcoded reference to a mode other than QImode in the
>> target-independent compiler is suspicious and needs investigating if you
>> are doing such a port. ÂIn this case, the SImode references in
>> expand_float are likely the problem.
>>
>
> Thanks for the tip Joseph, I will look into it.
>

The code in expand_float like you said seems to be the one causing the problem.

if (GET_MODE_SIZE (GET_MODE (from)) < GET_MODE_SIZE (SImode))
        from = convert_to_mode (SImode, from, unsignedp);

I can't really see a reason why if the from mode has smaller size than
SImode than it has to be converted. Simply removing these lines
actually works.
However I can imagine that there _might_ be archs where the
non-integer modes are smaller than QImode and then there would be a
problem so the correct solution would be to change it to:

if (GET_MODE_SIZE (GET_MODE (from)) < GET_MODE_SIZE (QImode))
        from = convert_to_mode (QImode, from, unsignedp);

Cheers,
-- 
PMatos


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