|
1 | 1 | use x86::__m128i;
|
2 | 2 |
|
| 3 | +#[cfg(test)] |
| 4 | +use stdsimd_test::assert_instr; |
| 5 | + |
3 | 6 | #[allow(improper_ctypes)]
|
4 | 7 | extern "C" {
|
5 | 8 | #[link_name = "llvm.x86.aesni.aesdec"]
|
@@ -66,3 +69,73 @@ pub unsafe fn _mm_aesimc_si128(a: __m128i) -> __m128i {
|
66 | 69 | pub unsafe fn _mm_aeskeygenassist_si128(a: __m128i, imm8: u8) -> __m128i {
|
67 | 70 | aeskeygenassist(a, imm8)
|
68 | 71 | }
|
| 72 | + |
| 73 | +#[cfg(test)] |
| 74 | +mod tests { |
| 75 | + // The constants in the tests below are just bit patterns. They should not |
| 76 | + // be interpreted as integers; signedness does not make sense for them, but |
| 77 | + // __m128i happens to be defined in terms of signed integers. |
| 78 | + #![allow(overflowing_literals)] |
| 79 | + |
| 80 | + use stdsimd_test::simd_test; |
| 81 | + |
| 82 | + use x86::*; |
| 83 | + |
| 84 | + #[simd_test = "aes"] |
| 85 | + unsafe fn test_mm_aesdec_si128() { |
| 86 | + // Constants taken from https://msdn.microsoft.com/en-us/library/cc664949.aspx. |
| 87 | + let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff); |
| 88 | + let k = __m128i(0x1133557799bbddff, 0x0022446688aaccee); |
| 89 | + let e = __m128i(0x044e4f5176fec48f, 0xb57ecfa381da39ee); |
| 90 | + let r = _mm_aesdec_si128(a, k); |
| 91 | + assert_eq_m128i(r, e); |
| 92 | + } |
| 93 | + |
| 94 | + #[simd_test = "aes"] |
| 95 | + unsafe fn test_mm_aesdeclast_si128() { |
| 96 | + // Constants taken from https://msdn.microsoft.com/en-us/library/cc714178.aspx. |
| 97 | + let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff); |
| 98 | + let k = __m128i(0x1133557799bbddff, 0x0022446688aaccee); |
| 99 | + let e = __m128i(0x36cad57d9072bf9e, 0xf210dd981fa4a493); |
| 100 | + let r = _mm_aesdeclast_si128(a, k); |
| 101 | + assert_eq_m128i(r, e); |
| 102 | + } |
| 103 | + |
| 104 | + #[simd_test = "aes"] |
| 105 | + unsafe fn test_mm_aesenc_si128() { |
| 106 | + // Constants taken from https://msdn.microsoft.com/en-us/library/cc664810.aspx. |
| 107 | + let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff); |
| 108 | + let k = __m128i(0x1133557799bbddff, 0x0022446688aaccee); |
| 109 | + let e = __m128i(0x16ab0e57dfc442ed, 0x28e4ee1884504333); |
| 110 | + let r = _mm_aesenc_si128(a, k); |
| 111 | + assert_eq_m128i(r, e); |
| 112 | + } |
| 113 | + |
| 114 | + #[simd_test = "aes"] |
| 115 | + unsafe fn test_mm_aesenclast_si128() { |
| 116 | + // Constants taken from https://msdn.microsoft.com/en-us/library/cc714136.aspx. |
| 117 | + let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff); |
| 118 | + let k = __m128i(0x1133557799bbddff, 0x0022446688aaccee); |
| 119 | + let e = __m128i(0xb6dd7df25d7ab320, 0x4b04f98cf4c860f8); |
| 120 | + let r = _mm_aesenclast_si128(a, k); |
| 121 | + assert_eq_m128i(r, e); |
| 122 | + } |
| 123 | + |
| 124 | + #[simd_test = "aes"] |
| 125 | + unsafe fn test_mm_aesimc_si128() { |
| 126 | + // Constants taken from https://msdn.microsoft.com/en-us/library/cc714195.aspx. |
| 127 | + let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff); |
| 128 | + let e = __m128i(0xc66c82284ee40aa0, 0x6633441122770055); |
| 129 | + let r = _mm_aesimc_si128(a); |
| 130 | + assert_eq_m128i(r, e); |
| 131 | + } |
| 132 | + |
| 133 | + #[simd_test = "aes"] |
| 134 | + unsafe fn test_mm_aeskeygenassist_si128() { |
| 135 | + // Constants taken from https://msdn.microsoft.com/en-us/library/cc714138.aspx. |
| 136 | + let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff); |
| 137 | + let e = __m128i(0x857c266b7c266e85, 0xeac4eea9c4eeacea); |
| 138 | + let r = _mm_aeskeygenassist_si128(a, 5); |
| 139 | + assert_eq_m128i(r, e); |
| 140 | + } |
| 141 | +} |
0 commit comments