diff options
Diffstat (limited to 'test/CodeGen/builtins-ppc-crypto.c')
-rw-r--r-- | test/CodeGen/builtins-ppc-crypto.c | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/test/CodeGen/builtins-ppc-crypto.c b/test/CodeGen/builtins-ppc-crypto.c new file mode 100644 index 000000000000..0ade413cb6ae --- /dev/null +++ b/test/CodeGen/builtins-ppc-crypto.c @@ -0,0 +1,303 @@ +// REQUIRES: powerpc-registered-target +// RUN: %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown \ +// RUN: -target-feature +crypto -target-feature +power8-vector \ +// RUN: -emit-llvm %s -o - | FileCheck %s + +// RUN: %clang_cc1 -faltivec -triple powerpc64-unknown-unknown \ +// RUN: -target-feature +crypto -target-feature +power8-vector \ +// RUN: -emit-llvm %s -o - | FileCheck %s + +// RUN: %clang_cc1 -faltivec -triple powerpc-unknown-unknown \ +// RUN: -target-feature +crypto -target-feature +power8-vector \ +// RUN: -emit-llvm %s -o - | FileCheck %s +#include <altivec.h> +#define B_INIT1 { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, \ + 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 }; +#define B_INIT2 { 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, \ + 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x70 }; +#define H_INIT1 { 0x0102, 0x0304, 0x0506, 0x0708, \ + 0x090A, 0x0B0C, 0x0D0E, 0x0F10 }; +#define H_INIT2 { 0x7172, 0x7374, 0x7576, 0x7778, \ + 0x797A, 0x7B7C, 0x7D7E, 0x7F70 }; +#define W_INIT1 { 0x01020304, 0x05060708, \ + 0x090A0B0C, 0x0D0E0F10 }; +#define W_INIT2 { 0x71727374, 0x75767778, \ + 0x797A7B7C, 0x7D7E7F70 }; +#define D_INIT1 { 0x0102030405060708, \ + 0x090A0B0C0D0E0F10 }; +#define D_INIT2 { 0x7172737475767778, \ + 0x797A7B7C7D7E7F70 }; + +// CHECK-LABEL: define <16 x i8> @test_vpmsumb +vector unsigned char test_vpmsumb(void) +{ + vector unsigned char a = B_INIT1 + vector unsigned char b = B_INIT2 + return __builtin_altivec_crypto_vpmsumb(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumb +} + +// CHECK-LABEL: define <8 x i16> @test_vpmsumh +vector unsigned short test_vpmsumh(void) +{ + vector unsigned short a = H_INIT1 + vector unsigned short b = H_INIT2 + return __builtin_altivec_crypto_vpmsumh(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumh +} + +// CHECK-LABEL: define <4 x i32> @test_vpmsumw +vector unsigned int test_vpmsumw(void) +{ + vector unsigned int a = W_INIT1 + vector unsigned int b = W_INIT2 + return __builtin_altivec_crypto_vpmsumw(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumw +} + +// CHECK-LABEL: define <2 x i64> @test_vpmsumd +vector unsigned long long test_vpmsumd(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_altivec_crypto_vpmsumd(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumd +} + +// CHECK-LABEL: define <2 x i64> @test_vsbox +vector unsigned long long test_vsbox(void) +{ + vector unsigned long long a = D_INIT1 + return __builtin_altivec_crypto_vsbox(a); +// CHECK: @llvm.ppc.altivec.crypto.vsbox +} + +// CHECK-LABEL: define <16 x i8> @test_vpermxorb +vector unsigned char test_vpermxorb(void) +{ + vector unsigned char a = B_INIT1 + vector unsigned char b = B_INIT2 + vector unsigned char c = B_INIT2 + return __builtin_altivec_crypto_vpermxor(a, b, c); +// CHECK: @llvm.ppc.altivec.crypto.vpermxor +} + +// CHECK-LABEL: define <8 x i16> @test_vpermxorh +vector unsigned short test_vpermxorh(void) +{ + vector unsigned short a = H_INIT1 + vector unsigned short b = H_INIT2 + vector unsigned short c = H_INIT2 + return __builtin_altivec_crypto_vpermxor(a, b, c); +// CHECK: @llvm.ppc.altivec.crypto.vpermxor +} + +// CHECK-LABEL: define <4 x i32> @test_vpermxorw +vector unsigned int test_vpermxorw(void) +{ + vector unsigned int a = W_INIT1 + vector unsigned int b = W_INIT2 + vector unsigned int c = W_INIT2 + return __builtin_altivec_crypto_vpermxor(a, b, c); +// CHECK: @llvm.ppc.altivec.crypto.vpermxor +} + +// CHECK-LABEL: define <2 x i64> @test_vpermxord +vector unsigned long long test_vpermxord(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + vector unsigned long long c = D_INIT2 + return __builtin_altivec_crypto_vpermxor(a, b, c); +// CHECK: @llvm.ppc.altivec.crypto.vpermxor +} + +// CHECK-LABEL: define <2 x i64> @test_vcipher +vector unsigned long long test_vcipher(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_altivec_crypto_vcipher(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vcipher +} + +// CHECK-LABEL: define <2 x i64> @test_vcipherlast +vector unsigned long long test_vcipherlast(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_altivec_crypto_vcipherlast(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vcipherlast +} + +// CHECK: @llvm.ppc.altivec.crypto.vncipher +vector unsigned long long test_vncipher(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_altivec_crypto_vncipher(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vncipher +} + +// CHECK-LABEL: define <2 x i64> @test_vncipherlast +vector unsigned long long test_vncipherlast(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_altivec_crypto_vncipherlast(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vncipherlast +} + +// CHECK-LABEL: define <4 x i32> @test_vshasigmaw +vector unsigned int test_vshasigmaw(void) +{ + vector unsigned int a = W_INIT1 + return __builtin_altivec_crypto_vshasigmaw(a, 1, 15); +// CHECK: @llvm.ppc.altivec.crypto.vshasigmaw +} + +// CHECK-LABEL: define <2 x i64> @test_vshasigmad +vector unsigned long long test_vshasigmad(void) +{ + vector unsigned long long a = D_INIT2 + return __builtin_altivec_crypto_vshasigmad(a, 1, 15); +// CHECK: @llvm.ppc.altivec.crypto.vshasigmad +} + +// Test cases for the builtins the way they are exposed to +// users through altivec.h +// CHECK-LABEL: define <16 x i8> @test_vpmsumb_e +vector unsigned char test_vpmsumb_e(void) +{ + vector unsigned char a = B_INIT1 + vector unsigned char b = B_INIT2 + return __builtin_crypto_vpmsumb(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumb +} + +// CHECK-LABEL: define <8 x i16> @test_vpmsumh_e +vector unsigned short test_vpmsumh_e(void) +{ + vector unsigned short a = H_INIT1 + vector unsigned short b = H_INIT2 + return __builtin_crypto_vpmsumb(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumh +} + +// CHECK-LABEL: define <4 x i32> @test_vpmsumw_e +vector unsigned int test_vpmsumw_e(void) +{ + vector unsigned int a = W_INIT1 + vector unsigned int b = W_INIT2 + return __builtin_crypto_vpmsumb(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumw +} + +// CHECK-LABEL: define <2 x i64> @test_vpmsumd_e +vector unsigned long long test_vpmsumd_e(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_crypto_vpmsumb(a, b); +// CHECK @llvm.ppc.altivec.crypto.vpmsumd +} + +// CHECK-LABEL: define <2 x i64> @test_vsbox_e +vector unsigned long long test_vsbox_e(void) +{ + vector unsigned long long a = D_INIT1 + return __builtin_crypto_vsbox(a); +// CHECK: @llvm.ppc.altivec.crypto.vsbox +} + +// CHECK-LABEL: define <16 x i8> @test_vpermxorb_e +vector unsigned char test_vpermxorb_e(void) +{ + vector unsigned char a = B_INIT1 + vector unsigned char b = B_INIT2 + vector unsigned char c = B_INIT2 + return __builtin_crypto_vpermxor(a, b, c); +// CHECK: @llvm.ppc.altivec.crypto.vpermxor +} + +// CHECK-LABEL: define <8 x i16> @test_vpermxorh_e +vector unsigned short test_vpermxorh_e(void) +{ + vector unsigned short a = H_INIT1 + vector unsigned short b = H_INIT2 + vector unsigned short c = H_INIT2 + return __builtin_crypto_vpermxor(a, b, c); +} + +// CHECK-LABEL: define <4 x i32> @test_vpermxorw_e +vector unsigned int test_vpermxorw_e(void) +{ + vector unsigned int a = W_INIT1 + vector unsigned int b = W_INIT2 + vector unsigned int c = W_INIT2 + return __builtin_crypto_vpermxor(a, b, c); +// CHECK: @llvm.ppc.altivec.crypto.vpermxor +} + +// CHECK-LABEL: define <2 x i64> @test_vpermxord_e +vector unsigned long long test_vpermxord_e(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + vector unsigned long long c = D_INIT2 + return __builtin_crypto_vpermxor(a, b, c); +// CHECK: @llvm.ppc.altivec.crypto.vpermxor +} + +// CHECK-LABEL: define <2 x i64> @test_vcipher_e +vector unsigned long long test_vcipher_e(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_crypto_vcipher(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vcipher +} + +// CHECK-LABEL: define <2 x i64> @test_vcipherlast_e +vector unsigned long long test_vcipherlast_e(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_crypto_vcipherlast(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vcipherlast +} + +// CHECK-LABEL: define <2 x i64> @test_vncipher_e +vector unsigned long long test_vncipher_e(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_crypto_vncipher(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vncipher +} + +// CHECK-LABEL: define <2 x i64> @test_vncipherlast_e +vector unsigned long long test_vncipherlast_e(void) +{ + vector unsigned long long a = D_INIT1 + vector unsigned long long b = D_INIT2 + return __builtin_crypto_vncipherlast(a, b); +// CHECK: @llvm.ppc.altivec.crypto.vncipherlast +} + +// CHECK-LABEL: define <4 x i32> @test_vshasigmaw_e +vector unsigned int test_vshasigmaw_e(void) +{ + vector unsigned int a = W_INIT1 + return __builtin_crypto_vshasigmaw(a, 1, 15); +// CHECK: @llvm.ppc.altivec.crypto.vshasigmaw +} + +// CHECK-LABEL: define <2 x i64> @test_vshasigmad_e +vector unsigned long long test_vshasigmad_e(void) +{ + vector unsigned long long a = D_INIT2 + return __builtin_crypto_vshasigmad(a, 0, 15); +// CHECK: @llvm.ppc.altivec.crypto.vshasigmad +} + |