jit_compiler_x86_static.asm 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. ;# Copyright (c) 2018 tevador
  2. ;#
  3. ;# This file is part of RandomX.
  4. ;#
  5. ;# RandomX is free software: you can redistribute it and/or modify
  6. ;# it under the terms of the GNU General Public License as published by
  7. ;# the Free Software Foundation, either version 3 of the License, or
  8. ;# (at your option) any later version.
  9. ;#
  10. ;# RandomX is distributed in the hope that it will be useful,
  11. ;# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ;# GNU General Public License for more details.
  14. ;#
  15. ;# You should have received a copy of the GNU General Public License
  16. ;# along with RandomX. If not, see<http://www.gnu.org/licenses/>.
  17. IFDEF RAX
  18. _RANDOMX_JITX86_STATIC SEGMENT PAGE READ EXECUTE
  19. PUBLIC randomx_program_prologue
  20. PUBLIC randomx_program_loop_begin
  21. PUBLIC randomx_program_loop_load
  22. PUBLIC randomx_program_start
  23. PUBLIC randomx_program_read_dataset
  24. PUBLIC randomx_program_read_dataset_light
  25. PUBLIC randomx_program_read_dataset_sshash_init
  26. PUBLIC randomx_program_read_dataset_sshash_fin
  27. PUBLIC randomx_dataset_init
  28. PUBLIC randomx_program_loop_store
  29. PUBLIC randomx_program_loop_end
  30. PUBLIC randomx_program_epilogue
  31. PUBLIC randomx_sshash_load
  32. PUBLIC randomx_sshash_prefetch
  33. PUBLIC randomx_sshash_end
  34. PUBLIC randomx_sshash_init
  35. PUBLIC randomx_program_end
  36. ALIGN 64
  37. randomx_program_prologue PROC
  38. include asm/program_prologue_win64.inc
  39. randomx_program_prologue ENDP
  40. ALIGN 64
  41. include asm/program_xmm_constants.inc
  42. ALIGN 64
  43. randomx_program_loop_begin PROC
  44. nop
  45. randomx_program_loop_begin ENDP
  46. randomx_program_loop_load PROC
  47. include asm/program_loop_load.inc
  48. randomx_program_loop_load ENDP
  49. randomx_program_start PROC
  50. nop
  51. randomx_program_start ENDP
  52. randomx_program_read_dataset PROC
  53. include asm/program_read_dataset.inc
  54. randomx_program_read_dataset ENDP
  55. randomx_program_read_dataset_light PROC
  56. include asm/program_read_dataset_light.inc
  57. randomx_program_read_dataset_light ENDP
  58. randomx_program_read_dataset_sshash_init PROC
  59. include asm/program_read_dataset_sshash_init.inc
  60. randomx_program_read_dataset_sshash_init ENDP
  61. randomx_program_read_dataset_sshash_fin PROC
  62. include asm/program_read_dataset_sshash_fin.inc
  63. randomx_program_read_dataset_sshash_fin ENDP
  64. randomx_program_loop_store PROC
  65. include asm/program_loop_store.inc
  66. randomx_program_loop_store ENDP
  67. randomx_program_loop_end PROC
  68. nop
  69. randomx_program_loop_end ENDP
  70. ALIGN 64
  71. randomx_dataset_init PROC
  72. push rbx
  73. push rbp
  74. push rdi
  75. push rsi
  76. push r12
  77. push r13
  78. push r14
  79. push r15
  80. mov rdi, qword ptr [rcx+8] ;# after virtual method table pointer
  81. mov rsi, rdx ;# dataset
  82. mov rbp, r8 ;# block index
  83. push r9 ;# max. block index
  84. init_block_loop:
  85. prefetchw byte ptr [rsi]
  86. mov rbx, rbp
  87. db 232 ;# 0xE8 = call
  88. dd 32768 - distance
  89. distance equ $ - offset randomx_dataset_init
  90. mov qword ptr [rsi+0], r8
  91. mov qword ptr [rsi+8], r9
  92. mov qword ptr [rsi+16], r10
  93. mov qword ptr [rsi+24], r11
  94. mov qword ptr [rsi+32], r12
  95. mov qword ptr [rsi+40], r13
  96. mov qword ptr [rsi+48], r14
  97. mov qword ptr [rsi+56], r15
  98. add rbp, 1
  99. add rsi, 64
  100. cmp rbp, qword ptr [rsp]
  101. jb init_block_loop
  102. pop r9
  103. pop r15
  104. pop r14
  105. pop r13
  106. pop r12
  107. pop rsi
  108. pop rdi
  109. pop rbp
  110. pop rbx
  111. ret
  112. randomx_dataset_init ENDP
  113. ALIGN 64
  114. randomx_program_epilogue PROC
  115. include asm/program_epilogue_win64.inc
  116. randomx_program_epilogue ENDP
  117. ALIGN 64
  118. randomx_sshash_load PROC
  119. include asm/program_sshash_load.inc
  120. randomx_sshash_load ENDP
  121. randomx_sshash_prefetch PROC
  122. include asm/program_sshash_prefetch.inc
  123. randomx_sshash_prefetch ENDP
  124. randomx_sshash_end PROC
  125. nop
  126. randomx_sshash_end ENDP
  127. ALIGN 64
  128. randomx_sshash_init PROC
  129. lea r8, [rbx+1]
  130. include asm/program_sshash_prefetch.inc
  131. imul r8, qword ptr [r0_mul]
  132. mov r9, qword ptr [r1_add]
  133. xor r9, r8
  134. mov r10, qword ptr [r2_add]
  135. xor r10, r8
  136. mov r11, qword ptr [r3_add]
  137. xor r11, r8
  138. mov r12, qword ptr [r4_add]
  139. xor r12, r8
  140. mov r13, qword ptr [r5_add]
  141. xor r13, r8
  142. mov r14, qword ptr [r6_add]
  143. xor r14, r8
  144. mov r15, qword ptr [r7_add]
  145. xor r15, r8
  146. jmp randomx_program_end
  147. randomx_sshash_init ENDP
  148. ALIGN 64
  149. include asm/program_sshash_constants.inc
  150. ALIGN 64
  151. randomx_program_end PROC
  152. nop
  153. randomx_program_end ENDP
  154. _RANDOMX_JITX86_STATIC ENDS
  155. ENDIF
  156. END