altivec-1.c: Cleanup and use altivec.h.

2002-03-11  Aldy Hernandez  <aldyh@redhat.com>

        * gcc.dg/altivec-1.c: Cleanup and use altivec.h.

From-SVN: r50624
This commit is contained in:
Aldy Hernandez 2002-03-12 01:24:42 +00:00 committed by Aldy Hernandez
parent bc204393c8
commit 55a21c32e7
2 changed files with 29 additions and 69 deletions

View File

@ -1,3 +1,7 @@
2002-03-11 Aldy Hernandez <aldyh@redhat.com>
* gcc.dg/altivec-1.c: Cleanup and use altivec.h.
2002-03-11 Richard Henderson <rth@redhat.com>
* g++.old-deja/g++.brendan/crash52.C: Remove return warning marker.

View File

@ -3,80 +3,36 @@
/* Program to test PowerPC AltiVec instructions. */
/* These macros are not analogous to the overloaded functions
described in Motorola's AltiVec Programming Interface Manual.
These are just here for readability. Eventually we'll get the
overloaded functions implemented in an <altivec.h>. */
#include <altivec.h>
#define vec_load(src) \
__builtin_altivec_ld_internal_4si ((int *) src)
extern void abort (void);
#define vec_store(dst, src) \
__builtin_altivec_st_internal_4si ((int *) dst, (int4) src)
vector int a1 = { 100, 200, 300, 400 };
vector int a2 = { 500, 600, 700, 800 };
vector int addi = { 600, 800, 1000, 1200 };
vector int avgi = { 300, 400, 500, 600 };
#define vec_add_int4(x, y) \
__builtin_altivec_vaddsws (x, y)
vector float f1 = { 1.0, 2.0, 3.0, 4.0 };
vector float f2 = { 5.0, 6.0, 7.0, 8.0 };
vector float f3;
vector float addf = { 6.0, 8.0, 10.0, 12.0 };
#define vec_add_float4(x, y) \
__builtin_altivec_vaddfp (x, y)
vector int k;
vector float f, g, h;
#define vec_average_int4(x, y) \
__builtin_altivec_vavgsw (x, y)
typedef int int4 __attribute__ ((mode(V4SI)));
typedef float float4 __attribute__ ((mode(V4SF)));
int a1[4] __attribute__((aligned(16))) = { 100, 200, 300, 400 };
int a2[4] __attribute__((aligned(16))) = { 500, 600, 700, 800 };
int a3[4] __attribute__((aligned(16)));
int addi[4] = { 600, 800, 1000, 1200 };
int avgi[4] = { 300, 400, 500, 600 };
float f1[4] __attribute__((aligned(16))) = { 1.0, 2.0, 3.0, 4.0 };
float f2[4] __attribute__((aligned(16))) = { 5.0, 6.0, 7.0, 8.0 };
float f3[4] __attribute__((aligned(16)));
float addf[4] = { 6.0, 8.0, 10.0, 12.0 };
int4 i, j, k;
float4 f, g, h;
void
compare_int4 (int *a, int *b)
int main ()
{
int i;
k = vec_add (a1, a2);
if (!vec_all_eq (addi, k))
abort ();
for (i = 0; i < 4; ++i)
if (a[i] != b[i])
exit (1);
}
void
compare_float4 (float *a, float *b)
{
int i;
for (i = 0; i < 4; ++i)
if (a[i] != b[i])
exit (1);
}
main ()
{
i = vec_load (a1);
j = vec_load (a2);
k = vec_add_int4 (i, j);
vec_store (a3, k);
compare_int4 (a3, addi);
k = vec_average_int4 (i, j);
vec_store (a3, k);
compare_int4 (a3, avgi);
f = (float4) vec_load (f1);
g = (float4) vec_load (f2);
h = vec_add_float4 (f, g);
vec_store (f3, h);
compare_float4 (f3, addf);
exit (0);
k = vec_avg (a1, a2);
if (!vec_all_eq (k, avgi))
abort ();
h = vec_add (f1, f2);
if (!vec_all_eq (h, addf))
abort ();
return 0;
}