Reapplication of #137828 and #169638 Move building the .mod files from openmp/flang to openmp/flang-rt using a shared mechanism. Motivations to do so are: 1. Most modules are target-dependent and need to be re-compiled for each target separately, which is something the LLVM_ENABLE_RUNTIMES system already does. Prime example is `iso_c_binding.mod` which encodes the target's ABI. Constants such as `c_long_double` also have different values). Most other modules have `#ifdef`-enclosed code as well. For instance this caused offload targets nvptx64-nvidia-cuda/amdgpu-amd-amdhsa to use the modules files compiled for the host which may contrain uses of the types REAL(10) or REAL(16) not available for nvptx/amdgpu. 2. CMake has support for Fortran that we should use. Among other things, it automatically determines module dependencies so there is no need to hardcode them in the CMakeLists.txt. Currently the dependencies between builtin modules and `omp_lib.mod` seem to be incorrect: https://github.com/llvm/llvm-project/pull/174474#issuecomment-3880189581 3. It allows using Fortran itself to implement Flang-RT. Currently, only `iso_fortran_env_impl.f90` emits object files that are needed by Fortran applications (#89403). The workaround of #95388 could be reverted (PR #169525). If using Flang for cross-compilation or target-offloading, flang-rt must now be compiled for each target not only for the library, but also to get the target-specific module files. For instance in a bootstrapping runtime build, this can be done by adding: `-DLLVM_RUNTIME_TARGETS=default;nvptx64-nvidia-cuda;amdgpu-amd-amdhsa`. Some new dependencies come into play: * openmp depends on flang-rt for building `lib_omp.mod` and `lib_omp_kinds.mod`. Currently, if flang-rt is not found then the modules are not built. * check-flang depends on flang-rt: If not found, the majority of tests are disabled. If not building in a bootstrpping build, the location of the module files can be pointed to using `-DFLANG_INTRINSIC_MODULES_DIR=<path>`, e.g. in a flang-standalone build. Alternatively, the test needing any of the intrinsic modules could be marked with `REQUIRES: flangrt-modules`. * check-flang depends on openmp: Not a change; tests requiring `lib_omp.mod` and `lib_omp_kinds.mod` those are already marked with `openmp_runtime`. As intrinsic are now specific to the target, their location is moved from `include/flang` to `<resource-dir>/finclude/flang/<triple>`. The mechnism to compute the location have been moved from flang-rt (previously used to compute the location of `libflang_rt.*.a`) to common locations in `cmake/GetToolchainDirs.cmake` and `runtimes/CMakeLists.txt` so they can be used by both, openmp and flang-rt. Potentially the mechnism could also be shared by other libraries such as compiler-rt. `finclude` was chosen because `gfortran` uses it as well and avoids misuse such as `#include <flang/iso_c_binding.mod>`. The search location is now determined by `ToolChain` in the driver, instead of by the frontend. Another subdirectory `flang` avoids accidental inclusion of gfortran-modules which due to compression would result in user-unfriendly errors. Now the driver adds `-fintrinsic-module-path` for that location to the frontend call (Just like gfortran does). Since the driver determines the location, tests invoking `flang -fc1` and `bbc` must also be passed the location by llvm-lit. This works like llvm-lit does for finding the include dirs for Clang using `-print-file-name=...`.
1122 lines
38 KiB
Fortran
1122 lines
38 KiB
Fortran
!===-- module/mma.f90 ------------------------------------------------------===!
|
|
!
|
|
! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
! See https://llvm.org/LICENSE.txt for license information.
|
|
! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
!
|
|
!===------------------------------------------------------------------------===!
|
|
|
|
module mma
|
|
implicit none
|
|
private
|
|
|
|
abstract interface
|
|
|
|
!! ========== 1 argument subroutine interface ================================!!
|
|
!! subroutine s(__vector_quad)
|
|
elemental subroutine sub_vq(acc)
|
|
__vector_quad, intent(inout) :: acc
|
|
end subroutine
|
|
|
|
!! ========== 2 argument subroutine interface ================================!!
|
|
!! __vector_pair function f(i, vector(i))
|
|
#define FUNC_VPI0VI(VKIND) \
|
|
pure __vector_pair function func_vpi0vi##VKIND(arg1, arg2); \
|
|
integer(8), intent(in) :: arg1; \
|
|
!dir$ ignore_tkr(k) arg1; \
|
|
vector(integer(VKIND)), intent(in) :: arg2; \
|
|
!dir$ ignore_tkr(r) arg2; \
|
|
end function;
|
|
|
|
! __vector_pair function f(i, vector(u))
|
|
#define FUNC_VPI0VU(VKIND) \
|
|
pure __vector_pair function func_vpi0vu##VKIND(arg1, arg2); \
|
|
integer(8), intent(in) :: arg1; \
|
|
!dir$ ignore_tkr(k) arg1; \
|
|
vector(unsigned(VKIND)), intent(in) :: arg2; \
|
|
!dir$ ignore_tkr(r) arg2; \
|
|
end function;
|
|
|
|
! __vector_pair function f(i, vector(r))
|
|
#define FUNC_VPI0VR(VKIND) \
|
|
pure __vector_pair function func_vpi0vr##VKIND(arg1, arg2); \
|
|
integer(8), intent(in) :: arg1; \
|
|
!dir$ ignore_tkr(k) arg1; \
|
|
vector(real(VKIND)), intent(in) :: arg2; \
|
|
!dir$ ignore_tkr(r) arg2; \
|
|
end function;
|
|
|
|
! __vector_pair function f(i, __vector_pair)
|
|
#define FUNC_VPI0VP \
|
|
pure __vector_pair function func_vpi0vp(arg1, arg2); \
|
|
integer(8), intent(in) :: arg1; \
|
|
!dir$ ignore_tkr(k) arg1; \
|
|
__vector_pair, intent(in) :: arg2; \
|
|
!dir$ ignore_tkr(r) arg2; \
|
|
end function;
|
|
|
|
FUNC_VPI0VI(1) FUNC_VPI0VI(2) FUNC_VPI0VI(4) FUNC_VPI0VI(8)
|
|
FUNC_VPI0VU(1) FUNC_VPI0VU(2) FUNC_VPI0VU(4) FUNC_VPI0VU(8)
|
|
FUNC_VPI0VR(4) FUNC_VPI0VR(8)
|
|
FUNC_VPI0VP
|
|
|
|
#undef FUNC_VPI0VP
|
|
#undef FUNC_VPI0VR
|
|
#undef FUNC_VPI0VU
|
|
#undef FUNC_VPI0VI
|
|
|
|
!! ========== 3 arguments subroutine interface ===============================!!
|
|
!! __vector_pair subroutine s(vp, integer, vector(i))
|
|
#define SUB_VPI0VI(VKIND) \
|
|
pure subroutine sub_vpi0vi##VKIND(arg1, arg2, arg3); \
|
|
__vector_pair, intent(in) :: arg1; \
|
|
integer(8), intent(in) :: arg2; \
|
|
!dir$ ignore_tkr(k) arg2; \
|
|
vector(integer(VKIND)), intent(out) :: arg3; \
|
|
!dir$ ignore_tkr(r) arg3; \
|
|
end subroutine;
|
|
|
|
! subroutine(__vector_pair, i, vector(u))
|
|
#define SUB_VPI0VU(VKIND) \
|
|
pure subroutine sub_vpi0vu##VKIND(arg1, arg2, arg3); \
|
|
__vector_pair, intent(in) :: arg1; \
|
|
integer(8), intent(in) :: arg2; \
|
|
!dir$ ignore_tkr(k) arg2; \
|
|
vector(unsigned(VKIND)), intent(out) :: arg3; \
|
|
!dir$ ignore_tkr(r) arg3; \
|
|
end subroutine;
|
|
|
|
! subroutine(__vector_pair, i, vector(r))
|
|
#define SUB_VPI0VR(VKIND) \
|
|
pure subroutine sub_vpi0vr##VKIND(arg1, arg2, arg3); \
|
|
__vector_pair, intent(in) :: arg1; \
|
|
integer(8), intent(in) :: arg2; \
|
|
!dir$ ignore_tkr(k) arg2; \
|
|
vector(real(VKIND)), intent(out) :: arg3; \
|
|
!dir$ ignore_tkr(r) arg3; \
|
|
end subroutine;
|
|
|
|
! subroutine(__vector_pair, i, i)
|
|
pure subroutine sub_vpi0i0(arg1, arg2, arg3)
|
|
__vector_pair, intent(in) :: arg1
|
|
integer(8), intent(in) :: arg2
|
|
!dir$ ignore_tkr(k) arg2
|
|
integer(8), intent(out) :: arg3
|
|
!dir$ ignore_tkr(kr) arg3
|
|
end subroutine
|
|
|
|
! subroutine(__vector_pair, i, r)
|
|
pure subroutine sub_vpi0r0(arg1, arg2, arg3)
|
|
__vector_pair, intent(in) :: arg1
|
|
integer(8), intent(in) :: arg2
|
|
!dir$ ignore_tkr(k) arg2
|
|
real(8), intent(out) :: arg3
|
|
!dir$ ignore_tkr(kr) arg3
|
|
end subroutine
|
|
|
|
! subroutine(__vector_pair, i, __vector_pair)
|
|
pure subroutine sub_vpi0vp(arg1, arg2, arg3)
|
|
__vector_pair, intent(in) :: arg1
|
|
integer(8), intent(in) :: arg2
|
|
!dir$ ignore_tkr(k) arg2
|
|
__vector_pair, intent(out) :: arg3
|
|
!dir$ ignore_tkr(r) arg3
|
|
end subroutine
|
|
|
|
!! subroutine s(__vector_pair, vector(i), vector(i))
|
|
#define ELEM_SUB_VPVIVI(VKIND) \
|
|
elemental subroutine sub_vpvi##VKIND##vi##VKIND(pair, arg1, arg2); \
|
|
__vector_pair, intent(out) :: pair ; \
|
|
vector(integer(VKIND)), intent(in) :: arg1, arg2; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_pair, vector(u), vector(u))
|
|
#define ELEM_SUB_VPVUVU(VKIND) \
|
|
elemental subroutine sub_vpvu##VKIND##vu##VKIND(pair, arg1, arg2); \
|
|
__vector_pair, intent(out) :: pair ; \
|
|
vector(unsigned(VKIND)), intent(in) :: arg1, arg2; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_pair, vector(r), vector(r))
|
|
#define ELEM_SUB_VPVRVR(VKIND) \
|
|
elemental subroutine sub_vpvr##VKIND##vr##VKIND(pair, arg1, arg2); \
|
|
__vector_pair, intent(out) :: pair ; \
|
|
vector(real(VKIND)), intent(in) :: arg1, arg2; \
|
|
end subroutine ;
|
|
|
|
ELEM_SUB_VPVIVI(1) ELEM_SUB_VPVIVI(2)
|
|
ELEM_SUB_VPVIVI(4) ELEM_SUB_VPVIVI(8)
|
|
ELEM_SUB_VPVUVU(1) ELEM_SUB_VPVUVU(2)
|
|
ELEM_SUB_VPVUVU(4) ELEM_SUB_VPVUVU(8)
|
|
ELEM_SUB_VPVRVR(4) ELEM_SUB_VPVRVR(8)
|
|
SUB_VPI0VI(1) SUB_VPI0VI(2) SUB_VPI0VI(4) SUB_VPI0VI(8)
|
|
SUB_VPI0VU(1) SUB_VPI0VU(2) SUB_VPI0VU(4) SUB_VPI0VU(8)
|
|
SUB_VPI0VR(4) SUB_VPI0VR(8)
|
|
|
|
#undef ELEM_SUB_VPVIVI
|
|
#undef ELEM_SUB_VPVUVU
|
|
#undef ELEM_SUB_VPVRVR
|
|
#undef SUB_VPI0VR
|
|
#undef SUB_VPI0VU
|
|
#undef SUB_VPI0VI
|
|
|
|
!! subroutine s(__vector_quad, vector(i), vector(i))
|
|
#define ELEM_SUB_VQVIVI(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vi##VKIND##vi##VKIND(acc, a, b); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
vector(integer(VKIND)), intent(in) :: a, b; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, vector(u), vector(u))
|
|
#define ELEM_SUB_VQVUVU(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND(acc, a, b); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
vector(unsigned(VKIND)), intent(in) :: a, b; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, vector(r), vector(r))
|
|
#define ELEM_SUB_VQVRVR(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vr##VKIND##vr##VKIND(acc, a, b); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
vector(real(VKIND)), intent(in) :: a, b; \
|
|
end subroutine ;
|
|
|
|
ELEM_SUB_VQVIVI(inout,1) ELEM_SUB_VQVIVI(inout,2)
|
|
ELEM_SUB_VQVUVU(inout,1)
|
|
ELEM_SUB_VQVRVR(inout,4)
|
|
ELEM_SUB_VQVIVI(out,1) ELEM_SUB_VQVIVI(out,2)
|
|
ELEM_SUB_VQVUVU(out,1)
|
|
ELEM_SUB_VQVRVR(out,4)
|
|
|
|
#undef ELEM_SUB_VQVRVR
|
|
#undef ELEM_SUB_VQVUVU
|
|
#undef ELEM_SUB_VQVIVI
|
|
|
|
!! subroutine s(__vector_quad, __vector_pair, vector(u))
|
|
#define ELEM_SUB_VQVPVU(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vpvu##VKIND(acc, a, b); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
__vector_pair, intent(in) :: a; \
|
|
vector(unsigned(VKIND)), intent(in) :: b; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, __vector_pair, vector(r))
|
|
#define ELEM_SUB_VQVPVR(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vpvr##VKIND(acc, a, b); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
__vector_pair, intent(in) :: a; \
|
|
vector(real(VKIND)), intent(in) :: b; \
|
|
end subroutine ;
|
|
|
|
ELEM_SUB_VQVPVU(inout,1)
|
|
ELEM_SUB_VQVPVR(inout,8)
|
|
ELEM_SUB_VQVPVU(out,1)
|
|
ELEM_SUB_VQVPVR(out,8)
|
|
|
|
#undef ELEM_SUB_VQVPVR
|
|
#undef ELEM_SUB_VQVPVU
|
|
|
|
!! ========== 5 arguments subroutine interface ===============================!!
|
|
!! subroutine s(__vector_quad, vector(i), vector(i), vector(i), vector(i))
|
|
#define ELEM_SUB_VQVIVIVIVI(VKIND) \
|
|
elemental subroutine sub_vqvi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND(acc, arg1, arg2, arg3, arg4); \
|
|
__vector_quad, intent(out) :: acc; \
|
|
vector(integer(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, vector(u), vector(u), vector(u), vector(u))
|
|
#define ELEM_SUB_VQVUVUVUVU(VKIND) \
|
|
elemental subroutine sub_vqvu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND(acc, arg1, arg2, arg3, arg4); \
|
|
__vector_quad, intent(out) :: acc; \
|
|
vector(unsigned(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, vector(r), vector(r), vector(r), vector(r))
|
|
#define ELEM_SUB_VQVRVRVRVR(VKIND) \
|
|
elemental subroutine sub_vqvr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND(acc, arg1, arg2, arg3, arg4); \
|
|
__vector_quad, intent(out) :: acc; \
|
|
vector(real(VKIND)), intent(in) :: arg1, arg2, arg3, arg4; \
|
|
end subroutine ;
|
|
|
|
ELEM_SUB_VQVIVIVIVI(1) ELEM_SUB_VQVIVIVIVI(2)
|
|
ELEM_SUB_VQVIVIVIVI(4) ELEM_SUB_VQVIVIVIVI(8)
|
|
ELEM_SUB_VQVUVUVUVU(1) ELEM_SUB_VQVUVUVUVU(2)
|
|
ELEM_SUB_VQVUVUVUVU(4) ELEM_SUB_VQVUVUVUVU(8)
|
|
ELEM_SUB_VQVRVRVRVR(4) ELEM_SUB_VQVRVRVRVR(8)
|
|
|
|
#undef ELEM_SUB_VQVRVRVRVR
|
|
#undef ELEM_SUB_VQVUVUVUVU
|
|
#undef ELEM_SUB_VQVIVIVIVI
|
|
|
|
!! subroutine s(__vector_quad, vector(u), vector(u), integer, integer)
|
|
#define ELEM_SUB_VQVUVUII(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND##ii(acc, a, b, xmask, ymask); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
vector(unsigned(VKIND)), intent(in) :: a, b; \
|
|
integer(8), intent(in) :: xmask, ymask; \
|
|
!dir$ ignore_tkr(k) xmask; \
|
|
!dir$ ignore_tkr(k) ymask; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, vector(r), vector(r), integer, integer)
|
|
#define ELEM_SUB_VQVRVRII(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vr##VKIND##vr##VKIND##ii(acc, a, b, xmask, ymask); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
vector(real(VKIND)), intent(in) :: a, b; \
|
|
integer(8), intent(in) :: xmask, ymask; \
|
|
!dir$ ignore_tkr(k) xmask; \
|
|
!dir$ ignore_tkr(k) ymask; \
|
|
end subroutine ;
|
|
|
|
ELEM_SUB_VQVUVUII(inout,1)
|
|
ELEM_SUB_VQVRVRII(inout,4)
|
|
ELEM_SUB_VQVUVUII(out,1)
|
|
ELEM_SUB_VQVRVRII(out,4)
|
|
|
|
#undef ELEM_SUB_VQVRVRII
|
|
#undef ELEM_SUB_VQVUVUII
|
|
|
|
!! subroutine s(__vector_quad, __vector_pair, vector(u), integer, integer)
|
|
#define ELEM_SUB_VQVPVUII(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vpvu##VKIND##ii(acc, a, b, xmask, ymask); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
__vector_pair, intent(in) :: a; \
|
|
vector(unsigned(VKIND)), intent(in) :: b; \
|
|
integer(8), intent(in) :: xmask, ymask; \
|
|
!dir$ ignore_tkr(k) xmask; \
|
|
!dir$ ignore_tkr(k) ymask; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, __vector_pair, vector(r), integer, integer)
|
|
#define ELEM_SUB_VQVPVRII(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vpvr##VKIND##ii(acc, a, b, xmask, ymask); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
__vector_pair, intent(in) :: a; \
|
|
vector(real(VKIND)), intent(in) :: b; \
|
|
integer(8), intent(in) :: xmask, ymask; \
|
|
!dir$ ignore_tkr(k) xmask; \
|
|
!dir$ ignore_tkr(k) ymask; \
|
|
end subroutine ;
|
|
|
|
ELEM_SUB_VQVPVUII(inout,1)
|
|
ELEM_SUB_VQVPVRII(inout,8)
|
|
ELEM_SUB_VQVPVUII(out,1)
|
|
ELEM_SUB_VQVPVRII(out,8)
|
|
|
|
#undef ELEM_SUB_VQVPVRII
|
|
#undef ELEM_SUB_VQVPVUII
|
|
|
|
!! ========== 6 arguments subroutine interface ===============================!!
|
|
!! subroutine s(__vector_quad, vector(i), vector(i), integer, integer, integer)
|
|
#define ELEM_SUB_VQVIVIIII(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vi##VKIND##vi##VKIND##iii(acc, a, b, xmask, ymask, pmask); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
vector(integer(VKIND)), intent(in) :: a, b; \
|
|
integer(8), intent(in) :: xmask, ymask, pmask; \
|
|
!dir$ ignore_tkr(k) xmask; \
|
|
!dir$ ignore_tkr(k) ymask; \
|
|
!dir$ ignore_tkr(k) pmask; \
|
|
end subroutine ;
|
|
|
|
!! subroutine s(__vector_quad, vector(u), vector(u), integer, integer, integer)
|
|
#define ELEM_SUB_VQVUVUIII(INTENT, VKIND) \
|
|
elemental subroutine sub_vq##INTENT##vu##VKIND##vu##VKIND##iii(acc, a, b, xmask, ymask, pmask); \
|
|
__vector_quad, intent(INTENT) :: acc; \
|
|
vector(unsigned(VKIND)), intent(in) :: a, b; \
|
|
integer(8), intent(in) :: xmask, ymask, pmask; \
|
|
!dir$ ignore_tkr(k) xmask; \
|
|
!dir$ ignore_tkr(k) ymask; \
|
|
!dir$ ignore_tkr(k) pmask; \
|
|
end subroutine ;
|
|
|
|
ELEM_SUB_VQVIVIIII(inout,1) ELEM_SUB_VQVIVIIII(inout,2)
|
|
ELEM_SUB_VQVUVUIII(inout,1)
|
|
ELEM_SUB_VQVIVIIII(out,1) ELEM_SUB_VQVIVIIII(out,2)
|
|
ELEM_SUB_VQVUVUIII(out,1)
|
|
|
|
#undef ELEM_SUB_VQVUVUIII
|
|
#undef ELEM_SUB_VQVIVIIII
|
|
|
|
!! ========== non-macro interface =============================================!!
|
|
elemental subroutine sub_atvp(data, pair)
|
|
! Dummy arg 'data' is supposed to be intent(out) of any type,
|
|
! but according to Fortran 2018: C709: Type(*) arguments can not have
|
|
! intent(out) attribute. Use intent(inout) instead.
|
|
type(*), intent(inout) :: data
|
|
__vector_pair, intent(inout) :: pair
|
|
end subroutine
|
|
|
|
elemental subroutine sub_atvq(data, acc)
|
|
! Dummy arg 'data' is supposed to be intent(out) of any type,
|
|
! but according to Fortran 2018: C709: Type(*) arguments can not have
|
|
! intent(out) attribute. Use intent(inout) instead.
|
|
type(*), intent(inout) :: data
|
|
__vector_quad, intent(inout) :: acc
|
|
end subroutine
|
|
|
|
end interface
|
|
|
|
!-------------------------------------------------------
|
|
! __vector_pair function(integer, vector/__vector_pair)
|
|
!-------------------------------------------------------
|
|
#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0##vi##VKIND
|
|
#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0##vu##VKIND
|
|
#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0##vr##VKIND
|
|
#define VP_I0_VP(NAME) __ppc_##NAME##_vpi0vp0
|
|
|
|
#define VEC_VP_I0_VI(NAME, VKIND) \
|
|
procedure(func_vpi0vi##VKIND) :: VP_I0_VI(NAME, VKIND);
|
|
#define VEC_VP_I0_VU(NAME, VKIND) \
|
|
procedure(func_vpi0vu##VKIND) :: VP_I0_VU(NAME, VKIND);
|
|
#define VEC_VP_I0_VR(NAME, VKIND) \
|
|
procedure(func_vpi0vr##VKIND) :: VP_I0_VR(NAME, VKIND);
|
|
#define VEC_VP_I0_VP(NAME) procedure(func_vpi0vp) :: VP_I0_VP(NAME);
|
|
|
|
! mma_lxvp (using vec_lxvp)
|
|
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)
|
|
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)
|
|
VEC_VP_I0_VR(vec_lxvp,4) VEC_VP_I0_VR(vec_lxvp,8)
|
|
VEC_VP_I0_VP(vec_lxvp)
|
|
interface mma_lxvp
|
|
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)
|
|
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)
|
|
procedure :: VP_I0_VR(vec_lxvp,4), VP_I0_VR(vec_lxvp,8)
|
|
procedure :: VP_I0_VP(vec_lxvp)
|
|
end interface mma_lxvp
|
|
public :: mma_lxvp
|
|
|
|
#undef VEC_VP_I0_VP
|
|
#undef VEC_VP_I0_VR
|
|
#undef VEC_VP_I0_VU
|
|
#undef VEC_VP_I0_VI
|
|
#undef VP_I0_VP
|
|
#undef VP_I0_VR
|
|
#undef VP_I0_VU
|
|
#undef VP_I0_VI
|
|
|
|
!-----------------------------------------------------------------------
|
|
! subroutine(__vector_pair, integer, __vector_pair/vector/integer/real)
|
|
!-----------------------------------------------------------------------
|
|
#define VP_I0_VI(NAME, VKIND) __ppc_##NAME##_vpi0vi##VKIND
|
|
#define VP_I0_VU(NAME, VKIND) __ppc_##NAME##_vpi0vu##VKIND
|
|
#define VP_I0_VR(NAME, VKIND) __ppc_##NAME##_vpi0vr##VKIND
|
|
|
|
#define VEC_VP_I0_VI(NAME, VKIND) \
|
|
procedure(sub_vpi0vi##VKIND) :: VP_I0_VI(NAME, VKIND);
|
|
#define VEC_VP_I0_VU(NAME, VKIND) \
|
|
procedure(sub_vpi0vu##VKIND) :: VP_I0_VU(NAME, VKIND);
|
|
#define VEC_VP_I0_VR(NAME, VKIND) \
|
|
procedure(sub_vpi0vr##VKIND) :: VP_I0_VR(NAME, VKIND);
|
|
|
|
! mma_stxvp (using vec_stxvp)
|
|
procedure(sub_vpi0vp) :: __ppc_vec_stxvp_vpi0vp0
|
|
procedure(sub_vpi0i0) :: __ppc_vec_stxvp_vpi0i0
|
|
procedure(sub_vpi0r0) :: __ppc_vec_stxvp_vpi0r0
|
|
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)
|
|
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)
|
|
VEC_VP_I0_VR(vec_stxvp, 4) VEC_VP_I0_VR(vec_stxvp, 8)
|
|
interface mma_stxvp
|
|
procedure :: __ppc_vec_stxvp_vpi0vp0
|
|
procedure :: __ppc_vec_stxvp_vpi0i0
|
|
procedure :: __ppc_vec_stxvp_vpi0r0
|
|
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)
|
|
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)
|
|
procedure :: VP_I0_VR(vec_stxvp, 4), VP_I0_VR(vec_stxvp, 8)
|
|
end interface mma_stxvp
|
|
public :: mma_stxvp
|
|
|
|
#undef VEC_VP_I0_VR
|
|
#undef VEC_VP_I0_VU
|
|
#undef VEC_VP_I0_VI
|
|
#undef VP_I0_VR
|
|
#undef VP_I0_VU
|
|
#undef VP_I0_VI
|
|
|
|
#define SUB_VQ_VI_VI_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND
|
|
#define SUB_VQ_VU_VU_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND
|
|
#define SUB_VQ_VR_VR_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND
|
|
|
|
#define VEC_SUB_VQ_VI_VI_VI_VI(NAME, VKIND) \
|
|
procedure(sub_vqvi##VKIND##vi##VKIND##vi##VKIND##vi##VKIND) :: SUB_VQ_VI_VI_VI_VI(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VU_VU_VU_VU(NAME, VKIND) \
|
|
procedure(sub_vqvu##VKIND##vu##VKIND##vu##VKIND##vu##VKIND) :: SUB_VQ_VU_VU_VU_VU(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VR_VR_VR_VR(NAME, VKIND) \
|
|
procedure(sub_vqvr##VKIND##vr##VKIND##vr##VKIND##vr##VKIND) :: SUB_VQ_VR_VR_VR_VR(NAME, VKIND);
|
|
|
|
! mma_assemble_acc
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,1)
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,2)
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,4)
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,8)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,1)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,2)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,4)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,8)
|
|
VEC_SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,4)
|
|
VEC_SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,8)
|
|
interface mma_assemble_acc
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,1)
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,2)
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,4)
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_assemble_acc,8)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,1)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,2)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,4)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_assemble_acc,8)
|
|
procedure :: SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,4)
|
|
procedure :: SUB_VQ_VR_VR_VR_VR(mma_assemble_acc,8)
|
|
end interface
|
|
public mma_assemble_acc
|
|
|
|
! mma_build_acc
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,1)
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,2)
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,4)
|
|
VEC_SUB_VQ_VI_VI_VI_VI(mma_build_acc,8)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,1)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,2)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,4)
|
|
VEC_SUB_VQ_VU_VU_VU_VU(mma_build_acc,8)
|
|
VEC_SUB_VQ_VR_VR_VR_VR(mma_build_acc,4)
|
|
VEC_SUB_VQ_VR_VR_VR_VR(mma_build_acc,8)
|
|
interface mma_build_acc
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,1)
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,2)
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,4)
|
|
procedure :: SUB_VQ_VI_VI_VI_VI(mma_build_acc,8)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,1)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,2)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,4)
|
|
procedure :: SUB_VQ_VU_VU_VU_VU(mma_build_acc,8)
|
|
procedure :: SUB_VQ_VR_VR_VR_VR(mma_build_acc,4)
|
|
procedure :: SUB_VQ_VR_VR_VR_VR(mma_build_acc,8)
|
|
end interface
|
|
public mma_build_acc
|
|
|
|
#undef VEC_SUB_VQ_VR_VR_VR_VR
|
|
#undef VEC_SUB_VQ_VU_VU_VU_VU
|
|
#undef VEC_SUB_VQ_VI_VI_VI_VI
|
|
#undef SUB_VQ_VR_VR_VR_VR
|
|
#undef SUB_VQ_VU_VU_VU_VU
|
|
#undef SUB_VQ_VI_VI_VI_VI
|
|
|
|
#define SUB_VP_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND
|
|
#define SUB_VP_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND
|
|
#define SUB_VP_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND
|
|
|
|
#define VEC_SUB_VP_VI_VI(NAME, VKIND) \
|
|
procedure(sub_vpvi##VKIND##vi##VKIND) :: SUB_VP_VI_VI(NAME, VKIND);
|
|
#define VEC_SUB_VP_VU_VU(NAME, VKIND) \
|
|
procedure(sub_vpvu##VKIND##vu##VKIND) :: SUB_VP_VU_VU(NAME, VKIND);
|
|
#define VEC_SUB_VP_VR_VR(NAME, VKIND) \
|
|
procedure(sub_vpvr##VKIND##vr##VKIND) :: SUB_VP_VR_VR(NAME, VKIND);
|
|
|
|
! mma_assemble_pair
|
|
VEC_SUB_VP_VI_VI(mma_assemble_pair,1) VEC_SUB_VP_VI_VI(mma_assemble_pair,2)
|
|
VEC_SUB_VP_VI_VI(mma_assemble_pair,4) VEC_SUB_VP_VI_VI(mma_assemble_pair,8)
|
|
VEC_SUB_VP_VU_VU(mma_assemble_pair,1) VEC_SUB_VP_VU_VU(mma_assemble_pair,2)
|
|
VEC_SUB_VP_VU_VU(mma_assemble_pair,4) VEC_SUB_VP_VU_VU(mma_assemble_pair,8)
|
|
VEC_SUB_VP_VR_VR(mma_assemble_pair,4) VEC_SUB_VP_VR_VR(mma_assemble_pair,8)
|
|
interface mma_assemble_pair
|
|
procedure :: SUB_VP_VI_VI(mma_assemble_pair,1)
|
|
procedure :: SUB_VP_VI_VI(mma_assemble_pair,2)
|
|
procedure :: SUB_VP_VI_VI(mma_assemble_pair,4)
|
|
procedure :: SUB_VP_VI_VI(mma_assemble_pair,8)
|
|
procedure :: SUB_VP_VU_VU(mma_assemble_pair,1)
|
|
procedure :: SUB_VP_VU_VU(mma_assemble_pair,2)
|
|
procedure :: SUB_VP_VU_VU(mma_assemble_pair,4)
|
|
procedure :: SUB_VP_VU_VU(mma_assemble_pair,8)
|
|
procedure :: SUB_VP_VR_VR(mma_assemble_pair,4)
|
|
procedure :: SUB_VP_VR_VR(mma_assemble_pair,8)
|
|
end interface
|
|
public mma_assemble_pair
|
|
|
|
#undef VEC_SUB_VP_VR_VR
|
|
#undef VEC_SUB_VP_VU_VU
|
|
#undef VEC_SUB_VP_VI_VI
|
|
#undef SUB_VP_VR_VR
|
|
#undef SUB_VP_VU_VU
|
|
#undef SUB_VP_VI_VI
|
|
|
|
#define SUB_VQ_VI_VI_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvi##VKIND##vi##VKINDi0i0i0
|
|
#define SUB_VQ_VU_VU_I_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0ii0
|
|
|
|
#define VEC_SUB_VQ_VI_VI_I_I_I(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vi##VKIND##vi##VKIND##iii) :: SUB_VQ_VI_VI_I_I_I(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VU_VU_I_I_I(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND##iii) :: SUB_VQ_VU_VU_I_I_I(NAME, VKIND);
|
|
|
|
! mma_pmxvbf16ger2
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,out,1)
|
|
interface mma_pmxvbf16ger2
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2_,1)
|
|
end interface mma_pmxvbf16ger2
|
|
public mma_pmxvbf16ger2
|
|
|
|
! mma_pmxvbf16ger2nn
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,inout,1)
|
|
interface mma_pmxvbf16ger2nn
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2nn,1)
|
|
end interface mma_pmxvbf16ger2nn
|
|
public mma_pmxvbf16ger2nn
|
|
|
|
! mma_pmxvbf16ger2np
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,inout,1)
|
|
interface mma_pmxvbf16ger2np
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2np,1)
|
|
end interface mma_pmxvbf16ger2np
|
|
public mma_pmxvbf16ger2np
|
|
|
|
! mma_pmxvbf16ger2pn
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,inout,1)
|
|
interface mma_pmxvbf16ger2pn
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pn,1)
|
|
end interface mma_pmxvbf16ger2pn
|
|
public mma_pmxvbf16ger2pn
|
|
|
|
! mma_pmxvbf16ger2pp
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,inout,1)
|
|
interface mma_pmxvbf16ger2pp
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvbf16ger2pp,1)
|
|
end interface mma_pmxvbf16ger2pp
|
|
public mma_pmxvbf16ger2pp
|
|
|
|
! mma_pmxvf16ger2
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,out,1)
|
|
interface mma_pmxvf16ger2
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2_,1)
|
|
end interface mma_pmxvf16ger2
|
|
public mma_pmxvf16ger2
|
|
|
|
! mma_pmxvf16ger2nn
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,inout,1)
|
|
interface mma_pmxvf16ger2nn
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2nn,1)
|
|
end interface mma_pmxvf16ger2nn
|
|
public mma_pmxvf16ger2nn
|
|
|
|
! mma_pmxvf16ger2np
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,inout,1)
|
|
interface mma_pmxvf16ger2np
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2np,1)
|
|
end interface mma_pmxvf16ger2np
|
|
public mma_pmxvf16ger2np
|
|
|
|
! mma_pmxvf16ger2pn
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,inout,1)
|
|
interface mma_pmxvf16ger2pn
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pn,1)
|
|
end interface mma_pmxvf16ger2pn
|
|
public mma_pmxvf16ger2pn
|
|
|
|
! mma_pmxvf16ger2pp
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,inout,1)
|
|
interface mma_pmxvf16ger2pp
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvf16ger2pp,1)
|
|
end interface mma_pmxvf16ger2pp
|
|
public mma_pmxvf16ger2pp
|
|
|
|
! mma_pmxvi16ger2
|
|
VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2_,out,2)
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2_,out,1)
|
|
interface mma_pmxvi16ger2
|
|
procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2_,2)
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2_,1)
|
|
end interface mma_pmxvi16ger2
|
|
public mma_pmxvi16ger2
|
|
|
|
! mma_pmxvi16ger2pp
|
|
VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2pp,inout,2)
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2pp,inout,1)
|
|
interface mma_pmxvi16ger2pp
|
|
procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2pp,2)
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2pp,1)
|
|
end interface mma_pmxvi16ger2pp
|
|
public mma_pmxvi16ger2pp
|
|
|
|
! mma_pmxvi16ger2s
|
|
VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2s,out,2)
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2s,out,1)
|
|
interface mma_pmxvi16ger2s
|
|
procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2s,2)
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2s,1)
|
|
end interface mma_pmxvi16ger2s
|
|
public mma_pmxvi16ger2s
|
|
|
|
! mma_pmxvi16ger2spp
|
|
VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2spp,inout,2)
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2spp,inout,1)
|
|
interface mma_pmxvi16ger2spp
|
|
procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi16ger2spp,2)
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi16ger2spp,1)
|
|
end interface mma_pmxvi16ger2spp
|
|
public mma_pmxvi16ger2spp
|
|
|
|
! mma_pmxvi4ger8
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,out,1)
|
|
interface mma_pmxvi4ger8
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8_,1)
|
|
end interface mma_pmxvi4ger8
|
|
public mma_pmxvi4ger8
|
|
|
|
! mma_pmxvi4ger8pp
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,inout,1)
|
|
interface mma_pmxvi4ger8pp
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi4ger8pp,1)
|
|
end interface mma_pmxvi4ger8pp
|
|
public mma_pmxvi4ger8pp
|
|
|
|
! mma_pmxvi8ger4
|
|
VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4_,out,1)
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4_,out,1)
|
|
interface mma_pmxvi8ger4
|
|
procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4_,1)
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4_,1)
|
|
end interface mma_pmxvi8ger4
|
|
public mma_pmxvi8ger4
|
|
|
|
! mma_pmxvi8ger4pp
|
|
VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4pp,inout,1)
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4pp,inout,1)
|
|
interface mma_pmxvi8ger4pp
|
|
procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4pp,1)
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4pp,1)
|
|
end interface mma_pmxvi8ger4pp
|
|
public mma_pmxvi8ger4pp
|
|
|
|
! mma_pmxvi8ger4spp
|
|
VEC_SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4spp,inout,1)
|
|
VEC_SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4spp,inout,1)
|
|
interface mma_pmxvi8ger4spp
|
|
procedure :: SUB_VQ_VI_VI_I_I_I(mma_pmxvi8ger4spp,1)
|
|
procedure :: SUB_VQ_VU_VU_I_I_I(mma_pmxvi8ger4spp,1)
|
|
end interface mma_pmxvi8ger4spp
|
|
public mma_pmxvi8ger4spp
|
|
|
|
#undef VEC_SUB_VQ_VU_VU_I_I_I
|
|
#undef VEC_SUB_VQ_VI_VI_I_I_I
|
|
#undef SUB_VQ_VU_VU_I_I_I
|
|
#undef SUB_VQ_VI_VI_I_I_I
|
|
|
|
#define SUB_VQ_VU_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvu##VKIND##vu##VKINDi0i0
|
|
#define SUB_VQ_VR_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvr##VKIND##vr##VKINDi0i0
|
|
|
|
#define VEC_SUB_VQ_VU_VU_I_I(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND##ii) :: SUB_VQ_VU_VU_I_I(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VR_VR_I_I(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vr##VKIND##vr##VKIND##ii) :: SUB_VQ_VR_VR_I_I(NAME, VKIND);
|
|
|
|
! mma_pmxvf32ger
|
|
VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32ger,out,1)
|
|
VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32ger,out,4)
|
|
interface mma_pmxvf32ger
|
|
procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32ger,1)
|
|
procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32ger,4)
|
|
end interface mma_pmxvf32ger
|
|
public mma_pmxvf32ger
|
|
|
|
! mma_pmxvf32gernn
|
|
VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gernn,inout,1)
|
|
VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gernn,inout,4)
|
|
interface mma_pmxvf32gernn
|
|
procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gernn,1)
|
|
procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gernn,4)
|
|
end interface mma_pmxvf32gernn
|
|
public mma_pmxvf32gernn
|
|
|
|
! mma_pmxvf32gernp
|
|
VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gernp,inout,1)
|
|
VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gernp,inout,4)
|
|
interface mma_pmxvf32gernp
|
|
procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gernp,1)
|
|
procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gernp,4)
|
|
end interface mma_pmxvf32gernp
|
|
public mma_pmxvf32gernp
|
|
|
|
! mma_pmxvf32gerpn
|
|
VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpn,inout,1)
|
|
VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpn,inout,4)
|
|
interface mma_pmxvf32gerpn
|
|
procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpn,1)
|
|
procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpn,4)
|
|
end interface mma_pmxvf32gerpn
|
|
public mma_pmxvf32gerpn
|
|
|
|
! mma_pmxvf32gerpp
|
|
VEC_SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpp,inout,1)
|
|
VEC_SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpp,inout,4)
|
|
interface mma_pmxvf32gerpp
|
|
procedure :: SUB_VQ_VU_VU_I_I(mma_pmxvf32gerpp,1)
|
|
procedure :: SUB_VQ_VR_VR_I_I(mma_pmxvf32gerpp,4)
|
|
end interface mma_pmxvf32gerpp
|
|
public mma_pmxvf32gerpp
|
|
|
|
#undef VEC_SUB_VQ_VR_VR_I_I
|
|
#undef VEC_SUB_VQ_VU_VU_I_I
|
|
#undef SUB_VQ_VR_VR_I_I
|
|
#undef SUB_VQ_VU_VU_I_I
|
|
|
|
#define SUB_VQ_VP_VU_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvu##VKINDi0i0
|
|
#define SUB_VQ_VP_VR_I_I(NAME, VKIND) __ppc_##NAME##_vqvpvr##VKINDi0i0
|
|
|
|
#define VEC_SUB_VQ_VP_VU_I_I(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vpvu##VKIND##ii) :: SUB_VQ_VP_VU_I_I(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VP_VR_I_I(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vpvr##VKIND##ii) :: SUB_VQ_VP_VR_I_I(NAME, VKIND);
|
|
|
|
! mma_pmxvf64ger
|
|
VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64ger,out,1)
|
|
VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64ger,out,8)
|
|
interface mma_pmxvf64ger
|
|
procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64ger,1)
|
|
procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64ger,8)
|
|
end interface mma_pmxvf64ger
|
|
public mma_pmxvf64ger
|
|
|
|
! mma_pmxvf64gernn
|
|
VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gernn,inout,1)
|
|
VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gernn,inout,8)
|
|
interface mma_pmxvf64gernn
|
|
procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gernn,1)
|
|
procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gernn,8)
|
|
end interface mma_pmxvf64gernn
|
|
public mma_pmxvf64gernn
|
|
|
|
! mma_pmxvf64gernp
|
|
VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gernp,inout,1)
|
|
VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gernp,inout,8)
|
|
interface mma_pmxvf64gernp
|
|
procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gernp,1)
|
|
procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gernp,8)
|
|
end interface mma_pmxvf64gernp
|
|
public mma_pmxvf64gernp
|
|
|
|
! mma_pmxvf64gerpn
|
|
VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpn,inout,1)
|
|
VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpn,inout,8)
|
|
interface mma_pmxvf64gerpn
|
|
procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpn,1)
|
|
procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpn,8)
|
|
end interface mma_pmxvf64gerpn
|
|
public mma_pmxvf64gerpn
|
|
|
|
! mma_pmxvf64gerpp
|
|
VEC_SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpp,inout,1)
|
|
VEC_SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpp,inout,8)
|
|
interface mma_pmxvf64gerpp
|
|
procedure :: SUB_VQ_VP_VU_I_I(mma_pmxvf64gerpp,1)
|
|
procedure :: SUB_VQ_VP_VR_I_I(mma_pmxvf64gerpp,8)
|
|
end interface mma_pmxvf64gerpp
|
|
public mma_pmxvf64gerpp
|
|
|
|
#undef VEC_SUB_VQ_VP_VR_I_I
|
|
#undef VEC_SUB_VQ_VP_VU_I_I
|
|
#undef SUB_VQ_VP_VR_I_I
|
|
#undef SUB_VQ_VP_VU_I_I
|
|
|
|
#define SUB_VQ_VI_VI(NAME, VKIND) __ppc_##NAME##_vi##VKIND##vi##VKIND
|
|
#define SUB_VQ_VU_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND##vu##VKIND
|
|
#define SUB_VQ_VR_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND##vr##VKIND
|
|
|
|
#define VEC_SUB_VQ_VI_VI(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vi##VKIND##vi##VKIND) :: SUB_VQ_VI_VI(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VU_VU(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vu##VKIND##vu##VKIND) :: SUB_VQ_VU_VU(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VR_VR(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vr##VKIND##vr##VKIND) :: SUB_VQ_VR_VR(NAME, VKIND);
|
|
|
|
!! First argument with INTENT(INOUT)
|
|
! mma_xvbf16ger2nn
|
|
VEC_SUB_VQ_VU_VU(mma_xvbf16ger2nn,inout,1)
|
|
interface mma_xvbf16ger2nn
|
|
procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2nn,1)
|
|
end interface
|
|
public mma_xvbf16ger2nn
|
|
|
|
! mma_xvbf16ger2np
|
|
VEC_SUB_VQ_VU_VU(mma_xvbf16ger2np,inout,1)
|
|
interface mma_xvbf16ger2np
|
|
procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2np,1)
|
|
end interface
|
|
public mma_xvbf16ger2np
|
|
|
|
! mma_xvbf16ger2pn
|
|
VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pn,inout,1)
|
|
interface mma_xvbf16ger2pn
|
|
procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pn,1)
|
|
end interface
|
|
public mma_xvbf16ger2pn
|
|
|
|
! mma_xvbf16ger2pp
|
|
VEC_SUB_VQ_VU_VU(mma_xvbf16ger2pp,inout,1)
|
|
interface mma_xvbf16ger2pp
|
|
procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2pp,1)
|
|
end interface
|
|
public mma_xvbf16ger2pp
|
|
|
|
! mma_xvi8ger4pp
|
|
VEC_SUB_VQ_VI_VI(mma_xvi8ger4pp,inout,1)
|
|
VEC_SUB_VQ_VU_VU(mma_xvi8ger4pp,inout,1)
|
|
interface mma_xvi8ger4pp
|
|
procedure :: SUB_VQ_VI_VI(mma_xvi8ger4pp,1)
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi8ger4pp,1)
|
|
end interface
|
|
public mma_xvi8ger4pp
|
|
|
|
! mma_xvi8ger4spp
|
|
VEC_SUB_VQ_VI_VI(mma_xvi8ger4spp,inout,1)
|
|
VEC_SUB_VQ_VU_VU(mma_xvi8ger4spp,inout,1)
|
|
interface mma_xvi8ger4spp
|
|
procedure :: SUB_VQ_VI_VI(mma_xvi8ger4spp,1)
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi8ger4spp,1)
|
|
end interface
|
|
public mma_xvi8ger4spp
|
|
|
|
! mma_xvi16ger2pp
|
|
VEC_SUB_VQ_VI_VI(mma_xvi16ger2pp,inout,2)
|
|
VEC_SUB_VQ_VU_VU(mma_xvi16ger2pp,inout,1)
|
|
interface mma_xvi16ger2pp
|
|
procedure :: SUB_VQ_VI_VI(mma_xvi16ger2pp,2)
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi16ger2pp,1)
|
|
end interface
|
|
public mma_xvi16ger2pp
|
|
|
|
! mma_xvi16ger2s
|
|
VEC_SUB_VQ_VI_VI(mma_xvi16ger2s,inout,2)
|
|
VEC_SUB_VQ_VU_VU(mma_xvi16ger2s,inout,1)
|
|
interface mma_xvi16ger2s
|
|
procedure :: SUB_VQ_VI_VI(mma_xvi16ger2s,2)
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi16ger2s,1)
|
|
end interface
|
|
public mma_xvi16ger2s
|
|
|
|
! mma_xvi16ger2spp
|
|
VEC_SUB_VQ_VI_VI(mma_xvi16ger2spp,inout,2)
|
|
VEC_SUB_VQ_VU_VU(mma_xvi16ger2spp,inout,1)
|
|
interface mma_xvi16ger2spp
|
|
procedure :: SUB_VQ_VI_VI(mma_xvi16ger2spp,2)
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi16ger2spp,1)
|
|
end interface
|
|
public mma_xvi16ger2spp
|
|
|
|
! mma_xvi4ger8pp
|
|
VEC_SUB_VQ_VU_VU(mma_xvi4ger8pp,inout,1)
|
|
interface mma_xvi4ger8pp
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi4ger8pp,1)
|
|
end interface
|
|
public mma_xvi4ger8pp
|
|
|
|
! mma_xvf16ger2nn
|
|
VEC_SUB_VQ_VU_VU(mma_xvf16ger2nn,inout,1)
|
|
interface mma_xvf16ger2nn
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf16ger2nn,1)
|
|
end interface
|
|
public mma_xvf16ger2nn
|
|
|
|
! mma_xvf16ger2np
|
|
VEC_SUB_VQ_VU_VU(mma_xvf16ger2np,inout,1)
|
|
interface mma_xvf16ger2np
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf16ger2np,1)
|
|
end interface
|
|
public mma_xvf16ger2np
|
|
|
|
! mma_xvf16ger2pn
|
|
VEC_SUB_VQ_VU_VU(mma_xvf16ger2pn,inout,1)
|
|
interface mma_xvf16ger2pn
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pn,1)
|
|
end interface
|
|
public mma_xvf16ger2pn
|
|
|
|
! mma_xvf16ger2pp
|
|
VEC_SUB_VQ_VU_VU(mma_xvf16ger2pp,inout,1)
|
|
interface mma_xvf16ger2pp
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf16ger2pp,1)
|
|
end interface
|
|
public mma_xvf16ger2pp
|
|
|
|
! mma_xvf32gernn
|
|
VEC_SUB_VQ_VU_VU(mma_xvf32gernn,inout,1)
|
|
VEC_SUB_VQ_VR_VR(mma_xvf32gernn,inout,4)
|
|
interface mma_xvf32gernn
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf32gernn,1)
|
|
procedure :: SUB_VQ_VR_VR(mma_xvf32gernn,4)
|
|
end interface
|
|
public mma_xvf32gernn
|
|
|
|
! mma_xvf32gernp
|
|
VEC_SUB_VQ_VU_VU(mma_xvf32gernp,inout,1)
|
|
VEC_SUB_VQ_VR_VR(mma_xvf32gernp,inout,4)
|
|
interface mma_xvf32gernp
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf32gernp,1)
|
|
procedure :: SUB_VQ_VR_VR(mma_xvf32gernp,4)
|
|
end interface
|
|
public mma_xvf32gernp
|
|
|
|
! mma_xvf32gerpn
|
|
VEC_SUB_VQ_VU_VU(mma_xvf32gerpn,inout,1)
|
|
VEC_SUB_VQ_VR_VR(mma_xvf32gerpn,inout,4)
|
|
interface mma_xvf32gerpn
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf32gerpn,1)
|
|
procedure :: SUB_VQ_VR_VR(mma_xvf32gerpn,4)
|
|
end interface
|
|
public mma_xvf32gerpn
|
|
|
|
! mma_xvf32gerpp
|
|
VEC_SUB_VQ_VU_VU(mma_xvf32gerpp,inout,1)
|
|
VEC_SUB_VQ_VR_VR(mma_xvf32gerpp,inout,4)
|
|
interface mma_xvf32gerpp
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf32gerpp,1)
|
|
procedure :: SUB_VQ_VR_VR(mma_xvf32gerpp,4)
|
|
end interface
|
|
public mma_xvf32gerpp
|
|
|
|
!! First argument with INTENT(OUT)
|
|
! mma_xvbf16ger2
|
|
VEC_SUB_VQ_VU_VU(mma_xvbf16ger2_,out,1)
|
|
interface mma_xvbf16ger2
|
|
procedure :: SUB_VQ_VU_VU(mma_xvbf16ger2_,1)
|
|
end interface
|
|
public mma_xvbf16ger2
|
|
|
|
! mma_xvi16ger2
|
|
VEC_SUB_VQ_VI_VI(mma_xvi16ger2_,out,2)
|
|
VEC_SUB_VQ_VU_VU(mma_xvi16ger2_,out,1)
|
|
interface mma_xvi16ger2
|
|
procedure :: SUB_VQ_VI_VI(mma_xvi16ger2_,2)
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi16ger2_,1)
|
|
end interface
|
|
public mma_xvi16ger2
|
|
|
|
! mma_xvi4ger8
|
|
VEC_SUB_VQ_VU_VU(mma_xvi4ger8_,out,1)
|
|
interface mma_xvi4ger8
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi4ger8_,1)
|
|
end interface
|
|
public mma_xvi4ger8
|
|
|
|
! mma_xvi8ger4
|
|
VEC_SUB_VQ_VI_VI(mma_xvi8ger4_,out,1)
|
|
VEC_SUB_VQ_VU_VU(mma_xvi8ger4_,out,1)
|
|
interface mma_xvi8ger4
|
|
procedure :: SUB_VQ_VI_VI(mma_xvi8ger4_,1)
|
|
procedure :: SUB_VQ_VU_VU(mma_xvi8ger4_,1)
|
|
end interface
|
|
public mma_xvi8ger4
|
|
|
|
! mma_xvf16ger2
|
|
VEC_SUB_VQ_VU_VU(mma_xvf16ger2_,out,1)
|
|
interface mma_xvf16ger2
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf16ger2_,1)
|
|
end interface
|
|
public mma_xvf16ger2
|
|
|
|
! mma_xvf32ger
|
|
VEC_SUB_VQ_VU_VU(mma_xvf32ger,out,1)
|
|
VEC_SUB_VQ_VR_VR(mma_xvf32ger,out,4)
|
|
interface mma_xvf32ger
|
|
procedure :: SUB_VQ_VU_VU(mma_xvf32ger,1)
|
|
procedure :: SUB_VQ_VR_VR(mma_xvf32ger,4)
|
|
end interface
|
|
public mma_xvf32ger
|
|
|
|
#undef VEC_SUB_VQ_VR_VR
|
|
#undef VEC_SUB_VQ_VU_VU
|
|
#undef VEC_SUB_VQ_VI_VI
|
|
#undef SUB_VQ_VR_VR
|
|
#undef SUB_VQ_VU_VU
|
|
#undef SUB_VQ_VI_VI
|
|
|
|
#define SUB_VQ_VP_VU(NAME, VKIND) __ppc_##NAME##_vu##VKIND
|
|
#define SUB_VQ_VP_VR(NAME, VKIND) __ppc_##NAME##_vr##VKIND
|
|
|
|
#define VEC_SUB_VQ_VP_VU(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vpvu##VKIND) :: SUB_VQ_VP_VU(NAME, VKIND);
|
|
#define VEC_SUB_VQ_VP_VR(NAME, INTENT, VKIND) \
|
|
procedure(sub_vq##INTENT##vpvr##VKIND) :: SUB_VQ_VP_VR(NAME, VKIND);
|
|
|
|
! mma_xvf64ger
|
|
VEC_SUB_VQ_VP_VU(mma_xvf64ger,out,1)
|
|
VEC_SUB_VQ_VP_VR(mma_xvf64ger,out,8)
|
|
interface mma_xvf64ger
|
|
procedure :: SUB_VQ_VP_VU(mma_xvf64ger,1)
|
|
procedure :: SUB_VQ_VP_VR(mma_xvf64ger,8)
|
|
end interface
|
|
public mma_xvf64ger
|
|
|
|
! mma_xvf64gernn
|
|
VEC_SUB_VQ_VP_VU(mma_xvf64gernn,inout,1)
|
|
VEC_SUB_VQ_VP_VR(mma_xvf64gernn,inout,8)
|
|
interface mma_xvf64gernn
|
|
procedure :: SUB_VQ_VP_VU(mma_xvf64gernn,1)
|
|
procedure :: SUB_VQ_VP_VR(mma_xvf64gernn,8)
|
|
end interface
|
|
public mma_xvf64gernn
|
|
|
|
! mma_xvf64gernp
|
|
VEC_SUB_VQ_VP_VU(mma_xvf64gernp,inout,1)
|
|
VEC_SUB_VQ_VP_VR(mma_xvf64gernp,inout,8)
|
|
interface mma_xvf64gernp
|
|
procedure :: SUB_VQ_VP_VU(mma_xvf64gernp,1)
|
|
procedure :: SUB_VQ_VP_VR(mma_xvf64gernp,8)
|
|
end interface
|
|
public mma_xvf64gernp
|
|
|
|
! mma_xvf64gerpn
|
|
VEC_SUB_VQ_VP_VU(mma_xvf64gerpn,inout,1)
|
|
VEC_SUB_VQ_VP_VR(mma_xvf64gerpn,inout,8)
|
|
interface mma_xvf64gerpn
|
|
procedure :: SUB_VQ_VP_VU(mma_xvf64gerpn,1)
|
|
procedure :: SUB_VQ_VP_VR(mma_xvf64gerpn,8)
|
|
end interface
|
|
public mma_xvf64gerpn
|
|
|
|
! mma_xvf64gerpp
|
|
VEC_SUB_VQ_VP_VU(mma_xvf64gerpp,inout,1)
|
|
VEC_SUB_VQ_VP_VR(mma_xvf64gerpp,inout,8)
|
|
interface mma_xvf64gerpp
|
|
procedure :: SUB_VQ_VP_VU(mma_xvf64gerpp,1)
|
|
procedure :: SUB_VQ_VP_VR(mma_xvf64gerpp,8)
|
|
end interface
|
|
public mma_xvf64gerpp
|
|
|
|
#undef VEC_SUB_VQ_VP_VR
|
|
#undef VEC_SUB_VQ_VP_VU
|
|
#undef SUB_VQ_VP_VR
|
|
#undef SUB_VQ_VP_VU
|
|
|
|
! mma_disassemble_acc
|
|
procedure(sub_atvq) :: __ppc_mma_disassemble_acc
|
|
interface mma_disassemble_acc
|
|
procedure :: __ppc_mma_disassemble_acc
|
|
end interface
|
|
public mma_disassemble_acc
|
|
|
|
! mma_disassemble_pair
|
|
procedure(sub_atvp) :: __ppc_mma_disassemble_pair
|
|
interface mma_disassemble_pair
|
|
procedure :: __ppc_mma_disassemble_pair
|
|
end interface
|
|
public mma_disassemble_pair
|
|
|
|
! mma_xxmfacc
|
|
procedure(sub_vq) :: __ppc_mma_xxmfacc
|
|
interface mma_xxmfacc
|
|
procedure :: __ppc_mma_xxmfacc
|
|
end interface
|
|
public mma_xxmfacc
|
|
|
|
! mma_xxmtacc
|
|
procedure(sub_vq) :: __ppc_mma_xxmtacc
|
|
interface mma_xxmtacc
|
|
procedure :: __ppc_mma_xxmtacc
|
|
end interface
|
|
public mma_xxmtacc
|
|
|
|
! mma_xxsetaccz
|
|
procedure(sub_vq) :: __ppc_mma_xxsetaccz
|
|
interface mma_xxsetaccz
|
|
procedure :: __ppc_mma_xxsetaccz
|
|
end interface
|
|
public mma_xxsetaccz
|
|
|
|
end module
|