Merge branch 'dev' of https://github.com/xmrig/xmrig into reversewaltz
This commit is contained in:
commit
55133d9f22
39 changed files with 2115 additions and 3810 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
# v2.13.1
|
||||||
|
[#946](https://github.com/xmrig/xmrig/pull/946) Optimized software AES implementations for CPUs without hardware AES support. `cn/r`, `cn/wow` up to 2.6 times faster, 4-9% improvements for other algorithms.
|
||||||
|
|
||||||
# v2.13.0
|
# v2.13.0
|
||||||
- **[#938](https://github.com/xmrig/xmrig/issues/938) Added support for new algorithm `cryptonight/r`, short alias `cn/r` (also known as CryptoNightR or CryptoNight variant 4), for upcoming [Monero](https://www.getmonero.org/) fork on March 9, thanks [@SChernykh](https://github.com/SChernykh).**
|
- **[#938](https://github.com/xmrig/xmrig/issues/938) Added support for new algorithm `cryptonight/r`, short alias `cn/r` (also known as CryptoNightR or CryptoNight variant 4), for upcoming [Monero](https://www.getmonero.org/) fork on March 9, thanks [@SChernykh](https://github.com/SChernykh).**
|
||||||
- [#939](https://github.com/xmrig/xmrig/issues/939) Added support for dynamic (runtime) pools reload.
|
- [#939](https://github.com/xmrig/xmrig/issues/939) Added support for dynamic (runtime) pools reload.
|
||||||
|
|
|
@ -12,6 +12,7 @@ option(WITH_TLS "Enable OpenSSL support" ON)
|
||||||
option(WITH_ASM "Enable ASM PoW implementations" ON)
|
option(WITH_ASM "Enable ASM PoW implementations" ON)
|
||||||
option(BUILD_STATIC "Build static binary" OFF)
|
option(BUILD_STATIC "Build static binary" OFF)
|
||||||
option(ARM_TARGET "Force use specific ARM target 8 or 7" 0)
|
option(ARM_TARGET "Force use specific ARM target 8 or 7" 0)
|
||||||
|
option(WITH_EMBEDDED_CONFIG "Enable internal embedded JSON config" OFF)
|
||||||
|
|
||||||
include (CheckIncludeFile)
|
include (CheckIncludeFile)
|
||||||
include (cmake/cpu.cmake)
|
include (cmake/cpu.cmake)
|
||||||
|
@ -65,6 +66,7 @@ set(HEADERS
|
||||||
src/common/utils/mm_malloc.h
|
src/common/utils/mm_malloc.h
|
||||||
src/common/xmrig.h
|
src/common/xmrig.h
|
||||||
src/core/ConfigLoader_platform.h
|
src/core/ConfigLoader_platform.h
|
||||||
|
src/core/ConfigLoader_default.h
|
||||||
src/core/Controller.h
|
src/core/Controller.h
|
||||||
src/interfaces/IJobResultListener.h
|
src/interfaces/IJobResultListener.h
|
||||||
src/interfaces/IThread.h
|
src/interfaces/IThread.h
|
||||||
|
@ -154,7 +156,6 @@ set(SOURCES_CRYPTO
|
||||||
src/crypto/c_blake256.c
|
src/crypto/c_blake256.c
|
||||||
src/crypto/c_jh.c
|
src/crypto/c_jh.c
|
||||||
src/crypto/c_skein.c
|
src/crypto/c_skein.c
|
||||||
src/crypto/CryptonightR_gen.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
|
@ -249,6 +250,10 @@ if (NOT WITH_CN_PICO)
|
||||||
add_definitions(/DXMRIG_NO_CN_PICO)
|
add_definitions(/DXMRIG_NO_CN_PICO)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (WITH_EMBEDDED_CONFIG)
|
||||||
|
add_definitions(/DXMRIG_FEATURE_EMBEDDED_CONFIG)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (WITH_HTTPD)
|
if (WITH_HTTPD)
|
||||||
find_package(MHD)
|
find_package(MHD)
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ if (WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES GNU)
|
if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES GNU)
|
||||||
set(XMRIG_ASM_FILES
|
set(XMRIG_ASM_FILES
|
||||||
"src/crypto/asm/win64/cn_main_loop.S"
|
"src/crypto/asm/win64/cn_main_loop.S"
|
||||||
"src/crypto/asm/win64/CryptonightR_template.S"
|
"src/crypto/asm/CryptonightR_template.S"
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
set(XMRIG_ASM_FILES
|
set(XMRIG_ASM_FILES
|
||||||
|
@ -36,7 +36,7 @@ if (WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(${XMRIG_ASM_LIBRARY} STATIC ${XMRIG_ASM_FILES})
|
add_library(${XMRIG_ASM_LIBRARY} STATIC ${XMRIG_ASM_FILES})
|
||||||
set(XMRIG_ASM_SOURCES src/crypto/Asm.h src/crypto/Asm.cpp)
|
set(XMRIG_ASM_SOURCES src/crypto/Asm.h src/crypto/Asm.cpp src/crypto/CryptonightR_gen.cpp)
|
||||||
set_property(TARGET ${XMRIG_ASM_LIBRARY} PROPERTY LINKER_LANGUAGE C)
|
set_property(TARGET ${XMRIG_ASM_LIBRARY} PROPERTY LINKER_LANGUAGE C)
|
||||||
else()
|
else()
|
||||||
set(XMRIG_ASM_SOURCES "")
|
set(XMRIG_ASM_SOURCES "")
|
||||||
|
|
|
@ -55,7 +55,7 @@ xmrig::App::App(Process *process) :
|
||||||
m_httpd(nullptr),
|
m_httpd(nullptr),
|
||||||
m_signals(nullptr)
|
m_signals(nullptr)
|
||||||
{
|
{
|
||||||
m_controller = new xmrig::Controller(process);
|
m_controller = new Controller(process);
|
||||||
if (m_controller->init() != 0) {
|
if (m_controller->init() != 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ void xmrig::App::onSignal(int signum)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
close();
|
close();
|
||||||
|
|
|
@ -293,13 +293,16 @@ void ApiRouter::getThreads(rapidjson::Document &doc) const
|
||||||
const std::vector<xmrig::IThread *> &threads = m_controller->config()->threads();
|
const std::vector<xmrig::IThread *> &threads = m_controller->config()->threads();
|
||||||
rapidjson::Value list(rapidjson::kArrayType);
|
rapidjson::Value list(rapidjson::kArrayType);
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
for (const xmrig::IThread *thread : threads) {
|
for (const xmrig::IThread *thread : threads) {
|
||||||
rapidjson::Value value = thread->toAPI(doc);
|
rapidjson::Value value = thread->toAPI(doc);
|
||||||
|
|
||||||
rapidjson::Value hashrate(rapidjson::kArrayType);
|
rapidjson::Value hashrate(rapidjson::kArrayType);
|
||||||
hashrate.PushBack(normalize(hr->calc(thread->index(), Hashrate::ShortInterval)), allocator);
|
hashrate.PushBack(normalize(hr->calc(i, Hashrate::ShortInterval)), allocator);
|
||||||
hashrate.PushBack(normalize(hr->calc(thread->index(), Hashrate::MediumInterval)), allocator);
|
hashrate.PushBack(normalize(hr->calc(i, Hashrate::MediumInterval)), allocator);
|
||||||
hashrate.PushBack(normalize(hr->calc(thread->index(), Hashrate::LargeInterval)), allocator);
|
hashrate.PushBack(normalize(hr->calc(i, Hashrate::LargeInterval)), allocator);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
|
||||||
value.AddMember("hashrate", hashrate, allocator);
|
value.AddMember("hashrate", hashrate, allocator);
|
||||||
list.PushBack(value, allocator);
|
list.PushBack(value, allocator);
|
||||||
|
|
|
@ -47,3 +47,47 @@ const char *xmrig::Json::getString(const rapidjson::Value &obj, const char *key,
|
||||||
|
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int xmrig::Json::getInt(const rapidjson::Value &obj, const char *key, int defaultValue)
|
||||||
|
{
|
||||||
|
auto i = obj.FindMember(key);
|
||||||
|
if (i != obj.MemberEnd() && i->value.IsInt()) {
|
||||||
|
return i->value.GetInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int64_t xmrig::Json::getInt64(const rapidjson::Value &obj, const char *key, int64_t defaultValue)
|
||||||
|
{
|
||||||
|
auto i = obj.FindMember(key);
|
||||||
|
if (i != obj.MemberEnd() && i->value.IsInt64()) {
|
||||||
|
return i->value.GetInt64();
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint64_t xmrig::Json::getUint64(const rapidjson::Value &obj, const char *key, uint64_t defaultValue)
|
||||||
|
{
|
||||||
|
auto i = obj.FindMember(key);
|
||||||
|
if (i != obj.MemberEnd() && i->value.IsUint64()) {
|
||||||
|
return i->value.GetUint64();
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned xmrig::Json::getUint(const rapidjson::Value &obj, const char *key, unsigned defaultValue)
|
||||||
|
{
|
||||||
|
auto i = obj.FindMember(key);
|
||||||
|
if (i != obj.MemberEnd() && i->value.IsUint()) {
|
||||||
|
return i->value.GetUint();
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
|
@ -37,6 +37,10 @@ class Json
|
||||||
public:
|
public:
|
||||||
static bool getBool(const rapidjson::Value &obj, const char *key, bool defaultValue = false);
|
static bool getBool(const rapidjson::Value &obj, const char *key, bool defaultValue = false);
|
||||||
static const char *getString(const rapidjson::Value &obj, const char *key, const char *defaultValue = nullptr);
|
static const char *getString(const rapidjson::Value &obj, const char *key, const char *defaultValue = nullptr);
|
||||||
|
static int getInt(const rapidjson::Value &obj, const char *key, int defaultValue = 0);
|
||||||
|
static int64_t getInt64(const rapidjson::Value &obj, const char *key, int64_t defaultValue = 0);
|
||||||
|
static uint64_t getUint64(const rapidjson::Value &obj, const char *key, uint64_t defaultValue = 0);
|
||||||
|
static unsigned getUint(const rapidjson::Value &obj, const char *key, unsigned defaultValue = 0);
|
||||||
|
|
||||||
static bool get(const char *fileName, rapidjson::Document &doc);
|
static bool get(const char *fileName, rapidjson::Document &doc);
|
||||||
static bool save(const char *fileName, const rapidjson::Document &doc);
|
static bool save(const char *fileName, const rapidjson::Document &doc);
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig {
|
||||||
|
|
||||||
static const char *kEnabled = "enabled";
|
static const char *kEnabled = "enabled";
|
||||||
static const char *kFingerprint = "tls-fingerprint";
|
static const char *kFingerprint = "tls-fingerprint";
|
||||||
static const char *kKeepalive = "keepalive";
|
static const char *kKeepalive = "keepalive";
|
||||||
|
@ -56,6 +58,8 @@ static const char *kUrl = "url";
|
||||||
static const char *kUser = "user";
|
static const char *kUser = "user";
|
||||||
static const char *kVariant = "variant";
|
static const char *kVariant = "variant";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
xmrig::Pool::Pool() :
|
xmrig::Pool::Pool() :
|
||||||
m_enabled(true),
|
m_enabled(true),
|
||||||
|
@ -128,6 +132,7 @@ xmrig::Pool::Pool(const rapidjson::Value &object) :
|
||||||
|
|
||||||
|
|
||||||
xmrig::Pool::Pool(const char *host, uint16_t port, const char *user, const char *password, int keepAlive, bool nicehash, bool tls) :
|
xmrig::Pool::Pool(const char *host, uint16_t port, const char *user, const char *password, int keepAlive, bool nicehash, bool tls) :
|
||||||
|
m_enabled(true),
|
||||||
m_nicehash(nicehash),
|
m_nicehash(nicehash),
|
||||||
m_tls(tls),
|
m_tls(tls),
|
||||||
m_keepAlive(keepAlive),
|
m_keepAlive(keepAlive),
|
||||||
|
|
|
@ -61,6 +61,10 @@ char *Platform::createUserAgent()
|
||||||
|
|
||||||
# if defined(__x86_64__)
|
# if defined(__x86_64__)
|
||||||
length += snprintf(buf + length, max - length, "x86_64) libuv/%s", uv_version_string());
|
length += snprintf(buf + length, max - length, "x86_64) libuv/%s", uv_version_string());
|
||||||
|
# elif defined(__aarch64__)
|
||||||
|
length += snprintf(buf + length, max - length, "aarch64) libuv/%s", uv_version_string());
|
||||||
|
# elif defined(__arm__)
|
||||||
|
length += snprintf(buf + length, max - length, "arm) libuv/%s", uv_version_string());
|
||||||
# else
|
# else
|
||||||
length += snprintf(buf + length, max - length, "i686) libuv/%s", uv_version_string());
|
length += snprintf(buf + length, max - length, "i686) libuv/%s", uv_version_string());
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include "common/interfaces/IConfig.h"
|
#include "common/interfaces/IConfig.h"
|
||||||
#include "common/Platform.h"
|
#include "common/Platform.h"
|
||||||
#include "core/ConfigCreator.h"
|
#include "core/ConfigCreator.h"
|
||||||
|
#include "core/ConfigLoader_default.h"
|
||||||
#include "core/ConfigLoader_platform.h"
|
#include "core/ConfigLoader_platform.h"
|
||||||
#include "rapidjson/document.h"
|
#include "rapidjson/document.h"
|
||||||
#include "rapidjson/error/en.h"
|
#include "rapidjson/error/en.h"
|
||||||
|
@ -180,6 +181,15 @@ xmrig::IConfig *xmrig::ConfigLoader::load(Process *process, IConfigCreator *crea
|
||||||
loadFromFile(config, process->location(Process::ExeLocation, "config.json"));
|
loadFromFile(config, process->location(Process::ExeLocation, "config.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ifdef XMRIG_FEATURE_EMBEDDED_CONFIG
|
||||||
|
if (!config->finalize()) {
|
||||||
|
delete config;
|
||||||
|
|
||||||
|
config = m_creator->create();
|
||||||
|
loadFromJSON(config, default_config);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
if (!config->finalize()) {
|
if (!config->finalize()) {
|
||||||
if (!config->algorithm().isValid()) {
|
if (!config->algorithm().isValid()) {
|
||||||
fprintf(stderr, "No valid algorithm specified. Exiting.\n");
|
fprintf(stderr, "No valid algorithm specified. Exiting.\n");
|
||||||
|
|
|
@ -115,6 +115,7 @@ static AlgoData const xmrStakAlgorithms[] = {
|
||||||
{ "cryptonight_alloy", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_XAO }, // xmr-stak-alloy
|
{ "cryptonight_alloy", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_XAO }, // xmr-stak-alloy
|
||||||
{ "cryptonight_turtle", nullptr, xmrig::CRYPTONIGHT_PICO, xmrig::VARIANT_TRTL },
|
{ "cryptonight_turtle", nullptr, xmrig::CRYPTONIGHT_PICO, xmrig::VARIANT_TRTL },
|
||||||
{ "cryptonight_gpu", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_GPU },
|
{ "cryptonight_gpu", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_GPU },
|
||||||
|
{ "cryptonight_r", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_4 },
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -39,5 +39,5 @@
|
||||||
"safe": false,
|
"safe": false,
|
||||||
"threads": null,
|
"threads": null,
|
||||||
"user-agent": null,
|
"user-agent": null,
|
||||||
"watch": false
|
"watch": true
|
||||||
}
|
}
|
84
src/core/ConfigLoader_default.h
Normal file
84
src/core/ConfigLoader_default.h
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
/* XMRig
|
||||||
|
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
||||||
|
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
||||||
|
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
||||||
|
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
||||||
|
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
||||||
|
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
|
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XMRIG_CONFIGLOADER_DEFAULT_H
|
||||||
|
#define XMRIG_CONFIGLOADER_DEFAULT_H
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef XMRIG_FEATURE_EMBEDDED_CONFIG
|
||||||
|
const static char *default_config =
|
||||||
|
R"===(
|
||||||
|
{
|
||||||
|
"algo": "cryptonight",
|
||||||
|
"api": {
|
||||||
|
"port": 0,
|
||||||
|
"access-token": null,
|
||||||
|
"id": null,
|
||||||
|
"worker-id": null,
|
||||||
|
"ipv6": false,
|
||||||
|
"restricted": true
|
||||||
|
},
|
||||||
|
"asm": true,
|
||||||
|
"autosave": true,
|
||||||
|
"av": 0,
|
||||||
|
"background": false,
|
||||||
|
"colors": true,
|
||||||
|
"cpu-affinity": null,
|
||||||
|
"cpu-priority": null,
|
||||||
|
"donate-level": 5,
|
||||||
|
"huge-pages": true,
|
||||||
|
"hw-aes": null,
|
||||||
|
"log-file": null,
|
||||||
|
"max-cpu-usage": 100,
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"url": "donate.v2.xmrig.com:3333",
|
||||||
|
"user": "YOUR_WALLET_ADDRESS",
|
||||||
|
"pass": "x",
|
||||||
|
"rig-id": null,
|
||||||
|
"nicehash": false,
|
||||||
|
"keepalive": false,
|
||||||
|
"variant": -1,
|
||||||
|
"tls": false,
|
||||||
|
"tls-fingerprint": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"print-time": 60,
|
||||||
|
"retries": 5,
|
||||||
|
"retry-pause": 5,
|
||||||
|
"safe": false,
|
||||||
|
"threads": null,
|
||||||
|
"user-agent": null,
|
||||||
|
"watch": false
|
||||||
|
}
|
||||||
|
)===";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
} /* namespace xmrig */
|
||||||
|
|
||||||
|
#endif /* XMRIG_CONFIGLOADER_DEFAULT_H */
|
|
@ -99,7 +99,7 @@ int xmrig::Controller::init()
|
||||||
{
|
{
|
||||||
Cpu::init();
|
Cpu::init();
|
||||||
|
|
||||||
d_ptr->config = xmrig::Config::load(d_ptr->process, this);
|
d_ptr->config = Config::load(d_ptr->process, this);
|
||||||
if (!d_ptr->config) {
|
if (!d_ptr->config) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,10 @@ struct cryptonight_r_data {
|
||||||
struct cryptonight_ctx {
|
struct cryptonight_ctx {
|
||||||
alignas(16) uint8_t state[224];
|
alignas(16) uint8_t state[224];
|
||||||
alignas(16) uint8_t *memory;
|
alignas(16) uint8_t *memory;
|
||||||
|
|
||||||
|
uint8_t unused[40];
|
||||||
|
const uint32_t* saes_table;
|
||||||
|
|
||||||
cn_mainloop_fun_ms_abi generated_code;
|
cn_mainloop_fun_ms_abi generated_code;
|
||||||
cn_mainloop_double_fun_ms_abi generated_code_double;
|
cn_mainloop_double_fun_ms_abi generated_code_double;
|
||||||
cryptonight_r_data generated_code_data;
|
cryptonight_r_data generated_code_data;
|
||||||
|
|
|
@ -168,6 +168,16 @@
|
||||||
#define SWAP64LE(x) x
|
#define SWAP64LE(x) x
|
||||||
#define hash_extra_blake(data, length, hash) blake256_hash((uint8_t*)(hash), (uint8_t*)(data), (length))
|
#define hash_extra_blake(data, length, hash) blake256_hash((uint8_t*)(hash), (uint8_t*)(data), (length))
|
||||||
|
|
||||||
|
#ifndef NOINLINE
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define NOINLINE __attribute__ ((noinline))
|
||||||
|
#elif _MSC_VER
|
||||||
|
#define NOINLINE __declspec(noinline)
|
||||||
|
#else
|
||||||
|
#define NOINLINE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "common/xmrig.h"
|
#include "common/xmrig.h"
|
||||||
#include "variant4_random_math.h"
|
#include "variant4_random_math.h"
|
||||||
|
|
||||||
|
|
|
@ -58,27 +58,58 @@ const static uint8_t test_input[380] = {
|
||||||
0xCF, 0x50, 0x29, 0x6A, 0x07, 0x0B, 0x93, 0x8F, 0x8F, 0xA8, 0x10, 0x04
|
0xCF, 0x50, 0x29, 0x6A, 0x07, 0x0B, 0x93, 0x8F, 0x8F, 0xA8, 0x10, 0x04
|
||||||
};
|
};
|
||||||
|
|
||||||
const static char* test_input_WOW = R"===(9d47bf4c41b7e8e727e681715acb47fa1677cdba9ca7bcb05ad8cc8abd5daa66 5468697320697320612074657374205468697320697320612074657374205468697320697320612074657374 1806260
|
|
||||||
0d4a495cb844a3ca8ba4edb8e6bcf829ef1c06d9cdea2b62ca46c2a21b8b0a79 4c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e67 1806261
|
|
||||||
a1d6d848b5c5915fccd2f64cf216c6b1a02cf7c77bc80d8d4e51b419e88ff0dd 656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f7265 1806262
|
|
||||||
af3a8544a0221a148c2ac90484b19861e3afca33fe17021efb8ad6496b567915 657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c 1806263
|
|
||||||
313399e0963ae8a99dab8af66d343e097dae0c0feb08dbc43ccdafef5515f413 71756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e697369 1806264
|
|
||||||
6021c6ef90bff9ae94a7506d623d3a7a86c1756d655f50dd558f716d64622a34 757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e20447569732061757465 1806265
|
|
||||||
2b13000535f3db5f9b9b84a65c4351f386cd2cdedebb8c3ad2eab086e6a3fee5 697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c6974 1806266
|
|
||||||
fc0e1dad8e895749dc90eb690bc1ba059a1cd772afaaf65a106bf9e5e6b80503 657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e 1806267
|
|
||||||
b60b0afe144deff7d903ed2d5545e77ebe66a3c51fee7016eeb8fee9eb630c0f 4578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c 1806268
|
|
||||||
64774b27e7d5fec862fc4c0c13ac6bf09123b6f05bb0e4b75c97f379a2b3a679 73756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e 1806269)===";
|
|
||||||
|
|
||||||
const static char* test_input_R = R"===(f759588ad57e758467295443a9bd71490abff8e9dad1b95b6bf2f5d0d78387bc 5468697320697320612074657374205468697320697320612074657374205468697320697320612074657374 1806260
|
struct cn_r_test_input_data
|
||||||
5bb833deca2bdd7252a9ccd7b4ce0b6a4854515794b56c207262f7a5b9bdb566 4c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e67 1806261
|
{
|
||||||
1ee6728da60fbd8d7d55b2b1ade487a3cf52a2c3ac6f520db12c27d8921f6cab 656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f7265 1806262
|
uint64_t height;
|
||||||
6969fe2ddfb758438d48049f302fc2108a4fcc93e37669170e6db4b0b9b4c4cb 657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c 1806263
|
size_t size;
|
||||||
7f3048b4e90d0cbe7a57c0394f37338a01fae3adfdc0e5126d863a895eb04e02 71756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e697369 1806264
|
uint8_t data[64];
|
||||||
1d290443a4b542af04a82f6b2494a6ee7f20f2754c58e0849032483a56e8e2ef 757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e20447569732061757465 1806265
|
};
|
||||||
c43cc6567436a86afbd6aa9eaa7c276e9806830334b614b2bee23cc76634f6fd 697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c6974 1806266
|
|
||||||
87be2479c0c4e8edfdfaa5603e93f4265b3f8224c1c5946feb424819d18990a4 657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e 1806267
|
|
||||||
dd9d6a6d8e47465cceac0877ef889b93e7eba979557e3935d7f86dce11b070f3 4578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c 1806268
|
const static cn_r_test_input_data cn_r_test_input[] = {
|
||||||
75c6f2ae49a20521de97285b431e717125847fb8935ed84a61e7f8d36a2c3d8e 73756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e 1806269)===";
|
{ 1806260, 44, { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74 } },
|
||||||
|
{ 1806261, 50, { 0x4c, 0x6f, 0x72, 0x65, 0x6d, 0x20, 0x69, 0x70, 0x73, 0x75, 0x6d, 0x20, 0x64, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x73, 0x69, 0x74, 0x20, 0x61, 0x6d, 0x65, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x74, 0x65, 0x74, 0x75, 0x72, 0x20, 0x61, 0x64, 0x69, 0x70, 0x69, 0x73, 0x63, 0x69, 0x6e, 0x67 } },
|
||||||
|
{ 1806262, 48, { 0x65, 0x6c, 0x69, 0x74, 0x2c, 0x20, 0x73, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x20, 0x65, 0x69, 0x75, 0x73, 0x6d, 0x6f, 0x64, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x69, 0x64, 0x69, 0x64, 0x75, 0x6e, 0x74, 0x20, 0x75, 0x74, 0x20, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x65 } },
|
||||||
|
{ 1806263, 48, { 0x65, 0x74, 0x20, 0x64, 0x6f, 0x6c, 0x6f, 0x72, 0x65, 0x20, 0x6d, 0x61, 0x67, 0x6e, 0x61, 0x20, 0x61, 0x6c, 0x69, 0x71, 0x75, 0x61, 0x2e, 0x20, 0x55, 0x74, 0x20, 0x65, 0x6e, 0x69, 0x6d, 0x20, 0x61, 0x64, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x20, 0x76, 0x65, 0x6e, 0x69, 0x61, 0x6d, 0x2c } },
|
||||||
|
{ 1806264, 46, { 0x71, 0x75, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x73, 0x74, 0x72, 0x75, 0x64, 0x20, 0x65, 0x78, 0x65, 0x72, 0x63, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x6c, 0x6c, 0x61, 0x6d, 0x63, 0x6f, 0x20, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x69, 0x73, 0x20, 0x6e, 0x69, 0x73, 0x69 } },
|
||||||
|
{ 1806265, 45, { 0x75, 0x74, 0x20, 0x61, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x70, 0x20, 0x65, 0x78, 0x20, 0x65, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x64, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x61, 0x74, 0x2e, 0x20, 0x44, 0x75, 0x69, 0x73, 0x20, 0x61, 0x75, 0x74, 0x65 } },
|
||||||
|
{ 1806266, 47, { 0x69, 0x72, 0x75, 0x72, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x69, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x70, 0x74, 0x61, 0x74, 0x65, 0x20, 0x76, 0x65, 0x6c, 0x69, 0x74 } },
|
||||||
|
{ 1806267, 44, { 0x65, 0x73, 0x73, 0x65, 0x20, 0x63, 0x69, 0x6c, 0x6c, 0x75, 0x6d, 0x20, 0x64, 0x6f, 0x6c, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x75, 0x20, 0x66, 0x75, 0x67, 0x69, 0x61, 0x74, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x20, 0x70, 0x61, 0x72, 0x69, 0x61, 0x74, 0x75, 0x72, 0x2e } },
|
||||||
|
{ 1806268, 47, { 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x65, 0x75, 0x72, 0x20, 0x73, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x63, 0x63, 0x61, 0x65, 0x63, 0x61, 0x74, 0x20, 0x63, 0x75, 0x70, 0x69, 0x64, 0x61, 0x74, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x2c } },
|
||||||
|
{ 1806269, 62, { 0x73, 0x75, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x75, 0x6c, 0x70, 0x61, 0x20, 0x71, 0x75, 0x69, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x20, 0x64, 0x65, 0x73, 0x65, 0x72, 0x75, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x6c, 0x6c, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x69, 0x6d, 0x20, 0x69, 0x64, 0x20, 0x65, 0x73, 0x74, 0x20, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x75, 0x6d, 0x2e } },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// "cn/wow"
|
||||||
|
const static uint8_t test_output_wow[] = {
|
||||||
|
0x9d, 0x47, 0xbf, 0x4c, 0x41, 0xb7, 0xe8, 0xe7, 0x27, 0xe6, 0x81, 0x71, 0x5a, 0xcb, 0x47, 0xfa, 0x16, 0x77, 0xcd, 0xba, 0x9c, 0xa7, 0xbc, 0xb0, 0x5a, 0xd8, 0xcc, 0x8a, 0xbd, 0x5d, 0xaa, 0x66,
|
||||||
|
0x0d, 0x4a, 0x49, 0x5c, 0xb8, 0x44, 0xa3, 0xca, 0x8b, 0xa4, 0xed, 0xb8, 0xe6, 0xbc, 0xf8, 0x29, 0xef, 0x1c, 0x06, 0xd9, 0xcd, 0xea, 0x2b, 0x62, 0xca, 0x46, 0xc2, 0xa2, 0x1b, 0x8b, 0x0a, 0x79,
|
||||||
|
0xa1, 0xd6, 0xd8, 0x48, 0xb5, 0xc5, 0x91, 0x5f, 0xcc, 0xd2, 0xf6, 0x4c, 0xf2, 0x16, 0xc6, 0xb1, 0xa0, 0x2c, 0xf7, 0xc7, 0x7b, 0xc8, 0x0d, 0x8d, 0x4e, 0x51, 0xb4, 0x19, 0xe8, 0x8f, 0xf0, 0xdd,
|
||||||
|
0xaf, 0x3a, 0x85, 0x44, 0xa0, 0x22, 0x1a, 0x14, 0x8c, 0x2a, 0xc9, 0x04, 0x84, 0xb1, 0x98, 0x61, 0xe3, 0xaf, 0xca, 0x33, 0xfe, 0x17, 0x02, 0x1e, 0xfb, 0x8a, 0xd6, 0x49, 0x6b, 0x56, 0x79, 0x15,
|
||||||
|
0x31, 0x33, 0x99, 0xe0, 0x96, 0x3a, 0xe8, 0xa9, 0x9d, 0xab, 0x8a, 0xf6, 0x6d, 0x34, 0x3e, 0x09, 0x7d, 0xae, 0x0c, 0x0f, 0xeb, 0x08, 0xdb, 0xc4, 0x3c, 0xcd, 0xaf, 0xef, 0x55, 0x15, 0xf4, 0x13,
|
||||||
|
0x60, 0x21, 0xc6, 0xef, 0x90, 0xbf, 0xf9, 0xae, 0x94, 0xa7, 0x50, 0x6d, 0x62, 0x3d, 0x3a, 0x7a, 0x86, 0xc1, 0x75, 0x6d, 0x65, 0x5f, 0x50, 0xdd, 0x55, 0x8f, 0x71, 0x6d, 0x64, 0x62, 0x2a, 0x34,
|
||||||
|
0x2b, 0x13, 0x00, 0x05, 0x35, 0xf3, 0xdb, 0x5f, 0x9b, 0x9b, 0x84, 0xa6, 0x5c, 0x43, 0x51, 0xf3, 0x86, 0xcd, 0x2c, 0xde, 0xde, 0xbb, 0x8c, 0x3a, 0xd2, 0xea, 0xb0, 0x86, 0xe6, 0xa3, 0xfe, 0xe5,
|
||||||
|
0xfc, 0x0e, 0x1d, 0xad, 0x8e, 0x89, 0x57, 0x49, 0xdc, 0x90, 0xeb, 0x69, 0x0b, 0xc1, 0xba, 0x05, 0x9a, 0x1c, 0xd7, 0x72, 0xaf, 0xaa, 0xf6, 0x5a, 0x10, 0x6b, 0xf9, 0xe5, 0xe6, 0xb8, 0x05, 0x03,
|
||||||
|
0xb6, 0x0b, 0x0a, 0xfe, 0x14, 0x4d, 0xef, 0xf7, 0xd9, 0x03, 0xed, 0x2d, 0x55, 0x45, 0xe7, 0x7e, 0xbe, 0x66, 0xa3, 0xc5, 0x1f, 0xee, 0x70, 0x16, 0xee, 0xb8, 0xfe, 0xe9, 0xeb, 0x63, 0x0c, 0x0f,
|
||||||
|
0x64, 0x77, 0x4b, 0x27, 0xe7, 0xd5, 0xfe, 0xc8, 0x62, 0xfc, 0x4c, 0x0c, 0x13, 0xac, 0x6b, 0xf0, 0x91, 0x23, 0xb6, 0xf0, 0x5b, 0xb0, 0xe4, 0xb7, 0x5c, 0x97, 0xf3, 0x79, 0xa2, 0xb3, 0xa6, 0x79,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// "cn/r"
|
||||||
|
const static uint8_t test_output_r[] = {
|
||||||
|
0xf7, 0x59, 0x58, 0x8a, 0xd5, 0x7e, 0x75, 0x84, 0x67, 0x29, 0x54, 0x43, 0xa9, 0xbd, 0x71, 0x49, 0x0a, 0xbf, 0xf8, 0xe9, 0xda, 0xd1, 0xb9, 0x5b, 0x6b, 0xf2, 0xf5, 0xd0, 0xd7, 0x83, 0x87, 0xbc,
|
||||||
|
0x5b, 0xb8, 0x33, 0xde, 0xca, 0x2b, 0xdd, 0x72, 0x52, 0xa9, 0xcc, 0xd7, 0xb4, 0xce, 0x0b, 0x6a, 0x48, 0x54, 0x51, 0x57, 0x94, 0xb5, 0x6c, 0x20, 0x72, 0x62, 0xf7, 0xa5, 0xb9, 0xbd, 0xb5, 0x66,
|
||||||
|
0x1e, 0xe6, 0x72, 0x8d, 0xa6, 0x0f, 0xbd, 0x8d, 0x7d, 0x55, 0xb2, 0xb1, 0xad, 0xe4, 0x87, 0xa3, 0xcf, 0x52, 0xa2, 0xc3, 0xac, 0x6f, 0x52, 0x0d, 0xb1, 0x2c, 0x27, 0xd8, 0x92, 0x1f, 0x6c, 0xab,
|
||||||
|
0x69, 0x69, 0xfe, 0x2d, 0xdf, 0xb7, 0x58, 0x43, 0x8d, 0x48, 0x04, 0x9f, 0x30, 0x2f, 0xc2, 0x10, 0x8a, 0x4f, 0xcc, 0x93, 0xe3, 0x76, 0x69, 0x17, 0x0e, 0x6d, 0xb4, 0xb0, 0xb9, 0xb4, 0xc4, 0xcb,
|
||||||
|
0x7f, 0x30, 0x48, 0xb4, 0xe9, 0x0d, 0x0c, 0xbe, 0x7a, 0x57, 0xc0, 0x39, 0x4f, 0x37, 0x33, 0x8a, 0x01, 0xfa, 0xe3, 0xad, 0xfd, 0xc0, 0xe5, 0x12, 0x6d, 0x86, 0x3a, 0x89, 0x5e, 0xb0, 0x4e, 0x02,
|
||||||
|
0x1d, 0x29, 0x04, 0x43, 0xa4, 0xb5, 0x42, 0xaf, 0x04, 0xa8, 0x2f, 0x6b, 0x24, 0x94, 0xa6, 0xee, 0x7f, 0x20, 0xf2, 0x75, 0x4c, 0x58, 0xe0, 0x84, 0x90, 0x32, 0x48, 0x3a, 0x56, 0xe8, 0xe2, 0xef,
|
||||||
|
0xc4, 0x3c, 0xc6, 0x56, 0x74, 0x36, 0xa8, 0x6a, 0xfb, 0xd6, 0xaa, 0x9e, 0xaa, 0x7c, 0x27, 0x6e, 0x98, 0x06, 0x83, 0x03, 0x34, 0xb6, 0x14, 0xb2, 0xbe, 0xe2, 0x3c, 0xc7, 0x66, 0x34, 0xf6, 0xfd,
|
||||||
|
0x87, 0xbe, 0x24, 0x79, 0xc0, 0xc4, 0xe8, 0xed, 0xfd, 0xfa, 0xa5, 0x60, 0x3e, 0x93, 0xf4, 0x26, 0x5b, 0x3f, 0x82, 0x24, 0xc1, 0xc5, 0x94, 0x6f, 0xeb, 0x42, 0x48, 0x19, 0xd1, 0x89, 0x90, 0xa4,
|
||||||
|
0xdd, 0x9d, 0x6a, 0x6d, 0x8e, 0x47, 0x46, 0x5c, 0xce, 0xac, 0x08, 0x77, 0xef, 0x88, 0x9b, 0x93, 0xe7, 0xeb, 0xa9, 0x79, 0x55, 0x7e, 0x39, 0x35, 0xd7, 0xf8, 0x6d, 0xce, 0x11, 0xb0, 0x70, 0xf3,
|
||||||
|
0x75, 0xc6, 0xf2, 0xae, 0x49, 0xa2, 0x05, 0x21, 0xde, 0x97, 0x28, 0x5b, 0x43, 0x1e, 0x71, 0x71, 0x25, 0x84, 0x7f, 0xb8, 0x93, 0x5e, 0xd8, 0x4a, 0x61, 0xe7, 0xf8, 0xd3, 0x6a, 0x2c, 0x3d, 0x8e,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// "cn/0"
|
// "cn/0"
|
||||||
const static uint8_t test_output_v0[160] = {
|
const static uint8_t test_output_v0[160] = {
|
||||||
|
@ -321,8 +352,6 @@ const static uint8_t test_output_pico_trtl[160] = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned char hf_hex2bin(char c, bool &err);
|
|
||||||
char hf_bin2hex(unsigned char c);
|
|
||||||
|
|
||||||
#ifndef XMRIG_NO_CN_GPU
|
#ifndef XMRIG_NO_CN_GPU
|
||||||
// "cn/gpu"
|
// "cn/gpu"
|
||||||
|
|
|
@ -192,20 +192,93 @@ static inline void aes_genkey(const __m128i* memory, __m128i* k0, __m128i* k1, _
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<bool SOFT_AES>
|
static FORCEINLINE void soft_aesenc(void* __restrict ptr, const void* __restrict key, const uint32_t* __restrict t)
|
||||||
static inline void aes_round(__m128i key, __m128i* x0, __m128i* x1, __m128i* x2, __m128i* x3, __m128i* x4, __m128i* x5, __m128i* x6, __m128i* x7)
|
|
||||||
{
|
{
|
||||||
if (SOFT_AES) {
|
uint32_t x0 = ((const uint32_t*)(ptr))[0];
|
||||||
*x0 = soft_aesenc((uint32_t*)x0, key);
|
uint32_t x1 = ((const uint32_t*)(ptr))[1];
|
||||||
*x1 = soft_aesenc((uint32_t*)x1, key);
|
uint32_t x2 = ((const uint32_t*)(ptr))[2];
|
||||||
*x2 = soft_aesenc((uint32_t*)x2, key);
|
uint32_t x3 = ((const uint32_t*)(ptr))[3];
|
||||||
*x3 = soft_aesenc((uint32_t*)x3, key);
|
|
||||||
*x4 = soft_aesenc((uint32_t*)x4, key);
|
uint32_t y0 = t[x0 & 0xff]; x0 >>= 8;
|
||||||
*x5 = soft_aesenc((uint32_t*)x5, key);
|
uint32_t y1 = t[x1 & 0xff]; x1 >>= 8;
|
||||||
*x6 = soft_aesenc((uint32_t*)x6, key);
|
uint32_t y2 = t[x2 & 0xff]; x2 >>= 8;
|
||||||
*x7 = soft_aesenc((uint32_t*)x7, key);
|
uint32_t y3 = t[x3 & 0xff]; x3 >>= 8;
|
||||||
|
t += 256;
|
||||||
|
|
||||||
|
y0 ^= t[x1 & 0xff]; x1 >>= 8;
|
||||||
|
y1 ^= t[x2 & 0xff]; x2 >>= 8;
|
||||||
|
y2 ^= t[x3 & 0xff]; x3 >>= 8;
|
||||||
|
y3 ^= t[x0 & 0xff]; x0 >>= 8;
|
||||||
|
t += 256;
|
||||||
|
|
||||||
|
y0 ^= t[x2 & 0xff]; x2 >>= 8;
|
||||||
|
y1 ^= t[x3 & 0xff]; x3 >>= 8;
|
||||||
|
y2 ^= t[x0 & 0xff]; x0 >>= 8;
|
||||||
|
y3 ^= t[x1 & 0xff]; x1 >>= 8;
|
||||||
|
t += 256;
|
||||||
|
|
||||||
|
y0 ^= t[x3];
|
||||||
|
y1 ^= t[x0];
|
||||||
|
y2 ^= t[x1];
|
||||||
|
y3 ^= t[x2];
|
||||||
|
|
||||||
|
((uint32_t*)ptr)[0] = y0 ^ ((uint32_t*)key)[0];
|
||||||
|
((uint32_t*)ptr)[1] = y1 ^ ((uint32_t*)key)[1];
|
||||||
|
((uint32_t*)ptr)[2] = y2 ^ ((uint32_t*)key)[2];
|
||||||
|
((uint32_t*)ptr)[3] = y3 ^ ((uint32_t*)key)[3];
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
|
static FORCEINLINE __m128i soft_aesenc(const void* __restrict ptr, const __m128i key, const uint32_t* __restrict t)
|
||||||
|
{
|
||||||
|
uint32_t x0 = ((const uint32_t*)(ptr))[0];
|
||||||
|
uint32_t x1 = ((const uint32_t*)(ptr))[1];
|
||||||
|
uint32_t x2 = ((const uint32_t*)(ptr))[2];
|
||||||
|
uint32_t x3 = ((const uint32_t*)(ptr))[3];
|
||||||
|
|
||||||
|
uint32_t y0 = t[x0 & 0xff]; x0 >>= 8;
|
||||||
|
uint32_t y1 = t[x1 & 0xff]; x1 >>= 8;
|
||||||
|
uint32_t y2 = t[x2 & 0xff]; x2 >>= 8;
|
||||||
|
uint32_t y3 = t[x3 & 0xff]; x3 >>= 8;
|
||||||
|
t += 256;
|
||||||
|
|
||||||
|
y0 ^= t[x1 & 0xff]; x1 >>= 8;
|
||||||
|
y1 ^= t[x2 & 0xff]; x2 >>= 8;
|
||||||
|
y2 ^= t[x3 & 0xff]; x3 >>= 8;
|
||||||
|
y3 ^= t[x0 & 0xff]; x0 >>= 8;
|
||||||
|
t += 256;
|
||||||
|
|
||||||
|
y0 ^= t[x2 & 0xff]; x2 >>= 8;
|
||||||
|
y1 ^= t[x3 & 0xff]; x3 >>= 8;
|
||||||
|
y2 ^= t[x0 & 0xff]; x0 >>= 8;
|
||||||
|
y3 ^= t[x1 & 0xff]; x1 >>= 8;
|
||||||
|
|
||||||
|
y0 ^= t[x3 + 256];
|
||||||
|
y1 ^= t[x0 + 256];
|
||||||
|
y2 ^= t[x1 + 256];
|
||||||
|
y3 ^= t[x2 + 256];
|
||||||
|
|
||||||
|
return _mm_xor_si128(_mm_set_epi32(y3, y2, y1, y0), key);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<bool SOFT_AES>
|
||||||
|
void aes_round(__m128i key, __m128i* x0, __m128i* x1, __m128i* x2, __m128i* x3, __m128i* x4, __m128i* x5, __m128i* x6, __m128i* x7);
|
||||||
|
|
||||||
|
template<>
|
||||||
|
NOINLINE void aes_round<true>(__m128i key, __m128i* x0, __m128i* x1, __m128i* x2, __m128i* x3, __m128i* x4, __m128i* x5, __m128i* x6, __m128i* x7)
|
||||||
|
{
|
||||||
|
*x0 = soft_aesenc((uint32_t*)x0, key, (const uint32_t*)saes_table);
|
||||||
|
*x1 = soft_aesenc((uint32_t*)x1, key, (const uint32_t*)saes_table);
|
||||||
|
*x2 = soft_aesenc((uint32_t*)x2, key, (const uint32_t*)saes_table);
|
||||||
|
*x3 = soft_aesenc((uint32_t*)x3, key, (const uint32_t*)saes_table);
|
||||||
|
*x4 = soft_aesenc((uint32_t*)x4, key, (const uint32_t*)saes_table);
|
||||||
|
*x5 = soft_aesenc((uint32_t*)x5, key, (const uint32_t*)saes_table);
|
||||||
|
*x6 = soft_aesenc((uint32_t*)x6, key, (const uint32_t*)saes_table);
|
||||||
|
*x7 = soft_aesenc((uint32_t*)x7, key, (const uint32_t*)saes_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
FORCEINLINE void aes_round<false>(__m128i key, __m128i* x0, __m128i* x1, __m128i* x2, __m128i* x3, __m128i* x4, __m128i* x5, __m128i* x6, __m128i* x7)
|
||||||
|
{
|
||||||
*x0 = _mm_aesenc_si128(*x0, key);
|
*x0 = _mm_aesenc_si128(*x0, key);
|
||||||
*x1 = _mm_aesenc_si128(*x1, key);
|
*x1 = _mm_aesenc_si128(*x1, key);
|
||||||
*x2 = _mm_aesenc_si128(*x2, key);
|
*x2 = _mm_aesenc_si128(*x2, key);
|
||||||
|
@ -215,8 +288,6 @@ static inline void aes_round(__m128i key, __m128i* x0, __m128i* x1, __m128i* x2,
|
||||||
*x6 = _mm_aesenc_si128(*x6, key);
|
*x6 = _mm_aesenc_si128(*x6, key);
|
||||||
*x7 = _mm_aesenc_si128(*x7, key);
|
*x7 = _mm_aesenc_si128(*x7, key);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline void mix_and_propagate(__m128i& x0, __m128i& x1, __m128i& x2, __m128i& x3, __m128i& x4, __m128i& x5, __m128i& x6, __m128i& x7)
|
inline void mix_and_propagate(__m128i& x0, __m128i& x1, __m128i& x2, __m128i& x3, __m128i& x4, __m128i& x5, __m128i& x6, __m128i& x7)
|
||||||
{
|
{
|
||||||
|
@ -478,6 +549,8 @@ static inline void cryptonight_monero_tweak(uint64_t* mem_out, const uint8_t* l,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wow_soft_aes_compile_code(const V4_Instruction* code, int code_size, void* machine_code, xmrig::Assembly ASM);
|
||||||
|
void v4_soft_aes_compile_code(const V4_Instruction* code, int code_size, void* machine_code, xmrig::Assembly ASM);
|
||||||
|
|
||||||
template<xmrig::Algo ALGO, bool SOFT_AES, xmrig::Variant VARIANT>
|
template<xmrig::Algo ALGO, bool SOFT_AES, xmrig::Variant VARIANT>
|
||||||
inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t size, uint8_t *__restrict__ output, cryptonight_ctx **__restrict__ ctx, uint64_t height)
|
inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t size, uint8_t *__restrict__ output, cryptonight_ctx **__restrict__ ctx, uint64_t height)
|
||||||
|
@ -498,9 +571,31 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
|
|
||||||
cn_explode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) ctx[0]->state, (__m128i*) ctx[0]->memory);
|
cn_explode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) ctx[0]->state, (__m128i*) ctx[0]->memory);
|
||||||
|
|
||||||
const uint8_t* l0 = ctx[0]->memory;
|
|
||||||
uint64_t* h0 = reinterpret_cast<uint64_t*>(ctx[0]->state);
|
uint64_t* h0 = reinterpret_cast<uint64_t*>(ctx[0]->state);
|
||||||
|
|
||||||
|
#ifndef XMRIG_NO_ASM
|
||||||
|
if (SOFT_AES && xmrig::cn_is_cryptonight_r<VARIANT>())
|
||||||
|
{
|
||||||
|
if (!ctx[0]->generated_code_data.match(VARIANT, height)) {
|
||||||
|
V4_Instruction code[256];
|
||||||
|
const int code_size = v4_random_math_init<VARIANT>(code, height);
|
||||||
|
|
||||||
|
if (VARIANT == xmrig::VARIANT_WOW)
|
||||||
|
wow_soft_aes_compile_code(code, code_size, reinterpret_cast<void*>(ctx[0]->generated_code), xmrig::ASM_NONE);
|
||||||
|
else if (VARIANT == xmrig::VARIANT_4)
|
||||||
|
v4_soft_aes_compile_code(code, code_size, reinterpret_cast<void*>(ctx[0]->generated_code), xmrig::ASM_NONE);
|
||||||
|
|
||||||
|
ctx[0]->generated_code_data.variant = VARIANT;
|
||||||
|
ctx[0]->generated_code_data.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx[0]->saes_table = (const uint32_t*)saes_table;
|
||||||
|
ctx[0]->generated_code(ctx[0]);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const uint8_t* l0 = ctx[0]->memory;
|
||||||
|
|
||||||
VARIANT1_INIT(0);
|
VARIANT1_INIT(0);
|
||||||
VARIANT2_INIT(0);
|
VARIANT2_INIT(0);
|
||||||
VARIANT2_SET_ROUNDING_MODE();
|
VARIANT2_SET_ROUNDING_MODE();
|
||||||
|
@ -524,7 +619,7 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
cx = aes_round_tweak_div(cx, ax0);
|
cx = aes_round_tweak_div(cx, ax0);
|
||||||
}
|
}
|
||||||
else if (SOFT_AES) {
|
else if (SOFT_AES) {
|
||||||
cx = soft_aesenc((uint32_t*)&l0[idx0 & MASK], ax0);
|
cx = soft_aesenc((uint32_t*)&l0[idx0 & MASK], ax0, (const uint32_t*)saes_table);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cx = _mm_aesenc_si128(cx, ax0);
|
cx = _mm_aesenc_si128(cx, ax0);
|
||||||
|
@ -602,6 +697,10 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
bx0 = cx;
|
bx0 = cx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef XMRIG_NO_ASM
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) ctx[0]->memory, (__m128i*) ctx[0]->state);
|
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) ctx[0]->memory, (__m128i*) ctx[0]->state);
|
||||||
|
|
||||||
xmrig::keccakf(h0, 24);
|
xmrig::keccakf(h0, 24);
|
||||||
|
@ -857,8 +956,8 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
cx1 = aes_round_tweak_div(cx1, ax1);
|
cx1 = aes_round_tweak_div(cx1, ax1);
|
||||||
}
|
}
|
||||||
else if (SOFT_AES) {
|
else if (SOFT_AES) {
|
||||||
cx0 = soft_aesenc((uint32_t*)&l0[idx0 & MASK], ax0);
|
cx0 = soft_aesenc((uint32_t*)&l0[idx0 & MASK], ax0, (const uint32_t*)saes_table);
|
||||||
cx1 = soft_aesenc((uint32_t*)&l1[idx1 & MASK], ax1);
|
cx1 = soft_aesenc((uint32_t*)&l1[idx1 & MASK], ax1, (const uint32_t*)saes_table);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cx0 = _mm_aesenc_si128(cx0, ax0);
|
cx0 = _mm_aesenc_si128(cx0, ax0);
|
||||||
|
@ -1019,7 +1118,7 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
c = aes_round_tweak_div(c, a); \
|
c = aes_round_tweak_div(c, a); \
|
||||||
} \
|
} \
|
||||||
else if (SOFT_AES) { \
|
else if (SOFT_AES) { \
|
||||||
c = soft_aesenc(c, a); \
|
c = soft_aesenc(&c, a, (const uint32_t*)saes_table); \
|
||||||
} else { \
|
} else { \
|
||||||
c = _mm_aesenc_si128(c, a); \
|
c = _mm_aesenc_si128(c, a); \
|
||||||
} \
|
} \
|
||||||
|
|
|
@ -31,7 +31,6 @@ typedef void(*void_func)();
|
||||||
#include "crypto/asm/CryptonightR_template.h"
|
#include "crypto/asm/CryptonightR_template.h"
|
||||||
#include "Mem.h"
|
#include "Mem.h"
|
||||||
|
|
||||||
#if !defined XMRIG_ARM && !defined XMRIG_NO_ASM
|
|
||||||
|
|
||||||
static inline void add_code(uint8_t* &p, void (*p1)(), void (*p2)())
|
static inline void add_code(uint8_t* &p, void (*p1)(), void (*p2)())
|
||||||
{
|
{
|
||||||
|
@ -159,4 +158,30 @@ void v4_compile_code_double(const V4_Instruction* code, int code_size, void* mac
|
||||||
Mem::flushInstructionCache(machine_code, p - p0);
|
Mem::flushInstructionCache(machine_code, p - p0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
void wow_soft_aes_compile_code(const V4_Instruction* code, int code_size, void* machine_code, xmrig::Assembly ASM)
|
||||||
|
{
|
||||||
|
uint8_t* p0 = reinterpret_cast<uint8_t*>(machine_code);
|
||||||
|
uint8_t* p = p0;
|
||||||
|
|
||||||
|
add_code(p, CryptonightWOW_soft_aes_template_part1, CryptonightWOW_soft_aes_template_part2);
|
||||||
|
add_random_math(p, code, code_size, instructions, instructions_mov, false, ASM);
|
||||||
|
add_code(p, CryptonightWOW_soft_aes_template_part2, CryptonightWOW_soft_aes_template_part3);
|
||||||
|
*(int*)(p - 4) = static_cast<int>((((const uint8_t*)CryptonightWOW_soft_aes_template_mainloop) - ((const uint8_t*)CryptonightWOW_soft_aes_template_part1)) - (p - p0));
|
||||||
|
add_code(p, CryptonightWOW_soft_aes_template_part3, CryptonightWOW_soft_aes_template_end);
|
||||||
|
|
||||||
|
Mem::flushInstructionCache(machine_code, p - p0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void v4_soft_aes_compile_code(const V4_Instruction* code, int code_size, void* machine_code, xmrig::Assembly ASM)
|
||||||
|
{
|
||||||
|
uint8_t* p0 = reinterpret_cast<uint8_t*>(machine_code);
|
||||||
|
uint8_t* p = p0;
|
||||||
|
|
||||||
|
add_code(p, CryptonightR_soft_aes_template_part1, CryptonightR_soft_aes_template_part2);
|
||||||
|
add_random_math(p, code, code_size, instructions, instructions_mov, false, ASM);
|
||||||
|
add_code(p, CryptonightR_soft_aes_template_part2, CryptonightR_soft_aes_template_part3);
|
||||||
|
*(int*)(p - 4) = static_cast<int>((((const uint8_t*)CryptonightR_soft_aes_template_mainloop) - ((const uint8_t*)CryptonightR_soft_aes_template_part1)) - (p - p0));
|
||||||
|
add_code(p, CryptonightR_soft_aes_template_part3, CryptonightR_soft_aes_template_end);
|
||||||
|
|
||||||
|
Mem::flushInstructionCache(machine_code, p - p0);
|
||||||
|
}
|
||||||
|
|
279
src/crypto/asm/CryptonightR_soft_aes_template.inc
Normal file
279
src/crypto/asm/CryptonightR_soft_aes_template.inc
Normal file
|
@ -0,0 +1,279 @@
|
||||||
|
PUBLIC FN_PREFIX(CryptonightR_soft_aes_template_part1)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightR_soft_aes_template_mainloop)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightR_soft_aes_template_part2)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightR_soft_aes_template_part3)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightR_soft_aes_template_end)
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
FN_PREFIX(CryptonightR_soft_aes_template_part1):
|
||||||
|
mov QWORD PTR [rsp+8], rcx
|
||||||
|
push rbx
|
||||||
|
push rbp
|
||||||
|
push rsi
|
||||||
|
push rdi
|
||||||
|
push r12
|
||||||
|
push r13
|
||||||
|
push r14
|
||||||
|
push r15
|
||||||
|
sub rsp, 232
|
||||||
|
|
||||||
|
mov eax, [rcx+96]
|
||||||
|
mov ebx, [rcx+100]
|
||||||
|
mov esi, [rcx+104]
|
||||||
|
mov edx, [rcx+108]
|
||||||
|
mov [rsp+144], eax
|
||||||
|
mov [rsp+148], ebx
|
||||||
|
mov [rsp+152], esi
|
||||||
|
mov [rsp+156], edx
|
||||||
|
|
||||||
|
mov rax, QWORD PTR [rcx+48]
|
||||||
|
mov r10, rcx
|
||||||
|
xor rax, QWORD PTR [rcx+16]
|
||||||
|
mov r8, QWORD PTR [rcx+32]
|
||||||
|
xor r8, QWORD PTR [rcx]
|
||||||
|
mov r9, QWORD PTR [rcx+40]
|
||||||
|
xor r9, QWORD PTR [rcx+8]
|
||||||
|
movq xmm4, rax
|
||||||
|
mov rdx, QWORD PTR [rcx+56]
|
||||||
|
xor rdx, QWORD PTR [rcx+24]
|
||||||
|
mov r11, QWORD PTR [rcx+224]
|
||||||
|
mov rcx, QWORD PTR [rcx+88]
|
||||||
|
xor rcx, QWORD PTR [r10+72]
|
||||||
|
mov rax, QWORD PTR [r10+80]
|
||||||
|
movq xmm0, rdx
|
||||||
|
xor rax, QWORD PTR [r10+64]
|
||||||
|
|
||||||
|
movaps XMMWORD PTR [rsp+16], xmm6
|
||||||
|
movaps XMMWORD PTR [rsp+32], xmm7
|
||||||
|
movaps XMMWORD PTR [rsp+48], xmm8
|
||||||
|
movaps XMMWORD PTR [rsp+64], xmm9
|
||||||
|
movaps XMMWORD PTR [rsp+80], xmm10
|
||||||
|
movaps XMMWORD PTR [rsp+96], xmm11
|
||||||
|
movaps XMMWORD PTR [rsp+112], xmm12
|
||||||
|
movaps XMMWORD PTR [rsp+128], xmm13
|
||||||
|
|
||||||
|
movq xmm5, rax
|
||||||
|
|
||||||
|
mov rax, r8
|
||||||
|
punpcklqdq xmm4, xmm0
|
||||||
|
and eax, 2097136
|
||||||
|
movq xmm10, QWORD PTR [r10+96]
|
||||||
|
movq xmm0, rcx
|
||||||
|
mov rcx, QWORD PTR [r10+104]
|
||||||
|
xorps xmm9, xmm9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
movq xmm12, r11
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
punpcklqdq xmm5, xmm0
|
||||||
|
movq xmm13, rcx
|
||||||
|
mov r12d, 524288
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
FN_PREFIX(CryptonightR_soft_aes_template_mainloop):
|
||||||
|
movd xmm11, r12d
|
||||||
|
mov r12, QWORD PTR [r10+272]
|
||||||
|
lea r13, QWORD PTR [rax+r11]
|
||||||
|
mov esi, DWORD PTR [r13]
|
||||||
|
movq xmm0, r9
|
||||||
|
mov r10d, DWORD PTR [r13+4]
|
||||||
|
movq xmm7, r8
|
||||||
|
mov ebp, DWORD PTR [r13+12]
|
||||||
|
mov r14d, DWORD PTR [r13+8]
|
||||||
|
mov rdx, QWORD PTR [rsp+328]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
punpcklqdq xmm7, xmm0
|
||||||
|
mov r15d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
mov edi, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov ebx, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
xor r15d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov eax, r14d
|
||||||
|
shr eax, 8
|
||||||
|
xor edi, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add eax, 256
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
xor ebx, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
xor r9d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add r12, 2048
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
add r10d, 256
|
||||||
|
mov r11d, DWORD PTR [r12+rax*4]
|
||||||
|
xor r11d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r11d, r9d
|
||||||
|
movzx ecx, sil
|
||||||
|
mov r10d, DWORD PTR [r12+r10*4]
|
||||||
|
shr esi, 8
|
||||||
|
add esi, 256
|
||||||
|
xor r10d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
xor r10d, ebx
|
||||||
|
shr ebp, 8
|
||||||
|
movd xmm1, r11d
|
||||||
|
add ebp, 256
|
||||||
|
movq r11, xmm12
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r9d, DWORD PTR [r12+rsi*4]
|
||||||
|
mov eax, DWORD PTR [r12+rbp*4]
|
||||||
|
xor r9d, edi
|
||||||
|
movzx ecx, r14b
|
||||||
|
movd xmm0, r10d
|
||||||
|
movd xmm2, r9d
|
||||||
|
xor eax, DWORD PTR [r12+rcx*4]
|
||||||
|
mov rcx, rdx
|
||||||
|
xor eax, r15d
|
||||||
|
punpckldq xmm2, xmm1
|
||||||
|
xor rcx, 16
|
||||||
|
movd xmm6, eax
|
||||||
|
mov rax, rdx
|
||||||
|
punpckldq xmm6, xmm0
|
||||||
|
xor rax, 32
|
||||||
|
punpckldq xmm6, xmm2
|
||||||
|
xor rdx, 48
|
||||||
|
movdqu xmm2, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm2
|
||||||
|
pxor xmm6, xmm7
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu xmm1, XMMWORD PTR [rax+r11]
|
||||||
|
movdqu xmm0, XMMWORD PTR [rdx+r11]
|
||||||
|
pxor xmm6, xmm1
|
||||||
|
pxor xmm6, xmm0
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm0
|
||||||
|
movdqu XMMWORD PTR [rax+r11], xmm2
|
||||||
|
movq rcx, xmm13
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movdqu XMMWORD PTR [rdx+r11], xmm1
|
||||||
|
movq rdi, xmm6
|
||||||
|
mov r10, rdi
|
||||||
|
and r10d, 2097136
|
||||||
|
movdqa xmm0, xmm6
|
||||||
|
pxor xmm0, xmm4
|
||||||
|
movdqu XMMWORD PTR [r13], xmm0
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov ebp, [rsp+152]
|
||||||
|
add ebx, [rsp+148]
|
||||||
|
add ebp, [rsp+156]
|
||||||
|
shl rbp, 32
|
||||||
|
or rbx, rbp
|
||||||
|
|
||||||
|
xor rbx, QWORD PTR [r10+r11]
|
||||||
|
lea r14, QWORD PTR [r10+r11]
|
||||||
|
mov rbp, QWORD PTR [r14+8]
|
||||||
|
|
||||||
|
mov [rsp+160], rbx
|
||||||
|
mov [rsp+168], rdi
|
||||||
|
mov [rsp+176], rbp
|
||||||
|
mov [rsp+184], r10
|
||||||
|
mov r10, rsp
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov esi, [rsp+148]
|
||||||
|
mov edi, [rsp+152]
|
||||||
|
mov ebp, [rsp+156]
|
||||||
|
|
||||||
|
movd esp, xmm7
|
||||||
|
movaps xmm0, xmm7
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r15d, xmm0
|
||||||
|
movd eax, xmm4
|
||||||
|
movd edx, xmm5
|
||||||
|
movaps xmm0, xmm5
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r9d, xmm0
|
||||||
|
|
||||||
|
FN_PREFIX(CryptonightR_soft_aes_template_part2):
|
||||||
|
mov rsp, r10
|
||||||
|
mov [rsp+144], ebx
|
||||||
|
mov [rsp+148], esi
|
||||||
|
mov [rsp+152], edi
|
||||||
|
mov [rsp+156], ebp
|
||||||
|
|
||||||
|
mov edi, edi
|
||||||
|
shl rbp, 32
|
||||||
|
or rbp, rdi
|
||||||
|
xor r8, rbp
|
||||||
|
|
||||||
|
mov ebx, ebx
|
||||||
|
shl rsi, 32
|
||||||
|
or rsi, rbx
|
||||||
|
xor QWORD PTR [rsp+320], rsi
|
||||||
|
|
||||||
|
mov rbx, [rsp+160]
|
||||||
|
mov rdi, [rsp+168]
|
||||||
|
mov rbp, [rsp+176]
|
||||||
|
mov r10, [rsp+184]
|
||||||
|
|
||||||
|
mov r9, r10
|
||||||
|
xor r9, 16
|
||||||
|
mov rcx, r10
|
||||||
|
xor rcx, 32
|
||||||
|
xor r10, 48
|
||||||
|
mov rax, rbx
|
||||||
|
mul rdi
|
||||||
|
movdqu xmm2, XMMWORD PTR [r9+r11]
|
||||||
|
movdqu xmm1, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm2
|
||||||
|
pxor xmm6, xmm1
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
add r8, rdx
|
||||||
|
movdqu xmm0, XMMWORD PTR [r10+r11]
|
||||||
|
pxor xmm6, xmm0
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu XMMWORD PTR [r9+r11], xmm0
|
||||||
|
movdqa xmm5, xmm4
|
||||||
|
mov r9, QWORD PTR [rsp+320]
|
||||||
|
movdqa xmm4, xmm6
|
||||||
|
add r9, rax
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm2
|
||||||
|
movdqu XMMWORD PTR [r10+r11], xmm1
|
||||||
|
mov r10, QWORD PTR [rsp+304]
|
||||||
|
movd r12d, xmm11
|
||||||
|
mov QWORD PTR [r14], r8
|
||||||
|
xor r8, rbx
|
||||||
|
mov rax, r8
|
||||||
|
mov QWORD PTR [r14+8], r9
|
||||||
|
and eax, 2097136
|
||||||
|
xor r9, rbp
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
sub r12d, 1
|
||||||
|
jne FN_PREFIX(CryptonightR_soft_aes_template_mainloop)
|
||||||
|
|
||||||
|
FN_PREFIX(CryptonightR_soft_aes_template_part3):
|
||||||
|
movaps xmm6, XMMWORD PTR [rsp+16]
|
||||||
|
movaps xmm7, XMMWORD PTR [rsp+32]
|
||||||
|
movaps xmm8, XMMWORD PTR [rsp+48]
|
||||||
|
movaps xmm9, XMMWORD PTR [rsp+64]
|
||||||
|
movaps xmm10, XMMWORD PTR [rsp+80]
|
||||||
|
movaps xmm11, XMMWORD PTR [rsp+96]
|
||||||
|
movaps xmm12, XMMWORD PTR [rsp+112]
|
||||||
|
movaps xmm13, XMMWORD PTR [rsp+128]
|
||||||
|
|
||||||
|
add rsp, 232
|
||||||
|
pop r15
|
||||||
|
pop r14
|
||||||
|
pop r13
|
||||||
|
pop r12
|
||||||
|
pop rdi
|
||||||
|
pop rsi
|
||||||
|
pop rbp
|
||||||
|
pop rbx
|
||||||
|
ret
|
||||||
|
FN_PREFIX(CryptonightR_soft_aes_template_end):
|
279
src/crypto/asm/CryptonightR_soft_aes_template_win.inc
Normal file
279
src/crypto/asm/CryptonightR_soft_aes_template_win.inc
Normal file
|
@ -0,0 +1,279 @@
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_part1
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_mainloop
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_part2
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_part3
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_end
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightR_soft_aes_template_part1:
|
||||||
|
mov QWORD PTR [rsp+8], rcx
|
||||||
|
push rbx
|
||||||
|
push rbp
|
||||||
|
push rsi
|
||||||
|
push rdi
|
||||||
|
push r12
|
||||||
|
push r13
|
||||||
|
push r14
|
||||||
|
push r15
|
||||||
|
sub rsp, 232
|
||||||
|
|
||||||
|
mov eax, [rcx+96]
|
||||||
|
mov ebx, [rcx+100]
|
||||||
|
mov esi, [rcx+104]
|
||||||
|
mov edx, [rcx+108]
|
||||||
|
mov [rsp+144], eax
|
||||||
|
mov [rsp+148], ebx
|
||||||
|
mov [rsp+152], esi
|
||||||
|
mov [rsp+156], edx
|
||||||
|
|
||||||
|
mov rax, QWORD PTR [rcx+48]
|
||||||
|
mov r10, rcx
|
||||||
|
xor rax, QWORD PTR [rcx+16]
|
||||||
|
mov r8, QWORD PTR [rcx+32]
|
||||||
|
xor r8, QWORD PTR [rcx]
|
||||||
|
mov r9, QWORD PTR [rcx+40]
|
||||||
|
xor r9, QWORD PTR [rcx+8]
|
||||||
|
movq xmm4, rax
|
||||||
|
mov rdx, QWORD PTR [rcx+56]
|
||||||
|
xor rdx, QWORD PTR [rcx+24]
|
||||||
|
mov r11, QWORD PTR [rcx+224]
|
||||||
|
mov rcx, QWORD PTR [rcx+88]
|
||||||
|
xor rcx, QWORD PTR [r10+72]
|
||||||
|
mov rax, QWORD PTR [r10+80]
|
||||||
|
movq xmm0, rdx
|
||||||
|
xor rax, QWORD PTR [r10+64]
|
||||||
|
|
||||||
|
movaps XMMWORD PTR [rsp+16], xmm6
|
||||||
|
movaps XMMWORD PTR [rsp+32], xmm7
|
||||||
|
movaps XMMWORD PTR [rsp+48], xmm8
|
||||||
|
movaps XMMWORD PTR [rsp+64], xmm9
|
||||||
|
movaps XMMWORD PTR [rsp+80], xmm10
|
||||||
|
movaps XMMWORD PTR [rsp+96], xmm11
|
||||||
|
movaps XMMWORD PTR [rsp+112], xmm12
|
||||||
|
movaps XMMWORD PTR [rsp+128], xmm13
|
||||||
|
|
||||||
|
movq xmm5, rax
|
||||||
|
|
||||||
|
mov rax, r8
|
||||||
|
punpcklqdq xmm4, xmm0
|
||||||
|
and eax, 2097136
|
||||||
|
movq xmm10, QWORD PTR [r10+96]
|
||||||
|
movq xmm0, rcx
|
||||||
|
mov rcx, QWORD PTR [r10+104]
|
||||||
|
xorps xmm9, xmm9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
movq xmm12, r11
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
punpcklqdq xmm5, xmm0
|
||||||
|
movq xmm13, rcx
|
||||||
|
mov r12d, 524288
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightR_soft_aes_template_mainloop:
|
||||||
|
movd xmm11, r12d
|
||||||
|
mov r12, QWORD PTR [r10+272]
|
||||||
|
lea r13, QWORD PTR [rax+r11]
|
||||||
|
mov esi, DWORD PTR [r13]
|
||||||
|
movq xmm0, r9
|
||||||
|
mov r10d, DWORD PTR [r13+4]
|
||||||
|
movq xmm7, r8
|
||||||
|
mov ebp, DWORD PTR [r13+12]
|
||||||
|
mov r14d, DWORD PTR [r13+8]
|
||||||
|
mov rdx, QWORD PTR [rsp+328]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
punpcklqdq xmm7, xmm0
|
||||||
|
mov r15d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
mov edi, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov ebx, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
xor r15d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov eax, r14d
|
||||||
|
shr eax, 8
|
||||||
|
xor edi, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add eax, 256
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
xor ebx, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
xor r9d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add r12, 2048
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
add r10d, 256
|
||||||
|
mov r11d, DWORD PTR [r12+rax*4]
|
||||||
|
xor r11d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r11d, r9d
|
||||||
|
movzx ecx, sil
|
||||||
|
mov r10d, DWORD PTR [r12+r10*4]
|
||||||
|
shr esi, 8
|
||||||
|
add esi, 256
|
||||||
|
xor r10d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
xor r10d, ebx
|
||||||
|
shr ebp, 8
|
||||||
|
movd xmm1, r11d
|
||||||
|
add ebp, 256
|
||||||
|
movq r11, xmm12
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r9d, DWORD PTR [r12+rsi*4]
|
||||||
|
mov eax, DWORD PTR [r12+rbp*4]
|
||||||
|
xor r9d, edi
|
||||||
|
movzx ecx, r14b
|
||||||
|
movd xmm0, r10d
|
||||||
|
movd xmm2, r9d
|
||||||
|
xor eax, DWORD PTR [r12+rcx*4]
|
||||||
|
mov rcx, rdx
|
||||||
|
xor eax, r15d
|
||||||
|
punpckldq xmm2, xmm1
|
||||||
|
xor rcx, 16
|
||||||
|
movd xmm6, eax
|
||||||
|
mov rax, rdx
|
||||||
|
punpckldq xmm6, xmm0
|
||||||
|
xor rax, 32
|
||||||
|
punpckldq xmm6, xmm2
|
||||||
|
xor rdx, 48
|
||||||
|
movdqu xmm2, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm2
|
||||||
|
pxor xmm6, xmm7
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu xmm1, XMMWORD PTR [rax+r11]
|
||||||
|
movdqu xmm0, XMMWORD PTR [rdx+r11]
|
||||||
|
pxor xmm6, xmm1
|
||||||
|
pxor xmm6, xmm0
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm0
|
||||||
|
movdqu XMMWORD PTR [rax+r11], xmm2
|
||||||
|
movq rcx, xmm13
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movdqu XMMWORD PTR [rdx+r11], xmm1
|
||||||
|
movq rdi, xmm6
|
||||||
|
mov r10, rdi
|
||||||
|
and r10d, 2097136
|
||||||
|
movdqa xmm0, xmm6
|
||||||
|
pxor xmm0, xmm4
|
||||||
|
movdqu XMMWORD PTR [r13], xmm0
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov ebp, [rsp+152]
|
||||||
|
add ebx, [rsp+148]
|
||||||
|
add ebp, [rsp+156]
|
||||||
|
shl rbp, 32
|
||||||
|
or rbx, rbp
|
||||||
|
|
||||||
|
xor rbx, QWORD PTR [r10+r11]
|
||||||
|
lea r14, QWORD PTR [r10+r11]
|
||||||
|
mov rbp, QWORD PTR [r14+8]
|
||||||
|
|
||||||
|
mov [rsp+160], rbx
|
||||||
|
mov [rsp+168], rdi
|
||||||
|
mov [rsp+176], rbp
|
||||||
|
mov [rsp+184], r10
|
||||||
|
mov r10, rsp
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov esi, [rsp+148]
|
||||||
|
mov edi, [rsp+152]
|
||||||
|
mov ebp, [rsp+156]
|
||||||
|
|
||||||
|
movd esp, xmm7
|
||||||
|
movaps xmm0, xmm7
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r15d, xmm0
|
||||||
|
movd eax, xmm4
|
||||||
|
movd edx, xmm5
|
||||||
|
movaps xmm0, xmm5
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r9d, xmm0
|
||||||
|
|
||||||
|
CryptonightR_soft_aes_template_part2:
|
||||||
|
mov rsp, r10
|
||||||
|
mov [rsp+144], ebx
|
||||||
|
mov [rsp+148], esi
|
||||||
|
mov [rsp+152], edi
|
||||||
|
mov [rsp+156], ebp
|
||||||
|
|
||||||
|
mov edi, edi
|
||||||
|
shl rbp, 32
|
||||||
|
or rbp, rdi
|
||||||
|
xor r8, rbp
|
||||||
|
|
||||||
|
mov ebx, ebx
|
||||||
|
shl rsi, 32
|
||||||
|
or rsi, rbx
|
||||||
|
xor QWORD PTR [rsp+320], rsi
|
||||||
|
|
||||||
|
mov rbx, [rsp+160]
|
||||||
|
mov rdi, [rsp+168]
|
||||||
|
mov rbp, [rsp+176]
|
||||||
|
mov r10, [rsp+184]
|
||||||
|
|
||||||
|
mov r9, r10
|
||||||
|
xor r9, 16
|
||||||
|
mov rcx, r10
|
||||||
|
xor rcx, 32
|
||||||
|
xor r10, 48
|
||||||
|
mov rax, rbx
|
||||||
|
mul rdi
|
||||||
|
movdqu xmm2, XMMWORD PTR [r9+r11]
|
||||||
|
movdqu xmm1, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm2
|
||||||
|
pxor xmm6, xmm1
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
add r8, rdx
|
||||||
|
movdqu xmm0, XMMWORD PTR [r10+r11]
|
||||||
|
pxor xmm6, xmm0
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu XMMWORD PTR [r9+r11], xmm0
|
||||||
|
movdqa xmm5, xmm4
|
||||||
|
mov r9, QWORD PTR [rsp+320]
|
||||||
|
movdqa xmm4, xmm6
|
||||||
|
add r9, rax
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm2
|
||||||
|
movdqu XMMWORD PTR [r10+r11], xmm1
|
||||||
|
mov r10, QWORD PTR [rsp+304]
|
||||||
|
movd r12d, xmm11
|
||||||
|
mov QWORD PTR [r14], r8
|
||||||
|
xor r8, rbx
|
||||||
|
mov rax, r8
|
||||||
|
mov QWORD PTR [r14+8], r9
|
||||||
|
and eax, 2097136
|
||||||
|
xor r9, rbp
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
sub r12d, 1
|
||||||
|
jne CryptonightR_soft_aes_template_mainloop
|
||||||
|
|
||||||
|
CryptonightR_soft_aes_template_part3:
|
||||||
|
movaps xmm6, XMMWORD PTR [rsp+16]
|
||||||
|
movaps xmm7, XMMWORD PTR [rsp+32]
|
||||||
|
movaps xmm8, XMMWORD PTR [rsp+48]
|
||||||
|
movaps xmm9, XMMWORD PTR [rsp+64]
|
||||||
|
movaps xmm10, XMMWORD PTR [rsp+80]
|
||||||
|
movaps xmm11, XMMWORD PTR [rsp+96]
|
||||||
|
movaps xmm12, XMMWORD PTR [rsp+112]
|
||||||
|
movaps xmm13, XMMWORD PTR [rsp+128]
|
||||||
|
|
||||||
|
add rsp, 232
|
||||||
|
pop r15
|
||||||
|
pop r14
|
||||||
|
pop r13
|
||||||
|
pop r12
|
||||||
|
pop rdi
|
||||||
|
pop rsi
|
||||||
|
pop rbp
|
||||||
|
pop rbx
|
||||||
|
ret
|
||||||
|
CryptonightR_soft_aes_template_end:
|
|
@ -531,6 +531,8 @@ PUBLIC FN_PREFIX(CryptonightR_instruction_mov256)
|
||||||
|
|
||||||
#include "CryptonightWOW_template.inc"
|
#include "CryptonightWOW_template.inc"
|
||||||
#include "CryptonightR_template.inc"
|
#include "CryptonightR_template.inc"
|
||||||
|
#include "CryptonightWOW_soft_aes_template.inc"
|
||||||
|
#include "CryptonightR_soft_aes_template.inc"
|
||||||
|
|
||||||
FN_PREFIX(CryptonightR_instruction0):
|
FN_PREFIX(CryptonightR_instruction0):
|
||||||
imul rbx, rbx
|
imul rbx, rbx
|
||||||
|
|
|
@ -518,6 +518,8 @@ PUBLIC CryptonightR_instruction_mov256
|
||||||
|
|
||||||
INCLUDE CryptonightWOW_template_win.inc
|
INCLUDE CryptonightWOW_template_win.inc
|
||||||
INCLUDE CryptonightR_template_win.inc
|
INCLUDE CryptonightR_template_win.inc
|
||||||
|
INCLUDE CryptonightWOW_soft_aes_template_win.inc
|
||||||
|
INCLUDE CryptonightR_soft_aes_template_win.inc
|
||||||
|
|
||||||
CryptonightR_instruction0:
|
CryptonightR_instruction0:
|
||||||
imul rbx, rbx
|
imul rbx, rbx
|
||||||
|
|
|
@ -26,6 +26,30 @@ extern "C"
|
||||||
void CryptonightR_template_double_part4();
|
void CryptonightR_template_double_part4();
|
||||||
void CryptonightR_template_double_end();
|
void CryptonightR_template_double_end();
|
||||||
|
|
||||||
|
void CryptonightWOW_soft_aes_template_part1();
|
||||||
|
void CryptonightWOW_soft_aes_template_mainloop();
|
||||||
|
void CryptonightWOW_soft_aes_template_part2();
|
||||||
|
void CryptonightWOW_soft_aes_template_part3();
|
||||||
|
void CryptonightWOW_soft_aes_template_end();
|
||||||
|
void CryptonightWOW_soft_aes_template_double_part1();
|
||||||
|
void CryptonightWOW_soft_aes_template_double_mainloop();
|
||||||
|
void CryptonightWOW_soft_aes_template_double_part2();
|
||||||
|
void CryptonightWOW_soft_aes_template_double_part3();
|
||||||
|
void CryptonightWOW_soft_aes_template_double_part4();
|
||||||
|
void CryptonightWOW_soft_aes_template_double_end();
|
||||||
|
|
||||||
|
void CryptonightR_soft_aes_template_part1();
|
||||||
|
void CryptonightR_soft_aes_template_mainloop();
|
||||||
|
void CryptonightR_soft_aes_template_part2();
|
||||||
|
void CryptonightR_soft_aes_template_part3();
|
||||||
|
void CryptonightR_soft_aes_template_end();
|
||||||
|
void CryptonightR_soft_aes_template_double_part1();
|
||||||
|
void CryptonightR_soft_aes_template_double_mainloop();
|
||||||
|
void CryptonightR_soft_aes_template_double_part2();
|
||||||
|
void CryptonightR_soft_aes_template_double_part3();
|
||||||
|
void CryptonightR_soft_aes_template_double_part4();
|
||||||
|
void CryptonightR_soft_aes_template_double_end();
|
||||||
|
|
||||||
void CryptonightR_instruction0();
|
void CryptonightR_instruction0();
|
||||||
void CryptonightR_instruction1();
|
void CryptonightR_instruction1();
|
||||||
void CryptonightR_instruction2();
|
void CryptonightR_instruction2();
|
||||||
|
|
266
src/crypto/asm/CryptonightWOW_soft_aes_template.inc
Normal file
266
src/crypto/asm/CryptonightWOW_soft_aes_template.inc
Normal file
|
@ -0,0 +1,266 @@
|
||||||
|
PUBLIC FN_PREFIX(CryptonightWOW_soft_aes_template_part1)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightWOW_soft_aes_template_mainloop)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightWOW_soft_aes_template_part2)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightWOW_soft_aes_template_part3)
|
||||||
|
PUBLIC FN_PREFIX(CryptonightWOW_soft_aes_template_end)
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
FN_PREFIX(CryptonightWOW_soft_aes_template_part1):
|
||||||
|
mov QWORD PTR [rsp+8], rcx
|
||||||
|
push rbx
|
||||||
|
push rbp
|
||||||
|
push rsi
|
||||||
|
push rdi
|
||||||
|
push r12
|
||||||
|
push r13
|
||||||
|
push r14
|
||||||
|
push r15
|
||||||
|
sub rsp, 232
|
||||||
|
|
||||||
|
mov eax, [rcx+96]
|
||||||
|
mov ebx, [rcx+100]
|
||||||
|
mov esi, [rcx+104]
|
||||||
|
mov edx, [rcx+108]
|
||||||
|
mov [rsp+144], eax
|
||||||
|
mov [rsp+148], ebx
|
||||||
|
mov [rsp+152], esi
|
||||||
|
mov [rsp+156], edx
|
||||||
|
|
||||||
|
mov rax, QWORD PTR [rcx+48]
|
||||||
|
mov r10, rcx
|
||||||
|
xor rax, QWORD PTR [rcx+16]
|
||||||
|
mov r8, QWORD PTR [rcx+32]
|
||||||
|
xor r8, QWORD PTR [rcx]
|
||||||
|
mov r9, QWORD PTR [rcx+40]
|
||||||
|
xor r9, QWORD PTR [rcx+8]
|
||||||
|
movq xmm4, rax
|
||||||
|
mov rdx, QWORD PTR [rcx+56]
|
||||||
|
xor rdx, QWORD PTR [rcx+24]
|
||||||
|
mov r11, QWORD PTR [rcx+224]
|
||||||
|
mov rcx, QWORD PTR [rcx+88]
|
||||||
|
xor rcx, QWORD PTR [r10+72]
|
||||||
|
mov rax, QWORD PTR [r10+80]
|
||||||
|
movq xmm0, rdx
|
||||||
|
xor rax, QWORD PTR [r10+64]
|
||||||
|
|
||||||
|
movaps XMMWORD PTR [rsp+16], xmm6
|
||||||
|
movaps XMMWORD PTR [rsp+32], xmm7
|
||||||
|
movaps XMMWORD PTR [rsp+48], xmm8
|
||||||
|
movaps XMMWORD PTR [rsp+64], xmm9
|
||||||
|
movaps XMMWORD PTR [rsp+80], xmm10
|
||||||
|
movaps XMMWORD PTR [rsp+96], xmm11
|
||||||
|
movaps XMMWORD PTR [rsp+112], xmm12
|
||||||
|
movaps XMMWORD PTR [rsp+128], xmm13
|
||||||
|
|
||||||
|
movq xmm5, rax
|
||||||
|
|
||||||
|
mov rax, r8
|
||||||
|
punpcklqdq xmm4, xmm0
|
||||||
|
and eax, 2097136
|
||||||
|
movq xmm10, QWORD PTR [r10+96]
|
||||||
|
movq xmm0, rcx
|
||||||
|
mov rcx, QWORD PTR [r10+104]
|
||||||
|
xorps xmm9, xmm9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
movq xmm12, r11
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
punpcklqdq xmm5, xmm0
|
||||||
|
movq xmm13, rcx
|
||||||
|
mov r12d, 524288
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
FN_PREFIX(CryptonightWOW_soft_aes_template_mainloop):
|
||||||
|
movd xmm11, r12d
|
||||||
|
mov r12, QWORD PTR [r10+272]
|
||||||
|
lea r13, QWORD PTR [rax+r11]
|
||||||
|
mov esi, DWORD PTR [r13]
|
||||||
|
movq xmm0, r9
|
||||||
|
mov r10d, DWORD PTR [r13+4]
|
||||||
|
movq xmm7, r8
|
||||||
|
mov ebp, DWORD PTR [r13+12]
|
||||||
|
mov r14d, DWORD PTR [r13+8]
|
||||||
|
mov rdx, QWORD PTR [rsp+328]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
punpcklqdq xmm7, xmm0
|
||||||
|
mov r15d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
mov edi, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov ebx, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
xor r15d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov eax, r14d
|
||||||
|
shr eax, 8
|
||||||
|
xor edi, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add eax, 256
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
xor ebx, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
xor r9d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add r12, 2048
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
add r10d, 256
|
||||||
|
mov r11d, DWORD PTR [r12+rax*4]
|
||||||
|
xor r11d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r11d, r9d
|
||||||
|
movzx ecx, sil
|
||||||
|
mov r10d, DWORD PTR [r12+r10*4]
|
||||||
|
shr esi, 8
|
||||||
|
add esi, 256
|
||||||
|
xor r10d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
xor r10d, ebx
|
||||||
|
shr ebp, 8
|
||||||
|
movd xmm1, r11d
|
||||||
|
add ebp, 256
|
||||||
|
movq r11, xmm12
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r9d, DWORD PTR [r12+rsi*4]
|
||||||
|
mov eax, DWORD PTR [r12+rbp*4]
|
||||||
|
xor r9d, edi
|
||||||
|
movzx ecx, r14b
|
||||||
|
movd xmm0, r10d
|
||||||
|
movd xmm2, r9d
|
||||||
|
xor eax, DWORD PTR [r12+rcx*4]
|
||||||
|
mov rcx, rdx
|
||||||
|
xor eax, r15d
|
||||||
|
punpckldq xmm2, xmm1
|
||||||
|
xor rcx, 16
|
||||||
|
movd xmm6, eax
|
||||||
|
mov rax, rdx
|
||||||
|
punpckldq xmm6, xmm0
|
||||||
|
xor rax, 32
|
||||||
|
punpckldq xmm6, xmm2
|
||||||
|
xor rdx, 48
|
||||||
|
movdqu xmm2, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm7
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu xmm1, XMMWORD PTR [rax+r11]
|
||||||
|
movdqu xmm0, XMMWORD PTR [rdx+r11]
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm0
|
||||||
|
movdqu XMMWORD PTR [rax+r11], xmm2
|
||||||
|
movq rcx, xmm13
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movdqu XMMWORD PTR [rdx+r11], xmm1
|
||||||
|
movq rdi, xmm6
|
||||||
|
mov r10, rdi
|
||||||
|
and r10d, 2097136
|
||||||
|
movdqa xmm0, xmm6
|
||||||
|
pxor xmm0, xmm4
|
||||||
|
movdqu XMMWORD PTR [r13], xmm0
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov ebp, [rsp+152]
|
||||||
|
add ebx, [rsp+148]
|
||||||
|
add ebp, [rsp+156]
|
||||||
|
shl rbp, 32
|
||||||
|
or rbx, rbp
|
||||||
|
|
||||||
|
xor rbx, QWORD PTR [r10+r11]
|
||||||
|
lea r14, QWORD PTR [r10+r11]
|
||||||
|
mov rbp, QWORD PTR [r14+8]
|
||||||
|
|
||||||
|
mov [rsp+160], rbx
|
||||||
|
mov [rsp+168], rdi
|
||||||
|
mov [rsp+176], rbp
|
||||||
|
mov [rsp+184], r10
|
||||||
|
mov r10, rsp
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov esi, [rsp+148]
|
||||||
|
mov edi, [rsp+152]
|
||||||
|
mov ebp, [rsp+156]
|
||||||
|
|
||||||
|
movd esp, xmm7
|
||||||
|
movaps xmm0, xmm7
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r15d, xmm0
|
||||||
|
movd eax, xmm4
|
||||||
|
movd edx, xmm5
|
||||||
|
|
||||||
|
FN_PREFIX(CryptonightWOW_soft_aes_template_part2):
|
||||||
|
mov rsp, r10
|
||||||
|
mov [rsp+144], ebx
|
||||||
|
mov [rsp+148], esi
|
||||||
|
mov [rsp+152], edi
|
||||||
|
mov [rsp+156], ebp
|
||||||
|
|
||||||
|
mov rbx, [rsp+160]
|
||||||
|
mov rdi, [rsp+168]
|
||||||
|
mov rbp, [rsp+176]
|
||||||
|
mov r10, [rsp+184]
|
||||||
|
|
||||||
|
mov r9, r10
|
||||||
|
xor r9, 16
|
||||||
|
mov rcx, r10
|
||||||
|
xor rcx, 32
|
||||||
|
xor r10, 48
|
||||||
|
mov rax, rbx
|
||||||
|
mul rdi
|
||||||
|
movdqu xmm2, XMMWORD PTR [r9+r11]
|
||||||
|
movdqu xmm1, XMMWORD PTR [rcx+r11]
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movq xmm0, rax
|
||||||
|
movq xmm3, rdx
|
||||||
|
xor rax, QWORD PTR [r11+rcx+8]
|
||||||
|
xor rdx, QWORD PTR [rcx+r11]
|
||||||
|
punpcklqdq xmm3, xmm0
|
||||||
|
add r8, rdx
|
||||||
|
movdqu xmm0, XMMWORD PTR [r10+r11]
|
||||||
|
pxor xmm2, xmm3
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu XMMWORD PTR [r9+r11], xmm0
|
||||||
|
movdqa xmm5, xmm4
|
||||||
|
mov r9, QWORD PTR [rsp+320]
|
||||||
|
movdqa xmm4, xmm6
|
||||||
|
add r9, rax
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm2
|
||||||
|
movdqu XMMWORD PTR [r10+r11], xmm1
|
||||||
|
mov r10, QWORD PTR [rsp+304]
|
||||||
|
movd r12d, xmm11
|
||||||
|
mov QWORD PTR [r14], r8
|
||||||
|
xor r8, rbx
|
||||||
|
mov rax, r8
|
||||||
|
mov QWORD PTR [r14+8], r9
|
||||||
|
and eax, 2097136
|
||||||
|
xor r9, rbp
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
sub r12d, 1
|
||||||
|
jne FN_PREFIX(CryptonightWOW_soft_aes_template_mainloop)
|
||||||
|
|
||||||
|
FN_PREFIX(CryptonightWOW_soft_aes_template_part3):
|
||||||
|
movaps xmm6, XMMWORD PTR [rsp+16]
|
||||||
|
movaps xmm7, XMMWORD PTR [rsp+32]
|
||||||
|
movaps xmm8, XMMWORD PTR [rsp+48]
|
||||||
|
movaps xmm9, XMMWORD PTR [rsp+64]
|
||||||
|
movaps xmm10, XMMWORD PTR [rsp+80]
|
||||||
|
movaps xmm11, XMMWORD PTR [rsp+96]
|
||||||
|
movaps xmm12, XMMWORD PTR [rsp+112]
|
||||||
|
movaps xmm13, XMMWORD PTR [rsp+128]
|
||||||
|
|
||||||
|
add rsp, 232
|
||||||
|
pop r15
|
||||||
|
pop r14
|
||||||
|
pop r13
|
||||||
|
pop r12
|
||||||
|
pop rdi
|
||||||
|
pop rsi
|
||||||
|
pop rbp
|
||||||
|
pop rbx
|
||||||
|
ret
|
||||||
|
FN_PREFIX(CryptonightWOW_soft_aes_template_end):
|
266
src/crypto/asm/CryptonightWOW_soft_aes_template_win.inc
Normal file
266
src/crypto/asm/CryptonightWOW_soft_aes_template_win.inc
Normal file
|
@ -0,0 +1,266 @@
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_part1
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_mainloop
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_part2
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_part3
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_end
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightWOW_soft_aes_template_part1:
|
||||||
|
mov QWORD PTR [rsp+8], rcx
|
||||||
|
push rbx
|
||||||
|
push rbp
|
||||||
|
push rsi
|
||||||
|
push rdi
|
||||||
|
push r12
|
||||||
|
push r13
|
||||||
|
push r14
|
||||||
|
push r15
|
||||||
|
sub rsp, 232
|
||||||
|
|
||||||
|
mov eax, [rcx+96]
|
||||||
|
mov ebx, [rcx+100]
|
||||||
|
mov esi, [rcx+104]
|
||||||
|
mov edx, [rcx+108]
|
||||||
|
mov [rsp+144], eax
|
||||||
|
mov [rsp+148], ebx
|
||||||
|
mov [rsp+152], esi
|
||||||
|
mov [rsp+156], edx
|
||||||
|
|
||||||
|
mov rax, QWORD PTR [rcx+48]
|
||||||
|
mov r10, rcx
|
||||||
|
xor rax, QWORD PTR [rcx+16]
|
||||||
|
mov r8, QWORD PTR [rcx+32]
|
||||||
|
xor r8, QWORD PTR [rcx]
|
||||||
|
mov r9, QWORD PTR [rcx+40]
|
||||||
|
xor r9, QWORD PTR [rcx+8]
|
||||||
|
movq xmm4, rax
|
||||||
|
mov rdx, QWORD PTR [rcx+56]
|
||||||
|
xor rdx, QWORD PTR [rcx+24]
|
||||||
|
mov r11, QWORD PTR [rcx+224]
|
||||||
|
mov rcx, QWORD PTR [rcx+88]
|
||||||
|
xor rcx, QWORD PTR [r10+72]
|
||||||
|
mov rax, QWORD PTR [r10+80]
|
||||||
|
movq xmm0, rdx
|
||||||
|
xor rax, QWORD PTR [r10+64]
|
||||||
|
|
||||||
|
movaps XMMWORD PTR [rsp+16], xmm6
|
||||||
|
movaps XMMWORD PTR [rsp+32], xmm7
|
||||||
|
movaps XMMWORD PTR [rsp+48], xmm8
|
||||||
|
movaps XMMWORD PTR [rsp+64], xmm9
|
||||||
|
movaps XMMWORD PTR [rsp+80], xmm10
|
||||||
|
movaps XMMWORD PTR [rsp+96], xmm11
|
||||||
|
movaps XMMWORD PTR [rsp+112], xmm12
|
||||||
|
movaps XMMWORD PTR [rsp+128], xmm13
|
||||||
|
|
||||||
|
movq xmm5, rax
|
||||||
|
|
||||||
|
mov rax, r8
|
||||||
|
punpcklqdq xmm4, xmm0
|
||||||
|
and eax, 2097136
|
||||||
|
movq xmm10, QWORD PTR [r10+96]
|
||||||
|
movq xmm0, rcx
|
||||||
|
mov rcx, QWORD PTR [r10+104]
|
||||||
|
xorps xmm9, xmm9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
movq xmm12, r11
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
punpcklqdq xmm5, xmm0
|
||||||
|
movq xmm13, rcx
|
||||||
|
mov r12d, 524288
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightWOW_soft_aes_template_mainloop:
|
||||||
|
movd xmm11, r12d
|
||||||
|
mov r12, QWORD PTR [r10+272]
|
||||||
|
lea r13, QWORD PTR [rax+r11]
|
||||||
|
mov esi, DWORD PTR [r13]
|
||||||
|
movq xmm0, r9
|
||||||
|
mov r10d, DWORD PTR [r13+4]
|
||||||
|
movq xmm7, r8
|
||||||
|
mov ebp, DWORD PTR [r13+12]
|
||||||
|
mov r14d, DWORD PTR [r13+8]
|
||||||
|
mov rdx, QWORD PTR [rsp+328]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
punpcklqdq xmm7, xmm0
|
||||||
|
mov r15d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
mov edi, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov ebx, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
xor r15d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov eax, r14d
|
||||||
|
shr eax, 8
|
||||||
|
xor edi, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add eax, 256
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
xor ebx, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
xor r9d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add r12, 2048
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
add r10d, 256
|
||||||
|
mov r11d, DWORD PTR [r12+rax*4]
|
||||||
|
xor r11d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r11d, r9d
|
||||||
|
movzx ecx, sil
|
||||||
|
mov r10d, DWORD PTR [r12+r10*4]
|
||||||
|
shr esi, 8
|
||||||
|
add esi, 256
|
||||||
|
xor r10d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
xor r10d, ebx
|
||||||
|
shr ebp, 8
|
||||||
|
movd xmm1, r11d
|
||||||
|
add ebp, 256
|
||||||
|
movq r11, xmm12
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r9d, DWORD PTR [r12+rsi*4]
|
||||||
|
mov eax, DWORD PTR [r12+rbp*4]
|
||||||
|
xor r9d, edi
|
||||||
|
movzx ecx, r14b
|
||||||
|
movd xmm0, r10d
|
||||||
|
movd xmm2, r9d
|
||||||
|
xor eax, DWORD PTR [r12+rcx*4]
|
||||||
|
mov rcx, rdx
|
||||||
|
xor eax, r15d
|
||||||
|
punpckldq xmm2, xmm1
|
||||||
|
xor rcx, 16
|
||||||
|
movd xmm6, eax
|
||||||
|
mov rax, rdx
|
||||||
|
punpckldq xmm6, xmm0
|
||||||
|
xor rax, 32
|
||||||
|
punpckldq xmm6, xmm2
|
||||||
|
xor rdx, 48
|
||||||
|
movdqu xmm2, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm7
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu xmm1, XMMWORD PTR [rax+r11]
|
||||||
|
movdqu xmm0, XMMWORD PTR [rdx+r11]
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm0
|
||||||
|
movdqu XMMWORD PTR [rax+r11], xmm2
|
||||||
|
movq rcx, xmm13
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movdqu XMMWORD PTR [rdx+r11], xmm1
|
||||||
|
movq rdi, xmm6
|
||||||
|
mov r10, rdi
|
||||||
|
and r10d, 2097136
|
||||||
|
movdqa xmm0, xmm6
|
||||||
|
pxor xmm0, xmm4
|
||||||
|
movdqu XMMWORD PTR [r13], xmm0
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov ebp, [rsp+152]
|
||||||
|
add ebx, [rsp+148]
|
||||||
|
add ebp, [rsp+156]
|
||||||
|
shl rbp, 32
|
||||||
|
or rbx, rbp
|
||||||
|
|
||||||
|
xor rbx, QWORD PTR [r10+r11]
|
||||||
|
lea r14, QWORD PTR [r10+r11]
|
||||||
|
mov rbp, QWORD PTR [r14+8]
|
||||||
|
|
||||||
|
mov [rsp+160], rbx
|
||||||
|
mov [rsp+168], rdi
|
||||||
|
mov [rsp+176], rbp
|
||||||
|
mov [rsp+184], r10
|
||||||
|
mov r10, rsp
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov esi, [rsp+148]
|
||||||
|
mov edi, [rsp+152]
|
||||||
|
mov ebp, [rsp+156]
|
||||||
|
|
||||||
|
movd esp, xmm7
|
||||||
|
movaps xmm0, xmm7
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r15d, xmm0
|
||||||
|
movd eax, xmm4
|
||||||
|
movd edx, xmm5
|
||||||
|
|
||||||
|
CryptonightWOW_soft_aes_template_part2:
|
||||||
|
mov rsp, r10
|
||||||
|
mov [rsp+144], ebx
|
||||||
|
mov [rsp+148], esi
|
||||||
|
mov [rsp+152], edi
|
||||||
|
mov [rsp+156], ebp
|
||||||
|
|
||||||
|
mov rbx, [rsp+160]
|
||||||
|
mov rdi, [rsp+168]
|
||||||
|
mov rbp, [rsp+176]
|
||||||
|
mov r10, [rsp+184]
|
||||||
|
|
||||||
|
mov r9, r10
|
||||||
|
xor r9, 16
|
||||||
|
mov rcx, r10
|
||||||
|
xor rcx, 32
|
||||||
|
xor r10, 48
|
||||||
|
mov rax, rbx
|
||||||
|
mul rdi
|
||||||
|
movdqu xmm2, XMMWORD PTR [r9+r11]
|
||||||
|
movdqu xmm1, XMMWORD PTR [rcx+r11]
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movq xmm0, rax
|
||||||
|
movq xmm3, rdx
|
||||||
|
xor rax, QWORD PTR [r11+rcx+8]
|
||||||
|
xor rdx, QWORD PTR [rcx+r11]
|
||||||
|
punpcklqdq xmm3, xmm0
|
||||||
|
add r8, rdx
|
||||||
|
movdqu xmm0, XMMWORD PTR [r10+r11]
|
||||||
|
pxor xmm2, xmm3
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu XMMWORD PTR [r9+r11], xmm0
|
||||||
|
movdqa xmm5, xmm4
|
||||||
|
mov r9, QWORD PTR [rsp+320]
|
||||||
|
movdqa xmm4, xmm6
|
||||||
|
add r9, rax
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm2
|
||||||
|
movdqu XMMWORD PTR [r10+r11], xmm1
|
||||||
|
mov r10, QWORD PTR [rsp+304]
|
||||||
|
movd r12d, xmm11
|
||||||
|
mov QWORD PTR [r14], r8
|
||||||
|
xor r8, rbx
|
||||||
|
mov rax, r8
|
||||||
|
mov QWORD PTR [r14+8], r9
|
||||||
|
and eax, 2097136
|
||||||
|
xor r9, rbp
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
sub r12d, 1
|
||||||
|
jne CryptonightWOW_soft_aes_template_mainloop
|
||||||
|
|
||||||
|
CryptonightWOW_soft_aes_template_part3:
|
||||||
|
movaps xmm6, XMMWORD PTR [rsp+16]
|
||||||
|
movaps xmm7, XMMWORD PTR [rsp+32]
|
||||||
|
movaps xmm8, XMMWORD PTR [rsp+48]
|
||||||
|
movaps xmm9, XMMWORD PTR [rsp+64]
|
||||||
|
movaps xmm10, XMMWORD PTR [rsp+80]
|
||||||
|
movaps xmm11, XMMWORD PTR [rsp+96]
|
||||||
|
movaps xmm12, XMMWORD PTR [rsp+112]
|
||||||
|
movaps xmm13, XMMWORD PTR [rsp+128]
|
||||||
|
|
||||||
|
add rsp, 232
|
||||||
|
pop r15
|
||||||
|
pop r14
|
||||||
|
pop r13
|
||||||
|
pop r12
|
||||||
|
pop rdi
|
||||||
|
pop rsi
|
||||||
|
pop rbp
|
||||||
|
pop rbx
|
||||||
|
ret
|
||||||
|
CryptonightWOW_soft_aes_template_end:
|
279
src/crypto/asm/win64/CryptonightR_soft_aes_template_win.inc
Normal file
279
src/crypto/asm/win64/CryptonightR_soft_aes_template_win.inc
Normal file
|
@ -0,0 +1,279 @@
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_part1
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_mainloop
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_part2
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_part3
|
||||||
|
PUBLIC CryptonightR_soft_aes_template_end
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightR_soft_aes_template_part1:
|
||||||
|
mov QWORD PTR [rsp+8], rcx
|
||||||
|
push rbx
|
||||||
|
push rbp
|
||||||
|
push rsi
|
||||||
|
push rdi
|
||||||
|
push r12
|
||||||
|
push r13
|
||||||
|
push r14
|
||||||
|
push r15
|
||||||
|
sub rsp, 232
|
||||||
|
|
||||||
|
mov eax, [rcx+96]
|
||||||
|
mov ebx, [rcx+100]
|
||||||
|
mov esi, [rcx+104]
|
||||||
|
mov edx, [rcx+108]
|
||||||
|
mov [rsp+144], eax
|
||||||
|
mov [rsp+148], ebx
|
||||||
|
mov [rsp+152], esi
|
||||||
|
mov [rsp+156], edx
|
||||||
|
|
||||||
|
mov rax, QWORD PTR [rcx+48]
|
||||||
|
mov r10, rcx
|
||||||
|
xor rax, QWORD PTR [rcx+16]
|
||||||
|
mov r8, QWORD PTR [rcx+32]
|
||||||
|
xor r8, QWORD PTR [rcx]
|
||||||
|
mov r9, QWORD PTR [rcx+40]
|
||||||
|
xor r9, QWORD PTR [rcx+8]
|
||||||
|
movd xmm4, rax
|
||||||
|
mov rdx, QWORD PTR [rcx+56]
|
||||||
|
xor rdx, QWORD PTR [rcx+24]
|
||||||
|
mov r11, QWORD PTR [rcx+224]
|
||||||
|
mov rcx, QWORD PTR [rcx+88]
|
||||||
|
xor rcx, QWORD PTR [r10+72]
|
||||||
|
mov rax, QWORD PTR [r10+80]
|
||||||
|
movd xmm0, rdx
|
||||||
|
xor rax, QWORD PTR [r10+64]
|
||||||
|
|
||||||
|
movaps XMMWORD PTR [rsp+16], xmm6
|
||||||
|
movaps XMMWORD PTR [rsp+32], xmm7
|
||||||
|
movaps XMMWORD PTR [rsp+48], xmm8
|
||||||
|
movaps XMMWORD PTR [rsp+64], xmm9
|
||||||
|
movaps XMMWORD PTR [rsp+80], xmm10
|
||||||
|
movaps XMMWORD PTR [rsp+96], xmm11
|
||||||
|
movaps XMMWORD PTR [rsp+112], xmm12
|
||||||
|
movaps XMMWORD PTR [rsp+128], xmm13
|
||||||
|
|
||||||
|
movd xmm5, rax
|
||||||
|
|
||||||
|
mov rax, r8
|
||||||
|
punpcklqdq xmm4, xmm0
|
||||||
|
and eax, 2097136
|
||||||
|
movd xmm10, QWORD PTR [r10+96]
|
||||||
|
movd xmm0, rcx
|
||||||
|
mov rcx, QWORD PTR [r10+104]
|
||||||
|
xorps xmm9, xmm9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
movd xmm12, r11
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
punpcklqdq xmm5, xmm0
|
||||||
|
movd xmm13, rcx
|
||||||
|
mov r12d, 524288
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightR_soft_aes_template_mainloop:
|
||||||
|
movd xmm11, r12d
|
||||||
|
mov r12, QWORD PTR [r10+272]
|
||||||
|
lea r13, QWORD PTR [rax+r11]
|
||||||
|
mov esi, DWORD PTR [r13]
|
||||||
|
movd xmm0, r9
|
||||||
|
mov r10d, DWORD PTR [r13+4]
|
||||||
|
movd xmm7, r8
|
||||||
|
mov ebp, DWORD PTR [r13+12]
|
||||||
|
mov r14d, DWORD PTR [r13+8]
|
||||||
|
mov rdx, QWORD PTR [rsp+328]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
punpcklqdq xmm7, xmm0
|
||||||
|
mov r15d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
mov edi, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov ebx, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
xor r15d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov eax, r14d
|
||||||
|
shr eax, 8
|
||||||
|
xor edi, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add eax, 256
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
xor ebx, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
xor r9d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add r12, 2048
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
add r10d, 256
|
||||||
|
mov r11d, DWORD PTR [r12+rax*4]
|
||||||
|
xor r11d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r11d, r9d
|
||||||
|
movzx ecx, sil
|
||||||
|
mov r10d, DWORD PTR [r12+r10*4]
|
||||||
|
shr esi, 8
|
||||||
|
add esi, 256
|
||||||
|
xor r10d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
xor r10d, ebx
|
||||||
|
shr ebp, 8
|
||||||
|
movd xmm1, r11d
|
||||||
|
add ebp, 256
|
||||||
|
movd r11, xmm12
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r9d, DWORD PTR [r12+rsi*4]
|
||||||
|
mov eax, DWORD PTR [r12+rbp*4]
|
||||||
|
xor r9d, edi
|
||||||
|
movzx ecx, r14b
|
||||||
|
movd xmm0, r10d
|
||||||
|
movd xmm2, r9d
|
||||||
|
xor eax, DWORD PTR [r12+rcx*4]
|
||||||
|
mov rcx, rdx
|
||||||
|
xor eax, r15d
|
||||||
|
punpckldq xmm2, xmm1
|
||||||
|
xor rcx, 16
|
||||||
|
movd xmm6, eax
|
||||||
|
mov rax, rdx
|
||||||
|
punpckldq xmm6, xmm0
|
||||||
|
xor rax, 32
|
||||||
|
punpckldq xmm6, xmm2
|
||||||
|
xor rdx, 48
|
||||||
|
movdqu xmm2, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm2
|
||||||
|
pxor xmm6, xmm7
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu xmm1, XMMWORD PTR [rax+r11]
|
||||||
|
movdqu xmm0, XMMWORD PTR [rdx+r11]
|
||||||
|
pxor xmm6, xmm1
|
||||||
|
pxor xmm6, xmm0
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm0
|
||||||
|
movdqu XMMWORD PTR [rax+r11], xmm2
|
||||||
|
movd rcx, xmm13
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movdqu XMMWORD PTR [rdx+r11], xmm1
|
||||||
|
movd rdi, xmm6
|
||||||
|
mov r10, rdi
|
||||||
|
and r10d, 2097136
|
||||||
|
movdqa xmm0, xmm6
|
||||||
|
pxor xmm0, xmm4
|
||||||
|
movdqu XMMWORD PTR [r13], xmm0
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov ebp, [rsp+152]
|
||||||
|
add ebx, [rsp+148]
|
||||||
|
add ebp, [rsp+156]
|
||||||
|
shl rbp, 32
|
||||||
|
or rbx, rbp
|
||||||
|
|
||||||
|
xor rbx, QWORD PTR [r10+r11]
|
||||||
|
lea r14, QWORD PTR [r10+r11]
|
||||||
|
mov rbp, QWORD PTR [r14+8]
|
||||||
|
|
||||||
|
mov [rsp+160], rbx
|
||||||
|
mov [rsp+168], rdi
|
||||||
|
mov [rsp+176], rbp
|
||||||
|
mov [rsp+184], r10
|
||||||
|
mov r10, rsp
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov esi, [rsp+148]
|
||||||
|
mov edi, [rsp+152]
|
||||||
|
mov ebp, [rsp+156]
|
||||||
|
|
||||||
|
movd esp, xmm7
|
||||||
|
movaps xmm0, xmm7
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r15d, xmm0
|
||||||
|
movd eax, xmm4
|
||||||
|
movd edx, xmm5
|
||||||
|
movaps xmm0, xmm5
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r9d, xmm0
|
||||||
|
|
||||||
|
CryptonightR_soft_aes_template_part2:
|
||||||
|
mov rsp, r10
|
||||||
|
mov [rsp+144], ebx
|
||||||
|
mov [rsp+148], esi
|
||||||
|
mov [rsp+152], edi
|
||||||
|
mov [rsp+156], ebp
|
||||||
|
|
||||||
|
mov edi, edi
|
||||||
|
shl rbp, 32
|
||||||
|
or rbp, rdi
|
||||||
|
xor r8, rbp
|
||||||
|
|
||||||
|
mov ebx, ebx
|
||||||
|
shl rsi, 32
|
||||||
|
or rsi, rbx
|
||||||
|
xor QWORD PTR [rsp+320], rsi
|
||||||
|
|
||||||
|
mov rbx, [rsp+160]
|
||||||
|
mov rdi, [rsp+168]
|
||||||
|
mov rbp, [rsp+176]
|
||||||
|
mov r10, [rsp+184]
|
||||||
|
|
||||||
|
mov r9, r10
|
||||||
|
xor r9, 16
|
||||||
|
mov rcx, r10
|
||||||
|
xor rcx, 32
|
||||||
|
xor r10, 48
|
||||||
|
mov rax, rbx
|
||||||
|
mul rdi
|
||||||
|
movdqu xmm2, XMMWORD PTR [r9+r11]
|
||||||
|
movdqu xmm1, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm2
|
||||||
|
pxor xmm6, xmm1
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
add r8, rdx
|
||||||
|
movdqu xmm0, XMMWORD PTR [r10+r11]
|
||||||
|
pxor xmm6, xmm0
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu XMMWORD PTR [r9+r11], xmm0
|
||||||
|
movdqa xmm5, xmm4
|
||||||
|
mov r9, QWORD PTR [rsp+320]
|
||||||
|
movdqa xmm4, xmm6
|
||||||
|
add r9, rax
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm2
|
||||||
|
movdqu XMMWORD PTR [r10+r11], xmm1
|
||||||
|
mov r10, QWORD PTR [rsp+304]
|
||||||
|
movd r12d, xmm11
|
||||||
|
mov QWORD PTR [r14], r8
|
||||||
|
xor r8, rbx
|
||||||
|
mov rax, r8
|
||||||
|
mov QWORD PTR [r14+8], r9
|
||||||
|
and eax, 2097136
|
||||||
|
xor r9, rbp
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
sub r12d, 1
|
||||||
|
jne CryptonightR_soft_aes_template_mainloop
|
||||||
|
|
||||||
|
CryptonightR_soft_aes_template_part3:
|
||||||
|
movaps xmm6, XMMWORD PTR [rsp+16]
|
||||||
|
movaps xmm7, XMMWORD PTR [rsp+32]
|
||||||
|
movaps xmm8, XMMWORD PTR [rsp+48]
|
||||||
|
movaps xmm9, XMMWORD PTR [rsp+64]
|
||||||
|
movaps xmm10, XMMWORD PTR [rsp+80]
|
||||||
|
movaps xmm11, XMMWORD PTR [rsp+96]
|
||||||
|
movaps xmm12, XMMWORD PTR [rsp+112]
|
||||||
|
movaps xmm13, XMMWORD PTR [rsp+128]
|
||||||
|
|
||||||
|
add rsp, 232
|
||||||
|
pop r15
|
||||||
|
pop r14
|
||||||
|
pop r13
|
||||||
|
pop r12
|
||||||
|
pop rdi
|
||||||
|
pop rsi
|
||||||
|
pop rbp
|
||||||
|
pop rbx
|
||||||
|
ret
|
||||||
|
CryptonightR_soft_aes_template_end:
|
File diff suppressed because it is too large
Load diff
|
@ -518,6 +518,8 @@ PUBLIC CryptonightR_instruction_mov256
|
||||||
|
|
||||||
INCLUDE CryptonightWOW_template_win.inc
|
INCLUDE CryptonightWOW_template_win.inc
|
||||||
INCLUDE CryptonightR_template_win.inc
|
INCLUDE CryptonightR_template_win.inc
|
||||||
|
INCLUDE CryptonightWOW_soft_aes_template_win.inc
|
||||||
|
INCLUDE CryptonightR_soft_aes_template_win.inc
|
||||||
|
|
||||||
CryptonightR_instruction0:
|
CryptonightR_instruction0:
|
||||||
imul rbx, rbx
|
imul rbx, rbx
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,529 +0,0 @@
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_part1)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_mainloop)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_part2)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_part3)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_end)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_double_part1)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_double_mainloop)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_double_part2)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_double_part3)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_double_part4)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightR_template_double_end)
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightR_template_part1):
|
|
||||||
mov QWORD PTR [rsp+16], rbx
|
|
||||||
mov QWORD PTR [rsp+24], rbp
|
|
||||||
mov QWORD PTR [rsp+32], rsi
|
|
||||||
push r10
|
|
||||||
push r11
|
|
||||||
push r12
|
|
||||||
push r13
|
|
||||||
push r14
|
|
||||||
push r15
|
|
||||||
push rdi
|
|
||||||
sub rsp, 64
|
|
||||||
mov r12, rcx
|
|
||||||
mov r8, QWORD PTR [r12+32]
|
|
||||||
mov rdx, r12
|
|
||||||
xor r8, QWORD PTR [r12]
|
|
||||||
mov r15, QWORD PTR [r12+40]
|
|
||||||
mov r9, r8
|
|
||||||
xor r15, QWORD PTR [r12+8]
|
|
||||||
mov r11, QWORD PTR [r12+224]
|
|
||||||
mov r12, QWORD PTR [r12+56]
|
|
||||||
xor r12, QWORD PTR [rdx+24]
|
|
||||||
mov rax, QWORD PTR [rdx+48]
|
|
||||||
xor rax, QWORD PTR [rdx+16]
|
|
||||||
movaps XMMWORD PTR [rsp+48], xmm6
|
|
||||||
movd xmm0, r12
|
|
||||||
movaps XMMWORD PTR [rsp+32], xmm7
|
|
||||||
movaps XMMWORD PTR [rsp+16], xmm8
|
|
||||||
movaps XMMWORD PTR [rsp], xmm9
|
|
||||||
mov r12, QWORD PTR [rdx+88]
|
|
||||||
xor r12, QWORD PTR [rdx+72]
|
|
||||||
movd xmm6, rax
|
|
||||||
mov rax, QWORD PTR [rdx+80]
|
|
||||||
xor rax, QWORD PTR [rdx+64]
|
|
||||||
punpcklqdq xmm6, xmm0
|
|
||||||
and r9d, 2097136
|
|
||||||
movd xmm0, r12
|
|
||||||
movd xmm7, rax
|
|
||||||
punpcklqdq xmm7, xmm0
|
|
||||||
mov r10d, r9d
|
|
||||||
movd xmm9, rsp
|
|
||||||
mov rsp, r8
|
|
||||||
mov r8d, 524288
|
|
||||||
|
|
||||||
mov ebx, [rdx+96]
|
|
||||||
mov esi, [rdx+100]
|
|
||||||
mov edi, [rdx+104]
|
|
||||||
mov ebp, [rdx+108]
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightR_template_mainloop):
|
|
||||||
movdqa xmm5, XMMWORD PTR [r9+r11]
|
|
||||||
movd xmm0, r15
|
|
||||||
movd xmm4, rsp
|
|
||||||
punpcklqdq xmm4, xmm0
|
|
||||||
lea rdx, QWORD PTR [r9+r11]
|
|
||||||
|
|
||||||
aesenc xmm5, xmm4
|
|
||||||
|
|
||||||
mov r12d, r9d
|
|
||||||
mov eax, r9d
|
|
||||||
xor r9d, 48
|
|
||||||
xor r12d, 16
|
|
||||||
xor eax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [r9+r11]
|
|
||||||
movaps xmm3, xmm0
|
|
||||||
movdqu xmm2, XMMWORD PTR [r12+r11]
|
|
||||||
movdqu xmm1, XMMWORD PTR [rax+r11]
|
|
||||||
pxor xmm0, xmm2
|
|
||||||
pxor xmm5, xmm1
|
|
||||||
pxor xmm5, xmm0
|
|
||||||
paddq xmm3, xmm7
|
|
||||||
paddq xmm2, xmm6
|
|
||||||
paddq xmm1, xmm4
|
|
||||||
movdqu XMMWORD PTR [r12+r11], xmm3
|
|
||||||
movdqu XMMWORD PTR [rax+r11], xmm2
|
|
||||||
movdqu XMMWORD PTR [r9+r11], xmm1
|
|
||||||
|
|
||||||
movd r12, xmm5
|
|
||||||
movd r10d, xmm5
|
|
||||||
and r10d, 2097136
|
|
||||||
|
|
||||||
movdqa xmm0, xmm5
|
|
||||||
pxor xmm0, xmm6
|
|
||||||
movdqu XMMWORD PTR [rdx], xmm0
|
|
||||||
|
|
||||||
lea r13d, [ebx+esi]
|
|
||||||
lea edx, [edi+ebp]
|
|
||||||
shl rdx, 32
|
|
||||||
or r13, rdx
|
|
||||||
|
|
||||||
xor r13, QWORD PTR [r10+r11]
|
|
||||||
mov r14, QWORD PTR [r10+r11+8]
|
|
||||||
|
|
||||||
movd eax, xmm6
|
|
||||||
movd edx, xmm7
|
|
||||||
pextrd r9d, xmm7, 2
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightR_template_part2):
|
|
||||||
mov eax, edi
|
|
||||||
mov edx, ebp
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor rsp, rax
|
|
||||||
|
|
||||||
mov eax, ebx
|
|
||||||
mov edx, esi
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor r15, rax
|
|
||||||
|
|
||||||
mov rax, r13
|
|
||||||
mul r12
|
|
||||||
|
|
||||||
mov r9d, r10d
|
|
||||||
mov r12d, r10d
|
|
||||||
xor r9d, 16
|
|
||||||
xor r12d, 32
|
|
||||||
xor r10d, 48
|
|
||||||
movdqa xmm1, XMMWORD PTR [r12+r11]
|
|
||||||
movaps xmm3, xmm1
|
|
||||||
movdqa xmm2, XMMWORD PTR [r9+r11]
|
|
||||||
movdqa xmm0, XMMWORD PTR [r10+r11]
|
|
||||||
pxor xmm1, xmm2
|
|
||||||
pxor xmm5, xmm0
|
|
||||||
pxor xmm5, xmm1
|
|
||||||
paddq xmm3, xmm4
|
|
||||||
paddq xmm2, xmm6
|
|
||||||
paddq xmm0, xmm7
|
|
||||||
movdqu XMMWORD PTR [r9+r11], xmm0
|
|
||||||
movdqu XMMWORD PTR [r12+r11], xmm2
|
|
||||||
movdqu XMMWORD PTR [r10+r11], xmm3
|
|
||||||
|
|
||||||
movdqa xmm7, xmm6
|
|
||||||
add r15, rax
|
|
||||||
add rsp, rdx
|
|
||||||
xor r10, 48
|
|
||||||
mov QWORD PTR [r10+r11], rsp
|
|
||||||
xor rsp, r13
|
|
||||||
mov r9d, esp
|
|
||||||
mov QWORD PTR [r10+r11+8], r15
|
|
||||||
and r9d, 2097136
|
|
||||||
xor r15, r14
|
|
||||||
movdqa xmm6, xmm5
|
|
||||||
dec r8d
|
|
||||||
jnz FN_PREFIX(CryptonightR_template_mainloop)
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightR_template_part3):
|
|
||||||
movd rsp, xmm9
|
|
||||||
|
|
||||||
mov rbx, QWORD PTR [rsp+136]
|
|
||||||
mov rbp, QWORD PTR [rsp+144]
|
|
||||||
mov rsi, QWORD PTR [rsp+152]
|
|
||||||
movaps xmm6, XMMWORD PTR [rsp+48]
|
|
||||||
movaps xmm7, XMMWORD PTR [rsp+32]
|
|
||||||
movaps xmm8, XMMWORD PTR [rsp+16]
|
|
||||||
movaps xmm9, XMMWORD PTR [rsp]
|
|
||||||
add rsp, 64
|
|
||||||
pop rdi
|
|
||||||
pop r15
|
|
||||||
pop r14
|
|
||||||
pop r13
|
|
||||||
pop r12
|
|
||||||
pop r11
|
|
||||||
pop r10
|
|
||||||
ret 0
|
|
||||||
FN_PREFIX(CryptonightR_template_end):
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightR_template_double_part1):
|
|
||||||
mov QWORD PTR [rsp+24], rbx
|
|
||||||
push rbp
|
|
||||||
push rsi
|
|
||||||
push rdi
|
|
||||||
push r12
|
|
||||||
push r13
|
|
||||||
push r14
|
|
||||||
push r15
|
|
||||||
sub rsp, 320
|
|
||||||
mov r14, QWORD PTR [rcx+32]
|
|
||||||
mov r8, rcx
|
|
||||||
xor r14, QWORD PTR [rcx]
|
|
||||||
mov r12, QWORD PTR [rcx+40]
|
|
||||||
mov ebx, r14d
|
|
||||||
mov rsi, QWORD PTR [rcx+224]
|
|
||||||
and ebx, 2097136
|
|
||||||
xor r12, QWORD PTR [rcx+8]
|
|
||||||
mov rcx, QWORD PTR [rcx+56]
|
|
||||||
xor rcx, QWORD PTR [r8+24]
|
|
||||||
mov rax, QWORD PTR [r8+48]
|
|
||||||
xor rax, QWORD PTR [r8+16]
|
|
||||||
mov r15, QWORD PTR [rdx+32]
|
|
||||||
xor r15, QWORD PTR [rdx]
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov rcx, QWORD PTR [r8+88]
|
|
||||||
xor rcx, QWORD PTR [r8+72]
|
|
||||||
mov r13, QWORD PTR [rdx+40]
|
|
||||||
mov rdi, QWORD PTR [rdx+224]
|
|
||||||
xor r13, QWORD PTR [rdx+8]
|
|
||||||
movaps XMMWORD PTR [rsp+160], xmm6
|
|
||||||
movaps XMMWORD PTR [rsp+176], xmm7
|
|
||||||
movaps XMMWORD PTR [rsp+192], xmm8
|
|
||||||
movaps XMMWORD PTR [rsp+208], xmm9
|
|
||||||
movaps XMMWORD PTR [rsp+224], xmm10
|
|
||||||
movaps XMMWORD PTR [rsp+240], xmm11
|
|
||||||
movaps XMMWORD PTR [rsp+256], xmm12
|
|
||||||
movaps XMMWORD PTR [rsp+272], xmm13
|
|
||||||
movaps XMMWORD PTR [rsp+288], xmm14
|
|
||||||
movaps XMMWORD PTR [rsp+304], xmm15
|
|
||||||
movd xmm7, rax
|
|
||||||
mov rax, QWORD PTR [r8+80]
|
|
||||||
xor rax, QWORD PTR [r8+64]
|
|
||||||
|
|
||||||
movaps xmm1, XMMWORD PTR [rdx+96]
|
|
||||||
movaps xmm2, XMMWORD PTR [r8+96]
|
|
||||||
movaps XMMWORD PTR [rsp], xmm1
|
|
||||||
movaps XMMWORD PTR [rsp+16], xmm2
|
|
||||||
|
|
||||||
mov r8d, r15d
|
|
||||||
punpcklqdq xmm7, xmm0
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov rcx, QWORD PTR [rdx+56]
|
|
||||||
xor rcx, QWORD PTR [rdx+24]
|
|
||||||
movd xmm9, rax
|
|
||||||
mov QWORD PTR [rsp+128], rsi
|
|
||||||
mov rax, QWORD PTR [rdx+48]
|
|
||||||
xor rax, QWORD PTR [rdx+16]
|
|
||||||
punpcklqdq xmm9, xmm0
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov rcx, QWORD PTR [rdx+88]
|
|
||||||
xor rcx, QWORD PTR [rdx+72]
|
|
||||||
movd xmm8, rax
|
|
||||||
mov QWORD PTR [rsp+136], rdi
|
|
||||||
mov rax, QWORD PTR [rdx+80]
|
|
||||||
xor rax, QWORD PTR [rdx+64]
|
|
||||||
punpcklqdq xmm8, xmm0
|
|
||||||
and r8d, 2097136
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov r11d, 524288
|
|
||||||
movd xmm10, rax
|
|
||||||
punpcklqdq xmm10, xmm0
|
|
||||||
|
|
||||||
movd xmm14, QWORD PTR [rsp+128]
|
|
||||||
movd xmm15, QWORD PTR [rsp+136]
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightR_template_double_mainloop):
|
|
||||||
movdqu xmm6, XMMWORD PTR [rbx+rsi]
|
|
||||||
movd xmm0, r12
|
|
||||||
mov ecx, ebx
|
|
||||||
movd xmm3, r14
|
|
||||||
punpcklqdq xmm3, xmm0
|
|
||||||
xor ebx, 16
|
|
||||||
aesenc xmm6, xmm3
|
|
||||||
movd xmm4, r15
|
|
||||||
movdqu xmm0, XMMWORD PTR [rbx+rsi]
|
|
||||||
pxor xmm6, xmm0
|
|
||||||
xor ebx, 48
|
|
||||||
paddq xmm0, xmm7
|
|
||||||
movdqu xmm1, XMMWORD PTR [rbx+rsi]
|
|
||||||
pxor xmm6, xmm1
|
|
||||||
movdqu XMMWORD PTR [rbx+rsi], xmm0
|
|
||||||
paddq xmm1, xmm3
|
|
||||||
xor ebx, 16
|
|
||||||
mov eax, ebx
|
|
||||||
xor rax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [rbx+rsi]
|
|
||||||
pxor xmm6, xmm0
|
|
||||||
movd rdx, xmm6
|
|
||||||
movdqu XMMWORD PTR [rbx+rsi], xmm1
|
|
||||||
paddq xmm0, xmm9
|
|
||||||
movdqu XMMWORD PTR [rax+rsi], xmm0
|
|
||||||
movdqa xmm0, xmm6
|
|
||||||
pxor xmm0, xmm7
|
|
||||||
movdqu XMMWORD PTR [rcx+rsi], xmm0
|
|
||||||
mov esi, edx
|
|
||||||
movdqu xmm5, XMMWORD PTR [r8+rdi]
|
|
||||||
and esi, 2097136
|
|
||||||
mov ecx, r8d
|
|
||||||
movd xmm0, r13
|
|
||||||
punpcklqdq xmm4, xmm0
|
|
||||||
xor r8d, 16
|
|
||||||
aesenc xmm5, xmm4
|
|
||||||
movdqu xmm0, XMMWORD PTR [r8+rdi]
|
|
||||||
pxor xmm5, xmm0
|
|
||||||
xor r8d, 48
|
|
||||||
paddq xmm0, xmm8
|
|
||||||
movdqu xmm1, XMMWORD PTR [r8+rdi]
|
|
||||||
pxor xmm5, xmm1
|
|
||||||
movdqu XMMWORD PTR [r8+rdi], xmm0
|
|
||||||
paddq xmm1, xmm4
|
|
||||||
xor r8d, 16
|
|
||||||
mov eax, r8d
|
|
||||||
xor rax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [r8+rdi]
|
|
||||||
pxor xmm5, xmm0
|
|
||||||
movdqu XMMWORD PTR [r8+rdi], xmm1
|
|
||||||
paddq xmm0, xmm10
|
|
||||||
movdqu XMMWORD PTR [rax+rdi], xmm0
|
|
||||||
movdqa xmm0, xmm5
|
|
||||||
pxor xmm0, xmm8
|
|
||||||
movdqu XMMWORD PTR [rcx+rdi], xmm0
|
|
||||||
movd rdi, xmm5
|
|
||||||
movd rcx, xmm14
|
|
||||||
mov ebp, edi
|
|
||||||
mov r8, QWORD PTR [rcx+rsi]
|
|
||||||
mov r10, QWORD PTR [rcx+rsi+8]
|
|
||||||
lea r9, QWORD PTR [rcx+rsi]
|
|
||||||
xor esi, 16
|
|
||||||
|
|
||||||
movd xmm0, rsp
|
|
||||||
movd xmm1, rsi
|
|
||||||
movd xmm2, rdi
|
|
||||||
movd xmm11, rbp
|
|
||||||
movd xmm12, r15
|
|
||||||
movd xmm13, rdx
|
|
||||||
mov [rsp+104], rcx
|
|
||||||
mov [rsp+112], r9
|
|
||||||
|
|
||||||
mov ebx, DWORD PTR [rsp+16]
|
|
||||||
mov esi, DWORD PTR [rsp+20]
|
|
||||||
mov edi, DWORD PTR [rsp+24]
|
|
||||||
mov ebp, DWORD PTR [rsp+28]
|
|
||||||
|
|
||||||
lea eax, [ebx+esi]
|
|
||||||
lea edx, [edi+ebp]
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor r8, rax
|
|
||||||
|
|
||||||
movd esp, xmm3
|
|
||||||
pextrd r15d, xmm3, 2
|
|
||||||
movd eax, xmm7
|
|
||||||
movd edx, xmm9
|
|
||||||
pextrd r9d, xmm9, 2
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightR_template_double_part2):
|
|
||||||
|
|
||||||
mov eax, edi
|
|
||||||
mov edx, ebp
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor r14, rax
|
|
||||||
|
|
||||||
mov eax, ebx
|
|
||||||
mov edx, esi
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor r12, rax
|
|
||||||
|
|
||||||
movd rsp, xmm0
|
|
||||||
mov DWORD PTR [rsp+16], ebx
|
|
||||||
mov DWORD PTR [rsp+20], esi
|
|
||||||
mov DWORD PTR [rsp+24], edi
|
|
||||||
mov DWORD PTR [rsp+28], ebp
|
|
||||||
|
|
||||||
movd rsi, xmm1
|
|
||||||
movd rdi, xmm2
|
|
||||||
movd rbp, xmm11
|
|
||||||
movd r15, xmm12
|
|
||||||
movd rdx, xmm13
|
|
||||||
mov rcx, [rsp+104]
|
|
||||||
mov r9, [rsp+112]
|
|
||||||
|
|
||||||
mov rbx, r8
|
|
||||||
mov rax, r8
|
|
||||||
mul rdx
|
|
||||||
and ebp, 2097136
|
|
||||||
mov r8, rax
|
|
||||||
movdqu xmm1, XMMWORD PTR [rcx+rsi]
|
|
||||||
pxor xmm6, xmm1
|
|
||||||
xor esi, 48
|
|
||||||
paddq xmm1, xmm7
|
|
||||||
movdqu xmm2, XMMWORD PTR [rsi+rcx]
|
|
||||||
pxor xmm6, xmm2
|
|
||||||
paddq xmm2, xmm3
|
|
||||||
movdqu XMMWORD PTR [rsi+rcx], xmm1
|
|
||||||
xor esi, 16
|
|
||||||
mov eax, esi
|
|
||||||
mov rsi, rcx
|
|
||||||
movdqu xmm0, XMMWORD PTR [rax+rcx]
|
|
||||||
pxor xmm6, xmm0
|
|
||||||
movdqu XMMWORD PTR [rax+rcx], xmm2
|
|
||||||
paddq xmm0, xmm9
|
|
||||||
add r12, r8
|
|
||||||
xor rax, 32
|
|
||||||
add r14, rdx
|
|
||||||
movdqa xmm9, xmm7
|
|
||||||
movdqa xmm7, xmm6
|
|
||||||
movdqu XMMWORD PTR [rax+rcx], xmm0
|
|
||||||
mov QWORD PTR [r9+8], r12
|
|
||||||
xor r12, r10
|
|
||||||
mov QWORD PTR [r9], r14
|
|
||||||
movd rcx, xmm15
|
|
||||||
xor r14, rbx
|
|
||||||
mov r10d, ebp
|
|
||||||
mov ebx, r14d
|
|
||||||
xor ebp, 16
|
|
||||||
and ebx, 2097136
|
|
||||||
mov r8, QWORD PTR [r10+rcx]
|
|
||||||
mov r9, QWORD PTR [r10+rcx+8]
|
|
||||||
|
|
||||||
movd xmm0, rsp
|
|
||||||
movd xmm1, rbx
|
|
||||||
movd xmm2, rsi
|
|
||||||
movd xmm11, rdi
|
|
||||||
movd xmm12, rbp
|
|
||||||
movd xmm13, r15
|
|
||||||
mov [rsp+104], rcx
|
|
||||||
mov [rsp+112], r9
|
|
||||||
|
|
||||||
mov ebx, DWORD PTR [rsp]
|
|
||||||
mov esi, DWORD PTR [rsp+4]
|
|
||||||
mov edi, DWORD PTR [rsp+8]
|
|
||||||
mov ebp, DWORD PTR [rsp+12]
|
|
||||||
|
|
||||||
lea eax, [ebx+esi]
|
|
||||||
lea edx, [edi+ebp]
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
|
|
||||||
xor r8, rax
|
|
||||||
movd xmm3, r8
|
|
||||||
|
|
||||||
movd esp, xmm4
|
|
||||||
pextrd r15d, xmm4, 2
|
|
||||||
movd eax, xmm8
|
|
||||||
movd edx, xmm10
|
|
||||||
pextrd r9d, xmm10, 2
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightR_template_double_part3):
|
|
||||||
|
|
||||||
movd r15, xmm13
|
|
||||||
|
|
||||||
mov eax, edi
|
|
||||||
mov edx, ebp
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor r15, rax
|
|
||||||
|
|
||||||
mov eax, ebx
|
|
||||||
mov edx, esi
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor r13, rax
|
|
||||||
|
|
||||||
movd rsp, xmm0
|
|
||||||
mov DWORD PTR [rsp], ebx
|
|
||||||
mov DWORD PTR [rsp+4], esi
|
|
||||||
mov DWORD PTR [rsp+8], edi
|
|
||||||
mov DWORD PTR [rsp+12], ebp
|
|
||||||
|
|
||||||
movd rbx, xmm1
|
|
||||||
movd rsi, xmm2
|
|
||||||
movd rdi, xmm11
|
|
||||||
movd rbp, xmm12
|
|
||||||
mov rcx, [rsp+104]
|
|
||||||
mov r9, [rsp+112]
|
|
||||||
|
|
||||||
mov rax, r8
|
|
||||||
mul rdi
|
|
||||||
mov rdi, rcx
|
|
||||||
mov r8, rax
|
|
||||||
movdqu xmm1, XMMWORD PTR [rbp+rcx]
|
|
||||||
pxor xmm5, xmm1
|
|
||||||
xor ebp, 48
|
|
||||||
paddq xmm1, xmm8
|
|
||||||
add r13, r8
|
|
||||||
movdqu xmm2, XMMWORD PTR [rbp+rcx]
|
|
||||||
pxor xmm5, xmm2
|
|
||||||
add r15, rdx
|
|
||||||
movdqu XMMWORD PTR [rbp+rcx], xmm1
|
|
||||||
paddq xmm2, xmm4
|
|
||||||
xor ebp, 16
|
|
||||||
mov eax, ebp
|
|
||||||
xor rax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [rbp+rcx]
|
|
||||||
pxor xmm5, xmm0
|
|
||||||
movdqu XMMWORD PTR [rbp+rcx], xmm2
|
|
||||||
paddq xmm0, xmm10
|
|
||||||
movdqu XMMWORD PTR [rax+rcx], xmm0
|
|
||||||
movd rax, xmm3
|
|
||||||
movdqa xmm10, xmm8
|
|
||||||
mov QWORD PTR [r10+rcx], r15
|
|
||||||
movdqa xmm8, xmm5
|
|
||||||
xor r15, rax
|
|
||||||
mov QWORD PTR [r10+rcx+8], r13
|
|
||||||
mov r8d, r15d
|
|
||||||
xor r13, r9
|
|
||||||
and r8d, 2097136
|
|
||||||
dec r11d
|
|
||||||
jnz FN_PREFIX(CryptonightR_template_double_mainloop)
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightR_template_double_part4):
|
|
||||||
|
|
||||||
mov rbx, QWORD PTR [rsp+400]
|
|
||||||
movaps xmm6, XMMWORD PTR [rsp+160]
|
|
||||||
movaps xmm7, XMMWORD PTR [rsp+176]
|
|
||||||
movaps xmm8, XMMWORD PTR [rsp+192]
|
|
||||||
movaps xmm9, XMMWORD PTR [rsp+208]
|
|
||||||
movaps xmm10, XMMWORD PTR [rsp+224]
|
|
||||||
movaps xmm11, XMMWORD PTR [rsp+240]
|
|
||||||
movaps xmm12, XMMWORD PTR [rsp+256]
|
|
||||||
movaps xmm13, XMMWORD PTR [rsp+272]
|
|
||||||
movaps xmm14, XMMWORD PTR [rsp+288]
|
|
||||||
movaps xmm15, XMMWORD PTR [rsp+304]
|
|
||||||
add rsp, 320
|
|
||||||
pop r15
|
|
||||||
pop r14
|
|
||||||
pop r13
|
|
||||||
pop r12
|
|
||||||
pop rdi
|
|
||||||
pop rsi
|
|
||||||
pop rbp
|
|
||||||
ret 0
|
|
||||||
FN_PREFIX(CryptonightR_template_double_end):
|
|
266
src/crypto/asm/win64/CryptonightWOW_soft_aes_template_win.inc
Normal file
266
src/crypto/asm/win64/CryptonightWOW_soft_aes_template_win.inc
Normal file
|
@ -0,0 +1,266 @@
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_part1
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_mainloop
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_part2
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_part3
|
||||||
|
PUBLIC CryptonightWOW_soft_aes_template_end
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightWOW_soft_aes_template_part1:
|
||||||
|
mov QWORD PTR [rsp+8], rcx
|
||||||
|
push rbx
|
||||||
|
push rbp
|
||||||
|
push rsi
|
||||||
|
push rdi
|
||||||
|
push r12
|
||||||
|
push r13
|
||||||
|
push r14
|
||||||
|
push r15
|
||||||
|
sub rsp, 232
|
||||||
|
|
||||||
|
mov eax, [rcx+96]
|
||||||
|
mov ebx, [rcx+100]
|
||||||
|
mov esi, [rcx+104]
|
||||||
|
mov edx, [rcx+108]
|
||||||
|
mov [rsp+144], eax
|
||||||
|
mov [rsp+148], ebx
|
||||||
|
mov [rsp+152], esi
|
||||||
|
mov [rsp+156], edx
|
||||||
|
|
||||||
|
mov rax, QWORD PTR [rcx+48]
|
||||||
|
mov r10, rcx
|
||||||
|
xor rax, QWORD PTR [rcx+16]
|
||||||
|
mov r8, QWORD PTR [rcx+32]
|
||||||
|
xor r8, QWORD PTR [rcx]
|
||||||
|
mov r9, QWORD PTR [rcx+40]
|
||||||
|
xor r9, QWORD PTR [rcx+8]
|
||||||
|
movd xmm4, rax
|
||||||
|
mov rdx, QWORD PTR [rcx+56]
|
||||||
|
xor rdx, QWORD PTR [rcx+24]
|
||||||
|
mov r11, QWORD PTR [rcx+224]
|
||||||
|
mov rcx, QWORD PTR [rcx+88]
|
||||||
|
xor rcx, QWORD PTR [r10+72]
|
||||||
|
mov rax, QWORD PTR [r10+80]
|
||||||
|
movd xmm0, rdx
|
||||||
|
xor rax, QWORD PTR [r10+64]
|
||||||
|
|
||||||
|
movaps XMMWORD PTR [rsp+16], xmm6
|
||||||
|
movaps XMMWORD PTR [rsp+32], xmm7
|
||||||
|
movaps XMMWORD PTR [rsp+48], xmm8
|
||||||
|
movaps XMMWORD PTR [rsp+64], xmm9
|
||||||
|
movaps XMMWORD PTR [rsp+80], xmm10
|
||||||
|
movaps XMMWORD PTR [rsp+96], xmm11
|
||||||
|
movaps XMMWORD PTR [rsp+112], xmm12
|
||||||
|
movaps XMMWORD PTR [rsp+128], xmm13
|
||||||
|
|
||||||
|
movd xmm5, rax
|
||||||
|
|
||||||
|
mov rax, r8
|
||||||
|
punpcklqdq xmm4, xmm0
|
||||||
|
and eax, 2097136
|
||||||
|
movd xmm10, QWORD PTR [r10+96]
|
||||||
|
movd xmm0, rcx
|
||||||
|
mov rcx, QWORD PTR [r10+104]
|
||||||
|
xorps xmm9, xmm9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
movd xmm12, r11
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
punpcklqdq xmm5, xmm0
|
||||||
|
movd xmm13, rcx
|
||||||
|
mov r12d, 524288
|
||||||
|
|
||||||
|
ALIGN(64)
|
||||||
|
CryptonightWOW_soft_aes_template_mainloop:
|
||||||
|
movd xmm11, r12d
|
||||||
|
mov r12, QWORD PTR [r10+272]
|
||||||
|
lea r13, QWORD PTR [rax+r11]
|
||||||
|
mov esi, DWORD PTR [r13]
|
||||||
|
movd xmm0, r9
|
||||||
|
mov r10d, DWORD PTR [r13+4]
|
||||||
|
movd xmm7, r8
|
||||||
|
mov ebp, DWORD PTR [r13+12]
|
||||||
|
mov r14d, DWORD PTR [r13+8]
|
||||||
|
mov rdx, QWORD PTR [rsp+328]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
punpcklqdq xmm7, xmm0
|
||||||
|
mov r15d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
mov edi, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov ebx, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
xor r15d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, r14b
|
||||||
|
shr r14d, 8
|
||||||
|
mov eax, r14d
|
||||||
|
shr eax, 8
|
||||||
|
xor edi, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add eax, 256
|
||||||
|
movzx ecx, bpl
|
||||||
|
shr ebp, 8
|
||||||
|
xor ebx, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
movzx ecx, sil
|
||||||
|
shr esi, 8
|
||||||
|
xor r9d, DWORD PTR [r12+rcx*4+1024]
|
||||||
|
add r12, 2048
|
||||||
|
movzx ecx, r10b
|
||||||
|
shr r10d, 8
|
||||||
|
add r10d, 256
|
||||||
|
mov r11d, DWORD PTR [r12+rax*4]
|
||||||
|
xor r11d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r11d, r9d
|
||||||
|
movzx ecx, sil
|
||||||
|
mov r10d, DWORD PTR [r12+r10*4]
|
||||||
|
shr esi, 8
|
||||||
|
add esi, 256
|
||||||
|
xor r10d, DWORD PTR [r12+rcx*4]
|
||||||
|
movzx ecx, bpl
|
||||||
|
xor r10d, ebx
|
||||||
|
shr ebp, 8
|
||||||
|
movd xmm1, r11d
|
||||||
|
add ebp, 256
|
||||||
|
movd r11, xmm12
|
||||||
|
mov r9d, DWORD PTR [r12+rcx*4]
|
||||||
|
xor r9d, DWORD PTR [r12+rsi*4]
|
||||||
|
mov eax, DWORD PTR [r12+rbp*4]
|
||||||
|
xor r9d, edi
|
||||||
|
movzx ecx, r14b
|
||||||
|
movd xmm0, r10d
|
||||||
|
movd xmm2, r9d
|
||||||
|
xor eax, DWORD PTR [r12+rcx*4]
|
||||||
|
mov rcx, rdx
|
||||||
|
xor eax, r15d
|
||||||
|
punpckldq xmm2, xmm1
|
||||||
|
xor rcx, 16
|
||||||
|
movd xmm6, eax
|
||||||
|
mov rax, rdx
|
||||||
|
punpckldq xmm6, xmm0
|
||||||
|
xor rax, 32
|
||||||
|
punpckldq xmm6, xmm2
|
||||||
|
xor rdx, 48
|
||||||
|
movdqu xmm2, XMMWORD PTR [rcx+r11]
|
||||||
|
pxor xmm6, xmm7
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu xmm1, XMMWORD PTR [rax+r11]
|
||||||
|
movdqu xmm0, XMMWORD PTR [rdx+r11]
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm0
|
||||||
|
movdqu XMMWORD PTR [rax+r11], xmm2
|
||||||
|
movd rcx, xmm13
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movdqu XMMWORD PTR [rdx+r11], xmm1
|
||||||
|
movd rdi, xmm6
|
||||||
|
mov r10, rdi
|
||||||
|
and r10d, 2097136
|
||||||
|
movdqa xmm0, xmm6
|
||||||
|
pxor xmm0, xmm4
|
||||||
|
movdqu XMMWORD PTR [r13], xmm0
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov ebp, [rsp+152]
|
||||||
|
add ebx, [rsp+148]
|
||||||
|
add ebp, [rsp+156]
|
||||||
|
shl rbp, 32
|
||||||
|
or rbx, rbp
|
||||||
|
|
||||||
|
xor rbx, QWORD PTR [r10+r11]
|
||||||
|
lea r14, QWORD PTR [r10+r11]
|
||||||
|
mov rbp, QWORD PTR [r14+8]
|
||||||
|
|
||||||
|
mov [rsp+160], rbx
|
||||||
|
mov [rsp+168], rdi
|
||||||
|
mov [rsp+176], rbp
|
||||||
|
mov [rsp+184], r10
|
||||||
|
mov r10, rsp
|
||||||
|
|
||||||
|
mov ebx, [rsp+144]
|
||||||
|
mov esi, [rsp+148]
|
||||||
|
mov edi, [rsp+152]
|
||||||
|
mov ebp, [rsp+156]
|
||||||
|
|
||||||
|
movd esp, xmm7
|
||||||
|
movaps xmm0, xmm7
|
||||||
|
psrldq xmm0, 8
|
||||||
|
movd r15d, xmm0
|
||||||
|
movd eax, xmm4
|
||||||
|
movd edx, xmm5
|
||||||
|
|
||||||
|
CryptonightWOW_soft_aes_template_part2:
|
||||||
|
mov rsp, r10
|
||||||
|
mov [rsp+144], ebx
|
||||||
|
mov [rsp+148], esi
|
||||||
|
mov [rsp+152], edi
|
||||||
|
mov [rsp+156], ebp
|
||||||
|
|
||||||
|
mov rbx, [rsp+160]
|
||||||
|
mov rdi, [rsp+168]
|
||||||
|
mov rbp, [rsp+176]
|
||||||
|
mov r10, [rsp+184]
|
||||||
|
|
||||||
|
mov r9, r10
|
||||||
|
xor r9, 16
|
||||||
|
mov rcx, r10
|
||||||
|
xor rcx, 32
|
||||||
|
xor r10, 48
|
||||||
|
mov rax, rbx
|
||||||
|
mul rdi
|
||||||
|
movdqu xmm2, XMMWORD PTR [r9+r11]
|
||||||
|
movdqu xmm1, XMMWORD PTR [rcx+r11]
|
||||||
|
paddq xmm1, xmm7
|
||||||
|
movd xmm0, rax
|
||||||
|
movd xmm3, rdx
|
||||||
|
xor rax, QWORD PTR [r11+rcx+8]
|
||||||
|
xor rdx, QWORD PTR [rcx+r11]
|
||||||
|
punpcklqdq xmm3, xmm0
|
||||||
|
add r8, rdx
|
||||||
|
movdqu xmm0, XMMWORD PTR [r10+r11]
|
||||||
|
pxor xmm2, xmm3
|
||||||
|
paddq xmm0, xmm5
|
||||||
|
paddq xmm2, xmm4
|
||||||
|
movdqu XMMWORD PTR [r9+r11], xmm0
|
||||||
|
movdqa xmm5, xmm4
|
||||||
|
mov r9, QWORD PTR [rsp+320]
|
||||||
|
movdqa xmm4, xmm6
|
||||||
|
add r9, rax
|
||||||
|
movdqu XMMWORD PTR [rcx+r11], xmm2
|
||||||
|
movdqu XMMWORD PTR [r10+r11], xmm1
|
||||||
|
mov r10, QWORD PTR [rsp+304]
|
||||||
|
movd r12d, xmm11
|
||||||
|
mov QWORD PTR [r14], r8
|
||||||
|
xor r8, rbx
|
||||||
|
mov rax, r8
|
||||||
|
mov QWORD PTR [r14+8], r9
|
||||||
|
and eax, 2097136
|
||||||
|
xor r9, rbp
|
||||||
|
mov QWORD PTR [rsp+320], r9
|
||||||
|
mov QWORD PTR [rsp+328], rax
|
||||||
|
sub r12d, 1
|
||||||
|
jne CryptonightWOW_soft_aes_template_mainloop
|
||||||
|
|
||||||
|
CryptonightWOW_soft_aes_template_part3:
|
||||||
|
movaps xmm6, XMMWORD PTR [rsp+16]
|
||||||
|
movaps xmm7, XMMWORD PTR [rsp+32]
|
||||||
|
movaps xmm8, XMMWORD PTR [rsp+48]
|
||||||
|
movaps xmm9, XMMWORD PTR [rsp+64]
|
||||||
|
movaps xmm10, XMMWORD PTR [rsp+80]
|
||||||
|
movaps xmm11, XMMWORD PTR [rsp+96]
|
||||||
|
movaps xmm12, XMMWORD PTR [rsp+112]
|
||||||
|
movaps xmm13, XMMWORD PTR [rsp+128]
|
||||||
|
|
||||||
|
add rsp, 232
|
||||||
|
pop r15
|
||||||
|
pop r14
|
||||||
|
pop r13
|
||||||
|
pop r12
|
||||||
|
pop rdi
|
||||||
|
pop rsi
|
||||||
|
pop rbp
|
||||||
|
pop rbx
|
||||||
|
ret
|
||||||
|
CryptonightWOW_soft_aes_template_end:
|
|
@ -1,486 +0,0 @@
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_part1)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_mainloop)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_part2)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_part3)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_end)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_double_part1)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_double_mainloop)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_double_part2)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_double_part3)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_double_part4)
|
|
||||||
PUBLIC FN_PREFIX(CryptonightWOW_template_double_end)
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightWOW_template_part1):
|
|
||||||
mov QWORD PTR [rsp+16], rbx
|
|
||||||
mov QWORD PTR [rsp+24], rbp
|
|
||||||
mov QWORD PTR [rsp+32], rsi
|
|
||||||
push r10
|
|
||||||
push r11
|
|
||||||
push r12
|
|
||||||
push r13
|
|
||||||
push r14
|
|
||||||
push r15
|
|
||||||
push rdi
|
|
||||||
sub rsp, 64
|
|
||||||
mov r12, rcx
|
|
||||||
mov r8, QWORD PTR [r12+32]
|
|
||||||
mov rdx, r12
|
|
||||||
xor r8, QWORD PTR [r12]
|
|
||||||
mov r15, QWORD PTR [r12+40]
|
|
||||||
mov r9, r8
|
|
||||||
xor r15, QWORD PTR [r12+8]
|
|
||||||
mov r11, QWORD PTR [r12+224]
|
|
||||||
mov r12, QWORD PTR [r12+56]
|
|
||||||
xor r12, QWORD PTR [rdx+24]
|
|
||||||
mov rax, QWORD PTR [rdx+48]
|
|
||||||
xor rax, QWORD PTR [rdx+16]
|
|
||||||
movaps XMMWORD PTR [rsp+48], xmm6
|
|
||||||
movd xmm0, r12
|
|
||||||
movaps XMMWORD PTR [rsp+32], xmm7
|
|
||||||
movaps XMMWORD PTR [rsp+16], xmm8
|
|
||||||
movaps XMMWORD PTR [rsp], xmm9
|
|
||||||
mov r12, QWORD PTR [rdx+88]
|
|
||||||
xor r12, QWORD PTR [rdx+72]
|
|
||||||
movd xmm6, rax
|
|
||||||
mov rax, QWORD PTR [rdx+80]
|
|
||||||
xor rax, QWORD PTR [rdx+64]
|
|
||||||
punpcklqdq xmm6, xmm0
|
|
||||||
and r9d, 2097136
|
|
||||||
movd xmm0, r12
|
|
||||||
movd xmm7, rax
|
|
||||||
punpcklqdq xmm7, xmm0
|
|
||||||
mov r10d, r9d
|
|
||||||
movd xmm9, rsp
|
|
||||||
mov rsp, r8
|
|
||||||
mov r8d, 524288
|
|
||||||
|
|
||||||
mov ebx, [rdx+96]
|
|
||||||
mov esi, [rdx+100]
|
|
||||||
mov edi, [rdx+104]
|
|
||||||
mov ebp, [rdx+108]
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightWOW_template_mainloop):
|
|
||||||
movdqa xmm5, XMMWORD PTR [r9+r11]
|
|
||||||
movd xmm0, r15
|
|
||||||
movd xmm4, rsp
|
|
||||||
punpcklqdq xmm4, xmm0
|
|
||||||
lea rdx, QWORD PTR [r9+r11]
|
|
||||||
|
|
||||||
aesenc xmm5, xmm4
|
|
||||||
movd r10d, xmm5
|
|
||||||
and r10d, 2097136
|
|
||||||
|
|
||||||
mov r12d, r9d
|
|
||||||
mov eax, r9d
|
|
||||||
xor r9d, 48
|
|
||||||
xor r12d, 16
|
|
||||||
xor eax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [r9+r11]
|
|
||||||
movdqu xmm2, XMMWORD PTR [r12+r11]
|
|
||||||
movdqu xmm1, XMMWORD PTR [rax+r11]
|
|
||||||
paddq xmm0, xmm7
|
|
||||||
paddq xmm2, xmm6
|
|
||||||
paddq xmm1, xmm4
|
|
||||||
movdqu XMMWORD PTR [r12+r11], xmm0
|
|
||||||
movd r12, xmm5
|
|
||||||
movdqu XMMWORD PTR [rax+r11], xmm2
|
|
||||||
movdqu XMMWORD PTR [r9+r11], xmm1
|
|
||||||
|
|
||||||
movdqa xmm0, xmm5
|
|
||||||
pxor xmm0, xmm6
|
|
||||||
movdqu XMMWORD PTR [rdx], xmm0
|
|
||||||
|
|
||||||
lea r13d, [ebx+esi]
|
|
||||||
lea edx, [edi+ebp]
|
|
||||||
shl rdx, 32
|
|
||||||
or r13, rdx
|
|
||||||
|
|
||||||
xor r13, QWORD PTR [r10+r11]
|
|
||||||
mov r14, QWORD PTR [r10+r11+8]
|
|
||||||
|
|
||||||
movd eax, xmm6
|
|
||||||
movd edx, xmm7
|
|
||||||
pextrd r9d, xmm7, 2
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightWOW_template_part2):
|
|
||||||
mov rax, r13
|
|
||||||
mul r12
|
|
||||||
movd xmm0, rax
|
|
||||||
movd xmm3, rdx
|
|
||||||
punpcklqdq xmm3, xmm0
|
|
||||||
|
|
||||||
mov r9d, r10d
|
|
||||||
mov r12d, r10d
|
|
||||||
xor r9d, 16
|
|
||||||
xor r12d, 32
|
|
||||||
xor r10d, 48
|
|
||||||
movdqa xmm1, XMMWORD PTR [r12+r11]
|
|
||||||
xor rdx, QWORD PTR [r12+r11]
|
|
||||||
xor rax, QWORD PTR [r11+r12+8]
|
|
||||||
movdqa xmm2, XMMWORD PTR [r9+r11]
|
|
||||||
pxor xmm3, xmm2
|
|
||||||
paddq xmm7, XMMWORD PTR [r10+r11]
|
|
||||||
paddq xmm1, xmm4
|
|
||||||
paddq xmm3, xmm6
|
|
||||||
movdqu XMMWORD PTR [r9+r11], xmm7
|
|
||||||
movdqu XMMWORD PTR [r12+r11], xmm3
|
|
||||||
movdqu XMMWORD PTR [r10+r11], xmm1
|
|
||||||
|
|
||||||
movdqa xmm7, xmm6
|
|
||||||
add r15, rax
|
|
||||||
add rsp, rdx
|
|
||||||
xor r10, 48
|
|
||||||
mov QWORD PTR [r10+r11], rsp
|
|
||||||
xor rsp, r13
|
|
||||||
mov r9d, esp
|
|
||||||
mov QWORD PTR [r10+r11+8], r15
|
|
||||||
and r9d, 2097136
|
|
||||||
xor r15, r14
|
|
||||||
movdqa xmm6, xmm5
|
|
||||||
dec r8d
|
|
||||||
jnz FN_PREFIX(CryptonightWOW_template_mainloop)
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightWOW_template_part3):
|
|
||||||
movd rsp, xmm9
|
|
||||||
|
|
||||||
mov rbx, QWORD PTR [rsp+136]
|
|
||||||
mov rbp, QWORD PTR [rsp+144]
|
|
||||||
mov rsi, QWORD PTR [rsp+152]
|
|
||||||
movaps xmm6, XMMWORD PTR [rsp+48]
|
|
||||||
movaps xmm7, XMMWORD PTR [rsp+32]
|
|
||||||
movaps xmm8, XMMWORD PTR [rsp+16]
|
|
||||||
movaps xmm9, XMMWORD PTR [rsp]
|
|
||||||
add rsp, 64
|
|
||||||
pop rdi
|
|
||||||
pop r15
|
|
||||||
pop r14
|
|
||||||
pop r13
|
|
||||||
pop r12
|
|
||||||
pop r11
|
|
||||||
pop r10
|
|
||||||
ret 0
|
|
||||||
FN_PREFIX(CryptonightWOW_template_end):
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightWOW_template_double_part1):
|
|
||||||
mov QWORD PTR [rsp+24], rbx
|
|
||||||
push rbp
|
|
||||||
push rsi
|
|
||||||
push rdi
|
|
||||||
push r12
|
|
||||||
push r13
|
|
||||||
push r14
|
|
||||||
push r15
|
|
||||||
sub rsp, 320
|
|
||||||
mov r14, QWORD PTR [rcx+32]
|
|
||||||
mov r8, rcx
|
|
||||||
xor r14, QWORD PTR [rcx]
|
|
||||||
mov r12, QWORD PTR [rcx+40]
|
|
||||||
mov ebx, r14d
|
|
||||||
mov rsi, QWORD PTR [rcx+224]
|
|
||||||
and ebx, 2097136
|
|
||||||
xor r12, QWORD PTR [rcx+8]
|
|
||||||
mov rcx, QWORD PTR [rcx+56]
|
|
||||||
xor rcx, QWORD PTR [r8+24]
|
|
||||||
mov rax, QWORD PTR [r8+48]
|
|
||||||
xor rax, QWORD PTR [r8+16]
|
|
||||||
mov r15, QWORD PTR [rdx+32]
|
|
||||||
xor r15, QWORD PTR [rdx]
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov rcx, QWORD PTR [r8+88]
|
|
||||||
xor rcx, QWORD PTR [r8+72]
|
|
||||||
mov r13, QWORD PTR [rdx+40]
|
|
||||||
mov rdi, QWORD PTR [rdx+224]
|
|
||||||
xor r13, QWORD PTR [rdx+8]
|
|
||||||
movaps XMMWORD PTR [rsp+160], xmm6
|
|
||||||
movaps XMMWORD PTR [rsp+176], xmm7
|
|
||||||
movaps XMMWORD PTR [rsp+192], xmm8
|
|
||||||
movaps XMMWORD PTR [rsp+208], xmm9
|
|
||||||
movaps XMMWORD PTR [rsp+224], xmm10
|
|
||||||
movaps XMMWORD PTR [rsp+240], xmm11
|
|
||||||
movaps XMMWORD PTR [rsp+256], xmm12
|
|
||||||
movaps XMMWORD PTR [rsp+272], xmm13
|
|
||||||
movaps XMMWORD PTR [rsp+288], xmm14
|
|
||||||
movaps XMMWORD PTR [rsp+304], xmm15
|
|
||||||
movd xmm7, rax
|
|
||||||
mov rax, QWORD PTR [r8+80]
|
|
||||||
xor rax, QWORD PTR [r8+64]
|
|
||||||
|
|
||||||
movaps xmm1, XMMWORD PTR [rdx+96]
|
|
||||||
movaps xmm2, XMMWORD PTR [r8+96]
|
|
||||||
movaps XMMWORD PTR [rsp], xmm1
|
|
||||||
movaps XMMWORD PTR [rsp+16], xmm2
|
|
||||||
|
|
||||||
mov r8d, r15d
|
|
||||||
punpcklqdq xmm7, xmm0
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov rcx, QWORD PTR [rdx+56]
|
|
||||||
xor rcx, QWORD PTR [rdx+24]
|
|
||||||
movd xmm9, rax
|
|
||||||
mov QWORD PTR [rsp+128], rsi
|
|
||||||
mov rax, QWORD PTR [rdx+48]
|
|
||||||
xor rax, QWORD PTR [rdx+16]
|
|
||||||
punpcklqdq xmm9, xmm0
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov rcx, QWORD PTR [rdx+88]
|
|
||||||
xor rcx, QWORD PTR [rdx+72]
|
|
||||||
movd xmm8, rax
|
|
||||||
mov QWORD PTR [rsp+136], rdi
|
|
||||||
mov rax, QWORD PTR [rdx+80]
|
|
||||||
xor rax, QWORD PTR [rdx+64]
|
|
||||||
punpcklqdq xmm8, xmm0
|
|
||||||
and r8d, 2097136
|
|
||||||
movd xmm0, rcx
|
|
||||||
mov r11d, 524288
|
|
||||||
movd xmm10, rax
|
|
||||||
punpcklqdq xmm10, xmm0
|
|
||||||
|
|
||||||
movd xmm14, QWORD PTR [rsp+128]
|
|
||||||
movd xmm15, QWORD PTR [rsp+136]
|
|
||||||
|
|
||||||
ALIGN(64)
|
|
||||||
FN_PREFIX(CryptonightWOW_template_double_mainloop):
|
|
||||||
movdqu xmm6, XMMWORD PTR [rbx+rsi]
|
|
||||||
movd xmm0, r12
|
|
||||||
mov ecx, ebx
|
|
||||||
movd xmm3, r14
|
|
||||||
punpcklqdq xmm3, xmm0
|
|
||||||
xor ebx, 16
|
|
||||||
aesenc xmm6, xmm3
|
|
||||||
movd rdx, xmm6
|
|
||||||
movd xmm4, r15
|
|
||||||
movdqu xmm0, XMMWORD PTR [rbx+rsi]
|
|
||||||
xor ebx, 48
|
|
||||||
paddq xmm0, xmm7
|
|
||||||
movdqu xmm1, XMMWORD PTR [rbx+rsi]
|
|
||||||
movdqu XMMWORD PTR [rbx+rsi], xmm0
|
|
||||||
paddq xmm1, xmm3
|
|
||||||
xor ebx, 16
|
|
||||||
mov eax, ebx
|
|
||||||
xor rax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [rbx+rsi]
|
|
||||||
movdqu XMMWORD PTR [rbx+rsi], xmm1
|
|
||||||
paddq xmm0, xmm9
|
|
||||||
movdqu XMMWORD PTR [rax+rsi], xmm0
|
|
||||||
movdqa xmm0, xmm6
|
|
||||||
pxor xmm0, xmm7
|
|
||||||
movdqu XMMWORD PTR [rcx+rsi], xmm0
|
|
||||||
mov esi, edx
|
|
||||||
movdqu xmm5, XMMWORD PTR [r8+rdi]
|
|
||||||
and esi, 2097136
|
|
||||||
mov ecx, r8d
|
|
||||||
movd xmm0, r13
|
|
||||||
punpcklqdq xmm4, xmm0
|
|
||||||
xor r8d, 16
|
|
||||||
aesenc xmm5, xmm4
|
|
||||||
movdqu xmm0, XMMWORD PTR [r8+rdi]
|
|
||||||
xor r8d, 48
|
|
||||||
paddq xmm0, xmm8
|
|
||||||
movdqu xmm1, XMMWORD PTR [r8+rdi]
|
|
||||||
movdqu XMMWORD PTR [r8+rdi], xmm0
|
|
||||||
paddq xmm1, xmm4
|
|
||||||
xor r8d, 16
|
|
||||||
mov eax, r8d
|
|
||||||
xor rax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [r8+rdi]
|
|
||||||
movdqu XMMWORD PTR [r8+rdi], xmm1
|
|
||||||
paddq xmm0, xmm10
|
|
||||||
movdqu XMMWORD PTR [rax+rdi], xmm0
|
|
||||||
movdqa xmm0, xmm5
|
|
||||||
pxor xmm0, xmm8
|
|
||||||
movdqu XMMWORD PTR [rcx+rdi], xmm0
|
|
||||||
movd rdi, xmm5
|
|
||||||
movd rcx, xmm14
|
|
||||||
mov ebp, edi
|
|
||||||
mov r8, QWORD PTR [rcx+rsi]
|
|
||||||
mov r10, QWORD PTR [rcx+rsi+8]
|
|
||||||
lea r9, QWORD PTR [rcx+rsi]
|
|
||||||
xor esi, 16
|
|
||||||
|
|
||||||
movd xmm0, rsp
|
|
||||||
movd xmm1, rsi
|
|
||||||
movd xmm2, rdi
|
|
||||||
movd xmm11, rbp
|
|
||||||
movd xmm12, r15
|
|
||||||
movd xmm13, rdx
|
|
||||||
mov [rsp+104], rcx
|
|
||||||
mov [rsp+112], r9
|
|
||||||
|
|
||||||
mov ebx, DWORD PTR [rsp+16]
|
|
||||||
mov esi, DWORD PTR [rsp+20]
|
|
||||||
mov edi, DWORD PTR [rsp+24]
|
|
||||||
mov ebp, DWORD PTR [rsp+28]
|
|
||||||
|
|
||||||
lea eax, [ebx+esi]
|
|
||||||
lea edx, [edi+ebp]
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
xor r8, rax
|
|
||||||
|
|
||||||
movd esp, xmm3
|
|
||||||
pextrd r15d, xmm3, 2
|
|
||||||
movd eax, xmm7
|
|
||||||
movd edx, xmm9
|
|
||||||
pextrd r9d, xmm9, 2
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightWOW_template_double_part2):
|
|
||||||
|
|
||||||
movd rsp, xmm0
|
|
||||||
mov DWORD PTR [rsp+16], ebx
|
|
||||||
mov DWORD PTR [rsp+20], esi
|
|
||||||
mov DWORD PTR [rsp+24], edi
|
|
||||||
mov DWORD PTR [rsp+28], ebp
|
|
||||||
|
|
||||||
movd rsi, xmm1
|
|
||||||
movd rdi, xmm2
|
|
||||||
movd rbp, xmm11
|
|
||||||
movd r15, xmm12
|
|
||||||
movd rdx, xmm13
|
|
||||||
mov rcx, [rsp+104]
|
|
||||||
mov r9, [rsp+112]
|
|
||||||
|
|
||||||
mov rbx, r8
|
|
||||||
mov rax, r8
|
|
||||||
mul rdx
|
|
||||||
and ebp, 2097136
|
|
||||||
mov r8, rax
|
|
||||||
movd xmm1, rdx
|
|
||||||
movd xmm0, r8
|
|
||||||
punpcklqdq xmm1, xmm0
|
|
||||||
pxor xmm1, XMMWORD PTR [rcx+rsi]
|
|
||||||
xor esi, 48
|
|
||||||
paddq xmm1, xmm7
|
|
||||||
movdqu xmm2, XMMWORD PTR [rsi+rcx]
|
|
||||||
xor rdx, QWORD PTR [rsi+rcx]
|
|
||||||
paddq xmm2, xmm3
|
|
||||||
xor r8, QWORD PTR [rsi+rcx+8]
|
|
||||||
movdqu XMMWORD PTR [rsi+rcx], xmm1
|
|
||||||
xor esi, 16
|
|
||||||
mov eax, esi
|
|
||||||
mov rsi, rcx
|
|
||||||
movdqu xmm0, XMMWORD PTR [rax+rcx]
|
|
||||||
movdqu XMMWORD PTR [rax+rcx], xmm2
|
|
||||||
paddq xmm0, xmm9
|
|
||||||
add r12, r8
|
|
||||||
xor rax, 32
|
|
||||||
add r14, rdx
|
|
||||||
movdqa xmm9, xmm7
|
|
||||||
movdqa xmm7, xmm6
|
|
||||||
movdqu XMMWORD PTR [rax+rcx], xmm0
|
|
||||||
mov QWORD PTR [r9+8], r12
|
|
||||||
xor r12, r10
|
|
||||||
mov QWORD PTR [r9], r14
|
|
||||||
movd rcx, xmm15
|
|
||||||
xor r14, rbx
|
|
||||||
mov r10d, ebp
|
|
||||||
mov ebx, r14d
|
|
||||||
xor ebp, 16
|
|
||||||
and ebx, 2097136
|
|
||||||
mov r8, QWORD PTR [r10+rcx]
|
|
||||||
mov r9, QWORD PTR [r10+rcx+8]
|
|
||||||
|
|
||||||
movd xmm0, rsp
|
|
||||||
movd xmm1, rbx
|
|
||||||
movd xmm2, rsi
|
|
||||||
movd xmm11, rdi
|
|
||||||
movd xmm12, rbp
|
|
||||||
movd xmm13, r15
|
|
||||||
mov [rsp+104], rcx
|
|
||||||
mov [rsp+112], r9
|
|
||||||
|
|
||||||
mov ebx, DWORD PTR [rsp]
|
|
||||||
mov esi, DWORD PTR [rsp+4]
|
|
||||||
mov edi, DWORD PTR [rsp+8]
|
|
||||||
mov ebp, DWORD PTR [rsp+12]
|
|
||||||
|
|
||||||
lea eax, [ebx+esi]
|
|
||||||
lea edx, [edi+ebp]
|
|
||||||
shl rdx, 32
|
|
||||||
or rax, rdx
|
|
||||||
|
|
||||||
xor r8, rax
|
|
||||||
movd xmm3, r8
|
|
||||||
|
|
||||||
movd esp, xmm4
|
|
||||||
pextrd r15d, xmm4, 2
|
|
||||||
movd eax, xmm8
|
|
||||||
movd edx, xmm10
|
|
||||||
pextrd r9d, xmm10, 2
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightWOW_template_double_part3):
|
|
||||||
|
|
||||||
movd rsp, xmm0
|
|
||||||
mov DWORD PTR [rsp], ebx
|
|
||||||
mov DWORD PTR [rsp+4], esi
|
|
||||||
mov DWORD PTR [rsp+8], edi
|
|
||||||
mov DWORD PTR [rsp+12], ebp
|
|
||||||
|
|
||||||
movd rbx, xmm1
|
|
||||||
movd rsi, xmm2
|
|
||||||
movd rdi, xmm11
|
|
||||||
movd rbp, xmm12
|
|
||||||
movd r15, xmm13
|
|
||||||
mov rcx, [rsp+104]
|
|
||||||
mov r9, [rsp+112]
|
|
||||||
|
|
||||||
mov rax, r8
|
|
||||||
mul rdi
|
|
||||||
movd xmm1, rdx
|
|
||||||
movd xmm0, rax
|
|
||||||
punpcklqdq xmm1, xmm0
|
|
||||||
mov rdi, rcx
|
|
||||||
mov r8, rax
|
|
||||||
pxor xmm1, XMMWORD PTR [rbp+rcx]
|
|
||||||
xor ebp, 48
|
|
||||||
paddq xmm1, xmm8
|
|
||||||
xor r8, QWORD PTR [rbp+rcx+8]
|
|
||||||
xor rdx, QWORD PTR [rbp+rcx]
|
|
||||||
add r13, r8
|
|
||||||
movdqu xmm2, XMMWORD PTR [rbp+rcx]
|
|
||||||
add r15, rdx
|
|
||||||
movdqu XMMWORD PTR [rbp+rcx], xmm1
|
|
||||||
paddq xmm2, xmm4
|
|
||||||
xor ebp, 16
|
|
||||||
mov eax, ebp
|
|
||||||
xor rax, 32
|
|
||||||
movdqu xmm0, XMMWORD PTR [rbp+rcx]
|
|
||||||
movdqu XMMWORD PTR [rbp+rcx], xmm2
|
|
||||||
paddq xmm0, xmm10
|
|
||||||
movdqu XMMWORD PTR [rax+rcx], xmm0
|
|
||||||
movd rax, xmm3
|
|
||||||
movdqa xmm10, xmm8
|
|
||||||
mov QWORD PTR [r10+rcx], r15
|
|
||||||
movdqa xmm8, xmm5
|
|
||||||
xor r15, rax
|
|
||||||
mov QWORD PTR [r10+rcx+8], r13
|
|
||||||
mov r8d, r15d
|
|
||||||
xor r13, r9
|
|
||||||
and r8d, 2097136
|
|
||||||
dec r11d
|
|
||||||
jnz FN_PREFIX(CryptonightWOW_template_double_mainloop)
|
|
||||||
|
|
||||||
FN_PREFIX(CryptonightWOW_template_double_part4):
|
|
||||||
|
|
||||||
mov rbx, QWORD PTR [rsp+400]
|
|
||||||
movaps xmm6, XMMWORD PTR [rsp+160]
|
|
||||||
movaps xmm7, XMMWORD PTR [rsp+176]
|
|
||||||
movaps xmm8, XMMWORD PTR [rsp+192]
|
|
||||||
movaps xmm9, XMMWORD PTR [rsp+208]
|
|
||||||
movaps xmm10, XMMWORD PTR [rsp+224]
|
|
||||||
movaps xmm11, XMMWORD PTR [rsp+240]
|
|
||||||
movaps xmm12, XMMWORD PTR [rsp+256]
|
|
||||||
movaps xmm13, XMMWORD PTR [rsp+272]
|
|
||||||
movaps xmm14, XMMWORD PTR [rsp+288]
|
|
||||||
movaps xmm15, XMMWORD PTR [rsp+304]
|
|
||||||
add rsp, 320
|
|
||||||
pop r15
|
|
||||||
pop r14
|
|
||||||
pop r13
|
|
||||||
pop r12
|
|
||||||
pop rdi
|
|
||||||
pop rsi
|
|
||||||
pop rbp
|
|
||||||
ret 0
|
|
||||||
FN_PREFIX(CryptonightWOW_template_double_end):
|
|
|
@ -5,7 +5,8 @@
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
* Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,8 +22,8 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __IWORKER_H__
|
#ifndef XMRIG_IWORKER_H
|
||||||
#define __IWORKER_H__
|
#define XMRIG_IWORKER_H
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -31,7 +32,7 @@
|
||||||
class IWorker
|
class IWorker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~IWorker() {}
|
virtual ~IWorker() = default;
|
||||||
|
|
||||||
virtual bool selfTest() = 0;
|
virtual bool selfTest() = 0;
|
||||||
virtual size_t id() const = 0;
|
virtual size_t id() const = 0;
|
||||||
|
@ -41,4 +42,4 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // __IWORKER_H__
|
#endif // XMRIG_IWORKER_H
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#define APP_ID "xmrig"
|
#define APP_ID "xmrig"
|
||||||
#define APP_NAME "XMRig"
|
#define APP_NAME "XMRig"
|
||||||
#define APP_DESC "XMRig CPU miner"
|
#define APP_DESC "XMRig CPU miner"
|
||||||
#define APP_VERSION "2.13.0"
|
#define APP_VERSION "2.13.2-dev"
|
||||||
#define APP_DOMAIN "xmrig.com"
|
#define APP_DOMAIN "xmrig.com"
|
||||||
#define APP_SITE "www.xmrig.com"
|
#define APP_SITE "www.xmrig.com"
|
||||||
#define APP_COPYRIGHT "Copyright (C) 2016-2019 xmrig.com"
|
#define APP_COPYRIGHT "Copyright (C) 2016-2019 xmrig.com"
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
#define APP_VER_MAJOR 2
|
#define APP_VER_MAJOR 2
|
||||||
#define APP_VER_MINOR 13
|
#define APP_VER_MINOR 13
|
||||||
#define APP_VER_PATCH 0
|
#define APP_VER_PATCH 2
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# if (_MSC_VER >= 1910)
|
# if (_MSC_VER >= 1910)
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
|
|
||||||
#include "crypto/CryptoNight_test.h"
|
#include "crypto/CryptoNight_test.h"
|
||||||
|
@ -56,15 +55,6 @@ bool MultiWorker<N>::selfTest()
|
||||||
using namespace xmrig;
|
using namespace xmrig;
|
||||||
|
|
||||||
if (m_thread->algorithm() == CRYPTONIGHT) {
|
if (m_thread->algorithm() == CRYPTONIGHT) {
|
||||||
if (!verify2(VARIANT_WOW, test_input_WOW)) {
|
|
||||||
LOG_WARN("CryptonightR (Wownero) self-test failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!verify2(VARIANT_4, test_input_R)) {
|
|
||||||
LOG_WARN("CryptonightR self-test failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool rc = verify(VARIANT_0, test_output_v0) &&
|
const bool rc = verify(VARIANT_0, test_output_v0) &&
|
||||||
verify(VARIANT_1, test_output_v1) &&
|
verify(VARIANT_1, test_output_v1) &&
|
||||||
verify(VARIANT_2, test_output_v2) &&
|
verify(VARIANT_2, test_output_v2) &&
|
||||||
|
@ -73,6 +63,8 @@ bool MultiWorker<N>::selfTest()
|
||||||
verify(VARIANT_XAO, test_output_xao) &&
|
verify(VARIANT_XAO, test_output_xao) &&
|
||||||
verify(VARIANT_RTO, test_output_rto) &&
|
verify(VARIANT_RTO, test_output_rto) &&
|
||||||
verify(VARIANT_HALF, test_output_half) &&
|
verify(VARIANT_HALF, test_output_half) &&
|
||||||
|
verify2(VARIANT_WOW, test_output_wow) &&
|
||||||
|
verify2(VARIANT_4, test_output_r) &&
|
||||||
verify(VARIANT_WALTZ, test_output_waltz) &&
|
verify(VARIANT_WALTZ, test_output_waltz) &&
|
||||||
verify(VARIANT_RWZ, test_output_rwz);
|
verify(VARIANT_RWZ, test_output_rwz);
|
||||||
|
|
||||||
|
@ -181,61 +173,48 @@ bool MultiWorker<N>::verify(xmrig::Variant variant, const uint8_t *referenceValu
|
||||||
|
|
||||||
|
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
bool MultiWorker<N>::verify2(xmrig::Variant variant, const char *test_data)
|
bool MultiWorker<N>::verify2(xmrig::Variant variant, const uint8_t *referenceValue)
|
||||||
{
|
{
|
||||||
xmrig::CpuThread::cn_hash_fun func = m_thread->fn(variant);
|
xmrig::CpuThread::cn_hash_fun func = m_thread->fn(variant);
|
||||||
if (!func) {
|
if (!func) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::stringstream s(test_data);
|
for (size_t i = 0; i < (sizeof(cn_r_test_input) / sizeof(cn_r_test_input[0])); ++i) {
|
||||||
std::string expected_hex;
|
const size_t size = cn_r_test_input[i].size;
|
||||||
std::string input_hex;
|
for (size_t k = 0; k < N; ++k) {
|
||||||
uint64_t height;
|
memcpy(m_state.blob + (k * size), cn_r_test_input[i].data, size);
|
||||||
while (!s.eof())
|
|
||||||
{
|
|
||||||
uint8_t referenceValue[N * 32];
|
|
||||||
uint8_t input[N * 256];
|
|
||||||
|
|
||||||
s >> expected_hex;
|
|
||||||
s >> input_hex;
|
|
||||||
s >> height;
|
|
||||||
|
|
||||||
if ((expected_hex.length() != 64) || (input_hex.length() > 512))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool err = false;
|
func(m_state.blob, size, m_hash, m_ctx, cn_r_test_input[i].height);
|
||||||
|
|
||||||
for (int i = 0; i < 32; ++i)
|
for (size_t k = 0; k < N; ++k) {
|
||||||
{
|
if (memcmp(m_hash + k * 32, referenceValue + i * 32, sizeof m_hash / N) != 0) {
|
||||||
referenceValue[i] = (hf_hex2bin(expected_hex[i * 2], err) << 4) + hf_hex2bin(expected_hex[i * 2 + 1], err);
|
|
||||||
}
|
|
||||||
|
|
||||||
const size_t input_len = input_hex.length() / 2;
|
|
||||||
for (size_t i = 0; i < input_len; ++i)
|
|
||||||
{
|
|
||||||
input[i] = (hf_hex2bin(input_hex[i * 2], err) << 4) + hf_hex2bin(input_hex[i * 2 + 1], err);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i = 1; i < N; ++i)
|
|
||||||
{
|
|
||||||
memcpy(input + i * input_len, input, input_len);
|
|
||||||
memcpy(referenceValue + i * 32, referenceValue, 32);
|
|
||||||
}
|
|
||||||
|
|
||||||
func(input, input_len, m_hash, m_ctx, height);
|
|
||||||
if (memcmp(m_hash, referenceValue, sizeof m_hash) != 0)
|
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<>
|
||||||
|
bool MultiWorker<1>::verify2(xmrig::Variant variant, const uint8_t *referenceValue)
|
||||||
|
{
|
||||||
|
xmrig::CpuThread::cn_hash_fun func = m_thread->fn(variant);
|
||||||
|
if (!func) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < (sizeof(cn_r_test_input) / sizeof(cn_r_test_input[0])); ++i) {
|
||||||
|
func(cn_r_test_input[i].data, cn_r_test_input[i].size, m_hash, m_ctx, cn_r_test_input[i].height);
|
||||||
|
|
||||||
|
if (memcmp(m_hash, referenceValue + i * 32, sizeof m_hash) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
bool resume(const xmrig::Job &job);
|
bool resume(const xmrig::Job &job);
|
||||||
bool verify(xmrig::Variant variant, const uint8_t *referenceValue);
|
bool verify(xmrig::Variant variant, const uint8_t *referenceValue);
|
||||||
bool verify2(xmrig::Variant variant, const char *test_data);
|
bool verify2(xmrig::Variant variant, const uint8_t *referenceValue);
|
||||||
void consumeJob();
|
void consumeJob();
|
||||||
void save(const xmrig::Job &job);
|
void save(const xmrig::Job &job);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue