anchor.diff:    end interface
   
   ! IEEE_SUPPORT_* generic functions
  -
   #if defined(HAVE_GFC_REAL_10) && defined(HAVE_GFC_REAL_16)
  -# define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_10, NAME/**/_16, NAME/**/_NOARG
  +  interface IEEE_SUPPORT_DATATYPE ; module procedure IEEE_SUPPORT_DATATYPE_4, IEEE_SUPPORT_DATATYPE_8, IEEE_SUPPORT_DATATYPE_10, IEEE_SUPPORT_DATATYPE_16, IEEE_SUPPORT_DATATYPE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DATATYPE
  +  interface IEEE_SUPPORT_DENORMAL ; module procedure IEEE_SUPPORT_DENORMAL_4, IEEE_SUPPORT_DENORMAL_8, IEEE_SUPPORT_DENORMAL_10, IEEE_SUPPORT_DENORMAL_16, IEEE_SUPPORT_DENORMAL_NOARG ; end interface ;   public :: IEEE_SUPPORT_DENORMAL
  +  interface IEEE_SUPPORT_DIVIDE ; module procedure IEEE_SUPPORT_DIVIDE_4, IEEE_SUPPORT_DIVIDE_8, IEEE_SUPPORT_DIVIDE_10, IEEE_SUPPORT_DIVIDE_16, IEEE_SUPPORT_DIVIDE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DIVIDE
  +  interface IEEE_SUPPORT_INF ; module procedure IEEE_SUPPORT_INF_4, IEEE_SUPPORT_INF_8, IEEE_SUPPORT_INF_10, IEEE_SUPPORT_INF_16, IEEE_SUPPORT_INF_NOARG ; end interface ;   public :: IEEE_SUPPORT_INF
  +  interface IEEE_SUPPORT_IO ; module procedure IEEE_SUPPORT_IO_4, IEEE_SUPPORT_IO_8, IEEE_SUPPORT_IO_10, IEEE_SUPPORT_IO_16, IEEE_SUPPORT_IO_NOARG ; end interface ;   public :: IEEE_SUPPORT_IO
  +  interface IEEE_SUPPORT_NAN ; module procedure IEEE_SUPPORT_NAN_4, IEEE_SUPPORT_NAN_8, IEEE_SUPPORT_NAN_10, IEEE_SUPPORT_NAN_16, IEEE_SUPPORT_NAN_NOARG ; end interface ;   public :: IEEE_SUPPORT_NAN
  +  interface IEEE_SUPPORT_SQRT ; module procedure IEEE_SUPPORT_SQRT_4, IEEE_SUPPORT_SQRT_8, IEEE_SUPPORT_SQRT_10, IEEE_SUPPORT_SQRT_16, IEEE_SUPPORT_SQRT_NOARG ; end interface ;   public :: IEEE_SUPPORT_SQRT
  +  interface IEEE_SUPPORT_STANDARD ; module procedure IEEE_SUPPORT_STANDARD_4, IEEE_SUPPORT_STANDARD_8, IEEE_SUPPORT_STANDARD_10, IEEE_SUPPORT_STANDARD_16, IEEE_SUPPORT_STANDARD_NOARG ; end interface ;   public :: IEEE_SUPPORT_STANDARD
   #elif defined(HAVE_GFC_REAL_10)
  -# define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_10, NAME/**/_NOARG
  +  interface IEEE_SUPPORT_DATATYPE ; module procedure IEEE_SUPPORT_DATATYPE_4, IEEE_SUPPORT_DATATYPE_8, IEEE_SUPPORT_DATATYPE_10, IEEE_SUPPORT_DATATYPE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DATATYPE
  +  interface IEEE_SUPPORT_DENORMAL ; module procedure IEEE_SUPPORT_DENORMAL_4, IEEE_SUPPORT_DENORMAL_8, IEEE_SUPPORT_DENORMAL_10, IEEE_SUPPORT_DENORMAL_NOARG ; end interface ;   public :: IEEE_SUPPORT_DENORMAL
  +  interface IEEE_SUPPORT_DIVIDE ; module procedure IEEE_SUPPORT_DIVIDE_4, IEEE_SUPPORT_DIVIDE_8, IEEE_SUPPORT_DIVIDE_10, IEEE_SUPPORT_DIVIDE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DIVIDE
  +  interface IEEE_SUPPORT_INF ; module procedure IEEE_SUPPORT_INF_4, IEEE_SUPPORT_INF_8, IEEE_SUPPORT_INF_10, IEEE_SUPPORT_INF_NOARG ; end interface ;   public :: IEEE_SUPPORT_INF
  +  interface IEEE_SUPPORT_IO ; module procedure IEEE_SUPPORT_IO_4, IEEE_SUPPORT_IO_8, IEEE_SUPPORT_IO_10, IEEE_SUPPORT_IO_NOARG ; end interface ;   public :: IEEE_SUPPORT_IO
  +  interface IEEE_SUPPORT_NAN ; module procedure IEEE_SUPPORT_NAN_4, IEEE_SUPPORT_NAN_8, IEEE_SUPPORT_NAN_10, IEEE_SUPPORT_NAN_NOARG ; end interface ;   public :: IEEE_SUPPORT_NAN
  +  interface IEEE_SUPPORT_SQRT ; module procedure IEEE_SUPPORT_SQRT_4, IEEE_SUPPORT_SQRT_8, IEEE_SUPPORT_SQRT_10, IEEE_SUPPORT_SQRT_NOARG ; end interface ;   public :: IEEE_SUPPORT_SQRT
  +  interface IEEE_SUPPORT_STANDARD ; module procedure IEEE_SUPPORT_STANDARD_4, IEEE_SUPPORT_STANDARD_8, IEEE_SUPPORT_STANDARD_10, IEEE_SUPPORT_STANDARD_NOARG ; end interface ;   public :: IEEE_SUPPORT_STANDARD
   #elif defined(HAVE_GFC_REAL_16)
  -# define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_16, NAME/**/_NOARG
  +  interface IEEE_SUPPORT_DATATYPE ; module procedure IEEE_SUPPORT_DATATYPE_4, IEEE_SUPPORT_DATATYPE_8, IEEE_SUPPORT_DATATYPE_16, IEEE_SUPPORT_DATATYPE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DATATYPE
  +  interface IEEE_SUPPORT_DENORMAL ; module procedure IEEE_SUPPORT_DENORMAL_4, IEEE_SUPPORT_DENORMAL_8, IEEE_SUPPORT_DENORMAL_16, IEEE_SUPPORT_DENORMAL_NOARG ; end interface ;   public :: IEEE_SUPPORT_DENORMAL
  +  interface IEEE_SUPPORT_DIVIDE ; module procedure IEEE_SUPPORT_DIVIDE_4, IEEE_SUPPORT_DIVIDE_8, IEEE_SUPPORT_DIVIDE_16, IEEE_SUPPORT_DIVIDE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DIVIDE
  +  interface IEEE_SUPPORT_INF ; module procedure IEEE_SUPPORT_INF_4, IEEE_SUPPORT_INF_8, IEEE_SUPPORT_INF_16, IEEE_SUPPORT_INF_NOARG ; end interface ;   public :: IEEE_SUPPORT_INF
  +  interface IEEE_SUPPORT_IO ; module procedure IEEE_SUPPORT_IO_4, IEEE_SUPPORT_IO_8, IEEE_SUPPORT_IO_16, IEEE_SUPPORT_IO_NOARG ; end interface ;   public :: IEEE_SUPPORT_IO
  +  interface IEEE_SUPPORT_NAN ; module procedure IEEE_SUPPORT_NAN_4, IEEE_SUPPORT_NAN_8, IEEE_SUPPORT_NAN_16, IEEE_SUPPORT_NAN_NOARG ; end interface ;   public :: IEEE_SUPPORT_NAN
  +  interface IEEE_SUPPORT_SQRT ; module procedure IEEE_SUPPORT_SQRT_4, IEEE_SUPPORT_SQRT_8, IEEE_SUPPORT_SQRT_16, IEEE_SUPPORT_SQRT_NOARG ; end interface ;   public :: IEEE_SUPPORT_SQRT
  +  interface IEEE_SUPPORT_STANDARD ; module procedure IEEE_SUPPORT_STANDARD_4, IEEE_SUPPORT_STANDARD_8, IEEE_SUPPORT_STANDARD_16, IEEE_SUPPORT_STANDARD_NOARG ; end interface ;   public :: IEEE_SUPPORT_STANDARD
   #else
  -# define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_NOARG
  -#endif
  -
  -#define SUPPORTGENERIC(NAME) \
  -  interface NAME ; module procedure MACRO1(NAME) ; end interface ; \
  -  public :: NAME
  -
  -SUPPORTGENERIC(IEEE_SUPPORT_DATATYPE)
  -SUPPORTGENERIC(IEEE_SUPPORT_DENORMAL)
  -SUPPORTGENERIC(IEEE_SUPPORT_DIVIDE)
  -SUPPORTGENERIC(IEEE_SUPPORT_INF)
  -SUPPORTGENERIC(IEEE_SUPPORT_IO)
  -SUPPORTGENERIC(IEEE_SUPPORT_NAN)
  -SUPPORTGENERIC(IEEE_SUPPORT_SQRT)
  -SUPPORTGENERIC(IEEE_SUPPORT_STANDARD)
  +  interface IEEE_SUPPORT_DATATYPE ; module procedure IEEE_SUPPORT_DATATYPE_4, IEEE_SUPPORT_DATATYPE_8, IEEE_SUPPORT_DATATYPE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DATATYPE
  +  interface IEEE_SUPPORT_DENORMAL ; module procedure IEEE_SUPPORT_DENORMAL_4, IEEE_SUPPORT_DENORMAL_8, IEEE_SUPPORT_DENORMAL_NOARG ; end interface ;   public :: IEEE_SUPPORT_DENORMAL
  +  interface IEEE_SUPPORT_DIVIDE ; module procedure IEEE_SUPPORT_DIVIDE_4, IEEE_SUPPORT_DIVIDE_8, IEEE_SUPPORT_DIVIDE_NOARG ; end interface ;   public :: IEEE_SUPPORT_DIVIDE
  +  interface IEEE_SUPPORT_INF ; module procedure IEEE_SUPPORT_INF_4, IEEE_SUPPORT_INF_8, IEEE_SUPPORT_INF_NOARG ; end interface ;   public :: IEEE_SUPPORT_INF
  +  interface IEEE_SUPPORT_IO ; module procedure IEEE_SUPPORT_IO_4, IEEE_SUPPORT_IO_8, IEEE_SUPPORT_IO_NOARG ; end interface ;   public :: IEEE_SUPPORT_IO
  +  interface IEEE_SUPPORT_NAN ; module procedure IEEE_SUPPORT_NAN_4, IEEE_SUPPORT_NAN_8, IEEE_SUPPORT_NAN_NOARG ; end interface ;   public :: IEEE_SUPPORT_NAN
  +  interface IEEE_SUPPORT_SQRT ; module procedure IEEE_SUPPORT_SQRT_4, IEEE_SUPPORT_SQRT_8, IEEE_SUPPORT_SQRT_NOARG ; end interface ;   public :: IEEE_SUPPORT_SQRT
  +  interface IEEE_SUPPORT_STANDARD ; module procedure IEEE_SUPPORT_STANDARD_4, IEEE_SUPPORT_STANDARD_8, IEEE_SUPPORT_STANDARD_NOARG ; end interface ;   public :: IEEE_SUPPORT_STANDARD
  +#endif
   
   contains
   
  
