This adds SM3 and SM4 Intrinsics support for AArch64, specifically:
vsm3ss1q_u32
vsm3tt1aq_u32
vsm3tt1bq_u32
vsm3tt2aq_u32
vsm3tt2bq_u32
vsm3partw1q_u32
vsm3partw2q_u32
vsm4eq_u32
vsm4ekeyq_u32
Reviewed By: labrinea
Differential Revision: https://reviews.llvm.org/D95655
33 lines
1.5 KiB
C
33 lines
1.5 KiB
C
// RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon -target-feature +crypto -verify %s
|
|
|
|
#include <arm_neon.h>
|
|
|
|
void test_range_check_vsm3tt1a(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
|
|
vsm3tt1aq_u32(a, b, c, 4); // expected-error {{argument value 4 is outside the valid range [0, 3]}}
|
|
vsm3tt1aq_u32(a, b, c, -1); // expected-error {{argument value -1 is outside the valid range [0, 3]}}
|
|
vsm3tt1aq_u32(a, b, c, 3);
|
|
vsm3tt1aq_u32(a, b, c, 0);
|
|
}
|
|
|
|
void test_range_check_vsm3tt1b(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
|
|
vsm3tt1bq_u32(a, b, c, 4);// expected-error {{argument value 4 is outside the valid range [0, 3]}}
|
|
vsm3tt1bq_u32(a, b, c, -1); // expected-error {{argument value -1 is outside the valid range [0, 3]}}
|
|
vsm3tt1bq_u32(a, b, c, 3);
|
|
vsm3tt1bq_u32(a, b, c, 0);
|
|
}
|
|
|
|
void test_range_check_vsm3tt2a(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
|
|
vsm3tt2aq_u32(a, b, c, 4);// expected-error {{argument value 4 is outside the valid range [0, 3]}}
|
|
vsm3tt2aq_u32(a, b, c, -1); // expected-error {{argument value -1 is outside the valid range [0, 3]}}
|
|
vsm3tt2aq_u32(a, b, c, 3);
|
|
vsm3tt2aq_u32(a, b, c, 0);
|
|
}
|
|
|
|
void test_range_check_vsm3tt2b(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
|
|
vsm3tt2bq_u32(a, b, c, 4);// expected-error {{argument value 4 is outside the valid range [0, 3]}}
|
|
vsm3tt2bq_u32(a, b, c, -1); // expected-error {{argument value -1 is outside the valid range [0, 3]}}
|
|
vsm3tt2bq_u32(a, b, c, 3);
|
|
vsm3tt2bq_u32(a, b, c, 0);
|
|
}
|
|
|