Skip to content

Commit 054428e

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 054428e

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

coresimd/src/x86/x86_64/aes.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,74 @@ pub unsafe fn _mm_aesimc_si128(a: __m128i) -> __m128i {
6666
pub unsafe fn _mm_aeskeygenassist_si128(a: __m128i, imm8: u8) -> __m128i {
6767
aeskeygenassist(a, imm8)
6868
}
69+
70+
#[cfg(test)]
71+
mod tests {
72+
use stdsimd_test::simd_test;
73+
74+
use x86::*;
75+
76+
#[simd_test = "aex"]
77+
unsafe fn test_mm_aesdec_si128() {
78+
// Constants taken from https://msdn.microsoft.com/en-us/library/cc664949.aspx.
79+
let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff);
80+
let b = __m128i(0x1133557799bbddff, 0x0022446688aaccee);
81+
// TODO(ruuda): These two parts probably need to be swapped.
82+
let e = __m128i(0xb57ecfa381da39ee, 0x044e4f5176fec48f);
83+
let r = _mm_aesdec_si128(a, key);
84+
assert_eq_m128i(r, e);
85+
}
86+
87+
#[simd_test = "aex"]
88+
unsafe fn test_mm_aesdeclast_si128() {
89+
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714178.aspx.
90+
let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff);
91+
let b = __m128i(0x1133557799bbddff, 0x0022446688aaccee);
92+
// TODO(ruuda): These two parts probably need to be swapped.
93+
let e = __m128i(0xf210dd981fa4a493, 0x36cad57d9072bf9e);
94+
let r = _mm_aesdeclast_si128(a, key);
95+
assert_eq_m128i(r, e);
96+
}
97+
98+
#[simd_test = "aex"]
99+
unsafe fn test_mm_aesenc_si128() {
100+
// Constants taken from https://msdn.microsoft.com/en-us/library/cc664810.aspx.
101+
let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff);
102+
let b = __m128i(0x1133557799bbddff, 0x0022446688aaccee);
103+
// TODO(ruuda): These two parts probably need to be swapped.
104+
let e = __m128i(0x28e4ee1884504333, 0x16ab0e57dfc442ed);
105+
let r = _mm_aesenc_si128(a, key);
106+
assert_eq_m128i(r, e);
107+
}
108+
109+
#[simd_test = "aex"]
110+
unsafe fn test_mm_aesenclast_si128() {
111+
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714136.aspx.
112+
let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff);
113+
let b = __m128i(0x1133557799bbddff, 0x0022446688aaccee);
114+
// TODO(ruuda): These two parts probably need to be swapped.
115+
let e = __m128i(0x4b04f98cf4c860f8, 0xb6dd7df25d7ab320);
116+
let r = _mm_aesenclast_si128(a, key);
117+
assert_eq_m128i(r, e);
118+
}
119+
120+
#[simd_test = "aex"]
121+
unsafe fn test_mm_aesimc_si128() {
122+
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714195.aspx.
123+
let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff);
124+
// TODO(ruuda): These two parts probably need to be swapped.
125+
let e = __m128i(0x6633441122770055, 0xc66c82284ee40aa0);
126+
let r = _mm_aesimc_si128(a);
127+
assert_eq_m128i(r, e);
128+
}
129+
130+
#[simd_test = "aex"]
131+
unsafe fn test_mm_aeskeygenassist_si128() {
132+
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714138.aspx.
133+
let a = __m128i(0x0123456789abcdef, 0x8899aabbccddeeff);
134+
// TODO(ruuda): These two parts probably need to be swapped.
135+
let e = __m128i(0xeac4eea9c4eeacea, 0x857c266b7c266e85);
136+
let r = _mm_aeskeygenassist_si128(a, 5);
137+
assert_eq_m128i(r, e);
138+
}
139+
}

0 commit comments

Comments
 (0)