OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [testsuite/] [g++.dg/] [ext/] [altivec-3.C] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* { dg-do run { target powerpc*-*-* } } */
2
/* { dg-xfail-if "" { "powerpc-*-eabispe*" "powerpc-ibm-aix*" } { "*" } { "" } } */
3
/* { dg-options "-maltivec" } */
4
 
5
/* Test for correct handling of AltiVec constants passed
6
   through '...' (va_arg).  */
7
 
8
#include 
9
#include 
10
#include 
11
 
12
#include 
13
#include "altivec_check.h"
14
 
15
#define CHECK_INVARIANT(expr) \
16
  if (!(expr)) { \
17
    printf ("ASSERT FAILED: %d: %s\n", __LINE__, #expr); \
18
    abort (); \
19
  }
20
 
21
struct foo { int x; int y; };
22
struct vfoo { int x; __vector signed int v; int y; };
23
union u { __vector signed int v; signed int i[4]; };
24
 
25
struct foo x_g = { 3, 4};
26
struct vfoo vx_g = { 10, (vector signed int) {11, 12, 13, 14}, 15 };
27
__vector signed int v_g = (vector signed int) {22, 23, 24, 25};
28
struct vfoo vx2_g = { 30, (vector signed int) {31, 32, 33, 34}, 35 };
29
__vector signed int v2_g = (vector signed int) {40, 41, 42, 43};
30
int i_1 = 99, i_2 = 33;
31
double d_2 = 1.5, d_3 = 1.75;
32
double ld_1 = 1.25;
33
 
34
void bar (int i, ... )
35
{
36
    struct foo xi;
37
    double d;
38
    double ld;
39
    float f;
40
    char c;
41
    short s;
42
    va_list ap;
43
    va_start(ap, i);
44
    xi = va_arg(ap, struct foo);
45
    s = (short)va_arg(ap, int);
46
    f = (float)va_arg(ap, double);
47
    ld = va_arg(ap, double);
48
    c = (char)va_arg(ap, int);
49
    d = va_arg(ap, double);
50
    va_end(ap);
51
 
52
    CHECK_INVARIANT (xi.x == x_g.x && xi.y == x_g.y);
53
    CHECK_INVARIANT (s == (short)i_2);
54
    CHECK_INVARIANT (f == (float)d_2);
55
    CHECK_INVARIANT (ld == ld_1);
56
    CHECK_INVARIANT (c == (char)i_1);
57
    CHECK_INVARIANT (d == d_3);
58
}
59
 
60
void baz (int i, ... )
61
{
62
    struct vfoo vx, vx2;
63
    __vector signed int v_i, v2_i;
64
    int j, k, l;
65
    va_list ap;
66
    va_start(ap, i);
67
    v_i = va_arg(ap, __vector signed int);
68
    j = va_arg(ap, int);
69
    vx = va_arg(ap, struct vfoo);
70
    k = va_arg(ap, int);
71
    v2_i = va_arg(ap, __vector signed int);
72
    l = va_arg(ap, int);
73
    vx2 = va_arg(ap, struct vfoo);
74
    va_end(ap);
75
 
76
    CHECK_INVARIANT (vec_all_eq (v_i, v_g));
77
    CHECK_INVARIANT (j == i_1);
78
    CHECK_INVARIANT (vx.x == vx_g.x);
79
    CHECK_INVARIANT (vec_all_eq (vx.v, vx_g.v));
80
    CHECK_INVARIANT (vx.y == vx_g.y);
81
    CHECK_INVARIANT (k == i_1);
82
    CHECK_INVARIANT (vec_all_eq (v2_i, v2_g));
83
    CHECK_INVARIANT (l == i_1);
84
    CHECK_INVARIANT (vx2.x == vx2_g.x);
85
    CHECK_INVARIANT (vec_all_eq (vx2.v, vx2_g.v));
86
    CHECK_INVARIANT (vx2.y == vx2_g.y);
87
}
88
 
89
void quux (int i, ... )
90
{
91
    __vector signed int v_i, v2_i;
92
    union u vi, v2i;
93
    va_list ap;
94
    va_start(ap, i);
95
    v_i = va_arg(ap, __vector signed int);
96
    v2_i = va_arg(ap, __vector signed int);
97
    va_end(ap);
98
    vi.v = v_i;
99
    v2i.v = v2_i;
100
 
101
    CHECK_INVARIANT (vec_all_eq (v_i, v_g));
102
    CHECK_INVARIANT (vec_all_eq (v2_i, v_g));
103
    CHECK_INVARIANT (vec_all_eq (vi.v, v_g));
104
    CHECK_INVARIANT (vec_all_eq (v2i.v, v_g));
105
}
106
 
107
void baz2 (int i, ... )
108
{
109
    struct vfoo vx;
110
    union u vxi;
111
    va_list ap;
112
    va_start(ap, i);
113
    vx = va_arg(ap, struct vfoo);
114
    va_end(ap);
115
    vxi.v = vx.v;
116
 
117
    CHECK_INVARIANT (vx.x == vx_g.x);
118
    CHECK_INVARIANT (vec_all_eq (vx.v, vx_g.v));
119
    CHECK_INVARIANT (vx.y == vx_g.y);
120
    CHECK_INVARIANT (vec_all_eq (vxi.v, vx_g.v));
121
}
122
 
123
int main(void)
124
{
125
    CHECK_INVARIANT (sizeof(struct foo) == 8 && sizeof(struct vfoo) == 48);
126
 
127
    altivec_check();
128
 
129
    bar(i_1, x_g, (short)i_2, (float)d_2, ld_1, (char)i_1, d_3);
130
    baz(i_1, v_g, i_1, vx_g, i_1, v2_g, i_1, vx2_g);
131
    quux(i_1, v_g, v_g);
132
    baz2(i_1, vx_g);
133
 
134
    return 0;
135
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.