brintos

brintos / llvm-project-archived public Read only

0
0
Text · 79.7 KiB · b3ff33b Raw
1912 lines · plain
1!===-- module/__ppc_intrinsics.f90 -----------------------------------------===!2!3! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4! See https://llvm.org/LICENSE.txt for license information.5! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6!7!===------------------------------------------------------------------------===!8 9module __ppc_intrinsics10 11  private12 13! fmadd, fmsub, fnmadd, fnmsub14  abstract interface15    elemental real(4) function func_r4r4r4r4(a, x, y)16      real(4), intent(in) :: a, x, y17    end function func_r4r4r4r418    elemental real(8) function func_r8r8r8r8(a, x, y)19      real(8), intent(in) :: a, x, y20    end function func_r8r8r8r821 22!--------------------23! Vector intrinsic24!--------------------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; \30  end function ;31 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; \36  end function ;37 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; \42  end function ;43#define ELEM_FUNC_VRVR(VKIND) ELEM_FUNC_VRVR_2(VKIND, VKIND)44 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; \49  end function ;50#define ELEM_FUNC_VII(VKIND) ELEM_FUNC_VII_2(VKIND, VKIND)51 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; \56  end function ;57 58  ELEM_FUNC_VIVI(1) ELEM_FUNC_VIVI(2) ELEM_FUNC_VIVI(4) ELEM_FUNC_VIVI(8)59  ELEM_FUNC_VUVU(1)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)65 66#undef ELEM_FUNC_VRR67#undef ELEM_FUNC_VII68#undef ELEM_FUNC_VII_269#undef ELEM_FUNC_VRVR70#undef ELEM_FUNC_VRVR_271#undef ELEM_FUNC_VUVU72#undef ELEM_FUNC_VIVI73 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; \79  end function ;80 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; \85  end function ;86 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; \92  end function ;93#define ELEM_FUNC_VIVIVU(VKIND) ELEM_FUNC_VIVIVU_2(VKIND, VKIND)94 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; \100  end function ;101#define ELEM_FUNC_VUVUVU(VKIND) ELEM_FUNC_VUVUVU_2(VKIND, VKIND)102 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; \107  end function ;108 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; \114  end function ;115 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; \120  end function ;121 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; \126  end function ;127 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; \132  end function ;133 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; \138  end function ;139 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; \146  end function ;147 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; \154  end function ;155 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; \162  end function ;163 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; \170  end function ;171 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; \178  end function ;179 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; \186  end function ;187 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; \194  end function ;195 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; \203  end function ;204 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; \212  end function ;213 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; \221  end function ;222 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; \230  end function ;231 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; \239  end function ;240 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; \248  end function ;249 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; \257  end function ;258 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; \266  end function;267 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; \275  end function;276 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; \284  end function;285 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; \293  end function;294 295! The following macros are specific for the vec_convert(v, mold) intrinsics as296! the argument keywords are different from the other vector intrinsics.297!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; \305  end function ;306 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; \314  end function ;315 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; \323  end function ;324 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)359  FUNC_VPI0VP360  FUNC_VU1I0I(1) FUNC_VU1I0I(2) FUNC_VU1I0I(4)361  FUNC_VU1I0R(4)362 363#undef FUNC_VEC_CONVERT_VRVIVR364#undef FUNC_VEC_CONVERT_VUVIVU365#undef FUNC_VEC_CONVERT_VIVIVI366#undef FUNC_VPI0VP367#undef FUNC_VPI0VR368#undef FUNC_VPI0VU369#undef FUNC_VPI0VI370#undef FUNC_VU1I0R371#undef FUNC_VU1I0I372#undef FUNC_VRI0VR373#undef FUNC_VUI0VU374#undef FUNC_VII0VI375#undef FUNC_VRI0R376#undef FUNC_VII0I377#undef ELEM_FUNC_VRVRI0378#undef ELEM_FUNC_VUVUI0379#undef ELEM_FUNC_VIVII0380#undef ELEM_FUNC_RVRI381#undef ELEM_FUNC_VRVUI382#undef ELEM_FUNC_IVII383#undef ELEM_FUNC_VRVII384#undef ELEM_FUNC_IVRVR385#undef ELEM_FUNC_IVUVU386#undef ELEM_FUNC_IVIVI387#undef ELEM_FUNC_VUVRVR388#undef ELEM_FUNC_VRVRVU_2389#undef ELEM_FUNC_VRVRVR390#undef ELEM_FUNC_VUVUVU391#undef ELEM_FUNC_VUVUVU_2392#undef ELEM_FUNC_VIVIVU393#undef ELEM_FUNC_VIVIVU_2394#undef ELEM_FUNC_VUVIVI395#undef ELEM_FUNC_VIVIVI396 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; \402  end function ;403 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; \409  end function ;410#define ELEM_FUNC_VIVIVIVU(VKIND) ELEM_FUNC_VIVIVIVU_2(VKIND, VKIND)411 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; \417  end function ;418#define ELEM_FUNC_VUVUVUVU(VKIND) ELEM_FUNC_VUVUVUVU_2(VKIND, VKIND)419  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; \425  end function ;426#define ELEM_FUNC_VRVRVRVU(VKIND) ELEM_FUNC_VRVRVRVU_2(VKIND, VKIND)427 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; \434  end function ;435 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; \442  end function ;443 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; \450  end function ;451 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; \459  end function ;460 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; \468  end function ;469 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)482 483#undef ELEM_FUNC_VRRVRI484#undef ELEM_FUNC_VIIVII485#undef ELEM_FUNC_VRVRVRI486#undef ELEM_FUNC_VUVUVUI487#undef ELEM_FUNC_VIVIVII488#undef ELEM_FUNC_VRVRVRVU489#undef ELEM_FUNC_VRVRVRVU_2490#undef ELEM_FUNC_VUVUVUVU491#undef ELEM_FUNC_VUVUVUVU_2492#undef ELEM_FUNC_VIVIVIVU493#undef ELEM_FUNC_VIVIVIVU_2494#undef ELEM_FUNC_VRVRVRVR495 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; \505  end subroutine ;506 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; \515  end subroutine ;516 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; \525  end subroutine ;526 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; \535  end subroutine ;536 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; \545  end subroutine ;546 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; \555  end subroutine ;556 557! subroutine(__vector_pair, i, __vector_pair)558  pure subroutine sub_vpi0vp(arg1, arg2, arg3)559    __vector_pair, intent(in) :: arg1560    integer(8), intent(in) :: arg2561    !dir$ ignore_tkr(k) arg2562    __vector_pair, intent(out) :: arg3563    !dir$ ignore_tkr(r) arg3564  end subroutine565 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; \574  end subroutine;575 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; \584  end subroutine;585 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; \594  end subroutine;595 596! subroutine(__vector_pair, i, i)597  pure subroutine sub_vpi0i0(arg1, arg2, arg3)598    __vector_pair, intent(in) :: arg1599    integer(8), intent(in) :: arg2600    !dir$ ignore_tkr(k) arg2601    integer(8), intent(out) :: arg3602    !dir$ ignore_tkr(kr) arg3603  end subroutine604 605! subroutine(__vector_pair, i, r)606  pure subroutine sub_vpi0r0(arg1, arg2, arg3)607    __vector_pair, intent(in) :: arg1608    integer(8), intent(in) :: arg2609    !dir$ ignore_tkr(k) arg2610    real(8), intent(out) :: arg3611    !dir$ ignore_tkr(kr) arg3612  end subroutine613 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)623 624#undef SUB_VPI0VR625#undef SUB_VPI0VU626#undef SUB_VPI0VI627#undef SUB_VRIR628#undef SUB_VUII629#undef SUB_VIII630#undef SUB_VRIVR631#undef SUB_VUIVU632#undef SUB_VIIVI633 634  end interface635 636  procedure(func_r4r4r4r4) :: __ppc_fmadd_r4637  procedure(func_r8r8r8r8) :: __ppc_fmadd_r8638  interface fmadd639    procedure :: __ppc_fmadd_r4640    procedure :: __ppc_fmadd_r8641  end interface fmadd642  public :: fmadd643 644  procedure(func_r4r4r4r4) :: __ppc_fmsub_r4645  procedure(func_r8r8r8r8) :: __ppc_fmsub_r8646  interface fmsub647    procedure :: __ppc_fmsub_r4648    procedure :: __ppc_fmsub_r8649  end interface fmsub650  public :: fmsub651 652  procedure(func_r4r4r4r4) :: __ppc_fnmadd_r4653  procedure(func_r8r8r8r8) :: __ppc_fnmadd_r8654  interface fnmadd655    procedure :: __ppc_fnmadd_r4656    procedure :: __ppc_fnmadd_r8657  end interface fnmadd658  public :: fnmadd659 660  procedure(func_r4r4r4r4) :: __ppc_fnmsub_r4661  procedure(func_r8r8r8r8) :: __ppc_fnmsub_r8662  interface fnmsub663    procedure :: __ppc_fnmsub_r4664    procedure :: __ppc_fnmsub_r8665  end interface fnmsub666  public :: fnmsub667 668! fctid, fctidz, fctiw, fctiwz, fctudz, fctuwz669  abstract interface670    elemental real(4) function func_r4r4x(x)671      real(4), intent(in) :: x672    end function func_r4r4x673    elemental real(8) function func_r8r8x(x)674      real(8), intent(in) :: x675    end function func_r8r8x676  end interface677 678  procedure(func_r8r8x) :: __ppc_fctid679  interface fctid680    procedure :: __ppc_fctid681  end interface fctid682  public :: fctid683 684  procedure(func_r8r8x) :: __ppc_fctidz685  interface fctidz686    procedure :: __ppc_fctidz687  end interface fctidz688  public :: fctidz689 690  procedure(func_r8r8x) :: __ppc_fctiw691  interface fctiw692    procedure :: __ppc_fctiw693  end interface fctiw694  public :: fctiw695 696  procedure(func_r8r8x) :: __ppc_fctiwz697  interface fctiwz698    procedure :: __ppc_fctiwz699  end interface fctiwz700  public :: fctiwz701 702  procedure(func_r8r8x) :: __ppc_fctudz703  interface fctudz704    procedure :: __ppc_fctudz705  end interface fctudz706  public :: fctudz707 708  procedure(func_r8r8x) :: __ppc_fctuwz709  interface fctuwz710    procedure :: __ppc_fctuwz711  end interface fctuwz712  public :: fctuwz713 714! fcfi, fcfid, fcfud715  abstract interface716    elemental real(8) function func_r8r8i(i)717      real(8), intent(in) :: i718    end function func_r8r8i719  end interface720 721  procedure(func_r8r8i) :: __ppc_fcfi722  interface fcfi723    procedure :: __ppc_fcfi724  end interface fcfi725  public :: fcfi726 727  procedure(func_r8r8i) :: __ppc_fcfid728  interface fcfid729    procedure :: __ppc_fcfid730  end interface fcfid731  public :: fcfid732 733  procedure(func_r8r8i) :: __ppc_fcfud734  interface fcfud735    procedure :: __ppc_fcfud736  end interface fcfud737  public :: fcfud738 739! fnabs740  procedure(func_r4r4x) :: __ppc_fnabs_r4741  procedure(func_r8r8x) :: __ppc_fnabs_r8742  interface fnabs743    procedure :: __ppc_fnabs_r4744    procedure :: __ppc_fnabs_r8745  end interface fnabs746  public :: fnabs747 748! fre, fres749  procedure(func_r8r8x) :: __ppc_fre750  interface fre751    procedure :: __ppc_fre752  end interface fre753  public :: fre754 755  procedure(func_r4r4x) :: __ppc_fres756  interface fres757    procedure :: __ppc_fres758  end interface fres759  public :: fres760 761! frsqrte, frsqrtes762  procedure(func_r8r8x) :: __ppc_frsqrte763  interface frsqrte764    procedure :: __ppc_frsqrte765  end interface frsqrte766  public :: frsqrte767 768  procedure(func_r4r4x) :: __ppc_frsqrtes769  interface frsqrtes770    procedure :: __ppc_frsqrtes771  end interface frsqrtes772  public :: frsqrtes773 774! mtfsf, mtfsfi775  interface mtfsf776    subroutine __ppc_mtfsf(mask, r)777      integer(4), intent(in) :: mask778      real(8), intent(in) :: r779    end subroutine __ppc_mtfsf780  end interface mtfsf781  public :: mtfsf782 783  interface mtfsfi784    subroutine __ppc_mtfsfi(bf, i)785      integer(4), intent(in) :: bf786      integer(4), intent(in) :: i787    end subroutine __ppc_mtfsfi788  end interface mtfsfi789  public :: mtfsfi790 791!-----------------------------792! vector function(vector/i/r)793!-----------------------------794#define VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND795#define VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND796#define VR_VR_2(NAME, VKIND1, VKIND2) __ppc_##NAME##_vr##VKIND1##vr##VKIND2797#define VR_VR(NAME, VKIND) VR_VR_2(NAME, VKIND, VKIND)798#define VI_I_2(NAME, RKIND, VKIND) __ppc_##NAME##_vi##RKIND##i##VKIND799#define VI_I(NAME, VKIND) VI_I_2(NAME, VKIND, VKIND)800#define VR_R(NAME, VKIND) __ppc_##NAME##_vr##VKIND##r##VKIND801 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);814 815! vec_abs816  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)818  interface vec_abs819    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_abs822  public :: vec_abs823 824! vec_cvf825  VEC_VR_VR_2(vec_cvf,4,8) VEC_VR_VR_2(vec_cvf,8,4)826  interface vec_cvf827    procedure :: VR_VR_2(vec_cvf,4,8), VR_VR_2(vec_cvf,8,4)828  end interface vec_cvf829  public :: vec_cvf830 831! vec_cvbf16spn832  VEC_VU_VU(vec_cvbf16spn,1)833  interface vec_cvbf16spn834    procedure :: VU_VU(vec_cvbf16spn,1)835  end interface836  public vec_cvbf16spn837 838! vec_cvspbf16839  VEC_VU_VU(vec_cvspbf16_,1)840  interface vec_cvspbf16841    procedure :: VU_VU(vec_cvspbf16_,1)842  end interface843  public vec_cvspbf16844 845! vec_splats846  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)848  interface vec_splats849     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_splats852  public :: vec_splats853 854! vec_splat_32855  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_s32857     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_s32859  public :: vec_splat_s32860 861#undef VEC_VR_R862#undef VEC_VI_I863#undef VEC_VI_I_2864#undef VEC_VR_VR865#undef VEC_VR_VR_2866#undef VEC_VU_VU867#undef VEC_VI_VI868#undef VR_R869#undef VI_I870#undef VI_I_2871#undef VR_VR872#undef VR_VR_2873#undef VU_VU874#undef VI_VI875  876!---------------------------------877! vector function(vector, vector)878!---------------------------------879#define VI_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND880#define VU_VI_VI(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vi##VKIND##vi##VKIND881#define VU_VU_VU_2(NAME, VKIND1, VKIND2) __ppc_##NAME##_vu##VKIND1##vu##VKIND1##vu##VKIND2882#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##VKIND2884#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##VKIND886#define VR_VR_VU_2(NAME, VKIND1, VKIND2) __ppc_##NAME##_vr##VKIND1##vr##VKIND1##vu##VKIND2887#define VU_VR_VR(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vr##VKIND##vr##VKIND888 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);905 906! vec_add907  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)910  interface vec_add911    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_add915  public :: vec_add916 917! vec_and918  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)921  interface vec_and922    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_and926  public :: vec_and927 928! vec_cmpge929  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)932  interface vec_cmpge933    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_cmpge937  public :: vec_cmpge938 939! vec_cmpgt940  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)943  interface vec_cmpgt944    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_cmpgt948  public :: vec_cmpgt949 950! vec_cmple951  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)954  interface vec_cmple955    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_cmple959  public :: vec_cmple960 961! vec_cmplt962  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)965  interface vec_cmplt966    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_cmplt970  public :: vec_cmplt971 972! vec_convert973! Argument 'v' has the `ignore_tkr` directive974#define CONVERT_VI_VI_VI(VKIND) __ppc_vec_convert_vi##VKIND##vi##vi##VKIND975#define CONVERT_VU_VI_VU(VKIND) __ppc_vec_convert_vu##VKIND##vi##vu##VKIND976#define CONVERT_VR_VI_VR(VKIND) __ppc_vec_convert_vr##VKIND##vi##vr##VKIND977 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);984 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_convert989    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_convert993  public :: vec_convert994 995#undef VEC_CONVERT_VR_VI_VR996#undef VEC_CONVERT_VU_VI_VU997#undef VEC_CONVERT_VI_VI_VI998#undef CONVERT_VR_VI_VR999#undef CONVERT_VU_VI_VU1000#undef CONVERT_VI_VI_VI1001 1002! vec_max1003  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)1006  interface vec_max1007    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_max1011  public :: vec_max1012 1013! vec_mergeh1014  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_mergeh1018    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_mergeh1022  public :: vec_mergeh1023 1024! vec_mergel1025  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_mergel1029    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_mergel1033  public :: vec_mergel1034 1035! vec_min1036  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)1039  interface vec_min1040    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_min1044  public :: vec_min1045 1046! vec_mul1047  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)1050  interface vec_mul1051    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_mul1055  public :: vec_mul1056 1057! vec_sub1058  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)1061  interface vec_sub1062    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_sub1066  public :: vec_sub1067 1068! vec_sl1069  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)1071  interface vec_sl1072    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_sl1075  public :: vec_sl1076 1077! vec_sll1078  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)1084  interface vec_sll1085    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_sll1092  public :: vec_sll1093 1094! vec_slo1095  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)1100  interface vec_slo1101    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_slo1107  public :: vec_slo1108 1109! vec_sr1110  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)1112  interface vec_sr1113    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_sr1116  public :: vec_sr1117 1118! vec_srl1119  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)1125  interface vec_srl1126    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_srl1133  public :: vec_srl1134 1135! vec_sro1136  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)1141  interface vec_sro1142    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_sro1148  public :: vec_sro1149 1150! vec_xor1151  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)1154  interface vec_xor1155    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_xor1159  public :: vec_xor1160 1161#undef VEC_VU_VR_VR1162#undef VEC_VR_VR_VR1163#undef VEC_VU_VU_VU1164#undef VEC_VU_VU_VU_21165#undef VEC_VI_VI_VI1166#undef VEC_VU_VI_VI1167#undef VEC_VI_VI_VU1168#undef VEC_VI_VI_VU_21169#undef VU_VR_VR1170#undef VR_VR_VU_21171#undef VR_VR_VR1172#undef VU_VU_VU1173#undef VU_VU_VU_21174#undef VI_VI_VU1175#undef VI_VI_VU_21176#undef VU_VI_VI1177#undef VI_VI_VI1178 1179!-------------------------------------------------------1180! vector(unsigned(1)) function(integer, i/r)1181!-------------------------------------------------------1182#define VU1_I0_I(NAME, KIND) __ppc_##NAME##_vu1i0i##KIND1183#define VU1_I0_R(NAME, KIND) __ppc_##NAME##_vu1i0r##KIND1184 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);1189 1190! vec_lvsl1191  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)1193  interface vec_lvsl1194    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)1196  end interface1197  public :: vec_lvsl1198 1199! vec_lvsr1200  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)1202  interface vec_lvsr1203    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)1205  end interface1206  public :: vec_lvsr1207 1208#undef VEC_VU1_I0_R1209#undef VEC_VU1_I0_I1210#undef VU1_I0_R1211#undef VU1_I0_I1212 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##VKIND1218#define VU_I0_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##i0##vu##VKIND1219#define VR_I0_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##i0##vr##VKIND1220#define VI_I0_I(NAME, VKIND) __ppc_##NAME##_vi##VKIND##i0##i##VKIND1221#define VR_I0_R(NAME, VKIND) __ppc_##NAME##_vr##VKIND##i0##r##VKIND1222 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);1233 1234! vec_ld1235  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)1240  interface vec_ld1241    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)1246  end interface1247  public :: vec_ld1248 1249! vec_lde1250  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)1252  interface vec_lde1253    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)1255  end interface1256  public :: vec_lde1257 1258! vec_ldl1259  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)1264  interface vec_ldl1265    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)1270  end interface1271  public :: vec_ldl1272 1273! vec_lxv1274  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)1279  interface vec_lxv1280    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)1285  end interface1286  public :: vec_lxv1287 1288! vec_xl1289  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)1294  interface vec_xl1295    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)1300  end interface1301  public :: vec_xl1302 1303! vec_xl_be1304  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)1309  interface vec_xl_be1310    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)1315  end interface1316  public :: vec_xl_be1317 1318! vec_xld21319  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)1324  interface vec_xld21325    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)1330  end interface1331  public :: vec_xld21332 1333! vec_xlds1334  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)1339  interface vec_xlds1340    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)1345  end interface1346  public :: vec_xlds1347 1348! vec_xlw41349  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)1354  interface vec_xlw41355    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)1360  end interface1361  public :: vec_xlw41362 1363#undef VEC_VR_I0_R1364#undef VEC_VI_I0_I1365#undef VEC_VR_I0_VR1366#undef VEC_VU_I0_VU1367#undef VEC_VI_I0_VI1368#undef VR_I0_R1369#undef VI_I0_I1370#undef VR_I0_VR1371#undef VU_I0_VU1372#undef VI_I0_VI1373 1374!-------------------------------------------------------1375! __vector_pair function(integer, vector/__vector_pair)1376!-------------------------------------------------------1377#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0##vi##VKIND1378#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0##vu##VKIND1379#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0##vr##VKIND1380#define VP_I0_VP(NAME) __ppc_##NAME##_vpi0vp01381 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);1389 1390! vec_lxvp1391  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)1395  interface vec_lxvp1396     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_lxvp1401  public :: vec_lxvp1402 1403! vsx_lxvp (alias to vec_lxvp)1404  interface vsx_lxvp1405     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_lxvp1410  public :: vsx_lxvp1411 1412#undef VEC_VP_I0_VP1413#undef VEC_VP_I0_VR1414#undef VEC_VP_I0_VU1415#undef VEC_VP_I0_VI1416#undef VP_I0_VP1417#undef VP_I0_VR1418#undef VP_I0_VU1419#undef VP_I0_VI1420 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##VKIND1425#define VI_VI_VI_VU_2(NAME, VKIND, UKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##vu##UKIND1426#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##UKIND1428#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##UKIND1430#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##i01433#define VU_VU_VU_I(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##i01434#define VR_VR_VR_I(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##i01435 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);1453 1454! vec_madd1455  VEC_VR_VR_VR_VR(vec_madd,4) VEC_VR_VR_VR_VR(vec_madd,8)1456  interface vec_madd1457    procedure :: VR_VR_VR_VR(vec_madd,4), VR_VR_VR_VR(vec_madd,8)1458  end interface vec_madd1459  public :: vec_madd1460 1461! vec_msub1462  VEC_VR_VR_VR_VR(vec_msub,4) VEC_VR_VR_VR_VR(vec_msub,8)1463  interface vec_msub1464    procedure :: VR_VR_VR_VR(vec_msub,4), VR_VR_VR_VR(vec_msub,8)1465  end interface vec_msub1466  public :: vec_msub1467 1468! vec_nmadd1469  VEC_VR_VR_VR_VR(vec_nmadd,4) VEC_VR_VR_VR_VR(vec_nmadd,8)1470  interface vec_nmadd1471    procedure :: VR_VR_VR_VR(vec_nmadd,4), VR_VR_VR_VR(vec_nmadd,8)1472  end interface vec_nmadd1473  public :: vec_nmadd1474 1475! vec_nmsub1476  VEC_VR_VR_VR_VR(vec_nmsub,4) VEC_VR_VR_VR_VR(vec_nmsub,8)1477  interface vec_nmsub1478    procedure :: VR_VR_VR_VR(vec_nmsub,4), VR_VR_VR_VR(vec_nmsub,8)1479  end interface vec_nmsub1480  public :: vec_nmsub1481 1482! vec_perm1483  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)1486  interface vec_perm1487     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_perm1491  public :: vec_perm1492 1493! vec_permi1494  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)1497  interface vec_permi1498     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_permi1502  public :: vec_permi1503 1504! vec_sel1505  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)1508  interface vec_sel1509    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_sel1513  public :: vec_sel1514 1515#undef VEC_VR_VR_VR_I1516#undef VEC_VU_VU_VU_I1517#undef VEC_VI_VI_VI_I1518#undef VEC_VI_VI_VI_VU_21519#undef VEC_VI_VI_VI_VU1520#undef VEC_VU_VU_VU_VU_21521#undef VEC_VU_VU_VU_VU1522#undef VEC_VR_VR_VR_VU_21523#undef VEC_VR_VR_VR_VU1524#undef VEC_VR_VR_VR_VR1525#undef VR_VR_VR_I1526#undef VU_VU_VU_I1527#undef VI_VI_VI_I1528#undef VI_VI_VI_VU1529#undef VI_VI_VI_VU_21530#undef VU_VU_VU_VU1531#undef VU_VU_VU_VU_21532#undef VR_VR_VR_VU1533#undef VR_VR_VR_VU_21534#undef VR_VR_VR_VR1535 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##i01541#define VR_R_VR_I(NAME, VKIND) __ppc_##NAME##_vr##VKIND##r##VKIND##vr##VKIND##i01542 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);1547 1548! vec_insert1549  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_insert1552     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_insert1555  public :: vec_insert1556 1557#undef VEC_VR_R_VR_I1558#undef VEC_VI_I_VI_I1559#undef VR_R_VR_I1560#undef VI_I_VI_I1561 1562!----------------------------------1563! integer function(vector, vector)1564!----------------------------------1565#define I_VI_VI(NAME, RKIND, VKIND) __ppc_##NAME##_i##RKIND##vi##VKIND##vi##VKIND1566#define I_VU_VU(NAME, RKIND, VKIND) __ppc_##NAME##_i##RKIND##vu##VKIND##vu##VKIND1567#define I_VR_VR(NAME, RKIND, VKIND) __ppc_##NAME##_i##RKIND##vr##VKIND##vr##VKIND1568 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);1575 1576! vec_any_ge1577  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_ge1581    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_ge1585  public :: vec_any_ge1586 1587#undef VEC_I_VR_VR1588#undef VEC_I_VU_VU1589#undef VEC_I_VI_VI1590#undef I_VR_VR1591#undef I_VU_VU1592#undef I_VI_VI1593 1594!----------------------------------------1595! integer/real function(vector, integer)1596!----------------------------------------1597#define I_VI_I(NAME, VKIND) __ppc_##NAME##_i##VKIND##vi##VKIND##i01598#define R_VR_I(NAME, VKIND) __ppc_##NAME##_r##VKIND##vr##VKIND##i01599 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);1604 1605! vec_extract1606  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_extract1609     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)1611  end interface1612  public :: vec_extract1613 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##i01619#define VU_VU_VU_I(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##i01620#define VR_VR_VR_I(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##i01621 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);1628 1629! vec_sld1630  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)1633  interface vec_sld1634    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_sld1638  public :: vec_sld1639 1640! vec_sldw1641  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)1644  interface vec_sldw1645    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_sldw1649  public :: vec_sldw1650 1651#undef VEC_VR_VR_VR_I1652#undef VEC_VU_VU_VU_I1653#undef VEC_VI_VI_VI_I1654#undef VR_VR_VR_I1655#undef VU_VU_VU_I1656#undef VI_VI_VI_I1657 1658!----------------------------------1659! vector function(vector, integer)1660!----------------------------------1661! 'i0' stands for the integer argument being ignored via1662! the `ignore_tkr' directive.1663#define VR_VI_I(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vi##VKIND##i01664#define VR_VU_I(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vu##VKIND##i01665#define VI_VI_I0(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND##i01666#define VU_VU_I0(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND##i01667#define VR_VR_I0(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND##i01668 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);1679 1680! vec_ctf1681  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)1683  interface vec_ctf1684     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_ctf1687  public :: vec_ctf1688 1689! vec_splat1690  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)1693  interface vec_splat1694     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_splat1698  public :: vec_splat1699 1700#undef VEC_VR_VR_I01701#undef VEC_VU_VU_I01702#undef VEC_VI_VI_I01703#undef VEC_VR_VU_I1704#undef VEC_VR_VI_I1705#undef VR_VR_I01706#undef VU_VU_I01707#undef VI_VI_I01708#undef VR_VU_I1709#undef VR_VI_I1710 1711!--------------------------------------------------1712! subroutine(vector, integer, vector/integer/real)1713!--------------------------------------------------1714! 'i0' stands for the integer argument being ignored via1715! the `ignore_tkr' directive.1716#define SUB_VI_I_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##i0vi##VKIND1717#define SUB_VU_I_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##i0vu##VKIND1718#define SUB_VR_I_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##i0vr##VKIND1719#define SUB_VI_I_I(NAME, VKIND) __ppc_##NAME##_vi##VKIND##i0i##VKIND1720#define SUB_VU_I_I(NAME, VKIND) __ppc_##NAME##_vu##VKIND##i0u##VKIND1721#define SUB_VR_I_R(NAME, VKIND) __ppc_##NAME##_vr##VKIND##i0r##VKIND1722 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);1735 1736! vec_st1737  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)1743  interface vec_st1744    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_st1751  public :: vec_st1752 1753! vec_ste1754  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)1757  interface vec_ste1758    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_ste1762  public :: vec_ste1763 1764! vec_stxv1765  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)1771  interface vec_stxv1772    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_stxv1779  public :: vec_stxv1780 1781! vec_xst1782  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)1788  interface vec_xst1789    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_xst1796  public :: vec_xst1797 1798! vec_xst_be1799  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_be1806    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_be1813  public :: vec_xst_be1814 1815! vec_xstd21816  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)1822  interface vec_xstd21823    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_xstd21830  public :: vec_xstd21831 1832! vec_xstw41833  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)1839  interface vec_xstw41840    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_xstw41847  public :: vec_xstw41848 1849#undef VEC_SUB_VI_I_VI1850#undef VEC_SUB_VU_I_VU1851#undef VEC_SUB_VR_I_VR1852#undef VEC_SUB_VI_I_I1853#undef VEC_SUB_VU_I_I1854#undef VEC_SUB_VR_I_R1855#undef SUB_VI_I_VI1856#undef SUB_VU_I_VU1857#undef SUB_VR_I_VR1858#undef SUB_VI_I_I1859#undef SUB_VU_I_I1860#undef SUB_VR_Ik_R1861 1862!-----------------------------------------------------------------------1863! subroutine(__vector_pair, integer, __vector_pair/vector/integer/real)1864!-----------------------------------------------------------------------1865#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0vi##VKIND1866#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0vu##VKIND1867#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0vr##VKIND1868 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);1875 1876! vec_stxvp1877  procedure(sub_vpi0vp) :: __ppc_vec_stxvp_vpi0vp01878  procedure(sub_vpi0i0) :: __ppc_vec_stxvp_vpi0i01879  procedure(sub_vpi0r0) :: __ppc_vec_stxvp_vpi0r01880  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)1883  interface vec_stxvp1884     procedure :: __ppc_vec_stxvp_vpi0vp01885     procedure :: __ppc_vec_stxvp_vpi0i01886     procedure :: __ppc_vec_stxvp_vpi0r01887     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_stxvp1891  public :: vec_stxvp1892 1893! vsx_stxvp (alias to vec_stxvp)1894  interface vsx_stxvp1895     procedure :: __ppc_vec_stxvp_vpi0vp01896     procedure :: __ppc_vec_stxvp_vpi0i01897     procedure :: __ppc_vec_stxvp_vpi0r01898     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_stxvp1902  public :: vsx_stxvp1903 1904#undef VEC_VP_I0_VR1905#undef VEC_VP_I0_VU1906#undef VEC_VP_I0_VI1907#undef VP_I0_VR1908#undef VP_I0_VU1909#undef VP_I0_VI1910 1911end module __ppc_intrinsics1912