xref: /qemu/tests/tcg/i386/test-aes.c (revision ca1e9c3b)
1*ca1e9c3bSRichard Henderson /* SPDX-License-Identifier: GPL-2.0-or-later */
2*ca1e9c3bSRichard Henderson 
3*ca1e9c3bSRichard Henderson #include "../multiarch/test-aes-main.c.inc"
4*ca1e9c3bSRichard Henderson #include <immintrin.h>
5*ca1e9c3bSRichard Henderson 
test_SB_SR(uint8_t * o,const uint8_t * i)6*ca1e9c3bSRichard Henderson static bool test_SB_SR(uint8_t *o, const uint8_t *i)
7*ca1e9c3bSRichard Henderson {
8*ca1e9c3bSRichard Henderson     __m128i vi = _mm_loadu_si128((const __m128i_u *)i);
9*ca1e9c3bSRichard Henderson 
10*ca1e9c3bSRichard Henderson     /* aesenclast also adds round key, so supply zero. */
11*ca1e9c3bSRichard Henderson     vi = _mm_aesenclast_si128(vi, _mm_setzero_si128());
12*ca1e9c3bSRichard Henderson 
13*ca1e9c3bSRichard Henderson     _mm_storeu_si128((__m128i_u *)o, vi);
14*ca1e9c3bSRichard Henderson     return true;
15*ca1e9c3bSRichard Henderson }
16*ca1e9c3bSRichard Henderson 
test_MC(uint8_t * o,const uint8_t * i)17*ca1e9c3bSRichard Henderson static bool test_MC(uint8_t *o, const uint8_t *i)
18*ca1e9c3bSRichard Henderson {
19*ca1e9c3bSRichard Henderson     return false;
20*ca1e9c3bSRichard Henderson }
21*ca1e9c3bSRichard Henderson 
test_SB_SR_MC_AK(uint8_t * o,const uint8_t * i,const uint8_t * k)22*ca1e9c3bSRichard Henderson static bool test_SB_SR_MC_AK(uint8_t *o, const uint8_t *i, const uint8_t *k)
23*ca1e9c3bSRichard Henderson {
24*ca1e9c3bSRichard Henderson     __m128i vi = _mm_loadu_si128((const __m128i_u *)i);
25*ca1e9c3bSRichard Henderson     __m128i vk = _mm_loadu_si128((const __m128i_u *)k);
26*ca1e9c3bSRichard Henderson 
27*ca1e9c3bSRichard Henderson     vi = _mm_aesenc_si128(vi, vk);
28*ca1e9c3bSRichard Henderson 
29*ca1e9c3bSRichard Henderson     _mm_storeu_si128((__m128i_u *)o, vi);
30*ca1e9c3bSRichard Henderson     return true;
31*ca1e9c3bSRichard Henderson }
32*ca1e9c3bSRichard Henderson 
test_ISB_ISR(uint8_t * o,const uint8_t * i)33*ca1e9c3bSRichard Henderson static bool test_ISB_ISR(uint8_t *o, const uint8_t *i)
34*ca1e9c3bSRichard Henderson {
35*ca1e9c3bSRichard Henderson     __m128i vi = _mm_loadu_si128((const __m128i_u *)i);
36*ca1e9c3bSRichard Henderson 
37*ca1e9c3bSRichard Henderson     /* aesdeclast also adds round key, so supply zero. */
38*ca1e9c3bSRichard Henderson     vi = _mm_aesdeclast_si128(vi, _mm_setzero_si128());
39*ca1e9c3bSRichard Henderson 
40*ca1e9c3bSRichard Henderson     _mm_storeu_si128((__m128i_u *)o, vi);
41*ca1e9c3bSRichard Henderson     return true;
42*ca1e9c3bSRichard Henderson }
43*ca1e9c3bSRichard Henderson 
test_IMC(uint8_t * o,const uint8_t * i)44*ca1e9c3bSRichard Henderson static bool test_IMC(uint8_t *o, const uint8_t *i)
45*ca1e9c3bSRichard Henderson {
46*ca1e9c3bSRichard Henderson     __m128i vi = _mm_loadu_si128((const __m128i_u *)i);
47*ca1e9c3bSRichard Henderson 
48*ca1e9c3bSRichard Henderson     vi = _mm_aesimc_si128(vi);
49*ca1e9c3bSRichard Henderson 
50*ca1e9c3bSRichard Henderson     _mm_storeu_si128((__m128i_u *)o, vi);
51*ca1e9c3bSRichard Henderson     return true;
52*ca1e9c3bSRichard Henderson }
53*ca1e9c3bSRichard Henderson 
test_ISB_ISR_AK_IMC(uint8_t * o,const uint8_t * i,const uint8_t * k)54*ca1e9c3bSRichard Henderson static bool test_ISB_ISR_AK_IMC(uint8_t *o, const uint8_t *i, const uint8_t *k)
55*ca1e9c3bSRichard Henderson {
56*ca1e9c3bSRichard Henderson     return false;
57*ca1e9c3bSRichard Henderson }
58*ca1e9c3bSRichard Henderson 
test_ISB_ISR_IMC_AK(uint8_t * o,const uint8_t * i,const uint8_t * k)59*ca1e9c3bSRichard Henderson static bool test_ISB_ISR_IMC_AK(uint8_t *o, const uint8_t *i, const uint8_t *k)
60*ca1e9c3bSRichard Henderson {
61*ca1e9c3bSRichard Henderson     __m128i vi = _mm_loadu_si128((const __m128i_u *)i);
62*ca1e9c3bSRichard Henderson     __m128i vk = _mm_loadu_si128((const __m128i_u *)k);
63*ca1e9c3bSRichard Henderson 
64*ca1e9c3bSRichard Henderson     vi = _mm_aesdec_si128(vi, vk);
65*ca1e9c3bSRichard Henderson 
66*ca1e9c3bSRichard Henderson     _mm_storeu_si128((__m128i_u *)o, vi);
67*ca1e9c3bSRichard Henderson     return true;
68*ca1e9c3bSRichard Henderson }
69