hrss: use less stack space.

The stack consumption of the HRSS functions is causing issues in
stack-constrained environments. Therefore allocate many variables on the
heap. This means that several HRSS_ functions now allocate, and thus can
fail, where they couldn't before. Callers that ignore the return value
and don't have crash-on-failure mallocs will still be safe, although
things will fail to decrypt later on.

Somehow, this actually makes key generation _faster_ on my machine. (I
don't know. Better alignment? Fewer L1 collisions?) The other operations
are slightly slower, as expected.

Before:

Did 17390 HRSS generate operations in 3054088us (5694.0 ops/sec)
Did 225000 HRSS encap operations in 3000512us (74987.2 ops/sec)
Did 87000 HRSS decap operations in 3014525us (28860.3 ops/sec)

After:

Did 21300 HRSS generate operations in 3026637us (7037.5 ops/sec)
Did 221000 HRSS encap operations in 3008911us (73448.5 ops/sec)
Did 84000 HRSS decap operations in 3007622us (27929.0 ops/sec)

Change-Id: I2312df8909af7d8d250c7c483c65038123f21ad9
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/48345
Commit-Queue: Adam Langley <agl@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/crypto/hrss/asm/poly_rq_mul.S b/crypto/hrss/asm/poly_rq_mul.S
index 835d716..53ce47c 100644
--- a/crypto/hrss/asm/poly_rq_mul.S
+++ b/crypto/hrss/asm/poly_rq_mul.S
@@ -327,15 +327,21 @@
 .cfi_def_cfa_register rbp
 push %r12
 .cfi_offset r12, -24
-mov %rsp, %r8
-andq $-32, %rsp
-subq $6144, %rsp
-mov %rsp, %rax
-subq $6144, %rsp
-mov %rsp, %r11
-subq $12288, %rsp
-mov %rsp, %r12
-subq $512, %rsp
+# This function originally used a significant amount of stack space. As an
+# alternative, the needed scratch space is now passed in as the 4th argument.
+# The amount of scratch space used must thus be kept in sync with
+# POLY_MUL_RQ_SCRATCH_SPACE in internal.h.
+#
+# Setting RSP to point into the given scratch space upsets the ABI tests
+# therefore all references to RSP are switched to R8.
+mov %rcx, %r8
+addq $6144+12288+512+9408+32, %r8
+mov %r8, %rax
+subq $6144, %r8
+mov %r8, %r11
+subq $12288, %r8
+mov %r8, %r12
+subq $512, %r8
 vmovdqa const3(%rip), %ymm3
 vmovdqu 0(%rsi), %ymm0
 vmovdqu 88(%rsi), %ymm1
@@ -377,38 +383,38 @@
 vmovdqa %ymm15, 5856(%rax)
 vpaddw %ymm14, %ymm15, %ymm14
 vmovdqa %ymm14, 5952(%rax)
-vmovdqa %ymm0, 0(%rsp)
-vmovdqa %ymm1, 32(%rsp)
-vmovdqa %ymm2, 64(%rsp)
-vmovdqa %ymm12, 96(%rsp)
-vmovdqa %ymm8, 128(%rsp)
-vmovdqa %ymm9, 160(%rsp)
-vmovdqa %ymm10, 192(%rsp)
-vmovdqa %ymm11, 224(%rsp)
+vmovdqa %ymm0, 0(%r8)
+vmovdqa %ymm1, 32(%r8)
+vmovdqa %ymm2, 64(%r8)
+vmovdqa %ymm12, 96(%r8)
+vmovdqa %ymm8, 128(%r8)
+vmovdqa %ymm9, 160(%r8)
+vmovdqa %ymm10, 192(%r8)
+vmovdqa %ymm11, 224(%r8)
 vmovdqu 704(%rsi), %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm1
-vpaddw 128(%rsp), %ymm4, %ymm2
+vpaddw 0(%r8), %ymm0, %ymm1
+vpaddw 128(%r8), %ymm4, %ymm2
 vpaddw %ymm2, %ymm1, %ymm8
 vpsubw %ymm2, %ymm1, %ymm12
-vmovdqa %ymm0, 256(%rsp)
+vmovdqa %ymm0, 256(%r8)
 vmovdqu 792(%rsi), %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm1
-vpaddw 160(%rsp), %ymm5, %ymm2
+vpaddw 32(%r8), %ymm0, %ymm1
+vpaddw 160(%r8), %ymm5, %ymm2
 vpaddw %ymm2, %ymm1, %ymm9
 vpsubw %ymm2, %ymm1, %ymm13
-vmovdqa %ymm0, 288(%rsp)
+vmovdqa %ymm0, 288(%r8)
 vmovdqu 880(%rsi), %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm1
-vpaddw 192(%rsp), %ymm6, %ymm2
+vpaddw 64(%r8), %ymm0, %ymm1
+vpaddw 192(%r8), %ymm6, %ymm2
 vpaddw %ymm2, %ymm1, %ymm10
 vpsubw %ymm2, %ymm1, %ymm14
-vmovdqa %ymm0, 320(%rsp)
+vmovdqa %ymm0, 320(%r8)
 vmovdqu 968(%rsi), %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm1
-vpaddw 224(%rsp), %ymm7, %ymm2
+vpaddw 96(%r8), %ymm0, %ymm1
+vpaddw 224(%r8), %ymm7, %ymm2
 vpaddw %ymm2, %ymm1, %ymm11
 vpsubw %ymm2, %ymm1, %ymm15
-vmovdqa %ymm0, 352(%rsp)
+vmovdqa %ymm0, 352(%r8)
 vmovdqa %ymm8, 864(%rax)
 vmovdqa %ymm9, 960(%rax)
 vpaddw %ymm8, %ymm9, %ymm0
@@ -437,35 +443,35 @@
 vmovdqa %ymm1, 2400(%rax)
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 2496(%rax)
-vmovdqa 256(%rsp), %ymm0
+vmovdqa 256(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm0
+vpaddw 0(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm4, %ymm1
-vpaddw 128(%rsp), %ymm1, %ymm1
+vpaddw 128(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm8
 vpsubw %ymm1, %ymm0, %ymm12
-vmovdqa 288(%rsp), %ymm0
+vmovdqa 288(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm0
+vpaddw 32(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm5, %ymm1
-vpaddw 160(%rsp), %ymm1, %ymm1
+vpaddw 160(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm9
 vpsubw %ymm1, %ymm0, %ymm13
-vmovdqa 320(%rsp), %ymm0
+vmovdqa 320(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm0
+vpaddw 64(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm6, %ymm1
-vpaddw 192(%rsp), %ymm1, %ymm1
+vpaddw 192(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm10
 vpsubw %ymm1, %ymm0, %ymm14
-vmovdqa 352(%rsp), %ymm0
+vmovdqa 352(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm0
+vpaddw 96(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm7, %ymm1
-vpaddw 224(%rsp), %ymm1, %ymm1
+vpaddw 224(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm11
 vpsubw %ymm1, %ymm0, %ymm15
@@ -498,29 +504,29 @@
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 4224(%rax)
 vpmullw %ymm3, %ymm4, %ymm0
-vpaddw 256(%rsp), %ymm0, %ymm0
+vpaddw 256(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 128(%rsp), %ymm0, %ymm0
+vpaddw 128(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm12
+vpaddw 0(%r8), %ymm0, %ymm12
 vpmullw %ymm3, %ymm5, %ymm0
-vpaddw 288(%rsp), %ymm0, %ymm0
+vpaddw 288(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 160(%rsp), %ymm0, %ymm0
+vpaddw 160(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm13
+vpaddw 32(%r8), %ymm0, %ymm13
 vpmullw %ymm3, %ymm6, %ymm0
-vpaddw 320(%rsp), %ymm0, %ymm0
+vpaddw 320(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 192(%rsp), %ymm0, %ymm0
+vpaddw 192(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm14
+vpaddw 64(%r8), %ymm0, %ymm14
 vpmullw %ymm3, %ymm7, %ymm0
-vpaddw 352(%rsp), %ymm0, %ymm0
+vpaddw 352(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 224(%rsp), %ymm0, %ymm0
+vpaddw 224(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm15
+vpaddw 96(%r8), %ymm0, %ymm15
 vmovdqa %ymm12, 4320(%rax)
 vmovdqa %ymm13, 4416(%rax)
 vpaddw %ymm12, %ymm13, %ymm0
@@ -575,38 +581,38 @@
 vmovdqa %ymm15, 5888(%rax)
 vpaddw %ymm14, %ymm15, %ymm14
 vmovdqa %ymm14, 5984(%rax)
-vmovdqa %ymm0, 0(%rsp)
-vmovdqa %ymm1, 32(%rsp)
-vmovdqa %ymm2, 64(%rsp)
-vmovdqa %ymm12, 96(%rsp)
-vmovdqa %ymm8, 128(%rsp)
-vmovdqa %ymm9, 160(%rsp)
-vmovdqa %ymm10, 192(%rsp)
-vmovdqa %ymm11, 224(%rsp)
+vmovdqa %ymm0, 0(%r8)
+vmovdqa %ymm1, 32(%r8)
+vmovdqa %ymm2, 64(%r8)
+vmovdqa %ymm12, 96(%r8)
+vmovdqa %ymm8, 128(%r8)
+vmovdqa %ymm9, 160(%r8)
+vmovdqa %ymm10, 192(%r8)
+vmovdqa %ymm11, 224(%r8)
 vmovdqu 736(%rsi), %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm1
-vpaddw 128(%rsp), %ymm4, %ymm2
+vpaddw 0(%r8), %ymm0, %ymm1
+vpaddw 128(%r8), %ymm4, %ymm2
 vpaddw %ymm2, %ymm1, %ymm8
 vpsubw %ymm2, %ymm1, %ymm12
-vmovdqa %ymm0, 256(%rsp)
+vmovdqa %ymm0, 256(%r8)
 vmovdqu 824(%rsi), %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm1
-vpaddw 160(%rsp), %ymm5, %ymm2
+vpaddw 32(%r8), %ymm0, %ymm1
+vpaddw 160(%r8), %ymm5, %ymm2
 vpaddw %ymm2, %ymm1, %ymm9
 vpsubw %ymm2, %ymm1, %ymm13
-vmovdqa %ymm0, 288(%rsp)
+vmovdqa %ymm0, 288(%r8)
 vmovdqu 912(%rsi), %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm1
-vpaddw 192(%rsp), %ymm6, %ymm2
+vpaddw 64(%r8), %ymm0, %ymm1
+vpaddw 192(%r8), %ymm6, %ymm2
 vpaddw %ymm2, %ymm1, %ymm10
 vpsubw %ymm2, %ymm1, %ymm14
-vmovdqa %ymm0, 320(%rsp)
+vmovdqa %ymm0, 320(%r8)
 vmovdqu 1000(%rsi), %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm1
-vpaddw 224(%rsp), %ymm7, %ymm2
+vpaddw 96(%r8), %ymm0, %ymm1
+vpaddw 224(%r8), %ymm7, %ymm2
 vpaddw %ymm2, %ymm1, %ymm11
 vpsubw %ymm2, %ymm1, %ymm15
-vmovdqa %ymm0, 352(%rsp)
+vmovdqa %ymm0, 352(%r8)
 vmovdqa %ymm8, 896(%rax)
 vmovdqa %ymm9, 992(%rax)
 vpaddw %ymm8, %ymm9, %ymm0
@@ -635,35 +641,35 @@
 vmovdqa %ymm1, 2432(%rax)
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 2528(%rax)
-vmovdqa 256(%rsp), %ymm0
+vmovdqa 256(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm0
+vpaddw 0(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm4, %ymm1
-vpaddw 128(%rsp), %ymm1, %ymm1
+vpaddw 128(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm8
 vpsubw %ymm1, %ymm0, %ymm12
-vmovdqa 288(%rsp), %ymm0
+vmovdqa 288(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm0
+vpaddw 32(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm5, %ymm1
-vpaddw 160(%rsp), %ymm1, %ymm1
+vpaddw 160(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm9
 vpsubw %ymm1, %ymm0, %ymm13
-vmovdqa 320(%rsp), %ymm0
+vmovdqa 320(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm0
+vpaddw 64(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm6, %ymm1
-vpaddw 192(%rsp), %ymm1, %ymm1
+vpaddw 192(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm10
 vpsubw %ymm1, %ymm0, %ymm14
-vmovdqa 352(%rsp), %ymm0
+vmovdqa 352(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm0
+vpaddw 96(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm7, %ymm1
-vpaddw 224(%rsp), %ymm1, %ymm1
+vpaddw 224(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm11
 vpsubw %ymm1, %ymm0, %ymm15
@@ -696,29 +702,29 @@
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 4256(%rax)
 vpmullw %ymm3, %ymm4, %ymm0
-vpaddw 256(%rsp), %ymm0, %ymm0
+vpaddw 256(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 128(%rsp), %ymm0, %ymm0
+vpaddw 128(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm12
+vpaddw 0(%r8), %ymm0, %ymm12
 vpmullw %ymm3, %ymm5, %ymm0
-vpaddw 288(%rsp), %ymm0, %ymm0
+vpaddw 288(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 160(%rsp), %ymm0, %ymm0
+vpaddw 160(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm13
+vpaddw 32(%r8), %ymm0, %ymm13
 vpmullw %ymm3, %ymm6, %ymm0
-vpaddw 320(%rsp), %ymm0, %ymm0
+vpaddw 320(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 192(%rsp), %ymm0, %ymm0
+vpaddw 192(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm14
+vpaddw 64(%r8), %ymm0, %ymm14
 vpmullw %ymm3, %ymm7, %ymm0
-vpaddw 352(%rsp), %ymm0, %ymm0
+vpaddw 352(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 224(%rsp), %ymm0, %ymm0
+vpaddw 224(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm15
+vpaddw 96(%r8), %ymm0, %ymm15
 vmovdqa %ymm12, 4352(%rax)
 vmovdqa %ymm13, 4448(%rax)
 vpaddw %ymm12, %ymm13, %ymm0
@@ -774,38 +780,38 @@
 vmovdqa %ymm15, 5920(%rax)
 vpaddw %ymm14, %ymm15, %ymm14
 vmovdqa %ymm14, 6016(%rax)
-vmovdqa %ymm0, 0(%rsp)
-vmovdqa %ymm1, 32(%rsp)
-vmovdqa %ymm2, 64(%rsp)
-vmovdqa %ymm12, 96(%rsp)
-vmovdqa %ymm8, 128(%rsp)
-vmovdqa %ymm9, 160(%rsp)
-vmovdqa %ymm10, 192(%rsp)
-vmovdqa %ymm11, 224(%rsp)
+vmovdqa %ymm0, 0(%r8)
+vmovdqa %ymm1, 32(%r8)
+vmovdqa %ymm2, 64(%r8)
+vmovdqa %ymm12, 96(%r8)
+vmovdqa %ymm8, 128(%r8)
+vmovdqa %ymm9, 160(%r8)
+vmovdqa %ymm10, 192(%r8)
+vmovdqa %ymm11, 224(%r8)
 vmovdqu 768(%rsi), %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm1
-vpaddw 128(%rsp), %ymm4, %ymm2
+vpaddw 0(%r8), %ymm0, %ymm1
+vpaddw 128(%r8), %ymm4, %ymm2
 vpaddw %ymm2, %ymm1, %ymm8
 vpsubw %ymm2, %ymm1, %ymm12
-vmovdqa %ymm0, 256(%rsp)
+vmovdqa %ymm0, 256(%r8)
 vmovdqu 856(%rsi), %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm1
-vpaddw 160(%rsp), %ymm5, %ymm2
+vpaddw 32(%r8), %ymm0, %ymm1
+vpaddw 160(%r8), %ymm5, %ymm2
 vpaddw %ymm2, %ymm1, %ymm9
 vpsubw %ymm2, %ymm1, %ymm13
-vmovdqa %ymm0, 288(%rsp)
+vmovdqa %ymm0, 288(%r8)
 vmovdqu 944(%rsi), %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm1
-vpaddw 192(%rsp), %ymm6, %ymm2
+vpaddw 64(%r8), %ymm0, %ymm1
+vpaddw 192(%r8), %ymm6, %ymm2
 vpaddw %ymm2, %ymm1, %ymm10
 vpsubw %ymm2, %ymm1, %ymm14
-vmovdqa %ymm0, 320(%rsp)
+vmovdqa %ymm0, 320(%r8)
 vmovdqu 1032(%rsi), %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm1
-vpaddw 224(%rsp), %ymm7, %ymm2
+vpaddw 96(%r8), %ymm0, %ymm1
+vpaddw 224(%r8), %ymm7, %ymm2
 vpaddw %ymm2, %ymm1, %ymm11
 vpsubw %ymm2, %ymm1, %ymm15
-vmovdqa %ymm0, 352(%rsp)
+vmovdqa %ymm0, 352(%r8)
 vmovdqa %ymm8, 928(%rax)
 vmovdqa %ymm9, 1024(%rax)
 vpaddw %ymm8, %ymm9, %ymm0
@@ -834,35 +840,35 @@
 vmovdqa %ymm1, 2464(%rax)
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 2560(%rax)
-vmovdqa 256(%rsp), %ymm0
+vmovdqa 256(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm0
+vpaddw 0(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm4, %ymm1
-vpaddw 128(%rsp), %ymm1, %ymm1
+vpaddw 128(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm8
 vpsubw %ymm1, %ymm0, %ymm12
-vmovdqa 288(%rsp), %ymm0
+vmovdqa 288(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm0
+vpaddw 32(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm5, %ymm1
-vpaddw 160(%rsp), %ymm1, %ymm1
+vpaddw 160(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm9
 vpsubw %ymm1, %ymm0, %ymm13
-vmovdqa 320(%rsp), %ymm0
+vmovdqa 320(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm0
+vpaddw 64(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm6, %ymm1
-vpaddw 192(%rsp), %ymm1, %ymm1
+vpaddw 192(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm10
 vpsubw %ymm1, %ymm0, %ymm14
-vmovdqa 352(%rsp), %ymm0
+vmovdqa 352(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm0
+vpaddw 96(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm7, %ymm1
-vpaddw 224(%rsp), %ymm1, %ymm1
+vpaddw 224(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm11
 vpsubw %ymm1, %ymm0, %ymm15
@@ -895,29 +901,29 @@
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 4288(%rax)
 vpmullw %ymm3, %ymm4, %ymm0
-vpaddw 256(%rsp), %ymm0, %ymm0
+vpaddw 256(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 128(%rsp), %ymm0, %ymm0
+vpaddw 128(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm12
+vpaddw 0(%r8), %ymm0, %ymm12
 vpmullw %ymm3, %ymm5, %ymm0
-vpaddw 288(%rsp), %ymm0, %ymm0
+vpaddw 288(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 160(%rsp), %ymm0, %ymm0
+vpaddw 160(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm13
+vpaddw 32(%r8), %ymm0, %ymm13
 vpmullw %ymm3, %ymm6, %ymm0
-vpaddw 320(%rsp), %ymm0, %ymm0
+vpaddw 320(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 192(%rsp), %ymm0, %ymm0
+vpaddw 192(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm14
+vpaddw 64(%r8), %ymm0, %ymm14
 vpmullw %ymm3, %ymm7, %ymm0
-vpaddw 352(%rsp), %ymm0, %ymm0
+vpaddw 352(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 224(%rsp), %ymm0, %ymm0
+vpaddw 224(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm15
+vpaddw 96(%r8), %ymm0, %ymm15
 vmovdqa %ymm12, 4384(%rax)
 vmovdqa %ymm13, 4480(%rax)
 vpaddw %ymm12, %ymm13, %ymm0
@@ -972,38 +978,38 @@
 vmovdqa %ymm15, 5856(%r11)
 vpaddw %ymm14, %ymm15, %ymm14
 vmovdqa %ymm14, 5952(%r11)
-vmovdqa %ymm0, 0(%rsp)
-vmovdqa %ymm1, 32(%rsp)
-vmovdqa %ymm2, 64(%rsp)
-vmovdqa %ymm12, 96(%rsp)
-vmovdqa %ymm8, 128(%rsp)
-vmovdqa %ymm9, 160(%rsp)
-vmovdqa %ymm10, 192(%rsp)
-vmovdqa %ymm11, 224(%rsp)
+vmovdqa %ymm0, 0(%r8)
+vmovdqa %ymm1, 32(%r8)
+vmovdqa %ymm2, 64(%r8)
+vmovdqa %ymm12, 96(%r8)
+vmovdqa %ymm8, 128(%r8)
+vmovdqa %ymm9, 160(%r8)
+vmovdqa %ymm10, 192(%r8)
+vmovdqa %ymm11, 224(%r8)
 vmovdqu 704(%rdx), %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm1
-vpaddw 128(%rsp), %ymm4, %ymm2
+vpaddw 0(%r8), %ymm0, %ymm1
+vpaddw 128(%r8), %ymm4, %ymm2
 vpaddw %ymm2, %ymm1, %ymm8
 vpsubw %ymm2, %ymm1, %ymm12
-vmovdqa %ymm0, 256(%rsp)
+vmovdqa %ymm0, 256(%r8)
 vmovdqu 792(%rdx), %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm1
-vpaddw 160(%rsp), %ymm5, %ymm2
+vpaddw 32(%r8), %ymm0, %ymm1
+vpaddw 160(%r8), %ymm5, %ymm2
 vpaddw %ymm2, %ymm1, %ymm9
 vpsubw %ymm2, %ymm1, %ymm13
-vmovdqa %ymm0, 288(%rsp)
+vmovdqa %ymm0, 288(%r8)
 vmovdqu 880(%rdx), %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm1
-vpaddw 192(%rsp), %ymm6, %ymm2
+vpaddw 64(%r8), %ymm0, %ymm1
+vpaddw 192(%r8), %ymm6, %ymm2
 vpaddw %ymm2, %ymm1, %ymm10
 vpsubw %ymm2, %ymm1, %ymm14
-vmovdqa %ymm0, 320(%rsp)
+vmovdqa %ymm0, 320(%r8)
 vmovdqu 968(%rdx), %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm1
-vpaddw 224(%rsp), %ymm7, %ymm2
+vpaddw 96(%r8), %ymm0, %ymm1
+vpaddw 224(%r8), %ymm7, %ymm2
 vpaddw %ymm2, %ymm1, %ymm11
 vpsubw %ymm2, %ymm1, %ymm15
-vmovdqa %ymm0, 352(%rsp)
+vmovdqa %ymm0, 352(%r8)
 vmovdqa %ymm8, 864(%r11)
 vmovdqa %ymm9, 960(%r11)
 vpaddw %ymm8, %ymm9, %ymm0
@@ -1032,35 +1038,35 @@
 vmovdqa %ymm1, 2400(%r11)
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 2496(%r11)
-vmovdqa 256(%rsp), %ymm0
+vmovdqa 256(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm0
+vpaddw 0(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm4, %ymm1
-vpaddw 128(%rsp), %ymm1, %ymm1
+vpaddw 128(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm8
 vpsubw %ymm1, %ymm0, %ymm12
-vmovdqa 288(%rsp), %ymm0
+vmovdqa 288(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm0
+vpaddw 32(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm5, %ymm1
-vpaddw 160(%rsp), %ymm1, %ymm1
+vpaddw 160(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm9
 vpsubw %ymm1, %ymm0, %ymm13
-vmovdqa 320(%rsp), %ymm0
+vmovdqa 320(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm0
+vpaddw 64(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm6, %ymm1
-vpaddw 192(%rsp), %ymm1, %ymm1
+vpaddw 192(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm10
 vpsubw %ymm1, %ymm0, %ymm14
-vmovdqa 352(%rsp), %ymm0
+vmovdqa 352(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm0
+vpaddw 96(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm7, %ymm1
-vpaddw 224(%rsp), %ymm1, %ymm1
+vpaddw 224(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm11
 vpsubw %ymm1, %ymm0, %ymm15
@@ -1093,29 +1099,29 @@
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 4224(%r11)
 vpmullw %ymm3, %ymm4, %ymm0
-vpaddw 256(%rsp), %ymm0, %ymm0
+vpaddw 256(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 128(%rsp), %ymm0, %ymm0
+vpaddw 128(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm12
+vpaddw 0(%r8), %ymm0, %ymm12
 vpmullw %ymm3, %ymm5, %ymm0
-vpaddw 288(%rsp), %ymm0, %ymm0
+vpaddw 288(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 160(%rsp), %ymm0, %ymm0
+vpaddw 160(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm13
+vpaddw 32(%r8), %ymm0, %ymm13
 vpmullw %ymm3, %ymm6, %ymm0
-vpaddw 320(%rsp), %ymm0, %ymm0
+vpaddw 320(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 192(%rsp), %ymm0, %ymm0
+vpaddw 192(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm14
+vpaddw 64(%r8), %ymm0, %ymm14
 vpmullw %ymm3, %ymm7, %ymm0
-vpaddw 352(%rsp), %ymm0, %ymm0
+vpaddw 352(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 224(%rsp), %ymm0, %ymm0
+vpaddw 224(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm15
+vpaddw 96(%r8), %ymm0, %ymm15
 vmovdqa %ymm12, 4320(%r11)
 vmovdqa %ymm13, 4416(%r11)
 vpaddw %ymm12, %ymm13, %ymm0
@@ -1170,38 +1176,38 @@
 vmovdqa %ymm15, 5888(%r11)
 vpaddw %ymm14, %ymm15, %ymm14
 vmovdqa %ymm14, 5984(%r11)
-vmovdqa %ymm0, 0(%rsp)
-vmovdqa %ymm1, 32(%rsp)
-vmovdqa %ymm2, 64(%rsp)
-vmovdqa %ymm12, 96(%rsp)
-vmovdqa %ymm8, 128(%rsp)
-vmovdqa %ymm9, 160(%rsp)
-vmovdqa %ymm10, 192(%rsp)
-vmovdqa %ymm11, 224(%rsp)
+vmovdqa %ymm0, 0(%r8)
+vmovdqa %ymm1, 32(%r8)
+vmovdqa %ymm2, 64(%r8)
+vmovdqa %ymm12, 96(%r8)
+vmovdqa %ymm8, 128(%r8)
+vmovdqa %ymm9, 160(%r8)
+vmovdqa %ymm10, 192(%r8)
+vmovdqa %ymm11, 224(%r8)
 vmovdqu 736(%rdx), %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm1
-vpaddw 128(%rsp), %ymm4, %ymm2
+vpaddw 0(%r8), %ymm0, %ymm1
+vpaddw 128(%r8), %ymm4, %ymm2
 vpaddw %ymm2, %ymm1, %ymm8
 vpsubw %ymm2, %ymm1, %ymm12
-vmovdqa %ymm0, 256(%rsp)
+vmovdqa %ymm0, 256(%r8)
 vmovdqu 824(%rdx), %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm1
-vpaddw 160(%rsp), %ymm5, %ymm2
+vpaddw 32(%r8), %ymm0, %ymm1
+vpaddw 160(%r8), %ymm5, %ymm2
 vpaddw %ymm2, %ymm1, %ymm9
 vpsubw %ymm2, %ymm1, %ymm13
-vmovdqa %ymm0, 288(%rsp)
+vmovdqa %ymm0, 288(%r8)
 vmovdqu 912(%rdx), %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm1
-vpaddw 192(%rsp), %ymm6, %ymm2
+vpaddw 64(%r8), %ymm0, %ymm1
+vpaddw 192(%r8), %ymm6, %ymm2
 vpaddw %ymm2, %ymm1, %ymm10
 vpsubw %ymm2, %ymm1, %ymm14
-vmovdqa %ymm0, 320(%rsp)
+vmovdqa %ymm0, 320(%r8)
 vmovdqu 1000(%rdx), %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm1
-vpaddw 224(%rsp), %ymm7, %ymm2
+vpaddw 96(%r8), %ymm0, %ymm1
+vpaddw 224(%r8), %ymm7, %ymm2
 vpaddw %ymm2, %ymm1, %ymm11
 vpsubw %ymm2, %ymm1, %ymm15
-vmovdqa %ymm0, 352(%rsp)
+vmovdqa %ymm0, 352(%r8)
 vmovdqa %ymm8, 896(%r11)
 vmovdqa %ymm9, 992(%r11)
 vpaddw %ymm8, %ymm9, %ymm0
@@ -1230,35 +1236,35 @@
 vmovdqa %ymm1, 2432(%r11)
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 2528(%r11)
-vmovdqa 256(%rsp), %ymm0
+vmovdqa 256(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm0
+vpaddw 0(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm4, %ymm1
-vpaddw 128(%rsp), %ymm1, %ymm1
+vpaddw 128(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm8
 vpsubw %ymm1, %ymm0, %ymm12
-vmovdqa 288(%rsp), %ymm0
+vmovdqa 288(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm0
+vpaddw 32(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm5, %ymm1
-vpaddw 160(%rsp), %ymm1, %ymm1
+vpaddw 160(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm9
 vpsubw %ymm1, %ymm0, %ymm13
-vmovdqa 320(%rsp), %ymm0
+vmovdqa 320(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm0
+vpaddw 64(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm6, %ymm1
-vpaddw 192(%rsp), %ymm1, %ymm1
+vpaddw 192(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm10
 vpsubw %ymm1, %ymm0, %ymm14
-vmovdqa 352(%rsp), %ymm0
+vmovdqa 352(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm0
+vpaddw 96(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm7, %ymm1
-vpaddw 224(%rsp), %ymm1, %ymm1
+vpaddw 224(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm11
 vpsubw %ymm1, %ymm0, %ymm15
@@ -1291,29 +1297,29 @@
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 4256(%r11)
 vpmullw %ymm3, %ymm4, %ymm0
-vpaddw 256(%rsp), %ymm0, %ymm0
+vpaddw 256(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 128(%rsp), %ymm0, %ymm0
+vpaddw 128(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm12
+vpaddw 0(%r8), %ymm0, %ymm12
 vpmullw %ymm3, %ymm5, %ymm0
-vpaddw 288(%rsp), %ymm0, %ymm0
+vpaddw 288(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 160(%rsp), %ymm0, %ymm0
+vpaddw 160(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm13
+vpaddw 32(%r8), %ymm0, %ymm13
 vpmullw %ymm3, %ymm6, %ymm0
-vpaddw 320(%rsp), %ymm0, %ymm0
+vpaddw 320(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 192(%rsp), %ymm0, %ymm0
+vpaddw 192(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm14
+vpaddw 64(%r8), %ymm0, %ymm14
 vpmullw %ymm3, %ymm7, %ymm0
-vpaddw 352(%rsp), %ymm0, %ymm0
+vpaddw 352(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 224(%rsp), %ymm0, %ymm0
+vpaddw 224(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm15
+vpaddw 96(%r8), %ymm0, %ymm15
 vmovdqa %ymm12, 4352(%r11)
 vmovdqa %ymm13, 4448(%r11)
 vpaddw %ymm12, %ymm13, %ymm0
@@ -1369,38 +1375,38 @@
 vmovdqa %ymm15, 5920(%r11)
 vpaddw %ymm14, %ymm15, %ymm14
 vmovdqa %ymm14, 6016(%r11)
-vmovdqa %ymm0, 0(%rsp)
-vmovdqa %ymm1, 32(%rsp)
-vmovdqa %ymm2, 64(%rsp)
-vmovdqa %ymm12, 96(%rsp)
-vmovdqa %ymm8, 128(%rsp)
-vmovdqa %ymm9, 160(%rsp)
-vmovdqa %ymm10, 192(%rsp)
-vmovdqa %ymm11, 224(%rsp)
+vmovdqa %ymm0, 0(%r8)
+vmovdqa %ymm1, 32(%r8)
+vmovdqa %ymm2, 64(%r8)
+vmovdqa %ymm12, 96(%r8)
+vmovdqa %ymm8, 128(%r8)
+vmovdqa %ymm9, 160(%r8)
+vmovdqa %ymm10, 192(%r8)
+vmovdqa %ymm11, 224(%r8)
 vmovdqu 768(%rdx), %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm1
-vpaddw 128(%rsp), %ymm4, %ymm2
+vpaddw 0(%r8), %ymm0, %ymm1
+vpaddw 128(%r8), %ymm4, %ymm2
 vpaddw %ymm2, %ymm1, %ymm8
 vpsubw %ymm2, %ymm1, %ymm12
-vmovdqa %ymm0, 256(%rsp)
+vmovdqa %ymm0, 256(%r8)
 vmovdqu 856(%rdx), %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm1
-vpaddw 160(%rsp), %ymm5, %ymm2
+vpaddw 32(%r8), %ymm0, %ymm1
+vpaddw 160(%r8), %ymm5, %ymm2
 vpaddw %ymm2, %ymm1, %ymm9
 vpsubw %ymm2, %ymm1, %ymm13
-vmovdqa %ymm0, 288(%rsp)
+vmovdqa %ymm0, 288(%r8)
 vmovdqu 944(%rdx), %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm1
-vpaddw 192(%rsp), %ymm6, %ymm2
+vpaddw 64(%r8), %ymm0, %ymm1
+vpaddw 192(%r8), %ymm6, %ymm2
 vpaddw %ymm2, %ymm1, %ymm10
 vpsubw %ymm2, %ymm1, %ymm14
-vmovdqa %ymm0, 320(%rsp)
+vmovdqa %ymm0, 320(%r8)
 vmovdqu 1032(%rdx), %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm1
-vpaddw 224(%rsp), %ymm7, %ymm2
+vpaddw 96(%r8), %ymm0, %ymm1
+vpaddw 224(%r8), %ymm7, %ymm2
 vpaddw %ymm2, %ymm1, %ymm11
 vpsubw %ymm2, %ymm1, %ymm15
-vmovdqa %ymm0, 352(%rsp)
+vmovdqa %ymm0, 352(%r8)
 vmovdqa %ymm8, 928(%r11)
 vmovdqa %ymm9, 1024(%r11)
 vpaddw %ymm8, %ymm9, %ymm0
@@ -1429,35 +1435,35 @@
 vmovdqa %ymm1, 2464(%r11)
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 2560(%r11)
-vmovdqa 256(%rsp), %ymm0
+vmovdqa 256(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm0
+vpaddw 0(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm4, %ymm1
-vpaddw 128(%rsp), %ymm1, %ymm1
+vpaddw 128(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm8
 vpsubw %ymm1, %ymm0, %ymm12
-vmovdqa 288(%rsp), %ymm0
+vmovdqa 288(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm0
+vpaddw 32(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm5, %ymm1
-vpaddw 160(%rsp), %ymm1, %ymm1
+vpaddw 160(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm9
 vpsubw %ymm1, %ymm0, %ymm13
-vmovdqa 320(%rsp), %ymm0
+vmovdqa 320(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm0
+vpaddw 64(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm6, %ymm1
-vpaddw 192(%rsp), %ymm1, %ymm1
+vpaddw 192(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm10
 vpsubw %ymm1, %ymm0, %ymm14
-vmovdqa 352(%rsp), %ymm0
+vmovdqa 352(%r8), %ymm0
 vpsllw $2, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm0
+vpaddw 96(%r8), %ymm0, %ymm0
 vpsllw $2, %ymm7, %ymm1
-vpaddw 224(%rsp), %ymm1, %ymm1
+vpaddw 224(%r8), %ymm1, %ymm1
 vpsllw $1, %ymm1, %ymm1
 vpaddw %ymm1, %ymm0, %ymm11
 vpsubw %ymm1, %ymm0, %ymm15
@@ -1490,29 +1496,29 @@
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 4288(%r11)
 vpmullw %ymm3, %ymm4, %ymm0
-vpaddw 256(%rsp), %ymm0, %ymm0
+vpaddw 256(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 128(%rsp), %ymm0, %ymm0
+vpaddw 128(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 0(%rsp), %ymm0, %ymm12
+vpaddw 0(%r8), %ymm0, %ymm12
 vpmullw %ymm3, %ymm5, %ymm0
-vpaddw 288(%rsp), %ymm0, %ymm0
+vpaddw 288(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 160(%rsp), %ymm0, %ymm0
+vpaddw 160(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 32(%rsp), %ymm0, %ymm13
+vpaddw 32(%r8), %ymm0, %ymm13
 vpmullw %ymm3, %ymm6, %ymm0
-vpaddw 320(%rsp), %ymm0, %ymm0
+vpaddw 320(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 192(%rsp), %ymm0, %ymm0
+vpaddw 192(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 64(%rsp), %ymm0, %ymm14
+vpaddw 64(%r8), %ymm0, %ymm14
 vpmullw %ymm3, %ymm7, %ymm0
-vpaddw 352(%rsp), %ymm0, %ymm0
+vpaddw 352(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 224(%rsp), %ymm0, %ymm0
+vpaddw 224(%r8), %ymm0, %ymm0
 vpmullw %ymm3, %ymm0, %ymm0
-vpaddw 96(%rsp), %ymm0, %ymm15
+vpaddw 96(%r8), %ymm0, %ymm15
 vmovdqa %ymm12, 4384(%r11)
 vmovdqa %ymm13, 4480(%r11)
 vpaddw %ymm12, %ymm13, %ymm0
@@ -1527,12 +1533,12 @@
 vmovdqa %ymm1, 5056(%r11)
 vpaddw %ymm0, %ymm1, %ymm0
 vmovdqa %ymm0, 5152(%r11)
-subq $9408, %rsp
+subq $9408, %r8
 mov $4, %ecx
 karatsuba_loop_4eced63f144beffcb0247f9c6f67d165:
-mov %rsp, %r9
-mov %rsp, %r10
-subq $32, %rsp
+mov %r8, %r9
+mov %r8, %r10
+subq $32, %r8
 vmovdqa 0(%rax), %ymm0
 vmovdqa 192(%rax), %ymm1
 vmovdqa 384(%rax), %ymm2
@@ -1573,7 +1579,7 @@
 vpunpckhwd 1248(%rax), %ymm2, %ymm1
 vpunpcklwd 1440(%rax), %ymm3, %ymm2
 vpunpckhwd 1440(%rax), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -1625,7 +1631,7 @@
 vmovdqa %ymm15, 416(%r9)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 448(%r9)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 224(%r9)
 vpermq $78, %ymm11, %ymm11
@@ -1671,7 +1677,7 @@
 vpunpckhwd 1280(%rax), %ymm2, %ymm1
 vpunpcklwd 1472(%rax), %ymm3, %ymm2
 vpunpckhwd 1472(%rax), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -1723,7 +1729,7 @@
 vmovdqa %ymm15, 928(%r9)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 960(%r9)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 736(%r9)
 vpermq $78, %ymm11, %ymm11
@@ -1769,7 +1775,7 @@
 vpunpckhwd 1312(%rax), %ymm2, %ymm1
 vpunpcklwd 1504(%rax), %ymm3, %ymm2
 vpunpckhwd 1504(%rax), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -1815,11 +1821,9 @@
 vmovdqa %ymm15, 1344(%r9)
 vinserti128 $0, %xmm7, %ymm0, %ymm15
 vmovdqa %ymm15, 1376(%r9)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1248(%r9)
-addq $32, %rsp
-subq $32, %rsp
 vmovdqa 0(%r11), %ymm0
 vmovdqa 192(%r11), %ymm1
 vmovdqa 384(%r11), %ymm2
@@ -1860,7 +1864,7 @@
 vpunpckhwd 1248(%r11), %ymm2, %ymm1
 vpunpcklwd 1440(%r11), %ymm3, %ymm2
 vpunpckhwd 1440(%r11), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -1912,7 +1916,7 @@
 vmovdqa %ymm15, 1824(%r9)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 1856(%r9)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1632(%r9)
 vpermq $78, %ymm11, %ymm11
@@ -1958,7 +1962,7 @@
 vpunpckhwd 1280(%r11), %ymm2, %ymm1
 vpunpcklwd 1472(%r11), %ymm3, %ymm2
 vpunpckhwd 1472(%r11), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -2010,7 +2014,7 @@
 vmovdqa %ymm15, 2336(%r9)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 2368(%r9)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 2144(%r9)
 vpermq $78, %ymm11, %ymm11
@@ -2056,7 +2060,7 @@
 vpunpckhwd 1312(%r11), %ymm2, %ymm1
 vpunpcklwd 1504(%r11), %ymm3, %ymm2
 vpunpckhwd 1504(%r11), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -2102,10 +2106,10 @@
 vmovdqa %ymm15, 2752(%r9)
 vinserti128 $0, %xmm7, %ymm0, %ymm15
 vmovdqa %ymm15, 2784(%r9)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 2656(%r9)
-addq $32, %rsp
+addq $32, %r8
 innerloop_4eced63f144beffcb0247f9c6f67d165:
 vmovdqa 0(%r9), %ymm0
 vmovdqa 1408(%r9), %ymm6
@@ -2638,17 +2642,17 @@
 vpaddw 512(%r9), %ymm5, %ymm5
 vpaddw 1920(%r9), %ymm11, %ymm11
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 5888(%rsp)
+vmovdqa %ymm12, 5888(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 5920(%rsp)
+vmovdqa %ymm13, 5920(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 5952(%rsp)
+vmovdqa %ymm12, 5952(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -2656,7 +2660,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 5984(%rsp)
+vmovdqa %ymm13, 5984(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -2666,7 +2670,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6016(%rsp)
+vmovdqa %ymm12, 6016(%r8)
 vpmullw %ymm0, %ymm11, %ymm13
 vpmullw %ymm1, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -2678,7 +2682,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6048(%rsp)
+vmovdqa %ymm13, 6048(%r8)
 vpmullw %ymm1, %ymm11, %ymm12
 vpmullw %ymm2, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -2688,7 +2692,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6080(%rsp)
+vmovdqa %ymm12, 6080(%r8)
 vpmullw %ymm2, %ymm11, %ymm13
 vpmullw %ymm3, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -2696,19 +2700,19 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6112(%rsp)
+vmovdqa %ymm13, 6112(%r8)
 vpmullw %ymm3, %ymm11, %ymm12
 vpmullw %ymm4, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6144(%rsp)
+vmovdqa %ymm12, 6144(%r8)
 vpmullw %ymm4, %ymm11, %ymm13
 vpmullw %ymm5, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6176(%rsp)
+vmovdqa %ymm13, 6176(%r8)
 vpmullw %ymm5, %ymm11, %ymm12
-vmovdqa %ymm12, 6208(%rsp)
+vmovdqa %ymm12, 6208(%r8)
 vmovdqa 192(%r9), %ymm0
 vmovdqa 1600(%r9), %ymm6
 vpaddw 544(%r9), %ymm0, %ymm0
@@ -2730,17 +2734,17 @@
 vpaddw 672(%r9), %ymm4, %ymm4
 vpaddw 2080(%r9), %ymm10, %ymm10
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 6272(%rsp)
+vmovdqa %ymm12, 6272(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6304(%rsp)
+vmovdqa %ymm13, 6304(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6336(%rsp)
+vmovdqa %ymm12, 6336(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -2748,7 +2752,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6368(%rsp)
+vmovdqa %ymm13, 6368(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -2758,7 +2762,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6400(%rsp)
+vmovdqa %ymm12, 6400(%r8)
 vpmullw %ymm1, %ymm10, %ymm13
 vpmullw %ymm2, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -2766,19 +2770,19 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm4, %ymm7, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6432(%rsp)
+vmovdqa %ymm13, 6432(%r8)
 vpmullw %ymm2, %ymm10, %ymm12
 vpmullw %ymm3, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm8, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6464(%rsp)
+vmovdqa %ymm12, 6464(%r8)
 vpmullw %ymm3, %ymm10, %ymm13
 vpmullw %ymm4, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6496(%rsp)
+vmovdqa %ymm13, 6496(%r8)
 vpmullw %ymm4, %ymm10, %ymm12
-vmovdqa %ymm12, 6528(%rsp)
+vmovdqa %ymm12, 6528(%r8)
 vpaddw 0(%r9), %ymm0, %ymm0
 vpaddw 1408(%r9), %ymm6, %ymm6
 vpaddw 352(%r9), %ymm0, %ymm0
@@ -2810,9 +2814,9 @@
 vpaddw %ymm15, %ymm12, %ymm12
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm15, %ymm12, %ymm12
-vpsubw 6048(%rsp), %ymm12, %ymm12
-vpsubw 6432(%rsp), %ymm12, %ymm12
-vmovdqa %ymm12, 6240(%rsp)
+vpsubw 6048(%r8), %ymm12, %ymm12
+vpsubw 6432(%r8), %ymm12, %ymm12
+vmovdqa %ymm12, 6240(%r8)
 vpmullw %ymm5, %ymm7, %ymm12
 vpmullw %ymm5, %ymm8, %ymm13
 vpmullw %ymm5, %ymm9, %ymm14
@@ -2862,134 +2866,134 @@
 vpmullw %ymm1, %ymm6, %ymm5
 vpaddw %ymm5, %ymm8, %ymm8
 vpmullw %ymm0, %ymm6, %ymm7
-vmovdqa 6080(%rsp), %ymm0
-vpsubw 6272(%rsp), %ymm0, %ymm0
+vmovdqa 6080(%r8), %ymm0
+vpsubw 6272(%r8), %ymm0, %ymm0
 vpsubw %ymm0, %ymm12, %ymm6
-vpsubw 6464(%rsp), %ymm6, %ymm6
-vmovdqa %ymm6, 6272(%rsp)
+vpsubw 6464(%r8), %ymm6, %ymm6
+vmovdqa %ymm6, 6272(%r8)
 vpaddw %ymm7, %ymm0, %ymm0
-vpsubw 5888(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 6080(%rsp)
-vmovdqa 6112(%rsp), %ymm1
-vpsubw 6304(%rsp), %ymm1, %ymm1
+vpsubw 5888(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 6080(%r8)
+vmovdqa 6112(%r8), %ymm1
+vpsubw 6304(%r8), %ymm1, %ymm1
 vpsubw %ymm1, %ymm13, %ymm7
-vpsubw 6496(%rsp), %ymm7, %ymm7
-vmovdqa %ymm7, 6304(%rsp)
+vpsubw 6496(%r8), %ymm7, %ymm7
+vmovdqa %ymm7, 6304(%r8)
 vpaddw %ymm8, %ymm1, %ymm1
-vpsubw 5920(%rsp), %ymm1, %ymm1
-vmovdqa %ymm1, 6112(%rsp)
-vmovdqa 6144(%rsp), %ymm2
-vpsubw 6336(%rsp), %ymm2, %ymm2
+vpsubw 5920(%r8), %ymm1, %ymm1
+vmovdqa %ymm1, 6112(%r8)
+vmovdqa 6144(%r8), %ymm2
+vpsubw 6336(%r8), %ymm2, %ymm2
 vpsubw %ymm2, %ymm14, %ymm8
-vpsubw 6528(%rsp), %ymm8, %ymm8
-vmovdqa %ymm8, 6336(%rsp)
+vpsubw 6528(%r8), %ymm8, %ymm8
+vmovdqa %ymm8, 6336(%r8)
 vpaddw %ymm9, %ymm2, %ymm2
-vpsubw 5952(%rsp), %ymm2, %ymm2
-vmovdqa %ymm2, 6144(%rsp)
-vmovdqa 6176(%rsp), %ymm3
-vpsubw 6368(%rsp), %ymm3, %ymm3
+vpsubw 5952(%r8), %ymm2, %ymm2
+vmovdqa %ymm2, 6144(%r8)
+vmovdqa 6176(%r8), %ymm3
+vpsubw 6368(%r8), %ymm3, %ymm3
 vpsubw %ymm3, %ymm15, %ymm9
-vmovdqa %ymm9, 6368(%rsp)
+vmovdqa %ymm9, 6368(%r8)
 vpaddw %ymm10, %ymm3, %ymm3
-vpsubw 5984(%rsp), %ymm3, %ymm3
-vmovdqa %ymm3, 6176(%rsp)
-vmovdqa 6208(%rsp), %ymm4
-vpsubw 6400(%rsp), %ymm4, %ymm4
+vpsubw 5984(%r8), %ymm3, %ymm3
+vmovdqa %ymm3, 6176(%r8)
+vmovdqa 6208(%r8), %ymm4
+vpsubw 6400(%r8), %ymm4, %ymm4
 vpaddw %ymm11, %ymm4, %ymm4
-vpsubw 6016(%rsp), %ymm4, %ymm4
-vmovdqa %ymm4, 6208(%rsp)
-vmovdqa 6208(%rsp), %ymm0
+vpsubw 6016(%r8), %ymm4, %ymm4
+vmovdqa %ymm4, 6208(%r8)
+vmovdqa 6208(%r8), %ymm0
 vpsubw 3136(%r10), %ymm0, %ymm0
 vpsubw 3840(%r10), %ymm0, %ymm0
 vmovdqa %ymm0, 3488(%r10)
 vmovdqa 3168(%r10), %ymm0
 vpsubw 3520(%r10), %ymm0, %ymm0
-vmovdqa 6240(%rsp), %ymm1
+vmovdqa 6240(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 3872(%r10), %ymm1, %ymm1
 vpsubw 2816(%r10), %ymm0, %ymm0
-vpaddw 5888(%rsp), %ymm0, %ymm0
+vpaddw 5888(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3168(%r10)
 vmovdqa %ymm1, 3520(%r10)
 vmovdqa 3200(%r10), %ymm0
 vpsubw 3552(%r10), %ymm0, %ymm0
-vmovdqa 6272(%rsp), %ymm1
+vmovdqa 6272(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 3904(%r10), %ymm1, %ymm1
 vpsubw 2848(%r10), %ymm0, %ymm0
-vpaddw 5920(%rsp), %ymm0, %ymm0
+vpaddw 5920(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3200(%r10)
 vmovdqa %ymm1, 3552(%r10)
 vmovdqa 3232(%r10), %ymm0
 vpsubw 3584(%r10), %ymm0, %ymm0
-vmovdqa 6304(%rsp), %ymm1
+vmovdqa 6304(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 3936(%r10), %ymm1, %ymm1
 vpsubw 2880(%r10), %ymm0, %ymm0
-vpaddw 5952(%rsp), %ymm0, %ymm0
+vpaddw 5952(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3232(%r10)
 vmovdqa %ymm1, 3584(%r10)
 vmovdqa 3264(%r10), %ymm0
 vpsubw 3616(%r10), %ymm0, %ymm0
-vmovdqa 6336(%rsp), %ymm1
+vmovdqa 6336(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 3968(%r10), %ymm1, %ymm1
 vpsubw 2912(%r10), %ymm0, %ymm0
-vpaddw 5984(%rsp), %ymm0, %ymm0
+vpaddw 5984(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3264(%r10)
 vmovdqa %ymm1, 3616(%r10)
 vmovdqa 3296(%r10), %ymm0
 vpsubw 3648(%r10), %ymm0, %ymm0
-vmovdqa 6368(%rsp), %ymm1
+vmovdqa 6368(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 4000(%r10), %ymm1, %ymm1
 vpsubw 2944(%r10), %ymm0, %ymm0
-vpaddw 6016(%rsp), %ymm0, %ymm0
+vpaddw 6016(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3296(%r10)
 vmovdqa %ymm1, 3648(%r10)
 vmovdqa 3328(%r10), %ymm0
 vpsubw 3680(%r10), %ymm0, %ymm0
-vmovdqa 6400(%rsp), %ymm1
+vmovdqa 6400(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 4032(%r10), %ymm1, %ymm1
 vpsubw 2976(%r10), %ymm0, %ymm0
-vpaddw 6048(%rsp), %ymm0, %ymm0
+vpaddw 6048(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3328(%r10)
 vmovdqa %ymm1, 3680(%r10)
 vmovdqa 3360(%r10), %ymm0
 vpsubw 3712(%r10), %ymm0, %ymm0
-vmovdqa 6432(%rsp), %ymm1
+vmovdqa 6432(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 4064(%r10), %ymm1, %ymm1
 vpsubw 3008(%r10), %ymm0, %ymm0
-vpaddw 6080(%rsp), %ymm0, %ymm0
+vpaddw 6080(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3360(%r10)
 vmovdqa %ymm1, 3712(%r10)
 vmovdqa 3392(%r10), %ymm0
 vpsubw 3744(%r10), %ymm0, %ymm0
-vmovdqa 6464(%rsp), %ymm1
+vmovdqa 6464(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 4096(%r10), %ymm1, %ymm1
 vpsubw 3040(%r10), %ymm0, %ymm0
-vpaddw 6112(%rsp), %ymm0, %ymm0
+vpaddw 6112(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3392(%r10)
 vmovdqa %ymm1, 3744(%r10)
 vmovdqa 3424(%r10), %ymm0
 vpsubw 3776(%r10), %ymm0, %ymm0
-vmovdqa 6496(%rsp), %ymm1
+vmovdqa 6496(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 4128(%r10), %ymm1, %ymm1
 vpsubw 3072(%r10), %ymm0, %ymm0
-vpaddw 6144(%rsp), %ymm0, %ymm0
+vpaddw 6144(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3424(%r10)
 vmovdqa %ymm1, 3776(%r10)
 vmovdqa 3456(%r10), %ymm0
 vpsubw 3808(%r10), %ymm0, %ymm0
-vmovdqa 6528(%rsp), %ymm1
+vmovdqa 6528(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 4160(%r10), %ymm1, %ymm1
 vpsubw 3104(%r10), %ymm0, %ymm0
-vpaddw 6176(%rsp), %ymm0, %ymm0
+vpaddw 6176(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3456(%r10)
 vmovdqa %ymm1, 3808(%r10)
 neg %ecx
@@ -3002,160 +3006,160 @@
 sub $1408, %r10
 vmovdqa 0(%r9), %ymm0
 vpaddw 704(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6592(%rsp)
+vmovdqa %ymm0, 6592(%r8)
 vmovdqa 1408(%r9), %ymm0
 vpaddw 2112(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7296(%rsp)
+vmovdqa %ymm0, 7296(%r8)
 vmovdqa 32(%r9), %ymm0
 vpaddw 736(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6624(%rsp)
+vmovdqa %ymm0, 6624(%r8)
 vmovdqa 1440(%r9), %ymm0
 vpaddw 2144(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7328(%rsp)
+vmovdqa %ymm0, 7328(%r8)
 vmovdqa 64(%r9), %ymm0
 vpaddw 768(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6656(%rsp)
+vmovdqa %ymm0, 6656(%r8)
 vmovdqa 1472(%r9), %ymm0
 vpaddw 2176(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7360(%rsp)
+vmovdqa %ymm0, 7360(%r8)
 vmovdqa 96(%r9), %ymm0
 vpaddw 800(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6688(%rsp)
+vmovdqa %ymm0, 6688(%r8)
 vmovdqa 1504(%r9), %ymm0
 vpaddw 2208(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7392(%rsp)
+vmovdqa %ymm0, 7392(%r8)
 vmovdqa 128(%r9), %ymm0
 vpaddw 832(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6720(%rsp)
+vmovdqa %ymm0, 6720(%r8)
 vmovdqa 1536(%r9), %ymm0
 vpaddw 2240(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7424(%rsp)
+vmovdqa %ymm0, 7424(%r8)
 vmovdqa 160(%r9), %ymm0
 vpaddw 864(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6752(%rsp)
+vmovdqa %ymm0, 6752(%r8)
 vmovdqa 1568(%r9), %ymm0
 vpaddw 2272(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7456(%rsp)
+vmovdqa %ymm0, 7456(%r8)
 vmovdqa 192(%r9), %ymm0
 vpaddw 896(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6784(%rsp)
+vmovdqa %ymm0, 6784(%r8)
 vmovdqa 1600(%r9), %ymm0
 vpaddw 2304(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7488(%rsp)
+vmovdqa %ymm0, 7488(%r8)
 vmovdqa 224(%r9), %ymm0
 vpaddw 928(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6816(%rsp)
+vmovdqa %ymm0, 6816(%r8)
 vmovdqa 1632(%r9), %ymm0
 vpaddw 2336(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7520(%rsp)
+vmovdqa %ymm0, 7520(%r8)
 vmovdqa 256(%r9), %ymm0
 vpaddw 960(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6848(%rsp)
+vmovdqa %ymm0, 6848(%r8)
 vmovdqa 1664(%r9), %ymm0
 vpaddw 2368(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7552(%rsp)
+vmovdqa %ymm0, 7552(%r8)
 vmovdqa 288(%r9), %ymm0
 vpaddw 992(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6880(%rsp)
+vmovdqa %ymm0, 6880(%r8)
 vmovdqa 1696(%r9), %ymm0
 vpaddw 2400(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7584(%rsp)
+vmovdqa %ymm0, 7584(%r8)
 vmovdqa 320(%r9), %ymm0
 vpaddw 1024(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6912(%rsp)
+vmovdqa %ymm0, 6912(%r8)
 vmovdqa 1728(%r9), %ymm0
 vpaddw 2432(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7616(%rsp)
+vmovdqa %ymm0, 7616(%r8)
 vmovdqa 352(%r9), %ymm0
 vpaddw 1056(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6944(%rsp)
+vmovdqa %ymm0, 6944(%r8)
 vmovdqa 1760(%r9), %ymm0
 vpaddw 2464(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7648(%rsp)
+vmovdqa %ymm0, 7648(%r8)
 vmovdqa 384(%r9), %ymm0
 vpaddw 1088(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 6976(%rsp)
+vmovdqa %ymm0, 6976(%r8)
 vmovdqa 1792(%r9), %ymm0
 vpaddw 2496(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7680(%rsp)
+vmovdqa %ymm0, 7680(%r8)
 vmovdqa 416(%r9), %ymm0
 vpaddw 1120(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7008(%rsp)
+vmovdqa %ymm0, 7008(%r8)
 vmovdqa 1824(%r9), %ymm0
 vpaddw 2528(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7712(%rsp)
+vmovdqa %ymm0, 7712(%r8)
 vmovdqa 448(%r9), %ymm0
 vpaddw 1152(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7040(%rsp)
+vmovdqa %ymm0, 7040(%r8)
 vmovdqa 1856(%r9), %ymm0
 vpaddw 2560(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7744(%rsp)
+vmovdqa %ymm0, 7744(%r8)
 vmovdqa 480(%r9), %ymm0
 vpaddw 1184(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7072(%rsp)
+vmovdqa %ymm0, 7072(%r8)
 vmovdqa 1888(%r9), %ymm0
 vpaddw 2592(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7776(%rsp)
+vmovdqa %ymm0, 7776(%r8)
 vmovdqa 512(%r9), %ymm0
 vpaddw 1216(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7104(%rsp)
+vmovdqa %ymm0, 7104(%r8)
 vmovdqa 1920(%r9), %ymm0
 vpaddw 2624(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7808(%rsp)
+vmovdqa %ymm0, 7808(%r8)
 vmovdqa 544(%r9), %ymm0
 vpaddw 1248(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7136(%rsp)
+vmovdqa %ymm0, 7136(%r8)
 vmovdqa 1952(%r9), %ymm0
 vpaddw 2656(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7840(%rsp)
+vmovdqa %ymm0, 7840(%r8)
 vmovdqa 576(%r9), %ymm0
 vpaddw 1280(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7168(%rsp)
+vmovdqa %ymm0, 7168(%r8)
 vmovdqa 1984(%r9), %ymm0
 vpaddw 2688(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7872(%rsp)
+vmovdqa %ymm0, 7872(%r8)
 vmovdqa 608(%r9), %ymm0
 vpaddw 1312(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7200(%rsp)
+vmovdqa %ymm0, 7200(%r8)
 vmovdqa 2016(%r9), %ymm0
 vpaddw 2720(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7904(%rsp)
+vmovdqa %ymm0, 7904(%r8)
 vmovdqa 640(%r9), %ymm0
 vpaddw 1344(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7232(%rsp)
+vmovdqa %ymm0, 7232(%r8)
 vmovdqa 2048(%r9), %ymm0
 vpaddw 2752(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7936(%rsp)
+vmovdqa %ymm0, 7936(%r8)
 vmovdqa 672(%r9), %ymm0
 vpaddw 1376(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7264(%rsp)
+vmovdqa %ymm0, 7264(%r8)
 vmovdqa 2080(%r9), %ymm0
 vpaddw 2784(%r9), %ymm0, %ymm0
-vmovdqa %ymm0, 7968(%rsp)
-vmovdqa 6592(%rsp), %ymm0
-vmovdqa 7296(%rsp), %ymm6
-vmovdqa 6624(%rsp), %ymm1
-vmovdqa 7328(%rsp), %ymm7
-vmovdqa 6656(%rsp), %ymm2
-vmovdqa 7360(%rsp), %ymm8
-vmovdqa 6688(%rsp), %ymm3
-vmovdqa 7392(%rsp), %ymm9
-vmovdqa 6720(%rsp), %ymm4
-vmovdqa 7424(%rsp), %ymm10
-vmovdqa 6752(%rsp), %ymm5
-vmovdqa 7456(%rsp), %ymm11
+vmovdqa %ymm0, 7968(%r8)
+vmovdqa 6592(%r8), %ymm0
+vmovdqa 7296(%r8), %ymm6
+vmovdqa 6624(%r8), %ymm1
+vmovdqa 7328(%r8), %ymm7
+vmovdqa 6656(%r8), %ymm2
+vmovdqa 7360(%r8), %ymm8
+vmovdqa 6688(%r8), %ymm3
+vmovdqa 7392(%r8), %ymm9
+vmovdqa 6720(%r8), %ymm4
+vmovdqa 7424(%r8), %ymm10
+vmovdqa 6752(%r8), %ymm5
+vmovdqa 7456(%r8), %ymm11
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 8000(%rsp)
+vmovdqa %ymm12, 8000(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8032(%rsp)
+vmovdqa %ymm13, 8032(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8064(%rsp)
+vmovdqa %ymm12, 8064(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3163,7 +3167,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8096(%rsp)
+vmovdqa %ymm13, 8096(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3173,7 +3177,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8128(%rsp)
+vmovdqa %ymm12, 8128(%r8)
 vpmullw %ymm0, %ymm11, %ymm13
 vpmullw %ymm1, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3185,7 +3189,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8160(%rsp)
+vmovdqa %ymm13, 8160(%r8)
 vpmullw %ymm1, %ymm11, %ymm12
 vpmullw %ymm2, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3195,7 +3199,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8192(%rsp)
+vmovdqa %ymm12, 8192(%r8)
 vpmullw %ymm2, %ymm11, %ymm13
 vpmullw %ymm3, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3203,41 +3207,41 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8224(%rsp)
+vmovdqa %ymm13, 8224(%r8)
 vpmullw %ymm3, %ymm11, %ymm12
 vpmullw %ymm4, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8256(%rsp)
+vmovdqa %ymm12, 8256(%r8)
 vpmullw %ymm4, %ymm11, %ymm13
 vpmullw %ymm5, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8288(%rsp)
+vmovdqa %ymm13, 8288(%r8)
 vpmullw %ymm5, %ymm11, %ymm12
-vmovdqa %ymm12, 8320(%rsp)
-vmovdqa 6784(%rsp), %ymm0
-vmovdqa 7488(%rsp), %ymm6
-vmovdqa 6816(%rsp), %ymm1
-vmovdqa 7520(%rsp), %ymm7
-vmovdqa 6848(%rsp), %ymm2
-vmovdqa 7552(%rsp), %ymm8
-vmovdqa 6880(%rsp), %ymm3
-vmovdqa 7584(%rsp), %ymm9
-vmovdqa 6912(%rsp), %ymm4
-vmovdqa 7616(%rsp), %ymm10
+vmovdqa %ymm12, 8320(%r8)
+vmovdqa 6784(%r8), %ymm0
+vmovdqa 7488(%r8), %ymm6
+vmovdqa 6816(%r8), %ymm1
+vmovdqa 7520(%r8), %ymm7
+vmovdqa 6848(%r8), %ymm2
+vmovdqa 7552(%r8), %ymm8
+vmovdqa 6880(%r8), %ymm3
+vmovdqa 7584(%r8), %ymm9
+vmovdqa 6912(%r8), %ymm4
+vmovdqa 7616(%r8), %ymm10
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 8384(%rsp)
+vmovdqa %ymm12, 8384(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8416(%rsp)
+vmovdqa %ymm13, 8416(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8448(%rsp)
+vmovdqa %ymm12, 8448(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3245,7 +3249,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8480(%rsp)
+vmovdqa %ymm13, 8480(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3255,7 +3259,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8512(%rsp)
+vmovdqa %ymm12, 8512(%r8)
 vpmullw %ymm1, %ymm10, %ymm13
 vpmullw %ymm2, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3263,29 +3267,29 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm4, %ymm7, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8544(%rsp)
+vmovdqa %ymm13, 8544(%r8)
 vpmullw %ymm2, %ymm10, %ymm12
 vpmullw %ymm3, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm8, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8576(%rsp)
+vmovdqa %ymm12, 8576(%r8)
 vpmullw %ymm3, %ymm10, %ymm13
 vpmullw %ymm4, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8608(%rsp)
+vmovdqa %ymm13, 8608(%r8)
 vpmullw %ymm4, %ymm10, %ymm12
-vmovdqa %ymm12, 8640(%rsp)
-vpaddw 6592(%rsp), %ymm0, %ymm0
-vpaddw 7296(%rsp), %ymm6, %ymm6
-vpaddw 6624(%rsp), %ymm1, %ymm1
-vpaddw 7328(%rsp), %ymm7, %ymm7
-vpaddw 6656(%rsp), %ymm2, %ymm2
-vpaddw 7360(%rsp), %ymm8, %ymm8
-vpaddw 6688(%rsp), %ymm3, %ymm3
-vpaddw 7392(%rsp), %ymm9, %ymm9
-vpaddw 6720(%rsp), %ymm4, %ymm4
-vpaddw 7424(%rsp), %ymm10, %ymm10
+vmovdqa %ymm12, 8640(%r8)
+vpaddw 6592(%r8), %ymm0, %ymm0
+vpaddw 7296(%r8), %ymm6, %ymm6
+vpaddw 6624(%r8), %ymm1, %ymm1
+vpaddw 7328(%r8), %ymm7, %ymm7
+vpaddw 6656(%r8), %ymm2, %ymm2
+vpaddw 7360(%r8), %ymm8, %ymm8
+vpaddw 6688(%r8), %ymm3, %ymm3
+vpaddw 7392(%r8), %ymm9, %ymm9
+vpaddw 6720(%r8), %ymm4, %ymm4
+vpaddw 7424(%r8), %ymm10, %ymm10
 vpmullw %ymm0, %ymm11, %ymm12
 vpmullw %ymm1, %ymm10, %ymm15
 vpaddw %ymm15, %ymm12, %ymm12
@@ -3297,9 +3301,9 @@
 vpaddw %ymm15, %ymm12, %ymm12
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm15, %ymm12, %ymm12
-vpsubw 8160(%rsp), %ymm12, %ymm12
-vpsubw 8544(%rsp), %ymm12, %ymm12
-vmovdqa %ymm12, 8352(%rsp)
+vpsubw 8160(%r8), %ymm12, %ymm12
+vpsubw 8544(%r8), %ymm12, %ymm12
+vmovdqa %ymm12, 8352(%r8)
 vpmullw %ymm5, %ymm7, %ymm12
 vpmullw %ymm5, %ymm8, %ymm13
 vpmullw %ymm5, %ymm9, %ymm14
@@ -3349,66 +3353,66 @@
 vpmullw %ymm1, %ymm6, %ymm5
 vpaddw %ymm5, %ymm8, %ymm8
 vpmullw %ymm0, %ymm6, %ymm7
-vmovdqa 8192(%rsp), %ymm0
-vpsubw 8384(%rsp), %ymm0, %ymm0
+vmovdqa 8192(%r8), %ymm0
+vpsubw 8384(%r8), %ymm0, %ymm0
 vpsubw %ymm0, %ymm12, %ymm6
-vpsubw 8576(%rsp), %ymm6, %ymm6
-vmovdqa %ymm6, 8384(%rsp)
+vpsubw 8576(%r8), %ymm6, %ymm6
+vmovdqa %ymm6, 8384(%r8)
 vpaddw %ymm7, %ymm0, %ymm0
-vpsubw 8000(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8192(%rsp)
-vmovdqa 8224(%rsp), %ymm1
-vpsubw 8416(%rsp), %ymm1, %ymm1
+vpsubw 8000(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8192(%r8)
+vmovdqa 8224(%r8), %ymm1
+vpsubw 8416(%r8), %ymm1, %ymm1
 vpsubw %ymm1, %ymm13, %ymm7
-vpsubw 8608(%rsp), %ymm7, %ymm7
-vmovdqa %ymm7, 8416(%rsp)
+vpsubw 8608(%r8), %ymm7, %ymm7
+vmovdqa %ymm7, 8416(%r8)
 vpaddw %ymm8, %ymm1, %ymm1
-vpsubw 8032(%rsp), %ymm1, %ymm1
-vmovdqa %ymm1, 8224(%rsp)
-vmovdqa 8256(%rsp), %ymm2
-vpsubw 8448(%rsp), %ymm2, %ymm2
+vpsubw 8032(%r8), %ymm1, %ymm1
+vmovdqa %ymm1, 8224(%r8)
+vmovdqa 8256(%r8), %ymm2
+vpsubw 8448(%r8), %ymm2, %ymm2
 vpsubw %ymm2, %ymm14, %ymm8
-vpsubw 8640(%rsp), %ymm8, %ymm8
-vmovdqa %ymm8, 8448(%rsp)
+vpsubw 8640(%r8), %ymm8, %ymm8
+vmovdqa %ymm8, 8448(%r8)
 vpaddw %ymm9, %ymm2, %ymm2
-vpsubw 8064(%rsp), %ymm2, %ymm2
-vmovdqa %ymm2, 8256(%rsp)
-vmovdqa 8288(%rsp), %ymm3
-vpsubw 8480(%rsp), %ymm3, %ymm3
+vpsubw 8064(%r8), %ymm2, %ymm2
+vmovdqa %ymm2, 8256(%r8)
+vmovdqa 8288(%r8), %ymm3
+vpsubw 8480(%r8), %ymm3, %ymm3
 vpsubw %ymm3, %ymm15, %ymm9
-vmovdqa %ymm9, 8480(%rsp)
+vmovdqa %ymm9, 8480(%r8)
 vpaddw %ymm10, %ymm3, %ymm3
-vpsubw 8096(%rsp), %ymm3, %ymm3
-vmovdqa %ymm3, 8288(%rsp)
-vmovdqa 8320(%rsp), %ymm4
-vpsubw 8512(%rsp), %ymm4, %ymm4
+vpsubw 8096(%r8), %ymm3, %ymm3
+vmovdqa %ymm3, 8288(%r8)
+vmovdqa 8320(%r8), %ymm4
+vpsubw 8512(%r8), %ymm4, %ymm4
 vpaddw %ymm11, %ymm4, %ymm4
-vpsubw 8128(%rsp), %ymm4, %ymm4
-vmovdqa %ymm4, 8320(%rsp)
-vmovdqa 6944(%rsp), %ymm0
-vmovdqa 7648(%rsp), %ymm6
-vmovdqa 6976(%rsp), %ymm1
-vmovdqa 7680(%rsp), %ymm7
-vmovdqa 7008(%rsp), %ymm2
-vmovdqa 7712(%rsp), %ymm8
-vmovdqa 7040(%rsp), %ymm3
-vmovdqa 7744(%rsp), %ymm9
-vmovdqa 7072(%rsp), %ymm4
-vmovdqa 7776(%rsp), %ymm10
-vmovdqa 7104(%rsp), %ymm5
-vmovdqa 7808(%rsp), %ymm11
+vpsubw 8128(%r8), %ymm4, %ymm4
+vmovdqa %ymm4, 8320(%r8)
+vmovdqa 6944(%r8), %ymm0
+vmovdqa 7648(%r8), %ymm6
+vmovdqa 6976(%r8), %ymm1
+vmovdqa 7680(%r8), %ymm7
+vmovdqa 7008(%r8), %ymm2
+vmovdqa 7712(%r8), %ymm8
+vmovdqa 7040(%r8), %ymm3
+vmovdqa 7744(%r8), %ymm9
+vmovdqa 7072(%r8), %ymm4
+vmovdqa 7776(%r8), %ymm10
+vmovdqa 7104(%r8), %ymm5
+vmovdqa 7808(%r8), %ymm11
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 8704(%rsp)
+vmovdqa %ymm12, 8704(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8736(%rsp)
+vmovdqa %ymm13, 8736(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8768(%rsp)
+vmovdqa %ymm12, 8768(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3416,7 +3420,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8800(%rsp)
+vmovdqa %ymm13, 8800(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3426,7 +3430,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8832(%rsp)
+vmovdqa %ymm12, 8832(%r8)
 vpmullw %ymm0, %ymm11, %ymm13
 vpmullw %ymm1, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3438,7 +3442,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8864(%rsp)
+vmovdqa %ymm13, 8864(%r8)
 vpmullw %ymm1, %ymm11, %ymm12
 vpmullw %ymm2, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3448,7 +3452,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8896(%rsp)
+vmovdqa %ymm12, 8896(%r8)
 vpmullw %ymm2, %ymm11, %ymm13
 vpmullw %ymm3, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3456,41 +3460,41 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8928(%rsp)
+vmovdqa %ymm13, 8928(%r8)
 vpmullw %ymm3, %ymm11, %ymm12
 vpmullw %ymm4, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 8960(%rsp)
+vmovdqa %ymm12, 8960(%r8)
 vpmullw %ymm4, %ymm11, %ymm13
 vpmullw %ymm5, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 8992(%rsp)
+vmovdqa %ymm13, 8992(%r8)
 vpmullw %ymm5, %ymm11, %ymm12
-vmovdqa %ymm12, 9024(%rsp)
-vmovdqa 7136(%rsp), %ymm0
-vmovdqa 7840(%rsp), %ymm6
-vmovdqa 7168(%rsp), %ymm1
-vmovdqa 7872(%rsp), %ymm7
-vmovdqa 7200(%rsp), %ymm2
-vmovdqa 7904(%rsp), %ymm8
-vmovdqa 7232(%rsp), %ymm3
-vmovdqa 7936(%rsp), %ymm9
-vmovdqa 7264(%rsp), %ymm4
-vmovdqa 7968(%rsp), %ymm10
+vmovdqa %ymm12, 9024(%r8)
+vmovdqa 7136(%r8), %ymm0
+vmovdqa 7840(%r8), %ymm6
+vmovdqa 7168(%r8), %ymm1
+vmovdqa 7872(%r8), %ymm7
+vmovdqa 7200(%r8), %ymm2
+vmovdqa 7904(%r8), %ymm8
+vmovdqa 7232(%r8), %ymm3
+vmovdqa 7936(%r8), %ymm9
+vmovdqa 7264(%r8), %ymm4
+vmovdqa 7968(%r8), %ymm10
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 9088(%rsp)
+vmovdqa %ymm12, 9088(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 9120(%rsp)
+vmovdqa %ymm13, 9120(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 9152(%rsp)
+vmovdqa %ymm12, 9152(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3498,7 +3502,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 9184(%rsp)
+vmovdqa %ymm13, 9184(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3508,7 +3512,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 9216(%rsp)
+vmovdqa %ymm12, 9216(%r8)
 vpmullw %ymm1, %ymm10, %ymm13
 vpmullw %ymm2, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3516,29 +3520,29 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm4, %ymm7, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 9248(%rsp)
+vmovdqa %ymm13, 9248(%r8)
 vpmullw %ymm2, %ymm10, %ymm12
 vpmullw %ymm3, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm8, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 9280(%rsp)
+vmovdqa %ymm12, 9280(%r8)
 vpmullw %ymm3, %ymm10, %ymm13
 vpmullw %ymm4, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 9312(%rsp)
+vmovdqa %ymm13, 9312(%r8)
 vpmullw %ymm4, %ymm10, %ymm12
-vmovdqa %ymm12, 9344(%rsp)
-vpaddw 6944(%rsp), %ymm0, %ymm0
-vpaddw 7648(%rsp), %ymm6, %ymm6
-vpaddw 6976(%rsp), %ymm1, %ymm1
-vpaddw 7680(%rsp), %ymm7, %ymm7
-vpaddw 7008(%rsp), %ymm2, %ymm2
-vpaddw 7712(%rsp), %ymm8, %ymm8
-vpaddw 7040(%rsp), %ymm3, %ymm3
-vpaddw 7744(%rsp), %ymm9, %ymm9
-vpaddw 7072(%rsp), %ymm4, %ymm4
-vpaddw 7776(%rsp), %ymm10, %ymm10
+vmovdqa %ymm12, 9344(%r8)
+vpaddw 6944(%r8), %ymm0, %ymm0
+vpaddw 7648(%r8), %ymm6, %ymm6
+vpaddw 6976(%r8), %ymm1, %ymm1
+vpaddw 7680(%r8), %ymm7, %ymm7
+vpaddw 7008(%r8), %ymm2, %ymm2
+vpaddw 7712(%r8), %ymm8, %ymm8
+vpaddw 7040(%r8), %ymm3, %ymm3
+vpaddw 7744(%r8), %ymm9, %ymm9
+vpaddw 7072(%r8), %ymm4, %ymm4
+vpaddw 7776(%r8), %ymm10, %ymm10
 vpmullw %ymm0, %ymm11, %ymm12
 vpmullw %ymm1, %ymm10, %ymm15
 vpaddw %ymm15, %ymm12, %ymm12
@@ -3550,9 +3554,9 @@
 vpaddw %ymm15, %ymm12, %ymm12
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm15, %ymm12, %ymm12
-vpsubw 8864(%rsp), %ymm12, %ymm12
-vpsubw 9248(%rsp), %ymm12, %ymm12
-vmovdqa %ymm12, 9056(%rsp)
+vpsubw 8864(%r8), %ymm12, %ymm12
+vpsubw 9248(%r8), %ymm12, %ymm12
+vmovdqa %ymm12, 9056(%r8)
 vpmullw %ymm5, %ymm7, %ymm12
 vpmullw %ymm5, %ymm8, %ymm13
 vpmullw %ymm5, %ymm9, %ymm14
@@ -3602,78 +3606,78 @@
 vpmullw %ymm1, %ymm6, %ymm5
 vpaddw %ymm5, %ymm8, %ymm8
 vpmullw %ymm0, %ymm6, %ymm7
-vmovdqa 8896(%rsp), %ymm0
-vpsubw 9088(%rsp), %ymm0, %ymm0
+vmovdqa 8896(%r8), %ymm0
+vpsubw 9088(%r8), %ymm0, %ymm0
 vpsubw %ymm0, %ymm12, %ymm6
-vpsubw 9280(%rsp), %ymm6, %ymm6
-vmovdqa %ymm6, 9088(%rsp)
+vpsubw 9280(%r8), %ymm6, %ymm6
+vmovdqa %ymm6, 9088(%r8)
 vpaddw %ymm7, %ymm0, %ymm0
-vpsubw 8704(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8896(%rsp)
-vmovdqa 8928(%rsp), %ymm1
-vpsubw 9120(%rsp), %ymm1, %ymm1
+vpsubw 8704(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8896(%r8)
+vmovdqa 8928(%r8), %ymm1
+vpsubw 9120(%r8), %ymm1, %ymm1
 vpsubw %ymm1, %ymm13, %ymm7
-vpsubw 9312(%rsp), %ymm7, %ymm7
-vmovdqa %ymm7, 9120(%rsp)
+vpsubw 9312(%r8), %ymm7, %ymm7
+vmovdqa %ymm7, 9120(%r8)
 vpaddw %ymm8, %ymm1, %ymm1
-vpsubw 8736(%rsp), %ymm1, %ymm1
-vmovdqa %ymm1, 8928(%rsp)
-vmovdqa 8960(%rsp), %ymm2
-vpsubw 9152(%rsp), %ymm2, %ymm2
+vpsubw 8736(%r8), %ymm1, %ymm1
+vmovdqa %ymm1, 8928(%r8)
+vmovdqa 8960(%r8), %ymm2
+vpsubw 9152(%r8), %ymm2, %ymm2
 vpsubw %ymm2, %ymm14, %ymm8
-vpsubw 9344(%rsp), %ymm8, %ymm8
-vmovdqa %ymm8, 9152(%rsp)
+vpsubw 9344(%r8), %ymm8, %ymm8
+vmovdqa %ymm8, 9152(%r8)
 vpaddw %ymm9, %ymm2, %ymm2
-vpsubw 8768(%rsp), %ymm2, %ymm2
-vmovdqa %ymm2, 8960(%rsp)
-vmovdqa 8992(%rsp), %ymm3
-vpsubw 9184(%rsp), %ymm3, %ymm3
+vpsubw 8768(%r8), %ymm2, %ymm2
+vmovdqa %ymm2, 8960(%r8)
+vmovdqa 8992(%r8), %ymm3
+vpsubw 9184(%r8), %ymm3, %ymm3
 vpsubw %ymm3, %ymm15, %ymm9
-vmovdqa %ymm9, 9184(%rsp)
+vmovdqa %ymm9, 9184(%r8)
 vpaddw %ymm10, %ymm3, %ymm3
-vpsubw 8800(%rsp), %ymm3, %ymm3
-vmovdqa %ymm3, 8992(%rsp)
-vmovdqa 9024(%rsp), %ymm4
-vpsubw 9216(%rsp), %ymm4, %ymm4
+vpsubw 8800(%r8), %ymm3, %ymm3
+vmovdqa %ymm3, 8992(%r8)
+vmovdqa 9024(%r8), %ymm4
+vpsubw 9216(%r8), %ymm4, %ymm4
 vpaddw %ymm11, %ymm4, %ymm4
-vpsubw 8832(%rsp), %ymm4, %ymm4
-vmovdqa %ymm4, 9024(%rsp)
-vmovdqa 6592(%rsp), %ymm0
-vmovdqa 7296(%rsp), %ymm6
-vpaddw 6944(%rsp), %ymm0, %ymm0
-vpaddw 7648(%rsp), %ymm6, %ymm6
-vmovdqa 6624(%rsp), %ymm1
-vmovdqa 7328(%rsp), %ymm7
-vpaddw 6976(%rsp), %ymm1, %ymm1
-vpaddw 7680(%rsp), %ymm7, %ymm7
-vmovdqa 6656(%rsp), %ymm2
-vmovdqa 7360(%rsp), %ymm8
-vpaddw 7008(%rsp), %ymm2, %ymm2
-vpaddw 7712(%rsp), %ymm8, %ymm8
-vmovdqa 6688(%rsp), %ymm3
-vmovdqa 7392(%rsp), %ymm9
-vpaddw 7040(%rsp), %ymm3, %ymm3
-vpaddw 7744(%rsp), %ymm9, %ymm9
-vmovdqa 6720(%rsp), %ymm4
-vmovdqa 7424(%rsp), %ymm10
-vpaddw 7072(%rsp), %ymm4, %ymm4
-vpaddw 7776(%rsp), %ymm10, %ymm10
-vmovdqa 6752(%rsp), %ymm5
-vmovdqa 7456(%rsp), %ymm11
-vpaddw 7104(%rsp), %ymm5, %ymm5
-vpaddw 7808(%rsp), %ymm11, %ymm11
+vpsubw 8832(%r8), %ymm4, %ymm4
+vmovdqa %ymm4, 9024(%r8)
+vmovdqa 6592(%r8), %ymm0
+vmovdqa 7296(%r8), %ymm6
+vpaddw 6944(%r8), %ymm0, %ymm0
+vpaddw 7648(%r8), %ymm6, %ymm6
+vmovdqa 6624(%r8), %ymm1
+vmovdqa 7328(%r8), %ymm7
+vpaddw 6976(%r8), %ymm1, %ymm1
+vpaddw 7680(%r8), %ymm7, %ymm7
+vmovdqa 6656(%r8), %ymm2
+vmovdqa 7360(%r8), %ymm8
+vpaddw 7008(%r8), %ymm2, %ymm2
+vpaddw 7712(%r8), %ymm8, %ymm8
+vmovdqa 6688(%r8), %ymm3
+vmovdqa 7392(%r8), %ymm9
+vpaddw 7040(%r8), %ymm3, %ymm3
+vpaddw 7744(%r8), %ymm9, %ymm9
+vmovdqa 6720(%r8), %ymm4
+vmovdqa 7424(%r8), %ymm10
+vpaddw 7072(%r8), %ymm4, %ymm4
+vpaddw 7776(%r8), %ymm10, %ymm10
+vmovdqa 6752(%r8), %ymm5
+vmovdqa 7456(%r8), %ymm11
+vpaddw 7104(%r8), %ymm5, %ymm5
+vpaddw 7808(%r8), %ymm11, %ymm11
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 5888(%rsp)
+vmovdqa %ymm12, 5888(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 5920(%rsp)
+vmovdqa %ymm13, 5920(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 5952(%rsp)
+vmovdqa %ymm12, 5952(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3681,7 +3685,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 5984(%rsp)
+vmovdqa %ymm13, 5984(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3691,7 +3695,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6016(%rsp)
+vmovdqa %ymm12, 6016(%r8)
 vpmullw %ymm0, %ymm11, %ymm13
 vpmullw %ymm1, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3703,7 +3707,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6048(%rsp)
+vmovdqa %ymm13, 6048(%r8)
 vpmullw %ymm1, %ymm11, %ymm12
 vpmullw %ymm2, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3713,7 +3717,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6080(%rsp)
+vmovdqa %ymm12, 6080(%r8)
 vpmullw %ymm2, %ymm11, %ymm13
 vpmullw %ymm3, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3721,51 +3725,51 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm5, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6112(%rsp)
+vmovdqa %ymm13, 6112(%r8)
 vpmullw %ymm3, %ymm11, %ymm12
 vpmullw %ymm4, %ymm10, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm5, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6144(%rsp)
+vmovdqa %ymm12, 6144(%r8)
 vpmullw %ymm4, %ymm11, %ymm13
 vpmullw %ymm5, %ymm10, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6176(%rsp)
+vmovdqa %ymm13, 6176(%r8)
 vpmullw %ymm5, %ymm11, %ymm12
-vmovdqa %ymm12, 6208(%rsp)
-vmovdqa 6784(%rsp), %ymm0
-vmovdqa 7488(%rsp), %ymm6
-vpaddw 7136(%rsp), %ymm0, %ymm0
-vpaddw 7840(%rsp), %ymm6, %ymm6
-vmovdqa 6816(%rsp), %ymm1
-vmovdqa 7520(%rsp), %ymm7
-vpaddw 7168(%rsp), %ymm1, %ymm1
-vpaddw 7872(%rsp), %ymm7, %ymm7
-vmovdqa 6848(%rsp), %ymm2
-vmovdqa 7552(%rsp), %ymm8
-vpaddw 7200(%rsp), %ymm2, %ymm2
-vpaddw 7904(%rsp), %ymm8, %ymm8
-vmovdqa 6880(%rsp), %ymm3
-vmovdqa 7584(%rsp), %ymm9
-vpaddw 7232(%rsp), %ymm3, %ymm3
-vpaddw 7936(%rsp), %ymm9, %ymm9
-vmovdqa 6912(%rsp), %ymm4
-vmovdqa 7616(%rsp), %ymm10
-vpaddw 7264(%rsp), %ymm4, %ymm4
-vpaddw 7968(%rsp), %ymm10, %ymm10
+vmovdqa %ymm12, 6208(%r8)
+vmovdqa 6784(%r8), %ymm0
+vmovdqa 7488(%r8), %ymm6
+vpaddw 7136(%r8), %ymm0, %ymm0
+vpaddw 7840(%r8), %ymm6, %ymm6
+vmovdqa 6816(%r8), %ymm1
+vmovdqa 7520(%r8), %ymm7
+vpaddw 7168(%r8), %ymm1, %ymm1
+vpaddw 7872(%r8), %ymm7, %ymm7
+vmovdqa 6848(%r8), %ymm2
+vmovdqa 7552(%r8), %ymm8
+vpaddw 7200(%r8), %ymm2, %ymm2
+vpaddw 7904(%r8), %ymm8, %ymm8
+vmovdqa 6880(%r8), %ymm3
+vmovdqa 7584(%r8), %ymm9
+vpaddw 7232(%r8), %ymm3, %ymm3
+vpaddw 7936(%r8), %ymm9, %ymm9
+vmovdqa 6912(%r8), %ymm4
+vmovdqa 7616(%r8), %ymm10
+vpaddw 7264(%r8), %ymm4, %ymm4
+vpaddw 7968(%r8), %ymm10, %ymm10
 vpmullw %ymm0, %ymm6, %ymm12
-vmovdqa %ymm12, 6272(%rsp)
+vmovdqa %ymm12, 6272(%r8)
 vpmullw %ymm0, %ymm7, %ymm13
 vpmullw %ymm1, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6304(%rsp)
+vmovdqa %ymm13, 6304(%r8)
 vpmullw %ymm0, %ymm8, %ymm12
 vpmullw %ymm1, %ymm7, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm2, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6336(%rsp)
+vmovdqa %ymm12, 6336(%r8)
 vpmullw %ymm0, %ymm9, %ymm13
 vpmullw %ymm1, %ymm8, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3773,7 +3777,7 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm3, %ymm6, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6368(%rsp)
+vmovdqa %ymm13, 6368(%r8)
 vpmullw %ymm0, %ymm10, %ymm12
 vpmullw %ymm1, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
@@ -3783,7 +3787,7 @@
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm6, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6400(%rsp)
+vmovdqa %ymm12, 6400(%r8)
 vpmullw %ymm1, %ymm10, %ymm13
 vpmullw %ymm2, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
@@ -3791,39 +3795,39 @@
 vpaddw %ymm13, %ymm15, %ymm13
 vpmullw %ymm4, %ymm7, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6432(%rsp)
+vmovdqa %ymm13, 6432(%r8)
 vpmullw %ymm2, %ymm10, %ymm12
 vpmullw %ymm3, %ymm9, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
 vpmullw %ymm4, %ymm8, %ymm15
 vpaddw %ymm12, %ymm15, %ymm12
-vmovdqa %ymm12, 6464(%rsp)
+vmovdqa %ymm12, 6464(%r8)
 vpmullw %ymm3, %ymm10, %ymm13
 vpmullw %ymm4, %ymm9, %ymm15
 vpaddw %ymm13, %ymm15, %ymm13
-vmovdqa %ymm13, 6496(%rsp)
+vmovdqa %ymm13, 6496(%r8)
 vpmullw %ymm4, %ymm10, %ymm12
-vmovdqa %ymm12, 6528(%rsp)
-vpaddw 6592(%rsp), %ymm0, %ymm0
-vpaddw 7296(%rsp), %ymm6, %ymm6
-vpaddw 6944(%rsp), %ymm0, %ymm0
-vpaddw 7648(%rsp), %ymm6, %ymm6
-vpaddw 6624(%rsp), %ymm1, %ymm1
-vpaddw 7328(%rsp), %ymm7, %ymm7
-vpaddw 6976(%rsp), %ymm1, %ymm1
-vpaddw 7680(%rsp), %ymm7, %ymm7
-vpaddw 6656(%rsp), %ymm2, %ymm2
-vpaddw 7360(%rsp), %ymm8, %ymm8
-vpaddw 7008(%rsp), %ymm2, %ymm2
-vpaddw 7712(%rsp), %ymm8, %ymm8
-vpaddw 6688(%rsp), %ymm3, %ymm3
-vpaddw 7392(%rsp), %ymm9, %ymm9
-vpaddw 7040(%rsp), %ymm3, %ymm3
-vpaddw 7744(%rsp), %ymm9, %ymm9
-vpaddw 6720(%rsp), %ymm4, %ymm4
-vpaddw 7424(%rsp), %ymm10, %ymm10
-vpaddw 7072(%rsp), %ymm4, %ymm4
-vpaddw 7776(%rsp), %ymm10, %ymm10
+vmovdqa %ymm12, 6528(%r8)
+vpaddw 6592(%r8), %ymm0, %ymm0
+vpaddw 7296(%r8), %ymm6, %ymm6
+vpaddw 6944(%r8), %ymm0, %ymm0
+vpaddw 7648(%r8), %ymm6, %ymm6
+vpaddw 6624(%r8), %ymm1, %ymm1
+vpaddw 7328(%r8), %ymm7, %ymm7
+vpaddw 6976(%r8), %ymm1, %ymm1
+vpaddw 7680(%r8), %ymm7, %ymm7
+vpaddw 6656(%r8), %ymm2, %ymm2
+vpaddw 7360(%r8), %ymm8, %ymm8
+vpaddw 7008(%r8), %ymm2, %ymm2
+vpaddw 7712(%r8), %ymm8, %ymm8
+vpaddw 6688(%r8), %ymm3, %ymm3
+vpaddw 7392(%r8), %ymm9, %ymm9
+vpaddw 7040(%r8), %ymm3, %ymm3
+vpaddw 7744(%r8), %ymm9, %ymm9
+vpaddw 6720(%r8), %ymm4, %ymm4
+vpaddw 7424(%r8), %ymm10, %ymm10
+vpaddw 7072(%r8), %ymm4, %ymm4
+vpaddw 7776(%r8), %ymm10, %ymm10
 vpmullw %ymm0, %ymm11, %ymm12
 vpmullw %ymm1, %ymm10, %ymm15
 vpaddw %ymm15, %ymm12, %ymm12
@@ -3835,9 +3839,9 @@
 vpaddw %ymm15, %ymm12, %ymm12
 vpmullw %ymm5, %ymm6, %ymm15
 vpaddw %ymm15, %ymm12, %ymm12
-vpsubw 6048(%rsp), %ymm12, %ymm12
-vpsubw 6432(%rsp), %ymm12, %ymm12
-vmovdqa %ymm12, 6240(%rsp)
+vpsubw 6048(%r8), %ymm12, %ymm12
+vpsubw 6432(%r8), %ymm12, %ymm12
+vmovdqa %ymm12, 6240(%r8)
 vpmullw %ymm5, %ymm7, %ymm12
 vpmullw %ymm5, %ymm8, %ymm13
 vpmullw %ymm5, %ymm9, %ymm14
@@ -3887,125 +3891,125 @@
 vpmullw %ymm1, %ymm6, %ymm5
 vpaddw %ymm5, %ymm8, %ymm8
 vpmullw %ymm0, %ymm6, %ymm7
-vmovdqa 6080(%rsp), %ymm0
-vpsubw 6272(%rsp), %ymm0, %ymm0
+vmovdqa 6080(%r8), %ymm0
+vpsubw 6272(%r8), %ymm0, %ymm0
 vpsubw %ymm0, %ymm12, %ymm6
-vpsubw 6464(%rsp), %ymm6, %ymm6
-vmovdqa %ymm6, 6272(%rsp)
+vpsubw 6464(%r8), %ymm6, %ymm6
+vmovdqa %ymm6, 6272(%r8)
 vpaddw %ymm7, %ymm0, %ymm0
-vpsubw 5888(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 6080(%rsp)
-vmovdqa 6112(%rsp), %ymm1
-vpsubw 6304(%rsp), %ymm1, %ymm1
+vpsubw 5888(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 6080(%r8)
+vmovdqa 6112(%r8), %ymm1
+vpsubw 6304(%r8), %ymm1, %ymm1
 vpsubw %ymm1, %ymm13, %ymm7
-vpsubw 6496(%rsp), %ymm7, %ymm7
-vmovdqa %ymm7, 6304(%rsp)
+vpsubw 6496(%r8), %ymm7, %ymm7
+vmovdqa %ymm7, 6304(%r8)
 vpaddw %ymm8, %ymm1, %ymm1
-vpsubw 5920(%rsp), %ymm1, %ymm1
-vmovdqa %ymm1, 6112(%rsp)
-vmovdqa 6144(%rsp), %ymm2
-vpsubw 6336(%rsp), %ymm2, %ymm2
+vpsubw 5920(%r8), %ymm1, %ymm1
+vmovdqa %ymm1, 6112(%r8)
+vmovdqa 6144(%r8), %ymm2
+vpsubw 6336(%r8), %ymm2, %ymm2
 vpsubw %ymm2, %ymm14, %ymm8
-vpsubw 6528(%rsp), %ymm8, %ymm8
-vmovdqa %ymm8, 6336(%rsp)
+vpsubw 6528(%r8), %ymm8, %ymm8
+vmovdqa %ymm8, 6336(%r8)
 vpaddw %ymm9, %ymm2, %ymm2
-vpsubw 5952(%rsp), %ymm2, %ymm2
-vmovdqa %ymm2, 6144(%rsp)
-vmovdqa 6176(%rsp), %ymm3
-vpsubw 6368(%rsp), %ymm3, %ymm3
+vpsubw 5952(%r8), %ymm2, %ymm2
+vmovdqa %ymm2, 6144(%r8)
+vmovdqa 6176(%r8), %ymm3
+vpsubw 6368(%r8), %ymm3, %ymm3
 vpsubw %ymm3, %ymm15, %ymm9
-vmovdqa %ymm9, 6368(%rsp)
+vmovdqa %ymm9, 6368(%r8)
 vpaddw %ymm10, %ymm3, %ymm3
-vpsubw 5984(%rsp), %ymm3, %ymm3
-vmovdqa %ymm3, 6176(%rsp)
-vmovdqa 6208(%rsp), %ymm4
-vpsubw 6400(%rsp), %ymm4, %ymm4
+vpsubw 5984(%r8), %ymm3, %ymm3
+vmovdqa %ymm3, 6176(%r8)
+vmovdqa 6208(%r8), %ymm4
+vpsubw 6400(%r8), %ymm4, %ymm4
 vpaddw %ymm11, %ymm4, %ymm4
-vpsubw 6016(%rsp), %ymm4, %ymm4
-vmovdqa %ymm4, 6208(%rsp)
-vmovdqa 8352(%rsp), %ymm0
-vpsubw 8704(%rsp), %ymm0, %ymm0
-vmovdqa 6240(%rsp), %ymm1
+vpsubw 6016(%r8), %ymm4, %ymm4
+vmovdqa %ymm4, 6208(%r8)
+vmovdqa 8352(%r8), %ymm0
+vpsubw 8704(%r8), %ymm0, %ymm0
+vmovdqa 6240(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9056(%rsp), %ymm1, %ymm6
-vpsubw 8000(%rsp), %ymm0, %ymm0
-vpaddw 5888(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8352(%rsp)
-vmovdqa 8384(%rsp), %ymm0
-vpsubw 8736(%rsp), %ymm0, %ymm0
-vmovdqa 6272(%rsp), %ymm1
+vpsubw 9056(%r8), %ymm1, %ymm6
+vpsubw 8000(%r8), %ymm0, %ymm0
+vpaddw 5888(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8352(%r8)
+vmovdqa 8384(%r8), %ymm0
+vpsubw 8736(%r8), %ymm0, %ymm0
+vmovdqa 6272(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9088(%rsp), %ymm1, %ymm7
-vpsubw 8032(%rsp), %ymm0, %ymm0
-vpaddw 5920(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8384(%rsp)
-vmovdqa 8416(%rsp), %ymm0
-vpsubw 8768(%rsp), %ymm0, %ymm0
-vmovdqa 6304(%rsp), %ymm1
+vpsubw 9088(%r8), %ymm1, %ymm7
+vpsubw 8032(%r8), %ymm0, %ymm0
+vpaddw 5920(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8384(%r8)
+vmovdqa 8416(%r8), %ymm0
+vpsubw 8768(%r8), %ymm0, %ymm0
+vmovdqa 6304(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9120(%rsp), %ymm1, %ymm8
-vpsubw 8064(%rsp), %ymm0, %ymm0
-vpaddw 5952(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8416(%rsp)
-vmovdqa 8448(%rsp), %ymm0
-vpsubw 8800(%rsp), %ymm0, %ymm0
-vmovdqa 6336(%rsp), %ymm1
+vpsubw 9120(%r8), %ymm1, %ymm8
+vpsubw 8064(%r8), %ymm0, %ymm0
+vpaddw 5952(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8416(%r8)
+vmovdqa 8448(%r8), %ymm0
+vpsubw 8800(%r8), %ymm0, %ymm0
+vmovdqa 6336(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9152(%rsp), %ymm1, %ymm9
-vpsubw 8096(%rsp), %ymm0, %ymm0
-vpaddw 5984(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8448(%rsp)
-vmovdqa 8480(%rsp), %ymm0
-vpsubw 8832(%rsp), %ymm0, %ymm0
-vmovdqa 6368(%rsp), %ymm1
+vpsubw 9152(%r8), %ymm1, %ymm9
+vpsubw 8096(%r8), %ymm0, %ymm0
+vpaddw 5984(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8448(%r8)
+vmovdqa 8480(%r8), %ymm0
+vpsubw 8832(%r8), %ymm0, %ymm0
+vmovdqa 6368(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9184(%rsp), %ymm1, %ymm10
-vpsubw 8128(%rsp), %ymm0, %ymm0
-vpaddw 6016(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8480(%rsp)
-vmovdqa 8512(%rsp), %ymm0
-vpsubw 8864(%rsp), %ymm0, %ymm0
-vmovdqa 6400(%rsp), %ymm1
+vpsubw 9184(%r8), %ymm1, %ymm10
+vpsubw 8128(%r8), %ymm0, %ymm0
+vpaddw 6016(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8480(%r8)
+vmovdqa 8512(%r8), %ymm0
+vpsubw 8864(%r8), %ymm0, %ymm0
+vmovdqa 6400(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9216(%rsp), %ymm1, %ymm11
-vpsubw 8160(%rsp), %ymm0, %ymm0
-vpaddw 6048(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8512(%rsp)
-vmovdqa 8544(%rsp), %ymm0
-vpsubw 8896(%rsp), %ymm0, %ymm0
-vmovdqa 6432(%rsp), %ymm1
+vpsubw 9216(%r8), %ymm1, %ymm11
+vpsubw 8160(%r8), %ymm0, %ymm0
+vpaddw 6048(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8512(%r8)
+vmovdqa 8544(%r8), %ymm0
+vpsubw 8896(%r8), %ymm0, %ymm0
+vmovdqa 6432(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9248(%rsp), %ymm1, %ymm12
-vpsubw 8192(%rsp), %ymm0, %ymm0
-vpaddw 6080(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8544(%rsp)
-vmovdqa 8576(%rsp), %ymm0
-vpsubw 8928(%rsp), %ymm0, %ymm0
-vmovdqa 6464(%rsp), %ymm1
+vpsubw 9248(%r8), %ymm1, %ymm12
+vpsubw 8192(%r8), %ymm0, %ymm0
+vpaddw 6080(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8544(%r8)
+vmovdqa 8576(%r8), %ymm0
+vpsubw 8928(%r8), %ymm0, %ymm0
+vmovdqa 6464(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9280(%rsp), %ymm1, %ymm13
-vpsubw 8224(%rsp), %ymm0, %ymm0
-vpaddw 6112(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8576(%rsp)
-vmovdqa 8608(%rsp), %ymm0
-vpsubw 8960(%rsp), %ymm0, %ymm0
-vmovdqa 6496(%rsp), %ymm1
+vpsubw 9280(%r8), %ymm1, %ymm13
+vpsubw 8224(%r8), %ymm0, %ymm0
+vpaddw 6112(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8576(%r8)
+vmovdqa 8608(%r8), %ymm0
+vpsubw 8960(%r8), %ymm0, %ymm0
+vmovdqa 6496(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9312(%rsp), %ymm1, %ymm14
-vpsubw 8256(%rsp), %ymm0, %ymm0
-vpaddw 6144(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8608(%rsp)
-vmovdqa 8640(%rsp), %ymm0
-vpsubw 8992(%rsp), %ymm0, %ymm0
-vmovdqa 6528(%rsp), %ymm1
+vpsubw 9312(%r8), %ymm1, %ymm14
+vpsubw 8256(%r8), %ymm0, %ymm0
+vpaddw 6144(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8608(%r8)
+vmovdqa 8640(%r8), %ymm0
+vpsubw 8992(%r8), %ymm0, %ymm0
+vmovdqa 6528(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
-vpsubw 9344(%rsp), %ymm1, %ymm15
-vpsubw 8288(%rsp), %ymm0, %ymm0
-vpaddw 6176(%rsp), %ymm0, %ymm0
-vmovdqa %ymm0, 8640(%rsp)
-vmovdqa 6208(%rsp), %ymm0
-vpsubw 8320(%rsp), %ymm0, %ymm0
-vpsubw 9024(%rsp), %ymm0, %ymm0
+vpsubw 9344(%r8), %ymm1, %ymm15
+vpsubw 8288(%r8), %ymm0, %ymm0
+vpaddw 6176(%r8), %ymm0, %ymm0
+vmovdqa %ymm0, 8640(%r8)
+vmovdqa 6208(%r8), %ymm0
+vpsubw 8320(%r8), %ymm0, %ymm0
+vpsubw 9024(%r8), %ymm0, %ymm0
 vpsubw 3488(%r10), %ymm0, %ymm0
 vpsubw 4896(%r10), %ymm0, %ymm0
 vmovdqa %ymm0, 4192(%r10)
@@ -4014,7 +4018,7 @@
 vpsubw %ymm0, %ymm6, %ymm6
 vpsubw 4928(%r10), %ymm6, %ymm6
 vpsubw 2816(%r10), %ymm0, %ymm0
-vpaddw 8000(%rsp), %ymm0, %ymm0
+vpaddw 8000(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3520(%r10)
 vmovdqa %ymm6, 4224(%r10)
 vmovdqa 3552(%r10), %ymm0
@@ -4022,7 +4026,7 @@
 vpsubw %ymm0, %ymm7, %ymm7
 vpsubw 4960(%r10), %ymm7, %ymm7
 vpsubw 2848(%r10), %ymm0, %ymm0
-vpaddw 8032(%rsp), %ymm0, %ymm0
+vpaddw 8032(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3552(%r10)
 vmovdqa %ymm7, 4256(%r10)
 vmovdqa 3584(%r10), %ymm0
@@ -4030,7 +4034,7 @@
 vpsubw %ymm0, %ymm8, %ymm8
 vpsubw 4992(%r10), %ymm8, %ymm8
 vpsubw 2880(%r10), %ymm0, %ymm0
-vpaddw 8064(%rsp), %ymm0, %ymm0
+vpaddw 8064(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3584(%r10)
 vmovdqa %ymm8, 4288(%r10)
 vmovdqa 3616(%r10), %ymm0
@@ -4038,7 +4042,7 @@
 vpsubw %ymm0, %ymm9, %ymm9
 vpsubw 5024(%r10), %ymm9, %ymm9
 vpsubw 2912(%r10), %ymm0, %ymm0
-vpaddw 8096(%rsp), %ymm0, %ymm0
+vpaddw 8096(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3616(%r10)
 vmovdqa %ymm9, 4320(%r10)
 vmovdqa 3648(%r10), %ymm0
@@ -4046,7 +4050,7 @@
 vpsubw %ymm0, %ymm10, %ymm10
 vpsubw 5056(%r10), %ymm10, %ymm10
 vpsubw 2944(%r10), %ymm0, %ymm0
-vpaddw 8128(%rsp), %ymm0, %ymm0
+vpaddw 8128(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3648(%r10)
 vmovdqa %ymm10, 4352(%r10)
 vmovdqa 3680(%r10), %ymm0
@@ -4054,7 +4058,7 @@
 vpsubw %ymm0, %ymm11, %ymm11
 vpsubw 5088(%r10), %ymm11, %ymm11
 vpsubw 2976(%r10), %ymm0, %ymm0
-vpaddw 8160(%rsp), %ymm0, %ymm0
+vpaddw 8160(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3680(%r10)
 vmovdqa %ymm11, 4384(%r10)
 vmovdqa 3712(%r10), %ymm0
@@ -4062,7 +4066,7 @@
 vpsubw %ymm0, %ymm12, %ymm12
 vpsubw 5120(%r10), %ymm12, %ymm12
 vpsubw 3008(%r10), %ymm0, %ymm0
-vpaddw 8192(%rsp), %ymm0, %ymm0
+vpaddw 8192(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3712(%r10)
 vmovdqa %ymm12, 4416(%r10)
 vmovdqa 3744(%r10), %ymm0
@@ -4070,7 +4074,7 @@
 vpsubw %ymm0, %ymm13, %ymm13
 vpsubw 5152(%r10), %ymm13, %ymm13
 vpsubw 3040(%r10), %ymm0, %ymm0
-vpaddw 8224(%rsp), %ymm0, %ymm0
+vpaddw 8224(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3744(%r10)
 vmovdqa %ymm13, 4448(%r10)
 vmovdqa 3776(%r10), %ymm0
@@ -4078,7 +4082,7 @@
 vpsubw %ymm0, %ymm14, %ymm14
 vpsubw 5184(%r10), %ymm14, %ymm14
 vpsubw 3072(%r10), %ymm0, %ymm0
-vpaddw 8256(%rsp), %ymm0, %ymm0
+vpaddw 8256(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3776(%r10)
 vmovdqa %ymm14, 4480(%r10)
 vmovdqa 3808(%r10), %ymm0
@@ -4086,111 +4090,111 @@
 vpsubw %ymm0, %ymm15, %ymm15
 vpsubw 5216(%r10), %ymm15, %ymm15
 vpsubw 3104(%r10), %ymm0, %ymm0
-vpaddw 8288(%rsp), %ymm0, %ymm0
+vpaddw 8288(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3808(%r10)
 vmovdqa %ymm15, 4512(%r10)
 vmovdqa 3840(%r10), %ymm0
 vpsubw 4544(%r10), %ymm0, %ymm0
-vmovdqa 9024(%rsp), %ymm1
+vmovdqa 9024(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5248(%r10), %ymm1, %ymm1
 vpsubw 3136(%r10), %ymm0, %ymm0
-vpaddw 8320(%rsp), %ymm0, %ymm0
+vpaddw 8320(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3840(%r10)
 vmovdqa %ymm1, 4544(%r10)
 vmovdqa 3872(%r10), %ymm0
 vpsubw 4576(%r10), %ymm0, %ymm0
-vmovdqa 9056(%rsp), %ymm1
+vmovdqa 9056(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5280(%r10), %ymm1, %ymm1
 vpsubw 3168(%r10), %ymm0, %ymm0
-vpaddw 8352(%rsp), %ymm0, %ymm0
+vpaddw 8352(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3872(%r10)
 vmovdqa %ymm1, 4576(%r10)
 vmovdqa 3904(%r10), %ymm0
 vpsubw 4608(%r10), %ymm0, %ymm0
-vmovdqa 9088(%rsp), %ymm1
+vmovdqa 9088(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5312(%r10), %ymm1, %ymm1
 vpsubw 3200(%r10), %ymm0, %ymm0
-vpaddw 8384(%rsp), %ymm0, %ymm0
+vpaddw 8384(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3904(%r10)
 vmovdqa %ymm1, 4608(%r10)
 vmovdqa 3936(%r10), %ymm0
 vpsubw 4640(%r10), %ymm0, %ymm0
-vmovdqa 9120(%rsp), %ymm1
+vmovdqa 9120(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5344(%r10), %ymm1, %ymm1
 vpsubw 3232(%r10), %ymm0, %ymm0
-vpaddw 8416(%rsp), %ymm0, %ymm0
+vpaddw 8416(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3936(%r10)
 vmovdqa %ymm1, 4640(%r10)
 vmovdqa 3968(%r10), %ymm0
 vpsubw 4672(%r10), %ymm0, %ymm0
-vmovdqa 9152(%rsp), %ymm1
+vmovdqa 9152(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5376(%r10), %ymm1, %ymm1
 vpsubw 3264(%r10), %ymm0, %ymm0
-vpaddw 8448(%rsp), %ymm0, %ymm0
+vpaddw 8448(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 3968(%r10)
 vmovdqa %ymm1, 4672(%r10)
 vmovdqa 4000(%r10), %ymm0
 vpsubw 4704(%r10), %ymm0, %ymm0
-vmovdqa 9184(%rsp), %ymm1
+vmovdqa 9184(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5408(%r10), %ymm1, %ymm1
 vpsubw 3296(%r10), %ymm0, %ymm0
-vpaddw 8480(%rsp), %ymm0, %ymm0
+vpaddw 8480(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 4000(%r10)
 vmovdqa %ymm1, 4704(%r10)
 vmovdqa 4032(%r10), %ymm0
 vpsubw 4736(%r10), %ymm0, %ymm0
-vmovdqa 9216(%rsp), %ymm1
+vmovdqa 9216(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5440(%r10), %ymm1, %ymm1
 vpsubw 3328(%r10), %ymm0, %ymm0
-vpaddw 8512(%rsp), %ymm0, %ymm0
+vpaddw 8512(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 4032(%r10)
 vmovdqa %ymm1, 4736(%r10)
 vmovdqa 4064(%r10), %ymm0
 vpsubw 4768(%r10), %ymm0, %ymm0
-vmovdqa 9248(%rsp), %ymm1
+vmovdqa 9248(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5472(%r10), %ymm1, %ymm1
 vpsubw 3360(%r10), %ymm0, %ymm0
-vpaddw 8544(%rsp), %ymm0, %ymm0
+vpaddw 8544(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 4064(%r10)
 vmovdqa %ymm1, 4768(%r10)
 vmovdqa 4096(%r10), %ymm0
 vpsubw 4800(%r10), %ymm0, %ymm0
-vmovdqa 9280(%rsp), %ymm1
+vmovdqa 9280(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5504(%r10), %ymm1, %ymm1
 vpsubw 3392(%r10), %ymm0, %ymm0
-vpaddw 8576(%rsp), %ymm0, %ymm0
+vpaddw 8576(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 4096(%r10)
 vmovdqa %ymm1, 4800(%r10)
 vmovdqa 4128(%r10), %ymm0
 vpsubw 4832(%r10), %ymm0, %ymm0
-vmovdqa 9312(%rsp), %ymm1
+vmovdqa 9312(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5536(%r10), %ymm1, %ymm1
 vpsubw 3424(%r10), %ymm0, %ymm0
-vpaddw 8608(%rsp), %ymm0, %ymm0
+vpaddw 8608(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 4128(%r10)
 vmovdqa %ymm1, 4832(%r10)
 vmovdqa 4160(%r10), %ymm0
 vpsubw 4864(%r10), %ymm0, %ymm0
-vmovdqa 9344(%rsp), %ymm1
+vmovdqa 9344(%r8), %ymm1
 vpsubw %ymm0, %ymm1, %ymm1
 vpsubw 5568(%r10), %ymm1, %ymm1
 vpsubw 3456(%r10), %ymm0, %ymm0
-vpaddw 8640(%rsp), %ymm0, %ymm0
+vpaddw 8640(%r8), %ymm0, %ymm0
 vmovdqa %ymm0, 4160(%r10)
 vmovdqa %ymm1, 4864(%r10)
 vpxor %ymm1, %ymm1, %ymm1
 vmovdqa %ymm1, 5600(%r10)
-subq $32, %rsp
+subq $32, %r8
 vmovdqa 2816(%r10), %ymm0
 vmovdqa 2880(%r10), %ymm1
 vmovdqa 2944(%r10), %ymm2
@@ -4231,7 +4235,7 @@
 vpunpckhwd 3232(%r10), %ymm2, %ymm1
 vpunpcklwd 3296(%r10), %ymm3, %ymm2
 vpunpckhwd 3296(%r10), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -4283,7 +4287,7 @@
 vmovdqa %ymm15, 2496(%r12)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 2688(%r12)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1344(%r12)
 vpermq $78, %ymm11, %ymm11
@@ -4329,7 +4333,7 @@
 vpunpckhwd 3744(%r10), %ymm2, %ymm1
 vpunpcklwd 3808(%r10), %ymm3, %ymm2
 vpunpckhwd 3808(%r10), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -4381,7 +4385,7 @@
 vmovdqa %ymm15, 2528(%r12)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 2720(%r12)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1376(%r12)
 vpermq $78, %ymm11, %ymm11
@@ -4427,7 +4431,7 @@
 vpunpckhwd 4256(%r10), %ymm2, %ymm1
 vpunpcklwd 4320(%r10), %ymm3, %ymm2
 vpunpckhwd 4320(%r10), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -4479,7 +4483,7 @@
 vmovdqa %ymm15, 2560(%r12)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 2752(%r12)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1408(%r12)
 vpermq $78, %ymm11, %ymm11
@@ -4525,7 +4529,7 @@
 vpunpckhwd 4640(%r10), %ymm2, %ymm1
 vpunpcklwd 4704(%r10), %ymm3, %ymm2
 vpunpckhwd 4704(%r10), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -4577,7 +4581,7 @@
 vmovdqa %ymm15, 2592(%r12)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 2784(%r12)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1440(%r12)
 vpermq $78, %ymm11, %ymm11
@@ -4623,7 +4627,7 @@
 vpunpckhwd 5152(%r10), %ymm2, %ymm1
 vpunpcklwd 5216(%r10), %ymm3, %ymm2
 vpunpckhwd 5216(%r10), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -4675,7 +4679,7 @@
 vmovdqa %ymm15, 2624(%r12)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 2816(%r12)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1472(%r12)
 vpermq $78, %ymm11, %ymm11
@@ -4721,7 +4725,7 @@
 vpunpckhwd 5664(%r10), %ymm2, %ymm1
 vpunpcklwd 5728(%r10), %ymm3, %ymm2
 vpunpckhwd 5728(%r10), %ymm3, %ymm3
-vmovdqa %ymm11, 0(%rsp)
+vmovdqa %ymm11, 0(%r8)
 vpunpckldq %ymm14, %ymm12, %ymm11
 vpunpckhdq %ymm14, %ymm12, %ymm12
 vpunpckldq %ymm15, %ymm13, %ymm14
@@ -4773,54 +4777,53 @@
 vmovdqa %ymm15, 2656(%r12)
 vinserti128 $0, %xmm10, %ymm14, %ymm15
 vmovdqa %ymm15, 2848(%r12)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa 0(%r8), %ymm11
 vinserti128 $1, %xmm1, %ymm11, %ymm14
 vmovdqa %ymm14, 1504(%r12)
 vpermq $78, %ymm11, %ymm11
 vinserti128 $0, %xmm11, %ymm1, %ymm1
 vmovdqa %ymm1, 3040(%r12)
-addq $32, %rsp
+addq $32, %r8
 add $1536, %rax
 add $1536, %r11
 add $3072, %r12
 dec %ecx
 jnz karatsuba_loop_4eced63f144beffcb0247f9c6f67d165
 sub $12288, %r12
-add $9408, %rsp
-subq $2400, %rsp
+add $9408-2400, %r8
 vpxor %ymm0, %ymm0, %ymm0
-vmovdqa %ymm0, 1792(%rsp)
-vmovdqa %ymm0, 1824(%rsp)
-vmovdqa %ymm0, 1856(%rsp)
-vmovdqa %ymm0, 1888(%rsp)
-vmovdqa %ymm0, 1920(%rsp)
-vmovdqa %ymm0, 1952(%rsp)
-vmovdqa %ymm0, 1984(%rsp)
-vmovdqa %ymm0, 2016(%rsp)
-vmovdqa %ymm0, 2048(%rsp)
-vmovdqa %ymm0, 2080(%rsp)
-vmovdqa %ymm0, 2112(%rsp)
-vmovdqa %ymm0, 2144(%rsp)
-vmovdqa %ymm0, 2176(%rsp)
-vmovdqa %ymm0, 2208(%rsp)
-vmovdqa %ymm0, 2240(%rsp)
-vmovdqa %ymm0, 2272(%rsp)
-vmovdqa %ymm0, 2304(%rsp)
-vmovdqa %ymm0, 2336(%rsp)
-vmovdqa %ymm0, 2368(%rsp)
-vmovdqa %ymm0, 2400(%rsp)
-vmovdqa %ymm0, 2432(%rsp)
-vmovdqa %ymm0, 2464(%rsp)
-vmovdqa %ymm0, 2496(%rsp)
-vmovdqa %ymm0, 2528(%rsp)
-vmovdqa %ymm0, 2560(%rsp)
-vmovdqa %ymm0, 2592(%rsp)
-vmovdqa %ymm0, 2624(%rsp)
-vmovdqa %ymm0, 2656(%rsp)
-vmovdqa %ymm0, 2688(%rsp)
-vmovdqa %ymm0, 2720(%rsp)
-vmovdqa %ymm0, 2752(%rsp)
-vmovdqa %ymm0, 2784(%rsp)
+vmovdqa %ymm0, 1792(%r8)
+vmovdqa %ymm0, 1824(%r8)
+vmovdqa %ymm0, 1856(%r8)
+vmovdqa %ymm0, 1888(%r8)
+vmovdqa %ymm0, 1920(%r8)
+vmovdqa %ymm0, 1952(%r8)
+vmovdqa %ymm0, 1984(%r8)
+vmovdqa %ymm0, 2016(%r8)
+vmovdqa %ymm0, 2048(%r8)
+vmovdqa %ymm0, 2080(%r8)
+vmovdqa %ymm0, 2112(%r8)
+vmovdqa %ymm0, 2144(%r8)
+vmovdqa %ymm0, 2176(%r8)
+vmovdqa %ymm0, 2208(%r8)
+vmovdqa %ymm0, 2240(%r8)
+vmovdqa %ymm0, 2272(%r8)
+vmovdqa %ymm0, 2304(%r8)
+vmovdqa %ymm0, 2336(%r8)
+vmovdqa %ymm0, 2368(%r8)
+vmovdqa %ymm0, 2400(%r8)
+vmovdqa %ymm0, 2432(%r8)
+vmovdqa %ymm0, 2464(%r8)
+vmovdqa %ymm0, 2496(%r8)
+vmovdqa %ymm0, 2528(%r8)
+vmovdqa %ymm0, 2560(%r8)
+vmovdqa %ymm0, 2592(%r8)
+vmovdqa %ymm0, 2624(%r8)
+vmovdqa %ymm0, 2656(%r8)
+vmovdqa %ymm0, 2688(%r8)
+vmovdqa %ymm0, 2720(%r8)
+vmovdqa %ymm0, 2752(%r8)
+vmovdqa %ymm0, 2784(%r8)
 vmovdqa const729(%rip), %ymm15
 vmovdqa const3_inv(%rip), %ymm14
 vmovdqa const5_inv(%rip), %ymm13
@@ -4860,14 +4863,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 0(%r12), %ymm8
 vmovdqa 864(%r12), %ymm9
-vmovdqa %ymm8, 0(%rsp)
-vmovdqa %ymm0, 32(%rsp)
-vmovdqa %ymm1, 64(%rsp)
-vmovdqa %ymm7, 96(%rsp)
-vmovdqa %ymm5, 128(%rsp)
-vmovdqa %ymm2, 160(%rsp)
-vmovdqa %ymm3, 192(%rsp)
-vmovdqa %ymm9, 224(%rsp)
+vmovdqa %ymm8, 0(%r8)
+vmovdqa %ymm0, 32(%r8)
+vmovdqa %ymm1, 64(%r8)
+vmovdqa %ymm7, 96(%r8)
+vmovdqa %ymm5, 128(%r8)
+vmovdqa %ymm2, 160(%r8)
+vmovdqa %ymm3, 192(%r8)
+vmovdqa %ymm9, 224(%r8)
 vmovdqa 1824(%r12), %ymm0
 vpsubw 1920(%r12), %ymm0, %ymm0
 vmovdqa 2208(%r12), %ymm1
@@ -4903,14 +4906,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 1728(%r12), %ymm8
 vmovdqa 2592(%r12), %ymm9
-vmovdqa %ymm8, 256(%rsp)
-vmovdqa %ymm0, 288(%rsp)
-vmovdqa %ymm1, 320(%rsp)
-vmovdqa %ymm7, 352(%rsp)
-vmovdqa %ymm5, 384(%rsp)
-vmovdqa %ymm2, 416(%rsp)
-vmovdqa %ymm3, 448(%rsp)
-vmovdqa %ymm9, 480(%rsp)
+vmovdqa %ymm8, 256(%r8)
+vmovdqa %ymm0, 288(%r8)
+vmovdqa %ymm1, 320(%r8)
+vmovdqa %ymm7, 352(%r8)
+vmovdqa %ymm5, 384(%r8)
+vmovdqa %ymm2, 416(%r8)
+vmovdqa %ymm3, 448(%r8)
+vmovdqa %ymm9, 480(%r8)
 vmovdqa 3552(%r12), %ymm0
 vpsubw 3648(%r12), %ymm0, %ymm0
 vmovdqa 3936(%r12), %ymm1
@@ -4946,14 +4949,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 3456(%r12), %ymm8
 vmovdqa 4320(%r12), %ymm9
-vmovdqa %ymm8, 512(%rsp)
-vmovdqa %ymm0, 544(%rsp)
-vmovdqa %ymm1, 576(%rsp)
-vmovdqa %ymm7, 608(%rsp)
-vmovdqa %ymm5, 640(%rsp)
-vmovdqa %ymm2, 672(%rsp)
-vmovdqa %ymm3, 704(%rsp)
-vmovdqa %ymm9, 736(%rsp)
+vmovdqa %ymm8, 512(%r8)
+vmovdqa %ymm0, 544(%r8)
+vmovdqa %ymm1, 576(%r8)
+vmovdqa %ymm7, 608(%r8)
+vmovdqa %ymm5, 640(%r8)
+vmovdqa %ymm2, 672(%r8)
+vmovdqa %ymm3, 704(%r8)
+vmovdqa %ymm9, 736(%r8)
 vmovdqa 5280(%r12), %ymm0
 vpsubw 5376(%r12), %ymm0, %ymm0
 vmovdqa 5664(%r12), %ymm1
@@ -4989,14 +4992,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 5184(%r12), %ymm8
 vmovdqa 6048(%r12), %ymm9
-vmovdqa %ymm8, 768(%rsp)
-vmovdqa %ymm0, 800(%rsp)
-vmovdqa %ymm1, 832(%rsp)
-vmovdqa %ymm7, 864(%rsp)
-vmovdqa %ymm5, 896(%rsp)
-vmovdqa %ymm2, 928(%rsp)
-vmovdqa %ymm3, 960(%rsp)
-vmovdqa %ymm9, 992(%rsp)
+vmovdqa %ymm8, 768(%r8)
+vmovdqa %ymm0, 800(%r8)
+vmovdqa %ymm1, 832(%r8)
+vmovdqa %ymm7, 864(%r8)
+vmovdqa %ymm5, 896(%r8)
+vmovdqa %ymm2, 928(%r8)
+vmovdqa %ymm3, 960(%r8)
+vmovdqa %ymm9, 992(%r8)
 vmovdqa 7008(%r12), %ymm0
 vpsubw 7104(%r12), %ymm0, %ymm0
 vmovdqa 7392(%r12), %ymm1
@@ -5032,14 +5035,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 6912(%r12), %ymm8
 vmovdqa 7776(%r12), %ymm9
-vmovdqa %ymm8, 1024(%rsp)
-vmovdqa %ymm0, 1056(%rsp)
-vmovdqa %ymm1, 1088(%rsp)
-vmovdqa %ymm7, 1120(%rsp)
-vmovdqa %ymm5, 1152(%rsp)
-vmovdqa %ymm2, 1184(%rsp)
-vmovdqa %ymm3, 1216(%rsp)
-vmovdqa %ymm9, 1248(%rsp)
+vmovdqa %ymm8, 1024(%r8)
+vmovdqa %ymm0, 1056(%r8)
+vmovdqa %ymm1, 1088(%r8)
+vmovdqa %ymm7, 1120(%r8)
+vmovdqa %ymm5, 1152(%r8)
+vmovdqa %ymm2, 1184(%r8)
+vmovdqa %ymm3, 1216(%r8)
+vmovdqa %ymm9, 1248(%r8)
 vmovdqa 8736(%r12), %ymm0
 vpsubw 8832(%r12), %ymm0, %ymm0
 vmovdqa 9120(%r12), %ymm1
@@ -5075,14 +5078,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 8640(%r12), %ymm8
 vmovdqa 9504(%r12), %ymm9
-vmovdqa %ymm8, 1280(%rsp)
-vmovdqa %ymm0, 1312(%rsp)
-vmovdqa %ymm1, 1344(%rsp)
-vmovdqa %ymm7, 1376(%rsp)
-vmovdqa %ymm5, 1408(%rsp)
-vmovdqa %ymm2, 1440(%rsp)
-vmovdqa %ymm3, 1472(%rsp)
-vmovdqa %ymm9, 1504(%rsp)
+vmovdqa %ymm8, 1280(%r8)
+vmovdqa %ymm0, 1312(%r8)
+vmovdqa %ymm1, 1344(%r8)
+vmovdqa %ymm7, 1376(%r8)
+vmovdqa %ymm5, 1408(%r8)
+vmovdqa %ymm2, 1440(%r8)
+vmovdqa %ymm3, 1472(%r8)
+vmovdqa %ymm9, 1504(%r8)
 vmovdqa 10464(%r12), %ymm0
 vpsubw 10560(%r12), %ymm0, %ymm0
 vmovdqa 10848(%r12), %ymm1
@@ -5118,23 +5121,23 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 10368(%r12), %ymm8
 vmovdqa 11232(%r12), %ymm9
-vmovdqa %ymm8, 1536(%rsp)
-vmovdqa %ymm0, 1568(%rsp)
-vmovdqa %ymm1, 1600(%rsp)
-vmovdqa %ymm7, 1632(%rsp)
-vmovdqa %ymm5, 1664(%rsp)
-vmovdqa %ymm2, 1696(%rsp)
-vmovdqa %ymm3, 1728(%rsp)
-vmovdqa %ymm9, 1760(%rsp)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa %ymm8, 1536(%r8)
+vmovdqa %ymm0, 1568(%r8)
+vmovdqa %ymm1, 1600(%r8)
+vmovdqa %ymm7, 1632(%r8)
+vmovdqa %ymm5, 1664(%r8)
+vmovdqa %ymm2, 1696(%r8)
+vmovdqa %ymm3, 1728(%r8)
+vmovdqa %ymm9, 1760(%r8)
+vmovdqa 0(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm10
 vpunpckhwd const0(%rip), %ymm11, %ymm9
 vpslld $1, %ymm10, %ymm10
 vpslld $1, %ymm9, %ymm9
-vmovdqa 256(%rsp), %ymm8
+vmovdqa 256(%r8), %ymm8
 vpunpcklwd const0(%rip), %ymm8, %ymm7
 vpunpckhwd const0(%rip), %ymm8, %ymm8
-vmovdqa 512(%rsp), %ymm6
+vmovdqa 512(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm7, %ymm4
@@ -5148,7 +5151,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1536(%rsp), %ymm5
+vmovdqa 1536(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm8
 vpunpckhwd const0(%rip), %ymm5, %ymm7
 vpslld $1, %ymm8, %ymm8
@@ -5160,9 +5163,9 @@
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpackusdw %ymm3, %ymm4, %ymm3
-vmovdqa 768(%rsp), %ymm4
-vpaddw 1024(%rsp), %ymm4, %ymm7
-vpsubw 1024(%rsp), %ymm4, %ymm4
+vmovdqa 768(%r8), %ymm4
+vpaddw 1024(%r8), %ymm4, %ymm7
+vpsubw 1024(%r8), %ymm4, %ymm4
 vpsrlw $2, %ymm4, %ymm4
 vpsubw %ymm6, %ymm4, %ymm4
 vpmullw %ymm14, %ymm4, %ymm4
@@ -5172,7 +5175,7 @@
 vpsubw %ymm7, %ymm8, %ymm7
 vpsrlw $3, %ymm7, %ymm7
 vpsubw %ymm3, %ymm7, %ymm7
-vmovdqa 1280(%rsp), %ymm8
+vmovdqa 1280(%r8), %ymm8
 vpsubw %ymm11, %ymm8, %ymm8
 vpmullw %ymm15, %ymm5, %ymm9
 vpsubw %ymm9, %ymm8, %ymm9
@@ -5197,7 +5200,7 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm10
 vpor %ymm10, %ymm7, %ymm7
 vpaddw %ymm7, %ymm11, %ymm11
-vmovdqa %xmm9, 2048(%rsp)
+vmovdqa %xmm9, 2048(%r8)
 vpshufb shuf48_16(%rip), %ymm8, %ymm8
 vpand mask3_5_3_5(%rip), %ymm8, %ymm9
 vpand mask5_3_5_3(%rip), %ymm8, %ymm8
@@ -5205,7 +5208,7 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm10
 vpor %ymm10, %ymm8, %ymm8
 vpaddw %ymm8, %ymm6, %ymm6
-vmovdqa %xmm9, 2304(%rsp)
+vmovdqa %xmm9, 2304(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm9
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
@@ -5213,7 +5216,7 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm10
 vpor %ymm10, %ymm5, %ymm5
 vpaddw %ymm5, %ymm3, %ymm3
-vmovdqa %xmm9, 2560(%rsp)
+vmovdqa %xmm9, 2560(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 0(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -5222,15 +5225,15 @@
 vmovdqu %ymm3, 704(%rdi)
 vpand mask_mod8192(%rip), %ymm4, %ymm4
 vmovdqu %ymm4, 1056(%rdi)
-vmovdqa 32(%rsp), %ymm5
+vmovdqa 32(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm8
 vpunpckhwd const0(%rip), %ymm5, %ymm7
 vpslld $1, %ymm8, %ymm8
 vpslld $1, %ymm7, %ymm7
-vmovdqa 288(%rsp), %ymm4
+vmovdqa 288(%r8), %ymm4
 vpunpcklwd const0(%rip), %ymm4, %ymm3
 vpunpckhwd const0(%rip), %ymm4, %ymm4
-vmovdqa 544(%rsp), %ymm6
+vmovdqa 544(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm3, %ymm9
@@ -5244,7 +5247,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1568(%rsp), %ymm11
+vmovdqa 1568(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm4
 vpunpckhwd const0(%rip), %ymm11, %ymm3
 vpslld $1, %ymm4, %ymm4
@@ -5256,9 +5259,9 @@
 vpand mask32_to_16(%rip), %ymm9, %ymm9
 vpand mask32_to_16(%rip), %ymm10, %ymm10
 vpackusdw %ymm10, %ymm9, %ymm10
-vmovdqa 800(%rsp), %ymm9
-vpaddw 1056(%rsp), %ymm9, %ymm3
-vpsubw 1056(%rsp), %ymm9, %ymm9
+vmovdqa 800(%r8), %ymm9
+vpaddw 1056(%r8), %ymm9, %ymm3
+vpsubw 1056(%r8), %ymm9, %ymm9
 vpsrlw $2, %ymm9, %ymm9
 vpsubw %ymm6, %ymm9, %ymm9
 vpmullw %ymm14, %ymm9, %ymm9
@@ -5268,7 +5271,7 @@
 vpsubw %ymm3, %ymm4, %ymm3
 vpsrlw $3, %ymm3, %ymm3
 vpsubw %ymm10, %ymm3, %ymm3
-vmovdqa 1312(%rsp), %ymm4
+vmovdqa 1312(%r8), %ymm4
 vpsubw %ymm5, %ymm4, %ymm4
 vpmullw %ymm15, %ymm11, %ymm7
 vpsubw %ymm7, %ymm4, %ymm7
@@ -5293,7 +5296,7 @@
 vpand mask_keephigh(%rip), %ymm7, %ymm8
 vpor %ymm8, %ymm3, %ymm3
 vpaddw %ymm3, %ymm5, %ymm5
-vmovdqa %xmm7, 2080(%rsp)
+vmovdqa %xmm7, 2080(%r8)
 vpshufb shuf48_16(%rip), %ymm4, %ymm4
 vpand mask3_5_3_5(%rip), %ymm4, %ymm7
 vpand mask5_3_5_3(%rip), %ymm4, %ymm4
@@ -5301,7 +5304,7 @@
 vpand mask_keephigh(%rip), %ymm7, %ymm8
 vpor %ymm8, %ymm4, %ymm4
 vpaddw %ymm4, %ymm6, %ymm6
-vmovdqa %xmm7, 2336(%rsp)
+vmovdqa %xmm7, 2336(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm7
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
@@ -5309,7 +5312,7 @@
 vpand mask_keephigh(%rip), %ymm7, %ymm8
 vpor %ymm8, %ymm11, %ymm11
 vpaddw %ymm11, %ymm10, %ymm10
-vmovdqa %xmm7, 2592(%rsp)
+vmovdqa %xmm7, 2592(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 88(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -5318,15 +5321,15 @@
 vmovdqu %ymm10, 792(%rdi)
 vpand mask_mod8192(%rip), %ymm9, %ymm9
 vmovdqu %ymm9, 1144(%rdi)
-vmovdqa 64(%rsp), %ymm11
+vmovdqa 64(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm4
 vpunpckhwd const0(%rip), %ymm11, %ymm3
 vpslld $1, %ymm4, %ymm4
 vpslld $1, %ymm3, %ymm3
-vmovdqa 320(%rsp), %ymm9
+vmovdqa 320(%r8), %ymm9
 vpunpcklwd const0(%rip), %ymm9, %ymm10
 vpunpckhwd const0(%rip), %ymm9, %ymm9
-vmovdqa 576(%rsp), %ymm6
+vmovdqa 576(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm10, %ymm7
@@ -5340,7 +5343,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1600(%rsp), %ymm5
+vmovdqa 1600(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm9
 vpunpckhwd const0(%rip), %ymm5, %ymm10
 vpslld $1, %ymm9, %ymm9
@@ -5352,9 +5355,9 @@
 vpand mask32_to_16(%rip), %ymm7, %ymm7
 vpand mask32_to_16(%rip), %ymm8, %ymm8
 vpackusdw %ymm8, %ymm7, %ymm8
-vmovdqa 832(%rsp), %ymm7
-vpaddw 1088(%rsp), %ymm7, %ymm10
-vpsubw 1088(%rsp), %ymm7, %ymm7
+vmovdqa 832(%r8), %ymm7
+vpaddw 1088(%r8), %ymm7, %ymm10
+vpsubw 1088(%r8), %ymm7, %ymm7
 vpsrlw $2, %ymm7, %ymm7
 vpsubw %ymm6, %ymm7, %ymm7
 vpmullw %ymm14, %ymm7, %ymm7
@@ -5364,7 +5367,7 @@
 vpsubw %ymm10, %ymm9, %ymm10
 vpsrlw $3, %ymm10, %ymm10
 vpsubw %ymm8, %ymm10, %ymm10
-vmovdqa 1344(%rsp), %ymm9
+vmovdqa 1344(%r8), %ymm9
 vpsubw %ymm11, %ymm9, %ymm9
 vpmullw %ymm15, %ymm5, %ymm3
 vpsubw %ymm3, %ymm9, %ymm3
@@ -5389,7 +5392,7 @@
 vpand mask_keephigh(%rip), %ymm3, %ymm4
 vpor %ymm4, %ymm10, %ymm10
 vpaddw %ymm10, %ymm11, %ymm11
-vmovdqa %xmm3, 2112(%rsp)
+vmovdqa %xmm3, 2112(%r8)
 vpshufb shuf48_16(%rip), %ymm9, %ymm9
 vpand mask3_5_3_5(%rip), %ymm9, %ymm3
 vpand mask5_3_5_3(%rip), %ymm9, %ymm9
@@ -5397,7 +5400,7 @@
 vpand mask_keephigh(%rip), %ymm3, %ymm4
 vpor %ymm4, %ymm9, %ymm9
 vpaddw %ymm9, %ymm6, %ymm6
-vmovdqa %xmm3, 2368(%rsp)
+vmovdqa %xmm3, 2368(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm3
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
@@ -5405,7 +5408,7 @@
 vpand mask_keephigh(%rip), %ymm3, %ymm4
 vpor %ymm4, %ymm5, %ymm5
 vpaddw %ymm5, %ymm8, %ymm8
-vmovdqa %xmm3, 2624(%rsp)
+vmovdqa %xmm3, 2624(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 176(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -5414,15 +5417,15 @@
 vmovdqu %ymm8, 880(%rdi)
 vpand mask_mod8192(%rip), %ymm7, %ymm7
 vmovdqu %ymm7, 1232(%rdi)
-vmovdqa 96(%rsp), %ymm5
+vmovdqa 96(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm9
 vpunpckhwd const0(%rip), %ymm5, %ymm10
 vpslld $1, %ymm9, %ymm9
 vpslld $1, %ymm10, %ymm10
-vmovdqa 352(%rsp), %ymm7
+vmovdqa 352(%r8), %ymm7
 vpunpcklwd const0(%rip), %ymm7, %ymm8
 vpunpckhwd const0(%rip), %ymm7, %ymm7
-vmovdqa 608(%rsp), %ymm6
+vmovdqa 608(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm8, %ymm3
@@ -5436,7 +5439,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1632(%rsp), %ymm11
+vmovdqa 1632(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm7
 vpunpckhwd const0(%rip), %ymm11, %ymm8
 vpslld $1, %ymm7, %ymm7
@@ -5448,9 +5451,9 @@
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpackusdw %ymm4, %ymm3, %ymm4
-vmovdqa 864(%rsp), %ymm3
-vpaddw 1120(%rsp), %ymm3, %ymm8
-vpsubw 1120(%rsp), %ymm3, %ymm3
+vmovdqa 864(%r8), %ymm3
+vpaddw 1120(%r8), %ymm3, %ymm8
+vpsubw 1120(%r8), %ymm3, %ymm3
 vpsrlw $2, %ymm3, %ymm3
 vpsubw %ymm6, %ymm3, %ymm3
 vpmullw %ymm14, %ymm3, %ymm3
@@ -5460,7 +5463,7 @@
 vpsubw %ymm8, %ymm7, %ymm8
 vpsrlw $3, %ymm8, %ymm8
 vpsubw %ymm4, %ymm8, %ymm8
-vmovdqa 1376(%rsp), %ymm7
+vmovdqa 1376(%r8), %ymm7
 vpsubw %ymm5, %ymm7, %ymm7
 vpmullw %ymm15, %ymm11, %ymm10
 vpsubw %ymm10, %ymm7, %ymm10
@@ -5485,7 +5488,7 @@
 vpand mask_keephigh(%rip), %ymm10, %ymm9
 vpor %ymm9, %ymm8, %ymm8
 vpaddw %ymm8, %ymm5, %ymm5
-vmovdqa %xmm10, 2144(%rsp)
+vmovdqa %xmm10, 2144(%r8)
 vpshufb shuf48_16(%rip), %ymm7, %ymm7
 vpand mask3_5_3_5(%rip), %ymm7, %ymm10
 vpand mask5_3_5_3(%rip), %ymm7, %ymm7
@@ -5493,7 +5496,7 @@
 vpand mask_keephigh(%rip), %ymm10, %ymm9
 vpor %ymm9, %ymm7, %ymm7
 vpaddw %ymm7, %ymm6, %ymm6
-vmovdqa %xmm10, 2400(%rsp)
+vmovdqa %xmm10, 2400(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm10
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
@@ -5501,7 +5504,7 @@
 vpand mask_keephigh(%rip), %ymm10, %ymm9
 vpor %ymm9, %ymm11, %ymm11
 vpaddw %ymm11, %ymm4, %ymm4
-vmovdqa %xmm10, 2656(%rsp)
+vmovdqa %xmm10, 2656(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 264(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -5510,15 +5513,15 @@
 vmovdqu %ymm4, 968(%rdi)
 vpand mask_mod8192(%rip), %ymm3, %ymm3
 vmovdqu %ymm3, 1320(%rdi)
-vmovdqa 128(%rsp), %ymm11
+vmovdqa 128(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm7
 vpunpckhwd const0(%rip), %ymm11, %ymm8
 vpslld $1, %ymm7, %ymm7
 vpslld $1, %ymm8, %ymm8
-vmovdqa 384(%rsp), %ymm3
+vmovdqa 384(%r8), %ymm3
 vpunpcklwd const0(%rip), %ymm3, %ymm4
 vpunpckhwd const0(%rip), %ymm3, %ymm3
-vmovdqa 640(%rsp), %ymm6
+vmovdqa 640(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm4, %ymm10
@@ -5532,7 +5535,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1664(%rsp), %ymm5
+vmovdqa 1664(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm3
 vpunpckhwd const0(%rip), %ymm5, %ymm4
 vpslld $1, %ymm3, %ymm3
@@ -5544,9 +5547,9 @@
 vpand mask32_to_16(%rip), %ymm10, %ymm10
 vpand mask32_to_16(%rip), %ymm9, %ymm9
 vpackusdw %ymm9, %ymm10, %ymm9
-vmovdqa 896(%rsp), %ymm10
-vpaddw 1152(%rsp), %ymm10, %ymm4
-vpsubw 1152(%rsp), %ymm10, %ymm10
+vmovdqa 896(%r8), %ymm10
+vpaddw 1152(%r8), %ymm10, %ymm4
+vpsubw 1152(%r8), %ymm10, %ymm10
 vpsrlw $2, %ymm10, %ymm10
 vpsubw %ymm6, %ymm10, %ymm10
 vpmullw %ymm14, %ymm10, %ymm10
@@ -5556,7 +5559,7 @@
 vpsubw %ymm4, %ymm3, %ymm4
 vpsrlw $3, %ymm4, %ymm4
 vpsubw %ymm9, %ymm4, %ymm4
-vmovdqa 1408(%rsp), %ymm3
+vmovdqa 1408(%r8), %ymm3
 vpsubw %ymm11, %ymm3, %ymm3
 vpmullw %ymm15, %ymm5, %ymm8
 vpsubw %ymm8, %ymm3, %ymm8
@@ -5590,7 +5593,7 @@
 vpaddw %ymm10, %ymm7, %ymm7
 vpand mask_mod8192(%rip), %ymm7, %ymm7
 vmovdqu %ymm7, 0(%rdi)
-vmovdqa %xmm2, 1920(%rsp)
+vmovdqa %xmm2, 1920(%r8)
 vpshufb shuf48_16(%rip), %ymm4, %ymm4
 vpand mask3_5_3_5(%rip), %ymm4, %ymm2
 vpand mask5_3_5_3(%rip), %ymm4, %ymm4
@@ -5598,7 +5601,7 @@
 vpand mask_keephigh(%rip), %ymm2, %ymm7
 vpor %ymm7, %ymm4, %ymm4
 vpaddw %ymm4, %ymm11, %ymm11
-vmovdqa %xmm2, 2176(%rsp)
+vmovdqa %xmm2, 2176(%r8)
 vpshufb shuf48_16(%rip), %ymm3, %ymm3
 vpand mask3_5_3_5(%rip), %ymm3, %ymm2
 vpand mask5_3_5_3(%rip), %ymm3, %ymm3
@@ -5606,7 +5609,7 @@
 vpand mask_keephigh(%rip), %ymm2, %ymm7
 vpor %ymm7, %ymm3, %ymm3
 vpaddw %ymm3, %ymm6, %ymm6
-vmovdqa %xmm2, 2432(%rsp)
+vmovdqa %xmm2, 2432(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm2
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
@@ -5614,22 +5617,22 @@
 vpand mask_keephigh(%rip), %ymm2, %ymm7
 vpor %ymm7, %ymm5, %ymm5
 vpaddw %ymm5, %ymm9, %ymm9
-vmovdqa %xmm2, 2688(%rsp)
+vmovdqa %xmm2, 2688(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 352(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
 vmovdqu %ymm6, 704(%rdi)
 vpand mask_mod8192(%rip), %ymm9, %ymm9
 vmovdqu %ymm9, 1056(%rdi)
-vmovdqa 160(%rsp), %ymm5
+vmovdqa 160(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm3
 vpunpckhwd const0(%rip), %ymm5, %ymm4
 vpslld $1, %ymm3, %ymm3
 vpslld $1, %ymm4, %ymm4
-vmovdqa 416(%rsp), %ymm10
+vmovdqa 416(%r8), %ymm10
 vpunpcklwd const0(%rip), %ymm10, %ymm9
 vpunpckhwd const0(%rip), %ymm10, %ymm10
-vmovdqa 672(%rsp), %ymm6
+vmovdqa 672(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm9, %ymm2
@@ -5643,7 +5646,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1696(%rsp), %ymm11
+vmovdqa 1696(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm10
 vpunpckhwd const0(%rip), %ymm11, %ymm9
 vpslld $1, %ymm10, %ymm10
@@ -5655,9 +5658,9 @@
 vpand mask32_to_16(%rip), %ymm2, %ymm2
 vpand mask32_to_16(%rip), %ymm7, %ymm7
 vpackusdw %ymm7, %ymm2, %ymm7
-vmovdqa 928(%rsp), %ymm2
-vpaddw 1184(%rsp), %ymm2, %ymm9
-vpsubw 1184(%rsp), %ymm2, %ymm2
+vmovdqa 928(%r8), %ymm2
+vpaddw 1184(%r8), %ymm2, %ymm9
+vpsubw 1184(%r8), %ymm2, %ymm2
 vpsrlw $2, %ymm2, %ymm2
 vpsubw %ymm6, %ymm2, %ymm2
 vpmullw %ymm14, %ymm2, %ymm2
@@ -5667,7 +5670,7 @@
 vpsubw %ymm9, %ymm10, %ymm9
 vpsrlw $3, %ymm9, %ymm9
 vpsubw %ymm7, %ymm9, %ymm9
-vmovdqa 1440(%rsp), %ymm10
+vmovdqa 1440(%r8), %ymm10
 vpsubw %ymm5, %ymm10, %ymm10
 vpmullw %ymm15, %ymm11, %ymm4
 vpsubw %ymm4, %ymm10, %ymm4
@@ -5701,7 +5704,7 @@
 vpaddw %ymm2, %ymm3, %ymm3
 vpand mask_mod8192(%rip), %ymm3, %ymm3
 vmovdqu %ymm3, 88(%rdi)
-vmovdqa %xmm8, 1952(%rsp)
+vmovdqa %xmm8, 1952(%r8)
 vpshufb shuf48_16(%rip), %ymm9, %ymm9
 vpand mask3_5_3_5(%rip), %ymm9, %ymm8
 vpand mask5_3_5_3(%rip), %ymm9, %ymm9
@@ -5709,7 +5712,7 @@
 vpand mask_keephigh(%rip), %ymm8, %ymm3
 vpor %ymm3, %ymm9, %ymm9
 vpaddw %ymm9, %ymm5, %ymm5
-vmovdqa %xmm8, 2208(%rsp)
+vmovdqa %xmm8, 2208(%r8)
 vpshufb shuf48_16(%rip), %ymm10, %ymm10
 vpand mask3_5_3_5(%rip), %ymm10, %ymm8
 vpand mask5_3_5_3(%rip), %ymm10, %ymm10
@@ -5717,7 +5720,7 @@
 vpand mask_keephigh(%rip), %ymm8, %ymm3
 vpor %ymm3, %ymm10, %ymm10
 vpaddw %ymm10, %ymm6, %ymm6
-vmovdqa %xmm8, 2464(%rsp)
+vmovdqa %xmm8, 2464(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm8
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
@@ -5725,22 +5728,22 @@
 vpand mask_keephigh(%rip), %ymm8, %ymm3
 vpor %ymm3, %ymm11, %ymm11
 vpaddw %ymm11, %ymm7, %ymm7
-vmovdqa %xmm8, 2720(%rsp)
+vmovdqa %xmm8, 2720(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 440(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
 vmovdqu %ymm6, 792(%rdi)
 vpand mask_mod8192(%rip), %ymm7, %ymm7
 vmovdqu %ymm7, 1144(%rdi)
-vmovdqa 192(%rsp), %ymm11
+vmovdqa 192(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm10
 vpunpckhwd const0(%rip), %ymm11, %ymm9
 vpslld $1, %ymm10, %ymm10
 vpslld $1, %ymm9, %ymm9
-vmovdqa 448(%rsp), %ymm2
+vmovdqa 448(%r8), %ymm2
 vpunpcklwd const0(%rip), %ymm2, %ymm7
 vpunpckhwd const0(%rip), %ymm2, %ymm2
-vmovdqa 704(%rsp), %ymm6
+vmovdqa 704(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm7, %ymm8
@@ -5754,7 +5757,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1728(%rsp), %ymm5
+vmovdqa 1728(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm2
 vpunpckhwd const0(%rip), %ymm5, %ymm7
 vpslld $1, %ymm2, %ymm2
@@ -5766,9 +5769,9 @@
 vpand mask32_to_16(%rip), %ymm8, %ymm8
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpackusdw %ymm3, %ymm8, %ymm3
-vmovdqa 960(%rsp), %ymm8
-vpaddw 1216(%rsp), %ymm8, %ymm7
-vpsubw 1216(%rsp), %ymm8, %ymm8
+vmovdqa 960(%r8), %ymm8
+vpaddw 1216(%r8), %ymm8, %ymm7
+vpsubw 1216(%r8), %ymm8, %ymm8
 vpsrlw $2, %ymm8, %ymm8
 vpsubw %ymm6, %ymm8, %ymm8
 vpmullw %ymm14, %ymm8, %ymm8
@@ -5778,7 +5781,7 @@
 vpsubw %ymm7, %ymm2, %ymm7
 vpsrlw $3, %ymm7, %ymm7
 vpsubw %ymm3, %ymm7, %ymm7
-vmovdqa 1472(%rsp), %ymm2
+vmovdqa 1472(%r8), %ymm2
 vpsubw %ymm11, %ymm2, %ymm2
 vpmullw %ymm15, %ymm5, %ymm9
 vpsubw %ymm9, %ymm2, %ymm9
@@ -5812,7 +5815,7 @@
 vpaddw %ymm8, %ymm10, %ymm10
 vpand mask_mod8192(%rip), %ymm10, %ymm10
 vmovdqu %ymm10, 176(%rdi)
-vmovdqa %xmm4, 1984(%rsp)
+vmovdqa %xmm4, 1984(%r8)
 vpshufb shuf48_16(%rip), %ymm7, %ymm7
 vpand mask3_5_3_5(%rip), %ymm7, %ymm4
 vpand mask5_3_5_3(%rip), %ymm7, %ymm7
@@ -5820,7 +5823,7 @@
 vpand mask_keephigh(%rip), %ymm4, %ymm10
 vpor %ymm10, %ymm7, %ymm7
 vpaddw %ymm7, %ymm11, %ymm11
-vmovdqa %xmm4, 2240(%rsp)
+vmovdqa %xmm4, 2240(%r8)
 vpshufb shuf48_16(%rip), %ymm2, %ymm2
 vpand mask3_5_3_5(%rip), %ymm2, %ymm4
 vpand mask5_3_5_3(%rip), %ymm2, %ymm2
@@ -5828,7 +5831,7 @@
 vpand mask_keephigh(%rip), %ymm4, %ymm10
 vpor %ymm10, %ymm2, %ymm2
 vpaddw %ymm2, %ymm6, %ymm6
-vmovdqa %xmm4, 2496(%rsp)
+vmovdqa %xmm4, 2496(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm4
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
@@ -5836,22 +5839,22 @@
 vpand mask_keephigh(%rip), %ymm4, %ymm10
 vpor %ymm10, %ymm5, %ymm5
 vpaddw %ymm5, %ymm3, %ymm3
-vmovdqa %xmm4, 2752(%rsp)
+vmovdqa %xmm4, 2752(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 528(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
 vmovdqu %ymm6, 880(%rdi)
 vpand mask_mod8192(%rip), %ymm3, %ymm3
 vmovdqu %ymm3, 1232(%rdi)
-vmovdqa 224(%rsp), %ymm5
+vmovdqa 224(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm2
 vpunpckhwd const0(%rip), %ymm5, %ymm7
 vpslld $1, %ymm2, %ymm2
 vpslld $1, %ymm7, %ymm7
-vmovdqa 480(%rsp), %ymm8
+vmovdqa 480(%r8), %ymm8
 vpunpcklwd const0(%rip), %ymm8, %ymm3
 vpunpckhwd const0(%rip), %ymm8, %ymm8
-vmovdqa 736(%rsp), %ymm6
+vmovdqa 736(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm3, %ymm4
@@ -5865,7 +5868,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1760(%rsp), %ymm11
+vmovdqa 1760(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm8
 vpunpckhwd const0(%rip), %ymm11, %ymm3
 vpslld $1, %ymm8, %ymm8
@@ -5877,9 +5880,9 @@
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpand mask32_to_16(%rip), %ymm10, %ymm10
 vpackusdw %ymm10, %ymm4, %ymm10
-vmovdqa 992(%rsp), %ymm4
-vpaddw 1248(%rsp), %ymm4, %ymm3
-vpsubw 1248(%rsp), %ymm4, %ymm4
+vmovdqa 992(%r8), %ymm4
+vpaddw 1248(%r8), %ymm4, %ymm3
+vpsubw 1248(%r8), %ymm4, %ymm4
 vpsrlw $2, %ymm4, %ymm4
 vpsubw %ymm6, %ymm4, %ymm4
 vpmullw %ymm14, %ymm4, %ymm4
@@ -5889,7 +5892,7 @@
 vpsubw %ymm3, %ymm8, %ymm3
 vpsrlw $3, %ymm3, %ymm3
 vpsubw %ymm10, %ymm3, %ymm3
-vmovdqa 1504(%rsp), %ymm8
+vmovdqa 1504(%r8), %ymm8
 vpsubw %ymm5, %ymm8, %ymm8
 vpmullw %ymm15, %ymm11, %ymm7
 vpsubw %ymm7, %ymm8, %ymm7
@@ -5923,7 +5926,7 @@
 vpaddw %ymm4, %ymm2, %ymm2
 vpand mask_mod8192(%rip), %ymm2, %ymm2
 vmovdqu %ymm2, 264(%rdi)
-vmovdqa %xmm9, 2016(%rsp)
+vmovdqa %xmm9, 2016(%r8)
 vpshufb shuf48_16(%rip), %ymm3, %ymm3
 vpand mask3_5_3_5(%rip), %ymm3, %ymm9
 vpand mask5_3_5_3(%rip), %ymm3, %ymm3
@@ -5931,7 +5934,7 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm2
 vpor %ymm2, %ymm3, %ymm3
 vpaddw %ymm3, %ymm5, %ymm5
-vmovdqa %xmm9, 2272(%rsp)
+vmovdqa %xmm9, 2272(%r8)
 vpshufb shuf48_16(%rip), %ymm8, %ymm8
 vpand mask3_5_3_5(%rip), %ymm8, %ymm9
 vpand mask5_3_5_3(%rip), %ymm8, %ymm8
@@ -5939,7 +5942,7 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm2
 vpor %ymm2, %ymm8, %ymm8
 vpaddw %ymm8, %ymm6, %ymm6
-vmovdqa %xmm9, 2528(%rsp)
+vmovdqa %xmm9, 2528(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm9
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
@@ -5947,7 +5950,7 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm2
 vpor %ymm2, %ymm11, %ymm11
 vpaddw %ymm11, %ymm10, %ymm10
-vmovdqa %xmm9, 2784(%rsp)
+vmovdqa %xmm9, 2784(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 616(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -5989,14 +5992,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 32(%r12), %ymm8
 vmovdqa 896(%r12), %ymm9
-vmovdqa %ymm8, 0(%rsp)
-vmovdqa %ymm0, 32(%rsp)
-vmovdqa %ymm1, 64(%rsp)
-vmovdqa %ymm7, 96(%rsp)
-vmovdqa %ymm5, 128(%rsp)
-vmovdqa %ymm2, 160(%rsp)
-vmovdqa %ymm3, 192(%rsp)
-vmovdqa %ymm9, 224(%rsp)
+vmovdqa %ymm8, 0(%r8)
+vmovdqa %ymm0, 32(%r8)
+vmovdqa %ymm1, 64(%r8)
+vmovdqa %ymm7, 96(%r8)
+vmovdqa %ymm5, 128(%r8)
+vmovdqa %ymm2, 160(%r8)
+vmovdqa %ymm3, 192(%r8)
+vmovdqa %ymm9, 224(%r8)
 vmovdqa 1856(%r12), %ymm0
 vpsubw 1952(%r12), %ymm0, %ymm0
 vmovdqa 2240(%r12), %ymm1
@@ -6032,14 +6035,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 1760(%r12), %ymm8
 vmovdqa 2624(%r12), %ymm9
-vmovdqa %ymm8, 256(%rsp)
-vmovdqa %ymm0, 288(%rsp)
-vmovdqa %ymm1, 320(%rsp)
-vmovdqa %ymm7, 352(%rsp)
-vmovdqa %ymm5, 384(%rsp)
-vmovdqa %ymm2, 416(%rsp)
-vmovdqa %ymm3, 448(%rsp)
-vmovdqa %ymm9, 480(%rsp)
+vmovdqa %ymm8, 256(%r8)
+vmovdqa %ymm0, 288(%r8)
+vmovdqa %ymm1, 320(%r8)
+vmovdqa %ymm7, 352(%r8)
+vmovdqa %ymm5, 384(%r8)
+vmovdqa %ymm2, 416(%r8)
+vmovdqa %ymm3, 448(%r8)
+vmovdqa %ymm9, 480(%r8)
 vmovdqa 3584(%r12), %ymm0
 vpsubw 3680(%r12), %ymm0, %ymm0
 vmovdqa 3968(%r12), %ymm1
@@ -6075,14 +6078,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 3488(%r12), %ymm8
 vmovdqa 4352(%r12), %ymm9
-vmovdqa %ymm8, 512(%rsp)
-vmovdqa %ymm0, 544(%rsp)
-vmovdqa %ymm1, 576(%rsp)
-vmovdqa %ymm7, 608(%rsp)
-vmovdqa %ymm5, 640(%rsp)
-vmovdqa %ymm2, 672(%rsp)
-vmovdqa %ymm3, 704(%rsp)
-vmovdqa %ymm9, 736(%rsp)
+vmovdqa %ymm8, 512(%r8)
+vmovdqa %ymm0, 544(%r8)
+vmovdqa %ymm1, 576(%r8)
+vmovdqa %ymm7, 608(%r8)
+vmovdqa %ymm5, 640(%r8)
+vmovdqa %ymm2, 672(%r8)
+vmovdqa %ymm3, 704(%r8)
+vmovdqa %ymm9, 736(%r8)
 vmovdqa 5312(%r12), %ymm0
 vpsubw 5408(%r12), %ymm0, %ymm0
 vmovdqa 5696(%r12), %ymm1
@@ -6118,14 +6121,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 5216(%r12), %ymm8
 vmovdqa 6080(%r12), %ymm9
-vmovdqa %ymm8, 768(%rsp)
-vmovdqa %ymm0, 800(%rsp)
-vmovdqa %ymm1, 832(%rsp)
-vmovdqa %ymm7, 864(%rsp)
-vmovdqa %ymm5, 896(%rsp)
-vmovdqa %ymm2, 928(%rsp)
-vmovdqa %ymm3, 960(%rsp)
-vmovdqa %ymm9, 992(%rsp)
+vmovdqa %ymm8, 768(%r8)
+vmovdqa %ymm0, 800(%r8)
+vmovdqa %ymm1, 832(%r8)
+vmovdqa %ymm7, 864(%r8)
+vmovdqa %ymm5, 896(%r8)
+vmovdqa %ymm2, 928(%r8)
+vmovdqa %ymm3, 960(%r8)
+vmovdqa %ymm9, 992(%r8)
 vmovdqa 7040(%r12), %ymm0
 vpsubw 7136(%r12), %ymm0, %ymm0
 vmovdqa 7424(%r12), %ymm1
@@ -6161,14 +6164,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 6944(%r12), %ymm8
 vmovdqa 7808(%r12), %ymm9
-vmovdqa %ymm8, 1024(%rsp)
-vmovdqa %ymm0, 1056(%rsp)
-vmovdqa %ymm1, 1088(%rsp)
-vmovdqa %ymm7, 1120(%rsp)
-vmovdqa %ymm5, 1152(%rsp)
-vmovdqa %ymm2, 1184(%rsp)
-vmovdqa %ymm3, 1216(%rsp)
-vmovdqa %ymm9, 1248(%rsp)
+vmovdqa %ymm8, 1024(%r8)
+vmovdqa %ymm0, 1056(%r8)
+vmovdqa %ymm1, 1088(%r8)
+vmovdqa %ymm7, 1120(%r8)
+vmovdqa %ymm5, 1152(%r8)
+vmovdqa %ymm2, 1184(%r8)
+vmovdqa %ymm3, 1216(%r8)
+vmovdqa %ymm9, 1248(%r8)
 vmovdqa 8768(%r12), %ymm0
 vpsubw 8864(%r12), %ymm0, %ymm0
 vmovdqa 9152(%r12), %ymm1
@@ -6204,14 +6207,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 8672(%r12), %ymm8
 vmovdqa 9536(%r12), %ymm9
-vmovdqa %ymm8, 1280(%rsp)
-vmovdqa %ymm0, 1312(%rsp)
-vmovdqa %ymm1, 1344(%rsp)
-vmovdqa %ymm7, 1376(%rsp)
-vmovdqa %ymm5, 1408(%rsp)
-vmovdqa %ymm2, 1440(%rsp)
-vmovdqa %ymm3, 1472(%rsp)
-vmovdqa %ymm9, 1504(%rsp)
+vmovdqa %ymm8, 1280(%r8)
+vmovdqa %ymm0, 1312(%r8)
+vmovdqa %ymm1, 1344(%r8)
+vmovdqa %ymm7, 1376(%r8)
+vmovdqa %ymm5, 1408(%r8)
+vmovdqa %ymm2, 1440(%r8)
+vmovdqa %ymm3, 1472(%r8)
+vmovdqa %ymm9, 1504(%r8)
 vmovdqa 10496(%r12), %ymm0
 vpsubw 10592(%r12), %ymm0, %ymm0
 vmovdqa 10880(%r12), %ymm1
@@ -6247,23 +6250,23 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 10400(%r12), %ymm8
 vmovdqa 11264(%r12), %ymm9
-vmovdqa %ymm8, 1536(%rsp)
-vmovdqa %ymm0, 1568(%rsp)
-vmovdqa %ymm1, 1600(%rsp)
-vmovdqa %ymm7, 1632(%rsp)
-vmovdqa %ymm5, 1664(%rsp)
-vmovdqa %ymm2, 1696(%rsp)
-vmovdqa %ymm3, 1728(%rsp)
-vmovdqa %ymm9, 1760(%rsp)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa %ymm8, 1536(%r8)
+vmovdqa %ymm0, 1568(%r8)
+vmovdqa %ymm1, 1600(%r8)
+vmovdqa %ymm7, 1632(%r8)
+vmovdqa %ymm5, 1664(%r8)
+vmovdqa %ymm2, 1696(%r8)
+vmovdqa %ymm3, 1728(%r8)
+vmovdqa %ymm9, 1760(%r8)
+vmovdqa 0(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm8
 vpunpckhwd const0(%rip), %ymm11, %ymm3
 vpslld $1, %ymm8, %ymm8
 vpslld $1, %ymm3, %ymm3
-vmovdqa 256(%rsp), %ymm4
+vmovdqa 256(%r8), %ymm4
 vpunpcklwd const0(%rip), %ymm4, %ymm10
 vpunpckhwd const0(%rip), %ymm4, %ymm4
-vmovdqa 512(%rsp), %ymm6
+vmovdqa 512(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm10, %ymm9
@@ -6277,7 +6280,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1536(%rsp), %ymm5
+vmovdqa 1536(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm4
 vpunpckhwd const0(%rip), %ymm5, %ymm10
 vpslld $1, %ymm4, %ymm4
@@ -6289,9 +6292,9 @@
 vpand mask32_to_16(%rip), %ymm9, %ymm9
 vpand mask32_to_16(%rip), %ymm2, %ymm2
 vpackusdw %ymm2, %ymm9, %ymm2
-vmovdqa 768(%rsp), %ymm9
-vpaddw 1024(%rsp), %ymm9, %ymm10
-vpsubw 1024(%rsp), %ymm9, %ymm9
+vmovdqa 768(%r8), %ymm9
+vpaddw 1024(%r8), %ymm9, %ymm10
+vpsubw 1024(%r8), %ymm9, %ymm9
 vpsrlw $2, %ymm9, %ymm9
 vpsubw %ymm6, %ymm9, %ymm9
 vpmullw %ymm14, %ymm9, %ymm9
@@ -6301,7 +6304,7 @@
 vpsubw %ymm10, %ymm4, %ymm10
 vpsrlw $3, %ymm10, %ymm10
 vpsubw %ymm2, %ymm10, %ymm10
-vmovdqa 1280(%rsp), %ymm4
+vmovdqa 1280(%r8), %ymm4
 vpsubw %ymm11, %ymm4, %ymm4
 vpmullw %ymm15, %ymm5, %ymm3
 vpsubw %ymm3, %ymm4, %ymm3
@@ -6325,27 +6328,27 @@
 vpermq $206, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm8
 vpor %ymm8, %ymm10, %ymm10
-vpaddw 2048(%rsp), %ymm11, %ymm11
+vpaddw 2048(%r8), %ymm11, %ymm11
 vpaddw %ymm10, %ymm11, %ymm11
-vmovdqa %xmm3, 2048(%rsp)
+vmovdqa %xmm3, 2048(%r8)
 vpshufb shuf48_16(%rip), %ymm4, %ymm4
 vpand mask3_5_3_5(%rip), %ymm4, %ymm3
 vpand mask5_3_5_3(%rip), %ymm4, %ymm4
 vpermq $206, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm8
 vpor %ymm8, %ymm4, %ymm4
-vpaddw 2304(%rsp), %ymm6, %ymm6
+vpaddw 2304(%r8), %ymm6, %ymm6
 vpaddw %ymm4, %ymm6, %ymm6
-vmovdqa %xmm3, 2304(%rsp)
+vmovdqa %xmm3, 2304(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm3
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $206, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm8
 vpor %ymm8, %ymm5, %ymm5
-vpaddw 2560(%rsp), %ymm2, %ymm2
+vpaddw 2560(%r8), %ymm2, %ymm2
 vpaddw %ymm5, %ymm2, %ymm2
-vmovdqa %xmm3, 2560(%rsp)
+vmovdqa %xmm3, 2560(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 32(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -6354,15 +6357,15 @@
 vmovdqu %ymm2, 736(%rdi)
 vpand mask_mod8192(%rip), %ymm9, %ymm9
 vmovdqu %ymm9, 1088(%rdi)
-vmovdqa 32(%rsp), %ymm5
+vmovdqa 32(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm4
 vpunpckhwd const0(%rip), %ymm5, %ymm10
 vpslld $1, %ymm4, %ymm4
 vpslld $1, %ymm10, %ymm10
-vmovdqa 288(%rsp), %ymm9
+vmovdqa 288(%r8), %ymm9
 vpunpcklwd const0(%rip), %ymm9, %ymm2
 vpunpckhwd const0(%rip), %ymm9, %ymm9
-vmovdqa 544(%rsp), %ymm6
+vmovdqa 544(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm2, %ymm3
@@ -6376,7 +6379,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1568(%rsp), %ymm11
+vmovdqa 1568(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm9
 vpunpckhwd const0(%rip), %ymm11, %ymm2
 vpslld $1, %ymm9, %ymm9
@@ -6388,9 +6391,9 @@
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpand mask32_to_16(%rip), %ymm8, %ymm8
 vpackusdw %ymm8, %ymm3, %ymm8
-vmovdqa 800(%rsp), %ymm3
-vpaddw 1056(%rsp), %ymm3, %ymm2
-vpsubw 1056(%rsp), %ymm3, %ymm3
+vmovdqa 800(%r8), %ymm3
+vpaddw 1056(%r8), %ymm3, %ymm2
+vpsubw 1056(%r8), %ymm3, %ymm3
 vpsrlw $2, %ymm3, %ymm3
 vpsubw %ymm6, %ymm3, %ymm3
 vpmullw %ymm14, %ymm3, %ymm3
@@ -6400,7 +6403,7 @@
 vpsubw %ymm2, %ymm9, %ymm2
 vpsrlw $3, %ymm2, %ymm2
 vpsubw %ymm8, %ymm2, %ymm2
-vmovdqa 1312(%rsp), %ymm9
+vmovdqa 1312(%r8), %ymm9
 vpsubw %ymm5, %ymm9, %ymm9
 vpmullw %ymm15, %ymm11, %ymm10
 vpsubw %ymm10, %ymm9, %ymm10
@@ -6424,27 +6427,27 @@
 vpermq $206, %ymm10, %ymm10
 vpand mask_keephigh(%rip), %ymm10, %ymm4
 vpor %ymm4, %ymm2, %ymm2
-vpaddw 2080(%rsp), %ymm5, %ymm5
+vpaddw 2080(%r8), %ymm5, %ymm5
 vpaddw %ymm2, %ymm5, %ymm5
-vmovdqa %xmm10, 2080(%rsp)
+vmovdqa %xmm10, 2080(%r8)
 vpshufb shuf48_16(%rip), %ymm9, %ymm9
 vpand mask3_5_3_5(%rip), %ymm9, %ymm10
 vpand mask5_3_5_3(%rip), %ymm9, %ymm9
 vpermq $206, %ymm10, %ymm10
 vpand mask_keephigh(%rip), %ymm10, %ymm4
 vpor %ymm4, %ymm9, %ymm9
-vpaddw 2336(%rsp), %ymm6, %ymm6
+vpaddw 2336(%r8), %ymm6, %ymm6
 vpaddw %ymm9, %ymm6, %ymm6
-vmovdqa %xmm10, 2336(%rsp)
+vmovdqa %xmm10, 2336(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm10
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $206, %ymm10, %ymm10
 vpand mask_keephigh(%rip), %ymm10, %ymm4
 vpor %ymm4, %ymm11, %ymm11
-vpaddw 2592(%rsp), %ymm8, %ymm8
+vpaddw 2592(%r8), %ymm8, %ymm8
 vpaddw %ymm11, %ymm8, %ymm8
-vmovdqa %xmm10, 2592(%rsp)
+vmovdqa %xmm10, 2592(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 120(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -6453,15 +6456,15 @@
 vmovdqu %ymm8, 824(%rdi)
 vpand mask_mod8192(%rip), %ymm3, %ymm3
 vmovdqu %ymm3, 1176(%rdi)
-vmovdqa 64(%rsp), %ymm11
+vmovdqa 64(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm9
 vpunpckhwd const0(%rip), %ymm11, %ymm2
 vpslld $1, %ymm9, %ymm9
 vpslld $1, %ymm2, %ymm2
-vmovdqa 320(%rsp), %ymm3
+vmovdqa 320(%r8), %ymm3
 vpunpcklwd const0(%rip), %ymm3, %ymm8
 vpunpckhwd const0(%rip), %ymm3, %ymm3
-vmovdqa 576(%rsp), %ymm6
+vmovdqa 576(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm8, %ymm10
@@ -6475,7 +6478,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1600(%rsp), %ymm5
+vmovdqa 1600(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm3
 vpunpckhwd const0(%rip), %ymm5, %ymm8
 vpslld $1, %ymm3, %ymm3
@@ -6487,9 +6490,9 @@
 vpand mask32_to_16(%rip), %ymm10, %ymm10
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpackusdw %ymm4, %ymm10, %ymm4
-vmovdqa 832(%rsp), %ymm10
-vpaddw 1088(%rsp), %ymm10, %ymm8
-vpsubw 1088(%rsp), %ymm10, %ymm10
+vmovdqa 832(%r8), %ymm10
+vpaddw 1088(%r8), %ymm10, %ymm8
+vpsubw 1088(%r8), %ymm10, %ymm10
 vpsrlw $2, %ymm10, %ymm10
 vpsubw %ymm6, %ymm10, %ymm10
 vpmullw %ymm14, %ymm10, %ymm10
@@ -6499,7 +6502,7 @@
 vpsubw %ymm8, %ymm3, %ymm8
 vpsrlw $3, %ymm8, %ymm8
 vpsubw %ymm4, %ymm8, %ymm8
-vmovdqa 1344(%rsp), %ymm3
+vmovdqa 1344(%r8), %ymm3
 vpsubw %ymm11, %ymm3, %ymm3
 vpmullw %ymm15, %ymm5, %ymm2
 vpsubw %ymm2, %ymm3, %ymm2
@@ -6523,27 +6526,27 @@
 vpermq $206, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm9
 vpor %ymm9, %ymm8, %ymm8
-vpaddw 2112(%rsp), %ymm11, %ymm11
+vpaddw 2112(%r8), %ymm11, %ymm11
 vpaddw %ymm8, %ymm11, %ymm11
-vmovdqa %xmm2, 2112(%rsp)
+vmovdqa %xmm2, 2112(%r8)
 vpshufb shuf48_16(%rip), %ymm3, %ymm3
 vpand mask3_5_3_5(%rip), %ymm3, %ymm2
 vpand mask5_3_5_3(%rip), %ymm3, %ymm3
 vpermq $206, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm9
 vpor %ymm9, %ymm3, %ymm3
-vpaddw 2368(%rsp), %ymm6, %ymm6
+vpaddw 2368(%r8), %ymm6, %ymm6
 vpaddw %ymm3, %ymm6, %ymm6
-vmovdqa %xmm2, 2368(%rsp)
+vmovdqa %xmm2, 2368(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm2
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $206, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm9
 vpor %ymm9, %ymm5, %ymm5
-vpaddw 2624(%rsp), %ymm4, %ymm4
+vpaddw 2624(%r8), %ymm4, %ymm4
 vpaddw %ymm5, %ymm4, %ymm4
-vmovdqa %xmm2, 2624(%rsp)
+vmovdqa %xmm2, 2624(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 208(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -6552,15 +6555,15 @@
 vmovdqu %ymm4, 912(%rdi)
 vpand mask_mod8192(%rip), %ymm10, %ymm10
 vmovdqu %ymm10, 1264(%rdi)
-vmovdqa 96(%rsp), %ymm5
+vmovdqa 96(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm3
 vpunpckhwd const0(%rip), %ymm5, %ymm8
 vpslld $1, %ymm3, %ymm3
 vpslld $1, %ymm8, %ymm8
-vmovdqa 352(%rsp), %ymm10
+vmovdqa 352(%r8), %ymm10
 vpunpcklwd const0(%rip), %ymm10, %ymm4
 vpunpckhwd const0(%rip), %ymm10, %ymm10
-vmovdqa 608(%rsp), %ymm6
+vmovdqa 608(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm4, %ymm2
@@ -6574,7 +6577,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1632(%rsp), %ymm11
+vmovdqa 1632(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm10
 vpunpckhwd const0(%rip), %ymm11, %ymm4
 vpslld $1, %ymm10, %ymm10
@@ -6586,9 +6589,9 @@
 vpand mask32_to_16(%rip), %ymm2, %ymm2
 vpand mask32_to_16(%rip), %ymm9, %ymm9
 vpackusdw %ymm9, %ymm2, %ymm9
-vmovdqa 864(%rsp), %ymm2
-vpaddw 1120(%rsp), %ymm2, %ymm4
-vpsubw 1120(%rsp), %ymm2, %ymm2
+vmovdqa 864(%r8), %ymm2
+vpaddw 1120(%r8), %ymm2, %ymm4
+vpsubw 1120(%r8), %ymm2, %ymm2
 vpsrlw $2, %ymm2, %ymm2
 vpsubw %ymm6, %ymm2, %ymm2
 vpmullw %ymm14, %ymm2, %ymm2
@@ -6598,7 +6601,7 @@
 vpsubw %ymm4, %ymm10, %ymm4
 vpsrlw $3, %ymm4, %ymm4
 vpsubw %ymm9, %ymm4, %ymm4
-vmovdqa 1376(%rsp), %ymm10
+vmovdqa 1376(%r8), %ymm10
 vpsubw %ymm5, %ymm10, %ymm10
 vpmullw %ymm15, %ymm11, %ymm8
 vpsubw %ymm8, %ymm10, %ymm8
@@ -6622,27 +6625,27 @@
 vpermq $206, %ymm8, %ymm8
 vpand mask_keephigh(%rip), %ymm8, %ymm3
 vpor %ymm3, %ymm4, %ymm4
-vpaddw 2144(%rsp), %ymm5, %ymm5
+vpaddw 2144(%r8), %ymm5, %ymm5
 vpaddw %ymm4, %ymm5, %ymm5
-vmovdqa %xmm8, 2144(%rsp)
+vmovdqa %xmm8, 2144(%r8)
 vpshufb shuf48_16(%rip), %ymm10, %ymm10
 vpand mask3_5_3_5(%rip), %ymm10, %ymm8
 vpand mask5_3_5_3(%rip), %ymm10, %ymm10
 vpermq $206, %ymm8, %ymm8
 vpand mask_keephigh(%rip), %ymm8, %ymm3
 vpor %ymm3, %ymm10, %ymm10
-vpaddw 2400(%rsp), %ymm6, %ymm6
+vpaddw 2400(%r8), %ymm6, %ymm6
 vpaddw %ymm10, %ymm6, %ymm6
-vmovdqa %xmm8, 2400(%rsp)
+vmovdqa %xmm8, 2400(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm8
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $206, %ymm8, %ymm8
 vpand mask_keephigh(%rip), %ymm8, %ymm3
 vpor %ymm3, %ymm11, %ymm11
-vpaddw 2656(%rsp), %ymm9, %ymm9
+vpaddw 2656(%r8), %ymm9, %ymm9
 vpaddw %ymm11, %ymm9, %ymm9
-vmovdqa %xmm8, 2656(%rsp)
+vmovdqa %xmm8, 2656(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 296(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -6651,15 +6654,15 @@
 vmovdqu %ymm9, 1000(%rdi)
 vpand mask_mod8192(%rip), %ymm2, %ymm2
 vmovdqu %ymm2, 1352(%rdi)
-vmovdqa 128(%rsp), %ymm11
+vmovdqa 128(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm10
 vpunpckhwd const0(%rip), %ymm11, %ymm4
 vpslld $1, %ymm10, %ymm10
 vpslld $1, %ymm4, %ymm4
-vmovdqa 384(%rsp), %ymm2
+vmovdqa 384(%r8), %ymm2
 vpunpcklwd const0(%rip), %ymm2, %ymm9
 vpunpckhwd const0(%rip), %ymm2, %ymm2
-vmovdqa 640(%rsp), %ymm6
+vmovdqa 640(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm9, %ymm8
@@ -6673,7 +6676,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1664(%rsp), %ymm5
+vmovdqa 1664(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm2
 vpunpckhwd const0(%rip), %ymm5, %ymm9
 vpslld $1, %ymm2, %ymm2
@@ -6685,9 +6688,9 @@
 vpand mask32_to_16(%rip), %ymm8, %ymm8
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpackusdw %ymm3, %ymm8, %ymm3
-vmovdqa 896(%rsp), %ymm8
-vpaddw 1152(%rsp), %ymm8, %ymm9
-vpsubw 1152(%rsp), %ymm8, %ymm8
+vmovdqa 896(%r8), %ymm8
+vpaddw 1152(%r8), %ymm8, %ymm9
+vpsubw 1152(%r8), %ymm8, %ymm8
 vpsrlw $2, %ymm8, %ymm8
 vpsubw %ymm6, %ymm8, %ymm8
 vpmullw %ymm14, %ymm8, %ymm8
@@ -6697,7 +6700,7 @@
 vpsubw %ymm9, %ymm2, %ymm9
 vpsrlw $3, %ymm9, %ymm9
 vpsubw %ymm3, %ymm9, %ymm9
-vmovdqa 1408(%rsp), %ymm2
+vmovdqa 1408(%r8), %ymm2
 vpsubw %ymm11, %ymm2, %ymm2
 vpmullw %ymm15, %ymm5, %ymm4
 vpsubw %ymm4, %ymm2, %ymm4
@@ -6728,53 +6731,53 @@
 vpand mask_keephigh(%rip), %ymm7, %ymm10
 vpor %ymm10, %ymm8, %ymm8
 vmovdqu 32(%rdi), %ymm10
-vpaddw 1920(%rsp), %ymm10, %ymm10
+vpaddw 1920(%r8), %ymm10, %ymm10
 vpaddw %ymm8, %ymm10, %ymm10
 vpand mask_mod8192(%rip), %ymm10, %ymm10
 vmovdqu %ymm10, 32(%rdi)
-vmovdqa %xmm7, 1920(%rsp)
+vmovdqa %xmm7, 1920(%r8)
 vpshufb shuf48_16(%rip), %ymm9, %ymm9
 vpand mask3_5_3_5(%rip), %ymm9, %ymm7
 vpand mask5_3_5_3(%rip), %ymm9, %ymm9
 vpermq $206, %ymm7, %ymm7
 vpand mask_keephigh(%rip), %ymm7, %ymm10
 vpor %ymm10, %ymm9, %ymm9
-vpaddw 2176(%rsp), %ymm11, %ymm11
+vpaddw 2176(%r8), %ymm11, %ymm11
 vpaddw %ymm9, %ymm11, %ymm11
-vmovdqa %xmm7, 2176(%rsp)
+vmovdqa %xmm7, 2176(%r8)
 vpshufb shuf48_16(%rip), %ymm2, %ymm2
 vpand mask3_5_3_5(%rip), %ymm2, %ymm7
 vpand mask5_3_5_3(%rip), %ymm2, %ymm2
 vpermq $206, %ymm7, %ymm7
 vpand mask_keephigh(%rip), %ymm7, %ymm10
 vpor %ymm10, %ymm2, %ymm2
-vpaddw 2432(%rsp), %ymm6, %ymm6
+vpaddw 2432(%r8), %ymm6, %ymm6
 vpaddw %ymm2, %ymm6, %ymm6
-vmovdqa %xmm7, 2432(%rsp)
+vmovdqa %xmm7, 2432(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm7
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $206, %ymm7, %ymm7
 vpand mask_keephigh(%rip), %ymm7, %ymm10
 vpor %ymm10, %ymm5, %ymm5
-vpaddw 2688(%rsp), %ymm3, %ymm3
+vpaddw 2688(%r8), %ymm3, %ymm3
 vpaddw %ymm5, %ymm3, %ymm3
-vmovdqa %xmm7, 2688(%rsp)
+vmovdqa %xmm7, 2688(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 384(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
 vmovdqu %ymm6, 736(%rdi)
 vpand mask_mod8192(%rip), %ymm3, %ymm3
 vmovdqu %ymm3, 1088(%rdi)
-vmovdqa 160(%rsp), %ymm5
+vmovdqa 160(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm2
 vpunpckhwd const0(%rip), %ymm5, %ymm9
 vpslld $1, %ymm2, %ymm2
 vpslld $1, %ymm9, %ymm9
-vmovdqa 416(%rsp), %ymm8
+vmovdqa 416(%r8), %ymm8
 vpunpcklwd const0(%rip), %ymm8, %ymm3
 vpunpckhwd const0(%rip), %ymm8, %ymm8
-vmovdqa 672(%rsp), %ymm6
+vmovdqa 672(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm3, %ymm7
@@ -6788,7 +6791,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1696(%rsp), %ymm11
+vmovdqa 1696(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm8
 vpunpckhwd const0(%rip), %ymm11, %ymm3
 vpslld $1, %ymm8, %ymm8
@@ -6800,9 +6803,9 @@
 vpand mask32_to_16(%rip), %ymm7, %ymm7
 vpand mask32_to_16(%rip), %ymm10, %ymm10
 vpackusdw %ymm10, %ymm7, %ymm10
-vmovdqa 928(%rsp), %ymm7
-vpaddw 1184(%rsp), %ymm7, %ymm3
-vpsubw 1184(%rsp), %ymm7, %ymm7
+vmovdqa 928(%r8), %ymm7
+vpaddw 1184(%r8), %ymm7, %ymm3
+vpsubw 1184(%r8), %ymm7, %ymm7
 vpsrlw $2, %ymm7, %ymm7
 vpsubw %ymm6, %ymm7, %ymm7
 vpmullw %ymm14, %ymm7, %ymm7
@@ -6812,7 +6815,7 @@
 vpsubw %ymm3, %ymm8, %ymm3
 vpsrlw $3, %ymm3, %ymm3
 vpsubw %ymm10, %ymm3, %ymm3
-vmovdqa 1440(%rsp), %ymm8
+vmovdqa 1440(%r8), %ymm8
 vpsubw %ymm5, %ymm8, %ymm8
 vpmullw %ymm15, %ymm11, %ymm9
 vpsubw %ymm9, %ymm8, %ymm9
@@ -6843,53 +6846,53 @@
 vpand mask_keephigh(%rip), %ymm4, %ymm2
 vpor %ymm2, %ymm7, %ymm7
 vmovdqu 120(%rdi), %ymm2
-vpaddw 1952(%rsp), %ymm2, %ymm2
+vpaddw 1952(%r8), %ymm2, %ymm2
 vpaddw %ymm7, %ymm2, %ymm2
 vpand mask_mod8192(%rip), %ymm2, %ymm2
 vmovdqu %ymm2, 120(%rdi)
-vmovdqa %xmm4, 1952(%rsp)
+vmovdqa %xmm4, 1952(%r8)
 vpshufb shuf48_16(%rip), %ymm3, %ymm3
 vpand mask3_5_3_5(%rip), %ymm3, %ymm4
 vpand mask5_3_5_3(%rip), %ymm3, %ymm3
 vpermq $206, %ymm4, %ymm4
 vpand mask_keephigh(%rip), %ymm4, %ymm2
 vpor %ymm2, %ymm3, %ymm3
-vpaddw 2208(%rsp), %ymm5, %ymm5
+vpaddw 2208(%r8), %ymm5, %ymm5
 vpaddw %ymm3, %ymm5, %ymm5
-vmovdqa %xmm4, 2208(%rsp)
+vmovdqa %xmm4, 2208(%r8)
 vpshufb shuf48_16(%rip), %ymm8, %ymm8
 vpand mask3_5_3_5(%rip), %ymm8, %ymm4
 vpand mask5_3_5_3(%rip), %ymm8, %ymm8
 vpermq $206, %ymm4, %ymm4
 vpand mask_keephigh(%rip), %ymm4, %ymm2
 vpor %ymm2, %ymm8, %ymm8
-vpaddw 2464(%rsp), %ymm6, %ymm6
+vpaddw 2464(%r8), %ymm6, %ymm6
 vpaddw %ymm8, %ymm6, %ymm6
-vmovdqa %xmm4, 2464(%rsp)
+vmovdqa %xmm4, 2464(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm4
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $206, %ymm4, %ymm4
 vpand mask_keephigh(%rip), %ymm4, %ymm2
 vpor %ymm2, %ymm11, %ymm11
-vpaddw 2720(%rsp), %ymm10, %ymm10
+vpaddw 2720(%r8), %ymm10, %ymm10
 vpaddw %ymm11, %ymm10, %ymm10
-vmovdqa %xmm4, 2720(%rsp)
+vmovdqa %xmm4, 2720(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 472(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
 vmovdqu %ymm6, 824(%rdi)
 vpand mask_mod8192(%rip), %ymm10, %ymm10
 vmovdqu %ymm10, 1176(%rdi)
-vmovdqa 192(%rsp), %ymm11
+vmovdqa 192(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm8
 vpunpckhwd const0(%rip), %ymm11, %ymm3
 vpslld $1, %ymm8, %ymm8
 vpslld $1, %ymm3, %ymm3
-vmovdqa 448(%rsp), %ymm7
+vmovdqa 448(%r8), %ymm7
 vpunpcklwd const0(%rip), %ymm7, %ymm10
 vpunpckhwd const0(%rip), %ymm7, %ymm7
-vmovdqa 704(%rsp), %ymm6
+vmovdqa 704(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm10, %ymm4
@@ -6903,7 +6906,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1728(%rsp), %ymm5
+vmovdqa 1728(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm7
 vpunpckhwd const0(%rip), %ymm5, %ymm10
 vpslld $1, %ymm7, %ymm7
@@ -6915,9 +6918,9 @@
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpand mask32_to_16(%rip), %ymm2, %ymm2
 vpackusdw %ymm2, %ymm4, %ymm2
-vmovdqa 960(%rsp), %ymm4
-vpaddw 1216(%rsp), %ymm4, %ymm10
-vpsubw 1216(%rsp), %ymm4, %ymm4
+vmovdqa 960(%r8), %ymm4
+vpaddw 1216(%r8), %ymm4, %ymm10
+vpsubw 1216(%r8), %ymm4, %ymm4
 vpsrlw $2, %ymm4, %ymm4
 vpsubw %ymm6, %ymm4, %ymm4
 vpmullw %ymm14, %ymm4, %ymm4
@@ -6927,7 +6930,7 @@
 vpsubw %ymm10, %ymm7, %ymm10
 vpsrlw $3, %ymm10, %ymm10
 vpsubw %ymm2, %ymm10, %ymm10
-vmovdqa 1472(%rsp), %ymm7
+vmovdqa 1472(%r8), %ymm7
 vpsubw %ymm11, %ymm7, %ymm7
 vpmullw %ymm15, %ymm5, %ymm3
 vpsubw %ymm3, %ymm7, %ymm3
@@ -6958,53 +6961,53 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm8
 vpor %ymm8, %ymm4, %ymm4
 vmovdqu 208(%rdi), %ymm8
-vpaddw 1984(%rsp), %ymm8, %ymm8
+vpaddw 1984(%r8), %ymm8, %ymm8
 vpaddw %ymm4, %ymm8, %ymm8
 vpand mask_mod8192(%rip), %ymm8, %ymm8
 vmovdqu %ymm8, 208(%rdi)
-vmovdqa %xmm9, 1984(%rsp)
+vmovdqa %xmm9, 1984(%r8)
 vpshufb shuf48_16(%rip), %ymm10, %ymm10
 vpand mask3_5_3_5(%rip), %ymm10, %ymm9
 vpand mask5_3_5_3(%rip), %ymm10, %ymm10
 vpermq $206, %ymm9, %ymm9
 vpand mask_keephigh(%rip), %ymm9, %ymm8
 vpor %ymm8, %ymm10, %ymm10
-vpaddw 2240(%rsp), %ymm11, %ymm11
+vpaddw 2240(%r8), %ymm11, %ymm11
 vpaddw %ymm10, %ymm11, %ymm11
-vmovdqa %xmm9, 2240(%rsp)
+vmovdqa %xmm9, 2240(%r8)
 vpshufb shuf48_16(%rip), %ymm7, %ymm7
 vpand mask3_5_3_5(%rip), %ymm7, %ymm9
 vpand mask5_3_5_3(%rip), %ymm7, %ymm7
 vpermq $206, %ymm9, %ymm9
 vpand mask_keephigh(%rip), %ymm9, %ymm8
 vpor %ymm8, %ymm7, %ymm7
-vpaddw 2496(%rsp), %ymm6, %ymm6
+vpaddw 2496(%r8), %ymm6, %ymm6
 vpaddw %ymm7, %ymm6, %ymm6
-vmovdqa %xmm9, 2496(%rsp)
+vmovdqa %xmm9, 2496(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_3_5(%rip), %ymm5, %ymm9
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $206, %ymm9, %ymm9
 vpand mask_keephigh(%rip), %ymm9, %ymm8
 vpor %ymm8, %ymm5, %ymm5
-vpaddw 2752(%rsp), %ymm2, %ymm2
+vpaddw 2752(%r8), %ymm2, %ymm2
 vpaddw %ymm5, %ymm2, %ymm2
-vmovdqa %xmm9, 2752(%rsp)
+vmovdqa %xmm9, 2752(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 560(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
 vmovdqu %ymm6, 912(%rdi)
 vpand mask_mod8192(%rip), %ymm2, %ymm2
 vmovdqu %ymm2, 1264(%rdi)
-vmovdqa 224(%rsp), %ymm5
+vmovdqa 224(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm7
 vpunpckhwd const0(%rip), %ymm5, %ymm10
 vpslld $1, %ymm7, %ymm7
 vpslld $1, %ymm10, %ymm10
-vmovdqa 480(%rsp), %ymm4
+vmovdqa 480(%r8), %ymm4
 vpunpcklwd const0(%rip), %ymm4, %ymm2
 vpunpckhwd const0(%rip), %ymm4, %ymm4
-vmovdqa 736(%rsp), %ymm6
+vmovdqa 736(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm2, %ymm9
@@ -7018,7 +7021,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1760(%rsp), %ymm11
+vmovdqa 1760(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm4
 vpunpckhwd const0(%rip), %ymm11, %ymm2
 vpslld $1, %ymm4, %ymm4
@@ -7030,9 +7033,9 @@
 vpand mask32_to_16(%rip), %ymm9, %ymm9
 vpand mask32_to_16(%rip), %ymm8, %ymm8
 vpackusdw %ymm8, %ymm9, %ymm8
-vmovdqa 992(%rsp), %ymm9
-vpaddw 1248(%rsp), %ymm9, %ymm2
-vpsubw 1248(%rsp), %ymm9, %ymm9
+vmovdqa 992(%r8), %ymm9
+vpaddw 1248(%r8), %ymm9, %ymm2
+vpsubw 1248(%r8), %ymm9, %ymm9
 vpsrlw $2, %ymm9, %ymm9
 vpsubw %ymm6, %ymm9, %ymm9
 vpmullw %ymm14, %ymm9, %ymm9
@@ -7042,7 +7045,7 @@
 vpsubw %ymm2, %ymm4, %ymm2
 vpsrlw $3, %ymm2, %ymm2
 vpsubw %ymm8, %ymm2, %ymm2
-vmovdqa 1504(%rsp), %ymm4
+vmovdqa 1504(%r8), %ymm4
 vpsubw %ymm5, %ymm4, %ymm4
 vpmullw %ymm15, %ymm11, %ymm10
 vpsubw %ymm10, %ymm4, %ymm10
@@ -7073,38 +7076,38 @@
 vpand mask_keephigh(%rip), %ymm3, %ymm7
 vpor %ymm7, %ymm9, %ymm9
 vmovdqu 296(%rdi), %ymm7
-vpaddw 2016(%rsp), %ymm7, %ymm7
+vpaddw 2016(%r8), %ymm7, %ymm7
 vpaddw %ymm9, %ymm7, %ymm7
 vpand mask_mod8192(%rip), %ymm7, %ymm7
 vmovdqu %ymm7, 296(%rdi)
-vmovdqa %xmm3, 2016(%rsp)
+vmovdqa %xmm3, 2016(%r8)
 vpshufb shuf48_16(%rip), %ymm2, %ymm2
 vpand mask3_5_3_5(%rip), %ymm2, %ymm3
 vpand mask5_3_5_3(%rip), %ymm2, %ymm2
 vpermq $206, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm7
 vpor %ymm7, %ymm2, %ymm2
-vpaddw 2272(%rsp), %ymm5, %ymm5
+vpaddw 2272(%r8), %ymm5, %ymm5
 vpaddw %ymm2, %ymm5, %ymm5
-vmovdqa %xmm3, 2272(%rsp)
+vmovdqa %xmm3, 2272(%r8)
 vpshufb shuf48_16(%rip), %ymm4, %ymm4
 vpand mask3_5_3_5(%rip), %ymm4, %ymm3
 vpand mask5_3_5_3(%rip), %ymm4, %ymm4
 vpermq $206, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm7
 vpor %ymm7, %ymm4, %ymm4
-vpaddw 2528(%rsp), %ymm6, %ymm6
+vpaddw 2528(%r8), %ymm6, %ymm6
 vpaddw %ymm4, %ymm6, %ymm6
-vmovdqa %xmm3, 2528(%rsp)
+vmovdqa %xmm3, 2528(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_3_5(%rip), %ymm11, %ymm3
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $206, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm7
 vpor %ymm7, %ymm11, %ymm11
-vpaddw 2784(%rsp), %ymm8, %ymm8
+vpaddw 2784(%r8), %ymm8, %ymm8
 vpaddw %ymm11, %ymm8, %ymm8
-vmovdqa %xmm3, 2784(%rsp)
+vmovdqa %xmm3, 2784(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %ymm5, 648(%rdi)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
@@ -7146,14 +7149,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 64(%r12), %ymm8
 vmovdqa 928(%r12), %ymm9
-vmovdqa %ymm8, 0(%rsp)
-vmovdqa %ymm0, 32(%rsp)
-vmovdqa %ymm1, 64(%rsp)
-vmovdqa %ymm7, 96(%rsp)
-vmovdqa %ymm5, 128(%rsp)
-vmovdqa %ymm2, 160(%rsp)
-vmovdqa %ymm3, 192(%rsp)
-vmovdqa %ymm9, 224(%rsp)
+vmovdqa %ymm8, 0(%r8)
+vmovdqa %ymm0, 32(%r8)
+vmovdqa %ymm1, 64(%r8)
+vmovdqa %ymm7, 96(%r8)
+vmovdqa %ymm5, 128(%r8)
+vmovdqa %ymm2, 160(%r8)
+vmovdqa %ymm3, 192(%r8)
+vmovdqa %ymm9, 224(%r8)
 vmovdqa 1888(%r12), %ymm0
 vpsubw 1984(%r12), %ymm0, %ymm0
 vmovdqa 2272(%r12), %ymm1
@@ -7189,14 +7192,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 1792(%r12), %ymm8
 vmovdqa 2656(%r12), %ymm9
-vmovdqa %ymm8, 256(%rsp)
-vmovdqa %ymm0, 288(%rsp)
-vmovdqa %ymm1, 320(%rsp)
-vmovdqa %ymm7, 352(%rsp)
-vmovdqa %ymm5, 384(%rsp)
-vmovdqa %ymm2, 416(%rsp)
-vmovdqa %ymm3, 448(%rsp)
-vmovdqa %ymm9, 480(%rsp)
+vmovdqa %ymm8, 256(%r8)
+vmovdqa %ymm0, 288(%r8)
+vmovdqa %ymm1, 320(%r8)
+vmovdqa %ymm7, 352(%r8)
+vmovdqa %ymm5, 384(%r8)
+vmovdqa %ymm2, 416(%r8)
+vmovdqa %ymm3, 448(%r8)
+vmovdqa %ymm9, 480(%r8)
 vmovdqa 3616(%r12), %ymm0
 vpsubw 3712(%r12), %ymm0, %ymm0
 vmovdqa 4000(%r12), %ymm1
@@ -7232,14 +7235,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 3520(%r12), %ymm8
 vmovdqa 4384(%r12), %ymm9
-vmovdqa %ymm8, 512(%rsp)
-vmovdqa %ymm0, 544(%rsp)
-vmovdqa %ymm1, 576(%rsp)
-vmovdqa %ymm7, 608(%rsp)
-vmovdqa %ymm5, 640(%rsp)
-vmovdqa %ymm2, 672(%rsp)
-vmovdqa %ymm3, 704(%rsp)
-vmovdqa %ymm9, 736(%rsp)
+vmovdqa %ymm8, 512(%r8)
+vmovdqa %ymm0, 544(%r8)
+vmovdqa %ymm1, 576(%r8)
+vmovdqa %ymm7, 608(%r8)
+vmovdqa %ymm5, 640(%r8)
+vmovdqa %ymm2, 672(%r8)
+vmovdqa %ymm3, 704(%r8)
+vmovdqa %ymm9, 736(%r8)
 vmovdqa 5344(%r12), %ymm0
 vpsubw 5440(%r12), %ymm0, %ymm0
 vmovdqa 5728(%r12), %ymm1
@@ -7275,14 +7278,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 5248(%r12), %ymm8
 vmovdqa 6112(%r12), %ymm9
-vmovdqa %ymm8, 768(%rsp)
-vmovdqa %ymm0, 800(%rsp)
-vmovdqa %ymm1, 832(%rsp)
-vmovdqa %ymm7, 864(%rsp)
-vmovdqa %ymm5, 896(%rsp)
-vmovdqa %ymm2, 928(%rsp)
-vmovdqa %ymm3, 960(%rsp)
-vmovdqa %ymm9, 992(%rsp)
+vmovdqa %ymm8, 768(%r8)
+vmovdqa %ymm0, 800(%r8)
+vmovdqa %ymm1, 832(%r8)
+vmovdqa %ymm7, 864(%r8)
+vmovdqa %ymm5, 896(%r8)
+vmovdqa %ymm2, 928(%r8)
+vmovdqa %ymm3, 960(%r8)
+vmovdqa %ymm9, 992(%r8)
 vmovdqa 7072(%r12), %ymm0
 vpsubw 7168(%r12), %ymm0, %ymm0
 vmovdqa 7456(%r12), %ymm1
@@ -7318,14 +7321,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 6976(%r12), %ymm8
 vmovdqa 7840(%r12), %ymm9
-vmovdqa %ymm8, 1024(%rsp)
-vmovdqa %ymm0, 1056(%rsp)
-vmovdqa %ymm1, 1088(%rsp)
-vmovdqa %ymm7, 1120(%rsp)
-vmovdqa %ymm5, 1152(%rsp)
-vmovdqa %ymm2, 1184(%rsp)
-vmovdqa %ymm3, 1216(%rsp)
-vmovdqa %ymm9, 1248(%rsp)
+vmovdqa %ymm8, 1024(%r8)
+vmovdqa %ymm0, 1056(%r8)
+vmovdqa %ymm1, 1088(%r8)
+vmovdqa %ymm7, 1120(%r8)
+vmovdqa %ymm5, 1152(%r8)
+vmovdqa %ymm2, 1184(%r8)
+vmovdqa %ymm3, 1216(%r8)
+vmovdqa %ymm9, 1248(%r8)
 vmovdqa 8800(%r12), %ymm0
 vpsubw 8896(%r12), %ymm0, %ymm0
 vmovdqa 9184(%r12), %ymm1
@@ -7361,14 +7364,14 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 8704(%r12), %ymm8
 vmovdqa 9568(%r12), %ymm9
-vmovdqa %ymm8, 1280(%rsp)
-vmovdqa %ymm0, 1312(%rsp)
-vmovdqa %ymm1, 1344(%rsp)
-vmovdqa %ymm7, 1376(%rsp)
-vmovdqa %ymm5, 1408(%rsp)
-vmovdqa %ymm2, 1440(%rsp)
-vmovdqa %ymm3, 1472(%rsp)
-vmovdqa %ymm9, 1504(%rsp)
+vmovdqa %ymm8, 1280(%r8)
+vmovdqa %ymm0, 1312(%r8)
+vmovdqa %ymm1, 1344(%r8)
+vmovdqa %ymm7, 1376(%r8)
+vmovdqa %ymm5, 1408(%r8)
+vmovdqa %ymm2, 1440(%r8)
+vmovdqa %ymm3, 1472(%r8)
+vmovdqa %ymm9, 1504(%r8)
 vmovdqa 10528(%r12), %ymm0
 vpsubw 10624(%r12), %ymm0, %ymm0
 vmovdqa 10912(%r12), %ymm1
@@ -7404,23 +7407,23 @@
 vpaddw %ymm4, %ymm7, %ymm7
 vmovdqa 10432(%r12), %ymm8
 vmovdqa 11296(%r12), %ymm9
-vmovdqa %ymm8, 1536(%rsp)
-vmovdqa %ymm0, 1568(%rsp)
-vmovdqa %ymm1, 1600(%rsp)
-vmovdqa %ymm7, 1632(%rsp)
-vmovdqa %ymm5, 1664(%rsp)
-vmovdqa %ymm2, 1696(%rsp)
-vmovdqa %ymm3, 1728(%rsp)
-vmovdqa %ymm9, 1760(%rsp)
-vmovdqa 0(%rsp), %ymm11
+vmovdqa %ymm8, 1536(%r8)
+vmovdqa %ymm0, 1568(%r8)
+vmovdqa %ymm1, 1600(%r8)
+vmovdqa %ymm7, 1632(%r8)
+vmovdqa %ymm5, 1664(%r8)
+vmovdqa %ymm2, 1696(%r8)
+vmovdqa %ymm3, 1728(%r8)
+vmovdqa %ymm9, 1760(%r8)
+vmovdqa 0(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm4
 vpunpckhwd const0(%rip), %ymm11, %ymm2
 vpslld $1, %ymm4, %ymm4
 vpslld $1, %ymm2, %ymm2
-vmovdqa 256(%rsp), %ymm9
+vmovdqa 256(%r8), %ymm9
 vpunpcklwd const0(%rip), %ymm9, %ymm8
 vpunpckhwd const0(%rip), %ymm9, %ymm9
-vmovdqa 512(%rsp), %ymm6
+vmovdqa 512(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm8, %ymm3
@@ -7434,7 +7437,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1536(%rsp), %ymm5
+vmovdqa 1536(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm9
 vpunpckhwd const0(%rip), %ymm5, %ymm8
 vpslld $1, %ymm9, %ymm9
@@ -7446,9 +7449,9 @@
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpand mask32_to_16(%rip), %ymm7, %ymm7
 vpackusdw %ymm7, %ymm3, %ymm7
-vmovdqa 768(%rsp), %ymm3
-vpaddw 1024(%rsp), %ymm3, %ymm8
-vpsubw 1024(%rsp), %ymm3, %ymm3
+vmovdqa 768(%r8), %ymm3
+vpaddw 1024(%r8), %ymm3, %ymm8
+vpsubw 1024(%r8), %ymm3, %ymm3
 vpsrlw $2, %ymm3, %ymm3
 vpsubw %ymm6, %ymm3, %ymm3
 vpmullw %ymm14, %ymm3, %ymm3
@@ -7458,7 +7461,7 @@
 vpsubw %ymm8, %ymm9, %ymm8
 vpsrlw $3, %ymm8, %ymm8
 vpsubw %ymm7, %ymm8, %ymm8
-vmovdqa 1280(%rsp), %ymm9
+vmovdqa 1280(%r8), %ymm9
 vpsubw %ymm11, %ymm9, %ymm9
 vpmullw %ymm15, %ymm5, %ymm2
 vpsubw %ymm2, %ymm9, %ymm2
@@ -7482,27 +7485,27 @@
 vpermq $139, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm4
 vpor %ymm4, %ymm8, %ymm8
-vpaddw 2048(%rsp), %ymm11, %ymm11
+vpaddw 2048(%r8), %ymm11, %ymm11
 vpaddw %ymm8, %ymm11, %ymm11
-vmovdqa %xmm2, 2048(%rsp)
+vmovdqa %xmm2, 2048(%r8)
 vpshufb shuf48_16(%rip), %ymm9, %ymm9
 vpand mask3_5_4_3_1(%rip), %ymm9, %ymm2
 vpand mask5_3_5_3(%rip), %ymm9, %ymm9
 vpermq $139, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm4
 vpor %ymm4, %ymm9, %ymm9
-vpaddw 2304(%rsp), %ymm6, %ymm6
+vpaddw 2304(%r8), %ymm6, %ymm6
 vpaddw %ymm9, %ymm6, %ymm6
-vmovdqa %xmm2, 2304(%rsp)
+vmovdqa %xmm2, 2304(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_4_3_1(%rip), %ymm5, %ymm2
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $139, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm4
 vpor %ymm4, %ymm5, %ymm5
-vpaddw 2560(%rsp), %ymm7, %ymm7
+vpaddw 2560(%r8), %ymm7, %ymm7
 vpaddw %ymm5, %ymm7, %ymm7
-vmovdqa %xmm2, 2560(%rsp)
+vmovdqa %xmm2, 2560(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %xmm11, 64(%rdi)
 vextracti128 $1, %ymm11, %xmm11
@@ -7519,15 +7522,15 @@
 vmovdqu %xmm3, 1120(%rdi)
 vextracti128 $1, %ymm3, %xmm3
 vmovq %xmm3, 1136(%rdi)
-vmovdqa 32(%rsp), %ymm5
+vmovdqa 32(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm9
 vpunpckhwd const0(%rip), %ymm5, %ymm8
 vpslld $1, %ymm9, %ymm9
 vpslld $1, %ymm8, %ymm8
-vmovdqa 288(%rsp), %ymm3
+vmovdqa 288(%r8), %ymm3
 vpunpcklwd const0(%rip), %ymm3, %ymm7
 vpunpckhwd const0(%rip), %ymm3, %ymm3
-vmovdqa 544(%rsp), %ymm6
+vmovdqa 544(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm7, %ymm2
@@ -7541,7 +7544,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1568(%rsp), %ymm11
+vmovdqa 1568(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm3
 vpunpckhwd const0(%rip), %ymm11, %ymm7
 vpslld $1, %ymm3, %ymm3
@@ -7553,9 +7556,9 @@
 vpand mask32_to_16(%rip), %ymm2, %ymm2
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpackusdw %ymm4, %ymm2, %ymm4
-vmovdqa 800(%rsp), %ymm2
-vpaddw 1056(%rsp), %ymm2, %ymm7
-vpsubw 1056(%rsp), %ymm2, %ymm2
+vmovdqa 800(%r8), %ymm2
+vpaddw 1056(%r8), %ymm2, %ymm7
+vpsubw 1056(%r8), %ymm2, %ymm2
 vpsrlw $2, %ymm2, %ymm2
 vpsubw %ymm6, %ymm2, %ymm2
 vpmullw %ymm14, %ymm2, %ymm2
@@ -7565,7 +7568,7 @@
 vpsubw %ymm7, %ymm3, %ymm7
 vpsrlw $3, %ymm7, %ymm7
 vpsubw %ymm4, %ymm7, %ymm7
-vmovdqa 1312(%rsp), %ymm3
+vmovdqa 1312(%r8), %ymm3
 vpsubw %ymm5, %ymm3, %ymm3
 vpmullw %ymm15, %ymm11, %ymm8
 vpsubw %ymm8, %ymm3, %ymm8
@@ -7589,27 +7592,27 @@
 vpermq $139, %ymm8, %ymm8
 vpand mask_keephigh(%rip), %ymm8, %ymm9
 vpor %ymm9, %ymm7, %ymm7
-vpaddw 2080(%rsp), %ymm5, %ymm5
+vpaddw 2080(%r8), %ymm5, %ymm5
 vpaddw %ymm7, %ymm5, %ymm5
-vmovdqa %xmm8, 2080(%rsp)
+vmovdqa %xmm8, 2080(%r8)
 vpshufb shuf48_16(%rip), %ymm3, %ymm3
 vpand mask3_5_4_3_1(%rip), %ymm3, %ymm8
 vpand mask5_3_5_3(%rip), %ymm3, %ymm3
 vpermq $139, %ymm8, %ymm8
 vpand mask_keephigh(%rip), %ymm8, %ymm9
 vpor %ymm9, %ymm3, %ymm3
-vpaddw 2336(%rsp), %ymm6, %ymm6
+vpaddw 2336(%r8), %ymm6, %ymm6
 vpaddw %ymm3, %ymm6, %ymm6
-vmovdqa %xmm8, 2336(%rsp)
+vmovdqa %xmm8, 2336(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_4_3_1(%rip), %ymm11, %ymm8
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $139, %ymm8, %ymm8
 vpand mask_keephigh(%rip), %ymm8, %ymm9
 vpor %ymm9, %ymm11, %ymm11
-vpaddw 2592(%rsp), %ymm4, %ymm4
+vpaddw 2592(%r8), %ymm4, %ymm4
 vpaddw %ymm11, %ymm4, %ymm4
-vmovdqa %xmm8, 2592(%rsp)
+vmovdqa %xmm8, 2592(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %xmm5, 152(%rdi)
 vextracti128 $1, %ymm5, %xmm5
@@ -7626,15 +7629,15 @@
 vmovdqu %xmm2, 1208(%rdi)
 vextracti128 $1, %ymm2, %xmm2
 vmovq %xmm2, 1224(%rdi)
-vmovdqa 64(%rsp), %ymm11
+vmovdqa 64(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm3
 vpunpckhwd const0(%rip), %ymm11, %ymm7
 vpslld $1, %ymm3, %ymm3
 vpslld $1, %ymm7, %ymm7
-vmovdqa 320(%rsp), %ymm2
+vmovdqa 320(%r8), %ymm2
 vpunpcklwd const0(%rip), %ymm2, %ymm4
 vpunpckhwd const0(%rip), %ymm2, %ymm2
-vmovdqa 576(%rsp), %ymm6
+vmovdqa 576(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm4, %ymm8
@@ -7648,7 +7651,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1600(%rsp), %ymm5
+vmovdqa 1600(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm2
 vpunpckhwd const0(%rip), %ymm5, %ymm4
 vpslld $1, %ymm2, %ymm2
@@ -7660,9 +7663,9 @@
 vpand mask32_to_16(%rip), %ymm8, %ymm8
 vpand mask32_to_16(%rip), %ymm9, %ymm9
 vpackusdw %ymm9, %ymm8, %ymm9
-vmovdqa 832(%rsp), %ymm8
-vpaddw 1088(%rsp), %ymm8, %ymm4
-vpsubw 1088(%rsp), %ymm8, %ymm8
+vmovdqa 832(%r8), %ymm8
+vpaddw 1088(%r8), %ymm8, %ymm4
+vpsubw 1088(%r8), %ymm8, %ymm8
 vpsrlw $2, %ymm8, %ymm8
 vpsubw %ymm6, %ymm8, %ymm8
 vpmullw %ymm14, %ymm8, %ymm8
@@ -7672,7 +7675,7 @@
 vpsubw %ymm4, %ymm2, %ymm4
 vpsrlw $3, %ymm4, %ymm4
 vpsubw %ymm9, %ymm4, %ymm4
-vmovdqa 1344(%rsp), %ymm2
+vmovdqa 1344(%r8), %ymm2
 vpsubw %ymm11, %ymm2, %ymm2
 vpmullw %ymm15, %ymm5, %ymm7
 vpsubw %ymm7, %ymm2, %ymm7
@@ -7696,27 +7699,27 @@
 vpermq $139, %ymm7, %ymm7
 vpand mask_keephigh(%rip), %ymm7, %ymm3
 vpor %ymm3, %ymm4, %ymm4
-vpaddw 2112(%rsp), %ymm11, %ymm11
+vpaddw 2112(%r8), %ymm11, %ymm11
 vpaddw %ymm4, %ymm11, %ymm11
-vmovdqa %xmm7, 2112(%rsp)
+vmovdqa %xmm7, 2112(%r8)
 vpshufb shuf48_16(%rip), %ymm2, %ymm2
 vpand mask3_5_4_3_1(%rip), %ymm2, %ymm7
 vpand mask5_3_5_3(%rip), %ymm2, %ymm2
 vpermq $139, %ymm7, %ymm7
 vpand mask_keephigh(%rip), %ymm7, %ymm3
 vpor %ymm3, %ymm2, %ymm2
-vpaddw 2368(%rsp), %ymm6, %ymm6
+vpaddw 2368(%r8), %ymm6, %ymm6
 vpaddw %ymm2, %ymm6, %ymm6
-vmovdqa %xmm7, 2368(%rsp)
+vmovdqa %xmm7, 2368(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_4_3_1(%rip), %ymm5, %ymm7
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $139, %ymm7, %ymm7
 vpand mask_keephigh(%rip), %ymm7, %ymm3
 vpor %ymm3, %ymm5, %ymm5
-vpaddw 2624(%rsp), %ymm9, %ymm9
+vpaddw 2624(%r8), %ymm9, %ymm9
 vpaddw %ymm5, %ymm9, %ymm9
-vmovdqa %xmm7, 2624(%rsp)
+vmovdqa %xmm7, 2624(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %xmm11, 240(%rdi)
 vextracti128 $1, %ymm11, %xmm11
@@ -7733,15 +7736,15 @@
 vmovdqu %xmm8, 1296(%rdi)
 vextracti128 $1, %ymm8, %xmm8
 vmovq %xmm8, 1312(%rdi)
-vmovdqa 96(%rsp), %ymm5
+vmovdqa 96(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm2
 vpunpckhwd const0(%rip), %ymm5, %ymm4
 vpslld $1, %ymm2, %ymm2
 vpslld $1, %ymm4, %ymm4
-vmovdqa 352(%rsp), %ymm8
+vmovdqa 352(%r8), %ymm8
 vpunpcklwd const0(%rip), %ymm8, %ymm9
 vpunpckhwd const0(%rip), %ymm8, %ymm8
-vmovdqa 608(%rsp), %ymm6
+vmovdqa 608(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm9, %ymm7
@@ -7755,7 +7758,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1632(%rsp), %ymm11
+vmovdqa 1632(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm8
 vpunpckhwd const0(%rip), %ymm11, %ymm9
 vpslld $1, %ymm8, %ymm8
@@ -7767,9 +7770,9 @@
 vpand mask32_to_16(%rip), %ymm7, %ymm7
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpackusdw %ymm3, %ymm7, %ymm3
-vmovdqa 864(%rsp), %ymm7
-vpaddw 1120(%rsp), %ymm7, %ymm9
-vpsubw 1120(%rsp), %ymm7, %ymm7
+vmovdqa 864(%r8), %ymm7
+vpaddw 1120(%r8), %ymm7, %ymm9
+vpsubw 1120(%r8), %ymm7, %ymm7
 vpsrlw $2, %ymm7, %ymm7
 vpsubw %ymm6, %ymm7, %ymm7
 vpmullw %ymm14, %ymm7, %ymm7
@@ -7779,7 +7782,7 @@
 vpsubw %ymm9, %ymm8, %ymm9
 vpsrlw $3, %ymm9, %ymm9
 vpsubw %ymm3, %ymm9, %ymm9
-vmovdqa 1376(%rsp), %ymm8
+vmovdqa 1376(%r8), %ymm8
 vpsubw %ymm5, %ymm8, %ymm8
 vpmullw %ymm15, %ymm11, %ymm4
 vpsubw %ymm4, %ymm8, %ymm4
@@ -7803,60 +7806,60 @@
 vpermq $139, %ymm4, %ymm4
 vpand mask_keephigh(%rip), %ymm4, %ymm2
 vpor %ymm2, %ymm9, %ymm9
-vpaddw 2144(%rsp), %ymm5, %ymm5
+vpaddw 2144(%r8), %ymm5, %ymm5
 vpaddw %ymm9, %ymm5, %ymm5
-vmovdqa %xmm4, 2144(%rsp)
+vmovdqa %xmm4, 2144(%r8)
 vpshufb shuf48_16(%rip), %ymm8, %ymm8
 vpand mask3_5_4_3_1(%rip), %ymm8, %ymm4
 vpand mask5_3_5_3(%rip), %ymm8, %ymm8
 vpermq $139, %ymm4, %ymm4
 vpand mask_keephigh(%rip), %ymm4, %ymm2
 vpor %ymm2, %ymm8, %ymm8
-vpaddw 2400(%rsp), %ymm6, %ymm6
+vpaddw 2400(%r8), %ymm6, %ymm6
 vpaddw %ymm8, %ymm6, %ymm6
-vmovdqa %xmm4, 2400(%rsp)
+vmovdqa %xmm4, 2400(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_4_3_1(%rip), %ymm11, %ymm4
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $139, %ymm4, %ymm4
 vpand mask_keephigh(%rip), %ymm4, %ymm2
 vpor %ymm2, %ymm11, %ymm11
-vpaddw 2656(%rsp), %ymm3, %ymm3
+vpaddw 2656(%r8), %ymm3, %ymm3
 vpaddw %ymm11, %ymm3, %ymm3
-vmovdqa %xmm4, 2656(%rsp)
+vmovdqa %xmm4, 2656(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %xmm5, 328(%rdi)
 vextracti128 $1, %ymm5, %xmm5
 vmovq %xmm5, 344(%rdi)
 vpshufb shufmin1_mask3(%rip), %ymm5, %ymm5
-vmovdqa %xmm5, 1792(%rsp)
+vmovdqa %xmm5, 1792(%r8)
 vpand mask_mod8192(%rip), %ymm6, %ymm6
 vmovdqu %xmm6, 680(%rdi)
 vextracti128 $1, %ymm6, %xmm6
 vmovq %xmm6, 696(%rdi)
 vpshufb shufmin1_mask3(%rip), %ymm6, %ymm6
-vmovdqa %xmm6, 1824(%rsp)
+vmovdqa %xmm6, 1824(%r8)
 vpand mask_mod8192(%rip), %ymm3, %ymm3
 vmovdqu %xmm3, 1032(%rdi)
 vextracti128 $1, %ymm3, %xmm3
 vmovq %xmm3, 1048(%rdi)
 vpshufb shufmin1_mask3(%rip), %ymm3, %ymm3
-vmovdqa %xmm3, 1856(%rsp)
+vmovdqa %xmm3, 1856(%r8)
 vpand mask_mod8192(%rip), %ymm7, %ymm7
 vmovdqu %xmm7, 1384(%rdi)
 vextracti128 $1, %ymm7, %xmm7
 vpextrw $0, %xmm7, 1400(%rdi)
 vpshufb shufmin1_mask3(%rip), %ymm7, %ymm7
-vmovdqa %xmm7, 1888(%rsp)
-vmovdqa 128(%rsp), %ymm11
+vmovdqa %xmm7, 1888(%r8)
+vmovdqa 128(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm8
 vpunpckhwd const0(%rip), %ymm11, %ymm9
 vpslld $1, %ymm8, %ymm8
 vpslld $1, %ymm9, %ymm9
-vmovdqa 384(%rsp), %ymm7
+vmovdqa 384(%r8), %ymm7
 vpunpcklwd const0(%rip), %ymm7, %ymm3
 vpunpckhwd const0(%rip), %ymm7, %ymm7
-vmovdqa 640(%rsp), %ymm6
+vmovdqa 640(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm3, %ymm4
@@ -7870,7 +7873,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1664(%rsp), %ymm5
+vmovdqa 1664(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm7
 vpunpckhwd const0(%rip), %ymm5, %ymm3
 vpslld $1, %ymm7, %ymm7
@@ -7882,9 +7885,9 @@
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpand mask32_to_16(%rip), %ymm2, %ymm2
 vpackusdw %ymm2, %ymm4, %ymm2
-vmovdqa 896(%rsp), %ymm4
-vpaddw 1152(%rsp), %ymm4, %ymm3
-vpsubw 1152(%rsp), %ymm4, %ymm4
+vmovdqa 896(%r8), %ymm4
+vpaddw 1152(%r8), %ymm4, %ymm3
+vpsubw 1152(%r8), %ymm4, %ymm4
 vpsrlw $2, %ymm4, %ymm4
 vpsubw %ymm6, %ymm4, %ymm4
 vpmullw %ymm14, %ymm4, %ymm4
@@ -7894,7 +7897,7 @@
 vpsubw %ymm3, %ymm7, %ymm3
 vpsrlw $3, %ymm3, %ymm3
 vpsubw %ymm2, %ymm3, %ymm3
-vmovdqa 1408(%rsp), %ymm7
+vmovdqa 1408(%r8), %ymm7
 vpsubw %ymm11, %ymm7, %ymm7
 vpmullw %ymm15, %ymm5, %ymm9
 vpsubw %ymm9, %ymm7, %ymm9
@@ -7925,40 +7928,40 @@
 vpand mask_keephigh(%rip), %ymm10, %ymm8
 vpor %ymm8, %ymm4, %ymm4
 vmovdqu 64(%rdi), %ymm8
-vpaddw 1920(%rsp), %ymm8, %ymm8
+vpaddw 1920(%r8), %ymm8, %ymm8
 vpaddw %ymm4, %ymm8, %ymm8
 vpand mask_mod8192(%rip), %ymm8, %ymm8
 vmovdqu %xmm8, 64(%rdi)
 vextracti128 $1, %ymm8, %xmm8
 vmovq %xmm8, 80(%rdi)
-vmovdqa %xmm10, 1920(%rsp)
+vmovdqa %xmm10, 1920(%r8)
 vpshufb shuf48_16(%rip), %ymm3, %ymm3
 vpand mask3_5_4_3_1(%rip), %ymm3, %ymm10
 vpand mask5_3_5_3(%rip), %ymm3, %ymm3
 vpermq $139, %ymm10, %ymm10
 vpand mask_keephigh(%rip), %ymm10, %ymm8
 vpor %ymm8, %ymm3, %ymm3
-vpaddw 2176(%rsp), %ymm11, %ymm11
+vpaddw 2176(%r8), %ymm11, %ymm11
 vpaddw %ymm3, %ymm11, %ymm11
-vmovdqa %xmm10, 2176(%rsp)
+vmovdqa %xmm10, 2176(%r8)
 vpshufb shuf48_16(%rip), %ymm7, %ymm7
 vpand mask3_5_4_3_1(%rip), %ymm7, %ymm10
 vpand mask5_3_5_3(%rip), %ymm7, %ymm7
 vpermq $139, %ymm10, %ymm10
 vpand mask_keephigh(%rip), %ymm10, %ymm8
 vpor %ymm8, %ymm7, %ymm7
-vpaddw 2432(%rsp), %ymm6, %ymm6
+vpaddw 2432(%r8), %ymm6, %ymm6
 vpaddw %ymm7, %ymm6, %ymm6
-vmovdqa %xmm10, 2432(%rsp)
+vmovdqa %xmm10, 2432(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_4_3_1(%rip), %ymm5, %ymm10
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $139, %ymm10, %ymm10
 vpand mask_keephigh(%rip), %ymm10, %ymm8
 vpor %ymm8, %ymm5, %ymm5
-vpaddw 2688(%rsp), %ymm2, %ymm2
+vpaddw 2688(%r8), %ymm2, %ymm2
 vpaddw %ymm5, %ymm2, %ymm2
-vmovdqa %xmm10, 2688(%rsp)
+vmovdqa %xmm10, 2688(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %xmm11, 416(%rdi)
 vextracti128 $1, %ymm11, %xmm11
@@ -7971,15 +7974,15 @@
 vmovdqu %xmm2, 1120(%rdi)
 vextracti128 $1, %ymm2, %xmm2
 vmovq %xmm2, 1136(%rdi)
-vmovdqa 160(%rsp), %ymm5
+vmovdqa 160(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm7
 vpunpckhwd const0(%rip), %ymm5, %ymm3
 vpslld $1, %ymm7, %ymm7
 vpslld $1, %ymm3, %ymm3
-vmovdqa 416(%rsp), %ymm4
+vmovdqa 416(%r8), %ymm4
 vpunpcklwd const0(%rip), %ymm4, %ymm2
 vpunpckhwd const0(%rip), %ymm4, %ymm4
-vmovdqa 672(%rsp), %ymm6
+vmovdqa 672(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm2, %ymm10
@@ -7993,7 +7996,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1696(%rsp), %ymm11
+vmovdqa 1696(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm4
 vpunpckhwd const0(%rip), %ymm11, %ymm2
 vpslld $1, %ymm4, %ymm4
@@ -8005,9 +8008,9 @@
 vpand mask32_to_16(%rip), %ymm10, %ymm10
 vpand mask32_to_16(%rip), %ymm8, %ymm8
 vpackusdw %ymm8, %ymm10, %ymm8
-vmovdqa 928(%rsp), %ymm10
-vpaddw 1184(%rsp), %ymm10, %ymm2
-vpsubw 1184(%rsp), %ymm10, %ymm10
+vmovdqa 928(%r8), %ymm10
+vpaddw 1184(%r8), %ymm10, %ymm2
+vpsubw 1184(%r8), %ymm10, %ymm10
 vpsrlw $2, %ymm10, %ymm10
 vpsubw %ymm6, %ymm10, %ymm10
 vpmullw %ymm14, %ymm10, %ymm10
@@ -8017,7 +8020,7 @@
 vpsubw %ymm2, %ymm4, %ymm2
 vpsrlw $3, %ymm2, %ymm2
 vpsubw %ymm8, %ymm2, %ymm2
-vmovdqa 1440(%rsp), %ymm4
+vmovdqa 1440(%r8), %ymm4
 vpsubw %ymm5, %ymm4, %ymm4
 vpmullw %ymm15, %ymm11, %ymm3
 vpsubw %ymm3, %ymm4, %ymm3
@@ -8048,40 +8051,40 @@
 vpand mask_keephigh(%rip), %ymm9, %ymm7
 vpor %ymm7, %ymm10, %ymm10
 vmovdqu 152(%rdi), %ymm7
-vpaddw 1952(%rsp), %ymm7, %ymm7
+vpaddw 1952(%r8), %ymm7, %ymm7
 vpaddw %ymm10, %ymm7, %ymm7
 vpand mask_mod8192(%rip), %ymm7, %ymm7
 vmovdqu %xmm7, 152(%rdi)
 vextracti128 $1, %ymm7, %xmm7
 vmovq %xmm7, 168(%rdi)
-vmovdqa %xmm9, 1952(%rsp)
+vmovdqa %xmm9, 1952(%r8)
 vpshufb shuf48_16(%rip), %ymm2, %ymm2
 vpand mask3_5_4_3_1(%rip), %ymm2, %ymm9
 vpand mask5_3_5_3(%rip), %ymm2, %ymm2
 vpermq $139, %ymm9, %ymm9
 vpand mask_keephigh(%rip), %ymm9, %ymm7
 vpor %ymm7, %ymm2, %ymm2
-vpaddw 2208(%rsp), %ymm5, %ymm5
+vpaddw 2208(%r8), %ymm5, %ymm5
 vpaddw %ymm2, %ymm5, %ymm5
-vmovdqa %xmm9, 2208(%rsp)
+vmovdqa %xmm9, 2208(%r8)
 vpshufb shuf48_16(%rip), %ymm4, %ymm4
 vpand mask3_5_4_3_1(%rip), %ymm4, %ymm9
 vpand mask5_3_5_3(%rip), %ymm4, %ymm4
 vpermq $139, %ymm9, %ymm9
 vpand mask_keephigh(%rip), %ymm9, %ymm7
 vpor %ymm7, %ymm4, %ymm4
-vpaddw 2464(%rsp), %ymm6, %ymm6
+vpaddw 2464(%r8), %ymm6, %ymm6
 vpaddw %ymm4, %ymm6, %ymm6
-vmovdqa %xmm9, 2464(%rsp)
+vmovdqa %xmm9, 2464(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_4_3_1(%rip), %ymm11, %ymm9
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $139, %ymm9, %ymm9
 vpand mask_keephigh(%rip), %ymm9, %ymm7
 vpor %ymm7, %ymm11, %ymm11
-vpaddw 2720(%rsp), %ymm8, %ymm8
+vpaddw 2720(%r8), %ymm8, %ymm8
 vpaddw %ymm11, %ymm8, %ymm8
-vmovdqa %xmm9, 2720(%rsp)
+vmovdqa %xmm9, 2720(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %xmm5, 504(%rdi)
 vextracti128 $1, %ymm5, %xmm5
@@ -8094,15 +8097,15 @@
 vmovdqu %xmm8, 1208(%rdi)
 vextracti128 $1, %ymm8, %xmm8
 vmovq %xmm8, 1224(%rdi)
-vmovdqa 192(%rsp), %ymm11
+vmovdqa 192(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm4
 vpunpckhwd const0(%rip), %ymm11, %ymm2
 vpslld $1, %ymm4, %ymm4
 vpslld $1, %ymm2, %ymm2
-vmovdqa 448(%rsp), %ymm10
+vmovdqa 448(%r8), %ymm10
 vpunpcklwd const0(%rip), %ymm10, %ymm8
 vpunpckhwd const0(%rip), %ymm10, %ymm10
-vmovdqa 704(%rsp), %ymm6
+vmovdqa 704(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm5
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm5, %ymm8, %ymm9
@@ -8116,7 +8119,7 @@
 vpand mask32_to_16(%rip), %ymm5, %ymm5
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm5, %ymm6
-vmovdqa 1728(%rsp), %ymm5
+vmovdqa 1728(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm10
 vpunpckhwd const0(%rip), %ymm5, %ymm8
 vpslld $1, %ymm10, %ymm10
@@ -8128,9 +8131,9 @@
 vpand mask32_to_16(%rip), %ymm9, %ymm9
 vpand mask32_to_16(%rip), %ymm7, %ymm7
 vpackusdw %ymm7, %ymm9, %ymm7
-vmovdqa 960(%rsp), %ymm9
-vpaddw 1216(%rsp), %ymm9, %ymm8
-vpsubw 1216(%rsp), %ymm9, %ymm9
+vmovdqa 960(%r8), %ymm9
+vpaddw 1216(%r8), %ymm9, %ymm8
+vpsubw 1216(%r8), %ymm9, %ymm9
 vpsrlw $2, %ymm9, %ymm9
 vpsubw %ymm6, %ymm9, %ymm9
 vpmullw %ymm14, %ymm9, %ymm9
@@ -8140,7 +8143,7 @@
 vpsubw %ymm8, %ymm10, %ymm8
 vpsrlw $3, %ymm8, %ymm8
 vpsubw %ymm7, %ymm8, %ymm8
-vmovdqa 1472(%rsp), %ymm10
+vmovdqa 1472(%r8), %ymm10
 vpsubw %ymm11, %ymm10, %ymm10
 vpmullw %ymm15, %ymm5, %ymm2
 vpsubw %ymm2, %ymm10, %ymm2
@@ -8171,40 +8174,40 @@
 vpand mask_keephigh(%rip), %ymm3, %ymm4
 vpor %ymm4, %ymm9, %ymm9
 vmovdqu 240(%rdi), %ymm4
-vpaddw 1984(%rsp), %ymm4, %ymm4
+vpaddw 1984(%r8), %ymm4, %ymm4
 vpaddw %ymm9, %ymm4, %ymm4
 vpand mask_mod8192(%rip), %ymm4, %ymm4
 vmovdqu %xmm4, 240(%rdi)
 vextracti128 $1, %ymm4, %xmm4
 vmovq %xmm4, 256(%rdi)
-vmovdqa %xmm3, 1984(%rsp)
+vmovdqa %xmm3, 1984(%r8)
 vpshufb shuf48_16(%rip), %ymm8, %ymm8
 vpand mask3_5_4_3_1(%rip), %ymm8, %ymm3
 vpand mask5_3_5_3(%rip), %ymm8, %ymm8
 vpermq $139, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm4
 vpor %ymm4, %ymm8, %ymm8
-vpaddw 2240(%rsp), %ymm11, %ymm11
+vpaddw 2240(%r8), %ymm11, %ymm11
 vpaddw %ymm8, %ymm11, %ymm11
-vmovdqa %xmm3, 2240(%rsp)
+vmovdqa %xmm3, 2240(%r8)
 vpshufb shuf48_16(%rip), %ymm10, %ymm10
 vpand mask3_5_4_3_1(%rip), %ymm10, %ymm3
 vpand mask5_3_5_3(%rip), %ymm10, %ymm10
 vpermq $139, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm4
 vpor %ymm4, %ymm10, %ymm10
-vpaddw 2496(%rsp), %ymm6, %ymm6
+vpaddw 2496(%r8), %ymm6, %ymm6
 vpaddw %ymm10, %ymm6, %ymm6
-vmovdqa %xmm3, 2496(%rsp)
+vmovdqa %xmm3, 2496(%r8)
 vpshufb shuf48_16(%rip), %ymm5, %ymm5
 vpand mask3_5_4_3_1(%rip), %ymm5, %ymm3
 vpand mask5_3_5_3(%rip), %ymm5, %ymm5
 vpermq $139, %ymm3, %ymm3
 vpand mask_keephigh(%rip), %ymm3, %ymm4
 vpor %ymm4, %ymm5, %ymm5
-vpaddw 2752(%rsp), %ymm7, %ymm7
+vpaddw 2752(%r8), %ymm7, %ymm7
 vpaddw %ymm5, %ymm7, %ymm7
-vmovdqa %xmm3, 2752(%rsp)
+vmovdqa %xmm3, 2752(%r8)
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %xmm11, 592(%rdi)
 vextracti128 $1, %ymm11, %xmm11
@@ -8217,15 +8220,15 @@
 vmovdqu %xmm7, 1296(%rdi)
 vextracti128 $1, %ymm7, %xmm7
 vmovq %xmm7, 1312(%rdi)
-vmovdqa 224(%rsp), %ymm5
+vmovdqa 224(%r8), %ymm5
 vpunpcklwd const0(%rip), %ymm5, %ymm10
 vpunpckhwd const0(%rip), %ymm5, %ymm8
 vpslld $1, %ymm10, %ymm10
 vpslld $1, %ymm8, %ymm8
-vmovdqa 480(%rsp), %ymm9
+vmovdqa 480(%r8), %ymm9
 vpunpcklwd const0(%rip), %ymm9, %ymm7
 vpunpckhwd const0(%rip), %ymm9, %ymm9
-vmovdqa 736(%rsp), %ymm6
+vmovdqa 736(%r8), %ymm6
 vpunpcklwd const0(%rip), %ymm6, %ymm11
 vpunpckhwd const0(%rip), %ymm6, %ymm6
 vpaddd %ymm11, %ymm7, %ymm3
@@ -8239,7 +8242,7 @@
 vpand mask32_to_16(%rip), %ymm11, %ymm11
 vpand mask32_to_16(%rip), %ymm6, %ymm6
 vpackusdw %ymm6, %ymm11, %ymm6
-vmovdqa 1760(%rsp), %ymm11
+vmovdqa 1760(%r8), %ymm11
 vpunpcklwd const0(%rip), %ymm11, %ymm9
 vpunpckhwd const0(%rip), %ymm11, %ymm7
 vpslld $1, %ymm9, %ymm9
@@ -8251,9 +8254,9 @@
 vpand mask32_to_16(%rip), %ymm3, %ymm3
 vpand mask32_to_16(%rip), %ymm4, %ymm4
 vpackusdw %ymm4, %ymm3, %ymm4
-vmovdqa 992(%rsp), %ymm3
-vpaddw 1248(%rsp), %ymm3, %ymm7
-vpsubw 1248(%rsp), %ymm3, %ymm3
+vmovdqa 992(%r8), %ymm3
+vpaddw 1248(%r8), %ymm3, %ymm7
+vpsubw 1248(%r8), %ymm3, %ymm3
 vpsrlw $2, %ymm3, %ymm3
 vpsubw %ymm6, %ymm3, %ymm3
 vpmullw %ymm14, %ymm3, %ymm3
@@ -8263,7 +8266,7 @@
 vpsubw %ymm7, %ymm9, %ymm7
 vpsrlw $3, %ymm7, %ymm7
 vpsubw %ymm4, %ymm7, %ymm7
-vmovdqa 1504(%rsp), %ymm9
+vmovdqa 1504(%r8), %ymm9
 vpsubw %ymm5, %ymm9, %ymm9
 vpmullw %ymm15, %ymm11, %ymm8
 vpsubw %ymm8, %ymm9, %ymm8
@@ -8283,13 +8286,13 @@
 vpsubw %ymm9, %ymm6, %ymm6
 vextracti128 $1, %ymm4, %xmm8
 vpshufb shufmin1_mask3(%rip), %ymm8, %ymm8
-vmovdqa %ymm8, 2816(%rsp)
+vmovdqa %ymm8, 2816(%r8)
 vextracti128 $1, %ymm3, %xmm8
 vpshufb shufmin1_mask3(%rip), %ymm8, %ymm8
-vmovdqa %ymm8, 2848(%rsp)
+vmovdqa %ymm8, 2848(%r8)
 vextracti128 $1, %ymm7, %xmm8
 vpshufb shufmin1_mask3(%rip), %ymm8, %ymm8
-vmovdqa %ymm8, 2880(%rsp)
+vmovdqa %ymm8, 2880(%r8)
 vmovdqu 680(%rdi), %ymm8
 vmovdqu 1032(%rdi), %ymm10
 vmovdqu 1384(%rdi), %ymm2
@@ -8303,42 +8306,42 @@
 vpand mask_keephigh(%rip), %ymm2, %ymm10
 vpor %ymm10, %ymm3, %ymm3
 vmovdqu 328(%rdi), %ymm10
-vpaddw 2016(%rsp), %ymm10, %ymm10
+vpaddw 2016(%r8), %ymm10, %ymm10
 vpaddw %ymm3, %ymm10, %ymm10
 vpand mask_mod8192(%rip), %ymm10, %ymm10
 vmovdqu %xmm10, 328(%rdi)
 vextracti128 $1, %ymm10, %xmm10
 vmovq %xmm10, 344(%rdi)
 vpshufb shufmin1_mask3(%rip), %ymm10, %ymm10
-vmovdqa %xmm10, 1792(%rsp)
-vmovdqa %xmm2, 2016(%rsp)
+vmovdqa %xmm10, 1792(%r8)
+vmovdqa %xmm2, 2016(%r8)
 vpshufb shuf48_16(%rip), %ymm7, %ymm7
 vpand mask3_5_4_3_1(%rip), %ymm7, %ymm2
 vpand mask5_3_5_3(%rip), %ymm7, %ymm7
 vpermq $139, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm10
 vpor %ymm10, %ymm7, %ymm7
-vpaddw 2272(%rsp), %ymm5, %ymm5
+vpaddw 2272(%r8), %ymm5, %ymm5
 vpaddw %ymm7, %ymm5, %ymm5
-vmovdqa %xmm2, 2272(%rsp)
+vmovdqa %xmm2, 2272(%r8)
 vpshufb shuf48_16(%rip), %ymm9, %ymm9
 vpand mask3_5_4_3_1(%rip), %ymm9, %ymm2
 vpand mask5_3_5_3(%rip), %ymm9, %ymm9
 vpermq $139, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm10
 vpor %ymm10, %ymm9, %ymm9
-vpaddw 2528(%rsp), %ymm6, %ymm6
+vpaddw 2528(%r8), %ymm6, %ymm6
 vpaddw %ymm9, %ymm6, %ymm6
-vmovdqa %xmm2, 2528(%rsp)
+vmovdqa %xmm2, 2528(%r8)
 vpshufb shuf48_16(%rip), %ymm11, %ymm11
 vpand mask3_5_4_3_1(%rip), %ymm11, %ymm2
 vpand mask5_3_5_3(%rip), %ymm11, %ymm11
 vpermq $139, %ymm2, %ymm2
 vpand mask_keephigh(%rip), %ymm2, %ymm10
 vpor %ymm10, %ymm11, %ymm11
-vpaddw 2784(%rsp), %ymm4, %ymm4
+vpaddw 2784(%r8), %ymm4, %ymm4
 vpaddw %ymm11, %ymm4, %ymm4
-vmovdqa %xmm2, 2784(%rsp)
+vmovdqa %xmm2, 2784(%r8)
 vpand mask_mod8192(%rip), %ymm5, %ymm5
 vmovdqu %xmm5, 680(%rdi)
 vextracti128 $1, %ymm5, %xmm5
@@ -8352,108 +8355,107 @@
 vextracti128 $1, %ymm4, %xmm4
 vpextrw $0, %xmm4, 1400(%rdi)
 vmovdqu 0(%rdi), %ymm11
-vpaddw 1888(%rsp), %ymm11, %ymm11
-vpaddw 2816(%rsp), %ymm11, %ymm11
+vpaddw 1888(%r8), %ymm11, %ymm11
+vpaddw 2816(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 0(%rdi)
 vmovdqu 352(%rdi), %ymm11
-vpaddw 2528(%rsp), %ymm11, %ymm11
-vpaddw 2848(%rsp), %ymm11, %ymm11
+vpaddw 2528(%r8), %ymm11, %ymm11
+vpaddw 2848(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 352(%rdi)
 vmovdqu 704(%rdi), %ymm11
-vpaddw 2784(%rsp), %ymm11, %ymm11
-vpaddw 2880(%rsp), %ymm11, %ymm11
+vpaddw 2784(%r8), %ymm11, %ymm11
+vpaddw 2880(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 704(%rdi)
 vmovdqu 88(%rdi), %ymm11
-vpaddw 2048(%rsp), %ymm11, %ymm11
-vpaddw 1920(%rsp), %ymm11, %ymm11
+vpaddw 2048(%r8), %ymm11, %ymm11
+vpaddw 1920(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 88(%rdi)
 vmovdqu 440(%rdi), %ymm11
-vpaddw 2304(%rsp), %ymm11, %ymm11
+vpaddw 2304(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 440(%rdi)
 vmovdqu 792(%rdi), %ymm11
-vpaddw 2560(%rsp), %ymm11, %ymm11
+vpaddw 2560(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 792(%rdi)
 vmovdqu 176(%rdi), %ymm11
-vpaddw 2080(%rsp), %ymm11, %ymm11
-vpaddw 1952(%rsp), %ymm11, %ymm11
+vpaddw 2080(%r8), %ymm11, %ymm11
+vpaddw 1952(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 176(%rdi)
 vmovdqu 528(%rdi), %ymm11
-vpaddw 2336(%rsp), %ymm11, %ymm11
+vpaddw 2336(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 528(%rdi)
 vmovdqu 880(%rdi), %ymm11
-vpaddw 2592(%rsp), %ymm11, %ymm11
+vpaddw 2592(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 880(%rdi)
 vmovdqu 264(%rdi), %ymm11
-vpaddw 2112(%rsp), %ymm11, %ymm11
-vpaddw 1984(%rsp), %ymm11, %ymm11
+vpaddw 2112(%r8), %ymm11, %ymm11
+vpaddw 1984(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 264(%rdi)
 vmovdqu 616(%rdi), %ymm11
-vpaddw 2368(%rsp), %ymm11, %ymm11
+vpaddw 2368(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 616(%rdi)
 vmovdqu 968(%rdi), %ymm11
-vpaddw 2624(%rsp), %ymm11, %ymm11
+vpaddw 2624(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 968(%rdi)
 vmovdqu 352(%rdi), %ymm11
-vpaddw 2144(%rsp), %ymm11, %ymm11
+vpaddw 2144(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 352(%rdi)
 vmovdqu 704(%rdi), %ymm11
-vpaddw 2400(%rsp), %ymm11, %ymm11
+vpaddw 2400(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 704(%rdi)
 vmovdqu 1056(%rdi), %ymm11
-vpaddw 2656(%rsp), %ymm11, %ymm11
+vpaddw 2656(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 1056(%rdi)
 vmovdqu 440(%rdi), %ymm11
-vpaddw 2176(%rsp), %ymm11, %ymm11
+vpaddw 2176(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 440(%rdi)
 vmovdqu 792(%rdi), %ymm11
-vpaddw 2432(%rsp), %ymm11, %ymm11
+vpaddw 2432(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 792(%rdi)
 vmovdqu 1144(%rdi), %ymm11
-vpaddw 2688(%rsp), %ymm11, %ymm11
+vpaddw 2688(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 1144(%rdi)
 vmovdqu 528(%rdi), %ymm11
-vpaddw 2208(%rsp), %ymm11, %ymm11
+vpaddw 2208(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 528(%rdi)
 vmovdqu 880(%rdi), %ymm11
-vpaddw 2464(%rsp), %ymm11, %ymm11
+vpaddw 2464(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 880(%rdi)
 vmovdqu 1232(%rdi), %ymm11
-vpaddw 2720(%rsp), %ymm11, %ymm11
+vpaddw 2720(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 1232(%rdi)
 vmovdqu 616(%rdi), %ymm11
-vpaddw 2240(%rsp), %ymm11, %ymm11
+vpaddw 2240(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 616(%rdi)
 vmovdqu 968(%rdi), %ymm11
-vpaddw 2496(%rsp), %ymm11, %ymm11
+vpaddw 2496(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 968(%rdi)
 vmovdqu 1320(%rdi), %ymm11
-vpaddw 2752(%rsp), %ymm11, %ymm11
+vpaddw 2752(%r8), %ymm11, %ymm11
 vpand mask_mod8192(%rip), %ymm11, %ymm11
 vmovdqu %ymm11, 1320(%rdi)
-mov %r8, %rsp
 pop %r12
 .cfi_restore r12
 pop %rbp
diff --git a/crypto/hrss/hrss.c b/crypto/hrss/hrss.c
index 957e9d2..0247001 100644
--- a/crypto/hrss/hrss.c
+++ b/crypto/hrss/hrss.c
@@ -22,6 +22,7 @@
 #include <openssl/cpu.h>
 #include <openssl/hmac.h>
 #include <openssl/mem.h>
+#include <openssl/rand.h>
 #include <openssl/sha.h>
 
 #if defined(_MSC_VER)
@@ -939,6 +940,34 @@
   printf("]\n");
 }
 
+// POLY_MUL_SCRATCH contains space for the working variables needed by
+// |poly_mul|. The contents afterwards may be discarded, but the object may also
+// be reused with future |poly_mul| calls to save heap allocations.
+//
+// This object must have 32-byte alignment.
+struct POLY_MUL_SCRATCH {
+  union {
+    // This is used by |poly_mul_novec|.
+    struct {
+      uint16_t prod[2 * N];
+      uint16_t scratch[1318];
+    } novec;
+
+#if defined(HRSS_HAVE_VECTOR_UNIT)
+    // This is used by |poly_mul_vec|.
+    struct {
+      vec_t prod[VECS_PER_POLY * 2];
+      vec_t scratch[172];
+    } vec;
+#endif
+
+#if defined(POLY_RQ_MUL_ASM)
+    // This is the space used by |poly_Rq_mul|.
+    uint8_t rq[POLY_MUL_RQ_SCRATCH_SPACE];
+#endif
+  } u;
+};
+
 #if defined(HRSS_HAVE_VECTOR_UNIT)
 
 // poly_mul_vec_aux is a recursive function that multiplies |n| words from |a|
@@ -1184,8 +1213,8 @@
 }
 
 // poly_mul_vec sets |*out| to |x|×|y| mod (𝑥^n - 1).
-static void poly_mul_vec(struct poly *out, const struct poly *x,
-                         const struct poly *y) {
+static void poly_mul_vec(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
+                         const struct poly *x, const struct poly *y) {
   OPENSSL_memset((uint16_t *)&x->v[N], 0, 3 * sizeof(uint16_t));
   OPENSSL_memset((uint16_t *)&y->v[N], 0, 3 * sizeof(uint16_t));
 
@@ -1194,9 +1223,9 @@
   OPENSSL_STATIC_ASSERT(alignof(struct poly) == alignof(vec_t),
                         "struct poly has incorrect alignment");
 
-  vec_t prod[VECS_PER_POLY * 2];
-  vec_t scratch[172];
-  poly_mul_vec_aux(prod, scratch, x->vectors, y->vectors, VECS_PER_POLY);
+  vec_t *const prod = scratch->u.vec.prod;
+  vec_t *const aux_scratch = scratch->u.vec.scratch;
+  poly_mul_vec_aux(prod, aux_scratch, x->vectors, y->vectors, VECS_PER_POLY);
 
   // |prod| needs to be reduced mod (𝑥^n - 1), which just involves adding the
   // upper-half to the lower-half. However, N is 701, which isn't a multiple of
@@ -1273,11 +1302,11 @@
 }
 
 // poly_mul_novec sets |*out| to |x|×|y| mod (𝑥^n - 1).
-static void poly_mul_novec(struct poly *out, const struct poly *x,
-                           const struct poly *y) {
-  uint16_t prod[2 * N];
-  uint16_t scratch[1318];
-  poly_mul_novec_aux(prod, scratch, x->v, y->v, N);
+static void poly_mul_novec(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
+                           const struct poly *x, const struct poly *y) {
+  uint16_t *const prod = scratch->u.novec.prod;
+  uint16_t *const aux_scratch = scratch->u.novec.scratch;
+  poly_mul_novec_aux(prod, aux_scratch, x->v, y->v, N);
 
   for (size_t i = 0; i < N; i++) {
     out->v[i] = prod[i] + prod[i + N];
@@ -1285,25 +1314,25 @@
   OPENSSL_memset(&out->v[N], 0, 3 * sizeof(uint16_t));
 }
 
-static void poly_mul(struct poly *r, const struct poly *a,
-                     const struct poly *b) {
+static void poly_mul(struct POLY_MUL_SCRATCH *scratch, struct poly *r,
+                     const struct poly *a, const struct poly *b) {
 #if defined(POLY_RQ_MUL_ASM)
   const int has_avx2 = (OPENSSL_ia32cap_P[2] & (1 << 5)) != 0;
   if (has_avx2) {
-    poly_Rq_mul(r->v, a->v, b->v);
+    poly_Rq_mul(r->v, a->v, b->v, scratch->u.rq);
     return;
   }
 #endif
 
 #if defined(HRSS_HAVE_VECTOR_UNIT)
   if (vec_capable()) {
-    poly_mul_vec(r, a, b);
+    poly_mul_vec(scratch, r, a, b);
     return;
   }
 #endif
 
   // Fallback, non-vector case.
-  poly_mul_novec(r, a, b);
+  poly_mul_novec(scratch, r, a, b);
 }
 
 // poly_mul_x_minus_1 sets |p| to |p|×(𝑥 - 1) mod (𝑥^n - 1).
@@ -1548,7 +1577,8 @@
 }
 
 // poly_invert sets |*out| to |in^-1| (i.e. such that |*out|×|in| = 1 mod Φ(N)).
-static void poly_invert(struct poly *out, const struct poly *in) {
+static void poly_invert(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
+                        const struct poly *in) {
   // Inversion mod Q, which is done based on the result of inverting mod
   // 2. See [NTRUTN14] paper, bottom of page two.
   struct poly a, *b, tmp;
@@ -1565,9 +1595,9 @@
   // We are working mod Q=2**13 and we need to iterate ceil(log_2(13))
   // times, which is four.
   for (unsigned i = 0; i < 4; i++) {
-    poly_mul(&tmp, &a, b);
+    poly_mul(scratch, &tmp, &a, b);
     tmp.v[0] += 2;
-    poly_mul(b, b, &tmp);
+    poly_mul(scratch, b, b, &tmp);
   }
 }
 
@@ -1886,146 +1916,216 @@
   return align_pointer(ext->opaque, 16);
 }
 
-void HRSS_generate_key(
+// malloc_align32 returns a pointer to |size| bytes of 32-byte-aligned heap and
+// sets |*out_ptr| to a value that can be passed to |OPENSSL_free| to release
+// it. It returns NULL if out of memory.
+static void *malloc_align32(void **out_ptr, size_t size) {
+  void *ptr = OPENSSL_malloc(size + 31);
+  if (!ptr) {
+    *out_ptr = NULL;
+    return NULL;
+  }
+
+  *out_ptr = ptr;
+  return align_pointer(ptr, 32);
+}
+
+int HRSS_generate_key(
     struct HRSS_public_key *out_pub, struct HRSS_private_key *out_priv,
     const uint8_t in[HRSS_SAMPLE_BYTES + HRSS_SAMPLE_BYTES + 32]) {
   struct public_key *pub = public_key_from_external(out_pub);
   struct private_key *priv = private_key_from_external(out_priv);
 
+  struct vars {
+    struct POLY_MUL_SCRATCH scratch;
+    struct poly f;
+    struct poly pg_phi1;
+    struct poly pfg_phi1;
+    struct poly pfg_phi1_inverse;
+  };
+
+  void *malloc_ptr;
+  struct vars *const vars = malloc_align32(&malloc_ptr, sizeof(struct vars));
+  if (!vars) {
+    // If the caller ignores the return value the output will still be safe.
+    // The private key output is randomised in case it's later passed to
+    // |HRSS_encap|.
+    memset(out_pub, 0, sizeof(struct HRSS_public_key));
+    RAND_bytes((uint8_t*) out_priv, sizeof(struct HRSS_private_key));
+    return 0;
+  }
+
   OPENSSL_memcpy(priv->hmac_key, in + 2 * HRSS_SAMPLE_BYTES,
                  sizeof(priv->hmac_key));
 
-  struct poly f;
-  poly_short_sample_plus(&f, in);
-  poly3_from_poly(&priv->f, &f);
+  poly_short_sample_plus(&vars->f, in);
+  poly3_from_poly(&priv->f, &vars->f);
   HRSS_poly3_invert(&priv->f_inverse, &priv->f);
 
   // pg_phi1 is p (i.e. 3) × g × Φ(1) (i.e. 𝑥-1).
-  struct poly pg_phi1;
-  poly_short_sample_plus(&pg_phi1, in + HRSS_SAMPLE_BYTES);
+  poly_short_sample_plus(&vars->pg_phi1, in + HRSS_SAMPLE_BYTES);
   for (unsigned i = 0; i < N; i++) {
-    pg_phi1.v[i] *= 3;
+    vars->pg_phi1.v[i] *= 3;
   }
-  poly_mul_x_minus_1(&pg_phi1);
+  poly_mul_x_minus_1(&vars->pg_phi1);
 
-  struct poly pfg_phi1;
-  poly_mul(&pfg_phi1, &f, &pg_phi1);
+  poly_mul(&vars->scratch, &vars->pfg_phi1, &vars->f, &vars->pg_phi1);
 
-  struct poly pfg_phi1_inverse;
-  poly_invert(&pfg_phi1_inverse, &pfg_phi1);
+  poly_invert(&vars->scratch, &vars->pfg_phi1_inverse, &vars->pfg_phi1);
 
-  poly_mul(&pub->ph, &pfg_phi1_inverse, &pg_phi1);
-  poly_mul(&pub->ph, &pub->ph, &pg_phi1);
+  poly_mul(&vars->scratch, &pub->ph, &vars->pfg_phi1_inverse, &vars->pg_phi1);
+  poly_mul(&vars->scratch, &pub->ph, &pub->ph, &vars->pg_phi1);
   poly_clamp(&pub->ph);
 
-  poly_mul(&priv->ph_inverse, &pfg_phi1_inverse, &f);
-  poly_mul(&priv->ph_inverse, &priv->ph_inverse, &f);
+  poly_mul(&vars->scratch, &priv->ph_inverse, &vars->pfg_phi1_inverse,
+           &vars->f);
+  poly_mul(&vars->scratch, &priv->ph_inverse, &priv->ph_inverse, &vars->f);
   poly_clamp(&priv->ph_inverse);
+
+  OPENSSL_free(malloc_ptr);
+  return 1;
 }
 
 static const char kSharedKey[] = "shared key";
 
-void HRSS_encap(uint8_t out_ciphertext[POLY_BYTES],
-                uint8_t out_shared_key[32],
-                const struct HRSS_public_key *in_pub,
-                const uint8_t in[HRSS_SAMPLE_BYTES + HRSS_SAMPLE_BYTES]) {
+int HRSS_encap(uint8_t out_ciphertext[POLY_BYTES], uint8_t out_shared_key[32],
+               const struct HRSS_public_key *in_pub,
+               const uint8_t in[HRSS_SAMPLE_BYTES + HRSS_SAMPLE_BYTES]) {
   const struct public_key *pub =
       public_key_from_external((struct HRSS_public_key *)in_pub);
-  struct poly m, r, m_lifted;
-  poly_short_sample(&m, in);
-  poly_short_sample(&r, in + HRSS_SAMPLE_BYTES);
-  poly_lift(&m_lifted, &m);
 
-  struct poly prh_plus_m;
-  poly_mul(&prh_plus_m, &r, &pub->ph);
-  for (unsigned i = 0; i < N; i++) {
-    prh_plus_m.v[i] += m_lifted.v[i];
+  struct vars {
+    struct POLY_MUL_SCRATCH scratch;
+    struct poly m, r, m_lifted;
+    struct poly prh_plus_m;
+    SHA256_CTX hash_ctx;
+    uint8_t m_bytes[HRSS_POLY3_BYTES];
+    uint8_t r_bytes[HRSS_POLY3_BYTES];
+  };
+
+  void *malloc_ptr;
+  struct vars *const vars = malloc_align32(&malloc_ptr, sizeof(struct vars));
+  if (!vars) {
+    // If the caller ignores the return value the output will still be safe.
+    // The private key output is randomised in case it's used to encrypt and
+    // transmit something.
+    memset(out_ciphertext, 0, POLY_BYTES);
+    RAND_bytes(out_shared_key, 32);
+    return 0;
   }
 
-  poly_marshal(out_ciphertext, &prh_plus_m);
+  poly_short_sample(&vars->m, in);
+  poly_short_sample(&vars->r, in + HRSS_SAMPLE_BYTES);
+  poly_lift(&vars->m_lifted, &vars->m);
 
-  uint8_t m_bytes[HRSS_POLY3_BYTES], r_bytes[HRSS_POLY3_BYTES];
-  poly_marshal_mod3(m_bytes, &m);
-  poly_marshal_mod3(r_bytes, &r);
+  poly_mul(&vars->scratch, &vars->prh_plus_m, &vars->r, &pub->ph);
+  for (unsigned i = 0; i < N; i++) {
+    vars->prh_plus_m.v[i] += vars->m_lifted.v[i];
+  }
 
-  SHA256_CTX hash_ctx;
-  SHA256_Init(&hash_ctx);
-  SHA256_Update(&hash_ctx, kSharedKey, sizeof(kSharedKey));
-  SHA256_Update(&hash_ctx, m_bytes, sizeof(m_bytes));
-  SHA256_Update(&hash_ctx, r_bytes, sizeof(r_bytes));
-  SHA256_Update(&hash_ctx, out_ciphertext, POLY_BYTES);
-  SHA256_Final(out_shared_key, &hash_ctx);
+  poly_marshal(out_ciphertext, &vars->prh_plus_m);
+
+  poly_marshal_mod3(vars->m_bytes, &vars->m);
+  poly_marshal_mod3(vars->r_bytes, &vars->r);
+
+  SHA256_Init(&vars->hash_ctx);
+  SHA256_Update(&vars->hash_ctx, kSharedKey, sizeof(kSharedKey));
+  SHA256_Update(&vars->hash_ctx, vars->m_bytes, sizeof(vars->m_bytes));
+  SHA256_Update(&vars->hash_ctx, vars->r_bytes, sizeof(vars->r_bytes));
+  SHA256_Update(&vars->hash_ctx, out_ciphertext, POLY_BYTES);
+  SHA256_Final(out_shared_key, &vars->hash_ctx);
+
+  OPENSSL_free(malloc_ptr);
+  return 1;
 }
 
-void HRSS_decap(uint8_t out_shared_key[HRSS_KEY_BYTES],
+int HRSS_decap(uint8_t out_shared_key[HRSS_KEY_BYTES],
                 const struct HRSS_private_key *in_priv,
                 const uint8_t *ciphertext, size_t ciphertext_len) {
   const struct private_key *priv =
       private_key_from_external((struct HRSS_private_key *)in_priv);
 
+  struct vars {
+    struct POLY_MUL_SCRATCH scratch;
+    uint8_t masked_key[SHA256_CBLOCK];
+    SHA256_CTX hash_ctx;
+    struct poly c;
+    struct poly f, cf;
+    struct poly3 cf3, m3;
+    struct poly m, m_lifted;
+    struct poly r;
+    struct poly3 r3;
+    uint8_t expected_ciphertext[HRSS_CIPHERTEXT_BYTES];
+    uint8_t m_bytes[HRSS_POLY3_BYTES];
+    uint8_t r_bytes[HRSS_POLY3_BYTES];
+    uint8_t shared_key[32];
+  };
+
+  void *malloc_ptr;
+  struct vars *const vars = malloc_align32(&malloc_ptr, sizeof(struct vars));
+  if (!vars) {
+    // If the caller ignores the return value the output will still be safe.
+    // The private key output is randomised in case it's used to encrypt and
+    // transmit something.
+    RAND_bytes(out_shared_key, HRSS_KEY_BYTES);
+    return 0;
+  }
+
   // This is HMAC, expanded inline rather than using the |HMAC| function so that
   // we can avoid dealing with possible allocation failures and so keep this
   // function infallible.
-  uint8_t masked_key[SHA256_CBLOCK];
-  OPENSSL_STATIC_ASSERT(sizeof(priv->hmac_key) <= sizeof(masked_key),
+  OPENSSL_STATIC_ASSERT(sizeof(priv->hmac_key) <= sizeof(vars->masked_key),
                         "HRSS HMAC key larger than SHA-256 block size");
   for (size_t i = 0; i < sizeof(priv->hmac_key); i++) {
-    masked_key[i] = priv->hmac_key[i] ^ 0x36;
+    vars->masked_key[i] = priv->hmac_key[i] ^ 0x36;
   }
-  OPENSSL_memset(masked_key + sizeof(priv->hmac_key), 0x36,
-                 sizeof(masked_key) - sizeof(priv->hmac_key));
+  OPENSSL_memset(vars->masked_key + sizeof(priv->hmac_key), 0x36,
+                 sizeof(vars->masked_key) - sizeof(priv->hmac_key));
 
-  SHA256_CTX hash_ctx;
-  SHA256_Init(&hash_ctx);
-  SHA256_Update(&hash_ctx, masked_key, sizeof(masked_key));
-  SHA256_Update(&hash_ctx, ciphertext, ciphertext_len);
+  SHA256_Init(&vars->hash_ctx);
+  SHA256_Update(&vars->hash_ctx, vars->masked_key, sizeof(vars->masked_key));
+  SHA256_Update(&vars->hash_ctx, ciphertext, ciphertext_len);
   uint8_t inner_digest[SHA256_DIGEST_LENGTH];
-  SHA256_Final(inner_digest, &hash_ctx);
+  SHA256_Final(inner_digest, &vars->hash_ctx);
 
   for (size_t i = 0; i < sizeof(priv->hmac_key); i++) {
-    masked_key[i] ^= (0x5c ^ 0x36);
+    vars->masked_key[i] ^= (0x5c ^ 0x36);
   }
-  OPENSSL_memset(masked_key + sizeof(priv->hmac_key), 0x5c,
-                 sizeof(masked_key) - sizeof(priv->hmac_key));
+  OPENSSL_memset(vars->masked_key + sizeof(priv->hmac_key), 0x5c,
+                 sizeof(vars->masked_key) - sizeof(priv->hmac_key));
 
-  SHA256_Init(&hash_ctx);
-  SHA256_Update(&hash_ctx, masked_key, sizeof(masked_key));
-  SHA256_Update(&hash_ctx, inner_digest, sizeof(inner_digest));
+  SHA256_Init(&vars->hash_ctx);
+  SHA256_Update(&vars->hash_ctx, vars->masked_key, sizeof(vars->masked_key));
+  SHA256_Update(&vars->hash_ctx, inner_digest, sizeof(inner_digest));
   OPENSSL_STATIC_ASSERT(HRSS_KEY_BYTES == SHA256_DIGEST_LENGTH,
                         "HRSS shared key length incorrect");
-  SHA256_Final(out_shared_key, &hash_ctx);
+  SHA256_Final(out_shared_key, &vars->hash_ctx);
 
-  struct poly c;
   // If the ciphertext is publicly invalid then a random shared key is still
   // returned to simply the logic of the caller, but this path is not constant
   // time.
   if (ciphertext_len != HRSS_CIPHERTEXT_BYTES ||
-      !poly_unmarshal(&c, ciphertext)) {
-    return;
+      !poly_unmarshal(&vars->c, ciphertext)) {
+    goto out;
   }
 
-  struct poly f, cf;
-  struct poly3 cf3, m3;
-  poly_from_poly3(&f, &priv->f);
-  poly_mul(&cf, &c, &f);
-  poly3_from_poly(&cf3, &cf);
+  poly_from_poly3(&vars->f, &priv->f);
+  poly_mul(&vars->scratch, &vars->cf, &vars->c, &vars->f);
+  poly3_from_poly(&vars->cf3, &vars->cf);
   // Note that cf3 is not reduced mod Φ(N). That reduction is deferred.
-  HRSS_poly3_mul(&m3, &cf3, &priv->f_inverse);
+  HRSS_poly3_mul(&vars->m3, &vars->cf3, &priv->f_inverse);
 
-  struct poly m, m_lifted;
-  poly_from_poly3(&m, &m3);
-  poly_lift(&m_lifted, &m);
+  poly_from_poly3(&vars->m, &vars->m3);
+  poly_lift(&vars->m_lifted, &vars->m);
 
-  struct poly r;
   for (unsigned i = 0; i < N; i++) {
-    r.v[i] = c.v[i] - m_lifted.v[i];
+    vars->r.v[i] = vars->c.v[i] - vars->m_lifted.v[i];
   }
-  poly_mul(&r, &r, &priv->ph_inverse);
-  poly_mod_phiN(&r);
-  poly_clamp(&r);
+  poly_mul(&vars->scratch, &vars->r, &vars->r, &priv->ph_inverse);
+  poly_mod_phiN(&vars->r);
+  poly_clamp(&vars->r);
 
-  struct poly3 r3;
-  crypto_word_t ok = poly3_from_poly_checked(&r3, &r);
+  crypto_word_t ok = poly3_from_poly_checked(&vars->r3, &vars->r);
 
   // [NTRUCOMP] section 5.1 includes ReEnc2 and a proof that it's valid. Rather
   // than do an expensive |poly_mul|, it rebuilds |c'| from |c - lift(m)|
@@ -2050,32 +2150,34 @@
   // The |poly_marshal| here then is just confirming that |poly_unmarshal| is
   // strict and could be omitted.
 
-  uint8_t expected_ciphertext[HRSS_CIPHERTEXT_BYTES];
   OPENSSL_STATIC_ASSERT(HRSS_CIPHERTEXT_BYTES == POLY_BYTES,
                         "ciphertext is the wrong size");
-  assert(ciphertext_len == sizeof(expected_ciphertext));
-  poly_marshal(expected_ciphertext, &c);
+  assert(ciphertext_len == sizeof(vars->expected_ciphertext));
+  poly_marshal(vars->expected_ciphertext, &vars->c);
 
-  uint8_t m_bytes[HRSS_POLY3_BYTES];
-  uint8_t r_bytes[HRSS_POLY3_BYTES];
-  poly_marshal_mod3(m_bytes, &m);
-  poly_marshal_mod3(r_bytes, &r);
+  poly_marshal_mod3(vars->m_bytes, &vars->m);
+  poly_marshal_mod3(vars->r_bytes, &vars->r);
 
-  ok &= constant_time_is_zero_w(CRYPTO_memcmp(ciphertext, expected_ciphertext,
-                                              sizeof(expected_ciphertext)));
+  ok &= constant_time_is_zero_w(
+      CRYPTO_memcmp(ciphertext, vars->expected_ciphertext,
+                    sizeof(vars->expected_ciphertext)));
 
-  uint8_t shared_key[32];
-  SHA256_Init(&hash_ctx);
-  SHA256_Update(&hash_ctx, kSharedKey, sizeof(kSharedKey));
-  SHA256_Update(&hash_ctx, m_bytes, sizeof(m_bytes));
-  SHA256_Update(&hash_ctx, r_bytes, sizeof(r_bytes));
-  SHA256_Update(&hash_ctx, expected_ciphertext, sizeof(expected_ciphertext));
-  SHA256_Final(shared_key, &hash_ctx);
+  SHA256_Init(&vars->hash_ctx);
+  SHA256_Update(&vars->hash_ctx, kSharedKey, sizeof(kSharedKey));
+  SHA256_Update(&vars->hash_ctx, vars->m_bytes, sizeof(vars->m_bytes));
+  SHA256_Update(&vars->hash_ctx, vars->r_bytes, sizeof(vars->r_bytes));
+  SHA256_Update(&vars->hash_ctx, vars->expected_ciphertext,
+                sizeof(vars->expected_ciphertext));
+  SHA256_Final(vars->shared_key, &vars->hash_ctx);
 
-  for (unsigned i = 0; i < sizeof(shared_key); i++) {
+  for (unsigned i = 0; i < sizeof(vars->shared_key); i++) {
     out_shared_key[i] =
-        constant_time_select_8(ok, shared_key[i], out_shared_key[i]);
+        constant_time_select_8(ok, vars->shared_key[i], out_shared_key[i]);
   }
+
+out:
+  OPENSSL_free(malloc_ptr);
+  return 1;
 }
 
 void HRSS_marshal_public_key(uint8_t out[HRSS_PUBLIC_KEY_BYTES],
diff --git a/crypto/hrss/hrss_test.cc b/crypto/hrss/hrss_test.cc
index 66b9047..7adbe9e 100644
--- a/crypto/hrss/hrss_test.cc
+++ b/crypto/hrss/hrss_test.cc
@@ -143,7 +143,7 @@
 
   HRSS_public_key pub;
   HRSS_private_key priv;
-  HRSS_generate_key(&pub, &priv, generate_key_entropy);
+  ASSERT_TRUE(HRSS_generate_key(&pub, &priv, generate_key_entropy));
 
   uint8_t encap_entropy[HRSS_ENCAP_BYTES];
   for (unsigned i = 0; i < sizeof(encap_entropy); i++) {
@@ -157,10 +157,10 @@
 
   uint8_t ciphertext[HRSS_CIPHERTEXT_BYTES];
   uint8_t shared_key[HRSS_KEY_BYTES];
-  HRSS_encap(ciphertext, shared_key, &pub2, encap_entropy);
+  ASSERT_TRUE(HRSS_encap(ciphertext, shared_key, &pub2, encap_entropy));
 
   uint8_t shared_key2[HRSS_KEY_BYTES];
-  HRSS_decap(shared_key2, &priv, ciphertext, sizeof(ciphertext));
+  ASSERT_TRUE(HRSS_decap(shared_key2, &priv, ciphertext, sizeof(ciphertext)));
 
   EXPECT_EQ(Bytes(shared_key), Bytes(shared_key2));
 }
@@ -173,7 +173,7 @@
 
     HRSS_public_key pub;
     HRSS_private_key priv;
-    HRSS_generate_key(&pub, &priv, generate_key_entropy);
+    ASSERT_TRUE(HRSS_generate_key(&pub, &priv, generate_key_entropy));
 
     for (unsigned j = 0; j < 10; j++) {
       uint8_t encap_entropy[HRSS_ENCAP_BYTES];
@@ -182,10 +182,11 @@
 
       uint8_t ciphertext[HRSS_CIPHERTEXT_BYTES];
       uint8_t shared_key[HRSS_KEY_BYTES];
-      HRSS_encap(ciphertext, shared_key, &pub, encap_entropy);
+      ASSERT_TRUE(HRSS_encap(ciphertext, shared_key, &pub, encap_entropy));
 
       uint8_t shared_key2[HRSS_KEY_BYTES];
-      HRSS_decap(shared_key2, &priv, ciphertext, sizeof(ciphertext));
+      ASSERT_TRUE(
+          HRSS_decap(shared_key2, &priv, ciphertext, sizeof(ciphertext)));
       EXPECT_EQ(Bytes(shared_key), Bytes(shared_key2));
 
       uint32_t offset;
@@ -193,7 +194,8 @@
       uint8_t bit;
       RAND_bytes(&bit, sizeof(bit));
       ciphertext[offset % sizeof(ciphertext)] ^= (1 << (bit & 7));
-      HRSS_decap(shared_key2, &priv, ciphertext, sizeof(ciphertext));
+      ASSERT_TRUE(
+          HRSS_decap(shared_key2, &priv, ciphertext, sizeof(ciphertext)));
       EXPECT_NE(Bytes(shared_key), Bytes(shared_key2));
     }
   }
@@ -216,7 +218,7 @@
   HRSS_private_key priv;
   OPENSSL_memset(&pub, 0, sizeof(pub));
   OPENSSL_memset(&priv, 0, sizeof(priv));
-  HRSS_generate_key(&pub, &priv, generate_key_entropy);
+  ASSERT_TRUE(HRSS_generate_key(&pub, &priv, generate_key_entropy));
 
   static const uint8_t kExpectedPub[HRSS_PUBLIC_KEY_BYTES] = {
       0x4a, 0x21, 0x39, 0x7c, 0xb4, 0xa6, 0x58, 0x15, 0x35, 0x77, 0xe4, 0x2a,
@@ -325,7 +327,7 @@
   }
   uint8_t ciphertext[HRSS_CIPHERTEXT_BYTES];
   uint8_t shared_key[HRSS_KEY_BYTES];
-  HRSS_encap(ciphertext, shared_key, &pub, encap_entropy);
+  ASSERT_TRUE(HRSS_encap(ciphertext, shared_key, &pub, encap_entropy));
 
   static const uint8_t kExpectedCiphertext[HRSS_CIPHERTEXT_BYTES] = {
       0xe0, 0xc0, 0x77, 0xeb, 0x7a, 0x48, 0x7d, 0x74, 0x4e, 0x4f, 0x6d, 0xb9,
@@ -433,13 +435,13 @@
   };
   EXPECT_EQ(Bytes(shared_key), Bytes(kExpectedSharedKey));
 
-  HRSS_decap(shared_key, &priv, ciphertext, sizeof(ciphertext));
+  ASSERT_TRUE(HRSS_decap(shared_key, &priv, ciphertext, sizeof(ciphertext)));
   EXPECT_EQ(Bytes(shared_key, sizeof(shared_key)),
             Bytes(kExpectedSharedKey, sizeof(kExpectedSharedKey)));
 
   // Corrupt the ciphertext and ensure that the failure key is constant.
   ciphertext[50] ^= 4;
-  HRSS_decap(shared_key, &priv, ciphertext, sizeof(ciphertext));
+  ASSERT_TRUE(HRSS_decap(shared_key, &priv, ciphertext, sizeof(ciphertext)));
 
   static const uint8_t kExpectedFailureKey[HRSS_KEY_BYTES] = {
       0x13, 0xf7, 0xed, 0x51, 0x00, 0xbc, 0xca, 0x29, 0xdf, 0xb0, 0xd0,
@@ -460,6 +462,23 @@
   alignas(16) uint16_t r[N + 3];
   alignas(16) uint16_t a[N + 3] = {0};
   alignas(16) uint16_t b[N + 3] = {0};
-  CHECK_ABI(poly_Rq_mul, r, a, b);
+
+  uint8_t kCanary[256];
+  OPENSSL_STATIC_ASSERT(sizeof(kCanary) % 32 == 0, "needed for alignment");
+  memset(kCanary, 42, sizeof(kCanary));
+  alignas(32) uint8_t
+      scratch[sizeof(kCanary) + POLY_MUL_RQ_SCRATCH_SPACE + sizeof(kCanary)];
+  OPENSSL_memcpy(scratch, kCanary, sizeof(kCanary));
+  OPENSSL_memcpy(scratch + sizeof(kCanary) + POLY_MUL_RQ_SCRATCH_SPACE, kCanary,
+                 sizeof(kCanary));
+
+  // The function should not touch more than |POLY_MUL_RQ_SCRATCH_SPACE| bytes
+  // of |scratch|.
+  CHECK_ABI(poly_Rq_mul, r, a, b, &scratch[sizeof(kCanary)]);
+
+  EXPECT_EQ(Bytes(scratch, sizeof(kCanary)), Bytes(kCanary));
+  EXPECT_EQ(Bytes(scratch + sizeof(kCanary) + POLY_MUL_RQ_SCRATCH_SPACE,
+                  sizeof(kCanary)),
+            Bytes(kCanary));
 }
 #endif  // POLY_RQ_MUL_ASM && SUPPORTS_ABI_TEST
diff --git a/crypto/hrss/internal.h b/crypto/hrss/internal.h
index c0d9bd2..340b2e0 100644
--- a/crypto/hrss/internal.h
+++ b/crypto/hrss/internal.h
@@ -47,10 +47,17 @@
 #if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_SMALL) && \
     defined(OPENSSL_X86_64) && defined(OPENSSL_LINUX)
 #define POLY_RQ_MUL_ASM
+// POLY_MUL_RQ_SCRATCH_SPACE is the number of bytes of scratch space needed
+// by the assembly function poly_Rq_mul.
+#define POLY_MUL_RQ_SCRATCH_SPACE (6144 + 6144 + 12288 + 512 + 9408 + 32)
+
 // poly_Rq_mul is defined in assembly. Inputs and outputs must be 16-byte-
 // aligned.
-extern void poly_Rq_mul(uint16_t r[N + 3], const uint16_t a[N + 3],
-                        const uint16_t b[N + 3]);
+extern void poly_Rq_mul(
+    uint16_t r[N + 3], const uint16_t a[N + 3], const uint16_t b[N + 3],
+    // The following should be `scratch[POLY_MUL_RQ_SCRATCH_SPACE]` but
+    // GCC 11.1 has a bug with unions that breaks that.
+    uint8_t scratch[]);
 #endif
 
 
diff --git a/include/openssl/hrss.h b/include/openssl/hrss.h
index 5390696..016fe67 100644
--- a/include/openssl/hrss.h
+++ b/include/openssl/hrss.h
@@ -59,29 +59,31 @@
   (HRSS_POLY3_BYTES * 2 + HRSS_PUBLIC_KEY_BYTES + 2 + 32)
 
 // HRSS_generate_key is a deterministic function that outputs a public and
-// private key based on the given entropy.
-OPENSSL_EXPORT void HRSS_generate_key(
+// private key based on the given entropy. It returns one on success or zero
+// on malloc failure.
+OPENSSL_EXPORT int HRSS_generate_key(
     struct HRSS_public_key *out_pub, struct HRSS_private_key *out_priv,
     const uint8_t input[HRSS_GENERATE_KEY_BYTES]);
 
 // HRSS_encap is a deterministic function the generates and encrypts a random
 // session key from the given entropy, writing those values to |out_shared_key|
-// and |out_ciphertext|, respectively.
-OPENSSL_EXPORT void HRSS_encap(uint8_t out_ciphertext[HRSS_CIPHERTEXT_BYTES],
-                               uint8_t out_shared_key[HRSS_KEY_BYTES],
-                               const struct HRSS_public_key *in_pub,
-                               const uint8_t in[HRSS_ENCAP_BYTES]);
+// and |out_ciphertext|, respectively. It returns one on success or zero on
+// malloc failure.
+OPENSSL_EXPORT int HRSS_encap(uint8_t out_ciphertext[HRSS_CIPHERTEXT_BYTES],
+                              uint8_t out_shared_key[HRSS_KEY_BYTES],
+                              const struct HRSS_public_key *in_pub,
+                              const uint8_t in[HRSS_ENCAP_BYTES]);
 
 // HRSS_decap decrypts a session key from |ciphertext_len| bytes of
 // |ciphertext|. If the ciphertext is valid, the decrypted key is written to
 // |out_shared_key|. Otherwise the HMAC of |ciphertext| under a secret key (kept
 // in |in_priv|) is written. If the ciphertext is the wrong length then it will
 // leak which was done via side-channels. Otherwise it should perform either
-// action in constant-time.
-OPENSSL_EXPORT void HRSS_decap(uint8_t out_shared_key[HRSS_KEY_BYTES],
-                               const struct HRSS_private_key *in_priv,
-                               const uint8_t *ciphertext,
-                               size_t ciphertext_len);
+// action in constant-time. It returns one on success (whether the ciphertext
+// was valid or not) and zero on malloc failure.
+OPENSSL_EXPORT int HRSS_decap(uint8_t out_shared_key[HRSS_KEY_BYTES],
+                              const struct HRSS_private_key *in_priv,
+                              const uint8_t *ciphertext, size_t ciphertext_len);
 
 // HRSS_marshal_public_key serialises |in_pub| to |out|.
 OPENSSL_EXPORT void HRSS_marshal_public_key(
diff --git a/ssl/ssl_key_share.cc b/ssl/ssl_key_share.cc
index d9a09c7..c847a0a 100644
--- a/ssl/ssl_key_share.cc
+++ b/ssl/ssl_key_share.cc
@@ -206,7 +206,10 @@
     uint8_t hrss_entropy[HRSS_GENERATE_KEY_BYTES];
     HRSS_public_key hrss_public_key;
     RAND_bytes(hrss_entropy, sizeof(hrss_entropy));
-    HRSS_generate_key(&hrss_public_key, &hrss_private_key_, hrss_entropy);
+    if (!HRSS_generate_key(&hrss_public_key, &hrss_private_key_,
+                           hrss_entropy)) {
+      return false;
+    }
 
     uint8_t hrss_public_key_bytes[HRSS_PUBLIC_KEY_BYTES];
     HRSS_marshal_public_key(hrss_public_key_bytes, &hrss_public_key);
@@ -243,9 +246,10 @@
     uint8_t ciphertext[HRSS_CIPHERTEXT_BYTES];
     uint8_t entropy[HRSS_ENCAP_BYTES];
     RAND_bytes(entropy, sizeof(entropy));
-    HRSS_encap(ciphertext, secret.data() + 32, &peer_public_key, entropy);
 
-    if (!CBB_add_bytes(out_public_key, x25519_public_key,
+    if (!HRSS_encap(ciphertext, secret.data() + 32, &peer_public_key,
+                    entropy) ||
+        !CBB_add_bytes(out_public_key, x25519_public_key,
                        sizeof(x25519_public_key)) ||
         !CBB_add_bytes(out_public_key, ciphertext, sizeof(ciphertext))) {
       return false;
@@ -272,8 +276,10 @@
       return false;
     }
 
-    HRSS_decap(secret.data() + 32, &hrss_private_key_, peer_key.data() + 32,
-               peer_key.size() - 32);
+    if (!HRSS_decap(secret.data() + 32, &hrss_private_key_,
+                    peer_key.data() + 32, peer_key.size() - 32)) {
+      return false;
+    }
 
     *out_secret = std::move(secret);
     return true;
diff --git a/tool/speed.cc b/tool/speed.cc
index 264334f..2d01f4b 100644
--- a/tool/speed.cc
+++ b/tool/speed.cc
@@ -896,13 +896,12 @@
   TimeResults results;
 
   if (!TimeFunction(&results, []() -> bool {
-    struct HRSS_public_key pub;
-    struct HRSS_private_key priv;
-    uint8_t entropy[HRSS_GENERATE_KEY_BYTES];
-    RAND_bytes(entropy, sizeof(entropy));
-    HRSS_generate_key(&pub, &priv, entropy);
-    return true;
-  })) {
+        struct HRSS_public_key pub;
+        struct HRSS_private_key priv;
+        uint8_t entropy[HRSS_GENERATE_KEY_BYTES];
+        RAND_bytes(entropy, sizeof(entropy));
+        return HRSS_generate_key(&pub, &priv, entropy);
+      })) {
     fprintf(stderr, "Failed to time HRSS_generate_key.\n");
     return false;
   }
@@ -913,16 +912,17 @@
   struct HRSS_private_key priv;
   uint8_t key_entropy[HRSS_GENERATE_KEY_BYTES];
   RAND_bytes(key_entropy, sizeof(key_entropy));
-  HRSS_generate_key(&pub, &priv, key_entropy);
+  if (!HRSS_generate_key(&pub, &priv, key_entropy)) {
+    return false;
+  }
 
   uint8_t ciphertext[HRSS_CIPHERTEXT_BYTES];
   if (!TimeFunction(&results, [&pub, &ciphertext]() -> bool {
-    uint8_t entropy[HRSS_ENCAP_BYTES];
-    uint8_t shared_key[HRSS_KEY_BYTES];
-    RAND_bytes(entropy, sizeof(entropy));
-    HRSS_encap(ciphertext, shared_key, &pub, entropy);
-    return true;
-  })) {
+        uint8_t entropy[HRSS_ENCAP_BYTES];
+        uint8_t shared_key[HRSS_KEY_BYTES];
+        RAND_bytes(entropy, sizeof(entropy));
+        return HRSS_encap(ciphertext, shared_key, &pub, entropy);
+      })) {
     fprintf(stderr, "Failed to time HRSS_encap.\n");
     return false;
   }
@@ -930,10 +930,9 @@
   results.Print("HRSS encap");
 
   if (!TimeFunction(&results, [&priv, &ciphertext]() -> bool {
-    uint8_t shared_key[HRSS_KEY_BYTES];
-    HRSS_decap(shared_key, &priv, ciphertext, sizeof(ciphertext));
-    return true;
-  })) {
+        uint8_t shared_key[HRSS_KEY_BYTES];
+        return HRSS_decap(shared_key, &priv, ciphertext, sizeof(ciphertext));
+      })) {
     fprintf(stderr, "Failed to time HRSS_encap.\n");
     return false;
   }