AW: GCC SPARC FPU issue status

Jiri Gaisler jiri at gaisler.com
Tue Sep 1 14:11:28 UTC 2009


I would suggest that the flag is enabled by default, by changing

+int flag_ffloat_int_mode = 0;

to

+int flag_ffloat_int_mode = 1;

In this way, we would not need to update the make scripts for SPARC.

Jiri.


Daniel Hellstrom wrote:
> Hi,
> 
> In the Aeroflex Gaisler toolchain for RTEMS we have added the attached 
> patch, written by Konrad Eisele (konrad at gaisler.com), to avoid the 
> problem. The patch adds an optional -ffloat_int_mode flag to GCC which 
> disables the strange GCC Floating point behaviour. Function calls with 
> more arguments than the argument registers and the low globals are fixed.
> 
> The attached patch works for GCC 4.3.3. We are not GCC gurus, I hope 
> that someone could rewrite this patch if needed and insert it into GCC 
> main line in a clean way.
> 
> Please let me know what you think about this patch.
> 
> Best Regards,
> Daniel Hellstrom
> Aeroflex Gaisler
> 
> 
> 
> Detlev Schümann wrote:
> 
>> Hi,
>>
>> I would say that the RTEMS needs to be compiled with -msoft-float. 
>> Also all
>> ISRs should be compiled with -msoft-float. If the ISR and the RTEMS 
>> kernel
>> does not make use of any floating point operations, this should not be a
>> problem with lib variants.
>>
>> The application code can still be compiled without -msoft-float, 
>> especially
>> when it relies on using the FPU due to performance reasons. The task 
>> in my
>> applications have to be flagged RTEMS FP of course.
>>
>> That's the way I want to do it at OHB.
>>
>> Regards
>>
>> Detlev
>>
>>  
>>
>>> -----Ursprüngliche Nachricht-----
>>> Von: rtems-users-bounces at rtems.org [mailto:rtems-users-
>>> bounces at rtems.org] Im Auftrag von Joel Sherrill
>>> Gesendet: Dienstag, 1. September 2009 15:07
>>> An: Manuel Coutinho
>>> Cc: rtems-users at rtems.org
>>> Betreff: Re: GCC SPARC FPU issue status
>>>
>>> Manuel Coutinho wrote:
>>>   
>>>> Hi
>>>>
>>>>
>>>>
>>>> Was checking some mails exchanged in this mailing list a while ago
>>>> (2006) (http://www.rtems.com/ml/rtems-users/2006/may/msg00040.html)
>>>> and would like to know if the issue concerning GCC and SPARC floating
>>>> point registers is now solved or not. Does anybody know the status of
>>>> this issue? Is there a bug in GCC bugzilla so that we can track this?
>>>> try to find but with no luck :(
>>>>
>>>>
>>>>
>>>> Briefly, the problem, as far as I understood, occurs when a function
>>>> receives multiple arguments: GCC might store some arguments on FPU
>>>> registers, which could cause all sort of problems, like an invalid
>>>>     
>>> FPU
>>>   
>>>> trap, or an erroneous result on a thread that uses FPU (because the
>>>> register was changed).
>>>>
>>>> This problem could be solved by compiling RTEMS with –msoft-float
>>>>     
>>> flag
>>>   
>>>> and the application without this flag (for the sections that want to
>>>> use floating point).
>>>>
>>>>
>>>>
>>>>     
>>> This is fundamentally an incorrect thing to do and why this solution
>>> has
>>> never been merged.  You should never never never mix multilib variants
>>> in the same executable.
>>>
>>> If GCC is generating FPU instructions in unexpected places, then there
>>> are two solutions:
>>>
>>> + Fix GCC.  This is (in general) a cross target issue which may end up
>>> having
>>>    to be fixed in a target specific manner.  I don't know of a PR or
>>> anyone who
>>>    is interested in working on this.  It is an issue on at least the
>>> PowerPC as
>>>    well and that hasn't attracted any coders willing to address it.
>>>
>>> + Make all tasks in RTEMS FP.  We have resisted this solution because
>>> it
>>>    takes time to save the FP state and increases the context switch
>>> time.
>>>    But on PowerPC's with FPU, this is how this problem is solved.
>>>
>>> So the proper solution until GCC is fixed is to turn on the cpu.h
>>> define
>>> that says all tasks are floating point.
>>>   
>>>> It also seams that ERC32 has a different behavior than Leon2 and
>>>> Leon3: for Leon2 and Leon3, RTEMS does not save/restore hardware FPU
>>>> during a context switch. Is this correct? Shouldn’t the 3 BSPs have
>>>> the same behavior? Shouldn’t leon2 and leon3 save/restore the FPU
>>>> hardware during a context switch?
>>>>
>>>>
>>>>
>>>>     
>>> I don't see how they could be different.  They use the same context
>>> switch code.
>>> Unless you are using some patches we won't merge.
>>>   
>>>> (I’m looking at RTEMS 4.8.0)
>>>>
>>>>
>>>>
>>>> Thanks in advance
>>>>
>>>> Kind regards
>>>>
>>>> Manuel Coutinho
>>>>
>>>>
>>>>
>>>>     
>>> -- 
>>> Joel Sherrill, Ph.D.             Director of Research & Development
>>> joel.sherrill at OARcorp.com        On-Line Applications Research
>>> Ask me about RTEMS: a free RTOS  Huntsville AL 35805
>>>   Support Available             (256) 722-9985
>>>
>>>
>>> _______________________________________________
>>> rtems-users mailing list
>>> rtems-users at rtems.org
>>> http://www.rtems.org/mailman/listinfo/rtems-users
>>>   
>>
>> _______________________________________________
>> rtems-users mailing list
>> rtems-users at rtems.org
>> http://www.rtems.org/mailman/listinfo/rtems-users
>>
>>
>>  
>>
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-users



More information about the users mailing list