Added support for "cn/msr" also known as "cn-fast".

This commit is contained in:
XMRig 2018-06-10 19:48:34 +07:00
parent 974cb4162a
commit 8908c2c027
10 changed files with 136 additions and 75 deletions

View file

@ -50,36 +50,23 @@ MultiWorker<N>::~MultiWorker()
template<size_t N>
bool MultiWorker<N>::selfTest()
{
if (m_thread->fn(xmrig::VARIANT_0) == nullptr) {
return false;
}
m_thread->fn(xmrig::VARIANT_0)(test_input, 76, m_hash, m_ctx);
if (m_thread->algorithm() == xmrig::CRYPTONIGHT && memcmp(m_hash, test_output_v0, sizeof m_hash) == 0) {
m_thread->fn(xmrig::VARIANT_1)(test_input, 76, m_hash, m_ctx);
if (memcmp(m_hash, test_output_v1, sizeof m_hash) != 0) {
return false;
}
m_thread->fn(xmrig::VARIANT_XTL)(test_input, 76, m_hash, m_ctx);
return memcmp(m_hash, test_output_xtl, sizeof m_hash) == 0;
if (m_thread->algorithm() == xmrig::CRYPTONIGHT) {
return verify(xmrig::VARIANT_0, test_output_v0) &&
verify(xmrig::VARIANT_1, test_output_v1) &&
verify(xmrig::VARIANT_XTL, test_output_xtl) &&
verify(xmrig::VARIANT_MSR, test_output_msr);
}
# ifndef XMRIG_NO_AEON
if (m_thread->algorithm() == xmrig::CRYPTONIGHT_LITE && memcmp(m_hash, test_output_v0_lite, sizeof m_hash) == 0) {
m_thread->fn(xmrig::VARIANT_1)(test_input, 76, m_hash, m_ctx);
if (memcmp(m_hash, test_output_v1_lite, sizeof m_hash) != 0) {
return false;
}
m_thread->fn(xmrig::VARIANT_IPBC)(test_input, 76, m_hash, m_ctx);
return memcmp(m_hash, test_output_ipbc_lite, sizeof m_hash) == 0;
if (m_thread->algorithm() == xmrig::CRYPTONIGHT_LITE) {
return verify(xmrig::VARIANT_0, test_output_v0_lite) &&
verify(xmrig::VARIANT_1, test_output_v1_lite) &&
verify(xmrig::VARIANT_IPBC, test_output_ipbc_lite);
}
# endif
# ifndef XMRIG_NO_SUMO
return m_thread->algorithm() == xmrig::CRYPTONIGHT_HEAVY && memcmp(m_hash, test_output_heavy, sizeof m_hash) == 0;
return m_thread->algorithm() == xmrig::CRYPTONIGHT_HEAVY && verify(xmrig::VARIANT_0, test_output_heavy);
# else
return false;
# endif
@ -140,6 +127,20 @@ bool MultiWorker<N>::resume(const Job &job)
}
template<size_t N>
bool MultiWorker<N>::verify(xmrig::Variant variant, const uint8_t *referenceValue)
{
xmrig::CpuThread::cn_hash_fun func = m_thread->fn(variant);
if (!func) {
return false;
}
func(test_input, 76, m_hash, m_ctx);
return memcmp(m_hash, referenceValue, sizeof m_hash) == 0;
}
template<size_t N>
void MultiWorker<N>::consumeJob()
{