1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_vsx_ok } */
4 /* { dg-options "-mdejagnu-cpu=power8 -mvsx -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */
15 #define TYPE long long
19 #define SIGN_TYPE signed TYPE
23 #define UNS_TYPE unsigned TYPE
26 #define ALIGN_ATTR __attribute__((__aligned__(ALIGN)))
28 SIGN_TYPE sa
[SIZE
] ALIGN_ATTR
;
29 SIGN_TYPE sb
[SIZE
] ALIGN_ATTR
;
30 SIGN_TYPE sc
[SIZE
] ALIGN_ATTR
;
32 UNS_TYPE ua
[SIZE
] ALIGN_ATTR
;
33 UNS_TYPE ub
[SIZE
] ALIGN_ATTR
;
34 UNS_TYPE uc
[SIZE
] ALIGN_ATTR
;
41 for (i
= 0; i
< SIZE
; i
++)
42 sa
[i
] = sb
[i
] + sc
[i
];
50 for (i
= 0; i
< SIZE
; i
++)
51 sa
[i
] = sb
[i
] - sc
[i
];
55 sign_shift_left (void)
59 for (i
= 0; i
< SIZE
; i
++)
60 sa
[i
] = sb
[i
] << sc
[i
];
64 sign_shift_right (void)
68 for (i
= 0; i
< SIZE
; i
++)
69 sa
[i
] = sb
[i
] >> sc
[i
];
77 for (i
= 0; i
< SIZE
; i
++)
78 sa
[i
] = (sb
[i
] > sc
[i
]) ? sb
[i
] : sc
[i
];
86 for (i
= 0; i
< SIZE
; i
++)
87 sa
[i
] = (sb
[i
] < sc
[i
]) ? sb
[i
] : sc
[i
];
95 for (i
= 0; i
< SIZE
; i
++)
96 sa
[i
] = (sb
[i
] < 0) ? -sb
[i
] : sb
[i
]; /* xor, vsubudm, vmaxsd. */
100 sign_eq (SIGN_TYPE val1
, SIGN_TYPE val2
)
104 for (i
= 0; i
< SIZE
; i
++)
105 sa
[i
] = (sb
[i
] == sc
[i
]) ? val1
: val2
;
109 sign_lt (SIGN_TYPE val1
, SIGN_TYPE val2
)
113 for (i
= 0; i
< SIZE
; i
++)
114 sa
[i
] = (sb
[i
] < sc
[i
]) ? val1
: val2
;
122 for (i
= 0; i
< SIZE
; i
++)
123 ua
[i
] = ub
[i
] + uc
[i
];
131 for (i
= 0; i
< SIZE
; i
++)
132 ua
[i
] = ub
[i
] - uc
[i
];
136 uns_shift_left (void)
140 for (i
= 0; i
< SIZE
; i
++)
141 ua
[i
] = ub
[i
] << uc
[i
];
145 uns_shift_right (void)
149 for (i
= 0; i
< SIZE
; i
++)
150 ua
[i
] = ub
[i
] >> uc
[i
];
158 for (i
= 0; i
< SIZE
; i
++)
159 ua
[i
] = (ub
[i
] > uc
[i
]) ? ub
[i
] : uc
[i
];
167 for (i
= 0; i
< SIZE
; i
++)
168 ua
[i
] = (ub
[i
] < uc
[i
]) ? ub
[i
] : uc
[i
];
172 uns_eq (UNS_TYPE val1
, UNS_TYPE val2
)
176 for (i
= 0; i
< SIZE
; i
++)
177 ua
[i
] = (ub
[i
] == uc
[i
]) ? val1
: val2
;
181 uns_lt (UNS_TYPE val1
, UNS_TYPE val2
)
185 for (i
= 0; i
< SIZE
; i
++)
186 ua
[i
] = (ub
[i
] < uc
[i
]) ? val1
: val2
;
189 /* { dg-final { scan-assembler-times "\[\t \]vaddudm\[\t \]" 2 } } */
190 /* { dg-final { scan-assembler-times "\[\t \]vsubudm\[\t \]" 3 } } */
191 /* { dg-final { scan-assembler-times "\[\t \]vmaxsd\[\t \]" 2 } } */
192 /* { dg-final { scan-assembler-times "\[\t \]vmaxud\[\t \]" 1 } } */
193 /* { dg-final { scan-assembler-times "\[\t \]vminsd\[\t \]" 1 } } */
194 /* { dg-final { scan-assembler-times "\[\t \]vminud\[\t \]" 1 } } */
195 /* { dg-final { scan-assembler-times "\[\t \]vsld\[\t \]" 2 } } */
196 /* { dg-final { scan-assembler-times "\[\t \]vsrad\[\t \]" 1 } } */
197 /* { dg-final { scan-assembler-times "\[\t \]vsrd\[\t \]" 1 } } */
198 /* { dg-final { scan-assembler-times "\[\t \]vcmpequd\[\t \]" 2 } } */
199 /* { dg-final { scan-assembler-times "\[\t \]vcmpgtsd\[\t \]" 1 } } */
200 /* { dg-final { scan-assembler-times "\[\t \]vcmpgtud\[\t \]" 1 } } */