Windows: use stack instead of MMX register to save registers in 64-bit assembly implementation of SHA-512 in order to avoid issues with the driver.

This commit is contained in:
Mounir IDRASSI 2017-07-04 01:58:40 +02:00
parent 840756ead1
commit c2f6190627
No known key found for this signature in database
GPG Key ID: DD0C382D5FCFB8FC

View File

@ -22,8 +22,9 @@
*/ */
# Adapted for VeraCrypt # Adapted for VeraCrypt
# Adapt to Windows calling convention when building on Windows. # Adapt to Windows build:
# avoid using xmm6 register since it must be preserved on Windows. We use MMX registers instead. # - specific calling convention
# - avoid using xmm6 register since it must be preserved. We use the stack to save RBX, RDI and RSI
/* void sha512_compress_nayuki(uint64_t state[8], const uint8_t block[128]) */ /* void sha512_compress_nayuki(uint64_t state[8], const uint8_t block[128]) */
@ -64,14 +65,18 @@ _sha512_compress_nayuki:
movq %r13, %xmm3 movq %r13, %xmm3
movq %r14, %xmm4 movq %r14, %xmm4
movq %r15, %xmm5 movq %r15, %xmm5
movq %rbx, %mm0
.ifdef WINABI .ifdef WINABI
movq %rdi, %mm1 subq $152, %rsp
movq %rsi, %mm2 movq %rbx, (0*8 + 128)(%rsp)
movq %rdi, (1*8 + 128)(%rsp)
movq %rsi, (2*8 + 128)(%rsp)
movq %rcx, %rdi movq %rcx, %rdi
movq %rdx, %rsi movq %rdx, %rsi
.endif .else
movq %rbx, %xmm6
subq $128, %rsp subq $128, %rsp
.endif
movq 0(%rdi), %r8 movq 0(%rdi), %r8
@ -182,16 +187,16 @@ _sha512_compress_nayuki:
movq %xmm3, %r13 movq %xmm3, %r13
movq %xmm4, %r14 movq %xmm4, %r14
movq %xmm5, %r15 movq %xmm5, %r15
movq %mm0, %rbx
.ifdef WINABI .ifdef WINABI
movq %mm1, %rdi movq (0*8 + 128)(%rsp), %rbx
movq %mm2, %rsi movq (1*8 + 128)(%rsp), %rdi
.endif movq (2*8 + 128)(%rsp), %rsi
addq $152, %rsp
emms .else
movq %xmm6, %rbx
addq $128, %rsp addq $128, %rsp
.endif
retq retq