General optimizations for scrypt on x86-64

This commit is contained in:
pooler 2012-06-04 00:15:32 +02:00
parent eb808402f2
commit 1608a0f1e4

View file

@ -1048,62 +1048,58 @@ scrypt_core_3way_avx:
scrypt_shuffle %rdi, 256, %rsp, 256
scrypt_shuffle %rdi, 320, %rsp, 320
movdqa 64(%rsp), %xmm0
movdqa 80(%rsp), %xmm1
movdqa 96(%rsp), %xmm2
movdqa 112(%rsp), %xmm3
movdqa 128+64(%rsp), %xmm8
movdqa 128+80(%rsp), %xmm9
movdqa 128+96(%rsp), %xmm10
movdqa 128+112(%rsp), %xmm11
movdqa 256+64(%rsp), %xmm12
movdqa 256+80(%rsp), %xmm13
movdqa 256+96(%rsp), %xmm14
movdqa 256+112(%rsp), %xmm15
movq %rsi, %rbx
leaq 3*131072(%rsi), %rax
scrypt_core_3way_avx_loop1:
movdqa %xmm8, %xmm12
movdqa %xmm9, %xmm13
movdqa %xmm10, %xmm14
movdqa %xmm11, %xmm15
movdqa 64(%rsp), %xmm4
movdqa 80(%rsp), %xmm5
movdqa 96(%rsp), %xmm6
movdqa 112(%rsp), %xmm7
vpxor 0(%rsp), %xmm4, %xmm0
vpxor 16(%rsp), %xmm5, %xmm1
vpxor 32(%rsp), %xmm6, %xmm2
vpxor 48(%rsp), %xmm7, %xmm3
vpxor 128+0(%rsp), %xmm12, %xmm8
vpxor 128+16(%rsp), %xmm13, %xmm9
vpxor 128+32(%rsp), %xmm14, %xmm10
vpxor 128+48(%rsp), %xmm15, %xmm11
movdqa %xmm0, 64(%rbx)
movdqa %xmm1, 80(%rbx)
movdqa %xmm2, 96(%rbx)
movdqa %xmm3, 112(%rbx)
pxor 0(%rsp), %xmm0
pxor 16(%rsp), %xmm1
pxor 32(%rsp), %xmm2
pxor 48(%rsp), %xmm3
movdqa %xmm8, 128+64(%rbx)
movdqa %xmm9, 128+80(%rbx)
movdqa %xmm10, 128+96(%rbx)
movdqa %xmm11, 128+112(%rbx)
pxor 128+0(%rsp), %xmm8
pxor 128+16(%rsp), %xmm9
pxor 128+32(%rsp), %xmm10
pxor 128+48(%rsp), %xmm11
movdqa %xmm12, 256+64(%rbx)
movdqa %xmm13, 256+80(%rbx)
movdqa %xmm14, 256+96(%rbx)
movdqa %xmm15, 256+112(%rbx)
pxor 256+0(%rsp), %xmm12
pxor 256+16(%rsp), %xmm13
pxor 256+32(%rsp), %xmm14
pxor 256+48(%rsp), %xmm15
movdqa %xmm0, 0(%rbx)
movdqa %xmm1, 16(%rbx)
movdqa %xmm2, 32(%rbx)
movdqa %xmm3, 48(%rbx)
movdqa %xmm4, 64(%rbx)
movdqa %xmm5, 80(%rbx)
movdqa %xmm6, 96(%rbx)
movdqa %xmm7, 112(%rbx)
movdqa %xmm8, 128+0(%rbx)
movdqa %xmm9, 128+16(%rbx)
movdqa %xmm10, 128+32(%rbx)
movdqa %xmm11, 128+48(%rbx)
movdqa %xmm12, 128+64(%rbx)
movdqa %xmm13, 128+80(%rbx)
movdqa %xmm14, 128+96(%rbx)
movdqa %xmm15, 128+112(%rbx)
movdqa 256+64(%rsp), %xmm4
movdqa 256+80(%rsp), %xmm5
movdqa 256+96(%rsp), %xmm6
movdqa 256+112(%rsp), %xmm7
vpxor 256+0(%rsp), %xmm4, %xmm12
vpxor 256+16(%rsp), %xmm5, %xmm13
vpxor 256+32(%rsp), %xmm6, %xmm14
vpxor 256+48(%rsp), %xmm7, %xmm15
movdqa %xmm12, 256+0(%rbx)
movdqa %xmm13, 256+16(%rbx)
movdqa %xmm14, 256+32(%rbx)
movdqa %xmm15, 256+48(%rbx)
movdqa %xmm4, 256+64(%rbx)
movdqa %xmm5, 256+80(%rbx)
movdqa %xmm6, 256+96(%rbx)
movdqa %xmm7, 256+112(%rbx)
salsa8_core_3way_avx
paddd 0(%rbx), %xmm0
@ -1131,18 +1127,18 @@ scrypt_core_3way_avx_loop1:
movdqa %xmm14, 256+32(%rsp)
movdqa %xmm15, 256+48(%rsp)
pxor 64(%rsp), %xmm0
pxor 80(%rsp), %xmm1
pxor 96(%rsp), %xmm2
pxor 112(%rsp), %xmm3
pxor 128+64(%rsp), %xmm8
pxor 128+80(%rsp), %xmm9
pxor 128+96(%rsp), %xmm10
pxor 128+112(%rsp), %xmm11
pxor 256+64(%rsp), %xmm12
pxor 256+80(%rsp), %xmm13
pxor 256+96(%rsp), %xmm14
pxor 256+112(%rsp), %xmm15
pxor 64(%rbx), %xmm0
pxor 80(%rbx), %xmm1
pxor 96(%rbx), %xmm2
pxor 112(%rbx), %xmm3
pxor 128+64(%rbx), %xmm8
pxor 128+80(%rbx), %xmm9
pxor 128+96(%rbx), %xmm10
pxor 128+112(%rbx), %xmm11
pxor 256+64(%rbx), %xmm12
pxor 256+80(%rbx), %xmm13
pxor 256+96(%rbx), %xmm14
pxor 256+112(%rbx), %xmm15
movdqa %xmm0, 64(%rsp)
movdqa %xmm1, 80(%rsp)
movdqa %xmm2, 96(%rsp)
@ -1168,6 +1164,11 @@ scrypt_core_3way_avx_loop1:
paddd 256+80(%rsp), %xmm13
paddd 256+96(%rsp), %xmm14
paddd 256+112(%rsp), %xmm15
addq $3*128, %rbx
cmpq %rax, %rbx
jne scrypt_core_3way_avx_loop1
movdqa %xmm0, 64(%rsp)
movdqa %xmm1, 80(%rsp)
movdqa %xmm2, 96(%rsp)
@ -1181,39 +1182,32 @@ scrypt_core_3way_avx_loop1:
movdqa %xmm14, 256+96(%rsp)
movdqa %xmm15, 256+112(%rsp)
addq $3*128, %rbx
cmpq %rax, %rbx
jne scrypt_core_3way_avx_loop1
movq $1024, %rcx
.p2align 4
scrypt_core_3way_avx_loop2:
movl 64(%rsp), %ebp
movd %xmm0, %ebp
movd %xmm8, %ebx
movd %xmm12, %eax
pxor 0(%rsp), %xmm0
pxor 16(%rsp), %xmm1
pxor 32(%rsp), %xmm2
pxor 48(%rsp), %xmm3
pxor 128+0(%rsp), %xmm8
pxor 128+16(%rsp), %xmm9
pxor 128+32(%rsp), %xmm10
pxor 128+48(%rsp), %xmm11
pxor 256+0(%rsp), %xmm12
pxor 256+16(%rsp), %xmm13
pxor 256+32(%rsp), %xmm14
pxor 256+48(%rsp), %xmm15
andl $1023, %ebp
leaq (%rbp, %rbp, 2), %rbp
movl 128+64(%rsp), %ebx
shll $7, %ebp
movl 256+64(%rsp), %eax
andl $1023, %ebx
leaq (%rbx, %rbx, 2), %rbx
leaq 1(%rbx, %rbx, 2), %rbx
shll $7, %ebx
andl $1023, %eax
leaq 2(%rax, %rax, 2), %rax
shll $7, %eax
addl $128, %ebx
andl $131071, %eax
leaq (%rax, %rax, 2), %rax
addl $256, %eax
movdqa 0(%rsp), %xmm0
movdqa 16(%rsp), %xmm1
movdqa 32(%rsp), %xmm2
movdqa 48(%rsp), %xmm3
movdqa 128+0(%rsp), %xmm8
movdqa 128+16(%rsp), %xmm9
movdqa 128+32(%rsp), %xmm10
movdqa 128+48(%rsp), %xmm11
movdqa 256+0(%rsp), %xmm12
movdqa 256+16(%rsp), %xmm13
movdqa 256+32(%rsp), %xmm14
movdqa 256+48(%rsp), %xmm15
pxor 0(%rsi, %rbp), %xmm0
pxor 16(%rsi, %rbp), %xmm1
pxor 32(%rsi, %rbp), %xmm2
@ -1227,18 +1221,6 @@ scrypt_core_3way_avx_loop2:
pxor 32(%rsi, %rax), %xmm14
pxor 48(%rsi, %rax), %xmm15
pxor 64(%rsp), %xmm0
pxor 80(%rsp), %xmm1
pxor 96(%rsp), %xmm2
pxor 112(%rsp), %xmm3
pxor 128+64(%rsp), %xmm8
pxor 128+80(%rsp), %xmm9
pxor 128+96(%rsp), %xmm10
pxor 128+112(%rsp), %xmm11
pxor 256+64(%rsp), %xmm12
pxor 256+80(%rsp), %xmm13
pxor 256+96(%rsp), %xmm14
pxor 256+112(%rsp), %xmm15
movdqa %xmm0, 0(%rsp)
movdqa %xmm1, 16(%rsp)
movdqa %xmm2, 32(%rsp)
@ -1469,63 +1451,58 @@ scrypt_core_3way_xop:
scrypt_shuffle %rdi, 256, %rsp, 256
scrypt_shuffle %rdi, 320, %rsp, 320
movdqa 64(%rsp), %xmm0
movdqa 80(%rsp), %xmm1
movdqa 96(%rsp), %xmm2
movdqa 112(%rsp), %xmm3
movdqa 128+64(%rsp), %xmm8
movdqa 128+80(%rsp), %xmm9
movdqa 128+96(%rsp), %xmm10
movdqa 128+112(%rsp), %xmm11
movdqa 256+64(%rsp), %xmm12
movdqa 256+80(%rsp), %xmm13
movdqa 256+96(%rsp), %xmm14
movdqa 256+112(%rsp), %xmm15
movq %rsi, %rbx
leaq 3*131072(%rsi), %rax
.p2align 4
scrypt_core_3way_xop_loop1:
movdqa %xmm8, %xmm12
movdqa %xmm9, %xmm13
movdqa %xmm10, %xmm14
movdqa %xmm11, %xmm15
movdqa 64(%rsp), %xmm4
movdqa 80(%rsp), %xmm5
movdqa 96(%rsp), %xmm6
movdqa 112(%rsp), %xmm7
vpxor 0(%rsp), %xmm4, %xmm0
vpxor 16(%rsp), %xmm5, %xmm1
vpxor 32(%rsp), %xmm6, %xmm2
vpxor 48(%rsp), %xmm7, %xmm3
vpxor 128+0(%rsp), %xmm12, %xmm8
vpxor 128+16(%rsp), %xmm13, %xmm9
vpxor 128+32(%rsp), %xmm14, %xmm10
vpxor 128+48(%rsp), %xmm15, %xmm11
movdqa %xmm0, 64(%rbx)
movdqa %xmm1, 80(%rbx)
movdqa %xmm2, 96(%rbx)
movdqa %xmm3, 112(%rbx)
pxor 0(%rsp), %xmm0
pxor 16(%rsp), %xmm1
pxor 32(%rsp), %xmm2
pxor 48(%rsp), %xmm3
movdqa %xmm8, 128+64(%rbx)
movdqa %xmm9, 128+80(%rbx)
movdqa %xmm10, 128+96(%rbx)
movdqa %xmm11, 128+112(%rbx)
pxor 128+0(%rsp), %xmm8
pxor 128+16(%rsp), %xmm9
pxor 128+32(%rsp), %xmm10
pxor 128+48(%rsp), %xmm11
movdqa %xmm12, 256+64(%rbx)
movdqa %xmm13, 256+80(%rbx)
movdqa %xmm14, 256+96(%rbx)
movdqa %xmm15, 256+112(%rbx)
pxor 256+0(%rsp), %xmm12
pxor 256+16(%rsp), %xmm13
pxor 256+32(%rsp), %xmm14
pxor 256+48(%rsp), %xmm15
movdqa %xmm0, 0(%rbx)
movdqa %xmm1, 16(%rbx)
movdqa %xmm2, 32(%rbx)
movdqa %xmm3, 48(%rbx)
movdqa %xmm4, 64(%rbx)
movdqa %xmm5, 80(%rbx)
movdqa %xmm6, 96(%rbx)
movdqa %xmm7, 112(%rbx)
movdqa %xmm8, 128+0(%rbx)
movdqa %xmm9, 128+16(%rbx)
movdqa %xmm10, 128+32(%rbx)
movdqa %xmm11, 128+48(%rbx)
movdqa %xmm12, 128+64(%rbx)
movdqa %xmm13, 128+80(%rbx)
movdqa %xmm14, 128+96(%rbx)
movdqa %xmm15, 128+112(%rbx)
movdqa 256+64(%rsp), %xmm4
movdqa 256+80(%rsp), %xmm5
movdqa 256+96(%rsp), %xmm6
movdqa 256+112(%rsp), %xmm7
vpxor 256+0(%rsp), %xmm4, %xmm12
vpxor 256+16(%rsp), %xmm5, %xmm13
vpxor 256+32(%rsp), %xmm6, %xmm14
vpxor 256+48(%rsp), %xmm7, %xmm15
movdqa %xmm12, 256+0(%rbx)
movdqa %xmm13, 256+16(%rbx)
movdqa %xmm14, 256+32(%rbx)
movdqa %xmm15, 256+48(%rbx)
movdqa %xmm4, 256+64(%rbx)
movdqa %xmm5, 256+80(%rbx)
movdqa %xmm6, 256+96(%rbx)
movdqa %xmm7, 256+112(%rbx)
salsa8_core_3way_xop
paddd 0(%rbx), %xmm0
@ -1553,18 +1530,18 @@ scrypt_core_3way_xop_loop1:
movdqa %xmm14, 256+32(%rsp)
movdqa %xmm15, 256+48(%rsp)
pxor 64(%rsp), %xmm0
pxor 80(%rsp), %xmm1
pxor 96(%rsp), %xmm2
pxor 112(%rsp), %xmm3
pxor 128+64(%rsp), %xmm8
pxor 128+80(%rsp), %xmm9
pxor 128+96(%rsp), %xmm10
pxor 128+112(%rsp), %xmm11
pxor 256+64(%rsp), %xmm12
pxor 256+80(%rsp), %xmm13
pxor 256+96(%rsp), %xmm14
pxor 256+112(%rsp), %xmm15
pxor 64(%rbx), %xmm0
pxor 80(%rbx), %xmm1
pxor 96(%rbx), %xmm2
pxor 112(%rbx), %xmm3
pxor 128+64(%rbx), %xmm8
pxor 128+80(%rbx), %xmm9
pxor 128+96(%rbx), %xmm10
pxor 128+112(%rbx), %xmm11
pxor 256+64(%rbx), %xmm12
pxor 256+80(%rbx), %xmm13
pxor 256+96(%rbx), %xmm14
pxor 256+112(%rbx), %xmm15
movdqa %xmm0, 64(%rsp)
movdqa %xmm1, 80(%rsp)
movdqa %xmm2, 96(%rsp)
@ -1590,6 +1567,11 @@ scrypt_core_3way_xop_loop1:
paddd 256+80(%rsp), %xmm13
paddd 256+96(%rsp), %xmm14
paddd 256+112(%rsp), %xmm15
addq $3*128, %rbx
cmpq %rax, %rbx
jne scrypt_core_3way_xop_loop1
movdqa %xmm0, 64(%rsp)
movdqa %xmm1, 80(%rsp)
movdqa %xmm2, 96(%rsp)
@ -1603,39 +1585,32 @@ scrypt_core_3way_xop_loop1:
movdqa %xmm14, 256+96(%rsp)
movdqa %xmm15, 256+112(%rsp)
addq $3*128, %rbx
cmpq %rax, %rbx
jne scrypt_core_3way_xop_loop1
movq $1024, %rcx
.p2align 4
scrypt_core_3way_xop_loop2:
movl 64(%rsp), %ebp
movd %xmm0, %ebp
movd %xmm8, %ebx
movd %xmm12, %eax
pxor 0(%rsp), %xmm0
pxor 16(%rsp), %xmm1
pxor 32(%rsp), %xmm2
pxor 48(%rsp), %xmm3
pxor 128+0(%rsp), %xmm8
pxor 128+16(%rsp), %xmm9
pxor 128+32(%rsp), %xmm10
pxor 128+48(%rsp), %xmm11
pxor 256+0(%rsp), %xmm12
pxor 256+16(%rsp), %xmm13
pxor 256+32(%rsp), %xmm14
pxor 256+48(%rsp), %xmm15
andl $1023, %ebp
leaq (%rbp, %rbp, 2), %rbp
movl 128+64(%rsp), %ebx
shll $7, %ebp
movl 256+64(%rsp), %eax
andl $1023, %ebx
leaq (%rbx, %rbx, 2), %rbx
leaq 1(%rbx, %rbx, 2), %rbx
shll $7, %ebx
andl $1023, %eax
leaq 2(%rax, %rax, 2), %rax
shll $7, %eax
addl $128, %ebx
andl $131071, %eax
leaq (%rax, %rax, 2), %rax
addl $256, %eax
movdqa 0(%rsp), %xmm0
movdqa 16(%rsp), %xmm1
movdqa 32(%rsp), %xmm2
movdqa 48(%rsp), %xmm3
movdqa 128+0(%rsp), %xmm8
movdqa 128+16(%rsp), %xmm9
movdqa 128+32(%rsp), %xmm10
movdqa 128+48(%rsp), %xmm11
movdqa 256+0(%rsp), %xmm12
movdqa 256+16(%rsp), %xmm13
movdqa 256+32(%rsp), %xmm14
movdqa 256+48(%rsp), %xmm15
pxor 0(%rsi, %rbp), %xmm0
pxor 16(%rsi, %rbp), %xmm1
pxor 32(%rsi, %rbp), %xmm2
@ -1649,18 +1624,6 @@ scrypt_core_3way_xop_loop2:
pxor 32(%rsi, %rax), %xmm14
pxor 48(%rsi, %rax), %xmm15
pxor 64(%rsp), %xmm0
pxor 80(%rsp), %xmm1
pxor 96(%rsp), %xmm2
pxor 112(%rsp), %xmm3
pxor 128+64(%rsp), %xmm8
pxor 128+80(%rsp), %xmm9
pxor 128+96(%rsp), %xmm10
pxor 128+112(%rsp), %xmm11
pxor 256+64(%rsp), %xmm12
pxor 256+80(%rsp), %xmm13
pxor 256+96(%rsp), %xmm14
pxor 256+112(%rsp), %xmm15
movdqa %xmm0, 0(%rsp)
movdqa %xmm1, 16(%rsp)
movdqa %xmm2, 32(%rsp)
@ -1988,74 +1951,58 @@ scrypt_core_3way_xmm:
scrypt_shuffle %rdi, 256, %rsp, 256
scrypt_shuffle %rdi, 320, %rsp, 320
movdqa 64(%rsp), %xmm0
movdqa 80(%rsp), %xmm1
movdqa 96(%rsp), %xmm2
movdqa 112(%rsp), %xmm3
movdqa 128+64(%rsp), %xmm8
movdqa 128+80(%rsp), %xmm9
movdqa 128+96(%rsp), %xmm10
movdqa 128+112(%rsp), %xmm11
movdqa 256+64(%rsp), %xmm12
movdqa 256+80(%rsp), %xmm13
movdqa 256+96(%rsp), %xmm14
movdqa 256+112(%rsp), %xmm15
movq %rsi, %rbx
leaq 3*131072(%rsi), %rax
scrypt_core_3way_xmm_loop1:
movdqa %xmm8, %xmm12
movdqa %xmm9, %xmm13
movdqa %xmm10, %xmm14
movdqa %xmm11, %xmm15
movdqa 0(%rsp), %xmm0
movdqa 16(%rsp), %xmm1
movdqa 32(%rsp), %xmm2
movdqa 48(%rsp), %xmm3
movdqa 64(%rsp), %xmm4
movdqa 80(%rsp), %xmm5
movdqa 96(%rsp), %xmm6
movdqa 112(%rsp), %xmm7
movdqa 128+0(%rsp), %xmm8
movdqa 128+16(%rsp), %xmm9
movdqa 128+32(%rsp), %xmm10
movdqa 128+48(%rsp), %xmm11
pxor %xmm4, %xmm0
pxor %xmm5, %xmm1
pxor %xmm6, %xmm2
pxor %xmm7, %xmm3
movdqa %xmm0, 64(%rbx)
movdqa %xmm1, 80(%rbx)
movdqa %xmm2, 96(%rbx)
movdqa %xmm3, 112(%rbx)
pxor 0(%rsp), %xmm0
pxor 16(%rsp), %xmm1
pxor 32(%rsp), %xmm2
pxor 48(%rsp), %xmm3
movdqa %xmm8, 128+64(%rbx)
movdqa %xmm9, 128+80(%rbx)
movdqa %xmm10, 128+96(%rbx)
movdqa %xmm11, 128+112(%rbx)
pxor 128+0(%rsp), %xmm8
pxor 128+16(%rsp), %xmm9
pxor 128+32(%rsp), %xmm10
pxor 128+48(%rsp), %xmm11
movdqa %xmm12, 256+64(%rbx)
movdqa %xmm13, 256+80(%rbx)
movdqa %xmm14, 256+96(%rbx)
movdqa %xmm15, 256+112(%rbx)
pxor 256+0(%rsp), %xmm12
pxor 256+16(%rsp), %xmm13
pxor 256+32(%rsp), %xmm14
pxor 256+48(%rsp), %xmm15
movdqa %xmm0, 0(%rbx)
movdqa %xmm1, 16(%rbx)
movdqa %xmm2, 32(%rbx)
movdqa %xmm3, 48(%rbx)
movdqa %xmm4, 64(%rbx)
movdqa %xmm5, 80(%rbx)
movdqa %xmm6, 96(%rbx)
movdqa %xmm7, 112(%rbx)
pxor %xmm12, %xmm8
pxor %xmm13, %xmm9
pxor %xmm14, %xmm10
pxor %xmm15, %xmm11
movdqa %xmm8, 128+0(%rbx)
movdqa %xmm9, 128+16(%rbx)
movdqa %xmm10, 128+32(%rbx)
movdqa %xmm11, 128+48(%rbx)
movdqa %xmm12, 128+64(%rbx)
movdqa %xmm13, 128+80(%rbx)
movdqa %xmm14, 128+96(%rbx)
movdqa %xmm15, 128+112(%rbx)
movdqa 256+0(%rsp), %xmm12
movdqa 256+16(%rsp), %xmm13
movdqa 256+32(%rsp), %xmm14
movdqa 256+48(%rsp), %xmm15
movdqa 256+64(%rsp), %xmm4
movdqa 256+80(%rsp), %xmm5
movdqa 256+96(%rsp), %xmm6
movdqa 256+112(%rsp), %xmm7
pxor %xmm4, %xmm12
pxor %xmm5, %xmm13
pxor %xmm6, %xmm14
pxor %xmm7, %xmm15
movdqa %xmm12, 256+0(%rbx)
movdqa %xmm13, 256+16(%rbx)
movdqa %xmm14, 256+32(%rbx)
movdqa %xmm15, 256+48(%rbx)
movdqa %xmm4, 256+64(%rbx)
movdqa %xmm5, 256+80(%rbx)
movdqa %xmm6, 256+96(%rbx)
movdqa %xmm7, 256+112(%rbx)
salsa8_core_3way_xmm
paddd 0(%rbx), %xmm0
@ -2083,18 +2030,18 @@ scrypt_core_3way_xmm_loop1:
movdqa %xmm14, 256+32(%rsp)
movdqa %xmm15, 256+48(%rsp)
pxor 64(%rsp), %xmm0
pxor 80(%rsp), %xmm1
pxor 96(%rsp), %xmm2
pxor 112(%rsp), %xmm3
pxor 128+64(%rsp), %xmm8
pxor 128+80(%rsp), %xmm9
pxor 128+96(%rsp), %xmm10
pxor 128+112(%rsp), %xmm11
pxor 256+64(%rsp), %xmm12
pxor 256+80(%rsp), %xmm13
pxor 256+96(%rsp), %xmm14
pxor 256+112(%rsp), %xmm15
pxor 64(%rbx), %xmm0
pxor 80(%rbx), %xmm1
pxor 96(%rbx), %xmm2
pxor 112(%rbx), %xmm3
pxor 128+64(%rbx), %xmm8
pxor 128+80(%rbx), %xmm9
pxor 128+96(%rbx), %xmm10
pxor 128+112(%rbx), %xmm11
pxor 256+64(%rbx), %xmm12
pxor 256+80(%rbx), %xmm13
pxor 256+96(%rbx), %xmm14
pxor 256+112(%rbx), %xmm15
movdqa %xmm0, 64(%rsp)
movdqa %xmm1, 80(%rsp)
movdqa %xmm2, 96(%rsp)
@ -2120,6 +2067,11 @@ scrypt_core_3way_xmm_loop1:
paddd 256+80(%rsp), %xmm13
paddd 256+96(%rsp), %xmm14
paddd 256+112(%rsp), %xmm15
addq $3*128, %rbx
cmpq %rax, %rbx
jne scrypt_core_3way_xmm_loop1
movdqa %xmm0, 64(%rsp)
movdqa %xmm1, 80(%rsp)
movdqa %xmm2, 96(%rsp)
@ -2133,39 +2085,32 @@ scrypt_core_3way_xmm_loop1:
movdqa %xmm14, 256+96(%rsp)
movdqa %xmm15, 256+112(%rsp)
addq $3*128, %rbx
cmpq %rax, %rbx
jne scrypt_core_3way_xmm_loop1
movq $1024, %rcx
.p2align 4
scrypt_core_3way_xmm_loop2:
movl 64(%rsp), %ebp
movd %xmm0, %ebp
movd %xmm8, %ebx
movd %xmm12, %eax
pxor 0(%rsp), %xmm0
pxor 16(%rsp), %xmm1
pxor 32(%rsp), %xmm2
pxor 48(%rsp), %xmm3
pxor 128+0(%rsp), %xmm8
pxor 128+16(%rsp), %xmm9
pxor 128+32(%rsp), %xmm10
pxor 128+48(%rsp), %xmm11
pxor 256+0(%rsp), %xmm12
pxor 256+16(%rsp), %xmm13
pxor 256+32(%rsp), %xmm14
pxor 256+48(%rsp), %xmm15
andl $1023, %ebp
leaq (%rbp, %rbp, 2), %rbp
movl 128+64(%rsp), %ebx
shll $7, %ebp
movl 256+64(%rsp), %eax
andl $1023, %ebx
leaq (%rbx, %rbx, 2), %rbx
leaq 1(%rbx, %rbx, 2), %rbx
shll $7, %ebx
andl $1023, %eax
leaq 2(%rax, %rax, 2), %rax
shll $7, %eax
addl $128, %ebx
andl $131071, %eax
leaq (%rax, %rax, 2), %rax
addl $256, %eax
movdqa 0(%rsp), %xmm0
movdqa 16(%rsp), %xmm1
movdqa 32(%rsp), %xmm2
movdqa 48(%rsp), %xmm3
movdqa 128+0(%rsp), %xmm8
movdqa 128+16(%rsp), %xmm9
movdqa 128+32(%rsp), %xmm10
movdqa 128+48(%rsp), %xmm11
movdqa 256+0(%rsp), %xmm12
movdqa 256+16(%rsp), %xmm13
movdqa 256+32(%rsp), %xmm14
movdqa 256+48(%rsp), %xmm15
pxor 0(%rsi, %rbp), %xmm0
pxor 16(%rsi, %rbp), %xmm1
pxor 32(%rsi, %rbp), %xmm2
@ -2179,18 +2124,6 @@ scrypt_core_3way_xmm_loop2:
pxor 32(%rsi, %rax), %xmm14
pxor 48(%rsi, %rax), %xmm15
pxor 64(%rsp), %xmm0
pxor 80(%rsp), %xmm1
pxor 96(%rsp), %xmm2
pxor 112(%rsp), %xmm3
pxor 128+64(%rsp), %xmm8
pxor 128+80(%rsp), %xmm9
pxor 128+96(%rsp), %xmm10
pxor 128+112(%rsp), %xmm11
pxor 256+64(%rsp), %xmm12
pxor 256+80(%rsp), %xmm13
pxor 256+96(%rsp), %xmm14
pxor 256+112(%rsp), %xmm15
movdqa %xmm0, 0(%rsp)
movdqa %xmm1, 16(%rsp)
movdqa %xmm2, 32(%rsp)