1 | // REQUIRES: powerpc-registered-target |
2 | // RUN: %clang_cc1 -target-feature +altivec -target-feature +htm \ |
3 | // RUN: -triple powerpc64-unknown-unknown -DTEST_HTM -fsyntax-only \ |
4 | // RUN: -verify %s |
5 | |
6 | // RUN: %clang_cc1 -target-feature +altivec -target-feature +crypto \ |
7 | // RUN: -triple powerpc64le-unknown-unknown -DTEST_CRYPTO -fsyntax-only \ |
8 | // RUN: -verify %s |
9 | |
10 | #ifdef TEST_HTM |
11 | void test_htm() { |
12 | __builtin_tbegin(4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
13 | __builtin_tend(-1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
14 | __builtin_tsr(55); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
15 | __builtin_tabortwc(-5, 2, 3); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
16 | __builtin_tabortdc(55, 2, 3); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
17 | __builtin_tabortwci(-5, 2, 5); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
18 | __builtin_tabortwci(5, 2, 55); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
19 | __builtin_tabortdci(-5, 2, 5); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
20 | __builtin_tabortdci(5, 2, 55); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
21 | } |
22 | #endif |
23 | |
24 | |
25 | #ifdef TEST_CRYPTO |
26 | #include <altivec.h> |
27 | |
28 | #define W_INIT { 0x01020304, 0x05060708, 0x090A0B0C, 0x0D0E0F10 }; |
29 | #define D_INIT { 0x0102030405060708, 0x090A0B0C0D0E0F10 }; |
30 | vector unsigned int test_vshasigmaw_or(void) |
31 | { |
32 | vector unsigned int a = W_INIT |
33 | vector unsigned int b = __builtin_crypto_vshasigmaw(a, 2, 15); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
34 | vector unsigned int c = __builtin_crypto_vshasigmaw(a, -1, 15); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
35 | vector unsigned int d = __builtin_crypto_vshasigmaw(a, 0, 85); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
36 | vector unsigned int e = __builtin_crypto_vshasigmaw(a, 1, -15); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
37 | return __builtin_crypto_vshasigmaw(a, 1, 15); |
38 | } |
39 | |
40 | vector unsigned long long test_vshasigmad_or(void) |
41 | { |
42 | vector unsigned long long a = D_INIT |
43 | vector unsigned long long b = __builtin_crypto_vshasigmad(a, 2, 15); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
44 | vector unsigned long long c = __builtin_crypto_vshasigmad(a, -1, 15); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
45 | vector unsigned long long d = __builtin_crypto_vshasigmad(a, 0, 85); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
46 | vector unsigned long long e = __builtin_crypto_vshasigmad(a, 1, -15); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
47 | return __builtin_crypto_vshasigmad(a, 0, 15); |
48 | } |
49 | |
50 | #endif |
51 | |
52 | |