IVOPT performance tuning patch. The main problem is a variant of maximal weight
[official-gcc.git] / gcc / testsuite / gcc.dg / vmx / gcc-bug-f.c
blobfb61bb15a76eec789d627df939d8102684e26a37
1 /* { dg-do compile } */
2 #include <altivec.h>
3 typedef short Word16;
4 typedef int Word32;
5 typedef int Flag;
7 extern Flag Overflow;
8 extern Flag Carry;
10 extern vector signed short table[8];
11 extern vector signed short slope_cos[8];
13 void Lsf_lsp(
14 vector signed short lsfq[],
15 vector signed short lspq[]
18 vector signed short Q17_con = ((vector signed short){20861,20861,20861,20861,20861,20861,20861,20861});
19 vector unsigned char perm1 = ((vector unsigned char){0, 8, 1, 9, 2, 10, 3,
20 11, 4, 12, 5 ,13, 6, 14, 7, 15});
21 vector unsigned char PerIndex, tmpIndex;
22 vector signed short tmp0, tmp1, tmp2, tmp3;
23 vector signed short stmp0, stmp1, stmp2, stmp3;
24 vector signed short index0, index1, offset0, offset1;
25 vector signed short table0, table1, slope0, slope1;
26 vector unsigned short select;
27 vector signed int L_tmp0, L_tmp1, L_tmp2, L_tmp3;
30 tmp0 = vec_madds(lsfq[0], Q17_con, (((vector signed short){0,0,0,0,0,0,0,0})) );
31 tmp1 = vec_madds(lsfq[1], Q17_con, (((vector signed short){0,0,0,0,0,0,0,0})) );
34 offset0 = vec_and(tmp0, (((vector signed short){0x00ff,0x00ff,0x00ff,0x00ff,0x00ff,0x00ff,0x00ff,0x00ff})) );
35 offset1 = vec_and(tmp1, (((vector signed short){0x00ff,0x00ff,0x00ff,0x00ff,0x00ff,0x00ff,0x00ff,0x00ff})) );
38 index0 = vec_min(vec_sra(tmp0, (((vector unsigned short){8,8,8,8,8,8,8,8})) ), (((vector signed short){63,63,63,63,63,63,63,63})) );
39 index1 = vec_min(vec_sra(tmp1, (((vector unsigned short){8,8,8,8,8,8,8,8})) ), (((vector signed short){63,63,63,63,63,63,63,63})) );
43 tmp0 = vec_sl(index0, (vector unsigned short)((((vector signed short){1,1,1,1,1,1,1,1})) ));
44 PerIndex = (vector unsigned char)vec_packs(tmp0, vec_add(tmp0, (((vector signed short){1,1,1,1,1,1,1,1})) ));
45 PerIndex = vec_perm(PerIndex, PerIndex, perm1);
48 tmp0 = vec_perm(table[0], table[1], PerIndex);
49 stmp0 = vec_perm(slope_cos[0], slope_cos[1], PerIndex);
51 tmpIndex = vec_sub(PerIndex, (((vector unsigned char){32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32})) );
52 tmp1 = vec_perm(table[2], table[3], tmpIndex);
53 stmp1 = vec_perm(slope_cos[2], slope_cos[3], tmpIndex);
55 select = (vector unsigned short)vec_cmpgt(PerIndex, (((vector unsigned char){31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31})) );
56 tmp2 = vec_sel(tmp0, tmp1, select);
57 stmp2 = vec_sel(stmp0, stmp1, select);
59 tmpIndex = vec_sub(tmpIndex, (((vector unsigned char){32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32})) );
60 tmp0 = vec_perm(table[4], table[5], tmpIndex);
61 stmp0 = vec_perm(slope_cos[4], slope_cos[5], tmpIndex);
63 tmpIndex = vec_sub(tmpIndex, (((vector unsigned char){32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32})) );
64 tmp1 = vec_perm(table[6], table[7], tmpIndex);
65 stmp1 = vec_perm(slope_cos[6], slope_cos[7], tmpIndex);
67 select = (vector unsigned short)vec_cmpgt(PerIndex, (((vector unsigned char){95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95})) );
68 tmp3 = vec_sel(tmp0, tmp1, select);
69 stmp3 = vec_sel(stmp0, stmp1, select);
71 select = (vector unsigned short)vec_cmpgt(PerIndex, (((vector unsigned char){63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63})) );
72 table0 = vec_sel(tmp2, tmp3, select);
73 slope0 = vec_sel(stmp2, stmp3, select);
75 tmp0 = vec_sl(index1, (vector unsigned short)((((vector signed short){1,1,1,1,1,1,1,1})) ));
76 PerIndex = (vector unsigned char)vec_packs(tmp0, vec_add(tmp0, (((vector signed short){1,1,1,1,1,1,1,1})) ));
77 PerIndex = vec_perm(PerIndex, PerIndex, perm1);
80 tmp0 = vec_perm(table[0], table[1], PerIndex);
81 stmp0 = vec_perm(slope_cos[0], slope_cos[1], PerIndex);
83 tmpIndex = vec_sub(PerIndex, (((vector unsigned char){32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32})) );
84 tmp1 = vec_perm(table[2], table[3], tmpIndex);
85 stmp1 = vec_perm(slope_cos[2], slope_cos[3], tmpIndex);
87 select = (vector unsigned short)vec_cmpgt(PerIndex, (((vector unsigned char){31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31})) );
88 tmp2 = vec_sel(tmp0, tmp1, select);
89 stmp2 = vec_sel(stmp0, stmp1, select);
91 tmpIndex = vec_sub(tmpIndex, (((vector unsigned char){32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32})) );
92 tmp0 = vec_perm(table[4], table[5], tmpIndex);
93 stmp0 = vec_perm(slope_cos[4], slope_cos[5], tmpIndex);
95 tmpIndex = vec_sub(tmpIndex, (((vector unsigned char){32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32})) );
96 tmp1 = vec_perm(table[6], table[7], tmpIndex);
97 stmp1 = vec_perm(slope_cos[6], slope_cos[7], tmpIndex);
99 select = (vector unsigned short)vec_cmpgt(PerIndex, (((vector unsigned char){95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95})) );
100 tmp3 = vec_sel(tmp0, tmp1, select);
101 stmp3 = vec_sel(stmp0, stmp1, select);
103 select = (vector unsigned short)vec_cmpgt(PerIndex, (((vector unsigned char){63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63})) );
104 table1 = vec_sel(tmp2, tmp3, select);
105 slope1 = vec_sel(stmp2, stmp3, select);
109 L_tmp0 = vec_sra(vec_mule(slope0, offset0), (((vector unsigned int){12,12,12,12})) );
110 L_tmp1 = vec_sra(vec_mulo(slope0, offset0), (((vector unsigned int){12,12,12,12})) );
111 L_tmp2 = vec_sra(vec_mule(slope1, offset1), (((vector unsigned int){12,12,12,12})) );
112 L_tmp3 = vec_sra(vec_mulo(slope1, offset1), (((vector unsigned int){12,12,12,12})) );
115 tmp0 = vec_packs(L_tmp0, L_tmp2);
116 tmp1 = vec_packs(L_tmp1, L_tmp3);
117 tmp2 = vec_mergeh(tmp0, tmp1);
118 tmp3 = vec_mergel(tmp0, tmp1);
121 lspq[0] = vec_adds(table0, tmp2);
122 lspq[1] = vec_adds(table1, tmp3);
124 return;