<div>Hello everyone.</div>
<div> </div>
<div>Using RTEMS 4.8.2, I create a single task that executes the code of "paranoia.c" (it is included when installing RTEMS 4.8.2 in the path .../rtems-4.8.2/testsuites/samples/paranoia/paranoia.c):</div>
<div> </div>
<div><span lang="EN-GB">
<p>rtems_task Init( rtems_task_argument ignored )</p>
<p>{</p>
<p>rtems_status_code status; rtems_id id;</p>
<p>//Create and start the first task</p>
<p>status = rtems_task_create( rtems_build_name( 'T', 'A', '1', ' ' ), 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES <span lang="EN-GB">| RTEMS_FLOATING_POINT</span>, &id);</p>

<p>assert( !status );</p>
<p>status = rtems_task_start( id, task1, 0 );</p>
<p>assert( !status );</p>
<p>status = rtems_task_delete( RTEMS_SELF );</p>
<p>exit( 0 );</p>
<p>}</p><span lang="EN-GB">
<p>rtems_task task1( rtems_task_argument ignored )</p>
<p>{</p>
<p>paranoia();</p>
<p>rtems_task_delete(RTEMS_SELF);</p>
<p>}</p>
<p> </p>
<p>Paranoia program contains a number of functions that perform floating point operations.</p>
<p>When I execute the aforementioned code on a SPARC machine it works perfectly. But when I execute the same code using Qemu/i386 the execution halts when "Milestone 140" is reached, and more specifically after the line indicated bellow:</p>
<span lang="EN-GB">
<p>/*=============================================*/</p>
<p>Milestone = 140;</p>
<p>/*=============================================*/</p>
<p>printf ("\n");</p>
<p>/* ...calculate Exp2 == exp(2) == 7.389056099... */</p>
<p>X = Zero;</p>
<p>I = 2;</p>
<p>Y = Two * Three;</p>
<p>Q = Zero;</p>
<p>N = 0;</p>
<p>do {</p>
<p>   Z = X;</p>
<p>   I = I + 1;</p>
<p>   Y = Y / (I + I);</p>
<p>   R = Y + Q;</p>
<p>   X = Z + R;</p>
<p>   Q = (Z - X) + R;</p>
<p>}</p>
<p>while (X > Z);</p>
<p>Z = (OneAndHalf + One / Eight) + X / (OneAndHalf * ThirtyTwo);</p>
<p>X = Z * Z;</p>
<p>Exp2 = X * X;</p>
<p>X = F9;</p>
<p>Y = X - U1;</p>
<p><strong><u>printf ("Testing X^((X + 1) / (X - 1)) vs. exp(2) = %.17e as X -> 1.\n", Exp2);</u></strong></p>
<p>for (I = 1;;) {</p>
<p>   Z = X - BInvrse;</p>
<p>   Z = (X + One) / (Z - (One - BInvrse));</p>
<p>  Q = POW (X, Z) - Exp2;</p>
<p>   if (FABS (Q) > TwoForty * U2) {</p>
<p>       N = 1;</p>
<p>       V9 = (X - BInvrse) - (One - BInvrse);</p>
<p>       BadCond (Defect, "Calculated");</p>
<p>       printf (" %.17e for\n", POW (X, Z));</p>
<p>       printf ("\t(1 + (%.17e) ^ (%.17e);\n", V9, Z);</p>
<p>       printf ("\tdiffers from correct value by %.17e .\n", Q);</p>
<p>       printf ("\tThis much error may spoil financial\n");</p>
<p>       printf ("\tcalculations involving tiny interest rates.\n");</p>
<p>       break;</p>
<p>   } </p>
<p>   else {</p>
<p>       Z = (Y - X) * Two + Y;</p>
<p>       X = Y;</p>
<p>       Y = Z;</p>
<p>       Z = One + (X - F9) * (X - F9);</p>
<p>            if (Z > One && I < NoTrials)</p>
<p>                  I++;</p>
<p>            else {</p>
<p>                  if (X > One) </p>
<p>                  {</p>
<p>                        if (N == 0)</p>
<p>                               printf ("Accuracy seems adequate.\n");</p>
<p>                        break;</p>
<p>                  } </p>
<p>                  else </p>
<p>                  {</p>
<p>                       X = One + U2;</p>
<p>                       Y = U2 + U2;</p>
<p>                       Y += X;</p>
<p>                        I = 1;</p>
<p>                  }</p>
<p>           }</p>
<p>     }</p>
<p>}</p>
<p>/*=============================================*/</p>
<p>Milestone = 150;</p>
<p>/*=============================================*/</p>
<p>.................</p>
<p> </p>
<p>In other words, the program executes until the</p>
<p><strong><u>printf ("Testing X^((X + 1) / (X - 1)) vs. exp(2) = %.17e as X -> 1.\n", Exp2);</u></strong></p>
<p>but stops there. If I comment out the section of the code, the rest of the program executes normally.</p>
<p>What could be the case for this behaviour? Why is the code running smootly on a SPARC but not on Qemu/i386 and how could I work out an explaination?</p>
<p> </p>
<p>Thank you in advance.</p></span></span></span></div>