!===-- module/mma.f90 ------------------------------------------------------===! ! ! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ! See https://llvm.org/LICENSE.txt for license information. ! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ! !===------------------------------------------------------------------------===! module mma implicit none private abstract interface !! ========== 1 argument subroutine interface ================================!! !! subroutine s(__vector_quad) elemental subroutine sub_vq(acc) __vector_quad, intent(inout) :: acc end subroutine !! ========== 2 argument subroutine interface ================================!! !! __vector_pair function f(i, vector(i)) #define FUNC_VPI0VI(VKIND) \ pure __vector_pair function func_vpi0vi##VKIND(arg1, arg2); \ integer(8), intent(in) :: arg1; \ !dir$ ignore_tkr(k) arg1; \ vector(integer(VKIND)), intent(in) :: arg2; \ !dir$ ignore_tkr(r) arg2; \ end function; ! __vector_pair function f(i, vector(u)) #define FUNC_VPI0VU(VKIND) \ pure __vector_pair function func_vpi0vu##VKIND(arg1, arg2); \ integer(8), intent(in) :: arg1; \ !dir$ ignore_tkr(k) arg1; \ vector(unsigned(VKIND)), intent(in) :: arg2; \ !dir$ ignore_tkr(r) arg2; \ end function; ! __vector_pair function f(i, vector(r)) #define FUNC_VPI0VR(VKIND) \ pure __vector_pair function func_vpi0vr##VKIND(arg1, arg2); \ integer(8), intent(in) :: arg1; \ !dir$ ignore_tkr(k) arg1; \ vector(real(VKIND)), intent(in) :: arg2; \ !dir$ ignore_tkr(r) arg2; \ end function; ! __vector_pair function f(i, __vector_pair) #define FUNC_VPI0VP \ pure __vector_pair function func_vpi0vp(arg1, arg2); \ integer(8), intent(in) :: arg1; \ !dir$ ignore_tkr(k) arg1; \ __vector_pair, intent(in) :: arg2; \ !dir$ ignore_tkr(r) arg2; \ end function; FUNC_VPI0VI(1) FUNC_VPI0VI(2) FUNC_VPI0VI(4) FUNC_VPI0VI(8) FUNC_VPI0VU(1) FUNC_VPI0VU(2) FUNC_VPI0VU(4) FUNC_VPI0VU(8) FUNC_VPI0VR(4) FUNC_VPI0VR(8) FUNC_VPI0VP #undef FUNC_VPI0VP #undef FUNC_VPI0VR #undef FUNC_VPI0VU #undef FUNC_VPI0VI !! ========== 3 arguments subroutine interface ===============================!! !! __vector_pair subroutine s(vp, integer, vector(i)) #define SUB_VPI0VI(VKIND) \ pure subroutine sub_vpi0vi##VKIND(arg1, arg2, arg3); \ __vector_pair, intent(in) :: arg1; \ integer(8), intent(in) :: arg2; \ !dir$ ignore_tkr(k) arg2; \ vector(integer(VKIND)), intent(out) :: arg3; \ !dir$ ignore_tkr(r) arg3; \ end subroutine; ! subroutine(__vector_pair, i, vector(u)) #define SUB_VPI0VU(VKIND) \ pure subroutine sub_vpi0vu##VKIND(arg1, arg2, arg3); \ __vector_pair, intent(in) :: arg1; \ integer(8), intent(in) :: arg2; \ !dir$ ignore_tkr(k) arg2; \ vector(unsigned(VKIND)), intent(out) :: arg3; \ !dir$ ignore_tkr(r) arg3; \ end subroutine; ! subroutine(__vector_pair, i, vector(r)) #define SUB_VPI0VR(VKIND) \ pure subroutine sub_vpi0vr##VKIND(arg1, arg2, arg3); \ __vector_pair, intent(in) :: arg1; \ integer(8), intent(in) :: arg2; \ !dir$ ignore_tkr(k) arg2; \ vector(real(VKIND)), intent(out) :: arg3; \ !dir$ ignore_tkr(r) arg3; \ end subroutine; ! subroutine(__vector_pair, i, i) pure subroutine sub_vpi0i0(arg1, arg2, arg3) __vector_pair, intent(in) :: arg1 integer(8), intent(in) :: arg2 !dir$ ignore_tkr(k) arg2 integer(8), intent(out) :: arg3 !dir$ ignore_tkr(kr) arg3 end subroutine ! subroutine(__vector_pair, i, r) pure subroutine sub_vpi0r0(arg1, arg2, arg3) __vector_pair, intent(in) :: arg1 integer(8), intent(in) :: arg2 !dir$ ignore_tkr(k) arg2 real(8), intent(out) :: arg3 !dir$ ignore_tkr(kr) arg3 end subroutine ! subroutine(__vector_pair, i, __vector_pair) pure subroutine sub_vpi0vp(arg1, arg2, arg3) __vector_pair, intent(in) :: arg1 integer(8), intent(in) :: arg2 !dir$ ignore_tkr(k) arg2 __vector_pair, intent(out) :: arg3 !dir$ ignore_tkr(r) arg3 end subroutine !! subroutine s(__vector_pair, vector(i), vector(i)) #define ELEM_SUB_VPVIVI(VKIND) \ elemental subroutine sub_vpvi##VKIND##vi##VKIND(pair, arg1, arg2); \ __vector_pair, intent(out) :: pair ; \ vector(integer(VKIND)), intent(in) :: arg1, arg2; \ end subroutine ; !! subroutine s(__vector_pair, vector(u), vector(u)) #define ELEM_SUB_VPVUVU(VKIND) \ elemental subroutine sub_vpvu##VKIND##vu##VKIND(pair, arg1, arg2); \ __vector_pair, intent(out) :: pair ; \ vector(unsigned(VKIND)), intent(in) :: arg1, arg2; \ end subroutine ; !! subroutine s(__vector_pair, vector(r), vector(r)) #define ELEM_SUB_VPVRVR(VKIND) \ elemental subroutine sub_vpvr##VKIND##vr##VKIND(pair, arg1, arg2); \ __vector_pair, intent(out) :: pair ; \ vector(real(VKIND)), intent(in) :: arg1, arg2; \ end subroutine ; ELEM_SUB_VPVIVI(1) ELEM_SUB_VPVIVI(2) ELEM_SUB_VPVIVI(4) ELEM_SUB_VPVIVI(8) ELEM_SUB_VPVUVU(1) ELEM_SUB_VPVUVU(2) ELEM_SUB_VPVUVU(4) ELEM_SUB_VPVUVU(8) ELEM_SUB_VPVRVR(4) ELEM_SUB_VPVRVR(8) SUB_VPI0VI(1) SUB_VPI0VI(2) SUB_VPI0VI(4) SUB_VPI0VI(8) SUB_VPI0VU(1) SUB_VPI0VU(2) SUB_VPI0VU(4) SUB_VPI0VU(8) SUB_VPI0VR(4) SUB_VPI0VR(8) #undef ELEM_SUB_VPVIVI #undef ELEM_SUB_VPVUVU #undef ELEM_SUB_VPVRVR #undef SUB_VPI0VR #undef SUB_VPI0VU #undef SUB_VPI0VI !! subroutine s(__vector_quad, vector(i), vector(i)) #define ELEM_SUB_VQVIVI(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vi##VKIND##vi##VKIND(acc, a, b); \ __vector_quad, intent(INTENT) :: acc; \ vector(integer(VKIND)), intent(in) :: a, b; \ end subroutine ; !! subroutine s(__vector_quad, vector(u), vector(u)) #define ELEM_SUB_VQVUVU(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND(acc, a, b); \ __vector_quad, intent(INTENT) :: acc; \ vector(unsigned(VKIND)), intent(in) :: a, b; \ end subroutine ; !! subroutine s(__vector_quad, vector(r), vector(r)) #define ELEM_SUB_VQVRVR(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vr##VKIND##vr##VKIND(acc, a, b); \ __vector_quad, intent(INTENT) :: acc; \ vector(real(VKIND)), intent(in) :: a, b; \ end subroutine ; ELEM_SUB_VQVIVI(inout,1) ELEM_SUB_VQVIVI(inout,2) ELEM_SUB_VQVUVU(inout,1) ELEM_SUB_VQVRVR(inout,4) ELEM_SUB_VQVIVI(out,1) ELEM_SUB_VQVIVI(out,2) ELEM_SUB_VQVUVU(out,1) ELEM_SUB_VQVRVR(out,4) #undef ELEM_SUB_VQVRVR #undef ELEM_SUB_VQVUVU #undef ELEM_SUB_VQVIVI !! subroutine s(__vector_quad, __vector_pair, vector(u)) #define ELEM_SUB_VQVPVU(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vpvu##VKIND(acc, a, b); \ __vector_quad, intent(INTENT) :: acc; \ __vector_pair, intent(in) :: a; \ vector(unsigned(VKIND)), intent(in) :: b; \ end subroutine ; !! subroutine s(__vector_quad, __vector_pair, vector(r)) #define ELEM_SUB_VQVPVR(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vpvr##VKIND(acc, a, b); \ __vector_quad, intent(INTENT) :: acc; \ __vector_pair, intent(in) :: a; \ vector(real(VKIND)), intent(in) :: b; \ end subroutine ; ELEM_SUB_VQVPVU(inout,1) ELEM_SUB_VQVPVR(inout,8) ELEM_SUB_VQVPVU(out,1) ELEM_SUB_VQVPVR(out,8) #undef ELEM_SUB_VQVPVR #undef ELEM_SUB_VQVPVU !! ========== 5 arguments subroutine interface ===============================!! !! subroutine s(__vector_quad, vector(i), vector(i), vector(i), vector(i)) #define ELEM_SUB_VQVIVIVIVI(VKIND) \ elemental subroutine sub_vqvi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND(acc, arg1, arg2, arg3, arg4); \ __vector_quad, intent(out) :: acc; \ vector(integer(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \ end subroutine ; !! subroutine s(__vector_quad, vector(u), vector(u), vector(u), vector(u)) #define ELEM_SUB_VQVUVUVUVU(VKIND) \ elemental subroutine sub_vqvu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND(acc, arg1, arg2, arg3, arg4); \ __vector_quad, intent(out) :: acc; \ vector(unsigned(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \ end subroutine ; !! subroutine s(__vector_quad, vector(r), vector(r), vector(r), vector(r)) #define ELEM_SUB_VQVRVRVRVR(VKIND) \ elemental subroutine sub_vqvr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND(acc, arg1, arg2, arg3, arg4); \ __vector_quad, intent(out) :: acc; \ vector(real(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \ end subroutine ; ELEM_SUB_VQVIVIVIVI(1) ELEM_SUB_VQVIVIVIVI(2) ELEM_SUB_VQVIVIVIVI(4) ELEM_SUB_VQVIVIVIVI(8) ELEM_SUB_VQVUVUVUVU(1) ELEM_SUB_VQVUVUVUVU(2) ELEM_SUB_VQVUVUVUVU(4) ELEM_SUB_VQVUVUVUVU(8) ELEM_SUB_VQVRVRVRVR(4) ELEM_SUB_VQVRVRVRVR(8) #undef ELEM_SUB_VQVRVRVRVR #undef ELEM_SUB_VQVUVUVUVU #undef ELEM_SUB_VQVIVIVIVI !! subroutine s(__vector_quad, vector(u), vector(u), integer, integer) #define ELEM_SUB_VQVUVUII(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND##ii(acc, a, b, xmask, ymask); \ __vector_quad, intent(INTENT) :: acc; \ vector(unsigned(VKIND)), intent(in) :: a, b; \ integer(8), intent(in) :: xmask, ymask; \ !dir$ ignore_tkr(k) xmask; \ !dir$ ignore_tkr(k) ymask; \ end subroutine ; !! subroutine s(__vector_quad, vector(r), vector(r), integer, integer) #define ELEM_SUB_VQVRVRII(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vr##VKIND##vr##VKIND##ii(acc, a, b, xmask, ymask); \ __vector_quad, intent(INTENT) :: acc; \ vector(real(VKIND)), intent(in) :: a, b; \ integer(8), intent(in) :: xmask, ymask; \ !dir$ ignore_tkr(k) xmask; \ !dir$ ignore_tkr(k) ymask; \ end subroutine ; ELEM_SUB_VQVUVUII(inout,1) ELEM_SUB_VQVRVRII(inout,4) ELEM_SUB_VQVUVUII(out,1) ELEM_SUB_VQVRVRII(out,4) #undef ELEM_SUB_VQVRVRII #undef ELEM_SUB_VQVUVUII !! subroutine s(__vector_quad, __vector_pair, vector(u), integer, integer) #define ELEM_SUB_VQVPVUII(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vpvu##VKIND##ii(acc, a, b, xmask, ymask); \ __vector_quad, intent(INTENT) :: acc; \ __vector_pair, intent(in) :: a; \ vector(unsigned(VKIND)), intent(in) :: b; \ integer(8), intent(in) :: xmask, ymask; \ !dir$ ignore_tkr(k) xmask; \ !dir$ ignore_tkr(k) ymask; \ end subroutine ; !! subroutine s(__vector_quad, __vector_pair, vector(r), integer, integer) #define ELEM_SUB_VQVPVRII(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vpvr##VKIND##ii(acc, a, b, xmask, ymask); \ __vector_quad, intent(INTENT) :: acc; \ __vector_pair, intent(in) :: a; \ vector(real(VKIND)), intent(in) :: b; \ integer(8), intent(in) :: xmask, ymask; \ !dir$ ignore_tkr(k) xmask; \ !dir$ ignore_tkr(k) ymask; \ end subroutine ; ELEM_SUB_VQVPVUII(inout,1) ELEM_SUB_VQVPVRII(inout,8) ELEM_SUB_VQVPVUII(out,1) ELEM_SUB_VQVPVRII(out,8) #undef ELEM_SUB_VQVPVRII #undef ELEM_SUB_VQVPVUII !! ========== 6 arguments subroutine interface ===============================!! !! subroutine s(__vector_quad, vector(i), vector(i), integer, integer, integer) #define ELEM_SUB_VQVIVIIII(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vi##VKIND##vi##VKIND##iii(acc, a, b, xmask, ymask, pmask); \ __vector_quad, intent(INTENT) :: acc; \ vector(integer(VKIND)), intent(in) :: a, b; \ integer(8), intent(in) :: xmask, ymask, pmask; \ !dir$ ignore_tkr(k) xmask; \ !dir$ ignore_tkr(k) ymask; \ !dir$ ignore_tkr(k) pmask; \ end subroutine ; !! subroutine s(__vector_quad, vector(u), vector(u), integer, integer, integer) #define ELEM_SUB_VQVUVUIII(INTENT, VKIND) \ elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND##iii(acc, a, b, xmask, ymask, pmask); \ __vector_quad, intent(INTENT) :: acc; \ vector(unsigned(VKIND)), intent(in) :: a, b; \ integer(8), intent(in) :: xmask, ymask, pmask; \ !dir$ ignore_tkr(k) xmask; \ !dir$ ignore_tkr(k) ymask; \ !dir$ ignore_tkr(k) pmask; \ end subroutine ; ELEM_SUB_VQVIVIIII(inout,1) ELEM_SUB_VQVIVIIII(inout,2) ELEM_SUB_VQVUVUIII(inout,1) ELEM_SUB_VQVIVIIII(out,1) ELEM_SUB_VQVIVIIII(out,2) ELEM_SUB_VQVUVUIII(out,1) #undef ELEM_SUB_VQVUVUIII #undef ELEM_SUB_VQVIVIIII !! ========== non-macro interface =============================================!! elemental subroutine sub_atvp(data, pair) ! Dummy arg 'data' is supposed to be intent(out) of any type, ! but according to Fortran 2018: C709: Type(*) arguments can not have ! intent(out) attribute. Use intent(inout) instead. type(*), intent(inout) :: data __vector_pair, intent(inout) :: pair end subroutine elemental subroutine sub_atvq(data, acc) ! Dummy arg 'data' is supposed to be intent(out) of any type, ! but according to Fortran 2018: C709: Type(*) arguments can not have ! intent(out) attribute. Use intent(inout) instead. type(*), intent(inout) :: data __vector_quad, intent(inout) :: acc end subroutine end interface !------------------------------------------------------- ! __vector_pair function(integer, vector/__vector_pair) !------------------------------------------------------- #define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0##vi##VKIND #define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0##vu##VKIND #define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0##vr##VKIND #define VP_I0_VP(NAME) __ppc_##NAME##_vpi0vp0 #define VEC_VP_I0_VI(NAME, VKIND) \ procedure(func_vpi0vi##VKIND) :: VP_I0_VI(NAME, VKIND); #define VEC_VP_I0_VU(NAME, VKIND) \ procedure(func_vpi0vu##VKIND) :: VP_I0_VU(NAME, VKIND); #define VEC_VP_I0_VR(NAME, VKIND) \ procedure(func_vpi0vr##VKIND) :: VP_I0_VR(NAME, VKIND); #define VEC_VP_I0_VP(NAME) procedure(func_vpi0vp) :: VP_I0_VP(NAME); ! mma_lxvp (using vec_lxvp) VEC_VP_I0_VI(vec_lxvp,1) VEC_VP_I0_VI(vec_lxvp,2) VEC_VP_I0_VI(vec_lxvp,4) VEC_VP_I0_VI(vec_lxvp,8) VEC_VP_I0_VU(vec_lxvp,1) VEC_VP_I0_VU(vec_lxvp,2) VEC_VP_I0_VU(vec_lxvp,4) VEC_VP_I0_VU(vec_lxvp,8) VEC_VP_I0_VR(vec_lxvp,4) VEC_VP_I0_VR(vec_lxvp,8) VEC_VP_I0_VP(vec_lxvp) interface mma_lxvp procedure :: VP_I0_VI(vec_lxvp,1), VP_I0_VI(vec_lxvp,2), VP_I0_VI(vec_lxvp,4), VP_I0_VI(vec_lxvp,8) procedure :: VP_I0_VU(vec_lxvp,1), VP_I0_VU(vec_lxvp,2), VP_I0_VU(vec_lxvp,4), VP_I0_VU(vec_lxvp,8) procedure :: VP_I0_VR(vec_lxvp,4), VP_I0_VR(vec_lxvp,8) procedure :: VP_I0_VP(vec_lxvp) end interface mma_lxvp public :: mma_lxvp #undef VEC_VP_I0_VP #undef VEC_VP_I0_VR #undef VEC_VP_I0_VU #undef VEC_VP_I0_VI #undef VP_I0_VP #undef VP_I0_VR #undef VP_I0_VU #undef VP_I0_VI !----------------------------------------------------------------------- ! subroutine(__vector_pair, integer, __vector_pair/vector/integer/real) !----------------------------------------------------------------------- #define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0vi##VKIND #define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0vu##VKIND #define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0vr##VKIND #define VEC_VP_I0_VI(NAME, VKIND) \ procedure(sub_vpi0vi##VKIND) :: VP_I0_VI(NAME, VKIND); #define VEC_VP_I0_VU(NAME, VKIND) \ procedure(sub_vpi0vu##VKIND) :: VP_I0_VU(NAME, VKIND); #define VEC_VP_I0_VR(NAME, VKIND) \ procedure(sub_vpi0vr##VKIND) :: VP_I0_VR(NAME, VKIND); ! mma_stxvp (using vec_stxvp) procedure(sub_vpi0vp) :: __ppc_vec_stxvp_vpi0vp0 procedure(sub_vpi0i0) :: __ppc_vec_stxvp_vpi0i0 procedure(sub_vpi0r0) :: __ppc_vec_stxvp_vpi0r0 VEC_VP_I0_VI(vec_stxvp, 1) VEC_VP_I0_VI(vec_stxvp, 2) VEC_VP_I0_VI(vec_stxvp, 4) VEC_VP_I0_VI(vec_stxvp, 8) VEC_VP_I0_VU(vec_stxvp, 1) VEC_VP_I0_VU(vec_stxvp, 2) VEC_VP_I0_VU(vec_stxvp, 4) VEC_VP_I0_VU(vec_stxvp, 8) VEC_VP_I0_VR(vec_stxvp, 4) VEC_VP_I0_VR(vec_stxvp, 8) interface mma_stxvp procedure :: __ppc_vec_stxvp_vpi0vp0 procedure :: __ppc_vec_stxvp_vpi0i0 procedure :: __ppc_vec_stxvp_vpi0r0 procedure :: VP_I0_VI(vec_stxvp, 1), VP_I0_VI(vec_stxvp, 2), VP_I0_VI(vec_stxvp, 4), VP_I0_VI(vec_stxvp, 8) procedure :: VP_I0_VU(vec_stxvp, 1), VP_I0_VU(vec_stxvp, 2), VP_I0_VU(vec_stxvp, 4), VP_I0_VU(vec_stxvp, 8) procedure :: VP_I0_VR(vec_stxvp, 4), VP_I0_VR(vec_stxvp, 8) end interface mma_stxvp public :: mma_stxvp #undef VEC_VP_I0_VR #undef VEC_VP_I0_VU #undef VEC_VP_I0_VI #undef VP_I0_VR #undef VP_I0_VU #undef VP_I0_VI #define SUB_VQ_VI_VI_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND #define SUB_VQ_VU_VU_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND #define SUB_VQ_VR_VR_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND #define VEC_SUB_VQ_VI_VI_VI_VI(NAME, VKIND) \ procedure(sub_vqvi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND) :: SUB_VQ_VI_VI_VI_VI(NAME, VKIND); #define VEC_SUB_VQ_VU_VU_VU_VU(NAME, VKIND) \ procedure(sub_vqvu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND) :: SUB_VQ_VU_VU_VU_VU(NAME, VKIND); #define VEC_SUB_VQ_VR_VR_VR_VR(NAME, VKIND) \ procedure(sub_vqvr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND) :: SUB_VQ_VR_VR_VR_VR(NAME, VKIND); ! mma_assemble_acc VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,1) VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,2) VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,4) VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,8) VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,1) VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,2) VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,4) VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,8) VEC_SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,4) VEC_SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,8) interface mma_assemble_acc procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,1) procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,2) procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,4) procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,8) procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,1) procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,2) procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,4) procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,8) procedure :: SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,4) procedure :: SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,8) end interface public mma_assemble_acc ! mma_build_acc VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,1) VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,2) VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,4) VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,8) VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,1) VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,2) VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,4) VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,8) VEC_SUB_VQ_VR_VR_VR_VR(mma_build_acc,4) VEC_SUB_VQ_VR_VR_VR_VR(mma_build_acc,8) interface mma_build_acc procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,1) procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,2) procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,4) procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,8) procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,1) procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,2) procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,4) procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,8) procedure :: SUB_VQ_VR_VR_VR_VR(mma_build_acc,4) procedure :: SUB_VQ_VR_VR_VR_VR(mma_build_acc,8) end interface public mma_build_acc #undef VEC_SUB_VQ_VR_VR_VR_VR #undef VEC_SUB_VQ_VU_VU_VU_VU #undef VEC_SUB_VQ_VI_VI_VI_VI #undef SUB_VQ_VR_VR_VR_VR #undef SUB_VQ_VU_VU_VU_VU #undef SUB_VQ_VI_VI_VI_VI #define SUB_VP_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND #define SUB_VP_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND #define SUB_VP_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND #define VEC_SUB_VP_VI_VI(NAME, VKIND) \ procedure(sub_vpvi##VKIND##vi##VKIND) :: SUB_VP_VI_VI(NAME, VKIND); #define VEC_SUB_VP_VU_VU(NAME, VKIND) \ procedure(sub_vpvu##VKIND##vu##VKIND) :: SUB_VP_VU_VU(NAME, VKIND); #define VEC_SUB_VP_VR_VR(NAME, VKIND) \ procedure(sub_vpvr##VKIND##vr##VKIND) :: SUB_VP_VR_VR(NAME, VKIND); ! mma_assemble_pair VEC_SUB_VP_VI_VI(mma_assemble_pair,1) VEC_SUB_VP_VI_VI(mma_assemble_pair,2) VEC_SUB_VP_VI_VI(mma_assemble_pair,4) VEC_SUB_VP_VI_VI(mma_assemble_pair,8) VEC_SUB_VP_VU_VU(mma_assemble_pair,1) VEC_SUB_VP_VU_VU(mma_assemble_pair,2) VEC_SUB_VP_VU_VU(mma_assemble_pair,4) VEC_SUB_VP_VU_VU(mma_assemble_pair,8) VEC_SUB_VP_VR_VR(mma_assemble_pair,4) VEC_SUB_VP_VR_VR(mma_assemble_pair,8) interface mma_assemble_pair procedure :: SUB_VP_VI_VI(mma_assemble_pair,1) procedure :: SUB_VP_VI_VI(mma_assemble_pair,2) procedure :: SUB_VP_VI_VI(mma_assemble_pair,4) procedure :: SUB_VP_VI_VI(mma_assemble_pair,8) procedure :: SUB_VP_VU_VU(mma_assemble_pair,1) procedure :: SUB_VP_VU_VU(mma_assemble_pair,2) procedure :: SUB_VP_VU_VU(mma_assemble_pair,4) procedure :: SUB_VP_VU_VU(mma_assemble_pair,8) procedure :: SUB_VP_VR_VR(mma_assemble_pair,4) procedure :: SUB_VP_VR_VR(mma_assemble_pair,8) end interface public mma_assemble_pair #undef VEC_SUB_VP_VR_VR #undef VEC_SUB_VP_VU_VU #undef VEC_SUB_VP_VI_VI #undef SUB_VP_VR_VR #undef SUB_VP_VU_VU #undef SUB_VP_VI_VI #define SUB_VQ_VI_VI_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvi##VKIND##vi##VKINDi0i0i0 #define SUB_VQ_VU_VU_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0ii0 #define VEC_SUB_VQ_VI_VI_I_I_I(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vi##VKIND##vi##VKIND##iii) :: SUB_VQ_VI_VI_I_I_I(NAME, VKIND); #define VEC_SUB_VQ_VU_VU_I_I_I(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND##iii) :: SUB_VQ_VU_VU_I_I_I(NAME, VKIND); ! mma_pmxvbf16ger2 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,out,1) interface mma_pmxvbf16ger2 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,1) end interface mma_pmxvbf16ger2 public mma_pmxvbf16ger2 ! mma_pmxvbf16ger2nn VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,inout,1) interface mma_pmxvbf16ger2nn procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,1) end interface mma_pmxvbf16ger2nn public mma_pmxvbf16ger2nn ! mma_pmxvbf16ger2np VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,inout,1) interface mma_pmxvbf16ger2np procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,1) end interface mma_pmxvbf16ger2np public mma_pmxvbf16ger2np ! mma_pmxvbf16ger2pn VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,inout,1) interface mma_pmxvbf16ger2pn procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,1) end interface mma_pmxvbf16ger2pn public mma_pmxvbf16ger2pn ! mma_pmxvbf16ger2pp VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,inout,1) interface mma_pmxvbf16ger2pp procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,1) end interface mma_pmxvbf16ger2pp public mma_pmxvbf16ger2pp ! mma_pmxvf16ger2 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,out,1) interface mma_pmxvf16ger2 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,1) end interface mma_pmxvf16ger2 public mma_pmxvf16ger2 ! mma_pmxvf16ger2nn VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,inout,1) interface mma_pmxvf16ger2nn procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,1) end interface mma_pmxvf16ger2nn public mma_pmxvf16ger2nn ! mma_pmxvf16ger2np VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,inout,1) interface mma_pmxvf16ger2np procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,1) end interface mma_pmxvf16ger2np public mma_pmxvf16ger2np ! mma_pmxvf16ger2pn VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,inout,1) interface mma_pmxvf16ger2pn procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,1) end interface mma_pmxvf16ger2pn public mma_pmxvf16ger2pn ! mma_pmxvf16ger2pp VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,inout,1) interface mma_pmxvf16ger2pp procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,1) end interface mma_pmxvf16ger2pp public mma_pmxvf16ger2pp ! mma_pmxvi16ger2 VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2_,out,2) VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2_,out,1) interface mma_pmxvi16ger2 procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2_,2) procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2_,1) end interface mma_pmxvi16ger2 public mma_pmxvi16ger2 ! mma_pmxvi16ger2pp VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2pp,inout,2) VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2pp,inout,1) interface mma_pmxvi16ger2pp procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2pp,2) procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2pp,1) end interface mma_pmxvi16ger2pp public mma_pmxvi16ger2pp ! mma_pmxvi16ger2s VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2s,out,2) VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2s,out,1) interface mma_pmxvi16ger2s procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2s,2) procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2s,1) end interface mma_pmxvi16ger2s public mma_pmxvi16ger2s ! mma_pmxvi16ger2spp VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2spp,inout,2) VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2spp,inout,1) interface mma_pmxvi16ger2spp procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2spp,2) procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2spp,1) end interface mma_pmxvi16ger2spp public mma_pmxvi16ger2spp ! mma_pmxvi4ger8 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,out,1) interface mma_pmxvi4ger8 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,1) end interface mma_pmxvi4ger8 public mma_pmxvi4ger8 ! mma_pmxvi4ger8pp VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,inout,1) interface mma_pmxvi4ger8pp procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,1) end interface mma_pmxvi4ger8pp public mma_pmxvi4ger8pp ! mma_pmxvi8ger4 VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4_,out,1) VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4_,out,1) interface mma_pmxvi8ger4 procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4_,1) procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4_,1) end interface mma_pmxvi8ger4 public mma_pmxvi8ger4 ! mma_pmxvi8ger4pp VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4pp,inout,1) VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4pp,inout,1) interface mma_pmxvi8ger4pp procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4pp,1) procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4pp,1) end interface mma_pmxvi8ger4pp public mma_pmxvi8ger4pp ! mma_pmxvi8ger4spp VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4spp,inout,1) VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4spp,inout,1) interface mma_pmxvi8ger4spp procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4spp,1) procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4spp,1) end interface mma_pmxvi8ger4spp public mma_pmxvi8ger4spp #undef VEC_SUB_VQ_VU_VU_I_I_I #undef VEC_SUB_VQ_VI_VI_I_I_I #undef SUB_VQ_VU_VU_I_I_I #undef SUB_VQ_VI_VI_I_I_I #define SUB_VQ_VU_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0 #define SUB_VQ_VR_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvr##VKIND##vr##VKINDi0i0 #define VEC_SUB_VQ_VU_VU_I_I(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND##ii) :: SUB_VQ_VU_VU_I_I(NAME, VKIND); #define VEC_SUB_VQ_VR_VR_I_I(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vr##VKIND##vr##VKIND##ii) :: SUB_VQ_VR_VR_I_I(NAME, VKIND); ! mma_pmxvf32ger VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32ger,out,1) VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32ger,out,4) interface mma_pmxvf32ger procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32ger,1) procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32ger,4) end interface mma_pmxvf32ger public mma_pmxvf32ger ! mma_pmxvf32gernn VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gernn,inout,1) VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gernn,inout,4) interface mma_pmxvf32gernn procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gernn,1) procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gernn,4) end interface mma_pmxvf32gernn public mma_pmxvf32gernn ! mma_pmxvf32gernp VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gernp,inout,1) VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gernp,inout,4) interface mma_pmxvf32gernp procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gernp,1) procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gernp,4) end interface mma_pmxvf32gernp public mma_pmxvf32gernp ! mma_pmxvf32gerpn VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpn,inout,1) VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpn,inout,4) interface mma_pmxvf32gerpn procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpn,1) procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpn,4) end interface mma_pmxvf32gerpn public mma_pmxvf32gerpn ! mma_pmxvf32gerpp VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpp,inout,1) VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpp,inout,4) interface mma_pmxvf32gerpp procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpp,1) procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpp,4) end interface mma_pmxvf32gerpp public mma_pmxvf32gerpp #undef VEC_SUB_VQ_VR_VR_I_I #undef VEC_SUB_VQ_VU_VU_I_I #undef SUB_VQ_VR_VR_I_I #undef SUB_VQ_VU_VU_I_I #define SUB_VQ_VP_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvu##VKINDi0i0 #define SUB_VQ_VP_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvr##VKINDi0i0 #define VEC_SUB_VQ_VP_VU_I_I(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vpvu##VKIND##ii) :: SUB_VQ_VP_VU_I_I(NAME, VKIND); #define VEC_SUB_VQ_VP_VR_I_I(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vpvr##VKIND##ii) :: SUB_VQ_VP_VR_I_I(NAME, VKIND); ! mma_pmxvf64ger VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64ger,out,1) VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64ger,out,8) interface mma_pmxvf64ger procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64ger,1) procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64ger,8) end interface mma_pmxvf64ger public mma_pmxvf64ger ! mma_pmxvf64gernn VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gernn,inout,1) VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gernn,inout,8) interface mma_pmxvf64gernn procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gernn,1) procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gernn,8) end interface mma_pmxvf64gernn public mma_pmxvf64gernn ! mma_pmxvf64gernp VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gernp,inout,1) VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gernp,inout,8) interface mma_pmxvf64gernp procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gernp,1) procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gernp,8) end interface mma_pmxvf64gernp public mma_pmxvf64gernp ! mma_pmxvf64gerpn VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpn,inout,1) VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpn,inout,8) interface mma_pmxvf64gerpn procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpn,1) procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpn,8) end interface mma_pmxvf64gerpn public mma_pmxvf64gerpn ! mma_pmxvf64gerpp VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpp,inout,1) VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpp,inout,8) interface mma_pmxvf64gerpp procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpp,1) procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpp,8) end interface mma_pmxvf64gerpp public mma_pmxvf64gerpp #undef VEC_SUB_VQ_VP_VR_I_I #undef VEC_SUB_VQ_VP_VU_I_I #undef SUB_VQ_VP_VR_I_I #undef SUB_VQ_VP_VU_I_I #define SUB_VQ_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND #define SUB_VQ_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND #define SUB_VQ_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND #define VEC_SUB_VQ_VI_VI(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vi##VKIND##vi##VKIND) :: SUB_VQ_VI_VI(NAME, VKIND); #define VEC_SUB_VQ_VU_VU(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND) :: SUB_VQ_VU_VU(NAME, VKIND); #define VEC_SUB_VQ_VR_VR(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vr##VKIND##vr##VKIND) :: SUB_VQ_VR_VR(NAME, VKIND); !! First argument with INTENT(INOUT) ! mma_xvbf16ger2nn VEC_SUB_VQ_VU_VU(mma_xvbf16ger2nn,inout,1) interface mma_xvbf16ger2nn procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2nn,1) end interface public mma_xvbf16ger2nn ! mma_xvbf16ger2np VEC_SUB_VQ_VU_VU(mma_xvbf16ger2np,inout,1) interface mma_xvbf16ger2np procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2np,1) end interface public mma_xvbf16ger2np ! mma_xvbf16ger2pn VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pn,inout,1) interface mma_xvbf16ger2pn procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pn,1) end interface public mma_xvbf16ger2pn ! mma_xvbf16ger2pp VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pp,inout,1) interface mma_xvbf16ger2pp procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pp,1) end interface public mma_xvbf16ger2pp ! mma_xvi8ger4pp VEC_SUB_VQ_VI_VI(mma_xvi8ger4pp,inout,1) VEC_SUB_VQ_VU_VU(mma_xvi8ger4pp,inout,1) interface mma_xvi8ger4pp procedure :: SUB_VQ_VI_VI(mma_xvi8ger4pp,1) procedure :: SUB_VQ_VU_VU(mma_xvi8ger4pp,1) end interface public mma_xvi8ger4pp ! mma_xvi8ger4spp VEC_SUB_VQ_VI_VI(mma_xvi8ger4spp,inout,1) VEC_SUB_VQ_VU_VU(mma_xvi8ger4spp,inout,1) interface mma_xvi8ger4spp procedure :: SUB_VQ_VI_VI(mma_xvi8ger4spp,1) procedure :: SUB_VQ_VU_VU(mma_xvi8ger4spp,1) end interface public mma_xvi8ger4spp ! mma_xvi16ger2pp VEC_SUB_VQ_VI_VI(mma_xvi16ger2pp,inout,2) VEC_SUB_VQ_VU_VU(mma_xvi16ger2pp,inout,1) interface mma_xvi16ger2pp procedure :: SUB_VQ_VI_VI(mma_xvi16ger2pp,2) procedure :: SUB_VQ_VU_VU(mma_xvi16ger2pp,1) end interface public mma_xvi16ger2pp ! mma_xvi16ger2s VEC_SUB_VQ_VI_VI(mma_xvi16ger2s,inout,2) VEC_SUB_VQ_VU_VU(mma_xvi16ger2s,inout,1) interface mma_xvi16ger2s procedure :: SUB_VQ_VI_VI(mma_xvi16ger2s,2) procedure :: SUB_VQ_VU_VU(mma_xvi16ger2s,1) end interface public mma_xvi16ger2s ! mma_xvi16ger2spp VEC_SUB_VQ_VI_VI(mma_xvi16ger2spp,inout,2) VEC_SUB_VQ_VU_VU(mma_xvi16ger2spp,inout,1) interface mma_xvi16ger2spp procedure :: SUB_VQ_VI_VI(mma_xvi16ger2spp,2) procedure :: SUB_VQ_VU_VU(mma_xvi16ger2spp,1) end interface public mma_xvi16ger2spp ! mma_xvi4ger8pp VEC_SUB_VQ_VU_VU(mma_xvi4ger8pp,inout,1) interface mma_xvi4ger8pp procedure :: SUB_VQ_VU_VU(mma_xvi4ger8pp,1) end interface public mma_xvi4ger8pp ! mma_xvf16ger2nn VEC_SUB_VQ_VU_VU(mma_xvf16ger2nn,inout,1) interface mma_xvf16ger2nn procedure :: SUB_VQ_VU_VU(mma_xvf16ger2nn,1) end interface public mma_xvf16ger2nn ! mma_xvf16ger2np VEC_SUB_VQ_VU_VU(mma_xvf16ger2np,inout,1) interface mma_xvf16ger2np procedure :: SUB_VQ_VU_VU(mma_xvf16ger2np,1) end interface public mma_xvf16ger2np ! mma_xvf16ger2pn VEC_SUB_VQ_VU_VU(mma_xvf16ger2pn,inout,1) interface mma_xvf16ger2pn procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pn,1) end interface public mma_xvf16ger2pn ! mma_xvf16ger2pp VEC_SUB_VQ_VU_VU(mma_xvf16ger2pp,inout,1) interface mma_xvf16ger2pp procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pp,1) end interface public mma_xvf16ger2pp ! mma_xvf32gernn VEC_SUB_VQ_VU_VU(mma_xvf32gernn,inout,1) VEC_SUB_VQ_VR_VR(mma_xvf32gernn,inout,4) interface mma_xvf32gernn procedure :: SUB_VQ_VU_VU(mma_xvf32gernn,1) procedure :: SUB_VQ_VR_VR(mma_xvf32gernn,4) end interface public mma_xvf32gernn ! mma_xvf32gernp VEC_SUB_VQ_VU_VU(mma_xvf32gernp,inout,1) VEC_SUB_VQ_VR_VR(mma_xvf32gernp,inout,4) interface mma_xvf32gernp procedure :: SUB_VQ_VU_VU(mma_xvf32gernp,1) procedure :: SUB_VQ_VR_VR(mma_xvf32gernp,4) end interface public mma_xvf32gernp ! mma_xvf32gerpn VEC_SUB_VQ_VU_VU(mma_xvf32gerpn,inout,1) VEC_SUB_VQ_VR_VR(mma_xvf32gerpn,inout,4) interface mma_xvf32gerpn procedure :: SUB_VQ_VU_VU(mma_xvf32gerpn,1) procedure :: SUB_VQ_VR_VR(mma_xvf32gerpn,4) end interface public mma_xvf32gerpn ! mma_xvf32gerpp VEC_SUB_VQ_VU_VU(mma_xvf32gerpp,inout,1) VEC_SUB_VQ_VR_VR(mma_xvf32gerpp,inout,4) interface mma_xvf32gerpp procedure :: SUB_VQ_VU_VU(mma_xvf32gerpp,1) procedure :: SUB_VQ_VR_VR(mma_xvf32gerpp,4) end interface public mma_xvf32gerpp !! First argument with INTENT(OUT) ! mma_xvbf16ger2 VEC_SUB_VQ_VU_VU(mma_xvbf16ger2_,out,1) interface mma_xvbf16ger2 procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2_,1) end interface public mma_xvbf16ger2 ! mma_xvi16ger2 VEC_SUB_VQ_VI_VI(mma_xvi16ger2_,out,2) VEC_SUB_VQ_VU_VU(mma_xvi16ger2_,out,1) interface mma_xvi16ger2 procedure :: SUB_VQ_VI_VI(mma_xvi16ger2_,2) procedure :: SUB_VQ_VU_VU(mma_xvi16ger2_,1) end interface public mma_xvi16ger2 ! mma_xvi4ger8 VEC_SUB_VQ_VU_VU(mma_xvi4ger8_,out,1) interface mma_xvi4ger8 procedure :: SUB_VQ_VU_VU(mma_xvi4ger8_,1) end interface public mma_xvi4ger8 ! mma_xvi8ger4 VEC_SUB_VQ_VI_VI(mma_xvi8ger4_,out,1) VEC_SUB_VQ_VU_VU(mma_xvi8ger4_,out,1) interface mma_xvi8ger4 procedure :: SUB_VQ_VI_VI(mma_xvi8ger4_,1) procedure :: SUB_VQ_VU_VU(mma_xvi8ger4_,1) end interface public mma_xvi8ger4 ! mma_xvf16ger2 VEC_SUB_VQ_VU_VU(mma_xvf16ger2_,out,1) interface mma_xvf16ger2 procedure :: SUB_VQ_VU_VU(mma_xvf16ger2_,1) end interface public mma_xvf16ger2 ! mma_xvf32ger VEC_SUB_VQ_VU_VU(mma_xvf32ger,out,1) VEC_SUB_VQ_VR_VR(mma_xvf32ger,out,4) interface mma_xvf32ger procedure :: SUB_VQ_VU_VU(mma_xvf32ger,1) procedure :: SUB_VQ_VR_VR(mma_xvf32ger,4) end interface public mma_xvf32ger #undef VEC_SUB_VQ_VR_VR #undef VEC_SUB_VQ_VU_VU #undef VEC_SUB_VQ_VI_VI #undef SUB_VQ_VR_VR #undef SUB_VQ_VU_VU #undef SUB_VQ_VI_VI #define SUB_VQ_VP_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND #define SUB_VQ_VP_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND #define VEC_SUB_VQ_VP_VU(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vpvu##VKIND) :: SUB_VQ_VP_VU(NAME, VKIND); #define VEC_SUB_VQ_VP_VR(NAME, INTENT, VKIND) \ procedure(sub_vq##INTENT##vpvr##VKIND) :: SUB_VQ_VP_VR(NAME, VKIND); ! mma_xvf64ger VEC_SUB_VQ_VP_VU(mma_xvf64ger,out,1) VEC_SUB_VQ_VP_VR(mma_xvf64ger,out,8) interface mma_xvf64ger procedure :: SUB_VQ_VP_VU(mma_xvf64ger,1) procedure :: SUB_VQ_VP_VR(mma_xvf64ger,8) end interface public mma_xvf64ger ! mma_xvf64gernn VEC_SUB_VQ_VP_VU(mma_xvf64gernn,inout,1) VEC_SUB_VQ_VP_VR(mma_xvf64gernn,inout,8) interface mma_xvf64gernn procedure :: SUB_VQ_VP_VU(mma_xvf64gernn,1) procedure :: SUB_VQ_VP_VR(mma_xvf64gernn,8) end interface public mma_xvf64gernn ! mma_xvf64gernp VEC_SUB_VQ_VP_VU(mma_xvf64gernp,inout,1) VEC_SUB_VQ_VP_VR(mma_xvf64gernp,inout,8) interface mma_xvf64gernp procedure :: SUB_VQ_VP_VU(mma_xvf64gernp,1) procedure :: SUB_VQ_VP_VR(mma_xvf64gernp,8) end interface public mma_xvf64gernp ! mma_xvf64gerpn VEC_SUB_VQ_VP_VU(mma_xvf64gerpn,inout,1) VEC_SUB_VQ_VP_VR(mma_xvf64gerpn,inout,8) interface mma_xvf64gerpn procedure :: SUB_VQ_VP_VU(mma_xvf64gerpn,1) procedure :: SUB_VQ_VP_VR(mma_xvf64gerpn,8) end interface public mma_xvf64gerpn ! mma_xvf64gerpp VEC_SUB_VQ_VP_VU(mma_xvf64gerpp,inout,1) VEC_SUB_VQ_VP_VR(mma_xvf64gerpp,inout,8) interface mma_xvf64gerpp procedure :: SUB_VQ_VP_VU(mma_xvf64gerpp,1) procedure :: SUB_VQ_VP_VR(mma_xvf64gerpp,8) end interface public mma_xvf64gerpp #undef VEC_SUB_VQ_VP_VR #undef VEC_SUB_VQ_VP_VU #undef SUB_VQ_VP_VR #undef SUB_VQ_VP_VU ! mma_disassemble_acc procedure(sub_atvq) :: __ppc_mma_disassemble_acc interface mma_disassemble_acc procedure :: __ppc_mma_disassemble_acc end interface public mma_disassemble_acc ! mma_disassemble_pair procedure(sub_atvp) :: __ppc_mma_disassemble_pair interface mma_disassemble_pair procedure :: __ppc_mma_disassemble_pair end interface public mma_disassemble_pair ! mma_xxmfacc procedure(sub_vq) :: __ppc_mma_xxmfacc interface mma_xxmfacc procedure :: __ppc_mma_xxmfacc end interface public mma_xxmfacc ! mma_xxmtacc procedure(sub_vq) :: __ppc_mma_xxmtacc interface mma_xxmtacc procedure :: __ppc_mma_xxmtacc end interface public mma_xxmtacc ! mma_xxsetaccz procedure(sub_vq) :: __ppc_mma_xxsetaccz interface mma_xxsetaccz procedure :: __ppc_mma_xxsetaccz end interface public mma_xxsetaccz end module