program_prologue_win64.inc 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. ;# callee-saved registers - Microsoft x64 calling convention
  2. push rbx
  3. push rbp
  4. push rdi
  5. push rsi
  6. push r12
  7. push r13
  8. push r14
  9. push r15
  10. sub rsp, 80
  11. movdqu xmmword ptr [rsp+64], xmm6
  12. movdqu xmmword ptr [rsp+48], xmm7
  13. movdqu xmmword ptr [rsp+32], xmm8
  14. movdqu xmmword ptr [rsp+16], xmm9
  15. movdqu xmmword ptr [rsp+0], xmm10
  16. sub rsp, 80
  17. movdqu xmmword ptr [rsp+64], xmm11
  18. movdqu xmmword ptr [rsp+48], xmm12
  19. movdqu xmmword ptr [rsp+32], xmm13
  20. movdqu xmmword ptr [rsp+16], xmm14
  21. movdqu xmmword ptr [rsp+0], xmm15
  22. ;# function arguments
  23. push rcx ;# RegisterFile& registerFile
  24. mov rbp, qword ptr [rdx] ;# "mx", "ma"
  25. mov rdi, qword ptr [rdx+8] ;# uint8_t* dataset
  26. mov rsi, r8 ;# uint8_t* scratchpad
  27. mov rbx, r9 ;# loop counter
  28. mov rax, rbp
  29. ;# zero integer registers
  30. xor r8, r8
  31. xor r9, r9
  32. xor r10, r10
  33. xor r11, r11
  34. xor r12, r12
  35. xor r13, r13
  36. xor r14, r14
  37. xor r15, r15
  38. ;# load constant registers
  39. lea rcx, [rcx+120]
  40. movapd xmm8, xmmword ptr [rcx+72]
  41. movapd xmm9, xmmword ptr [rcx+88]
  42. movapd xmm10, xmmword ptr [rcx+104]
  43. movapd xmm11, xmmword ptr [rcx+120]
  44. movapd xmm13, xmmword ptr [mantissaMask]
  45. movapd xmm14, xmmword ptr [exp240]
  46. movapd xmm15, xmmword ptr [scaleMask]
  47. jmp randomx_program_loop_begin