https://gcc.gnu.org/g:7aa2fb48a62a032aa9d9610c85cd81281a9ff792
commit 7aa2fb48a62a032aa9d9610c85cd81281a9ff792 Author: Michael Meissner <meiss...@linux.ibm.com> Date: Thu Jan 16 13:08:21 2025 -0500 Revert changes Diff: --- gcc/config.gcc | 2 +- gcc/config/rs6000/rs6000-c.cc | 8 +- gcc/config/rs6000/vector-pair.h | 571 --------------------- gcc/doc/extend.texi | 100 ---- gcc/testsuite/gcc.target/powerpc/vpair-1.c | 150 ------ gcc/testsuite/gcc.target/powerpc/vpair-2.c | 150 ------ gcc/testsuite/gcc.target/powerpc/vpair-3-not-p10.c | 15 - gcc/testsuite/gcc.target/powerpc/vpair-3-p10.c | 14 - gcc/testsuite/gcc.target/powerpc/vpair-3.h | 461 ----------------- gcc/testsuite/gcc.target/powerpc/vpair-4-not-p10.c | 15 - gcc/testsuite/gcc.target/powerpc/vpair-4-p10.c | 14 - gcc/testsuite/gcc.target/powerpc/vpair-4.h | 461 ----------------- 12 files changed, 3 insertions(+), 1958 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 200b3f9692ae..c8a6cd4d826d 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -534,7 +534,7 @@ powerpc*-*-*) extra_headers="${extra_headers} pmmintrin.h tmmintrin.h smmintrin.h" extra_headers="${extra_headers} nmmintrin.h immintrin.h x86gprintrin.h" extra_headers="${extra_headers} ppu_intrinsics.h spu2vmx.h vec_types.h si2vmx.h" - extra_headers="${extra_headers} amo.h vector-pair.h" + extra_headers="${extra_headers} amo.h" case x$with_cpu in xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[3456789]|xpower1[01]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|xe6500|xfuture) cpu_is_64bit=yes diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc index e87ec6e1e49d..6d6838735b33 100644 --- a/gcc/config/rs6000/rs6000-c.cc +++ b/gcc/config/rs6000/rs6000-c.cc @@ -590,13 +590,9 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags, if (rs6000_cpu == PROCESSOR_CELL) rs6000_define_or_undefine_macro (define_p, "__PPU__"); - /* Tell the user if we support the MMA instructions. Also tell vector-pair.h - that we have the vector pair built-in function support. */ + /* Tell the user if we support the MMA instructions. */ if ((flags & OPTION_MASK_MMA) != 0) - { - rs6000_define_or_undefine_macro (define_p, "__MMA__"); - rs6000_define_or_undefine_macro (define_p, "__VPAIR__"); - } + rs6000_define_or_undefine_macro (define_p, "__MMA__"); /* Whether pc-relative code is being generated. */ if ((flags & OPTION_MASK_PCREL) != 0) rs6000_define_or_undefine_macro (define_p, "__PCREL__"); diff --git a/gcc/config/rs6000/vector-pair.h b/gcc/config/rs6000/vector-pair.h deleted file mode 100644 index 575c88f0ecf0..000000000000 --- a/gcc/config/rs6000/vector-pair.h +++ /dev/null @@ -1,571 +0,0 @@ -/* PowerPC vector pair include file. - Copyright (C) 2024 Free Software Foundation, Inc. - Contributed by Aldy Hernandez (al...@redhat.com). - Rewritten by Paolo Bonzini (bonz...@gnu.org). - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - Under Section 7 of GPL version 3, you are granted additional - permissions described in the GCC Runtime Library Exception, version - 3.1, as published by the Free Software Foundation. - - You should have received a copy of the GNU General Public License and - a copy of the GCC Runtime Library Exception along with this program; - see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - <http://www.gnu.org/licenses/>. */ - -/* Provide support for vector pairs, even on systems that do not have native - support for loading and storing pairs of vectors. */ - -#ifndef _VECTOR_PAIR_H -#define _VECTOR_PAIR_H 1 - -/* Union of the various vector pair types. */ -union __vpair_union { - -#ifdef __MMA__ - __vector_pair __vpair; -#endif - - vector double __vp_f64[2]; - vector float __vp_f32[2]; - vector unsigned char __vp_uc[2]; -}; - -typedef union __vpair_union vector_pair_f64_t; -typedef union __vpair_union vector_pair_f32_t; - -#if !__VPAIR_BUILTIN__ && !__VPAIR_ASM__ && !__VPAIR_NOP10__ -#if __MMA__ -#define __VPAIR_ASM__ 1 - -#else -#define __VPAIR_NOP10__ 1 -#endif -#endif - -/* Macros to simplify creation of the various operations. - * - * The __VPAIR_FP_{UNARY,BINARY,FMA} macros are the base macros, and takes: - * R: The argument for the output vector pair - * A, B, C: 1-3 arguments for the inputs - * OPCODE: The assembler opcode for __asm__ on power10 - * VEC: Either __vp_f64 or __vp_f32 for the union field - * VEC_FUNC: 128-bit vector function for use on power8/power9 - * - * The __VPAIR_FP_splat macro takes: - * R: The argument for the output vector pair - * X: The scalar that is to be splat-ed to the vector pair - * VEC: Either __vp_f64 or __vp_f32 for the union field - * - * The __VPAIR_F32_<...> and __VPAIR_F64_<...> macros call the above macros - * with the appropriate structure field to use. - */ - -#undef __VPAIR_FP_SPLAT -#undef __VPAIR_FP_UNARY -#undef __VPAIR_FP_BINARY -#undef __VPAIR_FP_FMA - -#undef __VPAIR_F64_UNARY -#undef __VPAIR_F64_BINARY -#undef __VPAIR_F64_FMA - -#undef __VPAIR_F32_UNARY -#undef __VPAIR_F32_BINARY -#undef __VPAIR_F32_FMA - -/* Operations using a vector pair and __asm__operations. */ -#if __MMA__ && !__VPAIR_NOP10__ - -/* When using __asm__, we need to access the second register. Due to the way - VSX registers were formed by combining the traditional floating point - registers and Altivec registers, we can't use the output modifier %L<n> to - refer to the second register if the VSX register was a traditional Altivec - register. If the value is in VSX registers 34 & 35, %x0 would give 34, but - %L0 would give 1, since 'Altivec' registers start at 0. - - If we have a compiler where we cannot use register+1 to access the second - register in a vector pair, define __VPAIR_USE_FPR__ so that only traditional - floating point registers can be used, and %L<n> will return the 2nd register - name/number. */ - -#if __VPAIR__USE_FPR__ - -/* Use %0 and %L0 on traditional FPR registers. */ -#define __VPAIR_FP_SPLAT(R, X, VEC) \ - __asm__ ("xxlor %L0,%0,%0" \ - : "=d" ((R)->__vpair) \ - : "0" (__builtin_vec_splats ((X)))) - -#define __VPAIR_FP_UNARY(R, A, OPCODE, VEC, VEC_FUNC) \ - __asm__ (OPCODE " %0,%1\n\t" OPCODE " %L0,%L1" \ - : "=d" ((R)->__vpair) \ - : "d" ((A)->__vpair)) - -#define __VPAIR_FP_BINARY(R, A, B, OPCODE, VEC, VEC_FUNC) \ - __asm__ (OPCODE " %0,%1,$1\n\t" OPCODE " %L0,%L1,%L2" \ - : "=d" ((R)->__vpair) \ - : "d" ((A)->__vpair), "d" ((B)->__vpair)) - -/* Note the 'a' form of the fma instructions must be used. */ -#define __VPAIR_FP_FMA(R, A, B, C, OPCODE, VEC, VEC_FUNC) \ - __asm__ (OPCODE " %0,%1,%2\n\t" OPCODE " %L0,%L1,%L2" \ - : "=d" ((R)->__vpair) \ - : "d" ((A)->__vpair), "d" ((B)->__vpair), "0" ((C)->__vpair)) - -#else - -/* Use %x0 and %x0+1 on VSX reigsters. */ -#define __VPAIR_FP_SPLAT(R, X, VEC) \ - __asm__ ("xxlor %x0+1,%x0,%x0" \ - : "=wa" ((R)->__vpair) \ - : "0" (__builtin_vec_splats ((X)))) - -#define __VPAIR_FP_UNARY(R, A, OPCODE, VEC, VEC_FUNC) \ - __asm__ (OPCODE " %x0,%x1\n\t" OPCODE " %x0+1,%x1+1" \ - : "=wa" ((R)->__vpair) \ - : "wa" ((A)->__vpair)) - -#define __VPAIR_FP_BINARY(R, A, B, OPCODE, VEC, VEC_FUNC) \ - __asm__ (OPCODE " %x0,%x1,%x2\n\t" OPCODE " %x0+1,%x1+1,%x2+1" \ - : "=wa" ((R)->__vpair) \ - : "wa" ((A)->__vpair), "wa" ((B)->__vpair)) - -/* Note the 'a' form of the fma instructions must be used. */ -#define __VPAIR_FP_FMA(R, A, B, C, OPCODE, VEC, VEC_FUNC) \ - __asm__ (OPCODE " %x0,%x1,%x2\n\t" OPCODE " %x0+1,%x1+1,%x2+1" \ - : "=wa" ((R)->__vpair) \ - : "wa" ((A)->__vpair), "wa" ((B)->__vpair), "0" ((C)->__vpair)) -#endif /* Select whether to use %0/%L0 or %x0/%x0+1. */ - -#else /* vpair support on power8/power9. */ - -/* Pair of vector operations using a built-in function. */ - -#define __VPAIR_FP_SPLAT(R, X, VEC) \ - (R)->VEC[0] = (R)->VEC[1] = __builtin_vec_splats ((X)) - -#define __VPAIR_FP_UNARY(R, A, OPCODE, VEC, VEC_FUNC) \ - do \ - { \ - (R)->VEC[0] = VEC_FUNC ((A)->VEC[0]); \ - (R)->VEC[1] = VEC_FUNC ((A)->VEC[1]); \ - } \ - while (0) - -#define __VPAIR_FP_BINARY(R, A, B, OPCODE, VEC, VEC_FUNC) \ - do \ - { \ - (R)->VEC[0] = VEC_FUNC ((A)->VEC[0], (B)->VEC[0]); \ - (R)->VEC[1] = VEC_FUNC ((A)->VEC[1], (B)->VEC[1]); \ - } \ - while (0) - -#define __VPAIR_FP_FMA(R, A, B, C, OPCODE, VEC, VEC_FUNC) \ - do \ - { \ - (R)->VEC[0] = VEC_FUNC ((A)->VEC[0], (B)->VEC[0], (C)->VEC[0]); \ - (R)->VEC[1] = VEC_FUNC ((A)->VEC[1], (B)->VEC[1], (C)->VEC[1]); \ - } \ - while (0) - -#endif /* Vector pair support. */ - -/* 64-bit version of the macros. */ -#define __VPAIR_F64_UNARY(R, A, OPCODE, VEC_FUNC) \ - __VPAIR_FP_UNARY(R, A, OPCODE, __vp_f64, VEC_FUNC) - -#define __VPAIR_F64_BINARY(R, A, B, OPCODE, VEC_FUNC) \ - __VPAIR_FP_BINARY(R, A, B, OPCODE, __vp_f64, VEC_FUNC) - -#define __VPAIR_F64_FMA(R, A, B, C, OPCODE, VEC_FUNC) \ - __VPAIR_FP_FMA(R, A, B, C, OPCODE, __vp_f64, VEC_FUNC) - - -/* 32-bit version of the macros. */ -#define __VPAIR_F32_UNARY(R, A, OPCODE, VEC_FUNC) \ - __VPAIR_FP_UNARY(R, A, OPCODE, __vp_f32, VEC_FUNC) - -#define __VPAIR_F32_BINARY(R, A, B, OPCODE, VEC_FUNC) \ - __VPAIR_FP_BINARY(R, A, B, OPCODE, __vp_f32, VEC_FUNC) - -#define __VPAIR_F32_FMA(R, A, B, C, OPCODE, VEC_FUNC) \ - __VPAIR_FP_FMA(R, A, B, C, OPCODE, __vp_f32, VEC_FUNC) - - -/* Splat functions. */ - -/* 64-bit splat to vector pair. */ - -static inline void -vpair_f64_splat (vector_pair_f64_t *__r, double __x) -{ - __VPAIR_FP_SPLAT (__r, __x, __vp_f64); -} - -/* 32-bit splat to vector pair. */ - -static inline void -vpair_f32_splat (vector_pair_f32_t *__r, float __x) -{ - __VPAIR_FP_SPLAT (__r, __x, __vp_f32); -} - - -/* 64-bit unary functions. */ - -static inline void -vpair_f64_abs (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a) -{ - __VPAIR_F64_UNARY (__r, __a, - "xvabsdp", - __builtin_vec_abs); -} - -static inline void -vpair_f64_nabs (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a) -{ - __VPAIR_F64_UNARY (__r, __a, - "xvnabsdp", - __builtin_vec_nabs); -} - -static inline void -vpair_f64_neg (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a) -{ - __VPAIR_F64_UNARY (__r, __a, - "xvnegdp", - __builtin_vec_neg); -} - -static inline void -vpair_f64_sqrt (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a) -{ - __VPAIR_F64_UNARY (__r, __a, - "xvsqrtdp", - __builtin_vec_sqrt); -} - -/* 32-bit unary functions. */ - -static inline void -vpair_f32_abs (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a) -{ - __VPAIR_F32_UNARY (__r, __a, - "xvabssp", - __builtin_vec_abs); -} - -static inline void -vpair_f32_nabs (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a) -{ - __VPAIR_F32_UNARY (__r, __a, - "xvnabssp", - __builtin_vec_nabs); -} - -static inline void -vpair_f32_neg (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a) -{ - __VPAIR_F32_UNARY (__r, __a, - "xvnegsp", - __builtin_vec_neg); -} - -static inline void -vpair_f32_sqrt (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a) -{ - __VPAIR_F32_UNARY (__r, __a, - "xvsqrtsp", - __builtin_vec_sqrt); -} - - -/* 64-bit binary functions. */ - -static inline void -vpair_f64_add (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b) -{ - __VPAIR_F64_BINARY (__r, __a, __b, - "xvadddp", - __builtin_vec_add); -} - -static inline void -vpair_f64_div (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b) -{ - __VPAIR_F64_BINARY (__r, __a, __b, - "xvdivdp", - __builtin_vec_div); -} - -static inline void -vpair_f64_max (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b) -{ - __VPAIR_F64_BINARY (__r, __a, __b, - "xvmaxdp", - __builtin_vec_max); -} - -static inline void -vpair_f64_min (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b) -{ - __VPAIR_F64_BINARY (__r, __a, __b, - "xvmindp", - __builtin_vec_min); -} - -static inline void -vpair_f64_mul (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b) -{ - __VPAIR_F64_BINARY (__r, __a, __b, - "xvmuldp", - __builtin_vec_mul); -} - -static inline void -vpair_f64_sub (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b) -{ - __VPAIR_F64_BINARY (__r, __a, __b, - "xvsubdp", - __builtin_vec_sub); -} - -/* 32-bit binary functions. */ - -static inline void -vpair_f32_add (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b) -{ - __VPAIR_F32_BINARY (__r, __a, __b, - "xvaddsp", - __builtin_vec_add); -} - -static inline void -vpair_f32_div (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b) -{ - __VPAIR_F32_BINARY (__r, __a, __b, - "xvdivsp", - __builtin_vec_div); -} - -static inline void -vpair_f32_max (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b) -{ - __VPAIR_F32_BINARY (__r, __a, __b, - "xvmaxsp", - __builtin_vec_max); -} - -static inline void -vpair_f32_min (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b) -{ - __VPAIR_F32_BINARY (__r, __a, __b, - "xvminsp", - __builtin_vec_min); -} - -static inline void -vpair_f32_mul (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b) -{ - __VPAIR_F32_BINARY (__r, __a, __b, - "xvmulsp", - __builtin_vec_mul); -} - -static inline void -vpair_f32_sub (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b) -{ - __VPAIR_F32_BINARY (__r, __a, __b, - "xvsubsp", - __builtin_vec_sub); -} - -/* 64-bit fma operations. */ - -static inline void -vpair_f64_fma (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b, - const vector_pair_f64_t *__c) -{ - __VPAIR_F64_FMA (__r, __a, __b, __c, - "xvmaddadp", - __builtin_vsx_xvmadddp); -} - -static inline void -vpair_f64_fms (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b, - const vector_pair_f64_t *__c) -{ - __VPAIR_F64_FMA (__r, __a, __b, __c, - "xvmsubadp", - __builtin_vsx_xvmsubdp); -} - -static inline void -vpair_f64_nfma (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b, - const vector_pair_f64_t *__c) -{ - __VPAIR_F64_FMA (__r, __a, __b, __c, - "xvnmaddadp", - __builtin_vsx_xvnmadddp); -} - -static inline void -vpair_f64_nfms (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a, - const vector_pair_f64_t *__b, - const vector_pair_f64_t *__c) -{ - __VPAIR_F64_FMA (__r, __a, __b, __c, - "xvnmsubadp", - __builtin_vsx_xvnmsubdp); -} -/* 32-bit fma operations. */ - -static inline void -vpair_f32_fma (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b, - const vector_pair_f32_t *__c) -{ - __VPAIR_F32_FMA (__r, __a, __b, __c, - "xvmaddasp", - __builtin_vsx_xvmaddsp); -} - -static inline void -vpair_f32_fms (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b, - const vector_pair_f32_t *__c) -{ - __VPAIR_F32_FMA (__r, __a, __b, __c, - "xvmsubasp", - __builtin_vsx_xvmsubsp); -} - -static inline void -vpair_f32_nfma (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b, - const vector_pair_f32_t *__c) -{ - __VPAIR_F32_FMA (__r, __a, __b, __c, - "xvnmaddasp", - __builtin_vsx_xvnmaddsp); -} - -static inline void -vpair_f32_nfms (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a, - const vector_pair_f32_t *__b, - const vector_pair_f32_t *__c) -{ - __VPAIR_F32_FMA (__r, __a, __b, __c, - "xvnmsubasp", - __builtin_vsx_xvnmsubsp); -} - - -/* Swap even/odd operations. */ - -static inline void -vpair_f32_swap_odd_even (vector_pair_f32_t *__r, - const vector_pair_f32_t *__a) -{ - vector unsigned long long __rotate = { 32, 32 }; - -#if __MMA__ && !__VPAIR_NOP10__ - /* Power10 vector pair support. */ - __asm__ ("vrld %0,%1,%2\n\tvrld %L0,%L1,%2" - : "=v" (__r->__vpair) - : "v" (__a->__vpair), "v" (__rotate)); - -#else /* vector pair not available. */ - vector unsigned long long *__r_ll = (vector unsigned long long *)__r; - vector unsigned long long *__a_ll = (vector unsigned long long *)__a; - __r_ll[0] = __builtin_vec_vrld (__a_ll[0], __rotate); - __r_ll[1] = __builtin_vec_vrld (__a_ll[1], __rotate); -#endif /* Vector pair support. */ -} - - -static inline void -vpair_f64_swap_odd_even (vector_pair_f64_t *__r, - const vector_pair_f64_t *__a) -{ -#if __MMA__ && !__VPAIR_NOP10__ -#if __VPAIR__USE_FPR__ - - /* Use vector pair and use %0 and %L0 on traditional FPR registers. */ - __asm__ ("xxpermdi %0,%1,%1,2\n\txxpermdi %L0,%L1,%L1,2" - : "=d" (__r->__vpair) - : "d" (__a->__vpair)); - -#else /* !__VPAIR__USE_FPR__. */ - /* Use vector pair and use %x0 and %x0+ on all VSX registers. */ - __asm__ ("xxpermdi %x0,%x1,%x1,2\n\txxpermdi %x0+1,%x1+1,%x1+1,2" - : "=wa" (__r->__vpair) - : "wa" (__a->__vpair)); - -#endif /* !__VPAIR__USE_FPR__. */ - -#else /* vector pair not available. */ - __r->__vp_f64[0] - = __builtin_vsx_xxpermdi_2df (__a->__vp_f64[0], __a->__vp_f64[0], 2); - __r->__vp_f64[1] - = __builtin_vsx_xxpermdi_2df (__a->__vp_f64[1], __a->__vp_f64[1], 2); - -#endif /* Vector pair support. */ -} - -#endif /* _VECTOR_PAIR_H. */ diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 1d1ab776e5f6..beaf67e59a1b 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -16451,7 +16451,6 @@ instructions, but allow the compiler to schedule those calls. * PowerPC Hardware Transactional Memory Built-in Functions:: * PowerPC Atomic Memory Operation Functions:: * PowerPC Matrix-Multiply Assist Built-in Functions:: -* PowerPC Vector Pair Support:: * PRU Built-in Functions:: * RISC-V Built-in Functions:: * RISC-V Vector Intrinsics:: @@ -24855,105 +24854,6 @@ __vector_pair __builtin_vsx_lxvp (size_t, __vector_pair *); void __builtin_vsx_stxvp (__vector_pair, size_t, __vector_pair *); @end smallexample -@node PowerPC Vector Pair Support -@subsection PowerPC Vector Pair Support -ISA 3.1 (power10) added instructions to load and store pairs of -vectors with a single instruction. - -GCC now provides an include file (@file{vector-pair.h}) on PowerPC -systems that allows users to write code that can write 32-bit and -64-bit floating point code that processes data in 256-bit chunks -rather than 128-bit chunks. - -If the code is compiled on an ISA 3.1 system with MMA enabled, the -vector pair functions will use the @code{__vector_pair} type to have -values in adjacent vectors and do the operation as a pair of -operations. - -If the code is compiled on a VSX system, but not one with MMA enabled, the vector -pair functions will use 2 separate vectors to do the operation. - -Two types are provided: @code{vector_pair_f64_t} is for vector pairs -that will operate on units of 4 64-bit floating point values, and -@code{vector_pair_f32_t} for operating on units of 8 32-bit floating -point values. - -The following functions are provided for operating on vector pairs -that consist of 4 64-bit floating point values: - -@smallexample -void vpair_f64_splat (vector_pair_f64_t *, double); - -void vpair_f64_abs (vector_pair_f64_t *, vector_pair_f64_t *); -void vpair_f64_nabs (vector_pair_f64_t *, vector_pair_f64_t *); -void vpair_f64_neg (vector_pair_f64_t *, vector_pair_f64_t *); -void vpair_f64_sqrt (vector_pair_f64_t *, vector_pair_f64_t *); - -void vpair_f64_add (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *); -void vpair_f64_div (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *); -void vpair_f64_max (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *); -void vpair_f64_min (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *); -void vpair_f64_mul (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *); -void vpair_f64_sub (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *); - -void vpair_f64_fma (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *, vector_pair_f64_t *); -void vpair_f64_fms (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *, vector_pair_f64_t *); -void vpair_f64_nfma (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *, vector_pair_f64_t *); -void vpair_f64_nfms (vector_pair_f64_t *, vector_pair_f64_t *, - vector_pair_f64_t *, vector_pair_f64_t *); -@end smallexample - -The following functions are provided for operating on vector pairs -that consist of 8 32-bit floating point values: - -@smallexample -void vpair_f32_splat (vector_pair_f32_t *, float); - -void vpair_f32_abs (vector_pair_f32_t *, vector_pair_f32_t *); -void vpair_f32_nabs (vector_pair_f32_t *, vector_pair_f32_t *); -void vpair_f32_neg (vector_pair_f32_t *, vector_pair_f32_t *); -void vpair_f32_sqrt (vector_pair_f32_t *, vector_pair_f32_t *); - -void vpair_f32_add (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *); -void vpair_f32_div (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *); -void vpair_f32_max (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *); -void vpair_f32_min (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *); -void vpair_f32_mul (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *); -void vpair_f32_sub (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *); - -void vpair_f32_fma (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *, vector_pair_f32_t *); -void vpair_f32_fms (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *, vector_pair_f32_t *); -void vpair_f32_nfma (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *, vector_pair_f32_t *); -void vpair_f32_nfms (vector_pair_f32_t *, vector_pair_f32_t *, - vector_pair_f32_t *, vector_pair_f32_t *); -@end smallexample - -The following functions are provided for operating on vector pairs -that swap the even and odd elements. - -@smallexample -void vpair_f32_swap_odd_even (vector_pair_f32_t *, vector_pair_f32_t *); -void vpair_f64_swap_odd_even (vector_pair_f64_t *, vector_pair_f64_t *); -@end smallexample - @node PRU Built-in Functions @subsection PRU Built-in Functions diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-1.c b/gcc/testsuite/gcc.target/powerpc/vpair-1.c deleted file mode 100644 index f56e99a1d044..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-1.c +++ /dev/null @@ -1,150 +0,0 @@ -/* { dg-do compile } */ -/* { dg-require-effective-target power10_ok } */ -/* { dg-options "-mdejagnu-cpu=power10 -O2" } */ - -/* Test whether the vector builtin code generates the expected instructions for - vector pairs with 4 double elements. */ - -#include <vector-pair.h> - -void -test_add (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y) -{ - /* 2 lxvp, 2 xvadddp, 1 stxvp. */ - vpair_f64_add (dest, x, y); -} - -void -test_sub (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y) -{ - /* 2 lxvp, 2 xvsubdp, 1 stxvp. */ - vpair_f64_sub (dest, x, y); -} - -void -test_multiply (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y) -{ - /* 2 lxvp, 2 xvmuldp, 1 stxvp. */ - vpair_f64_mul (dest, x, y); -} - -void -test_min (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y) -{ - /* 2 lxvp, 2 xvmindp, 1 stxvp. */ - vpair_f64_min (dest, x, y); -} - -void -test_max (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y) -{ - /* 2 lxvp, 2 xvmaxdp, 1 stxvp. */ - vpair_f64_max (dest, x, y); -} - -void -test_negate (vector_pair_f64_t *dest, - vector_pair_f64_t *x) -{ - /* 1 lxvp, 2 xvnegdp, 1 stxvp. */ - vpair_f64_neg (dest, x); -} - -void -test_abs (vector_pair_f64_t *dest, - vector_pair_f64_t *x) -{ - /* 1 lxvp, 2 xvabsdp, 1 stxvp. */ - vpair_f64_abs (dest, x); -} - -void -test_negative_abs (vector_pair_f64_t *dest, - vector_pair_f64_t *x) -{ - /* 2 lxvp, 2 xvnabsdp, 1 stxvp. */ - vpair_f64_nabs (dest, x); -} - -void -test_sqrt (vector_pair_f64_t *dest, - vector_pair_f64_t *x) -{ - /* 1 lxvp, 2 xvabsdp, 1 stxvp. */ - vpair_f64_sqrt (dest, x); -} - -void -test_fma (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y, - vector_pair_f64_t *z) -{ - /* 2 lxvp, 2 xvmadd{a,m}dp, 1 stxvp. */ - vpair_f64_fma (dest, x, y, z); -} - -void -test_fms (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y, - vector_pair_f64_t *z) -{ - /* 2 lxvp, 2 xvmsub{a,m}dp, 1 stxvp. */ - vpair_f64_fms (dest, x, y, z); -} - -void -test_nfma (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y, - vector_pair_f64_t *z) -{ - /* 2 lxvp, 2 xvnmadd{a,m}dp, 1 stxvp. */ - vpair_f64_nfma (dest, x, y, z); -} - -void -test_nfms (vector_pair_f64_t *dest, - vector_pair_f64_t *x, - vector_pair_f64_t *y, - vector_pair_f64_t *z) -{ - /* 2 lxvp, 2 xvnmsub{a,m}dp, 1 stxvp. */ - vpair_f64_nfms (dest, x, y, z); -} - -void -test_swap (vector_pair_f64_t *dest, - vector_pair_f64_t *x) -{ - /* 1 lxvp, 2 xxpermdi, 1 stxvp. */ - vpair_f64_swap_odd_even (dest, x); -} - -/* { dg-final { scan-assembler-times {\mlxvp\M} 27 } } */ -/* { dg-final { scan-assembler-times {\mstxvp\M} 14 } } */ -/* { dg-final { scan-assembler-times {\mxvabsdp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvadddp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmadd.dp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmaxdp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmindp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmsub.dp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmuldp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnabsdp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnegdp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnmadd.dp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnmsub.dp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvsqrtdp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvsubdp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxxpermdi\M} 2 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-2.c b/gcc/testsuite/gcc.target/powerpc/vpair-2.c deleted file mode 100644 index 0f84a74e94a1..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-2.c +++ /dev/null @@ -1,150 +0,0 @@ -/* { dg-do compile } */ -/* { dg-require-effective-target power10_ok } */ -/* { dg-options "-mdejagnu-cpu=power10 -O2" } */ - -/* Test whether the vector builtin code generates the expected instructions for - vector pairs with 4 double elements. */ - -#include <vector-pair.h> - -void -test_add (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y) -{ - /* 2 lxvp, 2 xvaddsp, 1 stxvp. */ - vpair_f32_add (dest, x, y); -} - -void -test_sub (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y) -{ - /* 2 lxvp, 2 xvsubsp, 1 stxvp. */ - vpair_f32_sub (dest, x, y); -} - -void -test_multiply (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y) -{ - /* 2 lxvp, 2 xvmulsp, 1 stxvp. */ - vpair_f32_mul (dest, x, y); -} - -void -test_min (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y) -{ - /* 2 lxvp, 2 xvminsp, 1 stxvp. */ - vpair_f32_min (dest, x, y); -} - -void -test_max (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y) -{ - /* 2 lxvp, 2 xvmaxsp, 1 stxvp. */ - vpair_f32_max (dest, x, y); -} - -void -test_negate (vector_pair_f32_t *dest, - vector_pair_f32_t *x) -{ - /* 1 lxvp, 2 xvnegsp, 1 stxvp. */ - vpair_f32_neg (dest, x); -} - -void -test_abs (vector_pair_f32_t *dest, - vector_pair_f32_t *x) -{ - /* 1 lxvp, 2 xvabssp, 1 stxvp. */ - vpair_f32_abs (dest, x); -} - -void -test_negative_abs (vector_pair_f32_t *dest, - vector_pair_f32_t *x) -{ - /* 2 lxvp, 2 xvnabssp, 1 stxvp. */ - vpair_f32_nabs (dest, x); -} - -void -test_sqrt (vector_pair_f32_t *dest, - vector_pair_f32_t *x) -{ - /* 1 lxvp, 2 xvabssp, 1 stxvp. */ - vpair_f32_sqrt (dest, x); -} - -void -test_fma (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y, - vector_pair_f32_t *z) -{ - /* 2 lxvp, 2 xvmadd{a,m}sp, 1 stxvp. */ - vpair_f32_fma (dest, x, y, z); -} - -void -test_fms (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y, - vector_pair_f32_t *z) -{ - /* 2 lxvp, 2 xvmsub{a,m}sp, 1 stxvp. */ - vpair_f32_fms (dest, x, y, z); -} - -void -test_nfma (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y, - vector_pair_f32_t *z) -{ - /* 2 lxvp, 2 xvnmadd{a,m}sp, 1 stxvp. */ - vpair_f32_nfma (dest, x, y, z); -} - -void -test_nfms (vector_pair_f32_t *dest, - vector_pair_f32_t *x, - vector_pair_f32_t *y, - vector_pair_f32_t *z) -{ - /* 2 lxvp, 2 xvnmsub{a,m}sp, 1 stxvp. */ - vpair_f32_nfms (dest, x, y, z); -} - -void -test_swap (vector_pair_f32_t *dest, - vector_pair_f32_t *x) -{ - /* 1 lxvp, 2 xxpermdi, 1 stxvp. */ - vpair_f32_swap_odd_even (dest, x); -} - -/* { dg-final { scan-assembler-times {\mlxvp\M} 27 } } */ -/* { dg-final { scan-assembler-times {\mstxvp\M} 14 } } */ -/* { dg-final { scan-assembler-times {\mvrld\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvabssp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvaddsp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmadd.sp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmaxsp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvminsp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmsub.sp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvmulsp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnabssp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnegsp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnmadd.sp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvnmsub.sp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvsqrtsp\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mxvsubsp\M} 2 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-3-not-p10.c b/gcc/testsuite/gcc.target/powerpc/vpair-3-not-p10.c deleted file mode 100644 index d1a1029417f0..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-3-not-p10.c +++ /dev/null @@ -1,15 +0,0 @@ -/* { dg-do run { target { vsx_hw } } } */ -/* { dg-options "-mvsx -O2 -ffast-math -mno-mma" } */ - -/* - * This test of the double (f64) vector pair functions in vector-pair.h is run - * on VSX systems when the load/store vector pair instructions are not - * available. - * - * The -ffast-math option is used to just use the hardware sqrt, min, and max - * instructions without calling into the library. - * - * The -mno-mma option disables GCC from enabling the __vector_pair type. - */ - -#include "vpair-3.h" diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-3-p10.c b/gcc/testsuite/gcc.target/powerpc/vpair-3-p10.c deleted file mode 100644 index d78faf3fed47..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-3-p10.c +++ /dev/null @@ -1,14 +0,0 @@ -/* { dg-do run { target { power10_hw } } } */ -/* { dg-options "-mdejagnu-cpu=power10 -O2 -ffast-math -mmma" } */ - -/* - * This test of the double (f64) vector pair functions in vector-pair.h is run - * on VSX systems when the load/store vector pair instructions are available. - * - * The -ffast-math option is used to just use the hardware sqrt, min, and max - * instructions without calling into the library. - * - * The -mmma option makes sure GC enables the __vector_pair type. - */ - -#include "vpair-3.h" diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-3.h b/gcc/testsuite/gcc.target/powerpc/vpair-3.h deleted file mode 100644 index 656488dbb627..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-3.h +++ /dev/null @@ -1,461 +0,0 @@ -/* Common include file to test the vector pair double functions. This is run - two times, once compiled for a non-power10 system that does not have the - vector pair load and store instructions, and once with power10 defaults that - has load/store vector pair. */ - -#include <stddef.h> -#include <stdlib.h> -#include <vector-pair.h> - -#ifdef DEBUG -#include <stdio.h> -#endif - -#ifndef NUM -#define NUM 16 -#endif - -static double result1[NUM]; -static double result2[NUM]; -static double in_a[NUM]; -static double in_b[NUM]; -static double in_c[NUM]; - -/* vector pair tests. */ - -void -vpair_abs (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_abs (vr + i, va + i); -} - -void -vpair_nabs (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_nabs (vr + i, va + i); -} - -void -vpair_neg (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_neg (vr + i, va + i); -} - -void -vpair_sqrt (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_sqrt (vr + i, va + i); -} - -void -vpair_add (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_add (vr + i, va + i, vb + i); -} - -void -vpair_sub (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_sub (vr + i, va + i, vb + i); -} - -void -vpair_mul (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_mul (vr + i, va + i, vb + i); -} - -void -vpair_div (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_div (vr + i, va + i, vb + i); -} - -void -vpair_min (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_min (vr + i, va + i, vb + i); -} - -void -vpair_max (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_max (vr + i, va + i, vb + i); -} - -void -vpair_fma (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - vector_pair_f64_t *vc = (vector_pair_f64_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_fma (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_fms (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - vector_pair_f64_t *vc = (vector_pair_f64_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_fms (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_nfma (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - vector_pair_f64_t *vc = (vector_pair_f64_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_nfma (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_nfms (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - vector_pair_f64_t *vb = (vector_pair_f64_t *)b; - vector_pair_f64_t *vc = (vector_pair_f64_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_nfms (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_swap (double *r, double *a, double *b, double *c, size_t num) -{ - vector_pair_f64_t *vr = (vector_pair_f64_t *)r; - vector_pair_f64_t *va = (vector_pair_f64_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f64_t) / sizeof (double)); - - for (i = 0; i < num2; i++) - vpair_f64_swap_odd_even (vr + i, va + i); -} - - -/* scalar tests. */ - -void -scalar_abs (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] < 0.0) ? -a[i] : a[i]; -} - -void -scalar_nabs (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] < 0.0) ? a[i] : -a[i]; -} - -void -scalar_neg (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = -a[i]; -} - -void -scalar_sqrt (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = __builtin_sqrt (a[i]); -} - -void -scalar_add (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] + b[i]; -} - -void -scalar_sub (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] - b[i]; -} - -void -scalar_mul (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] * b[i]; -} - -void -scalar_div (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] / b[i]; -} - -void -scalar_min (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] < b[i]) ? a[i] : b[i]; -} - -void -scalar_max (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] > b[i]) ? a[i] : b[i]; -} - -void -scalar_fma (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = __builtin_fma (a[i], b[i], c[i]); -} - -void -scalar_fms (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = __builtin_fma (a[i], b[i], -c[i]); -} - -void -scalar_nfma (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = - __builtin_fma (a[i], b[i], c[i]); -} - -void -scalar_nfms (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = - __builtin_fma (a[i], b[i], -c[i]); -} - -void -scalar_swap (double *r, double *a, double *b, double *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i += 2) - { - r[i] = a[i+1]; - r[i+1] = a[i]; - } -} - - -/* Check results. */ -void -check (const char *name) -{ - size_t i; - - for (i = 0; i < NUM; i++) - if (result1[i] != result2[i]) - { -#ifdef DEBUG - printf ("test #%ld failed, %g != %g, %s (%g, %g, %g).\n", - (long)i, - result1[i], - result2[i], - name, - in_a[i], - in_b[i], - in_c[i]); -#endif - abort (); - } - - return; -} - -typedef void func_t (double *, double *, double *, double *, size_t); - -/* tests to run. */ -struct -{ - func_t *vpair_test; - func_t *scalar_test; - const char *name; -} tests[] = { - { vpair_abs, scalar_abs, "abs" }, - { vpair_nabs, scalar_nabs, "nabs" }, - { vpair_neg, scalar_neg, "neg" }, - { vpair_sqrt, scalar_sqrt, "sqrt" }, - { vpair_add, scalar_add, "add" }, - { vpair_sub, scalar_sub, "sub" }, - { vpair_mul, scalar_mul, "mul" }, - { vpair_div, scalar_div, "div" }, - { vpair_min, scalar_min, "min" }, - { vpair_max, scalar_max, "max" }, - { vpair_fma, scalar_fma, "fma" }, - { vpair_fms, scalar_fms, "fms" }, - { vpair_nfma, scalar_nfma, "nfma" }, - { vpair_nfms, scalar_nfms, "nfms" }, - { vpair_swap, scalar_swap, "swap" }, -}; - -/* Run tests. */ - -int -main (void) -{ - size_t i; - - /* Initialize the inputs. */ - for (i = 0; i < NUM; i++) - { - double d = (double)(i + 1); - in_a[i] = d * d; - in_b[i] = d; - in_c[i] = d + 2.0; - } - -#ifdef DEBUG - printf ("Start tests\n"); -#endif - - /* Run the tests. */ - for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) - { - tests[i].vpair_test (result1, in_a, in_b, in_c, NUM); - tests[i].scalar_test (result2, in_a, in_b, in_c, NUM); - check (tests[i].name); - } - -#ifdef DEBUG - printf ("End tests\n"); -#endif - - return 0; -} diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-4-not-p10.c b/gcc/testsuite/gcc.target/powerpc/vpair-4-not-p10.c deleted file mode 100644 index f57fbbf8b050..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-4-not-p10.c +++ /dev/null @@ -1,15 +0,0 @@ -/* { dg-do run { target { vsx_hw } } } */ -/* { dg-options "-mvsx -O2 -ffast-math -mno-mma" } */ - -/* - * This test of the float (f32) vector pair functions in vector-pair.h is run - * on VSX systems when the load/store vector pair instructions are not - * available. - * - * The -ffast-math option is used to just use the hardware sqrt, min, and max - * instructions without calling into the library. - * - * The -mno-mma option disables GCC from enabling the __vector_pair type. - */ - -#include "vpair-4.h" diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-4-p10.c b/gcc/testsuite/gcc.target/powerpc/vpair-4-p10.c deleted file mode 100644 index 12291202c163..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-4-p10.c +++ /dev/null @@ -1,14 +0,0 @@ -/* { dg-do run { target { power10_hw } } } */ -/* { dg-options "-mdejagnu-cpu=power10 -O2 -ffast-math -mmma" } */ - -/* - * This test of the float (f32) vector pair functions in vector-pair.h is run - * on VSX systems when the load/store vector pair instructions are available. - * - * The -ffast-math option is used to just use the hardware sqrt, min, and max - * instructions without calling into the library. - * - * The -mmma option makes sure GC enables the __vector_pair type. - */ - -#include "vpair-4.h" diff --git a/gcc/testsuite/gcc.target/powerpc/vpair-4.h b/gcc/testsuite/gcc.target/powerpc/vpair-4.h deleted file mode 100644 index 49384e279740..000000000000 --- a/gcc/testsuite/gcc.target/powerpc/vpair-4.h +++ /dev/null @@ -1,461 +0,0 @@ -/* Common include file to test the vector pair float functions. This is run - two times, once compiled for a non-power10 system that does not have the - vector pair load and store instructions, and once with power10 defaults that - has load/store vector pair. */ - -#include <stddef.h> -#include <stdlib.h> -#include <vector-pair.h> - -#ifdef DEBUG -#include <stdio.h> -#endif - -#ifndef NUM -#define NUM 16 -#endif - -static float result1[NUM]; -static float result2[NUM]; -static float in_a[NUM]; -static float in_b[NUM]; -static float in_c[NUM]; - -/* vector pair tests. */ - -void -vpair_abs (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_abs (vr + i, va + i); -} - -void -vpair_nabs (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_nabs (vr + i, va + i); -} - -void -vpair_neg (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_neg (vr + i, va + i); -} - -void -vpair_sqrt (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_sqrt (vr + i, va + i); -} - -void -vpair_add (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_add (vr + i, va + i, vb + i); -} - -void -vpair_sub (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_sub (vr + i, va + i, vb + i); -} - -void -vpair_mul (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_mul (vr + i, va + i, vb + i); -} - -void -vpair_div (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_div (vr + i, va + i, vb + i); -} - -void -vpair_min (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_min (vr + i, va + i, vb + i); -} - -void -vpair_max (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_max (vr + i, va + i, vb + i); -} - -void -vpair_fma (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - vector_pair_f32_t *vc = (vector_pair_f32_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_fma (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_fms (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - vector_pair_f32_t *vc = (vector_pair_f32_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_fms (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_nfma (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - vector_pair_f32_t *vc = (vector_pair_f32_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_nfma (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_nfms (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - vector_pair_f32_t *vb = (vector_pair_f32_t *)b; - vector_pair_f32_t *vc = (vector_pair_f32_t *)c; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_nfms (vr + i, va + i, vb + i, vc + i); -} - -void -vpair_swap (float *r, float *a, float *b, float *c, size_t num) -{ - vector_pair_f32_t *vr = (vector_pair_f32_t *)r; - vector_pair_f32_t *va = (vector_pair_f32_t *)a; - - size_t i; - size_t num2 = num / (sizeof (vector_pair_f32_t) / sizeof (float)); - - for (i = 0; i < num2; i++) - vpair_f32_swap_odd_even (vr + i, va + i); -} - - -/* scalar tests. */ - -void -scalar_abs (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] < 0.0) ? -a[i] : a[i]; -} - -void -scalar_nabs (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] < 0.0) ? a[i] : -a[i]; -} - -void -scalar_neg (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = -a[i]; -} - -void -scalar_sqrt (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = __builtin_sqrt (a[i]); -} - -void -scalar_add (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] + b[i]; -} - -void -scalar_sub (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] - b[i]; -} - -void -scalar_mul (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] * b[i]; -} - -void -scalar_div (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = a[i] / b[i]; -} - -void -scalar_min (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] < b[i]) ? a[i] : b[i]; -} - -void -scalar_max (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = (a[i] > b[i]) ? a[i] : b[i]; -} - -void -scalar_fma (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = __builtin_fma (a[i], b[i], c[i]); -} - -void -scalar_fms (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = __builtin_fma (a[i], b[i], -c[i]); -} - -void -scalar_nfma (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = - __builtin_fma (a[i], b[i], c[i]); -} - -void -scalar_nfms (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - r[i] = - __builtin_fma (a[i], b[i], -c[i]); -} - -void -scalar_swap (float *r, float *a, float *b, float *c, size_t num) -{ - size_t i; - - for (i = 0; i < num; i += 2) - { - r[i] = a[i+1]; - r[i+1] = a[i]; - } -} - - -/* Check results. */ -void -check (const char *name) -{ - size_t i; - - for (i = 0; i < NUM; i++) - if (result1[i] != result2[i]) - { -#ifdef DEBUG - printf ("test #%ld failed, %g != %g, %s (%g, %g, %g).\n", - (long)i, - result1[i], - result2[i], - name, - in_a[i], - in_b[i], - in_c[i]); -#endif - abort (); - } - - return; -} - -typedef void func_t (float *, float *, float *, float *, size_t); - -/* tests to run. */ -struct -{ - func_t *vpair_test; - func_t *scalar_test; - const char *name; -} tests[] = { - { vpair_abs, scalar_abs, "abs" }, - { vpair_nabs, scalar_nabs, "nabs" }, - { vpair_neg, scalar_neg, "neg" }, - { vpair_sqrt, scalar_sqrt, "sqrt" }, - { vpair_add, scalar_add, "add" }, - { vpair_sub, scalar_sub, "sub" }, - { vpair_mul, scalar_mul, "mul" }, - { vpair_div, scalar_div, "div" }, - { vpair_min, scalar_min, "min" }, - { vpair_max, scalar_max, "max" }, - { vpair_fma, scalar_fma, "fma" }, - { vpair_fms, scalar_fms, "fms" }, - { vpair_nfma, scalar_nfma, "nfma" }, - { vpair_nfms, scalar_nfms, "nfms" }, - { vpair_swap, scalar_swap, "swap" }, -}; - -/* Run tests. */ - -int -main (void) -{ - size_t i; - - /* Initialize the inputs. */ - for (i = 0; i < NUM; i++) - { - float f = (float)(i + 1); - in_a[i] = f * f; - in_b[i] = f; - in_c[i] = f + 2.0f; - } - -#ifdef DEBUG - printf ("Start tests\n"); -#endif - - /* Run the tests. */ - for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) - { - tests[i].vpair_test (result1, in_a, in_b, in_c, NUM); - tests[i].scalar_test (result2, in_a, in_b, in_c, NUM); - check (tests[i].name); - } - -#ifdef DEBUG - printf ("End tests\n"); -#endif - - return 0; -}