positive.code:   public :: IEEE_NEXT_AFTER
  
    ! IEEE_REM
  
  #define REM_MACRO(RES,A,B) \
    elemental real(kind = RES) function \
      gfortran_ieee_rem_/**/A/**/_/**/B (X,Y) ; \
        real(kind = A), intent(in) :: X ; \
        real(kind = B), intent(in) :: Y ; \
    end function
  
    interface
  REM_MACRO(4,4,4)
  REM_MACRO(8,4,8)
  #ifdef HAVE_GFC_REAL_10
  REM_MACRO(10,4,10)
  #endif
  #ifdef HAVE_GFC_REAL_16
  REM_MACRO(16,4,16)
  #endif
  REM_MACRO(8,8,4)
  REM_MACRO(8,8,8)
  #ifdef HAVE_GFC_REAL_10
  REM_MACRO(10,8,10)
  #endif
  #ifdef HAVE_GFC_REAL_16
  REM_MACRO(16,8,16)
  #endif
  #ifdef HAVE_GFC_REAL_10
  REM_MACRO(10,10,4)
  REM_MACRO(10,10,8)
  REM_MACRO(10,10,10)
  #ifdef HAVE_GFC_REAL_16
  REM_MACRO(16,10,16)
  #endif
  #endif
  #ifdef HAVE_GFC_REAL_16
  REM_MACRO(16,16,4)
  REM_MACRO(16,16,8)
  #ifdef HAVE_GFC_REAL_10
  REM_MACRO(16,16,10)
  #endif
  REM_MACRO(16,16,16)
  #endif
    end interface
  
  
