Skip to content

Commit aabfade

Browse files
committed
Add tests for _mm_aes*_si128 intrinsics
These tests are based on the examples in Microsoft's documentation. Same input should result in the same output in any case.
1 parent 944d4e8 commit aabfade

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

coresimd/src/x86/x86_64/aes.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use x86::__m128i;
22

3+
#[cfg(test)]
4+
use stdsimd_test::assert_instr;
5+
36
#[allow(improper_ctypes)]
47
extern "C" {
58
#[link_name = "llvm.x86.aesni.aesdec"]
@@ -66,3 +69,73 @@ pub unsafe fn _mm_aesimc_si128(a: __m128i) -> __m128i {
6669
pub unsafe fn _mm_aeskeygenassist_si128(a: __m128i, imm8: u8) -> __m128i {
6770
aeskeygenassist(a, imm8)
6871
}
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

Comments
 (0)