Hi Bruno,

I found that the fenv-env tests do not compile on sh4. This is the
error:

    test-fenv-env-2.c: In function 'main':
    test-fenv-env-2.c:49:15: error: 'FE_UPWARD' undeclared (first use in this 
function)
       49 |   fesetround (FE_UPWARD);
          |               ^~~~~~~~~
    test-fenv-env-2.c:49:15: note: each undeclared identifier is reported only 
once for each function it appears in
    test-fenv-env-2.c:76:15: error: 'FE_DOWNWARD' undeclared (first use in this 
function)
       76 |   fesetround (FE_DOWNWARD);
          |               ^~~~~~~~~~~
    make[4]: *** [Makefile:28483: test-fenv-env-2.o] Error 1

If I understand correctly, these macros should not be defined on this
platform. Since ISO C23 § 7.6 states:

   Each of the macros [List of FE_* macros] is defined if and only if
   the implementation supports getting and setting the represented
   round-ing direction by means of the fegetround and fesetround
   functions.

Based on the SH-4 CPU Core Architecture document § 6.3 [1], this
architecture only supports Round to Nearest (FE_TONEAREST) and Round to
Zero (FE_TOWARDZERO).

Should these tests do something like this?

    /* Modify the current environment.  */
    #if !defined __sh__
    #define ENV1_ROUNDING_DIRECTION FE_TONEAREST
    #define ENV2_ROUNDING_DIRECTION FE_TOWARDZERO
    #else
    #define ENV1_ROUNDING_DIRECTION FE_UPWARD
    #define ENV2_ROUNDING_DIRECTION FE_DOWNWARD
    #endif

Collin

[1] 
https://www.st.com/resource/en/user_manual/cd00147165-sh-4-32-bit-cpu-core-architecture-stmicroelectronics.pdf

Reply via email to