]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/intel-ipsec-mb/aes_keyexp_256.asm
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / intel-ipsec-mb / aes_keyexp_256.asm
index 3e3560ed3f1d6bd2ae5f1b7fdd8def5435261102..cd775ebb3959b968b78e3839e056fc6540a93e31 100644 (file)
@@ -27,6 +27,8 @@
 
 ; Routine to do AES key expansion
 %include "os.asm"
+%define NO_AESNI_RENAME
+%include "aesni_emu.inc"
 
 ; Uses the f() function of the aeskeygenassist result
 %macro key_expansion_256_sse 0
@@ -184,9 +186,104 @@ aes_keyexp_256_sse:
 
        ret
 
+MKGLOBAL(aes_keyexp_256_sse_no_aesni,function,)
+aes_keyexp_256_sse_no_aesni:
+        movdqu xmm1, [KEY]                     ; loading the AES key
+       movdqa  [EXP_ENC_KEYS + 16*0], xmm1
+        movdqa [EXP_DEC_KEYS + 16*14], xmm1    ; Storing key in memory
+
+        movdqu xmm4, [KEY+16]                  ; loading the AES key
+       movdqa  [EXP_ENC_KEYS + 16*1], xmm4
+        EMULATE_AESIMC xmm0, xmm4
+        movdqa [EXP_DEC_KEYS + 16*13], xmm0    ; Storing key in memory
+
+        pxor xmm3, xmm3                                ; Required for the key_expansion.
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x1                ; Generating round key 2
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*2], xmm1
+       EMULATE_AESIMC  xmm5, xmm1
+       movdqa  [EXP_DEC_KEYS + 16*12], xmm5
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x1                ; Generating round key 3
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*3], xmm4
+        EMULATE_AESIMC xmm0, xmm4
+       movdqa  [EXP_DEC_KEYS + 16*11], xmm0
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x2                ; Generating round key 4
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*4], xmm1
+        EMULATE_AESIMC xmm5, xmm1
+       movdqa  [EXP_DEC_KEYS + 16*10], xmm5
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x2                ; Generating round key 5
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*5], xmm4
+        EMULATE_AESIMC xmm0, xmm4
+       movdqa  [EXP_DEC_KEYS + 16*9], xmm0
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x4                ; Generating round key 6
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*6], xmm1
+        EMULATE_AESIMC xmm5, xmm1
+       movdqa  [EXP_DEC_KEYS + 16*8], xmm5
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x4                ; Generating round key 7
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*7], xmm4
+        EMULATE_AESIMC xmm0, xmm4
+       movdqa  [EXP_DEC_KEYS + 16*7], xmm0
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x8                ; Generating round key 8
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*8], xmm1
+        EMULATE_AESIMC xmm5, xmm1
+       movdqa  [EXP_DEC_KEYS + 16*6], xmm5
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x8                ; Generating round key 9
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*9], xmm4
+        EMULATE_AESIMC xmm0, xmm4
+       movdqa  [EXP_DEC_KEYS + 16*5], xmm0
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x10       ; Generating round key 10
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*10], xmm1
+        EMULATE_AESIMC xmm5, xmm1
+       movdqa  [EXP_DEC_KEYS + 16*4], xmm5
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x10       ; Generating round key 11
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*11], xmm4
+        EMULATE_AESIMC xmm0, xmm4
+       movdqa  [EXP_DEC_KEYS + 16*3], xmm0
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x20       ; Generating round key 12
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*12], xmm1
+        EMULATE_AESIMC xmm5, xmm1
+       movdqa  [EXP_DEC_KEYS + 16*2], xmm5
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x20       ; Generating round key 13
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*13], xmm4
+        EMULATE_AESIMC xmm0, xmm4
+       movdqa  [EXP_DEC_KEYS + 16*1], xmm0
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x40       ; Generating round key 14
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*14], xmm1
+       movdqa  [EXP_DEC_KEYS + 16*0], xmm1
+
+       ret
 
 MKGLOBAL(aes_keyexp_256_avx,function,)
+MKGLOBAL(aes_keyexp_256_avx2,function,)
+MKGLOBAL(aes_keyexp_256_avx512,function,)
 aes_keyexp_256_avx:
+aes_keyexp_256_avx2:
+aes_keyexp_256_avx512:
         vmovdqu        xmm1, [KEY]                     ; loading the AES key
        vmovdqa [EXP_ENC_KEYS + 16*0], xmm1
         vmovdqa        [EXP_DEC_KEYS + 16*14], xmm1    ; Storing key in memory
@@ -352,8 +449,76 @@ aes_keyexp_256_enc_sse:
 
        ret
 
+MKGLOBAL(aes_keyexp_256_enc_sse_no_aesni,function,)
+aes_keyexp_256_enc_sse_no_aesni:
+        movdqu xmm1, [KEY]                     ; loading the AES key
+       movdqa  [EXP_ENC_KEYS + 16*0], xmm1
+
+        movdqu xmm4, [KEY+16]                  ; loading the AES key
+       movdqa  [EXP_ENC_KEYS + 16*1], xmm4
+
+        pxor xmm3, xmm3                                ; Required for the key_expansion.
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x1                ; Generating round key 2
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*2], xmm1
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x1                ; Generating round key 3
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*3], xmm4
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x2                ; Generating round key 4
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*4], xmm1
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x2                ; Generating round key 5
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*5], xmm4
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x4                ; Generating round key 6
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*6], xmm1
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x4                ; Generating round key 7
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*7], xmm4
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x8                ; Generating round key 8
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*8], xmm1
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x8                ; Generating round key 9
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*9], xmm4
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x10       ; Generating round key 10
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*10], xmm1
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x10       ; Generating round key 11
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*11], xmm4
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x20       ; Generating round key 12
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*12], xmm1
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm1, 0x20       ; Generating round key 13
+        key_expansion_256_sse_2
+       movdqa  [EXP_ENC_KEYS + 16*13], xmm4
+
+        EMULATE_AESKEYGENASSIST xmm2, xmm4, 0x40       ; Generating round key 14
+        key_expansion_256_sse
+       movdqa  [EXP_ENC_KEYS + 16*14], xmm1
+
+       ret
+
 MKGLOBAL(aes_keyexp_256_enc_avx,function,)
+MKGLOBAL(aes_keyexp_256_enc_avx2,function,)
+MKGLOBAL(aes_keyexp_256_enc_avx512,function,)
 aes_keyexp_256_enc_avx:
+aes_keyexp_256_enc_avx2:
+aes_keyexp_256_enc_avx512:
         vmovdqu        xmm1, [KEY]                     ; loading the AES key
        vmovdqa [EXP_ENC_KEYS + 16*0], xmm1