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-exception 6! 7!===------------------------------------------------------------------------===! 8 9module mma 10 implicit none 11 private 12 13 abstract interface 14 15!! ========== 1 argument subroutine interface ================================!! 16!! subroutine s(__vector_quad) 17 elemental subroutine sub_vq(acc) 18 __vector_quad, intent(inout) :: acc 19 end subroutine 20 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_VPI0VP 62 63#undef FUNC_VPI0VP 64#undef FUNC_VPI0VR 65#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) :: arg1 102 integer(8), intent(in) :: arg2 103 !dir$ ignore_tkr(k) arg2 104 integer(8), intent(out) :: arg3 105 !dir$ ignore_tkr(kr) arg3 106 end subroutine 107 108! subroutine(__vector_pair, i, r) 109 pure subroutine sub_vpi0r0(arg1, arg2, arg3) 110 __vector_pair, intent(in) :: arg1 111 integer(8), intent(in) :: arg2 112 !dir$ ignore_tkr(k) arg2 113 real(8), intent(out) :: arg3 114 !dir$ ignore_tkr(kr) arg3 115 end subroutine 116 117! subroutine(__vector_pair, i, __vector_pair) 118 pure subroutine sub_vpi0vp(arg1, arg2, arg3) 119 __vector_pair, intent(in) :: arg1 120 integer(8), intent(in) :: arg2 121 !dir$ ignore_tkr(k) arg2 122 __vector_pair, intent(out) :: arg3 123 !dir$ ignore_tkr(r) arg3 124 end subroutine 125 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_VPVIVI 157#undef ELEM_SUB_VPVUVU 158#undef ELEM_SUB_VPVRVR 159#undef SUB_VPI0VR 160#undef SUB_VPI0VU 161#undef SUB_VPI0VI 162 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_VQVRVR 192#undef ELEM_SUB_VQVUVU 193#undef ELEM_SUB_VQVIVI 194 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_VQVPVR 217#undef ELEM_SUB_VQVPVU 218 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_VQVRVRVRVR 248#undef ELEM_SUB_VQVUVUVUVU 249#undef ELEM_SUB_VQVIVIVIVI 250 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_VQVRVRII 277#undef ELEM_SUB_VQVUVUII 278 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_VQVPVRII 307#undef ELEM_SUB_VQVPVUII 308 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_VQVUVUIII 338#undef ELEM_SUB_VQVIVIIII 339 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 have 344 ! intent(out) attribute. Use intent(inout) instead. 345 type(*), intent(inout) :: data 346 __vector_pair, intent(inout) :: pair 347 end subroutine 348 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 have 352 ! intent(out) attribute. Use intent(inout) instead. 353 type(*), intent(inout) :: data 354 __vector_quad, intent(inout) :: acc 355 end subroutine 356 357 end interface 358 359!------------------------------------------------------- 360! __vector_pair function(integer, vector/__vector_pair) 361!------------------------------------------------------- 362#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0##vi##VKIND 363#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0##vu##VKIND 364#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0##vr##VKIND 365#define VP_I0_VP(NAME) __ppc_##NAME##_vpi0vp0 366 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_lxvp 381 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_lxvp 386 public :: mma_lxvp 387 388#undef VEC_VP_I0_VP 389#undef VEC_VP_I0_VR 390#undef VEC_VP_I0_VU 391#undef VEC_VP_I0_VI 392#undef VP_I0_VP 393#undef VP_I0_VR 394#undef VP_I0_VU 395#undef VP_I0_VI 396 397!----------------------------------------------------------------------- 398! subroutine(__vector_pair, integer, __vector_pair/vector/integer/real) 399!----------------------------------------------------------------------- 400#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0vi##VKIND 401#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0vu##VKIND 402#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0vr##VKIND 403 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_vpi0vp0 413 procedure(sub_vpi0i0) :: __ppc_vec_stxvp_vpi0i0 414 procedure(sub_vpi0r0) :: __ppc_vec_stxvp_vpi0r0 415 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_stxvp 419 procedure :: __ppc_vec_stxvp_vpi0vp0 420 procedure :: __ppc_vec_stxvp_vpi0i0 421 procedure :: __ppc_vec_stxvp_vpi0r0 422 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_stxvp 426 public :: mma_stxvp 427 428#undef VEC_VP_I0_VR 429#undef VEC_VP_I0_VU 430#undef VEC_VP_I0_VI 431#undef VP_I0_VR 432#undef VP_I0_VU 433#undef VP_I0_VI 434 435#define SUB_VQ_VI_VI_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND 436#define SUB_VQ_VU_VU_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND 437#define SUB_VQ_VR_VR_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND 438 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_acc 447 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_acc 458 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 interface 469 public mma_assemble_acc 470 471! mma_build_acc 472 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_acc 483 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 interface 494 public mma_build_acc 495 496#undef VEC_SUB_VQ_VR_VR_VR_VR 497#undef VEC_SUB_VQ_VU_VU_VU_VU 498#undef VEC_SUB_VQ_VI_VI_VI_VI 499#undef SUB_VQ_VR_VR_VR_VR 500#undef SUB_VQ_VU_VU_VU_VU 501#undef SUB_VQ_VI_VI_VI_VI 502 503#define SUB_VP_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND 504#define SUB_VP_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND 505#define SUB_VP_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND 506 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_pair 515 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_pair 521 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 interface 532 public mma_assemble_pair 533 534#undef VEC_SUB_VP_VR_VR 535#undef VEC_SUB_VP_VU_VU 536#undef VEC_SUB_VP_VI_VI 537#undef SUB_VP_VR_VR 538#undef SUB_VP_VU_VU 539#undef SUB_VP_VI_VI 540 541#define SUB_VQ_VI_VI_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvi##VKIND##vi##VKINDi0i0i0 542#define SUB_VQ_VU_VU_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0ii0 543 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_pmxvbf16ger2 550 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,out,1) 551 interface mma_pmxvbf16ger2 552 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,1) 553 end interface mma_pmxvbf16ger2 554 public mma_pmxvbf16ger2 555 556! mma_pmxvbf16ger2nn 557 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,inout,1) 558 interface mma_pmxvbf16ger2nn 559 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,1) 560 end interface mma_pmxvbf16ger2nn 561 public mma_pmxvbf16ger2nn 562 563! mma_pmxvbf16ger2np 564 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,inout,1) 565 interface mma_pmxvbf16ger2np 566 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,1) 567 end interface mma_pmxvbf16ger2np 568 public mma_pmxvbf16ger2np 569 570! mma_pmxvbf16ger2pn 571 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,inout,1) 572 interface mma_pmxvbf16ger2pn 573 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,1) 574 end interface mma_pmxvbf16ger2pn 575 public mma_pmxvbf16ger2pn 576 577! mma_pmxvbf16ger2pp 578 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,inout,1) 579 interface mma_pmxvbf16ger2pp 580 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,1) 581 end interface mma_pmxvbf16ger2pp 582 public mma_pmxvbf16ger2pp 583 584! mma_pmxvf16ger2 585 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,out,1) 586 interface mma_pmxvf16ger2 587 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,1) 588 end interface mma_pmxvf16ger2 589 public mma_pmxvf16ger2 590 591! mma_pmxvf16ger2nn 592 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,inout,1) 593 interface mma_pmxvf16ger2nn 594 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,1) 595 end interface mma_pmxvf16ger2nn 596 public mma_pmxvf16ger2nn 597 598! mma_pmxvf16ger2np 599 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,inout,1) 600 interface mma_pmxvf16ger2np 601 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,1) 602 end interface mma_pmxvf16ger2np 603 public mma_pmxvf16ger2np 604 605! mma_pmxvf16ger2pn 606 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,inout,1) 607 interface mma_pmxvf16ger2pn 608 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,1) 609 end interface mma_pmxvf16ger2pn 610 public mma_pmxvf16ger2pn 611 612! mma_pmxvf16ger2pp 613 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,inout,1) 614 interface mma_pmxvf16ger2pp 615 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,1) 616 end interface mma_pmxvf16ger2pp 617 public mma_pmxvf16ger2pp 618 619! mma_pmxvi16ger2 620 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_pmxvi16ger2 623 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_pmxvi16ger2 626 public mma_pmxvi16ger2 627 628! mma_pmxvi16ger2pp 629 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_pmxvi16ger2pp 632 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_pmxvi16ger2pp 635 public mma_pmxvi16ger2pp 636 637! mma_pmxvi16ger2s 638 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_pmxvi16ger2s 641 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_pmxvi16ger2s 644 public mma_pmxvi16ger2s 645 646! mma_pmxvi16ger2spp 647 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_pmxvi16ger2spp 650 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_pmxvi16ger2spp 653 public mma_pmxvi16ger2spp 654 655! mma_pmxvi4ger8 656 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,out,1) 657 interface mma_pmxvi4ger8 658 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,1) 659 end interface mma_pmxvi4ger8 660 public mma_pmxvi4ger8 661 662! mma_pmxvi4ger8pp 663 VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,inout,1) 664 interface mma_pmxvi4ger8pp 665 procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,1) 666 end interface mma_pmxvi4ger8pp 667 public mma_pmxvi4ger8pp 668 669! mma_pmxvi8ger4 670 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_pmxvi8ger4 673 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_pmxvi8ger4 676 public mma_pmxvi8ger4 677 678! mma_pmxvi8ger4pp 679 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_pmxvi8ger4pp 682 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_pmxvi8ger4pp 685 public mma_pmxvi8ger4pp 686 687! mma_pmxvi8ger4spp 688 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_pmxvi8ger4spp 691 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_pmxvi8ger4spp 694 public mma_pmxvi8ger4spp 695 696#undef VEC_SUB_VQ_VU_VU_I_I_I 697#undef VEC_SUB_VQ_VI_VI_I_I_I 698#undef SUB_VQ_VU_VU_I_I_I 699#undef SUB_VQ_VI_VI_I_I_I 700 701#define SUB_VQ_VU_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0 702#define SUB_VQ_VR_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvr##VKIND##vr##VKINDi0i0 703 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_pmxvf32ger 710 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_pmxvf32ger 713 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_pmxvf32ger 716 public mma_pmxvf32ger 717 718! mma_pmxvf32gernn 719 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_pmxvf32gernn 722 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_pmxvf32gernn 725 public mma_pmxvf32gernn 726 727! mma_pmxvf32gernp 728 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_pmxvf32gernp 731 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_pmxvf32gernp 734 public mma_pmxvf32gernp 735 736! mma_pmxvf32gerpn 737 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_pmxvf32gerpn 740 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_pmxvf32gerpn 743 public mma_pmxvf32gerpn 744 745! mma_pmxvf32gerpp 746 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_pmxvf32gerpp 749 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_pmxvf32gerpp 752 public mma_pmxvf32gerpp 753 754#undef VEC_SUB_VQ_VR_VR_I_I 755#undef VEC_SUB_VQ_VU_VU_I_I 756#undef SUB_VQ_VR_VR_I_I 757#undef SUB_VQ_VU_VU_I_I 758 759#define SUB_VQ_VP_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvu##VKINDi0i0 760#define SUB_VQ_VP_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvr##VKINDi0i0 761 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_pmxvf64ger 768 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_pmxvf64ger 771 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_pmxvf64ger 774 public mma_pmxvf64ger 775 776! mma_pmxvf64gernn 777 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_pmxvf64gernn 780 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_pmxvf64gernn 783 public mma_pmxvf64gernn 784 785! mma_pmxvf64gernp 786 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_pmxvf64gernp 789 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_pmxvf64gernp 792 public mma_pmxvf64gernp 793 794! mma_pmxvf64gerpn 795 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_pmxvf64gerpn 798 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_pmxvf64gerpn 801 public mma_pmxvf64gerpn 802 803! mma_pmxvf64gerpp 804 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_pmxvf64gerpp 807 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_pmxvf64gerpp 810 public mma_pmxvf64gerpp 811 812#undef VEC_SUB_VQ_VP_VR_I_I 813#undef VEC_SUB_VQ_VP_VU_I_I 814#undef SUB_VQ_VP_VR_I_I 815#undef SUB_VQ_VP_VU_I_I 816 817#define SUB_VQ_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND 818#define SUB_VQ_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND 819#define SUB_VQ_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND 820 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_xvbf16ger2nn 830 VEC_SUB_VQ_VU_VU(mma_xvbf16ger2nn,inout,1) 831 interface mma_xvbf16ger2nn 832 procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2nn,1) 833 end interface 834 public mma_xvbf16ger2nn 835 836! mma_xvbf16ger2np 837 VEC_SUB_VQ_VU_VU(mma_xvbf16ger2np,inout,1) 838 interface mma_xvbf16ger2np 839 procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2np,1) 840 end interface 841 public mma_xvbf16ger2np 842 843! mma_xvbf16ger2pn 844 VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pn,inout,1) 845 interface mma_xvbf16ger2pn 846 procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pn,1) 847 end interface 848 public mma_xvbf16ger2pn 849 850! mma_xvbf16ger2pp 851 VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pp,inout,1) 852 interface mma_xvbf16ger2pp 853 procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pp,1) 854 end interface 855 public mma_xvbf16ger2pp 856 857! mma_xvi8ger4pp 858 VEC_SUB_VQ_VI_VI(mma_xvi8ger4pp,inout,1) 859 VEC_SUB_VQ_VU_VU(mma_xvi8ger4pp,inout,1) 860 interface mma_xvi8ger4pp 861 procedure :: SUB_VQ_VI_VI(mma_xvi8ger4pp,1) 862 procedure :: SUB_VQ_VU_VU(mma_xvi8ger4pp,1) 863 end interface 864 public mma_xvi8ger4pp 865 866! mma_xvi8ger4spp 867 VEC_SUB_VQ_VI_VI(mma_xvi8ger4spp,inout,1) 868 VEC_SUB_VQ_VU_VU(mma_xvi8ger4spp,inout,1) 869 interface mma_xvi8ger4spp 870 procedure :: SUB_VQ_VI_VI(mma_xvi8ger4spp,1) 871 procedure :: SUB_VQ_VU_VU(mma_xvi8ger4spp,1) 872 end interface 873 public mma_xvi8ger4spp 874 875! mma_xvi16ger2pp 876 VEC_SUB_VQ_VI_VI(mma_xvi16ger2pp,inout,2) 877 VEC_SUB_VQ_VU_VU(mma_xvi16ger2pp,inout,1) 878 interface mma_xvi16ger2pp 879 procedure :: SUB_VQ_VI_VI(mma_xvi16ger2pp,2) 880 procedure :: SUB_VQ_VU_VU(mma_xvi16ger2pp,1) 881 end interface 882 public mma_xvi16ger2pp 883 884! mma_xvi16ger2s 885 VEC_SUB_VQ_VI_VI(mma_xvi16ger2s,inout,2) 886 VEC_SUB_VQ_VU_VU(mma_xvi16ger2s,inout,1) 887 interface mma_xvi16ger2s 888 procedure :: SUB_VQ_VI_VI(mma_xvi16ger2s,2) 889 procedure :: SUB_VQ_VU_VU(mma_xvi16ger2s,1) 890 end interface 891 public mma_xvi16ger2s 892 893! mma_xvi16ger2spp 894 VEC_SUB_VQ_VI_VI(mma_xvi16ger2spp,inout,2) 895 VEC_SUB_VQ_VU_VU(mma_xvi16ger2spp,inout,1) 896 interface mma_xvi16ger2spp 897 procedure :: SUB_VQ_VI_VI(mma_xvi16ger2spp,2) 898 procedure :: SUB_VQ_VU_VU(mma_xvi16ger2spp,1) 899 end interface 900 public mma_xvi16ger2spp 901 902! mma_xvi4ger8pp 903 VEC_SUB_VQ_VU_VU(mma_xvi4ger8pp,inout,1) 904 interface mma_xvi4ger8pp 905 procedure :: SUB_VQ_VU_VU(mma_xvi4ger8pp,1) 906 end interface 907 public mma_xvi4ger8pp 908 909! mma_xvf16ger2nn 910 VEC_SUB_VQ_VU_VU(mma_xvf16ger2nn,inout,1) 911 interface mma_xvf16ger2nn 912 procedure :: SUB_VQ_VU_VU(mma_xvf16ger2nn,1) 913 end interface 914 public mma_xvf16ger2nn 915 916! mma_xvf16ger2np 917 VEC_SUB_VQ_VU_VU(mma_xvf16ger2np,inout,1) 918 interface mma_xvf16ger2np 919 procedure :: SUB_VQ_VU_VU(mma_xvf16ger2np,1) 920 end interface 921 public mma_xvf16ger2np 922 923! mma_xvf16ger2pn 924 VEC_SUB_VQ_VU_VU(mma_xvf16ger2pn,inout,1) 925 interface mma_xvf16ger2pn 926 procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pn,1) 927 end interface 928 public mma_xvf16ger2pn 929 930! mma_xvf16ger2pp 931 VEC_SUB_VQ_VU_VU(mma_xvf16ger2pp,inout,1) 932 interface mma_xvf16ger2pp 933 procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pp,1) 934 end interface 935 public mma_xvf16ger2pp 936 937! mma_xvf32gernn 938 VEC_SUB_VQ_VU_VU(mma_xvf32gernn,inout,1) 939 VEC_SUB_VQ_VR_VR(mma_xvf32gernn,inout,4) 940 interface mma_xvf32gernn 941 procedure :: SUB_VQ_VU_VU(mma_xvf32gernn,1) 942 procedure :: SUB_VQ_VR_VR(mma_xvf32gernn,4) 943 end interface 944 public mma_xvf32gernn 945 946! mma_xvf32gernp 947 VEC_SUB_VQ_VU_VU(mma_xvf32gernp,inout,1) 948 VEC_SUB_VQ_VR_VR(mma_xvf32gernp,inout,4) 949 interface mma_xvf32gernp 950 procedure :: SUB_VQ_VU_VU(mma_xvf32gernp,1) 951 procedure :: SUB_VQ_VR_VR(mma_xvf32gernp,4) 952 end interface 953 public mma_xvf32gernp 954 955! mma_xvf32gerpn 956 VEC_SUB_VQ_VU_VU(mma_xvf32gerpn,inout,1) 957 VEC_SUB_VQ_VR_VR(mma_xvf32gerpn,inout,4) 958 interface mma_xvf32gerpn 959 procedure :: SUB_VQ_VU_VU(mma_xvf32gerpn,1) 960 procedure :: SUB_VQ_VR_VR(mma_xvf32gerpn,4) 961 end interface 962 public mma_xvf32gerpn 963 964! mma_xvf32gerpp 965 VEC_SUB_VQ_VU_VU(mma_xvf32gerpp,inout,1) 966 VEC_SUB_VQ_VR_VR(mma_xvf32gerpp,inout,4) 967 interface mma_xvf32gerpp 968 procedure :: SUB_VQ_VU_VU(mma_xvf32gerpp,1) 969 procedure :: SUB_VQ_VR_VR(mma_xvf32gerpp,4) 970 end interface 971 public mma_xvf32gerpp 972 973!! First argument with INTENT(OUT) 974! mma_xvbf16ger2 975 VEC_SUB_VQ_VU_VU(mma_xvbf16ger2_,out,1) 976 interface mma_xvbf16ger2 977 procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2_,1) 978 end interface 979 public mma_xvbf16ger2 980 981! mma_xvi16ger2 982 VEC_SUB_VQ_VI_VI(mma_xvi16ger2_,out,2) 983 VEC_SUB_VQ_VU_VU(mma_xvi16ger2_,out,1) 984 interface mma_xvi16ger2 985 procedure :: SUB_VQ_VI_VI(mma_xvi16ger2_,2) 986 procedure :: SUB_VQ_VU_VU(mma_xvi16ger2_,1) 987 end interface 988 public mma_xvi16ger2 989 990! mma_xvi4ger8 991 VEC_SUB_VQ_VU_VU(mma_xvi4ger8_,out,1) 992 interface mma_xvi4ger8 993 procedure :: SUB_VQ_VU_VU(mma_xvi4ger8_,1) 994 end interface 995 public mma_xvi4ger8 996 997! mma_xvi8ger4 998 VEC_SUB_VQ_VI_VI(mma_xvi8ger4_,out,1) 999 VEC_SUB_VQ_VU_VU(mma_xvi8ger4_,out,1) 1000 interface mma_xvi8ger4 1001 procedure :: SUB_VQ_VI_VI(mma_xvi8ger4_,1) 1002 procedure :: SUB_VQ_VU_VU(mma_xvi8ger4_,1) 1003 end interface 1004 public mma_xvi8ger4 1005 1006! mma_xvf16ger2 1007 VEC_SUB_VQ_VU_VU(mma_xvf16ger2_,out,1) 1008 interface mma_xvf16ger2 1009 procedure :: SUB_VQ_VU_VU(mma_xvf16ger2_,1) 1010 end interface 1011 public mma_xvf16ger2 1012 1013! mma_xvf32ger 1014 VEC_SUB_VQ_VU_VU(mma_xvf32ger,out,1) 1015 VEC_SUB_VQ_VR_VR(mma_xvf32ger,out,4) 1016 interface mma_xvf32ger 1017 procedure :: SUB_VQ_VU_VU(mma_xvf32ger,1) 1018 procedure :: SUB_VQ_VR_VR(mma_xvf32ger,4) 1019 end interface 1020 public mma_xvf32ger 1021 1022#undef VEC_SUB_VQ_VR_VR 1023#undef VEC_SUB_VQ_VU_VU 1024#undef VEC_SUB_VQ_VI_VI 1025#undef SUB_VQ_VR_VR 1026#undef SUB_VQ_VU_VU 1027#undef SUB_VQ_VI_VI 1028 1029#define SUB_VQ_VP_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND 1030#define SUB_VQ_VP_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND 1031 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_xvf64ger 1038 VEC_SUB_VQ_VP_VU(mma_xvf64ger,out,1) 1039 VEC_SUB_VQ_VP_VR(mma_xvf64ger,out,8) 1040 interface mma_xvf64ger 1041 procedure :: SUB_VQ_VP_VU(mma_xvf64ger,1) 1042 procedure :: SUB_VQ_VP_VR(mma_xvf64ger,8) 1043 end interface 1044 public mma_xvf64ger 1045 1046! mma_xvf64gernn 1047 VEC_SUB_VQ_VP_VU(mma_xvf64gernn,inout,1) 1048 VEC_SUB_VQ_VP_VR(mma_xvf64gernn,inout,8) 1049 interface mma_xvf64gernn 1050 procedure :: SUB_VQ_VP_VU(mma_xvf64gernn,1) 1051 procedure :: SUB_VQ_VP_VR(mma_xvf64gernn,8) 1052 end interface 1053 public mma_xvf64gernn 1054 1055! mma_xvf64gernp 1056 VEC_SUB_VQ_VP_VU(mma_xvf64gernp,inout,1) 1057 VEC_SUB_VQ_VP_VR(mma_xvf64gernp,inout,8) 1058 interface mma_xvf64gernp 1059 procedure :: SUB_VQ_VP_VU(mma_xvf64gernp,1) 1060 procedure :: SUB_VQ_VP_VR(mma_xvf64gernp,8) 1061 end interface 1062 public mma_xvf64gernp 1063 1064! mma_xvf64gerpn 1065 VEC_SUB_VQ_VP_VU(mma_xvf64gerpn,inout,1) 1066 VEC_SUB_VQ_VP_VR(mma_xvf64gerpn,inout,8) 1067 interface mma_xvf64gerpn 1068 procedure :: SUB_VQ_VP_VU(mma_xvf64gerpn,1) 1069 procedure :: SUB_VQ_VP_VR(mma_xvf64gerpn,8) 1070 end interface 1071 public mma_xvf64gerpn 1072 1073! mma_xvf64gerpp 1074 VEC_SUB_VQ_VP_VU(mma_xvf64gerpp,inout,1) 1075 VEC_SUB_VQ_VP_VR(mma_xvf64gerpp,inout,8) 1076 interface mma_xvf64gerpp 1077 procedure :: SUB_VQ_VP_VU(mma_xvf64gerpp,1) 1078 procedure :: SUB_VQ_VP_VR(mma_xvf64gerpp,8) 1079 end interface 1080 public mma_xvf64gerpp 1081 1082#undef VEC_SUB_VQ_VP_VR 1083#undef VEC_SUB_VQ_VP_VU 1084#undef SUB_VQ_VP_VR 1085#undef SUB_VQ_VP_VU 1086 1087! mma_disassemble_acc 1088 procedure(sub_atvq) :: __ppc_mma_disassemble_acc 1089 interface mma_disassemble_acc 1090 procedure :: __ppc_mma_disassemble_acc 1091 end interface 1092 public mma_disassemble_acc 1093 1094! mma_disassemble_pair 1095 procedure(sub_atvp) :: __ppc_mma_disassemble_pair 1096 interface mma_disassemble_pair 1097 procedure :: __ppc_mma_disassemble_pair 1098 end interface 1099 public mma_disassemble_pair 1100 1101! mma_xxmfacc 1102 procedure(sub_vq) :: __ppc_mma_xxmfacc 1103 interface mma_xxmfacc 1104 procedure :: __ppc_mma_xxmfacc 1105 end interface 1106 public mma_xxmfacc 1107 1108! mma_xxmtacc 1109 procedure(sub_vq) :: __ppc_mma_xxmtacc 1110 interface mma_xxmtacc 1111 procedure :: __ppc_mma_xxmtacc 1112 end interface 1113 public mma_xxmtacc 1114 1115! mma_xxsetaccz 1116 procedure(sub_vq) :: __ppc_mma_xxsetaccz 1117 interface mma_xxsetaccz 1118 procedure :: __ppc_mma_xxsetaccz 1119 end interface 1120 public mma_xxsetaccz 1121 1122end module 1123