457422c200337c291e88937fd5a2b2a9a80a95f3
1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
5 /* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */
16 #define TYPE long long
20 #define SIGN_TYPE signed TYPE
24 #define UNS_TYPE unsigned TYPE
27 #define ALIGN_ATTR __attribute__((__aligned__(ALIGN)))
29 SIGN_TYPE sa
[SIZE
] ALIGN_ATTR
;
30 SIGN_TYPE sb
[SIZE
] ALIGN_ATTR
;
31 SIGN_TYPE sc
[SIZE
] ALIGN_ATTR
;
33 UNS_TYPE ua
[SIZE
] ALIGN_ATTR
;
34 UNS_TYPE ub
[SIZE
] ALIGN_ATTR
;
35 UNS_TYPE uc
[SIZE
] ALIGN_ATTR
;
42 for (i
= 0; i
< SIZE
; i
++)
43 sa
[i
] = sb
[i
] + sc
[i
];
51 for (i
= 0; i
< SIZE
; i
++)
52 sa
[i
] = sb
[i
] - sc
[i
];
56 sign_shift_left (void)
60 for (i
= 0; i
< SIZE
; i
++)
61 sa
[i
] = sb
[i
] << sc
[i
];
65 sign_shift_right (void)
69 for (i
= 0; i
< SIZE
; i
++)
70 sa
[i
] = sb
[i
] >> sc
[i
];
78 for (i
= 0; i
< SIZE
; i
++)
79 sa
[i
] = (sb
[i
] > sc
[i
]) ? sb
[i
] : sc
[i
];
87 for (i
= 0; i
< SIZE
; i
++)
88 sa
[i
] = (sb
[i
] < sc
[i
]) ? sb
[i
] : sc
[i
];
96 for (i
= 0; i
< SIZE
; i
++)
97 sa
[i
] = (sb
[i
] < 0) ? -sb
[i
] : sb
[i
]; /* xor, vsubudm, vmaxsd. */
101 sign_eq (SIGN_TYPE val1
, SIGN_TYPE val2
)
105 for (i
= 0; i
< SIZE
; i
++)
106 sa
[i
] = (sb
[i
] == sc
[i
]) ? val1
: val2
;
110 sign_lt (SIGN_TYPE val1
, SIGN_TYPE val2
)
114 for (i
= 0; i
< SIZE
; i
++)
115 sa
[i
] = (sb
[i
] < sc
[i
]) ? val1
: val2
;
123 for (i
= 0; i
< SIZE
; i
++)
124 ua
[i
] = ub
[i
] + uc
[i
];
132 for (i
= 0; i
< SIZE
; i
++)
133 ua
[i
] = ub
[i
] - uc
[i
];
137 uns_shift_left (void)
141 for (i
= 0; i
< SIZE
; i
++)
142 ua
[i
] = ub
[i
] << uc
[i
];
146 uns_shift_right (void)
150 for (i
= 0; i
< SIZE
; i
++)
151 ua
[i
] = ub
[i
] >> uc
[i
];
159 for (i
= 0; i
< SIZE
; i
++)
160 ua
[i
] = (ub
[i
] > uc
[i
]) ? ub
[i
] : uc
[i
];
168 for (i
= 0; i
< SIZE
; i
++)
169 ua
[i
] = (ub
[i
] < uc
[i
]) ? ub
[i
] : uc
[i
];
173 uns_eq (UNS_TYPE val1
, UNS_TYPE val2
)
177 for (i
= 0; i
< SIZE
; i
++)
178 ua
[i
] = (ub
[i
] == uc
[i
]) ? val1
: val2
;
182 uns_lt (UNS_TYPE val1
, UNS_TYPE val2
)
186 for (i
= 0; i
< SIZE
; i
++)
187 ua
[i
] = (ub
[i
] < uc
[i
]) ? val1
: val2
;
190 /* { dg-final { scan-assembler-times "\[\t \]vaddudm\[\t \]" 2 } } */
191 /* { dg-final { scan-assembler-times "\[\t \]vsubudm\[\t \]" 3 } } */
192 /* { dg-final { scan-assembler-times "\[\t \]vmaxsd\[\t \]" 2 } } */
193 /* { dg-final { scan-assembler-times "\[\t \]vmaxud\[\t \]" 1 } } */
194 /* { dg-final { scan-assembler-times "\[\t \]vminsd\[\t \]" 1 } } */
195 /* { dg-final { scan-assembler-times "\[\t \]vminud\[\t \]" 1 } } */
196 /* { dg-final { scan-assembler-times "\[\t \]vsld\[\t \]" 2 } } */
197 /* { dg-final { scan-assembler-times "\[\t \]vsrad\[\t \]" 1 } } */
198 /* { dg-final { scan-assembler-times "\[\t \]vsrd\[\t \]" 1 } } */
199 /* { dg-final { scan-assembler-times "\[\t \]vcmpequd\[\t \]" 2 } } */
200 /* { dg-final { scan-assembler-times "\[\t \]vcmpgtsd\[\t \]" 1 } } */
201 /* { dg-final { scan-assembler-times "\[\t \]vcmpgtud\[\t \]" 1 } } */