URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 301 |
Rev 338 |
// { dg-do run }
|
// { dg-do run }
|
|
|
#define vector __attribute__((vector_size(16)))
|
#define vector __attribute__((vector_size(16)))
|
|
|
extern "C" void abort();
|
extern "C" void abort();
|
|
|
class Star
|
class Star
|
{
|
{
|
public:
|
public:
|
inline vector float foo() const;
|
inline vector float foo() const;
|
|
|
Star()
|
Star()
|
{
|
{
|
data.f[0] = 1.0; data.f[1] = 2.0; data.f[2] = 3.0, data.f[3] = 4.0;
|
data.f[0] = 1.0; data.f[1] = 2.0; data.f[2] = 3.0, data.f[3] = 4.0;
|
}
|
}
|
|
|
private:
|
private:
|
union {
|
union {
|
float f[4];
|
float f[4];
|
vector float v;
|
vector float v;
|
} data;
|
} data;
|
|
|
friend vector float fTest(const Star &);
|
friend vector float fTest(const Star &);
|
};
|
};
|
|
|
vector float Star::foo() const
|
vector float Star::foo() const
|
{
|
{
|
return data.v;
|
return data.v;
|
}
|
}
|
|
|
vector float fTest(const Star & val)
|
vector float fTest(const Star & val)
|
{
|
{
|
vector float vf = val.foo();
|
vector float vf = val.foo();
|
return vf;
|
return vf;
|
}
|
}
|
|
|
int main() {
|
int main() {
|
|
|
Star s;
|
Star s;
|
|
|
union u {
|
union u {
|
float f[4];
|
float f[4];
|
vector float v;
|
vector float v;
|
} data;
|
} data;
|
|
|
data.v = fTest(s);
|
data.v = fTest(s);
|
for (int i=0 ; i < 4; i++)
|
for (int i=0 ; i < 4; i++)
|
if (data.f[i] != (float)(i+1))
|
if (data.f[i] != (float)(i+1))
|
abort();
|
abort();
|
return 0;
|
return 0;
|
}
|
}
|
|
|
/* Ignore a warning that is irrelevant to the purpose of this test. */
|
/* Ignore a warning that is irrelevant to the purpose of this test. */
|
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
|
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.