mirror of
https://github.com/intel/isa-l.git
synced 2025-01-06 15:10:02 +01:00
erasure_code: check for size on gf_vect_mul_sse/avx
gf_vect_mul requires length to be multiple of 32 bytes, so this check is added in the SSE/AVX implementations. Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
parent
275977156d
commit
91e7906f3f
@ -38,9 +38,6 @@
|
|||||||
%define arg1 rsi
|
%define arg1 rsi
|
||||||
%define arg2 rdx
|
%define arg2 rdx
|
||||||
%define arg3 rcx
|
%define arg3 rcx
|
||||||
%define arg4 r8
|
|
||||||
%define arg5 r9
|
|
||||||
%define tmp r11
|
|
||||||
%define return rax
|
%define return rax
|
||||||
%define func(x) x: endbranch
|
%define func(x) x: endbranch
|
||||||
%define FUNC_SAVE
|
%define FUNC_SAVE
|
||||||
@ -81,6 +78,7 @@
|
|||||||
%define src arg2
|
%define src arg2
|
||||||
%define dest arg3
|
%define dest arg3
|
||||||
%define pos return
|
%define pos return
|
||||||
|
%define tmp r11
|
||||||
|
|
||||||
|
|
||||||
;;; Use Non-temporal load/stor
|
;;; Use Non-temporal load/stor
|
||||||
@ -113,7 +111,14 @@ section .text
|
|||||||
align 16
|
align 16
|
||||||
mk_global gf_vect_mul_avx, function
|
mk_global gf_vect_mul_avx, function
|
||||||
func(gf_vect_mul_avx)
|
func(gf_vect_mul_avx)
|
||||||
|
|
||||||
|
; Check if length is multiple of 32 bytes
|
||||||
|
mov tmp, len
|
||||||
|
and tmp, 0x1f
|
||||||
|
jnz return_fail
|
||||||
|
|
||||||
FUNC_SAVE
|
FUNC_SAVE
|
||||||
|
|
||||||
mov pos, 0
|
mov pos, 0
|
||||||
vmovdqa xmask0f, [mask0f] ;Load mask of lower nibble in each byte
|
vmovdqa xmask0f, [mask0f] ;Load mask of lower nibble in each byte
|
||||||
vmovdqu xgft_lo, [mul_array] ;Load array Cx{00}, Cx{01}, Cx{02}, ...
|
vmovdqu xgft_lo, [mul_array] ;Load array Cx{00}, Cx{01}, Cx{02}, ...
|
||||||
@ -140,14 +145,13 @@ loop32:
|
|||||||
XSTR [dest+pos-16], xtmp2b ;Store +16B result
|
XSTR [dest+pos-16], xtmp2b ;Store +16B result
|
||||||
jl loop32
|
jl loop32
|
||||||
|
|
||||||
|
FUNC_RESTORE
|
||||||
|
|
||||||
return_pass:
|
return_pass:
|
||||||
FUNC_RESTORE
|
xor return, return
|
||||||
sub pos, len
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
return_fail:
|
return_fail:
|
||||||
FUNC_RESTORE
|
|
||||||
mov return, 1
|
mov return, 1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@ -38,9 +38,6 @@
|
|||||||
%define arg1 rsi
|
%define arg1 rsi
|
||||||
%define arg2 rdx
|
%define arg2 rdx
|
||||||
%define arg3 rcx
|
%define arg3 rcx
|
||||||
%define arg4 r8
|
|
||||||
%define arg5 r9
|
|
||||||
%define tmp r11
|
|
||||||
%define return rax
|
%define return rax
|
||||||
%define func(x) x: endbranch
|
%define func(x) x: endbranch
|
||||||
%define FUNC_SAVE
|
%define FUNC_SAVE
|
||||||
@ -81,6 +78,7 @@
|
|||||||
%define src arg2
|
%define src arg2
|
||||||
%define dest arg3
|
%define dest arg3
|
||||||
%define pos return
|
%define pos return
|
||||||
|
%define tmp r11
|
||||||
|
|
||||||
|
|
||||||
;;; Use Non-temporal load/stor
|
;;; Use Non-temporal load/stor
|
||||||
@ -114,7 +112,13 @@ section .text
|
|||||||
align 16
|
align 16
|
||||||
mk_global gf_vect_mul_sse, function
|
mk_global gf_vect_mul_sse, function
|
||||||
func(gf_vect_mul_sse)
|
func(gf_vect_mul_sse)
|
||||||
|
; Check if length is multiple of 32 bytes
|
||||||
|
mov tmp, len
|
||||||
|
and tmp, 0x1f
|
||||||
|
jnz return_fail
|
||||||
|
|
||||||
FUNC_SAVE
|
FUNC_SAVE
|
||||||
|
|
||||||
mov pos, 0
|
mov pos, 0
|
||||||
movdqa xmask0f, [mask0f] ;Load mask of lower nibble in each byte
|
movdqa xmask0f, [mask0f] ;Load mask of lower nibble in each byte
|
||||||
movdqu xgft_lo, [mul_array] ;Load array Cx{00}, Cx{01}, Cx{02}, ...
|
movdqu xgft_lo, [mul_array] ;Load array Cx{00}, Cx{01}, Cx{02}, ...
|
||||||
@ -147,15 +151,14 @@ loop32:
|
|||||||
cmp pos, len
|
cmp pos, len
|
||||||
jl loop32
|
jl loop32
|
||||||
|
|
||||||
|
FUNC_RESTORE
|
||||||
|
|
||||||
return_pass:
|
return_pass:
|
||||||
sub pos, len
|
xor return, return
|
||||||
FUNC_RESTORE
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
return_fail:
|
return_fail:
|
||||||
mov return, 1
|
mov return, 1
|
||||||
FUNC_RESTORE
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
endproc_frame
|
endproc_frame
|
||||||
|
Loading…
Reference in New Issue
Block a user