x86/asm/crypto: Simplify stack usage in sha-mb functions
sha1_mb_mgr_flush_avx2() and sha1_mb_mgr_submit_avx2() both allocate a lot of stack space which is never used. Also, many of the registers being saved aren't being clobbered so there's no need to save them. Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Andy Lutomirski <luto@kernel.org> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Bernd Petrovitsch <bernd@petrovitsch.priv.at> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Chris J Arges <chris.j.arges@canonical.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Jiri Slaby <jslaby@suse.cz> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Michal Marek <mmarek@suse.cz> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Pedro Alves <palves@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: live-patching@vger.kernel.org Link: http://lkml.kernel.org/r/9402e4d87580d6b2376ed95f67b84bdcce3c830e.1453405861.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
f66f61919e
commit
aec4d0e301
@ -86,16 +86,6 @@
|
||||
#define extra_blocks %arg2
|
||||
#define p %arg2
|
||||
|
||||
|
||||
# STACK_SPACE needs to be an odd multiple of 8
|
||||
_XMM_SAVE_SIZE = 10*16
|
||||
_GPR_SAVE_SIZE = 8*8
|
||||
_ALIGN_SIZE = 8
|
||||
|
||||
_XMM_SAVE = 0
|
||||
_GPR_SAVE = _XMM_SAVE + _XMM_SAVE_SIZE
|
||||
STACK_SPACE = _GPR_SAVE + _GPR_SAVE_SIZE + _ALIGN_SIZE
|
||||
|
||||
.macro LABEL prefix n
|
||||
\prefix\n\():
|
||||
.endm
|
||||
@ -113,16 +103,7 @@ offset = \_offset
|
||||
# JOB* sha1_mb_mgr_flush_avx2(MB_MGR *state)
|
||||
# arg 1 : rcx : state
|
||||
ENTRY(sha1_mb_mgr_flush_avx2)
|
||||
mov %rsp, %r10
|
||||
sub $STACK_SPACE, %rsp
|
||||
and $~31, %rsp
|
||||
mov %rbx, _GPR_SAVE(%rsp)
|
||||
mov %r10, _GPR_SAVE+8*1(%rsp) #save rsp
|
||||
mov %rbp, _GPR_SAVE+8*3(%rsp)
|
||||
mov %r12, _GPR_SAVE+8*4(%rsp)
|
||||
mov %r13, _GPR_SAVE+8*5(%rsp)
|
||||
mov %r14, _GPR_SAVE+8*6(%rsp)
|
||||
mov %r15, _GPR_SAVE+8*7(%rsp)
|
||||
push %rbx
|
||||
|
||||
# If bit (32+3) is set, then all lanes are empty
|
||||
mov _unused_lanes(state), unused_lanes
|
||||
@ -230,16 +211,7 @@ len_is_0:
|
||||
mov tmp2_w, offset(job_rax)
|
||||
|
||||
return:
|
||||
|
||||
mov _GPR_SAVE(%rsp), %rbx
|
||||
mov _GPR_SAVE+8*1(%rsp), %r10 #saved rsp
|
||||
mov _GPR_SAVE+8*3(%rsp), %rbp
|
||||
mov _GPR_SAVE+8*4(%rsp), %r12
|
||||
mov _GPR_SAVE+8*5(%rsp), %r13
|
||||
mov _GPR_SAVE+8*6(%rsp), %r14
|
||||
mov _GPR_SAVE+8*7(%rsp), %r15
|
||||
mov %r10, %rsp
|
||||
|
||||
pop %rbx
|
||||
ret
|
||||
|
||||
return_null:
|
||||
|
@ -94,25 +94,12 @@ DWORD_tmp = %r9d
|
||||
|
||||
lane_data = %r10
|
||||
|
||||
# STACK_SPACE needs to be an odd multiple of 8
|
||||
STACK_SPACE = 8*8 + 16*10 + 8
|
||||
|
||||
# JOB* submit_mb_mgr_submit_avx2(MB_MGR *state, job_sha1 *job)
|
||||
# arg 1 : rcx : state
|
||||
# arg 2 : rdx : job
|
||||
ENTRY(sha1_mb_mgr_submit_avx2)
|
||||
|
||||
mov %rsp, %r10
|
||||
sub $STACK_SPACE, %rsp
|
||||
and $~31, %rsp
|
||||
|
||||
mov %rbx, (%rsp)
|
||||
mov %r10, 8*2(%rsp) #save old rsp
|
||||
mov %rbp, 8*3(%rsp)
|
||||
mov %r12, 8*4(%rsp)
|
||||
mov %r13, 8*5(%rsp)
|
||||
mov %r14, 8*6(%rsp)
|
||||
mov %r15, 8*7(%rsp)
|
||||
push %rbx
|
||||
push %rbp
|
||||
|
||||
mov _unused_lanes(state), unused_lanes
|
||||
mov unused_lanes, lane
|
||||
@ -203,16 +190,8 @@ len_is_0:
|
||||
movl DWORD_tmp, _result_digest+1*16(job_rax)
|
||||
|
||||
return:
|
||||
|
||||
mov (%rsp), %rbx
|
||||
mov 8*2(%rsp), %r10 #save old rsp
|
||||
mov 8*3(%rsp), %rbp
|
||||
mov 8*4(%rsp), %r12
|
||||
mov 8*5(%rsp), %r13
|
||||
mov 8*6(%rsp), %r14
|
||||
mov 8*7(%rsp), %r15
|
||||
mov %r10, %rsp
|
||||
|
||||
pop %rbp
|
||||
pop %rbx
|
||||
ret
|
||||
|
||||
return_null:
|
||||
|
Loading…
Reference in New Issue
Block a user