]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/intel-ipsec-mb/avx512/mb_mgr_hmac_sha_512_flush_avx512.asm
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / intel-ipsec-mb / avx512 / mb_mgr_hmac_sha_512_flush_avx512.asm
index 31e1bd4b7be940e1ac64dbcae211724bf8b7fee0..7d7e56b40eb1a60da080720da257feb62cf112c2 100644 (file)
 ;;
 ;; Clobbers ZMM0-31
 
-%include "os.asm"
+%include "include/os.asm"
 %include "job_aes_hmac.asm"
 %include "mb_mgr_datastruct.asm"
-%include "reg_sizes.asm"
+%include "include/reg_sizes.asm"
 
 extern sha512_x8_avx512
 
@@ -286,7 +286,7 @@ end_loop:
 %if (SHA_X_DIGEST_SIZE != 384)
        mov     [p + 3*8], QWORD(tmp5)
 %endif
-        jmp     return
+        jmp     clear_ret
 
 copy_full_digest:
        ;; copy 64 bytes for SHA512 / 48 bytes for SHA384
@@ -322,6 +322,47 @@ copy_full_digest:
        mov     [p + 7*8], QWORD(tmp5)
 %endif
 
+clear_ret:
+
+%ifdef SAFE_DATA
+        vpxorq   zmm0, zmm0
+
+        ;; Clear digest (48B/64B), outer_block (48B/64B) and extra_block (128B) of returned job
+%assign I 0
+%rep 8
+       cmp     qword [state + _ldata_sha512 + (I*_SHA512_LANE_DATA_size) + _job_in_lane_sha512], 0
+       jne     APPEND(skip_clear_,I)
+
+        ;; Clear digest (48 bytes for SHA-384, 64 bytes for SHA-512 bytes)
+%assign J 0
+%rep 6
+        mov     qword [state + _args_digest_sha512 + SHA512_DIGEST_WORD_SIZE*I + J*SHA512_DIGEST_ROW_SIZE], 0
+%assign J (J+1)
+%endrep
+%if (SHA_X_DIGEST_SIZE != 384)
+        mov     qword [state + _args_digest_sha512 + SHA512_DIGEST_WORD_SIZE*I + 6*SHA512_DIGEST_ROW_SIZE], 0
+        mov     qword [state + _args_digest_sha512 + SHA512_DIGEST_WORD_SIZE*I + 7*SHA512_DIGEST_ROW_SIZE], 0
+%endif
+
+        lea     lane_data, [state + _ldata_sha512 + (I*_SHA512_LANE_DATA_size)]
+        ;; Clear first 128 bytes of extra_block
+        vmovdqu64 [lane_data + _extra_block], zmm0
+        vmovdqu64 [lane_data + _extra_block + 64], zmm0
+
+        ;; Clear first 48 bytes (SHA-384) or 64 bytes (SHA-512) of outer_block
+%if (SHA_X_DIGEST_SIZE == 384)
+        vmovdqu64 [lane_data + _outer_block], ymm0
+        vmovdqa64 [lane_data + _outer_block + 32], xmm0
+%else
+        vmovdqu64 [lane_data + _outer_block], zmm0
+%endif
+
+APPEND(skip_clear_,I):
+%assign I (I+1)
+%endrep
+
+%endif ;; SAFE_DATA
+
 return:
         vzeroupper