]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/intel-ipsec-mb/sse/mb_mgr_hmac_md5_submit_sse.asm
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / intel-ipsec-mb / sse / mb_mgr_hmac_md5_submit_sse.asm
index cfe60e78cc7c4472cad956bd9f76e5bec9111ab6..b9ac5d9c197f83f7bb211ee56719c8f8db0d60d2 100644 (file)
@@ -30,6 +30,7 @@
 %include "mb_mgr_datastruct.asm"
 %include "memcpy.asm"
 %include "reg_sizes.asm"
+%include "const.inc"
 
 extern md5_x4x2_sse
 
@@ -129,7 +130,11 @@ submit_job_hmac_md5_sse:
 
         mov    [lane_data + _job_in_lane], job
         mov    dword [lane_data + _outer_done], 0
-        mov    [state + _lens_md5 + 2*lane], WORD(tmp)
+
+        ;; insert len into proper lane
+        movdqa  xmm0, [state + _lens_md5]
+        XPINSRW xmm0, xmm1, p, lane, tmp, scale_x16
+        movdqa  [state + _lens_md5], xmm0
 
         mov    last_len, len
         and    last_len, 63
@@ -180,7 +185,10 @@ end_fast_copy:
         jnz    ge64_bytes
 
 lt64_bytes:
-        mov    [state + _lens_md5 + 2*lane], WORD(extra_blocks)
+        movdqa  xmm0, [state + _lens_md5]
+        XPINSRW xmm0, xmm1, tmp, lane, extra_blocks, scale_x16
+        movdqa  [state + _lens_md5], xmm0
+
         lea    tmp, [lane_data + _extra_block + start_offset]
         mov    [state + _args_data_ptr_md5 + PTR_SZ*lane], tmp
         mov    dword [lane_data + _extra_blocks], 0
@@ -223,7 +231,11 @@ proc_outer:
         mov    dword [lane_data + _outer_done], 1
         mov    DWORD(size_offset), [lane_data + _size_offset]
         mov    qword [lane_data + _extra_block + size_offset], 0
-        mov    word [state + _lens_md5 + 2*idx], 1
+
+        movdqa  xmm0, [state + _lens_md5]
+        XPINSRW xmm0, xmm1, tmp, idx, 1, scale_x16
+        movdqa  [state + _lens_md5], xmm0
+
         lea    tmp, [lane_data + _outer_block]
         mov    job, [lane_data + _job_in_lane]
         mov    [state + _args_data_ptr_md5 + PTR_SZ*idx], tmp
@@ -246,7 +258,11 @@ proc_outer:
         align  16
 proc_extra_blocks:
         mov    DWORD(start_offset), [lane_data + _start_offset]
-        mov    [state + _lens_md5 + 2*idx], WORD(extra_blocks)
+
+        movdqa  xmm0, [state + _lens_md5]
+        XPINSRW xmm0, xmm1, tmp, idx, extra_blocks, scale_x16
+        movdqa  [state + _lens_md5], xmm0
+
         lea    tmp, [lane_data + _extra_block + start_offset]
         mov    [state + _args_data_ptr_md5 + PTR_SZ*idx], tmp
         mov    dword [lane_data + _extra_blocks], 0
@@ -289,6 +305,13 @@ end_loop:
         mov    [p + 1*4], DWORD(tmp2)
         mov    [p + 2*4], DWORD(tmp3)
 
+        cmp     DWORD [job_rax + _auth_tag_output_len_in_bytes], 12
+        je      return
+
+        ; copy 16 bytes
+        mov    DWORD(tmp3), [state + _args_digest_md5 + MD5_DIGEST_WORD_SIZE*idx + 3*MD5_DIGEST_ROW_SIZE]
+        mov    [p + 3*4], DWORD(tmp3)
+
 return:
 
        mov     rbx, [rsp + _gpr_save + 8*0]