diff options
author | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-02-05 02:18:55 +0000 |
---|---|---|
committer | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-02-05 02:18:55 +0000 |
commit | 391c48ec137146e6f4185010edcd7460388a68d1 (patch) | |
tree | e2fb665c5c722319f0c00bb02bcfbb4e7e9c3eb4 /gcc/config/rs6000/altivec.h | |
parent | 48fa9b7c8fee4a0e3d3de6ae6617b1ecad1db01f (diff) | |
download | gcc-391c48ec137146e6f4185010edcd7460388a68d1.tar.gz |
2002-02-05 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/rs6000.c (altivec_init_builtins): Fix typo
building void typed builtins.
* config/rs6000/altivec.h (vec_ld*): Fix typos.
(vec_step): Implement for C++.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49510 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/rs6000/altivec.h')
-rw-r--r-- | gcc/config/rs6000/altivec.h | 151 |
1 files changed, 144 insertions, 7 deletions
diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h index 4e8cdf27b09..a1c4cb57e01 100644 --- a/gcc/config/rs6000/altivec.h +++ b/gcc/config/rs6000/altivec.h @@ -720,82 +720,124 @@ vec_ld (int a1, vector float *a2) return (vector float) __builtin_altivec_lvx (a1, (void *) a2); } +inline vector float +vec_ld (int a1, float *a2) +{ + return (vector float) __builtin_altivec_lvx (a1, (void *) a2); +} + inline vector signed int vec_ld (int a1, vector signed int *a2) { return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2); } +inline vector signed int +vec_ld (int a1, signed int *a2) +{ + return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2); +} + inline vector unsigned int vec_ld (int a1, vector unsigned int *a2) { return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2); } +inline vector unsigned int +vec_ld (int a1, unsigned int *a2) +{ + return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2); +} + inline vector signed short vec_ld (int a1, vector signed short *a2) { return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2); } +inline vector signed short +vec_ld (int a1, signed short *a2) +{ + return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2); +} + inline vector unsigned short vec_ld (int a1, vector unsigned short *a2) { return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2); } +inline vector unsigned short +vec_ld (int a1, unsigned short *a2) +{ + return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2); +} + inline vector signed char vec_ld (int a1, vector signed char *a2) { return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2); } +inline vector signed char +vec_ld (int a1, signed char *a2) +{ + return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2); +} + inline vector unsigned char vec_ld (int a1, vector unsigned char *a2) { return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2); } +inline vector unsigned char +vec_ld (int a1, unsigned char *a2) +{ + return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2); +} + /* vec_lde */ inline vector signed char -vec_lde (int a1, vector signed char *a2) +vec_lde (int a1, signed char *a2) { return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2); } inline vector unsigned char -vec_lde (int a1, vector unsigned char *a2) +vec_lde (int a1, unsigned char *a2) { return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2); } inline vector signed short -vec_lde (int a1, vector signed short *a2) +vec_lde (int a1, signed short *a2) { return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2); } inline vector unsigned short -vec_lde (int a1, vector unsigned short *a2) +vec_lde (int a1, unsigned short *a2) { return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2); } inline vector float -vec_lde (int a1, vector float *a2) +vec_lde (int a1, float *a2) { return (vector float) __builtin_altivec_lvewx (a1, (void *) a2); } inline vector signed int -vec_lde (int a1, vector signed int *a2) +vec_lde (int a1, signed int *a2) { return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2); } inline vector unsigned int -vec_lde (int a1, vector unsigned int *a2) +vec_lde (int a1, unsigned int *a2) { return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2); } @@ -808,42 +850,84 @@ vec_ldl (int a1, vector float *a2) return (vector float) __builtin_altivec_lvxl (a1, (void *) a2); } +inline vector float +vec_ldl (int a1, float *a2) +{ + return (vector float) __builtin_altivec_lvxl (a1, (void *) a2); +} + inline vector signed int vec_ldl (int a1, vector signed int *a2) { return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2); } +inline vector signed int +vec_ldl (int a1, signed int *a2) +{ + return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2); +} + inline vector unsigned int vec_ldl (int a1, vector unsigned int *a2) { return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2); } +inline vector unsigned int +vec_ldl (int a1, unsigned int *a2) +{ + return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2); +} + inline vector signed short vec_ldl (int a1, vector signed short *a2) { return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2); } +inline vector signed short +vec_ldl (int a1, signed short *a2) +{ + return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2); +} + inline vector unsigned short vec_ldl (int a1, vector unsigned short *a2) { return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2); } +inline vector unsigned short +vec_ldl (int a1, unsigned short *a2) +{ + return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2); +} + inline vector signed char vec_ldl (int a1, vector signed char *a2) { return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2); } +inline vector signed char +vec_ldl (int a1, signed char *a2) +{ + return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2); +} + inline vector unsigned char vec_ldl (int a1, vector unsigned char *a2) { return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2); } +inline vector unsigned char +vec_ldl (int a1, unsigned char *a2) +{ + return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2); +} + /* vec_loge */ inline vector float @@ -3897,6 +3981,59 @@ vec_any_out (vector float a1, vector float a2) { return __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2); } + +/* vec_step */ + +template<typename _Tp> +struct vec_step_help +{ + // All proper vector types will specialize elem. +}; + +template<> +struct vec_step_help<vector signed short> +{ + static const int elem = 8; +}; + +template<> +struct vec_step_help<vector unsigned short> +{ + static const int elem = 8; +}; + +template<> +struct vec_step_help<vector signed int> +{ + static const int elem = 4; +}; + +template<> +struct vec_step_help<vector unsigned int> +{ + static const int elem = 4; +}; + +template<> +struct vec_step_help<vector unsigned char> +{ + static const int elem = 16; +}; + +template<> +struct vec_step_help<vector signed char> +{ + static const int elem = 16; +}; + +template<> +struct vec_step_help<vector float> +{ + static const int elem = 4; +}; + +#define vec_step(t) vec_step_help<t>::elem + #else /* not C++ */ /* "... and so I think no man in a century will suffer as greatly as |