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