IBM Support

LI75801: INCORRECT RESULT FROM FP_INVALID_OP()

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • After enabling floating point exceptions at runtime and
    compiling with -O3 and -qstrict, the following test case is
    giving incorrect output for fp_invalid_op().
    
    
         ====  TEST CASE  ====
    
    #include <stdio.h>
    #include <math.h>
    #include <fptrap.h>
    
    double x = -1;
    
    int main()
    {
      int i, j;
      double sum;
    
      (void) fp_enable(TRP_INVALID);
    
      sum = 0;
      if (x > 0)
        sum += log(x);
      printf("sum %g\n", sum);
    
      x += sum;
    
      for (i = 0; i < 1; i++)
        for (j = 0; j < 1; j++)
          ;
    
      printf("fp_invalid_op() => %d\n", fp_invalid_op());
      return 0;
    }
    
    
    $ xlc -O3 -qstrict test.c -lm
    sum 0
    fp_invalid_op() => 1
    $ xlc test.c -lm
    sum 0
    fp_invalid_op() => 0
    $
    

Local fix

  • Compile with either lower optimization, -qnohot, or -qflttrap.
    

Problem summary

  • PROBLEM DESCRIPTION:
    Floating point instruction speculation triggers floating point
    traps when traps are enabled at runtime via fp_enable().  These
    traps are detected by the fp_invalid_op() function.
    
    USERS AFFECTED:
    Users who utilize fp_enable to enable floating point traps at
    runtime.
    

Problem conclusion

  • Floating point speculation that may cause traps can now be
    disabled by compiling with the options:  -qfloat=fenv
    -qstrict=guards
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI75801

  • Reported component name

    XL C/C++ FOR LI

  • Reported component ID

    5724X1400

  • Reported release

    B10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2010-11-24

  • Closed date

    2010-11-24

  • Last modified date

    2010-11-24

  • APAR is sysrouted FROM one or more of the following:

    IZ83163

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    XL C/C++ FOR LI

  • Fixed component ID

    5724X1400

Applicable component levels

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSXVZZ","label":"XL C\/C++ for Linux"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"B10","Line of Business":{"code":"LOB57","label":"Power"}}]

Document Information

Modified date:
15 October 2021