1 /* This test code is included into vsx-vector-6-be.c and vsx-vector-6-le.c.
2 The two files have the tests for the number of instructions generated for
7 void foo (vector
double *out
, vector
double *in
, vector
long *p_l
, vector
bool long *p_b
,
8 vector
unsigned char *p_uc
, int *i
, vector
float *p_f
,
9 vector
bool char *outbc
, vector
bool int *outbi
,
10 vector
bool short *outbsi
, vector
int *outsi
, vector
unsigned int *outui
)
12 vector
double in0
= in
[0];
13 vector
double in1
= in
[1];
14 vector
double in2
= in
[2];
15 vector
long inl
= *p_l
;
16 vector
bool long inb
= *p_b
;
17 vector
bool long long inbl0
;
18 vector
bool long long inbl1
;
19 vector
unsigned char uc
= *p_uc
;
23 vector
bool char inbc0
;
24 vector
bool char inbc1
;
25 vector
bool short inbs0
;
26 vector
bool short inbs1
;
27 vector
bool int inbi0
;
28 vector
bool int inbi1
;
29 vector
signed short int inssi0
, inssi1
;
30 vector
unsigned short int inusi0
, inusi1
;
31 vector
signed int insi0
, insi1
;
32 vector
unsigned int inui0
, inui1
;
34 *out
++ = vec_abs (in0
);
35 *out
++ = vec_add (in0
, in1
);
36 *out
++ = vec_and (in0
, in1
);
37 *out
++ = vec_and (in0
, inb
);
38 *out
++ = vec_and (inb
, in0
);
39 *out
++ = vec_andc (in0
, in1
);
40 *out
++ = vec_andc (in0
, inb
);
41 *out
++ = vec_andc (inb
, in0
);
42 *out
++ = vec_andc (inbl0
, in0
);
43 *out
++ = vec_andc (in0
, inbl0
);
45 *out
++ = vec_ceil (in0
);
46 *p_b
++ = vec_cmpeq (in0
, in1
);
47 *p_b
++ = vec_cmpgt (in0
, in1
);
48 *p_b
++ = vec_cmpge (in0
, in1
);
49 *p_b
++ = vec_cmplt (in0
, in1
);
50 *p_b
++ = vec_cmple (in0
, in1
);
51 *out
++ = vec_div (in0
, in1
);
52 *out
++ = vec_floor (in0
);
53 *out
++ = vec_madd (in0
, in1
, in2
);
54 *out
++ = vec_msub (in0
, in1
, in2
);
55 *out
++ = vec_max (in0
, in1
);
56 *out
++ = vec_min (in0
, in1
);
57 *out
++ = vec_msub (in0
, in1
, in2
);
58 *out
++ = vec_mul (in0
, in1
);
59 *out
++ = vec_nearbyint (in0
);
60 *out
++ = vec_nmadd (in0
, in1
, in2
);
61 *out
++ = vec_nmsub (in0
, in1
, in2
);
62 *out
++ = vec_nor (in0
, in1
);
63 *out
++ = vec_or (in0
, in1
);
64 *out
++ = vec_or (in0
, inb
);
65 *out
++ = vec_or (inb
, in0
);
66 *out
++ = vec_perm (in0
, in1
, uc
);
67 *out
++ = vec_rint (in0
);
68 *out
++ = vec_sel (in0
, in1
, inl
);
69 *out
++ = vec_sel (in0
, in1
, inb
);
70 *out
++ = vec_sub (in0
, in1
);
71 *out
++ = vec_sqrt (in0
);
72 *out
++ = vec_trunc (in0
);
73 *out
++ = vec_xor (in0
, in1
);
74 *out
++ = vec_xor (in0
, inb
);
75 *out
++ = vec_xor (inb
, in0
);
77 *i
++ = vec_all_eq (in0
, in1
);
78 *i
++ = vec_all_ge (in0
, in1
);
79 *i
++ = vec_all_gt (in0
, in1
);
80 *i
++ = vec_all_le (in0
, in1
);
81 *i
++ = vec_all_lt (in0
, in1
);
82 *i
++ = vec_all_nan (in0
);
83 *i
++ = vec_all_ne (in0
, in1
);
84 *i
++ = vec_all_nge (in0
, in1
);
85 *i
++ = vec_all_ngt (in0
, in1
);
86 *i
++ = vec_all_nle (in0
, in1
);
87 *i
++ = vec_all_nlt (in0
, in1
);
88 *i
++ = vec_all_numeric (in0
);
89 *i
++ = vec_any_eq (in0
, in1
);
90 *i
++ = vec_any_ge (in0
, in1
);
91 *i
++ = vec_any_gt (in0
, in1
);
92 *i
++ = vec_any_le (in0
, in1
);
93 *i
++ = vec_any_lt (in0
, in1
);
94 *i
++ = vec_any_nan (in0
);
95 *i
++ = vec_any_ne (in0
, in1
);
96 *i
++ = vec_any_nge (in0
, in1
);
97 *i
++ = vec_any_ngt (in0
, in1
);
98 *i
++ = vec_any_nle (in0
, in1
);
99 *i
++ = vec_any_nlt (in0
, in1
);
100 *i
++ = vec_any_numeric (in0
);
102 *p_f
++ = vec_msub (inf0
, inf1
, inf2
);
103 *p_f
++ = vec_nmsub (inf0
, inf1
, inf2
);
104 *p_f
++ = vec_nmadd (inf0
, inf1
, inf2
);
105 *p_f
++ = vec_or (inf0
, inf1
);
107 *out
++ = vec_or (inbl0
, in0
);
108 *out
++ = vec_or (in0
, inbl0
);
110 *out
++ = vec_nor (in0
, in1
);
112 *outbc
++ = vec_nor (inbc0
, inbc1
);
113 *outbc
++ = vec_andc (inbc0
, inbc1
);
114 *outbc
++ = vec_or (inbc0
, inbc1
);
116 *outbi
++ = vec_andc (inbi0
, inbi1
);
117 *outbsi
++ = vec_andc (inbs0
, inbs1
);
119 *outbsi
++ = vec_andc (inbs0
, inbs1
);
121 *outbi
++ = vec_nor (inbi0
, inbi1
);
122 *outbi
++ = vec_or (inbi0
, inbi1
);
124 *outbsi
++ = vec_nor (inbs0
, inbs1
);
125 *outbsi
++ = vec_or (inbs0
, inbs1
);
127 *outsi
++ = vec_msums(inssi0
, inssi1
, insi0
);
128 *outui
++ = vec_msums(inusi0
, inusi1
, inui0
);
130 *p_f
++ = vec_nor (inf0
, inf1
);
132 *p_f
++ = vec_andc (inf0
, inf1
);
133 *p_f
++ = vec_andc (inbi0
, inf0
);
134 *p_f
++ = vec_andc (inf0
, inbi0
);
136 *in
++ = vec_andc (inbl0
, in1
);
137 *in
++ = vec_andc (in0
, inbl1
);
145 vector
bool long *p_b
;
146 vector
unsigned char *p_uc
;
149 vector
bool char *outbc
;
150 vector
bool int *outbi
;
151 vector
bool short *outbsi
;
153 vector
unsigned int *outui
;
155 foo (out
, in
, p_l
, p_b
, p_uc
, i
, p_f
, outbc
,
156 outbi
, outbsi
, outsi
, outui
);