[SDAG] Generalize FSINCOS type legalization (NFC) (#116848)
[llvm-project.git] / flang / module / mma.f90
blob4c41822e000a3d91a7a45a8fbfc567174bae16ae
1 !===-- module/mma.f90 ------------------------------------------------------===!
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
7 !===------------------------------------------------------------------------===!
9 module mma
10 implicit none
11 private
13 abstract interface
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
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;
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;
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;
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;
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
63 #undef FUNC_VPI0VP
64 #undef FUNC_VPI0VR
65 #undef FUNC_VPI0VU
66 #undef FUNC_VPI0VI
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;
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;
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;
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
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
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
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 ;
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 ;
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 ;
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)
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
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 ;
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 ;
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 ;
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)
191 #undef ELEM_SUB_VQVRVR
192 #undef ELEM_SUB_VQVUVU
193 #undef ELEM_SUB_VQVIVI
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 ;
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 ;
211 ELEM_SUB_VQVPVU(inout,1)
212 ELEM_SUB_VQVPVR(inout,8)
213 ELEM_SUB_VQVPVU(out,1)
214 ELEM_SUB_VQVPVR(out,8)
216 #undef ELEM_SUB_VQVPVR
217 #undef ELEM_SUB_VQVPVU
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 ;
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 ;
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 ;
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)
247 #undef ELEM_SUB_VQVRVRVRVR
248 #undef ELEM_SUB_VQVUVUVUVU
249 #undef ELEM_SUB_VQVIVIVIVI
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 ;
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 ;
271 ELEM_SUB_VQVUVUII(inout,1)
272 ELEM_SUB_VQVRVRII(inout,4)
273 ELEM_SUB_VQVUVUII(out,1)
274 ELEM_SUB_VQVRVRII(out,4)
276 #undef ELEM_SUB_VQVRVRII
277 #undef ELEM_SUB_VQVUVUII
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 ;
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 ;
301 ELEM_SUB_VQVPVUII(inout,1)
302 ELEM_SUB_VQVPVRII(inout,8)
303 ELEM_SUB_VQVPVUII(out,1)
304 ELEM_SUB_VQVPVRII(out,8)
306 #undef ELEM_SUB_VQVPVRII
307 #undef ELEM_SUB_VQVPVUII
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 ;
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 ;
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)
337 #undef ELEM_SUB_VQVUVUIII
338 #undef ELEM_SUB_VQVIVIIII
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
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
357 end interface
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
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);
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
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
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
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);
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
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
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
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);
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
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
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
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
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);
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
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
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
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);
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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);
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
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
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
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
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
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
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
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);
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
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
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
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
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
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
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
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);
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1029 #define SUB_VQ_VP_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND
1030 #define SUB_VQ_VP_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND
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);
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
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
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
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
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
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
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
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
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
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
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
1122 end module