|
|
@ -563,7 +563,7 @@ static inline void cryptonight_monero_tweak(uint64_t *mem_out, const uint8_t *l, |
|
|
|
constexpr CnAlgo<ALGO> props; |
|
|
|
|
|
|
|
if (props.base() == Algorithm::CN_2) { |
|
|
|
VARIANT2_SHUFFLE(l, idx, ax0, bx0, bx1, cx, (ALGO == Algorithm::CN_RWZ ? 1 : 0)); |
|
|
|
VARIANT2_SHUFFLE(l, idx, ax0, bx0, bx1, cx, (((ALGO == Algorithm::CN_RWZ) || (ALGO == Algorithm::CN_UPX2)) ? 1 : 0)); |
|
|
|
_mm_store_si128(reinterpret_cast<__m128i *>(mem_out), _mm_xor_si128(bx0, cx)); |
|
|
|
} else { |
|
|
|
__m128i tmp = _mm_xor_si128(bx0, cx); |
|
|
@ -715,7 +715,7 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si |
|
|
|
if (ALGO == Algorithm::CN_R) { |
|
|
|
VARIANT2_SHUFFLE(l0, idx0 & MASK, ax0, bx0, bx1, cx, 0); |
|
|
|
} else { |
|
|
|
VARIANT2_SHUFFLE2(l0, idx0 & MASK, ax0, bx0, bx1, hi, lo, (ALGO == Algorithm::CN_RWZ ? 1 : 0)); |
|
|
|
VARIANT2_SHUFFLE2(l0, idx0 & MASK, ax0, bx0, bx1, hi, lo, (((ALGO == Algorithm::CN_RWZ) || (ALGO == Algorithm::CN_UPX2)) ? 1 : 0)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -822,6 +822,8 @@ extern cn_mainloop_fun cn_double_mainloop_ryzen_asm; |
|
|
|
extern cn_mainloop_fun cn_double_mainloop_bulldozer_asm; |
|
|
|
extern cn_mainloop_fun cn_double_double_mainloop_sandybridge_asm; |
|
|
|
|
|
|
|
extern cn_mainloop_fun cn_upx2_mainloop_asm; |
|
|
|
extern cn_mainloop_fun cn_upx2_double_mainloop_asm; |
|
|
|
|
|
|
|
} // namespace xmrig
|
|
|
|
|
|
|
@ -934,6 +936,11 @@ inline void cryptonight_single_hash_asm(const uint8_t *__restrict__ input, size_ |
|
|
|
cn_double_mainloop_bulldozer_asm(ctx); |
|
|
|
} |
|
|
|
} |
|
|
|
# ifdef XMRIG_ALGO_CN_FEMTO |
|
|
|
else if (ALGO == Algorithm::CN_UPX2) { |
|
|
|
cn_upx2_mainloop_asm(ctx); |
|
|
|
} |
|
|
|
# endif |
|
|
|
else if (props.isR()) { |
|
|
|
ctx[0]->generated_code(ctx); |
|
|
|
} |
|
|
@ -976,6 +983,11 @@ inline void cryptonight_double_hash_asm(const uint8_t *__restrict__ input, size_ |
|
|
|
else if (ALGO == Algorithm::CN_PICO_TLO) { |
|
|
|
cn_tlo_double_mainloop_sandybridge_asm(ctx); |
|
|
|
} |
|
|
|
# endif |
|
|
|
# ifdef XMRIG_ALGO_CN_FEMTO |
|
|
|
else if (ALGO == Algorithm::CN_UPX2) { |
|
|
|
cn_upx2_double_mainloop_asm(ctx); |
|
|
|
} |
|
|
|
# endif |
|
|
|
else if (ALGO == Algorithm::CN_RWZ) { |
|
|
|
cnv2_rwz_double_mainloop_asm(ctx); |
|
|
@ -1134,7 +1146,7 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si |
|
|
|
if (ALGO == Algorithm::CN_R) { |
|
|
|
VARIANT2_SHUFFLE(l0, idx0 & MASK, ax0, bx00, bx01, cx0, 0); |
|
|
|
} else { |
|
|
|
VARIANT2_SHUFFLE2(l0, idx0 & MASK, ax0, bx00, bx01, hi, lo, (ALGO == Algorithm::CN_RWZ ? 1 : 0)); |
|
|
|
VARIANT2_SHUFFLE2(l0, idx0 & MASK, ax0, bx00, bx01, hi, lo, (((ALGO == Algorithm::CN_RWZ) || (ALGO == Algorithm::CN_UPX2)) ? 1 : 0)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -1192,7 +1204,7 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si |
|
|
|
if (ALGO == Algorithm::CN_R) { |
|
|
|
VARIANT2_SHUFFLE(l1, idx1 & MASK, ax1, bx10, bx11, cx1, 0); |
|
|
|
} else { |
|
|
|
VARIANT2_SHUFFLE2(l1, idx1 & MASK, ax1, bx10, bx11, hi, lo, (ALGO == Algorithm::CN_RWZ ? 1 : 0)); |
|
|
|
VARIANT2_SHUFFLE2(l1, idx1 & MASK, ax1, bx10, bx11, hi, lo, (((ALGO == Algorithm::CN_RWZ) || (ALGO == Algorithm::CN_UPX2)) ? 1 : 0)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -1302,7 +1314,7 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si |
|
|
|
if (ALGO == Algorithm::CN_R) { \ |
|
|
|
VARIANT2_SHUFFLE(l, idx & MASK, a, b0, b1, c, 0); \ |
|
|
|
} else { \ |
|
|
|
VARIANT2_SHUFFLE2(l, idx & MASK, a, b0, b1, hi, lo, (ALGO == Algorithm::CN_RWZ ? 1 : 0)); \ |
|
|
|
VARIANT2_SHUFFLE2(l, idx & MASK, a, b0, b1, hi, lo, (((ALGO == Algorithm::CN_RWZ) || (ALGO == Algorithm::CN_UPX2)) ? 1 : 0)); \ |
|
|
|
} \ |
|
|
|
} \ |
|
|
|
if (ALGO == Algorithm::CN_R) { \ |
|
|
|