mirror of
https://github.com/veracrypt/VeraCrypt
synced 2024-11-28 14:03:29 +01:00
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:
parent
840756ead1
commit
c2f6190627
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user