brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.4 KiB · 4c41822 Raw
1123 lines · plain
1!===-- module/mma.f90 ------------------------------------------------------===!2!3! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4! See https://llvm.org/LICENSE.txt for license information.5! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6!7!===------------------------------------------------------------------------===!8 9module mma10  implicit none11  private12 13  abstract interface14 15!! ========== 1 argument subroutine interface ================================!!16!! subroutine s(__vector_quad)17  elemental subroutine sub_vq(acc)18    __vector_quad, intent(inout) :: acc19  end subroutine20 21!! ========== 2 argument subroutine interface ================================!!22!! __vector_pair function f(i, vector(i))23#define FUNC_VPI0VI(VKIND) \24  pure __vector_pair function func_vpi0vi##VKIND(arg1, arg2); \25    integer(8), intent(in) :: arg1; \26    !dir$ ignore_tkr(k) arg1; \27    vector(integer(VKIND)), intent(in) :: arg2; \28    !dir$ ignore_tkr(r) arg2; \29  end function;30 31! __vector_pair function f(i, vector(u))32#define FUNC_VPI0VU(VKIND) \33  pure __vector_pair function func_vpi0vu##VKIND(arg1, arg2); \34    integer(8), intent(in) :: arg1; \35    !dir$ ignore_tkr(k) arg1; \36    vector(unsigned(VKIND)), intent(in) :: arg2; \37    !dir$ ignore_tkr(r) arg2; \38  end function;39 40! __vector_pair function f(i, vector(r))41#define FUNC_VPI0VR(VKIND) \42  pure __vector_pair function func_vpi0vr##VKIND(arg1, arg2); \43    integer(8), intent(in) :: arg1; \44    !dir$ ignore_tkr(k) arg1; \45    vector(real(VKIND)), intent(in) :: arg2; \46    !dir$ ignore_tkr(r) arg2; \47  end function;48 49! __vector_pair function f(i, __vector_pair)50#define FUNC_VPI0VP \51  pure __vector_pair function func_vpi0vp(arg1, arg2); \52    integer(8), intent(in) :: arg1; \53    !dir$ ignore_tkr(k) arg1; \54    __vector_pair, intent(in) :: arg2; \55    !dir$ ignore_tkr(r) arg2; \56  end function;57 58  FUNC_VPI0VI(1) FUNC_VPI0VI(2) FUNC_VPI0VI(4) FUNC_VPI0VI(8)59  FUNC_VPI0VU(1) FUNC_VPI0VU(2) FUNC_VPI0VU(4) FUNC_VPI0VU(8)60  FUNC_VPI0VR(4) FUNC_VPI0VR(8)61  FUNC_VPI0VP62 63#undef FUNC_VPI0VP64#undef FUNC_VPI0VR65#undef FUNC_VPI0VU 66#undef FUNC_VPI0VI 67 68!! ========== 3 arguments subroutine interface ===============================!!69!! __vector_pair subroutine s(vp, integer, vector(i))70#define SUB_VPI0VI(VKIND) \71  pure subroutine sub_vpi0vi##VKIND(arg1, arg2, arg3); \72    __vector_pair, intent(in) :: arg1; \73    integer(8), intent(in) :: arg2; \74    !dir$ ignore_tkr(k) arg2; \75    vector(integer(VKIND)), intent(out) :: arg3; \76    !dir$ ignore_tkr(r) arg3; \77  end subroutine;78 79! subroutine(__vector_pair, i, vector(u))80#define SUB_VPI0VU(VKIND) \81  pure subroutine sub_vpi0vu##VKIND(arg1, arg2, arg3); \82    __vector_pair, intent(in) :: arg1; \83    integer(8), intent(in) :: arg2; \84    !dir$ ignore_tkr(k) arg2; \85    vector(unsigned(VKIND)), intent(out) :: arg3; \86    !dir$ ignore_tkr(r) arg3; \87  end subroutine;88 89! subroutine(__vector_pair, i, vector(r))90#define SUB_VPI0VR(VKIND) \91  pure subroutine sub_vpi0vr##VKIND(arg1, arg2, arg3); \92    __vector_pair, intent(in) :: arg1; \93    integer(8), intent(in) :: arg2; \94    !dir$ ignore_tkr(k) arg2; \95    vector(real(VKIND)), intent(out) :: arg3; \96    !dir$ ignore_tkr(r) arg3; \97  end subroutine;98 99! subroutine(__vector_pair, i, i)100  pure subroutine sub_vpi0i0(arg1, arg2, arg3)101    __vector_pair, intent(in) :: arg1102    integer(8), intent(in) :: arg2103    !dir$ ignore_tkr(k) arg2104    integer(8), intent(out) :: arg3105    !dir$ ignore_tkr(kr) arg3106  end subroutine107 108! subroutine(__vector_pair, i, r)109  pure subroutine sub_vpi0r0(arg1, arg2, arg3)110    __vector_pair, intent(in) :: arg1111    integer(8), intent(in) :: arg2112    !dir$ ignore_tkr(k) arg2113    real(8), intent(out) :: arg3114    !dir$ ignore_tkr(kr) arg3115  end subroutine116 117! subroutine(__vector_pair, i, __vector_pair)118  pure subroutine sub_vpi0vp(arg1, arg2, arg3)119    __vector_pair, intent(in) :: arg1120    integer(8), intent(in) :: arg2121    !dir$ ignore_tkr(k) arg2122    __vector_pair, intent(out) :: arg3123    !dir$ ignore_tkr(r) arg3124  end subroutine125 126!! subroutine s(__vector_pair, vector(i), vector(i))127#define ELEM_SUB_VPVIVI(VKIND) \128  elemental subroutine sub_vpvi##VKIND##vi##VKIND(pair, arg1, arg2); \129    __vector_pair, intent(out) :: pair ; \130    vector(integer(VKIND)), intent(in) :: arg1, arg2; \131  end subroutine ;132 133!! subroutine s(__vector_pair, vector(u), vector(u))134#define ELEM_SUB_VPVUVU(VKIND) \135  elemental subroutine sub_vpvu##VKIND##vu##VKIND(pair, arg1, arg2); \136    __vector_pair, intent(out) :: pair ; \137    vector(unsigned(VKIND)), intent(in) :: arg1, arg2; \138  end subroutine ;139 140!! subroutine s(__vector_pair, vector(r), vector(r))141#define ELEM_SUB_VPVRVR(VKIND) \142  elemental subroutine sub_vpvr##VKIND##vr##VKIND(pair, arg1, arg2); \143    __vector_pair, intent(out) :: pair ; \144    vector(real(VKIND)), intent(in) :: arg1, arg2; \145  end subroutine ;146 147  ELEM_SUB_VPVIVI(1) ELEM_SUB_VPVIVI(2)148  ELEM_SUB_VPVIVI(4) ELEM_SUB_VPVIVI(8)149  ELEM_SUB_VPVUVU(1) ELEM_SUB_VPVUVU(2)150  ELEM_SUB_VPVUVU(4) ELEM_SUB_VPVUVU(8)151  ELEM_SUB_VPVRVR(4) ELEM_SUB_VPVRVR(8)152  SUB_VPI0VI(1) SUB_VPI0VI(2) SUB_VPI0VI(4) SUB_VPI0VI(8)153  SUB_VPI0VU(1) SUB_VPI0VU(2) SUB_VPI0VU(4) SUB_VPI0VU(8)154  SUB_VPI0VR(4) SUB_VPI0VR(8)155 156#undef ELEM_SUB_VPVIVI157#undef ELEM_SUB_VPVUVU158#undef ELEM_SUB_VPVRVR159#undef SUB_VPI0VR160#undef SUB_VPI0VU161#undef SUB_VPI0VI162 163!! subroutine s(__vector_quad, vector(i), vector(i))164#define ELEM_SUB_VQVIVI(INTENT, VKIND) \165  elemental subroutine sub_vq##INTENT##vi##VKIND##vi##VKIND(acc, a, b); \166    __vector_quad, intent(INTENT) :: acc; \167    vector(integer(VKIND)), intent(in) :: a, b; \168  end subroutine ;169 170!! subroutine s(__vector_quad, vector(u), vector(u))171#define ELEM_SUB_VQVUVU(INTENT, VKIND) \172  elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND(acc, a, b); \173    __vector_quad, intent(INTENT) :: acc; \174    vector(unsigned(VKIND)), intent(in) :: a, b; \175  end subroutine ;176 177!! subroutine s(__vector_quad, vector(r), vector(r))178#define ELEM_SUB_VQVRVR(INTENT, VKIND) \179  elemental subroutine sub_vq##INTENT##vr##VKIND##vr##VKIND(acc, a, b); \180    __vector_quad, intent(INTENT) :: acc; \181    vector(real(VKIND)), intent(in) :: a, b; \182  end subroutine ;183 184  ELEM_SUB_VQVIVI(inout,1) ELEM_SUB_VQVIVI(inout,2)185  ELEM_SUB_VQVUVU(inout,1)186  ELEM_SUB_VQVRVR(inout,4)187  ELEM_SUB_VQVIVI(out,1) ELEM_SUB_VQVIVI(out,2)188  ELEM_SUB_VQVUVU(out,1)189  ELEM_SUB_VQVRVR(out,4)190 191#undef ELEM_SUB_VQVRVR192#undef ELEM_SUB_VQVUVU193#undef ELEM_SUB_VQVIVI194 195!! subroutine s(__vector_quad, __vector_pair, vector(u))196#define ELEM_SUB_VQVPVU(INTENT, VKIND) \197  elemental subroutine sub_vq##INTENT##vpvu##VKIND(acc, a, b); \198    __vector_quad, intent(INTENT) :: acc; \199    __vector_pair, intent(in) :: a; \200    vector(unsigned(VKIND)), intent(in) :: b; \201  end subroutine ;202 203!! subroutine s(__vector_quad, __vector_pair, vector(r))204#define ELEM_SUB_VQVPVR(INTENT, VKIND) \205  elemental subroutine sub_vq##INTENT##vpvr##VKIND(acc, a, b); \206    __vector_quad, intent(INTENT) :: acc; \207    __vector_pair, intent(in) :: a; \208    vector(real(VKIND)), intent(in) :: b; \209  end subroutine ;210 211  ELEM_SUB_VQVPVU(inout,1)212  ELEM_SUB_VQVPVR(inout,8)213  ELEM_SUB_VQVPVU(out,1)214  ELEM_SUB_VQVPVR(out,8)215 216#undef ELEM_SUB_VQVPVR217#undef ELEM_SUB_VQVPVU218 219!! ========== 5 arguments subroutine interface ===============================!!220!! subroutine s(__vector_quad, vector(i), vector(i), vector(i), vector(i))221#define ELEM_SUB_VQVIVIVIVI(VKIND) \222  elemental subroutine sub_vqvi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND(acc, arg1, arg2, arg3, arg4); \223    __vector_quad, intent(out) :: acc; \224    vector(integer(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \225  end subroutine ;226 227!! subroutine s(__vector_quad, vector(u), vector(u), vector(u), vector(u))228#define ELEM_SUB_VQVUVUVUVU(VKIND) \229  elemental subroutine sub_vqvu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND(acc, arg1, arg2, arg3, arg4); \230    __vector_quad, intent(out) :: acc; \231    vector(unsigned(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \232  end subroutine ;233 234!! subroutine s(__vector_quad, vector(r), vector(r), vector(r), vector(r))235#define ELEM_SUB_VQVRVRVRVR(VKIND) \236  elemental subroutine sub_vqvr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND(acc, arg1, arg2, arg3, arg4); \237    __vector_quad, intent(out) :: acc; \238    vector(real(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \239  end subroutine ;240 241  ELEM_SUB_VQVIVIVIVI(1) ELEM_SUB_VQVIVIVIVI(2)242  ELEM_SUB_VQVIVIVIVI(4) ELEM_SUB_VQVIVIVIVI(8)243  ELEM_SUB_VQVUVUVUVU(1) ELEM_SUB_VQVUVUVUVU(2)244  ELEM_SUB_VQVUVUVUVU(4) ELEM_SUB_VQVUVUVUVU(8)245  ELEM_SUB_VQVRVRVRVR(4) ELEM_SUB_VQVRVRVRVR(8)246 247#undef ELEM_SUB_VQVRVRVRVR248#undef ELEM_SUB_VQVUVUVUVU249#undef ELEM_SUB_VQVIVIVIVI250 251!! subroutine s(__vector_quad, vector(u), vector(u), integer, integer)252#define ELEM_SUB_VQVUVUII(INTENT, VKIND) \253  elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND##ii(acc, a, b, xmask, ymask); \254    __vector_quad, intent(INTENT) :: acc; \255    vector(unsigned(VKIND)), intent(in) :: a, b; \256    integer(8), intent(in) :: xmask, ymask; \257    !dir$ ignore_tkr(k) xmask; \258    !dir$ ignore_tkr(k) ymask; \259  end subroutine ;260 261!! subroutine s(__vector_quad, vector(r), vector(r), integer, integer)262#define ELEM_SUB_VQVRVRII(INTENT, VKIND) \263  elemental subroutine sub_vq##INTENT##vr##VKIND##vr##VKIND##ii(acc, a, b, xmask, ymask); \264    __vector_quad, intent(INTENT) :: acc; \265    vector(real(VKIND)), intent(in) :: a, b; \266    integer(8), intent(in) :: xmask, ymask; \267    !dir$ ignore_tkr(k) xmask; \268    !dir$ ignore_tkr(k) ymask; \269  end subroutine ;270 271  ELEM_SUB_VQVUVUII(inout,1)272  ELEM_SUB_VQVRVRII(inout,4)273  ELEM_SUB_VQVUVUII(out,1)274  ELEM_SUB_VQVRVRII(out,4)275 276#undef ELEM_SUB_VQVRVRII277#undef ELEM_SUB_VQVUVUII278 279!! subroutine s(__vector_quad, __vector_pair, vector(u), integer, integer)280#define ELEM_SUB_VQVPVUII(INTENT, VKIND) \281  elemental subroutine sub_vq##INTENT##vpvu##VKIND##ii(acc, a, b, xmask, ymask); \282    __vector_quad, intent(INTENT) :: acc; \283    __vector_pair, intent(in) :: a; \284    vector(unsigned(VKIND)), intent(in) :: b; \285    integer(8), intent(in) :: xmask, ymask; \286    !dir$ ignore_tkr(k) xmask; \287    !dir$ ignore_tkr(k) ymask; \288  end subroutine ;289 290!! subroutine s(__vector_quad, __vector_pair, vector(r), integer, integer)291#define ELEM_SUB_VQVPVRII(INTENT, VKIND) \292  elemental subroutine sub_vq##INTENT##vpvr##VKIND##ii(acc, a, b, xmask, ymask); \293    __vector_quad, intent(INTENT) :: acc; \294    __vector_pair, intent(in) :: a; \295    vector(real(VKIND)), intent(in) :: b; \296    integer(8), intent(in) :: xmask, ymask; \297    !dir$ ignore_tkr(k) xmask; \298    !dir$ ignore_tkr(k) ymask; \299  end subroutine ;300 301  ELEM_SUB_VQVPVUII(inout,1)302  ELEM_SUB_VQVPVRII(inout,8)303  ELEM_SUB_VQVPVUII(out,1)304  ELEM_SUB_VQVPVRII(out,8)305 306#undef ELEM_SUB_VQVPVRII307#undef ELEM_SUB_VQVPVUII308 309!! ========== 6 arguments subroutine interface ===============================!!310!! subroutine s(__vector_quad, vector(i), vector(i), integer, integer, integer)311#define ELEM_SUB_VQVIVIIII(INTENT, VKIND) \312  elemental subroutine sub_vq##INTENT##vi##VKIND##vi##VKIND##iii(acc, a, b, xmask, ymask, pmask); \313    __vector_quad, intent(INTENT) :: acc; \314    vector(integer(VKIND)), intent(in) :: a, b; \315    integer(8), intent(in) :: xmask, ymask, pmask; \316    !dir$ ignore_tkr(k) xmask; \317    !dir$ ignore_tkr(k) ymask; \318    !dir$ ignore_tkr(k) pmask; \319  end subroutine ;320 321!! subroutine s(__vector_quad, vector(u), vector(u), integer, integer, integer)322#define ELEM_SUB_VQVUVUIII(INTENT, VKIND) \323  elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND##iii(acc, a, b, xmask, ymask, pmask); \324    __vector_quad, intent(INTENT) :: acc; \325    vector(unsigned(VKIND)), intent(in) :: a, b; \326    integer(8), intent(in) :: xmask, ymask, pmask; \327    !dir$ ignore_tkr(k) xmask; \328    !dir$ ignore_tkr(k) ymask; \329    !dir$ ignore_tkr(k) pmask; \330  end subroutine ;331 332  ELEM_SUB_VQVIVIIII(inout,1) ELEM_SUB_VQVIVIIII(inout,2)333  ELEM_SUB_VQVUVUIII(inout,1)334  ELEM_SUB_VQVIVIIII(out,1) ELEM_SUB_VQVIVIIII(out,2)335  ELEM_SUB_VQVUVUIII(out,1)336 337#undef ELEM_SUB_VQVUVUIII338#undef ELEM_SUB_VQVIVIIII339 340!! ========== non-macro interface =============================================!!341  elemental subroutine sub_atvp(data, pair)342    ! Dummy arg 'data' is supposed to be intent(out) of any type,343    ! but according to Fortran 2018: C709: Type(*) arguments can not have344    ! intent(out) attribute. Use intent(inout) instead.345    type(*), intent(inout) :: data346    __vector_pair, intent(inout) :: pair347  end subroutine348 349  elemental subroutine sub_atvq(data, acc)350    ! Dummy arg 'data' is supposed to be intent(out) of any type,351    ! but according to Fortran 2018: C709: Type(*) arguments can not have352    ! intent(out) attribute. Use intent(inout) instead.353    type(*), intent(inout) :: data354    __vector_quad, intent(inout) :: acc355  end subroutine356 357  end interface358 359!-------------------------------------------------------360! __vector_pair function(integer, vector/__vector_pair)361!-------------------------------------------------------362#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0##vi##VKIND363#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0##vu##VKIND364#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0##vr##VKIND365#define VP_I0_VP(NAME) __ppc_##NAME##_vpi0vp0366 367#define VEC_VP_I0_VI(NAME, VKIND) \368  procedure(func_vpi0vi##VKIND) :: VP_I0_VI(NAME, VKIND);369#define VEC_VP_I0_VU(NAME, VKIND) \370  procedure(func_vpi0vu##VKIND) :: VP_I0_VU(NAME, VKIND);371#define VEC_VP_I0_VR(NAME, VKIND) \372  procedure(func_vpi0vr##VKIND) :: VP_I0_VR(NAME, VKIND);373#define VEC_VP_I0_VP(NAME) procedure(func_vpi0vp) :: VP_I0_VP(NAME);374 375! mma_lxvp (using vec_lxvp)376  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)377  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)378  VEC_VP_I0_VR(vec_lxvp,4) VEC_VP_I0_VR(vec_lxvp,8)379  VEC_VP_I0_VP(vec_lxvp)380  interface mma_lxvp381     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)382     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)383     procedure :: VP_I0_VR(vec_lxvp,4), VP_I0_VR(vec_lxvp,8)384     procedure :: VP_I0_VP(vec_lxvp)385  end interface mma_lxvp386  public :: mma_lxvp387 388#undef VEC_VP_I0_VP389#undef VEC_VP_I0_VR390#undef VEC_VP_I0_VU391#undef VEC_VP_I0_VI392#undef VP_I0_VP393#undef VP_I0_VR394#undef VP_I0_VU395#undef VP_I0_VI396 397!-----------------------------------------------------------------------398! subroutine(__vector_pair, integer, __vector_pair/vector/integer/real)399!-----------------------------------------------------------------------400#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0vi##VKIND401#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0vu##VKIND402#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0vr##VKIND403 404#define VEC_VP_I0_VI(NAME, VKIND) \405  procedure(sub_vpi0vi##VKIND) :: VP_I0_VI(NAME, VKIND);406#define VEC_VP_I0_VU(NAME, VKIND) \407  procedure(sub_vpi0vu##VKIND) :: VP_I0_VU(NAME, VKIND);408#define VEC_VP_I0_VR(NAME, VKIND) \409  procedure(sub_vpi0vr##VKIND) :: VP_I0_VR(NAME, VKIND);410 411! mma_stxvp (using vec_stxvp)412  procedure(sub_vpi0vp) :: __ppc_vec_stxvp_vpi0vp0413  procedure(sub_vpi0i0) :: __ppc_vec_stxvp_vpi0i0414  procedure(sub_vpi0r0) :: __ppc_vec_stxvp_vpi0r0415  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)416  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)417  VEC_VP_I0_VR(vec_stxvp, 4) VEC_VP_I0_VR(vec_stxvp, 8)418  interface mma_stxvp419     procedure :: __ppc_vec_stxvp_vpi0vp0420     procedure :: __ppc_vec_stxvp_vpi0i0421     procedure :: __ppc_vec_stxvp_vpi0r0422     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)423     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)424     procedure :: VP_I0_VR(vec_stxvp, 4), VP_I0_VR(vec_stxvp, 8)425  end interface mma_stxvp426  public :: mma_stxvp427 428#undef VEC_VP_I0_VR429#undef VEC_VP_I0_VU430#undef VEC_VP_I0_VI431#undef VP_I0_VR432#undef VP_I0_VU433#undef VP_I0_VI434 435#define SUB_VQ_VI_VI_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND436#define SUB_VQ_VU_VU_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND437#define SUB_VQ_VR_VR_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND438 439#define VEC_SUB_VQ_VI_VI_VI_VI(NAME, VKIND) \440  procedure(sub_vqvi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND) :: SUB_VQ_VI_VI_VI_VI(NAME, VKIND);441#define VEC_SUB_VQ_VU_VU_VU_VU(NAME, VKIND) \442  procedure(sub_vqvu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND) :: SUB_VQ_VU_VU_VU_VU(NAME, VKIND);443#define VEC_SUB_VQ_VR_VR_VR_VR(NAME, VKIND) \444  procedure(sub_vqvr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND) :: SUB_VQ_VR_VR_VR_VR(NAME, VKIND);445 446! mma_assemble_acc447  VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,1)448  VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,2)449  VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,4)450  VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,8)451  VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,1)452  VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,2)453  VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,4)454  VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,8)455  VEC_SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,4)456  VEC_SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,8)457  interface mma_assemble_acc458    procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,1)459    procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,2)460    procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,4)461    procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,8)462    procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,1)463    procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,2)464    procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,4)465    procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,8)466    procedure :: SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,4)467    procedure :: SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,8)468  end interface469  public mma_assemble_acc470 471! mma_build_acc472  VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,1)473  VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,2)474  VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,4)475  VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,8)476  VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,1)477  VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,2)478  VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,4)479  VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,8)480  VEC_SUB_VQ_VR_VR_VR_VR(mma_build_acc,4)481  VEC_SUB_VQ_VR_VR_VR_VR(mma_build_acc,8)482  interface mma_build_acc483    procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,1)484    procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,2)485    procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,4)486    procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,8)487    procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,1)488    procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,2)489    procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,4)490    procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,8)491    procedure :: SUB_VQ_VR_VR_VR_VR(mma_build_acc,4)492    procedure :: SUB_VQ_VR_VR_VR_VR(mma_build_acc,8)493  end interface494  public mma_build_acc495 496#undef VEC_SUB_VQ_VR_VR_VR_VR497#undef VEC_SUB_VQ_VU_VU_VU_VU498#undef VEC_SUB_VQ_VI_VI_VI_VI499#undef SUB_VQ_VR_VR_VR_VR500#undef SUB_VQ_VU_VU_VU_VU501#undef SUB_VQ_VI_VI_VI_VI502 503#define SUB_VP_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND504#define SUB_VP_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND505#define SUB_VP_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND506 507#define VEC_SUB_VP_VI_VI(NAME, VKIND) \508  procedure(sub_vpvi##VKIND##vi##VKIND) :: SUB_VP_VI_VI(NAME, VKIND);509#define VEC_SUB_VP_VU_VU(NAME, VKIND) \510  procedure(sub_vpvu##VKIND##vu##VKIND) :: SUB_VP_VU_VU(NAME, VKIND);511#define VEC_SUB_VP_VR_VR(NAME, VKIND) \512  procedure(sub_vpvr##VKIND##vr##VKIND) :: SUB_VP_VR_VR(NAME, VKIND);513 514! mma_assemble_pair515  VEC_SUB_VP_VI_VI(mma_assemble_pair,1) VEC_SUB_VP_VI_VI(mma_assemble_pair,2)516  VEC_SUB_VP_VI_VI(mma_assemble_pair,4) VEC_SUB_VP_VI_VI(mma_assemble_pair,8)517  VEC_SUB_VP_VU_VU(mma_assemble_pair,1) VEC_SUB_VP_VU_VU(mma_assemble_pair,2)518  VEC_SUB_VP_VU_VU(mma_assemble_pair,4) VEC_SUB_VP_VU_VU(mma_assemble_pair,8)519  VEC_SUB_VP_VR_VR(mma_assemble_pair,4) VEC_SUB_VP_VR_VR(mma_assemble_pair,8)520  interface mma_assemble_pair521    procedure :: SUB_VP_VI_VI(mma_assemble_pair,1)522    procedure :: SUB_VP_VI_VI(mma_assemble_pair,2)523    procedure :: SUB_VP_VI_VI(mma_assemble_pair,4)524    procedure :: SUB_VP_VI_VI(mma_assemble_pair,8)525    procedure :: SUB_VP_VU_VU(mma_assemble_pair,1)526    procedure :: SUB_VP_VU_VU(mma_assemble_pair,2)527    procedure :: SUB_VP_VU_VU(mma_assemble_pair,4)528    procedure :: SUB_VP_VU_VU(mma_assemble_pair,8)529    procedure :: SUB_VP_VR_VR(mma_assemble_pair,4)530    procedure :: SUB_VP_VR_VR(mma_assemble_pair,8)531  end interface532  public mma_assemble_pair533 534#undef VEC_SUB_VP_VR_VR535#undef VEC_SUB_VP_VU_VU536#undef VEC_SUB_VP_VI_VI537#undef SUB_VP_VR_VR538#undef SUB_VP_VU_VU539#undef SUB_VP_VI_VI540 541#define SUB_VQ_VI_VI_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvi##VKIND##vi##VKINDi0i0i0542#define SUB_VQ_VU_VU_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0ii0543 544#define VEC_SUB_VQ_VI_VI_I_I_I(NAME, INTENT, VKIND) \545  procedure(sub_vq##INTENT##vi##VKIND##vi##VKIND##iii) :: SUB_VQ_VI_VI_I_I_I(NAME, VKIND);546#define VEC_SUB_VQ_VU_VU_I_I_I(NAME, INTENT, VKIND) \547  procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND##iii) :: SUB_VQ_VU_VU_I_I_I(NAME, VKIND);548 549! mma_pmxvbf16ger2550  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,out,1)551  interface mma_pmxvbf16ger2552    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,1)553  end interface mma_pmxvbf16ger2554  public mma_pmxvbf16ger2555 556! mma_pmxvbf16ger2nn557  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,inout,1)558  interface mma_pmxvbf16ger2nn559    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,1)560  end interface mma_pmxvbf16ger2nn561  public mma_pmxvbf16ger2nn562 563! mma_pmxvbf16ger2np564  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,inout,1)565  interface mma_pmxvbf16ger2np566    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,1)567  end interface mma_pmxvbf16ger2np568  public mma_pmxvbf16ger2np569 570! mma_pmxvbf16ger2pn571  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,inout,1)572  interface mma_pmxvbf16ger2pn573    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,1)574  end interface mma_pmxvbf16ger2pn575  public mma_pmxvbf16ger2pn576 577! mma_pmxvbf16ger2pp578  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,inout,1)579  interface mma_pmxvbf16ger2pp580    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,1)581  end interface mma_pmxvbf16ger2pp582  public mma_pmxvbf16ger2pp583 584! mma_pmxvf16ger2585  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,out,1)586  interface mma_pmxvf16ger2587    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,1)588  end interface mma_pmxvf16ger2589  public mma_pmxvf16ger2590 591! mma_pmxvf16ger2nn592  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,inout,1)593  interface mma_pmxvf16ger2nn594    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,1)595  end interface mma_pmxvf16ger2nn596  public mma_pmxvf16ger2nn597 598! mma_pmxvf16ger2np599  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,inout,1)600  interface mma_pmxvf16ger2np601    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,1)602  end interface mma_pmxvf16ger2np603  public mma_pmxvf16ger2np604 605! mma_pmxvf16ger2pn606  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,inout,1)607  interface mma_pmxvf16ger2pn608    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,1)609  end interface mma_pmxvf16ger2pn610  public mma_pmxvf16ger2pn611 612! mma_pmxvf16ger2pp613  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,inout,1)614  interface mma_pmxvf16ger2pp615    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,1)616  end interface mma_pmxvf16ger2pp617  public mma_pmxvf16ger2pp618 619! mma_pmxvi16ger2620  VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2_,out,2)621  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2_,out,1)622  interface mma_pmxvi16ger2623    procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2_,2)624    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2_,1)625  end interface mma_pmxvi16ger2626  public mma_pmxvi16ger2627 628! mma_pmxvi16ger2pp629  VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2pp,inout,2)630  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2pp,inout,1)631  interface mma_pmxvi16ger2pp632    procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2pp,2)633    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2pp,1)634  end interface mma_pmxvi16ger2pp635  public mma_pmxvi16ger2pp636 637! mma_pmxvi16ger2s638  VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2s,out,2)639  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2s,out,1)640  interface mma_pmxvi16ger2s641    procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2s,2)642    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2s,1)643  end interface mma_pmxvi16ger2s644  public mma_pmxvi16ger2s645 646! mma_pmxvi16ger2spp647  VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2spp,inout,2)648  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2spp,inout,1)649  interface mma_pmxvi16ger2spp650    procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2spp,2)651    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2spp,1)652  end interface mma_pmxvi16ger2spp653  public mma_pmxvi16ger2spp654 655! mma_pmxvi4ger8656  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,out,1)657  interface mma_pmxvi4ger8658    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,1)659  end interface mma_pmxvi4ger8660  public mma_pmxvi4ger8661 662! mma_pmxvi4ger8pp663  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,inout,1)664  interface mma_pmxvi4ger8pp665    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,1)666  end interface mma_pmxvi4ger8pp667  public mma_pmxvi4ger8pp668 669! mma_pmxvi8ger4670  VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4_,out,1)671  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4_,out,1)672  interface mma_pmxvi8ger4673    procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4_,1)674    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4_,1)675  end interface mma_pmxvi8ger4676  public mma_pmxvi8ger4677 678! mma_pmxvi8ger4pp679  VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4pp,inout,1)680  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4pp,inout,1)681  interface mma_pmxvi8ger4pp682    procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4pp,1)683    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4pp,1)684  end interface mma_pmxvi8ger4pp685  public mma_pmxvi8ger4pp686 687! mma_pmxvi8ger4spp688  VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4spp,inout,1)689  VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4spp,inout,1)690  interface mma_pmxvi8ger4spp691    procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4spp,1)692    procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4spp,1)693  end interface mma_pmxvi8ger4spp694  public mma_pmxvi8ger4spp695 696#undef VEC_SUB_VQ_VU_VU_I_I_I697#undef VEC_SUB_VQ_VI_VI_I_I_I698#undef SUB_VQ_VU_VU_I_I_I699#undef SUB_VQ_VI_VI_I_I_I700 701#define SUB_VQ_VU_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0702#define SUB_VQ_VR_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvr##VKIND##vr##VKINDi0i0703 704#define VEC_SUB_VQ_VU_VU_I_I(NAME, INTENT, VKIND) \705  procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND##ii) :: SUB_VQ_VU_VU_I_I(NAME, VKIND);706#define VEC_SUB_VQ_VR_VR_I_I(NAME, INTENT, VKIND) \707  procedure(sub_vq##INTENT##vr##VKIND##vr##VKIND##ii) :: SUB_VQ_VR_VR_I_I(NAME, VKIND);708 709! mma_pmxvf32ger710  VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32ger,out,1)711  VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32ger,out,4)712  interface mma_pmxvf32ger713    procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32ger,1)714    procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32ger,4)715  end interface mma_pmxvf32ger716  public mma_pmxvf32ger717 718! mma_pmxvf32gernn719  VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gernn,inout,1)720  VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gernn,inout,4)721  interface mma_pmxvf32gernn722    procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gernn,1)723    procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gernn,4)724  end interface mma_pmxvf32gernn725  public mma_pmxvf32gernn726 727! mma_pmxvf32gernp728  VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gernp,inout,1)729  VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gernp,inout,4)730  interface mma_pmxvf32gernp731    procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gernp,1)732    procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gernp,4)733  end interface mma_pmxvf32gernp734  public mma_pmxvf32gernp735 736! mma_pmxvf32gerpn737  VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpn,inout,1)738  VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpn,inout,4)739  interface mma_pmxvf32gerpn740    procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpn,1)741    procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpn,4)742  end interface mma_pmxvf32gerpn743  public mma_pmxvf32gerpn744 745! mma_pmxvf32gerpp746  VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpp,inout,1)747  VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpp,inout,4)748  interface mma_pmxvf32gerpp749    procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpp,1)750    procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpp,4)751  end interface mma_pmxvf32gerpp752  public mma_pmxvf32gerpp753 754#undef VEC_SUB_VQ_VR_VR_I_I755#undef VEC_SUB_VQ_VU_VU_I_I756#undef SUB_VQ_VR_VR_I_I757#undef SUB_VQ_VU_VU_I_I758 759#define SUB_VQ_VP_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvu##VKINDi0i0760#define SUB_VQ_VP_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvr##VKINDi0i0761 762#define VEC_SUB_VQ_VP_VU_I_I(NAME, INTENT, VKIND) \763  procedure(sub_vq##INTENT##vpvu##VKIND##ii) :: SUB_VQ_VP_VU_I_I(NAME, VKIND);764#define VEC_SUB_VQ_VP_VR_I_I(NAME, INTENT, VKIND) \765  procedure(sub_vq##INTENT##vpvr##VKIND##ii) :: SUB_VQ_VP_VR_I_I(NAME, VKIND);766 767! mma_pmxvf64ger768  VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64ger,out,1)769  VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64ger,out,8)770  interface mma_pmxvf64ger771    procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64ger,1)772    procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64ger,8)773  end interface mma_pmxvf64ger774  public mma_pmxvf64ger775 776! mma_pmxvf64gernn777  VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gernn,inout,1)778  VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gernn,inout,8)779  interface mma_pmxvf64gernn780    procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gernn,1)781    procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gernn,8)782  end interface mma_pmxvf64gernn783  public mma_pmxvf64gernn784 785! mma_pmxvf64gernp786  VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gernp,inout,1)787  VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gernp,inout,8)788  interface mma_pmxvf64gernp789    procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gernp,1)790    procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gernp,8)791  end interface mma_pmxvf64gernp792  public mma_pmxvf64gernp793 794! mma_pmxvf64gerpn795  VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpn,inout,1)796  VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpn,inout,8)797  interface mma_pmxvf64gerpn798    procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpn,1)799    procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpn,8)800  end interface mma_pmxvf64gerpn801  public mma_pmxvf64gerpn802 803! mma_pmxvf64gerpp804  VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpp,inout,1)805  VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpp,inout,8)806  interface mma_pmxvf64gerpp807    procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpp,1)808    procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpp,8)809  end interface mma_pmxvf64gerpp810  public mma_pmxvf64gerpp811 812#undef VEC_SUB_VQ_VP_VR_I_I813#undef VEC_SUB_VQ_VP_VU_I_I814#undef SUB_VQ_VP_VR_I_I815#undef SUB_VQ_VP_VU_I_I816 817#define SUB_VQ_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND818#define SUB_VQ_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND819#define SUB_VQ_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND820 821#define VEC_SUB_VQ_VI_VI(NAME, INTENT, VKIND) \822  procedure(sub_vq##INTENT##vi##VKIND##vi##VKIND) :: SUB_VQ_VI_VI(NAME, VKIND);823#define VEC_SUB_VQ_VU_VU(NAME, INTENT, VKIND) \824  procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND) :: SUB_VQ_VU_VU(NAME, VKIND);825#define VEC_SUB_VQ_VR_VR(NAME, INTENT, VKIND) \826  procedure(sub_vq##INTENT##vr##VKIND##vr##VKIND) :: SUB_VQ_VR_VR(NAME, VKIND);827 828!! First argument with INTENT(INOUT)829! mma_xvbf16ger2nn830  VEC_SUB_VQ_VU_VU(mma_xvbf16ger2nn,inout,1)831  interface mma_xvbf16ger2nn832    procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2nn,1)833  end interface834  public mma_xvbf16ger2nn835 836! mma_xvbf16ger2np837  VEC_SUB_VQ_VU_VU(mma_xvbf16ger2np,inout,1)838  interface mma_xvbf16ger2np839    procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2np,1)840  end interface841  public mma_xvbf16ger2np842 843! mma_xvbf16ger2pn844  VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pn,inout,1)845  interface mma_xvbf16ger2pn846    procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pn,1)847  end interface848  public mma_xvbf16ger2pn849 850! mma_xvbf16ger2pp851  VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pp,inout,1)852  interface mma_xvbf16ger2pp853    procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pp,1)854  end interface855  public mma_xvbf16ger2pp856 857! mma_xvi8ger4pp858  VEC_SUB_VQ_VI_VI(mma_xvi8ger4pp,inout,1)859  VEC_SUB_VQ_VU_VU(mma_xvi8ger4pp,inout,1)860  interface mma_xvi8ger4pp861    procedure :: SUB_VQ_VI_VI(mma_xvi8ger4pp,1)862    procedure :: SUB_VQ_VU_VU(mma_xvi8ger4pp,1)863  end interface864  public mma_xvi8ger4pp865 866! mma_xvi8ger4spp867  VEC_SUB_VQ_VI_VI(mma_xvi8ger4spp,inout,1)868  VEC_SUB_VQ_VU_VU(mma_xvi8ger4spp,inout,1)869  interface mma_xvi8ger4spp870    procedure :: SUB_VQ_VI_VI(mma_xvi8ger4spp,1)871    procedure :: SUB_VQ_VU_VU(mma_xvi8ger4spp,1)872  end interface873  public mma_xvi8ger4spp874 875! mma_xvi16ger2pp876  VEC_SUB_VQ_VI_VI(mma_xvi16ger2pp,inout,2)877  VEC_SUB_VQ_VU_VU(mma_xvi16ger2pp,inout,1)878  interface mma_xvi16ger2pp879    procedure :: SUB_VQ_VI_VI(mma_xvi16ger2pp,2)880    procedure :: SUB_VQ_VU_VU(mma_xvi16ger2pp,1)881  end interface882  public mma_xvi16ger2pp883 884! mma_xvi16ger2s885  VEC_SUB_VQ_VI_VI(mma_xvi16ger2s,inout,2)886  VEC_SUB_VQ_VU_VU(mma_xvi16ger2s,inout,1)887  interface mma_xvi16ger2s888    procedure :: SUB_VQ_VI_VI(mma_xvi16ger2s,2)889    procedure :: SUB_VQ_VU_VU(mma_xvi16ger2s,1)890  end interface891  public mma_xvi16ger2s892 893! mma_xvi16ger2spp894  VEC_SUB_VQ_VI_VI(mma_xvi16ger2spp,inout,2)895  VEC_SUB_VQ_VU_VU(mma_xvi16ger2spp,inout,1)896  interface mma_xvi16ger2spp897    procedure :: SUB_VQ_VI_VI(mma_xvi16ger2spp,2)898    procedure :: SUB_VQ_VU_VU(mma_xvi16ger2spp,1)899  end interface900  public mma_xvi16ger2spp901 902! mma_xvi4ger8pp903  VEC_SUB_VQ_VU_VU(mma_xvi4ger8pp,inout,1)904  interface mma_xvi4ger8pp905    procedure :: SUB_VQ_VU_VU(mma_xvi4ger8pp,1)906  end interface907  public mma_xvi4ger8pp908 909! mma_xvf16ger2nn910  VEC_SUB_VQ_VU_VU(mma_xvf16ger2nn,inout,1)911  interface mma_xvf16ger2nn912    procedure :: SUB_VQ_VU_VU(mma_xvf16ger2nn,1)913  end interface914  public mma_xvf16ger2nn915 916! mma_xvf16ger2np917  VEC_SUB_VQ_VU_VU(mma_xvf16ger2np,inout,1)918  interface mma_xvf16ger2np919    procedure :: SUB_VQ_VU_VU(mma_xvf16ger2np,1)920  end interface921  public mma_xvf16ger2np922 923! mma_xvf16ger2pn924  VEC_SUB_VQ_VU_VU(mma_xvf16ger2pn,inout,1)925  interface mma_xvf16ger2pn926    procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pn,1)927  end interface928  public mma_xvf16ger2pn929 930! mma_xvf16ger2pp931  VEC_SUB_VQ_VU_VU(mma_xvf16ger2pp,inout,1)932  interface mma_xvf16ger2pp933    procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pp,1)934  end interface935  public mma_xvf16ger2pp936 937! mma_xvf32gernn938  VEC_SUB_VQ_VU_VU(mma_xvf32gernn,inout,1)939  VEC_SUB_VQ_VR_VR(mma_xvf32gernn,inout,4)940  interface mma_xvf32gernn941    procedure :: SUB_VQ_VU_VU(mma_xvf32gernn,1)942    procedure :: SUB_VQ_VR_VR(mma_xvf32gernn,4)943  end interface944  public mma_xvf32gernn945 946! mma_xvf32gernp947  VEC_SUB_VQ_VU_VU(mma_xvf32gernp,inout,1)948  VEC_SUB_VQ_VR_VR(mma_xvf32gernp,inout,4)949  interface mma_xvf32gernp950    procedure :: SUB_VQ_VU_VU(mma_xvf32gernp,1)951    procedure :: SUB_VQ_VR_VR(mma_xvf32gernp,4)952  end interface953  public mma_xvf32gernp954 955! mma_xvf32gerpn956  VEC_SUB_VQ_VU_VU(mma_xvf32gerpn,inout,1)957  VEC_SUB_VQ_VR_VR(mma_xvf32gerpn,inout,4)958  interface mma_xvf32gerpn959    procedure :: SUB_VQ_VU_VU(mma_xvf32gerpn,1)960    procedure :: SUB_VQ_VR_VR(mma_xvf32gerpn,4)961  end interface962  public mma_xvf32gerpn963 964! mma_xvf32gerpp965  VEC_SUB_VQ_VU_VU(mma_xvf32gerpp,inout,1)966  VEC_SUB_VQ_VR_VR(mma_xvf32gerpp,inout,4)967  interface mma_xvf32gerpp968    procedure :: SUB_VQ_VU_VU(mma_xvf32gerpp,1)969    procedure :: SUB_VQ_VR_VR(mma_xvf32gerpp,4)970  end interface971  public mma_xvf32gerpp972 973!! First argument with INTENT(OUT)974! mma_xvbf16ger2975  VEC_SUB_VQ_VU_VU(mma_xvbf16ger2_,out,1)976  interface mma_xvbf16ger2977    procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2_,1)978  end interface979  public mma_xvbf16ger2980 981! mma_xvi16ger2982  VEC_SUB_VQ_VI_VI(mma_xvi16ger2_,out,2)983  VEC_SUB_VQ_VU_VU(mma_xvi16ger2_,out,1)984  interface mma_xvi16ger2985    procedure :: SUB_VQ_VI_VI(mma_xvi16ger2_,2)986    procedure :: SUB_VQ_VU_VU(mma_xvi16ger2_,1)987  end interface988  public mma_xvi16ger2989 990! mma_xvi4ger8991  VEC_SUB_VQ_VU_VU(mma_xvi4ger8_,out,1)992  interface mma_xvi4ger8993    procedure :: SUB_VQ_VU_VU(mma_xvi4ger8_,1)994  end interface995  public mma_xvi4ger8996 997! mma_xvi8ger4998  VEC_SUB_VQ_VI_VI(mma_xvi8ger4_,out,1)999  VEC_SUB_VQ_VU_VU(mma_xvi8ger4_,out,1)1000  interface mma_xvi8ger41001    procedure :: SUB_VQ_VI_VI(mma_xvi8ger4_,1)1002    procedure :: SUB_VQ_VU_VU(mma_xvi8ger4_,1)1003  end interface1004  public mma_xvi8ger41005 1006! mma_xvf16ger21007  VEC_SUB_VQ_VU_VU(mma_xvf16ger2_,out,1)1008  interface mma_xvf16ger21009    procedure :: SUB_VQ_VU_VU(mma_xvf16ger2_,1)1010  end interface1011  public mma_xvf16ger21012 1013! mma_xvf32ger1014  VEC_SUB_VQ_VU_VU(mma_xvf32ger,out,1)1015  VEC_SUB_VQ_VR_VR(mma_xvf32ger,out,4)1016  interface mma_xvf32ger1017    procedure :: SUB_VQ_VU_VU(mma_xvf32ger,1)1018    procedure :: SUB_VQ_VR_VR(mma_xvf32ger,4)1019  end interface1020  public mma_xvf32ger1021 1022#undef VEC_SUB_VQ_VR_VR1023#undef VEC_SUB_VQ_VU_VU1024#undef VEC_SUB_VQ_VI_VI1025#undef SUB_VQ_VR_VR1026#undef SUB_VQ_VU_VU1027#undef SUB_VQ_VI_VI1028 1029#define SUB_VQ_VP_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND1030#define SUB_VQ_VP_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND1031 1032#define VEC_SUB_VQ_VP_VU(NAME, INTENT, VKIND) \1033  procedure(sub_vq##INTENT##vpvu##VKIND) :: SUB_VQ_VP_VU(NAME, VKIND);1034#define VEC_SUB_VQ_VP_VR(NAME, INTENT, VKIND) \1035  procedure(sub_vq##INTENT##vpvr##VKIND) :: SUB_VQ_VP_VR(NAME, VKIND);1036 1037! mma_xvf64ger1038  VEC_SUB_VQ_VP_VU(mma_xvf64ger,out,1)1039  VEC_SUB_VQ_VP_VR(mma_xvf64ger,out,8)1040  interface mma_xvf64ger1041    procedure :: SUB_VQ_VP_VU(mma_xvf64ger,1)1042    procedure :: SUB_VQ_VP_VR(mma_xvf64ger,8)1043  end interface1044  public mma_xvf64ger1045 1046! mma_xvf64gernn1047  VEC_SUB_VQ_VP_VU(mma_xvf64gernn,inout,1)1048  VEC_SUB_VQ_VP_VR(mma_xvf64gernn,inout,8)1049  interface mma_xvf64gernn1050    procedure :: SUB_VQ_VP_VU(mma_xvf64gernn,1)1051    procedure :: SUB_VQ_VP_VR(mma_xvf64gernn,8)1052  end interface1053  public mma_xvf64gernn1054 1055! mma_xvf64gernp1056  VEC_SUB_VQ_VP_VU(mma_xvf64gernp,inout,1)1057  VEC_SUB_VQ_VP_VR(mma_xvf64gernp,inout,8)1058  interface mma_xvf64gernp1059    procedure :: SUB_VQ_VP_VU(mma_xvf64gernp,1)1060    procedure :: SUB_VQ_VP_VR(mma_xvf64gernp,8)1061  end interface1062  public mma_xvf64gernp1063 1064! mma_xvf64gerpn1065  VEC_SUB_VQ_VP_VU(mma_xvf64gerpn,inout,1)1066  VEC_SUB_VQ_VP_VR(mma_xvf64gerpn,inout,8)1067  interface mma_xvf64gerpn1068    procedure :: SUB_VQ_VP_VU(mma_xvf64gerpn,1)1069    procedure :: SUB_VQ_VP_VR(mma_xvf64gerpn,8)1070  end interface1071  public mma_xvf64gerpn1072 1073! mma_xvf64gerpp1074  VEC_SUB_VQ_VP_VU(mma_xvf64gerpp,inout,1)1075  VEC_SUB_VQ_VP_VR(mma_xvf64gerpp,inout,8)1076  interface mma_xvf64gerpp1077    procedure :: SUB_VQ_VP_VU(mma_xvf64gerpp,1)1078    procedure :: SUB_VQ_VP_VR(mma_xvf64gerpp,8)1079  end interface1080  public mma_xvf64gerpp1081 1082#undef VEC_SUB_VQ_VP_VR1083#undef VEC_SUB_VQ_VP_VU1084#undef SUB_VQ_VP_VR1085#undef SUB_VQ_VP_VU1086 1087! mma_disassemble_acc1088  procedure(sub_atvq) :: __ppc_mma_disassemble_acc1089  interface mma_disassemble_acc1090    procedure :: __ppc_mma_disassemble_acc1091  end interface1092  public mma_disassemble_acc1093 1094! mma_disassemble_pair1095  procedure(sub_atvp) :: __ppc_mma_disassemble_pair1096  interface mma_disassemble_pair1097    procedure :: __ppc_mma_disassemble_pair1098  end interface1099  public mma_disassemble_pair1100 1101! mma_xxmfacc1102  procedure(sub_vq) :: __ppc_mma_xxmfacc1103  interface mma_xxmfacc1104    procedure :: __ppc_mma_xxmfacc1105  end interface1106  public mma_xxmfacc1107 1108! mma_xxmtacc1109  procedure(sub_vq) :: __ppc_mma_xxmtacc1110  interface mma_xxmtacc1111    procedure :: __ppc_mma_xxmtacc1112  end interface1113  public mma_xxmtacc1114 1115! mma_xxsetaccz1116  procedure(sub_vq) :: __ppc_mma_xxsetaccz1117  interface mma_xxsetaccz1118    procedure :: __ppc_mma_xxsetaccz1119  end interface1120  public mma_xxsetaccz1121 1122end module1123