<HTML dir=ltr><HEAD><TITLE>Re: cpuuse, rtmonuse and gcc (was: erc32 wrong compilation flagsfor initial task with fpu?)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.2900.3268" name=GENERATOR></HEAD>
<BODY>
<DIV id=idOWAReplyText7914 dir=ltr>
<DIV dir=ltr><FONT face=Arial color=#000000 size=2>Perhaps I misunderstand this email, so I will ask.  Are you saying that one cannot use the FPU under the latest version of RTEMS with a Sparc?</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial size=2>Allen Kitchen</FONT></DIV></DIV>
<DIV dir=ltr><BR>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> rtems-users-bounces@rtems.org on behalf of Joel Sherrill<BR><B>Sent:</B> Fri 3/28/2008 8:58 AM<BR><B>To:</B> Jiri Gaisler<BR><B>Cc:</B> rtems-users@rtems.org<BR><B>Subject:</B> Re: cpuuse, rtmonuse and gcc (was: erc32 wrong compilation flagsfor initial task with fpu?)<BR></FONT><BR></DIV>
<DIV>
<P><FONT size=2>Jiri Gaisler wrote:<BR>> This is pretty bad. If the kernel uses floats, then compilation<BR>> with -msoft-float will not work if the application later is linked<BR>> without -msoft-float. Are the CPU_usage_Dump() and Period_usage_Dump()<BR>> new functions or have they always been around?<BR>I think our emails crossed.  Older versions had floating<BR>point math if the FPU defined was set to TRUE.<BR><BR>Newer versions have been rewritten to completely<BR>use integer math.<BR><BR>So the question for Aleix is what version of RTEMS<BR>do you have?  If it is the older FP using version,<BR>can you backport the integer version of the functions<BR>and post a patch.<BR>> Are there other<BR>> functions in the kernel that uses floats as well?<BR>>  <BR>There are not supposed to be.  But gcc has surprised<BR>us in the past by generating FP using code when you<BR>least expected it.<BR><BR>So AFAIK "float/double" C types should not be found<BR>anywhere in the code except to declare the FP context<BR>structures anymore.<BR><BR>--joel<BR>> Jiri.<BR>><BR>> Aleix Conchillo Flaqué wrote:<BR>>  <BR>>> Hi again,<BR>>><BR>>> I forced the SPARC_HAS_FPU to 1, so CPU_HARDWARE_FP is set to TRUE.<BR>>> Now (compiling RTEMS with -msoft-float), the CPU_usage_Dump and<BR>>> Period_usage_Dump print 0.000 for percentage values.<BR>>><BR>>> I have disassembled the code and I have seen that the compiler forces<BR>>> those functions (by chance, only these two) to use __floatsidf and<BR>>> __divdf3 functions, which I think are for software floating point<BR>>> emulation. This is fine, the problem is that they use floating point<BR>>> registers internally.<BR>>><BR>>> So, even RTEMS is compiled with -msoft-float, gcc floating point<BR>>> software emulation function use floating point registers, which is<BR>>> kind of scary.<BR>>><BR>>> Luckily, my task had the RTEMS_FLOATING_POINT attribute set, so I<BR>>> could see the statistics. Removing the attribute, which I think it<BR>>> should, crashed the application because of the gcc problem cited<BR>>> above.<BR>>><BR>>> The problems I am facing now are:<BR>>><BR>>> - gcc uses floating point registers for some floating point software<BR>>> emulation routines.<BR>>> - cpu_usage_dump and period_usage_dump do not print correct percentage<BR>>> values. I am not sure if this is caused by the point above.<BR>>><BR>>> Does this makes any sense at all?<BR>>><BR>>><BR>>> Aleix<BR>>><BR>>><BR>>>    <BR><BR><BR>--<BR>Joel Sherrill, Ph.D.             Director of Research & Development<BR>joel.sherrill@OARcorp.com        On-Line Applications Research<BR>Ask me about RTEMS: a free RTOS  Huntsville AL 35805<BR>   Support Available             (256) 722-9985<BR><BR><BR>_______________________________________________<BR>rtems-users mailing list<BR>rtems-users@rtems.com<BR><A href="http://rtems.rtems.org/mailman/listinfo/rtems-users">http://rtems.rtems.org/mailman/listinfo/rtems-users</A><BR></FONT></P></DIV></BODY></HTML>