anchor.diff:    !DIR$ ATTRIBUTES INLINE :: libxsmm_smm
     SUBROUTINE libxsmm_smm(m, n, k, a, b, c)
       INTEGER(LIBXSMM_INTEGER_TYPE), INTENT(IN) :: m, n, k
  -    REAL(LIBXSMM_SINGLE_PRECISION), INTENT(IN) :: a($SHAPE_A), b($SHAPE_B)
  -    REAL(LIBXSMM_SINGLE_PRECISION), INTENT(INOUT) :: c($SHAPE_C)
  -    PROCEDURE(LIBXSMM_SMM_FUNCTION), POINTER :: f
  +    REAL(LIBXSMM_SINGLE_PRECISION), TARGET, INTENT(IN) :: a($SHAPE_A), b($SHAPE_B)
  +    REAL(LIBXSMM_SINGLE_PRECISION), TARGET, INTENT(INOUT) :: c($SHAPE_C)
  +    PROCEDURE(LIBXSMM_XMM_FUNCTION), POINTER :: xmm
       IF (LIBXSMM_MAX_MNK.GE.(m * n * k)) THEN
  -      f => libxsmm_smm_dispatch(m, n, k)
  -      IF (ASSOCIATED(f)) THEN
  -        CALL f(a, b, c)
  +      xmm => libxsmm_smm_dispatch(m, n, k)
  +      IF (ASSOCIATED(xmm)) THEN
  +        CALL xmm(C_LOC(a), C_LOC(b), C_LOC(c))
         ELSE
           CALL libxsmm_simm(m, n, k, a, b, c)
         ENDIF
  
positive.code:   !DIR$ ATTRIBUTES INLINE :: libxsmm_dmm
    SUBROUTINE libxsmm_dmm(m, n, k, a, b, c)
      INTEGER(LIBXSMM_INTEGER_TYPE), INTENT(IN) :: m, n, k
      REAL(LIBXSMM_DOUBLE_PRECISION), INTENT(IN) :: a($SHAPE_A), b($SHAPE_B)
      REAL(LIBXSMM_DOUBLE_PRECISION), INTENT(INOUT) :: c($SHAPE_C)
      PROCEDURE(LIBXSMM_DMM_FUNCTION), POINTER :: f
      IF (LIBXSMM_MAX_MNK.GE.(m * n * k)) THEN
        f => libxsmm_dmm_dispatch(m, n, k)
        IF (ASSOCIATED(f)) THEN
          CALL f(a, b, c)
        ELSE
          CALL libxsmm_dimm(m, n, k, a, b, c)
        ENDIF
  
negative.code:   !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_smm_dispatch
    !DIR$ ATTRIBUTES INLINE :: libxsmm_smm_dispatch
    FUNCTION libxsmm_smm_dispatch(m, n, k) RESULT(f)
      PROCEDURE(LIBXSMM_XMM_FUNCTION), POINTER :: f
      INTEGER(LIBXSMM_INTEGER_TYPE), INTENT(IN) :: m, n, k
      INTERFACE
        !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_smm_dispatch_aux
        TYPE(C_FUNPTR) PURE FUNCTION libxsmm_smm_dispatch_aux(m, n, k) BIND(C, NAME="libxsmm_smm_dispatch")
          IMPORT :: C_FUNPTR, C_INT
          INTEGER(C_INT), VALUE, INTENT(IN) :: m, n, k
        END FUNCTION
      END INTERFACE
      CALL C_F_PROCPOINTER(libxsmm_smm_dispatch_aux(m, n, k), f)
  