More optimization for x86 and x86-64, including AMD K10
This commit is contained in:
parent
31c3074537
commit
476e2325ee
3 changed files with 147 additions and 164 deletions
223
scrypt-x64.S
223
scrypt-x64.S
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2011 pooler@litecoinpool.org
|
||||
# Copyright 2011-2012 pooler@litecoinpool.org
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
@ -30,6 +30,7 @@
|
|||
|
||||
.macro gen_salsa8_core_doubleround
|
||||
movq 72(%rsp), %r15
|
||||
|
||||
leaq (%r14, %rdx), %rbp
|
||||
roll $7, %ebp
|
||||
xorq %rbp, %r9
|
||||
|
@ -54,8 +55,10 @@
|
|||
leaq (%r13, %rdi), %rbp
|
||||
roll $18, %ebp
|
||||
xorq %rbp, %r15
|
||||
|
||||
movq 48(%rsp), %rbp
|
||||
movq %r15, 72(%rsp)
|
||||
|
||||
leaq (%rax, %rbp), %r15
|
||||
roll $7, %r15d
|
||||
xorq %r15, %rbx
|
||||
|
@ -68,8 +71,10 @@
|
|||
leaq (%rcx, %rax), %r15
|
||||
roll $18, %r15d
|
||||
xorq %r15, %rbp
|
||||
|
||||
movq 88(%rsp), %r15
|
||||
movq %rbp, 48(%rsp)
|
||||
|
||||
leaq (%r12, %r15), %rbp
|
||||
roll $7, %ebp
|
||||
xorq %rbp, %rsi
|
||||
|
@ -82,8 +87,10 @@
|
|||
leaq (%r8, %r12), %rbp
|
||||
roll $18, %ebp
|
||||
xorq %rbp, %r15
|
||||
|
||||
movq %r15, 88(%rsp)
|
||||
movq 72(%rsp), %r15
|
||||
|
||||
leaq (%rsi, %rdx), %rbp
|
||||
roll $7, %ebp
|
||||
xorq %rbp, %rdi
|
||||
|
@ -108,8 +115,10 @@
|
|||
leaq (%r8, %r9), %rbp
|
||||
roll $18, %ebp
|
||||
xorq %rbp, %r15
|
||||
|
||||
movq 48(%rsp), %rbp
|
||||
movq %r15, 72(%rsp)
|
||||
|
||||
leaq (%r10, %rbp), %r15
|
||||
roll $7, %r15d
|
||||
xorq %r15, %r12
|
||||
|
@ -122,8 +131,10 @@
|
|||
leaq (%r11, %r10), %r15
|
||||
roll $18, %r15d
|
||||
xorq %r15, %rbp
|
||||
|
||||
movq 88(%rsp), %r15
|
||||
movq %rbp, 48(%rsp)
|
||||
|
||||
leaq (%rbx, %r15), %rbp
|
||||
roll $7, %ebp
|
||||
xorq %rbp, %r14
|
||||
|
@ -136,6 +147,7 @@
|
|||
leaq (%r13, %rbx), %rbp
|
||||
roll $18, %ebp
|
||||
xorq %rbp, %r15
|
||||
|
||||
movq %r15, 88(%rsp)
|
||||
.endm
|
||||
|
||||
|
@ -832,15 +844,16 @@ _prefer_dual_scrypt:
|
|||
pushq %rbx
|
||||
xorq %rax, %rax
|
||||
cpuid
|
||||
xorq %rax, %rax
|
||||
cmpl $0x6c65746e, %ecx
|
||||
jne prefer_dual_scrypt_false
|
||||
cmpl $0x49656e69, %edx
|
||||
jne prefer_dual_scrypt_false
|
||||
cmpl $0x756e6547, %ebx
|
||||
jne prefer_dual_scrypt_false
|
||||
incl %eax
|
||||
prefer_dual_scrypt_false:
|
||||
movq $1, %rax
|
||||
cmpl $0x444d4163, %ecx
|
||||
jne prefer_dual_scrypt_exit
|
||||
cmpl $0x69746e65, %edx
|
||||
jne prefer_dual_scrypt_exit
|
||||
cmpl $0x68747541, %ebx
|
||||
jne prefer_dual_scrypt_exit
|
||||
cpuid
|
||||
andl $0x0ff00000, %eax
|
||||
prefer_dual_scrypt_exit:
|
||||
popq %rbx
|
||||
ret
|
||||
|
||||
|
@ -1118,9 +1131,13 @@ _dual_scrypt_core:
|
|||
movl %ebp, 100(%rsi)
|
||||
movl %ecx, 116(%rsi)
|
||||
|
||||
movdqa 64(%rsi), %xmm12
|
||||
movdqa 80(%rsi), %xmm13
|
||||
movdqa 96(%rsi), %xmm14
|
||||
movdqa 112(%rsi), %xmm15
|
||||
|
||||
movq %rdx, %rbp
|
||||
leaq 262144(%rdx), %rcx
|
||||
.align 8
|
||||
dual_scrypt_core_loop1:
|
||||
movdqa 0(%rdi), %xmm0
|
||||
movdqa 16(%rdi), %xmm1
|
||||
|
@ -1134,10 +1151,10 @@ dual_scrypt_core_loop1:
|
|||
movdqa 16(%rsi), %xmm9
|
||||
movdqa 32(%rsi), %xmm10
|
||||
movdqa 48(%rsi), %xmm11
|
||||
movdqa 64(%rsi), %xmm12
|
||||
movdqa 80(%rsi), %xmm13
|
||||
movdqa 96(%rsi), %xmm14
|
||||
movdqa 112(%rsi), %xmm15
|
||||
pxor %xmm4, %xmm0
|
||||
pxor %xmm5, %xmm1
|
||||
pxor %xmm6, %xmm2
|
||||
pxor %xmm7, %xmm3
|
||||
movdqa %xmm0, 0(%rbp)
|
||||
movdqa %xmm1, 16(%rbp)
|
||||
movdqa %xmm2, 32(%rbp)
|
||||
|
@ -1146,6 +1163,10 @@ dual_scrypt_core_loop1:
|
|||
movdqa %xmm5, 80(%rbp)
|
||||
movdqa %xmm6, 96(%rbp)
|
||||
movdqa %xmm7, 112(%rbp)
|
||||
pxor %xmm12, %xmm8
|
||||
pxor %xmm13, %xmm9
|
||||
pxor %xmm14, %xmm10
|
||||
pxor %xmm15, %xmm11
|
||||
movdqa %xmm8, 128(%rbp)
|
||||
movdqa %xmm9, 144(%rbp)
|
||||
movdqa %xmm10, 160(%rbp)
|
||||
|
@ -1155,31 +1176,15 @@ dual_scrypt_core_loop1:
|
|||
movdqa %xmm14, 224(%rbp)
|
||||
movdqa %xmm15, 240(%rbp)
|
||||
|
||||
pxor %xmm4, %xmm0
|
||||
pxor %xmm5, %xmm1
|
||||
pxor %xmm6, %xmm2
|
||||
pxor %xmm7, %xmm3
|
||||
pxor %xmm12, %xmm8
|
||||
pxor %xmm13, %xmm9
|
||||
pxor %xmm14, %xmm10
|
||||
pxor %xmm15, %xmm11
|
||||
movdqa %xmm0, 0(%rdi)
|
||||
movdqa %xmm1, 16(%rdi)
|
||||
movdqa %xmm2, 32(%rdi)
|
||||
movdqa %xmm3, 48(%rdi)
|
||||
movdqa %xmm8, 0(%rsi)
|
||||
movdqa %xmm9, 16(%rsi)
|
||||
movdqa %xmm10, 32(%rsi)
|
||||
movdqa %xmm11, 48(%rsi)
|
||||
xmm_dual_salsa8_core
|
||||
paddd 0(%rdi), %xmm0
|
||||
paddd 16(%rdi), %xmm1
|
||||
paddd 32(%rdi), %xmm2
|
||||
paddd 48(%rdi), %xmm3
|
||||
paddd 0(%rsi), %xmm8
|
||||
paddd 16(%rsi), %xmm9
|
||||
paddd 32(%rsi), %xmm10
|
||||
paddd 48(%rsi), %xmm11
|
||||
paddd 0(%rbp), %xmm0
|
||||
paddd 16(%rbp), %xmm1
|
||||
paddd 32(%rbp), %xmm2
|
||||
paddd 48(%rbp), %xmm3
|
||||
paddd 128(%rbp), %xmm8
|
||||
paddd 144(%rbp), %xmm9
|
||||
paddd 160(%rbp), %xmm10
|
||||
paddd 176(%rbp), %xmm11
|
||||
movdqa %xmm0, 0(%rdi)
|
||||
movdqa %xmm1, 16(%rdi)
|
||||
movdqa %xmm2, 32(%rdi)
|
||||
|
@ -1193,82 +1198,65 @@ dual_scrypt_core_loop1:
|
|||
pxor 80(%rdi), %xmm1
|
||||
pxor 96(%rdi), %xmm2
|
||||
pxor 112(%rdi), %xmm3
|
||||
pxor 64(%rsi), %xmm8
|
||||
pxor 80(%rsi), %xmm9
|
||||
pxor 96(%rsi), %xmm10
|
||||
pxor 112(%rsi), %xmm11
|
||||
pxor %xmm12, %xmm8
|
||||
pxor %xmm13, %xmm9
|
||||
pxor %xmm14, %xmm10
|
||||
pxor %xmm15, %xmm11
|
||||
movdqa %xmm0, 64(%rdi)
|
||||
movdqa %xmm1, 80(%rdi)
|
||||
movdqa %xmm2, 96(%rdi)
|
||||
movdqa %xmm3, 112(%rdi)
|
||||
movdqa %xmm8, 64(%rsi)
|
||||
movdqa %xmm9, 80(%rsi)
|
||||
movdqa %xmm10, 96(%rsi)
|
||||
movdqa %xmm11, 112(%rsi)
|
||||
movdqa %xmm8, %xmm12
|
||||
movdqa %xmm9, %xmm13
|
||||
movdqa %xmm10, %xmm14
|
||||
movdqa %xmm11, %xmm15
|
||||
xmm_dual_salsa8_core
|
||||
paddd 64(%rdi), %xmm0
|
||||
paddd 80(%rdi), %xmm1
|
||||
paddd 96(%rdi), %xmm2
|
||||
paddd 112(%rdi), %xmm3
|
||||
paddd 64(%rsi), %xmm8
|
||||
paddd 80(%rsi), %xmm9
|
||||
paddd 96(%rsi), %xmm10
|
||||
paddd 112(%rsi), %xmm11
|
||||
paddd %xmm8, %xmm12
|
||||
paddd %xmm9, %xmm13
|
||||
paddd %xmm10, %xmm14
|
||||
paddd %xmm11, %xmm15
|
||||
movdqa %xmm0, 64(%rdi)
|
||||
movdqa %xmm1, 80(%rdi)
|
||||
movdqa %xmm2, 96(%rdi)
|
||||
movdqa %xmm3, 112(%rdi)
|
||||
movdqa %xmm8, 64(%rsi)
|
||||
movdqa %xmm9, 80(%rsi)
|
||||
movdqa %xmm10, 96(%rsi)
|
||||
movdqa %xmm11, 112(%rsi)
|
||||
|
||||
addq $256, %rbp
|
||||
cmpq %rcx, %rbp
|
||||
jne dual_scrypt_core_loop1
|
||||
|
||||
movq $1024, %rcx
|
||||
.align 8
|
||||
dual_scrypt_core_loop2:
|
||||
movl 64(%rdi), %ebp
|
||||
movdqa 0(%rdi), %xmm0
|
||||
movdqa 16(%rdi), %xmm1
|
||||
movdqa 32(%rdi), %xmm2
|
||||
movdqa 48(%rdi), %xmm3
|
||||
movdqa 64(%rdi), %xmm4
|
||||
movdqa 80(%rdi), %xmm5
|
||||
movdqa 96(%rdi), %xmm6
|
||||
movdqa 112(%rdi), %xmm7
|
||||
movdqa 0(%rsi), %xmm8
|
||||
movdqa 16(%rsi), %xmm9
|
||||
movdqa 32(%rsi), %xmm10
|
||||
movdqa 48(%rsi), %xmm11
|
||||
movd %xmm4, %ebp
|
||||
andl $1023, %ebp
|
||||
shll $8, %ebp
|
||||
movdqa 0(%rdx, %rbp), %xmm0
|
||||
movdqa 16(%rdx, %rbp), %xmm1
|
||||
movdqa 32(%rdx, %rbp), %xmm2
|
||||
movdqa 48(%rdx, %rbp), %xmm3
|
||||
movdqa 64(%rdx, %rbp), %xmm4
|
||||
movdqa 80(%rdx, %rbp), %xmm5
|
||||
movdqa 96(%rdx, %rbp), %xmm6
|
||||
movdqa 112(%rdx, %rbp), %xmm7
|
||||
movl 64(%rsi), %ebp
|
||||
andl $1023, %ebp
|
||||
shll $8, %ebp
|
||||
addl $128, %ebp
|
||||
movdqa 0(%rdx, %rbp), %xmm8
|
||||
movdqa 16(%rdx, %rbp), %xmm9
|
||||
movdqa 32(%rdx, %rbp), %xmm10
|
||||
movdqa 48(%rdx, %rbp), %xmm11
|
||||
movdqa 64(%rdx, %rbp), %xmm12
|
||||
movdqa 80(%rdx, %rbp), %xmm13
|
||||
movdqa 96(%rdx, %rbp), %xmm14
|
||||
movdqa 112(%rdx, %rbp), %xmm15
|
||||
pxor 0(%rdi), %xmm0
|
||||
pxor 16(%rdi), %xmm1
|
||||
pxor 32(%rdi), %xmm2
|
||||
pxor 48(%rdi), %xmm3
|
||||
pxor 64(%rdi), %xmm4
|
||||
pxor 80(%rdi), %xmm5
|
||||
pxor 96(%rdi), %xmm6
|
||||
pxor 112(%rdi), %xmm7
|
||||
pxor 0(%rsi), %xmm8
|
||||
pxor 16(%rsi), %xmm9
|
||||
pxor 32(%rsi), %xmm10
|
||||
pxor 48(%rsi), %xmm11
|
||||
pxor 64(%rsi), %xmm12
|
||||
pxor 80(%rsi), %xmm13
|
||||
pxor 96(%rsi), %xmm14
|
||||
pxor 112(%rsi), %xmm15
|
||||
pxor 0(%rdx, %rbp), %xmm0
|
||||
pxor 16(%rdx, %rbp), %xmm1
|
||||
pxor 32(%rdx, %rbp), %xmm2
|
||||
pxor 48(%rdx, %rbp), %xmm3
|
||||
movd %xmm12, %ebx
|
||||
andl $1023, %ebx
|
||||
shll $8, %ebx
|
||||
addl $128, %ebx
|
||||
pxor 0(%rdx, %rbx), %xmm8
|
||||
pxor 16(%rdx, %rbx), %xmm9
|
||||
pxor 32(%rdx, %rbx), %xmm10
|
||||
pxor 48(%rdx, %rbx), %xmm11
|
||||
|
||||
pxor %xmm4, %xmm0
|
||||
pxor %xmm5, %xmm1
|
||||
|
@ -1282,18 +1270,10 @@ dual_scrypt_core_loop2:
|
|||
movdqa %xmm1, 16(%rdi)
|
||||
movdqa %xmm2, 32(%rdi)
|
||||
movdqa %xmm3, 48(%rdi)
|
||||
movdqa %xmm4, 64(%rdi)
|
||||
movdqa %xmm5, 80(%rdi)
|
||||
movdqa %xmm6, 96(%rdi)
|
||||
movdqa %xmm7, 112(%rdi)
|
||||
movdqa %xmm8, 0(%rsi)
|
||||
movdqa %xmm9, 16(%rsi)
|
||||
movdqa %xmm10, 32(%rsi)
|
||||
movdqa %xmm11, 48(%rsi)
|
||||
movdqa %xmm12, 64(%rsi)
|
||||
movdqa %xmm13, 80(%rsi)
|
||||
movdqa %xmm14, 96(%rsi)
|
||||
movdqa %xmm15, 112(%rsi)
|
||||
xmm_dual_salsa8_core
|
||||
paddd 0(%rdi), %xmm0
|
||||
paddd 16(%rdi), %xmm1
|
||||
|
@ -1312,43 +1292,52 @@ dual_scrypt_core_loop2:
|
|||
movdqa %xmm10, 32(%rsi)
|
||||
movdqa %xmm11, 48(%rsi)
|
||||
|
||||
pxor 64(%rdx, %rbp), %xmm0
|
||||
pxor 80(%rdx, %rbp), %xmm1
|
||||
pxor 96(%rdx, %rbp), %xmm2
|
||||
pxor 112(%rdx, %rbp), %xmm3
|
||||
pxor 64(%rdx, %rbx), %xmm8
|
||||
pxor 80(%rdx, %rbx), %xmm9
|
||||
pxor 96(%rdx, %rbx), %xmm10
|
||||
pxor 112(%rdx, %rbx), %xmm11
|
||||
pxor 64(%rdi), %xmm0
|
||||
pxor 80(%rdi), %xmm1
|
||||
pxor 96(%rdi), %xmm2
|
||||
pxor 112(%rdi), %xmm3
|
||||
pxor 64(%rsi), %xmm8
|
||||
pxor 80(%rsi), %xmm9
|
||||
pxor 96(%rsi), %xmm10
|
||||
pxor 112(%rsi), %xmm11
|
||||
pxor %xmm12, %xmm8
|
||||
pxor %xmm13, %xmm9
|
||||
pxor %xmm14, %xmm10
|
||||
pxor %xmm15, %xmm11
|
||||
movdqa %xmm0, 64(%rdi)
|
||||
movdqa %xmm1, 80(%rdi)
|
||||
movdqa %xmm2, 96(%rdi)
|
||||
movdqa %xmm3, 112(%rdi)
|
||||
movdqa %xmm8, 64(%rsi)
|
||||
movdqa %xmm9, 80(%rsi)
|
||||
movdqa %xmm10, 96(%rsi)
|
||||
movdqa %xmm11, 112(%rsi)
|
||||
movdqa %xmm8, %xmm12
|
||||
movdqa %xmm9, %xmm13
|
||||
movdqa %xmm10, %xmm14
|
||||
movdqa %xmm11, %xmm15
|
||||
xmm_dual_salsa8_core
|
||||
paddd 64(%rdi), %xmm0
|
||||
paddd 80(%rdi), %xmm1
|
||||
paddd 96(%rdi), %xmm2
|
||||
paddd 112(%rdi), %xmm3
|
||||
paddd 64(%rsi), %xmm8
|
||||
paddd 80(%rsi), %xmm9
|
||||
paddd 96(%rsi), %xmm10
|
||||
paddd 112(%rsi), %xmm11
|
||||
paddd %xmm8, %xmm12
|
||||
paddd %xmm9, %xmm13
|
||||
paddd %xmm10, %xmm14
|
||||
paddd %xmm11, %xmm15
|
||||
movdqa %xmm0, 64(%rdi)
|
||||
movdqa %xmm1, 80(%rdi)
|
||||
movdqa %xmm2, 96(%rdi)
|
||||
movdqa %xmm3, 112(%rdi)
|
||||
movdqa %xmm8, 64(%rsi)
|
||||
movdqa %xmm9, 80(%rsi)
|
||||
movdqa %xmm10, 96(%rsi)
|
||||
movdqa %xmm11, 112(%rsi)
|
||||
|
||||
subq $1, %rcx
|
||||
ja dual_scrypt_core_loop2
|
||||
|
||||
movdqa %xmm12, 64(%rsi)
|
||||
movdqa %xmm13, 80(%rsi)
|
||||
movdqa %xmm14, 96(%rsi)
|
||||
movdqa %xmm15, 112(%rsi)
|
||||
|
||||
# shuffle 1st block
|
||||
movl 60(%rdi), %ebp
|
||||
movl 44(%rdi), %ecx
|
||||
|
|
83
scrypt-x86.S
83
scrypt-x86.S
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2011 pooler@litecoinpool.org
|
||||
# Copyright 2011-2012 pooler@litecoinpool.org
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
@ -22,6 +22,10 @@
|
|||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
||||
|
||||
#if defined(__i386__)
|
||||
|
||||
.macro gen_salsa8_core_quadround
|
||||
|
@ -712,6 +716,9 @@ xmm_scrypt_core:
|
|||
movl %ecx, 96(%esp)
|
||||
movl %ebx, 112(%esp)
|
||||
|
||||
movdqa 96(%esp), %xmm6
|
||||
movdqa 112(%esp), %xmm7
|
||||
|
||||
movl %esi, %edx
|
||||
leal 131072(%esi), %ecx
|
||||
xmm_scrypt_core_loop1:
|
||||
|
@ -721,8 +728,10 @@ xmm_scrypt_core_loop1:
|
|||
movdqa 48(%esp), %xmm3
|
||||
movdqa 64(%esp), %xmm4
|
||||
movdqa 80(%esp), %xmm5
|
||||
movdqa 96(%esp), %xmm6
|
||||
movdqa 112(%esp), %xmm7
|
||||
pxor %xmm4, %xmm0
|
||||
pxor %xmm5, %xmm1
|
||||
pxor %xmm6, %xmm2
|
||||
pxor %xmm7, %xmm3
|
||||
movdqa %xmm0, 0(%edx)
|
||||
movdqa %xmm1, 16(%edx)
|
||||
movdqa %xmm2, 32(%edx)
|
||||
|
@ -732,19 +741,11 @@ xmm_scrypt_core_loop1:
|
|||
movdqa %xmm6, 96(%edx)
|
||||
movdqa %xmm7, 112(%edx)
|
||||
|
||||
pxor %xmm4, %xmm0
|
||||
pxor %xmm5, %xmm1
|
||||
pxor %xmm6, %xmm2
|
||||
pxor %xmm7, %xmm3
|
||||
movdqa %xmm0, 0(%esp)
|
||||
movdqa %xmm1, 16(%esp)
|
||||
movdqa %xmm2, 32(%esp)
|
||||
movdqa %xmm3, 48(%esp)
|
||||
xmm_salsa8_core
|
||||
paddd 0(%esp), %xmm0
|
||||
paddd 16(%esp), %xmm1
|
||||
paddd 32(%esp), %xmm2
|
||||
paddd 48(%esp), %xmm3
|
||||
paddd 0(%edx), %xmm0
|
||||
paddd 16(%edx), %xmm1
|
||||
paddd 32(%edx), %xmm2
|
||||
paddd 48(%edx), %xmm3
|
||||
movdqa %xmm0, 0(%esp)
|
||||
movdqa %xmm1, 16(%esp)
|
||||
movdqa %xmm2, 32(%esp)
|
||||
|
@ -752,36 +753,33 @@ xmm_scrypt_core_loop1:
|
|||
|
||||
pxor 64(%esp), %xmm0
|
||||
pxor 80(%esp), %xmm1
|
||||
pxor 96(%esp), %xmm2
|
||||
pxor 112(%esp), %xmm3
|
||||
pxor %xmm6, %xmm2
|
||||
pxor %xmm7, %xmm3
|
||||
movdqa %xmm0, 64(%esp)
|
||||
movdqa %xmm1, 80(%esp)
|
||||
movdqa %xmm2, 96(%esp)
|
||||
movdqa %xmm3, 112(%esp)
|
||||
movdqa %xmm2, %xmm6
|
||||
movdqa %xmm3, %xmm7
|
||||
xmm_salsa8_core
|
||||
paddd 64(%esp), %xmm0
|
||||
paddd 80(%esp), %xmm1
|
||||
paddd 96(%esp), %xmm2
|
||||
paddd 112(%esp), %xmm3
|
||||
paddd %xmm2, %xmm6
|
||||
paddd %xmm3, %xmm7
|
||||
movdqa %xmm0, 64(%esp)
|
||||
movdqa %xmm1, 80(%esp)
|
||||
movdqa %xmm2, 96(%esp)
|
||||
movdqa %xmm3, 112(%esp)
|
||||
|
||||
addl $128, %edx
|
||||
cmpl %ecx, %edx
|
||||
jne xmm_scrypt_core_loop1
|
||||
|
||||
movdqa 64(%esp), %xmm4
|
||||
movdqa 80(%esp), %xmm5
|
||||
|
||||
movl $1024, %ecx
|
||||
xmm_scrypt_core_loop2:
|
||||
movdqa 0(%esp), %xmm0
|
||||
movdqa 16(%esp), %xmm1
|
||||
movdqa 32(%esp), %xmm2
|
||||
movdqa 48(%esp), %xmm3
|
||||
movdqa 64(%esp), %xmm4
|
||||
movdqa 80(%esp), %xmm5
|
||||
movdqa 96(%esp), %xmm6
|
||||
movdqa 112(%esp), %xmm7
|
||||
movd %xmm4, %edx
|
||||
andl $1023, %edx
|
||||
shll $7, %edx
|
||||
|
@ -789,14 +787,6 @@ xmm_scrypt_core_loop2:
|
|||
pxor 16(%esi, %edx), %xmm1
|
||||
pxor 32(%esi, %edx), %xmm2
|
||||
pxor 48(%esi, %edx), %xmm3
|
||||
pxor 64(%esi, %edx), %xmm4
|
||||
pxor 80(%esi, %edx), %xmm5
|
||||
pxor 96(%esi, %edx), %xmm6
|
||||
pxor 112(%esi, %edx), %xmm7
|
||||
movdqa %xmm4, 64(%esp)
|
||||
movdqa %xmm5, 80(%esp)
|
||||
movdqa %xmm6, 96(%esp)
|
||||
movdqa %xmm7, 112(%esp)
|
||||
|
||||
pxor %xmm4, %xmm0
|
||||
pxor %xmm5, %xmm1
|
||||
|
@ -816,27 +806,34 @@ xmm_scrypt_core_loop2:
|
|||
movdqa %xmm2, 32(%esp)
|
||||
movdqa %xmm3, 48(%esp)
|
||||
|
||||
pxor 64(%esi, %edx), %xmm0
|
||||
pxor 80(%esi, %edx), %xmm1
|
||||
pxor 96(%esi, %edx), %xmm2
|
||||
pxor 112(%esi, %edx), %xmm3
|
||||
pxor 64(%esp), %xmm0
|
||||
pxor 80(%esp), %xmm1
|
||||
pxor 96(%esp), %xmm2
|
||||
pxor 112(%esp), %xmm3
|
||||
pxor %xmm6, %xmm2
|
||||
pxor %xmm7, %xmm3
|
||||
movdqa %xmm0, 64(%esp)
|
||||
movdqa %xmm1, 80(%esp)
|
||||
movdqa %xmm2, 96(%esp)
|
||||
movdqa %xmm3, 112(%esp)
|
||||
movdqa %xmm2, %xmm6
|
||||
movdqa %xmm3, %xmm7
|
||||
xmm_salsa8_core
|
||||
paddd 64(%esp), %xmm0
|
||||
paddd 80(%esp), %xmm1
|
||||
paddd 96(%esp), %xmm2
|
||||
paddd 112(%esp), %xmm3
|
||||
paddd %xmm2, %xmm6
|
||||
paddd %xmm3, %xmm7
|
||||
movdqa %xmm0, %xmm4
|
||||
movdqa %xmm1, %xmm5
|
||||
movdqa %xmm0, 64(%esp)
|
||||
movdqa %xmm1, 80(%esp)
|
||||
movdqa %xmm2, 96(%esp)
|
||||
movdqa %xmm3, 112(%esp)
|
||||
|
||||
subl $1, %ecx
|
||||
ja xmm_scrypt_core_loop2
|
||||
|
||||
movdqa %xmm6, 96(%esp)
|
||||
movdqa %xmm7, 112(%esp)
|
||||
|
||||
# re-shuffle 1st block back
|
||||
movl 60(%esp), %edx
|
||||
movl 44(%esp), %ecx
|
||||
|
|
5
scrypt.c
5
scrypt.c
|
@ -296,7 +296,6 @@ PBKDF2_SHA256_80_128_32(uint32_t *tstate, uint32_t *ostate, const uint32_t *pass
|
|||
{
|
||||
static const uint32_t ihash_finalblk[16] = {0x00000001,0x80000000,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0x00000620};
|
||||
uint32_t pad[16];
|
||||
uint32_t i;
|
||||
|
||||
SHA256_Transform(tstate, salt, 1);
|
||||
SHA256_Transform(tstate, salt+16, 1);
|
||||
|
@ -305,9 +304,7 @@ PBKDF2_SHA256_80_128_32(uint32_t *tstate, uint32_t *ostate, const uint32_t *pass
|
|||
memcpy(pad+8, outerpad, 32);
|
||||
|
||||
SHA256_Transform(ostate, pad, 0);
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
output[i] = byteswap(ostate[i]);
|
||||
byteswap_vec(output, ostate, 8);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue