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> 2002-03-11 Richard Henderson <rth@redhat.com>
* g++.old-deja/g++.brendan/crash52.C: Remove return warning marker. * g++.old-deja/g++.brendan/crash52.C: Remove return warning marker.

View File

@ -3,80 +3,36 @@
/* Program to test PowerPC AltiVec instructions. */ /* Program to test PowerPC AltiVec instructions. */
/* These macros are not analogous to the overloaded functions #include <altivec.h>
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>. */
#define vec_load(src) \ extern void abort (void);
__builtin_altivec_ld_internal_4si ((int *) src)
#define vec_store(dst, src) \ vector int a1 = { 100, 200, 300, 400 };
__builtin_altivec_st_internal_4si ((int *) dst, (int4) src) 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) \ vector float f1 = { 1.0, 2.0, 3.0, 4.0 };
__builtin_altivec_vaddsws (x, y) 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) \ vector int k;
__builtin_altivec_vaddfp (x, y) vector float f, g, h;
#define vec_average_int4(x, y) \ int main ()
__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 i; k = vec_add (a1, a2);
if (!vec_all_eq (addi, k))
abort ();
for (i = 0; i < 4; ++i) k = vec_avg (a1, a2);
if (a[i] != b[i]) if (!vec_all_eq (k, avgi))
exit (1); abort ();
}
h = vec_add (f1, f2);
void if (!vec_all_eq (h, addf))
compare_float4 (float *a, float *b) abort ();
{
int i; return 0;
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);
} }