From 98705d7dfa8cd4f0ccf27676ca6d02786624b8cb Mon Sep 17 00:00:00 2001 From: Janis Johnson Date: Tue, 30 Nov 2004 19:15:38 +0000 Subject: [PATCH] altivec.h (vec_step_help): Support const vector types. * config/rs6000/altivec.h (vec_step_help): Support const vector types. * g++.dg/ext/altivec-13.C: New test. From-SVN: r91533 --- gcc/ChangeLog | 4 ++ gcc/config/rs6000/altivec.h | 88 +++++++++++++++++++++++---- gcc/testsuite/ChangeLog | 4 ++ gcc/testsuite/g++.dg/ext/altivec-13.C | 59 ++++++++++++++++++ 4 files changed, 144 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/altivec-13.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98e82389327..302ba113349 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-11-30 Janis Johnson + + * config/rs6000/altivec.h (vec_step_help): Support const vector types. + 2004-11-30 Andrew Pinski PR tree-opt/18298 diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h index b708d28defd..0447d9e1fc4 100644 --- a/gcc/config/rs6000/altivec.h +++ b/gcc/config/rs6000/altivec.h @@ -246,67 +246,133 @@ struct __vec_step_help }; template<> -struct __vec_step_help +struct __vec_step_help<__vector signed short> { static const int _S_elem = 8; }; template<> -struct __vec_step_help +struct __vec_step_help { static const int _S_elem = 8; }; template<> -struct __vec_step_help +struct __vec_step_help<__vector unsigned short> { static const int _S_elem = 8; }; template<> -struct __vec_step_help +struct __vec_step_help { static const int _S_elem = 8; }; template<> -struct __vec_step_help +struct __vec_step_help<__vector bool short> +{ + static const int _S_elem = 8; +}; + +template<> +struct __vec_step_help +{ + static const int _S_elem = 8; +}; + +template<> +struct __vec_step_help<__vector pixel> +{ + static const int _S_elem = 8; +}; + +template<> +struct __vec_step_help +{ + static const int _S_elem = 8; +}; + +template<> +struct __vec_step_help<__vector signed int> { static const int _S_elem = 4; }; template<> -struct __vec_step_help +struct __vec_step_help { static const int _S_elem = 4; }; template<> -struct __vec_step_help +struct __vec_step_help<__vector unsigned int> { static const int _S_elem = 4; }; template<> -struct __vec_step_help +struct __vec_step_help +{ + static const int _S_elem = 4; +}; + +template<> +struct __vec_step_help<__vector bool int> +{ + static const int _S_elem = 4; +}; + +template<> +struct __vec_step_help +{ + static const int _S_elem = 4; +}; + +template<> +struct __vec_step_help<__vector unsigned char> { static const int _S_elem = 16; }; template<> -struct __vec_step_help +struct __vec_step_help { static const int _S_elem = 16; }; template<> -struct __vec_step_help +struct __vec_step_help<__vector signed char> { static const int _S_elem = 16; }; template<> -struct __vec_step_help +struct __vec_step_help +{ + static const int _S_elem = 16; +}; + +template<> +struct __vec_step_help<__vector bool char> +{ + static const int _S_elem = 16; +}; + +template<> +struct __vec_step_help +{ + static const int _S_elem = 16; +}; + +template<> +struct __vec_step_help<__vector float> +{ + static const int _S_elem = 4; +}; + +template<> +struct __vec_step_help { static const int _S_elem = 4; }; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8d561ad5c84..1d12628ebf0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-11-30 Janis Johnson + + * g++.dg/ext/altivec-13.C: New test. + 2004-11-30 Andrew Pinski PR tree-opt/18298 diff --git a/gcc/testsuite/g++.dg/ext/altivec-13.C b/gcc/testsuite/g++.dg/ext/altivec-13.C new file mode 100644 index 00000000000..15ca5cc3650 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/altivec-13.C @@ -0,0 +1,59 @@ +/* Check that vec_step can be used with const vector types. This + test is derived from parts of gcc.dg/vmx/8-02.c from Motorola's + AltiVec testsuite. */ + +/* { dg-do compile { target powerpc*-*-* } } */ +/* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "*" } { "" } } */ +/* { dg-options "-maltivec" } */ + +#include + +extern vector unsigned char vuc; +extern vector signed char vsc; +extern vector bool char vbc; +extern vector unsigned short vus; +extern vector signed short vss; +extern vector bool short vbs; +extern vector unsigned int vui; +extern vector signed int vsi; +extern vector bool int vbi; +extern vector pixel vp; +extern vector float vf; +extern const vector unsigned char cvuc; +extern const vector signed char cvsc; +extern const vector bool char cvbc; +extern const vector unsigned short cvus; +extern const vector signed short cvss; +extern const vector bool short cvbs; +extern const vector unsigned int cvui; +extern const vector signed int cvsi; +extern const vector bool int cvbi; +extern const vector pixel cvp; +extern const vector float cvf; + +void +foo (void) +{ + int i_vuc = vec_step (vuc); + int i_vsc = vec_step (vsc); + int i_vbc = vec_step (vbc); + int i_vus = vec_step (vus); + int i_vss = vec_step (vss); + int i_vbs = vec_step (vbs); + int i_vui = vec_step (vui); + int i_vsi = vec_step (vsi); + int i_vbi = vec_step (vbi); + int i_vp = vec_step (vp); + int i_vf = vec_step (vf); + int i_cvuc = vec_step (cvuc); + int i_cvsc = vec_step (cvsc); + int i_cvbc = vec_step (cvbc); + int i_cvus = vec_step (cvus); + int i_cvss = vec_step (cvss); + int i_cvbs = vec_step (cvbs); + int i_cvui = vec_step (cvui); + int i_cvsi = vec_step (cvsi); + int i_cvbi = vec_step (cvbi); + int i_cvp = vec_step (cvp); + int i_cvf = vec_step (cvf); +}