summaryrefslogtreecommitdiff
path: root/gcc/config/rs6000/altivec.h
diff options
context:
space:
mode:
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>2002-02-05 02:18:55 +0000
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>2002-02-05 02:18:55 +0000
commit391c48ec137146e6f4185010edcd7460388a68d1 (patch)
treee2fb665c5c722319f0c00bb02bcfbb4e7e9c3eb4 /gcc/config/rs6000/altivec.h
parent48fa9b7c8fee4a0e3d3de6ae6617b1ecad1db01f (diff)
downloadgcc-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.h151
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