mirror of
https://github.com/wownero/RandomX.git
synced 2026-10-17 23:41:39 +02:00
* Optimized dataset read There was a false dependency on readReg2 and readReg3 (caused by `xor rbp, rax` instruction) when reading dataset item (see design.md - 4.6.2 Loop execution, steps 5 and 7). This change uses `ma` register to read dataset item before the whole `rbp` (`ma` and `mx`) is changed, so superscalar and out-of-order CPU can start executing it earlier. Results: https://i.imgur.com/Bpeq9mx.png ~1% speedup on modern Intel/AMD CPUs. * ARMv8: optimized dataset read Break dependency from readReg2 and readReg3. * Fixed light mode hashing
16 lines
569 B
PHP
16 lines
569 B
PHP
mov ecx, ebp ;# ecx = ma
|
|
and ecx, RANDOMX_DATASET_BASE_MASK
|
|
xor r8, qword ptr [rdi+rcx]
|
|
ror rbp, 32 ;# swap "ma" and "mx"
|
|
xor rbp, rax ;# modify "mx"
|
|
mov edx, ebp ;# edx = mx
|
|
and edx, RANDOMX_DATASET_BASE_MASK
|
|
prefetchnta byte ptr [rdi+rdx]
|
|
xor r9, qword ptr [rdi+rcx+8]
|
|
xor r10, qword ptr [rdi+rcx+16]
|
|
xor r11, qword ptr [rdi+rcx+24]
|
|
xor r12, qword ptr [rdi+rcx+32]
|
|
xor r13, qword ptr [rdi+rcx+40]
|
|
xor r14, qword ptr [rdi+rcx+48]
|
|
xor r15, qword ptr [rdi+rcx+56]
|
|
|