negative.code: 
  ! IEEE_SUPPORT_* functions
  
  ! IEEE_SUPPORT_DATATYPE
    pure logical function IEEE_SUPPORT_DATATYPE_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_DATATYPE_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_DATATYPE_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_DATATYPE_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_DATATYPE_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  ! IEEE_SUPPORT_DENORMAL
    pure logical function IEEE_SUPPORT_DENORMAL_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_DENORMAL_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_DENORMAL_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_DENORMAL_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_DENORMAL_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  ! IEEE_SUPPORT_DIVIDE
    pure logical function IEEE_SUPPORT_DIVIDE_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_DIVIDE_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_DIVIDE_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_DIVIDE_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_DIVIDE_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  
  ! IEEE_SUPPORT_INF
    pure logical function IEEE_SUPPORT_INF_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_INF_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_INF_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_INF_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_INF_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  ! IEEE_SUPPORT_IO
    pure logical function IEEE_SUPPORT_IO_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_IO_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_IO_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_IO_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_IO_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  ! IEEE_SUPPORT_NAN
    pure logical function IEEE_SUPPORT_NAN_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_NAN_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_NAN_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_NAN_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_NAN_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  ! IEEE_SUPPORT_SQRT
    pure logical function IEEE_SUPPORT_SQRT_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_SQRT_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_SQRT_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_SQRT_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_SQRT_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  ! IEEE_SUPPORT_STANDARD
    pure logical function IEEE_SUPPORT_STANDARD_4 (X) result(res)
      implicit none
      real(4), intent(in) :: X
      res = .true.
    end function
    pure logical function IEEE_SUPPORT_STANDARD_8 (X) result(res)
      implicit none
      real(8), intent(in) :: X
      res = .true.
    end function
  #ifdef HAVE_GFC_REAL_10
    pure logical function IEEE_SUPPORT_STANDARD_10 (X) result(res)
      implicit none
      real(10), intent(in) :: X
      res = .true.
    end function
  #endif
  #ifdef HAVE_GFC_REAL_16
    pure logical function IEEE_SUPPORT_STANDARD_16 (X) result(res)
      implicit none
      real(16), intent(in) :: X
      res = .true.
    end function
  #endif
    pure logical function IEEE_SUPPORT_STANDARD_NOARG () result(res)
      implicit none
      res = .true.
    end function
  
  end module IEEE_ARITHMETIC
  