1 !===-- module/__ppc_intrinsics.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 __ppc_intrinsics
13 ! fmadd, fmsub, fnmadd, fnmsub
15 elemental
real(4) function func_r4r4r4r4(a
, x
, y
)
16 real(4), intent(in
) :: a
, x
, y
17 end function func_r4r4r4r4
18 elemental
real(8) function func_r8r8r8r8(a
, x
, y
)
19 real(8), intent(in
) :: a
, x
, y
20 end function func_r8r8r8r8
25 !! ================ 1 argument function interface ================
26 ! vector(i) function f(vector(i))
27 #define
ELEM_FUNC_VIVI(VKIND
) \
28 elemental
vector(integer(VKIND
)) function elem_func_vi##VKIND##vi##
VKIND(arg1
); \
29 vector(integer(VKIND
)), intent(in
) :: arg1
; \
32 ! vector(u) function f(vector(u))
33 #define
ELEM_FUNC_VUVU(VKIND
) \
34 elemental
vector(unsigned(VKIND
)) function elem_func_vu##VKIND##vu##
VKIND(arg1
); \
35 vector(unsigned(VKIND
)), intent(in
) :: arg1
; \
38 ! vector(r) function f(vector(r))
39 #define
ELEM_FUNC_VRVR_2(VKIND1
, VKIND2
) \
40 elemental
vector(real(VKIND1
)) function elem_func_vr##VKIND1##vr##
VKIND2(arg1
); \
41 vector(real(VKIND2
)), intent(in
) :: arg1
; \
43 #define
ELEM_FUNC_VRVR(VKIND
) ELEM_FUNC_VRVR_2(VKIND
, VKIND
)
45 ! vector(i) function f(i)
46 #define
ELEM_FUNC_VII_2(RKIND
, VKIND
) \
47 elemental
vector(integer(RKIND
)) function elem_func_vi##RKIND##i##
VKIND(arg1
); \
48 integer(VKIND
), intent(in
) :: arg1
; \
50 #define
ELEM_FUNC_VII(VKIND
) ELEM_FUNC_VII_2(VKIND
, VKIND
)
52 ! vector(r) function f(r)
53 #define
ELEM_FUNC_VRR(VKIND
) \
54 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##r##
VKIND(arg1
); \
55 real(VKIND
), intent(in
) :: arg1
; \
58 ELEM_FUNC_VIVI(1) ELEM_FUNC_VIVI(2) ELEM_FUNC_VIVI(4) ELEM_FUNC_VIVI(8)
60 ELEM_FUNC_VRVR_2(4,8) ELEM_FUNC_VRVR_2(8,4)
61 ELEM_FUNC_VRVR(4) ELEM_FUNC_VRVR(8)
62 ELEM_FUNC_VII_2(4,1) ELEM_FUNC_VII_2(4,2) ELEM_FUNC_VII_2(4,8)
63 ELEM_FUNC_VII(1) ELEM_FUNC_VII(2) ELEM_FUNC_VII(4) ELEM_FUNC_VII(8)
64 ELEM_FUNC_VRR(4) ELEM_FUNC_VRR(8)
68 #undef ELEM_FUNC_VII_2
70 #undef ELEM_FUNC_VRVR_2
74 !! ================ 2 arguments function interface ================
75 ! vector(i) function f(vector(i), vector(i))
76 #define
ELEM_FUNC_VIVIVI(VKIND
) \
77 elemental
vector(integer(VKIND
)) function elem_func_vi##VKIND##vi##VKIND##vi##
VKIND(arg1
, arg2
); \
78 vector(integer(VKIND
)), intent(in
) :: arg1
, arg2
; \
81 ! vector(u) function f(vector(i), vector(i))
82 #define
ELEM_FUNC_VUVIVI(VKIND
) \
83 elemental
vector(unsigned(VKIND
)) function elem_func_vu##VKIND##vi##VKIND##vi##
VKIND(arg1
, arg2
); \
84 vector(integer(VKIND
)), intent(in
) :: arg1
, arg2
; \
87 ! vector(i) function f(vector(i), vector(u))
88 #define
ELEM_FUNC_VIVIVU_2(VKIND1
, VKIND2
) \
89 elemental
vector(integer(VKIND1
)) function elem_func_vi##VKIND1##vi##VKIND1##vu##
VKIND2(arg1
, arg2
); \
90 vector(integer(VKIND1
)), intent(in
) :: arg1
; \
91 vector(unsigned(VKIND2
)), intent(in
) :: arg2
; \
93 #define
ELEM_FUNC_VIVIVU(VKIND
) ELEM_FUNC_VIVIVU_2(VKIND
, VKIND
)
95 ! vector(u) function f(vector(u), vector(u))
96 #define
ELEM_FUNC_VUVUVU_2(VKIND1
, VKIND2
) \
97 elemental
vector(unsigned(VKIND1
)) function elem_func_vu##VKIND1##vu##VKIND1##vu##
VKIND2(arg1
, arg2
); \
98 vector(unsigned(VKIND1
)), intent(in
) :: arg1
; \
99 vector(unsigned(VKIND2
)), intent(in
) :: arg2
; \
101 #define
ELEM_FUNC_VUVUVU(VKIND
) ELEM_FUNC_VUVUVU_2(VKIND
, VKIND
)
103 ! vector(r) function f(vector(r), vector(r))
104 #define
ELEM_FUNC_VRVRVR(VKIND
) \
105 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##vr##VKIND##vr##
VKIND(arg1
, arg2
); \
106 vector(real(VKIND
)), intent(in
) :: arg1
, arg2
; \
109 ! vector(r) function f(vector(r), vector(u))
110 #define
ELEM_FUNC_VRVRVU_2(VKIND1
, VKIND2
) \
111 elemental
vector(real(VKIND1
)) function elem_func_vr##VKIND1##vr##VKIND1##vu##
VKIND2(arg1
, arg2
); \
112 vector(real(VKIND1
)), intent(in
) :: arg1
; \
113 vector(unsigned(VKIND2
)), intent(in
) :: arg2
; \
116 ! vector(u) function f(vector(r), vector(r))
117 #define
ELEM_FUNC_VUVRVR(VKIND
) \
118 elemental
vector(unsigned(VKIND
)) function elem_func_vu##VKIND##vr##VKIND##vr##
VKIND(arg1
, arg2
); \
119 vector(real(VKIND
)), intent(in
) :: arg1
, arg2
; \
122 ! integer function f(vector(i), vector(i))
123 #define
ELEM_FUNC_IVIVI(RKIND
, VKIND
) \
124 elemental
integer(RKIND
) function elem_func_i##RKIND##vi##VKIND##vi##
VKIND(arg1
, arg2
); \
125 vector(integer(VKIND
)), intent(in
) :: arg1
, arg2
; \
128 ! integer function f(vector(u), vector(u))
129 #define
ELEM_FUNC_IVUVU(RKIND
, VKIND
) \
130 elemental
integer(RKIND
) function elem_func_i##RKIND##vu##VKIND##vu##
VKIND(arg1
, arg2
); \
131 vector(unsigned(VKIND
)), intent(in
) :: arg1
, arg2
; \
134 ! integer function f(vector(r), vector(r))
135 #define
ELEM_FUNC_IVRVR(RKIND
, VKIND
) \
136 elemental
integer(RKIND
) function elem_func_i##RKIND##vr##VKIND##vr##
VKIND(arg1
, arg2
); \
137 vector(real(VKIND
)), intent(in
) :: arg1
, arg2
; \
140 ! vector(r) function f(vector(i), i)
141 #define
ELEM_FUNC_VRVII(VKIND
) \
142 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##vi##VKIND##
i(arg1
, arg2
); \
143 vector(integer(VKIND
)), intent(in
) :: arg1
; \
144 integer(8), intent(in
) :: arg2
; \
145 !dir$ ignore_tkr(k) arg2; \
148 ! integer function f(vector(i), i)
149 #define
ELEM_FUNC_IVII(VKIND
) \
150 elemental
integer(VKIND
) function elem_func_i##VKIND##vi##VKIND##
i(arg1
, arg2
); \
151 vector(integer(VKIND
)), intent(in
) :: arg1
; \
152 integer(8), intent(in
) :: arg2
; \
153 !dir$ ignore_tkr(k) arg2; \
156 ! vector(r) function f(vector(u), i)
157 #define
ELEM_FUNC_VRVUI(VKIND
) \
158 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##vu##VKIND##
i(arg1
, arg2
); \
159 vector(unsigned(VKIND
)), intent(in
) :: arg1
; \
160 integer(8), intent(in
) :: arg2
; \
161 !dir$ ignore_tkr(k) arg2; \
164 ! real function f(vector(r), i)
165 #define
ELEM_FUNC_RVRI(VKIND
) \
166 elemental
real(VKIND
) function elem_func_r##VKIND##vr##VKIND##
i(arg1
, arg2
); \
167 vector(real(VKIND
)), intent(in
) :: arg1
; \
168 integer(8), intent(in
) :: arg2
; \
169 !dir$ ignore_tkr(k) arg2; \
172 ! vector(i) function f(vector(i), i)
173 #define
ELEM_FUNC_VIVII0(VKIND
) \
174 elemental
vector(integer(VKIND
)) function elem_func_vi##VKIND##vi##VKIND##
i0(arg1
, arg2
); \
175 vector(integer(VKIND
)), intent(in
) :: arg1
; \
176 integer(8), intent(in
) :: arg2
; \
177 !dir$ ignore_tkr(k) arg2; \
180 ! vector(u) function f(vector(u), i)
181 #define
ELEM_FUNC_VUVUI0(VKIND
) \
182 elemental
vector(unsigned(VKIND
)) function elem_func_vu##VKIND##vu##VKIND##
i0(arg1
, arg2
); \
183 vector(unsigned(VKIND
)), intent(in
) :: arg1
; \
184 integer(8), intent(in
) :: arg2
; \
185 !dir$ ignore_tkr(k) arg2; \
188 ! vector(r) function f(vector(r), i)
189 #define
ELEM_FUNC_VRVRI0(VKIND
) \
190 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##vr##VKIND##
i0(arg1
, arg2
); \
191 vector(real(VKIND
)), intent(in
) :: arg1
; \
192 integer(8), intent(in
) :: arg2
; \
193 !dir$ ignore_tkr(k) arg2; \
196 ! vector(i) function f(i, integer)
197 #define
FUNC_VII0I(VKIND
) \
198 pure
vector(integer(VKIND
)) function func_vi##VKIND##i0i##
VKIND(arg1
, arg2
); \
199 integer(8), intent(in
) :: arg1
; \
200 !dir$ ignore_tkr(k) arg1; \
201 integer(VKIND
), intent(in
) :: arg2
; \
202 !dir$ ignore_tkr(r) arg2; \
205 ! vector(r) function f(i, real)
206 #define
FUNC_VRI0R(VKIND
) \
207 pure
vector(real(VKIND
)) function func_vr##VKIND##i0r##
VKIND(arg1
, arg2
); \
208 integer(8), intent(in
) :: arg1
; \
209 !dir$ ignore_tkr(k) arg1; \
210 real(VKIND
), intent(in
) :: arg2
; \
211 !dir$ ignore_tkr(r) arg2; \
214 ! vector(i) function f(i, vector(i))
215 #define
FUNC_VII0VI(VKIND
) \
216 pure
vector(integer(VKIND
)) function func_vi##VKIND##i0vi##
VKIND(arg1
, arg2
); \
217 integer(8), intent(in
) :: arg1
; \
218 !dir$ ignore_tkr(k) arg1; \
219 vector(integer(VKIND
)), intent(in
) :: arg2
; \
220 !dir$ ignore_tkr(r) arg2; \
223 ! vector(u) function f(i, vector(u))
224 #define
FUNC_VUI0VU(VKIND
) \
225 pure
vector(unsigned(VKIND
)) function func_vu##VKIND##i0vu##
VKIND(arg1
, arg2
); \
226 integer(8), intent(in
) :: arg1
; \
227 !dir$ ignore_tkr(k) arg1; \
228 vector(unsigned(VKIND
)), intent(in
) :: arg2
; \
229 !dir$ ignore_tkr(r) arg2; \
232 ! vector(r) function f(i, vector(r))
233 #define
FUNC_VRI0VR(VKIND
) \
234 pure
vector(real(VKIND
)) function func_vr##VKIND##i0vr##
VKIND(arg1
, arg2
); \
235 integer(8), intent(in
) :: arg1
; \
236 !dir$ ignore_tkr(k) arg1; \
237 vector(real(VKIND
)), intent(in
) :: arg2
; \
238 !dir$ ignore_tkr(r) arg2; \
241 ! vector(u(1)) function f(i, i)
242 #define
FUNC_VU1I0I(KIND
) \
243 vector(unsigned(1)) function func_vu1i0i##
KIND(arg1
, arg2
); \
244 integer(8), intent(in
) :: arg1
; \
245 !dir$ ignore_tkr(k) arg1; \
246 integer(KIND
), intent(in
) :: arg2
; \
247 !dir$ ignore_tkr(r) arg2; \
250 ! vector(u(1)) function f(i, r)
251 #define
FUNC_VU1I0R(KIND
) \
252 vector(unsigned(1)) function func_vu1i0r##
KIND(arg1
, arg2
); \
253 integer(8), intent(in
) :: arg1
; \
254 !dir$ ignore_tkr(k) arg1; \
255 real(KIND
), intent(in
) :: arg2
; \
256 !dir$ ignore_tkr(r) arg2; \
259 ! __vector_pair function f(i, vector(i))
260 #define
FUNC_VPI0VI(VKIND
) \
261 pure __vector_pair
function func_vpi0vi##
VKIND(arg1
, arg2
); \
262 integer(8), intent(in
) :: arg1
; \
263 !dir$ ignore_tkr(k) arg1; \
264 vector(integer(VKIND
)), intent(in
) :: arg2
; \
265 !dir$ ignore_tkr(r) arg2; \
268 ! __vector_pair function f(i, vector(u))
269 #define
FUNC_VPI0VU(VKIND
) \
270 pure __vector_pair
function func_vpi0vu##
VKIND(arg1
, arg2
); \
271 integer(8), intent(in
) :: arg1
; \
272 !dir$ ignore_tkr(k) arg1; \
273 vector(unsigned(VKIND
)), intent(in
) :: arg2
; \
274 !dir$ ignore_tkr(r) arg2; \
277 ! __vector_pair function f(i, vector(r))
278 #define
FUNC_VPI0VR(VKIND
) \
279 pure __vector_pair
function func_vpi0vr##
VKIND(arg1
, arg2
); \
280 integer(8), intent(in
) :: arg1
; \
281 !dir$ ignore_tkr(k) arg1; \
282 vector(real(VKIND
)), intent(in
) :: arg2
; \
283 !dir$ ignore_tkr(r) arg2; \
286 ! __vector_pair function f(i, __vector_pair)
287 #define FUNC_VPI0VP \
288 pure __vector_pair
function func_vpi0vp(arg1
, arg2
); \
289 integer(8), intent(in
) :: arg1
; \
290 !dir$ ignore_tkr(k) arg1; \
291 __vector_pair
, intent(in
) :: arg2
; \
292 !dir$ ignore_tkr(r) arg2; \
295 ! The following macros are specific for the vec_convert(v, mold) intrinsics as
296 ! the argument keywords are different from the other vector intrinsics.
298 ! vector(i) function f(vector(i), vector(i))
299 #define
FUNC_VEC_CONVERT_VIVIVI(VKIND
) \
300 pure
vector(integer(VKIND
)) function func_vec_convert_vi##VKIND##vi##vi##
VKIND(v
, mold
); \
301 vector(integer(8)), intent(in
) :: v
; \
302 !dir$ ignore_tkr(tk) v; \
303 vector(integer(VKIND
)), intent(in
) :: mold
; \
304 !dir$ ignore_tkr(r) mold; \
307 ! vector(u) function f(vector(i), vector(u))
308 #define
FUNC_VEC_CONVERT_VUVIVU(VKIND
) \
309 pure
vector(unsigned(VKIND
)) function func_vec_convert_vu##VKIND##vi##vu##
VKIND(v
, mold
); \
310 vector(integer(8)), intent(in
) :: v
; \
311 !dir$ ignore_tkr(tk) v; \
312 vector(unsigned(VKIND
)), intent(in
) :: mold
; \
313 !dir$ ignore_tkr(r) mold; \
316 ! vector(r) function f(vector(i), vector(r))
317 #define
FUNC_VEC_CONVERT_VRVIVR(VKIND
) \
318 pure
vector(real(VKIND
)) function func_vec_convert_vr##VKIND##vi##vr##
VKIND(v
, mold
); \
319 vector(integer(8)), intent(in
) :: v
; \
320 !dir$ ignore_tkr(tk) v; \
321 vector(real(VKIND
)), intent(in
) :: mold
; \
322 !dir$ ignore_tkr(r) mold; \
325 FUNC_VEC_CONVERT_VIVIVI(1) FUNC_VEC_CONVERT_VIVIVI(2) FUNC_VEC_CONVERT_VIVIVI(4) FUNC_VEC_CONVERT_VIVIVI(8)
326 FUNC_VEC_CONVERT_VUVIVU(1) FUNC_VEC_CONVERT_VUVIVU(2) FUNC_VEC_CONVERT_VUVIVU(4) FUNC_VEC_CONVERT_VUVIVU(8)
327 FUNC_VEC_CONVERT_VRVIVR(4) FUNC_VEC_CONVERT_VRVIVR(8)
328 ELEM_FUNC_IVII(1) ELEM_FUNC_IVII(2) ELEM_FUNC_IVII(4) ELEM_FUNC_IVII(8)
329 ELEM_FUNC_RVRI(4) ELEM_FUNC_RVRI(8)
330 ELEM_FUNC_VIVIVI(1) ELEM_FUNC_VIVIVI(2) ELEM_FUNC_VIVIVI(4) ELEM_FUNC_VIVIVI(8)
331 ELEM_FUNC_VUVIVI(1) ELEM_FUNC_VUVIVI(2) ELEM_FUNC_VUVIVI(4) ELEM_FUNC_VUVIVI(8)
332 ELEM_FUNC_VUVUVU(1) ELEM_FUNC_VUVUVU(2) ELEM_FUNC_VUVUVU(4) ELEM_FUNC_VUVUVU(8)
333 ELEM_FUNC_VIVIVU(1) ELEM_FUNC_VIVIVU(2) ELEM_FUNC_VIVIVU(4) ELEM_FUNC_VIVIVU(8)
334 ELEM_FUNC_VIVIVU_2(1,2) ELEM_FUNC_VIVIVU_2(1,4)
335 ELEM_FUNC_VIVIVU_2(2,1) ELEM_FUNC_VIVIVU_2(2,4)
336 ELEM_FUNC_VIVIVU_2(4,1) ELEM_FUNC_VIVIVU_2(4,2)
337 ELEM_FUNC_VUVUVU_2(1,2) ELEM_FUNC_VUVUVU_2(1,4)
338 ELEM_FUNC_VUVUVU_2(2,1) ELEM_FUNC_VUVUVU_2(2,4)
339 ELEM_FUNC_VUVUVU_2(4,1) ELEM_FUNC_VUVUVU_2(4,2)
340 ELEM_FUNC_VRVRVU_2(4,1) ELEM_FUNC_VRVRVU_2(4,2)
341 ELEM_FUNC_VRVRVR(4) ELEM_FUNC_VRVRVR(8)
342 ELEM_FUNC_VUVRVR(4) ELEM_FUNC_VUVRVR(8)
343 ELEM_FUNC_IVIVI(4,1) ELEM_FUNC_IVIVI(4,2) ELEM_FUNC_IVIVI(4,4) ELEM_FUNC_IVIVI(4,8)
344 ELEM_FUNC_IVUVU(4,1) ELEM_FUNC_IVUVU(4,2) ELEM_FUNC_IVUVU(4,4) ELEM_FUNC_IVUVU(4,8)
345 ELEM_FUNC_IVRVR(4,4) ELEM_FUNC_IVRVR(4,8)
346 ELEM_FUNC_VRVII(4) ELEM_FUNC_VRVII(8)
347 ELEM_FUNC_VRVUI(4) ELEM_FUNC_VRVUI(8)
348 ELEM_FUNC_VIVII0(1) ELEM_FUNC_VIVII0(2) ELEM_FUNC_VIVII0(4) ELEM_FUNC_VIVII0(8)
349 ELEM_FUNC_VUVUI0(1) ELEM_FUNC_VUVUI0(2) ELEM_FUNC_VUVUI0(4) ELEM_FUNC_VUVUI0(8)
350 ELEM_FUNC_VRVRI0(4) ELEM_FUNC_VRVRI0(8)
351 FUNC_VII0VI(1) FUNC_VII0VI(2) FUNC_VII0VI(4) FUNC_VII0VI(8)
352 FUNC_VUI0VU(1) FUNC_VUI0VU(2) FUNC_VUI0VU(4) FUNC_VUI0VU(8)
353 FUNC_VRI0VR(4) FUNC_VRI0VR(8)
354 FUNC_VII0I(1) FUNC_VII0I(2) FUNC_VII0I(4) FUNC_VII0I(8)
355 FUNC_VRI0R(4) FUNC_VRI0R(8)
356 FUNC_VPI0VI(1) FUNC_VPI0VI(2) FUNC_VPI0VI(4) FUNC_VPI0VI(8)
357 FUNC_VPI0VU(1) FUNC_VPI0VU(2) FUNC_VPI0VU(4) FUNC_VPI0VU(8)
358 FUNC_VPI0VR(4) FUNC_VPI0VR(8)
360 FUNC_VU1I0I(1) FUNC_VU1I0I(2) FUNC_VU1I0I(4)
363 #undef FUNC_VEC_CONVERT_VRVIVR
364 #undef FUNC_VEC_CONVERT_VUVIVU
365 #undef FUNC_VEC_CONVERT_VIVIVI
377 #undef ELEM_FUNC_VRVRI0
378 #undef ELEM_FUNC_VUVUI0
379 #undef ELEM_FUNC_VIVII0
380 #undef ELEM_FUNC_RVRI
381 #undef ELEM_FUNC_VRVUI
382 #undef ELEM_FUNC_IVII
383 #undef ELEM_FUNC_VRVII
384 #undef ELEM_FUNC_IVRVR
385 #undef ELEM_FUNC_IVUVU
386 #undef ELEM_FUNC_IVIVI
387 #undef ELEM_FUNC_VUVRVR
388 #undef ELEM_FUNC_VRVRVU_2
389 #undef ELEM_FUNC_VRVRVR
390 #undef ELEM_FUNC_VUVUVU
391 #undef ELEM_FUNC_VUVUVU_2
392 #undef ELEM_FUNC_VIVIVU
393 #undef ELEM_FUNC_VIVIVU_2
394 #undef ELEM_FUNC_VUVIVI
395 #undef ELEM_FUNC_VIVIVI
397 !! ================ 3 arguments function interface ================
398 ! vector(r) function f(vector(r), vector(r), vector(r))
399 #define
ELEM_FUNC_VRVRVRVR(VKIND
) \
400 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##vr##VKIND##vr##VKIND##vr##
VKIND(arg1
, arg2
, arg3
); \
401 vector(real(VKIND
)), intent(in
) :: arg1
, arg2
, arg3
; \
404 ! vector(i) function f(vector(i), vector(i), vector(u))
405 #define
ELEM_FUNC_VIVIVIVU_2(VKIND
, UKIND
) \
406 elemental
vector(integer(VKIND
)) function elem_func_vi##VKIND##vi##VKIND##vi##VKIND##vu##
UKIND(arg1
, arg2
, arg3
); \
407 vector(integer(VKIND
)), intent(in
) :: arg1
, arg2
; \
408 vector(unsigned(UKIND
)), intent(in
) :: arg3
; \
410 #define
ELEM_FUNC_VIVIVIVU(VKIND
) ELEM_FUNC_VIVIVIVU_2(VKIND
, VKIND
)
412 ! vector(u) function f(vector(u), vector(u), vector(u))
413 #define
ELEM_FUNC_VUVUVUVU_2(VKIND
, UKIND
) \
414 elemental
vector(unsigned(VKIND
)) function elem_func_vu##VKIND##vu##VKIND##vu##VKIND##vu##
UKIND(arg1
, arg2
, arg3
); \
415 vector(unsigned(VKIND
)), intent(in
) :: arg1
, arg2
; \
416 vector(unsigned(UKIND
)), intent(in
) :: arg3
; \
418 #define
ELEM_FUNC_VUVUVUVU(VKIND
) ELEM_FUNC_VUVUVUVU_2(VKIND
, VKIND
)
420 ! vector(r) function f(vector(r), vector(r), vector(u))
421 #define
ELEM_FUNC_VRVRVRVU_2(VKIND
, UKIND
) \
422 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##vr##VKIND##vr##VKIND##vu##
UKIND(arg1
, arg2
, arg3
); \
423 vector(real(VKIND
)), intent(in
) :: arg1
, arg2
; \
424 vector(unsigned(UKIND
)), intent(in
) :: arg3
; \
426 #define
ELEM_FUNC_VRVRVRVU(VKIND
) ELEM_FUNC_VRVRVRVU_2(VKIND
, VKIND
)
428 ! vector(i) function f(vector(i), vector(i), i)
429 #define
ELEM_FUNC_VIVIVII(VKIND
) \
430 elemental
vector(integer(VKIND
)) function elem_func_vi##VKIND##vi##VKIND##vi##VKIND##
i(arg1
, arg2
, arg3
); \
431 vector(integer(VKIND
)), intent(in
) :: arg1
, arg2
; \
432 integer(8), intent(in
) :: arg3
; \
433 !dir$ ignore_tkr(k) arg3; \
436 ! vector(u) function f(vector(u), vector(u), i)
437 #define
ELEM_FUNC_VUVUVUI(VKIND
) \
438 elemental
vector(unsigned(VKIND
)) function elem_func_vu##VKIND##vu##VKIND##vu##VKIND##
i(arg1
, arg2
, arg3
); \
439 vector(unsigned(VKIND
)), intent(in
) :: arg1
, arg2
; \
440 integer(8), intent(in
) :: arg3
; \
441 !dir$ ignore_tkr(k) arg3; \
444 ! vector(r) function f(vector(r), vector(r), i)
445 #define
ELEM_FUNC_VRVRVRI(VKIND
) \
446 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##vr##VKIND##vr##VKIND##
i(arg1
, arg2
, arg3
); \
447 vector(real(VKIND
)), intent(in
) :: arg1
, arg2
; \
448 integer(8), intent(in
) :: arg3
; \
449 !dir$ ignore_tkr(k) arg3; \
452 ! vector(i) function f(i, vector(i), i)
453 #define
ELEM_FUNC_VIIVII(VKIND
) \
454 elemental
vector(integer(VKIND
)) function elem_func_vi##VKIND##i##VKIND##vi##VKIND##
i(arg1
, arg2
, arg3
); \
455 integer(VKIND
), intent(in
) :: arg1
; \
456 vector(integer(VKIND
)), intent(in
) :: arg2
; \
457 integer(8), intent(in
) :: arg3
; \
458 !dir$ ignore_tkr(k) arg3; \
461 ! vector(r) function f(r, vector(r), i)
462 #define
ELEM_FUNC_VRRVRI(VKIND
) \
463 elemental
vector(real(VKIND
)) function elem_func_vr##VKIND##r##VKIND##vr##VKIND##
i(arg1
, arg2
, arg3
); \
464 real(VKIND
), intent(in
) :: arg1
; \
465 vector(real(VKIND
)), intent(in
) :: arg2
; \
466 integer(8), intent(in
) :: arg3
; \
467 !dir$ ignore_tkr(k) arg3; \
470 ELEM_FUNC_VIVIVIVU(1) ELEM_FUNC_VIVIVIVU(2) ELEM_FUNC_VIVIVIVU(4) ELEM_FUNC_VIVIVIVU(8)
471 ELEM_FUNC_VUVUVUVU(1) ELEM_FUNC_VUVUVUVU(2) ELEM_FUNC_VUVUVUVU(4) ELEM_FUNC_VUVUVUVU(8)
472 ELEM_FUNC_VRVRVRVU(4) ELEM_FUNC_VRVRVRVU(8)
473 ELEM_FUNC_VIVIVIVU_2(2,1) ELEM_FUNC_VIVIVIVU_2(4,1) ELEM_FUNC_VIVIVIVU_2(8,1)
474 ELEM_FUNC_VUVUVUVU_2(2,1) ELEM_FUNC_VUVUVUVU_2(4,1) ELEM_FUNC_VUVUVUVU_2(8,1)
475 ELEM_FUNC_VRVRVRVU_2(4,1) ELEM_FUNC_VRVRVRVU_2(8,1)
476 ELEM_FUNC_VIIVII(1) ELEM_FUNC_VIIVII(2) ELEM_FUNC_VIIVII(4) ELEM_FUNC_VIIVII(8)
477 ELEM_FUNC_VRRVRI(4) ELEM_FUNC_VRRVRI(8)
478 ELEM_FUNC_VRVRVRVR(4) ELEM_FUNC_VRVRVRVR(8)
479 ELEM_FUNC_VIVIVII(1) ELEM_FUNC_VIVIVII(2) ELEM_FUNC_VIVIVII(4) ELEM_FUNC_VIVIVII(8)
480 ELEM_FUNC_VUVUVUI(1) ELEM_FUNC_VUVUVUI(2) ELEM_FUNC_VUVUVUI(4) ELEM_FUNC_VUVUVUI(8)
481 ELEM_FUNC_VRVRVRI(4) ELEM_FUNC_VRVRVRI(8)
483 #undef ELEM_FUNC_VRRVRI
484 #undef ELEM_FUNC_VIIVII
485 #undef ELEM_FUNC_VRVRVRI
486 #undef ELEM_FUNC_VUVUVUI
487 #undef ELEM_FUNC_VIVIVII
488 #undef ELEM_FUNC_VRVRVRVU
489 #undef ELEM_FUNC_VRVRVRVU_2
490 #undef ELEM_FUNC_VUVUVUVU
491 #undef ELEM_FUNC_VUVUVUVU_2
492 #undef ELEM_FUNC_VIVIVIVU
493 #undef ELEM_FUNC_VIVIVIVU_2
494 #undef ELEM_FUNC_VRVRVRVR
496 !! ================ 3 argument subroutine interfaces =================================
497 ! subroutine(vector(i), i, vector(i))
498 #define
SUB_VIIVI(VKIND
) \
499 pure
subroutine sub_vi##VKIND##ivi##
VKIND(arg1
, arg2
, arg3
); \
500 vector(integer(VKIND
)), intent(in
) :: arg1
; \
501 integer(8), intent(in
) :: arg2
; \
502 !dir$ ignore_tkr(k) arg2; \
503 vector(integer(VKIND
)), intent(in
) :: arg3
; \
504 !dir$ ignore_tkr(r) arg3; \
507 ! subroutine(vector(u), i, vector(u))
508 #define
SUB_VUIVU(VKIND
) \
509 pure
subroutine sub_vu##VKIND##ivu##
VKIND(arg1
, arg2
, arg3
); \
510 vector(unsigned(VKIND
)), intent(in
) :: arg1
; \
511 integer(8), intent(in
) :: arg2
; \
512 !dir$ ignore_tkr(k) arg2; \
513 vector(unsigned(VKIND
)), intent(in
) :: arg3
; \
514 !dir$ ignore_tkr(r) arg3; \
517 ! subroutine(vector(r), i, vector(r))
518 #define
SUB_VRIVR(VKIND
) \
519 pure
subroutine sub_vr##VKIND##ivr##
VKIND(arg1
, arg2
, arg3
); \
520 vector(real(VKIND
)), intent(in
) :: arg1
; \
521 integer(8), intent(in
) :: arg2
; \
522 !dir$ ignore_tkr(k) arg2; \
523 vector(real(VKIND
)), intent(in
) :: arg3
; \
524 !dir$ ignore_tkr(r) arg3; \
527 ! subroutine(vector(i), i, i)
528 #define
SUB_VIII(VKIND
) \
529 pure
subroutine sub_vi##VKIND##ii##
VKIND(arg1
, arg2
, arg3
); \
530 vector(integer(VKIND
)), intent(in
) :: arg1
; \
531 integer(8), intent(in
) :: arg2
; \
532 !dir$ ignore_tkr(k) arg2; \
533 integer(VKIND
), intent(out
) :: arg3
; \
534 !dir$ ignore_tkr(r) arg3; \
537 ! subroutine(vector(u), i, i)
538 #define
SUB_VUII(VKIND
) \
539 pure
subroutine sub_vu##VKIND##ii##
VKIND(arg1
, arg2
, arg3
); \
540 vector(unsigned(VKIND
)), intent(in
) :: arg1
; \
541 integer(8), intent(in
) :: arg2
; \
542 !dir$ ignore_tkr(k) arg2; \
543 integer(VKIND
), intent(out
) :: arg3
; \
544 !dir$ ignore_tkr(r) arg3; \
547 ! subroutine(vector(r), i, r)
548 #define
SUB_VRIR(VKIND
) \
549 pure
subroutine sub_vr##VKIND##ir##
VKIND(arg1
, arg2
, arg3
); \
550 vector(real(VKIND
)), intent(in
) :: arg1
; \
551 integer(8), intent(in
) :: arg2
; \
552 !dir$ ignore_tkr(k) arg2; \
553 real(VKIND
), intent(out
) :: arg3
; \
554 !dir$ ignore_tkr(r) arg3; \
557 ! subroutine(__vector_pair, i, __vector_pair)
558 pure
subroutine sub_vpi0vp(arg1
, arg2
, arg3
)
559 __vector_pair
, intent(in
) :: arg1
560 integer(8), intent(in
) :: arg2
561 !dir$ ignore_tkr(k) arg2
562 __vector_pair
, intent(out
) :: arg3
563 !dir$ ignore_tkr(r) arg3
566 ! subroutine(__vector_pair, i, vector(i))
567 #define
SUB_VPI0VI(VKIND
) \
568 pure
subroutine sub_vpi0vi##
VKIND(arg1
, arg2
, arg3
); \
569 __vector_pair
, intent(in
) :: arg1
; \
570 integer(8), intent(in
) :: arg2
; \
571 !dir$ ignore_tkr(k) arg2; \
572 vector(integer(VKIND
)), intent(out
) :: arg3
; \
573 !dir$ ignore_tkr(r) arg3; \
576 ! subroutine(__vector_pair, i, vector(u))
577 #define
SUB_VPI0VU(VKIND
) \
578 pure
subroutine sub_vpi0vu##
VKIND(arg1
, arg2
, arg3
); \
579 __vector_pair
, intent(in
) :: arg1
; \
580 integer(8), intent(in
) :: arg2
; \
581 !dir$ ignore_tkr(k) arg2; \
582 vector(unsigned(VKIND
)), intent(out
) :: arg3
; \
583 !dir$ ignore_tkr(r) arg3; \
586 ! subroutine(__vector_pair, i, vector(r))
587 #define
SUB_VPI0VR(VKIND
) \
588 pure
subroutine sub_vpi0vr##
VKIND(arg1
, arg2
, arg3
); \
589 __vector_pair
, intent(in
) :: arg1
; \
590 integer(8), intent(in
) :: arg2
; \
591 !dir$ ignore_tkr(k) arg2; \
592 vector(real(VKIND
)), intent(out
) :: arg3
; \
593 !dir$ ignore_tkr(r) arg3; \
596 ! subroutine(__vector_pair, i, i)
597 pure
subroutine sub_vpi0i0(arg1
, arg2
, arg3
)
598 __vector_pair
, intent(in
) :: arg1
599 integer(8), intent(in
) :: arg2
600 !dir$ ignore_tkr(k) arg2
601 integer(8), intent(out
) :: arg3
602 !dir$ ignore_tkr(kr) arg3
605 ! subroutine(__vector_pair, i, r)
606 pure
subroutine sub_vpi0r0(arg1
, arg2
, arg3
)
607 __vector_pair
, intent(in
) :: arg1
608 integer(8), intent(in
) :: arg2
609 !dir$ ignore_tkr(k) arg2
610 real(8), intent(out
) :: arg3
611 !dir$ ignore_tkr(kr) arg3
614 SUB_VIIVI(1) SUB_VIIVI(2) SUB_VIIVI(4) SUB_VIIVI(8)
615 SUB_VUIVU(1) SUB_VUIVU(2) SUB_VUIVU(4) SUB_VUIVU(8)
616 SUB_VRIVR(4) SUB_VRIVR(8)
617 SUB_VIII(1) SUB_VIII(2) SUB_VIII(4) SUB_VIII(8)
618 SUB_VUII(1) SUB_VUII(2) SUB_VUII(4) SUB_VUII(8)
619 SUB_VRIR(4) SUB_VRIR(8)
620 SUB_VPI0VI(1) SUB_VPI0VI(2) SUB_VPI0VI(4) SUB_VPI0VI(8)
621 SUB_VPI0VU(1) SUB_VPI0VU(2) SUB_VPI0VU(4) SUB_VPI0VU(8)
622 SUB_VPI0VR(4) SUB_VPI0VR(8)
636 procedure(func_r4r4r4r4
) :: __ppc_fmadd_r4
637 procedure(func_r8r8r8r8
) :: __ppc_fmadd_r8
639 procedure
:: __ppc_fmadd_r4
640 procedure
:: __ppc_fmadd_r8
644 procedure(func_r4r4r4r4
) :: __ppc_fmsub_r4
645 procedure(func_r8r8r8r8
) :: __ppc_fmsub_r8
647 procedure
:: __ppc_fmsub_r4
648 procedure
:: __ppc_fmsub_r8
652 procedure(func_r4r4r4r4
) :: __ppc_fnmadd_r4
653 procedure(func_r8r8r8r8
) :: __ppc_fnmadd_r8
655 procedure
:: __ppc_fnmadd_r4
656 procedure
:: __ppc_fnmadd_r8
660 procedure(func_r4r4r4r4
) :: __ppc_fnmsub_r4
661 procedure(func_r8r8r8r8
) :: __ppc_fnmsub_r8
663 procedure
:: __ppc_fnmsub_r4
664 procedure
:: __ppc_fnmsub_r8
668 ! fctid, fctidz, fctiw, fctiwz, fctudz, fctuwz
670 elemental
real(4) function func_r4r4x(x
)
671 real(4), intent(in
) :: x
672 end function func_r4r4x
673 elemental
real(8) function func_r8r8x(x
)
674 real(8), intent(in
) :: x
675 end function func_r8r8x
678 procedure(func_r8r8x
) :: __ppc_fctid
680 procedure
:: __ppc_fctid
684 procedure(func_r8r8x
) :: __ppc_fctidz
686 procedure
:: __ppc_fctidz
690 procedure(func_r8r8x
) :: __ppc_fctiw
692 procedure
:: __ppc_fctiw
696 procedure(func_r8r8x
) :: __ppc_fctiwz
698 procedure
:: __ppc_fctiwz
702 procedure(func_r8r8x
) :: __ppc_fctudz
704 procedure
:: __ppc_fctudz
708 procedure(func_r8r8x
) :: __ppc_fctuwz
710 procedure
:: __ppc_fctuwz
716 elemental
real(8) function func_r8r8i(i
)
717 real(8), intent(in
) :: i
718 end function func_r8r8i
721 procedure(func_r8r8i
) :: __ppc_fcfi
723 procedure
:: __ppc_fcfi
727 procedure(func_r8r8i
) :: __ppc_fcfid
729 procedure
:: __ppc_fcfid
733 procedure(func_r8r8i
) :: __ppc_fcfud
735 procedure
:: __ppc_fcfud
740 procedure(func_r4r4x
) :: __ppc_fnabs_r4
741 procedure(func_r8r8x
) :: __ppc_fnabs_r8
743 procedure
:: __ppc_fnabs_r4
744 procedure
:: __ppc_fnabs_r8
749 procedure(func_r8r8x
) :: __ppc_fre
751 procedure
:: __ppc_fre
755 procedure(func_r4r4x
) :: __ppc_fres
757 procedure
:: __ppc_fres
762 procedure(func_r8r8x
) :: __ppc_frsqrte
764 procedure
:: __ppc_frsqrte
765 end interface frsqrte
768 procedure(func_r4r4x
) :: __ppc_frsqrtes
770 procedure
:: __ppc_frsqrtes
771 end interface frsqrtes
776 subroutine __ppc_mtfsf(mask
, r
)
777 integer(4), intent(in
) :: mask
778 real(8), intent(in
) :: r
779 end subroutine __ppc_mtfsf
784 subroutine __ppc_mtfsfi(bf
, i
)
785 integer(4), intent(in
) :: bf
786 integer(4), intent(in
) :: i
787 end subroutine __ppc_mtfsfi
791 !-----------------------------
792 ! vector function(vector/i/r)
793 !-----------------------------
794 #define
VI_VI(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##vi##VKIND
795 #define
VU_VU(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##vu##VKIND
796 #define
VR_VR_2(NAME
, VKIND1
, VKIND2
) __ppc_##NAME##_vr##VKIND1##vr##VKIND2
797 #define
VR_VR(NAME
, VKIND
) VR_VR_2(NAME
, VKIND
, VKIND
)
798 #define
VI_I_2(NAME
, RKIND
, VKIND
) __ppc_##NAME##_vi##RKIND##i##VKIND
799 #define
VI_I(NAME
, VKIND
) VI_I_2(NAME
, VKIND
, VKIND
)
800 #define
VR_R(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##r##VKIND
802 #define
VEC_VI_VI(NAME
, VKIND
) \
803 procedure(elem_func_vi##VKIND##vi##VKIND
) :: VI_VI(NAME
, VKIND
);
804 #define
VEC_VU_VU(NAME
, VKIND
) \
805 procedure(elem_func_vu##VKIND##vu##VKIND
) :: VU_VU(NAME
, VKIND
);
806 #define
VEC_VR_VR_2(NAME
, VKIND1
, VKIND2
) \
807 procedure(elem_func_vr##VKIND1##vr##VKIND2
) :: VR_VR_2(NAME
, VKIND1
, VKIND2
);
808 #define
VEC_VR_VR(NAME
, VKIND
) VEC_VR_VR_2(NAME
, VKIND
, VKIND
)
809 #define
VEC_VI_I_2(NAME
, RKIND
, VKIND
) \
810 procedure(elem_func_vi##RKIND##i##VKIND
) :: VI_I_2(NAME
, RKIND
, VKIND
);
811 #define
VEC_VI_I(NAME
, VKIND
) VEC_VI_I_2(NAME
, VKIND
, VKIND
)
812 #define
VEC_VR_R(NAME
, VKIND
) \
813 procedure(elem_func_vr##VKIND##r##VKIND
) :: VR_R(NAME
, VKIND
);
816 VEC_VI_VI(vec_abs
,1) VEC_VI_VI(vec_abs
,2) VEC_VI_VI(vec_abs
,4) VEC_VI_VI(vec_abs
,8)
817 VEC_VR_VR(vec_abs
,4) VEC_VR_VR(vec_abs
,8)
819 procedure
:: VI_VI(vec_abs
,1), VI_VI(vec_abs
,2), VI_VI(vec_abs
,4), VI_VI(vec_abs
,8)
820 procedure
:: VR_VR(vec_abs
,4), VR_VR(vec_abs
,8)
821 end interface vec_abs
825 VEC_VR_VR_2(vec_cvf
,4,8) VEC_VR_VR_2(vec_cvf
,8,4)
827 procedure
:: VR_VR_2(vec_cvf
,4,8), VR_VR_2(vec_cvf
,8,4)
828 end interface vec_cvf
832 VEC_VU_VU(vec_cvbf16spn
,1)
833 interface vec_cvbf16spn
834 procedure
:: VU_VU(vec_cvbf16spn
,1)
839 VEC_VU_VU(vec_cvspbf16_
,1)
840 interface vec_cvspbf16
841 procedure
:: VU_VU(vec_cvspbf16_
,1)
846 VEC_VI_I(vec_splats
,1) VEC_VI_I(vec_splats
,2) VEC_VI_I(vec_splats
,4) VEC_VI_I(vec_splats
,8)
847 VEC_VR_R(vec_splats
,4) VEC_VR_R(vec_splats
,8)
849 procedure
:: VI_I(vec_splats
,1), VI_I(vec_splats
,2), VI_I(vec_splats
,4), VI_I(vec_splats
,8)
850 procedure
:: VR_R(vec_splats
,4), VR_R(vec_splats
,8)
851 end interface vec_splats
855 VEC_VI_I_2(vec_splat_s32_
,4,1) VEC_VI_I_2(vec_splat_s32_
,4,2) VEC_VI_I_2(vec_splat_s32_
,4,4) VEC_VI_I_2(vec_splat_s32_
,4,8)
856 interface vec_splat_s32
857 procedure
:: VI_I_2(vec_splat_s32_
,4,1), VI_I_2(vec_splat_s32_
,4,2), VI_I_2(vec_splat_s32_
,4,4), VI_I_2(vec_splat_s32_
,4,8)
858 end interface vec_splat_s32
859 public
:: vec_splat_s32
876 !---------------------------------
877 ! vector function(vector, vector)
878 !---------------------------------
879 #define
VI_VI_VI(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND
880 #define
VU_VI_VI(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##vi##VKIND##vi##VKIND
881 #define
VU_VU_VU_2(NAME
, VKIND1
, VKIND2
) __ppc_##NAME##_vu##VKIND1##vu##VKIND1##vu##VKIND2
882 #define
VU_VU_VU(NAME
, VKIND
) VU_VU_VU_2(NAME
, VKIND
, VKIND
)
883 #define
VI_VI_VU_2(NAME
, VKIND1
, VKIND2
) __ppc_##NAME##_vi##VKIND1##vi##VKIND1##vu##VKIND2
884 #define
VI_VI_VU(NAME
, VKIND
) VI_VI_VU_2(NAME
, VKIND
, VKIND
)
885 #define
VR_VR_VR(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND
886 #define
VR_VR_VU_2(NAME
, VKIND1
, VKIND2
) __ppc_##NAME##_vr##VKIND1##vr##VKIND1##vu##VKIND2
887 #define
VU_VR_VR(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##vr##VKIND##vr##VKIND
889 #define
VEC_VI_VI_VI(NAME
, VKIND
) \
890 procedure(elem_func_vi##VKIND##vi##VKIND##vi##VKIND
) :: VI_VI_VI(NAME
, VKIND
);
891 #define
VEC_VU_VI_VI(NAME
, VKIND
) \
892 procedure(elem_func_vu##VKIND##vi##VKIND##vi##VKIND
) :: VU_VI_VI(NAME
, VKIND
);
893 #define
VEC_VU_VU_VU_2(NAME
, VKIND1
, VKIND2
) \
894 procedure(elem_func_vu##VKIND1##vu##VKIND1##vu##VKIND2
) :: VU_VU_VU_2(NAME
, VKIND1
, VKIND2
);
895 #define
VEC_VU_VU_VU(NAME
, VKIND
) VEC_VU_VU_VU_2(NAME
, VKIND
, VKIND
)
896 #define
VEC_VI_VI_VU_2(NAME
, VKIND1
, VKIND2
) \
897 procedure(elem_func_vi##VKIND1##vi##VKIND1##vu##VKIND2
) :: VI_VI_VU_2(NAME
, VKIND1
, VKIND2
);
898 #define
VEC_VI_VI_VU(NAME
, VKIND
) VEC_VI_VI_VU_2(NAME
, VKIND
, VKIND
)
899 #define
VEC_VR_VR_VR(NAME
, VKIND
) \
900 procedure(elem_func_vr##VKIND##vr##VKIND##vr##VKIND
) :: VR_VR_VR(NAME
, VKIND
);
901 #define
VEC_VU_VR_VR(NAME
, VKIND
) \
902 procedure(elem_func_vu##VKIND##vr##VKIND##vr##VKIND
) :: VU_VR_VR(NAME
, VKIND
);
903 #define
VEC_VR_VR_VU(NAME
, VKIND1
, VKIND2
) \
904 procedure(elem_func_vr##VKIND1##vr##VKIND1##vu##VKIND2
) :: VR_VR_VU_2(NAME
, VKIND1
, VKIND2
);
907 VEC_VI_VI_VI(vec_add
,1) VEC_VI_VI_VI(vec_add
,2) VEC_VI_VI_VI(vec_add
,4) VEC_VI_VI_VI(vec_add
,8)
908 VEC_VU_VU_VU(vec_add
,1) VEC_VU_VU_VU(vec_add
,2) VEC_VU_VU_VU(vec_add
,4) VEC_VU_VU_VU(vec_add
,8)
909 VEC_VR_VR_VR(vec_add
,4) VEC_VR_VR_VR(vec_add
,8)
911 procedure
:: VI_VI_VI(vec_add
,1), VI_VI_VI(vec_add
,2), VI_VI_VI(vec_add
,4), VI_VI_VI(vec_add
,8)
912 procedure
:: VU_VU_VU(vec_add
,1), VU_VU_VU(vec_add
,2), VU_VU_VU(vec_add
,4), VU_VU_VU(vec_add
,8)
913 procedure
:: VR_VR_VR(vec_add
,4), VR_VR_VR(vec_add
,8)
914 end interface vec_add
918 VEC_VI_VI_VI(vec_and
,1) VEC_VI_VI_VI(vec_and
,2) VEC_VI_VI_VI(vec_and
,4) VEC_VI_VI_VI(vec_and
,8)
919 VEC_VU_VU_VU(vec_and
,1) VEC_VU_VU_VU(vec_and
,2) VEC_VU_VU_VU(vec_and
,4) VEC_VU_VU_VU(vec_and
,8)
920 VEC_VR_VR_VR(vec_and
,4) VEC_VR_VR_VR(vec_and
,8)
922 procedure
:: VI_VI_VI(vec_and
,1), VI_VI_VI(vec_and
,2), VI_VI_VI(vec_and
,4), VI_VI_VI(vec_and
,8)
923 procedure
:: VU_VU_VU(vec_and
,1), VU_VU_VU(vec_and
,2), VU_VU_VU(vec_and
,4), VU_VU_VU(vec_and
,8)
924 procedure
:: VR_VR_VR(vec_and
,4), VR_VR_VR(vec_and
,8)
925 end interface vec_and
929 VEC_VU_VI_VI(vec_cmpge
,1) VEC_VU_VI_VI(vec_cmpge
,2) VEC_VU_VI_VI(vec_cmpge
,4) VEC_VU_VI_VI(vec_cmpge
,8)
930 VEC_VU_VU_VU(vec_cmpge
,1) VEC_VU_VU_VU(vec_cmpge
,2) VEC_VU_VU_VU(vec_cmpge
,4) VEC_VU_VU_VU(vec_cmpge
,8)
931 VEC_VU_VR_VR(vec_cmpge
,4) VEC_VU_VR_VR(vec_cmpge
,8)
933 procedure
:: VU_VI_VI(vec_cmpge
,1), VU_VI_VI(vec_cmpge
,2), VU_VI_VI(vec_cmpge
,4), VU_VI_VI(vec_cmpge
,8)
934 procedure
:: VU_VU_VU(vec_cmpge
,1), VU_VU_VU(vec_cmpge
,2), VU_VU_VU(vec_cmpge
,4), VU_VU_VU(vec_cmpge
,8)
935 procedure
:: VU_VR_VR(vec_cmpge
,4), VU_VR_VR(vec_cmpge
,8)
936 end interface vec_cmpge
940 VEC_VU_VI_VI(vec_cmpgt
,1) VEC_VU_VI_VI(vec_cmpgt
,2) VEC_VU_VI_VI(vec_cmpgt
,4) VEC_VU_VI_VI(vec_cmpgt
,8)
941 VEC_VU_VU_VU(vec_cmpgt
,1) VEC_VU_VU_VU(vec_cmpgt
,2) VEC_VU_VU_VU(vec_cmpgt
,4) VEC_VU_VU_VU(vec_cmpgt
,8)
942 VEC_VU_VR_VR(vec_cmpgt
,4) VEC_VU_VR_VR(vec_cmpgt
,8)
944 procedure
:: VU_VI_VI(vec_cmpgt
,1), VU_VI_VI(vec_cmpgt
,2), VU_VI_VI(vec_cmpgt
,4), VU_VI_VI(vec_cmpgt
,8)
945 procedure
:: VU_VU_VU(vec_cmpgt
,1), VU_VU_VU(vec_cmpgt
,2), VU_VU_VU(vec_cmpgt
,4), VU_VU_VU(vec_cmpgt
,8)
946 procedure
:: VU_VR_VR(vec_cmpgt
,4), VU_VR_VR(vec_cmpgt
,8)
947 end interface vec_cmpgt
951 VEC_VU_VI_VI(vec_cmple
,1) VEC_VU_VI_VI(vec_cmple
,2) VEC_VU_VI_VI(vec_cmple
,4) VEC_VU_VI_VI(vec_cmple
,8)
952 VEC_VU_VU_VU(vec_cmple
,1) VEC_VU_VU_VU(vec_cmple
,2) VEC_VU_VU_VU(vec_cmple
,4) VEC_VU_VU_VU(vec_cmple
,8)
953 VEC_VU_VR_VR(vec_cmple
,4) VEC_VU_VR_VR(vec_cmple
,8)
955 procedure
:: VU_VI_VI(vec_cmple
,1), VU_VI_VI(vec_cmple
,2), VU_VI_VI(vec_cmple
,4), VU_VI_VI(vec_cmple
,8)
956 procedure
:: VU_VU_VU(vec_cmple
,1), VU_VU_VU(vec_cmple
,2), VU_VU_VU(vec_cmple
,4), VU_VU_VU(vec_cmple
,8)
957 procedure
:: VU_VR_VR(vec_cmple
,4), VU_VR_VR(vec_cmple
,8)
958 end interface vec_cmple
962 VEC_VU_VI_VI(vec_cmplt
,1) VEC_VU_VI_VI(vec_cmplt
,2) VEC_VU_VI_VI(vec_cmplt
,4) VEC_VU_VI_VI(vec_cmplt
,8)
963 VEC_VU_VU_VU(vec_cmplt
,1) VEC_VU_VU_VU(vec_cmplt
,2) VEC_VU_VU_VU(vec_cmplt
,4) VEC_VU_VU_VU(vec_cmplt
,8)
964 VEC_VU_VR_VR(vec_cmplt
,4) VEC_VU_VR_VR(vec_cmplt
,8)
966 procedure
:: VU_VI_VI(vec_cmplt
,1), VU_VI_VI(vec_cmplt
,2), VU_VI_VI(vec_cmplt
,4), VU_VI_VI(vec_cmplt
,8)
967 procedure
:: VU_VU_VU(vec_cmplt
,1), VU_VU_VU(vec_cmplt
,2), VU_VU_VU(vec_cmplt
,4), VU_VU_VU(vec_cmplt
,8)
968 procedure
:: VU_VR_VR(vec_cmplt
,4), VU_VR_VR(vec_cmplt
,8)
969 end interface vec_cmplt
973 ! Argument 'v' has the `ignore_tkr` directive
974 #define
CONVERT_VI_VI_VI(VKIND
) __ppc_vec_convert_vi##VKIND##vi##vi##VKIND
975 #define
CONVERT_VU_VI_VU(VKIND
) __ppc_vec_convert_vu##VKIND##vi##vu##VKIND
976 #define
CONVERT_VR_VI_VR(VKIND
) __ppc_vec_convert_vr##VKIND##vi##vr##VKIND
978 #define
VEC_CONVERT_VI_VI_VI(VKIND
) \
979 procedure(func_vec_convert_vi##VKIND##vi##vi##VKIND
) :: CONVERT_VI_VI_VI(VKIND
);
980 #define
VEC_CONVERT_VU_VI_VU(VKIND
) \
981 procedure(func_vec_convert_vu##VKIND##vi##vu##VKIND
) :: CONVERT_VU_VI_VU(VKIND
);
982 #define
VEC_CONVERT_VR_VI_VR(VKIND
) \
983 procedure(func_vec_convert_vr##VKIND##vi##vr##VKIND
) :: CONVERT_VR_VI_VR(VKIND
);
985 VEC_CONVERT_VI_VI_VI(1) VEC_CONVERT_VI_VI_VI(2) VEC_CONVERT_VI_VI_VI(4) VEC_CONVERT_VI_VI_VI(8)
986 VEC_CONVERT_VU_VI_VU(1) VEC_CONVERT_VU_VI_VU(2) VEC_CONVERT_VU_VI_VU(4) VEC_CONVERT_VU_VI_VU(8)
987 VEC_CONVERT_VR_VI_VR(4) VEC_CONVERT_VR_VI_VR(8)
988 interface vec_convert
989 procedure
:: CONVERT_VI_VI_VI(1), CONVERT_VI_VI_VI(2), CONVERT_VI_VI_VI(4), CONVERT_VI_VI_VI(8)
990 procedure
:: CONVERT_VU_VI_VU(1), CONVERT_VU_VI_VU(2), CONVERT_VU_VI_VU(4), CONVERT_VU_VI_VU(8)
991 procedure
:: CONVERT_VR_VI_VR(4), CONVERT_VR_VI_VR(8)
992 end interface vec_convert
993 public
:: vec_convert
995 #undef VEC_CONVERT_VR_VI_VR
996 #undef VEC_CONVERT_VU_VI_VU
997 #undef VEC_CONVERT_VI_VI_VI
998 #undef CONVERT_VR_VI_VR
999 #undef CONVERT_VU_VI_VU
1000 #undef CONVERT_VI_VI_VI
1003 VEC_VI_VI_VI(vec_max
,1) VEC_VI_VI_VI(vec_max
,2) VEC_VI_VI_VI(vec_max
,4) VEC_VI_VI_VI(vec_max
,8)
1004 VEC_VU_VU_VU(vec_max
,1) VEC_VU_VU_VU(vec_max
,2) VEC_VU_VU_VU(vec_max
,4) VEC_VU_VU_VU(vec_max
,8)
1005 VEC_VR_VR_VR(vec_max
,4) VEC_VR_VR_VR(vec_max
,8)
1007 procedure
:: VI_VI_VI(vec_max
,1), VI_VI_VI(vec_max
,2), VI_VI_VI(vec_max
,4), VI_VI_VI(vec_max
,8)
1008 procedure
:: VU_VU_VU(vec_max
,1), VU_VU_VU(vec_max
,2), VU_VU_VU(vec_max
,4), VU_VU_VU(vec_max
,8)
1009 procedure
:: VR_VR_VR(vec_max
,4), VR_VR_VR(vec_max
,8)
1010 end interface vec_max
1014 VEC_VI_VI_VI(vec_mergeh
,1) VEC_VI_VI_VI(vec_mergeh
,2) VEC_VI_VI_VI(vec_mergeh
,4) VEC_VI_VI_VI(vec_mergeh
,8)
1015 VEC_VU_VU_VU(vec_mergeh
,1) VEC_VU_VU_VU(vec_mergeh
,2) VEC_VU_VU_VU(vec_mergeh
,4) VEC_VU_VU_VU(vec_mergeh
,8)
1016 VEC_VR_VR_VR(vec_mergeh
,4) VEC_VR_VR_VR(vec_mergeh
,8)
1017 interface vec_mergeh
1018 procedure
:: VI_VI_VI(vec_mergeh
,1), VI_VI_VI(vec_mergeh
,2), VI_VI_VI(vec_mergeh
,4), VI_VI_VI(vec_mergeh
,8)
1019 procedure
:: VU_VU_VU(vec_mergeh
,1), VU_VU_VU(vec_mergeh
,2), VU_VU_VU(vec_mergeh
,4), VU_VU_VU(vec_mergeh
,8)
1020 procedure
:: VR_VR_VR(vec_mergeh
,4), VR_VR_VR(vec_mergeh
,8)
1021 end interface vec_mergeh
1022 public
:: vec_mergeh
1025 VEC_VI_VI_VI(vec_mergel
,1) VEC_VI_VI_VI(vec_mergel
,2) VEC_VI_VI_VI(vec_mergel
,4) VEC_VI_VI_VI(vec_mergel
,8)
1026 VEC_VU_VU_VU(vec_mergel
,1) VEC_VU_VU_VU(vec_mergel
,2) VEC_VU_VU_VU(vec_mergel
,4) VEC_VU_VU_VU(vec_mergel
,8)
1027 VEC_VR_VR_VR(vec_mergel
,4) VEC_VR_VR_VR(vec_mergel
,8)
1028 interface vec_mergel
1029 procedure
:: VI_VI_VI(vec_mergel
,1), VI_VI_VI(vec_mergel
,2), VI_VI_VI(vec_mergel
,4), VI_VI_VI(vec_mergel
,8)
1030 procedure
:: VU_VU_VU(vec_mergel
,1), VU_VU_VU(vec_mergel
,2), VU_VU_VU(vec_mergel
,4), VU_VU_VU(vec_mergel
,8)
1031 procedure
:: VR_VR_VR(vec_mergel
,4), VR_VR_VR(vec_mergel
,8)
1032 end interface vec_mergel
1033 public
:: vec_mergel
1036 VEC_VI_VI_VI(vec_min
,1) VEC_VI_VI_VI(vec_min
,2) VEC_VI_VI_VI(vec_min
,4) VEC_VI_VI_VI(vec_min
,8)
1037 VEC_VU_VU_VU(vec_min
,1) VEC_VU_VU_VU(vec_min
,2) VEC_VU_VU_VU(vec_min
,4) VEC_VU_VU_VU(vec_min
,8)
1038 VEC_VR_VR_VR(vec_min
,4) VEC_VR_VR_VR(vec_min
,8)
1040 procedure
:: VI_VI_VI(vec_min
,1), VI_VI_VI(vec_min
,2), VI_VI_VI(vec_min
,4), VI_VI_VI(vec_min
,8)
1041 procedure
:: VU_VU_VU(vec_min
,1), VU_VU_VU(vec_min
,2), VU_VU_VU(vec_min
,4), VU_VU_VU(vec_min
,8)
1042 procedure
:: VR_VR_VR(vec_min
,4), VR_VR_VR(vec_min
,8)
1043 end interface vec_min
1047 VEC_VI_VI_VI(vec_mul
,1) VEC_VI_VI_VI(vec_mul
,2) VEC_VI_VI_VI(vec_mul
,4) VEC_VI_VI_VI(vec_mul
,8)
1048 VEC_VU_VU_VU(vec_mul
,1) VEC_VU_VU_VU(vec_mul
,2) VEC_VU_VU_VU(vec_mul
,4) VEC_VU_VU_VU(vec_mul
,8)
1049 VEC_VR_VR_VR(vec_mul
,4) VEC_VR_VR_VR(vec_mul
,8)
1051 procedure
:: VI_VI_VI(vec_mul
,1), VI_VI_VI(vec_mul
,2), VI_VI_VI(vec_mul
,4), VI_VI_VI(vec_mul
,8)
1052 procedure
:: VU_VU_VU(vec_mul
,1), VU_VU_VU(vec_mul
,2), VU_VU_VU(vec_mul
,4), VU_VU_VU(vec_mul
,8)
1053 procedure
:: VR_VR_VR(vec_mul
,4), VR_VR_VR(vec_mul
,8)
1054 end interface vec_mul
1058 VEC_VI_VI_VI(vec_sub
,1) VEC_VI_VI_VI(vec_sub
,2) VEC_VI_VI_VI(vec_sub
,4) VEC_VI_VI_VI(vec_sub
,8)
1059 VEC_VU_VU_VU(vec_sub
,1) VEC_VU_VU_VU(vec_sub
,2) VEC_VU_VU_VU(vec_sub
,4) VEC_VU_VU_VU(vec_sub
,8)
1060 VEC_VR_VR_VR(vec_sub
,4) VEC_VR_VR_VR(vec_sub
,8)
1062 procedure
:: VI_VI_VI(vec_sub
,1), VI_VI_VI(vec_sub
,2), VI_VI_VI(vec_sub
,4), VI_VI_VI(vec_sub
,8)
1063 procedure
:: VU_VU_VU(vec_sub
,1), VU_VU_VU(vec_sub
,2), VU_VU_VU(vec_sub
,4), VU_VU_VU(vec_sub
,8)
1064 procedure
:: VR_VR_VR(vec_sub
,4), VR_VR_VR(vec_sub
,8)
1065 end interface vec_sub
1069 VEC_VI_VI_VU(vec_sl
,1) VEC_VI_VI_VU(vec_sl
,2) VEC_VI_VI_VU(vec_sl
,4) VEC_VI_VI_VU(vec_sl
,8)
1070 VEC_VU_VU_VU(vec_sl
,1) VEC_VU_VU_VU(vec_sl
,2) VEC_VU_VU_VU(vec_sl
,4) VEC_VU_VU_VU(vec_sl
,8)
1072 procedure
:: VI_VI_VU(vec_sl
,1), VI_VI_VU(vec_sl
,2), VI_VI_VU(vec_sl
,4), VI_VI_VU(vec_sl
,8)
1073 procedure
:: VU_VU_VU(vec_sl
,1), VU_VU_VU(vec_sl
,2), VU_VU_VU(vec_sl
,4), VU_VU_VU(vec_sl
,8)
1074 end interface vec_sl
1078 VEC_VI_VI_VU_2(vec_sll
,1,1) VEC_VI_VI_VU_2(vec_sll
,2,1) VEC_VI_VI_VU_2(vec_sll
,4,1)
1079 VEC_VI_VI_VU_2(vec_sll
,1,2) VEC_VI_VI_VU_2(vec_sll
,2,2) VEC_VI_VI_VU_2(vec_sll
,4,2)
1080 VEC_VI_VI_VU_2(vec_sll
,1,4) VEC_VI_VI_VU_2(vec_sll
,2,4) VEC_VI_VI_VU_2(vec_sll
,4,4)
1081 VEC_VU_VU_VU_2(vec_sll
,1,1) VEC_VU_VU_VU_2(vec_sll
,2,1) VEC_VU_VU_VU_2(vec_sll
,4,1)
1082 VEC_VU_VU_VU_2(vec_sll
,1,2) VEC_VU_VU_VU_2(vec_sll
,2,2) VEC_VU_VU_VU_2(vec_sll
,4,2)
1083 VEC_VU_VU_VU_2(vec_sll
,1,4) VEC_VU_VU_VU_2(vec_sll
,2,4) VEC_VU_VU_VU_2(vec_sll
,4,4)
1085 procedure
:: VI_VI_VU_2(vec_sll
,1,1), VI_VI_VU_2(vec_sll
,2,1), VI_VI_VU_2(vec_sll
,4,1)
1086 procedure
:: VI_VI_VU_2(vec_sll
,1,2), VI_VI_VU_2(vec_sll
,2,2), VI_VI_VU_2(vec_sll
,4,2)
1087 procedure
:: VI_VI_VU_2(vec_sll
,1,4), VI_VI_VU_2(vec_sll
,2,4), VI_VI_VU_2(vec_sll
,4,4)
1088 procedure
:: VU_VU_VU_2(vec_sll
,1,1), VU_VU_VU_2(vec_sll
,2,1), VU_VU_VU_2(vec_sll
,4,1)
1089 procedure
:: VU_VU_VU_2(vec_sll
,1,2), VU_VU_VU_2(vec_sll
,2,2), VU_VU_VU_2(vec_sll
,4,2)
1090 procedure
:: VU_VU_VU_2(vec_sll
,1,4), VU_VU_VU_2(vec_sll
,2,4), VU_VU_VU_2(vec_sll
,4,4)
1091 end interface vec_sll
1095 VEC_VI_VI_VU_2(vec_slo
,1,1) VEC_VI_VI_VU_2(vec_slo
,2,1) VEC_VI_VI_VU_2(vec_slo
,4,1)
1096 VEC_VI_VI_VU_2(vec_slo
,1,2) VEC_VI_VI_VU_2(vec_slo
,2,2) VEC_VI_VI_VU_2(vec_slo
,4,2)
1097 VEC_VU_VU_VU_2(vec_slo
,1,1) VEC_VU_VU_VU_2(vec_slo
,2,1) VEC_VU_VU_VU_2(vec_slo
,4,1)
1098 VEC_VU_VU_VU_2(vec_slo
,1,2) VEC_VU_VU_VU_2(vec_slo
,2,2) VEC_VU_VU_VU_2(vec_slo
,4,2)
1099 VEC_VR_VR_VU(vec_slo
,4,1) VEC_VR_VR_VU(vec_slo
,4,2)
1101 procedure
:: VI_VI_VU_2(vec_slo
,1,1), VI_VI_VU_2(vec_slo
,2,1), VI_VI_VU_2(vec_slo
,4,1)
1102 procedure
:: VI_VI_VU_2(vec_slo
,1,2), VI_VI_VU_2(vec_slo
,2,2), VI_VI_VU_2(vec_slo
,4,2)
1103 procedure
:: VU_VU_VU_2(vec_slo
,1,1), VU_VU_VU_2(vec_slo
,2,1), VU_VU_VU_2(vec_slo
,4,1)
1104 procedure
:: VU_VU_VU_2(vec_slo
,1,2), VU_VU_VU_2(vec_slo
,2,2), VU_VU_VU_2(vec_slo
,4,2)
1105 procedure
:: VR_VR_VU_2(vec_slo
,4,1), VR_VR_VU_2(vec_slo
,4,2)
1106 end interface vec_slo
1110 VEC_VI_VI_VU(vec_sr
,1) VEC_VI_VI_VU(vec_sr
,2) VEC_VI_VI_VU(vec_sr
,4) VEC_VI_VI_VU(vec_sr
,8)
1111 VEC_VU_VU_VU(vec_sr
,1) VEC_VU_VU_VU(vec_sr
,2) VEC_VU_VU_VU(vec_sr
,4) VEC_VU_VU_VU(vec_sr
,8)
1113 procedure
:: VI_VI_VU(vec_sr
,1), VI_VI_VU(vec_sr
,2), VI_VI_VU(vec_sr
,4), VI_VI_VU(vec_sr
,8)
1114 procedure
:: VU_VU_VU(vec_sr
,1), VU_VU_VU(vec_sr
,2), VU_VU_VU(vec_sr
,4), VU_VU_VU(vec_sr
,8)
1115 end interface vec_sr
1119 VEC_VI_VI_VU_2(vec_srl
,1,1) VEC_VI_VI_VU_2(vec_srl
,2,1) VEC_VI_VI_VU_2(vec_srl
,4,1)
1120 VEC_VI_VI_VU_2(vec_srl
,1,2) VEC_VI_VI_VU_2(vec_srl
,2,2) VEC_VI_VI_VU_2(vec_srl
,4,2)
1121 VEC_VI_VI_VU_2(vec_srl
,1,4) VEC_VI_VI_VU_2(vec_srl
,2,4) VEC_VI_VI_VU_2(vec_srl
,4,4)
1122 VEC_VU_VU_VU_2(vec_srl
,1,1) VEC_VU_VU_VU_2(vec_srl
,2,1) VEC_VU_VU_VU_2(vec_srl
,4,1)
1123 VEC_VU_VU_VU_2(vec_srl
,1,2) VEC_VU_VU_VU_2(vec_srl
,2,2) VEC_VU_VU_VU_2(vec_srl
,4,2)
1124 VEC_VU_VU_VU_2(vec_srl
,1,4) VEC_VU_VU_VU_2(vec_srl
,2,4) VEC_VU_VU_VU_2(vec_srl
,4,4)
1126 procedure
:: VI_VI_VU_2(vec_srl
,1,1), VI_VI_VU_2(vec_srl
,2,1), VI_VI_VU_2(vec_srl
,4,1)
1127 procedure
:: VI_VI_VU_2(vec_srl
,1,2), VI_VI_VU_2(vec_srl
,2,2), VI_VI_VU_2(vec_srl
,4,2)
1128 procedure
:: VI_VI_VU_2(vec_srl
,1,4), VI_VI_VU_2(vec_srl
,2,4), VI_VI_VU_2(vec_srl
,4,4)
1129 procedure
:: VU_VU_VU_2(vec_srl
,1,1), VU_VU_VU_2(vec_srl
,2,1), VU_VU_VU_2(vec_srl
,4,1)
1130 procedure
:: VU_VU_VU_2(vec_srl
,1,2), VU_VU_VU_2(vec_srl
,2,2), VU_VU_VU_2(vec_srl
,4,2)
1131 procedure
:: VU_VU_VU_2(vec_srl
,1,4), VU_VU_VU_2(vec_srl
,2,4), VU_VU_VU_2(vec_srl
,4,4)
1132 end interface vec_srl
1136 VEC_VI_VI_VU_2(vec_sro
,1,1) VEC_VI_VI_VU_2(vec_sro
,2,1) VEC_VI_VI_VU_2(vec_sro
,4,1)
1137 VEC_VI_VI_VU_2(vec_sro
,1,2) VEC_VI_VI_VU_2(vec_sro
,2,2) VEC_VI_VI_VU_2(vec_sro
,4,2)
1138 VEC_VU_VU_VU_2(vec_sro
,1,1) VEC_VU_VU_VU_2(vec_sro
,2,1) VEC_VU_VU_VU_2(vec_sro
,4,1)
1139 VEC_VU_VU_VU_2(vec_sro
,1,2) VEC_VU_VU_VU_2(vec_sro
,2,2) VEC_VU_VU_VU_2(vec_sro
,4,2)
1140 VEC_VR_VR_VU(vec_sro
,4,1) VEC_VR_VR_VU(vec_sro
,4,2)
1142 procedure
:: VI_VI_VU_2(vec_sro
,1,1), VI_VI_VU_2(vec_sro
,2,1), VI_VI_VU_2(vec_sro
,4,1)
1143 procedure
:: VI_VI_VU_2(vec_sro
,1,2), VI_VI_VU_2(vec_sro
,2,2), VI_VI_VU_2(vec_sro
,4,2)
1144 procedure
:: VU_VU_VU_2(vec_sro
,1,1), VU_VU_VU_2(vec_sro
,2,1), VU_VU_VU_2(vec_sro
,4,1)
1145 procedure
:: VU_VU_VU_2(vec_sro
,1,2), VU_VU_VU_2(vec_sro
,2,2), VU_VU_VU_2(vec_sro
,4,2)
1146 procedure
:: VR_VR_VU_2(vec_sro
,4,1), VR_VR_VU_2(vec_sro
,4,2)
1147 end interface vec_sro
1151 VEC_VI_VI_VI(vec_xor
,1) VEC_VI_VI_VI(vec_xor
,2) VEC_VI_VI_VI(vec_xor
,4) VEC_VI_VI_VI(vec_xor
,8)
1152 VEC_VU_VU_VU(vec_xor
,1) VEC_VU_VU_VU(vec_xor
,2) VEC_VU_VU_VU(vec_xor
,4) VEC_VU_VU_VU(vec_xor
,8)
1153 VEC_VR_VR_VR(vec_xor
,4) VEC_VR_VR_VR(vec_xor
,8)
1155 procedure
:: VI_VI_VI(vec_xor
,1), VI_VI_VI(vec_xor
,2), VI_VI_VI(vec_xor
,4), VI_VI_VI(vec_xor
,8)
1156 procedure
:: VU_VU_VU(vec_xor
,1), VU_VU_VU(vec_xor
,2), VU_VU_VU(vec_xor
,4), VU_VU_VU(vec_xor
,8)
1157 procedure
:: VR_VR_VR(vec_xor
,4), VR_VR_VR(vec_xor
,8)
1158 end interface vec_xor
1164 #undef VEC_VU_VU_VU_2
1168 #undef VEC_VI_VI_VU_2
1179 !-------------------------------------------------------
1180 ! vector(unsigned(1)) function(integer, i/r)
1181 !-------------------------------------------------------
1182 #define
VU1_I0_I(NAME
, KIND
) __ppc_##NAME##_vu1i0i##KIND
1183 #define
VU1_I0_R(NAME
, KIND
) __ppc_##NAME##_vu1i0r##KIND
1185 #define
VEC_VU1_I0_I(NAME
, KIND
) \
1186 procedure(func_vu1i0i##KIND
) :: VU1_I0_I(NAME
, KIND
);
1187 #define
VEC_VU1_I0_R(NAME
, KIND
) \
1188 procedure(func_vu1i0r##KIND
) :: VU1_I0_R(NAME
, KIND
);
1191 VEC_VU1_I0_I(vec_lvsl
,1) VEC_VU1_I0_I(vec_lvsl
,2) VEC_VU1_I0_I(vec_lvsl
,4)
1192 VEC_VU1_I0_R(vec_lvsl
,4)
1194 procedure
:: VU1_I0_I(vec_lvsl
,1), VU1_I0_I(vec_lvsl
,2), VU1_I0_I(vec_lvsl
,4)
1195 procedure
:: VU1_I0_R(vec_lvsl
,4)
1200 VEC_VU1_I0_I(vec_lvsr
,1) VEC_VU1_I0_I(vec_lvsr
,2) VEC_VU1_I0_I(vec_lvsr
,4)
1201 VEC_VU1_I0_R(vec_lvsr
,4)
1203 procedure
:: VU1_I0_I(vec_lvsr
,1), VU1_I0_I(vec_lvsr
,2), VU1_I0_I(vec_lvsr
,4)
1204 procedure
:: VU1_I0_R(vec_lvsr
,4)
1213 !-------------------------------------------------------
1214 ! vector function(integer, i/u/r/vector)
1215 !-------------------------------------------------------
1216 ! i0 means the integer argument has ignore_tkr(k)
1217 #define
VI_I0_VI(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##i0##vi##VKIND
1218 #define
VU_I0_VU(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##i0##vu##VKIND
1219 #define
VR_I0_VR(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##i0##vr##VKIND
1220 #define
VI_I0_I(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##i0##i##VKIND
1221 #define
VR_I0_R(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##i0##r##VKIND
1223 #define
VEC_VI_I0_VI(NAME
, VKIND
) \
1224 procedure(func_vi##VKIND##i0##vi##VKIND
) :: VI_I0_VI(NAME
, VKIND
);
1225 #define
VEC_VU_I0_VU(NAME
, VKIND
) \
1226 procedure(func_vu##VKIND##i0##vu##VKIND
) :: VU_I0_VU(NAME
, VKIND
);
1227 #define
VEC_VR_I0_VR(NAME
, VKIND
) \
1228 procedure(func_vr##VKIND##i0##vr##VKIND
) :: VR_I0_VR(NAME
, VKIND
);
1229 #define
VEC_VI_I0_I(NAME
, VKIND
) \
1230 procedure(func_vi##VKIND##i0##i##VKIND
) :: VI_I0_I(NAME
, VKIND
);
1231 #define
VEC_VR_I0_R(NAME
, VKIND
) \
1232 procedure(func_vr##VKIND##i0##r##VKIND
) :: VR_I0_R(NAME
, VKIND
);
1235 VEC_VI_I0_VI(vec_ld
,1) VEC_VI_I0_VI(vec_ld
,2) VEC_VI_I0_VI(vec_ld
,4)
1236 VEC_VU_I0_VU(vec_ld
,1) VEC_VU_I0_VU(vec_ld
,2) VEC_VU_I0_VU(vec_ld
,4)
1237 VEC_VR_I0_VR(vec_ld
,4)
1238 VEC_VI_I0_I(vec_ld
,1) VEC_VI_I0_I(vec_ld
,2) VEC_VI_I0_I(vec_ld
,4)
1239 VEC_VR_I0_R(vec_ld
,4)
1241 procedure
:: VI_I0_VI(vec_ld
,1), VI_I0_VI(vec_ld
,2), VI_I0_VI(vec_ld
,4)
1242 procedure
:: VU_I0_VU(vec_ld
,1), VU_I0_VU(vec_ld
,2), VU_I0_VU(vec_ld
,4)
1243 procedure
:: VR_I0_VR(vec_ld
,4)
1244 procedure
:: VI_I0_I(vec_ld
,1), VI_I0_I(vec_ld
,2), VI_I0_I(vec_ld
,4)
1245 procedure
:: VR_I0_R(vec_ld
,4)
1250 VEC_VI_I0_I(vec_lde
,1) VEC_VI_I0_I(vec_lde
,2) VEC_VI_I0_I(vec_lde
,4)
1251 VEC_VR_I0_R(vec_lde
,4)
1253 procedure
:: VI_I0_I(vec_lde
,1), VI_I0_I(vec_lde
,2), VI_I0_I(vec_lde
,4)
1254 procedure
:: VR_I0_R(vec_lde
,4)
1259 VEC_VI_I0_VI(vec_ldl
,1) VEC_VI_I0_VI(vec_ldl
,2) VEC_VI_I0_VI(vec_ldl
,4)
1260 VEC_VU_I0_VU(vec_ldl
,1) VEC_VU_I0_VU(vec_ldl
,2) VEC_VU_I0_VU(vec_ldl
,4)
1261 VEC_VR_I0_VR(vec_ldl
,4)
1262 VEC_VI_I0_I(vec_ldl
,1) VEC_VI_I0_I(vec_ldl
,2) VEC_VI_I0_I(vec_ldl
,4)
1263 VEC_VR_I0_R(vec_ldl
,4)
1265 procedure
:: VI_I0_VI(vec_ldl
,1), VI_I0_VI(vec_ldl
,2), VI_I0_VI(vec_ldl
,4)
1266 procedure
:: VU_I0_VU(vec_ldl
,1), VU_I0_VU(vec_ldl
,2), VU_I0_VU(vec_ldl
,4)
1267 procedure
:: VR_I0_VR(vec_ldl
,4)
1268 procedure
:: VI_I0_I(vec_ldl
,1), VI_I0_I(vec_ldl
,2), VI_I0_I(vec_ldl
,4)
1269 procedure
:: VR_I0_R(vec_ldl
,4)
1274 VEC_VI_I0_VI(vec_lxv
,1) VEC_VI_I0_VI(vec_lxv
,2) VEC_VI_I0_VI(vec_lxv
,4) VEC_VI_I0_VI(vec_lxv
,8)
1275 VEC_VU_I0_VU(vec_lxv
,1) VEC_VU_I0_VU(vec_lxv
,2) VEC_VU_I0_VU(vec_lxv
,4) VEC_VU_I0_VU(vec_lxv
,8)
1276 VEC_VR_I0_VR(vec_lxv
,4) VEC_VR_I0_VR(vec_lxv
,8)
1277 VEC_VI_I0_I(vec_lxv
,1) VEC_VI_I0_I(vec_lxv
,2) VEC_VI_I0_I(vec_lxv
,4) VEC_VI_I0_I(vec_lxv
,8)
1278 VEC_VR_I0_R(vec_lxv
,4) VEC_VR_I0_R(vec_lxv
,8)
1280 procedure
:: VI_I0_VI(vec_lxv
,1), VI_I0_VI(vec_lxv
,2), VI_I0_VI(vec_lxv
,4), VI_I0_VI(vec_lxv
,8)
1281 procedure
:: VU_I0_VU(vec_lxv
,1), VU_I0_VU(vec_lxv
,2), VU_I0_VU(vec_lxv
,4), VU_I0_VU(vec_lxv
,8)
1282 procedure
:: VR_I0_VR(vec_lxv
,4), VR_I0_VR(vec_lxv
,8)
1283 procedure
:: VI_I0_I(vec_lxv
,1), VI_I0_I(vec_lxv
,2), VI_I0_I(vec_lxv
,4), VI_I0_I(vec_lxv
,8)
1284 procedure
:: VR_I0_R(vec_lxv
,4), VR_I0_R(vec_lxv
,8)
1289 VEC_VI_I0_VI(vec_xl
,1) VEC_VI_I0_VI(vec_xl
,2) VEC_VI_I0_VI(vec_xl
,4) VEC_VI_I0_VI(vec_xl
,8)
1290 VEC_VU_I0_VU(vec_xl
,1) VEC_VU_I0_VU(vec_xl
,2) VEC_VU_I0_VU(vec_xl
,4) VEC_VU_I0_VU(vec_xl
,8)
1291 VEC_VR_I0_VR(vec_xl
,4) VEC_VR_I0_VR(vec_xl
,8)
1292 VEC_VI_I0_I(vec_xl
,1) VEC_VI_I0_I(vec_xl
,2) VEC_VI_I0_I(vec_xl
,4) VEC_VI_I0_I(vec_xl
,8)
1293 VEC_VR_I0_R(vec_xl
,4) VEC_VR_I0_R(vec_xl
,8)
1295 procedure
:: VI_I0_VI(vec_xl
,1), VI_I0_VI(vec_xl
,2), VI_I0_VI(vec_xl
,4), VI_I0_VI(vec_xl
,8)
1296 procedure
:: VU_I0_VU(vec_xl
,1), VU_I0_VU(vec_xl
,2), VU_I0_VU(vec_xl
,4), VU_I0_VU(vec_xl
,8)
1297 procedure
:: VR_I0_VR(vec_xl
,4), VR_I0_VR(vec_xl
,8)
1298 procedure
:: VI_I0_I(vec_xl
,1), VI_I0_I(vec_xl
,2), VI_I0_I(vec_xl
,4), VI_I0_I(vec_xl
,8)
1299 procedure
:: VR_I0_R(vec_xl
,4), VR_I0_R(vec_xl
,8)
1304 VEC_VI_I0_VI(vec_xl_be
,1) VEC_VI_I0_VI(vec_xl_be
,2) VEC_VI_I0_VI(vec_xl_be
,4) VEC_VI_I0_VI(vec_xl_be
,8)
1305 VEC_VU_I0_VU(vec_xl_be
,1) VEC_VU_I0_VU(vec_xl_be
,2) VEC_VU_I0_VU(vec_xl_be
,4) VEC_VU_I0_VU(vec_xl_be
,8)
1306 VEC_VR_I0_VR(vec_xl_be
,4) VEC_VR_I0_VR(vec_xl_be
,8)
1307 VEC_VI_I0_I(vec_xl_be
,1) VEC_VI_I0_I(vec_xl_be
,2) VEC_VI_I0_I(vec_xl_be
,4) VEC_VI_I0_I(vec_xl_be
,8)
1308 VEC_VR_I0_R(vec_xl_be
,4) VEC_VR_I0_R(vec_xl_be
,8)
1310 procedure
:: VI_I0_VI(vec_xl_be
,1), VI_I0_VI(vec_xl_be
,2), VI_I0_VI(vec_xl_be
,4), VI_I0_VI(vec_xl_be
,8)
1311 procedure
:: VU_I0_VU(vec_xl_be
,1), VU_I0_VU(vec_xl_be
,2), VU_I0_VU(vec_xl_be
,4), VU_I0_VU(vec_xl_be
,8)
1312 procedure
:: VR_I0_VR(vec_xl_be
,4), VR_I0_VR(vec_xl_be
,8)
1313 procedure
:: VI_I0_I(vec_xl_be
,1), VI_I0_I(vec_xl_be
,2), VI_I0_I(vec_xl_be
,4) , VI_I0_I(vec_xl_be
,8)
1314 procedure
:: VR_I0_R(vec_xl_be
,4), VR_I0_R(vec_xl_be
,8)
1319 VEC_VI_I0_VI(vec_xld2_
,1) VEC_VI_I0_VI(vec_xld2_
,2) VEC_VI_I0_VI(vec_xld2_
,4) VEC_VI_I0_VI(vec_xld2_
,8)
1320 VEC_VU_I0_VU(vec_xld2_
,1) VEC_VU_I0_VU(vec_xld2_
,2) VEC_VU_I0_VU(vec_xld2_
,4) VEC_VU_I0_VU(vec_xld2_
,8)
1321 VEC_VR_I0_VR(vec_xld2_
,4) VEC_VR_I0_VR(vec_xld2_
,8)
1322 VEC_VI_I0_I(vec_xld2_
,1) VEC_VI_I0_I(vec_xld2_
,2) VEC_VI_I0_I(vec_xld2_
,4) VEC_VI_I0_I(vec_xld2_
,8)
1323 VEC_VR_I0_R(vec_xld2_
,4) VEC_VR_I0_R(vec_xld2_
,8)
1325 procedure
:: VI_I0_VI(vec_xld2_
,1), VI_I0_VI(vec_xld2_
,2), VI_I0_VI(vec_xld2_
,4), VI_I0_VI(vec_xld2_
,8)
1326 procedure
:: VU_I0_VU(vec_xld2_
,1), VU_I0_VU(vec_xld2_
,2), VU_I0_VU(vec_xld2_
,4), VU_I0_VU(vec_xld2_
,8)
1327 procedure
:: VR_I0_VR(vec_xld2_
,4), VR_I0_VR(vec_xld2_
,8)
1328 procedure
:: VI_I0_I(vec_xld2_
,1), VI_I0_I(vec_xld2_
,2), VI_I0_I(vec_xld2_
,4), VI_I0_I(vec_xld2_
,8)
1329 procedure
:: VR_I0_R(vec_xld2_
,4), VR_I0_R(vec_xld2_
,8)
1334 VEC_VI_I0_VI(vec_xlds
,8)
1335 VEC_VU_I0_VU(vec_xlds
,8)
1336 VEC_VR_I0_VR(vec_xlds
,8)
1337 VEC_VI_I0_I(vec_xlds
,8)
1338 VEC_VR_I0_R(vec_xlds
,8)
1340 procedure
:: VI_I0_VI(vec_xlds
,8)
1341 procedure
:: VU_I0_VU(vec_xlds
,8)
1342 procedure
:: VR_I0_VR(vec_xlds
,8)
1343 procedure
:: VI_I0_I(vec_xlds
,8)
1344 procedure
:: VR_I0_R(vec_xlds
,8)
1349 VEC_VI_I0_VI(vec_xlw4_
,1) VEC_VI_I0_VI(vec_xlw4_
,2)
1350 VEC_VU_I0_VU(vec_xlw4_
,1) VEC_VU_I0_VU(vec_xlw4_
,2) VEC_VU_I0_VU(vec_xlw4_
,4)
1351 VEC_VR_I0_VR(vec_xlw4_
,4)
1352 VEC_VI_I0_I(vec_xlw4_
,1) VEC_VI_I0_I(vec_xlw4_
,2) VEC_VI_I0_I(vec_xlw4_
,4)
1353 VEC_VR_I0_R(vec_xlw4_
,4)
1355 procedure
:: VI_I0_VI(vec_xlw4_
,1), VI_I0_VI(vec_xlw4_
,2)
1356 procedure
:: VU_I0_VU(vec_xlw4_
,1), VU_I0_VU(vec_xlw4_
,2), VU_I0_VU(vec_xlw4_
,4)
1357 procedure
:: VR_I0_VR(vec_xlw4_
,4)
1358 procedure
:: VI_I0_I(vec_xlw4_
,1), VI_I0_I(vec_xlw4_
,2), VI_I0_I(vec_xlw4_
,4)
1359 procedure
:: VR_I0_R(vec_xlw4_
,4)
1374 !-------------------------------------------------------
1375 ! __vector_pair function(integer, vector/__vector_pair)
1376 !-------------------------------------------------------
1377 #define
VP_I0_VI(NAME
, VKIND
) __ppc_##NAME##_vpi0##vi##VKIND
1378 #define
VP_I0_VU(NAME
, VKIND
) __ppc_##NAME##_vpi0##vu##VKIND
1379 #define
VP_I0_VR(NAME
, VKIND
) __ppc_##NAME##_vpi0##vr##VKIND
1380 #define
VP_I0_VP(NAME
) __ppc_##NAME##_vpi0vp0
1382 #define
VEC_VP_I0_VI(NAME
, VKIND
) \
1383 procedure(func_vpi0vi##VKIND
) :: VP_I0_VI(NAME
, VKIND
);
1384 #define
VEC_VP_I0_VU(NAME
, VKIND
) \
1385 procedure(func_vpi0vu##VKIND
) :: VP_I0_VU(NAME
, VKIND
);
1386 #define
VEC_VP_I0_VR(NAME
, VKIND
) \
1387 procedure(func_vpi0vr##VKIND
) :: VP_I0_VR(NAME
, VKIND
);
1388 #define
VEC_VP_I0_VP(NAME
) procedure(func_vpi0vp
) :: VP_I0_VP(NAME
);
1391 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)
1392 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)
1393 VEC_VP_I0_VR(vec_lxvp
,4) VEC_VP_I0_VR(vec_lxvp
,8)
1394 VEC_VP_I0_VP(vec_lxvp
)
1396 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)
1397 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)
1398 procedure
:: VP_I0_VR(vec_lxvp
,4), VP_I0_VR(vec_lxvp
,8)
1399 procedure
:: VP_I0_VP(vec_lxvp
)
1400 end interface vec_lxvp
1403 ! vsx_lxvp (alias to vec_lxvp)
1405 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)
1406 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)
1407 procedure
:: VP_I0_VR(vec_lxvp
,4), VP_I0_VR(vec_lxvp
,8)
1408 procedure
:: VP_I0_VP(vec_lxvp
)
1409 end interface vsx_lxvp
1421 !-----------------------------------------
1422 ! vector function(vector, vector, vector)
1423 !-----------------------------------------
1424 #define
VR_VR_VR_VR(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND
1425 #define
VI_VI_VI_VU_2(NAME
, VKIND
, UKIND
) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##vu##UKIND
1426 #define
VI_VI_VI_VU(NAME
, VKIND
) VI_VI_VI_VU_2(NAME
, VKIND
, VKIND
)
1427 #define
VU_VU_VU_VU_2(NAME
, VKIND
, UKIND
) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##vu##UKIND
1428 #define
VU_VU_VU_VU(NAME
, VKIND
) VU_VU_VU_VU_2(NAME
, VKIND
, VKIND
)
1429 #define
VR_VR_VR_VU_2(NAME
, VKIND
, UKIND
) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##vu##UKIND
1430 #define
VR_VR_VR_VU(NAME
, VKIND
) VR_VR_VR_VU_2(NAME
, VKIND
, VKIND
)
1431 ! i0 indicates "!dir$ ignore_tkr(k) arg3"
1432 #define
VI_VI_VI_I(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##i0
1433 #define
VU_VU_VU_I(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##i0
1434 #define
VR_VR_VR_I(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##i0
1436 #define
VEC_VR_VR_VR_VR(NAME
, VKIND
) \
1437 procedure(elem_func_vr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND
) :: VR_VR_VR_VR(NAME
, VKIND
);
1438 #define
VEC_VI_VI_VI_VU_2(NAME
, VKIND
, UKIND
) \
1439 procedure(elem_func_vi##VKIND##vi##VKIND##vi##VKIND##vu##UKIND
) :: VI_VI_VI_VU_2(NAME
, VKIND
, UKIND
);
1440 #define
VEC_VI_VI_VI_VU(NAME
, VKIND
) VEC_VI_VI_VI_VU_2(NAME
, VKIND
, VKIND
)
1441 #define
VEC_VU_VU_VU_VU_2(NAME
, VKIND
, UKIND
) \
1442 procedure(elem_func_vu##VKIND##vu##VKIND##vu##VKIND##vu##UKIND
) :: VU_VU_VU_VU_2(NAME
, VKIND
, UKIND
);
1443 #define
VEC_VU_VU_VU_VU(NAME
, VKIND
) VEC_VU_VU_VU_VU_2(NAME
, VKIND
, VKIND
)
1444 #define
VEC_VR_VR_VR_VU_2(NAME
, VKIND
, UKIND
) \
1445 procedure(elem_func_vr##VKIND##vr##VKIND##vr##VKIND##vu##UKIND
) :: VR_VR_VR_VU_2(NAME
, VKIND
, UKIND
);
1446 #define
VEC_VR_VR_VR_VU(NAME
, VKIND
) VEC_VR_VR_VR_VU_2(NAME
, VKIND
, VKIND
)
1447 #define
VEC_VI_VI_VI_I(NAME
, VKIND
) \
1448 procedure(elem_func_vi##VKIND##vi##VKIND##vi##VKIND##i
) :: VI_VI_VI_I(NAME
, VKIND
);
1449 #define
VEC_VU_VU_VU_I(NAME
, VKIND
) \
1450 procedure(elem_func_vu##VKIND##vu##VKIND##vu##VKIND##i
) :: VU_VU_VU_I(NAME
, VKIND
);
1451 #define
VEC_VR_VR_VR_I(NAME
, VKIND
) \
1452 procedure(elem_func_vr##VKIND##vr##VKIND##vr##VKIND##i
) :: VR_VR_VR_I(NAME
, VKIND
);
1455 VEC_VR_VR_VR_VR(vec_madd
,4) VEC_VR_VR_VR_VR(vec_madd
,8)
1457 procedure
:: VR_VR_VR_VR(vec_madd
,4), VR_VR_VR_VR(vec_madd
,8)
1458 end interface vec_madd
1462 VEC_VR_VR_VR_VR(vec_msub
,4) VEC_VR_VR_VR_VR(vec_msub
,8)
1464 procedure
:: VR_VR_VR_VR(vec_msub
,4), VR_VR_VR_VR(vec_msub
,8)
1465 end interface vec_msub
1469 VEC_VR_VR_VR_VR(vec_nmadd
,4) VEC_VR_VR_VR_VR(vec_nmadd
,8)
1471 procedure
:: VR_VR_VR_VR(vec_nmadd
,4), VR_VR_VR_VR(vec_nmadd
,8)
1472 end interface vec_nmadd
1476 VEC_VR_VR_VR_VR(vec_nmsub
,4) VEC_VR_VR_VR_VR(vec_nmsub
,8)
1478 procedure
:: VR_VR_VR_VR(vec_nmsub
,4), VR_VR_VR_VR(vec_nmsub
,8)
1479 end interface vec_nmsub
1483 VEC_VI_VI_VI_VU_2(vec_perm
,1,1) VEC_VI_VI_VI_VU_2(vec_perm
,2,1) VEC_VI_VI_VI_VU_2(vec_perm
,4,1) VEC_VI_VI_VI_VU_2(vec_perm
,8,1)
1484 VEC_VU_VU_VU_VU_2(vec_perm
,1,1) VEC_VU_VU_VU_VU_2(vec_perm
,2,1) VEC_VU_VU_VU_VU_2(vec_perm
,4,1) VEC_VU_VU_VU_VU_2(vec_perm
,8,1)
1485 VEC_VR_VR_VR_VU_2(vec_perm
,4,1) VEC_VR_VR_VR_VU_2(vec_perm
,8,1)
1487 procedure
:: VI_VI_VI_VU_2(vec_perm
,1,1), VI_VI_VI_VU_2(vec_perm
,2,1), VI_VI_VI_VU_2(vec_perm
,4,1), VI_VI_VI_VU_2(vec_perm
,8,1)
1488 procedure
:: VU_VU_VU_VU_2(vec_perm
,1,1), VU_VU_VU_VU_2(vec_perm
,2,1), VU_VU_VU_VU_2(vec_perm
,4,1), VU_VU_VU_VU_2(vec_perm
,8,1)
1489 procedure
:: VR_VR_VR_VU_2(vec_perm
,4,1), VR_VR_VR_VU_2(vec_perm
,8,1)
1490 end interface vec_perm
1494 VEC_VI_VI_VI_I(vec_permi
,8)
1495 VEC_VU_VU_VU_I(vec_permi
,8)
1496 VEC_VR_VR_VR_I(vec_permi
,4) VEC_VR_VR_VR_I(vec_permi
,8)
1498 procedure
:: VI_VI_VI_I(vec_permi
,8)
1499 procedure
:: VU_VU_VU_I(vec_permi
,8)
1500 procedure
:: VR_VR_VR_I(vec_permi
,4), VR_VR_VR_I(vec_permi
,8)
1501 end interface vec_permi
1505 VEC_VI_VI_VI_VU(vec_sel
,1) VEC_VI_VI_VI_VU(vec_sel
,2) VEC_VI_VI_VI_VU(vec_sel
,4) VEC_VI_VI_VI_VU(vec_sel
,8)
1506 VEC_VU_VU_VU_VU(vec_sel
,1) VEC_VU_VU_VU_VU(vec_sel
,2) VEC_VU_VU_VU_VU(vec_sel
,4) VEC_VU_VU_VU_VU(vec_sel
,8)
1507 VEC_VR_VR_VR_VU(vec_sel
,4) VEC_VR_VR_VR_VU(vec_sel
,8)
1509 procedure
:: VI_VI_VI_VU(vec_sel
,1), VI_VI_VI_VU(vec_sel
,2), VI_VI_VI_VU(vec_sel
,4), VI_VI_VI_VU(vec_sel
,8)
1510 procedure
:: VU_VU_VU_VU(vec_sel
,1), VU_VU_VU_VU(vec_sel
,2), VU_VU_VU_VU(vec_sel
,4), VU_VU_VU_VU(vec_sel
,8)
1511 procedure
:: VR_VR_VR_VU(vec_sel
,4), VR_VR_VR_VU(vec_sel
,8)
1512 end interface vec_sel
1515 #undef VEC_VR_VR_VR_I
1516 #undef VEC_VU_VU_VU_I
1517 #undef VEC_VI_VI_VI_I
1518 #undef VEC_VI_VI_VI_VU_2
1519 #undef VEC_VI_VI_VI_VU
1520 #undef VEC_VU_VU_VU_VU_2
1521 #undef VEC_VU_VU_VU_VU
1522 #undef VEC_VR_VR_VR_VU_2
1523 #undef VEC_VR_VR_VR_VU
1524 #undef VEC_VR_VR_VR_VR
1529 #undef VI_VI_VI_VU_2
1531 #undef VU_VU_VU_VU_2
1533 #undef VR_VR_VR_VU_2
1536 !------------------------------------------
1537 ! vector function(integer, vector, integer)
1538 ! vector function(real, vector, integer)
1539 !------------------------------------------
1540 #define
VI_I_VI_I(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##i##VKIND##vi##VKIND##i0
1541 #define
VR_R_VR_I(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##r##VKIND##vr##VKIND##i0
1543 #define
VEC_VI_I_VI_I(NAME
, VKIND
) \
1544 procedure(elem_func_vi##VKIND##i##VKIND##vi##VKIND##i
) :: VI_I_VI_I(NAME
, VKIND
);
1545 #define
VEC_VR_R_VR_I(NAME
, VKIND
) \
1546 procedure(elem_func_vr##VKIND##r##VKIND##vr##VKIND##i
) :: VR_R_VR_I(NAME
, VKIND
);
1549 VEC_VI_I_VI_I(vec_insert
,1) VEC_VI_I_VI_I(vec_insert
,2) VEC_VI_I_VI_I(vec_insert
,4) VEC_VI_I_VI_I(vec_insert
,8)
1550 VEC_VR_R_VR_I(vec_insert
,4) VEC_VR_R_VR_I(vec_insert
,8)
1551 interface vec_insert
1552 procedure
:: VI_I_VI_I(vec_insert
,1), VI_I_VI_I(vec_insert
,2), VI_I_VI_I(vec_insert
,4), VI_I_VI_I(vec_insert
,8)
1553 procedure
:: VR_R_VR_I(vec_insert
,4), VR_R_VR_I(vec_insert
,8)
1554 end interface vec_insert
1555 public
:: vec_insert
1557 #undef VEC_VR_R_VR_I
1558 #undef VEC_VI_I_VI_I
1562 !----------------------------------
1563 ! integer function(vector, vector)
1564 !----------------------------------
1565 #define
I_VI_VI(NAME
, RKIND
, VKIND
) __ppc_##NAME##_i##RKIND##vi##VKIND##vi##VKIND
1566 #define
I_VU_VU(NAME
, RKIND
, VKIND
) __ppc_##NAME##_i##RKIND##vu##VKIND##vu##VKIND
1567 #define
I_VR_VR(NAME
, RKIND
, VKIND
) __ppc_##NAME##_i##RKIND##vr##VKIND##vr##VKIND
1569 #define
VEC_I_VI_VI(NAME
, RKIND
, VKIND
) \
1570 procedure(elem_func_i##RKIND##vi##VKIND##vi##VKIND
) :: I_VI_VI(NAME
, RKIND
, VKIND
);
1571 #define
VEC_I_VU_VU(NAME
, RKIND
, VKIND
) \
1572 procedure(elem_func_i##RKIND##vu##VKIND##vu##VKIND
) :: I_VU_VU(NAME
, RKIND
, VKIND
);
1573 #define
VEC_I_VR_VR(NAME
, RKIND
, VKIND
) \
1574 procedure(elem_func_i##RKIND##vr##VKIND##vr##VKIND
) :: I_VR_VR(NAME
, RKIND
, VKIND
);
1577 VEC_I_VI_VI(vec_any_ge
,4,1) VEC_I_VI_VI(vec_any_ge
,4,2) VEC_I_VI_VI(vec_any_ge
,4,4) VEC_I_VI_VI(vec_any_ge
,4,8)
1578 VEC_I_VU_VU(vec_any_ge
,4,1) VEC_I_VU_VU(vec_any_ge
,4,2) VEC_I_VU_VU(vec_any_ge
,4,4) VEC_I_VU_VU(vec_any_ge
,4,8)
1579 VEC_I_VR_VR(vec_any_ge
,4,4) VEC_I_VR_VR(vec_any_ge
,4,8)
1580 interface vec_any_ge
1581 procedure
:: I_VI_VI(vec_any_ge
,4,1), I_VI_VI(vec_any_ge
,4,2), I_VI_VI(vec_any_ge
,4,4), I_VI_VI(vec_any_ge
,4,8)
1582 procedure
:: I_VU_VU(vec_any_ge
,4,1), I_VU_VU(vec_any_ge
,4,2), I_VU_VU(vec_any_ge
,4,4), I_VU_VU(vec_any_ge
,4,8)
1583 procedure
:: I_VR_VR(vec_any_ge
,4,4), I_VR_VR(vec_any_ge
,4,8)
1584 end interface vec_any_ge
1585 public
:: vec_any_ge
1594 !----------------------------------------
1595 ! integer/real function(vector, integer)
1596 !----------------------------------------
1597 #define
I_VI_I(NAME
, VKIND
) __ppc_##NAME##_i##VKIND##vi##VKIND##i0
1598 #define
R_VR_I(NAME
, VKIND
) __ppc_##NAME##_r##VKIND##vr##VKIND##i0
1600 #define
VEC_I_VI_I(NAME
, VKIND
) \
1601 procedure(elem_func_i##VKIND##vi##VKIND##i
) :: I_VI_I(NAME
, VKIND
);
1602 #define
VEC_R_VR_I(NAME
, VKIND
) \
1603 procedure(elem_func_r##VKIND##vr##VKIND##i
) :: R_VR_I(NAME
, VKIND
);
1606 VEC_I_VI_I(vec_extract
,1) VEC_I_VI_I(vec_extract
,2) VEC_I_VI_I(vec_extract
,4) VEC_I_VI_I(vec_extract
,8)
1607 VEC_R_VR_I(vec_extract
,4) VEC_R_VR_I(vec_extract
,8)
1608 interface vec_extract
1609 procedure
:: I_VI_I(vec_extract
,1), I_VI_I(vec_extract
,2), I_VI_I(vec_extract
,4), I_VI_I(vec_extract
,8)
1610 procedure
:: R_VR_I(vec_extract
,4), R_VR_I(vec_extract
,8)
1612 public
:: vec_extract
1614 !------------------------------------------
1615 ! vector function(vector, vector, integer)
1616 !------------------------------------------
1617 ! i0 means the integer argument has ignore_tkr(k)
1618 #define
VI_VI_VI_I(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##i0
1619 #define
VU_VU_VU_I(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##i0
1620 #define
VR_VR_VR_I(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##i0
1622 #define
VEC_VI_VI_VI_I(NAME
, VKIND
) \
1623 procedure(elem_func_vi##VKIND##vi##VKIND##vi##VKIND##i
) :: VI_VI_VI_I(NAME
, VKIND
);
1624 #define
VEC_VU_VU_VU_I(NAME
, VKIND
) \
1625 procedure(elem_func_vu##VKIND##vu##VKIND##vu##VKIND##i
) :: VU_VU_VU_I(NAME
, VKIND
);
1626 #define
VEC_VR_VR_VR_I(NAME
, VKIND
) \
1627 procedure(elem_func_vr##VKIND##vr##VKIND##vr##VKIND##i
) :: VR_VR_VR_I(NAME
, VKIND
);
1630 VEC_VI_VI_VI_I(vec_sld
,1) VEC_VI_VI_VI_I(vec_sld
,2) VEC_VI_VI_VI_I(vec_sld
,4) VEC_VI_VI_VI_I(vec_sld
,8)
1631 VEC_VU_VU_VU_I(vec_sld
,1) VEC_VU_VU_VU_I(vec_sld
,2) VEC_VU_VU_VU_I(vec_sld
,4) VEC_VU_VU_VU_I(vec_sld
,8)
1632 VEC_VR_VR_VR_I(vec_sld
,4) VEC_VR_VR_VR_I(vec_sld
,8)
1634 procedure
:: VI_VI_VI_I(vec_sld
,1), VI_VI_VI_I(vec_sld
,2), VI_VI_VI_I(vec_sld
,4), VI_VI_VI_I(vec_sld
,8)
1635 procedure
:: VU_VU_VU_I(vec_sld
,1), VU_VU_VU_I(vec_sld
,2), VU_VU_VU_I(vec_sld
,4), VU_VU_VU_I(vec_sld
,8)
1636 procedure
:: VR_VR_VR_I(vec_sld
,4), VR_VR_VR_I(vec_sld
,8)
1637 end interface vec_sld
1641 VEC_VI_VI_VI_I(vec_sldw
,1) VEC_VI_VI_VI_I(vec_sldw
,2) VEC_VI_VI_VI_I(vec_sldw
,4) VEC_VI_VI_VI_I(vec_sldw
,8)
1642 VEC_VU_VU_VU_I(vec_sldw
,1) VEC_VU_VU_VU_I(vec_sldw
,2) VEC_VU_VU_VU_I(vec_sldw
,4) VEC_VU_VU_VU_I(vec_sldw
,8)
1643 VEC_VR_VR_VR_I(vec_sldw
,4) VEC_VR_VR_VR_I(vec_sldw
,8)
1645 procedure
:: VI_VI_VI_I(vec_sldw
,1), VI_VI_VI_I(vec_sldw
,2), VI_VI_VI_I(vec_sldw
,4), VI_VI_VI_I(vec_sldw
,8)
1646 procedure
:: VU_VU_VU_I(vec_sldw
,1), VU_VU_VU_I(vec_sldw
,2), VU_VU_VU_I(vec_sldw
,4), VU_VU_VU_I(vec_sldw
,8)
1647 procedure
:: VR_VR_VR_I(vec_sldw
,4), VR_VR_VR_I(vec_sldw
,8)
1648 end interface vec_sldw
1651 #undef VEC_VR_VR_VR_I
1652 #undef VEC_VU_VU_VU_I
1653 #undef VEC_VI_VI_VI_I
1658 !----------------------------------
1659 ! vector function(vector, integer)
1660 !----------------------------------
1661 ! 'i0' stands for the integer argument being ignored via
1662 ! the `ignore_tkr' directive.
1663 #define
VR_VI_I(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##vi##VKIND##i0
1664 #define
VR_VU_I(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##vu##VKIND##i0
1665 #define
VI_VI_I0(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##vi##VKIND##i0
1666 #define
VU_VU_I0(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##vu##VKIND##i0
1667 #define
VR_VR_I0(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##vr##VKIND##i0
1669 #define
VEC_VR_VI_I(NAME
, VKIND
) \
1670 procedure(elem_func_vr##VKIND##vi##VKIND##i
) :: VR_VI_I(NAME
, VKIND
);
1671 #define
VEC_VR_VU_I(NAME
, VKIND
) \
1672 procedure(elem_func_vr##VKIND##vu##VKIND##i
) :: VR_VU_I(NAME
, VKIND
);
1673 #define
VEC_VI_VI_I0(NAME
, VKIND
) \
1674 procedure(elem_func_vi##VKIND##vi##VKIND##i0
) :: VI_VI_I0(NAME
, VKIND
);
1675 #define
VEC_VU_VU_I0(NAME
, VKIND
) \
1676 procedure(elem_func_vu##VKIND##vu##VKIND##i0
) :: VU_VU_I0(NAME
, VKIND
);
1677 #define
VEC_VR_VR_I0(NAME
, VKIND
) \
1678 procedure(elem_func_vr##VKIND##vr##VKIND##i0
) :: VR_VR_I0(NAME
, VKIND
);
1681 VEC_VR_VI_I(vec_ctf
,4) VEC_VR_VI_I(vec_ctf
,8)
1682 VEC_VR_VU_I(vec_ctf
,4) VEC_VR_VU_I(vec_ctf
,8)
1684 procedure
:: VR_VI_I(vec_ctf
,4), VR_VI_I(vec_ctf
,8)
1685 procedure
:: VR_VU_I(vec_ctf
,4), VR_VU_I(vec_ctf
,8)
1686 end interface vec_ctf
1690 VEC_VI_VI_I0(vec_splat
,1) VEC_VI_VI_I0(vec_splat
,2) VEC_VI_VI_I0(vec_splat
,4) VEC_VI_VI_I0(vec_splat
,8)
1691 VEC_VU_VU_I0(vec_splat
,1) VEC_VU_VU_I0(vec_splat
,2) VEC_VU_VU_I0(vec_splat
,4) VEC_VU_VU_I0(vec_splat
,8)
1692 VEC_VR_VR_I0(vec_splat
,4) VEC_VR_VR_I0(vec_splat
,8)
1694 procedure
:: VI_VI_I0(vec_splat
,1), VI_VI_I0(vec_splat
,2), VI_VI_I0(vec_splat
,4), VI_VI_I0(vec_splat
,8)
1695 procedure
:: VU_VU_I0(vec_splat
,1), VU_VU_I0(vec_splat
,2), VU_VU_I0(vec_splat
,4), VU_VU_I0(vec_splat
,8)
1696 procedure
:: VR_VR_I0(vec_splat
,4), VR_VR_I0(vec_splat
,8)
1697 end interface vec_splat
1711 !--------------------------------------------------
1712 ! subroutine(vector, integer, vector/integer/real)
1713 !--------------------------------------------------
1714 ! 'i0' stands for the integer argument being ignored via
1715 ! the `ignore_tkr' directive.
1716 #define
SUB_VI_I_VI(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##i0vi##VKIND
1717 #define
SUB_VU_I_VU(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##i0vu##VKIND
1718 #define
SUB_VR_I_VR(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##i0vr##VKIND
1719 #define
SUB_VI_I_I(NAME
, VKIND
) __ppc_##NAME##_vi##VKIND##i0i##VKIND
1720 #define
SUB_VU_I_I(NAME
, VKIND
) __ppc_##NAME##_vu##VKIND##i0u##VKIND
1721 #define
SUB_VR_I_R(NAME
, VKIND
) __ppc_##NAME##_vr##VKIND##i0r##VKIND
1723 #define
VEC_SUB_VI_I_VI(NAME
, VKIND
) \
1724 procedure(sub_vi##VKIND##ivi##VKIND
) :: SUB_VI_I_VI(NAME
, VKIND
);
1725 #define
VEC_SUB_VU_I_VU(NAME
, VKIND
) \
1726 procedure(sub_vu##VKIND##ivu##VKIND
) :: SUB_VU_I_VU(NAME
, VKIND
);
1727 #define
VEC_SUB_VR_I_VR(NAME
, VKIND
) \
1728 procedure(sub_vr##VKIND##ivr##VKIND
) :: SUB_VR_I_VR(NAME
, VKIND
);
1729 #define
VEC_SUB_VI_I_I(NAME
, VKIND
) \
1730 procedure(sub_vi##VKIND##ii##VKIND
) :: SUB_VI_I_I(NAME
, VKIND
);
1731 #define
VEC_SUB_VU_I_I(NAME
, VKIND
) \
1732 procedure(sub_vu##VKIND##ii##VKIND
) :: SUB_VU_I_I(NAME
, VKIND
);
1733 #define
VEC_SUB_VR_I_R(NAME
, VKIND
) \
1734 procedure(sub_vr##VKIND##ir##VKIND
) :: SUB_VR_I_R(NAME
, VKIND
);
1737 VEC_SUB_VI_I_VI(vec_st
,1) VEC_SUB_VI_I_VI(vec_st
,2) VEC_SUB_VI_I_VI(vec_st
,4)
1738 VEC_SUB_VU_I_VU(vec_st
,1) VEC_SUB_VU_I_VU(vec_st
,2) VEC_SUB_VU_I_VU(vec_st
,4)
1739 VEC_SUB_VR_I_VR(vec_st
,4)
1740 VEC_SUB_VI_I_I(vec_st
,1) VEC_SUB_VI_I_I(vec_st
,2) VEC_SUB_VI_I_I(vec_st
,4)
1741 VEC_SUB_VU_I_I(vec_st
,1) VEC_SUB_VU_I_I(vec_st
,2) VEC_SUB_VU_I_I(vec_st
,4)
1742 VEC_SUB_VR_I_R(vec_st
,4)
1744 procedure
:: SUB_VI_I_VI(vec_st
,1), SUB_VI_I_VI(vec_st
,2), SUB_VI_I_VI(vec_st
,4)
1745 procedure
:: SUB_VU_I_VU(vec_st
,1), SUB_VU_I_VU(vec_st
,2), SUB_VU_I_VU(vec_st
,4)
1746 procedure
:: SUB_VR_I_VR(vec_st
,4)
1747 procedure
:: SUB_VI_I_I(vec_st
,1), SUB_VI_I_I(vec_st
,2), SUB_VI_I_I(vec_st
,4)
1748 procedure
:: SUB_VU_I_I(vec_st
,1), SUB_VU_I_I(vec_st
,2), SUB_VU_I_I(vec_st
,4)
1749 procedure
:: SUB_VR_I_R(vec_st
,4)
1750 end interface vec_st
1754 VEC_SUB_VI_I_I(vec_ste
,1) VEC_SUB_VI_I_I(vec_ste
,2) VEC_SUB_VI_I_I(vec_ste
,4)
1755 VEC_SUB_VU_I_I(vec_ste
,1) VEC_SUB_VU_I_I(vec_ste
,2) VEC_SUB_VU_I_I(vec_ste
,4)
1756 VEC_SUB_VR_I_R(vec_ste
,4)
1758 procedure
:: SUB_VI_I_I(vec_ste
,1), SUB_VI_I_I(vec_ste
,2), SUB_VI_I_I(vec_ste
,4)
1759 procedure
:: SUB_VU_I_I(vec_ste
,1), SUB_VU_I_I(vec_ste
,2), SUB_VU_I_I(vec_ste
,4)
1760 procedure
:: SUB_VR_I_R(vec_ste
,4)
1761 end interface vec_ste
1765 VEC_SUB_VI_I_VI(vec_stxv
,1) VEC_SUB_VI_I_VI(vec_stxv
,2) VEC_SUB_VI_I_VI(vec_stxv
,4) VEC_SUB_VI_I_VI(vec_stxv
,8)
1766 VEC_SUB_VU_I_VU(vec_stxv
,1) VEC_SUB_VU_I_VU(vec_stxv
,2) VEC_SUB_VU_I_VU(vec_stxv
,4) VEC_SUB_VU_I_VU(vec_stxv
,8)
1767 VEC_SUB_VR_I_VR(vec_stxv
,4) VEC_SUB_VR_I_VR(vec_stxv
,8)
1768 VEC_SUB_VI_I_I(vec_stxv
,1) VEC_SUB_VI_I_I(vec_stxv
,2) VEC_SUB_VI_I_I(vec_stxv
,4) VEC_SUB_VI_I_I(vec_stxv
,8)
1769 VEC_SUB_VU_I_I(vec_stxv
,1) VEC_SUB_VU_I_I(vec_stxv
,2) VEC_SUB_VU_I_I(vec_stxv
,4) VEC_SUB_VU_I_I(vec_stxv
,8)
1770 VEC_SUB_VR_I_R(vec_stxv
,4) VEC_SUB_VR_I_R(vec_stxv
,8)
1772 procedure
:: SUB_VI_I_VI(vec_stxv
,1), SUB_VI_I_VI(vec_stxv
,2), SUB_VI_I_VI(vec_stxv
,4), SUB_VI_I_VI(vec_stxv
,8)
1773 procedure
:: SUB_VU_I_VU(vec_stxv
,1), SUB_VU_I_VU(vec_stxv
,2), SUB_VU_I_VU(vec_stxv
,4), SUB_VU_I_VU(vec_stxv
,8)
1774 procedure
:: SUB_VR_I_VR(vec_stxv
,4), SUB_VR_I_VR(vec_stxv
,8)
1775 procedure
:: SUB_VI_I_I(vec_stxv
,1), SUB_VI_I_I(vec_stxv
,2), SUB_VI_I_I(vec_stxv
,4), SUB_VI_I_I(vec_stxv
,8)
1776 procedure
:: SUB_VU_I_I(vec_stxv
,1), SUB_VU_I_I(vec_stxv
,2), SUB_VU_I_I(vec_stxv
,4), SUB_VU_I_I(vec_stxv
,8)
1777 procedure
:: SUB_VR_I_R(vec_stxv
,4), SUB_VR_I_R(vec_stxv
,8)
1778 end interface vec_stxv
1782 VEC_SUB_VI_I_VI(vec_xst
,1) VEC_SUB_VI_I_VI(vec_xst
,2) VEC_SUB_VI_I_VI(vec_xst
,4) VEC_SUB_VI_I_VI(vec_xst
,8)
1783 VEC_SUB_VU_I_VU(vec_xst
,1) VEC_SUB_VU_I_VU(vec_xst
,2) VEC_SUB_VU_I_VU(vec_xst
,4) VEC_SUB_VU_I_VU(vec_xst
,8)
1784 VEC_SUB_VR_I_VR(vec_xst
,4) VEC_SUB_VR_I_VR(vec_xst
,8)
1785 VEC_SUB_VI_I_I(vec_xst
,1) VEC_SUB_VI_I_I(vec_xst
,2) VEC_SUB_VI_I_I(vec_xst
,4) VEC_SUB_VI_I_I(vec_xst
,8)
1786 VEC_SUB_VU_I_I(vec_xst
,1) VEC_SUB_VU_I_I(vec_xst
,2) VEC_SUB_VU_I_I(vec_xst
,4) VEC_SUB_VU_I_I(vec_xst
,8)
1787 VEC_SUB_VR_I_R(vec_xst
,4) VEC_SUB_VR_I_R(vec_xst
,8)
1789 procedure
:: SUB_VI_I_VI(vec_xst
,1), SUB_VI_I_VI(vec_xst
,2), SUB_VI_I_VI(vec_xst
,4), SUB_VI_I_VI(vec_xst
,8)
1790 procedure
:: SUB_VU_I_VU(vec_xst
,1), SUB_VU_I_VU(vec_xst
,2), SUB_VU_I_VU(vec_xst
,4), SUB_VU_I_VU(vec_xst
,8)
1791 procedure
:: SUB_VR_I_VR(vec_xst
,4), SUB_VR_I_VR(vec_xst
,8)
1792 procedure
:: SUB_VI_I_I(vec_xst
,1), SUB_VI_I_I(vec_xst
,2), SUB_VI_I_I(vec_xst
,4), SUB_VI_I_I(vec_xst
,8)
1793 procedure
:: SUB_VU_I_I(vec_xst
,1), SUB_VU_I_I(vec_xst
,2), SUB_VU_I_I(vec_xst
,4), SUB_VU_I_I(vec_xst
,8)
1794 procedure
:: SUB_VR_I_R(vec_xst
,4), SUB_VR_I_R(vec_xst
,8)
1795 end interface vec_xst
1799 VEC_SUB_VI_I_VI(vec_xst_be
,1) VEC_SUB_VI_I_VI(vec_xst_be
,2) VEC_SUB_VI_I_VI(vec_xst_be
,4) VEC_SUB_VI_I_VI(vec_xst_be
,8)
1800 VEC_SUB_VU_I_VU(vec_xst_be
,1) VEC_SUB_VU_I_VU(vec_xst_be
,2) VEC_SUB_VU_I_VU(vec_xst_be
,4) VEC_SUB_VU_I_VU(vec_xst_be
,8)
1801 VEC_SUB_VR_I_VR(vec_xst_be
,4) VEC_SUB_VR_I_VR(vec_xst_be
,8)
1802 VEC_SUB_VI_I_I(vec_xst_be
,1) VEC_SUB_VI_I_I(vec_xst_be
,2) VEC_SUB_VI_I_I(vec_xst_be
,4) VEC_SUB_VI_I_I(vec_xst_be
,8)
1803 VEC_SUB_VU_I_I(vec_xst_be
,1) VEC_SUB_VU_I_I(vec_xst_be
,2) VEC_SUB_VU_I_I(vec_xst_be
,4) VEC_SUB_VU_I_I(vec_xst_be
,8)
1804 VEC_SUB_VR_I_R(vec_xst_be
,4) VEC_SUB_VR_I_R(vec_xst_be
,8)
1805 interface vec_xst_be
1806 procedure
:: SUB_VI_I_VI(vec_xst_be
,1), SUB_VI_I_VI(vec_xst_be
,2), SUB_VI_I_VI(vec_xst_be
,4), SUB_VI_I_VI(vec_xst_be
,8)
1807 procedure
:: SUB_VU_I_VU(vec_xst_be
,1), SUB_VU_I_VU(vec_xst_be
,2), SUB_VU_I_VU(vec_xst_be
,4), SUB_VU_I_VU(vec_xst_be
,8)
1808 procedure
:: SUB_VR_I_VR(vec_xst_be
,4), SUB_VR_I_VR(vec_xst_be
,8)
1809 procedure
:: SUB_VI_I_I(vec_xst_be
,1), SUB_VI_I_I(vec_xst_be
,2), SUB_VI_I_I(vec_xst_be
,4), SUB_VI_I_I(vec_xst_be
,8)
1810 procedure
:: SUB_VU_I_I(vec_xst_be
,1), SUB_VU_I_I(vec_xst_be
,2), SUB_VU_I_I(vec_xst_be
,4), SUB_VU_I_I(vec_xst_be
,8)
1811 procedure
:: SUB_VR_I_R(vec_xst_be
,4), SUB_VR_I_R(vec_xst_be
,8)
1812 end interface vec_xst_be
1813 public
:: vec_xst_be
1816 VEC_SUB_VI_I_VI(vec_xstd2_
,1) VEC_SUB_VI_I_VI(vec_xstd2_
,2) VEC_SUB_VI_I_VI(vec_xstd2_
,4) VEC_SUB_VI_I_VI(vec_xstd2_
,8)
1817 VEC_SUB_VU_I_VU(vec_xstd2_
,1) VEC_SUB_VU_I_VU(vec_xstd2_
,2) VEC_SUB_VU_I_VU(vec_xstd2_
,4) VEC_SUB_VU_I_VU(vec_xstd2_
,8)
1818 VEC_SUB_VR_I_VR(vec_xstd2_
,4) VEC_SUB_VR_I_VR(vec_xstd2_
,8)
1819 VEC_SUB_VI_I_I(vec_xstd2_
,1) VEC_SUB_VI_I_I(vec_xstd2_
,2) VEC_SUB_VI_I_I(vec_xstd2_
,4) VEC_SUB_VI_I_I(vec_xstd2_
,8)
1820 VEC_SUB_VU_I_I(vec_xstd2_
,1) VEC_SUB_VU_I_I(vec_xstd2_
,2) VEC_SUB_VU_I_I(vec_xstd2_
,4) VEC_SUB_VU_I_I(vec_xstd2_
,8)
1821 VEC_SUB_VR_I_R(vec_xstd2_
,4) VEC_SUB_VR_I_R(vec_xstd2_
,8)
1823 procedure
:: SUB_VI_I_VI(vec_xstd2_
,1), SUB_VI_I_VI(vec_xstd2_
,2), SUB_VI_I_VI(vec_xstd2_
,4), SUB_VI_I_VI(vec_xstd2_
,8)
1824 procedure
:: SUB_VU_I_VU(vec_xstd2_
,1), SUB_VU_I_VU(vec_xstd2_
,2), SUB_VU_I_VU(vec_xstd2_
,4), SUB_VU_I_VU(vec_xstd2_
,8)
1825 procedure
:: SUB_VR_I_VR(vec_xstd2_
,4), SUB_VR_I_VR(vec_xstd2_
,8)
1826 procedure
:: SUB_VI_I_I(vec_xstd2_
,1), SUB_VI_I_I(vec_xstd2_
,2), SUB_VI_I_I(vec_xstd2_
,4), SUB_VI_I_I(vec_xstd2_
,8)
1827 procedure
:: SUB_VU_I_I(vec_xstd2_
,1), SUB_VU_I_I(vec_xstd2_
,2), SUB_VU_I_I(vec_xstd2_
,4), SUB_VU_I_I(vec_xstd2_
,8)
1828 procedure
:: SUB_VR_I_R(vec_xstd2_
,4), SUB_VR_I_R(vec_xstd2_
,8)
1829 end interface vec_xstd2
1833 VEC_SUB_VI_I_VI(vec_xstw4_
,1) VEC_SUB_VI_I_VI(vec_xstw4_
,2) VEC_SUB_VI_I_VI(vec_xstw4_
,4)
1834 VEC_SUB_VU_I_VU(vec_xstw4_
,1) VEC_SUB_VU_I_VU(vec_xstw4_
,2) VEC_SUB_VU_I_VU(vec_xstw4_
,4)
1835 VEC_SUB_VR_I_VR(vec_xstw4_
,4)
1836 VEC_SUB_VI_I_I(vec_xstw4_
,1) VEC_SUB_VI_I_I(vec_xstw4_
,2) VEC_SUB_VI_I_I(vec_xstw4_
,4)
1837 VEC_SUB_VU_I_I(vec_xstw4_
,1) VEC_SUB_VU_I_I(vec_xstw4_
,2) VEC_SUB_VU_I_I(vec_xstw4_
,4)
1838 VEC_SUB_VR_I_R(vec_xstw4_
,4)
1840 procedure
:: SUB_VI_I_VI(vec_xstw4_
,1), SUB_VI_I_VI(vec_xstw4_
,2), SUB_VI_I_VI(vec_xstw4_
,4)
1841 procedure
:: SUB_VU_I_VU(vec_xstw4_
,1), SUB_VU_I_VU(vec_xstw4_
,2), SUB_VU_I_VU(vec_xstw4_
,4)
1842 procedure
:: SUB_VR_I_VR(vec_xstw4_
,4)
1843 procedure
:: SUB_VI_I_I(vec_xstw4_
,1), SUB_VI_I_I(vec_xstw4_
,2), SUB_VI_I_I(vec_xstw4_
,4)
1844 procedure
:: SUB_VU_I_I(vec_xstw4_
,1), SUB_VU_I_I(vec_xstw4_
,2), SUB_VU_I_I(vec_xstw4_
,4)
1845 procedure
:: SUB_VR_I_R(vec_xstw4_
,4)
1846 end interface vec_xstw4
1849 #undef VEC_SUB_VI_I_VI
1850 #undef VEC_SUB_VU_I_VU
1851 #undef VEC_SUB_VR_I_VR
1852 #undef VEC_SUB_VI_I_I
1853 #undef VEC_SUB_VU_I_I
1854 #undef VEC_SUB_VR_I_R
1862 !-----------------------------------------------------------------------
1863 ! subroutine(__vector_pair, integer, __vector_pair/vector/integer/real)
1864 !-----------------------------------------------------------------------
1865 #define
VP_I0_VI(NAME
, VKIND
) __ppc_##NAME##_vpi0vi##VKIND
1866 #define
VP_I0_VU(NAME
, VKIND
) __ppc_##NAME##_vpi0vu##VKIND
1867 #define
VP_I0_VR(NAME
, VKIND
) __ppc_##NAME##_vpi0vr##VKIND
1869 #define
VEC_VP_I0_VI(NAME
, VKIND
) \
1870 procedure(sub_vpi0vi##VKIND
) :: VP_I0_VI(NAME
, VKIND
);
1871 #define
VEC_VP_I0_VU(NAME
, VKIND
) \
1872 procedure(sub_vpi0vu##VKIND
) :: VP_I0_VU(NAME
, VKIND
);
1873 #define
VEC_VP_I0_VR(NAME
, VKIND
) \
1874 procedure(sub_vpi0vr##VKIND
) :: VP_I0_VR(NAME
, VKIND
);
1877 procedure(sub_vpi0vp
) :: __ppc_vec_stxvp_vpi0vp0
1878 procedure(sub_vpi0i0
) :: __ppc_vec_stxvp_vpi0i0
1879 procedure(sub_vpi0r0
) :: __ppc_vec_stxvp_vpi0r0
1880 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)
1881 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)
1882 VEC_VP_I0_VR(vec_stxvp
, 4) VEC_VP_I0_VR(vec_stxvp
, 8)
1884 procedure
:: __ppc_vec_stxvp_vpi0vp0
1885 procedure
:: __ppc_vec_stxvp_vpi0i0
1886 procedure
:: __ppc_vec_stxvp_vpi0r0
1887 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)
1888 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)
1889 procedure
:: VP_I0_VR(vec_stxvp
, 4), VP_I0_VR(vec_stxvp
, 8)
1890 end interface vec_stxvp
1893 ! vsx_stxvp (alias to vec_stxvp)
1895 procedure
:: __ppc_vec_stxvp_vpi0vp0
1896 procedure
:: __ppc_vec_stxvp_vpi0i0
1897 procedure
:: __ppc_vec_stxvp_vpi0r0
1898 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)
1899 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)
1900 procedure
:: VP_I0_VR(vec_stxvp
, 4), VP_I0_VR(vec_stxvp
, 8)
1901 end interface vsx_stxvp
1911 end module __ppc_intrinsics