mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-22 13:39:58 +08:00
* gcc.c-dg/altivec.c: New.
From-SVN: r47191
This commit is contained in:
parent
1578fa9545
commit
b73f64948e
@ -1,3 +1,7 @@
|
||||
2001-11-19 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* gcc.dg/altivec-1.c: New.
|
||||
|
||||
2001-11-19 Neil Booth <neil@daikokuya.demon.co.uk>
|
||||
|
||||
* gcc.dg/cpp/fpreprocessed.c: New test case.
|
||||
|
82
gcc/testsuite/gcc.dg/altivec-1.c
Normal file
82
gcc/testsuite/gcc.dg/altivec-1.c
Normal file
@ -0,0 +1,82 @@
|
||||
/* { dg-do run { target powerpc-*altivec powerpc-*-*-*altivec } } */
|
||||
/* { dg-options "-maltivec" } */
|
||||
|
||||
/* 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>. */
|
||||
|
||||
#define vec_load(src) \
|
||||
__builtin_altivec_ld_internal ((int *) src)
|
||||
|
||||
#define vec_store(dst, src) \
|
||||
__builtin_altivec_st_internal ((int *) dst, (int4) src)
|
||||
|
||||
#define vec_add_int4(x, y) \
|
||||
__builtin_altivec_vaddsws (x, y)
|
||||
|
||||
#define vec_add_float4(x, y) \
|
||||
__builtin_altivec_vaddfp (x, y)
|
||||
|
||||
#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 i;
|
||||
|
||||
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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user