anchor.diff:       &      ASSOCIATED(fn%fn0).OR.ASSOCIATED(fn%fn1)
           END FUNCTION
   
  +        !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_scall_abx
  +        PURE SUBROUTINE libxsmm_scall_abx(fn, a, b, c)
  +          TYPE(LIBXSMM_SMM_FUNCTION), INTENT(IN) :: fn
  +          TYPE(C_PTR), INTENT(IN), VALUE :: a, b, c
  +          CALL fn%fn0(a, b, c)
  +        END SUBROUTINE
  +
  +        !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_dcall_abx
  +        PURE SUBROUTINE libxsmm_dcall_abx(fn, a, b, c)
  +          TYPE(LIBXSMM_DMM_FUNCTION), INTENT(IN) :: fn
  +          TYPE(C_PTR), INTENT(IN), VALUE :: a, b, c
  +          CALL fn%fn0(a, b, c)
  +        END SUBROUTINE
  +
  +        !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_scall_prx
  +        PURE SUBROUTINE libxsmm_scall_prx(fn, a, b, c, pa, pb, pc)
  +          TYPE(LIBXSMM_SMM_FUNCTION), INTENT(IN) :: fn
  +          TYPE(C_PTR), INTENT(IN), VALUE :: a, b, c, pa, pb, pc
  +          CALL fn%fn1(a, b, c, pa, pb, pc)
  +        END SUBROUTINE
  +
  +        !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_dcall_prx
  +        PURE SUBROUTINE libxsmm_dcall_prx(fn, a, b, c, pa, pb, pc)
  +          TYPE(LIBXSMM_DMM_FUNCTION), INTENT(IN) :: fn
  +          TYPE(C_PTR), INTENT(IN), VALUE :: a, b, c, pa, pb, pc
  +          CALL fn%fn1(a, b, c, pa, pb, pc)
  +        END SUBROUTINE
  +
           !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_scall_abc
           PURE SUBROUTINE libxsmm_scall_abc(fn, a, b, c)
  +          INTEGER(LIBXSMM_INT_KIND), PARAMETER :: T = LIBXSMM_FLS_KIND
             TYPE(LIBXSMM_SMM_FUNCTION), INTENT(IN) :: fn
  -          REAL(LIBXSMM_FLS_KIND), INTENT(IN) :: a(:,:), b(:,:)
  -          REAL(LIBXSMM_FLS_KIND), INTENT(INOUT) :: c(:,:)
  -          CALL fn%fn0(a, b, c)
  +          REAL(T), INTENT(IN), TARGET :: a(*), b(*)
  +          REAL(T), INTENT(INOUT), TARGET :: c(*)
  +          CALL libxsmm_scall_abx(fn, C_LOC(a), C_LOC(b), C_LOC(c))
           END SUBROUTINE
   
           !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_dcall_abc
           PURE SUBROUTINE libxsmm_dcall_abc(fn, a, b, c)
  +          INTEGER(LIBXSMM_INT_KIND), PARAMETER :: T = LIBXSMM_FLD_KIND
             TYPE(LIBXSMM_DMM_FUNCTION), INTENT(IN) :: fn
  -          REAL(LIBXSMM_FLD_KIND), INTENT(IN) :: a(:,:), b(:,:)
  -          REAL(LIBXSMM_FLD_KIND), INTENT(INOUT) :: c(:,:)
  -          CALL fn%fn0(a, b, c)
  +          REAL(T), INTENT(IN), TARGET :: a(*), b(*)
  +          REAL(T), INTENT(INOUT), TARGET :: c(*)
  +          CALL libxsmm_dcall_abx(fn, C_LOC(a), C_LOC(b), C_LOC(c))
           END SUBROUTINE
   
           !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_scall_prf
           PURE SUBROUTINE libxsmm_scall_prf(fn, a, b, c, pa, pb, pc)
  +          INTEGER(LIBXSMM_INT_KIND), PARAMETER :: T = LIBXSMM_FLS_KIND
             TYPE(LIBXSMM_SMM_FUNCTION), INTENT(IN) :: fn
  -          REAL(LIBXSMM_FLS_KIND), INTENT(IN) :: a(:,:), b(:,:)
  -          REAL(LIBXSMM_FLS_KIND), INTENT(INOUT) :: c(:,:)
  -          TYPE(C_PTR), INTENT(IN), VALUE :: pa, pb, pc
  -          !CALL fn%fn1(a, b, c, pa, pb, pc)
  +          REAL(T), INTENT(IN), TARGET :: a(*), b(*)
  +          REAL(T), INTENT(INOUT), TARGET :: c(*)
  +          REAL(T), INTENT(IN), TARGET :: pa(*), pb(*), pc(*)
  +          CALL libxsmm_scall_prx(fn, C_LOC(a), C_LOC(b), C_LOC(c),      &
  +     &      C_LOC(pa), C_LOC(pb), C_LOC(pc))
           END SUBROUTINE
   
           !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_dcall_prf
           PURE SUBROUTINE libxsmm_dcall_prf(fn, a, b, c, pa, pb, pc)
  +          INTEGER(LIBXSMM_INT_KIND), PARAMETER :: T = LIBXSMM_FLD_KIND
             TYPE(LIBXSMM_DMM_FUNCTION), INTENT(IN) :: fn
  -          REAL(LIBXSMM_FLD_KIND), INTENT(IN) :: a(:,:), b(:,:)
  -          REAL(LIBXSMM_FLD_KIND), INTENT(INOUT) :: c(:,:)
  -          TYPE(C_PTR), INTENT(IN), VALUE :: pa, pb, pc
  -          CALL fn%fn1(a, b, c, pa, pb, pc)
  -        END SUBROUTINE
  +          REAL(T), INTENT(IN), TARGET :: a(*), b(*)
  +          REAL(T), INTENT(INOUT), TARGET :: c(*)
  +          REAL(T), INTENT(IN), TARGET :: pa(*), pb(*), pc(*)
  +          CALL libxsmm_dcall_prx(fn, C_LOC(a), C_LOC(b), C_LOC(c),      &
  +     &      C_LOC(pa), C_LOC(pb), C_LOC(pc))
  +        END SUBROUTINE
  +
  +        !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_ld
  +        INTEGER(LIBXSMM_INT_KIND) PURE FUNCTION libxsmm_ld(m, n)
  +          INTEGER(LIBXSMM_INT_KIND), INTENT(IN) :: m, n
  +          libxsmm_ld = MERGE(m, n, 0.NE.LIBXSMM_COL_MAJOR)
  +        END FUNCTION
   
           !DIR$ ATTRIBUTES OFFLOAD:MIC :: libxsmm_align_value
           INTEGER(LIBXSMM_INT_KIND) PURE FUNCTION libxsmm_align_value(    &
  
positive.code:           INTEGER(LIBXSMM_INT_KIND), INTENT(IN) :: m, n, k
            REAL(T), INTENT(IN) :: a(:,:), b(:,:)
            REAL(T), INTENT(INOUT) :: c(:,:)
            TYPE(C_PTR), INTENT(IN), VALUE :: pa, pb, pc
            REAL(T), INTENT(IN) :: ralpha, rbeta
            INTEGER(LIBXSMM_INT_KIND), INTENT(IN), OPTIONAL :: flags
            TYPE(LIBXSMM_DMM_FUNCTION) :: function
  
negative.code:           INTEGER(LIBXSMM_INT_KIND), INTENT(IN) :: lda, ldb, ldc
            REAL(LIBXSMM_FLS_KIND), INTENT(IN) :: alpha, beta
            INTEGER(LIBXSMM_INT_KIND), INTENT(IN) :: prefetch
            PROCEDURE(LIBXSMM_XFUNCTION), POINTER :: fn1
            PROCEDURE(LIBXSMM_FUNCTION), POINTER :: fn0
            IF (LIBXSMM_PREFETCH_NONE.NE.prefetch) THEN
              CALL C_F_PROCPOINTER(libxsmm_sdispatch1(                    &
       &        flags, m, n, k, lda, ldb, ldc, alpha, beta, prefetch),    &
  