anchor.diff:          ! two wrapped backend procedure pointers (single-precision).
           TYPE :: LIBXSMM_SMMFUNCTION
             PRIVATE
  -            PROCEDURE(LIBXSMM_MMFUNCTION0), NOPASS,                     &
  -     &                                      POINTER :: fn0 => NULL()
  -            PROCEDURE(LIBXSMM_MMFUNCTION1), NOPASS,                     &
  -     &                                      POINTER :: fn1 => NULL()
  +            PROCEDURE(LIBXSMM_MMFUNCTION3), NOPASS,                     &
  +     &                                      POINTER :: fn3 => NULL()
  +            PROCEDURE(LIBXSMM_MMFUNCTION6), NOPASS,                     &
  +     &                                      POINTER :: fn6 => NULL()
           END TYPE
   
           ! Generic function type which is representing either one of the
           ! two wrapped backend procedure pointers (double-precision).
           TYPE :: LIBXSMM_DMMFUNCTION
             PRIVATE
  -            PROCEDURE(LIBXSMM_MMFUNCTION0), NOPASS,                     &
  -     &                                      POINTER :: fn0 => NULL()
  -            PROCEDURE(LIBXSMM_MMFUNCTION1), NOPASS,                     &
  -     &                                      POINTER :: fn1 => NULL()
  +            PROCEDURE(LIBXSMM_MMFUNCTION3), NOPASS,                     &
  +     &                                      POINTER :: fn3 => NULL()
  +            PROCEDURE(LIBXSMM_MMFUNCTION6), NOPASS,                     &
  +     &                                      POINTER :: fn6 => NULL()
           END TYPE
   
           ! Construct procedure pointer depending on given argument set.
  
positive.code:         ! Type of a function specialized for a given parameter set.
          ABSTRACT INTERFACE
            ! Specialized function with fused alpha and beta arguments.
            PURE SUBROUTINE LIBXSMM_MMFUNCTION0(a, b, c) BIND(C)
              IMPORT :: C_PTR
              TYPE(C_PTR), INTENT(IN), VALUE :: a, b, c
            END SUBROUTINE
  
            ! Specialized function with alpha, beta, and prefetch arguments.
            PURE SUBROUTINE LIBXSMM_MMFUNCTION1(a, b, c,                  &
       &    pa, pb, pc) BIND(C)
              IMPORT :: C_PTR
              TYPE(C_PTR), INTENT(IN), VALUE :: a, b, c
  
negative.code:         LOGICAL PURE FUNCTION libxsmm_smmavailable(fn)
            TYPE(LIBXSMM_SMMFUNCTION), INTENT(IN) :: fn
            libxsmm_smmavailable =                                        &
       &      ASSOCIATED(fn%fn3).OR.ASSOCIATED(fn%fn6)
          END FUNCTION
  
          !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_dmmavailable
          LOGICAL PURE FUNCTION libxsmm_dmmavailable(fn)
            TYPE(LIBXSMM_DMMFUNCTION), INTENT(IN) :: fn
            libxsmm_dmmavailable =                                        &
       &      ASSOCIATED(fn%fn3).OR.ASSOCIATED(fn%fn6)
          END FUNCTION
  
          !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_smmcall_abx
          PURE SUBROUTINE libxsmm_smmcall_abx(fn, a, b, c)
            TYPE(LIBXSMM_SMMFUNCTION), INTENT(IN) :: fn
            TYPE(C_PTR), INTENT(IN) :: a, b, c
            CALL fn%fn3(a, b, c)
          END SUBROUTINE
  
          !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_dmmcall_abx
          PURE SUBROUTINE libxsmm_dmmcall_abx(fn, a, b, c)
            TYPE(LIBXSMM_DMMFUNCTION), INTENT(IN) :: fn
            TYPE(C_PTR), INTENT(IN) :: a, b, c
            CALL fn%fn3(a, b, c)
          END SUBROUTINE
  
          !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_smmcall_prx
          PURE SUBROUTINE libxsmm_smmcall_prx(fn, a, b, c, pa, pb, pc)
            TYPE(LIBXSMM_SMMFUNCTION), INTENT(IN) :: fn
            TYPE(C_PTR), INTENT(IN) :: a, b, c, pa, pb, pc
            CALL fn%fn6(a, b, c, pa, pb, pc)
          END SUBROUTINE
  
          !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_dmmcall_prx
          PURE SUBROUTINE libxsmm_dmmcall_prx(fn, a, b, c, pa, pb, pc)
            TYPE(LIBXSMM_DMMFUNCTION), INTENT(IN) :: fn
            TYPE(C_PTR), INTENT(IN) :: a, b, c, pa, pb, pc
            CALL fn%fn6(a, b, c, pa, pb, pc)
          END SUBROUTINE
  
          !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_smmcall_abc
  