From 920a334f7c8c8280ce3e943e2346906ae868b7c8 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Fri, 22 Mar 2019 17:38:31 +0100 Subject: [PATCH 01/62] AMD: workaround driver memory leaks Instead of creating a new kernel for each block we pre-build 25 kernel within a chunk. This reduces the calls to `clCreateProgramWithSource` which creates the leaks and will crash the miner after a few hours. Workaround was first introduced by @SChernykh in xmrig-amd --- xmrstak/backend/amd/OclCryptonightR_gen.cpp | 237 ++++++++++-------- xmrstak/backend/amd/OclCryptonightR_gen.hpp | 2 +- xmrstak/backend/amd/amd_gpu/gpu.cpp | 15 +- xmrstak/backend/amd/amd_gpu/gpu.hpp | 1 + .../{cryptonight_r.cl => cryptonight_r.rtcl} | 33 +-- .../amd/amd_gpu/opencl/cryptonight_r_def.rtcl | 33 +++ 6 files changed, 190 insertions(+), 131 deletions(-) rename xmrstak/backend/amd/amd_gpu/opencl/{cryptonight_r.cl => cryptonight_r.rtcl} (88%) create mode 100644 xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r_def.rtcl diff --git a/xmrstak/backend/amd/OclCryptonightR_gen.cpp b/xmrstak/backend/amd/OclCryptonightR_gen.cpp index ccb836e41..9720c7815 100644 --- a/xmrstak/backend/amd/OclCryptonightR_gen.cpp +++ b/xmrstak/backend/amd/OclCryptonightR_gen.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace xmrstak @@ -63,15 +64,15 @@ static std::string get_code(const V4_Instruction* code, int code_size) struct CacheEntry { - CacheEntry(xmrstak_algo algo, uint64_t height, size_t deviceIdx, cl_program program) : + CacheEntry(xmrstak_algo algo, uint64_t height_offset, size_t deviceIdx, cl_program program) : algo(algo), - height(height), + height_offset(height_offset), deviceIdx(deviceIdx), program(program) {} xmrstak_algo algo; - uint64_t height; + uint64_t height_offset; size_t deviceIdx; cl_program program; }; @@ -99,6 +100,34 @@ static std::mutex background_tasks_mutex; static std::vector background_tasks; static std::thread* background_thread = nullptr; +static cl_program search_program( + const GpuContext* ctx, + xmrstak_algo algo, + uint64_t height_offset, + bool lock_cache = true +) +{ + if(lock_cache) + CryptonightR_cache_mutex.ReadLock(); + + // Check if the cache has this program + for (const CacheEntry& entry : CryptonightR_cache) + { + if ((entry.algo == algo) && (entry.height_offset == height_offset) && (entry.deviceIdx == ctx->deviceIdx)) + { + printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height_offset %llu found in cache", height_offset); + auto result = entry.program; + if(lock_cache) + CryptonightR_cache_mutex.UnLock(); + return result; + } + } + if(lock_cache) + CryptonightR_cache_mutex.UnLock(); + + return nullptr; +} + static void background_thread_proc() { std::vector tasks; @@ -133,60 +162,48 @@ static void background_exec(T&& func) static cl_program CryptonightR_build_program( const GpuContext* ctx, xmrstak_algo algo, - uint64_t height, + uint64_t height_offset, + uint64_t height_chunk_size, uint32_t precompile_count, std::string source_code, std::string options) { - std::vector old_programs; - old_programs.reserve(32); - { + std::vector old_programs; + old_programs.reserve(32); + { CryptonightR_cache_mutex.WriteLock(); - // Remove old programs from cache - for(size_t i = 0; i < CryptonightR_cache.size();) - { - const CacheEntry& entry = CryptonightR_cache[i]; - if ((entry.algo == algo) && (entry.height + 2 + precompile_count < height)) - { - printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu released (old program)", entry.height); - old_programs.push_back(entry.program); - CryptonightR_cache[i] = std::move(CryptonightR_cache.back()); - CryptonightR_cache.pop_back(); - } - else - { - ++i; - } - } + // Remove old programs from cache + for(size_t i = 0; i < CryptonightR_cache.size();) + { + const CacheEntry& entry = CryptonightR_cache[i]; + if ((entry.algo == algo) && (entry.height_offset + (2 + precompile_count) * height_chunk_size < height_offset)) + { + printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height_offset %llu released (old program)", entry.height_offset); + old_programs.push_back(entry.program); + CryptonightR_cache[i] = std::move(CryptonightR_cache.back()); + CryptonightR_cache.pop_back(); + } + else + { + ++i; + } + } CryptonightR_cache_mutex.UnLock(); - } + } - for(cl_program p : old_programs) { - clReleaseProgram(p); - } + for(cl_program p : old_programs) + { + clReleaseProgram(p); + } - std::lock_guard g1(CryptonightR_build_mutex); + std::lock_guard g1(CryptonightR_build_mutex); - cl_program program = nullptr; - { - CryptonightR_cache_mutex.ReadLock(); + cl_program program = search_program(ctx, algo, height_offset); - // Check if the cache already has this program (some other thread might have added it first) - for (const CacheEntry& entry : CryptonightR_cache) - { - if ((entry.algo == algo) && (entry.height == height) && (entry.deviceIdx == ctx->deviceIdx)) - { - program = entry.program; - break; - } - } - CryptonightR_cache_mutex.UnLock(); - } - - if (program) { - return program; - } + if(program) { + return program; + } cl_int ret; const char* source = source_code.c_str(); @@ -239,54 +256,83 @@ static cl_program CryptonightR_build_program( } while(status == CL_BUILD_IN_PROGRESS); + CryptonightR_cache_mutex.WriteLock(); + auto cached_program = search_program(ctx, algo, height_offset, false); - printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu compiled", height); + if(cached_program) + { + printer::inst()->print_msg(LDEBUG, "CryptonightR: release already existing program %llu", height_offset); + clReleaseProgram(program); + program = cached_program; + } + else + { + CryptonightR_cache.emplace_back(algo, height_offset, ctx->deviceIdx, program); + printer::inst()->print_msg(LDEBUG, "CryptonightR: cache compiled program for height_offset %llu", height_offset); + } - CryptonightR_cache_mutex.WriteLock(); - CryptonightR_cache.emplace_back(algo, height, ctx->deviceIdx, program); CryptonightR_cache_mutex.UnLock(); - return program; + return program; } -cl_program CryptonightR_get_program(GpuContext* ctx, xmrstak_algo algo, uint64_t height, uint32_t precompile_count, bool background) +cl_program CryptonightR_get_program(GpuContext* ctx, xmrstak_algo algo, uint64_t height_offset, uint64_t height_chunk_size, uint32_t precompile_count, bool background) { - printer::inst()->print_msg(LDEBUG, "CryptonightR: start %llu released",height); + if (background) + { + background_exec([=](){ CryptonightR_get_program(ctx, algo, height_offset, height_chunk_size, precompile_count, false); }); + return nullptr; + } - if (background) { - background_exec([=](){ CryptonightR_get_program(ctx, algo, height, precompile_count, false); }); - return nullptr; - } + auto program = search_program(ctx, algo, height_offset); - const char* source_code_template = - #include "amd_gpu/opencl/wolf-aes.cl" - #include "amd_gpu/opencl/cryptonight_r.cl" - ; - const char include_name[] = "XMRSTAK_INCLUDE_RANDOM_MATH"; - const char* offset = strstr(source_code_template, include_name); - if (!offset) - { - printer::inst()->print_msg(LDEBUG, "CryptonightR_get_program: XMRSTAK_INCLUDE_RANDOM_MATH not found in cryptonight_r.cl", algo); - return nullptr; - } + if(program != nullptr) + return program; - V4_Instruction code[256]; - int code_size; - switch (algo.Id()) - { - case cryptonight_r_wow: - code_size = v4_random_math_init(code, height); - break; - case cryptonight_r: - code_size = v4_random_math_init(code, height); - break; - default: - printer::inst()->print_msg(L0, "CryptonightR_get_program: invalid algo %d", algo); - return nullptr; - } + printer::inst()->print_msg(LDEBUG, "CryptonightR: create code for block %llu to %llu",height_offset, height_offset + height_chunk_size); + + const char* source_code_definitions= + #include "amd_gpu/opencl/wolf-aes.cl" + #include "amd_gpu/opencl/cryptonight_r_def.rtcl" + ; + + const char* source_code_template = + #include "amd_gpu/opencl/cryptonight_r.rtcl" + ; + const char include_name[] = "XMRSTAK_INCLUDE_RANDOM_MATH"; + const char* offset = strstr(source_code_template, include_name); + if (!offset) + { + printer::inst()->print_msg(LDEBUG, "CryptonightR_get_program: XMRSTAK_INCLUDE_RANDOM_MATH not found in cryptonight_r.cl", algo); + return nullptr; + } + + std::string source_code(source_code_definitions); + + for(uint64_t c = 0; c < height_chunk_size; ++c) + { + V4_Instruction code[256]; + int code_size; + switch (algo.Id()) + { + case cryptonight_r_wow: + code_size = v4_random_math_init(code, height_offset + c); + break; + case cryptonight_r: + code_size = v4_random_math_init(code, height_offset + c); + break; + default: + printer::inst()->print_msg(L0, "CryptonightR_get_program: invalid algo %d", algo); + return nullptr; + } - std::string source_code(source_code_template, offset); - source_code.append(get_code(code, code_size)); - source_code.append(offset + sizeof(include_name) - 1); + std::string kernel_code(source_code_template, offset); + kernel_code.append(get_code(code, code_size)); + kernel_code.append(offset + sizeof(include_name) - 1); + + std::string kernel_name = "cn1_cryptonight_r_" + std::to_string(height_offset + c); + + source_code += std::regex_replace(kernel_code, std::regex("cn1_cryptonight_r"), kernel_name); + } // scratchpad size for the selected mining algorithm size_t hashMemSize = algo.Mem(); @@ -325,27 +371,12 @@ cl_program CryptonightR_get_program(GpuContext* ctx, xmrstak_algo algo, uint64_t options += " -cl-fp32-correctly-rounded-divide-sqrt"; - const char* source = source_code.c_str(); + program = search_program(ctx, algo, height_offset); - { - CryptonightR_cache_mutex.ReadLock(); - - // Check if the cache has this program - for (const CacheEntry& entry : CryptonightR_cache) - { - if ((entry.algo == algo) && (entry.height == height) && (entry.deviceIdx == ctx->deviceIdx)) - { - printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu found in cache", height); - auto result = entry.program; - CryptonightR_cache_mutex.UnLock(); - return result; - } - } - CryptonightR_cache_mutex.UnLock(); - - } + if(program != nullptr) + return program; - return CryptonightR_build_program(ctx, algo, height, precompile_count, source, options); + return CryptonightR_build_program(ctx, algo, height_offset, precompile_count, height_chunk_size, source_code, options); } } // namespace amd diff --git a/xmrstak/backend/amd/OclCryptonightR_gen.hpp b/xmrstak/backend/amd/OclCryptonightR_gen.hpp index 7dce77b85..b504b5d0c 100644 --- a/xmrstak/backend/amd/OclCryptonightR_gen.hpp +++ b/xmrstak/backend/amd/OclCryptonightR_gen.hpp @@ -20,7 +20,7 @@ namespace amd { cl_program CryptonightR_get_program(GpuContext* ctx, const xmrstak_algo algo, - uint64_t height, uint32_t precompile_count, bool background = false); + uint64_t height_offset, uint64_t height_chunk_size, uint32_t precompile_count, bool background = false); } // namespace amd } // namespace xmrstak diff --git a/xmrstak/backend/amd/amd_gpu/gpu.cpp b/xmrstak/backend/amd/amd_gpu/gpu.cpp index 9f3f75469..6dd7c45ee 100644 --- a/xmrstak/backend/amd/amd_gpu/gpu.cpp +++ b/xmrstak/backend/amd/amd_gpu/gpu.cpp @@ -938,14 +938,17 @@ size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t tar if ((miner_algo == cryptonight_r) || (miner_algo == cryptonight_r_wow)) { - uint32_t PRECOMPILATION_DEPTH = 4; + uint32_t PRECOMPILATION_DEPTH = 1; + constexpr uint64_t height_chunk_size = 25; + uint64_t height_offset = (height / height_chunk_size) * height_chunk_size; // Get new kernel - cl_program program = xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height, PRECOMPILATION_DEPTH); + cl_program program = xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height_offset, height_chunk_size, PRECOMPILATION_DEPTH); - if (program != ctx->ProgramCryptonightR) { + if (program != ctx->ProgramCryptonightR || ctx->last_block_height != height) { cl_int ret; - cl_kernel kernel = clCreateKernel(program, "cn1_cryptonight_r", &ret); + std::string kernel_name = "cn1_cryptonight_r_" + std::to_string(height); + cl_kernel kernel = clCreateKernel(program, kernel_name.c_str(), &ret); if (ret != CL_SUCCESS) { printer::inst()->print_msg(LDEBUG, "CryptonightR: clCreateKernel returned error %s", err_to_str(ret)); @@ -958,10 +961,12 @@ size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t tar Kernels[1] = kernel; } ctx->ProgramCryptonightR = program; + ctx->last_block_height = height; + printer::inst()->print_msg(LDEBUG, "Set height %llu", height); // Precompile next program in background for (int i = 1; i <= PRECOMPILATION_DEPTH; ++i) - xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height + i, PRECOMPILATION_DEPTH, true); + xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height_offset + i * height_chunk_size, height_chunk_size, PRECOMPILATION_DEPTH, true); printer::inst()->print_msg(LDEBUG, "Thread #%zu updated CryptonightR", ctx->deviceIdx); } diff --git a/xmrstak/backend/amd/amd_gpu/gpu.hpp b/xmrstak/backend/amd/amd_gpu/gpu.hpp index ae2b506db..ff56f0a9e 100644 --- a/xmrstak/backend/amd/amd_gpu/gpu.hpp +++ b/xmrstak/backend/amd/amd_gpu/gpu.hpp @@ -56,6 +56,7 @@ struct GpuContext std::map Program; std::map> Kernels; cl_program ProgramCryptonightR = nullptr; + uint64_t last_block_height = 0u; size_t freeMem; size_t maxMemPerAlloc; int computeUnits; diff --git a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r.cl b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r.rtcl similarity index 88% rename from xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r.cl rename to xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r.rtcl index 9edb774ad..cdb5aef3e 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r.rtcl @@ -1,4 +1,5 @@ R"===( + /* * 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 @@ -15,29 +16,15 @@ R"===( * */ -#define cryptonight_r_wow 15 -#define cryptonight_r 16 - -#define MEM_CHUNK (1 << MEM_CHUNK_EXPONENT) - -#if(STRIDED_INDEX==0) -# define IDX(x) (x) -#elif(STRIDED_INDEX==1) -# define IDX(x) (mul24(((uint)(x)), Threads)) -#elif(STRIDED_INDEX==2) -# define IDX(x) (((x) % MEM_CHUNK) + ((x) / MEM_CHUNK) * WORKSIZE * MEM_CHUNK) -#elif(STRIDED_INDEX==3) -# define IDX(x) ((x) * WORKSIZE) -#endif - +#ifndef SCRATCHPAD_CHUNK // __NV_CL_C_VERSION checks if NVIDIA opencl is used -#if(ALGO == cryptonight_monero_v8 && defined(__NV_CL_C_VERSION)) -# define SCRATCHPAD_CHUNK(N) (*(__local uint4*)((__local uchar*)(scratchpad_line) + (idx1 ^ (N << 4)))) -# define SCRATCHPAD_CHUNK_GLOBAL (*((__global uint16*)(Scratchpad + (IDX((idx0 & 0x1FFFC0U) >> 4))))) -#else -# define SCRATCHPAD_CHUNK(N) (Scratchpad[IDX(((idx) >> 4) ^ N)]) +# if((ALGO == cryptonight_r_wow || ALGO == cryptonight_r) && defined(__NV_CL_C_VERSION)) +# define SCRATCHPAD_CHUNK(N) (*(__local uint4*)((__local uchar*)(scratchpad_line) + (idx1 ^ (N << 4)))) +# define SCRATCHPAD_CHUNK_GLOBAL (*((__global uint16*)(Scratchpad + (IDX((idx0 & 0x1FFFC0U) >> 4))))) +# else +# define SCRATCHPAD_CHUNK(N) (Scratchpad[IDX(((idx) >> 4) ^ N)]) +# endif #endif - __attribute__((reqd_work_group_size(WORKSIZE, 1, 1))) __kernel void cn1_cryptonight_r(__global uint4 *Scratchpad, __global ulong *states, uint Threads) { @@ -162,7 +149,9 @@ __kernel void cn1_cryptonight_r(__global uint4 *Scratchpad, __global ulong *stat #endif #define ROT_BITS 32 - XMRSTAK_INCLUDE_RANDOM_MATH +XMRSTAK_INCLUDE_RANDOM_MATH + +#undef ROT_BITS #if (ALGO == cryptonight_r) diff --git a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r_def.rtcl b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r_def.rtcl new file mode 100644 index 000000000..2c318fcbf --- /dev/null +++ b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_r_def.rtcl @@ -0,0 +1,33 @@ +R"===( +/* + * 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 + * 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 . + * + */ + +#define cryptonight_r_wow 15 +#define cryptonight_r 16 + +#define MEM_CHUNK (1 << MEM_CHUNK_EXPONENT) + +#if(STRIDED_INDEX==0) +# define IDX(x) (x) +#elif(STRIDED_INDEX==1) +# define IDX(x) (mul24(((uint)(x)), Threads)) +#elif(STRIDED_INDEX==2) +# define IDX(x) (((x) % MEM_CHUNK) + ((x) / MEM_CHUNK) * WORKSIZE * MEM_CHUNK) +#elif(STRIDED_INDEX==3) +# define IDX(x) ((x) * WORKSIZE) +#endif + +)===" From ac03aba24a9d39aa0b3d4c952dae9af5b3079e5d Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Thu, 21 Mar 2019 22:04:17 +0100 Subject: [PATCH 02/62] simple miner startup Add the possibility to run a simplified miner configuration. IN the case the user like to use this mode the number of question to setup the miner will be reduced to a minimum. Additional changes: - add default values for `yes/no` questions --- xmrstak/cli/cli-miner.cpp | 91 ++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index 7b974f669..8060a42b3 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -118,13 +118,15 @@ void help() cout<<"Brought to by fireice_uk and psychocrypt under GPLv3."<> tmp; + getline(std::cin, tmp); + if(tmp.empty()) + tmp = default_value; std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower); } while(tmp != "y" && tmp != "n" && tmp != "yes" && tmp != "no"); @@ -161,9 +163,9 @@ std::string get_multipool_entry(bool& final) #ifdef CONF_NO_TLS bool tls = false; #else - bool tls = read_yes_no("- Does this pool port support TLS/SSL? Use no if unknown. (y/N)"); + bool tls = read_yes_no("- Does this pool port support TLS/SSL? Use no if unknown. (y/N)", "N"); #endif - bool nicehash = read_yes_no("- Do you want to use nicehash on this pool? (y/n)"); + bool nicehash = read_yes_no("- Do you want to use nicehash on this pool? (y/N)", "N"); int64_t pool_weight; std::cout << "- Please enter a weight for this pool: "<> port) || port < 0 || port > 65535) - { - std::cin.clear(); - std::cin.ignore(INT_MAX, '\n'); - std::cout << "Invalid port number. Please enter a number between 0 and 65535." << std::endl; + int32_t port; + while(!(std::cin >> port) || port < 0 || port > 65535) + { + std::cin.clear(); + std::cin.ignore(INT_MAX, '\n'); + std::cout << "Invalid port number. Please enter a number between 0 and 65535." << std::endl; + } + http_port = port; } - - http_port = port; #endif } @@ -734,13 +730,20 @@ int main(int argc, char *argv[]) } } - // check if we need a guided start - if(!configEditor::file_exist(params::inst().configFile)) - do_guided_config(); + bool hasConfigFile = configEditor::file_exist(params::inst().configFile); + bool hasPoolConfig = configEditor::file_exist(params::inst().configFilePools); + + if(!hasConfigFile || !hasPoolConfig) + { + bool use_simple_start = read_yes_no("\nUse simple setup method? (Y/n)", "Y"); - if(!configEditor::file_exist(params::inst().configFilePools)) - do_guided_pool_config(); + // check if we need a guided start + if(!hasConfigFile) + do_guided_config(use_simple_start); + if(!hasPoolConfig) + do_guided_pool_config(use_simple_start); + } if(!jconf::inst()->parse_config(params::inst().configFile.c_str(), params::inst().configFilePools.c_str())) { win_exit(); From 87e146e3c77ab41dc987fced2c5732d558f028af Mon Sep 17 00:00:00 2001 From: xmr-stak-team Date: Sun, 24 Mar 2019 20:07:14 +0100 Subject: [PATCH 03/62] format all files - add .clang-format from RYO This PR removes the space indention by tabs. --- .clang-format | 14 + xmrstak/backend/amd/OclCryptonightR_gen.cpp | 165 +- xmrstak/backend/amd/OclCryptonightR_gen.hpp | 2 +- xmrstak/backend/amd/amd_gpu/gpu.cpp | 401 ++- xmrstak/backend/amd/amd_gpu/gpu.hpp | 293 ++- .../backend/amd/amd_gpu/opencl/cryptonight.cl | 12 +- .../amd/amd_gpu/opencl/cryptonight_gpu.cl | 4 +- .../backend/amd/amd_gpu/opencl/groestl256.cl | 3 +- xmrstak/backend/amd/autoAdjust.hpp | 65 +- xmrstak/backend/amd/jconf.cpp | 55 +- xmrstak/backend/amd/jconf.hpp | 13 +- xmrstak/backend/amd/minethd.cpp | 56 +- xmrstak/backend/amd/minethd.hpp | 11 +- xmrstak/backend/backendConnector.cpp | 19 +- xmrstak/backend/backendConnector.hpp | 15 +- xmrstak/backend/cpu/autoAdjust.hpp | 33 +- xmrstak/backend/cpu/autoAdjustHwloc.hpp | 38 +- xmrstak/backend/cpu/cpuType.cpp | 95 +- xmrstak/backend/cpu/cpuType.hpp | 28 +- .../backend/cpu/crypto/CryptonightR_gen.cpp | 140 +- xmrstak/backend/cpu/crypto/c_blake256.c | 245 +- xmrstak/backend/cpu/crypto/c_blake256.h | 48 +- xmrstak/backend/cpu/crypto/c_groestl.c | 570 ++-- xmrstak/backend/cpu/crypto/c_groestl.h | 33 +- xmrstak/backend/cpu/crypto/c_jh.c | 635 +++-- xmrstak/backend/cpu/crypto/c_jh.h | 2 +- xmrstak/backend/cpu/crypto/c_keccak.c | 98 +- xmrstak/backend/cpu/crypto/c_keccak.h | 4 +- xmrstak/backend/cpu/crypto/c_skein.c | 2326 +++++++++-------- xmrstak/backend/cpu/crypto/c_skein.h | 23 +- xmrstak/backend/cpu/crypto/cn_gpu.hpp | 2 +- xmrstak/backend/cpu/crypto/cn_gpu_avx.cpp | 18 +- xmrstak/backend/cpu/crypto/cn_gpu_ssse3.cpp | 20 +- xmrstak/backend/cpu/crypto/cryptonight.h | 12 +- .../backend/cpu/crypto/cryptonight_aesni.h | 760 +++--- .../backend/cpu/crypto/cryptonight_common.cpp | 61 +- xmrstak/backend/cpu/crypto/groestl_tables.h | 34 +- xmrstak/backend/cpu/crypto/hash.h | 7 +- xmrstak/backend/cpu/crypto/int-util.h | 105 +- xmrstak/backend/cpu/crypto/skein_port.h | 175 +- xmrstak/backend/cpu/crypto/soft_aes.hpp | 100 +- .../backend/cpu/crypto/variant4_random_math.h | 197 +- xmrstak/backend/cpu/hwlocMemory.cpp | 20 +- xmrstak/backend/cpu/hwlocMemory.hpp | 2 +- xmrstak/backend/cpu/jconf.cpp | 34 +- xmrstak/backend/cpu/jconf.hpp | 12 +- xmrstak/backend/cpu/minethd.cpp | 206 +- xmrstak/backend/cpu/minethd.hpp | 23 +- xmrstak/backend/cryptonight.hpp | 131 +- xmrstak/backend/globalStates.cpp | 5 +- xmrstak/backend/globalStates.hpp | 13 +- xmrstak/backend/iBackend.hpp | 67 +- xmrstak/backend/miner_work.hpp | 163 +- .../backend/nvidia/CudaCryptonightR_gen.cpp | 491 ++-- .../backend/nvidia/CudaCryptonightR_gen.hpp | 9 +- xmrstak/backend/nvidia/autoAdjust.hpp | 38 +- xmrstak/backend/nvidia/jconf.cpp | 41 +- xmrstak/backend/nvidia/jconf.hpp | 15 +- xmrstak/backend/nvidia/minethd.cpp | 59 +- xmrstak/backend/nvidia/minethd.hpp | 12 +- .../backend/nvidia/nvcc_code/cryptonight.hpp | 46 +- xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp | 544 ++-- .../backend/nvidia/nvcc_code/cuda_blake.hpp | 176 +- xmrstak/backend/nvidia/nvcc_code/cuda_core.cu | 727 +++--- .../nvidia/nvcc_code/cuda_cryptonight_gpu.hpp | 158 +- .../backend/nvidia/nvcc_code/cuda_device.hpp | 49 +- .../backend/nvidia/nvcc_code/cuda_extra.cu | 318 ++- .../backend/nvidia/nvcc_code/cuda_extra.hpp | 140 +- .../nvidia/nvcc_code/cuda_fast_div_heavy.hpp | 1 - .../nvcc_code/cuda_fast_int_math_v2.hpp | 20 +- .../backend/nvidia/nvcc_code/cuda_groestl.hpp | 325 ++- xmrstak/backend/nvidia/nvcc_code/cuda_jh.hpp | 325 +-- .../backend/nvidia/nvcc_code/cuda_keccak.hpp | 143 +- .../backend/nvidia/nvcc_code/cuda_skein.hpp | 369 +-- xmrstak/backend/plugin.hpp | 42 +- xmrstak/backend/pool_data.hpp | 6 +- xmrstak/cli/cli-miner.cpp | 248 +- xmrstak/http/httpd.cpp | 33 +- xmrstak/http/httpd.hpp | 25 +- xmrstak/http/webdesign.cpp | 207 +- xmrstak/jconf.cpp | 183 +- xmrstak/jconf.hpp | 14 +- xmrstak/misc/coinDescription.hpp | 118 +- xmrstak/misc/configEditor.hpp | 13 +- xmrstak/misc/console.cpp | 34 +- xmrstak/misc/console.hpp | 28 +- xmrstak/misc/executor.cpp | 173 +- xmrstak/misc/executor.hpp | 32 +- xmrstak/misc/home_dir.hpp | 41 +- xmrstak/misc/jext.hpp | 4 +- xmrstak/misc/telemetry.cpp | 17 +- xmrstak/misc/telemetry.hpp | 4 +- xmrstak/misc/thdq.hpp | 32 +- xmrstak/misc/uac.cpp | 28 +- xmrstak/misc/utility.cpp | 26 +- xmrstak/misc/utility.hpp | 4 +- xmrstak/net/jpsock.cpp | 101 +- xmrstak/net/jpsock.hpp | 19 +- xmrstak/net/msgstruct.hpp | 112 +- xmrstak/net/socket.cpp | 51 +- xmrstak/net/socket.hpp | 18 +- xmrstak/net/socks.hpp | 19 +- xmrstak/params.hpp | 4 +- xmrstak/version.cpp | 8 +- xmrstak/version.hpp | 4 +- 105 files changed, 6903 insertions(+), 6364 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..25ba43d61 --- /dev/null +++ b/.clang-format @@ -0,0 +1,14 @@ +IndentWidth: 4 +TabWidth: 4 +ColumnLimit: 0 +BreakBeforeBraces: Allman +AllowShortIfStatementsOnASingleLine: false +IndentCaseLabels: false +SpaceBeforeParens: Never +UseTab: Always +AlignAfterOpenBracket: DontAlign +PointerBindsToType: true +BreakConstructorInitializers: AfterColon +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 diff --git a/xmrstak/backend/amd/OclCryptonightR_gen.cpp b/xmrstak/backend/amd/OclCryptonightR_gen.cpp index 9720c7815..2a60c46d9 100644 --- a/xmrstak/backend/amd/OclCryptonightR_gen.cpp +++ b/xmrstak/backend/amd/OclCryptonightR_gen.cpp @@ -1,20 +1,18 @@ -#include -#include -#include #include +#include +#include +#include #include - #include "xmrstak/backend/amd/OclCryptonightR_gen.hpp" #include "xmrstak/backend/cpu/crypto/variant4_random_math.h" -#include "xmrstak/misc/console.hpp" #include "xmrstak/cpputil/read_write_lock.h" +#include "xmrstak/misc/console.hpp" #include -#include #include #include - +#include namespace xmrstak { @@ -23,16 +21,16 @@ namespace amd static std::string get_code(const V4_Instruction* code, int code_size) { - std::stringstream s; + std::stringstream s; - for (int i = 0; i < code_size; ++i) + for(int i = 0; i < code_size; ++i) { const V4_Instruction inst = code[i]; const uint32_t a = inst.dst_index; const uint32_t b = inst.src_index; - switch (inst.opcode) + switch(inst.opcode) { case MUL: s << 'r' << a << "*=r" << b << ';'; @@ -59,37 +57,39 @@ static std::string get_code(const V4_Instruction* code, int code_size) s << '\n'; } - return s.str(); + return s.str(); } struct CacheEntry { - CacheEntry(xmrstak_algo algo, uint64_t height_offset, size_t deviceIdx, cl_program program) : - algo(algo), - height_offset(height_offset), - deviceIdx(deviceIdx), - program(program) - {} - - xmrstak_algo algo; - uint64_t height_offset; - size_t deviceIdx; - cl_program program; + CacheEntry(xmrstak_algo algo, uint64_t height_offset, size_t deviceIdx, cl_program program) : + algo(algo), + height_offset(height_offset), + deviceIdx(deviceIdx), + program(program) + { + } + + xmrstak_algo algo; + uint64_t height_offset; + size_t deviceIdx; + cl_program program; }; struct BackgroundTaskBase { - virtual ~BackgroundTaskBase() {} - virtual void exec() = 0; + virtual ~BackgroundTaskBase() {} + virtual void exec() = 0; }; -template +template struct BackgroundTask : public BackgroundTaskBase { - BackgroundTask(T&& func) : m_func(std::move(func)) {} - void exec() override { m_func(); } + BackgroundTask(T&& func) : + m_func(std::move(func)) {} + void exec() override { m_func(); } - T m_func; + T m_func; }; static ::cpputil::RWLock CryptonightR_cache_mutex; @@ -101,19 +101,18 @@ static std::vector background_tasks; static std::thread* background_thread = nullptr; static cl_program search_program( - const GpuContext* ctx, - xmrstak_algo algo, + const GpuContext* ctx, + xmrstak_algo algo, uint64_t height_offset, - bool lock_cache = true -) + bool lock_cache = true) { if(lock_cache) CryptonightR_cache_mutex.ReadLock(); // Check if the cache has this program - for (const CacheEntry& entry : CryptonightR_cache) + for(const CacheEntry& entry : CryptonightR_cache) { - if ((entry.algo == algo) && (entry.height_offset == height_offset) && (entry.deviceIdx == ctx->deviceIdx)) + if((entry.algo == algo) && (entry.height_offset == height_offset) && (entry.deviceIdx == ctx->deviceIdx)) { printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height_offset %llu found in cache", height_offset); auto result = entry.program; @@ -130,43 +129,46 @@ static cl_program search_program( static void background_thread_proc() { - std::vector tasks; - for (;;) { - tasks.clear(); - { - std::lock_guard g(background_tasks_mutex); - background_tasks.swap(tasks); - } - - for (BackgroundTaskBase* task : tasks) { - task->exec(); - delete task; - } + std::vector tasks; + for(;;) + { + tasks.clear(); + { + std::lock_guard g(background_tasks_mutex); + background_tasks.swap(tasks); + } + + for(BackgroundTaskBase* task : tasks) + { + task->exec(); + delete task; + } std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } + } } -template +template static void background_exec(T&& func) { - BackgroundTaskBase* task = new BackgroundTask(std::move(func)); + BackgroundTaskBase* task = new BackgroundTask(std::move(func)); - std::lock_guard g(background_tasks_mutex); - background_tasks.push_back(task); - if (!background_thread) { - background_thread = new std::thread(background_thread_proc); - } + std::lock_guard g(background_tasks_mutex); + background_tasks.push_back(task); + if(!background_thread) + { + background_thread = new std::thread(background_thread_proc); + } } static cl_program CryptonightR_build_program( - const GpuContext* ctx, - xmrstak_algo algo, - uint64_t height_offset, + const GpuContext* ctx, + xmrstak_algo algo, + uint64_t height_offset, uint64_t height_chunk_size, - uint32_t precompile_count, - std::string source_code, - std::string options) + uint32_t precompile_count, + std::string source_code, + std::string options) { std::vector old_programs; old_programs.reserve(32); @@ -177,7 +179,7 @@ static cl_program CryptonightR_build_program( for(size_t i = 0; i < CryptonightR_cache.size();) { const CacheEntry& entry = CryptonightR_cache[i]; - if ((entry.algo == algo) && (entry.height_offset + (2 + precompile_count) * height_chunk_size < height_offset)) + if((entry.algo == algo) && (entry.height_offset + (2 + precompile_count) * height_chunk_size < height_offset)) { printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height_offset %llu released (old program)", entry.height_offset); old_programs.push_back(entry.program); @@ -201,7 +203,8 @@ static cl_program CryptonightR_build_program( cl_program program = search_program(ctx, algo, height_offset); - if(program) { + if(program) + { return program; } @@ -211,7 +214,7 @@ static cl_program CryptonightR_build_program( program = clCreateProgramWithSource(ctx->opencl_ctx, 1, (const char**)&source, NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L0,"Error %s when calling clCreateProgramWithSource on the OpenCL miner code", err_to_str(ret)); + printer::inst()->print_msg(L0, "Error %s when calling clCreateProgramWithSource on the OpenCL miner code", err_to_str(ret)); return program; } @@ -219,11 +222,11 @@ static cl_program CryptonightR_build_program( if(ret != CL_SUCCESS) { size_t len; - printer::inst()->print_msg(L0,"Error %s when calling clBuildProgram.", err_to_str(ret)); + printer::inst()->print_msg(L0, "Error %s when calling clBuildProgram.", err_to_str(ret)); if((ret = clGetProgramBuildInfo(program, ctx->DeviceID, CL_PROGRAM_BUILD_LOG, 0, NULL, &len)) != CL_SUCCESS) { - printer::inst()->print_msg(L0,"Error %s when calling clGetProgramBuildInfo for length of build log output.", err_to_str(ret)); + printer::inst()->print_msg(L0, "Error %s when calling clGetProgramBuildInfo for length of build log output.", err_to_str(ret)); return program; } @@ -233,12 +236,12 @@ static cl_program CryptonightR_build_program( if((ret = clGetProgramBuildInfo(program, ctx->DeviceID, CL_PROGRAM_BUILD_LOG, len, BuildLog, NULL)) != CL_SUCCESS) { free(BuildLog); - printer::inst()->print_msg(L0,"Error %s when calling clGetProgramBuildInfo for build log.", err_to_str(ret)); + printer::inst()->print_msg(L0, "Error %s when calling clGetProgramBuildInfo for build log.", err_to_str(ret)); return program; } printer::inst()->print_str("Build log:\n"); - std::cerr<DeviceID, CL_PROGRAM_BUILD_STATUS, sizeof(cl_build_status), &status, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L0,"Error %s when calling clGetProgramBuildInfo for status of build.", err_to_str(ret)); + printer::inst()->print_msg(L0, "Error %s when calling clGetProgramBuildInfo for status of build.", err_to_str(ret)); return program; } std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - } - while(status == CL_BUILD_IN_PROGRESS); + } while(status == CL_BUILD_IN_PROGRESS); CryptonightR_cache_mutex.WriteLock(); auto cached_program = search_program(ctx, algo, height_offset, false); @@ -277,9 +279,9 @@ static cl_program CryptonightR_build_program( cl_program CryptonightR_get_program(GpuContext* ctx, xmrstak_algo algo, uint64_t height_offset, uint64_t height_chunk_size, uint32_t precompile_count, bool background) { - if (background) + if(background) { - background_exec([=](){ CryptonightR_get_program(ctx, algo, height_offset, height_chunk_size, precompile_count, false); }); + background_exec([=]() { CryptonightR_get_program(ctx, algo, height_offset, height_chunk_size, precompile_count, false); }); return nullptr; } @@ -288,19 +290,19 @@ cl_program CryptonightR_get_program(GpuContext* ctx, xmrstak_algo algo, uint64_t if(program != nullptr) return program; - printer::inst()->print_msg(LDEBUG, "CryptonightR: create code for block %llu to %llu",height_offset, height_offset + height_chunk_size); + printer::inst()->print_msg(LDEBUG, "CryptonightR: create code for block %llu to %llu", height_offset, height_offset + height_chunk_size); - const char* source_code_definitions= - #include "amd_gpu/opencl/wolf-aes.cl" - #include "amd_gpu/opencl/cryptonight_r_def.rtcl" - ; + const char* source_code_definitions = +#include "amd_gpu/opencl/cryptonight_r_def.rtcl" +#include "amd_gpu/opencl/wolf-aes.cl" + ; const char* source_code_template = - #include "amd_gpu/opencl/cryptonight_r.rtcl" - ; +#include "amd_gpu/opencl/cryptonight_r.rtcl" + ; const char include_name[] = "XMRSTAK_INCLUDE_RANDOM_MATH"; const char* offset = strstr(source_code_template, include_name); - if (!offset) + if(!offset) { printer::inst()->print_msg(LDEBUG, "CryptonightR_get_program: XMRSTAK_INCLUDE_RANDOM_MATH not found in cryptonight_r.cl", algo); return nullptr; @@ -312,7 +314,7 @@ cl_program CryptonightR_get_program(GpuContext* ctx, xmrstak_algo algo, uint64_t { V4_Instruction code[256]; int code_size; - switch (algo.Id()) + switch(algo.Id()) { case cryptonight_r_wow: code_size = v4_random_math_init(code, height_offset + c); @@ -370,7 +372,6 @@ cl_program CryptonightR_get_program(GpuContext* ctx, xmrstak_algo algo, uint64_t if(algo == cryptonight_gpu) options += " -cl-fp32-correctly-rounded-divide-sqrt"; - program = search_program(ctx, algo, height_offset); if(program != nullptr) diff --git a/xmrstak/backend/amd/OclCryptonightR_gen.hpp b/xmrstak/backend/amd/OclCryptonightR_gen.hpp index b504b5d0c..f8772b1f5 100644 --- a/xmrstak/backend/amd/OclCryptonightR_gen.hpp +++ b/xmrstak/backend/amd/OclCryptonightR_gen.hpp @@ -3,8 +3,8 @@ #include "xmrstak/backend/cryptonight.hpp" #include -#include #include +#include #if defined(__APPLE__) #include diff --git a/xmrstak/backend/amd/amd_gpu/gpu.cpp b/xmrstak/backend/amd/amd_gpu/gpu.cpp index 6dd7c45ee..77857612e 100644 --- a/xmrstak/backend/amd/amd_gpu/gpu.cpp +++ b/xmrstak/backend/amd/amd_gpu/gpu.cpp @@ -13,45 +13,43 @@ * along with this program. If not, see . */ +#include "xmrstak/backend/amd/OclCryptonightR_gen.hpp" #include "xmrstak/backend/cryptonight.hpp" #include "xmrstak/jconf.hpp" -#include "xmrstak/picosha2/picosha2.hpp" +#include "xmrstak/net/msgstruct.hpp" #include "xmrstak/params.hpp" +#include "xmrstak/picosha2/picosha2.hpp" #include "xmrstak/version.hpp" -#include "xmrstak/net/msgstruct.hpp" -#include "xmrstak/backend/amd/OclCryptonightR_gen.hpp" +#include +#include +#include +#include +#include #include #include -#include -#include #include -#include -#include -#include -#include #include +#include #include -#include #include -#include #include +#include #if defined _MSC_VER #include #elif defined __GNUC__ -#include #include +#include #endif - #ifdef _WIN32 #include static inline void create_directory(std::string dirname) { - _mkdir(dirname.data()); + _mkdir(dirname.data()); } static inline void port_sleep(size_t sec) @@ -59,8 +57,8 @@ static inline void port_sleep(size_t sec) Sleep(sec * 1000); } #else -#include #include +#include static inline void create_directory(std::string dirname) { @@ -100,7 +98,7 @@ char* LoadTextFile(const char* filename) flen = ftell(kernel); fseek(kernel, 0, SEEK_SET); - out = (char*)malloc(flen+1); + out = (char*)malloc(flen + 1); size_t r = fread(out, flen, 1, kernel); fclose(kernel); @@ -121,7 +119,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ if((ret = clGetDeviceInfo(ctx->DeviceID, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), &MaximumWorkSize, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when querying a device's max worksize using clGetDeviceInfo.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when querying a device's max worksize using clGetDeviceInfo.", err_to_str(ret)); return ERR_OCL_API; } @@ -140,16 +138,16 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ */ MaximumWorkSize /= 8; } - printer::inst()->print_msg(L1,"Device %lu work size %lu / %lu.", ctx->deviceIdx, ctx->workSize, MaximumWorkSize); + printer::inst()->print_msg(L1, "Device %lu work size %lu / %lu.", ctx->deviceIdx, ctx->workSize, MaximumWorkSize); if(ctx->workSize > MaximumWorkSize) { ctx->workSize = MaximumWorkSize; - printer::inst()->print_msg(L1,"Device %lu work size to large, reduce to %lu / %lu.", ctx->deviceIdx, ctx->workSize, MaximumWorkSize); + printer::inst()->print_msg(L1, "Device %lu work size to large, reduce to %lu / %lu.", ctx->deviceIdx, ctx->workSize, MaximumWorkSize); } const std::string backendName = xmrstak::params::inst().openCLVendor; - if( (ctx->stridedIndex == 2 || ctx->stridedIndex == 3) && (ctx->rawIntensity % ctx->workSize) != 0) + if((ctx->stridedIndex == 2 || ctx->stridedIndex == 3) && (ctx->rawIntensity % ctx->workSize) != 0) { size_t reduced_intensity = (ctx->rawIntensity / ctx->workSize) * ctx->workSize; ctx->rawIntensity = reduced_intensity; @@ -157,29 +155,29 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ } #if defined(CL_VERSION_2_0) && !defined(CONF_ENFORCE_OpenCL_1_2) - const cl_queue_properties CommandQueueProperties[] = { 0, 0, 0 }; + const cl_queue_properties CommandQueueProperties[] = {0, 0, 0}; ctx->CommandQueues = clCreateCommandQueueWithProperties(opencl_ctx, ctx->DeviceID, CommandQueueProperties, &ret); #else - const cl_command_queue_properties CommandQueueProperties = { 0 }; + const cl_command_queue_properties CommandQueueProperties = {0}; ctx->CommandQueues = clCreateCommandQueue(opencl_ctx, ctx->DeviceID, CommandQueueProperties, &ret); #endif if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateCommandQueueWithProperties.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateCommandQueueWithProperties.", err_to_str(ret)); return ERR_OCL_API; } if((ret = clGetDeviceInfo(ctx->DeviceID, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(int), &(ctx->computeUnits), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_MAX_COMPUTE_UNITS for device %u.", err_to_str(ret), (uint32_t)ctx->deviceIdx); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_MAX_COMPUTE_UNITS for device %u.", err_to_str(ret), (uint32_t)ctx->deviceIdx); return ERR_OCL_API; } ctx->InputBuffer = clCreateBuffer(opencl_ctx, CL_MEM_READ_ONLY, 128, NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create input buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create input buffer.", err_to_str(ret)); return ERR_OCL_API; } @@ -193,14 +191,14 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ctx->ExtraBuffers[0] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, scratchPadSize * g_thd, NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create hash scratchpads buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create hash scratchpads buffer.", err_to_str(ret)); return ERR_OCL_API; } ctx->ExtraBuffers[1] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, 200 * g_thd, NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create hash states buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create hash states buffer.", err_to_str(ret)); return ERR_OCL_API; } @@ -208,7 +206,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ctx->ExtraBuffers[2] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, sizeof(cl_uint) * (g_thd + 2), NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create Branch 0 buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create Branch 0 buffer.", err_to_str(ret)); return ERR_OCL_API; } @@ -216,7 +214,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ctx->ExtraBuffers[3] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, sizeof(cl_uint) * (g_thd + 2), NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create Branch 1 buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create Branch 1 buffer.", err_to_str(ret)); return ERR_OCL_API; } @@ -224,7 +222,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ctx->ExtraBuffers[4] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, sizeof(cl_uint) * (g_thd + 2), NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create Branch 2 buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create Branch 2 buffer.", err_to_str(ret)); return ERR_OCL_API; } @@ -232,7 +230,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ctx->ExtraBuffers[5] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, sizeof(cl_uint) * (g_thd + 2), NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create Branch 3 buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create Branch 3 buffer.", err_to_str(ret)); return ERR_OCL_API; } @@ -240,21 +238,21 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ctx->OutputBuffer = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, sizeof(cl_uint) * 0x100, NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateBuffer to create output buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateBuffer to create output buffer.", err_to_str(ret)); return ERR_OCL_API; } std::vector devNameVec(1024); if((ret = clGetDeviceInfo(ctx->DeviceID, CL_DEVICE_NAME, devNameVec.size(), devNameVec.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_NAME for device %u.", err_to_str(ret),ctx->deviceIdx ); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_NAME for device %u.", err_to_str(ret), ctx->deviceIdx); return ERR_OCL_API; } std::vector openCLDriverVer(1024); if((ret = clGetDeviceInfo(ctx->DeviceID, CL_DRIVER_VERSION, openCLDriverVer.size(), openCLDriverVer.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DRIVER_VERSION for device %u.", err_to_str(ret),ctx->deviceIdx ); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DRIVER_VERSION for device %u.", err_to_str(ret), ctx->deviceIdx); return ERR_OCL_API; } @@ -342,11 +340,11 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ if(xmrstak::params::inst().AMDCache == false || !clBinFile.good()) { if(xmrstak::params::inst().AMDCache) - printer::inst()->print_msg(L1,"OpenCL device %u - Precompiled code %s not found. Compiling ...",ctx->deviceIdx, cache_file.c_str()); + printer::inst()->print_msg(L1, "OpenCL device %u - Precompiled code %s not found. Compiling ...", ctx->deviceIdx, cache_file.c_str()); ctx->Program[miner_algo] = clCreateProgramWithSource(opencl_ctx, 1, (const char**)&source_code, NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateProgramWithSource on the OpenCL miner code", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateProgramWithSource on the OpenCL miner code", err_to_str(ret)); return ERR_OCL_API; } @@ -354,11 +352,11 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ if(ret != CL_SUCCESS) { size_t len; - printer::inst()->print_msg(L1,"Error %s when calling clBuildProgram.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clBuildProgram.", err_to_str(ret)); if((ret = clGetProgramBuildInfo(ctx->Program[miner_algo], ctx->DeviceID, CL_PROGRAM_BUILD_LOG, 0, NULL, &len)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clGetProgramBuildInfo for length of build log output.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetProgramBuildInfo for length of build log output.", err_to_str(ret)); return ERR_OCL_API; } @@ -368,28 +366,27 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ if((ret = clGetProgramBuildInfo(ctx->Program[miner_algo], ctx->DeviceID, CL_PROGRAM_BUILD_LOG, len, BuildLog, NULL)) != CL_SUCCESS) { free(BuildLog); - printer::inst()->print_msg(L1,"Error %s when calling clGetProgramBuildInfo for build log.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetProgramBuildInfo for build log.", err_to_str(ret)); return ERR_OCL_API; } printer::inst()->print_str("Build log:\n"); - std::cerr<Program[miner_algo], CL_PROGRAM_NUM_DEVICES, sizeof(cl_uint), &num_devices,NULL); - + clGetProgramInfo(ctx->Program[miner_algo], CL_PROGRAM_NUM_DEVICES, sizeof(cl_uint), &num_devices, NULL); std::vector devices_ids(num_devices); - clGetProgramInfo(ctx->Program[miner_algo], CL_PROGRAM_DEVICES, sizeof(cl_device_id)* devices_ids.size(), devices_ids.data(),NULL); + clGetProgramInfo(ctx->Program[miner_algo], CL_PROGRAM_DEVICES, sizeof(cl_device_id) * devices_ids.size(), devices_ids.data(), NULL); int dev_id = 0; /* Search for the gpu within the program context. * The id can be different to ctx->DeviceID. */ - for(auto & ocl_device : devices_ids) + for(auto& ocl_device : devices_ids) { if(ocl_device == ctx->DeviceID) break; @@ -401,17 +398,16 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ { if((ret = clGetProgramBuildInfo(ctx->Program[miner_algo], ctx->DeviceID, CL_PROGRAM_BUILD_STATUS, sizeof(cl_build_status), &status, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clGetProgramBuildInfo for status of build.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetProgramBuildInfo for status of build.", err_to_str(ret)); return ERR_OCL_API; } port_sleep(1); - } - while(status == CL_BUILD_IN_PROGRESS); + } while(status == CL_BUILD_IN_PROGRESS); if(xmrstak::params::inst().AMDCache) { std::vector binary_sizes(num_devices); - clGetProgramInfo (ctx->Program[miner_algo], CL_PROGRAM_BINARY_SIZES, sizeof(size_t) * binary_sizes.size(), binary_sizes.data(), NULL); + clGetProgramInfo(ctx->Program[miner_algo], CL_PROGRAM_BINARY_SIZES, sizeof(size_t) * binary_sizes.size(), binary_sizes.data(), NULL); std::vector all_programs(num_devices); std::vector> program_storage; @@ -419,7 +415,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ int p_id = 0; size_t mem_size = 0; // create memory structure to query all OpenCL program binaries - for(auto & p : all_programs) + for(auto& p : all_programs) { program_storage.emplace_back(std::vector(binary_sizes[p_id])); all_programs[p_id] = program_storage[p_id].data(); @@ -427,9 +423,9 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ p_id++; } - if((ret = clGetProgramInfo(ctx->Program[miner_algo], CL_PROGRAM_BINARIES, num_devices * sizeof(char*), all_programs.data(),NULL)) != CL_SUCCESS) + if((ret = clGetProgramInfo(ctx->Program[miner_algo], CL_PROGRAM_BINARIES, num_devices * sizeof(char*), all_programs.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clGetProgramInfo.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetProgramInfo.", err_to_str(ret)); return ERR_OCL_API; } @@ -437,12 +433,12 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ file_stream.open(cache_file, std::ofstream::out | std::ofstream::binary); file_stream.write(all_programs[dev_id], binary_sizes[dev_id]); file_stream.close(); - printer::inst()->print_msg(L1, "OpenCL device %u - Precompiled code stored in file %s",ctx->deviceIdx, cache_file.c_str()); + printer::inst()->print_msg(L1, "OpenCL device %u - Precompiled code stored in file %s", ctx->deviceIdx, cache_file.c_str()); } } else { - printer::inst()->print_msg(L1, "OpenCL device %u - Load precompiled code from file %s",ctx->deviceIdx, cache_file.c_str()); + printer::inst()->print_msg(L1, "OpenCL device %u - Load precompiled code from file %s", ctx->deviceIdx, cache_file.c_str()); std::ostringstream ss; ss << clBinFile.rdbuf(); std::string s = ss.str(); @@ -453,22 +449,21 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ cl_int clStatus; ctx->Program[miner_algo] = clCreateProgramWithBinary( opencl_ctx, 1, &ctx->DeviceID, &bin_size, - (const unsigned char **)&data_ptr, &clStatus, &ret - ); + (const unsigned char**)&data_ptr, &clStatus, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateProgramWithBinary. Try to delete file %s", err_to_str(ret), cache_file.c_str()); + printer::inst()->print_msg(L1, "Error %s when calling clCreateProgramWithBinary. Try to delete file %s", err_to_str(ret), cache_file.c_str()); return ERR_OCL_API; } ret = clBuildProgram(ctx->Program[miner_algo], 1, &ctx->DeviceID, NULL, NULL, NULL); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clBuildProgram. Try to delete file %s", err_to_str(ret), cache_file.c_str()); + printer::inst()->print_msg(L1, "Error %s when calling clBuildProgram. Try to delete file %s", err_to_str(ret), cache_file.c_str()); return ERR_OCL_API; } } - std::vector KernelNames = { "cn2", "Blake", "Groestl", "JH", "Skein" }; + std::vector KernelNames = {"cn2", "Blake", "Groestl", "JH", "Skein"}; if(miner_algo == cryptonight_gpu) { KernelNames.insert(KernelNames.begin(), "cn1_cn_gpu"); @@ -494,7 +489,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ctx->Kernels[miner_algo][i] = clCreateKernel(ctx->Program[miner_algo], KernelNames[i].c_str(), &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateKernel for kernel_0 %s.", err_to_str(ret), KernelNames[i].c_str()); + printer::inst()->print_msg(L1, "Error %s when calling clCreateKernel for kernel_0 %s.", err_to_str(ret), KernelNames[i].c_str()); return ERR_OCL_API; } } @@ -508,30 +503,28 @@ const cl_platform_info attributeTypes[5] = { CL_PLATFORM_VENDOR, CL_PLATFORM_VERSION, CL_PLATFORM_PROFILE, - CL_PLATFORM_EXTENSIONS -}; + CL_PLATFORM_EXTENSIONS}; const char* const attributeNames[] = { "CL_PLATFORM_NAME", "CL_PLATFORM_VENDOR", "CL_PLATFORM_VERSION", "CL_PLATFORM_PROFILE", - "CL_PLATFORM_EXTENSIONS" -}; + "CL_PLATFORM_EXTENSIONS"}; -#define NELEMS(x) (sizeof(x) / sizeof((x)[0])) +#define NELEMS(x) (sizeof(x) / sizeof((x)[0])) uint32_t getNumPlatforms() { cl_uint num_platforms = 0; - cl_platform_id * platforms = NULL; + cl_platform_id* platforms = NULL; cl_int clStatus; // Get platform and device information clStatus = clGetPlatformIDs(0, NULL, &num_platforms); if(clStatus != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetPlatformIDs for number of platforms.", err_to_str(clStatus)); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetPlatformIDs for number of platforms.", err_to_str(clStatus)); return 0u; } @@ -554,29 +547,29 @@ std::vector getAMDDevices(int index) platforms.resize(numPlatforms); if((clStatus = clGetPlatformIDs(numPlatforms, platforms.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetPlatformIDs for platform information.", err_to_str(clStatus)); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetPlatformIDs for platform information.", err_to_str(clStatus)); return ctxVec; } - if((clStatus = clGetDeviceIDs( platforms[index], CL_DEVICE_TYPE_GPU, 0, NULL, &num_devices)) != CL_SUCCESS) + if((clStatus = clGetDeviceIDs(platforms[index], CL_DEVICE_TYPE_GPU, 0, NULL, &num_devices)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceIDs for of devices.", err_to_str(clStatus)); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceIDs for of devices.", err_to_str(clStatus)); return ctxVec; } device_list.resize(num_devices); - if((clStatus = clGetDeviceIDs( platforms[index], CL_DEVICE_TYPE_GPU, num_devices, device_list.data(), NULL)) != CL_SUCCESS) + if((clStatus = clGetDeviceIDs(platforms[index], CL_DEVICE_TYPE_GPU, num_devices, device_list.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceIDs for device information.", err_to_str(clStatus)); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceIDs for device information.", err_to_str(clStatus)); return ctxVec; } - for (size_t k = 0; k < num_devices; k++) + for(size_t k = 0; k < num_devices; k++) { std::vector devVendorVec(1024); if((clStatus = clGetDeviceInfo(device_list[k], CL_DEVICE_VENDOR, devVendorVec.size(), devVendorVec.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get the device vendor name for device %u.", err_to_str(clStatus), k); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get the device vendor name for device %u.", err_to_str(clStatus), k); continue; } @@ -596,19 +589,19 @@ std::vector getAMDDevices(int index) if((clStatus = clGetDeviceInfo(device_list[k], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(int), &(ctx.computeUnits), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_MAX_COMPUTE_UNITS for device %u.", err_to_str(clStatus), k); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_MAX_COMPUTE_UNITS for device %u.", err_to_str(clStatus), k); continue; } if((clStatus = clGetDeviceInfo(device_list[k], CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(size_t), &(ctx.maxMemPerAlloc), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_MAX_MEM_ALLOC_SIZE for device %u.", err_to_str(clStatus), k); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_MAX_MEM_ALLOC_SIZE for device %u.", err_to_str(clStatus), k); continue; } if((clStatus = clGetDeviceInfo(device_list[k], CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(size_t), &(ctx.freeMem), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_GLOBAL_MEM_SIZE for device %u.", err_to_str(clStatus), k); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_GLOBAL_MEM_SIZE for device %u.", err_to_str(clStatus), k); continue; } @@ -618,14 +611,14 @@ std::vector getAMDDevices(int index) if((clStatus = clGetDeviceInfo(device_list[k], CL_DEVICE_NAME, devNameVec.size(), devNameVec.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_NAME for device %u.", err_to_str(clStatus), k); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DEVICE_NAME for device %u.", err_to_str(clStatus), k); continue; } std::vector openCLDriverVer(1024); if((clStatus = clGetDeviceInfo(device_list[k], CL_DRIVER_VERSION, openCLDriverVer.size(), openCLDriverVer.data(), NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetDeviceInfo to get CL_DRIVER_VERSION for device %u.", err_to_str(clStatus), k); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetDeviceInfo to get CL_DRIVER_VERSION for device %u.", err_to_str(clStatus), k); continue; } @@ -636,7 +629,7 @@ std::vector getAMDDevices(int index) ctx.name = std::string(devNameVec.data()); ctx.DeviceID = device_list[k]; ctx.interleave = 40; - printer::inst()->print_msg(L0,"Found OpenCL GPU %s.",ctx.name.c_str()); + printer::inst()->print_msg(L0, "Found OpenCL GPU %s.", ctx.name.c_str()); ctxVec.push_back(ctx); } } @@ -651,13 +644,13 @@ int getAMDPlatformIdx() if(numPlatforms == 0) { - printer::inst()->print_msg(L0,"WARNING: No OpenCL platform found."); + printer::inst()->print_msg(L0, "WARNING: No OpenCL platform found."); return -1; } - cl_platform_id * platforms = NULL; + cl_platform_id* platforms = NULL; cl_int clStatus; - platforms = (cl_platform_id *) malloc(sizeof(cl_platform_id) * numPlatforms); + platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * numPlatforms); clStatus = clGetPlatformIDs(numPlatforms, platforms, NULL); int platformIndex = -1; @@ -666,7 +659,8 @@ int getAMDPlatformIdx() if(clStatus == CL_SUCCESS) { - for (int i = 0; i < numPlatforms; i++) { + for(int i = 0; i < numPlatforms; i++) + { size_t infoSize; clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, 0, NULL, &infoSize); std::vector platformNameVec(infoSize); @@ -675,13 +669,13 @@ int getAMDPlatformIdx() std::string platformName(platformNameVec.data()); bool isAMDOpenCL = platformName.find("Advanced Micro Devices") != std::string::npos || - platformName.find("Apple") != std::string::npos || - platformName.find("Mesa") != std::string::npos; + platformName.find("Apple") != std::string::npos || + platformName.find("Mesa") != std::string::npos; bool isNVIDIADevice = platformName.find("NVIDIA Corporation") != std::string::npos || platformName.find("NVIDIA") != std::string::npos; std::string selectedOpenCLVendor = xmrstak::params::inst().openCLVendor; if((isAMDOpenCL && selectedOpenCLVendor == "AMD") || (isNVIDIADevice && selectedOpenCLVendor == "NVIDIA")) { - printer::inst()->print_msg(L0,"Found %s platform index id = %i, name = %s", selectedOpenCLVendor.c_str(), i , platformName.c_str()); + printer::inst()->print_msg(L0, "Found %s platform index id = %i, name = %s", selectedOpenCLVendor.c_str(), i, platformName.c_str()); if(platformName.find("Mesa") != std::string::npos) mesaPlatform = i; else @@ -695,12 +689,12 @@ int getAMDPlatformIdx() // fall back to Mesa OpenCL if(platformIndex == -1 && mesaPlatform != -1) { - printer::inst()->print_msg(L0,"No AMD platform found select Mesa as OpenCL platform"); + printer::inst()->print_msg(L0, "No AMD platform found select Mesa as OpenCL platform"); platformIndex = mesaPlatform; } } else - printer::inst()->print_msg(L1,"WARNING: %s when calling clGetPlatformIDs for platform information.", err_to_str(clStatus)); + printer::inst()->print_msg(L1, "WARNING: %s when calling clGetPlatformIDs for platform information.", err_to_str(clStatus)); free(platforms); return platformIndex; @@ -716,15 +710,14 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) if((ret = clGetPlatformIDs(0, NULL, &entries)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clGetPlatformIDs for number of platforms.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetPlatformIDs for number of platforms.", err_to_str(ret)); return ERR_OCL_API; } - // The number of platforms naturally is the index of the last platform plus one. if(entries <= platform_idx) { - printer::inst()->print_msg(L1,"Selected OpenCL platform index %d doesn't exist.", platform_idx); + printer::inst()->print_msg(L1, "Selected OpenCL platform index %d doesn't exist.", platform_idx); return ERR_STUPID_PARAMS; } @@ -736,7 +729,7 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) #endif if((ret = clGetPlatformIDs(entries, PlatformIDList, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clGetPlatformIDs for platform ID information.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetPlatformIDs for platform ID information.", err_to_str(ret)); return ERR_OCL_API; } @@ -747,12 +740,12 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) std::string platformName(platformNameVec.data()); if(xmrstak::params::inst().openCLVendor == "AMD" && platformName.find("Advanced Micro Devices") == std::string::npos) { - printer::inst()->print_msg(L1,"WARNING: using non AMD device: %s", platformName.c_str()); + printer::inst()->print_msg(L1, "WARNING: using non AMD device: %s", platformName.c_str()); } if((ret = clGetDeviceIDs(PlatformIDList[platform_idx], CL_DEVICE_TYPE_GPU, 0, NULL, &entries)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clGetDeviceIDs for number of devices.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetDeviceIDs for number of devices.", err_to_str(ret)); return ERR_OCL_API; } @@ -761,7 +754,7 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) { if(ctx[i].deviceIdx >= entries) { - printer::inst()->print_msg(L1,"Selected OpenCL device index %lu doesn't exist.\n", ctx[i].deviceIdx); + printer::inst()->print_msg(L1, "Selected OpenCL device index %lu doesn't exist.\n", ctx[i].deviceIdx); return ERR_STUPID_PARAMS; } } @@ -773,7 +766,7 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) #endif if((ret = clGetDeviceIDs(PlatformIDList[platform_idx], CL_DEVICE_TYPE_GPU, entries, DeviceIDList, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clGetDeviceIDs for device ID information.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clGetDeviceIDs for device ID information.", err_to_str(ret)); return ERR_OCL_API; } @@ -790,41 +783,41 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) cl_context opencl_ctx = clCreateContext(NULL, num_gpus, TempDeviceList.data(), NULL, NULL, &ret); if(ret != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clCreateContext.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clCreateContext.", err_to_str(ret)); return ERR_OCL_API; } - const char *fastIntMathV2CL = - #include "./opencl/fast_int_math_v2.cl" - ; - const char *fastDivHeavyCL = - #include "./opencl/fast_div_heavy.cl" - ; - const char *cryptonightCL = - #include "./opencl/cryptonight.cl" - ; - const char *blake256CL = - #include "./opencl/blake256.cl" - ; - const char *groestl256CL = - #include "./opencl/groestl256.cl" - ; - const char *jhCL = - #include "./opencl/jh.cl" - ; - const char *wolfAesCL = - #include "./opencl/wolf-aes.cl" - ; - const char *wolfSkeinCL = - #include "./opencl/wolf-skein.cl" - ; - const char *cryptonight_gpu = - #include "./opencl/cryptonight_gpu.cl" - ; + const char* fastIntMathV2CL = +#include "./opencl/fast_int_math_v2.cl" + ; + const char* fastDivHeavyCL = +#include "./opencl/fast_div_heavy.cl" + ; + const char* cryptonightCL = +#include "./opencl/cryptonight.cl" + ; + const char* blake256CL = +#include "./opencl/blake256.cl" + ; + const char* groestl256CL = +#include "./opencl/groestl256.cl" + ; + const char* jhCL = +#include "./opencl/jh.cl" + ; + const char* wolfAesCL = +#include "./opencl/wolf-aes.cl" + ; + const char* wolfSkeinCL = +#include "./opencl/wolf-skein.cl" + ; + const char* cryptonight_gpu = +#include "./opencl/cryptonight_gpu.cl" + ; std::string source_code(cryptonightCL); source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_FAST_INT_MATH_V2"), fastIntMathV2CL); - source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_FAST_DIV_HEAVY"), fastDivHeavyCL); + source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_FAST_DIV_HEAVY"), fastDivHeavyCL); source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_WOLF_AES"), wolfAesCL); source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_WOLF_SKEIN"), wolfSkeinCL); source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_JH"), jhCL); @@ -840,7 +833,7 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) for(int i = 0; i < num_gpus; ++i) { - printer::inst()->print_msg(LDEBUG,"OpenCL Init device %d", ctx[i].deviceIdx); + printer::inst()->print_msg(LDEBUG, "OpenCL Init device %d", ctx[i].deviceIdx); const size_t devIdx = ctx[i].deviceIdx; if(interleaveData.size() <= devIdx) { @@ -850,12 +843,11 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) { interleaveData[devIdx].reset(new InterleaveData{}); interleaveData[devIdx]->lastRunTimeStamp = get_timestamp_ms(); - } - ctx[i].idWorkerOnDevice=interleaveData[devIdx]->numThreadsOnGPU; + ctx[i].idWorkerOnDevice = interleaveData[devIdx]->numThreadsOnGPU; ++interleaveData[devIdx]->numThreadsOnGPU; ctx[i].interleaveData = interleaveData[devIdx]; - ctx[i].interleaveData->adjustThreshold = static_cast(ctx[i].interleave)/100.0; + ctx[i].interleaveData->adjustThreshold = static_cast(ctx[i].interleave) / 100.0; ctx[i].interleaveData->startAdjustThreshold = ctx[i].interleaveData->adjustThreshold; ctx[i].opencl_ctx = opencl_ctx; @@ -871,7 +863,7 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx) size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t target, const xmrstak_algo& miner_algo, uint64_t height) { - auto & Kernels = ctx->Kernels[miner_algo.Id()]; + auto& Kernels = ctx->Kernels[miner_algo.Id()]; cl_int ret; @@ -885,35 +877,35 @@ size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t tar if((ret = clEnqueueWriteBuffer(ctx->CommandQueues, ctx->InputBuffer, CL_TRUE, 0, 128, input, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueWriteBuffer to fill input buffer.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueWriteBuffer to fill input buffer.", err_to_str(ret)); return ERR_OCL_API; } if((ret = clSetKernelArg(Kernels[0], 0, sizeof(cl_mem), &ctx->InputBuffer)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 0, argument 0.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 0, argument 0.", err_to_str(ret)); return ERR_OCL_API; } // Scratchpads if((ret = clSetKernelArg(Kernels[0], 1, sizeof(cl_mem), ctx->ExtraBuffers + 0)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 0, argument 1.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 0, argument 1.", err_to_str(ret)); return ERR_OCL_API; } // States if((ret = clSetKernelArg(Kernels[0], 2, sizeof(cl_mem), ctx->ExtraBuffers + 1)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 0, argument 2.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 0, argument 2.", err_to_str(ret)); return ERR_OCL_API; } // Threads if((ret = clSetKernelArg(Kernels[0], 3, sizeof(cl_uint), &numThreads)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 0, argument 3.", err_to_str(ret)); - return(ERR_OCL_API); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 0, argument 3.", err_to_str(ret)); + return (ERR_OCL_API); } if(miner_algo == cryptonight_gpu) @@ -922,85 +914,88 @@ size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t tar // Scratchpads if((ret = clSetKernelArg(Kernels[7], 0, sizeof(cl_mem), ctx->ExtraBuffers + 0)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 0, argument 1.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 0, argument 1.", err_to_str(ret)); return ERR_OCL_API; } // States if((ret = clSetKernelArg(Kernels[7], 1, sizeof(cl_mem), ctx->ExtraBuffers + 1)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 0, argument 2.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 0, argument 2.", err_to_str(ret)); return ERR_OCL_API; } } - // CN1 Kernel + // CN1 Kernel - if ((miner_algo == cryptonight_r) || (miner_algo == cryptonight_r_wow)) { + if((miner_algo == cryptonight_r) || (miner_algo == cryptonight_r_wow)) + { uint32_t PRECOMPILATION_DEPTH = 1; constexpr uint64_t height_chunk_size = 25; uint64_t height_offset = (height / height_chunk_size) * height_chunk_size; - // Get new kernel - cl_program program = xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height_offset, height_chunk_size, PRECOMPILATION_DEPTH); + // Get new kernel + cl_program program = xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height_offset, height_chunk_size, PRECOMPILATION_DEPTH); - if (program != ctx->ProgramCryptonightR || ctx->last_block_height != height) { - cl_int ret; + if(program != ctx->ProgramCryptonightR || ctx->last_block_height != height) + { + cl_int ret; std::string kernel_name = "cn1_cryptonight_r_" + std::to_string(height); - cl_kernel kernel = clCreateKernel(program, kernel_name.c_str(), &ret); + cl_kernel kernel = clCreateKernel(program, kernel_name.c_str(), &ret); - if (ret != CL_SUCCESS) { - printer::inst()->print_msg(LDEBUG, "CryptonightR: clCreateKernel returned error %s", err_to_str(ret)); - } - else + if(ret != CL_SUCCESS) + { + printer::inst()->print_msg(LDEBUG, "CryptonightR: clCreateKernel returned error %s", err_to_str(ret)); + } + else { - cl_kernel old_kernel = Kernels[1]; + cl_kernel old_kernel = Kernels[1]; if(old_kernel) clReleaseKernel(old_kernel); - Kernels[1] = kernel; - } - ctx->ProgramCryptonightR = program; + Kernels[1] = kernel; + } + ctx->ProgramCryptonightR = program; ctx->last_block_height = height; printer::inst()->print_msg(LDEBUG, "Set height %llu", height); - // Precompile next program in background - for (int i = 1; i <= PRECOMPILATION_DEPTH; ++i) - xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height_offset + i * height_chunk_size, height_chunk_size, PRECOMPILATION_DEPTH, true); + // Precompile next program in background + for(int i = 1; i <= PRECOMPILATION_DEPTH; ++i) + xmrstak::amd::CryptonightR_get_program(ctx, miner_algo, height_offset + i * height_chunk_size, height_chunk_size, PRECOMPILATION_DEPTH, true); - printer::inst()->print_msg(LDEBUG, "Thread #%zu updated CryptonightR", ctx->deviceIdx); - } + printer::inst()->print_msg(LDEBUG, "Thread #%zu updated CryptonightR", ctx->deviceIdx); + } else { printer::inst()->print_msg(LDEBUG, "Thread #%zu found CryptonightR", ctx->deviceIdx); } - } + } // Scratchpads if((ret = clSetKernelArg(Kernels[1], 0, sizeof(cl_mem), ctx->ExtraBuffers + 0)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 1, argument 0.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 1, argument 0.", err_to_str(ret)); return ERR_OCL_API; } // States if((ret = clSetKernelArg(Kernels[1], 1, sizeof(cl_mem), ctx->ExtraBuffers + 1)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 1, argument 1.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 1, argument 1.", err_to_str(ret)); return ERR_OCL_API; } // Threads if((ret = clSetKernelArg(Kernels[1], 2, sizeof(cl_uint), &numThreads)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 1, argument 2.", err_to_str(ret)); - return(ERR_OCL_API); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 1, argument 2.", err_to_str(ret)); + return (ERR_OCL_API); } if(miner_algo == cryptonight_monero || miner_algo == cryptonight_aeon || miner_algo == cryptonight_ipbc || miner_algo == cryptonight_stellite || miner_algo == cryptonight_masari || miner_algo == cryptonight_bittube2) { // Input - if ((ret = clSetKernelArg(Kernels[1], 3, sizeof(cl_mem), &ctx->InputBuffer)) != CL_SUCCESS) + if((ret = clSetKernelArg(Kernels[1], 3, sizeof(cl_mem), &ctx->InputBuffer)) != CL_SUCCESS) { printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 1, argument 4(input buffer).", err_to_str(ret)); return ERR_OCL_API; @@ -1011,14 +1006,14 @@ size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t tar // Scratchpads if((ret = clSetKernelArg(Kernels[2], 0, sizeof(cl_mem), ctx->ExtraBuffers + 0)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 0.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 0.", err_to_str(ret)); return ERR_OCL_API; } // States if((ret = clSetKernelArg(Kernels[2], 1, sizeof(cl_mem), ctx->ExtraBuffers + 1)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 1.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 1.", err_to_str(ret)); return ERR_OCL_API; } @@ -1027,59 +1022,59 @@ size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t tar // Output if((ret = clSetKernelArg(Kernels[2], 2, sizeof(cl_mem), &ctx->OutputBuffer)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), 2, 2); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), 2, 2); return ERR_OCL_API; } // Target if((ret = clSetKernelArg(Kernels[2], 3, sizeof(cl_ulong), &target)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), 2, 3); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), 2, 3); return ERR_OCL_API; } // Threads if((ret = clSetKernelArg(Kernels[2], 4, sizeof(cl_uint), &numThreads)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 4.", err_to_str(ret)); - return(ERR_OCL_API); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 4.", err_to_str(ret)); + return (ERR_OCL_API); } } else - { + { // Branch 0 if((ret = clSetKernelArg(Kernels[2], 2, sizeof(cl_mem), ctx->ExtraBuffers + 2)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 2.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 2.", err_to_str(ret)); return ERR_OCL_API; } // Branch 1 if((ret = clSetKernelArg(Kernels[2], 3, sizeof(cl_mem), ctx->ExtraBuffers + 3)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 3.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 3.", err_to_str(ret)); return ERR_OCL_API; } // Branch 2 if((ret = clSetKernelArg(Kernels[2], 4, sizeof(cl_mem), ctx->ExtraBuffers + 4)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 4.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 4.", err_to_str(ret)); return ERR_OCL_API; } // Branch 3 if((ret = clSetKernelArg(Kernels[2], 5, sizeof(cl_mem), ctx->ExtraBuffers + 5)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 5.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 5.", err_to_str(ret)); return ERR_OCL_API; } // Threads if((ret = clSetKernelArg(Kernels[2], 6, sizeof(cl_uint), &numThreads)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel 2, argument 6.", err_to_str(ret)); - return(ERR_OCL_API); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel 2, argument 6.", err_to_str(ret)); + return (ERR_OCL_API); } for(int i = 0; i < 4; ++i) @@ -1087,35 +1082,35 @@ size_t XMRSetJob(GpuContext* ctx, uint8_t* input, size_t input_len, uint64_t tar // States if((ret = clSetKernelArg(Kernels[i + 3], 0, sizeof(cl_mem), ctx->ExtraBuffers + 1)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 0); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 0); return ERR_OCL_API; } // Nonce buffer if((ret = clSetKernelArg(Kernels[i + 3], 1, sizeof(cl_mem), ctx->ExtraBuffers + (i + 2))) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 1); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 1); return ERR_OCL_API; } // Output if((ret = clSetKernelArg(Kernels[i + 3], 2, sizeof(cl_mem), &ctx->OutputBuffer)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 2); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 2); return ERR_OCL_API; } // Target if((ret = clSetKernelArg(Kernels[i + 3], 3, sizeof(cl_ulong), &target)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 3); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 3); return ERR_OCL_API; } if((clSetKernelArg(Kernels[i + 3], 4, sizeof(cl_uint), &numThreads)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 4); - return(ERR_OCL_API); + printer::inst()->print_msg(L1, "Error %s when calling clSetKernelArg for kernel %d, argument %d.", err_to_str(ret), i + 3, 4); + return (ERR_OCL_API); } } } @@ -1139,7 +1134,7 @@ uint64_t updateTimings(GpuContext* ctx, const uint64_t t) if(ctx->interleaveData->avgKernelRuntime == 0.0 || ctx->interleaveData->avgKernelRuntime > 20000.0) ctx->interleaveData->avgKernelRuntime = runtime; else - ctx->interleaveData->avgKernelRuntime = ctx->interleaveData->avgKernelRuntime * (1.0 - averagingBias) + (runtime) * averagingBias; + ctx->interleaveData->avgKernelRuntime = ctx->interleaveData->avgKernelRuntime * (1.0 - averagingBias) + (runtime)*averagingBias; } return runtime; } @@ -1168,7 +1163,7 @@ uint64_t interleaveAdjustDelay(GpuContext* ctx, const bool enableAutoAdjustment) if((dt > 0) && (dt < optimalTimeOffset)) { - delay = static_cast((optimalTimeOffset - dt)); + delay = static_cast((optimalTimeOffset - dt)); if(enableAutoAdjustment) { @@ -1187,8 +1182,7 @@ uint64_t interleaveAdjustDelay(GpuContext* ctx, const bool enableAutoAdjustment) // avoid that the auto adjustment is disable interleaving ctx->interleaveData->adjustThreshold = std::max( ctx->interleaveData->adjustThreshold, - 0.001 - ); + 0.001); } delay = std::max(int64_t(0), delay); @@ -1199,13 +1193,12 @@ uint64_t interleaveAdjustDelay(GpuContext* ctx, const bool enableAutoAdjustment) { // do not notify the user anymore if we reach a good delay if(delay > maxDelay) - printer::inst()->print_msg(L1,"OpenCL Interleave %u|%u: %u/%.2lf ms - %.1lf", + printer::inst()->print_msg(L1, "OpenCL Interleave %u|%u: %u/%.2lf ms - %.1lf", ctx->deviceIdx, ctx->idWorkerOnDevice, static_cast(delay), avgRuntime, - ctx->interleaveData->adjustThreshold * 100. - ); + ctx->interleaveData->adjustThreshold * 100.); std::this_thread::sleep_for(std::chrono::milliseconds(delay)); } @@ -1216,12 +1209,12 @@ uint64_t interleaveAdjustDelay(GpuContext* ctx, const bool enableAutoAdjustment) size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner_algo) { - const auto & Kernels = ctx->Kernels[miner_algo.Id()]; + const auto& Kernels = ctx->Kernels[miner_algo.Id()]; cl_int ret; cl_uint zero = 0; size_t BranchNonces[4]; - memset(BranchNonces,0,sizeof(size_t)*4); + memset(BranchNonces, 0, sizeof(size_t) * 4); size_t g_intensity = ctx->rawIntensity; size_t w_size = ctx->workSize; @@ -1232,28 +1225,28 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner // round up to next multiple of w_size g_thd = ((g_intensity + w_size - 1u) / w_size) * w_size; // number of global threads must be a multiple of the work group size (w_size) - assert(g_thd%w_size == 0); + assert(g_thd % w_size == 0); } for(int i = 2; i < 6; ++i) { if((ret = clEnqueueWriteBuffer(ctx->CommandQueues, ctx->ExtraBuffers[i], CL_FALSE, sizeof(cl_uint) * g_intensity, sizeof(cl_uint), &zero, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueWriteBuffer to zero branch buffer counter %d.", err_to_str(ret), i - 2); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueWriteBuffer to zero branch buffer counter %d.", err_to_str(ret), i - 2); return ERR_OCL_API; } } if((ret = clEnqueueWriteBuffer(ctx->CommandQueues, ctx->OutputBuffer, CL_FALSE, sizeof(cl_uint) * 0xFF, sizeof(cl_uint), &zero, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueWriteBuffer to fetch results.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueWriteBuffer to fetch results.", err_to_str(ret)); return ERR_OCL_API; } - size_t Nonce[2] = {ctx->Nonce, 1}, gthreads[2] = { g_thd, 8 }, lthreads[2] = { 8, 8 }; + size_t Nonce[2] = {ctx->Nonce, 1}, gthreads[2] = {g_thd, 8}, lthreads[2] = {8, 8}; if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[0], 2, Nonce, gthreads, lthreads, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 0); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 0); return ERR_OCL_API; } @@ -1265,7 +1258,7 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner size_t intens = g_intensity * thd; if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[7], 1, 0, &intens, &thd, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 7); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 7); return ERR_OCL_API; } @@ -1274,7 +1267,7 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[1], 1, 0, &g_thd_cn_gpu, &w_size_cn_gpu, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 1); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 1); return ERR_OCL_API; } } @@ -1282,14 +1275,14 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner { if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[1], 1, &tmpNonce, &g_thd, &w_size, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 1); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 1); return ERR_OCL_API; } } if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[2], 2, Nonce, gthreads, lthreads, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 2); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 2); return ERR_OCL_API; } @@ -1300,7 +1293,7 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner size_t tmpNonce = ctx->Nonce; if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[i + 3], 1, &tmpNonce, &g_thd, &w_size, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), i + 3); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), i + 3); return ERR_OCL_API; } } @@ -1309,11 +1302,11 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner // this call is blocking therefore the access to the results without cl_finish is fine if((ret = clEnqueueReadBuffer(ctx->CommandQueues, ctx->OutputBuffer, CL_TRUE, 0, sizeof(cl_uint) * 0x100, HashOutput, 0, NULL, NULL)) != CL_SUCCESS) { - printer::inst()->print_msg(L1,"Error %s when calling clEnqueueReadBuffer to fetch results.", err_to_str(ret)); + printer::inst()->print_msg(L1, "Error %s when calling clEnqueueReadBuffer to fetch results.", err_to_str(ret)); return ERR_OCL_API; } - auto & numHashValues = HashOutput[0xFF]; + auto& numHashValues = HashOutput[0xFF]; // avoid out of memory read, we have only storage for 0xFF results if(numHashValues > 0xFF) numHashValues = 0xFF; diff --git a/xmrstak/backend/amd/amd_gpu/gpu.hpp b/xmrstak/backend/amd/amd_gpu/gpu.hpp index ff56f0a9e..1ba300c7a 100644 --- a/xmrstak/backend/amd/amd_gpu/gpu.hpp +++ b/xmrstak/backend/amd/amd_gpu/gpu.hpp @@ -1,7 +1,7 @@ #pragma once -#include "xmrstak/misc/console.hpp" #include "xmrstak/jconf.hpp" +#include "xmrstak/misc/console.hpp" #if defined(__APPLE__) #include @@ -9,13 +9,13 @@ #include #endif +#include +#include +#include +#include #include #include #include -#include -#include -#include -#include #define ERR_SUCCESS (0) #define ERR_OCL_API (2) @@ -23,13 +23,13 @@ struct InterleaveData { - std::mutex mutex; + std::mutex mutex; - double adjustThreshold = 0.4; - double startAdjustThreshold = 0.4; - double avgKernelRuntime = 0.0; - uint64_t lastRunTimeStamp = 0; - uint32_t numThreadsOnGPU = 0; + double adjustThreshold = 0.4; + double startAdjustThreshold = 0.4; + double avgKernelRuntime = 0.0; + uint64_t lastRunTimeStamp = 0; + uint32_t numThreadsOnGPU = 0; }; struct GpuContext @@ -54,7 +54,7 @@ struct GpuContext cl_mem ExtraBuffers[6]; cl_context opencl_ctx = nullptr; std::map Program; - std::map> Kernels; + std::map> Kernels; cl_program ProgramCryptonightR = nullptr; uint64_t last_block_height = 0u; size_t freeMem; @@ -67,148 +67,147 @@ struct GpuContext uint64_t lastDelay = 0; uint32_t Nonce; - }; namespace { - const char* err_to_str(cl_int ret) +const char* err_to_str(cl_int ret) +{ + switch(ret) { - switch(ret) - { - case CL_SUCCESS: - return "CL_SUCCESS"; - case CL_DEVICE_NOT_FOUND: - return "CL_DEVICE_NOT_FOUND"; - case CL_DEVICE_NOT_AVAILABLE: - return "CL_DEVICE_NOT_AVAILABLE"; - case CL_COMPILER_NOT_AVAILABLE: - return "CL_COMPILER_NOT_AVAILABLE"; - case CL_MEM_OBJECT_ALLOCATION_FAILURE: - return "CL_MEM_OBJECT_ALLOCATION_FAILURE"; - case CL_OUT_OF_RESOURCES: - return "CL_OUT_OF_RESOURCES"; - case CL_OUT_OF_HOST_MEMORY: - return "CL_OUT_OF_HOST_MEMORY"; - case CL_PROFILING_INFO_NOT_AVAILABLE: - return "CL_PROFILING_INFO_NOT_AVAILABLE"; - case CL_MEM_COPY_OVERLAP: - return "CL_MEM_COPY_OVERLAP"; - case CL_IMAGE_FORMAT_MISMATCH: - return "CL_IMAGE_FORMAT_MISMATCH"; - case CL_IMAGE_FORMAT_NOT_SUPPORTED: - return "CL_IMAGE_FORMAT_NOT_SUPPORTED"; - case CL_BUILD_PROGRAM_FAILURE: - return "CL_BUILD_PROGRAM_FAILURE"; - case CL_MAP_FAILURE: - return "CL_MAP_FAILURE"; - case CL_MISALIGNED_SUB_BUFFER_OFFSET: - return "CL_MISALIGNED_SUB_BUFFER_OFFSET"; - case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: - return "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"; - #ifdef CL_VERSION_1_2 - case CL_COMPILE_PROGRAM_FAILURE: - return "CL_COMPILE_PROGRAM_FAILURE"; - case CL_LINKER_NOT_AVAILABLE: - return "CL_LINKER_NOT_AVAILABLE"; - case CL_LINK_PROGRAM_FAILURE: - return "CL_LINK_PROGRAM_FAILURE"; - case CL_DEVICE_PARTITION_FAILED: - return "CL_DEVICE_PARTITION_FAILED"; - case CL_KERNEL_ARG_INFO_NOT_AVAILABLE: - return "CL_KERNEL_ARG_INFO_NOT_AVAILABLE"; - #endif - case CL_INVALID_VALUE: - return "CL_INVALID_VALUE"; - case CL_INVALID_DEVICE_TYPE: - return "CL_INVALID_DEVICE_TYPE"; - case CL_INVALID_PLATFORM: - return "CL_INVALID_PLATFORM"; - case CL_INVALID_DEVICE: - return "CL_INVALID_DEVICE"; - case CL_INVALID_CONTEXT: - return "CL_INVALID_CONTEXT"; - case CL_INVALID_QUEUE_PROPERTIES: - return "CL_INVALID_QUEUE_PROPERTIES"; - case CL_INVALID_COMMAND_QUEUE: - return "CL_INVALID_COMMAND_QUEUE"; - case CL_INVALID_HOST_PTR: - return "CL_INVALID_HOST_PTR"; - case CL_INVALID_MEM_OBJECT: - return "CL_INVALID_MEM_OBJECT"; - case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: - return "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"; - case CL_INVALID_IMAGE_SIZE: - return "CL_INVALID_IMAGE_SIZE"; - case CL_INVALID_SAMPLER: - return "CL_INVALID_SAMPLER"; - case CL_INVALID_BINARY: - return "CL_INVALID_BINARY"; - case CL_INVALID_BUILD_OPTIONS: - return "CL_INVALID_BUILD_OPTIONS"; - case CL_INVALID_PROGRAM: - return "CL_INVALID_PROGRAM"; - case CL_INVALID_PROGRAM_EXECUTABLE: - return "CL_INVALID_PROGRAM_EXECUTABLE"; - case CL_INVALID_KERNEL_NAME: - return "CL_INVALID_KERNEL_NAME"; - case CL_INVALID_KERNEL_DEFINITION: - return "CL_INVALID_KERNEL_DEFINITION"; - case CL_INVALID_KERNEL: - return "CL_INVALID_KERNEL"; - case CL_INVALID_ARG_INDEX: - return "CL_INVALID_ARG_INDEX"; - case CL_INVALID_ARG_VALUE: - return "CL_INVALID_ARG_VALUE"; - case CL_INVALID_ARG_SIZE: - return "CL_INVALID_ARG_SIZE"; - case CL_INVALID_KERNEL_ARGS: - return "CL_INVALID_KERNEL_ARGS"; - case CL_INVALID_WORK_DIMENSION: - return "CL_INVALID_WORK_DIMENSION"; - case CL_INVALID_WORK_GROUP_SIZE: - return "CL_INVALID_WORK_GROUP_SIZE"; - case CL_INVALID_WORK_ITEM_SIZE: - return "CL_INVALID_WORK_ITEM_SIZE"; - case CL_INVALID_GLOBAL_OFFSET: - return "CL_INVALID_GLOBAL_OFFSET"; - case CL_INVALID_EVENT_WAIT_LIST: - return "CL_INVALID_EVENT_WAIT_LIST"; - case CL_INVALID_EVENT: - return "CL_INVALID_EVENT"; - case CL_INVALID_OPERATION: - return "CL_INVALID_OPERATION"; - case CL_INVALID_GL_OBJECT: - return "CL_INVALID_GL_OBJECT"; - case CL_INVALID_BUFFER_SIZE: - return "CL_INVALID_BUFFER_SIZE"; - case CL_INVALID_MIP_LEVEL: - return "CL_INVALID_MIP_LEVEL"; - case CL_INVALID_GLOBAL_WORK_SIZE: - return "CL_INVALID_GLOBAL_WORK_SIZE"; - case CL_INVALID_PROPERTY: - return "CL_INVALID_PROPERTY"; - #ifdef CL_VERSION_1_2 - case CL_INVALID_IMAGE_DESCRIPTOR: - return "CL_INVALID_IMAGE_DESCRIPTOR"; - case CL_INVALID_COMPILER_OPTIONS: - return "CL_INVALID_COMPILER_OPTIONS"; - case CL_INVALID_LINKER_OPTIONS: - return "CL_INVALID_LINKER_OPTIONS"; - case CL_INVALID_DEVICE_PARTITION_COUNT: - return "CL_INVALID_DEVICE_PARTITION_COUNT"; - #endif - #if defined(CL_VERSION_2_0) && !defined(CONF_ENFORCE_OpenCL_1_2) - case CL_INVALID_PIPE_SIZE: - return "CL_INVALID_PIPE_SIZE"; - case CL_INVALID_DEVICE_QUEUE: - return "CL_INVALID_DEVICE_QUEUE"; - #endif - default: - return "UNKNOWN_ERROR"; - } + case CL_SUCCESS: + return "CL_SUCCESS"; + case CL_DEVICE_NOT_FOUND: + return "CL_DEVICE_NOT_FOUND"; + case CL_DEVICE_NOT_AVAILABLE: + return "CL_DEVICE_NOT_AVAILABLE"; + case CL_COMPILER_NOT_AVAILABLE: + return "CL_COMPILER_NOT_AVAILABLE"; + case CL_MEM_OBJECT_ALLOCATION_FAILURE: + return "CL_MEM_OBJECT_ALLOCATION_FAILURE"; + case CL_OUT_OF_RESOURCES: + return "CL_OUT_OF_RESOURCES"; + case CL_OUT_OF_HOST_MEMORY: + return "CL_OUT_OF_HOST_MEMORY"; + case CL_PROFILING_INFO_NOT_AVAILABLE: + return "CL_PROFILING_INFO_NOT_AVAILABLE"; + case CL_MEM_COPY_OVERLAP: + return "CL_MEM_COPY_OVERLAP"; + case CL_IMAGE_FORMAT_MISMATCH: + return "CL_IMAGE_FORMAT_MISMATCH"; + case CL_IMAGE_FORMAT_NOT_SUPPORTED: + return "CL_IMAGE_FORMAT_NOT_SUPPORTED"; + case CL_BUILD_PROGRAM_FAILURE: + return "CL_BUILD_PROGRAM_FAILURE"; + case CL_MAP_FAILURE: + return "CL_MAP_FAILURE"; + case CL_MISALIGNED_SUB_BUFFER_OFFSET: + return "CL_MISALIGNED_SUB_BUFFER_OFFSET"; + case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: + return "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"; +#ifdef CL_VERSION_1_2 + case CL_COMPILE_PROGRAM_FAILURE: + return "CL_COMPILE_PROGRAM_FAILURE"; + case CL_LINKER_NOT_AVAILABLE: + return "CL_LINKER_NOT_AVAILABLE"; + case CL_LINK_PROGRAM_FAILURE: + return "CL_LINK_PROGRAM_FAILURE"; + case CL_DEVICE_PARTITION_FAILED: + return "CL_DEVICE_PARTITION_FAILED"; + case CL_KERNEL_ARG_INFO_NOT_AVAILABLE: + return "CL_KERNEL_ARG_INFO_NOT_AVAILABLE"; +#endif + case CL_INVALID_VALUE: + return "CL_INVALID_VALUE"; + case CL_INVALID_DEVICE_TYPE: + return "CL_INVALID_DEVICE_TYPE"; + case CL_INVALID_PLATFORM: + return "CL_INVALID_PLATFORM"; + case CL_INVALID_DEVICE: + return "CL_INVALID_DEVICE"; + case CL_INVALID_CONTEXT: + return "CL_INVALID_CONTEXT"; + case CL_INVALID_QUEUE_PROPERTIES: + return "CL_INVALID_QUEUE_PROPERTIES"; + case CL_INVALID_COMMAND_QUEUE: + return "CL_INVALID_COMMAND_QUEUE"; + case CL_INVALID_HOST_PTR: + return "CL_INVALID_HOST_PTR"; + case CL_INVALID_MEM_OBJECT: + return "CL_INVALID_MEM_OBJECT"; + case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: + return "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"; + case CL_INVALID_IMAGE_SIZE: + return "CL_INVALID_IMAGE_SIZE"; + case CL_INVALID_SAMPLER: + return "CL_INVALID_SAMPLER"; + case CL_INVALID_BINARY: + return "CL_INVALID_BINARY"; + case CL_INVALID_BUILD_OPTIONS: + return "CL_INVALID_BUILD_OPTIONS"; + case CL_INVALID_PROGRAM: + return "CL_INVALID_PROGRAM"; + case CL_INVALID_PROGRAM_EXECUTABLE: + return "CL_INVALID_PROGRAM_EXECUTABLE"; + case CL_INVALID_KERNEL_NAME: + return "CL_INVALID_KERNEL_NAME"; + case CL_INVALID_KERNEL_DEFINITION: + return "CL_INVALID_KERNEL_DEFINITION"; + case CL_INVALID_KERNEL: + return "CL_INVALID_KERNEL"; + case CL_INVALID_ARG_INDEX: + return "CL_INVALID_ARG_INDEX"; + case CL_INVALID_ARG_VALUE: + return "CL_INVALID_ARG_VALUE"; + case CL_INVALID_ARG_SIZE: + return "CL_INVALID_ARG_SIZE"; + case CL_INVALID_KERNEL_ARGS: + return "CL_INVALID_KERNEL_ARGS"; + case CL_INVALID_WORK_DIMENSION: + return "CL_INVALID_WORK_DIMENSION"; + case CL_INVALID_WORK_GROUP_SIZE: + return "CL_INVALID_WORK_GROUP_SIZE"; + case CL_INVALID_WORK_ITEM_SIZE: + return "CL_INVALID_WORK_ITEM_SIZE"; + case CL_INVALID_GLOBAL_OFFSET: + return "CL_INVALID_GLOBAL_OFFSET"; + case CL_INVALID_EVENT_WAIT_LIST: + return "CL_INVALID_EVENT_WAIT_LIST"; + case CL_INVALID_EVENT: + return "CL_INVALID_EVENT"; + case CL_INVALID_OPERATION: + return "CL_INVALID_OPERATION"; + case CL_INVALID_GL_OBJECT: + return "CL_INVALID_GL_OBJECT"; + case CL_INVALID_BUFFER_SIZE: + return "CL_INVALID_BUFFER_SIZE"; + case CL_INVALID_MIP_LEVEL: + return "CL_INVALID_MIP_LEVEL"; + case CL_INVALID_GLOBAL_WORK_SIZE: + return "CL_INVALID_GLOBAL_WORK_SIZE"; + case CL_INVALID_PROPERTY: + return "CL_INVALID_PROPERTY"; +#ifdef CL_VERSION_1_2 + case CL_INVALID_IMAGE_DESCRIPTOR: + return "CL_INVALID_IMAGE_DESCRIPTOR"; + case CL_INVALID_COMPILER_OPTIONS: + return "CL_INVALID_COMPILER_OPTIONS"; + case CL_INVALID_LINKER_OPTIONS: + return "CL_INVALID_LINKER_OPTIONS"; + case CL_INVALID_DEVICE_PARTITION_COUNT: + return "CL_INVALID_DEVICE_PARTITION_COUNT"; +#endif +#if defined(CL_VERSION_2_0) && !defined(CONF_ENFORCE_OpenCL_1_2) + case CL_INVALID_PIPE_SIZE: + return "CL_INVALID_PIPE_SIZE"; + case CL_INVALID_DEVICE_QUEUE: + return "CL_INVALID_DEVICE_QUEUE"; +#endif + default: + return "UNKNOWN_ERROR"; } } +} // namespace uint32_t getNumPlatforms(); int getAMDPlatformIdx(); diff --git a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl index 12478aefb..471e46a53 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl @@ -198,7 +198,7 @@ inline void keccakf1600_1(ulong st[25]) } } )===" -R"===( + R"===( void keccakf1600_2(__local ulong *st) { @@ -372,7 +372,7 @@ inline int4 _mm_alignr_epi8(int4 a, const uint rot) #endif )===" -R"===( + R"===( void CNKeccak(ulong *output, ulong *input) { @@ -416,7 +416,7 @@ void AESExpandKey256(uint *keybuf) } )===" -R"===( + R"===( #define mix_and_propagate(xin) (xin)[(get_local_id(1)) % 8][get_local_id(0)] ^ (xin)[(get_local_id(1) + 1) % 8][get_local_id(0)] @@ -577,7 +577,7 @@ __kernel void JOIN(cn0,ALGO)(__global ulong *input, __global uint4 *Scratchpad, } )===" -R"===( + R"===( // __NV_CL_C_VERSION checks if NVIDIA opencl is used #if((ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) && defined(__NV_CL_C_VERSION)) @@ -867,7 +867,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states } )===" -R"===( + R"===( __attribute__((reqd_work_group_size(8, 8, 1))) __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states, @@ -1051,7 +1051,7 @@ __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states } )===" -R"===( + R"===( #define VSWAP8(x) (((x) >> 56) | (((x) >> 40) & 0x000000000000FF00UL) | (((x) >> 24) & 0x0000000000FF0000UL) \ | (((x) >> 8) & 0x00000000FF000000UL) | (((x) << 8) & 0x000000FF00000000UL) \ diff --git a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_gpu.cl b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_gpu.cl index e87819760..bb37581f2 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_gpu.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight_gpu.cl @@ -84,7 +84,7 @@ inline void single_comupte_wrap(const uint rot, int4 v0, int4 v1, int4 v2, int4 } )===" -R"===( + R"===( static const __constant uint look[16][4] = { {0, 1, 2, 3}, @@ -220,7 +220,7 @@ __kernel void JOIN(cn1_cn_gpu,ALGO)(__global int *lpad_in, __global int *spad, u } )===" -R"===( + R"===( static const __constant uint skip[3] = { 20,22,22 diff --git a/xmrstak/backend/amd/amd_gpu/opencl/groestl256.cl b/xmrstak/backend/amd/amd_gpu/opencl/groestl256.cl index 22603853f..02ce53e03 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/groestl256.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/groestl256.cl @@ -125,7 +125,7 @@ static const __constant ulong T0_G[] = }; )===" -R"===( + R"===( static const __constant ulong T4_G[] = { @@ -292,4 +292,3 @@ static const __constant ulong T4_G[] = } while (0) )===" - diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp index 120fb6898..dcabb3018 100644 --- a/xmrstak/backend/amd/autoAdjust.hpp +++ b/xmrstak/backend/amd/autoAdjust.hpp @@ -5,18 +5,18 @@ #include "autoAdjust.hpp" #include "jconf.hpp" -#include "xmrstak/misc/console.hpp" -#include "xmrstak/misc/configEditor.hpp" -#include "xmrstak/params.hpp" #include "xmrstak/backend/cryptonight.hpp" #include "xmrstak/jconf.hpp" +#include "xmrstak/misc/configEditor.hpp" +#include "xmrstak/misc/console.hpp" +#include "xmrstak/params.hpp" -#include +#include #include +#include #include #include -#include -#include +#include #if defined(__APPLE__) #include @@ -24,7 +24,6 @@ #include #endif - namespace xmrstak { namespace amd @@ -32,11 +31,9 @@ namespace amd class autoAdjust { -public: - + public: autoAdjust() { - } /** print the adjusted values if needed @@ -50,18 +47,17 @@ class autoAdjust if(platformIndex == -1) { - printer::inst()->print_msg(L0,"WARNING: No AMD OpenCL platform found. Possible driver issues or wrong vendor driver."); + printer::inst()->print_msg(L0, "WARNING: No AMD OpenCL platform found. Possible driver issues or wrong vendor driver."); return false; } devVec = getAMDDevices(platformIndex); - int deviceCount = devVec.size(); if(deviceCount == 0) { - printer::inst()->print_msg(L0,"WARNING: No AMD device found."); + printer::inst()->print_msg(L0, "WARNING: No AMD device found."); return false; } @@ -69,17 +65,16 @@ class autoAdjust return true; } -private: - + private: void generateThreadConfig(const int platformIndex) { // load the template of the backend config into a char variable - const char *tpl = - #include "./config.tpl" - ; + const char* tpl = +#include "./config.tpl" + ; configEditor configTpl{}; - configTpl.set( std::string(tpl) ); + configTpl.set(std::string(tpl)); constexpr size_t byteToMiB = 1024u * 1024u; @@ -107,8 +102,7 @@ class autoAdjust // UNKNOWN ctx.name.compare("gfx900") == 0 || ctx.name.compare("gfx903") == 0 || - ctx.name.compare("gfx905") == 0 - ) + ctx.name.compare("gfx905") == 0) { /* Increase the number of threads for AMD VEGA gpus. * Limit the number of threads based on the issue: https://github.com/fireice-uk/xmr-stak/issues/5#issuecomment-339425089 @@ -119,11 +113,8 @@ class autoAdjust // NVIDIA optimizations if( - ctx.isNVIDIA && ( - ctx.name.find("P100") != std::string::npos || - ctx.name.find("V100") != std::string::npos - ) - ) + ctx.isNVIDIA && (ctx.name.find("P100") != std::string::npos || + ctx.name.find("V100") != std::string::npos)) { // do not limit the number of threads maxThreads = 40000u; @@ -190,7 +181,7 @@ class autoAdjust // 240byte extra memory is used per thread for meta data size_t perThread = hashMemSize + 240u; size_t maxIntensity = memPerThread / perThread; - size_t possibleIntensity = std::min( maxThreads , maxIntensity ); + size_t possibleIntensity = std::min(maxThreads, maxIntensity); // map intensity to a multiple of the compute unit count, 8 is the number of threads per work group size_t intensity = (possibleIntensity / (8 * ctx.computeUnits)) * ctx.computeUnits * 8; // in the case we use two threads per gpu we can be relax and need no multiple of the number of compute units @@ -198,25 +189,25 @@ class autoAdjust intensity = (possibleIntensity / 8) * 8; //If the intensity is 0, then it's because the multiple of the unit count is greater than intensity - if (intensity == 0) + if(intensity == 0) { printer::inst()->print_msg(L0, "WARNING: Auto detected intensity unexpectedly low. Try to set the environment variable GPU_SINGLE_ALLOC_PERCENT."); intensity = possibleIntensity; - } - if (intensity != 0) + if(intensity != 0) { for(uint32_t thd = 0; thd < numThreads; ++thd) { conf += " // gpu: " + ctx.name + std::string(" compute units: ") + std::to_string(ctx.computeUnits) + "\n"; conf += " // memory:" + std::to_string(memPerThread / byteToMiB) + "|" + - std::to_string(ctx.maxMemPerAlloc / byteToMiB) + "|" + std::to_string(maxAvailableFreeMem / byteToMiB) + " MiB (used per thread|max per alloc|total free)\n"; + std::to_string(ctx.maxMemPerAlloc / byteToMiB) + "|" + std::to_string(maxAvailableFreeMem / byteToMiB) + " MiB (used per thread|max per alloc|total free)\n"; // set 8 threads per block (this is a good value for the most gpus) conf += std::string(" { \"index\" : ") + std::to_string(ctx.deviceIdx) + ",\n" + - " \"intensity\" : " + std::to_string(intensity) + ", \"worksize\" : " + std::to_string(8) + ",\n" + - " \"affine_to_cpu\" : false, \"strided_index\" : " + std::to_string(ctx.stridedIndex) + ", \"mem_chunk\" : 2,\n" - " \"unroll\" : " + std::to_string(numUnroll) + ", \"comp_mode\" : true, \"interleave\" : " + std::to_string(ctx.interleave) + "\n" + - " },\n"; + " \"intensity\" : " + std::to_string(intensity) + ", \"worksize\" : " + std::to_string(8) + ",\n" + + " \"affine_to_cpu\" : false, \"strided_index\" : " + std::to_string(ctx.stridedIndex) + ", \"mem_chunk\" : 2,\n" + " \"unroll\" : " + + std::to_string(numUnroll) + ", \"comp_mode\" : true, \"interleave\" : " + std::to_string(ctx.interleave) + "\n" + + " },\n"; } } else @@ -225,8 +216,8 @@ class autoAdjust } } - configTpl.replace("PLATFORMINDEX",std::to_string(platformIndex)); - configTpl.replace("GPUCONFIG",conf); + configTpl.replace("PLATFORMINDEX", std::to_string(platformIndex)); + configTpl.replace("GPUCONFIG", conf); configTpl.write(params::inst().configFileAMD); const std::string backendName = xmrstak::params::inst().openCLVendor; diff --git a/xmrstak/backend/amd/jconf.cpp b/xmrstak/backend/amd/jconf.cpp index d3dc00d01..c5a63c56f 100644 --- a/xmrstak/backend/amd/jconf.cpp +++ b/xmrstak/backend/amd/jconf.cpp @@ -21,10 +21,9 @@ * */ - #include "jconf.hpp" -#include "xmrstak/misc/jext.hpp" #include "xmrstak/misc/console.hpp" +#include "xmrstak/misc/jext.hpp" #ifdef _WIN32 #define strcasecmp _stricmp @@ -37,7 +36,6 @@ #include #include - namespace xmrstak { namespace amd @@ -48,9 +46,14 @@ using namespace rapidjson; /* * This enum needs to match index in oConfigValues, otherwise we will get a runtime error */ -enum configEnum { aGpuThreadsConf, iPlatformIdx }; +enum configEnum +{ + aGpuThreadsConf, + iPlatformIdx +}; -struct configVal { +struct configVal +{ configEnum iName; const char* sName; Type iType; @@ -59,24 +62,25 @@ struct configVal { // Same order as in configEnum, as per comment above // kNullType means any type configVal oConfigValues[] = { - { aGpuThreadsConf, "gpu_threads_conf", kNullType }, - { iPlatformIdx, "platform_index", kNumberType } -}; - -constexpr size_t iConfigCnt = (sizeof(oConfigValues)/sizeof(oConfigValues[0])); + {aGpuThreadsConf, "gpu_threads_conf", kNullType}, + {iPlatformIdx, "platform_index", kNumberType}}; +constexpr size_t iConfigCnt = (sizeof(oConfigValues) / sizeof(oConfigValues[0])); -enum optionalConfigEnum { iAutoTune }; +enum optionalConfigEnum +{ + iAutoTune +}; -struct optionalConfigVal { +struct optionalConfigVal +{ optionalConfigEnum iName; const char* sName; Type iType; }; optionalConfigVal oOptionalConfigValues[] = { - { iAutoTune, "auto_tune", kNumberType } -}; + {iAutoTune, "auto_tune", kNumberType}}; inline bool checkType(Type have, Type want) { @@ -109,7 +113,7 @@ jconf::jconf() prv = new opaque_private(); } -bool jconf::GetThreadConfig(size_t id, thd_cfg &cfg) +bool jconf::GetThreadConfig(size_t id, thd_cfg& cfg) { if(id >= prv->configValues[aGpuThreadsConf]->Size()) return false; @@ -176,7 +180,7 @@ bool jconf::GetThreadConfig(size_t id, thd_cfg &cfg) return false; } - if(!memChunk->IsUint64() || (int)memChunk->GetInt64() > 18 ) + if(!memChunk->IsUint64() || (int)memChunk->GetInt64() > 18) { printer::inst()->print_msg(L0, "ERROR: mem_chunk must be smaller than 18"); return false; @@ -215,7 +219,7 @@ size_t jconf::GetPlatformIdx() size_t jconf::GetAutoTune() { const Value* value = GetObjectMember(prv->jsonDoc, oOptionalConfigValues[iAutoTune].sName); - if( value != nullptr && value->IsUint64()) + if(value != nullptr && value->IsUint64()) { return value->GetUint64(); } @@ -233,22 +237,22 @@ size_t jconf::GetThreadCount() bool jconf::parse_config(const char* sFilename) { - FILE * pFile; - char * buffer; + FILE* pFile; + char* buffer; size_t flen; pFile = fopen(sFilename, "rb"); - if (pFile == NULL) + if(pFile == NULL) { printer::inst()->print_msg(L0, "Failed to open config file %s.", sFilename); return false; } - fseek(pFile,0,SEEK_END); + fseek(pFile, 0, SEEK_END); flen = ftell(pFile); rewind(pFile); - if(flen >= 64*1024) + if(flen >= 64 * 1024) { fclose(pFile); printer::inst()->print_msg(L0, "Oversized config file - %s.", sFilename); @@ -262,7 +266,7 @@ bool jconf::parse_config(const char* sFilename) } buffer = (char*)malloc(flen + 3); - if(fread(buffer+1, flen, 1, pFile) != 1) + if(fread(buffer + 1, flen, 1, pFile) != 1) { free(buffer); fclose(pFile); @@ -284,7 +288,7 @@ bool jconf::parse_config(const char* sFilename) buffer[flen] = '}'; buffer[flen + 1] = '\0'; - prv->jsonDoc.Parse(buffer, flen+2); + prv->jsonDoc.Parse(buffer, flen + 2); free(buffer); if(prv->jsonDoc.HasParseError()) @@ -294,7 +298,6 @@ bool jconf::parse_config(const char* sFilename) return false; } - if(!prv->jsonDoc.IsObject()) { //This should never happen as we created the root ourselves printer::inst()->print_msg(L0, "Invalid config file '%s'. No root?", sFilename); @@ -326,7 +329,7 @@ bool jconf::parse_config(const char* sFilename) size_t n_thd = prv->configValues[aGpuThreadsConf]->Size(); thd_cfg c; - for(size_t i=0; i < n_thd; i++) + for(size_t i = 0; i < n_thd; i++) { if(!GetThreadConfig(i, c)) { diff --git a/xmrstak/backend/amd/jconf.hpp b/xmrstak/backend/amd/jconf.hpp index 51a0c79ac..6f50c3059 100644 --- a/xmrstak/backend/amd/jconf.hpp +++ b/xmrstak/backend/amd/jconf.hpp @@ -12,16 +12,18 @@ namespace amd class jconf { -public: + public: static jconf* inst() { - if (oInst == nullptr) oInst = new jconf; + if(oInst == nullptr) + oInst = new jconf; return oInst; }; bool parse_config(const char* sFilename = params::inst().configFileAMD.c_str()); - struct thd_cfg { + struct thd_cfg + { size_t index; size_t intensity; size_t w_size; @@ -34,18 +36,17 @@ class jconf }; size_t GetThreadCount(); - bool GetThreadConfig(size_t id, thd_cfg &cfg); + bool GetThreadConfig(size_t id, thd_cfg& cfg); size_t GetAutoTune(); size_t GetPlatformIdx(); -private: + private: jconf(); static jconf* oInst; struct opaque_private; opaque_private* prv; - }; } // namespace amd diff --git a/xmrstak/backend/amd/minethd.cpp b/xmrstak/backend/amd/minethd.cpp index 3be593175..667144cdd 100644 --- a/xmrstak/backend/amd/minethd.cpp +++ b/xmrstak/backend/amd/minethd.cpp @@ -22,23 +22,23 @@ */ #include "minethd.hpp" -#include "autoAdjust.hpp" #include "amd_gpu/gpu.hpp" +#include "autoAdjust.hpp" -#include "xmrstak/backend/cpu/crypto/cryptonight_aesni.h" #include "xmrstak/backend/cpu/crypto/cryptonight.h" -#include "xmrstak/misc/configEditor.hpp" -#include "xmrstak/misc/console.hpp" +#include "xmrstak/backend/cpu/crypto/cryptonight_aesni.h" +#include "xmrstak/backend/cpu/hwlocMemory.hpp" #include "xmrstak/backend/cpu/minethd.hpp" #include "xmrstak/jconf.hpp" -#include "xmrstak/misc/executor.hpp" +#include "xmrstak/misc/configEditor.hpp" +#include "xmrstak/misc/console.hpp" #include "xmrstak/misc/environment.hpp" +#include "xmrstak/misc/executor.hpp" #include "xmrstak/params.hpp" -#include "xmrstak/backend/cpu/hwlocMemory.hpp" #include -#include #include +#include #include #include @@ -72,15 +72,16 @@ minethd::minethd(miner_work& pWork, size_t iNo, GpuContext* ctx, const jconf::th printer::inst()->print_msg(L1, "WARNING setting affinity failed."); } -extern "C" { +extern "C" +{ #ifdef WIN32 -__declspec(dllexport) + __declspec(dllexport) #endif -std::vector* xmrstak_start_backend(uint32_t threadOffset, miner_work& pWork, environment& env) -{ - environment::inst(&env); - return amd::minethd::thread_starter(threadOffset, pWork); -} + std::vector* xmrstak_start_backend(uint32_t threadOffset, miner_work& pWork, environment& env) + { + environment::inst(&env); + return amd::minethd::thread_starter(threadOffset, pWork); + } } // extern "C" bool minethd::init_gpus() @@ -137,7 +138,7 @@ std::vector* minethd::thread_starter(uint32_t threadOffset, miner_wor pvThreads->reserve(n); jconf::thd_cfg cfg; - for (i = 0; i < n; i++) + for(i = 0; i < n; i++) { jconf::inst()->GetThreadConfig(i, cfg); @@ -161,7 +162,6 @@ std::vector* minethd::thread_starter(uint32_t threadOffset, miner_wor return pvThreads; } - void minethd::work_main() { if(affinity >= 0) //-1 means no affinity @@ -204,16 +204,16 @@ void minethd::work_main() double bestHashrate = 0.0; uint32_t bestIntensity = pGpuCtx->maxRawIntensity; - while (bQuit == 0) + while(bQuit == 0) { - if (oWork.bStall) + if(oWork.bStall) { /* We are stalled here because the executor didn't find a job for us yet, * either because of network latency, or a socket problem. Since we are * raison d'etre of this software it us sensible to just wait until we have something */ - while (globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) + while(globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) std::this_thread::sleep_for(std::chrono::milliseconds(100)); globalStates::inst().consume_work(oWork, iJobNo); @@ -267,14 +267,14 @@ void minethd::work_main() uint64_t t0 = interleaveAdjustDelay(pGpuCtx, adjustInterleave); cl_uint results[0x100]; - memset(results,0,sizeof(cl_uint)*(0x100)); + memset(results, 0, sizeof(cl_uint) * (0x100)); XMRRunJob(pGpuCtx, results, miner_algo); for(size_t i = 0; i < results[0xFF]; i++) { - uint8_t bWorkBlob[128]; - uint8_t bResult[32]; + uint8_t bWorkBlob[128]; + uint8_t bResult[32]; memcpy(bWorkBlob, oWork.bWorkBlob, oWork.iWorkSize); memset(bResult, 0, sizeof(job_result::bResult)); @@ -282,7 +282,7 @@ void minethd::work_main() *(uint32_t*)(bWorkBlob + 39) = results[i]; cpu_ctx->hash_fn(bWorkBlob, oWork.iWorkSize, bResult, &cpu_ctx, miner_algo); - if ( (*((uint64_t*)(bResult + 24))) < oWork.iTarget) + if((*((uint64_t*)(bResult + 24))) < oWork.iTarget) executor::inst()->push_event(ex_event(job_result(oWork.sJobID, results[i], bResult, iThreadNo, miner_algo), oWork.iPoolId)); else executor::inst()->push_event(ex_event("AMD Invalid Result", pGpuCtx->deviceIdx, oWork.iPoolId)); @@ -317,20 +317,18 @@ void minethd::work_main() // lock intensity to the best values autoTune = 0; pGpuCtx->rawIntensity = bestIntensity; - printer::inst()->print_msg(L1,"OpenCL %u|%u: lock intensity at %u", + printer::inst()->print_msg(L1, "OpenCL %u|%u: lock intensity at %u", pGpuCtx->deviceIdx, pGpuCtx->idWorkerOnDevice, - bestIntensity - ); + bestIntensity); } else { - printer::inst()->print_msg(L1,"OpenCL %u|%u: auto-tune validate intensity %u|%u", + printer::inst()->print_msg(L1, "OpenCL %u|%u: auto-tune validate intensity %u|%u", pGpuCtx->deviceIdx, pGpuCtx->idWorkerOnDevice, pGpuCtx->rawIntensity, - bestIntensity - ); + bestIntensity); } // update gpu with new intensity XMRSetJob(pGpuCtx, oWork.bWorkBlob, oWork.iWorkSize, target, miner_algo, cpu_ctx->cn_r_ctx.height); diff --git a/xmrstak/backend/amd/minethd.hpp b/xmrstak/backend/amd/minethd.hpp index 402d63cd6..579abb1b5 100644 --- a/xmrstak/backend/amd/minethd.hpp +++ b/xmrstak/backend/amd/minethd.hpp @@ -3,27 +3,26 @@ #include "amd_gpu/gpu.hpp" #include "jconf.hpp" #include "xmrstak/backend/cpu/crypto/cryptonight.h" -#include "xmrstak/backend/miner_work.hpp" #include "xmrstak/backend/iBackend.hpp" +#include "xmrstak/backend/miner_work.hpp" #include "xmrstak/misc/environment.hpp" -#include #include #include +#include namespace xmrstak { namespace amd { -class minethd : public iBackend +class minethd : public iBackend { -public: - + public: static std::vector* thread_starter(uint32_t threadOffset, miner_work& pWork); static bool init_gpus(); -private: + private: typedef void (*cn_hash_fun)(const void*, size_t, void*, cryptonight_ctx**, const xmrstak_algo&); minethd(miner_work& pWork, size_t iNo, GpuContext* ctx, const jconf::thd_cfg cfg); diff --git a/xmrstak/backend/backendConnector.cpp b/xmrstak/backend/backendConnector.cpp index 0eea9fdd7..808fdca37 100644 --- a/xmrstak/backend/backendConnector.cpp +++ b/xmrstak/backend/backendConnector.cpp @@ -21,31 +21,30 @@ * */ -#include "iBackend.hpp" #include "backendConnector.hpp" -#include "miner_work.hpp" #include "globalStates.hpp" +#include "iBackend.hpp" +#include "miner_work.hpp" #include "plugin.hpp" -#include "xmrstak/misc/environment.hpp" #include "xmrstak/misc/console.hpp" +#include "xmrstak/misc/environment.hpp" #include "xmrstak/params.hpp" #include "cpu/minethd.hpp" #ifndef CONF_NO_CUDA -# include "nvidia/minethd.hpp" +#include "nvidia/minethd.hpp" #endif #ifndef CONF_NO_OPENCL -# include "amd/minethd.hpp" +#include "amd/minethd.hpp" #endif -#include #include -#include +#include #include +#include +#include #include #include -#include - namespace xmrstak { @@ -86,7 +85,7 @@ std::vector* BackendConnector::thread_starter(miner_work& pWork) std::vector libNames = {"xmrstak_cuda_backend_cuda10_0", "xmrstak_cuda_backend_cuda9_2", "xmrstak_cuda_backend"}; size_t numWorkers = 0u; - for( const auto & name : libNames) + for(const auto& name : libNames) { printer::inst()->print_msg(L0, "NVIDIA: try to load library '%s'", name.c_str()); nvidiaplugin.load("NVIDIA", name); diff --git a/xmrstak/backend/backendConnector.hpp b/xmrstak/backend/backendConnector.hpp index 66d873e48..1f2cb8ff6 100644 --- a/xmrstak/backend/backendConnector.hpp +++ b/xmrstak/backend/backendConnector.hpp @@ -3,19 +3,18 @@ #include "iBackend.hpp" #include "miner_work.hpp" -#include -#include #include #include - +#include +#include namespace xmrstak { - struct BackendConnector - { - static std::vector* thread_starter(miner_work& pWork); - static bool self_test(); - }; +struct BackendConnector +{ + static std::vector* thread_starter(miner_work& pWork); + static bool self_test(); +}; } // namespace xmrstak diff --git a/xmrstak/backend/cpu/autoAdjust.hpp b/xmrstak/backend/cpu/autoAdjust.hpp index ba0e6984f..98c145004 100644 --- a/xmrstak/backend/cpu/autoAdjust.hpp +++ b/xmrstak/backend/cpu/autoAdjust.hpp @@ -2,12 +2,12 @@ #include "jconf.hpp" -#include "xmrstak/misc/console.hpp" +#include "xmrstak/backend/cpu/cpuType.hpp" +#include "xmrstak/backend/cryptonight.hpp" #include "xmrstak/jconf.hpp" #include "xmrstak/misc/configEditor.hpp" +#include "xmrstak/misc/console.hpp" #include "xmrstak/params.hpp" -#include "xmrstak/backend/cryptonight.hpp" -#include "xmrstak/backend/cpu/cpuType.hpp" #include #ifdef _WIN32 @@ -16,7 +16,6 @@ #include #endif // _WIN32 - namespace xmrstak { namespace cpu @@ -24,8 +23,7 @@ namespace cpu class autoAdjust { -public: - + public: bool printConfig() { auto neededAlgorithms = ::jconf::inst()->GetCurrentCoinSelection().GetAllAlgorithms(); @@ -42,10 +40,10 @@ class autoAdjust configEditor configTpl{}; // load the template of the backend config into a char variable - const char *tpl = - #include "./config.tpl" - ; - configTpl.set( std::string(tpl) ); + const char* tpl = +#include "./config.tpl" + ; + configTpl.set(std::string(tpl)); std::string conf; @@ -75,14 +73,14 @@ class autoAdjust linux_layout ? "Linux" : "Windows"); uint32_t aff_id = 0; - for(uint32_t i=0; i < corecnt; i++) + for(uint32_t i = 0; i < corecnt; i++) { bool double_mode; if(L3KB_size <= 0) break; - double_mode = L3KB_size / hashMemSizeKB > (int32_t)(corecnt-i); + double_mode = L3KB_size / hashMemSizeKB > (int32_t)(corecnt - i); conf += std::string(" { \"low_power_mode\" : "); conf += std::string(double_mode ? "true" : "false"); @@ -110,14 +108,14 @@ class autoAdjust if(useCryptonight_gpu) conf += "*/\n"; - configTpl.replace("CPUCONFIG",conf); + configTpl.replace("CPUCONFIG", conf); configTpl.write(params::inst().configFileCPU); printer::inst()->print_msg(L0, "CPU configuration stored in file '%s'", params::inst().configFileCPU.c_str()); return true; } -private: + private: bool detectL3Size() { int32_t cpu_info[4]; @@ -125,8 +123,8 @@ class autoAdjust ::jconf::cpuid(0, 0, cpu_info); memcpy(cpustr, &cpu_info[1], 4); - memcpy(cpustr+4, &cpu_info[3], 4); - memcpy(cpustr+8, &cpu_info[2], 4); + memcpy(cpustr + 4, &cpu_info[3], 4); + memcpy(cpustr + 8, &cpu_info[2], 4); if(strcmp(cpustr, "GenuineIntel") == 0) { @@ -139,7 +137,8 @@ class autoAdjust } L3KB_size = ((get_masked(cpu_info[1], 31, 22) + 1) * (get_masked(cpu_info[1], 21, 12) + 1) * - (get_masked(cpu_info[1], 11, 0) + 1) * (cpu_info[2] + 1)) / 1024; + (get_masked(cpu_info[1], 11, 0) + 1) * (cpu_info[2] + 1)) / + 1024; return true; } diff --git a/xmrstak/backend/cpu/autoAdjustHwloc.hpp b/xmrstak/backend/cpu/autoAdjustHwloc.hpp index f09b1ebc0..d1765155a 100644 --- a/xmrstak/backend/cpu/autoAdjustHwloc.hpp +++ b/xmrstak/backend/cpu/autoAdjustHwloc.hpp @@ -1,9 +1,9 @@ #pragma once -#include "xmrstak/misc/console.hpp" +#include "xmrstak/backend/cryptonight.hpp" #include "xmrstak/misc/configEditor.hpp" +#include "xmrstak/misc/console.hpp" #include "xmrstak/params.hpp" -#include "xmrstak/backend/cryptonight.hpp" #ifdef _WIN32 #include @@ -16,7 +16,6 @@ #include #include - namespace xmrstak { namespace cpu @@ -24,8 +23,7 @@ namespace cpu class autoAdjust { -public: - + public: autoAdjust() { auto neededAlgorithms = ::jconf::inst()->GetCurrentCoinSelection().GetAllAlgorithms(); @@ -48,10 +46,10 @@ class autoAdjust configEditor configTpl{}; // load the template of the backend config into a char variable - const char *tpl = - #include "./config.tpl" - ; - configTpl.set( std::string(tpl) ); + const char* tpl = +#include "./config.tpl" + ; + configTpl.set(std::string(tpl)); // if cryptonight_gpu is used we will disable cpu mining but provide a inactive config bool useCryptonight_gpu = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgo() == cryptonight_gpu; @@ -69,7 +67,7 @@ class autoAdjust results.reserve(16); findChildrenCaches(hwloc_get_root_obj(topology), - [&tlcs](hwloc_obj_t found) { tlcs.emplace_back(found); } ); + [&tlcs](hwloc_obj_t found) { tlcs.emplace_back(found); }); if(tlcs.size() == 0) throw(std::runtime_error("The CPU doesn't seem to have a cache.")); @@ -97,7 +95,7 @@ class autoAdjust if(useCryptonight_gpu) conf += "*/\n"; - configTpl.replace("CPUCONFIG",conf); + configTpl.replace("CPUCONFIG", conf); configTpl.write(params::inst().configFileCPU); printer::inst()->print_msg(L0, "CPU configuration stored in file '%s'", params::inst().configFileCPU.c_str()); /* Destroy topology object. */ @@ -106,16 +104,16 @@ class autoAdjust return true; } -private: + private: size_t hashMemSize = 0; size_t halfHashMemSize = 0; std::vector results; - template + template inline void findChildrenByType(hwloc_obj_t obj, hwloc_obj_type_t type, func lambda) { - for(size_t i=0; i < obj->arity; i++) + for(size_t i = 0; i < obj->arity; i++) { if(obj->children[i]->type == type) lambda(obj->children[i]); @@ -133,10 +131,10 @@ class autoAdjust #endif // HWLOC_API_VERSION } - template + template inline void findChildrenCaches(hwloc_obj_t obj, func lambda) { - for(size_t i=0; i < obj->arity; i++) + for(size_t i = 0; i < obj->arity; i++) { if(isCacheObject(obj->children[i])) lambda(obj->children[i]); @@ -159,7 +157,7 @@ class autoAdjust throw(std::runtime_error("Cache object hasn't got attributes.")); size_t PUs = 0; - findChildrenByType(obj, HWLOC_OBJ_PU, [&PUs](hwloc_obj_t found) { PUs++; } ); + findChildrenByType(obj, HWLOC_OBJ_PU, [&PUs](hwloc_obj_t found) { PUs++; }); //Strange case, but we will handle it silently, surely there must be one PU somewhere? if(PUs == 0) @@ -172,7 +170,7 @@ class autoAdjust throw(std::runtime_error("The CPU doesn't seem to have a cache.")); //Try our luck with lower level caches - for(size_t i=0; i < obj->arity; i++) + for(size_t i = 0; i < obj->arity; i++) processTopLevelCache(obj->children[i]); return; } @@ -180,7 +178,7 @@ class autoAdjust size_t cacheSize = obj->attr->cache.size; if(isCacheExclusive(obj)) { - for(size_t i=0; i < obj->arity; i++) + for(size_t i = 0; i < obj->arity; i++) { hwloc_obj_t l2obj = obj->children[i]; //If L2 is exclusive and greater or equal to 2MB add room for one more hash @@ -191,7 +189,7 @@ class autoAdjust std::vector cores; cores.reserve(16); - findChildrenByType(obj, HWLOC_OBJ_CORE, [&cores](hwloc_obj_t found) { cores.emplace_back(found); } ); + findChildrenByType(obj, HWLOC_OBJ_CORE, [&cores](hwloc_obj_t found) { cores.emplace_back(found); }); size_t cacheHashes = (cacheSize + halfHashMemSize) / hashMemSize; diff --git a/xmrstak/backend/cpu/cpuType.cpp b/xmrstak/backend/cpu/cpuType.cpp index c85682d4f..5e2519c3b 100644 --- a/xmrstak/backend/cpu/cpuType.cpp +++ b/xmrstak/backend/cpu/cpuType.cpp @@ -1,9 +1,9 @@ #include "xmrstak/backend/cpu/cpuType.hpp" +#include #include #include -#include #ifdef _WIN32 #define strcasecmp _stricmp @@ -16,64 +16,63 @@ namespace xmrstak { namespace cpu { - void cpuid(uint32_t eax, int32_t ecx, int32_t val[4]) - { - std::memset(val, 0, sizeof(int32_t)*4); - - #ifdef _WIN32 - __cpuidex(val, eax, ecx); - #else - __cpuid_count(eax, ecx, val[0], val[1], val[2], val[3]); - #endif - } - - int32_t get_masked(int32_t val, int32_t h, int32_t l) - { - val &= (0x7FFFFFFF >> (31-(h-l))) << l; - return val >> l; - } +void cpuid(uint32_t eax, int32_t ecx, int32_t val[4]) +{ + std::memset(val, 0, sizeof(int32_t) * 4); - bool has_feature(int32_t val, int32_t bit) - { - int32_t mask = 1 << bit; - return (val & mask) != 0u; +#ifdef _WIN32 + __cpuidex(val, eax, ecx); +#else + __cpuid_count(eax, ecx, val[0], val[1], val[2], val[3]); +#endif +} - } +int32_t get_masked(int32_t val, int32_t h, int32_t l) +{ + val &= (0x7FFFFFFF >> (31 - (h - l))) << l; + return val >> l; +} - Model getModel() - { - int32_t cpu_info[4]; - char cpustr[13] = {0}; +bool has_feature(int32_t val, int32_t bit) +{ + int32_t mask = 1 << bit; + return (val & mask) != 0u; +} - cpuid(0, 0, cpu_info); - std::memcpy(cpustr, &cpu_info[1], 4); - std::memcpy(cpustr+4, &cpu_info[3], 4); - std::memcpy(cpustr+8, &cpu_info[2], 4); +Model getModel() +{ + int32_t cpu_info[4]; + char cpustr[13] = {0}; - Model result; + cpuid(0, 0, cpu_info); + std::memcpy(cpustr, &cpu_info[1], 4); + std::memcpy(cpustr + 4, &cpu_info[3], 4); + std::memcpy(cpustr + 8, &cpu_info[2], 4); - cpuid(1, 0, cpu_info); + Model result; - result.family = get_masked(cpu_info[0], 12, 8); - result.model = get_masked(cpu_info[0], 8, 4) | get_masked(cpu_info[0], 20, 16) << 4; - result.type_name = cpustr; + cpuid(1, 0, cpu_info); - // feature bits https://en.wikipedia.org/wiki/CPUID - // sse2 - result.sse2 = has_feature(cpu_info[3], 26); - // aes-ni - result.aes = has_feature(cpu_info[2], 25); - // avx - 27 is the check if the OS overwrote cpu features - result.avx = has_feature(cpu_info[2], 28) && has_feature(cpu_info[2], 27) ; + result.family = get_masked(cpu_info[0], 12, 8); + result.model = get_masked(cpu_info[0], 8, 4) | get_masked(cpu_info[0], 20, 16) << 4; + result.type_name = cpustr; - if(strcmp(cpustr, "AuthenticAMD") == 0) - { - if(result.family == 0xF) - result.family += get_masked(cpu_info[0], 28, 20); - } + // feature bits https://en.wikipedia.org/wiki/CPUID + // sse2 + result.sse2 = has_feature(cpu_info[3], 26); + // aes-ni + result.aes = has_feature(cpu_info[2], 25); + // avx - 27 is the check if the OS overwrote cpu features + result.avx = has_feature(cpu_info[2], 28) && has_feature(cpu_info[2], 27); - return result; + if(strcmp(cpustr, "AuthenticAMD") == 0) + { + if(result.family == 0xF) + result.family += get_masked(cpu_info[0], 28, 20); } + return result; +} + } // namespace cpu } // namespace xmrstak diff --git a/xmrstak/backend/cpu/cpuType.hpp b/xmrstak/backend/cpu/cpuType.hpp index 7f6bfaf51..2bafa4105 100644 --- a/xmrstak/backend/cpu/cpuType.hpp +++ b/xmrstak/backend/cpu/cpuType.hpp @@ -1,32 +1,30 @@ #pragma once -#include #include - +#include namespace xmrstak { namespace cpu { - struct Model - { - uint32_t family = 0u; - uint32_t model = 0u; - bool aes = false; - bool sse2 = false; - bool avx = false; - std::string type_name = "unknown"; - }; +struct Model +{ + uint32_t family = 0u; + uint32_t model = 0u; + bool aes = false; + bool sse2 = false; + bool avx = false; + std::string type_name = "unknown"; +}; - Model getModel(); +Model getModel(); - /** Mask bits between h and l and return the value +/** Mask bits between h and l and return the value * * This enables us to put in values exactly like in the manual * For example EBX[30:22] is get_masked(cpu_info[1], 31, 22) */ - int32_t get_masked(int32_t val, int32_t h, int32_t l); +int32_t get_masked(int32_t val, int32_t h, int32_t l); - } // namespace cpu } // namespace xmrstak diff --git a/xmrstak/backend/cpu/crypto/CryptonightR_gen.cpp b/xmrstak/backend/cpu/crypto/CryptonightR_gen.cpp index 2fc1a8baa..5d55987ac 100644 --- a/xmrstak/backend/cpu/crypto/CryptonightR_gen.cpp +++ b/xmrstak/backend/cpu/crypto/CryptonightR_gen.cpp @@ -1,77 +1,87 @@ #include -typedef void(*void_func)(); +typedef void (*void_func)(); -#include "xmrstak/backend/cpu/crypto/asm/cnR/CryptonightR_template.h" -#include "cryptonight_aesni.h" #include "cryptonight.h" +#include "cryptonight_aesni.h" +#include "xmrstak/backend/cpu/crypto/asm/cnR/CryptonightR_template.h" #include "xmrstak/misc/console.hpp" -static inline void add_code(uint8_t* &p, void (*p1)(), void (*p2)()) +static inline void add_code(uint8_t*& p, void (*p1)(), void (*p2)()) { - const ptrdiff_t size = reinterpret_cast(p2) - reinterpret_cast(p1); - if (size > 0) { - memcpy(p, reinterpret_cast(p1), size); - p += size; - } + const ptrdiff_t size = reinterpret_cast(p2) - reinterpret_cast(p1); + if(size > 0) + { + memcpy(p, reinterpret_cast(p1), size); + p += size; + } } -static inline void add_random_math(uint8_t* &p, const V4_Instruction* code, int code_size, const void_func* instructions, const void_func* instructions_mov, bool is_64_bit, int selected_asm) +static inline void add_random_math(uint8_t*& p, const V4_Instruction* code, int code_size, const void_func* instructions, const void_func* instructions_mov, bool is_64_bit, int selected_asm) { - uint32_t prev_rot_src = (uint32_t)(-1); - - for (int i = 0;; ++i) { - const V4_Instruction inst = code[i]; - if (inst.opcode == RET) { - break; - } - - uint8_t opcode = (inst.opcode == MUL) ? inst.opcode : (inst.opcode + 2); - uint8_t dst_index = inst.dst_index; - uint8_t src_index = inst.src_index; - - const uint32_t a = inst.dst_index; - const uint32_t b = inst.src_index; - const uint8_t c = opcode | (dst_index << V4_OPCODE_BITS) | (((src_index == 8) ? dst_index : src_index) << (V4_OPCODE_BITS + V4_DST_INDEX_BITS)); - - switch (inst.opcode) { - case ROR: - case ROL: - if (b != prev_rot_src) { - prev_rot_src = b; - add_code(p, instructions_mov[c], instructions_mov[c + 1]); - } - break; - } - - if (a == prev_rot_src) { - prev_rot_src = (uint32_t)(-1); - } - - void_func begin = instructions[c]; + uint32_t prev_rot_src = (uint32_t)(-1); + + for(int i = 0;; ++i) + { + const V4_Instruction inst = code[i]; + if(inst.opcode == RET) + { + break; + } + + uint8_t opcode = (inst.opcode == MUL) ? inst.opcode : (inst.opcode + 2); + uint8_t dst_index = inst.dst_index; + uint8_t src_index = inst.src_index; + + const uint32_t a = inst.dst_index; + const uint32_t b = inst.src_index; + const uint8_t c = opcode | (dst_index << V4_OPCODE_BITS) | (((src_index == 8) ? dst_index : src_index) << (V4_OPCODE_BITS + V4_DST_INDEX_BITS)); + + switch(inst.opcode) + { + case ROR: + case ROL: + if(b != prev_rot_src) + { + prev_rot_src = b; + add_code(p, instructions_mov[c], instructions_mov[c + 1]); + } + break; + } + + if(a == prev_rot_src) + { + prev_rot_src = (uint32_t)(-1); + } + + void_func begin = instructions[c]; // AMD == 2 - if ((selected_asm == 2) && (inst.opcode == MUL && !is_64_bit)) { - // AMD Bulldozer has latency 4 for 32-bit IMUL and 6 for 64-bit IMUL - // Always use 32-bit IMUL for AMD Bulldozer in 32-bit mode - skip prefix 0x48 and change 0x49 to 0x41 - uint8_t* prefix = reinterpret_cast(begin); - - if (*prefix == 0x49) { - *(p++) = 0x41; - } - - begin = reinterpret_cast(prefix + 1); - } - - add_code(p, begin, instructions[c + 1]); - - if (inst.opcode == ADD) { - *(uint32_t*)(p - sizeof(uint32_t) - (is_64_bit ? 3 : 0)) = inst.C; - if (is_64_bit) { - prev_rot_src = (uint32_t)(-1); - } - } - } + if((selected_asm == 2) && (inst.opcode == MUL && !is_64_bit)) + { + // AMD Bulldozer has latency 4 for 32-bit IMUL and 6 for 64-bit IMUL + // Always use 32-bit IMUL for AMD Bulldozer in 32-bit mode - skip prefix 0x48 and change 0x49 to 0x41 + uint8_t* prefix = reinterpret_cast(begin); + + if(*prefix == 0x49) + { + *(p++) = 0x41; + } + + begin = reinterpret_cast(prefix + 1); + } + + add_code(p, begin, instructions[c + 1]); + + if(inst.opcode == ADD) + { + *(uint32_t*)(p - sizeof(uint32_t) - (is_64_bit ? 3 : 0)) = inst.C; + if(is_64_bit) + { + prev_rot_src = (uint32_t)(-1); + } + } + } } void v4_compile_code(size_t N, cryptonight_ctx* ctx, int code_size) @@ -84,14 +94,14 @@ void v4_compile_code(size_t N, cryptonight_ctx* ctx, int code_size) else unprotectExecutableMemory(ctx->fun_data, allocation_size); - uint8_t* p0 = ctx->fun_data; - uint8_t* p = p0; + uint8_t* p0 = ctx->fun_data; + uint8_t* p = p0; if(ctx->fun_data != nullptr) { if(N == 2) { - add_code(p, CryptonightR_template_double_part1, CryptonightR_template_double_part2); + add_code(p, CryptonightR_template_double_part1, CryptonightR_template_double_part2); add_random_math(p, ctx->cn_r_ctx.code, code_size, instructions, instructions_mov, false, ctx->asm_version); add_code(p, CryptonightR_template_double_part2, CryptonightR_template_double_part3); add_random_math(p, ctx->cn_r_ctx.code, code_size, instructions, instructions_mov, false, ctx->asm_version); diff --git a/xmrstak/backend/cpu/crypto/c_blake256.c b/xmrstak/backend/cpu/crypto/c_blake256.c index e5fadfe74..93d9cadbb 100644 --- a/xmrstak/backend/cpu/crypto/c_blake256.c +++ b/xmrstak/backend/cpu/crypto/c_blake256.c @@ -8,66 +8,67 @@ * HMAC is specified by RFC 2104. */ -#include -#include -#include #include "c_blake256.h" +#include +#include +#include -#define U8TO32(p) \ - (((uint32_t)((p)[0]) << 24) | ((uint32_t)((p)[1]) << 16) | \ - ((uint32_t)((p)[2]) << 8) | ((uint32_t)((p)[3]) )) -#define U32TO8(p, v) \ - (p)[0] = (uint8_t)((v) >> 24); (p)[1] = (uint8_t)((v) >> 16); \ - (p)[2] = (uint8_t)((v) >> 8); (p)[3] = (uint8_t)((v) ); +#define U8TO32(p) \ + (((uint32_t)((p)[0]) << 24) | ((uint32_t)((p)[1]) << 16) | \ + ((uint32_t)((p)[2]) << 8) | ((uint32_t)((p)[3]))) +#define U32TO8(p, v) \ + (p)[0] = (uint8_t)((v) >> 24); \ + (p)[1] = (uint8_t)((v) >> 16); \ + (p)[2] = (uint8_t)((v) >> 8); \ + (p)[3] = (uint8_t)((v)); const uint8_t sigma[][16] = { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15}, - {14,10, 4, 8, 9,15,13, 6, 1,12, 0, 2,11, 7, 5, 3}, - {11, 8,12, 0, 5, 2,15,13,10,14, 3, 6, 7, 1, 9, 4}, - { 7, 9, 3, 1,13,12,11,14, 2, 6, 5,10, 4, 0,15, 8}, - { 9, 0, 5, 7, 2, 4,10,15,14, 1,11,12, 6, 8, 3,13}, - { 2,12, 6,10, 0,11, 8, 3, 4,13, 7, 5,15,14, 1, 9}, - {12, 5, 1,15,14,13, 4,10, 0, 7, 6, 3, 9, 2, 8,11}, - {13,11, 7,14,12, 1, 3, 9, 5, 0,15, 4, 8, 6, 2,10}, - { 6,15,14, 9,11, 3, 0, 8,12, 2,13, 7, 1, 4,10, 5}, - {10, 2, 8, 4, 7, 6, 1, 5,15,11, 9,14, 3,12,13, 0}, - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15}, - {14,10, 4, 8, 9,15,13, 6, 1,12, 0, 2,11, 7, 5, 3}, - {11, 8,12, 0, 5, 2,15,13,10,14, 3, 6, 7, 1, 9, 4}, - { 7, 9, 3, 1,13,12,11,14, 2, 6, 5,10, 4, 0,15, 8} -}; + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, + {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, + {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, + {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, + {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, + {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, + {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, + {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, + {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, + {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, + {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}}; const uint32_t cst[16] = { 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917 -}; + 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917}; static const uint8_t padding[] = { - 0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -void blake256_compress(state *S, const uint8_t *block) { +void blake256_compress(state* S, const uint8_t* block) +{ uint32_t v[16], m[16], i; -#define ROT(x,n) (((x)<<(32-n))|((x)>>(n))) -#define G(a,b,c,d,e) \ - v[a] += (m[sigma[i][e]] ^ cst[sigma[i][e+1]]) + v[b]; \ - v[d] = ROT(v[d] ^ v[a],16); \ - v[c] += v[d]; \ - v[b] = ROT(v[b] ^ v[c],12); \ - v[a] += (m[sigma[i][e+1]] ^ cst[sigma[i][e]])+v[b]; \ - v[d] = ROT(v[d] ^ v[a], 8); \ - v[c] += v[d]; \ +#define ROT(x, n) (((x) << (32 - n)) | ((x) >> (n))) +#define G(a, b, c, d, e) \ + v[a] += (m[sigma[i][e]] ^ cst[sigma[i][e + 1]]) + v[b]; \ + v[d] = ROT(v[d] ^ v[a], 16); \ + v[c] += v[d]; \ + v[b] = ROT(v[b] ^ v[c], 12); \ + v[a] += (m[sigma[i][e + 1]] ^ cst[sigma[i][e]]) + v[b]; \ + v[d] = ROT(v[d] ^ v[a], 8); \ + v[c] += v[d]; \ v[b] = ROT(v[b] ^ v[c], 7); - for (i = 0; i < 16; ++i) m[i] = U8TO32(block + i * 4); - for (i = 0; i < 8; ++i) v[i] = S->h[i]; - v[ 8] = S->s[0] ^ 0x243F6A88; - v[ 9] = S->s[1] ^ 0x85A308D3; + for(i = 0; i < 16; ++i) + m[i] = U8TO32(block + i * 4); + for(i = 0; i < 8; ++i) + v[i] = S->h[i]; + v[8] = S->s[0] ^ 0x243F6A88; + v[9] = S->s[1] ^ 0x85A308D3; v[10] = S->s[2] ^ 0x13198A2E; v[11] = S->s[3] ^ 0x03707344; v[12] = 0xA4093822; @@ -75,29 +76,34 @@ void blake256_compress(state *S, const uint8_t *block) { v[14] = 0x082EFA98; v[15] = 0xEC4E6C89; - if (S->nullt == 0) { + if(S->nullt == 0) + { v[12] ^= S->t[0]; v[13] ^= S->t[0]; v[14] ^= S->t[1]; v[15] ^= S->t[1]; } - for (i = 0; i < 14; ++i) { - G(0, 4, 8, 12, 0); - G(1, 5, 9, 13, 2); - G(2, 6, 10, 14, 4); - G(3, 7, 11, 15, 6); - G(3, 4, 9, 14, 14); - G(2, 7, 8, 13, 12); - G(0, 5, 10, 15, 8); + for(i = 0; i < 14; ++i) + { + G(0, 4, 8, 12, 0); + G(1, 5, 9, 13, 2); + G(2, 6, 10, 14, 4); + G(3, 7, 11, 15, 6); + G(3, 4, 9, 14, 14); + G(2, 7, 8, 13, 12); + G(0, 5, 10, 15, 8); G(1, 6, 11, 12, 10); } - for (i = 0; i < 16; ++i) S->h[i % 8] ^= v[i]; - for (i = 0; i < 8; ++i) S->h[i] ^= S->s[i % 4]; + for(i = 0; i < 16; ++i) + S->h[i % 8] ^= v[i]; + for(i = 0; i < 8; ++i) + S->h[i] ^= S->s[i % 4]; } -void blake256_init(state *S) { +void blake256_init(state* S) +{ S->h[0] = 0x6A09E667; S->h[1] = 0xBB67AE85; S->h[2] = 0x3C6EF372; @@ -110,7 +116,8 @@ void blake256_init(state *S) { S->s[0] = S->s[1] = S->s[2] = S->s[3] = 0; } -void blake224_init(state *S) { +void blake224_init(state* S) +{ S->h[0] = 0xC1059ED8; S->h[1] = 0x367CD507; S->h[2] = 0x3070DD17; @@ -124,57 +131,75 @@ void blake224_init(state *S) { } // datalen = number of bits -void blake256_update(state *S, const uint8_t *data, uint32_t datalen) { +void blake256_update(state* S, const uint8_t* data, uint32_t datalen) +{ int left = S->buflen >> 3; int fill = 64 - left; - if (left && (((datalen >> 3) & 0x3F) >= (unsigned) fill)) { - memcpy((void *) (S->buf + left), (void *) data, fill); + if(left && (((datalen >> 3) & 0x3F) >= (unsigned)fill)) + { + memcpy((void*)(S->buf + left), (void*)data, fill); S->t[0] += 512; - if (S->t[0] == 0) S->t[1]++; + if(S->t[0] == 0) + S->t[1]++; blake256_compress(S, S->buf); data += fill; datalen -= (fill << 3); left = 0; } - while (datalen >= 512) { + while(datalen >= 512) + { S->t[0] += 512; - if (S->t[0] == 0) S->t[1]++; + if(S->t[0] == 0) + S->t[1]++; blake256_compress(S, data); data += 64; datalen -= 512; } - if (datalen > 0) { - memcpy((void *) (S->buf + left), (void *) data, datalen >> 3); + if(datalen > 0) + { + memcpy((void*)(S->buf + left), (void*)data, datalen >> 3); S->buflen = (left << 3) + datalen; - } else { + } + else + { S->buflen = 0; } } // datalen = number of bits -void blake224_update(state *S, const uint8_t *data, uint32_t datalen) { +void blake224_update(state* S, const uint8_t* data, uint32_t datalen) +{ blake256_update(S, data, datalen); } -void blake256_final_h(state *S, uint8_t *digest, uint8_t pa, uint8_t pb) { +void blake256_final_h(state* S, uint8_t* digest, uint8_t pa, uint8_t pb) +{ uint8_t msglen[8]; uint32_t lo = S->t[0] + S->buflen, hi = S->t[1]; - if (lo < (unsigned) S->buflen) hi++; + if(lo < (unsigned)S->buflen) + hi++; U32TO8(msglen + 0, hi); U32TO8(msglen + 4, lo); - if (S->buflen == 440) { /* one padding byte */ + if(S->buflen == 440) + { /* one padding byte */ S->t[0] -= 8; blake256_update(S, &pa, 8); - } else { - if (S->buflen < 440) { /* enough space to fill the block */ - if (S->buflen == 0) S->nullt = 1; + } + else + { + if(S->buflen < 440) + { /* enough space to fill the block */ + if(S->buflen == 0) + S->nullt = 1; S->t[0] -= 440 - S->buflen; blake256_update(S, padding, 440 - S->buflen); - } else { /* need 2 compressions */ + } + else + { /* need 2 compressions */ S->t[0] -= 512 - S->buflen; blake256_update(S, padding, 512 - S->buflen); S->t[0] -= 440; @@ -187,9 +212,9 @@ void blake256_final_h(state *S, uint8_t *digest, uint8_t pa, uint8_t pb) { S->t[0] -= 64; blake256_update(S, msglen, 64); - U32TO8(digest + 0, S->h[0]); - U32TO8(digest + 4, S->h[1]); - U32TO8(digest + 8, S->h[2]); + U32TO8(digest + 0, S->h[0]); + U32TO8(digest + 4, S->h[1]); + U32TO8(digest + 8, S->h[2]); U32TO8(digest + 12, S->h[3]); U32TO8(digest + 16, S->h[4]); U32TO8(digest + 20, S->h[5]); @@ -197,16 +222,19 @@ void blake256_final_h(state *S, uint8_t *digest, uint8_t pa, uint8_t pb) { U32TO8(digest + 28, S->h[7]); } -void blake256_final(state *S, uint8_t *digest) { +void blake256_final(state* S, uint8_t* digest) +{ blake256_final_h(S, digest, 0x81, 0x01); } -void blake224_final(state *S, uint8_t *digest) { +void blake224_final(state* S, uint8_t* digest) +{ blake256_final_h(S, digest, 0x80, 0x00); } // inlen = number of bytes -void blake256_hash(uint8_t *out, const uint8_t *in, uint32_t inlen) { +void blake256_hash(uint8_t* out, const uint8_t* in, uint32_t inlen) +{ state S; blake256_init(&S); blake256_update(&S, in, inlen * 8); @@ -214,7 +242,8 @@ void blake256_hash(uint8_t *out, const uint8_t *in, uint32_t inlen) { } // inlen = number of bytes -void blake224_hash(uint8_t *out, const uint8_t *in, uint32_t inlen) { +void blake224_hash(uint8_t* out, const uint8_t* in, uint32_t inlen) +{ state S; blake224_init(&S); blake224_update(&S, in, inlen * 8); @@ -222,13 +251,15 @@ void blake224_hash(uint8_t *out, const uint8_t *in, uint32_t inlen) { } // keylen = number of bytes -void hmac_blake256_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) { - const uint8_t *key = _key; +void hmac_blake256_init(hmac_state* S, const uint8_t* _key, uint64_t keylen) +{ + const uint8_t* key = _key; uint8_t keyhash[32]; uint8_t pad[64]; uint64_t i; - if (keylen > 64) { + if(keylen > 64) + { blake256_hash(keyhash, key, keylen); key = keyhash; keylen = 32; @@ -236,14 +267,16 @@ void hmac_blake256_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) { blake256_init(&S->inner); memset(pad, 0x36, 64); - for (i = 0; i < keylen; ++i) { + for(i = 0; i < keylen; ++i) + { pad[i] ^= key[i]; } blake256_update(&S->inner, pad, 512); blake256_init(&S->outer); memset(pad, 0x5c, 64); - for (i = 0; i < keylen; ++i) { + for(i = 0; i < keylen; ++i) + { pad[i] ^= key[i]; } blake256_update(&S->outer, pad, 512); @@ -252,13 +285,15 @@ void hmac_blake256_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) { } // keylen = number of bytes -void hmac_blake224_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) { - const uint8_t *key = _key; +void hmac_blake224_init(hmac_state* S, const uint8_t* _key, uint64_t keylen) +{ + const uint8_t* key = _key; uint8_t keyhash[32]; uint8_t pad[64]; uint64_t i; - if (keylen > 64) { + if(keylen > 64) + { blake256_hash(keyhash, key, keylen); key = keyhash; keylen = 28; @@ -266,14 +301,16 @@ void hmac_blake224_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) { blake224_init(&S->inner); memset(pad, 0x36, 64); - for (i = 0; i < keylen; ++i) { + for(i = 0; i < keylen; ++i) + { pad[i] ^= key[i]; } blake224_update(&S->inner, pad, 512); blake224_init(&S->outer); memset(pad, 0x5c, 64); - for (i = 0; i < keylen; ++i) { + for(i = 0; i < keylen; ++i) + { pad[i] ^= key[i]; } blake224_update(&S->outer, pad, 512); @@ -282,18 +319,21 @@ void hmac_blake224_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) { } // datalen = number of bits -void hmac_blake256_update(hmac_state *S, const uint8_t *data, uint32_t datalen) { - // update the inner state - blake256_update(&S->inner, data, datalen); +void hmac_blake256_update(hmac_state* S, const uint8_t* data, uint32_t datalen) +{ + // update the inner state + blake256_update(&S->inner, data, datalen); } // datalen = number of bits -void hmac_blake224_update(hmac_state *S, const uint8_t *data, uint32_t datalen) { - // update the inner state - blake224_update(&S->inner, data, datalen); +void hmac_blake224_update(hmac_state* S, const uint8_t* data, uint32_t datalen) +{ + // update the inner state + blake224_update(&S->inner, data, datalen); } -void hmac_blake256_final(hmac_state *S, uint8_t *digest) { +void hmac_blake256_final(hmac_state* S, uint8_t* digest) +{ uint8_t ihash[32]; blake256_final(&S->inner, ihash); blake256_update(&S->outer, ihash, 256); @@ -301,7 +341,8 @@ void hmac_blake256_final(hmac_state *S, uint8_t *digest) { memset(ihash, 0, 32); } -void hmac_blake224_final(hmac_state *S, uint8_t *digest) { +void hmac_blake224_final(hmac_state* S, uint8_t* digest) +{ uint8_t ihash[32]; blake224_final(&S->inner, ihash); blake224_update(&S->outer, ihash, 224); @@ -310,7 +351,8 @@ void hmac_blake224_final(hmac_state *S, uint8_t *digest) { } // keylen = number of bytes; inlen = number of bytes -void hmac_blake256_hash(uint8_t *out, const uint8_t *key, uint64_t keylen, const uint8_t *in, uint32_t inlen) { +void hmac_blake256_hash(uint8_t* out, const uint8_t* key, uint64_t keylen, const uint8_t* in, uint32_t inlen) +{ hmac_state S; hmac_blake256_init(&S, key, keylen); hmac_blake256_update(&S, in, inlen * 8); @@ -318,7 +360,8 @@ void hmac_blake256_hash(uint8_t *out, const uint8_t *key, uint64_t keylen, const } // keylen = number of bytes; inlen = number of bytes -void hmac_blake224_hash(uint8_t *out, const uint8_t *key, uint64_t keylen, const uint8_t *in, uint32_t inlen) { +void hmac_blake224_hash(uint8_t* out, const uint8_t* key, uint64_t keylen, const uint8_t* in, uint32_t inlen) +{ hmac_state S; hmac_blake224_init(&S, key, keylen); hmac_blake224_update(&S, in, inlen * 8); diff --git a/xmrstak/backend/cpu/crypto/c_blake256.h b/xmrstak/backend/cpu/crypto/c_blake256.h index 06c7917af..9f63f88f4 100644 --- a/xmrstak/backend/cpu/crypto/c_blake256.h +++ b/xmrstak/backend/cpu/crypto/c_blake256.h @@ -3,41 +3,43 @@ #include -typedef struct { - uint32_t h[8], s[4], t[2]; - int buflen, nullt; - uint8_t buf[64]; +typedef struct +{ + uint32_t h[8], s[4], t[2]; + int buflen, nullt; + uint8_t buf[64]; } state; -typedef struct { - state inner; - state outer; +typedef struct +{ + state inner; + state outer; } hmac_state; -void blake256_init(state *); -void blake224_init(state *); +void blake256_init(state*); +void blake224_init(state*); -void blake256_update(state *, const uint8_t *, uint32_t); -void blake224_update(state *, const uint8_t *, uint32_t); +void blake256_update(state*, const uint8_t*, uint32_t); +void blake224_update(state*, const uint8_t*, uint32_t); -void blake256_final(state *, uint8_t *); -void blake224_final(state *, uint8_t *); +void blake256_final(state*, uint8_t*); +void blake224_final(state*, uint8_t*); -void blake256_hash(uint8_t *, const uint8_t *, uint32_t); -void blake224_hash(uint8_t *, const uint8_t *, uint32_t); +void blake256_hash(uint8_t*, const uint8_t*, uint32_t); +void blake224_hash(uint8_t*, const uint8_t*, uint32_t); /* HMAC functions: */ -void hmac_blake256_init(hmac_state *, const uint8_t *, uint64_t); -void hmac_blake224_init(hmac_state *, const uint8_t *, uint64_t); +void hmac_blake256_init(hmac_state*, const uint8_t*, uint64_t); +void hmac_blake224_init(hmac_state*, const uint8_t*, uint64_t); -void hmac_blake256_update(hmac_state *, const uint8_t *, uint32_t); -void hmac_blake224_update(hmac_state *, const uint8_t *, uint32_t); +void hmac_blake256_update(hmac_state*, const uint8_t*, uint32_t); +void hmac_blake224_update(hmac_state*, const uint8_t*, uint32_t); -void hmac_blake256_final(hmac_state *, uint8_t *); -void hmac_blake224_final(hmac_state *, uint8_t *); +void hmac_blake256_final(hmac_state*, uint8_t*); +void hmac_blake224_final(hmac_state*, uint8_t*); -void hmac_blake256_hash(uint8_t *, const uint8_t *, uint64_t, const uint8_t *, uint32_t); -void hmac_blake224_hash(uint8_t *, const uint8_t *, uint64_t, const uint8_t *, uint32_t); +void hmac_blake256_hash(uint8_t*, const uint8_t*, uint64_t, const uint8_t*, uint32_t); +void hmac_blake224_hash(uint8_t*, const uint8_t*, uint64_t, const uint8_t*, uint32_t); #endif /* _BLAKE256_H_ */ diff --git a/xmrstak/backend/cpu/crypto/c_groestl.c b/xmrstak/backend/cpu/crypto/c_groestl.c index 5b3523e79..bae9a9f11 100644 --- a/xmrstak/backend/cpu/crypto/c_groestl.c +++ b/xmrstak/backend/cpu/crypto/c_groestl.c @@ -14,178 +14,185 @@ #define P_TYPE 0 #define Q_TYPE 1 -const uint8_t shift_Values[2][8] = {{0,1,2,3,4,5,6,7},{1,3,5,7,0,2,4,6}}; - -const uint8_t indices_cyclic[15] = {0,1,2,3,4,5,6,7,0,1,2,3,4,5,6}; - - -#define ROTATE_COLUMN_DOWN(v1, v2, amount_bytes, temp_var) {temp_var = (v1<<(8*amount_bytes))|(v2>>(8*(4-amount_bytes))); \ - v2 = (v2<<(8*amount_bytes))|(v1>>(8*(4-amount_bytes))); \ - v1 = temp_var;} - - -#define COLUMN(x,y,i,c0,c1,c2,c3,c4,c5,c6,c7,tv1,tv2,tu,tl,t) \ - tu = T[2*(uint32_t)x[4*c0+0]]; \ - tl = T[2*(uint32_t)x[4*c0+0]+1]; \ - tv1 = T[2*(uint32_t)x[4*c1+1]]; \ - tv2 = T[2*(uint32_t)x[4*c1+1]+1]; \ - ROTATE_COLUMN_DOWN(tv1,tv2,1,t) \ - tu ^= tv1; \ - tl ^= tv2; \ - tv1 = T[2*(uint32_t)x[4*c2+2]]; \ - tv2 = T[2*(uint32_t)x[4*c2+2]+1]; \ - ROTATE_COLUMN_DOWN(tv1,tv2,2,t) \ - tu ^= tv1; \ - tl ^= tv2; \ - tv1 = T[2*(uint32_t)x[4*c3+3]]; \ - tv2 = T[2*(uint32_t)x[4*c3+3]+1]; \ - ROTATE_COLUMN_DOWN(tv1,tv2,3,t) \ - tu ^= tv1; \ - tl ^= tv2; \ - tl ^= T[2*(uint32_t)x[4*c4+0]]; \ - tu ^= T[2*(uint32_t)x[4*c4+0]+1]; \ - tv1 = T[2*(uint32_t)x[4*c5+1]]; \ - tv2 = T[2*(uint32_t)x[4*c5+1]+1]; \ - ROTATE_COLUMN_DOWN(tv1,tv2,1,t) \ - tl ^= tv1; \ - tu ^= tv2; \ - tv1 = T[2*(uint32_t)x[4*c6+2]]; \ - tv2 = T[2*(uint32_t)x[4*c6+2]+1]; \ - ROTATE_COLUMN_DOWN(tv1,tv2,2,t) \ - tl ^= tv1; \ - tu ^= tv2; \ - tv1 = T[2*(uint32_t)x[4*c7+3]]; \ - tv2 = T[2*(uint32_t)x[4*c7+3]+1]; \ - ROTATE_COLUMN_DOWN(tv1,tv2,3,t) \ - tl ^= tv1; \ - tu ^= tv2; \ - y[i] = tu; \ - y[i+1] = tl; +const uint8_t shift_Values[2][8] = {{0, 1, 2, 3, 4, 5, 6, 7}, {1, 3, 5, 7, 0, 2, 4, 6}}; +const uint8_t indices_cyclic[15] = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6}; + +#define ROTATE_COLUMN_DOWN(v1, v2, amount_bytes, temp_var) \ + { \ + temp_var = (v1 << (8 * amount_bytes)) | (v2 >> (8 * (4 - amount_bytes))); \ + v2 = (v2 << (8 * amount_bytes)) | (v1 >> (8 * (4 - amount_bytes))); \ + v1 = temp_var; \ + } + +#define COLUMN(x, y, i, c0, c1, c2, c3, c4, c5, c6, c7, tv1, tv2, tu, tl, t) \ + tu = T[2 * (uint32_t)x[4 * c0 + 0]]; \ + tl = T[2 * (uint32_t)x[4 * c0 + 0] + 1]; \ + tv1 = T[2 * (uint32_t)x[4 * c1 + 1]]; \ + tv2 = T[2 * (uint32_t)x[4 * c1 + 1] + 1]; \ + ROTATE_COLUMN_DOWN(tv1, tv2, 1, t) \ + tu ^= tv1; \ + tl ^= tv2; \ + tv1 = T[2 * (uint32_t)x[4 * c2 + 2]]; \ + tv2 = T[2 * (uint32_t)x[4 * c2 + 2] + 1]; \ + ROTATE_COLUMN_DOWN(tv1, tv2, 2, t) \ + tu ^= tv1; \ + tl ^= tv2; \ + tv1 = T[2 * (uint32_t)x[4 * c3 + 3]]; \ + tv2 = T[2 * (uint32_t)x[4 * c3 + 3] + 1]; \ + ROTATE_COLUMN_DOWN(tv1, tv2, 3, t) \ + tu ^= tv1; \ + tl ^= tv2; \ + tl ^= T[2 * (uint32_t)x[4 * c4 + 0]]; \ + tu ^= T[2 * (uint32_t)x[4 * c4 + 0] + 1]; \ + tv1 = T[2 * (uint32_t)x[4 * c5 + 1]]; \ + tv2 = T[2 * (uint32_t)x[4 * c5 + 1] + 1]; \ + ROTATE_COLUMN_DOWN(tv1, tv2, 1, t) \ + tl ^= tv1; \ + tu ^= tv2; \ + tv1 = T[2 * (uint32_t)x[4 * c6 + 2]]; \ + tv2 = T[2 * (uint32_t)x[4 * c6 + 2] + 1]; \ + ROTATE_COLUMN_DOWN(tv1, tv2, 2, t) \ + tl ^= tv1; \ + tu ^= tv2; \ + tv1 = T[2 * (uint32_t)x[4 * c7 + 3]]; \ + tv2 = T[2 * (uint32_t)x[4 * c7 + 3] + 1]; \ + ROTATE_COLUMN_DOWN(tv1, tv2, 3, t) \ + tl ^= tv1; \ + tu ^= tv2; \ + y[i] = tu; \ + y[i + 1] = tl; /* compute one round of P (short variants) */ -static void RND512P(uint8_t *x, uint32_t *y, uint32_t r) { - uint32_t temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp; - uint32_t* x32 = (uint32_t*)x; - x32[ 0] ^= 0x00000000^r; - x32[ 2] ^= 0x00000010^r; - x32[ 4] ^= 0x00000020^r; - x32[ 6] ^= 0x00000030^r; - x32[ 8] ^= 0x00000040^r; - x32[10] ^= 0x00000050^r; - x32[12] ^= 0x00000060^r; - x32[14] ^= 0x00000070^r; - COLUMN(x,y, 0, 0, 2, 4, 6, 9, 11, 13, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 2, 2, 4, 6, 8, 11, 13, 15, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 4, 4, 6, 8, 10, 13, 15, 1, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 6, 6, 8, 10, 12, 15, 1, 3, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 8, 8, 10, 12, 14, 1, 3, 5, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y,10, 10, 12, 14, 0, 3, 5, 7, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y,12, 12, 14, 0, 2, 5, 7, 9, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y,14, 14, 0, 2, 4, 7, 9, 11, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); +static void RND512P(uint8_t* x, uint32_t* y, uint32_t r) +{ + uint32_t temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp; + uint32_t* x32 = (uint32_t*)x; + x32[0] ^= 0x00000000 ^ r; + x32[2] ^= 0x00000010 ^ r; + x32[4] ^= 0x00000020 ^ r; + x32[6] ^= 0x00000030 ^ r; + x32[8] ^= 0x00000040 ^ r; + x32[10] ^= 0x00000050 ^ r; + x32[12] ^= 0x00000060 ^ r; + x32[14] ^= 0x00000070 ^ r; + COLUMN(x, y, 0, 0, 2, 4, 6, 9, 11, 13, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 2, 2, 4, 6, 8, 11, 13, 15, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 4, 4, 6, 8, 10, 13, 15, 1, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 6, 6, 8, 10, 12, 15, 1, 3, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 8, 8, 10, 12, 14, 1, 3, 5, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 10, 10, 12, 14, 0, 3, 5, 7, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 12, 12, 14, 0, 2, 5, 7, 9, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 14, 14, 0, 2, 4, 7, 9, 11, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); } /* compute one round of Q (short variants) */ -static void RND512Q(uint8_t *x, uint32_t *y, uint32_t r) { - uint32_t temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp; - uint32_t* x32 = (uint32_t*)x; - x32[ 0] = ~x32[ 0]; - x32[ 1] ^= 0xffffffff^r; - x32[ 2] = ~x32[ 2]; - x32[ 3] ^= 0xefffffff^r; - x32[ 4] = ~x32[ 4]; - x32[ 5] ^= 0xdfffffff^r; - x32[ 6] = ~x32[ 6]; - x32[ 7] ^= 0xcfffffff^r; - x32[ 8] = ~x32[ 8]; - x32[ 9] ^= 0xbfffffff^r; - x32[10] = ~x32[10]; - x32[11] ^= 0xafffffff^r; - x32[12] = ~x32[12]; - x32[13] ^= 0x9fffffff^r; - x32[14] = ~x32[14]; - x32[15] ^= 0x8fffffff^r; - COLUMN(x,y, 0, 2, 6, 10, 14, 1, 5, 9, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 2, 4, 8, 12, 0, 3, 7, 11, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 4, 6, 10, 14, 2, 5, 9, 13, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 6, 8, 12, 0, 4, 7, 11, 15, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y, 8, 10, 14, 2, 6, 9, 13, 1, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y,10, 12, 0, 4, 8, 11, 15, 3, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y,12, 14, 2, 6, 10, 13, 1, 5, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - COLUMN(x,y,14, 0, 4, 8, 12, 15, 3, 7, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); +static void RND512Q(uint8_t* x, uint32_t* y, uint32_t r) +{ + uint32_t temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp; + uint32_t* x32 = (uint32_t*)x; + x32[0] = ~x32[0]; + x32[1] ^= 0xffffffff ^ r; + x32[2] = ~x32[2]; + x32[3] ^= 0xefffffff ^ r; + x32[4] = ~x32[4]; + x32[5] ^= 0xdfffffff ^ r; + x32[6] = ~x32[6]; + x32[7] ^= 0xcfffffff ^ r; + x32[8] = ~x32[8]; + x32[9] ^= 0xbfffffff ^ r; + x32[10] = ~x32[10]; + x32[11] ^= 0xafffffff ^ r; + x32[12] = ~x32[12]; + x32[13] ^= 0x9fffffff ^ r; + x32[14] = ~x32[14]; + x32[15] ^= 0x8fffffff ^ r; + COLUMN(x, y, 0, 2, 6, 10, 14, 1, 5, 9, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 2, 4, 8, 12, 0, 3, 7, 11, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 4, 6, 10, 14, 2, 5, 9, 13, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 6, 8, 12, 0, 4, 7, 11, 15, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 8, 10, 14, 2, 6, 9, 13, 1, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 10, 12, 0, 4, 8, 11, 15, 3, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 12, 14, 2, 6, 10, 13, 1, 5, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + COLUMN(x, y, 14, 0, 4, 8, 12, 15, 3, 7, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); } /* compute compression function (short variants) */ -static void F512(uint32_t *h, const uint32_t *m) { - int i; - uint32_t Ptmp[2*COLS512]; - uint32_t Qtmp[2*COLS512]; - uint32_t y[2*COLS512]; - uint32_t z[2*COLS512]; - - for (i = 0; i < 2*COLS512; i++) { - z[i] = m[i]; - Ptmp[i] = h[i]^m[i]; - } - - /* compute Q(m) */ - RND512Q((uint8_t*)z, y, 0x00000000); - RND512Q((uint8_t*)y, z, 0x01000000); - RND512Q((uint8_t*)z, y, 0x02000000); - RND512Q((uint8_t*)y, z, 0x03000000); - RND512Q((uint8_t*)z, y, 0x04000000); - RND512Q((uint8_t*)y, z, 0x05000000); - RND512Q((uint8_t*)z, y, 0x06000000); - RND512Q((uint8_t*)y, z, 0x07000000); - RND512Q((uint8_t*)z, y, 0x08000000); - RND512Q((uint8_t*)y, Qtmp, 0x09000000); - - /* compute P(h+m) */ - RND512P((uint8_t*)Ptmp, y, 0x00000000); - RND512P((uint8_t*)y, z, 0x00000001); - RND512P((uint8_t*)z, y, 0x00000002); - RND512P((uint8_t*)y, z, 0x00000003); - RND512P((uint8_t*)z, y, 0x00000004); - RND512P((uint8_t*)y, z, 0x00000005); - RND512P((uint8_t*)z, y, 0x00000006); - RND512P((uint8_t*)y, z, 0x00000007); - RND512P((uint8_t*)z, y, 0x00000008); - RND512P((uint8_t*)y, Ptmp, 0x00000009); - - /* compute P(h+m) + Q(m) + h */ - for (i = 0; i < 2*COLS512; i++) { - h[i] ^= Ptmp[i]^Qtmp[i]; - } -} +static void F512(uint32_t* h, const uint32_t* m) +{ + int i; + uint32_t Ptmp[2 * COLS512]; + uint32_t Qtmp[2 * COLS512]; + uint32_t y[2 * COLS512]; + uint32_t z[2 * COLS512]; + + for(i = 0; i < 2 * COLS512; i++) + { + z[i] = m[i]; + Ptmp[i] = h[i] ^ m[i]; + } + /* compute Q(m) */ + RND512Q((uint8_t*)z, y, 0x00000000); + RND512Q((uint8_t*)y, z, 0x01000000); + RND512Q((uint8_t*)z, y, 0x02000000); + RND512Q((uint8_t*)y, z, 0x03000000); + RND512Q((uint8_t*)z, y, 0x04000000); + RND512Q((uint8_t*)y, z, 0x05000000); + RND512Q((uint8_t*)z, y, 0x06000000); + RND512Q((uint8_t*)y, z, 0x07000000); + RND512Q((uint8_t*)z, y, 0x08000000); + RND512Q((uint8_t*)y, Qtmp, 0x09000000); + + /* compute P(h+m) */ + RND512P((uint8_t*)Ptmp, y, 0x00000000); + RND512P((uint8_t*)y, z, 0x00000001); + RND512P((uint8_t*)z, y, 0x00000002); + RND512P((uint8_t*)y, z, 0x00000003); + RND512P((uint8_t*)z, y, 0x00000004); + RND512P((uint8_t*)y, z, 0x00000005); + RND512P((uint8_t*)z, y, 0x00000006); + RND512P((uint8_t*)y, z, 0x00000007); + RND512P((uint8_t*)z, y, 0x00000008); + RND512P((uint8_t*)y, Ptmp, 0x00000009); + + /* compute P(h+m) + Q(m) + h */ + for(i = 0; i < 2 * COLS512; i++) + { + h[i] ^= Ptmp[i] ^ Qtmp[i]; + } +} /* digest up to msglen bytes of input (full blocks only) */ -static void Transform(groestlHashState *ctx, - const uint8_t *input, - int msglen) { +static void Transform(groestlHashState* ctx, + const uint8_t* input, + int msglen) +{ - /* digest message, one block at a time */ - for (; msglen >= SIZE512; - msglen -= SIZE512, input += SIZE512) { - F512(ctx->chaining,(uint32_t*)input); + /* digest message, one block at a time */ + for(; msglen >= SIZE512; + msglen -= SIZE512, input += SIZE512) + { + F512(ctx->chaining, (uint32_t*)input); - /* increment block counter */ - ctx->block_counter1++; - if (ctx->block_counter1 == 0) ctx->block_counter2++; - } + /* increment block counter */ + ctx->block_counter1++; + if(ctx->block_counter1 == 0) + ctx->block_counter2++; + } } /* given state h, do h <- P(h)+h */ -static void OutputTransformation(groestlHashState *ctx) { - int j; - uint32_t temp[2*COLS512]; - uint32_t y[2*COLS512]; - uint32_t z[2*COLS512]; - - - - for (j = 0; j < 2*COLS512; j++) { - temp[j] = ctx->chaining[j]; +static void OutputTransformation(groestlHashState* ctx) +{ + int j; + uint32_t temp[2 * COLS512]; + uint32_t y[2 * COLS512]; + uint32_t z[2 * COLS512]; + + for(j = 0; j < 2 * COLS512; j++) + { + temp[j] = ctx->chaining[j]; } RND512P((uint8_t*)temp, y, 0x00000000); RND512P((uint8_t*)y, z, 0x00000001); @@ -197,75 +204,84 @@ static void OutputTransformation(groestlHashState *ctx) { RND512P((uint8_t*)y, z, 0x00000007); RND512P((uint8_t*)z, y, 0x00000008); RND512P((uint8_t*)y, temp, 0x00000009); - for (j = 0; j < 2*COLS512; j++) { - ctx->chaining[j] ^= temp[j]; + for(j = 0; j < 2 * COLS512; j++) + { + ctx->chaining[j] ^= temp[j]; } } /* initialise context */ -static void Init(groestlHashState* ctx) { - int i = 0; - /* allocate memory for state and data buffer */ - - for(;i<(SIZE512/sizeof(uint32_t));i++) - { - ctx->chaining[i] = 0; - } - - /* set initial value */ - ctx->chaining[2*COLS512-1] = u32BIG((uint32_t)HASH_BIT_LEN); - - /* set other variables */ - ctx->buf_ptr = 0; - ctx->block_counter1 = 0; - ctx->block_counter2 = 0; - ctx->bits_in_last_byte = 0; +static void Init(groestlHashState* ctx) +{ + int i = 0; + /* allocate memory for state and data buffer */ + + for(; i < (SIZE512 / sizeof(uint32_t)); i++) + { + ctx->chaining[i] = 0; + } + + /* set initial value */ + ctx->chaining[2 * COLS512 - 1] = u32BIG((uint32_t)HASH_BIT_LEN); + + /* set other variables */ + ctx->buf_ptr = 0; + ctx->block_counter1 = 0; + ctx->block_counter2 = 0; + ctx->bits_in_last_byte = 0; } /* update state with databitlen bits of input */ static void Update(groestlHashState* ctx, - const BitSequence* input, - DataLength databitlen) { - int index = 0; - int msglen = (int)(databitlen/8); - int rem = (int)(databitlen%8); + const BitSequence* input, + DataLength databitlen) +{ + int index = 0; + int msglen = (int)(databitlen / 8); + int rem = (int)(databitlen % 8); - /* if the buffer contains data that has not yet been digested, first + /* if the buffer contains data that has not yet been digested, first add data to buffer until full */ - if (ctx->buf_ptr) { - while (ctx->buf_ptr < SIZE512 && index < msglen) { - ctx->buffer[(int)ctx->buf_ptr++] = input[index++]; - } - if (ctx->buf_ptr < SIZE512) { - /* buffer still not full, return */ - if (rem) { - ctx->bits_in_last_byte = rem; - ctx->buffer[(int)ctx->buf_ptr++] = input[index]; - } - return; + if(ctx->buf_ptr) + { + while(ctx->buf_ptr < SIZE512 && index < msglen) + { + ctx->buffer[(int)ctx->buf_ptr++] = input[index++]; + } + if(ctx->buf_ptr < SIZE512) + { + /* buffer still not full, return */ + if(rem) + { + ctx->bits_in_last_byte = rem; + ctx->buffer[(int)ctx->buf_ptr++] = input[index]; + } + return; + } + + /* digest buffer */ + ctx->buf_ptr = 0; + Transform(ctx, ctx->buffer, SIZE512); } - /* digest buffer */ - ctx->buf_ptr = 0; - Transform(ctx, ctx->buffer, SIZE512); - } + /* digest bulk of message */ + Transform(ctx, input + index, msglen - index); + index += ((msglen - index) / SIZE512) * SIZE512; - /* digest bulk of message */ - Transform(ctx, input+index, msglen-index); - index += ((msglen-index)/SIZE512)*SIZE512; - - /* store remaining data in buffer */ - while (index < msglen) { - ctx->buffer[(int)ctx->buf_ptr++] = input[index++]; - } + /* store remaining data in buffer */ + while(index < msglen) + { + ctx->buffer[(int)ctx->buf_ptr++] = input[index++]; + } - /* if non-integral number of bytes have been supplied, store + /* if non-integral number of bytes have been supplied, store remaining bits in last byte, together with information about number of bits */ - if (rem) { - ctx->bits_in_last_byte = rem; - ctx->buffer[(int)ctx->buf_ptr++] = input[index]; - } + if(rem) + { + ctx->bits_in_last_byte = rem; + ctx->buffer[(int)ctx->buf_ptr++] = input[index]; + } } #define BILB ctx->bits_in_last_byte @@ -273,80 +289,92 @@ static void Update(groestlHashState* ctx, /* finalise: process remaining data (including padding), perform output transformation, and write hash result to 'output' */ static void Final(groestlHashState* ctx, - BitSequence* output) { - int i, j = 0, hashbytelen = HASH_BIT_LEN/8; - uint8_t *s = (BitSequence*)ctx->chaining; - - /* pad with '1'-bit and first few '0'-bits */ - if (BILB) { - ctx->buffer[(int)ctx->buf_ptr-1] &= ((1<buffer[(int)ctx->buf_ptr-1] ^= 0x1<<(7-BILB); - BILB = 0; - } - else ctx->buffer[(int)ctx->buf_ptr++] = 0x80; - - /* pad with '0'-bits */ - if (ctx->buf_ptr > SIZE512-LENGTHFIELDLEN) { - /* padding requires two blocks */ - while (ctx->buf_ptr < SIZE512) { - ctx->buffer[(int)ctx->buf_ptr++] = 0; + BitSequence* output) +{ + int i, j = 0, hashbytelen = HASH_BIT_LEN / 8; + uint8_t* s = (BitSequence*)ctx->chaining; + + /* pad with '1'-bit and first few '0'-bits */ + if(BILB) + { + ctx->buffer[(int)ctx->buf_ptr - 1] &= ((1 << BILB) - 1) << (8 - BILB); + ctx->buffer[(int)ctx->buf_ptr - 1] ^= 0x1 << (7 - BILB); + BILB = 0; + } + else + ctx->buffer[(int)ctx->buf_ptr++] = 0x80; + + /* pad with '0'-bits */ + if(ctx->buf_ptr > SIZE512 - LENGTHFIELDLEN) + { + /* padding requires two blocks */ + while(ctx->buf_ptr < SIZE512) + { + ctx->buffer[(int)ctx->buf_ptr++] = 0; + } + /* digest first padding block */ + Transform(ctx, ctx->buffer, SIZE512); + ctx->buf_ptr = 0; } - /* digest first padding block */ + while(ctx->buf_ptr < SIZE512 - LENGTHFIELDLEN) + { + ctx->buffer[(int)ctx->buf_ptr++] = 0; + } + + /* length padding */ + ctx->block_counter1++; + if(ctx->block_counter1 == 0) + ctx->block_counter2++; + ctx->buf_ptr = SIZE512; + + while(ctx->buf_ptr > SIZE512 - (int)sizeof(uint32_t)) + { + ctx->buffer[(int)--ctx->buf_ptr] = (uint8_t)ctx->block_counter1; + ctx->block_counter1 >>= 8; + } + while(ctx->buf_ptr > SIZE512 - LENGTHFIELDLEN) + { + ctx->buffer[(int)--ctx->buf_ptr] = (uint8_t)ctx->block_counter2; + ctx->block_counter2 >>= 8; + } + /* digest final padding block */ Transform(ctx, ctx->buffer, SIZE512); - ctx->buf_ptr = 0; - } - while (ctx->buf_ptr < SIZE512-LENGTHFIELDLEN) { - ctx->buffer[(int)ctx->buf_ptr++] = 0; - } - - /* length padding */ - ctx->block_counter1++; - if (ctx->block_counter1 == 0) ctx->block_counter2++; - ctx->buf_ptr = SIZE512; - - while (ctx->buf_ptr > SIZE512-(int)sizeof(uint32_t)) { - ctx->buffer[(int)--ctx->buf_ptr] = (uint8_t)ctx->block_counter1; - ctx->block_counter1 >>= 8; - } - while (ctx->buf_ptr > SIZE512-LENGTHFIELDLEN) { - ctx->buffer[(int)--ctx->buf_ptr] = (uint8_t)ctx->block_counter2; - ctx->block_counter2 >>= 8; - } - /* digest final padding block */ - Transform(ctx, ctx->buffer, SIZE512); - /* perform output transformation */ - OutputTransformation(ctx); - - /* store hash result in output */ - for (i = SIZE512-hashbytelen; i < SIZE512; i++,j++) { - output[j] = s[i]; - } - - /* zeroise relevant variables and deallocate memory */ - for (i = 0; i < COLS512; i++) { - ctx->chaining[i] = 0; - } - for (i = 0; i < SIZE512; i++) { - ctx->buffer[i] = 0; - } + /* perform output transformation */ + OutputTransformation(ctx); + + /* store hash result in output */ + for(i = SIZE512 - hashbytelen; i < SIZE512; i++, j++) + { + output[j] = s[i]; + } + + /* zeroise relevant variables and deallocate memory */ + for(i = 0; i < COLS512; i++) + { + ctx->chaining[i] = 0; + } + for(i = 0; i < SIZE512; i++) + { + ctx->buffer[i] = 0; + } } /* hash bit sequence */ void groestl(const BitSequence* data, - DataLength databitlen, - BitSequence* hashval) { + DataLength databitlen, + BitSequence* hashval) +{ - groestlHashState context; + groestlHashState context; - /* initialise */ + /* initialise */ Init(&context); + /* process message */ + Update(&context, data, databitlen); - /* process message */ - Update(&context, data, databitlen); - - /* finalise */ - Final(&context, hashval); + /* finalise */ + Final(&context, hashval); } /* static int crypto_hash(unsigned char *out, diff --git a/xmrstak/backend/cpu/crypto/c_groestl.h b/xmrstak/backend/cpu/crypto/c_groestl.h index 47044b462..5322a2e2e 100644 --- a/xmrstak/backend/cpu/crypto/c_groestl.h +++ b/xmrstak/backend/cpu/crypto/c_groestl.h @@ -1,10 +1,10 @@ #ifndef __hash_h #define __hash_h /* -#include "crypto_uint8.h" +#include "crypto_hash.h" #include "crypto_uint32.h" #include "crypto_uint64.h" -#include "crypto_hash.h" +#include "crypto_uint8.h" typedef crypto_uint8 uint8_t; typedef crypto_uint32 uint32_t; @@ -19,29 +19,28 @@ typedef crypto_uint64 uint64_t; #define LENGTHFIELDLEN ROWS #define COLS512 8 -#define SIZE512 (ROWS*COLS512) +#define SIZE512 (ROWS * COLS512) #define ROUNDS512 10 #define HASH_BIT_LEN 256 -#define ROTL32(v, n) ((((v)<<(n))|((v)>>(32-(n))))&li_32(ffffffff)) - +#define ROTL32(v, n) ((((v) << (n)) | ((v) >> (32 - (n)))) & li_32(ffffffff)) #define li_32(h) 0x##h##u -#define EXT_BYTE(var,n) ((uint8_t)((uint32_t)(var) >> (8*n))) -#define u32BIG(a) \ - ((ROTL32(a,8) & li_32(00FF00FF)) | \ - (ROTL32(a,24) & li_32(FF00FF00))) - +#define EXT_BYTE(var, n) ((uint8_t)((uint32_t)(var) >> (8 * n))) +#define u32BIG(a) \ + ((ROTL32(a, 8) & li_32(00FF00FF)) | \ + (ROTL32(a, 24) & li_32(FF00FF00))) /* NIST API begin */ -typedef struct { - uint32_t chaining[SIZE512/sizeof(uint32_t)]; /* actual state */ - uint32_t block_counter1, - block_counter2; /* message block counter(s) */ - BitSequence buffer[SIZE512]; /* data buffer */ - int buf_ptr; /* data buffer pointer */ - int bits_in_last_byte; /* no. of message bits in last byte of +typedef struct +{ + uint32_t chaining[SIZE512 / sizeof(uint32_t)]; /* actual state */ + uint32_t block_counter1, + block_counter2; /* message block counter(s) */ + BitSequence buffer[SIZE512]; /* data buffer */ + int buf_ptr; /* data buffer pointer */ + int bits_in_last_byte; /* no. of message bits in last byte of data buffer */ } groestlHashState; diff --git a/xmrstak/backend/cpu/crypto/c_jh.c b/xmrstak/backend/cpu/crypto/c_jh.c index 0256a0fa2..e50886dee 100644 --- a/xmrstak/backend/cpu/crypto/c_jh.c +++ b/xmrstak/backend/cpu/crypto/c_jh.c @@ -23,345 +23,400 @@ typedef uint64_t uint64; /*define data alignment for different C compilers*/ #if defined(__GNUC__) - #define DATA_ALIGN16(x) x __attribute__ ((aligned(16))) +#define DATA_ALIGN16(x) x __attribute__((aligned(16))) #else - #define DATA_ALIGN16(x) __declspec(align(16)) x +#define DATA_ALIGN16(x) __declspec(align(16)) x #endif - -typedef struct { - int hashbitlen; /*the message digest size*/ - unsigned long long databitlen; /*the message size in bits*/ - unsigned long long datasize_in_buffer; /*the size of the message remained in buffer; assumed to be multiple of 8bits except for the last partial block at the end of the message*/ - DATA_ALIGN16(uint64 x[8][2]); /*the 1024-bit state, ( x[i][0] || x[i][1] ) is the ith row of the state in the pseudocode*/ - unsigned char buffer[64]; /*the 512-bit message block to be hashed;*/ +typedef struct +{ + int hashbitlen; /*the message digest size*/ + unsigned long long databitlen; /*the message size in bits*/ + unsigned long long datasize_in_buffer; /*the size of the message remained in buffer; assumed to be multiple of 8bits except for the last partial block at the end of the message*/ + DATA_ALIGN16(uint64 x[8][2]); /*the 1024-bit state, ( x[i][0] || x[i][1] ) is the ith row of the state in the pseudocode*/ + unsigned char buffer[64]; /*the 512-bit message block to be hashed;*/ } hashState; - /*The initial hash value H(0)*/ -const unsigned char JH224_H0[128]={0x2d,0xfe,0xdd,0x62,0xf9,0x9a,0x98,0xac,0xae,0x7c,0xac,0xd6,0x19,0xd6,0x34,0xe7,0xa4,0x83,0x10,0x5,0xbc,0x30,0x12,0x16,0xb8,0x60,0x38,0xc6,0xc9,0x66,0x14,0x94,0x66,0xd9,0x89,0x9f,0x25,0x80,0x70,0x6f,0xce,0x9e,0xa3,0x1b,0x1d,0x9b,0x1a,0xdc,0x11,0xe8,0x32,0x5f,0x7b,0x36,0x6e,0x10,0xf9,0x94,0x85,0x7f,0x2,0xfa,0x6,0xc1,0x1b,0x4f,0x1b,0x5c,0xd8,0xc8,0x40,0xb3,0x97,0xf6,0xa1,0x7f,0x6e,0x73,0x80,0x99,0xdc,0xdf,0x93,0xa5,0xad,0xea,0xa3,0xd3,0xa4,0x31,0xe8,0xde,0xc9,0x53,0x9a,0x68,0x22,0xb4,0xa9,0x8a,0xec,0x86,0xa1,0xe4,0xd5,0x74,0xac,0x95,0x9c,0xe5,0x6c,0xf0,0x15,0x96,0xd,0xea,0xb5,0xab,0x2b,0xbf,0x96,0x11,0xdc,0xf0,0xdd,0x64,0xea,0x6e}; -const unsigned char JH256_H0[128]={0xeb,0x98,0xa3,0x41,0x2c,0x20,0xd3,0xeb,0x92,0xcd,0xbe,0x7b,0x9c,0xb2,0x45,0xc1,0x1c,0x93,0x51,0x91,0x60,0xd4,0xc7,0xfa,0x26,0x0,0x82,0xd6,0x7e,0x50,0x8a,0x3,0xa4,0x23,0x9e,0x26,0x77,0x26,0xb9,0x45,0xe0,0xfb,0x1a,0x48,0xd4,0x1a,0x94,0x77,0xcd,0xb5,0xab,0x26,0x2,0x6b,0x17,0x7a,0x56,0xf0,0x24,0x42,0xf,0xff,0x2f,0xa8,0x71,0xa3,0x96,0x89,0x7f,0x2e,0x4d,0x75,0x1d,0x14,0x49,0x8,0xf7,0x7d,0xe2,0x62,0x27,0x76,0x95,0xf7,0x76,0x24,0x8f,0x94,0x87,0xd5,0xb6,0x57,0x47,0x80,0x29,0x6c,0x5c,0x5e,0x27,0x2d,0xac,0x8e,0xd,0x6c,0x51,0x84,0x50,0xc6,0x57,0x5,0x7a,0xf,0x7b,0xe4,0xd3,0x67,0x70,0x24,0x12,0xea,0x89,0xe3,0xab,0x13,0xd3,0x1c,0xd7,0x69}; -const unsigned char JH384_H0[128]={0x48,0x1e,0x3b,0xc6,0xd8,0x13,0x39,0x8a,0x6d,0x3b,0x5e,0x89,0x4a,0xde,0x87,0x9b,0x63,0xfa,0xea,0x68,0xd4,0x80,0xad,0x2e,0x33,0x2c,0xcb,0x21,0x48,0xf,0x82,0x67,0x98,0xae,0xc8,0x4d,0x90,0x82,0xb9,0x28,0xd4,0x55,0xea,0x30,0x41,0x11,0x42,0x49,0x36,0xf5,0x55,0xb2,0x92,0x48,0x47,0xec,0xc7,0x25,0xa,0x93,0xba,0xf4,0x3c,0xe1,0x56,0x9b,0x7f,0x8a,0x27,0xdb,0x45,0x4c,0x9e,0xfc,0xbd,0x49,0x63,0x97,0xaf,0xe,0x58,0x9f,0xc2,0x7d,0x26,0xaa,0x80,0xcd,0x80,0xc0,0x8b,0x8c,0x9d,0xeb,0x2e,0xda,0x8a,0x79,0x81,0xe8,0xf8,0xd5,0x37,0x3a,0xf4,0x39,0x67,0xad,0xdd,0xd1,0x7a,0x71,0xa9,0xb4,0xd3,0xbd,0xa4,0x75,0xd3,0x94,0x97,0x6c,0x3f,0xba,0x98,0x42,0x73,0x7f}; -const unsigned char JH512_H0[128]={0x6f,0xd1,0x4b,0x96,0x3e,0x0,0xaa,0x17,0x63,0x6a,0x2e,0x5,0x7a,0x15,0xd5,0x43,0x8a,0x22,0x5e,0x8d,0xc,0x97,0xef,0xb,0xe9,0x34,0x12,0x59,0xf2,0xb3,0xc3,0x61,0x89,0x1d,0xa0,0xc1,0x53,0x6f,0x80,0x1e,0x2a,0xa9,0x5,0x6b,0xea,0x2b,0x6d,0x80,0x58,0x8e,0xcc,0xdb,0x20,0x75,0xba,0xa6,0xa9,0xf,0x3a,0x76,0xba,0xf8,0x3b,0xf7,0x1,0x69,0xe6,0x5,0x41,0xe3,0x4a,0x69,0x46,0xb5,0x8a,0x8e,0x2e,0x6f,0xe6,0x5a,0x10,0x47,0xa7,0xd0,0xc1,0x84,0x3c,0x24,0x3b,0x6e,0x71,0xb1,0x2d,0x5a,0xc1,0x99,0xcf,0x57,0xf6,0xec,0x9d,0xb1,0xf8,0x56,0xa7,0x6,0x88,0x7c,0x57,0x16,0xb1,0x56,0xe3,0xc2,0xfc,0xdf,0xe6,0x85,0x17,0xfb,0x54,0x5a,0x46,0x78,0xcc,0x8c,0xdd,0x4b}; +const unsigned char JH224_H0[128] = {0x2d, 0xfe, 0xdd, 0x62, 0xf9, 0x9a, 0x98, 0xac, 0xae, 0x7c, 0xac, 0xd6, 0x19, 0xd6, 0x34, 0xe7, 0xa4, 0x83, 0x10, 0x5, 0xbc, 0x30, 0x12, 0x16, 0xb8, 0x60, 0x38, 0xc6, 0xc9, 0x66, 0x14, 0x94, 0x66, 0xd9, 0x89, 0x9f, 0x25, 0x80, 0x70, 0x6f, 0xce, 0x9e, 0xa3, 0x1b, 0x1d, 0x9b, 0x1a, 0xdc, 0x11, 0xe8, 0x32, 0x5f, 0x7b, 0x36, 0x6e, 0x10, 0xf9, 0x94, 0x85, 0x7f, 0x2, 0xfa, 0x6, 0xc1, 0x1b, 0x4f, 0x1b, 0x5c, 0xd8, 0xc8, 0x40, 0xb3, 0x97, 0xf6, 0xa1, 0x7f, 0x6e, 0x73, 0x80, 0x99, 0xdc, 0xdf, 0x93, 0xa5, 0xad, 0xea, 0xa3, 0xd3, 0xa4, 0x31, 0xe8, 0xde, 0xc9, 0x53, 0x9a, 0x68, 0x22, 0xb4, 0xa9, 0x8a, 0xec, 0x86, 0xa1, 0xe4, 0xd5, 0x74, 0xac, 0x95, 0x9c, 0xe5, 0x6c, 0xf0, 0x15, 0x96, 0xd, 0xea, 0xb5, 0xab, 0x2b, 0xbf, 0x96, 0x11, 0xdc, 0xf0, 0xdd, 0x64, 0xea, 0x6e}; +const unsigned char JH256_H0[128] = {0xeb, 0x98, 0xa3, 0x41, 0x2c, 0x20, 0xd3, 0xeb, 0x92, 0xcd, 0xbe, 0x7b, 0x9c, 0xb2, 0x45, 0xc1, 0x1c, 0x93, 0x51, 0x91, 0x60, 0xd4, 0xc7, 0xfa, 0x26, 0x0, 0x82, 0xd6, 0x7e, 0x50, 0x8a, 0x3, 0xa4, 0x23, 0x9e, 0x26, 0x77, 0x26, 0xb9, 0x45, 0xe0, 0xfb, 0x1a, 0x48, 0xd4, 0x1a, 0x94, 0x77, 0xcd, 0xb5, 0xab, 0x26, 0x2, 0x6b, 0x17, 0x7a, 0x56, 0xf0, 0x24, 0x42, 0xf, 0xff, 0x2f, 0xa8, 0x71, 0xa3, 0x96, 0x89, 0x7f, 0x2e, 0x4d, 0x75, 0x1d, 0x14, 0x49, 0x8, 0xf7, 0x7d, 0xe2, 0x62, 0x27, 0x76, 0x95, 0xf7, 0x76, 0x24, 0x8f, 0x94, 0x87, 0xd5, 0xb6, 0x57, 0x47, 0x80, 0x29, 0x6c, 0x5c, 0x5e, 0x27, 0x2d, 0xac, 0x8e, 0xd, 0x6c, 0x51, 0x84, 0x50, 0xc6, 0x57, 0x5, 0x7a, 0xf, 0x7b, 0xe4, 0xd3, 0x67, 0x70, 0x24, 0x12, 0xea, 0x89, 0xe3, 0xab, 0x13, 0xd3, 0x1c, 0xd7, 0x69}; +const unsigned char JH384_H0[128] = {0x48, 0x1e, 0x3b, 0xc6, 0xd8, 0x13, 0x39, 0x8a, 0x6d, 0x3b, 0x5e, 0x89, 0x4a, 0xde, 0x87, 0x9b, 0x63, 0xfa, 0xea, 0x68, 0xd4, 0x80, 0xad, 0x2e, 0x33, 0x2c, 0xcb, 0x21, 0x48, 0xf, 0x82, 0x67, 0x98, 0xae, 0xc8, 0x4d, 0x90, 0x82, 0xb9, 0x28, 0xd4, 0x55, 0xea, 0x30, 0x41, 0x11, 0x42, 0x49, 0x36, 0xf5, 0x55, 0xb2, 0x92, 0x48, 0x47, 0xec, 0xc7, 0x25, 0xa, 0x93, 0xba, 0xf4, 0x3c, 0xe1, 0x56, 0x9b, 0x7f, 0x8a, 0x27, 0xdb, 0x45, 0x4c, 0x9e, 0xfc, 0xbd, 0x49, 0x63, 0x97, 0xaf, 0xe, 0x58, 0x9f, 0xc2, 0x7d, 0x26, 0xaa, 0x80, 0xcd, 0x80, 0xc0, 0x8b, 0x8c, 0x9d, 0xeb, 0x2e, 0xda, 0x8a, 0x79, 0x81, 0xe8, 0xf8, 0xd5, 0x37, 0x3a, 0xf4, 0x39, 0x67, 0xad, 0xdd, 0xd1, 0x7a, 0x71, 0xa9, 0xb4, 0xd3, 0xbd, 0xa4, 0x75, 0xd3, 0x94, 0x97, 0x6c, 0x3f, 0xba, 0x98, 0x42, 0x73, 0x7f}; +const unsigned char JH512_H0[128] = {0x6f, 0xd1, 0x4b, 0x96, 0x3e, 0x0, 0xaa, 0x17, 0x63, 0x6a, 0x2e, 0x5, 0x7a, 0x15, 0xd5, 0x43, 0x8a, 0x22, 0x5e, 0x8d, 0xc, 0x97, 0xef, 0xb, 0xe9, 0x34, 0x12, 0x59, 0xf2, 0xb3, 0xc3, 0x61, 0x89, 0x1d, 0xa0, 0xc1, 0x53, 0x6f, 0x80, 0x1e, 0x2a, 0xa9, 0x5, 0x6b, 0xea, 0x2b, 0x6d, 0x80, 0x58, 0x8e, 0xcc, 0xdb, 0x20, 0x75, 0xba, 0xa6, 0xa9, 0xf, 0x3a, 0x76, 0xba, 0xf8, 0x3b, 0xf7, 0x1, 0x69, 0xe6, 0x5, 0x41, 0xe3, 0x4a, 0x69, 0x46, 0xb5, 0x8a, 0x8e, 0x2e, 0x6f, 0xe6, 0x5a, 0x10, 0x47, 0xa7, 0xd0, 0xc1, 0x84, 0x3c, 0x24, 0x3b, 0x6e, 0x71, 0xb1, 0x2d, 0x5a, 0xc1, 0x99, 0xcf, 0x57, 0xf6, 0xec, 0x9d, 0xb1, 0xf8, 0x56, 0xa7, 0x6, 0x88, 0x7c, 0x57, 0x16, 0xb1, 0x56, 0xe3, 0xc2, 0xfc, 0xdf, 0xe6, 0x85, 0x17, 0xfb, 0x54, 0x5a, 0x46, 0x78, 0xcc, 0x8c, 0xdd, 0x4b}; /*42 round constants, each round constant is 32-byte (256-bit)*/ -const unsigned char E8_bitslice_roundconstant[42][32]={ -{0x72,0xd5,0xde,0xa2,0xdf,0x15,0xf8,0x67,0x7b,0x84,0x15,0xa,0xb7,0x23,0x15,0x57,0x81,0xab,0xd6,0x90,0x4d,0x5a,0x87,0xf6,0x4e,0x9f,0x4f,0xc5,0xc3,0xd1,0x2b,0x40}, -{0xea,0x98,0x3a,0xe0,0x5c,0x45,0xfa,0x9c,0x3,0xc5,0xd2,0x99,0x66,0xb2,0x99,0x9a,0x66,0x2,0x96,0xb4,0xf2,0xbb,0x53,0x8a,0xb5,0x56,0x14,0x1a,0x88,0xdb,0xa2,0x31}, -{0x3,0xa3,0x5a,0x5c,0x9a,0x19,0xe,0xdb,0x40,0x3f,0xb2,0xa,0x87,0xc1,0x44,0x10,0x1c,0x5,0x19,0x80,0x84,0x9e,0x95,0x1d,0x6f,0x33,0xeb,0xad,0x5e,0xe7,0xcd,0xdc}, -{0x10,0xba,0x13,0x92,0x2,0xbf,0x6b,0x41,0xdc,0x78,0x65,0x15,0xf7,0xbb,0x27,0xd0,0xa,0x2c,0x81,0x39,0x37,0xaa,0x78,0x50,0x3f,0x1a,0xbf,0xd2,0x41,0x0,0x91,0xd3}, -{0x42,0x2d,0x5a,0xd,0xf6,0xcc,0x7e,0x90,0xdd,0x62,0x9f,0x9c,0x92,0xc0,0x97,0xce,0x18,0x5c,0xa7,0xb,0xc7,0x2b,0x44,0xac,0xd1,0xdf,0x65,0xd6,0x63,0xc6,0xfc,0x23}, -{0x97,0x6e,0x6c,0x3,0x9e,0xe0,0xb8,0x1a,0x21,0x5,0x45,0x7e,0x44,0x6c,0xec,0xa8,0xee,0xf1,0x3,0xbb,0x5d,0x8e,0x61,0xfa,0xfd,0x96,0x97,0xb2,0x94,0x83,0x81,0x97}, -{0x4a,0x8e,0x85,0x37,0xdb,0x3,0x30,0x2f,0x2a,0x67,0x8d,0x2d,0xfb,0x9f,0x6a,0x95,0x8a,0xfe,0x73,0x81,0xf8,0xb8,0x69,0x6c,0x8a,0xc7,0x72,0x46,0xc0,0x7f,0x42,0x14}, -{0xc5,0xf4,0x15,0x8f,0xbd,0xc7,0x5e,0xc4,0x75,0x44,0x6f,0xa7,0x8f,0x11,0xbb,0x80,0x52,0xde,0x75,0xb7,0xae,0xe4,0x88,0xbc,0x82,0xb8,0x0,0x1e,0x98,0xa6,0xa3,0xf4}, -{0x8e,0xf4,0x8f,0x33,0xa9,0xa3,0x63,0x15,0xaa,0x5f,0x56,0x24,0xd5,0xb7,0xf9,0x89,0xb6,0xf1,0xed,0x20,0x7c,0x5a,0xe0,0xfd,0x36,0xca,0xe9,0x5a,0x6,0x42,0x2c,0x36}, -{0xce,0x29,0x35,0x43,0x4e,0xfe,0x98,0x3d,0x53,0x3a,0xf9,0x74,0x73,0x9a,0x4b,0xa7,0xd0,0xf5,0x1f,0x59,0x6f,0x4e,0x81,0x86,0xe,0x9d,0xad,0x81,0xaf,0xd8,0x5a,0x9f}, -{0xa7,0x5,0x6,0x67,0xee,0x34,0x62,0x6a,0x8b,0xb,0x28,0xbe,0x6e,0xb9,0x17,0x27,0x47,0x74,0x7,0x26,0xc6,0x80,0x10,0x3f,0xe0,0xa0,0x7e,0x6f,0xc6,0x7e,0x48,0x7b}, -{0xd,0x55,0xa,0xa5,0x4a,0xf8,0xa4,0xc0,0x91,0xe3,0xe7,0x9f,0x97,0x8e,0xf1,0x9e,0x86,0x76,0x72,0x81,0x50,0x60,0x8d,0xd4,0x7e,0x9e,0x5a,0x41,0xf3,0xe5,0xb0,0x62}, -{0xfc,0x9f,0x1f,0xec,0x40,0x54,0x20,0x7a,0xe3,0xe4,0x1a,0x0,0xce,0xf4,0xc9,0x84,0x4f,0xd7,0x94,0xf5,0x9d,0xfa,0x95,0xd8,0x55,0x2e,0x7e,0x11,0x24,0xc3,0x54,0xa5}, -{0x5b,0xdf,0x72,0x28,0xbd,0xfe,0x6e,0x28,0x78,0xf5,0x7f,0xe2,0xf,0xa5,0xc4,0xb2,0x5,0x89,0x7c,0xef,0xee,0x49,0xd3,0x2e,0x44,0x7e,0x93,0x85,0xeb,0x28,0x59,0x7f}, -{0x70,0x5f,0x69,0x37,0xb3,0x24,0x31,0x4a,0x5e,0x86,0x28,0xf1,0x1d,0xd6,0xe4,0x65,0xc7,0x1b,0x77,0x4,0x51,0xb9,0x20,0xe7,0x74,0xfe,0x43,0xe8,0x23,0xd4,0x87,0x8a}, -{0x7d,0x29,0xe8,0xa3,0x92,0x76,0x94,0xf2,0xdd,0xcb,0x7a,0x9,0x9b,0x30,0xd9,0xc1,0x1d,0x1b,0x30,0xfb,0x5b,0xdc,0x1b,0xe0,0xda,0x24,0x49,0x4f,0xf2,0x9c,0x82,0xbf}, -{0xa4,0xe7,0xba,0x31,0xb4,0x70,0xbf,0xff,0xd,0x32,0x44,0x5,0xde,0xf8,0xbc,0x48,0x3b,0xae,0xfc,0x32,0x53,0xbb,0xd3,0x39,0x45,0x9f,0xc3,0xc1,0xe0,0x29,0x8b,0xa0}, -{0xe5,0xc9,0x5,0xfd,0xf7,0xae,0x9,0xf,0x94,0x70,0x34,0x12,0x42,0x90,0xf1,0x34,0xa2,0x71,0xb7,0x1,0xe3,0x44,0xed,0x95,0xe9,0x3b,0x8e,0x36,0x4f,0x2f,0x98,0x4a}, -{0x88,0x40,0x1d,0x63,0xa0,0x6c,0xf6,0x15,0x47,0xc1,0x44,0x4b,0x87,0x52,0xaf,0xff,0x7e,0xbb,0x4a,0xf1,0xe2,0xa,0xc6,0x30,0x46,0x70,0xb6,0xc5,0xcc,0x6e,0x8c,0xe6}, -{0xa4,0xd5,0xa4,0x56,0xbd,0x4f,0xca,0x0,0xda,0x9d,0x84,0x4b,0xc8,0x3e,0x18,0xae,0x73,0x57,0xce,0x45,0x30,0x64,0xd1,0xad,0xe8,0xa6,0xce,0x68,0x14,0x5c,0x25,0x67}, -{0xa3,0xda,0x8c,0xf2,0xcb,0xe,0xe1,0x16,0x33,0xe9,0x6,0x58,0x9a,0x94,0x99,0x9a,0x1f,0x60,0xb2,0x20,0xc2,0x6f,0x84,0x7b,0xd1,0xce,0xac,0x7f,0xa0,0xd1,0x85,0x18}, -{0x32,0x59,0x5b,0xa1,0x8d,0xdd,0x19,0xd3,0x50,0x9a,0x1c,0xc0,0xaa,0xa5,0xb4,0x46,0x9f,0x3d,0x63,0x67,0xe4,0x4,0x6b,0xba,0xf6,0xca,0x19,0xab,0xb,0x56,0xee,0x7e}, -{0x1f,0xb1,0x79,0xea,0xa9,0x28,0x21,0x74,0xe9,0xbd,0xf7,0x35,0x3b,0x36,0x51,0xee,0x1d,0x57,0xac,0x5a,0x75,0x50,0xd3,0x76,0x3a,0x46,0xc2,0xfe,0xa3,0x7d,0x70,0x1}, -{0xf7,0x35,0xc1,0xaf,0x98,0xa4,0xd8,0x42,0x78,0xed,0xec,0x20,0x9e,0x6b,0x67,0x79,0x41,0x83,0x63,0x15,0xea,0x3a,0xdb,0xa8,0xfa,0xc3,0x3b,0x4d,0x32,0x83,0x2c,0x83}, -{0xa7,0x40,0x3b,0x1f,0x1c,0x27,0x47,0xf3,0x59,0x40,0xf0,0x34,0xb7,0x2d,0x76,0x9a,0xe7,0x3e,0x4e,0x6c,0xd2,0x21,0x4f,0xfd,0xb8,0xfd,0x8d,0x39,0xdc,0x57,0x59,0xef}, -{0x8d,0x9b,0xc,0x49,0x2b,0x49,0xeb,0xda,0x5b,0xa2,0xd7,0x49,0x68,0xf3,0x70,0xd,0x7d,0x3b,0xae,0xd0,0x7a,0x8d,0x55,0x84,0xf5,0xa5,0xe9,0xf0,0xe4,0xf8,0x8e,0x65}, -{0xa0,0xb8,0xa2,0xf4,0x36,0x10,0x3b,0x53,0xc,0xa8,0x7,0x9e,0x75,0x3e,0xec,0x5a,0x91,0x68,0x94,0x92,0x56,0xe8,0x88,0x4f,0x5b,0xb0,0x5c,0x55,0xf8,0xba,0xbc,0x4c}, -{0xe3,0xbb,0x3b,0x99,0xf3,0x87,0x94,0x7b,0x75,0xda,0xf4,0xd6,0x72,0x6b,0x1c,0x5d,0x64,0xae,0xac,0x28,0xdc,0x34,0xb3,0x6d,0x6c,0x34,0xa5,0x50,0xb8,0x28,0xdb,0x71}, -{0xf8,0x61,0xe2,0xf2,0x10,0x8d,0x51,0x2a,0xe3,0xdb,0x64,0x33,0x59,0xdd,0x75,0xfc,0x1c,0xac,0xbc,0xf1,0x43,0xce,0x3f,0xa2,0x67,0xbb,0xd1,0x3c,0x2,0xe8,0x43,0xb0}, -{0x33,0xa,0x5b,0xca,0x88,0x29,0xa1,0x75,0x7f,0x34,0x19,0x4d,0xb4,0x16,0x53,0x5c,0x92,0x3b,0x94,0xc3,0xe,0x79,0x4d,0x1e,0x79,0x74,0x75,0xd7,0xb6,0xee,0xaf,0x3f}, -{0xea,0xa8,0xd4,0xf7,0xbe,0x1a,0x39,0x21,0x5c,0xf4,0x7e,0x9,0x4c,0x23,0x27,0x51,0x26,0xa3,0x24,0x53,0xba,0x32,0x3c,0xd2,0x44,0xa3,0x17,0x4a,0x6d,0xa6,0xd5,0xad}, -{0xb5,0x1d,0x3e,0xa6,0xaf,0xf2,0xc9,0x8,0x83,0x59,0x3d,0x98,0x91,0x6b,0x3c,0x56,0x4c,0xf8,0x7c,0xa1,0x72,0x86,0x60,0x4d,0x46,0xe2,0x3e,0xcc,0x8,0x6e,0xc7,0xf6}, -{0x2f,0x98,0x33,0xb3,0xb1,0xbc,0x76,0x5e,0x2b,0xd6,0x66,0xa5,0xef,0xc4,0xe6,0x2a,0x6,0xf4,0xb6,0xe8,0xbe,0xc1,0xd4,0x36,0x74,0xee,0x82,0x15,0xbc,0xef,0x21,0x63}, -{0xfd,0xc1,0x4e,0xd,0xf4,0x53,0xc9,0x69,0xa7,0x7d,0x5a,0xc4,0x6,0x58,0x58,0x26,0x7e,0xc1,0x14,0x16,0x6,0xe0,0xfa,0x16,0x7e,0x90,0xaf,0x3d,0x28,0x63,0x9d,0x3f}, -{0xd2,0xc9,0xf2,0xe3,0x0,0x9b,0xd2,0xc,0x5f,0xaa,0xce,0x30,0xb7,0xd4,0xc,0x30,0x74,0x2a,0x51,0x16,0xf2,0xe0,0x32,0x98,0xd,0xeb,0x30,0xd8,0xe3,0xce,0xf8,0x9a}, -{0x4b,0xc5,0x9e,0x7b,0xb5,0xf1,0x79,0x92,0xff,0x51,0xe6,0x6e,0x4,0x86,0x68,0xd3,0x9b,0x23,0x4d,0x57,0xe6,0x96,0x67,0x31,0xcc,0xe6,0xa6,0xf3,0x17,0xa,0x75,0x5}, -{0xb1,0x76,0x81,0xd9,0x13,0x32,0x6c,0xce,0x3c,0x17,0x52,0x84,0xf8,0x5,0xa2,0x62,0xf4,0x2b,0xcb,0xb3,0x78,0x47,0x15,0x47,0xff,0x46,0x54,0x82,0x23,0x93,0x6a,0x48}, -{0x38,0xdf,0x58,0x7,0x4e,0x5e,0x65,0x65,0xf2,0xfc,0x7c,0x89,0xfc,0x86,0x50,0x8e,0x31,0x70,0x2e,0x44,0xd0,0xb,0xca,0x86,0xf0,0x40,0x9,0xa2,0x30,0x78,0x47,0x4e}, -{0x65,0xa0,0xee,0x39,0xd1,0xf7,0x38,0x83,0xf7,0x5e,0xe9,0x37,0xe4,0x2c,0x3a,0xbd,0x21,0x97,0xb2,0x26,0x1,0x13,0xf8,0x6f,0xa3,0x44,0xed,0xd1,0xef,0x9f,0xde,0xe7}, -{0x8b,0xa0,0xdf,0x15,0x76,0x25,0x92,0xd9,0x3c,0x85,0xf7,0xf6,0x12,0xdc,0x42,0xbe,0xd8,0xa7,0xec,0x7c,0xab,0x27,0xb0,0x7e,0x53,0x8d,0x7d,0xda,0xaa,0x3e,0xa8,0xde}, -{0xaa,0x25,0xce,0x93,0xbd,0x2,0x69,0xd8,0x5a,0xf6,0x43,0xfd,0x1a,0x73,0x8,0xf9,0xc0,0x5f,0xef,0xda,0x17,0x4a,0x19,0xa5,0x97,0x4d,0x66,0x33,0x4c,0xfd,0x21,0x6a}, -{0x35,0xb4,0x98,0x31,0xdb,0x41,0x15,0x70,0xea,0x1e,0xf,0xbb,0xed,0xcd,0x54,0x9b,0x9a,0xd0,0x63,0xa1,0x51,0x97,0x40,0x72,0xf6,0x75,0x9d,0xbf,0x91,0x47,0x6f,0xe2}}; - - -static void E8(hashState *state); /*The bijective function E8, in bitslice form*/ -static void F8(hashState *state); /*The compression function F8 */ +const unsigned char E8_bitslice_roundconstant[42][32] = { + {0x72, 0xd5, 0xde, 0xa2, 0xdf, 0x15, 0xf8, 0x67, 0x7b, 0x84, 0x15, 0xa, 0xb7, 0x23, 0x15, 0x57, 0x81, 0xab, 0xd6, 0x90, 0x4d, 0x5a, 0x87, 0xf6, 0x4e, 0x9f, 0x4f, 0xc5, 0xc3, 0xd1, 0x2b, 0x40}, + {0xea, 0x98, 0x3a, 0xe0, 0x5c, 0x45, 0xfa, 0x9c, 0x3, 0xc5, 0xd2, 0x99, 0x66, 0xb2, 0x99, 0x9a, 0x66, 0x2, 0x96, 0xb4, 0xf2, 0xbb, 0x53, 0x8a, 0xb5, 0x56, 0x14, 0x1a, 0x88, 0xdb, 0xa2, 0x31}, + {0x3, 0xa3, 0x5a, 0x5c, 0x9a, 0x19, 0xe, 0xdb, 0x40, 0x3f, 0xb2, 0xa, 0x87, 0xc1, 0x44, 0x10, 0x1c, 0x5, 0x19, 0x80, 0x84, 0x9e, 0x95, 0x1d, 0x6f, 0x33, 0xeb, 0xad, 0x5e, 0xe7, 0xcd, 0xdc}, + {0x10, 0xba, 0x13, 0x92, 0x2, 0xbf, 0x6b, 0x41, 0xdc, 0x78, 0x65, 0x15, 0xf7, 0xbb, 0x27, 0xd0, 0xa, 0x2c, 0x81, 0x39, 0x37, 0xaa, 0x78, 0x50, 0x3f, 0x1a, 0xbf, 0xd2, 0x41, 0x0, 0x91, 0xd3}, + {0x42, 0x2d, 0x5a, 0xd, 0xf6, 0xcc, 0x7e, 0x90, 0xdd, 0x62, 0x9f, 0x9c, 0x92, 0xc0, 0x97, 0xce, 0x18, 0x5c, 0xa7, 0xb, 0xc7, 0x2b, 0x44, 0xac, 0xd1, 0xdf, 0x65, 0xd6, 0x63, 0xc6, 0xfc, 0x23}, + {0x97, 0x6e, 0x6c, 0x3, 0x9e, 0xe0, 0xb8, 0x1a, 0x21, 0x5, 0x45, 0x7e, 0x44, 0x6c, 0xec, 0xa8, 0xee, 0xf1, 0x3, 0xbb, 0x5d, 0x8e, 0x61, 0xfa, 0xfd, 0x96, 0x97, 0xb2, 0x94, 0x83, 0x81, 0x97}, + {0x4a, 0x8e, 0x85, 0x37, 0xdb, 0x3, 0x30, 0x2f, 0x2a, 0x67, 0x8d, 0x2d, 0xfb, 0x9f, 0x6a, 0x95, 0x8a, 0xfe, 0x73, 0x81, 0xf8, 0xb8, 0x69, 0x6c, 0x8a, 0xc7, 0x72, 0x46, 0xc0, 0x7f, 0x42, 0x14}, + {0xc5, 0xf4, 0x15, 0x8f, 0xbd, 0xc7, 0x5e, 0xc4, 0x75, 0x44, 0x6f, 0xa7, 0x8f, 0x11, 0xbb, 0x80, 0x52, 0xde, 0x75, 0xb7, 0xae, 0xe4, 0x88, 0xbc, 0x82, 0xb8, 0x0, 0x1e, 0x98, 0xa6, 0xa3, 0xf4}, + {0x8e, 0xf4, 0x8f, 0x33, 0xa9, 0xa3, 0x63, 0x15, 0xaa, 0x5f, 0x56, 0x24, 0xd5, 0xb7, 0xf9, 0x89, 0xb6, 0xf1, 0xed, 0x20, 0x7c, 0x5a, 0xe0, 0xfd, 0x36, 0xca, 0xe9, 0x5a, 0x6, 0x42, 0x2c, 0x36}, + {0xce, 0x29, 0x35, 0x43, 0x4e, 0xfe, 0x98, 0x3d, 0x53, 0x3a, 0xf9, 0x74, 0x73, 0x9a, 0x4b, 0xa7, 0xd0, 0xf5, 0x1f, 0x59, 0x6f, 0x4e, 0x81, 0x86, 0xe, 0x9d, 0xad, 0x81, 0xaf, 0xd8, 0x5a, 0x9f}, + {0xa7, 0x5, 0x6, 0x67, 0xee, 0x34, 0x62, 0x6a, 0x8b, 0xb, 0x28, 0xbe, 0x6e, 0xb9, 0x17, 0x27, 0x47, 0x74, 0x7, 0x26, 0xc6, 0x80, 0x10, 0x3f, 0xe0, 0xa0, 0x7e, 0x6f, 0xc6, 0x7e, 0x48, 0x7b}, + {0xd, 0x55, 0xa, 0xa5, 0x4a, 0xf8, 0xa4, 0xc0, 0x91, 0xe3, 0xe7, 0x9f, 0x97, 0x8e, 0xf1, 0x9e, 0x86, 0x76, 0x72, 0x81, 0x50, 0x60, 0x8d, 0xd4, 0x7e, 0x9e, 0x5a, 0x41, 0xf3, 0xe5, 0xb0, 0x62}, + {0xfc, 0x9f, 0x1f, 0xec, 0x40, 0x54, 0x20, 0x7a, 0xe3, 0xe4, 0x1a, 0x0, 0xce, 0xf4, 0xc9, 0x84, 0x4f, 0xd7, 0x94, 0xf5, 0x9d, 0xfa, 0x95, 0xd8, 0x55, 0x2e, 0x7e, 0x11, 0x24, 0xc3, 0x54, 0xa5}, + {0x5b, 0xdf, 0x72, 0x28, 0xbd, 0xfe, 0x6e, 0x28, 0x78, 0xf5, 0x7f, 0xe2, 0xf, 0xa5, 0xc4, 0xb2, 0x5, 0x89, 0x7c, 0xef, 0xee, 0x49, 0xd3, 0x2e, 0x44, 0x7e, 0x93, 0x85, 0xeb, 0x28, 0x59, 0x7f}, + {0x70, 0x5f, 0x69, 0x37, 0xb3, 0x24, 0x31, 0x4a, 0x5e, 0x86, 0x28, 0xf1, 0x1d, 0xd6, 0xe4, 0x65, 0xc7, 0x1b, 0x77, 0x4, 0x51, 0xb9, 0x20, 0xe7, 0x74, 0xfe, 0x43, 0xe8, 0x23, 0xd4, 0x87, 0x8a}, + {0x7d, 0x29, 0xe8, 0xa3, 0x92, 0x76, 0x94, 0xf2, 0xdd, 0xcb, 0x7a, 0x9, 0x9b, 0x30, 0xd9, 0xc1, 0x1d, 0x1b, 0x30, 0xfb, 0x5b, 0xdc, 0x1b, 0xe0, 0xda, 0x24, 0x49, 0x4f, 0xf2, 0x9c, 0x82, 0xbf}, + {0xa4, 0xe7, 0xba, 0x31, 0xb4, 0x70, 0xbf, 0xff, 0xd, 0x32, 0x44, 0x5, 0xde, 0xf8, 0xbc, 0x48, 0x3b, 0xae, 0xfc, 0x32, 0x53, 0xbb, 0xd3, 0x39, 0x45, 0x9f, 0xc3, 0xc1, 0xe0, 0x29, 0x8b, 0xa0}, + {0xe5, 0xc9, 0x5, 0xfd, 0xf7, 0xae, 0x9, 0xf, 0x94, 0x70, 0x34, 0x12, 0x42, 0x90, 0xf1, 0x34, 0xa2, 0x71, 0xb7, 0x1, 0xe3, 0x44, 0xed, 0x95, 0xe9, 0x3b, 0x8e, 0x36, 0x4f, 0x2f, 0x98, 0x4a}, + {0x88, 0x40, 0x1d, 0x63, 0xa0, 0x6c, 0xf6, 0x15, 0x47, 0xc1, 0x44, 0x4b, 0x87, 0x52, 0xaf, 0xff, 0x7e, 0xbb, 0x4a, 0xf1, 0xe2, 0xa, 0xc6, 0x30, 0x46, 0x70, 0xb6, 0xc5, 0xcc, 0x6e, 0x8c, 0xe6}, + {0xa4, 0xd5, 0xa4, 0x56, 0xbd, 0x4f, 0xca, 0x0, 0xda, 0x9d, 0x84, 0x4b, 0xc8, 0x3e, 0x18, 0xae, 0x73, 0x57, 0xce, 0x45, 0x30, 0x64, 0xd1, 0xad, 0xe8, 0xa6, 0xce, 0x68, 0x14, 0x5c, 0x25, 0x67}, + {0xa3, 0xda, 0x8c, 0xf2, 0xcb, 0xe, 0xe1, 0x16, 0x33, 0xe9, 0x6, 0x58, 0x9a, 0x94, 0x99, 0x9a, 0x1f, 0x60, 0xb2, 0x20, 0xc2, 0x6f, 0x84, 0x7b, 0xd1, 0xce, 0xac, 0x7f, 0xa0, 0xd1, 0x85, 0x18}, + {0x32, 0x59, 0x5b, 0xa1, 0x8d, 0xdd, 0x19, 0xd3, 0x50, 0x9a, 0x1c, 0xc0, 0xaa, 0xa5, 0xb4, 0x46, 0x9f, 0x3d, 0x63, 0x67, 0xe4, 0x4, 0x6b, 0xba, 0xf6, 0xca, 0x19, 0xab, 0xb, 0x56, 0xee, 0x7e}, + {0x1f, 0xb1, 0x79, 0xea, 0xa9, 0x28, 0x21, 0x74, 0xe9, 0xbd, 0xf7, 0x35, 0x3b, 0x36, 0x51, 0xee, 0x1d, 0x57, 0xac, 0x5a, 0x75, 0x50, 0xd3, 0x76, 0x3a, 0x46, 0xc2, 0xfe, 0xa3, 0x7d, 0x70, 0x1}, + {0xf7, 0x35, 0xc1, 0xaf, 0x98, 0xa4, 0xd8, 0x42, 0x78, 0xed, 0xec, 0x20, 0x9e, 0x6b, 0x67, 0x79, 0x41, 0x83, 0x63, 0x15, 0xea, 0x3a, 0xdb, 0xa8, 0xfa, 0xc3, 0x3b, 0x4d, 0x32, 0x83, 0x2c, 0x83}, + {0xa7, 0x40, 0x3b, 0x1f, 0x1c, 0x27, 0x47, 0xf3, 0x59, 0x40, 0xf0, 0x34, 0xb7, 0x2d, 0x76, 0x9a, 0xe7, 0x3e, 0x4e, 0x6c, 0xd2, 0x21, 0x4f, 0xfd, 0xb8, 0xfd, 0x8d, 0x39, 0xdc, 0x57, 0x59, 0xef}, + {0x8d, 0x9b, 0xc, 0x49, 0x2b, 0x49, 0xeb, 0xda, 0x5b, 0xa2, 0xd7, 0x49, 0x68, 0xf3, 0x70, 0xd, 0x7d, 0x3b, 0xae, 0xd0, 0x7a, 0x8d, 0x55, 0x84, 0xf5, 0xa5, 0xe9, 0xf0, 0xe4, 0xf8, 0x8e, 0x65}, + {0xa0, 0xb8, 0xa2, 0xf4, 0x36, 0x10, 0x3b, 0x53, 0xc, 0xa8, 0x7, 0x9e, 0x75, 0x3e, 0xec, 0x5a, 0x91, 0x68, 0x94, 0x92, 0x56, 0xe8, 0x88, 0x4f, 0x5b, 0xb0, 0x5c, 0x55, 0xf8, 0xba, 0xbc, 0x4c}, + {0xe3, 0xbb, 0x3b, 0x99, 0xf3, 0x87, 0x94, 0x7b, 0x75, 0xda, 0xf4, 0xd6, 0x72, 0x6b, 0x1c, 0x5d, 0x64, 0xae, 0xac, 0x28, 0xdc, 0x34, 0xb3, 0x6d, 0x6c, 0x34, 0xa5, 0x50, 0xb8, 0x28, 0xdb, 0x71}, + {0xf8, 0x61, 0xe2, 0xf2, 0x10, 0x8d, 0x51, 0x2a, 0xe3, 0xdb, 0x64, 0x33, 0x59, 0xdd, 0x75, 0xfc, 0x1c, 0xac, 0xbc, 0xf1, 0x43, 0xce, 0x3f, 0xa2, 0x67, 0xbb, 0xd1, 0x3c, 0x2, 0xe8, 0x43, 0xb0}, + {0x33, 0xa, 0x5b, 0xca, 0x88, 0x29, 0xa1, 0x75, 0x7f, 0x34, 0x19, 0x4d, 0xb4, 0x16, 0x53, 0x5c, 0x92, 0x3b, 0x94, 0xc3, 0xe, 0x79, 0x4d, 0x1e, 0x79, 0x74, 0x75, 0xd7, 0xb6, 0xee, 0xaf, 0x3f}, + {0xea, 0xa8, 0xd4, 0xf7, 0xbe, 0x1a, 0x39, 0x21, 0x5c, 0xf4, 0x7e, 0x9, 0x4c, 0x23, 0x27, 0x51, 0x26, 0xa3, 0x24, 0x53, 0xba, 0x32, 0x3c, 0xd2, 0x44, 0xa3, 0x17, 0x4a, 0x6d, 0xa6, 0xd5, 0xad}, + {0xb5, 0x1d, 0x3e, 0xa6, 0xaf, 0xf2, 0xc9, 0x8, 0x83, 0x59, 0x3d, 0x98, 0x91, 0x6b, 0x3c, 0x56, 0x4c, 0xf8, 0x7c, 0xa1, 0x72, 0x86, 0x60, 0x4d, 0x46, 0xe2, 0x3e, 0xcc, 0x8, 0x6e, 0xc7, 0xf6}, + {0x2f, 0x98, 0x33, 0xb3, 0xb1, 0xbc, 0x76, 0x5e, 0x2b, 0xd6, 0x66, 0xa5, 0xef, 0xc4, 0xe6, 0x2a, 0x6, 0xf4, 0xb6, 0xe8, 0xbe, 0xc1, 0xd4, 0x36, 0x74, 0xee, 0x82, 0x15, 0xbc, 0xef, 0x21, 0x63}, + {0xfd, 0xc1, 0x4e, 0xd, 0xf4, 0x53, 0xc9, 0x69, 0xa7, 0x7d, 0x5a, 0xc4, 0x6, 0x58, 0x58, 0x26, 0x7e, 0xc1, 0x14, 0x16, 0x6, 0xe0, 0xfa, 0x16, 0x7e, 0x90, 0xaf, 0x3d, 0x28, 0x63, 0x9d, 0x3f}, + {0xd2, 0xc9, 0xf2, 0xe3, 0x0, 0x9b, 0xd2, 0xc, 0x5f, 0xaa, 0xce, 0x30, 0xb7, 0xd4, 0xc, 0x30, 0x74, 0x2a, 0x51, 0x16, 0xf2, 0xe0, 0x32, 0x98, 0xd, 0xeb, 0x30, 0xd8, 0xe3, 0xce, 0xf8, 0x9a}, + {0x4b, 0xc5, 0x9e, 0x7b, 0xb5, 0xf1, 0x79, 0x92, 0xff, 0x51, 0xe6, 0x6e, 0x4, 0x86, 0x68, 0xd3, 0x9b, 0x23, 0x4d, 0x57, 0xe6, 0x96, 0x67, 0x31, 0xcc, 0xe6, 0xa6, 0xf3, 0x17, 0xa, 0x75, 0x5}, + {0xb1, 0x76, 0x81, 0xd9, 0x13, 0x32, 0x6c, 0xce, 0x3c, 0x17, 0x52, 0x84, 0xf8, 0x5, 0xa2, 0x62, 0xf4, 0x2b, 0xcb, 0xb3, 0x78, 0x47, 0x15, 0x47, 0xff, 0x46, 0x54, 0x82, 0x23, 0x93, 0x6a, 0x48}, + {0x38, 0xdf, 0x58, 0x7, 0x4e, 0x5e, 0x65, 0x65, 0xf2, 0xfc, 0x7c, 0x89, 0xfc, 0x86, 0x50, 0x8e, 0x31, 0x70, 0x2e, 0x44, 0xd0, 0xb, 0xca, 0x86, 0xf0, 0x40, 0x9, 0xa2, 0x30, 0x78, 0x47, 0x4e}, + {0x65, 0xa0, 0xee, 0x39, 0xd1, 0xf7, 0x38, 0x83, 0xf7, 0x5e, 0xe9, 0x37, 0xe4, 0x2c, 0x3a, 0xbd, 0x21, 0x97, 0xb2, 0x26, 0x1, 0x13, 0xf8, 0x6f, 0xa3, 0x44, 0xed, 0xd1, 0xef, 0x9f, 0xde, 0xe7}, + {0x8b, 0xa0, 0xdf, 0x15, 0x76, 0x25, 0x92, 0xd9, 0x3c, 0x85, 0xf7, 0xf6, 0x12, 0xdc, 0x42, 0xbe, 0xd8, 0xa7, 0xec, 0x7c, 0xab, 0x27, 0xb0, 0x7e, 0x53, 0x8d, 0x7d, 0xda, 0xaa, 0x3e, 0xa8, 0xde}, + {0xaa, 0x25, 0xce, 0x93, 0xbd, 0x2, 0x69, 0xd8, 0x5a, 0xf6, 0x43, 0xfd, 0x1a, 0x73, 0x8, 0xf9, 0xc0, 0x5f, 0xef, 0xda, 0x17, 0x4a, 0x19, 0xa5, 0x97, 0x4d, 0x66, 0x33, 0x4c, 0xfd, 0x21, 0x6a}, + {0x35, 0xb4, 0x98, 0x31, 0xdb, 0x41, 0x15, 0x70, 0xea, 0x1e, 0xf, 0xbb, 0xed, 0xcd, 0x54, 0x9b, 0x9a, 0xd0, 0x63, 0xa1, 0x51, 0x97, 0x40, 0x72, 0xf6, 0x75, 0x9d, 0xbf, 0x91, 0x47, 0x6f, 0xe2}}; + +static void E8(hashState* state); /*The bijective function E8, in bitslice form*/ +static void F8(hashState* state); /*The compression function F8 */ /*The API functions*/ -static HashReturn Init(hashState *state, int hashbitlen); -static HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen); -static HashReturn Final(hashState *state, BitSequence *hashval); -HashReturn jh_hash(int hashbitlen, const BitSequence *data,DataLength databitlen, BitSequence *hashval); +static HashReturn Init(hashState* state, int hashbitlen); +static HashReturn Update(hashState* state, const BitSequence* data, DataLength databitlen); +static HashReturn Final(hashState* state, BitSequence* hashval); +HashReturn jh_hash(int hashbitlen, const BitSequence* data, DataLength databitlen, BitSequence* hashval); /*swapping bit 2i with bit 2i+1 of 64-bit x*/ -#define SWAP1(x) (x) = ((((x) & 0x5555555555555555ULL) << 1) | (((x) & 0xaaaaaaaaaaaaaaaaULL) >> 1)); +#define SWAP1(x) (x) = ((((x)&0x5555555555555555ULL) << 1) | (((x)&0xaaaaaaaaaaaaaaaaULL) >> 1)); /*swapping bits 4i||4i+1 with bits 4i+2||4i+3 of 64-bit x*/ -#define SWAP2(x) (x) = ((((x) & 0x3333333333333333ULL) << 2) | (((x) & 0xccccccccccccccccULL) >> 2)); +#define SWAP2(x) (x) = ((((x)&0x3333333333333333ULL) << 2) | (((x)&0xccccccccccccccccULL) >> 2)); /*swapping bits 8i||8i+1||8i+2||8i+3 with bits 8i+4||8i+5||8i+6||8i+7 of 64-bit x*/ -#define SWAP4(x) (x) = ((((x) & 0x0f0f0f0f0f0f0f0fULL) << 4) | (((x) & 0xf0f0f0f0f0f0f0f0ULL) >> 4)); +#define SWAP4(x) (x) = ((((x)&0x0f0f0f0f0f0f0f0fULL) << 4) | (((x)&0xf0f0f0f0f0f0f0f0ULL) >> 4)); /*swapping bits 16i||16i+1||......||16i+7 with bits 16i+8||16i+9||......||16i+15 of 64-bit x*/ -#define SWAP8(x) (x) = ((((x) & 0x00ff00ff00ff00ffULL) << 8) | (((x) & 0xff00ff00ff00ff00ULL) >> 8)); +#define SWAP8(x) (x) = ((((x)&0x00ff00ff00ff00ffULL) << 8) | (((x)&0xff00ff00ff00ff00ULL) >> 8)); /*swapping bits 32i||32i+1||......||32i+15 with bits 32i+16||32i+17||......||32i+31 of 64-bit x*/ -#define SWAP16(x) (x) = ((((x) & 0x0000ffff0000ffffULL) << 16) | (((x) & 0xffff0000ffff0000ULL) >> 16)); +#define SWAP16(x) (x) = ((((x)&0x0000ffff0000ffffULL) << 16) | (((x)&0xffff0000ffff0000ULL) >> 16)); /*swapping bits 64i||64i+1||......||64i+31 with bits 64i+32||64i+33||......||64i+63 of 64-bit x*/ -#define SWAP32(x) (x) = (((x) << 32) | ((x) >> 32)); +#define SWAP32(x) (x) = (((x) << 32) | ((x) >> 32)); /*The MDS transform*/ -#define L(m0,m1,m2,m3,m4,m5,m6,m7) \ - (m4) ^= (m1); \ - (m5) ^= (m2); \ - (m6) ^= (m0) ^ (m3); \ - (m7) ^= (m0); \ - (m0) ^= (m5); \ - (m1) ^= (m6); \ - (m2) ^= (m4) ^ (m7); \ - (m3) ^= (m4); +#define L(m0, m1, m2, m3, m4, m5, m6, m7) \ + (m4) ^= (m1); \ + (m5) ^= (m2); \ + (m6) ^= (m0) ^ (m3); \ + (m7) ^= (m0); \ + (m0) ^= (m5); \ + (m1) ^= (m6); \ + (m2) ^= (m4) ^ (m7); \ + (m3) ^= (m4); /*Two Sboxes are computed in parallel, each Sbox implements S0 and S1, selected by a constant bit*/ /*The reason to compute two Sboxes in parallel is to try to fully utilize the parallel processing power*/ -#define SS(m0,m1,m2,m3,m4,m5,m6,m7,cc0,cc1) \ - m3 = ~(m3); \ - m7 = ~(m7); \ - m0 ^= ((~(m2)) & (cc0)); \ - m4 ^= ((~(m6)) & (cc1)); \ - temp0 = (cc0) ^ ((m0) & (m1));\ - temp1 = (cc1) ^ ((m4) & (m5));\ - m0 ^= ((m2) & (m3)); \ - m4 ^= ((m6) & (m7)); \ - m3 ^= ((~(m1)) & (m2)); \ - m7 ^= ((~(m5)) & (m6)); \ - m1 ^= ((m0) & (m2)); \ - m5 ^= ((m4) & (m6)); \ - m2 ^= ((m0) & (~(m3))); \ - m6 ^= ((m4) & (~(m7))); \ - m0 ^= ((m1) | (m3)); \ - m4 ^= ((m5) | (m7)); \ - m3 ^= ((m1) & (m2)); \ - m7 ^= ((m5) & (m6)); \ - m1 ^= (temp0 & (m0)); \ - m5 ^= (temp1 & (m4)); \ - m2 ^= temp0; \ - m6 ^= temp1; +#define SS(m0, m1, m2, m3, m4, m5, m6, m7, cc0, cc1) \ + m3 = ~(m3); \ + m7 = ~(m7); \ + m0 ^= ((~(m2)) & (cc0)); \ + m4 ^= ((~(m6)) & (cc1)); \ + temp0 = (cc0) ^ ((m0) & (m1)); \ + temp1 = (cc1) ^ ((m4) & (m5)); \ + m0 ^= ((m2) & (m3)); \ + m4 ^= ((m6) & (m7)); \ + m3 ^= ((~(m1)) & (m2)); \ + m7 ^= ((~(m5)) & (m6)); \ + m1 ^= ((m0) & (m2)); \ + m5 ^= ((m4) & (m6)); \ + m2 ^= ((m0) & (~(m3))); \ + m6 ^= ((m4) & (~(m7))); \ + m0 ^= ((m1) | (m3)); \ + m4 ^= ((m5) | (m7)); \ + m3 ^= ((m1) & (m2)); \ + m7 ^= ((m5) & (m6)); \ + m1 ^= (temp0 & (m0)); \ + m5 ^= (temp1 & (m4)); \ + m2 ^= temp0; \ + m6 ^= temp1; /*The bijective function E8, in bitslice form*/ -static void E8(hashState *state) +static void E8(hashState* state) { - uint64 i,roundnumber,temp0,temp1; - - for (roundnumber = 0; roundnumber < 42; roundnumber = roundnumber+7) { - /*round 7*roundnumber+0: Sbox, MDS and Swapping layers*/ - for (i = 0; i < 2; i++) { - SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64*)E8_bitslice_roundconstant[roundnumber+0])[i],((uint64*)E8_bitslice_roundconstant[roundnumber+0])[i+2] ); - L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - SWAP1(state->x[1][i]); SWAP1(state->x[3][i]); SWAP1(state->x[5][i]); SWAP1(state->x[7][i]); - } - - /*round 7*roundnumber+1: Sbox, MDS and Swapping layers*/ - for (i = 0; i < 2; i++) { - SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64*)E8_bitslice_roundconstant[roundnumber+1])[i],((uint64*)E8_bitslice_roundconstant[roundnumber+1])[i+2] ); - L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - SWAP2(state->x[1][i]); SWAP2(state->x[3][i]); SWAP2(state->x[5][i]); SWAP2(state->x[7][i]); - } - - /*round 7*roundnumber+2: Sbox, MDS and Swapping layers*/ - for (i = 0; i < 2; i++) { - SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64*)E8_bitslice_roundconstant[roundnumber+2])[i],((uint64*)E8_bitslice_roundconstant[roundnumber+2])[i+2] ); - L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - SWAP4(state->x[1][i]); SWAP4(state->x[3][i]); SWAP4(state->x[5][i]); SWAP4(state->x[7][i]); - } - - /*round 7*roundnumber+3: Sbox, MDS and Swapping layers*/ - for (i = 0; i < 2; i++) { - SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64*)E8_bitslice_roundconstant[roundnumber+3])[i],((uint64*)E8_bitslice_roundconstant[roundnumber+3])[i+2] ); - L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - SWAP8(state->x[1][i]); SWAP8(state->x[3][i]); SWAP8(state->x[5][i]); SWAP8(state->x[7][i]); - } - - /*round 7*roundnumber+4: Sbox, MDS and Swapping layers*/ - for (i = 0; i < 2; i++) { - SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64*)E8_bitslice_roundconstant[roundnumber+4])[i],((uint64*)E8_bitslice_roundconstant[roundnumber+4])[i+2] ); - L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - SWAP16(state->x[1][i]); SWAP16(state->x[3][i]); SWAP16(state->x[5][i]); SWAP16(state->x[7][i]); - } - - /*round 7*roundnumber+5: Sbox, MDS and Swapping layers*/ - for (i = 0; i < 2; i++) { - SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64*)E8_bitslice_roundconstant[roundnumber+5])[i],((uint64*)E8_bitslice_roundconstant[roundnumber+5])[i+2] ); - L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - SWAP32(state->x[1][i]); SWAP32(state->x[3][i]); SWAP32(state->x[5][i]); SWAP32(state->x[7][i]); - } - - /*round 7*roundnumber+6: Sbox and MDS layers*/ - for (i = 0; i < 2; i++) { - SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64*)E8_bitslice_roundconstant[roundnumber+6])[i],((uint64*)E8_bitslice_roundconstant[roundnumber+6])[i+2] ); - L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - } - /*round 7*roundnumber+6: swapping layer*/ - for (i = 1; i < 8; i = i+2) { - temp0 = state->x[i][0]; state->x[i][0] = state->x[i][1]; state->x[i][1] = temp0; - } - } - + uint64 i, roundnumber, temp0, temp1; + + for(roundnumber = 0; roundnumber < 42; roundnumber = roundnumber + 7) + { + /*round 7*roundnumber+0: Sbox, MDS and Swapping layers*/ + for(i = 0; i < 2; i++) + { + SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 0])[i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 0])[i + 2]); + L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + SWAP1(state->x[1][i]); + SWAP1(state->x[3][i]); + SWAP1(state->x[5][i]); + SWAP1(state->x[7][i]); + } + + /*round 7*roundnumber+1: Sbox, MDS and Swapping layers*/ + for(i = 0; i < 2; i++) + { + SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 1])[i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 1])[i + 2]); + L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + SWAP2(state->x[1][i]); + SWAP2(state->x[3][i]); + SWAP2(state->x[5][i]); + SWAP2(state->x[7][i]); + } + + /*round 7*roundnumber+2: Sbox, MDS and Swapping layers*/ + for(i = 0; i < 2; i++) + { + SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 2])[i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 2])[i + 2]); + L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + SWAP4(state->x[1][i]); + SWAP4(state->x[3][i]); + SWAP4(state->x[5][i]); + SWAP4(state->x[7][i]); + } + + /*round 7*roundnumber+3: Sbox, MDS and Swapping layers*/ + for(i = 0; i < 2; i++) + { + SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 3])[i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 3])[i + 2]); + L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + SWAP8(state->x[1][i]); + SWAP8(state->x[3][i]); + SWAP8(state->x[5][i]); + SWAP8(state->x[7][i]); + } + + /*round 7*roundnumber+4: Sbox, MDS and Swapping layers*/ + for(i = 0; i < 2; i++) + { + SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 4])[i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 4])[i + 2]); + L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + SWAP16(state->x[1][i]); + SWAP16(state->x[3][i]); + SWAP16(state->x[5][i]); + SWAP16(state->x[7][i]); + } + + /*round 7*roundnumber+5: Sbox, MDS and Swapping layers*/ + for(i = 0; i < 2; i++) + { + SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 5])[i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 5])[i + 2]); + L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + SWAP32(state->x[1][i]); + SWAP32(state->x[3][i]); + SWAP32(state->x[5][i]); + SWAP32(state->x[7][i]); + } + + /*round 7*roundnumber+6: Sbox and MDS layers*/ + for(i = 0; i < 2; i++) + { + SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 6])[i], ((uint64*)E8_bitslice_roundconstant[roundnumber + 6])[i + 2]); + L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + } + /*round 7*roundnumber+6: swapping layer*/ + for(i = 1; i < 8; i = i + 2) + { + temp0 = state->x[i][0]; + state->x[i][0] = state->x[i][1]; + state->x[i][1] = temp0; + } + } } /*The compression function F8 */ -static void F8(hashState *state) +static void F8(hashState* state) { - uint64 i; + uint64 i; - /*xor the 512-bit message with the fist half of the 1024-bit hash state*/ - for (i = 0; i < 8; i++) state->x[i >> 1][i & 1] ^= ((uint64*)state->buffer)[i]; + /*xor the 512-bit message with the fist half of the 1024-bit hash state*/ + for(i = 0; i < 8; i++) + state->x[i >> 1][i & 1] ^= ((uint64*)state->buffer)[i]; - /*the bijective function E8 */ - E8(state); + /*the bijective function E8 */ + E8(state); - /*xor the 512-bit message with the second half of the 1024-bit hash state*/ - for (i = 0; i < 8; i++) state->x[(8+i) >> 1][(8+i) & 1] ^= ((uint64*)state->buffer)[i]; + /*xor the 512-bit message with the second half of the 1024-bit hash state*/ + for(i = 0; i < 8; i++) + state->x[(8 + i) >> 1][(8 + i) & 1] ^= ((uint64*)state->buffer)[i]; } /*before hashing a message, initialize the hash state as H0 */ -static HashReturn Init(hashState *state, int hashbitlen) +static HashReturn Init(hashState* state, int hashbitlen) { - state->databitlen = 0; - state->datasize_in_buffer = 0; - - /*initialize the initial hash value of JH*/ - state->hashbitlen = hashbitlen; - - /*load the initial hash value into state*/ - switch (hashbitlen) - { - case 224: memcpy(state->x,JH224_H0,128); break; - case 256: memcpy(state->x,JH256_H0,128); break; - case 384: memcpy(state->x,JH384_H0,128); break; - case 512: memcpy(state->x,JH512_H0,128); break; - } - - return(SUCCESS); + state->databitlen = 0; + state->datasize_in_buffer = 0; + + /*initialize the initial hash value of JH*/ + state->hashbitlen = hashbitlen; + + /*load the initial hash value into state*/ + switch(hashbitlen) + { + case 224: + memcpy(state->x, JH224_H0, 128); + break; + case 256: + memcpy(state->x, JH256_H0, 128); + break; + case 384: + memcpy(state->x, JH384_H0, 128); + break; + case 512: + memcpy(state->x, JH512_H0, 128); + break; + } + + return (SUCCESS); } - /*hash each 512-bit message block, except the last partial block*/ -static HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen) +static HashReturn Update(hashState* state, const BitSequence* data, DataLength databitlen) { - DataLength index; /*the starting address of the data to be compressed*/ - - state->databitlen += databitlen; - index = 0; - - /*if there is remaining data in the buffer, fill it to a full message block first*/ - /*we assume that the size of the data in the buffer is the multiple of 8 bits if it is not at the end of a message*/ - - /*There is data in the buffer, but the incoming data is insufficient for a full block*/ - if ( (state->datasize_in_buffer > 0 ) && (( state->datasize_in_buffer + databitlen) < 512) ) { - if ( (databitlen & 7) == 0 ) { - memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3)) ; - } - else memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3)+1) ; - state->datasize_in_buffer += databitlen; - databitlen = 0; - } - - /*There is data in the buffer, and the incoming data is sufficient for a full block*/ - if ( (state->datasize_in_buffer > 0 ) && (( state->datasize_in_buffer + databitlen) >= 512) ) { - memcpy( state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3) ) ; - index = 64-(state->datasize_in_buffer >> 3); - databitlen = databitlen - (512 - state->datasize_in_buffer); - F8(state); - state->datasize_in_buffer = 0; - } - - /*hash the remaining full message blocks*/ - for ( ; databitlen >= 512; index = index+64, databitlen = databitlen - 512) { - memcpy(state->buffer, data+index, 64); - F8(state); - } - - /*store the partial block into buffer, assume that -- if part of the last byte is not part of the message, then that part consists of 0 bits*/ - if ( databitlen > 0) { - if ((databitlen & 7) == 0) - memcpy(state->buffer, data+index, (databitlen & 0x1ff) >> 3); - else - memcpy(state->buffer, data+index, ((databitlen & 0x1ff) >> 3)+1); - state->datasize_in_buffer = databitlen; - } - - return(SUCCESS); + DataLength index; /*the starting address of the data to be compressed*/ + + state->databitlen += databitlen; + index = 0; + + /*if there is remaining data in the buffer, fill it to a full message block first*/ + /*we assume that the size of the data in the buffer is the multiple of 8 bits if it is not at the end of a message*/ + + /*There is data in the buffer, but the incoming data is insufficient for a full block*/ + if((state->datasize_in_buffer > 0) && ((state->datasize_in_buffer + databitlen) < 512)) + { + if((databitlen & 7) == 0) + { + memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64 - (state->datasize_in_buffer >> 3)); + } + else + memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64 - (state->datasize_in_buffer >> 3) + 1); + state->datasize_in_buffer += databitlen; + databitlen = 0; + } + + /*There is data in the buffer, and the incoming data is sufficient for a full block*/ + if((state->datasize_in_buffer > 0) && ((state->datasize_in_buffer + databitlen) >= 512)) + { + memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64 - (state->datasize_in_buffer >> 3)); + index = 64 - (state->datasize_in_buffer >> 3); + databitlen = databitlen - (512 - state->datasize_in_buffer); + F8(state); + state->datasize_in_buffer = 0; + } + + /*hash the remaining full message blocks*/ + for(; databitlen >= 512; index = index + 64, databitlen = databitlen - 512) + { + memcpy(state->buffer, data + index, 64); + F8(state); + } + + /*store the partial block into buffer, assume that -- if part of the last byte is not part of the message, then that part consists of 0 bits*/ + if(databitlen > 0) + { + if((databitlen & 7) == 0) + memcpy(state->buffer, data + index, (databitlen & 0x1ff) >> 3); + else + memcpy(state->buffer, data + index, ((databitlen & 0x1ff) >> 3) + 1); + state->datasize_in_buffer = databitlen; + } + + return (SUCCESS); } /*pad the message, process the padded block(s), truncate the hash value H to obtain the message digest*/ -static HashReturn Final(hashState *state, BitSequence *hashval) +static HashReturn Final(hashState* state, BitSequence* hashval) { - unsigned int i; - - if ( (state->databitlen & 0x1ff) == 0 ) { - /*pad the message when databitlen is multiple of 512 bits, then process the padded block*/ - memset(state->buffer, 0, 64); - state->buffer[0] = 0x80; - state->buffer[63] = state->databitlen & 0xff; - state->buffer[62] = (state->databitlen >> 8) & 0xff; - state->buffer[61] = (state->databitlen >> 16) & 0xff; - state->buffer[60] = (state->databitlen >> 24) & 0xff; - state->buffer[59] = (state->databitlen >> 32) & 0xff; - state->buffer[58] = (state->databitlen >> 40) & 0xff; - state->buffer[57] = (state->databitlen >> 48) & 0xff; - state->buffer[56] = (state->databitlen >> 56) & 0xff; - F8(state); - } - else { - /*set the rest of the bytes in the buffer to 0*/ - if ( (state->datasize_in_buffer & 7) == 0) - for (i = (state->databitlen & 0x1ff) >> 3; i < 64; i++) state->buffer[i] = 0; - else - for (i = ((state->databitlen & 0x1ff) >> 3)+1; i < 64; i++) state->buffer[i] = 0; - - /*pad and process the partial block when databitlen is not multiple of 512 bits, then hash the padded blocks*/ - state->buffer[((state->databitlen & 0x1ff) >> 3)] |= 1 << (7- (state->databitlen & 7)); - - F8(state); - memset(state->buffer, 0, 64); - state->buffer[63] = state->databitlen & 0xff; - state->buffer[62] = (state->databitlen >> 8) & 0xff; - state->buffer[61] = (state->databitlen >> 16) & 0xff; - state->buffer[60] = (state->databitlen >> 24) & 0xff; - state->buffer[59] = (state->databitlen >> 32) & 0xff; - state->buffer[58] = (state->databitlen >> 40) & 0xff; - state->buffer[57] = (state->databitlen >> 48) & 0xff; - state->buffer[56] = (state->databitlen >> 56) & 0xff; - F8(state); - } - - /*truncating the final hash value to generate the message digest*/ - switch(state->hashbitlen) { - case 224: memcpy(hashval,(unsigned char*)state->x+64+36,28); break; - case 256: memcpy(hashval,(unsigned char*)state->x+64+32,32); break; - case 384: memcpy(hashval,(unsigned char*)state->x+64+16,48); break; - case 512: memcpy(hashval,(unsigned char*)state->x+64,64); break; - } - - return(SUCCESS); + unsigned int i; + + if((state->databitlen & 0x1ff) == 0) + { + /*pad the message when databitlen is multiple of 512 bits, then process the padded block*/ + memset(state->buffer, 0, 64); + state->buffer[0] = 0x80; + state->buffer[63] = state->databitlen & 0xff; + state->buffer[62] = (state->databitlen >> 8) & 0xff; + state->buffer[61] = (state->databitlen >> 16) & 0xff; + state->buffer[60] = (state->databitlen >> 24) & 0xff; + state->buffer[59] = (state->databitlen >> 32) & 0xff; + state->buffer[58] = (state->databitlen >> 40) & 0xff; + state->buffer[57] = (state->databitlen >> 48) & 0xff; + state->buffer[56] = (state->databitlen >> 56) & 0xff; + F8(state); + } + else + { + /*set the rest of the bytes in the buffer to 0*/ + if((state->datasize_in_buffer & 7) == 0) + for(i = (state->databitlen & 0x1ff) >> 3; i < 64; i++) + state->buffer[i] = 0; + else + for(i = ((state->databitlen & 0x1ff) >> 3) + 1; i < 64; i++) + state->buffer[i] = 0; + + /*pad and process the partial block when databitlen is not multiple of 512 bits, then hash the padded blocks*/ + state->buffer[((state->databitlen & 0x1ff) >> 3)] |= 1 << (7 - (state->databitlen & 7)); + + F8(state); + memset(state->buffer, 0, 64); + state->buffer[63] = state->databitlen & 0xff; + state->buffer[62] = (state->databitlen >> 8) & 0xff; + state->buffer[61] = (state->databitlen >> 16) & 0xff; + state->buffer[60] = (state->databitlen >> 24) & 0xff; + state->buffer[59] = (state->databitlen >> 32) & 0xff; + state->buffer[58] = (state->databitlen >> 40) & 0xff; + state->buffer[57] = (state->databitlen >> 48) & 0xff; + state->buffer[56] = (state->databitlen >> 56) & 0xff; + F8(state); + } + + /*truncating the final hash value to generate the message digest*/ + switch(state->hashbitlen) + { + case 224: + memcpy(hashval, (unsigned char*)state->x + 64 + 36, 28); + break; + case 256: + memcpy(hashval, (unsigned char*)state->x + 64 + 32, 32); + break; + case 384: + memcpy(hashval, (unsigned char*)state->x + 64 + 16, 48); + break; + case 512: + memcpy(hashval, (unsigned char*)state->x + 64, 64); + break; + } + + return (SUCCESS); } /* hash a message, three inputs: message digest size in bits (hashbitlen); message (data); message length in bits (databitlen) one output: message digest (hashval) */ -HashReturn jh_hash(int hashbitlen, const BitSequence *data,DataLength databitlen, BitSequence *hashval) +HashReturn jh_hash(int hashbitlen, const BitSequence* data, DataLength databitlen, BitSequence* hashval) { - hashState state; - - if ( hashbitlen == 224 || hashbitlen == 256 || hashbitlen == 384 || hashbitlen == 512 ) { - Init(&state, hashbitlen); - Update(&state, data, databitlen); - Final(&state, hashval); - return SUCCESS; - } - else - return(BAD_HASHLEN); + hashState state; + + if(hashbitlen == 224 || hashbitlen == 256 || hashbitlen == 384 || hashbitlen == 512) + { + Init(&state, hashbitlen); + Update(&state, data, databitlen); + Final(&state, hashval); + return SUCCESS; + } + else + return (BAD_HASHLEN); } diff --git a/xmrstak/backend/cpu/crypto/c_jh.h b/xmrstak/backend/cpu/crypto/c_jh.h index d10d40fe5..34d30e6b4 100644 --- a/xmrstak/backend/cpu/crypto/c_jh.h +++ b/xmrstak/backend/cpu/crypto/c_jh.h @@ -16,4 +16,4 @@ #include "hash.h" -HashReturn jh_hash(int hashbitlen, const BitSequence *data, DataLength databitlen, BitSequence *hashval); +HashReturn jh_hash(int hashbitlen, const BitSequence* data, DataLength databitlen, BitSequence* hashval); diff --git a/xmrstak/backend/cpu/crypto/c_keccak.c b/xmrstak/backend/cpu/crypto/c_keccak.c index 63c16147d..0af6b02ef 100644 --- a/xmrstak/backend/cpu/crypto/c_keccak.c +++ b/xmrstak/backend/cpu/crypto/c_keccak.c @@ -2,8 +2,8 @@ // 19-Nov-11 Markku-Juhani O. Saarinen // A baseline Keccak (3rd round) implementation. -#include #include +#include #define HASH_DATA_AREA 136 #define KECCAK_ROUNDS 24 @@ -13,16 +13,15 @@ #endif const uint64_t keccakf_rndc[24] = -{ - 0x0000000000000001, 0x0000000000008082, 0x800000000000808a, - 0x8000000080008000, 0x000000000000808b, 0x0000000080000001, - 0x8000000080008081, 0x8000000000008009, 0x000000000000008a, - 0x0000000000000088, 0x0000000080008009, 0x000000008000000a, - 0x000000008000808b, 0x800000000000008b, 0x8000000000008089, - 0x8000000000008003, 0x8000000000008002, 0x8000000000000080, - 0x000000000000800a, 0x800000008000000a, 0x8000000080008081, - 0x8000000000008080, 0x0000000080000001, 0x8000000080008008 -}; + { + 0x0000000000000001, 0x0000000000008082, 0x800000000000808a, + 0x8000000080008000, 0x000000000000808b, 0x0000000080000001, + 0x8000000080008081, 0x8000000000008009, 0x000000000000008a, + 0x0000000000000088, 0x0000000080008009, 0x000000008000000a, + 0x000000008000808b, 0x800000000000008b, 0x8000000000008089, + 0x8000000000008003, 0x8000000000008002, 0x8000000000000080, + 0x000000000000800a, 0x800000008000000a, 0x8000000080008081, + 0x8000000000008080, 0x0000000080000001, 0x8000000080008008}; // update the state with given number of rounds @@ -31,7 +30,8 @@ void keccakf(uint64_t st[25], int rounds) int i, j, round; uint64_t t, bc[5]; - for (round = 0; round < rounds; ++round) { + for(round = 0; round < rounds; ++round) + { // Theta bc[0] = st[0] ^ st[5] ^ st[10] ^ st[15] ^ st[20]; @@ -40,10 +40,11 @@ void keccakf(uint64_t st[25], int rounds) bc[3] = st[3] ^ st[8] ^ st[13] ^ st[18] ^ st[23]; bc[4] = st[4] ^ st[9] ^ st[14] ^ st[19] ^ st[24]; - for (i = 0; i < 5; ++i) { + for(i = 0; i < 5; ++i) + { t = bc[(i + 4) % 5] ^ ROTL64(bc[(i + 1) % 5], 1); - st[i ] ^= t; - st[i + 5] ^= t; + st[i] ^= t; + st[i + 5] ^= t; st[i + 10] ^= t; st[i + 15] ^= t; st[i + 20] ^= t; @@ -51,81 +52,81 @@ void keccakf(uint64_t st[25], int rounds) // Rho Pi t = st[1]; - st[ 1] = ROTL64(st[ 6], 44); - st[ 6] = ROTL64(st[ 9], 20); - st[ 9] = ROTL64(st[22], 61); + st[1] = ROTL64(st[6], 44); + st[6] = ROTL64(st[9], 20); + st[9] = ROTL64(st[22], 61); st[22] = ROTL64(st[14], 39); st[14] = ROTL64(st[20], 18); - st[20] = ROTL64(st[ 2], 62); - st[ 2] = ROTL64(st[12], 43); + st[20] = ROTL64(st[2], 62); + st[2] = ROTL64(st[12], 43); st[12] = ROTL64(st[13], 25); - st[13] = ROTL64(st[19], 8); + st[13] = ROTL64(st[19], 8); st[19] = ROTL64(st[23], 56); st[23] = ROTL64(st[15], 41); - st[15] = ROTL64(st[ 4], 27); - st[ 4] = ROTL64(st[24], 14); - st[24] = ROTL64(st[21], 2); - st[21] = ROTL64(st[ 8], 55); - st[ 8] = ROTL64(st[16], 45); - st[16] = ROTL64(st[ 5], 36); - st[ 5] = ROTL64(st[ 3], 28); - st[ 3] = ROTL64(st[18], 21); + st[15] = ROTL64(st[4], 27); + st[4] = ROTL64(st[24], 14); + st[24] = ROTL64(st[21], 2); + st[21] = ROTL64(st[8], 55); + st[8] = ROTL64(st[16], 45); + st[16] = ROTL64(st[5], 36); + st[5] = ROTL64(st[3], 28); + st[3] = ROTL64(st[18], 21); st[18] = ROTL64(st[17], 15); st[17] = ROTL64(st[11], 10); - st[11] = ROTL64(st[ 7], 6); - st[ 7] = ROTL64(st[10], 3); + st[11] = ROTL64(st[7], 6); + st[7] = ROTL64(st[10], 3); st[10] = ROTL64(t, 1); // Chi // unrolled loop, where only last iteration is different j = 0; - bc[0] = st[j ]; + bc[0] = st[j]; bc[1] = st[j + 1]; - st[j ] ^= (~st[j + 1]) & st[j + 2]; + st[j] ^= (~st[j + 1]) & st[j + 2]; st[j + 1] ^= (~st[j + 2]) & st[j + 3]; st[j + 2] ^= (~st[j + 3]) & st[j + 4]; st[j + 3] ^= (~st[j + 4]) & bc[0]; st[j + 4] ^= (~bc[0]) & bc[1]; j = 5; - bc[0] = st[j ]; + bc[0] = st[j]; bc[1] = st[j + 1]; - st[j ] ^= (~st[j + 1]) & st[j + 2]; + st[j] ^= (~st[j + 1]) & st[j + 2]; st[j + 1] ^= (~st[j + 2]) & st[j + 3]; st[j + 2] ^= (~st[j + 3]) & st[j + 4]; st[j + 3] ^= (~st[j + 4]) & bc[0]; st[j + 4] ^= (~bc[0]) & bc[1]; j = 10; - bc[0] = st[j ]; + bc[0] = st[j]; bc[1] = st[j + 1]; - st[j ] ^= (~st[j + 1]) & st[j + 2]; + st[j] ^= (~st[j + 1]) & st[j + 2]; st[j + 1] ^= (~st[j + 2]) & st[j + 3]; st[j + 2] ^= (~st[j + 3]) & st[j + 4]; st[j + 3] ^= (~st[j + 4]) & bc[0]; st[j + 4] ^= (~bc[0]) & bc[1]; j = 15; - bc[0] = st[j ]; + bc[0] = st[j]; bc[1] = st[j + 1]; - st[j ] ^= (~st[j + 1]) & st[j + 2]; + st[j] ^= (~st[j + 1]) & st[j + 2]; st[j + 1] ^= (~st[j + 2]) & st[j + 3]; st[j + 2] ^= (~st[j + 3]) & st[j + 4]; st[j + 3] ^= (~st[j + 4]) & bc[0]; st[j + 4] ^= (~bc[0]) & bc[1]; j = 20; - bc[0] = st[j ]; + bc[0] = st[j]; bc[1] = st[j + 1]; bc[2] = st[j + 2]; bc[3] = st[j + 3]; bc[4] = st[j + 4]; - st[j ] ^= (~bc[1]) & bc[2]; + st[j] ^= (~bc[1]) & bc[2]; st[j + 1] ^= (~bc[2]) & bc[3]; st[j + 2] ^= (~bc[3]) & bc[4]; st[j + 3] ^= (~bc[4]) & bc[0]; @@ -139,7 +140,7 @@ void keccakf(uint64_t st[25], int rounds) // compute a keccak hash (md) of given byte length from "in" typedef uint64_t state_t[25]; -void keccak(const uint8_t *in, int inlen, uint8_t *md, int mdlen) +void keccak(const uint8_t* in, int inlen, uint8_t* md, int mdlen) { state_t st; uint8_t temp[144]; @@ -150,9 +151,10 @@ void keccak(const uint8_t *in, int inlen, uint8_t *md, int mdlen) memset(st, 0, sizeof(st)); - for ( ; inlen >= rsiz; inlen -= rsiz, in += rsiz) { - for (i = 0; i < rsizw; i++) - st[i] ^= ((uint64_t *) in)[i]; + for(; inlen >= rsiz; inlen -= rsiz, in += rsiz) + { + for(i = 0; i < rsizw; i++) + st[i] ^= ((uint64_t*)in)[i]; keccakf(st, KECCAK_ROUNDS); } @@ -162,15 +164,15 @@ void keccak(const uint8_t *in, int inlen, uint8_t *md, int mdlen) memset(temp + inlen, 0, rsiz - inlen); temp[rsiz - 1] |= 0x80; - for (i = 0; i < rsizw; i++) - st[i] ^= ((uint64_t *) temp)[i]; + for(i = 0; i < rsizw; i++) + st[i] ^= ((uint64_t*)temp)[i]; keccakf(st, KECCAK_ROUNDS); memcpy(md, st, mdlen); } -void keccak1600(const uint8_t *in, int inlen, uint8_t *md) +void keccak1600(const uint8_t* in, int inlen, uint8_t* md) { keccak(in, inlen, md, sizeof(state_t)); } diff --git a/xmrstak/backend/cpu/crypto/c_keccak.h b/xmrstak/backend/cpu/crypto/c_keccak.h index 4f7f85729..b7a26065e 100644 --- a/xmrstak/backend/cpu/crypto/c_keccak.h +++ b/xmrstak/backend/cpu/crypto/c_keccak.h @@ -16,11 +16,11 @@ #endif // compute a keccak hash (md) of given byte length from "in" -int keccak(const uint8_t *in, int inlen, uint8_t *md, int mdlen); +int keccak(const uint8_t* in, int inlen, uint8_t* md, int mdlen); // update the state void keccakf(uint64_t st[25], int norounds); -void keccak1600(const uint8_t *in, int inlen, uint8_t *md); +void keccak1600(const uint8_t* in, int inlen, uint8_t* md); #endif diff --git a/xmrstak/backend/cpu/crypto/c_skein.c b/xmrstak/backend/cpu/crypto/c_skein.c index e2d54425f..4b8cbb388 100644 --- a/xmrstak/backend/cpu/crypto/c_skein.c +++ b/xmrstak/backend/cpu/crypto/c_skein.c @@ -8,11 +8,11 @@ ** ************************************************************************/ -#define SKEIN_PORT_CODE /* instantiate any code in skein_port.h */ +#define SKEIN_PORT_CODE /* instantiate any code in skein_port.h */ -#include /* get size_t definition */ -#include /* get the memcpy/memset functions */ -#include "c_skein.h" /* get the Skein API definitions */ +#include "c_skein.h" /* get the Skein API definitions */ +#include /* get size_t definition */ +#include /* get the memcpy/memset functions */ #define DISABLE_UNUSED 0 @@ -24,72 +24,72 @@ #define SKEIN_512_NIST_MAX_HASHBITS (512) #endif -#define SKEIN_MODIFIER_WORDS ( 2) /* number of modifier (tweak) words */ +#define SKEIN_MODIFIER_WORDS (2) /* number of modifier (tweak) words */ -#define SKEIN_256_STATE_WORDS ( 4) -#define SKEIN_512_STATE_WORDS ( 8) -#define SKEIN1024_STATE_WORDS (16) -#define SKEIN_MAX_STATE_WORDS (16) +#define SKEIN_256_STATE_WORDS (4) +#define SKEIN_512_STATE_WORDS (8) +#define SKEIN1024_STATE_WORDS (16) +#define SKEIN_MAX_STATE_WORDS (16) -#define SKEIN_256_STATE_BYTES ( 8*SKEIN_256_STATE_WORDS) -#define SKEIN_512_STATE_BYTES ( 8*SKEIN_512_STATE_WORDS) -#define SKEIN1024_STATE_BYTES ( 8*SKEIN1024_STATE_WORDS) +#define SKEIN_256_STATE_BYTES (8 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_STATE_BYTES (8 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_STATE_BYTES (8 * SKEIN1024_STATE_WORDS) -#define SKEIN_256_STATE_BITS (64*SKEIN_256_STATE_WORDS) -#define SKEIN_512_STATE_BITS (64*SKEIN_512_STATE_WORDS) -#define SKEIN1024_STATE_BITS (64*SKEIN1024_STATE_WORDS) +#define SKEIN_256_STATE_BITS (64 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_STATE_BITS (64 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_STATE_BITS (64 * SKEIN1024_STATE_WORDS) -#define SKEIN_256_BLOCK_BYTES ( 8*SKEIN_256_STATE_WORDS) -#define SKEIN_512_BLOCK_BYTES ( 8*SKEIN_512_STATE_WORDS) -#define SKEIN1024_BLOCK_BYTES ( 8*SKEIN1024_STATE_WORDS) +#define SKEIN_256_BLOCK_BYTES (8 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_BLOCK_BYTES (8 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_BLOCK_BYTES (8 * SKEIN1024_STATE_WORDS) -#define SKEIN_RND_SPECIAL (1000u) -#define SKEIN_RND_KEY_INITIAL (SKEIN_RND_SPECIAL+0u) -#define SKEIN_RND_KEY_INJECT (SKEIN_RND_SPECIAL+1u) -#define SKEIN_RND_FEED_FWD (SKEIN_RND_SPECIAL+2u) +#define SKEIN_RND_SPECIAL (1000u) +#define SKEIN_RND_KEY_INITIAL (SKEIN_RND_SPECIAL + 0u) +#define SKEIN_RND_KEY_INJECT (SKEIN_RND_SPECIAL + 1u) +#define SKEIN_RND_FEED_FWD (SKEIN_RND_SPECIAL + 2u) typedef struct { - size_t hashBitLen; /* size of hash result, in bits */ - size_t bCnt; /* current byte count in buffer b[] */ - u64b_t T[SKEIN_MODIFIER_WORDS]; /* tweak words: T[0]=byte cnt, T[1]=flags */ + size_t hashBitLen; /* size of hash result, in bits */ + size_t bCnt; /* current byte count in buffer b[] */ + u64b_t T[SKEIN_MODIFIER_WORDS]; /* tweak words: T[0]=byte cnt, T[1]=flags */ } Skein_Ctxt_Hdr_t; -typedef struct /* 256-bit Skein hash context structure */ +typedef struct /* 256-bit Skein hash context structure */ { - Skein_Ctxt_Hdr_t h; /* common header context variables */ - u64b_t X[SKEIN_256_STATE_WORDS]; /* chaining variables */ - u08b_t b[SKEIN_256_BLOCK_BYTES]; /* partial block buffer (8-byte aligned) */ + Skein_Ctxt_Hdr_t h; /* common header context variables */ + u64b_t X[SKEIN_256_STATE_WORDS]; /* chaining variables */ + u08b_t b[SKEIN_256_BLOCK_BYTES]; /* partial block buffer (8-byte aligned) */ } Skein_256_Ctxt_t; -typedef struct /* 512-bit Skein hash context structure */ +typedef struct /* 512-bit Skein hash context structure */ { - Skein_Ctxt_Hdr_t h; /* common header context variables */ - u64b_t X[SKEIN_512_STATE_WORDS]; /* chaining variables */ - u08b_t b[SKEIN_512_BLOCK_BYTES]; /* partial block buffer (8-byte aligned) */ + Skein_Ctxt_Hdr_t h; /* common header context variables */ + u64b_t X[SKEIN_512_STATE_WORDS]; /* chaining variables */ + u08b_t b[SKEIN_512_BLOCK_BYTES]; /* partial block buffer (8-byte aligned) */ } Skein_512_Ctxt_t; -typedef struct /* 1024-bit Skein hash context structure */ +typedef struct /* 1024-bit Skein hash context structure */ { - Skein_Ctxt_Hdr_t h; /* common header context variables */ - u64b_t X[SKEIN1024_STATE_WORDS]; /* chaining variables */ - u08b_t b[SKEIN1024_BLOCK_BYTES]; /* partial block buffer (8-byte aligned) */ + Skein_Ctxt_Hdr_t h; /* common header context variables */ + u64b_t X[SKEIN1024_STATE_WORDS]; /* chaining variables */ + u08b_t b[SKEIN1024_BLOCK_BYTES]; /* partial block buffer (8-byte aligned) */ } Skein1024_Ctxt_t; /* Skein APIs for (incremental) "straight hashing" */ #if SKEIN_256_NIST_MAX_HASH_BITS -static int Skein_256_Init (Skein_256_Ctxt_t *ctx, size_t hashBitLen); +static int Skein_256_Init(Skein_256_Ctxt_t* ctx, size_t hashBitLen); #endif -static int Skein_512_Init (Skein_512_Ctxt_t *ctx, size_t hashBitLen); -static int Skein1024_Init (Skein1024_Ctxt_t *ctx, size_t hashBitLen); +static int Skein_512_Init(Skein_512_Ctxt_t* ctx, size_t hashBitLen); +static int Skein1024_Init(Skein1024_Ctxt_t* ctx, size_t hashBitLen); -static int Skein_256_Update(Skein_256_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt); -static int Skein_512_Update(Skein_512_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt); -static int Skein1024_Update(Skein1024_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt); +static int Skein_256_Update(Skein_256_Ctxt_t* ctx, const u08b_t* msg, size_t msgByteCnt); +static int Skein_512_Update(Skein_512_Ctxt_t* ctx, const u08b_t* msg, size_t msgByteCnt); +static int Skein1024_Update(Skein1024_Ctxt_t* ctx, const u08b_t* msg, size_t msgByteCnt); -static int Skein_256_Final (Skein_256_Ctxt_t *ctx, u08b_t * hashVal); -static int Skein_512_Final (Skein_512_Ctxt_t *ctx, u08b_t * hashVal); -static int Skein1024_Final (Skein1024_Ctxt_t *ctx, u08b_t * hashVal); +static int Skein_256_Final(Skein_256_Ctxt_t* ctx, u08b_t* hashVal); +static int Skein_512_Final(Skein_512_Ctxt_t* ctx, u08b_t* hashVal); +static int Skein1024_Final(Skein1024_Ctxt_t* ctx, u08b_t* hashVal); /* ** Skein APIs for "extended" initialization: MAC keys, tree hashing. @@ -126,7 +126,7 @@ static int Skein1024_Final_Pad(Skein1024_Ctxt_t *ctx, u08b_t * hashVal); #define SKEIN_TREE_HASH (1) #endif #if 0 -#if SKEIN_TREE_HASH +#if SKEIN_TREE_HASH static int Skein_256_Output (Skein_256_Ctxt_t *ctx, u08b_t * hashVal); static int Skein_512_Output (Skein_512_Ctxt_t *ctx, u08b_t * hashVal); static int Skein1024_Output (Skein1024_Ctxt_t *ctx, u08b_t * hashVal); @@ -142,128 +142,146 @@ static int Skein1024_Output (Skein1024_Ctxt_t *ctx, u08b_t * hashVal); ******************************************************************/ /* tweak word T[1]: bit field starting positions */ -#define SKEIN_T1_BIT(BIT) ((BIT) - 64) /* offset 64 because it's the second word */ +#define SKEIN_T1_BIT(BIT) ((BIT)-64) /* offset 64 because it's the second word */ -#define SKEIN_T1_POS_TREE_LVL SKEIN_T1_BIT(112) /* bits 112..118: level in hash tree */ -#define SKEIN_T1_POS_BIT_PAD SKEIN_T1_BIT(119) /* bit 119 : partial final input byte */ -#define SKEIN_T1_POS_BLK_TYPE SKEIN_T1_BIT(120) /* bits 120..125: type field */ -#define SKEIN_T1_POS_FIRST SKEIN_T1_BIT(126) /* bits 126 : first block flag */ -#define SKEIN_T1_POS_FINAL SKEIN_T1_BIT(127) /* bit 127 : final block flag */ +#define SKEIN_T1_POS_TREE_LVL SKEIN_T1_BIT(112) /* bits 112..118: level in hash tree */ +#define SKEIN_T1_POS_BIT_PAD SKEIN_T1_BIT(119) /* bit 119 : partial final input byte */ +#define SKEIN_T1_POS_BLK_TYPE SKEIN_T1_BIT(120) /* bits 120..125: type field */ +#define SKEIN_T1_POS_FIRST SKEIN_T1_BIT(126) /* bits 126 : first block flag */ +#define SKEIN_T1_POS_FINAL SKEIN_T1_BIT(127) /* bit 127 : final block flag */ /* tweak word T[1]: flag bit definition(s) */ -#define SKEIN_T1_FLAG_FIRST (((u64b_t) 1 ) << SKEIN_T1_POS_FIRST) -#define SKEIN_T1_FLAG_FINAL (((u64b_t) 1 ) << SKEIN_T1_POS_FINAL) -#define SKEIN_T1_FLAG_BIT_PAD (((u64b_t) 1 ) << SKEIN_T1_POS_BIT_PAD) +#define SKEIN_T1_FLAG_FIRST (((u64b_t)1) << SKEIN_T1_POS_FIRST) +#define SKEIN_T1_FLAG_FINAL (((u64b_t)1) << SKEIN_T1_POS_FINAL) +#define SKEIN_T1_FLAG_BIT_PAD (((u64b_t)1) << SKEIN_T1_POS_BIT_PAD) /* tweak word T[1]: tree level bit field mask */ -#define SKEIN_T1_TREE_LVL_MASK (((u64b_t)0x7F) << SKEIN_T1_POS_TREE_LVL) -#define SKEIN_T1_TREE_LEVEL(n) (((u64b_t) (n)) << SKEIN_T1_POS_TREE_LVL) +#define SKEIN_T1_TREE_LVL_MASK (((u64b_t)0x7F) << SKEIN_T1_POS_TREE_LVL) +#define SKEIN_T1_TREE_LEVEL(n) (((u64b_t)(n)) << SKEIN_T1_POS_TREE_LVL) /* tweak word T[1]: block type field */ -#define SKEIN_BLK_TYPE_KEY ( 0) /* key, for MAC and KDF */ -#define SKEIN_BLK_TYPE_CFG ( 4) /* configuration block */ -#define SKEIN_BLK_TYPE_PERS ( 8) /* personalization string */ -#define SKEIN_BLK_TYPE_PK (12) /* public key (for digital signature hashing) */ -#define SKEIN_BLK_TYPE_KDF (16) /* key identifier for KDF */ -#define SKEIN_BLK_TYPE_NONCE (20) /* nonce for PRNG */ -#define SKEIN_BLK_TYPE_MSG (48) /* message processing */ -#define SKEIN_BLK_TYPE_OUT (63) /* output stage */ -#define SKEIN_BLK_TYPE_MASK (63) /* bit field mask */ - -#define SKEIN_T1_BLK_TYPE(T) (((u64b_t) (SKEIN_BLK_TYPE_##T)) << SKEIN_T1_POS_BLK_TYPE) -#define SKEIN_T1_BLK_TYPE_KEY SKEIN_T1_BLK_TYPE(KEY) /* key, for MAC and KDF */ -#define SKEIN_T1_BLK_TYPE_CFG SKEIN_T1_BLK_TYPE(CFG) /* configuration block */ -#define SKEIN_T1_BLK_TYPE_PERS SKEIN_T1_BLK_TYPE(PERS) /* personalization string */ -#define SKEIN_T1_BLK_TYPE_PK SKEIN_T1_BLK_TYPE(PK) /* public key (for digital signature hashing) */ -#define SKEIN_T1_BLK_TYPE_KDF SKEIN_T1_BLK_TYPE(KDF) /* key identifier for KDF */ -#define SKEIN_T1_BLK_TYPE_NONCE SKEIN_T1_BLK_TYPE(NONCE)/* nonce for PRNG */ -#define SKEIN_T1_BLK_TYPE_MSG SKEIN_T1_BLK_TYPE(MSG) /* message processing */ -#define SKEIN_T1_BLK_TYPE_OUT SKEIN_T1_BLK_TYPE(OUT) /* output stage */ -#define SKEIN_T1_BLK_TYPE_MASK SKEIN_T1_BLK_TYPE(MASK) /* field bit mask */ - -#define SKEIN_T1_BLK_TYPE_CFG_FINAL (SKEIN_T1_BLK_TYPE_CFG | SKEIN_T1_FLAG_FINAL) -#define SKEIN_T1_BLK_TYPE_OUT_FINAL (SKEIN_T1_BLK_TYPE_OUT | SKEIN_T1_FLAG_FINAL) - -#define SKEIN_VERSION (1) - -#ifndef SKEIN_ID_STRING_LE /* allow compile-time personalization */ -#define SKEIN_ID_STRING_LE (0x33414853) /* "SHA3" (little-endian)*/ -#endif - -#define SKEIN_MK_64(hi32,lo32) ((lo32) + (((u64b_t) (hi32)) << 32)) -#define SKEIN_SCHEMA_VER SKEIN_MK_64(SKEIN_VERSION,SKEIN_ID_STRING_LE) -#define SKEIN_KS_PARITY SKEIN_MK_64(0x1BD11BDA,0xA9FC1A22) - -#define SKEIN_CFG_STR_LEN (4*8) +#define SKEIN_BLK_TYPE_KEY (0) /* key, for MAC and KDF */ +#define SKEIN_BLK_TYPE_CFG (4) /* configuration block */ +#define SKEIN_BLK_TYPE_PERS (8) /* personalization string */ +#define SKEIN_BLK_TYPE_PK (12) /* public key (for digital signature hashing) */ +#define SKEIN_BLK_TYPE_KDF (16) /* key identifier for KDF */ +#define SKEIN_BLK_TYPE_NONCE (20) /* nonce for PRNG */ +#define SKEIN_BLK_TYPE_MSG (48) /* message processing */ +#define SKEIN_BLK_TYPE_OUT (63) /* output stage */ +#define SKEIN_BLK_TYPE_MASK (63) /* bit field mask */ + +#define SKEIN_T1_BLK_TYPE(T) (((u64b_t)(SKEIN_BLK_TYPE_##T)) << SKEIN_T1_POS_BLK_TYPE) +#define SKEIN_T1_BLK_TYPE_KEY SKEIN_T1_BLK_TYPE(KEY) /* key, for MAC and KDF */ +#define SKEIN_T1_BLK_TYPE_CFG SKEIN_T1_BLK_TYPE(CFG) /* configuration block */ +#define SKEIN_T1_BLK_TYPE_PERS SKEIN_T1_BLK_TYPE(PERS) /* personalization string */ +#define SKEIN_T1_BLK_TYPE_PK SKEIN_T1_BLK_TYPE(PK) /* public key (for digital signature hashing) */ +#define SKEIN_T1_BLK_TYPE_KDF SKEIN_T1_BLK_TYPE(KDF) /* key identifier for KDF */ +#define SKEIN_T1_BLK_TYPE_NONCE SKEIN_T1_BLK_TYPE(NONCE) /* nonce for PRNG */ +#define SKEIN_T1_BLK_TYPE_MSG SKEIN_T1_BLK_TYPE(MSG) /* message processing */ +#define SKEIN_T1_BLK_TYPE_OUT SKEIN_T1_BLK_TYPE(OUT) /* output stage */ +#define SKEIN_T1_BLK_TYPE_MASK SKEIN_T1_BLK_TYPE(MASK) /* field bit mask */ + +#define SKEIN_T1_BLK_TYPE_CFG_FINAL (SKEIN_T1_BLK_TYPE_CFG | SKEIN_T1_FLAG_FINAL) +#define SKEIN_T1_BLK_TYPE_OUT_FINAL (SKEIN_T1_BLK_TYPE_OUT | SKEIN_T1_FLAG_FINAL) + +#define SKEIN_VERSION (1) + +#ifndef SKEIN_ID_STRING_LE /* allow compile-time personalization */ +#define SKEIN_ID_STRING_LE (0x33414853) /* "SHA3" (little-endian)*/ +#endif + +#define SKEIN_MK_64(hi32, lo32) ((lo32) + (((u64b_t)(hi32)) << 32)) +#define SKEIN_SCHEMA_VER SKEIN_MK_64(SKEIN_VERSION, SKEIN_ID_STRING_LE) +#define SKEIN_KS_PARITY SKEIN_MK_64(0x1BD11BDA, 0xA9FC1A22) + +#define SKEIN_CFG_STR_LEN (4 * 8) /* bit field definitions in config block treeInfo word */ -#define SKEIN_CFG_TREE_LEAF_SIZE_POS ( 0) -#define SKEIN_CFG_TREE_NODE_SIZE_POS ( 8) -#define SKEIN_CFG_TREE_MAX_LEVEL_POS (16) +#define SKEIN_CFG_TREE_LEAF_SIZE_POS (0) +#define SKEIN_CFG_TREE_NODE_SIZE_POS (8) +#define SKEIN_CFG_TREE_MAX_LEVEL_POS (16) -#define SKEIN_CFG_TREE_LEAF_SIZE_MSK (((u64b_t) 0xFF) << SKEIN_CFG_TREE_LEAF_SIZE_POS) -#define SKEIN_CFG_TREE_NODE_SIZE_MSK (((u64b_t) 0xFF) << SKEIN_CFG_TREE_NODE_SIZE_POS) -#define SKEIN_CFG_TREE_MAX_LEVEL_MSK (((u64b_t) 0xFF) << SKEIN_CFG_TREE_MAX_LEVEL_POS) +#define SKEIN_CFG_TREE_LEAF_SIZE_MSK (((u64b_t)0xFF) << SKEIN_CFG_TREE_LEAF_SIZE_POS) +#define SKEIN_CFG_TREE_NODE_SIZE_MSK (((u64b_t)0xFF) << SKEIN_CFG_TREE_NODE_SIZE_POS) +#define SKEIN_CFG_TREE_MAX_LEVEL_MSK (((u64b_t)0xFF) << SKEIN_CFG_TREE_MAX_LEVEL_POS) -#define SKEIN_CFG_TREE_INFO(leaf,node,maxLvl) \ - ( (((u64b_t)(leaf )) << SKEIN_CFG_TREE_LEAF_SIZE_POS) | \ - (((u64b_t)(node )) << SKEIN_CFG_TREE_NODE_SIZE_POS) | \ - (((u64b_t)(maxLvl)) << SKEIN_CFG_TREE_MAX_LEVEL_POS) ) +#define SKEIN_CFG_TREE_INFO(leaf, node, maxLvl) \ + ((((u64b_t)(leaf)) << SKEIN_CFG_TREE_LEAF_SIZE_POS) | \ + (((u64b_t)(node)) << SKEIN_CFG_TREE_NODE_SIZE_POS) | \ + (((u64b_t)(maxLvl)) << SKEIN_CFG_TREE_MAX_LEVEL_POS)) -#define SKEIN_CFG_TREE_INFO_SEQUENTIAL SKEIN_CFG_TREE_INFO(0,0,0) /* use as treeInfo in InitExt() call for sequential processing */ +#define SKEIN_CFG_TREE_INFO_SEQUENTIAL SKEIN_CFG_TREE_INFO(0, 0, 0) /* use as treeInfo in InitExt() call for sequential processing */ /* ** Skein macros for getting/setting tweak words, etc. ** These are useful for partial input bytes, hash tree init/update, etc. **/ -#define Skein_Get_Tweak(ctxPtr,TWK_NUM) ((ctxPtr)->h.T[TWK_NUM]) -#define Skein_Set_Tweak(ctxPtr,TWK_NUM,tVal) {(ctxPtr)->h.T[TWK_NUM] = (tVal);} +#define Skein_Get_Tweak(ctxPtr, TWK_NUM) ((ctxPtr)->h.T[TWK_NUM]) +#define Skein_Set_Tweak(ctxPtr, TWK_NUM, tVal) \ + { \ + (ctxPtr)->h.T[TWK_NUM] = (tVal); \ + } -#define Skein_Get_T0(ctxPtr) Skein_Get_Tweak(ctxPtr,0) -#define Skein_Get_T1(ctxPtr) Skein_Get_Tweak(ctxPtr,1) -#define Skein_Set_T0(ctxPtr,T0) Skein_Set_Tweak(ctxPtr,0,T0) -#define Skein_Set_T1(ctxPtr,T1) Skein_Set_Tweak(ctxPtr,1,T1) +#define Skein_Get_T0(ctxPtr) Skein_Get_Tweak(ctxPtr, 0) +#define Skein_Get_T1(ctxPtr) Skein_Get_Tweak(ctxPtr, 1) +#define Skein_Set_T0(ctxPtr, T0) Skein_Set_Tweak(ctxPtr, 0, T0) +#define Skein_Set_T1(ctxPtr, T1) Skein_Set_Tweak(ctxPtr, 1, T1) /* set both tweak words at once */ -#define Skein_Set_T0_T1(ctxPtr,T0,T1) \ -{ \ - Skein_Set_T0(ctxPtr,(T0)); \ - Skein_Set_T1(ctxPtr,(T1)); \ -} +#define Skein_Set_T0_T1(ctxPtr, T0, T1) \ + { \ + Skein_Set_T0(ctxPtr, (T0)); \ + Skein_Set_T1(ctxPtr, (T1)); \ + } -#define Skein_Set_Type(ctxPtr,BLK_TYPE) \ - Skein_Set_T1(ctxPtr,SKEIN_T1_BLK_TYPE_##BLK_TYPE) +#define Skein_Set_Type(ctxPtr, BLK_TYPE) \ + Skein_Set_T1(ctxPtr, SKEIN_T1_BLK_TYPE_##BLK_TYPE) /* set up for starting with a new type: h.T[0]=0; h.T[1] = NEW_TYPE; h.bCnt=0; */ -#define Skein_Start_New_Type(ctxPtr,BLK_TYPE) \ -{ Skein_Set_T0_T1(ctxPtr,0,SKEIN_T1_FLAG_FIRST | SKEIN_T1_BLK_TYPE_##BLK_TYPE); (ctxPtr)->h.bCnt=0; } +#define Skein_Start_New_Type(ctxPtr, BLK_TYPE) \ + { \ + Skein_Set_T0_T1(ctxPtr, 0, SKEIN_T1_FLAG_FIRST | SKEIN_T1_BLK_TYPE_##BLK_TYPE); \ + (ctxPtr)->h.bCnt = 0; \ + } -#define Skein_Clear_First_Flag(hdr) { (hdr).T[1] &= ~SKEIN_T1_FLAG_FIRST; } -#define Skein_Set_Bit_Pad_Flag(hdr) { (hdr).T[1] |= SKEIN_T1_FLAG_BIT_PAD; } +#define Skein_Clear_First_Flag(hdr) \ + { \ + (hdr).T[1] &= ~SKEIN_T1_FLAG_FIRST; \ + } +#define Skein_Set_Bit_Pad_Flag(hdr) \ + { \ + (hdr).T[1] |= SKEIN_T1_FLAG_BIT_PAD; \ + } -#define Skein_Set_Tree_Level(hdr,height) { (hdr).T[1] |= SKEIN_T1_TREE_LEVEL(height);} +#define Skein_Set_Tree_Level(hdr, height) \ + { \ + (hdr).T[1] |= SKEIN_T1_TREE_LEVEL(height); \ + } /***************************************************************** ** "Internal" Skein definitions for debugging and error checking ******************************************************************/ -#define Skein_Show_Block(bits,ctx,X,blkPtr,wPtr,ksEvenPtr,ksOddPtr) -#define Skein_Show_Round(bits,ctx,r,X) -#define Skein_Show_R_Ptr(bits,ctx,r,X_ptr) -#define Skein_Show_Final(bits,ctx,cnt,outPtr) -#define Skein_Show_Key(bits,ctx,key,keyBytes) - - -#ifndef SKEIN_ERR_CHECK /* run-time checks (e.g., bad params, uninitialized context)? */ -#define Skein_Assert(x,retCode)/* default: ignore all Asserts, for performance */ +#define Skein_Show_Block(bits, ctx, X, blkPtr, wPtr, ksEvenPtr, ksOddPtr) +#define Skein_Show_Round(bits, ctx, r, X) +#define Skein_Show_R_Ptr(bits, ctx, r, X_ptr) +#define Skein_Show_Final(bits, ctx, cnt, outPtr) +#define Skein_Show_Key(bits, ctx, key, keyBytes) + +#ifndef SKEIN_ERR_CHECK /* run-time checks (e.g., bad params, uninitialized context)? */ +#define Skein_Assert(x, retCode) /* default: ignore all Asserts, for performance */ #define Skein_assert(x) -#elif defined(SKEIN_ASSERT) +#elif defined(SKEIN_ASSERT) #include -#define Skein_Assert(x,retCode) assert(x) -#define Skein_assert(x) assert(x) +#define Skein_Assert(x, retCode) assert(x) +#define Skein_assert(x) assert(x) #else #include -#define Skein_Assert(x,retCode) { if (!(x)) return retCode; } /* caller error */ -#define Skein_assert(x) assert(x) /* internal error */ +#define Skein_Assert(x, retCode) \ + { \ + if(!(x)) \ + return retCode; \ + } /* caller error */ +#define Skein_assert(x) assert(x) /* internal error */ #endif /***************************************************************** @@ -271,48 +289,135 @@ static int Skein1024_Output (Skein1024_Ctxt_t *ctx, u08b_t * hashVal); ******************************************************************/ enum { - /* Skein_256 round rotation constants */ - R_256_0_0=14, R_256_0_1=16, - R_256_1_0=52, R_256_1_1=57, - R_256_2_0=23, R_256_2_1=40, - R_256_3_0= 5, R_256_3_1=37, - R_256_4_0=25, R_256_4_1=33, - R_256_5_0=46, R_256_5_1=12, - R_256_6_0=58, R_256_6_1=22, - R_256_7_0=32, R_256_7_1=32, - - /* Skein_512 round rotation constants */ - R_512_0_0=46, R_512_0_1=36, R_512_0_2=19, R_512_0_3=37, - R_512_1_0=33, R_512_1_1=27, R_512_1_2=14, R_512_1_3=42, - R_512_2_0=17, R_512_2_1=49, R_512_2_2=36, R_512_2_3=39, - R_512_3_0=44, R_512_3_1= 9, R_512_3_2=54, R_512_3_3=56, - R_512_4_0=39, R_512_4_1=30, R_512_4_2=34, R_512_4_3=24, - R_512_5_0=13, R_512_5_1=50, R_512_5_2=10, R_512_5_3=17, - R_512_6_0=25, R_512_6_1=29, R_512_6_2=39, R_512_6_3=43, - R_512_7_0= 8, R_512_7_1=35, R_512_7_2=56, R_512_7_3=22, - - /* Skein1024 round rotation constants */ - R1024_0_0=24, R1024_0_1=13, R1024_0_2= 8, R1024_0_3=47, R1024_0_4= 8, R1024_0_5=17, R1024_0_6=22, R1024_0_7=37, - R1024_1_0=38, R1024_1_1=19, R1024_1_2=10, R1024_1_3=55, R1024_1_4=49, R1024_1_5=18, R1024_1_6=23, R1024_1_7=52, - R1024_2_0=33, R1024_2_1= 4, R1024_2_2=51, R1024_2_3=13, R1024_2_4=34, R1024_2_5=41, R1024_2_6=59, R1024_2_7=17, - R1024_3_0= 5, R1024_3_1=20, R1024_3_2=48, R1024_3_3=41, R1024_3_4=47, R1024_3_5=28, R1024_3_6=16, R1024_3_7=25, - R1024_4_0=41, R1024_4_1= 9, R1024_4_2=37, R1024_4_3=31, R1024_4_4=12, R1024_4_5=47, R1024_4_6=44, R1024_4_7=30, - R1024_5_0=16, R1024_5_1=34, R1024_5_2=56, R1024_5_3=51, R1024_5_4= 4, R1024_5_5=53, R1024_5_6=42, R1024_5_7=41, - R1024_6_0=31, R1024_6_1=44, R1024_6_2=47, R1024_6_3=46, R1024_6_4=19, R1024_6_5=42, R1024_6_6=44, R1024_6_7=25, - R1024_7_0= 9, R1024_7_1=48, R1024_7_2=35, R1024_7_3=52, R1024_7_4=23, R1024_7_5=31, R1024_7_6=37, R1024_7_7=20 + /* Skein_256 round rotation constants */ + R_256_0_0 = 14, + R_256_0_1 = 16, + R_256_1_0 = 52, + R_256_1_1 = 57, + R_256_2_0 = 23, + R_256_2_1 = 40, + R_256_3_0 = 5, + R_256_3_1 = 37, + R_256_4_0 = 25, + R_256_4_1 = 33, + R_256_5_0 = 46, + R_256_5_1 = 12, + R_256_6_0 = 58, + R_256_6_1 = 22, + R_256_7_0 = 32, + R_256_7_1 = 32, + + /* Skein_512 round rotation constants */ + R_512_0_0 = 46, + R_512_0_1 = 36, + R_512_0_2 = 19, + R_512_0_3 = 37, + R_512_1_0 = 33, + R_512_1_1 = 27, + R_512_1_2 = 14, + R_512_1_3 = 42, + R_512_2_0 = 17, + R_512_2_1 = 49, + R_512_2_2 = 36, + R_512_2_3 = 39, + R_512_3_0 = 44, + R_512_3_1 = 9, + R_512_3_2 = 54, + R_512_3_3 = 56, + R_512_4_0 = 39, + R_512_4_1 = 30, + R_512_4_2 = 34, + R_512_4_3 = 24, + R_512_5_0 = 13, + R_512_5_1 = 50, + R_512_5_2 = 10, + R_512_5_3 = 17, + R_512_6_0 = 25, + R_512_6_1 = 29, + R_512_6_2 = 39, + R_512_6_3 = 43, + R_512_7_0 = 8, + R_512_7_1 = 35, + R_512_7_2 = 56, + R_512_7_3 = 22, + + /* Skein1024 round rotation constants */ + R1024_0_0 = 24, + R1024_0_1 = 13, + R1024_0_2 = 8, + R1024_0_3 = 47, + R1024_0_4 = 8, + R1024_0_5 = 17, + R1024_0_6 = 22, + R1024_0_7 = 37, + R1024_1_0 = 38, + R1024_1_1 = 19, + R1024_1_2 = 10, + R1024_1_3 = 55, + R1024_1_4 = 49, + R1024_1_5 = 18, + R1024_1_6 = 23, + R1024_1_7 = 52, + R1024_2_0 = 33, + R1024_2_1 = 4, + R1024_2_2 = 51, + R1024_2_3 = 13, + R1024_2_4 = 34, + R1024_2_5 = 41, + R1024_2_6 = 59, + R1024_2_7 = 17, + R1024_3_0 = 5, + R1024_3_1 = 20, + R1024_3_2 = 48, + R1024_3_3 = 41, + R1024_3_4 = 47, + R1024_3_5 = 28, + R1024_3_6 = 16, + R1024_3_7 = 25, + R1024_4_0 = 41, + R1024_4_1 = 9, + R1024_4_2 = 37, + R1024_4_3 = 31, + R1024_4_4 = 12, + R1024_4_5 = 47, + R1024_4_6 = 44, + R1024_4_7 = 30, + R1024_5_0 = 16, + R1024_5_1 = 34, + R1024_5_2 = 56, + R1024_5_3 = 51, + R1024_5_4 = 4, + R1024_5_5 = 53, + R1024_5_6 = 42, + R1024_5_7 = 41, + R1024_6_0 = 31, + R1024_6_1 = 44, + R1024_6_2 = 47, + R1024_6_3 = 46, + R1024_6_4 = 19, + R1024_6_5 = 42, + R1024_6_6 = 44, + R1024_6_7 = 25, + R1024_7_0 = 9, + R1024_7_1 = 48, + R1024_7_2 = 35, + R1024_7_3 = 52, + R1024_7_4 = 23, + R1024_7_5 = 31, + R1024_7_6 = 37, + R1024_7_7 = 20 }; #ifndef SKEIN_ROUNDS -#define SKEIN_256_ROUNDS_TOTAL (72) /* number of rounds for the different block sizes */ +#define SKEIN_256_ROUNDS_TOTAL (72) /* number of rounds for the different block sizes */ #define SKEIN_512_ROUNDS_TOTAL (72) #define SKEIN1024_ROUNDS_TOTAL (80) -#else /* allow command-line define in range 8*(5..14) */ -#define SKEIN_256_ROUNDS_TOTAL (8*((((SKEIN_ROUNDS/100) + 5) % 10) + 5)) -#define SKEIN_512_ROUNDS_TOTAL (8*((((SKEIN_ROUNDS/ 10) + 5) % 10) + 5)) -#define SKEIN1024_ROUNDS_TOTAL (8*((((SKEIN_ROUNDS ) + 5) % 10) + 5)) +#else /* allow command-line define in range 8*(5..14) */ +#define SKEIN_256_ROUNDS_TOTAL (8 * ((((SKEIN_ROUNDS / 100) + 5) % 10) + 5)) +#define SKEIN_512_ROUNDS_TOTAL (8 * ((((SKEIN_ROUNDS / 10) + 5) % 10) + 5)) +#define SKEIN1024_ROUNDS_TOTAL (8 * ((((SKEIN_ROUNDS) + 5) % 10) + 5)) #endif - /* ***************** Pre-computed Skein IVs ******************* ** @@ -332,239 +437,233 @@ enum /* blkSize = 256 bits. hashSize = 128 bits */ const u64b_t SKEIN_256_IV_128[] = { - MK_64(0xE1111906,0x964D7260), - MK_64(0x883DAAA7,0x7C8D811C), - MK_64(0x10080DF4,0x91960F7A), - MK_64(0xCCF7DDE5,0xB45BC1C2) - }; + MK_64(0xE1111906, 0x964D7260), + MK_64(0x883DAAA7, 0x7C8D811C), + MK_64(0x10080DF4, 0x91960F7A), + MK_64(0xCCF7DDE5, 0xB45BC1C2)}; /* blkSize = 256 bits. hashSize = 160 bits */ const u64b_t SKEIN_256_IV_160[] = { - MK_64(0x14202314,0x72825E98), - MK_64(0x2AC4E9A2,0x5A77E590), - MK_64(0xD47A5856,0x8838D63E), - MK_64(0x2DD2E496,0x8586AB7D) - }; + MK_64(0x14202314, 0x72825E98), + MK_64(0x2AC4E9A2, 0x5A77E590), + MK_64(0xD47A5856, 0x8838D63E), + MK_64(0x2DD2E496, 0x8586AB7D)}; /* blkSize = 256 bits. hashSize = 224 bits */ const u64b_t SKEIN_256_IV_224[] = { - MK_64(0xC6098A8C,0x9AE5EA0B), - MK_64(0x876D5686,0x08C5191C), - MK_64(0x99CB88D7,0xD7F53884), - MK_64(0x384BDDB1,0xAEDDB5DE) - }; + MK_64(0xC6098A8C, 0x9AE5EA0B), + MK_64(0x876D5686, 0x08C5191C), + MK_64(0x99CB88D7, 0xD7F53884), + MK_64(0x384BDDB1, 0xAEDDB5DE)}; /* blkSize = 256 bits. hashSize = 256 bits */ const u64b_t SKEIN_256_IV_256[] = { - MK_64(0xFC9DA860,0xD048B449), - MK_64(0x2FCA6647,0x9FA7D833), - MK_64(0xB33BC389,0x6656840F), - MK_64(0x6A54E920,0xFDE8DA69) - }; + MK_64(0xFC9DA860, 0xD048B449), + MK_64(0x2FCA6647, 0x9FA7D833), + MK_64(0xB33BC389, 0x6656840F), + MK_64(0x6A54E920, 0xFDE8DA69)}; /* blkSize = 512 bits. hashSize = 128 bits */ const u64b_t SKEIN_512_IV_128[] = { - MK_64(0xA8BC7BF3,0x6FBF9F52), - MK_64(0x1E9872CE,0xBD1AF0AA), - MK_64(0x309B1790,0xB32190D3), - MK_64(0xBCFBB854,0x3F94805C), - MK_64(0x0DA61BCD,0x6E31B11B), - MK_64(0x1A18EBEA,0xD46A32E3), - MK_64(0xA2CC5B18,0xCE84AA82), - MK_64(0x6982AB28,0x9D46982D) - }; + MK_64(0xA8BC7BF3, 0x6FBF9F52), + MK_64(0x1E9872CE, 0xBD1AF0AA), + MK_64(0x309B1790, 0xB32190D3), + MK_64(0xBCFBB854, 0x3F94805C), + MK_64(0x0DA61BCD, 0x6E31B11B), + MK_64(0x1A18EBEA, 0xD46A32E3), + MK_64(0xA2CC5B18, 0xCE84AA82), + MK_64(0x6982AB28, 0x9D46982D)}; /* blkSize = 512 bits. hashSize = 160 bits */ const u64b_t SKEIN_512_IV_160[] = { - MK_64(0x28B81A2A,0xE013BD91), - MK_64(0xC2F11668,0xB5BDF78F), - MK_64(0x1760D8F3,0xF6A56F12), - MK_64(0x4FB74758,0x8239904F), - MK_64(0x21EDE07F,0x7EAF5056), - MK_64(0xD908922E,0x63ED70B8), - MK_64(0xB8EC76FF,0xECCB52FA), - MK_64(0x01A47BB8,0xA3F27A6E) - }; + MK_64(0x28B81A2A, 0xE013BD91), + MK_64(0xC2F11668, 0xB5BDF78F), + MK_64(0x1760D8F3, 0xF6A56F12), + MK_64(0x4FB74758, 0x8239904F), + MK_64(0x21EDE07F, 0x7EAF5056), + MK_64(0xD908922E, 0x63ED70B8), + MK_64(0xB8EC76FF, 0xECCB52FA), + MK_64(0x01A47BB8, 0xA3F27A6E)}; /* blkSize = 512 bits. hashSize = 224 bits */ const u64b_t SKEIN_512_IV_224[] = { - MK_64(0xCCD06162,0x48677224), - MK_64(0xCBA65CF3,0xA92339EF), - MK_64(0x8CCD69D6,0x52FF4B64), - MK_64(0x398AED7B,0x3AB890B4), - MK_64(0x0F59D1B1,0x457D2BD0), - MK_64(0x6776FE65,0x75D4EB3D), - MK_64(0x99FBC70E,0x997413E9), - MK_64(0x9E2CFCCF,0xE1C41EF7) - }; + MK_64(0xCCD06162, 0x48677224), + MK_64(0xCBA65CF3, 0xA92339EF), + MK_64(0x8CCD69D6, 0x52FF4B64), + MK_64(0x398AED7B, 0x3AB890B4), + MK_64(0x0F59D1B1, 0x457D2BD0), + MK_64(0x6776FE65, 0x75D4EB3D), + MK_64(0x99FBC70E, 0x997413E9), + MK_64(0x9E2CFCCF, 0xE1C41EF7)}; /* blkSize = 512 bits. hashSize = 256 bits */ const u64b_t SKEIN_512_IV_256[] = { - MK_64(0xCCD044A1,0x2FDB3E13), - MK_64(0xE8359030,0x1A79A9EB), - MK_64(0x55AEA061,0x4F816E6F), - MK_64(0x2A2767A4,0xAE9B94DB), - MK_64(0xEC06025E,0x74DD7683), - MK_64(0xE7A436CD,0xC4746251), - MK_64(0xC36FBAF9,0x393AD185), - MK_64(0x3EEDBA18,0x33EDFC13) - }; + MK_64(0xCCD044A1, 0x2FDB3E13), + MK_64(0xE8359030, 0x1A79A9EB), + MK_64(0x55AEA061, 0x4F816E6F), + MK_64(0x2A2767A4, 0xAE9B94DB), + MK_64(0xEC06025E, 0x74DD7683), + MK_64(0xE7A436CD, 0xC4746251), + MK_64(0xC36FBAF9, 0x393AD185), + MK_64(0x3EEDBA18, 0x33EDFC13)}; /* blkSize = 512 bits. hashSize = 384 bits */ const u64b_t SKEIN_512_IV_384[] = { - MK_64(0xA3F6C6BF,0x3A75EF5F), - MK_64(0xB0FEF9CC,0xFD84FAA4), - MK_64(0x9D77DD66,0x3D770CFE), - MK_64(0xD798CBF3,0xB468FDDA), - MK_64(0x1BC4A666,0x8A0E4465), - MK_64(0x7ED7D434,0xE5807407), - MK_64(0x548FC1AC,0xD4EC44D6), - MK_64(0x266E1754,0x6AA18FF8) - }; + MK_64(0xA3F6C6BF, 0x3A75EF5F), + MK_64(0xB0FEF9CC, 0xFD84FAA4), + MK_64(0x9D77DD66, 0x3D770CFE), + MK_64(0xD798CBF3, 0xB468FDDA), + MK_64(0x1BC4A666, 0x8A0E4465), + MK_64(0x7ED7D434, 0xE5807407), + MK_64(0x548FC1AC, 0xD4EC44D6), + MK_64(0x266E1754, 0x6AA18FF8)}; /* blkSize = 512 bits. hashSize = 512 bits */ const u64b_t SKEIN_512_IV_512[] = { - MK_64(0x4903ADFF,0x749C51CE), - MK_64(0x0D95DE39,0x9746DF03), - MK_64(0x8FD19341,0x27C79BCE), - MK_64(0x9A255629,0xFF352CB1), - MK_64(0x5DB62599,0xDF6CA7B0), - MK_64(0xEABE394C,0xA9D5C3F4), - MK_64(0x991112C7,0x1A75B523), - MK_64(0xAE18A40B,0x660FCC33) - }; + MK_64(0x4903ADFF, 0x749C51CE), + MK_64(0x0D95DE39, 0x9746DF03), + MK_64(0x8FD19341, 0x27C79BCE), + MK_64(0x9A255629, 0xFF352CB1), + MK_64(0x5DB62599, 0xDF6CA7B0), + MK_64(0xEABE394C, 0xA9D5C3F4), + MK_64(0x991112C7, 0x1A75B523), + MK_64(0xAE18A40B, 0x660FCC33)}; /* blkSize = 1024 bits. hashSize = 384 bits */ const u64b_t SKEIN1024_IV_384[] = { - MK_64(0x5102B6B8,0xC1894A35), - MK_64(0xFEEBC9E3,0xFE8AF11A), - MK_64(0x0C807F06,0xE32BED71), - MK_64(0x60C13A52,0xB41A91F6), - MK_64(0x9716D35D,0xD4917C38), - MK_64(0xE780DF12,0x6FD31D3A), - MK_64(0x797846B6,0xC898303A), - MK_64(0xB172C2A8,0xB3572A3B), - MK_64(0xC9BC8203,0xA6104A6C), - MK_64(0x65909338,0xD75624F4), - MK_64(0x94BCC568,0x4B3F81A0), - MK_64(0x3EBBF51E,0x10ECFD46), - MK_64(0x2DF50F0B,0xEEB08542), - MK_64(0x3B5A6530,0x0DBC6516), - MK_64(0x484B9CD2,0x167BBCE1), - MK_64(0x2D136947,0xD4CBAFEA) - }; + MK_64(0x5102B6B8, 0xC1894A35), + MK_64(0xFEEBC9E3, 0xFE8AF11A), + MK_64(0x0C807F06, 0xE32BED71), + MK_64(0x60C13A52, 0xB41A91F6), + MK_64(0x9716D35D, 0xD4917C38), + MK_64(0xE780DF12, 0x6FD31D3A), + MK_64(0x797846B6, 0xC898303A), + MK_64(0xB172C2A8, 0xB3572A3B), + MK_64(0xC9BC8203, 0xA6104A6C), + MK_64(0x65909338, 0xD75624F4), + MK_64(0x94BCC568, 0x4B3F81A0), + MK_64(0x3EBBF51E, 0x10ECFD46), + MK_64(0x2DF50F0B, 0xEEB08542), + MK_64(0x3B5A6530, 0x0DBC6516), + MK_64(0x484B9CD2, 0x167BBCE1), + MK_64(0x2D136947, 0xD4CBAFEA)}; /* blkSize = 1024 bits. hashSize = 512 bits */ const u64b_t SKEIN1024_IV_512[] = { - MK_64(0xCAEC0E5D,0x7C1B1B18), - MK_64(0xA01B0E04,0x5F03E802), - MK_64(0x33840451,0xED912885), - MK_64(0x374AFB04,0xEAEC2E1C), - MK_64(0xDF25A0E2,0x813581F7), - MK_64(0xE4004093,0x8B12F9D2), - MK_64(0xA662D539,0xC2ED39B6), - MK_64(0xFA8B85CF,0x45D8C75A), - MK_64(0x8316ED8E,0x29EDE796), - MK_64(0x053289C0,0x2E9F91B8), - MK_64(0xC3F8EF1D,0x6D518B73), - MK_64(0xBDCEC3C4,0xD5EF332E), - MK_64(0x549A7E52,0x22974487), - MK_64(0x67070872,0x5B749816), - MK_64(0xB9CD28FB,0xF0581BD1), - MK_64(0x0E2940B8,0x15804974) - }; + MK_64(0xCAEC0E5D, 0x7C1B1B18), + MK_64(0xA01B0E04, 0x5F03E802), + MK_64(0x33840451, 0xED912885), + MK_64(0x374AFB04, 0xEAEC2E1C), + MK_64(0xDF25A0E2, 0x813581F7), + MK_64(0xE4004093, 0x8B12F9D2), + MK_64(0xA662D539, 0xC2ED39B6), + MK_64(0xFA8B85CF, 0x45D8C75A), + MK_64(0x8316ED8E, 0x29EDE796), + MK_64(0x053289C0, 0x2E9F91B8), + MK_64(0xC3F8EF1D, 0x6D518B73), + MK_64(0xBDCEC3C4, 0xD5EF332E), + MK_64(0x549A7E52, 0x22974487), + MK_64(0x67070872, 0x5B749816), + MK_64(0xB9CD28FB, 0xF0581BD1), + MK_64(0x0E2940B8, 0x15804974)}; /* blkSize = 1024 bits. hashSize = 1024 bits */ const u64b_t SKEIN1024_IV_1024[] = { - MK_64(0xD593DA07,0x41E72355), - MK_64(0x15B5E511,0xAC73E00C), - MK_64(0x5180E5AE,0xBAF2C4F0), - MK_64(0x03BD41D3,0xFCBCAFAF), - MK_64(0x1CAEC6FD,0x1983A898), - MK_64(0x6E510B8B,0xCDD0589F), - MK_64(0x77E2BDFD,0xC6394ADA), - MK_64(0xC11E1DB5,0x24DCB0A3), - MK_64(0xD6D14AF9,0xC6329AB5), - MK_64(0x6A9B0BFC,0x6EB67E0D), - MK_64(0x9243C60D,0xCCFF1332), - MK_64(0x1A1F1DDE,0x743F02D4), - MK_64(0x0996753C,0x10ED0BB8), - MK_64(0x6572DD22,0xF2B4969A), - MK_64(0x61FD3062,0xD00A579A), - MK_64(0x1DE0536E,0x8682E539) - }; - + MK_64(0xD593DA07, 0x41E72355), + MK_64(0x15B5E511, 0xAC73E00C), + MK_64(0x5180E5AE, 0xBAF2C4F0), + MK_64(0x03BD41D3, 0xFCBCAFAF), + MK_64(0x1CAEC6FD, 0x1983A898), + MK_64(0x6E510B8B, 0xCDD0589F), + MK_64(0x77E2BDFD, 0xC6394ADA), + MK_64(0xC11E1DB5, 0x24DCB0A3), + MK_64(0xD6D14AF9, 0xC6329AB5), + MK_64(0x6A9B0BFC, 0x6EB67E0D), + MK_64(0x9243C60D, 0xCCFF1332), + MK_64(0x1A1F1DDE, 0x743F02D4), + MK_64(0x0996753C, 0x10ED0BB8), + MK_64(0x6572DD22, 0xF2B4969A), + MK_64(0x61FD3062, 0xD00A579A), + MK_64(0x1DE0536E, 0x8682E539)}; #ifndef SKEIN_USE_ASM -#define SKEIN_USE_ASM (0) /* default is all C code (no ASM) */ +#define SKEIN_USE_ASM (0) /* default is all C code (no ASM) */ #endif #ifndef SKEIN_LOOP -#define SKEIN_LOOP 001 /* default: unroll 256 and 512, but not 1024 */ +#define SKEIN_LOOP 001 /* default: unroll 256 and 512, but not 1024 */ #endif -#define BLK_BITS (WCNT*64) /* some useful definitions for code here */ -#define KW_TWK_BASE (0) -#define KW_KEY_BASE (3) -#define ks (kw + KW_KEY_BASE) -#define ts (kw + KW_TWK_BASE) +#define BLK_BITS (WCNT * 64) /* some useful definitions for code here */ +#define KW_TWK_BASE (0) +#define KW_KEY_BASE (3) +#define ks (kw + KW_KEY_BASE) +#define ts (kw + KW_TWK_BASE) #ifdef SKEIN_DEBUG -#define DebugSaveTweak(ctx) { ctx->h.T[0] = ts[0]; ctx->h.T[1] = ts[1]; } +#define DebugSaveTweak(ctx) \ + { \ + ctx->h.T[0] = ts[0]; \ + ctx->h.T[1] = ts[1]; \ + } #else #define DebugSaveTweak(ctx) #endif /***************************** Skein_256 ******************************/ #if !(SKEIN_USE_ASM & 256) -static void Skein_256_Process_Block(Skein_256_Ctxt_t *ctx,const u08b_t *blkPtr,size_t blkCnt,size_t byteCntAdd) - { /* do it in C */ +static void Skein_256_Process_Block(Skein_256_Ctxt_t* ctx, const u08b_t* blkPtr, size_t blkCnt, size_t byteCntAdd) +{ /* do it in C */ enum - { + { WCNT = SKEIN_256_STATE_WORDS - }; -#undef RCNT -#define RCNT (SKEIN_256_ROUNDS_TOTAL/8) + }; +#undef RCNT +#define RCNT (SKEIN_256_ROUNDS_TOTAL / 8) -#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ -#define SKEIN_UNROLL_256 (((SKEIN_LOOP)/100)%10) +#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ +#define SKEIN_UNROLL_256 (((SKEIN_LOOP) / 100) % 10) #else #define SKEIN_UNROLL_256 (0) #endif #if SKEIN_UNROLL_256 -#if (RCNT % SKEIN_UNROLL_256) +#if(RCNT % SKEIN_UNROLL_256) #error "Invalid SKEIN_UNROLL_256" /* sanity check on unroll count */ #endif - size_t r; - u64b_t kw[WCNT+4+RCNT*2]; /* key schedule words : chaining vars + tweak + "rotation"*/ + size_t r; + u64b_t kw[WCNT + 4 + RCNT * 2]; /* key schedule words : chaining vars + tweak + "rotation"*/ #else - u64b_t kw[WCNT+4]; /* key schedule words : chaining vars + tweak */ + u64b_t kw[WCNT + 4]; /* key schedule words : chaining vars + tweak */ #endif - u64b_t X0,X1,X2,X3; /* local copy of context vars, for speed */ - u64b_t w [WCNT]; /* local copy of input block */ + u64b_t X0, X1, X2, X3; /* local copy of context vars, for speed */ + u64b_t w[WCNT]; /* local copy of input block */ #ifdef SKEIN_DEBUG - const u64b_t *Xptr[4]; /* use for debugging (help compiler put Xn in registers) */ - Xptr[0] = &X0; Xptr[1] = &X1; Xptr[2] = &X2; Xptr[3] = &X3; + const u64b_t* Xptr[4]; /* use for debugging (help compiler put Xn in registers) */ + Xptr[0] = &X0; + Xptr[1] = &X1; + Xptr[2] = &X2; + Xptr[3] = &X3; #endif - Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ + Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ ts[0] = ctx->h.T[0]; ts[1] = ctx->h.T[1]; - do { + do + { /* this implementation only supports 2**64 input bytes (no carry out here) */ - ts[0] += byteCntAdd; /* update processed length */ + ts[0] += byteCntAdd; /* update processed length */ /* precompute the key schedule for this block */ ks[0] = ctx->X[0]; @@ -575,114 +674,118 @@ static void Skein_256_Process_Block(Skein_256_Ctxt_t *ctx,const u08b_t *blkPtr,s ts[2] = ts[0] ^ ts[1]; - Skein_Get64_LSB_First(w,blkPtr,WCNT); /* get input block in little-endian format */ + Skein_Get64_LSB_First(w, blkPtr, WCNT); /* get input block in little-endian format */ DebugSaveTweak(ctx); - Skein_Show_Block(BLK_BITS,&ctx->h,ctx->X,blkPtr,w,ks,ts); + Skein_Show_Block(BLK_BITS, &ctx->h, ctx->X, blkPtr, w, ks, ts); - X0 = w[0] + ks[0]; /* do the first full key injection */ + X0 = w[0] + ks[0]; /* do the first full key injection */ X1 = w[1] + ks[1] + ts[0]; X2 = w[2] + ks[2] + ts[1]; X3 = w[3] + ks[3]; - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INITIAL,Xptr); /* show starting state values */ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INITIAL, Xptr); /* show starting state values */ blkPtr += SKEIN_256_BLOCK_BYTES; /* run the rounds */ -#define Round256(p0,p1,p2,p3,ROT,rNum) \ - X##p0 += X##p1; X##p1 = RotL_64(X##p1,ROT##_0); X##p1 ^= X##p0; \ - X##p2 += X##p3; X##p3 = RotL_64(X##p3,ROT##_1); X##p3 ^= X##p2; \ +#define Round256(p0, p1, p2, p3, ROT, rNum) \ + X##p0 += X##p1; \ + X##p1 = RotL_64(X##p1, ROT##_0); \ + X##p1 ^= X##p0; \ + X##p2 += X##p3; \ + X##p3 = RotL_64(X##p3, ROT##_1); \ + X##p3 ^= X##p2; #if SKEIN_UNROLL_256 == 0 -#define R256(p0,p1,p2,p3,ROT,rNum) /* fully unrolled */ \ - Round256(p0,p1,p2,p3,ROT,rNum) \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,rNum,Xptr); - -#define I256(R) \ - X0 += ks[((R)+1) % 5]; /* inject the key schedule value */ \ - X1 += ks[((R)+2) % 5] + ts[((R)+1) % 3]; \ - X2 += ks[((R)+3) % 5] + ts[((R)+2) % 3]; \ - X3 += ks[((R)+4) % 5] + (R)+1; \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr); -#else /* looping version */ -#define R256(p0,p1,p2,p3,ROT,rNum) \ - Round256(p0,p1,p2,p3,ROT,rNum) \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,4*(r-1)+rNum,Xptr); - -#define I256(R) \ - X0 += ks[r+(R)+0]; /* inject the key schedule value */ \ - X1 += ks[r+(R)+1] + ts[r+(R)+0]; \ - X2 += ks[r+(R)+2] + ts[r+(R)+1]; \ - X3 += ks[r+(R)+3] + r+(R) ; \ - ks[r + (R)+4 ] = ks[r+(R)-1]; /* rotate key schedule */\ - ts[r + (R)+2 ] = ts[r+(R)-1]; \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr); - - for (r=1;r < 2*RCNT;r+=2*SKEIN_UNROLL_256) /* loop thru it */ +#define R256(p0, p1, p2, p3, ROT, rNum) /* fully unrolled */ \ + Round256(p0, p1, p2, p3, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, rNum, Xptr); + +#define I256(R) \ + X0 += ks[((R) + 1) % 5]; /* inject the key schedule value */ \ + X1 += ks[((R) + 2) % 5] + ts[((R) + 1) % 3]; \ + X2 += ks[((R) + 3) % 5] + ts[((R) + 2) % 3]; \ + X3 += ks[((R) + 4) % 5] + (R) + 1; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); +#else /* looping version */ +#define R256(p0, p1, p2, p3, ROT, rNum) \ + Round256(p0, p1, p2, p3, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, 4 * (r - 1) + rNum, Xptr); + +#define I256(R) \ + X0 += ks[r + (R) + 0]; /* inject the key schedule value */ \ + X1 += ks[r + (R) + 1] + ts[r + (R) + 0]; \ + X2 += ks[r + (R) + 2] + ts[r + (R) + 1]; \ + X3 += ks[r + (R) + 3] + r + (R); \ + ks[r + (R) + 4] = ks[r + (R)-1]; /* rotate key schedule */ \ + ts[r + (R) + 2] = ts[r + (R)-1]; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); + + for(r = 1; r < 2 * RCNT; r += 2 * SKEIN_UNROLL_256) /* loop thru it */ #endif { -#define R256_8_rounds(R) \ - R256(0,1,2,3,R_256_0,8*(R) + 1); \ - R256(0,3,2,1,R_256_1,8*(R) + 2); \ - R256(0,1,2,3,R_256_2,8*(R) + 3); \ - R256(0,3,2,1,R_256_3,8*(R) + 4); \ - I256(2*(R)); \ - R256(0,1,2,3,R_256_4,8*(R) + 5); \ - R256(0,3,2,1,R_256_5,8*(R) + 6); \ - R256(0,1,2,3,R_256_6,8*(R) + 7); \ - R256(0,3,2,1,R_256_7,8*(R) + 8); \ - I256(2*(R)+1); - - R256_8_rounds( 0); - -#define R256_Unroll_R(NN) ((SKEIN_UNROLL_256 == 0 && SKEIN_256_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_256 > (NN))) - - #if R256_Unroll_R( 1) - R256_8_rounds( 1); - #endif - #if R256_Unroll_R( 2) - R256_8_rounds( 2); - #endif - #if R256_Unroll_R( 3) - R256_8_rounds( 3); - #endif - #if R256_Unroll_R( 4) - R256_8_rounds( 4); - #endif - #if R256_Unroll_R( 5) - R256_8_rounds( 5); - #endif - #if R256_Unroll_R( 6) - R256_8_rounds( 6); - #endif - #if R256_Unroll_R( 7) - R256_8_rounds( 7); - #endif - #if R256_Unroll_R( 8) - R256_8_rounds( 8); - #endif - #if R256_Unroll_R( 9) - R256_8_rounds( 9); - #endif - #if R256_Unroll_R(10) - R256_8_rounds(10); - #endif - #if R256_Unroll_R(11) - R256_8_rounds(11); - #endif - #if R256_Unroll_R(12) - R256_8_rounds(12); - #endif - #if R256_Unroll_R(13) - R256_8_rounds(13); - #endif - #if R256_Unroll_R(14) - R256_8_rounds(14); - #endif - #if (SKEIN_UNROLL_256 > 14) -#error "need more unrolling in Skein_256_Process_Block" - #endif +#define R256_8_rounds(R) \ + R256(0, 1, 2, 3, R_256_0, 8 * (R) + 1); \ + R256(0, 3, 2, 1, R_256_1, 8 * (R) + 2); \ + R256(0, 1, 2, 3, R_256_2, 8 * (R) + 3); \ + R256(0, 3, 2, 1, R_256_3, 8 * (R) + 4); \ + I256(2 * (R)); \ + R256(0, 1, 2, 3, R_256_4, 8 * (R) + 5); \ + R256(0, 3, 2, 1, R_256_5, 8 * (R) + 6); \ + R256(0, 1, 2, 3, R_256_6, 8 * (R) + 7); \ + R256(0, 3, 2, 1, R_256_7, 8 * (R) + 8); \ + I256(2 * (R) + 1); + + R256_8_rounds(0); + +#define R256_Unroll_R(NN) ((SKEIN_UNROLL_256 == 0 && SKEIN_256_ROUNDS_TOTAL / 8 > (NN)) || (SKEIN_UNROLL_256 > (NN))) + +#if R256_Unroll_R(1) + R256_8_rounds(1); +#endif +#if R256_Unroll_R(2) + R256_8_rounds(2); +#endif +#if R256_Unroll_R(3) + R256_8_rounds(3); +#endif +#if R256_Unroll_R(4) + R256_8_rounds(4); +#endif +#if R256_Unroll_R(5) + R256_8_rounds(5); +#endif +#if R256_Unroll_R(6) + R256_8_rounds(6); +#endif +#if R256_Unroll_R(7) + R256_8_rounds(7); +#endif +#if R256_Unroll_R(8) + R256_8_rounds(8); +#endif +#if R256_Unroll_R(9) + R256_8_rounds(9); +#endif +#if R256_Unroll_R(10) + R256_8_rounds(10); +#endif +#if R256_Unroll_R(11) + R256_8_rounds(11); +#endif +#if R256_Unroll_R(12) + R256_8_rounds(12); +#endif +#if R256_Unroll_R(13) + R256_8_rounds(13); +#endif +#if R256_Unroll_R(14) + R256_8_rounds(14); +#endif +#if(SKEIN_UNROLL_256 > 14) +#error "need more unrolling in Skein_256_Process_Block" +#endif } /* do the final "feedforward" xor, update context chaining vars */ ctx->X[0] = X0 ^ w[0]; @@ -690,68 +793,74 @@ static void Skein_256_Process_Block(Skein_256_Ctxt_t *ctx,const u08b_t *blkPtr,s ctx->X[2] = X2 ^ w[2]; ctx->X[3] = X3 ^ w[3]; - Skein_Show_Round(BLK_BITS,&ctx->h,SKEIN_RND_FEED_FWD,ctx->X); + Skein_Show_Round(BLK_BITS, &ctx->h, SKEIN_RND_FEED_FWD, ctx->X); ts[1] &= ~SKEIN_T1_FLAG_FIRST; - } - while (--blkCnt); + } while(--blkCnt); ctx->h.T[0] = ts[0]; ctx->h.T[1] = ts[1]; - } +} #if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) static size_t Skein_256_Process_Block_CodeSize(void) - { - return ((u08b_t *) Skein_256_Process_Block_CodeSize) - - ((u08b_t *) Skein_256_Process_Block); - } +{ + return ((u08b_t*)Skein_256_Process_Block_CodeSize) - + ((u08b_t*)Skein_256_Process_Block); +} static uint_t Skein_256_Unroll_Cnt(void) - { +{ return SKEIN_UNROLL_256; - } +} #endif #endif /***************************** Skein_512 ******************************/ #if !(SKEIN_USE_ASM & 512) -static void Skein_512_Process_Block(Skein_512_Ctxt_t *ctx,const u08b_t *blkPtr,size_t blkCnt,size_t byteCntAdd) - { /* do it in C */ +static void Skein_512_Process_Block(Skein_512_Ctxt_t* ctx, const u08b_t* blkPtr, size_t blkCnt, size_t byteCntAdd) +{ /* do it in C */ enum - { + { WCNT = SKEIN_512_STATE_WORDS - }; -#undef RCNT -#define RCNT (SKEIN_512_ROUNDS_TOTAL/8) + }; +#undef RCNT +#define RCNT (SKEIN_512_ROUNDS_TOTAL / 8) -#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ -#define SKEIN_UNROLL_512 (((SKEIN_LOOP)/10)%10) +#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ +#define SKEIN_UNROLL_512 (((SKEIN_LOOP) / 10) % 10) #else #define SKEIN_UNROLL_512 (0) #endif #if SKEIN_UNROLL_512 -#if (RCNT % SKEIN_UNROLL_512) +#if(RCNT % SKEIN_UNROLL_512) #error "Invalid SKEIN_UNROLL_512" /* sanity check on unroll count */ #endif - size_t r; - u64b_t kw[WCNT+4+RCNT*2]; /* key schedule words : chaining vars + tweak + "rotation"*/ + size_t r; + u64b_t kw[WCNT + 4 + RCNT * 2]; /* key schedule words : chaining vars + tweak + "rotation"*/ #else - u64b_t kw[WCNT+4]; /* key schedule words : chaining vars + tweak */ + u64b_t kw[WCNT + 4]; /* key schedule words : chaining vars + tweak */ #endif - u64b_t X0,X1,X2,X3,X4,X5,X6,X7; /* local copy of vars, for speed */ - u64b_t w [WCNT]; /* local copy of input block */ + u64b_t X0, X1, X2, X3, X4, X5, X6, X7; /* local copy of vars, for speed */ + u64b_t w[WCNT]; /* local copy of input block */ #ifdef SKEIN_DEBUG - const u64b_t *Xptr[8]; /* use for debugging (help compiler put Xn in registers) */ - Xptr[0] = &X0; Xptr[1] = &X1; Xptr[2] = &X2; Xptr[3] = &X3; - Xptr[4] = &X4; Xptr[5] = &X5; Xptr[6] = &X6; Xptr[7] = &X7; + const u64b_t* Xptr[8]; /* use for debugging (help compiler put Xn in registers) */ + Xptr[0] = &X0; + Xptr[1] = &X1; + Xptr[2] = &X2; + Xptr[3] = &X3; + Xptr[4] = &X4; + Xptr[5] = &X5; + Xptr[6] = &X6; + Xptr[7] = &X7; #endif - Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ + Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ ts[0] = ctx->h.T[0]; ts[1] = ctx->h.T[1]; - do { + do + { /* this implementation only supports 2**64 input bytes (no carry out here) */ - ts[0] += byteCntAdd; /* update processed length */ + ts[0] += byteCntAdd; /* update processed length */ /* precompute the key schedule for this block */ ks[0] = ctx->X[0]; @@ -767,126 +876,134 @@ static void Skein_512_Process_Block(Skein_512_Ctxt_t *ctx,const u08b_t *blkPtr,s ts[2] = ts[0] ^ ts[1]; - Skein_Get64_LSB_First(w,blkPtr,WCNT); /* get input block in little-endian format */ + Skein_Get64_LSB_First(w, blkPtr, WCNT); /* get input block in little-endian format */ DebugSaveTweak(ctx); - Skein_Show_Block(BLK_BITS,&ctx->h,ctx->X,blkPtr,w,ks,ts); + Skein_Show_Block(BLK_BITS, &ctx->h, ctx->X, blkPtr, w, ks, ts); - X0 = w[0] + ks[0]; /* do the first full key injection */ - X1 = w[1] + ks[1]; - X2 = w[2] + ks[2]; - X3 = w[3] + ks[3]; - X4 = w[4] + ks[4]; - X5 = w[5] + ks[5] + ts[0]; - X6 = w[6] + ks[6] + ts[1]; - X7 = w[7] + ks[7]; + X0 = w[0] + ks[0]; /* do the first full key injection */ + X1 = w[1] + ks[1]; + X2 = w[2] + ks[2]; + X3 = w[3] + ks[3]; + X4 = w[4] + ks[4]; + X5 = w[5] + ks[5] + ts[0]; + X6 = w[6] + ks[6] + ts[1]; + X7 = w[7] + ks[7]; blkPtr += SKEIN_512_BLOCK_BYTES; - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INITIAL,Xptr); + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INITIAL, Xptr); /* run the rounds */ -#define Round512(p0,p1,p2,p3,p4,p5,p6,p7,ROT,rNum) \ - X##p0 += X##p1; X##p1 = RotL_64(X##p1,ROT##_0); X##p1 ^= X##p0; \ - X##p2 += X##p3; X##p3 = RotL_64(X##p3,ROT##_1); X##p3 ^= X##p2; \ - X##p4 += X##p5; X##p5 = RotL_64(X##p5,ROT##_2); X##p5 ^= X##p4; \ - X##p6 += X##p7; X##p7 = RotL_64(X##p7,ROT##_3); X##p7 ^= X##p6; \ +#define Round512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + X##p0 += X##p1; \ + X##p1 = RotL_64(X##p1, ROT##_0); \ + X##p1 ^= X##p0; \ + X##p2 += X##p3; \ + X##p3 = RotL_64(X##p3, ROT##_1); \ + X##p3 ^= X##p2; \ + X##p4 += X##p5; \ + X##p5 = RotL_64(X##p5, ROT##_2); \ + X##p5 ^= X##p4; \ + X##p6 += X##p7; \ + X##p7 = RotL_64(X##p7, ROT##_3); \ + X##p7 ^= X##p6; #if SKEIN_UNROLL_512 == 0 -#define R512(p0,p1,p2,p3,p4,p5,p6,p7,ROT,rNum) /* unrolled */ \ - Round512(p0,p1,p2,p3,p4,p5,p6,p7,ROT,rNum) \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,rNum,Xptr); - -#define I512(R) \ - X0 += ks[((R)+1) % 9]; /* inject the key schedule value */ \ - X1 += ks[((R)+2) % 9]; \ - X2 += ks[((R)+3) % 9]; \ - X3 += ks[((R)+4) % 9]; \ - X4 += ks[((R)+5) % 9]; \ - X5 += ks[((R)+6) % 9] + ts[((R)+1) % 3]; \ - X6 += ks[((R)+7) % 9] + ts[((R)+2) % 3]; \ - X7 += ks[((R)+8) % 9] + (R)+1; \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr); -#else /* looping version */ -#define R512(p0,p1,p2,p3,p4,p5,p6,p7,ROT,rNum) \ - Round512(p0,p1,p2,p3,p4,p5,p6,p7,ROT,rNum) \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,4*(r-1)+rNum,Xptr); - -#define I512(R) \ - X0 += ks[r+(R)+0]; /* inject the key schedule value */ \ - X1 += ks[r+(R)+1]; \ - X2 += ks[r+(R)+2]; \ - X3 += ks[r+(R)+3]; \ - X4 += ks[r+(R)+4]; \ - X5 += ks[r+(R)+5] + ts[r+(R)+0]; \ - X6 += ks[r+(R)+6] + ts[r+(R)+1]; \ - X7 += ks[r+(R)+7] + r+(R) ; \ - ks[r + (R)+8] = ks[r+(R)-1]; /* rotate key schedule */ \ - ts[r + (R)+2] = ts[r+(R)-1]; \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr); - - for (r=1;r < 2*RCNT;r+=2*SKEIN_UNROLL_512) /* loop thru it */ -#endif /* end of looped code definitions */ +#define R512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) /* unrolled */ \ + Round512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, rNum, Xptr); + +#define I512(R) \ + X0 += ks[((R) + 1) % 9]; /* inject the key schedule value */ \ + X1 += ks[((R) + 2) % 9]; \ + X2 += ks[((R) + 3) % 9]; \ + X3 += ks[((R) + 4) % 9]; \ + X4 += ks[((R) + 5) % 9]; \ + X5 += ks[((R) + 6) % 9] + ts[((R) + 1) % 3]; \ + X6 += ks[((R) + 7) % 9] + ts[((R) + 2) % 3]; \ + X7 += ks[((R) + 8) % 9] + (R) + 1; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); +#else /* looping version */ +#define R512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + Round512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, 4 * (r - 1) + rNum, Xptr); + +#define I512(R) \ + X0 += ks[r + (R) + 0]; /* inject the key schedule value */ \ + X1 += ks[r + (R) + 1]; \ + X2 += ks[r + (R) + 2]; \ + X3 += ks[r + (R) + 3]; \ + X4 += ks[r + (R) + 4]; \ + X5 += ks[r + (R) + 5] + ts[r + (R) + 0]; \ + X6 += ks[r + (R) + 6] + ts[r + (R) + 1]; \ + X7 += ks[r + (R) + 7] + r + (R); \ + ks[r + (R) + 8] = ks[r + (R)-1]; /* rotate key schedule */ \ + ts[r + (R) + 2] = ts[r + (R)-1]; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); + + for(r = 1; r < 2 * RCNT; r += 2 * SKEIN_UNROLL_512) /* loop thru it */ +#endif /* end of looped code definitions */ { -#define R512_8_rounds(R) /* do 8 full rounds */ \ - R512(0,1,2,3,4,5,6,7,R_512_0,8*(R)+ 1); \ - R512(2,1,4,7,6,5,0,3,R_512_1,8*(R)+ 2); \ - R512(4,1,6,3,0,5,2,7,R_512_2,8*(R)+ 3); \ - R512(6,1,0,7,2,5,4,3,R_512_3,8*(R)+ 4); \ - I512(2*(R)); \ - R512(0,1,2,3,4,5,6,7,R_512_4,8*(R)+ 5); \ - R512(2,1,4,7,6,5,0,3,R_512_5,8*(R)+ 6); \ - R512(4,1,6,3,0,5,2,7,R_512_6,8*(R)+ 7); \ - R512(6,1,0,7,2,5,4,3,R_512_7,8*(R)+ 8); \ - I512(2*(R)+1); /* and key injection */ - - R512_8_rounds( 0); - -#define R512_Unroll_R(NN) ((SKEIN_UNROLL_512 == 0 && SKEIN_512_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_512 > (NN))) - - #if R512_Unroll_R( 1) - R512_8_rounds( 1); - #endif - #if R512_Unroll_R( 2) - R512_8_rounds( 2); - #endif - #if R512_Unroll_R( 3) - R512_8_rounds( 3); - #endif - #if R512_Unroll_R( 4) - R512_8_rounds( 4); - #endif - #if R512_Unroll_R( 5) - R512_8_rounds( 5); - #endif - #if R512_Unroll_R( 6) - R512_8_rounds( 6); - #endif - #if R512_Unroll_R( 7) - R512_8_rounds( 7); - #endif - #if R512_Unroll_R( 8) - R512_8_rounds( 8); - #endif - #if R512_Unroll_R( 9) - R512_8_rounds( 9); - #endif - #if R512_Unroll_R(10) - R512_8_rounds(10); - #endif - #if R512_Unroll_R(11) - R512_8_rounds(11); - #endif - #if R512_Unroll_R(12) - R512_8_rounds(12); - #endif - #if R512_Unroll_R(13) - R512_8_rounds(13); - #endif - #if R512_Unroll_R(14) - R512_8_rounds(14); - #endif - #if (SKEIN_UNROLL_512 > 14) -#error "need more unrolling in Skein_512_Process_Block" - #endif +#define R512_8_rounds(R) /* do 8 full rounds */ \ + R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_0, 8 * (R) + 1); \ + R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_1, 8 * (R) + 2); \ + R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_2, 8 * (R) + 3); \ + R512(6, 1, 0, 7, 2, 5, 4, 3, R_512_3, 8 * (R) + 4); \ + I512(2 * (R)); \ + R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_4, 8 * (R) + 5); \ + R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_5, 8 * (R) + 6); \ + R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_6, 8 * (R) + 7); \ + R512(6, 1, 0, 7, 2, 5, 4, 3, R_512_7, 8 * (R) + 8); \ + I512(2 * (R) + 1); /* and key injection */ + + R512_8_rounds(0); + +#define R512_Unroll_R(NN) ((SKEIN_UNROLL_512 == 0 && SKEIN_512_ROUNDS_TOTAL / 8 > (NN)) || (SKEIN_UNROLL_512 > (NN))) + +#if R512_Unroll_R(1) + R512_8_rounds(1); +#endif +#if R512_Unroll_R(2) + R512_8_rounds(2); +#endif +#if R512_Unroll_R(3) + R512_8_rounds(3); +#endif +#if R512_Unroll_R(4) + R512_8_rounds(4); +#endif +#if R512_Unroll_R(5) + R512_8_rounds(5); +#endif +#if R512_Unroll_R(6) + R512_8_rounds(6); +#endif +#if R512_Unroll_R(7) + R512_8_rounds(7); +#endif +#if R512_Unroll_R(8) + R512_8_rounds(8); +#endif +#if R512_Unroll_R(9) + R512_8_rounds(9); +#endif +#if R512_Unroll_R(10) + R512_8_rounds(10); +#endif +#if R512_Unroll_R(11) + R512_8_rounds(11); +#endif +#if R512_Unroll_R(12) + R512_8_rounds(12); +#endif +#if R512_Unroll_R(13) + R512_8_rounds(13); +#endif +#if R512_Unroll_R(14) + R512_8_rounds(14); +#endif +#if(SKEIN_UNROLL_512 > 14) +#error "need more unrolling in Skein_512_Process_Block" +#endif } /* do the final "feedforward" xor, update context chaining vars */ @@ -898,256 +1015,284 @@ static void Skein_512_Process_Block(Skein_512_Ctxt_t *ctx,const u08b_t *blkPtr,s ctx->X[5] = X5 ^ w[5]; ctx->X[6] = X6 ^ w[6]; ctx->X[7] = X7 ^ w[7]; - Skein_Show_Round(BLK_BITS,&ctx->h,SKEIN_RND_FEED_FWD,ctx->X); + Skein_Show_Round(BLK_BITS, &ctx->h, SKEIN_RND_FEED_FWD, ctx->X); ts[1] &= ~SKEIN_T1_FLAG_FIRST; - } - while (--blkCnt); + } while(--blkCnt); ctx->h.T[0] = ts[0]; ctx->h.T[1] = ts[1]; - } +} #if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) static size_t Skein_512_Process_Block_CodeSize(void) - { - return ((u08b_t *) Skein_512_Process_Block_CodeSize) - - ((u08b_t *) Skein_512_Process_Block); - } +{ + return ((u08b_t*)Skein_512_Process_Block_CodeSize) - + ((u08b_t*)Skein_512_Process_Block); +} static uint_t Skein_512_Unroll_Cnt(void) - { +{ return SKEIN_UNROLL_512; - } +} #endif #endif /***************************** Skein1024 ******************************/ #if !(SKEIN_USE_ASM & 1024) -static void Skein1024_Process_Block(Skein1024_Ctxt_t *ctx,const u08b_t *blkPtr,size_t blkCnt,size_t byteCntAdd) - { /* do it in C, always looping (unrolled is bigger AND slower!) */ +static void Skein1024_Process_Block(Skein1024_Ctxt_t* ctx, const u08b_t* blkPtr, size_t blkCnt, size_t byteCntAdd) +{ /* do it in C, always looping (unrolled is bigger AND slower!) */ enum - { + { WCNT = SKEIN1024_STATE_WORDS - }; -#undef RCNT -#define RCNT (SKEIN1024_ROUNDS_TOTAL/8) + }; +#undef RCNT +#define RCNT (SKEIN1024_ROUNDS_TOTAL / 8) -#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ -#define SKEIN_UNROLL_1024 ((SKEIN_LOOP)%10) +#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ +#define SKEIN_UNROLL_1024 ((SKEIN_LOOP) % 10) #else #define SKEIN_UNROLL_1024 (0) #endif -#if (SKEIN_UNROLL_1024 != 0) -#if (RCNT % SKEIN_UNROLL_1024) +#if(SKEIN_UNROLL_1024 != 0) +#if(RCNT % SKEIN_UNROLL_1024) #error "Invalid SKEIN_UNROLL_1024" /* sanity check on unroll count */ #endif - size_t r; - u64b_t kw[WCNT+4+RCNT*2]; /* key schedule words : chaining vars + tweak + "rotation"*/ + size_t r; + u64b_t kw[WCNT + 4 + RCNT * 2]; /* key schedule words : chaining vars + tweak + "rotation"*/ #else - u64b_t kw[WCNT+4]; /* key schedule words : chaining vars + tweak */ + u64b_t kw[WCNT + 4]; /* key schedule words : chaining vars + tweak */ #endif - u64b_t X00,X01,X02,X03,X04,X05,X06,X07, /* local copy of vars, for speed */ - X08,X09,X10,X11,X12,X13,X14,X15; - u64b_t w [WCNT]; /* local copy of input block */ + u64b_t X00, X01, X02, X03, X04, X05, X06, X07, /* local copy of vars, for speed */ + X08, X09, X10, X11, X12, X13, X14, X15; + u64b_t w[WCNT]; /* local copy of input block */ #ifdef SKEIN_DEBUG - const u64b_t *Xptr[16]; /* use for debugging (help compiler put Xn in registers) */ - Xptr[ 0] = &X00; Xptr[ 1] = &X01; Xptr[ 2] = &X02; Xptr[ 3] = &X03; - Xptr[ 4] = &X04; Xptr[ 5] = &X05; Xptr[ 6] = &X06; Xptr[ 7] = &X07; - Xptr[ 8] = &X08; Xptr[ 9] = &X09; Xptr[10] = &X10; Xptr[11] = &X11; - Xptr[12] = &X12; Xptr[13] = &X13; Xptr[14] = &X14; Xptr[15] = &X15; + const u64b_t* Xptr[16]; /* use for debugging (help compiler put Xn in registers) */ + Xptr[0] = &X00; + Xptr[1] = &X01; + Xptr[2] = &X02; + Xptr[3] = &X03; + Xptr[4] = &X04; + Xptr[5] = &X05; + Xptr[6] = &X06; + Xptr[7] = &X07; + Xptr[8] = &X08; + Xptr[9] = &X09; + Xptr[10] = &X10; + Xptr[11] = &X11; + Xptr[12] = &X12; + Xptr[13] = &X13; + Xptr[14] = &X14; + Xptr[15] = &X15; #endif - Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ + Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ ts[0] = ctx->h.T[0]; ts[1] = ctx->h.T[1]; - do { + do + { /* this implementation only supports 2**64 input bytes (no carry out here) */ - ts[0] += byteCntAdd; /* update processed length */ + ts[0] += byteCntAdd; /* update processed length */ /* precompute the key schedule for this block */ - ks[ 0] = ctx->X[ 0]; - ks[ 1] = ctx->X[ 1]; - ks[ 2] = ctx->X[ 2]; - ks[ 3] = ctx->X[ 3]; - ks[ 4] = ctx->X[ 4]; - ks[ 5] = ctx->X[ 5]; - ks[ 6] = ctx->X[ 6]; - ks[ 7] = ctx->X[ 7]; - ks[ 8] = ctx->X[ 8]; - ks[ 9] = ctx->X[ 9]; + ks[0] = ctx->X[0]; + ks[1] = ctx->X[1]; + ks[2] = ctx->X[2]; + ks[3] = ctx->X[3]; + ks[4] = ctx->X[4]; + ks[5] = ctx->X[5]; + ks[6] = ctx->X[6]; + ks[7] = ctx->X[7]; + ks[8] = ctx->X[8]; + ks[9] = ctx->X[9]; ks[10] = ctx->X[10]; ks[11] = ctx->X[11]; ks[12] = ctx->X[12]; ks[13] = ctx->X[13]; ks[14] = ctx->X[14]; ks[15] = ctx->X[15]; - ks[16] = ks[ 0] ^ ks[ 1] ^ ks[ 2] ^ ks[ 3] ^ - ks[ 4] ^ ks[ 5] ^ ks[ 6] ^ ks[ 7] ^ - ks[ 8] ^ ks[ 9] ^ ks[10] ^ ks[11] ^ + ks[16] = ks[0] ^ ks[1] ^ ks[2] ^ ks[3] ^ + ks[4] ^ ks[5] ^ ks[6] ^ ks[7] ^ + ks[8] ^ ks[9] ^ ks[10] ^ ks[11] ^ ks[12] ^ ks[13] ^ ks[14] ^ ks[15] ^ SKEIN_KS_PARITY; - ts[2] = ts[0] ^ ts[1]; + ts[2] = ts[0] ^ ts[1]; - Skein_Get64_LSB_First(w,blkPtr,WCNT); /* get input block in little-endian format */ + Skein_Get64_LSB_First(w, blkPtr, WCNT); /* get input block in little-endian format */ DebugSaveTweak(ctx); - Skein_Show_Block(BLK_BITS,&ctx->h,ctx->X,blkPtr,w,ks,ts); - - X00 = w[ 0] + ks[ 0]; /* do the first full key injection */ - X01 = w[ 1] + ks[ 1]; - X02 = w[ 2] + ks[ 2]; - X03 = w[ 3] + ks[ 3]; - X04 = w[ 4] + ks[ 4]; - X05 = w[ 5] + ks[ 5]; - X06 = w[ 6] + ks[ 6]; - X07 = w[ 7] + ks[ 7]; - X08 = w[ 8] + ks[ 8]; - X09 = w[ 9] + ks[ 9]; - X10 = w[10] + ks[10]; - X11 = w[11] + ks[11]; - X12 = w[12] + ks[12]; - X13 = w[13] + ks[13] + ts[0]; - X14 = w[14] + ks[14] + ts[1]; - X15 = w[15] + ks[15]; - - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INITIAL,Xptr); - -#define Round1024(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,pA,pB,pC,pD,pE,pF,ROT,rNum) \ - X##p0 += X##p1; X##p1 = RotL_64(X##p1,ROT##_0); X##p1 ^= X##p0; \ - X##p2 += X##p3; X##p3 = RotL_64(X##p3,ROT##_1); X##p3 ^= X##p2; \ - X##p4 += X##p5; X##p5 = RotL_64(X##p5,ROT##_2); X##p5 ^= X##p4; \ - X##p6 += X##p7; X##p7 = RotL_64(X##p7,ROT##_3); X##p7 ^= X##p6; \ - X##p8 += X##p9; X##p9 = RotL_64(X##p9,ROT##_4); X##p9 ^= X##p8; \ - X##pA += X##pB; X##pB = RotL_64(X##pB,ROT##_5); X##pB ^= X##pA; \ - X##pC += X##pD; X##pD = RotL_64(X##pD,ROT##_6); X##pD ^= X##pC; \ - X##pE += X##pF; X##pF = RotL_64(X##pF,ROT##_7); X##pF ^= X##pE; \ + Skein_Show_Block(BLK_BITS, &ctx->h, ctx->X, blkPtr, w, ks, ts); + + X00 = w[0] + ks[0]; /* do the first full key injection */ + X01 = w[1] + ks[1]; + X02 = w[2] + ks[2]; + X03 = w[3] + ks[3]; + X04 = w[4] + ks[4]; + X05 = w[5] + ks[5]; + X06 = w[6] + ks[6]; + X07 = w[7] + ks[7]; + X08 = w[8] + ks[8]; + X09 = w[9] + ks[9]; + X10 = w[10] + ks[10]; + X11 = w[11] + ks[11]; + X12 = w[12] + ks[12]; + X13 = w[13] + ks[13] + ts[0]; + X14 = w[14] + ks[14] + ts[1]; + X15 = w[15] + ks[15]; + + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INITIAL, Xptr); + +#define Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rNum) \ + X##p0 += X##p1; \ + X##p1 = RotL_64(X##p1, ROT##_0); \ + X##p1 ^= X##p0; \ + X##p2 += X##p3; \ + X##p3 = RotL_64(X##p3, ROT##_1); \ + X##p3 ^= X##p2; \ + X##p4 += X##p5; \ + X##p5 = RotL_64(X##p5, ROT##_2); \ + X##p5 ^= X##p4; \ + X##p6 += X##p7; \ + X##p7 = RotL_64(X##p7, ROT##_3); \ + X##p7 ^= X##p6; \ + X##p8 += X##p9; \ + X##p9 = RotL_64(X##p9, ROT##_4); \ + X##p9 ^= X##p8; \ + X##pA += X##pB; \ + X##pB = RotL_64(X##pB, ROT##_5); \ + X##pB ^= X##pA; \ + X##pC += X##pD; \ + X##pD = RotL_64(X##pD, ROT##_6); \ + X##pD ^= X##pC; \ + X##pE += X##pF; \ + X##pF = RotL_64(X##pF, ROT##_7); \ + X##pF ^= X##pE; #if SKEIN_UNROLL_1024 == 0 -#define R1024(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,pA,pB,pC,pD,pE,pF,ROT,rn) \ - Round1024(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,pA,pB,pC,pD,pE,pF,ROT,rn) \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,rn,Xptr); - -#define I1024(R) \ - X00 += ks[((R)+ 1) % 17]; /* inject the key schedule value */ \ - X01 += ks[((R)+ 2) % 17]; \ - X02 += ks[((R)+ 3) % 17]; \ - X03 += ks[((R)+ 4) % 17]; \ - X04 += ks[((R)+ 5) % 17]; \ - X05 += ks[((R)+ 6) % 17]; \ - X06 += ks[((R)+ 7) % 17]; \ - X07 += ks[((R)+ 8) % 17]; \ - X08 += ks[((R)+ 9) % 17]; \ - X09 += ks[((R)+10) % 17]; \ - X10 += ks[((R)+11) % 17]; \ - X11 += ks[((R)+12) % 17]; \ - X12 += ks[((R)+13) % 17]; \ - X13 += ks[((R)+14) % 17] + ts[((R)+1) % 3]; \ - X14 += ks[((R)+15) % 17] + ts[((R)+2) % 3]; \ - X15 += ks[((R)+16) % 17] + (R)+1; \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr); -#else /* looping version */ -#define R1024(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,pA,pB,pC,pD,pE,pF,ROT,rn) \ - Round1024(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,pA,pB,pC,pD,pE,pF,ROT,rn) \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,4*(r-1)+rn,Xptr); - -#define I1024(R) \ - X00 += ks[r+(R)+ 0]; /* inject the key schedule value */ \ - X01 += ks[r+(R)+ 1]; \ - X02 += ks[r+(R)+ 2]; \ - X03 += ks[r+(R)+ 3]; \ - X04 += ks[r+(R)+ 4]; \ - X05 += ks[r+(R)+ 5]; \ - X06 += ks[r+(R)+ 6]; \ - X07 += ks[r+(R)+ 7]; \ - X08 += ks[r+(R)+ 8]; \ - X09 += ks[r+(R)+ 9]; \ - X10 += ks[r+(R)+10]; \ - X11 += ks[r+(R)+11]; \ - X12 += ks[r+(R)+12]; \ - X13 += ks[r+(R)+13] + ts[r+(R)+0]; \ - X14 += ks[r+(R)+14] + ts[r+(R)+1]; \ - X15 += ks[r+(R)+15] + r+(R) ; \ - ks[r + (R)+16] = ks[r+(R)-1]; /* rotate key schedule */ \ - ts[r + (R)+ 2] = ts[r+(R)-1]; \ - Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr); - - for (r=1;r <= 2*RCNT;r+=2*SKEIN_UNROLL_1024) /* loop thru it */ +#define R1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rn) \ + Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rn) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, rn, Xptr); + +#define I1024(R) \ + X00 += ks[((R) + 1) % 17]; /* inject the key schedule value */ \ + X01 += ks[((R) + 2) % 17]; \ + X02 += ks[((R) + 3) % 17]; \ + X03 += ks[((R) + 4) % 17]; \ + X04 += ks[((R) + 5) % 17]; \ + X05 += ks[((R) + 6) % 17]; \ + X06 += ks[((R) + 7) % 17]; \ + X07 += ks[((R) + 8) % 17]; \ + X08 += ks[((R) + 9) % 17]; \ + X09 += ks[((R) + 10) % 17]; \ + X10 += ks[((R) + 11) % 17]; \ + X11 += ks[((R) + 12) % 17]; \ + X12 += ks[((R) + 13) % 17]; \ + X13 += ks[((R) + 14) % 17] + ts[((R) + 1) % 3]; \ + X14 += ks[((R) + 15) % 17] + ts[((R) + 2) % 3]; \ + X15 += ks[((R) + 16) % 17] + (R) + 1; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); +#else /* looping version */ +#define R1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rn) \ + Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rn) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, 4 * (r - 1) + rn, Xptr); + +#define I1024(R) \ + X00 += ks[r + (R) + 0]; /* inject the key schedule value */ \ + X01 += ks[r + (R) + 1]; \ + X02 += ks[r + (R) + 2]; \ + X03 += ks[r + (R) + 3]; \ + X04 += ks[r + (R) + 4]; \ + X05 += ks[r + (R) + 5]; \ + X06 += ks[r + (R) + 6]; \ + X07 += ks[r + (R) + 7]; \ + X08 += ks[r + (R) + 8]; \ + X09 += ks[r + (R) + 9]; \ + X10 += ks[r + (R) + 10]; \ + X11 += ks[r + (R) + 11]; \ + X12 += ks[r + (R) + 12]; \ + X13 += ks[r + (R) + 13] + ts[r + (R) + 0]; \ + X14 += ks[r + (R) + 14] + ts[r + (R) + 1]; \ + X15 += ks[r + (R) + 15] + r + (R); \ + ks[r + (R) + 16] = ks[r + (R)-1]; /* rotate key schedule */ \ + ts[r + (R) + 2] = ts[r + (R)-1]; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); + + for(r = 1; r <= 2 * RCNT; r += 2 * SKEIN_UNROLL_1024) /* loop thru it */ #endif { -#define R1024_8_rounds(R) /* do 8 full rounds */ \ - R1024(00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,R1024_0,8*(R) + 1); \ - R1024(00,09,02,13,06,11,04,15,10,07,12,03,14,05,08,01,R1024_1,8*(R) + 2); \ - R1024(00,07,02,05,04,03,06,01,12,15,14,13,08,11,10,09,R1024_2,8*(R) + 3); \ - R1024(00,15,02,11,06,13,04,09,14,01,08,05,10,03,12,07,R1024_3,8*(R) + 4); \ - I1024(2*(R)); \ - R1024(00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,R1024_4,8*(R) + 5); \ - R1024(00,09,02,13,06,11,04,15,10,07,12,03,14,05,08,01,R1024_5,8*(R) + 6); \ - R1024(00,07,02,05,04,03,06,01,12,15,14,13,08,11,10,09,R1024_6,8*(R) + 7); \ - R1024(00,15,02,11,06,13,04,09,14,01,08,05,10,03,12,07,R1024_7,8*(R) + 8); \ - I1024(2*(R)+1); - - R1024_8_rounds( 0); - -#define R1024_Unroll_R(NN) ((SKEIN_UNROLL_1024 == 0 && SKEIN1024_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_1024 > (NN))) - - #if R1024_Unroll_R( 1) - R1024_8_rounds( 1); - #endif - #if R1024_Unroll_R( 2) - R1024_8_rounds( 2); - #endif - #if R1024_Unroll_R( 3) - R1024_8_rounds( 3); - #endif - #if R1024_Unroll_R( 4) - R1024_8_rounds( 4); - #endif - #if R1024_Unroll_R( 5) - R1024_8_rounds( 5); - #endif - #if R1024_Unroll_R( 6) - R1024_8_rounds( 6); - #endif - #if R1024_Unroll_R( 7) - R1024_8_rounds( 7); - #endif - #if R1024_Unroll_R( 8) - R1024_8_rounds( 8); - #endif - #if R1024_Unroll_R( 9) - R1024_8_rounds( 9); - #endif - #if R1024_Unroll_R(10) - R1024_8_rounds(10); - #endif - #if R1024_Unroll_R(11) - R1024_8_rounds(11); - #endif - #if R1024_Unroll_R(12) - R1024_8_rounds(12); - #endif - #if R1024_Unroll_R(13) - R1024_8_rounds(13); - #endif - #if R1024_Unroll_R(14) - R1024_8_rounds(14); - #endif - #if (SKEIN_UNROLL_1024 > 14) -#error "need more unrolling in Skein_1024_Process_Block" - #endif +#define R1024_8_rounds(R) /* do 8 full rounds */ \ + R1024(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, R1024_0, 8 * (R) + 1); \ + R1024(00, 09, 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, 05, 08, 01, R1024_1, 8 * (R) + 2); \ + R1024(00, 07, 02, 05, 04, 03, 06, 01, 12, 15, 14, 13, 08, 11, 10, 09, R1024_2, 8 * (R) + 3); \ + R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05, 10, 03, 12, 07, R1024_3, 8 * (R) + 4); \ + I1024(2 * (R)); \ + R1024(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, R1024_4, 8 * (R) + 5); \ + R1024(00, 09, 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, 05, 08, 01, R1024_5, 8 * (R) + 6); \ + R1024(00, 07, 02, 05, 04, 03, 06, 01, 12, 15, 14, 13, 08, 11, 10, 09, R1024_6, 8 * (R) + 7); \ + R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05, 10, 03, 12, 07, R1024_7, 8 * (R) + 8); \ + I1024(2 * (R) + 1); + + R1024_8_rounds(0); + +#define R1024_Unroll_R(NN) ((SKEIN_UNROLL_1024 == 0 && SKEIN1024_ROUNDS_TOTAL / 8 > (NN)) || (SKEIN_UNROLL_1024 > (NN))) + +#if R1024_Unroll_R(1) + R1024_8_rounds(1); +#endif +#if R1024_Unroll_R(2) + R1024_8_rounds(2); +#endif +#if R1024_Unroll_R(3) + R1024_8_rounds(3); +#endif +#if R1024_Unroll_R(4) + R1024_8_rounds(4); +#endif +#if R1024_Unroll_R(5) + R1024_8_rounds(5); +#endif +#if R1024_Unroll_R(6) + R1024_8_rounds(6); +#endif +#if R1024_Unroll_R(7) + R1024_8_rounds(7); +#endif +#if R1024_Unroll_R(8) + R1024_8_rounds(8); +#endif +#if R1024_Unroll_R(9) + R1024_8_rounds(9); +#endif +#if R1024_Unroll_R(10) + R1024_8_rounds(10); +#endif +#if R1024_Unroll_R(11) + R1024_8_rounds(11); +#endif +#if R1024_Unroll_R(12) + R1024_8_rounds(12); +#endif +#if R1024_Unroll_R(13) + R1024_8_rounds(13); +#endif +#if R1024_Unroll_R(14) + R1024_8_rounds(14); +#endif +#if(SKEIN_UNROLL_1024 > 14) +#error "need more unrolling in Skein_1024_Process_Block" +#endif } /* do the final "feedforward" xor, update context chaining vars */ - ctx->X[ 0] = X00 ^ w[ 0]; - ctx->X[ 1] = X01 ^ w[ 1]; - ctx->X[ 2] = X02 ^ w[ 2]; - ctx->X[ 3] = X03 ^ w[ 3]; - ctx->X[ 4] = X04 ^ w[ 4]; - ctx->X[ 5] = X05 ^ w[ 5]; - ctx->X[ 6] = X06 ^ w[ 6]; - ctx->X[ 7] = X07 ^ w[ 7]; - ctx->X[ 8] = X08 ^ w[ 8]; - ctx->X[ 9] = X09 ^ w[ 9]; + ctx->X[0] = X00 ^ w[0]; + ctx->X[1] = X01 ^ w[1]; + ctx->X[2] = X02 ^ w[2]; + ctx->X[3] = X03 ^ w[3]; + ctx->X[4] = X04 ^ w[4]; + ctx->X[5] = X05 ^ w[5]; + ctx->X[6] = X06 ^ w[6]; + ctx->X[7] = X07 ^ w[7]; + ctx->X[8] = X08 ^ w[8]; + ctx->X[9] = X09 ^ w[9]; ctx->X[10] = X10 ^ w[10]; ctx->X[11] = X11 ^ w[11]; ctx->X[12] = X12 ^ w[12]; @@ -1155,30 +1300,28 @@ static void Skein1024_Process_Block(Skein1024_Ctxt_t *ctx,const u08b_t *blkPtr,s ctx->X[14] = X14 ^ w[14]; ctx->X[15] = X15 ^ w[15]; - Skein_Show_Round(BLK_BITS,&ctx->h,SKEIN_RND_FEED_FWD,ctx->X); + Skein_Show_Round(BLK_BITS, &ctx->h, SKEIN_RND_FEED_FWD, ctx->X); ts[1] &= ~SKEIN_T1_FLAG_FIRST; blkPtr += SKEIN1024_BLOCK_BYTES; - } - while (--blkCnt); + } while(--blkCnt); ctx->h.T[0] = ts[0]; ctx->h.T[1] = ts[1]; - } +} #if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) static size_t Skein1024_Process_Block_CodeSize(void) - { - return ((u08b_t *) Skein1024_Process_Block_CodeSize) - - ((u08b_t *) Skein1024_Process_Block); - } +{ + return ((u08b_t*)Skein1024_Process_Block_CodeSize) - + ((u08b_t*)Skein1024_Process_Block); +} static uint_t Skein1024_Unroll_Cnt(void) - { +{ return SKEIN_UNROLL_1024; - } +} #endif #endif - #if 0 /*****************************************************************/ /* 256-bit Skein */ @@ -1289,93 +1432,93 @@ static int Skein_256_InitExt(Skein_256_Ctxt_t *ctx,size_t hashBitLen,u64b_t tree /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* process the input bytes */ -static int Skein_256_Update(Skein_256_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt) - { +static int Skein_256_Update(Skein_256_Ctxt_t* ctx, const u08b_t* msg, size_t msgByteCnt) +{ size_t n; - Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES,SKEIN_FAIL); /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES, SKEIN_FAIL); /* catch uninitialized context */ /* process full blocks, if any */ - if (msgByteCnt + ctx->h.bCnt > SKEIN_256_BLOCK_BYTES) + if(msgByteCnt + ctx->h.bCnt > SKEIN_256_BLOCK_BYTES) + { + if(ctx->h.bCnt) /* finish up any buffered message data */ { - if (ctx->h.bCnt) /* finish up any buffered message data */ + n = SKEIN_256_BLOCK_BYTES - ctx->h.bCnt; /* # bytes free in buffer b[] */ + if(n) { - n = SKEIN_256_BLOCK_BYTES - ctx->h.bCnt; /* # bytes free in buffer b[] */ - if (n) - { - Skein_assert(n < msgByteCnt); /* check on our logic here */ - memcpy(&ctx->b[ctx->h.bCnt],msg,n); - msgByteCnt -= n; - msg += n; + Skein_assert(n < msgByteCnt); /* check on our logic here */ + memcpy(&ctx->b[ctx->h.bCnt], msg, n); + msgByteCnt -= n; + msg += n; ctx->h.bCnt += n; - } + } Skein_assert(ctx->h.bCnt == SKEIN_256_BLOCK_BYTES); - Skein_256_Process_Block(ctx,ctx->b,1,SKEIN_256_BLOCK_BYTES); + Skein_256_Process_Block(ctx, ctx->b, 1, SKEIN_256_BLOCK_BYTES); ctx->h.bCnt = 0; - } + } /* now process any remaining full blocks, directly from input message data */ - if (msgByteCnt > SKEIN_256_BLOCK_BYTES) - { - n = (msgByteCnt-1) / SKEIN_256_BLOCK_BYTES; /* number of full blocks to process */ - Skein_256_Process_Block(ctx,msg,n,SKEIN_256_BLOCK_BYTES); + if(msgByteCnt > SKEIN_256_BLOCK_BYTES) + { + n = (msgByteCnt - 1) / SKEIN_256_BLOCK_BYTES; /* number of full blocks to process */ + Skein_256_Process_Block(ctx, msg, n, SKEIN_256_BLOCK_BYTES); msgByteCnt -= n * SKEIN_256_BLOCK_BYTES; - msg += n * SKEIN_256_BLOCK_BYTES; - } - Skein_assert(ctx->h.bCnt == 0); + msg += n * SKEIN_256_BLOCK_BYTES; } + Skein_assert(ctx->h.bCnt == 0); + } /* copy any remaining source message data bytes into b[] */ - if (msgByteCnt) - { + if(msgByteCnt) + { Skein_assert(msgByteCnt + ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES); - memcpy(&ctx->b[ctx->h.bCnt],msg,msgByteCnt); + memcpy(&ctx->b[ctx->h.bCnt], msg, msgByteCnt); ctx->h.bCnt += msgByteCnt; - } + } return SKEIN_SUCCESS; - } +} /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* finalize the hash computation and output the result */ -static int Skein_256_Final(Skein_256_Ctxt_t *ctx, u08b_t *hashVal) - { - size_t i,n,byteCnt; +static int Skein_256_Final(Skein_256_Ctxt_t* ctx, u08b_t* hashVal) +{ + size_t i, n, byteCnt; u64b_t X[SKEIN_256_STATE_WORDS]; - Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES,SKEIN_FAIL); /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES, SKEIN_FAIL); /* catch uninitialized context */ - ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ - if (ctx->h.bCnt < SKEIN_256_BLOCK_BYTES) /* zero pad b[] if necessary */ - memset(&ctx->b[ctx->h.bCnt],0,SKEIN_256_BLOCK_BYTES - ctx->h.bCnt); + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + if(ctx->h.bCnt < SKEIN_256_BLOCK_BYTES) /* zero pad b[] if necessary */ + memset(&ctx->b[ctx->h.bCnt], 0, SKEIN_256_BLOCK_BYTES - ctx->h.bCnt); - Skein_256_Process_Block(ctx,ctx->b,1,ctx->h.bCnt); /* process the final block */ + Skein_256_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); /* process the final block */ /* now output the result */ - byteCnt = (ctx->h.hashBitLen + 7) >> 3; /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; /* total number of output bytes */ /* run Threefish in "counter mode" to generate output */ - memset(ctx->b,0,sizeof(ctx->b)); /* zero out b[], so it can hold the counter */ - memcpy(X,ctx->X,sizeof(X)); /* keep a local copy of counter mode "key" */ - for (i=0;i < byteCnt;i += SKEIN_256_BLOCK_BYTES) - { - ((u64b_t *)ctx->b)[0]= Skein_Swap64((u64b_t) i); /* build the counter block */ - Skein_Start_New_Type(ctx,OUT_FINAL); - Skein_256_Process_Block(ctx,ctx->b,1,sizeof(u64b_t)); /* run "counter mode" */ - n = byteCnt - i; /* number of output bytes left to go */ - if (n >= SKEIN_256_BLOCK_BYTES) - n = SKEIN_256_BLOCK_BYTES; - Skein_Put64_LSB_First(hashVal+i,ctx->X,n); /* "output" the ctr mode bytes */ - Skein_Show_Final(256,&ctx->h,n,hashVal+i*SKEIN_256_BLOCK_BYTES); - memcpy(ctx->X,X,sizeof(X)); /* restore the counter mode key for next time */ - } - return SKEIN_SUCCESS; + memset(ctx->b, 0, sizeof(ctx->b)); /* zero out b[], so it can hold the counter */ + memcpy(X, ctx->X, sizeof(X)); /* keep a local copy of counter mode "key" */ + for(i = 0; i < byteCnt; i += SKEIN_256_BLOCK_BYTES) + { + ((u64b_t*)ctx->b)[0] = Skein_Swap64((u64b_t)i); /* build the counter block */ + Skein_Start_New_Type(ctx, OUT_FINAL); + Skein_256_Process_Block(ctx, ctx->b, 1, sizeof(u64b_t)); /* run "counter mode" */ + n = byteCnt - i; /* number of output bytes left to go */ + if(n >= SKEIN_256_BLOCK_BYTES) + n = SKEIN_256_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i, ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(256, &ctx->h, n, hashVal + i * SKEIN_256_BLOCK_BYTES); + memcpy(ctx->X, X, sizeof(X)); /* restore the counter mode key for next time */ } + return SKEIN_SUCCESS; +} #if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) static size_t Skein_256_API_CodeSize(void) - { - return ((u08b_t *) Skein_256_API_CodeSize) - - ((u08b_t *) Skein_256_Init); - } +{ + return ((u08b_t*)Skein_256_API_CodeSize) - + ((u08b_t*)Skein_256_Init); +} #endif /*****************************************************************/ @@ -1384,47 +1527,54 @@ static size_t Skein_256_API_CodeSize(void) /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* init the context for a straight hashing operation */ -static int Skein_512_Init(Skein_512_Ctxt_t *ctx, size_t hashBitLen) - { - union - { - u08b_t b[SKEIN_512_STATE_BYTES]; - u64b_t w[SKEIN_512_STATE_WORDS]; - } cfg; /* config block */ +static int Skein_512_Init(Skein_512_Ctxt_t* ctx, size_t hashBitLen) +{ + union { + u08b_t b[SKEIN_512_STATE_BYTES]; + u64b_t w[SKEIN_512_STATE_WORDS]; + } cfg; /* config block */ - Skein_Assert(hashBitLen > 0,SKEIN_BAD_HASHLEN); - ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ - switch (hashBitLen) - { /* use pre-computed values, where available */ + switch(hashBitLen) + { /* use pre-computed values, where available */ #ifndef SKEIN_NO_PRECOMP - case 512: memcpy(ctx->X,SKEIN_512_IV_512,sizeof(ctx->X)); break; - case 384: memcpy(ctx->X,SKEIN_512_IV_384,sizeof(ctx->X)); break; - case 256: memcpy(ctx->X,SKEIN_512_IV_256,sizeof(ctx->X)); break; - case 224: memcpy(ctx->X,SKEIN_512_IV_224,sizeof(ctx->X)); break; + case 512: + memcpy(ctx->X, SKEIN_512_IV_512, sizeof(ctx->X)); + break; + case 384: + memcpy(ctx->X, SKEIN_512_IV_384, sizeof(ctx->X)); + break; + case 256: + memcpy(ctx->X, SKEIN_512_IV_256, sizeof(ctx->X)); + break; + case 224: + memcpy(ctx->X, SKEIN_512_IV_224, sizeof(ctx->X)); + break; #endif - default: - /* here if there is no precomputed IV value available */ - /* build/process the config block, type == CONFIG (could be precomputed) */ - Skein_Start_New_Type(ctx,CFG_FINAL); /* set tweaks: T0=0; T1=CFG | FINAL */ - - cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); /* set the schema, version */ - cfg.w[1] = Skein_Swap64(hashBitLen); /* hash result length in bits */ - cfg.w[2] = Skein_Swap64(SKEIN_CFG_TREE_INFO_SEQUENTIAL); - memset(&cfg.w[3],0,sizeof(cfg) - 3*sizeof(cfg.w[0])); /* zero pad config block */ - - /* compute the initial chaining values from config block */ - memset(ctx->X,0,sizeof(ctx->X)); /* zero the chaining variables */ - Skein_512_Process_Block(ctx,cfg.b,1,SKEIN_CFG_STR_LEN); - break; - } + default: + /* here if there is no precomputed IV value available */ + /* build/process the config block, type == CONFIG (could be precomputed) */ + Skein_Start_New_Type(ctx, CFG_FINAL); /* set tweaks: T0=0; T1=CFG | FINAL */ + + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); /* set the schema, version */ + cfg.w[1] = Skein_Swap64(hashBitLen); /* hash result length in bits */ + cfg.w[2] = Skein_Swap64(SKEIN_CFG_TREE_INFO_SEQUENTIAL); + memset(&cfg.w[3], 0, sizeof(cfg) - 3 * sizeof(cfg.w[0])); /* zero pad config block */ + + /* compute the initial chaining values from config block */ + memset(ctx->X, 0, sizeof(ctx->X)); /* zero the chaining variables */ + Skein_512_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + break; + } /* The chaining vars ctx->X are now initialized for the given hashBitLen. */ /* Set up to process the data message portion of the hash (default) */ - Skein_Start_New_Type(ctx,MSG); /* T0=0, T1= MSG type */ + Skein_Start_New_Type(ctx, MSG); /* T0=0, T1= MSG type */ return SKEIN_SUCCESS; - } +} #if 0 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ @@ -1489,93 +1639,93 @@ static int Skein_512_InitExt(Skein_512_Ctxt_t *ctx,size_t hashBitLen,u64b_t tree /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* process the input bytes */ -static int Skein_512_Update(Skein_512_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt) - { +static int Skein_512_Update(Skein_512_Ctxt_t* ctx, const u08b_t* msg, size_t msgByteCnt) +{ size_t n; - Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES,SKEIN_FAIL); /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES, SKEIN_FAIL); /* catch uninitialized context */ /* process full blocks, if any */ - if (msgByteCnt + ctx->h.bCnt > SKEIN_512_BLOCK_BYTES) + if(msgByteCnt + ctx->h.bCnt > SKEIN_512_BLOCK_BYTES) + { + if(ctx->h.bCnt) /* finish up any buffered message data */ { - if (ctx->h.bCnt) /* finish up any buffered message data */ + n = SKEIN_512_BLOCK_BYTES - ctx->h.bCnt; /* # bytes free in buffer b[] */ + if(n) { - n = SKEIN_512_BLOCK_BYTES - ctx->h.bCnt; /* # bytes free in buffer b[] */ - if (n) - { - Skein_assert(n < msgByteCnt); /* check on our logic here */ - memcpy(&ctx->b[ctx->h.bCnt],msg,n); - msgByteCnt -= n; - msg += n; + Skein_assert(n < msgByteCnt); /* check on our logic here */ + memcpy(&ctx->b[ctx->h.bCnt], msg, n); + msgByteCnt -= n; + msg += n; ctx->h.bCnt += n; - } + } Skein_assert(ctx->h.bCnt == SKEIN_512_BLOCK_BYTES); - Skein_512_Process_Block(ctx,ctx->b,1,SKEIN_512_BLOCK_BYTES); + Skein_512_Process_Block(ctx, ctx->b, 1, SKEIN_512_BLOCK_BYTES); ctx->h.bCnt = 0; - } + } /* now process any remaining full blocks, directly from input message data */ - if (msgByteCnt > SKEIN_512_BLOCK_BYTES) - { - n = (msgByteCnt-1) / SKEIN_512_BLOCK_BYTES; /* number of full blocks to process */ - Skein_512_Process_Block(ctx,msg,n,SKEIN_512_BLOCK_BYTES); + if(msgByteCnt > SKEIN_512_BLOCK_BYTES) + { + n = (msgByteCnt - 1) / SKEIN_512_BLOCK_BYTES; /* number of full blocks to process */ + Skein_512_Process_Block(ctx, msg, n, SKEIN_512_BLOCK_BYTES); msgByteCnt -= n * SKEIN_512_BLOCK_BYTES; - msg += n * SKEIN_512_BLOCK_BYTES; - } - Skein_assert(ctx->h.bCnt == 0); + msg += n * SKEIN_512_BLOCK_BYTES; } + Skein_assert(ctx->h.bCnt == 0); + } /* copy any remaining source message data bytes into b[] */ - if (msgByteCnt) - { + if(msgByteCnt) + { Skein_assert(msgByteCnt + ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES); - memcpy(&ctx->b[ctx->h.bCnt],msg,msgByteCnt); + memcpy(&ctx->b[ctx->h.bCnt], msg, msgByteCnt); ctx->h.bCnt += msgByteCnt; - } + } return SKEIN_SUCCESS; - } +} /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* finalize the hash computation and output the result */ -static int Skein_512_Final(Skein_512_Ctxt_t *ctx, u08b_t *hashVal) - { - size_t i,n,byteCnt; +static int Skein_512_Final(Skein_512_Ctxt_t* ctx, u08b_t* hashVal) +{ + size_t i, n, byteCnt; u64b_t X[SKEIN_512_STATE_WORDS]; - Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES,SKEIN_FAIL); /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES, SKEIN_FAIL); /* catch uninitialized context */ - ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ - if (ctx->h.bCnt < SKEIN_512_BLOCK_BYTES) /* zero pad b[] if necessary */ - memset(&ctx->b[ctx->h.bCnt],0,SKEIN_512_BLOCK_BYTES - ctx->h.bCnt); + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + if(ctx->h.bCnt < SKEIN_512_BLOCK_BYTES) /* zero pad b[] if necessary */ + memset(&ctx->b[ctx->h.bCnt], 0, SKEIN_512_BLOCK_BYTES - ctx->h.bCnt); - Skein_512_Process_Block(ctx,ctx->b,1,ctx->h.bCnt); /* process the final block */ + Skein_512_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); /* process the final block */ /* now output the result */ - byteCnt = (ctx->h.hashBitLen + 7) >> 3; /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; /* total number of output bytes */ /* run Threefish in "counter mode" to generate output */ - memset(ctx->b,0,sizeof(ctx->b)); /* zero out b[], so it can hold the counter */ - memcpy(X,ctx->X,sizeof(X)); /* keep a local copy of counter mode "key" */ - for (i=0;i*SKEIN_512_BLOCK_BYTES < byteCnt;i++) - { - ((u64b_t *)ctx->b)[0]= Skein_Swap64((u64b_t) i); /* build the counter block */ - Skein_Start_New_Type(ctx,OUT_FINAL); - Skein_512_Process_Block(ctx,ctx->b,1,sizeof(u64b_t)); /* run "counter mode" */ - n = byteCnt - i*SKEIN_512_BLOCK_BYTES; /* number of output bytes left to go */ - if (n >= SKEIN_512_BLOCK_BYTES) - n = SKEIN_512_BLOCK_BYTES; - Skein_Put64_LSB_First(hashVal+i*SKEIN_512_BLOCK_BYTES,ctx->X,n); /* "output" the ctr mode bytes */ - Skein_Show_Final(512,&ctx->h,n,hashVal+i*SKEIN_512_BLOCK_BYTES); - memcpy(ctx->X,X,sizeof(X)); /* restore the counter mode key for next time */ - } - return SKEIN_SUCCESS; + memset(ctx->b, 0, sizeof(ctx->b)); /* zero out b[], so it can hold the counter */ + memcpy(X, ctx->X, sizeof(X)); /* keep a local copy of counter mode "key" */ + for(i = 0; i * SKEIN_512_BLOCK_BYTES < byteCnt; i++) + { + ((u64b_t*)ctx->b)[0] = Skein_Swap64((u64b_t)i); /* build the counter block */ + Skein_Start_New_Type(ctx, OUT_FINAL); + Skein_512_Process_Block(ctx, ctx->b, 1, sizeof(u64b_t)); /* run "counter mode" */ + n = byteCnt - i * SKEIN_512_BLOCK_BYTES; /* number of output bytes left to go */ + if(n >= SKEIN_512_BLOCK_BYTES) + n = SKEIN_512_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN_512_BLOCK_BYTES, ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(512, &ctx->h, n, hashVal + i * SKEIN_512_BLOCK_BYTES); + memcpy(ctx->X, X, sizeof(X)); /* restore the counter mode key for next time */ } + return SKEIN_SUCCESS; +} #if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) static size_t Skein_512_API_CodeSize(void) - { - return ((u08b_t *) Skein_512_API_CodeSize) - - ((u08b_t *) Skein_512_Init); - } +{ + return ((u08b_t*)Skein_512_API_CodeSize) - + ((u08b_t*)Skein_512_Init); +} #endif /*****************************************************************/ @@ -1583,46 +1733,51 @@ static size_t Skein_512_API_CodeSize(void) /*****************************************************************/ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* init the context for a straight hashing operation */ -static int Skein1024_Init(Skein1024_Ctxt_t *ctx, size_t hashBitLen) - { - union - { - u08b_t b[SKEIN1024_STATE_BYTES]; - u64b_t w[SKEIN1024_STATE_WORDS]; - } cfg; /* config block */ +static int Skein1024_Init(Skein1024_Ctxt_t* ctx, size_t hashBitLen) +{ + union { + u08b_t b[SKEIN1024_STATE_BYTES]; + u64b_t w[SKEIN1024_STATE_WORDS]; + } cfg; /* config block */ - Skein_Assert(hashBitLen > 0,SKEIN_BAD_HASHLEN); - ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ - switch (hashBitLen) - { /* use pre-computed values, where available */ + switch(hashBitLen) + { /* use pre-computed values, where available */ #ifndef SKEIN_NO_PRECOMP - case 512: memcpy(ctx->X,SKEIN1024_IV_512 ,sizeof(ctx->X)); break; - case 384: memcpy(ctx->X,SKEIN1024_IV_384 ,sizeof(ctx->X)); break; - case 1024: memcpy(ctx->X,SKEIN1024_IV_1024,sizeof(ctx->X)); break; + case 512: + memcpy(ctx->X, SKEIN1024_IV_512, sizeof(ctx->X)); + break; + case 384: + memcpy(ctx->X, SKEIN1024_IV_384, sizeof(ctx->X)); + break; + case 1024: + memcpy(ctx->X, SKEIN1024_IV_1024, sizeof(ctx->X)); + break; #endif - default: - /* here if there is no precomputed IV value available */ - /* build/process the config block, type == CONFIG (could be precomputed) */ - Skein_Start_New_Type(ctx,CFG_FINAL); /* set tweaks: T0=0; T1=CFG | FINAL */ - - cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); /* set the schema, version */ - cfg.w[1] = Skein_Swap64(hashBitLen); /* hash result length in bits */ - cfg.w[2] = Skein_Swap64(SKEIN_CFG_TREE_INFO_SEQUENTIAL); - memset(&cfg.w[3],0,sizeof(cfg) - 3*sizeof(cfg.w[0])); /* zero pad config block */ - - /* compute the initial chaining values from config block */ - memset(ctx->X,0,sizeof(ctx->X)); /* zero the chaining variables */ - Skein1024_Process_Block(ctx,cfg.b,1,SKEIN_CFG_STR_LEN); - break; - } + default: + /* here if there is no precomputed IV value available */ + /* build/process the config block, type == CONFIG (could be precomputed) */ + Skein_Start_New_Type(ctx, CFG_FINAL); /* set tweaks: T0=0; T1=CFG | FINAL */ + + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); /* set the schema, version */ + cfg.w[1] = Skein_Swap64(hashBitLen); /* hash result length in bits */ + cfg.w[2] = Skein_Swap64(SKEIN_CFG_TREE_INFO_SEQUENTIAL); + memset(&cfg.w[3], 0, sizeof(cfg) - 3 * sizeof(cfg.w[0])); /* zero pad config block */ + + /* compute the initial chaining values from config block */ + memset(ctx->X, 0, sizeof(ctx->X)); /* zero the chaining variables */ + Skein1024_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + break; + } /* The chaining vars ctx->X are now initialized for the given hashBitLen. */ /* Set up to process the data message portion of the hash (default) */ - Skein_Start_New_Type(ctx,MSG); /* T0=0, T1= MSG type */ + Skein_Start_New_Type(ctx, MSG); /* T0=0, T1= MSG type */ return SKEIN_SUCCESS; - } +} #if 0 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ @@ -1687,93 +1842,93 @@ static int Skein1024_InitExt(Skein1024_Ctxt_t *ctx,size_t hashBitLen,u64b_t tree /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* process the input bytes */ -static int Skein1024_Update(Skein1024_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt) - { +static int Skein1024_Update(Skein1024_Ctxt_t* ctx, const u08b_t* msg, size_t msgByteCnt) +{ size_t n; - Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES,SKEIN_FAIL); /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES, SKEIN_FAIL); /* catch uninitialized context */ /* process full blocks, if any */ - if (msgByteCnt + ctx->h.bCnt > SKEIN1024_BLOCK_BYTES) + if(msgByteCnt + ctx->h.bCnt > SKEIN1024_BLOCK_BYTES) + { + if(ctx->h.bCnt) /* finish up any buffered message data */ { - if (ctx->h.bCnt) /* finish up any buffered message data */ + n = SKEIN1024_BLOCK_BYTES - ctx->h.bCnt; /* # bytes free in buffer b[] */ + if(n) { - n = SKEIN1024_BLOCK_BYTES - ctx->h.bCnt; /* # bytes free in buffer b[] */ - if (n) - { - Skein_assert(n < msgByteCnt); /* check on our logic here */ - memcpy(&ctx->b[ctx->h.bCnt],msg,n); - msgByteCnt -= n; - msg += n; + Skein_assert(n < msgByteCnt); /* check on our logic here */ + memcpy(&ctx->b[ctx->h.bCnt], msg, n); + msgByteCnt -= n; + msg += n; ctx->h.bCnt += n; - } + } Skein_assert(ctx->h.bCnt == SKEIN1024_BLOCK_BYTES); - Skein1024_Process_Block(ctx,ctx->b,1,SKEIN1024_BLOCK_BYTES); + Skein1024_Process_Block(ctx, ctx->b, 1, SKEIN1024_BLOCK_BYTES); ctx->h.bCnt = 0; - } + } /* now process any remaining full blocks, directly from input message data */ - if (msgByteCnt > SKEIN1024_BLOCK_BYTES) - { - n = (msgByteCnt-1) / SKEIN1024_BLOCK_BYTES; /* number of full blocks to process */ - Skein1024_Process_Block(ctx,msg,n,SKEIN1024_BLOCK_BYTES); + if(msgByteCnt > SKEIN1024_BLOCK_BYTES) + { + n = (msgByteCnt - 1) / SKEIN1024_BLOCK_BYTES; /* number of full blocks to process */ + Skein1024_Process_Block(ctx, msg, n, SKEIN1024_BLOCK_BYTES); msgByteCnt -= n * SKEIN1024_BLOCK_BYTES; - msg += n * SKEIN1024_BLOCK_BYTES; - } - Skein_assert(ctx->h.bCnt == 0); + msg += n * SKEIN1024_BLOCK_BYTES; } + Skein_assert(ctx->h.bCnt == 0); + } /* copy any remaining source message data bytes into b[] */ - if (msgByteCnt) - { + if(msgByteCnt) + { Skein_assert(msgByteCnt + ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES); - memcpy(&ctx->b[ctx->h.bCnt],msg,msgByteCnt); + memcpy(&ctx->b[ctx->h.bCnt], msg, msgByteCnt); ctx->h.bCnt += msgByteCnt; - } + } return SKEIN_SUCCESS; - } +} /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* finalize the hash computation and output the result */ -static int Skein1024_Final(Skein1024_Ctxt_t *ctx, u08b_t *hashVal) - { - size_t i,n,byteCnt; +static int Skein1024_Final(Skein1024_Ctxt_t* ctx, u08b_t* hashVal) +{ + size_t i, n, byteCnt; u64b_t X[SKEIN1024_STATE_WORDS]; - Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES,SKEIN_FAIL); /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES, SKEIN_FAIL); /* catch uninitialized context */ - ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ - if (ctx->h.bCnt < SKEIN1024_BLOCK_BYTES) /* zero pad b[] if necessary */ - memset(&ctx->b[ctx->h.bCnt],0,SKEIN1024_BLOCK_BYTES - ctx->h.bCnt); + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + if(ctx->h.bCnt < SKEIN1024_BLOCK_BYTES) /* zero pad b[] if necessary */ + memset(&ctx->b[ctx->h.bCnt], 0, SKEIN1024_BLOCK_BYTES - ctx->h.bCnt); - Skein1024_Process_Block(ctx,ctx->b,1,ctx->h.bCnt); /* process the final block */ + Skein1024_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); /* process the final block */ /* now output the result */ - byteCnt = (ctx->h.hashBitLen + 7) >> 3; /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; /* total number of output bytes */ /* run Threefish in "counter mode" to generate output */ - memset(ctx->b,0,sizeof(ctx->b)); /* zero out b[], so it can hold the counter */ - memcpy(X,ctx->X,sizeof(X)); /* keep a local copy of counter mode "key" */ - for (i=0;i*SKEIN1024_BLOCK_BYTES < byteCnt;i++) - { - ((u64b_t *)ctx->b)[0]= Skein_Swap64((u64b_t) i); /* build the counter block */ - Skein_Start_New_Type(ctx,OUT_FINAL); - Skein1024_Process_Block(ctx,ctx->b,1,sizeof(u64b_t)); /* run "counter mode" */ - n = byteCnt - i*SKEIN1024_BLOCK_BYTES; /* number of output bytes left to go */ - if (n >= SKEIN1024_BLOCK_BYTES) - n = SKEIN1024_BLOCK_BYTES; - Skein_Put64_LSB_First(hashVal+i*SKEIN1024_BLOCK_BYTES,ctx->X,n); /* "output" the ctr mode bytes */ - Skein_Show_Final(1024,&ctx->h,n,hashVal+i*SKEIN1024_BLOCK_BYTES); - memcpy(ctx->X,X,sizeof(X)); /* restore the counter mode key for next time */ - } - return SKEIN_SUCCESS; + memset(ctx->b, 0, sizeof(ctx->b)); /* zero out b[], so it can hold the counter */ + memcpy(X, ctx->X, sizeof(X)); /* keep a local copy of counter mode "key" */ + for(i = 0; i * SKEIN1024_BLOCK_BYTES < byteCnt; i++) + { + ((u64b_t*)ctx->b)[0] = Skein_Swap64((u64b_t)i); /* build the counter block */ + Skein_Start_New_Type(ctx, OUT_FINAL); + Skein1024_Process_Block(ctx, ctx->b, 1, sizeof(u64b_t)); /* run "counter mode" */ + n = byteCnt - i * SKEIN1024_BLOCK_BYTES; /* number of output bytes left to go */ + if(n >= SKEIN1024_BLOCK_BYTES) + n = SKEIN1024_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN1024_BLOCK_BYTES, ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(1024, &ctx->h, n, hashVal + i * SKEIN1024_BLOCK_BYTES); + memcpy(ctx->X, X, sizeof(X)); /* restore the counter mode key for next time */ } + return SKEIN_SUCCESS; +} #if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) static size_t Skein1024_API_CodeSize(void) - { - return ((u08b_t *) Skein1024_API_CodeSize) - - ((u08b_t *) Skein1024_Init); - } +{ + return ((u08b_t*)Skein1024_API_CodeSize) - + ((u08b_t*)Skein1024_Init); +} #endif /**************** Functions to support MAC/tree hashing ***************/ @@ -1828,7 +1983,6 @@ static int Skein1024_Final_Pad(Skein1024_Ctxt_t *ctx, u08b_t *hashVal) return SKEIN_SUCCESS; } - #if SKEIN_TREE_HASH /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* just do the OUTPUT stage */ @@ -1921,116 +2075,126 @@ static int Skein1024_Output(Skein1024_Ctxt_t *ctx, u08b_t *hashVal) typedef struct { - uint_t statebits; /* 256, 512, or 1024 */ - union - { - Skein_Ctxt_Hdr_t h; /* common header "overlay" */ - Skein_256_Ctxt_t ctx_256; - Skein_512_Ctxt_t ctx_512; - Skein1024_Ctxt_t ctx1024; - } u; -} -hashState; + uint_t statebits; /* 256, 512, or 1024 */ + union { + Skein_Ctxt_Hdr_t h; /* common header "overlay" */ + Skein_256_Ctxt_t ctx_256; + Skein_512_Ctxt_t ctx_512; + Skein1024_Ctxt_t ctx1024; + } u; +} hashState; /* "incremental" hashing API */ -static SkeinHashReturn Init (hashState *state, int hashbitlen); -static SkeinHashReturn Update(hashState *state, const SkeinBitSequence *data, SkeinDataLength databitlen); -static SkeinHashReturn Final (hashState *state, SkeinBitSequence *hashval); +static SkeinHashReturn Init(hashState* state, int hashbitlen); +static SkeinHashReturn Update(hashState* state, const SkeinBitSequence* data, SkeinDataLength databitlen); +static SkeinHashReturn Final(hashState* state, SkeinBitSequence* hashval); /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* select the context size and init the context */ -static SkeinHashReturn Init(hashState *state, int hashbitlen) +static SkeinHashReturn Init(hashState* state, int hashbitlen) { #if SKEIN_256_NIST_MAX_HASH_BITS - if (hashbitlen <= SKEIN_256_NIST_MAX_HASHBITS) - { - Skein_Assert(hashbitlen > 0,BAD_HASHLEN); - state->statebits = 64*SKEIN_256_STATE_WORDS; - return Skein_256_Init(&state->u.ctx_256,(size_t) hashbitlen); - } -#endif - if (hashbitlen <= SKEIN_512_NIST_MAX_HASHBITS) - { - state->statebits = 64*SKEIN_512_STATE_WORDS; - return Skein_512_Init(&state->u.ctx_512,(size_t) hashbitlen); - } - else - { - state->statebits = 64*SKEIN1024_STATE_WORDS; - return Skein1024_Init(&state->u.ctx1024,(size_t) hashbitlen); - } + if(hashbitlen <= SKEIN_256_NIST_MAX_HASHBITS) + { + Skein_Assert(hashbitlen > 0, BAD_HASHLEN); + state->statebits = 64 * SKEIN_256_STATE_WORDS; + return Skein_256_Init(&state->u.ctx_256, (size_t)hashbitlen); + } +#endif + if(hashbitlen <= SKEIN_512_NIST_MAX_HASHBITS) + { + state->statebits = 64 * SKEIN_512_STATE_WORDS; + return Skein_512_Init(&state->u.ctx_512, (size_t)hashbitlen); + } + else + { + state->statebits = 64 * SKEIN1024_STATE_WORDS; + return Skein1024_Init(&state->u.ctx1024, (size_t)hashbitlen); + } } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* process data to be hashed */ -static SkeinHashReturn Update(hashState *state, const SkeinBitSequence *data, SkeinDataLength databitlen) +static SkeinHashReturn Update(hashState* state, const SkeinBitSequence* data, SkeinDataLength databitlen) { - /* only the final Update() call is allowed do partial bytes, else assert an error */ - Skein_Assert((state->u.h.T[1] & SKEIN_T1_FLAG_BIT_PAD) == 0 || databitlen == 0, SKEIN_FAIL); + /* only the final Update() call is allowed do partial bytes, else assert an error */ + Skein_Assert((state->u.h.T[1] & SKEIN_T1_FLAG_BIT_PAD) == 0 || databitlen == 0, SKEIN_FAIL); - Skein_Assert(state->statebits % 256 == 0 && (state->statebits-256) < 1024,SKEIN_FAIL); - if ((databitlen & 7) == 0) /* partial bytes? */ - { - switch ((state->statebits >> 8) & 3) + Skein_Assert(state->statebits % 256 == 0 && (state->statebits - 256) < 1024, SKEIN_FAIL); + if((databitlen & 7) == 0) /* partial bytes? */ { - case 2: return Skein_512_Update(&state->u.ctx_512,data,databitlen >> 3); - case 1: return Skein_256_Update(&state->u.ctx_256,data,databitlen >> 3); - case 0: return Skein1024_Update(&state->u.ctx1024,data,databitlen >> 3); - default: return SKEIN_FAIL; + switch((state->statebits >> 8) & 3) + { + case 2: + return Skein_512_Update(&state->u.ctx_512, data, databitlen >> 3); + case 1: + return Skein_256_Update(&state->u.ctx_256, data, databitlen >> 3); + case 0: + return Skein1024_Update(&state->u.ctx1024, data, databitlen >> 3); + default: + return SKEIN_FAIL; + } } - } - else - { /* handle partial final byte */ - size_t bCnt = (databitlen >> 3) + 1; /* number of bytes to handle (nonzero here!) */ - u08b_t b,mask; + else + { /* handle partial final byte */ + size_t bCnt = (databitlen >> 3) + 1; /* number of bytes to handle (nonzero here!) */ + u08b_t b, mask; - mask = (u08b_t) (1u << (7 - (databitlen & 7))); /* partial byte bit mask */ - b = (u08b_t) ((data[bCnt-1] & (0-mask)) | mask); /* apply bit padding on final byte */ + mask = (u08b_t)(1u << (7 - (databitlen & 7))); /* partial byte bit mask */ + b = (u08b_t)((data[bCnt - 1] & (0 - mask)) | mask); /* apply bit padding on final byte */ - switch ((state->statebits >> 8) & 3) - { - case 2: Skein_512_Update(&state->u.ctx_512,data,bCnt-1); /* process all but the final byte */ - Skein_512_Update(&state->u.ctx_512,&b , 1 ); /* process the (masked) partial byte */ - break; - case 1: Skein_256_Update(&state->u.ctx_256,data,bCnt-1); /* process all but the final byte */ - Skein_256_Update(&state->u.ctx_256,&b , 1 ); /* process the (masked) partial byte */ - break; - case 0: Skein1024_Update(&state->u.ctx1024,data,bCnt-1); /* process all but the final byte */ - Skein1024_Update(&state->u.ctx1024,&b , 1 ); /* process the (masked) partial byte */ - break; - default: return SKEIN_FAIL; - } - Skein_Set_Bit_Pad_Flag(state->u.h); /* set tweak flag for the final call */ + switch((state->statebits >> 8) & 3) + { + case 2: + Skein_512_Update(&state->u.ctx_512, data, bCnt - 1); /* process all but the final byte */ + Skein_512_Update(&state->u.ctx_512, &b, 1); /* process the (masked) partial byte */ + break; + case 1: + Skein_256_Update(&state->u.ctx_256, data, bCnt - 1); /* process all but the final byte */ + Skein_256_Update(&state->u.ctx_256, &b, 1); /* process the (masked) partial byte */ + break; + case 0: + Skein1024_Update(&state->u.ctx1024, data, bCnt - 1); /* process all but the final byte */ + Skein1024_Update(&state->u.ctx1024, &b, 1); /* process the (masked) partial byte */ + break; + default: + return SKEIN_FAIL; + } + Skein_Set_Bit_Pad_Flag(state->u.h); /* set tweak flag for the final call */ - return SKEIN_SUCCESS; - } + return SKEIN_SUCCESS; + } } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* finalize hash computation and output the result (hashbitlen bits) */ -static SkeinHashReturn Final(hashState *state, SkeinBitSequence *hashval) +static SkeinHashReturn Final(hashState* state, SkeinBitSequence* hashval) { - Skein_Assert(state->statebits % 256 == 0 && (state->statebits-256) < 1024,FAIL); - switch ((state->statebits >> 8) & 3) - { - case 2: return Skein_512_Final(&state->u.ctx_512,hashval); - case 1: return Skein_256_Final(&state->u.ctx_256,hashval); - case 0: return Skein1024_Final(&state->u.ctx1024,hashval); - default: return SKEIN_FAIL; - } + Skein_Assert(state->statebits % 256 == 0 && (state->statebits - 256) < 1024, FAIL); + switch((state->statebits >> 8) & 3) + { + case 2: + return Skein_512_Final(&state->u.ctx_512, hashval); + case 1: + return Skein_256_Final(&state->u.ctx_256, hashval); + case 0: + return Skein1024_Final(&state->u.ctx1024, hashval); + default: + return SKEIN_FAIL; + } } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* all-in-one hash function */ -SkeinHashReturn skein_hash(int hashbitlen, const SkeinBitSequence *data, /* all-in-one call */ - SkeinDataLength databitlen,SkeinBitSequence *hashval) +SkeinHashReturn skein_hash(int hashbitlen, const SkeinBitSequence* data, /* all-in-one call */ + SkeinDataLength databitlen, SkeinBitSequence* hashval) { - hashState state; - SkeinHashReturn r = Init(&state,hashbitlen); - if (r == SKEIN_SUCCESS) - { /* these calls do not fail when called properly */ - r = Update(&state,data,databitlen); - Final(&state,hashval); - } - return r; + hashState state; + SkeinHashReturn r = Init(&state, hashbitlen); + if(r == SKEIN_SUCCESS) + { /* these calls do not fail when called properly */ + r = Update(&state, data, databitlen); + Final(&state, hashval); + } + return r; } diff --git a/xmrstak/backend/cpu/crypto/c_skein.h b/xmrstak/backend/cpu/crypto/c_skein.h index 1aa11dea3..52f359e82 100644 --- a/xmrstak/backend/cpu/crypto/c_skein.h +++ b/xmrstak/backend/cpu/crypto/c_skein.h @@ -1,5 +1,5 @@ #ifndef _SKEIN_H_ -#define _SKEIN_H_ 1 +#define _SKEIN_H_ 1 /************************************************************************** ** ** Interface declarations and internal definitions for Skein hashing. @@ -27,21 +27,20 @@ ** 1: return SKEIN_FAIL to flag errors ** ***************************************************************************/ -#include "skein_port.h" /* get platform-specific definitions */ +#include "skein_port.h" /* get platform-specific definitions */ typedef enum { - SKEIN_SUCCESS = 0, /* return codes from Skein calls */ - SKEIN_FAIL = 1, - SKEIN_BAD_HASHLEN = 2 -} -SkeinHashReturn; + SKEIN_SUCCESS = 0, /* return codes from Skein calls */ + SKEIN_FAIL = 1, + SKEIN_BAD_HASHLEN = 2 +} SkeinHashReturn; -typedef uint32_t SkeinDataLength; /* bit count type */ -typedef u08b_t SkeinBitSequence; /* bit stream type */ +typedef uint32_t SkeinDataLength; /* bit count type */ +typedef u08b_t SkeinBitSequence; /* bit stream type */ /* "all-in-one" call */ -SkeinHashReturn skein_hash(int hashbitlen, const SkeinBitSequence *data, - SkeinDataLength databitlen, SkeinBitSequence *hashval); +SkeinHashReturn skein_hash(int hashbitlen, const SkeinBitSequence* data, + SkeinDataLength databitlen, SkeinBitSequence* hashval); -#endif /* ifndef _SKEIN_H_ */ +#endif /* ifndef _SKEIN_H_ */ diff --git a/xmrstak/backend/cpu/crypto/cn_gpu.hpp b/xmrstak/backend/cpu/crypto/cn_gpu.hpp index 5844d3814..2d333d118 100644 --- a/xmrstak/backend/cpu/crypto/cn_gpu.hpp +++ b/xmrstak/backend/cpu/crypto/cn_gpu.hpp @@ -4,8 +4,8 @@ #include #if defined(_WIN32) || defined(_WIN64) -#include #include +#include #define HAS_WIN_INTRIN_API #endif diff --git a/xmrstak/backend/cpu/crypto/cn_gpu_avx.cpp b/xmrstak/backend/cpu/crypto/cn_gpu_avx.cpp index 79b38373a..efded74c8 100644 --- a/xmrstak/backend/cpu/crypto/cn_gpu_avx.cpp +++ b/xmrstak/backend/cpu/crypto/cn_gpu_avx.cpp @@ -1,12 +1,12 @@ -#include "cn_gpu.hpp" #include "../../cryptonight.hpp" +#include "cn_gpu.hpp" -#pragma GCC target ("avx2") +#pragma GCC target("avx2") #ifndef _mm256_bslli_epi128 - #define _mm256_bslli_epi128(a, count) _mm256_slli_si256((a), (count)) +#define _mm256_bslli_epi128(a, count) _mm256_slli_si256((a), (count)) #endif #ifndef _mm256_bsrli_epi128 - #define _mm256_bsrli_epi128(a, count) _mm256_srli_si256((a), (count)) +#define _mm256_bsrli_epi128(a, count) _mm256_srli_si256((a), (count)) #endif inline void prep_dv_avx(__m256i* idx, __m256i& v, __m256& n01) @@ -67,7 +67,7 @@ inline void round_compute(const __m256& n0, const __m256& n1, const __m256& n2, // 112×4 = 448 template inline __m256i double_comupte(const __m256& n0, const __m256& n1, const __m256& n2, const __m256& n3, - float lcnt, float hcnt, const __m256& rnd_c, __m256& sum) + float lcnt, float hcnt, const __m256& rnd_c, __m256& sum) { __m256 c = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_set1_ps(lcnt)), _mm_set1_ps(hcnt), 1); __m256 r = _mm256_setzero_ps(); @@ -92,7 +92,7 @@ inline __m256i double_comupte(const __m256& n0, const __m256& n1, const __m256& template inline void double_comupte_wrap(const __m256& n0, const __m256& n1, const __m256& n2, const __m256& n3, - float lcnt, float hcnt, const __m256& rnd_c, __m256& sum, __m256i& out) + float lcnt, float hcnt, const __m256& rnd_c, __m256& sum, __m256i& out) { __m256i r = double_comupte(n0, n1, n2, n3, lcnt, hcnt, rnd_c, sum); if(rot != 0) @@ -101,9 +101,7 @@ inline void double_comupte_wrap(const __m256& n0, const __m256& n1, const __m256 out = _mm256_xor_si256(out, r); } - -inline __m256i* scratchpad_ptr(uint8_t* lpad, uint32_t idx, size_t n, const uint32_t mask) { return reinterpret_cast<__m256i*>(lpad + (idx & mask) + n*16); } - +inline __m256i* scratchpad_ptr(uint8_t* lpad, uint32_t idx, size_t n, const uint32_t mask) { return reinterpret_cast<__m256i*>(lpad + (idx & mask) + n * 16); } void cn_gpu_inner_avx(const uint8_t* spad, uint8_t* lpad, const xmrstak_algo& algo) { @@ -155,7 +153,7 @@ void cn_gpu_inner_avx(const uint8_t* spad, uint8_t* lpad, const xmrstak_algo& al sum1 = _mm256_add_ps(suma, sumb); out2 = _mm256_xor_si256(out2, out); - out2 = _mm256_xor_si256(_mm256_permute2x128_si256(out2,out2,0x41), out2); + out2 = _mm256_xor_si256(_mm256_permute2x128_si256(out2, out2, 0x41), out2); suma = _mm256_permute2f128_ps(sum0, sum1, 0x30); sumb = _mm256_permute2f128_ps(sum0, sum1, 0x21); sum0 = _mm256_add_ps(suma, sumb); diff --git a/xmrstak/backend/cpu/crypto/cn_gpu_ssse3.cpp b/xmrstak/backend/cpu/crypto/cn_gpu_ssse3.cpp index c8627d8b8..d65d9651e 100644 --- a/xmrstak/backend/cpu/crypto/cn_gpu_ssse3.cpp +++ b/xmrstak/backend/cpu/crypto/cn_gpu_ssse3.cpp @@ -1,7 +1,7 @@ -#include "cn_gpu.hpp" #include "../../cryptonight.hpp" +#include "cn_gpu.hpp" -#pragma GCC target ("sse2") +#pragma GCC target("sse2") inline void prep_dv(__m128i* idx, __m128i& v, __m128& n) { @@ -21,13 +21,13 @@ inline void sub_round(__m128 n0, __m128 n1, __m128 n2, __m128 n3, __m128 rnd_c, { n1 = _mm_add_ps(n1, c); __m128 nn = _mm_mul_ps(n0, c); - nn = _mm_mul_ps(n1, _mm_mul_ps(nn,nn)); + nn = _mm_mul_ps(n1, _mm_mul_ps(nn, nn)); nn = fma_break(nn); n = _mm_add_ps(n, nn); n3 = _mm_sub_ps(n3, c); __m128 dd = _mm_mul_ps(n2, c); - dd = _mm_mul_ps(n3, _mm_mul_ps(dd,dd)); + dd = _mm_mul_ps(n3, _mm_mul_ps(dd, dd)); dd = fma_break(dd); d = _mm_add_ps(d, dd); @@ -57,12 +57,12 @@ inline void round_compute(__m128 n0, __m128 n1, __m128 n2, __m128 n3, __m128 rnd // Make sure abs(d) > 2.0 - this prevents division by zero and accidental overflows by division by < 1.0 d = _mm_and_ps(_mm_castsi128_ps(_mm_set1_epi32(0xFF7FFFFF)), d); d = _mm_or_ps(_mm_castsi128_ps(_mm_set1_epi32(0x40000000)), d); - r =_mm_add_ps(r, _mm_div_ps(n,d)); + r = _mm_add_ps(r, _mm_div_ps(n, d)); } // 112×4 = 448 -template -inline __m128i single_comupte(__m128 n0, __m128 n1, __m128 n2, __m128 n3, float cnt, __m128 rnd_c, __m128& sum) +template +inline __m128i single_comupte(__m128 n0, __m128 n1, __m128 n2, __m128 n3, float cnt, __m128 rnd_c, __m128& sum) { __m128 c = _mm_set1_ps(cnt); __m128 r = _mm_setzero_ps(); @@ -85,8 +85,8 @@ inline __m128i single_comupte(__m128 n0, __m128 n1, __m128 n2, __m128 n3, floa return _mm_cvttps_epi32(r); } -template -inline void single_comupte_wrap(__m128 n0, __m128 n1, __m128 n2, __m128 n3, float cnt, __m128 rnd_c, __m128& sum, __m128i& out) +template +inline void single_comupte_wrap(__m128 n0, __m128 n1, __m128 n2, __m128 n3, float cnt, __m128 rnd_c, __m128& sum, __m128i& out) { __m128i r = single_comupte(n0, n1, n2, n3, cnt, rnd_c, sum); if(rot != 0) @@ -94,7 +94,7 @@ inline void single_comupte_wrap(__m128 n0, __m128 n1, __m128 n2, __m128 n3, flo out = _mm_xor_si128(out, r); } -inline __m128i* scratchpad_ptr(uint8_t* lpad, uint32_t idx, size_t n, const uint32_t mask) { return reinterpret_cast<__m128i*>(lpad + (idx & mask) + n*16); } +inline __m128i* scratchpad_ptr(uint8_t* lpad, uint32_t idx, size_t n, const uint32_t mask) { return reinterpret_cast<__m128i*>(lpad + (idx & mask) + n * 16); } void cn_gpu_inner_ssse3(const uint8_t* spad, uint8_t* lpad, const xmrstak_algo& algo) { diff --git a/xmrstak/backend/cpu/crypto/cryptonight.h b/xmrstak/backend/cpu/crypto/cryptonight.h index 488805ec0..c8b8320b0 100644 --- a/xmrstak/backend/cpu/crypto/cryptonight.h +++ b/xmrstak/backend/cpu/crypto/cryptonight.h @@ -1,6 +1,6 @@ #pragma once -#include #include +#include #include "variant4_random_math.h" @@ -12,8 +12,8 @@ struct cryptonight_ctx; -typedef void (*cn_mainloop_fun)(cryptonight_ctx *ctx); -typedef void (*cn_double_mainloop_fun)(cryptonight_ctx*, cryptonight_ctx*); +typedef void (*cn_mainloop_fun)(cryptonight_ctx* ctx); +typedef void (*cn_double_mainloop_fun)(cryptonight_ctx*, cryptonight_ctx*); typedef void (*cn_hash_fun)(const void*, size_t, void*, cryptonight_ctx**, const xmrstak_algo&); void v4_compile_code(size_t N, cryptonight_ctx* ctx, int code_size); @@ -36,11 +36,9 @@ struct cryptonight_ctx int asm_version = 0; xmrstak_algo last_algo = invalid_algo; - union - { + union { extra_ctx_r cn_r_ctx; }; - }; struct alloc_msg @@ -51,5 +49,3 @@ struct alloc_msg size_t cryptonight_init(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg); cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg); void cryptonight_free_ctx(cryptonight_ctx* ctx); - - diff --git a/xmrstak/backend/cpu/crypto/cryptonight_aesni.h b/xmrstak/backend/cpu/crypto/cryptonight_aesni.h index d7316b25e..6c9e3390c 100644 --- a/xmrstak/backend/cpu/crypto/cryptonight_aesni.h +++ b/xmrstak/backend/cpu/crypto/cryptonight_aesni.h @@ -15,22 +15,24 @@ */ #pragma once -#include "cryptonight.h" -#include "xmrstak/backend/cryptonight.hpp" #include "../../miner_work.hpp" #include "cn_gpu.hpp" +#include "cryptonight.h" +#include "xmrstak/backend/cryptonight.hpp" +#include #include #include -#include #include #ifdef _WIN64 -# include -# include -# include -# include +#include +// this comment disable clang include reordering +#include +#include +// this comment disable clang include reordering for windows.h +#include #else -# include +#include #endif #ifdef __GNUC__ @@ -54,9 +56,9 @@ static inline uint64_t _umul128(uint64_t a, uint64_t b, uint64_t* hi) extern "C" { - void keccak(const uint8_t *in, int inlen, uint8_t *md, int mdlen); + void keccak(const uint8_t* in, int inlen, uint8_t* md, int mdlen); void keccakf(uint64_t st[25], int rounds); - extern void(*const extra_hashes[4])(const void *, uint32_t, char *); + extern void (*const extra_hashes[4])(const void*, uint32_t, char*); } // This will shift and xor tmp1 into itself as 4 32-bit vals such as @@ -73,7 +75,7 @@ static inline __m128i sl_xor(__m128i tmp1) return tmp1; } -template +template static inline void aes_genkey_sub(__m128i* xout0, __m128i* xout2) { __m128i xout1 = _mm_aeskeygenassist_si128(*xout2, rcon); @@ -98,14 +100,14 @@ static inline void soft_aes_genkey_sub(__m128i* xout0, __m128i* xout2, uint8_t r *xout2 = _mm_xor_si128(*xout2, xout1); } -template +template static inline void aes_genkey(const __m128i* memory, __m128i* k0, __m128i* k1, __m128i* k2, __m128i* k3, __m128i* k4, __m128i* k5, __m128i* k6, __m128i* k7, __m128i* k8, __m128i* k9) { __m128i xout0, xout2; xout0 = _mm_load_si128(memory); - xout2 = _mm_load_si128(memory+1); + xout2 = _mm_load_si128(memory + 1); *k0 = xout0; *k1 = xout2; @@ -175,7 +177,7 @@ inline void mix_and_propagate(__m128i& x0, __m128i& x1, __m128i& x2, __m128i& x3 x7 = _mm_xor_si128(x7, tmp0); } -template +template void cn_explode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_algo& algo) { constexpr bool HEAVY_MIX = ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast; @@ -197,7 +199,7 @@ void cn_explode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_ if(HEAVY_MIX) { - for(size_t i=0; i < 16; i++) + for(size_t i = 0; i < 16; i++) { if(SOFT_AES) { @@ -230,7 +232,7 @@ void cn_explode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_ } const size_t MEM = algo.Mem(); - for (size_t i = 0; i < MEM / sizeof(__m128i); i += 8) + for(size_t i = 0; i < MEM / sizeof(__m128i); i += 8) { if(SOFT_AES) { @@ -277,29 +279,29 @@ void cn_explode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_ } } -template +template void cn_explode_scratchpad_gpu(const uint8_t* input, uint8_t* output, const xmrstak_algo& algo) { constexpr size_t hash_size = 200; // 25x8 bytes alignas(128) uint64_t hash[25]; const size_t mem = algo.Mem(); - for (uint64_t i = 0; i < mem / 512; i++) + for(uint64_t i = 0; i < mem / 512; i++) { memcpy(hash, input, hash_size); hash[0] ^= i; keccakf(hash, 24); memcpy(output, hash, 160); - output+=160; + output += 160; keccakf(hash, 24); memcpy(output, hash, 176); - output+=176; + output += 176; keccakf(hash, 24); memcpy(output, hash, 176); - output+=176; + output += 176; if(PREFETCH) { @@ -311,11 +313,11 @@ void cn_explode_scratchpad_gpu(const uint8_t* input, uint8_t* output, const xmrs } } -template +template void cn_implode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_algo& algo) { constexpr bool HEAVY_MIX = ALGO == cryptonight_heavy || ALGO == cryptonight_haven || - ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast || ALGO == cryptonight_gpu; + ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast || ALGO == cryptonight_gpu; // This is more than we have registers, compiler will assign 2 keys on the stack __m128i xout0, xout1, xout2, xout3, xout4, xout5, xout6, xout7; @@ -333,7 +335,7 @@ void cn_implode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_ xout7 = _mm_load_si128(output + 11); const size_t MEM = algo.Mem(); - for (size_t i = 0; i < MEM / sizeof(__m128i); i += 8) + for(size_t i = 0; i < MEM / sizeof(__m128i); i += 8) { if(PREFETCH) _mm_prefetch((const char*)input + i + 0, _MM_HINT_NTA); @@ -384,7 +386,7 @@ void cn_implode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_ if(HEAVY_MIX) { - for (size_t i = 0; i < MEM / sizeof(__m128i); i += 8) + for(size_t i = 0; i < MEM / sizeof(__m128i); i += 8) { if(PREFETCH) _mm_prefetch((const char*)input + i + 0, _MM_HINT_NTA); @@ -433,7 +435,7 @@ void cn_implode_scratchpad(const __m128i* input, __m128i* output, const xmrstak_ mix_and_propagate(xout0, xout1, xout2, xout3, xout4, xout5, xout6, xout7); } - for(size_t i=0; i < 16; i++) + for(size_t i = 0; i < 16; i++) { if(SOFT_AES) { @@ -494,7 +496,8 @@ inline uint64_t int_sqrt33_1_double_precision(const uint64_t n0) #else // GCC versions prior to 7 don't generate correct assembly for _subborrow_u64 -> _addcarry_u64 sequence // Fallback to simpler code - if (x2 < n0) ++r; + if(x2 < n0) + ++r; #endif return r; } @@ -505,7 +508,7 @@ inline __m128i aes_round_bittube2(const __m128i& val, const __m128i& key) alignas(16) uint32_t x[4]; _mm_store_si128((__m128i*)k, key); _mm_store_si128((__m128i*)x, _mm_xor_si128(val, _mm_cmpeq_epi32(_mm_setzero_si128(), _mm_setzero_si128()))); // x = ~val - #define BYTE(p, i) ((unsigned char*)&p)[i] +#define BYTE(p, i) ((unsigned char*)&p)[i] k[0] ^= saes_table[0][BYTE(x[0], 0)] ^ saes_table[1][BYTE(x[1], 1)] ^ saes_table[2][BYTE(x[2], 2)] ^ saes_table[3][BYTE(x[3], 3)]; x[0] ^= k[0]; k[1] ^= saes_table[0][BYTE(x[1], 0)] ^ saes_table[1][BYTE(x[2], 1)] ^ saes_table[2][BYTE(x[3], 2)] ^ saes_table[3][BYTE(x[0], 3)]; @@ -513,11 +516,11 @@ inline __m128i aes_round_bittube2(const __m128i& val, const __m128i& key) k[2] ^= saes_table[0][BYTE(x[2], 0)] ^ saes_table[1][BYTE(x[3], 1)] ^ saes_table[2][BYTE(x[0], 2)] ^ saes_table[3][BYTE(x[1], 3)]; x[2] ^= k[2]; k[3] ^= saes_table[0][BYTE(x[3], 0)] ^ saes_table[1][BYTE(x[0], 1)] ^ saes_table[2][BYTE(x[1], 2)] ^ saes_table[3][BYTE(x[2], 3)]; - #undef BYTE +#undef BYTE return _mm_load_si128((__m128i*)k); } -template +template inline void cryptonight_monero_tweak(uint64_t* mem_out, __m128i tmp) { mem_out[0] = _mm_cvtsi128_si64(tmp); @@ -541,7 +544,6 @@ inline void cryptonight_monero_tweak(uint64_t* mem_out, __m128i tmp) mem_out[1] = vh; } - } /** optimal type for sqrt @@ -550,18 +552,18 @@ inline void cryptonight_monero_tweak(uint64_t* mem_out, __m128i tmp) * * @tparam N number of hashes per thread */ -template +template struct GetOptimalSqrtType { using type = __m128i; }; -template<> +template <> struct GetOptimalSqrtType<1u> { using type = uint64_t; }; -template +template using GetOptimalSqrtType_t = typename GetOptimalSqrtType::type; /** assign a value and convert if necessary @@ -625,273 +627,275 @@ inline void cryptonight_conceal_tweak(__m128i& cx, __m128& conc_var) cx = _mm_xor_si128(cx, _mm_cvttps_epi32(nc)); } -#define CN_MONERO_V8_SHUFFLE_0(n, l0, idx0, ax0, bx0, bx1, cx) \ - /* Shuffle the other 3x16 byte chunks in the current 64-byte cache line */ \ +#define CN_MONERO_V8_SHUFFLE_0(n, l0, idx0, ax0, bx0, bx1, cx) \ + /* Shuffle the other 3x16 byte chunks in the current 64-byte cache line */ \ if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_r || ALGO == cryptonight_r_wow) \ - { \ - const uint64_t idx1 = idx0 & MASK; \ - const __m128i chunk1 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x10]); \ - const __m128i chunk2 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x20]); \ - const __m128i chunk3 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x30]); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ - if (ALGO == cryptonight_r) \ - cx = _mm_xor_si128(_mm_xor_si128(cx, chunk3), _mm_xor_si128(chunk1, chunk2)); \ - } \ - if(ALGO == cryptonight_v8_reversewaltz) \ - { \ - const uint64_t idx1 = idx0 & MASK; \ - const __m128i chunk3 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x10]); \ - const __m128i chunk2 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x20]); \ - const __m128i chunk1 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x30]); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ + { \ + const uint64_t idx1 = idx0 & MASK; \ + const __m128i chunk1 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x10]); \ + const __m128i chunk2 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x20]); \ + const __m128i chunk3 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x30]); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ + if(ALGO == cryptonight_r) \ + cx = _mm_xor_si128(_mm_xor_si128(cx, chunk3), _mm_xor_si128(chunk1, chunk2)); \ + } \ + if(ALGO == cryptonight_v8_reversewaltz) \ + { \ + const uint64_t idx1 = idx0 & MASK; \ + const __m128i chunk3 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x10]); \ + const __m128i chunk2 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x20]); \ + const __m128i chunk1 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x30]); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ } -#define CN_MONERO_V8_SHUFFLE_1(n, l0, idx0, ax0, bx0, bx1, lo, hi) \ - /* Shuffle the other 3x16 byte chunks in the current 64-byte cache line */ \ - if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_r_wow) \ - { \ - const uint64_t idx1 = idx0 & MASK; \ - const __m128i chunk1 = _mm_xor_si128(_mm_load_si128((__m128i *)&l0[idx1 ^ 0x10]), _mm_set_epi64x(lo, hi)); \ - const __m128i chunk2 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x20]); \ - hi ^= ((uint64_t*)&chunk2)[0]; \ - lo ^= ((uint64_t*)&chunk2)[1]; \ - const __m128i chunk3 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x30]); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ - } \ - if(ALGO == cryptonight_v8_reversewaltz) \ - { \ - const uint64_t idx1 = idx0 & MASK; \ - const __m128i chunk3 = _mm_xor_si128(_mm_load_si128((__m128i *)&l0[idx1 ^ 0x10]), _mm_set_epi64x(lo, hi)); \ - const __m128i chunk2 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x20]); \ - hi ^= ((uint64_t*)&chunk2)[0]; \ - lo ^= ((uint64_t*)&chunk2)[1]; \ - const __m128i chunk1 = _mm_load_si128((__m128i *)&l0[idx1 ^ 0x30]); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ - _mm_store_si128((__m128i *)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ +#define CN_MONERO_V8_SHUFFLE_1(n, l0, idx0, ax0, bx0, bx1, lo, hi) \ + /* Shuffle the other 3x16 byte chunks in the current 64-byte cache line */ \ + if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_r_wow) \ + { \ + const uint64_t idx1 = idx0 & MASK; \ + const __m128i chunk1 = _mm_xor_si128(_mm_load_si128((__m128i*)&l0[idx1 ^ 0x10]), _mm_set_epi64x(lo, hi)); \ + const __m128i chunk2 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x20]); \ + hi ^= ((uint64_t*)&chunk2)[0]; \ + lo ^= ((uint64_t*)&chunk2)[1]; \ + const __m128i chunk3 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x30]); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ + } \ + if(ALGO == cryptonight_v8_reversewaltz) \ + { \ + const uint64_t idx1 = idx0 & MASK; \ + const __m128i chunk3 = _mm_xor_si128(_mm_load_si128((__m128i*)&l0[idx1 ^ 0x10]), _mm_set_epi64x(lo, hi)); \ + const __m128i chunk2 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x20]); \ + hi ^= ((uint64_t*)&chunk2)[0]; \ + lo ^= ((uint64_t*)&chunk2)[1]; \ + const __m128i chunk1 = _mm_load_si128((__m128i*)&l0[idx1 ^ 0x30]); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x10], _mm_add_epi64(chunk3, bx1)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x20], _mm_add_epi64(chunk1, bx0)); \ + _mm_store_si128((__m128i*)&l0[idx1 ^ 0x30], _mm_add_epi64(chunk2, ax0)); \ } -#define CN_MONERO_V8_DIV(n, cx, sqrt_result, division_result_xmm, cl) \ - if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) \ - { \ - uint64_t sqrt_result_tmp; \ - assign(sqrt_result_tmp, sqrt_result); \ - /* Use division and square root results from the _previous_ iteration to hide the latency */ \ - const uint64_t cx_64 = _mm_cvtsi128_si64(cx); \ - cl ^= static_cast(_mm_cvtsi128_si64(division_result_xmm)) ^ (sqrt_result_tmp << 32); \ - const uint32_t d = (cx_64 + (sqrt_result_tmp << 1)) | 0x80000001UL; \ - /* Most and least significant bits in the divisor are set to 1 \ - * to make sure we don't divide by a small or even number, \ - * so there are no shortcuts for such cases \ - * \ - * Quotient may be as large as (2^64 - 1)/(2^31 + 1) = 8589934588 = 2^33 - 4 \ - * We drop the highest bit to fit both quotient and remainder in 32 bits \ - */ \ - /* Compiler will optimize it to a single div instruction */ \ - const uint64_t cx_s = _mm_cvtsi128_si64(_mm_srli_si128(cx, 8)); \ - const uint64_t division_result = static_cast(cx_s / d) + ((cx_s % d) << 32); \ - division_result_xmm = _mm_cvtsi64_si128(static_cast(division_result)); \ +#define CN_MONERO_V8_DIV(n, cx, sqrt_result, division_result_xmm, cl) \ + if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) \ + { \ + uint64_t sqrt_result_tmp; \ + assign(sqrt_result_tmp, sqrt_result); \ + /* Use division and square root results from the _previous_ iteration to hide the latency */ \ + const uint64_t cx_64 = _mm_cvtsi128_si64(cx); \ + cl ^= static_cast(_mm_cvtsi128_si64(division_result_xmm)) ^ (sqrt_result_tmp << 32); \ + const uint32_t d = (cx_64 + (sqrt_result_tmp << 1)) | 0x80000001UL; \ + /* Most and least significant bits in the divisor are set to 1 \ + * to make sure we don't divide by a small or even number, \ + * so there are no shortcuts for such cases \ + * \ + * Quotient may be as large as (2^64 - 1)/(2^31 + 1) = 8589934588 = 2^33 - 4 \ + * We drop the highest bit to fit both quotient and remainder in 32 bits \ + */ \ + /* Compiler will optimize it to a single div instruction */ \ + const uint64_t cx_s = _mm_cvtsi128_si64(_mm_srli_si128(cx, 8)); \ + const uint64_t division_result = static_cast(cx_s / d) + ((cx_s % d) << 32); \ + division_result_xmm = _mm_cvtsi64_si128(static_cast(division_result)); \ /* Use division_result as an input for the square root to prevent parallel implementation in hardware */ \ - assign(sqrt_result, int_sqrt33_1_double_precision(cx_64 + division_result)); \ + assign(sqrt_result, int_sqrt33_1_double_precision(cx_64 + division_result)); \ } -#define CN_R_RANDOM_MATH(n, al, ah, cl, bx0, bx1, cn_r_data) \ - if (ALGO == cryptonight_r || ALGO == cryptonight_r_wow) \ - { \ +#define CN_R_RANDOM_MATH(n, al, ah, cl, bx0, bx1, cn_r_data) \ + if(ALGO == cryptonight_r || ALGO == cryptonight_r_wow) \ + { \ cl ^= (cn_r_data[0] + cn_r_data[1]) | ((uint64_t)(cn_r_data[2] + cn_r_data[3]) << 32); \ - cn_r_data[4] = static_cast(al); \ - cn_r_data[5] = static_cast(ah); \ - cn_r_data[6] = static_cast(_mm_cvtsi128_si32(bx0)); \ - cn_r_data[7] = static_cast(_mm_cvtsi128_si32(bx1)); \ - cn_r_data[8] = static_cast(_mm_cvtsi128_si32(_mm_srli_si128(bx1, 8))); \ - v4_random_math(ctx[n]->cn_r_ctx.code, cn_r_data); \ - } \ - if (ALGO == cryptonight_r) \ - { \ - al ^= cn_r_data[2] | ((uint64_t)(cn_r_data[3]) << 32); \ - ah ^= cn_r_data[0] | ((uint64_t)(cn_r_data[1]) << 32); \ + cn_r_data[4] = static_cast(al); \ + cn_r_data[5] = static_cast(ah); \ + cn_r_data[6] = static_cast(_mm_cvtsi128_si32(bx0)); \ + cn_r_data[7] = static_cast(_mm_cvtsi128_si32(bx1)); \ + cn_r_data[8] = static_cast(_mm_cvtsi128_si32(_mm_srli_si128(bx1, 8))); \ + v4_random_math(ctx[n]->cn_r_ctx.code, cn_r_data); \ + } \ + if(ALGO == cryptonight_r) \ + { \ + al ^= cn_r_data[2] | ((uint64_t)(cn_r_data[3]) << 32); \ + ah ^= cn_r_data[0] | ((uint64_t)(cn_r_data[1]) << 32); \ } -#define CN_INIT_SINGLE \ +#define CN_INIT_SINGLE \ if((ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) && len < 43) \ - { \ - memset(output, 0, 32 * N); \ - return; \ + { \ + memset(output, 0, 32 * N); \ + return; \ } -#define CN_INIT(n, monero_const, conc_var, l0, ax0, bx0, idx0, ptr0, bx1, sqrt_result, division_result_xmm, cn_r_data) \ - keccak((const uint8_t *)input + len * n, len, ctx[n]->hash_state, 200); \ - uint64_t monero_const; \ +#define CN_INIT(n, monero_const, conc_var, l0, ax0, bx0, idx0, ptr0, bx1, sqrt_result, division_result_xmm, cn_r_data) \ + keccak((const uint8_t*)input + len * n, len, ctx[n]->hash_state, 200); \ + uint64_t monero_const; \ if(ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) \ - { \ - monero_const = *reinterpret_cast(reinterpret_cast(input) + len * n + 35); \ - monero_const ^= *(reinterpret_cast(ctx[n]->hash_state) + 24); \ - } \ - /* Optim - 99% time boundary */ \ - cn_explode_scratchpad((__m128i*)ctx[n]->hash_state, (__m128i*)ctx[n]->long_state, algo); \ - \ - __m128i ax0; \ - uint64_t idx0; \ - __m128i bx0; \ - uint8_t* l0 = ctx[n]->long_state; \ - /* BEGIN cryptonight_monero_v8 variables */ \ - __m128i bx1; \ - __m128i division_result_xmm; \ - __m128 conc_var; \ - if(ALGO == cryptonight_conceal) \ - {\ - set_float_rounding_mode_nearest(); \ - conc_var = _mm_setzero_ps(); \ - }\ - GetOptimalSqrtType_t sqrt_result; \ - uint32_t cn_r_data[9]; \ - /* END cryptonight_monero_v8 variables */ \ - { \ - uint64_t* h0 = (uint64_t*)ctx[n]->hash_state; \ - idx0 = h0[0] ^ h0[4]; \ - ax0 = _mm_set_epi64x(h0[1] ^ h0[5], idx0); \ - bx0 = _mm_set_epi64x(h0[3] ^ h0[7], h0[2] ^ h0[6]); \ - if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) \ - { \ - bx1 = _mm_set_epi64x(h0[9] ^ h0[11], h0[8] ^ h0[10]); \ - division_result_xmm = _mm_cvtsi64_si128(h0[12]); \ - assign(sqrt_result, h0[13]); \ - set_float_rounding_mode(); \ - } \ - if (ALGO == cryptonight_r || ALGO == cryptonight_r_wow) \ - { \ - bx1 = _mm_set_epi64x(h0[9] ^ h0[11], h0[8] ^ h0[10]); \ - cn_r_data[0] = (uint32_t)(h0[12]); \ - cn_r_data[1] = (uint32_t)(h0[12] >> 32); \ - cn_r_data[2] = (uint32_t)(h0[13]); \ - cn_r_data[3] = (uint32_t)(h0[13] >> 32); \ - } \ - } \ - __m128i *ptr0 + { \ + monero_const = *reinterpret_cast(reinterpret_cast(input) + len * n + 35); \ + monero_const ^= *(reinterpret_cast(ctx[n]->hash_state) + 24); \ + } \ + /* Optim - 99% time boundary */ \ + cn_explode_scratchpad((__m128i*)ctx[n]->hash_state, (__m128i*)ctx[n]->long_state, algo); \ + \ + __m128i ax0; \ + uint64_t idx0; \ + __m128i bx0; \ + uint8_t* l0 = ctx[n]->long_state; \ + /* BEGIN cryptonight_monero_v8 variables */ \ + __m128i bx1; \ + __m128i division_result_xmm; \ + __m128 conc_var; \ + if(ALGO == cryptonight_conceal) \ + { \ + set_float_rounding_mode_nearest(); \ + conc_var = _mm_setzero_ps(); \ + } \ + GetOptimalSqrtType_t sqrt_result; \ + uint32_t cn_r_data[9]; \ + /* END cryptonight_monero_v8 variables */ \ + { \ + uint64_t* h0 = (uint64_t*)ctx[n]->hash_state; \ + idx0 = h0[0] ^ h0[4]; \ + ax0 = _mm_set_epi64x(h0[1] ^ h0[5], idx0); \ + bx0 = _mm_set_epi64x(h0[3] ^ h0[7], h0[2] ^ h0[6]); \ + if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) \ + { \ + bx1 = _mm_set_epi64x(h0[9] ^ h0[11], h0[8] ^ h0[10]); \ + division_result_xmm = _mm_cvtsi64_si128(h0[12]); \ + assign(sqrt_result, h0[13]); \ + set_float_rounding_mode(); \ + } \ + if(ALGO == cryptonight_r || ALGO == cryptonight_r_wow) \ + { \ + bx1 = _mm_set_epi64x(h0[9] ^ h0[11], h0[8] ^ h0[10]); \ + cn_r_data[0] = (uint32_t)(h0[12]); \ + cn_r_data[1] = (uint32_t)(h0[12] >> 32); \ + cn_r_data[2] = (uint32_t)(h0[13]); \ + cn_r_data[3] = (uint32_t)(h0[13] >> 32); \ + } \ + } \ + __m128i* ptr0 #define CN_STEP1(n, monero_const, conc_var, l0, ax0, bx0, idx0, ptr0, cx, bx1) \ - __m128i cx; \ - ptr0 = (__m128i *)&l0[idx0 & MASK]; \ - cx = _mm_load_si128(ptr0); \ - if (ALGO == cryptonight_conceal) \ - cryptonight_conceal_tweak(cx, conc_var); \ - if (ALGO == cryptonight_bittube2) \ - { \ - cx = aes_round_bittube2(cx, ax0); \ - } \ - else \ - { \ - if(SOFT_AES) \ - cx = soft_aesenc(cx, ax0); \ - else \ - cx = _mm_aesenc_si128(cx, ax0); \ - } \ + __m128i cx; \ + ptr0 = (__m128i*)&l0[idx0 & MASK]; \ + cx = _mm_load_si128(ptr0); \ + if(ALGO == cryptonight_conceal) \ + cryptonight_conceal_tweak(cx, conc_var); \ + if(ALGO == cryptonight_bittube2) \ + { \ + cx = aes_round_bittube2(cx, ax0); \ + } \ + else \ + { \ + if(SOFT_AES) \ + cx = soft_aesenc(cx, ax0); \ + else \ + cx = _mm_aesenc_si128(cx, ax0); \ + } \ CN_MONERO_V8_SHUFFLE_0(n, l0, idx0, ax0, bx0, bx1, cx) -#define CN_STEP2(n, monero_const, l0, ax0, bx0, idx0, ptr0, cx) \ +#define CN_STEP2(n, monero_const, l0, ax0, bx0, idx0, ptr0, cx) \ if(ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) \ - cryptonight_monero_tweak((uint64_t*)ptr0, _mm_xor_si128(bx0, cx)); \ - else \ - _mm_store_si128((__m128i *)ptr0, _mm_xor_si128(bx0, cx)); \ - idx0 = _mm_cvtsi128_si64(cx); \ - \ - ptr0 = (__m128i *)&l0[idx0 & MASK]; \ - if(PREFETCH) \ - _mm_prefetch((const char*)ptr0, _MM_HINT_T0); \ - if(ALGO != cryptonight_monero_v8 && ALGO != cryptonight_r && ALGO != cryptonight_r_wow && ALGO != cryptonight_v8_reversewaltz) \ - bx0 = cx + cryptonight_monero_tweak((uint64_t*)ptr0, _mm_xor_si128(bx0, cx)); \ + else \ + _mm_store_si128((__m128i*)ptr0, _mm_xor_si128(bx0, cx)); \ + idx0 = _mm_cvtsi128_si64(cx); \ + \ + ptr0 = (__m128i*)&l0[idx0 & MASK]; \ + if(PREFETCH) \ + _mm_prefetch((const char*)ptr0, _MM_HINT_T0); \ + if(ALGO != cryptonight_monero_v8 && ALGO != cryptonight_r && ALGO != cryptonight_r_wow && ALGO != cryptonight_v8_reversewaltz) \ + bx0 = cx #define CN_STEP3(n, monero_const, l0, ax0, bx0, idx0, ptr0, lo, cl, ch, al0, ah0, cx, bx1, sqrt_result, division_result_xmm, cn_r_data) \ - uint64_t lo, cl, ch; \ - uint64_t al0 = _mm_cvtsi128_si64(ax0); \ - uint64_t ah0 = ((uint64_t*)&ax0)[1]; \ - cl = ((uint64_t*)ptr0)[0]; \ - ch = ((uint64_t*)ptr0)[1]; \ - CN_R_RANDOM_MATH(n, al0, ah0, cl, bx0, bx1, cn_r_data); \ - CN_MONERO_V8_DIV(n, cx, sqrt_result, division_result_xmm, cl); \ - { \ - uint64_t hi; \ - lo = _umul128(idx0, cl, &hi); \ - if(ALGO == cryptonight_r) \ - { \ - CN_MONERO_V8_SHUFFLE_0(n, l0, idx0, ax0, bx0, bx1, cx); \ - } \ - else \ - { \ - CN_MONERO_V8_SHUFFLE_1(n, l0, idx0, ax0, bx0, bx1, lo, hi); \ - } \ - ah0 += lo; \ - al0 += hi; \ - } \ - if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_r || ALGO == cryptonight_r_wow || ALGO == cryptonight_v8_reversewaltz) \ - { \ - bx1 = bx0; \ - bx0 = cx; \ - } \ - ((uint64_t*)ptr0)[0] = al0; \ - if(PREFETCH) \ - _mm_prefetch((const char*)ptr0, _MM_HINT_T0) - -#define CN_STEP4(n, monero_const, l0, ax0, bx0, idx0, ptr0, lo, cl, ch, al0, ah0) \ - if (ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) \ - { \ - if (ALGO == cryptonight_ipbc || ALGO == cryptonight_bittube2) \ - ((uint64_t*)ptr0)[1] = ah0 ^ monero_const ^ ((uint64_t*)ptr0)[0]; \ - else \ - ((uint64_t*)ptr0)[1] = ah0 ^ monero_const; \ - } \ - else \ - ((uint64_t*)ptr0)[1] = ah0; \ - al0 ^= cl; \ - ah0 ^= ch; \ - ax0 = _mm_set_epi64x(ah0, al0); \ + uint64_t lo, cl, ch; \ + uint64_t al0 = _mm_cvtsi128_si64(ax0); \ + uint64_t ah0 = ((uint64_t*)&ax0)[1]; \ + cl = ((uint64_t*)ptr0)[0]; \ + ch = ((uint64_t*)ptr0)[1]; \ + CN_R_RANDOM_MATH(n, al0, ah0, cl, bx0, bx1, cn_r_data); \ + CN_MONERO_V8_DIV(n, cx, sqrt_result, division_result_xmm, cl); \ + { \ + uint64_t hi; \ + lo = _umul128(idx0, cl, &hi); \ + if(ALGO == cryptonight_r) \ + { \ + CN_MONERO_V8_SHUFFLE_0(n, l0, idx0, ax0, bx0, bx1, cx); \ + } \ + else \ + { \ + CN_MONERO_V8_SHUFFLE_1(n, l0, idx0, ax0, bx0, bx1, lo, hi); \ + } \ + ah0 += lo; \ + al0 += hi; \ + } \ + if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_r || ALGO == cryptonight_r_wow || ALGO == cryptonight_v8_reversewaltz) \ + { \ + bx1 = bx0; \ + bx0 = cx; \ + } \ + ((uint64_t*)ptr0)[0] = al0; \ + if(PREFETCH) \ + _mm_prefetch((const char*)ptr0, _MM_HINT_T0) + +#define CN_STEP4(n, monero_const, l0, ax0, bx0, idx0, ptr0, lo, cl, ch, al0, ah0) \ + if(ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) \ + { \ + if(ALGO == cryptonight_ipbc || ALGO == cryptonight_bittube2) \ + ((uint64_t*)ptr0)[1] = ah0 ^ monero_const ^ ((uint64_t*)ptr0)[0]; \ + else \ + ((uint64_t*)ptr0)[1] = ah0 ^ monero_const; \ + } \ + else \ + ((uint64_t*)ptr0)[1] = ah0; \ + al0 ^= cl; \ + ah0 ^= ch; \ + ax0 = _mm_set_epi64x(ah0, al0); \ idx0 = al0; -#define CN_STEP5(n, monero_const, l0, ax0, bx0, idx0, ptr0) \ - if(ALGO == cryptonight_heavy || ALGO == cryptonight_bittube2) \ - { \ - ptr0 = (__m128i *)&l0[idx0 & MASK]; \ - int64_t u = ((int64_t*)ptr0)[0]; \ - int32_t d = ((int32_t*)ptr0)[2]; \ - int64_t q = u / (d | 0x5); \ - \ - ((int64_t*)ptr0)[0] = u ^ q; \ - idx0 = d ^ q; \ - } \ +#define CN_STEP5(n, monero_const, l0, ax0, bx0, idx0, ptr0) \ + if(ALGO == cryptonight_heavy || ALGO == cryptonight_bittube2) \ + { \ + ptr0 = (__m128i*)&l0[idx0 & MASK]; \ + int64_t u = ((int64_t*)ptr0)[0]; \ + int32_t d = ((int32_t*)ptr0)[2]; \ + int64_t q = u / (d | 0x5); \ + \ + ((int64_t*)ptr0)[0] = u ^ q; \ + idx0 = d ^ q; \ + } \ else if(ALGO == cryptonight_haven || ALGO == cryptonight_superfast) \ - { \ - ptr0 = (__m128i *)&l0[idx0 & MASK]; \ - int64_t u = ((int64_t*)ptr0)[0]; \ - int32_t d = ((int32_t*)ptr0)[2]; \ - int64_t q = u / (d | 0x5); \ - \ - ((int64_t*)ptr0)[0] = u ^ q; \ - idx0 = (~d) ^ q; \ + { \ + ptr0 = (__m128i*)&l0[idx0 & MASK]; \ + int64_t u = ((int64_t*)ptr0)[0]; \ + int32_t d = ((int32_t*)ptr0)[2]; \ + int64_t q = u / (d | 0x5); \ + \ + ((int64_t*)ptr0)[0] = u ^ q; \ + idx0 = (~d) ^ q; \ } -#define CN_FINALIZE(n) \ - /* Optim - 90% time boundary */ \ +#define CN_FINALIZE(n) \ + /* Optim - 90% time boundary */ \ cn_implode_scratchpad((__m128i*)ctx[n]->long_state, (__m128i*)ctx[n]->hash_state, algo); \ - /* Optim - 99% time boundary */ \ - keccakf((uint64_t*)ctx[n]->hash_state, 24); \ + /* Optim - 99% time boundary */ \ + keccakf((uint64_t*)ctx[n]->hash_state, 24); \ extra_hashes[ctx[n]->hash_state[0] & 3](ctx[n]->hash_state, 200, (char*)output + 32 * n) //! defer the evaluation of an macro #ifndef _MSC_VER -# define CN_DEFER(...) __VA_ARGS__ +#define CN_DEFER(...) __VA_ARGS__ #else -# define CN_EMPTY(...) -# define CN_DEFER(...) __VA_ARGS__ CN_EMPTY() +#define CN_EMPTY(...) +#define CN_DEFER(...) __VA_ARGS__ CN_EMPTY() #endif //! execute the macro f with the passed arguments -#define CN_EXEC(f,...) CN_DEFER(f)(__VA_ARGS__) +#define CN_EXEC(f, ...) \ + CN_DEFER(f) \ + (__VA_ARGS__) /** add append n to all arguments and keeps n as first argument * @@ -904,22 +908,22 @@ inline void cryptonight_conceal_tweak(__m128i& cx, __m128& conc_var) * @endcode */ #define CN_ENUM_0(n, ...) n -#define CN_ENUM_1(n, x1) n, x1 ## n -#define CN_ENUM_2(n, x1, x2) n, x1 ## n, x2 ## n -#define CN_ENUM_3(n, x1, x2, x3) n, x1 ## n, x2 ## n, x3 ## n -#define CN_ENUM_4(n, x1, x2, x3, x4) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n -#define CN_ENUM_5(n, x1, x2, x3, x4, x5) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n -#define CN_ENUM_6(n, x1, x2, x3, x4, x5, x6) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n -#define CN_ENUM_7(n, x1, x2, x3, x4, x5, x6, x7) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n -#define CN_ENUM_8(n, x1, x2, x3, x4, x5, x6, x7, x8) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n -#define CN_ENUM_9(n, x1, x2, x3, x4, x5, x6, x7, x8, x9) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n -#define CN_ENUM_10(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n, x10 ## n -#define CN_ENUM_11(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n, x10 ## n, x11 ## n -#define CN_ENUM_12(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n, x10 ## n, x11 ## n, x12 ## n -#define CN_ENUM_13(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n, x10 ## n, x11 ## n, x12 ## n, x13 ## n -#define CN_ENUM_14(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n, x10 ## n, x11 ## n, x12 ## n, x13 ## n, x14 ## n -#define CN_ENUM_15(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n, x10 ## n, x11 ## n, x12 ## n, x13 ## n, x14 ## n, x15 ## n -#define CN_ENUM_16(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) n, x1 ## n, x2 ## n, x3 ## n, x4 ## n, x5 ## n, x6 ## n, x7 ## n, x8 ## n, x9 ## n, x10 ## n, x11 ## n, x12 ## n, x13 ## n, x14 ## n, x15 ## n, x16 ## n +#define CN_ENUM_1(n, x1) n, x1##n +#define CN_ENUM_2(n, x1, x2) n, x1##n, x2##n +#define CN_ENUM_3(n, x1, x2, x3) n, x1##n, x2##n, x3##n +#define CN_ENUM_4(n, x1, x2, x3, x4) n, x1##n, x2##n, x3##n, x4##n +#define CN_ENUM_5(n, x1, x2, x3, x4, x5) n, x1##n, x2##n, x3##n, x4##n, x5##n +#define CN_ENUM_6(n, x1, x2, x3, x4, x5, x6) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n +#define CN_ENUM_7(n, x1, x2, x3, x4, x5, x6, x7) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n +#define CN_ENUM_8(n, x1, x2, x3, x4, x5, x6, x7, x8) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n +#define CN_ENUM_9(n, x1, x2, x3, x4, x5, x6, x7, x8, x9) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n +#define CN_ENUM_10(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n, x10##n +#define CN_ENUM_11(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n, x10##n, x11##n +#define CN_ENUM_12(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n, x10##n, x11##n, x12##n +#define CN_ENUM_13(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n, x10##n, x11##n, x12##n, x13##n +#define CN_ENUM_14(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n, x10##n, x11##n, x12##n, x13##n, x14##n +#define CN_ENUM_15(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n, x10##n, x11##n, x12##n, x13##n, x14##n, x15##n +#define CN_ENUM_16(n, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) n, x1##n, x2##n, x3##n, x4##n, x5##n, x6##n, x7##n, x8##n, x9##n, x10##n, x11##n, x12##n, x13##n, x14##n, x15##n, x16##n /** repeat a macro call multiple times * @@ -933,21 +937,35 @@ inline void cryptonight_conceal_tweak(__m128i& cx, __m128& conc_var) * f(0, foo0, bar); f(1, foo1, bar1) * @endcode */ -#define REPEAT_1(n, f, ...) CN_EXEC(f, CN_ENUM_ ## n(0, __VA_ARGS__)) -#define REPEAT_2(n, f, ...) CN_EXEC(f, CN_ENUM_ ## n(0, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(1, __VA_ARGS__)) -#define REPEAT_3(n, f, ...) CN_EXEC(f, CN_ENUM_ ## n(0, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(1, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(2, __VA_ARGS__)) -#define REPEAT_4(n, f, ...) CN_EXEC(f, CN_ENUM_ ## n(0, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(1, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(2, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(3, __VA_ARGS__)) -#define REPEAT_5(n, f, ...) CN_EXEC(f, CN_ENUM_ ## n(0, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(1, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(2, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(3, __VA_ARGS__)); CN_EXEC(f, CN_ENUM_ ## n(4, __VA_ARGS__)) - -template< size_t N> +#define REPEAT_1(n, f, ...) CN_EXEC(f, CN_ENUM_##n(0, __VA_ARGS__)) +#define REPEAT_2(n, f, ...) \ + CN_EXEC(f, CN_ENUM_##n(0, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(1, __VA_ARGS__)) +#define REPEAT_3(n, f, ...) \ + CN_EXEC(f, CN_ENUM_##n(0, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(1, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(2, __VA_ARGS__)) +#define REPEAT_4(n, f, ...) \ + CN_EXEC(f, CN_ENUM_##n(0, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(1, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(2, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(3, __VA_ARGS__)) +#define REPEAT_5(n, f, ...) \ + CN_EXEC(f, CN_ENUM_##n(0, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(1, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(2, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(3, __VA_ARGS__)); \ + CN_EXEC(f, CN_ENUM_##n(4, __VA_ARGS__)) + +template struct Cryptonight_hash; -template< > +template <> struct Cryptonight_hash<1> { static constexpr size_t N = 1; - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { const uint32_t MASK = algo.Mask(); @@ -971,12 +989,12 @@ struct Cryptonight_hash<1> } }; -template< > +template <> struct Cryptonight_hash<2> { static constexpr size_t N = 2; - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { const uint32_t MASK = algo.Mask(); @@ -1000,12 +1018,12 @@ struct Cryptonight_hash<2> } }; -template< > +template <> struct Cryptonight_hash<3> { static constexpr size_t N = 3; - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { const uint32_t MASK = algo.Mask(); @@ -1029,12 +1047,12 @@ struct Cryptonight_hash<3> } }; -template< > +template <> struct Cryptonight_hash<4> { static constexpr size_t N = 4; - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { const uint32_t MASK = algo.Mask(); @@ -1058,12 +1076,12 @@ struct Cryptonight_hash<4> } }; -template< > +template <> struct Cryptonight_hash<5> { static constexpr size_t N = 5; - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { const uint32_t MASK = algo.Mask(); @@ -1087,26 +1105,25 @@ struct Cryptonight_hash<5> } }; -extern "C" void cryptonight_v8_mainloop_ivybridge_asm(cryptonight_ctx* ctx0); -extern "C" void cryptonight_v8_mainloop_ryzen_asm(cryptonight_ctx* ctx0); +extern "C" void cryptonight_v8_mainloop_ivybridge_asm(cryptonight_ctx* ctx0); +extern "C" void cryptonight_v8_mainloop_ryzen_asm(cryptonight_ctx* ctx0); extern "C" void cryptonight_v8_double_mainloop_sandybridge_asm(cryptonight_ctx* ctx0, cryptonight_ctx* ctx1); - -template< size_t N, size_t asm_version> +template struct Cryptonight_hash_asm { - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { for(size_t i = 0; i < N; ++i) { - keccak((const uint8_t *)input + len * i, len, ctx[i]->hash_state, 200); + keccak((const uint8_t*)input + len * i, len, ctx[i]->hash_state, 200); cn_explode_scratchpad((__m128i*)ctx[i]->hash_state, (__m128i*)ctx[i]->long_state, algo); } if(ALGO == cryptonight_r) { // API ATTRIBUTE is only required for cryptonight_r - typedef void ABI_ATTRIBUTE (*cn_r_mainloop_fun)(cryptonight_ctx *ctx); + typedef void ABI_ATTRIBUTE (*cn_r_mainloop_fun)(cryptonight_ctx * ctx); for(size_t i = 0; i < N; ++i) reinterpret_cast(ctx[0]->loop_fn)(ctx[i]); // use always loop_fn from ctx[0]!! } @@ -1126,19 +1143,19 @@ struct Cryptonight_hash_asm }; // double hash with specialized asm only for intel -template< > +template <> struct Cryptonight_hash_asm<2, 0> { static constexpr size_t N = 2; - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { const size_t MEM = algo.Mem(); for(size_t i = 0; i < N; ++i) { - keccak((const uint8_t *)input + len * i, len, ctx[i]->hash_state, 200); + keccak((const uint8_t*)input + len * i, len, ctx[i]->hash_state, 200); /* Optim - 99% time boundary */ cn_explode_scratchpad((__m128i*)ctx[i]->hash_state, (__m128i*)ctx[i]->long_state, algo); } @@ -1167,89 +1184,90 @@ struct Cryptonight_hash_asm<2, 0> namespace { -template +template static void patchCode(T dst, U src, const uint32_t iterations, const uint32_t mask) { - const uint8_t* p = reinterpret_cast(src); - - // Workaround for Visual Studio placing trampoline in debug builds. -# if defined(_MSC_VER) - if (p[0] == 0xE9) { - p += *(int32_t*)(p + 1) + 5; - } -# endif - - size_t size = 0; - while (*(uint32_t*)(p + size) != 0xDEADC0DE) { - ++size; - } - size += sizeof(uint32_t); - - memcpy((void*) dst, (const void*) src, size); - - uint8_t* patched_data = reinterpret_cast(dst); - for (size_t i = 0; i + sizeof(uint32_t) <= size; ++i) { - switch (*(uint32_t*)(patched_data + i)) { - case CN_ITER: - *(uint32_t*)(patched_data + i) = iterations; - break; - - case CN_MASK: - *(uint32_t*)(patched_data + i) = mask; - break; - } - } -} + const uint8_t* p = reinterpret_cast(src); + + // Workaround for Visual Studio placing trampoline in debug builds. +#if defined(_MSC_VER) + if(p[0] == 0xE9) + { + p += *(int32_t*)(p + 1) + 5; + } +#endif + + size_t size = 0; + while(*(uint32_t*)(p + size) != 0xDEADC0DE) + { + ++size; + } + size += sizeof(uint32_t); + + memcpy((void*)dst, (const void*)src, size); + + uint8_t* patched_data = reinterpret_cast(dst); + for(size_t i = 0; i + sizeof(uint32_t) <= size; ++i) + { + switch(*(uint32_t*)(patched_data + i)) + { + case CN_ITER: + *(uint32_t*)(patched_data + i) = iterations; + break; + case CN_MASK: + *(uint32_t*)(patched_data + i) = mask; + break; + } + } +} void* allocateExecutableMemory(size_t size) { #ifdef _WIN64 -return VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); + return VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); +#else +#if defined(__APPLE__) + return mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0); #else -# if defined(__APPLE__) - return mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0); -# else - return mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -# endif + return mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); +#endif #endif } - -void protectExecutableMemory(void *p, size_t size) +void protectExecutableMemory(void* p, size_t size) { #ifdef _WIN64 - DWORD oldProtect; - VirtualProtect(p, size, PAGE_EXECUTE_READ, &oldProtect); + DWORD oldProtect; + VirtualProtect(p, size, PAGE_EXECUTE_READ, &oldProtect); #else - mprotect(p, size, PROT_READ | PROT_EXEC); + mprotect(p, size, PROT_READ | PROT_EXEC); #endif } -void unprotectExecutableMemory(void *p, size_t size) +void unprotectExecutableMemory(void* p, size_t size) { #ifdef _WIN64 - DWORD oldProtect; - VirtualProtect(p, size, PAGE_EXECUTE_READWRITE, &oldProtect); + DWORD oldProtect; + VirtualProtect(p, size, PAGE_EXECUTE_READWRITE, &oldProtect); #else - mprotect(p, size, PROT_WRITE | PROT_EXEC); + mprotect(p, size, PROT_WRITE | PROT_EXEC); #endif } - -void flushInstructionCache(void *p, size_t size) +void flushInstructionCache(void* p, size_t size) { #ifdef _WIN64 - ::FlushInstructionCache(GetCurrentProcess(), p, size); + ::FlushInstructionCache(GetCurrentProcess(), p, size); #else -# ifndef __FreeBSD__ - __builtin___clear_cache(reinterpret_cast(p), reinterpret_cast(p) + size); -# endif +#ifndef __FreeBSD__ + __builtin___clear_cache(reinterpret_cast(p), reinterpret_cast(p) + size); +#endif #endif } -template +template void patchAsmVariants(std::string selected_asm, cryptonight_ctx** ctx, const xmrstak_algo& algo) { const uint32_t Iter = algo.Iter(); @@ -1270,7 +1288,8 @@ void patchAsmVariants(std::string selected_asm, cryptonight_ctx** ctx, const xmr if(N == 2) src_code = reinterpret_cast(cryptonight_v8_double_mainloop_sandybridge_asm); else - src_code = cryptonight_v8_mainloop_ivybridge_asm;; + src_code = cryptonight_v8_mainloop_ivybridge_asm; + ; } // supports only 1 thread per hash if(selected_asm == "amd_avx") @@ -1295,19 +1314,17 @@ void patchAsmVariants(std::string selected_asm, cryptonight_ctx** ctx, const xmr flushInstructionCache(ctx[0]->fun_data, allocation_size); } } -} // namespace (anonymous) - - +} // namespace struct Cryptonight_hash_gpu { static constexpr size_t N = 1; - template + template static void hash(const void* input, size_t len, void* output, cryptonight_ctx** ctx, const xmrstak_algo& algo) { set_float_rounding_mode_nearest(); - keccak((const uint8_t *)input, len, ctx[0]->hash_state, 200); + keccak((const uint8_t*)input, len, ctx[0]->hash_state, 200); cn_explode_scratchpad_gpu(ctx[0]->hash_state, ctx[0]->long_state, algo); if(cngpu_check_avx2()) @@ -1321,16 +1338,15 @@ struct Cryptonight_hash_gpu } }; -template +template struct Cryptonight_R_generator { - template + template static void cn_on_new_job(const xmrstak::miner_work& work, cryptonight_ctx** ctx) { if(ctx[0]->cn_r_ctx.height == work.iBlockHeight && ctx[0]->last_algo == POW(cryptonight_r) && - reinterpret_cast(ctx[0]->hash_fn) == ctx[0]->fun_data - ) + reinterpret_cast(ctx[0]->hash_fn) == ctx[0]->fun_data) return; ctx[0]->last_algo = POW(cryptonight_r); @@ -1346,7 +1362,7 @@ struct Cryptonight_R_generator ctx[0]->hash_fn = Cryptonight_hash_asm::template hash; } - for(size_t i=1; i < N; i++) + for(size_t i = 1; i < N; i++) { ctx[i]->cn_r_ctx = ctx[0]->cn_r_ctx; ctx[i]->loop_fn = ctx[0]->loop_fn; diff --git a/xmrstak/backend/cpu/crypto/cryptonight_common.cpp b/xmrstak/backend/cpu/crypto/cryptonight_common.cpp index a9d1c96fd..e35c7c7b8 100644 --- a/xmrstak/backend/cpu/crypto/cryptonight_common.cpp +++ b/xmrstak/backend/cpu/crypto/cryptonight_common.cpp @@ -23,19 +23,19 @@ extern "C" { -#include "c_groestl.h" #include "c_blake256.h" +#include "c_groestl.h" #include "c_jh.h" #include "c_skein.h" } -#include "xmrstak/backend/cryptonight.hpp" #include "cryptonight.h" #include "cryptonight_aesni.h" -#include "xmrstak/misc/console.hpp" +#include "xmrstak/backend/cryptonight.hpp" #include "xmrstak/jconf.hpp" +#include "xmrstak/misc/console.hpp" +#include #include #include -#include #ifdef __GNUC__ #include @@ -49,30 +49,35 @@ extern "C" #ifdef _WIN32 #include +// this comment avoid that clang format reorders the includes #include #else -#include #include #include +#include #endif // _WIN32 -void do_blake_hash(const void* input, uint32_t len, char* output) { +void do_blake_hash(const void* input, uint32_t len, char* output) +{ blake256_hash((uint8_t*)output, (const uint8_t*)input, len); } -void do_groestl_hash(const void* input, uint32_t len, char* output) { +void do_groestl_hash(const void* input, uint32_t len, char* output) +{ groestl((const uint8_t*)input, len * 8, (uint8_t*)output); } -void do_jh_hash(const void* input, uint32_t len, char* output) { +void do_jh_hash(const void* input, uint32_t len, char* output) +{ jh_hash(32 * 8, (const uint8_t*)input, 8 * len, (uint8_t*)output); } -void do_skein_hash(const void* input, uint32_t len, char* output) { +void do_skein_hash(const void* input, uint32_t len, char* output) +{ skein_hash(8 * 32, (const uint8_t*)input, 8 * len, (uint8_t*)output); } -void (* const extra_hashes[4])(const void *, uint32_t, char *) = {do_blake_hash, do_groestl_hash, do_jh_hash, do_skein_hash}; +void (*const extra_hashes[4])(const void*, uint32_t, char*) = {do_blake_hash, do_groestl_hash, do_jh_hash, do_skein_hash}; #ifdef _WIN32 #include "xmrstak/misc/uac.hpp" @@ -81,21 +86,21 @@ BOOL bRebootDesirable = FALSE; //If VirtualAlloc fails, suggest a reboot BOOL AddPrivilege(TCHAR* pszPrivilege) { - HANDLE hToken; + HANDLE hToken; TOKEN_PRIVILEGES tp; - BOOL status; + BOOL status; - if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) + if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE; - if (!LookupPrivilegeValue(NULL, pszPrivilege, &tp.Privileges[0].Luid)) + if(!LookupPrivilegeValue(NULL, pszPrivilege, &tp.Privileges[0].Luid)) return FALSE; tp.PrivilegeCount = 1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; status = AdjustTokenPrivileges(hToken, FALSE, &tp, 0, (PTOKEN_PRIVILEGES)NULL, 0); - if (!status || (GetLastError() != ERROR_SUCCESS)) + if(!status || (GetLastError() != ERROR_SUCCESS)) return FALSE; CloseHandle(hToken); @@ -107,19 +112,19 @@ BOOL AddLargePageRights() HANDLE hToken; PTOKEN_USER user = NULL; - if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) == TRUE) + if(OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) == TRUE) { TOKEN_ELEVATION Elevation; DWORD cbSize = sizeof(TOKEN_ELEVATION); BOOL bIsElevated = FALSE; - if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) + if(GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) bIsElevated = Elevation.TokenIsElevated; DWORD size = 0; GetTokenInformation(hToken, TokenUser, NULL, 0, &size); - if (size > 0 && bIsElevated) + if(size > 0 && bIsElevated) { user = (PTOKEN_USER)LocalAlloc(LPTR, size); GetTokenInformation(hToken, TokenUser, user, size, &size); @@ -128,7 +133,7 @@ BOOL AddLargePageRights() CloseHandle(hToken); } - if (!user) + if(!user) return FALSE; LSA_HANDLE handle; @@ -136,7 +141,7 @@ BOOL AddLargePageRights() ZeroMemory(&attributes, sizeof(attributes)); BOOL result = FALSE; - if (LsaOpenPolicy(NULL, &attributes, POLICY_ALL_ACCESS, &handle) == 0) + if(LsaOpenPolicy(NULL, &attributes, POLICY_ALL_ACCESS, &handle) == 0) { LSA_UNICODE_STRING lockmem; lockmem.Buffer = L"SeLockMemoryPrivilege"; @@ -146,11 +151,11 @@ BOOL AddLargePageRights() PLSA_UNICODE_STRING rights = NULL; ULONG cnt = 0; BOOL bHasRights = FALSE; - if (LsaEnumerateAccountRights(handle, user->User.Sid, &rights, &cnt) == 0) + if(LsaEnumerateAccountRights(handle, user->User.Sid, &rights, &cnt) == 0) { - for (size_t i = 0; i < cnt; i++) + for(size_t i = 0; i < cnt; i++) { - if (rights[i].Length == lockmem.Length && + if(rights[i].Length == lockmem.Length && memcmp(rights[i].Buffer, lockmem.Buffer, 42) == 0) { bHasRights = TRUE; @@ -220,7 +225,7 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al ptr->ctx_info[0] = 0; ptr->ctx_info[1] = 0; if(ptr->long_state == NULL) - printer::inst()->print_msg(L0, "MEMORY ALLOC FAILED: _mm_malloc was not able to allocate %s byte",std::to_string(hashMemSize).c_str()); + printer::inst()->print_msg(L0, "MEMORY ALLOC FAILED: _mm_malloc was not able to allocate %s byte", std::to_string(hashMemSize).c_str()); return ptr; } @@ -250,7 +255,7 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al #else //http://man7.org/linux/man-pages/man2/mmap.2.html #if defined(__APPLE__) - ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, + ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0); #elif defined(__FreeBSD__) ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, @@ -261,7 +266,7 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al #else ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_POPULATE, -1, 0); - if (ptr->long_state == MAP_FAILED) + if(ptr->long_state == MAP_FAILED) { // try without MAP_HUGETLB for crappy kernels msg->warning = "mmap with HUGETLB failed, attempting without it (you should fix your kernel)"; @@ -270,7 +275,7 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al } #endif - if (ptr->long_state == MAP_FAILED) + if(ptr->long_state == MAP_FAILED) { _mm_free(ptr); msg->warning = "mmap failed, check attribute 'use_slow_memory' in 'config.txt'"; @@ -279,7 +284,7 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al ptr->ctx_info[0] = 1; - if(madvise(ptr->long_state, hashMemSize, MADV_RANDOM|MADV_WILLNEED) != 0) + if(madvise(ptr->long_state, hashMemSize, MADV_RANDOM | MADV_WILLNEED) != 0) msg->warning = "madvise failed"; ptr->ctx_info[1] = 0; diff --git a/xmrstak/backend/cpu/crypto/groestl_tables.h b/xmrstak/backend/cpu/crypto/groestl_tables.h index a23295c35..85dd25f3d 100644 --- a/xmrstak/backend/cpu/crypto/groestl_tables.h +++ b/xmrstak/backend/cpu/crypto/groestl_tables.h @@ -1,38 +1,6 @@ #ifndef __tables_h #define __tables_h - -const uint32_t T[512] = {0xa5f432c6, 0xc6a597f4, 0x84976ff8, 0xf884eb97, 0x99b05eee, 0xee99c7b0, 0x8d8c7af6, 0xf68df78c, 0xd17e8ff, 0xff0de517, 0xbddc0ad6, 0xd6bdb7dc, 0xb1c816de, 0xdeb1a7c8, 0x54fc6d91, 0x915439fc -, 0x50f09060, 0x6050c0f0, 0x3050702, 0x2030405, 0xa9e02ece, 0xcea987e0, 0x7d87d156, 0x567dac87, 0x192bcce7, 0xe719d52b, 0x62a613b5, 0xb56271a6, 0xe6317c4d, 0x4de69a31, 0x9ab559ec, 0xec9ac3b5 -, 0x45cf408f, 0x8f4505cf, 0x9dbca31f, 0x1f9d3ebc, 0x40c04989, 0x894009c0, 0x879268fa, 0xfa87ef92, 0x153fd0ef, 0xef15c53f, 0xeb2694b2, 0xb2eb7f26, 0xc940ce8e, 0x8ec90740, 0xb1de6fb, 0xfb0bed1d -, 0xec2f6e41, 0x41ec822f, 0x67a91ab3, 0xb3677da9, 0xfd1c435f, 0x5ffdbe1c, 0xea256045, 0x45ea8a25, 0xbfdaf923, 0x23bf46da, 0xf7025153, 0x53f7a602, 0x96a145e4, 0xe496d3a1, 0x5bed769b, 0x9b5b2ded -, 0xc25d2875, 0x75c2ea5d, 0x1c24c5e1, 0xe11cd924, 0xaee9d43d, 0x3dae7ae9, 0x6abef24c, 0x4c6a98be, 0x5aee826c, 0x6c5ad8ee, 0x41c3bd7e, 0x7e41fcc3, 0x206f3f5, 0xf502f106, 0x4fd15283, 0x834f1dd1 -, 0x5ce48c68, 0x685cd0e4, 0xf4075651, 0x51f4a207, 0x345c8dd1, 0xd134b95c, 0x818e1f9, 0xf908e918, 0x93ae4ce2, 0xe293dfae, 0x73953eab, 0xab734d95, 0x53f59762, 0x6253c4f5, 0x3f416b2a, 0x2a3f5441 -, 0xc141c08, 0x80c1014, 0x52f66395, 0x955231f6, 0x65afe946, 0x46658caf, 0x5ee27f9d, 0x9d5e21e2, 0x28784830, 0x30286078, 0xa1f8cf37, 0x37a16ef8, 0xf111b0a, 0xa0f1411, 0xb5c4eb2f, 0x2fb55ec4 -, 0x91b150e, 0xe091c1b, 0x365a7e24, 0x2436485a, 0x9bb6ad1b, 0x1b9b36b6, 0x3d4798df, 0xdf3da547, 0x266aa7cd, 0xcd26816a, 0x69bbf54e, 0x4e699cbb, 0xcd4c337f, 0x7fcdfe4c, 0x9fba50ea, 0xea9fcfba -, 0x1b2d3f12, 0x121b242d, 0x9eb9a41d, 0x1d9e3ab9, 0x749cc458, 0x5874b09c, 0x2e724634, 0x342e6872, 0x2d774136, 0x362d6c77, 0xb2cd11dc, 0xdcb2a3cd, 0xee299db4, 0xb4ee7329, 0xfb164d5b, 0x5bfbb616 -, 0xf601a5a4, 0xa4f65301, 0x4dd7a176, 0x764decd7, 0x61a314b7, 0xb76175a3, 0xce49347d, 0x7dcefa49, 0x7b8ddf52, 0x527ba48d, 0x3e429fdd, 0xdd3ea142, 0x7193cd5e, 0x5e71bc93, 0x97a2b113, 0x139726a2 -, 0xf504a2a6, 0xa6f55704, 0x68b801b9, 0xb96869b8, 0x0, 0x0, 0x2c74b5c1, 0xc12c9974, 0x60a0e040, 0x406080a0, 0x1f21c2e3, 0xe31fdd21, 0xc8433a79, 0x79c8f243, 0xed2c9ab6, 0xb6ed772c -, 0xbed90dd4, 0xd4beb3d9, 0x46ca478d, 0x8d4601ca, 0xd9701767, 0x67d9ce70, 0x4bddaf72, 0x724be4dd, 0xde79ed94, 0x94de3379, 0xd467ff98, 0x98d42b67, 0xe82393b0, 0xb0e87b23, 0x4ade5b85, 0x854a11de -, 0x6bbd06bb, 0xbb6b6dbd, 0x2a7ebbc5, 0xc52a917e, 0xe5347b4f, 0x4fe59e34, 0x163ad7ed, 0xed16c13a, 0xc554d286, 0x86c51754, 0xd762f89a, 0x9ad72f62, 0x55ff9966, 0x6655ccff, 0x94a7b611, 0x119422a7 -, 0xcf4ac08a, 0x8acf0f4a, 0x1030d9e9, 0xe910c930, 0x60a0e04, 0x406080a, 0x819866fe, 0xfe81e798, 0xf00baba0, 0xa0f05b0b, 0x44ccb478, 0x7844f0cc, 0xbad5f025, 0x25ba4ad5, 0xe33e754b, 0x4be3963e -, 0xf30eaca2, 0xa2f35f0e, 0xfe19445d, 0x5dfeba19, 0xc05bdb80, 0x80c01b5b, 0x8a858005, 0x58a0a85, 0xadecd33f, 0x3fad7eec, 0xbcdffe21, 0x21bc42df, 0x48d8a870, 0x7048e0d8, 0x40cfdf1, 0xf104f90c -, 0xdf7a1963, 0x63dfc67a, 0xc1582f77, 0x77c1ee58, 0x759f30af, 0xaf75459f, 0x63a5e742, 0x426384a5, 0x30507020, 0x20304050, 0x1a2ecbe5, 0xe51ad12e, 0xe12effd, 0xfd0ee112, 0x6db708bf, 0xbf6d65b7 -, 0x4cd45581, 0x814c19d4, 0x143c2418, 0x1814303c, 0x355f7926, 0x26354c5f, 0x2f71b2c3, 0xc32f9d71, 0xe13886be, 0xbee16738, 0xa2fdc835, 0x35a26afd, 0xcc4fc788, 0x88cc0b4f, 0x394b652e, 0x2e395c4b -, 0x57f96a93, 0x93573df9, 0xf20d5855, 0x55f2aa0d, 0x829d61fc, 0xfc82e39d, 0x47c9b37a, 0x7a47f4c9, 0xacef27c8, 0xc8ac8bef, 0xe73288ba, 0xbae76f32, 0x2b7d4f32, 0x322b647d, 0x95a442e6, 0xe695d7a4 -, 0xa0fb3bc0, 0xc0a09bfb, 0x98b3aa19, 0x199832b3, 0xd168f69e, 0x9ed12768, 0x7f8122a3, 0xa37f5d81, 0x66aaee44, 0x446688aa, 0x7e82d654, 0x547ea882, 0xabe6dd3b, 0x3bab76e6, 0x839e950b, 0xb83169e -, 0xca45c98c, 0x8cca0345, 0x297bbcc7, 0xc729957b, 0xd36e056b, 0x6bd3d66e, 0x3c446c28, 0x283c5044, 0x798b2ca7, 0xa779558b, 0xe23d81bc, 0xbce2633d, 0x1d273116, 0x161d2c27, 0x769a37ad, 0xad76419a -, 0x3b4d96db, 0xdb3bad4d, 0x56fa9e64, 0x6456c8fa, 0x4ed2a674, 0x744ee8d2, 0x1e223614, 0x141e2822, 0xdb76e492, 0x92db3f76, 0xa1e120c, 0xc0a181e, 0x6cb4fc48, 0x486c90b4, 0xe4378fb8, 0xb8e46b37 -, 0x5de7789f, 0x9f5d25e7, 0x6eb20fbd, 0xbd6e61b2, 0xef2a6943, 0x43ef862a, 0xa6f135c4, 0xc4a693f1, 0xa8e3da39, 0x39a872e3, 0xa4f7c631, 0x31a462f7, 0x37598ad3, 0xd337bd59, 0x8b8674f2, 0xf28bff86 -, 0x325683d5, 0xd532b156, 0x43c54e8b, 0x8b430dc5, 0x59eb856e, 0x6e59dceb, 0xb7c218da, 0xdab7afc2, 0x8c8f8e01, 0x18c028f, 0x64ac1db1, 0xb16479ac, 0xd26df19c, 0x9cd2236d, 0xe03b7249, 0x49e0923b -, 0xb4c71fd8, 0xd8b4abc7, 0xfa15b9ac, 0xacfa4315, 0x709faf3, 0xf307fd09, 0x256fa0cf, 0xcf25856f, 0xafea20ca, 0xcaaf8fea, 0x8e897df4, 0xf48ef389, 0xe9206747, 0x47e98e20, 0x18283810, 0x10182028 -, 0xd5640b6f, 0x6fd5de64, 0x888373f0, 0xf088fb83, 0x6fb1fb4a, 0x4a6f94b1, 0x7296ca5c, 0x5c72b896, 0x246c5438, 0x3824706c, 0xf1085f57, 0x57f1ae08, 0xc7522173, 0x73c7e652, 0x51f36497, 0x975135f3 -, 0x2365aecb, 0xcb238d65, 0x7c8425a1, 0xa17c5984, 0x9cbf57e8, 0xe89ccbbf, 0x21635d3e, 0x3e217c63, 0xdd7cea96, 0x96dd377c, 0xdc7f1e61, 0x61dcc27f, 0x86919c0d, 0xd861a91, 0x85949b0f, 0xf851e94 -, 0x90ab4be0, 0xe090dbab, 0x42c6ba7c, 0x7c42f8c6, 0xc4572671, 0x71c4e257, 0xaae529cc, 0xccaa83e5, 0xd873e390, 0x90d83b73, 0x50f0906, 0x6050c0f, 0x103f4f7, 0xf701f503, 0x12362a1c, 0x1c123836 -, 0xa3fe3cc2, 0xc2a39ffe, 0x5fe18b6a, 0x6a5fd4e1, 0xf910beae, 0xaef94710, 0xd06b0269, 0x69d0d26b, 0x91a8bf17, 0x17912ea8, 0x58e87199, 0x995829e8, 0x2769533a, 0x3a277469, 0xb9d0f727, 0x27b94ed0 -, 0x384891d9, 0xd938a948, 0x1335deeb, 0xeb13cd35, 0xb3cee52b, 0x2bb356ce, 0x33557722, 0x22334455, 0xbbd604d2, 0xd2bbbfd6, 0x709039a9, 0xa9704990, 0x89808707, 0x7890e80, 0xa7f2c133, 0x33a766f2 -, 0xb6c1ec2d, 0x2db65ac1, 0x22665a3c, 0x3c227866, 0x92adb815, 0x15922aad, 0x2060a9c9, 0xc9208960, 0x49db5c87, 0x874915db, 0xff1ab0aa, 0xaaff4f1a, 0x7888d850, 0x5078a088, 0x7a8e2ba5, 0xa57a518e -, 0x8f8a8903, 0x38f068a, 0xf8134a59, 0x59f8b213, 0x809b9209, 0x980129b, 0x1739231a, 0x1a173439, 0xda751065, 0x65daca75, 0x315384d7, 0xd731b553, 0xc651d584, 0x84c61351, 0xb8d303d0, 0xd0b8bbd3 -, 0xc35edc82, 0x82c31f5e, 0xb0cbe229, 0x29b052cb, 0x7799c35a, 0x5a77b499, 0x11332d1e, 0x1e113c33, 0xcb463d7b, 0x7bcbf646, 0xfc1fb7a8, 0xa8fc4b1f, 0xd6610c6d, 0x6dd6da61, 0x3a4e622c, 0x2c3a584e}; +const uint32_t T[512] = {0xa5f432c6, 0xc6a597f4, 0x84976ff8, 0xf884eb97, 0x99b05eee, 0xee99c7b0, 0x8d8c7af6, 0xf68df78c, 0xd17e8ff, 0xff0de517, 0xbddc0ad6, 0xd6bdb7dc, 0xb1c816de, 0xdeb1a7c8, 0x54fc6d91, 0x915439fc, 0x50f09060, 0x6050c0f0, 0x3050702, 0x2030405, 0xa9e02ece, 0xcea987e0, 0x7d87d156, 0x567dac87, 0x192bcce7, 0xe719d52b, 0x62a613b5, 0xb56271a6, 0xe6317c4d, 0x4de69a31, 0x9ab559ec, 0xec9ac3b5, 0x45cf408f, 0x8f4505cf, 0x9dbca31f, 0x1f9d3ebc, 0x40c04989, 0x894009c0, 0x879268fa, 0xfa87ef92, 0x153fd0ef, 0xef15c53f, 0xeb2694b2, 0xb2eb7f26, 0xc940ce8e, 0x8ec90740, 0xb1de6fb, 0xfb0bed1d, 0xec2f6e41, 0x41ec822f, 0x67a91ab3, 0xb3677da9, 0xfd1c435f, 0x5ffdbe1c, 0xea256045, 0x45ea8a25, 0xbfdaf923, 0x23bf46da, 0xf7025153, 0x53f7a602, 0x96a145e4, 0xe496d3a1, 0x5bed769b, 0x9b5b2ded, 0xc25d2875, 0x75c2ea5d, 0x1c24c5e1, 0xe11cd924, 0xaee9d43d, 0x3dae7ae9, 0x6abef24c, 0x4c6a98be, 0x5aee826c, 0x6c5ad8ee, 0x41c3bd7e, 0x7e41fcc3, 0x206f3f5, 0xf502f106, 0x4fd15283, 0x834f1dd1, 0x5ce48c68, 0x685cd0e4, 0xf4075651, 0x51f4a207, 0x345c8dd1, 0xd134b95c, 0x818e1f9, 0xf908e918, 0x93ae4ce2, 0xe293dfae, 0x73953eab, 0xab734d95, 0x53f59762, 0x6253c4f5, 0x3f416b2a, 0x2a3f5441, 0xc141c08, 0x80c1014, 0x52f66395, 0x955231f6, 0x65afe946, 0x46658caf, 0x5ee27f9d, 0x9d5e21e2, 0x28784830, 0x30286078, 0xa1f8cf37, 0x37a16ef8, 0xf111b0a, 0xa0f1411, 0xb5c4eb2f, 0x2fb55ec4, 0x91b150e, 0xe091c1b, 0x365a7e24, 0x2436485a, 0x9bb6ad1b, 0x1b9b36b6, 0x3d4798df, 0xdf3da547, 0x266aa7cd, 0xcd26816a, 0x69bbf54e, 0x4e699cbb, 0xcd4c337f, 0x7fcdfe4c, 0x9fba50ea, 0xea9fcfba, 0x1b2d3f12, 0x121b242d, 0x9eb9a41d, 0x1d9e3ab9, 0x749cc458, 0x5874b09c, 0x2e724634, 0x342e6872, 0x2d774136, 0x362d6c77, 0xb2cd11dc, 0xdcb2a3cd, 0xee299db4, 0xb4ee7329, 0xfb164d5b, 0x5bfbb616, 0xf601a5a4, 0xa4f65301, 0x4dd7a176, 0x764decd7, 0x61a314b7, 0xb76175a3, 0xce49347d, 0x7dcefa49, 0x7b8ddf52, 0x527ba48d, 0x3e429fdd, 0xdd3ea142, 0x7193cd5e, 0x5e71bc93, 0x97a2b113, 0x139726a2, 0xf504a2a6, 0xa6f55704, 0x68b801b9, 0xb96869b8, 0x0, 0x0, 0x2c74b5c1, 0xc12c9974, 0x60a0e040, 0x406080a0, 0x1f21c2e3, 0xe31fdd21, 0xc8433a79, 0x79c8f243, 0xed2c9ab6, 0xb6ed772c, 0xbed90dd4, 0xd4beb3d9, 0x46ca478d, 0x8d4601ca, 0xd9701767, 0x67d9ce70, 0x4bddaf72, 0x724be4dd, 0xde79ed94, 0x94de3379, 0xd467ff98, 0x98d42b67, 0xe82393b0, 0xb0e87b23, 0x4ade5b85, 0x854a11de, 0x6bbd06bb, 0xbb6b6dbd, 0x2a7ebbc5, 0xc52a917e, 0xe5347b4f, 0x4fe59e34, 0x163ad7ed, 0xed16c13a, 0xc554d286, 0x86c51754, 0xd762f89a, 0x9ad72f62, 0x55ff9966, 0x6655ccff, 0x94a7b611, 0x119422a7, 0xcf4ac08a, 0x8acf0f4a, 0x1030d9e9, 0xe910c930, 0x60a0e04, 0x406080a, 0x819866fe, 0xfe81e798, 0xf00baba0, 0xa0f05b0b, 0x44ccb478, 0x7844f0cc, 0xbad5f025, 0x25ba4ad5, 0xe33e754b, 0x4be3963e, 0xf30eaca2, 0xa2f35f0e, 0xfe19445d, 0x5dfeba19, 0xc05bdb80, 0x80c01b5b, 0x8a858005, 0x58a0a85, 0xadecd33f, 0x3fad7eec, 0xbcdffe21, 0x21bc42df, 0x48d8a870, 0x7048e0d8, 0x40cfdf1, 0xf104f90c, 0xdf7a1963, 0x63dfc67a, 0xc1582f77, 0x77c1ee58, 0x759f30af, 0xaf75459f, 0x63a5e742, 0x426384a5, 0x30507020, 0x20304050, 0x1a2ecbe5, 0xe51ad12e, 0xe12effd, 0xfd0ee112, 0x6db708bf, 0xbf6d65b7, 0x4cd45581, 0x814c19d4, 0x143c2418, 0x1814303c, 0x355f7926, 0x26354c5f, 0x2f71b2c3, 0xc32f9d71, 0xe13886be, 0xbee16738, 0xa2fdc835, 0x35a26afd, 0xcc4fc788, 0x88cc0b4f, 0x394b652e, 0x2e395c4b, 0x57f96a93, 0x93573df9, 0xf20d5855, 0x55f2aa0d, 0x829d61fc, 0xfc82e39d, 0x47c9b37a, 0x7a47f4c9, 0xacef27c8, 0xc8ac8bef, 0xe73288ba, 0xbae76f32, 0x2b7d4f32, 0x322b647d, 0x95a442e6, 0xe695d7a4, 0xa0fb3bc0, 0xc0a09bfb, 0x98b3aa19, 0x199832b3, 0xd168f69e, 0x9ed12768, 0x7f8122a3, 0xa37f5d81, 0x66aaee44, 0x446688aa, 0x7e82d654, 0x547ea882, 0xabe6dd3b, 0x3bab76e6, 0x839e950b, 0xb83169e, 0xca45c98c, 0x8cca0345, 0x297bbcc7, 0xc729957b, 0xd36e056b, 0x6bd3d66e, 0x3c446c28, 0x283c5044, 0x798b2ca7, 0xa779558b, 0xe23d81bc, 0xbce2633d, 0x1d273116, 0x161d2c27, 0x769a37ad, 0xad76419a, 0x3b4d96db, 0xdb3bad4d, 0x56fa9e64, 0x6456c8fa, 0x4ed2a674, 0x744ee8d2, 0x1e223614, 0x141e2822, 0xdb76e492, 0x92db3f76, 0xa1e120c, 0xc0a181e, 0x6cb4fc48, 0x486c90b4, 0xe4378fb8, 0xb8e46b37, 0x5de7789f, 0x9f5d25e7, 0x6eb20fbd, 0xbd6e61b2, 0xef2a6943, 0x43ef862a, 0xa6f135c4, 0xc4a693f1, 0xa8e3da39, 0x39a872e3, 0xa4f7c631, 0x31a462f7, 0x37598ad3, 0xd337bd59, 0x8b8674f2, 0xf28bff86, 0x325683d5, 0xd532b156, 0x43c54e8b, 0x8b430dc5, 0x59eb856e, 0x6e59dceb, 0xb7c218da, 0xdab7afc2, 0x8c8f8e01, 0x18c028f, 0x64ac1db1, 0xb16479ac, 0xd26df19c, 0x9cd2236d, 0xe03b7249, 0x49e0923b, 0xb4c71fd8, 0xd8b4abc7, 0xfa15b9ac, 0xacfa4315, 0x709faf3, 0xf307fd09, 0x256fa0cf, 0xcf25856f, 0xafea20ca, 0xcaaf8fea, 0x8e897df4, 0xf48ef389, 0xe9206747, 0x47e98e20, 0x18283810, 0x10182028, 0xd5640b6f, 0x6fd5de64, 0x888373f0, 0xf088fb83, 0x6fb1fb4a, 0x4a6f94b1, 0x7296ca5c, 0x5c72b896, 0x246c5438, 0x3824706c, 0xf1085f57, 0x57f1ae08, 0xc7522173, 0x73c7e652, 0x51f36497, 0x975135f3, 0x2365aecb, 0xcb238d65, 0x7c8425a1, 0xa17c5984, 0x9cbf57e8, 0xe89ccbbf, 0x21635d3e, 0x3e217c63, 0xdd7cea96, 0x96dd377c, 0xdc7f1e61, 0x61dcc27f, 0x86919c0d, 0xd861a91, 0x85949b0f, 0xf851e94, 0x90ab4be0, 0xe090dbab, 0x42c6ba7c, 0x7c42f8c6, 0xc4572671, 0x71c4e257, 0xaae529cc, 0xccaa83e5, 0xd873e390, 0x90d83b73, 0x50f0906, 0x6050c0f, 0x103f4f7, 0xf701f503, 0x12362a1c, 0x1c123836, 0xa3fe3cc2, 0xc2a39ffe, 0x5fe18b6a, 0x6a5fd4e1, 0xf910beae, 0xaef94710, 0xd06b0269, 0x69d0d26b, 0x91a8bf17, 0x17912ea8, 0x58e87199, 0x995829e8, 0x2769533a, 0x3a277469, 0xb9d0f727, 0x27b94ed0, 0x384891d9, 0xd938a948, 0x1335deeb, 0xeb13cd35, 0xb3cee52b, 0x2bb356ce, 0x33557722, 0x22334455, 0xbbd604d2, 0xd2bbbfd6, 0x709039a9, 0xa9704990, 0x89808707, 0x7890e80, 0xa7f2c133, 0x33a766f2, 0xb6c1ec2d, 0x2db65ac1, 0x22665a3c, 0x3c227866, 0x92adb815, 0x15922aad, 0x2060a9c9, 0xc9208960, 0x49db5c87, 0x874915db, 0xff1ab0aa, 0xaaff4f1a, 0x7888d850, 0x5078a088, 0x7a8e2ba5, 0xa57a518e, 0x8f8a8903, 0x38f068a, 0xf8134a59, 0x59f8b213, 0x809b9209, 0x980129b, 0x1739231a, 0x1a173439, 0xda751065, 0x65daca75, 0x315384d7, 0xd731b553, 0xc651d584, 0x84c61351, 0xb8d303d0, 0xd0b8bbd3, 0xc35edc82, 0x82c31f5e, 0xb0cbe229, 0x29b052cb, 0x7799c35a, 0x5a77b499, 0x11332d1e, 0x1e113c33, 0xcb463d7b, 0x7bcbf646, 0xfc1fb7a8, 0xa8fc4b1f, 0xd6610c6d, 0x6dd6da61, 0x3a4e622c, 0x2c3a584e}; #endif /* __tables_h */ diff --git a/xmrstak/backend/cpu/crypto/hash.h b/xmrstak/backend/cpu/crypto/hash.h index 2af330932..574581376 100644 --- a/xmrstak/backend/cpu/crypto/hash.h +++ b/xmrstak/backend/cpu/crypto/hash.h @@ -4,4 +4,9 @@ typedef unsigned char BitSequence; typedef uint32_t DataLength; -typedef enum {SUCCESS = 0, FAIL = 1, BAD_HASHLEN = 2} HashReturn; +typedef enum +{ + SUCCESS = 0, + FAIL = 1, + BAD_HASHLEN = 2 +} HashReturn; diff --git a/xmrstak/backend/cpu/crypto/int-util.h b/xmrstak/backend/cpu/crypto/int-util.h index 8748976c1..393b4f3d2 100644 --- a/xmrstak/backend/cpu/crypto/int-util.h +++ b/xmrstak/backend/cpu/crypto/int-util.h @@ -12,43 +12,51 @@ #if defined(_MSC_VER) #include -static inline uint32_t rol32(uint32_t x, int r) { +static inline uint32_t rol32(uint32_t x, int r) +{ static_assert(sizeof(uint32_t) == sizeof(unsigned int), "this code assumes 32-bit integers"); return _rotl(x, r); } -static inline uint64_t rol64(uint64_t x, int r) { +static inline uint64_t rol64(uint64_t x, int r) +{ return _rotl64(x, r); } #else -static inline uint32_t rol32(uint32_t x, int r) { +static inline uint32_t rol32(uint32_t x, int r) +{ return (x << (r & 31)) | (x >> (-r & 31)); } -static inline uint64_t rol64(uint64_t x, int r) { +static inline uint64_t rol64(uint64_t x, int r) +{ return (x << (r & 63)) | (x >> (-r & 63)); } #endif -static inline uint64_t hi_dword(uint64_t val) { +static inline uint64_t hi_dword(uint64_t val) +{ return val >> 32; } -static inline uint64_t lo_dword(uint64_t val) { +static inline uint64_t lo_dword(uint64_t val) +{ return val & 0xFFFFFFFF; } -static inline uint64_t div_with_reminder(uint64_t dividend, uint32_t divisor, uint32_t* remainder) { +static inline uint64_t div_with_reminder(uint64_t dividend, uint32_t divisor, uint32_t* remainder) +{ dividend |= ((uint64_t)*remainder) << 32; *remainder = dividend % divisor; return dividend / divisor; } // Long division with 2^32 base -static inline uint32_t div128_32(uint64_t dividend_hi, uint64_t dividend_lo, uint32_t divisor, uint64_t* quotient_hi, uint64_t* quotient_lo) { +static inline uint32_t div128_32(uint64_t dividend_hi, uint64_t dividend_lo, uint32_t divisor, uint64_t* quotient_hi, uint64_t* quotient_lo) +{ uint64_t dividend_dwords[4]; uint32_t remainder = 0; @@ -65,30 +73,35 @@ static inline uint32_t div128_32(uint64_t dividend_hi, uint64_t dividend_lo, uin return remainder; } -#define IDENT32(x) ((uint32_t) (x)) -#define IDENT64(x) ((uint64_t) (x)) +#define IDENT32(x) ((uint32_t)(x)) +#define IDENT64(x) ((uint64_t)(x)) -#define SWAP32(x) ((((uint32_t) (x) & 0x000000ff) << 24) | \ - (((uint32_t) (x) & 0x0000ff00) << 8) | \ - (((uint32_t) (x) & 0x00ff0000) >> 8) | \ - (((uint32_t) (x) & 0xff000000) >> 24)) -#define SWAP64(x) ((((uint64_t) (x) & 0x00000000000000ff) << 56) | \ - (((uint64_t) (x) & 0x000000000000ff00) << 40) | \ - (((uint64_t) (x) & 0x0000000000ff0000) << 24) | \ - (((uint64_t) (x) & 0x00000000ff000000) << 8) | \ - (((uint64_t) (x) & 0x000000ff00000000) >> 8) | \ - (((uint64_t) (x) & 0x0000ff0000000000) >> 24) | \ - (((uint64_t) (x) & 0x00ff000000000000) >> 40) | \ - (((uint64_t) (x) & 0xff00000000000000) >> 56)) +#define SWAP32(x) ((((uint32_t)(x)&0x000000ff) << 24) | \ + (((uint32_t)(x)&0x0000ff00) << 8) | \ + (((uint32_t)(x)&0x00ff0000) >> 8) | \ + (((uint32_t)(x)&0xff000000) >> 24)) +#define SWAP64(x) ((((uint64_t)(x)&0x00000000000000ff) << 56) | \ + (((uint64_t)(x)&0x000000000000ff00) << 40) | \ + (((uint64_t)(x)&0x0000000000ff0000) << 24) | \ + (((uint64_t)(x)&0x00000000ff000000) << 8) | \ + (((uint64_t)(x)&0x000000ff00000000) >> 8) | \ + (((uint64_t)(x)&0x0000ff0000000000) >> 24) | \ + (((uint64_t)(x)&0x00ff000000000000) >> 40) | \ + (((uint64_t)(x)&0xff00000000000000) >> 56)) -static inline uint32_t ident32(uint32_t x) { return x; } +static inline uint32_t ident32(uint32_t x) +{ + return x; +} static inline uint64_t ident64(uint64_t x) { return x; } -static inline uint32_t swap32(uint32_t x) { +static inline uint32_t swap32(uint32_t x) +{ x = ((x & 0x00ff00ff) << 8) | ((x & 0xff00ff00) >> 8); return (x << 16) | (x >> 16); } -static inline uint64_t swap64(uint64_t x) { +static inline uint64_t swap64(uint64_t x) +{ x = ((x & 0x00ff00ff00ff00ff) << 8) | ((x & 0xff00ff00ff00ff00) >> 8); x = ((x & 0x0000ffff0000ffff) << 16) | ((x & 0xffff0000ffff0000) >> 16); return (x << 32) | (x >> 32); @@ -99,39 +112,51 @@ static inline uint64_t swap64(uint64_t x) { #else #define UNUSED #endif -static inline void mem_inplace_ident(void *mem UNUSED, size_t n UNUSED) { } +static inline void mem_inplace_ident(void* mem UNUSED, size_t n UNUSED) +{ +} #undef UNUSED -static inline void mem_inplace_swap32(void *mem, size_t n) { +static inline void mem_inplace_swap32(void* mem, size_t n) +{ size_t i; - for (i = 0; i < n; i++) { - ((uint32_t *)mem)[i] = swap32(((const uint32_t *)mem)[i]); + for(i = 0; i < n; i++) + { + ((uint32_t*)mem)[i] = swap32(((const uint32_t*)mem)[i]); } } -static inline void mem_inplace_swap64(void *mem, size_t n) { +static inline void mem_inplace_swap64(void* mem, size_t n) +{ size_t i; - for (i = 0; i < n; i++) { - ((uint64_t *)mem)[i] = swap64(((const uint64_t *)mem)[i]); + for(i = 0; i < n; i++) + { + ((uint64_t*)mem)[i] = swap64(((const uint64_t*)mem)[i]); } } -static inline void memcpy_ident32(void *dst, const void *src, size_t n) { +static inline void memcpy_ident32(void* dst, const void* src, size_t n) +{ memcpy(dst, src, 4 * n); } -static inline void memcpy_ident64(void *dst, const void *src, size_t n) { +static inline void memcpy_ident64(void* dst, const void* src, size_t n) +{ memcpy(dst, src, 8 * n); } -static inline void memcpy_swap32(void *dst, const void *src, size_t n) { +static inline void memcpy_swap32(void* dst, const void* src, size_t n) +{ size_t i; - for (i = 0; i < n; i++) { - ((uint32_t *)dst)[i] = swap32(((const uint32_t *)src)[i]); + for(i = 0; i < n; i++) + { + ((uint32_t*)dst)[i] = swap32(((const uint32_t*)src)[i]); } } -static inline void memcpy_swap64(void *dst, const void *src, size_t n) { +static inline void memcpy_swap64(void* dst, const void* src, size_t n) +{ size_t i; - for (i = 0; i < n; i++) { - ((uint64_t *)dst)[i] = swap64(((const uint64_t *)src)[i]); + for(i = 0; i < n; i++) + { + ((uint64_t*)dst)[i] = swap64(((const uint64_t*)src)[i]); } } diff --git a/xmrstak/backend/cpu/crypto/skein_port.h b/xmrstak/backend/cpu/crypto/skein_port.h index 99641bcdf..1648cdc7d 100644 --- a/xmrstak/backend/cpu/crypto/skein_port.h +++ b/xmrstak/backend/cpu/crypto/skein_port.h @@ -2,38 +2,38 @@ #define _SKEIN_PORT_H_ #include -#include #include +#include #ifndef RETURN_VALUES -# define RETURN_VALUES -# if defined( DLL_EXPORT ) -# if defined( _MSC_VER ) || defined ( __INTEL_COMPILER ) -# define VOID_RETURN __declspec( dllexport ) void __stdcall -# define INT_RETURN __declspec( dllexport ) int __stdcall -# elif defined( __GNUC__ ) -# define VOID_RETURN __declspec( __dllexport__ ) void -# define INT_RETURN __declspec( __dllexport__ ) int -# else -# error Use of the DLL is only available on the Microsoft, Intel and GCC compilers -# endif -# elif defined( DLL_IMPORT ) -# if defined( _MSC_VER ) || defined ( __INTEL_COMPILER ) -# define VOID_RETURN __declspec( dllimport ) void __stdcall -# define INT_RETURN __declspec( dllimport ) int __stdcall -# elif defined( __GNUC__ ) -# define VOID_RETURN __declspec( __dllimport__ ) void -# define INT_RETURN __declspec( __dllimport__ ) int -# else -# error Use of the DLL is only available on the Microsoft, Intel and GCC compilers -# endif -# elif defined( __WATCOMC__ ) -# define VOID_RETURN void __cdecl -# define INT_RETURN int __cdecl -# else -# define VOID_RETURN void -# define INT_RETURN int -# endif +#define RETURN_VALUES +#if defined(DLL_EXPORT) +#if defined(_MSC_VER) || defined(__INTEL_COMPILER) +#define VOID_RETURN __declspec(dllexport) void __stdcall +#define INT_RETURN __declspec(dllexport) int __stdcall +#elif defined(__GNUC__) +#define VOID_RETURN __declspec(__dllexport__) void +#define INT_RETURN __declspec(__dllexport__) int +#else +#error Use of the DLL is only available on the Microsoft, Intel and GCC compilers +#endif +#elif defined(DLL_IMPORT) +#if defined(_MSC_VER) || defined(__INTEL_COMPILER) +#define VOID_RETURN __declspec(dllimport) void __stdcall +#define INT_RETURN __declspec(dllimport) int __stdcall +#elif defined(__GNUC__) +#define VOID_RETURN __declspec(__dllimport__) void +#define INT_RETURN __declspec(__dllimport__) int +#else +#error Use of the DLL is only available on the Microsoft, Intel and GCC compilers +#endif +#elif defined(__WATCOMC__) +#define VOID_RETURN void __cdecl +#define INT_RETURN int __cdecl +#else +#define VOID_RETURN void +#define INT_RETURN int +#endif #endif /* These defines are used to declare buffers in a way that allows @@ -52,17 +52,17 @@ variable of length 'size' bits */ -#define ui_type(size) uint##size##_t -#define dec_unit_type(size,x) typedef ui_type(size) x -#define dec_bufr_type(size,bsize,x) typedef ui_type(size) x[bsize / (size >> 3)] -#define ptr_cast(x,size) ((ui_type(size)*)(x)) +#define ui_type(size) uint##size##_t +#define dec_unit_type(size, x) typedef ui_type(size) x +#define dec_bufr_type(size, bsize, x) typedef ui_type(size) x[bsize / (size >> 3)] +#define ptr_cast(x, size) ((ui_type(size)*)(x)) -typedef unsigned int uint_t; /* native unsigned integer */ -typedef uint8_t u08b_t; /* 8-bit unsigned integer */ -typedef uint64_t u64b_t; /* 64-bit unsigned integer */ +typedef unsigned int uint_t; /* native unsigned integer */ +typedef uint8_t u08b_t; /* 8-bit unsigned integer */ +typedef uint64_t u64b_t; /* 64-bit unsigned integer */ #ifndef RotL_64 -#define RotL_64(x,N) (((x) << (N)) | ((x) >> (64-(N)))) +#define RotL_64(x, N) (((x) << (N)) | ((x) >> (64 - (N)))) #endif /* @@ -91,26 +91,25 @@ typedef uint64_t u64b_t; /* 64-bit unsigned integer */ /* special handler for IA64, which may be either endianness (?) */ /* here we assume little-endian, but this may need to be changed */ #if defined(__ia64) || defined(__ia64__) || defined(_M_IA64) -# define PLATFORM_MUST_ALIGN (1) +#define PLATFORM_MUST_ALIGN (1) #ifndef PLATFORM_BYTE_ORDER -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN +#define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN #endif #endif -#ifndef PLATFORM_MUST_ALIGN -# define PLATFORM_MUST_ALIGN (0) +#ifndef PLATFORM_MUST_ALIGN +#define PLATFORM_MUST_ALIGN (0) #endif - -#if PLATFORM_BYTE_ORDER == IS_BIG_ENDIAN - /* here for big-endian CPUs */ -#define SKEIN_NEED_SWAP (1) +#if PLATFORM_BYTE_ORDER == IS_BIG_ENDIAN +/* here for big-endian CPUs */ +#define SKEIN_NEED_SWAP (1) #elif PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN - /* here for x86 and x86-64 CPUs (and other detected little-endian CPUs) */ -#define SKEIN_NEED_SWAP (0) -#if PLATFORM_MUST_ALIGN == 0 /* ok to use "fast" versions? */ -#define Skein_Put64_LSB_First(dst08,src64,bCnt) memcpy(dst08,src64,bCnt) -#define Skein_Get64_LSB_First(dst64,src08,wCnt) memcpy(dst64,src08,8*(wCnt)) +/* here for x86 and x86-64 CPUs (and other detected little-endian CPUs) */ +#define SKEIN_NEED_SWAP (0) +#if PLATFORM_MUST_ALIGN == 0 /* ok to use "fast" versions? */ +#define Skein_Put64_LSB_First(dst08, src64, bCnt) memcpy(dst08, src64, bCnt) +#define Skein_Get64_LSB_First(dst64, src08, wCnt) memcpy(dst64, src08, 8 * (wCnt)) #endif #else #error "Skein needs endianness setting!" @@ -123,57 +122,55 @@ typedef uint64_t u64b_t; /* 64-bit unsigned integer */ * Provide any definitions still needed. ****************************************************************** */ -#ifndef Skein_Swap64 /* swap for big-endian, nop for little-endian */ -#if SKEIN_NEED_SWAP -#define Skein_Swap64(w64) \ - ( (( ((u64b_t)(w64)) & 0xFF) << 56) | \ - (((((u64b_t)(w64)) >> 8) & 0xFF) << 48) | \ - (((((u64b_t)(w64)) >>16) & 0xFF) << 40) | \ - (((((u64b_t)(w64)) >>24) & 0xFF) << 32) | \ - (((((u64b_t)(w64)) >>32) & 0xFF) << 24) | \ - (((((u64b_t)(w64)) >>40) & 0xFF) << 16) | \ - (((((u64b_t)(w64)) >>48) & 0xFF) << 8) | \ - (((((u64b_t)(w64)) >>56) & 0xFF) ) ) +#ifndef Skein_Swap64 /* swap for big-endian, nop for little-endian */ +#if SKEIN_NEED_SWAP +#define Skein_Swap64(w64) \ + (((((u64b_t)(w64)) & 0xFF) << 56) | \ + (((((u64b_t)(w64)) >> 8) & 0xFF) << 48) | \ + (((((u64b_t)(w64)) >> 16) & 0xFF) << 40) | \ + (((((u64b_t)(w64)) >> 24) & 0xFF) << 32) | \ + (((((u64b_t)(w64)) >> 32) & 0xFF) << 24) | \ + (((((u64b_t)(w64)) >> 40) & 0xFF) << 16) | \ + (((((u64b_t)(w64)) >> 48) & 0xFF) << 8) | \ + (((((u64b_t)(w64)) >> 56) & 0xFF))) #else -#define Skein_Swap64(w64) (w64) +#define Skein_Swap64(w64) (w64) #endif -#endif /* ifndef Skein_Swap64 */ - +#endif /* ifndef Skein_Swap64 */ #ifndef Skein_Put64_LSB_First -void Skein_Put64_LSB_First(u08b_t *dst,const u64b_t *src,size_t bCnt) -#ifdef SKEIN_PORT_CODE /* instantiate the function code here? */ - { /* this version is fully portable (big-endian or little-endian), but slow */ +void Skein_Put64_LSB_First(u08b_t* dst, const u64b_t* src, size_t bCnt) +#ifdef SKEIN_PORT_CODE /* instantiate the function code here? */ +{ /* this version is fully portable (big-endian or little-endian), but slow */ size_t n; - for (n=0;n>3] >> (8*(n&7))); - } + for(n = 0; n < bCnt; n++) + dst[n] = (u08b_t)(src[n >> 3] >> (8 * (n & 7))); +} #else - ; /* output only the function prototype */ + ; /* output only the function prototype */ #endif -#endif /* ifndef Skein_Put64_LSB_First */ - +#endif /* ifndef Skein_Put64_LSB_First */ #ifndef Skein_Get64_LSB_First -void Skein_Get64_LSB_First(u64b_t *dst,const u08b_t *src,size_t wCnt) -#ifdef SKEIN_PORT_CODE /* instantiate the function code here? */ - { /* this version is fully portable (big-endian or little-endian), but slow */ +void Skein_Get64_LSB_First(u64b_t* dst, const u08b_t* src, size_t wCnt) +#ifdef SKEIN_PORT_CODE /* instantiate the function code here? */ +{ /* this version is fully portable (big-endian or little-endian), but slow */ size_t n; - for (n=0;n<8*wCnt;n+=8) - dst[n/8] = (((u64b_t) src[n ]) ) + - (((u64b_t) src[n+1]) << 8) + - (((u64b_t) src[n+2]) << 16) + - (((u64b_t) src[n+3]) << 24) + - (((u64b_t) src[n+4]) << 32) + - (((u64b_t) src[n+5]) << 40) + - (((u64b_t) src[n+6]) << 48) + - (((u64b_t) src[n+7]) << 56) ; - } + for(n = 0; n < 8 * wCnt; n += 8) + dst[n / 8] = (((u64b_t)src[n])) + + (((u64b_t)src[n + 1]) << 8) + + (((u64b_t)src[n + 2]) << 16) + + (((u64b_t)src[n + 3]) << 24) + + (((u64b_t)src[n + 4]) << 32) + + (((u64b_t)src[n + 5]) << 40) + + (((u64b_t)src[n + 6]) << 48) + + (((u64b_t)src[n + 7]) << 56); +} #else - ; /* output only the function prototype */ + ; /* output only the function prototype */ #endif -#endif /* ifndef Skein_Get64_LSB_First */ +#endif /* ifndef Skein_Get64_LSB_First */ -#endif /* ifndef _SKEIN_PORT_H_ */ +#endif /* ifndef _SKEIN_PORT_H_ */ diff --git a/xmrstak/backend/cpu/crypto/soft_aes.hpp b/xmrstak/backend/cpu/crypto/soft_aes.hpp index 9b4ae0ab5..3ea75c5e6 100644 --- a/xmrstak/backend/cpu/crypto/soft_aes.hpp +++ b/xmrstak/backend/cpu/crypto/soft_aes.hpp @@ -34,56 +34,58 @@ #include -#define saes_data(w) {\ - w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\ - w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\ - w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\ - w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\ - w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\ - w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\ - w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\ - w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\ - w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\ - w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\ - w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\ - w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\ - w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\ - w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\ - w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\ - w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\ - w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\ - w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\ - w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\ - w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\ - w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\ - w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\ - w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\ - w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\ - w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\ - w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\ - w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\ - w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\ - w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\ - w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\ - w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\ - w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) } +#define saes_data(w) \ + { \ + w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5), \ + w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76), \ + w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0), \ + w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0), \ + w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc), \ + w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15), \ + w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a), \ + w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75), \ + w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0), \ + w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84), \ + w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b), \ + w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf), \ + w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85), \ + w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8), \ + w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5), \ + w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2), \ + w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17), \ + w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73), \ + w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88), \ + w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb), \ + w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c), \ + w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79), \ + w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9), \ + w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08), \ + w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6), \ + w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a), \ + w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e), \ + w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e), \ + w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94), \ + w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf), \ + w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68), \ + w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) \ + } -#define SAES_WPOLY 0x011b +#define SAES_WPOLY 0x011b #define saes_b2w(b0, b1, b2, b3) (((uint32_t)(b3) << 24) | \ - ((uint32_t)(b2) << 16) | ((uint32_t)(b1) << 8) | (b0)) + ((uint32_t)(b2) << 16) | ((uint32_t)(b1) << 8) | (b0)) -#define saes_f2(x) ((x<<1) ^ (((x>>7) & 1) * SAES_WPOLY)) -#define saes_f3(x) (saes_f2(x) ^ x) -#define saes_h0(x) (x) +#define saes_f2(x) ((x << 1) ^ (((x >> 7) & 1) * SAES_WPOLY)) +#define saes_f3(x) (saes_f2(x) ^ x) +#define saes_h0(x) (x) -#define saes_u0(p) saes_b2w(saes_f2(p), p, p, saes_f3(p)) -#define saes_u1(p) saes_b2w(saes_f3(p), saes_f2(p), p, p) -#define saes_u2(p) saes_b2w( p, saes_f3(p), saes_f2(p), p) -#define saes_u3(p) saes_b2w( p, p, saes_f3(p), saes_f2(p)) +#define saes_u0(p) saes_b2w(saes_f2(p), p, p, saes_f3(p)) +#define saes_u1(p) saes_b2w(saes_f3(p), saes_f2(p), p, p) +#define saes_u2(p) saes_b2w(p, saes_f3(p), saes_f2(p), p) +#define saes_u3(p) saes_b2w(p, p, saes_f3(p), saes_f2(p)) -alignas(16) const uint32_t saes_table[4][256] = { saes_data(saes_u0), saes_data(saes_u1), saes_data(saes_u2), saes_data(saes_u3) }; -alignas(16) const uint8_t saes_sbox[256] = saes_data(saes_h0); +alignas(16) const uint32_t saes_table[4][256] = {saes_data(saes_u0), saes_data(saes_u1), saes_data(saes_u2), saes_data(saes_u3)}; +alignas(16) const uint8_t saes_sbox[256] = saes_data(saes_h0); static inline __m128i soft_aesenc(__m128i in, __m128i key) { @@ -104,10 +106,10 @@ static inline __m128i soft_aesenc(__m128i in, __m128i key) static inline uint32_t sub_word(uint32_t key) { - return (saes_sbox[key >> 24 ] << 24) | - (saes_sbox[(key >> 16) & 0xff] << 16 ) | - (saes_sbox[(key >> 8) & 0xff] << 8 ) | - saes_sbox[key & 0xff]; + return (saes_sbox[key >> 24] << 24) | + (saes_sbox[(key >> 16) & 0xff] << 16) | + (saes_sbox[(key >> 8) & 0xff] << 8) | + saes_sbox[key & 0xff]; } #ifdef __clang__ @@ -121,5 +123,5 @@ static inline __m128i soft_aeskeygenassist(__m128i key, uint8_t rcon) { uint32_t X1 = sub_word(_mm_cvtsi128_si32(_mm_shuffle_epi32(key, 0x55))); uint32_t X3 = sub_word(_mm_cvtsi128_si32(_mm_shuffle_epi32(key, 0xFF))); - return _mm_set_epi32(_rotr(X3, 8) ^ rcon, X3,_rotr(X1, 8) ^ rcon, X1); + return _mm_set_epi32(_rotr(X3, 8) ^ rcon, X3, _rotr(X1, 8) ^ rcon, X1); } diff --git a/xmrstak/backend/cpu/crypto/variant4_random_math.h b/xmrstak/backend/cpu/crypto/variant4_random_math.h index 50228adf2..9fe61db51 100644 --- a/xmrstak/backend/cpu/crypto/variant4_random_math.h +++ b/xmrstak/backend/cpu/crypto/variant4_random_math.h @@ -1,12 +1,12 @@ #pragma once -#include #include "../../cryptonight.hpp" #include "xmrstak/misc/console.hpp" +#include extern "C" { - #include "c_blake256.h" +#include "c_blake256.h" } enum V4_Settings @@ -31,13 +31,13 @@ enum V4_Settings enum V4_InstructionList { - MUL, // a*b - ADD, // a+b + C, C is an unsigned 32-bit constant - SUB, // a-b - ROR, // rotate right "a" by "b & 31" bits - ROL, // rotate left "a" by "b & 31" bits - XOR, // a^b - RET, // finish execution + MUL, // a*b + ADD, // a+b + C, C is an unsigned 32-bit constant + SUB, // a-b + ROR, // rotate right "a" by "b & 31" bits + ROL, // rotate left "a" by "b & 31" bits + XOR, // a^b + RET, // finish execution V4_INSTRUCTION_COUNT = RET, }; @@ -87,7 +87,7 @@ struct V4_Instruction // every switch-case will point to the same destination on every iteration of Cryptonight main loop // // This is about as fast as it can get without using low-level machine code generation -template +template static void v4_random_math(const struct V4_Instruction* code, v4_reg* r) { enum @@ -95,55 +95,55 @@ static void v4_random_math(const struct V4_Instruction* code, v4_reg* r) REG_BITS = sizeof(v4_reg) * 8, }; -#define V4_EXEC(i) \ - { \ - const struct V4_Instruction* op = code + i; \ - const v4_reg src = r[op->src_index]; \ - v4_reg* dst = r + op->dst_index; \ - switch (op->opcode) \ - { \ - case MUL: \ - *dst *= src; \ - break; \ - case ADD: \ - *dst += src + op->C; \ - break; \ - case SUB: \ - *dst -= src; \ - break; \ - case ROR: \ - { \ - const uint32_t shift = src % REG_BITS; \ - *dst = (*dst >> shift) | (*dst << ((REG_BITS - shift) % REG_BITS)); \ - } \ - break; \ - case ROL: \ - { \ - const uint32_t shift = src % REG_BITS; \ - *dst = (*dst << shift) | (*dst >> ((REG_BITS - shift) % REG_BITS)); \ - } \ - break; \ - case XOR: \ - *dst ^= src; \ - break; \ - case RET: \ - return; \ - default: \ - UNREACHABLE_CODE; \ - break; \ - } \ +#define V4_EXEC(i) \ + { \ + const struct V4_Instruction* op = code + i; \ + const v4_reg src = r[op->src_index]; \ + v4_reg* dst = r + op->dst_index; \ + switch(op->opcode) \ + { \ + case MUL: \ + *dst *= src; \ + break; \ + case ADD: \ + *dst += src + op->C; \ + break; \ + case SUB: \ + *dst -= src; \ + break; \ + case ROR: \ + { \ + const uint32_t shift = src % REG_BITS; \ + *dst = (*dst >> shift) | (*dst << ((REG_BITS - shift) % REG_BITS)); \ + } \ + break; \ + case ROL: \ + { \ + const uint32_t shift = src % REG_BITS; \ + *dst = (*dst << shift) | (*dst >> ((REG_BITS - shift) % REG_BITS)); \ + } \ + break; \ + case XOR: \ + *dst ^= src; \ + break; \ + case RET: \ + return; \ + default: \ + UNREACHABLE_CODE; \ + break; \ + } \ } #define V4_EXEC_10(j) \ - V4_EXEC(j + 0) \ - V4_EXEC(j + 1) \ - V4_EXEC(j + 2) \ - V4_EXEC(j + 3) \ - V4_EXEC(j + 4) \ - V4_EXEC(j + 5) \ - V4_EXEC(j + 6) \ - V4_EXEC(j + 7) \ - V4_EXEC(j + 8) \ + V4_EXEC(j + 0) \ + V4_EXEC(j + 1) \ + V4_EXEC(j + 2) \ + V4_EXEC(j + 3) \ + V4_EXEC(j + 4) \ + V4_EXEC(j + 5) \ + V4_EXEC(j + 6) \ + V4_EXEC(j + 7) \ + V4_EXEC(j + 8) \ V4_EXEC(j + 9) // Generated program can have 60 + a few more (usually 2-3) instructions to achieve required latency @@ -161,13 +161,13 @@ static void v4_random_math(const struct V4_Instruction* code, v4_reg* r) // 69 102 // Unroll 70 instructions here - V4_EXEC_10(0); // instructions 0-9 - V4_EXEC_10(10); // instructions 10-19 - V4_EXEC_10(20); // instructions 20-29 - V4_EXEC_10(30); // instructions 30-39 - V4_EXEC_10(40); // instructions 40-49 - V4_EXEC_10(50); // instructions 50-59 - V4_EXEC_10(60); // instructions 60-69 + V4_EXEC_10(0); // instructions 0-9 + V4_EXEC_10(10); // instructions 10-19 + V4_EXEC_10(20); // instructions 20-29 + V4_EXEC_10(30); // instructions 30-39 + V4_EXEC_10(40); // instructions 40-49 + V4_EXEC_10(50); // instructions 50-59 + V4_EXEC_10(60); // instructions 60-69 #undef V4_EXEC_10 #undef V4_EXEC @@ -176,7 +176,7 @@ static void v4_random_math(const struct V4_Instruction* code, v4_reg* r) // If we don't have enough data available, generate more static FORCEINLINE void check_data(size_t* data_index, const size_t bytes_needed, int8_t* data, const size_t data_size) { - if (*data_index + bytes_needed > data_size) + if(*data_index + bytes_needed > data_size) { blake256_hash((uint8_t*)data, (uint8_t*)data, data_size); *data_index = 0; @@ -188,7 +188,7 @@ static FORCEINLINE void check_data(size_t* data_index, const size_t bytes_needed // Generates as many random math operations as possible with given latency and ALU restrictions // "code" array must have space for NUM_INSTRUCTIONS_MAX+1 instructions -template +template static int v4_random_math_init(struct V4_Instruction* code, const uint64_t height) { printer::inst()->print_msg(LDEBUG, "CryptonightR create random math for block %llu", height); @@ -199,13 +199,13 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // Surprisingly, Intel Nehalem also has 1-cycle ROR/ROL, so it'll also be faster than Intel Sandy Bridge and newer processors // AMD Bulldozer has 4 cycles latency for MUL (slower than Intel) and 1 cycle for ROR/ROL (faster than Intel), so average performance will be the same // Source: https://www.agner.org/optimize/instruction_tables.pdf - const int op_latency[V4_INSTRUCTION_COUNT] = { 3, 2, 1, 2, 2, 1 }; + const int op_latency[V4_INSTRUCTION_COUNT] = {3, 2, 1, 2, 2, 1}; // Instruction latencies for theoretical ASIC implementation - const int asic_op_latency[V4_INSTRUCTION_COUNT] = { 3, 1, 1, 1, 1, 1 }; + const int asic_op_latency[V4_INSTRUCTION_COUNT] = {3, 1, 1, 1, 1, 1}; // Available ALUs for each instruction - const int op_ALUs[V4_INSTRUCTION_COUNT] = { ALU_COUNT_MUL, ALU_COUNT, ALU_COUNT, ALU_COUNT, ALU_COUNT, ALU_COUNT }; + const int op_ALUs[V4_INSTRUCTION_COUNT] = {ALU_COUNT_MUL, ALU_COUNT, ALU_COUNT, ALU_COUNT, ALU_COUNT, ALU_COUNT}; int8_t data[32]; memset(data, 0, sizeof(data)); @@ -226,7 +226,8 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // There is a small chance (1.8%) that register R8 won't be used in the generated program // So we keep track of it and try again if it's not used bool r8_used; - do { + do + { int latency[9]; int asic_latency[9]; @@ -237,7 +238,7 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // // Registers R4-R8 are constant and are treated as having the same value because when we do // the same operation twice with two constant source registers, it can be optimized into a single operation - uint32_t inst_data[9] = { 0, 1, 2, 3, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF }; + uint32_t inst_data[9] = {0, 1, 2, 3, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF}; bool alu_busy[TOTAL_LATENCY + 1][ALU_COUNT]; bool is_rotation[V4_INSTRUCTION_COUNT]; @@ -260,11 +261,11 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // Generate random code to achieve minimal required latency for our abstract CPU // Try to get this latency for all 4 registers - while (((latency[0] < TOTAL_LATENCY) || (latency[1] < TOTAL_LATENCY) || (latency[2] < TOTAL_LATENCY) || (latency[3] < TOTAL_LATENCY)) && (num_retries < 64)) + while(((latency[0] < TOTAL_LATENCY) || (latency[1] < TOTAL_LATENCY) || (latency[2] < TOTAL_LATENCY) || (latency[3] < TOTAL_LATENCY)) && (num_retries < 64)) { // Fail-safe to guarantee loop termination ++total_iterations; - if (total_iterations > 256) + if(total_iterations > 256) break; check_data(&data_index, 1, data, sizeof(data)); @@ -277,12 +278,12 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // ROR/ROL = opcode 5, shift direction is selected randomly // XOR = opcodes 6-7 uint8_t opcode = c & ((1 << V4_OPCODE_BITS) - 1); - if (opcode == 5) + if(opcode == 5) { check_data(&data_index, 1, data, sizeof(data)); opcode = (data[data_index++] >= 0) ? ROR : ROL; } - else if (opcode >= 6) + else if(opcode >= 6) { opcode = XOR; } @@ -298,7 +299,7 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh int b = src_index; // Don't do ADD/SUB/XOR with the same register - if (((opcode == ADD) || (opcode == SUB) || (opcode == XOR)) && (a == b)) + if(((opcode == ADD) || (opcode == SUB) || (opcode == XOR)) && (a == b)) { // a is always < 4, so we don't need to check bounds here b = (ALGO == cryptonight_r_wow) ? (a + 4) : 8; @@ -306,7 +307,7 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh } // Don't do rotation with the same destination twice because it's equal to a single rotation - if (is_rotation[opcode] && rotated[a]) + if(is_rotation[opcode] && rotated[a]) { continue; } @@ -314,7 +315,7 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // Don't do the same instruction (except MUL) with the same source value twice because all other cases can be optimized: // 2xADD(a, b, C) = ADD(a, b*2, C1+C2), same for SUB and rotations // 2xXOR(a, b) = NOP - if ((opcode != MUL) && ((inst_data[a] & 0xFFFF00) == (opcode << 8) + ((inst_data[b] & 255) << 16))) + if((opcode != MUL) && ((inst_data[a] & 0xFFFF00) == (opcode << 8) + ((inst_data[b] & 255) << 16))) { continue; } @@ -322,20 +323,20 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // Find which ALU is available (and when) for this instruction int next_latency = (latency[a] > latency[b]) ? latency[a] : latency[b]; int alu_index = -1; - while (next_latency < TOTAL_LATENCY) + while(next_latency < TOTAL_LATENCY) { - for (int i = op_ALUs[opcode] - 1; i >= 0; --i) + for(int i = op_ALUs[opcode] - 1; i >= 0; --i) { - if (!alu_busy[next_latency][i]) + if(!alu_busy[next_latency][i]) { // ADD is implemented as two 1-cycle instructions on a real CPU, so do an additional availability check - if ((opcode == ADD) && alu_busy[next_latency + 1][i]) + if((opcode == ADD) && alu_busy[next_latency + 1][i]) { continue; } // Rotation can only start when previous rotation is finished, so do an additional availability check - if (is_rotation[opcode] && (next_latency < rotate_count * op_latency[opcode])) + if(is_rotation[opcode] && (next_latency < rotate_count * op_latency[opcode])) { continue; } @@ -344,7 +345,7 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh break; } } - if (alu_index >= 0) + if(alu_index >= 0) { break; } @@ -352,16 +353,16 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh } // Don't generate instructions that leave some register unchanged for more than 7 cycles - if (next_latency > latency[a] + 7) + if(next_latency > latency[a] + 7) { continue; } next_latency += op_latency[opcode]; - if (next_latency <= TOTAL_LATENCY) + if(next_latency <= TOTAL_LATENCY) { - if (is_rotation[opcode]) + if(is_rotation[opcode]) { ++rotate_count; } @@ -382,12 +383,12 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh code[code_size].src_index = src_index; code[code_size].C = 0; - if (src_index == 8) + if(src_index == 8) { r8_used = true; } - if (opcode == ADD) + if(opcode == ADD) { // ADD instruction is implemented as two 1-cycle instructions on a real CPU, so mark ALU as busy for the next cycle too alu_busy[next_latency - op_latency[opcode] + 1][alu_index] = true; @@ -401,7 +402,7 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh } ++code_size; - if (code_size >= NUM_INSTRUCTIONS_MIN) + if(code_size >= NUM_INSTRUCTIONS_MIN) { break; } @@ -416,17 +417,19 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh // We need to add a few more MUL and ROR instructions to achieve minimal required latency for ASIC // Get this latency for at least 1 of the 4 registers const int prev_code_size = code_size; - while ((code_size < NUM_INSTRUCTIONS_MAX) && (asic_latency[0] < TOTAL_LATENCY) && (asic_latency[1] < TOTAL_LATENCY) && (asic_latency[2] < TOTAL_LATENCY) && (asic_latency[3] < TOTAL_LATENCY)) + while((code_size < NUM_INSTRUCTIONS_MAX) && (asic_latency[0] < TOTAL_LATENCY) && (asic_latency[1] < TOTAL_LATENCY) && (asic_latency[2] < TOTAL_LATENCY) && (asic_latency[3] < TOTAL_LATENCY)) { int min_idx = 0; int max_idx = 0; - for (int i = 1; i < 4; ++i) + for(int i = 1; i < 4; ++i) { - if (asic_latency[i] < asic_latency[min_idx]) min_idx = i; - if (asic_latency[i] > asic_latency[max_idx]) max_idx = i; + if(asic_latency[i] < asic_latency[min_idx]) + min_idx = i; + if(asic_latency[i] > asic_latency[max_idx]) + max_idx = i; } - const uint8_t pattern[3] = { ROR, MUL, MUL }; + const uint8_t pattern[3] = {ROR, MUL, MUL}; const uint8_t opcode = pattern[(code_size - prev_code_size) % 3]; latency[min_idx] = latency[max_idx] + op_latency[opcode]; asic_latency[min_idx] = asic_latency[max_idx] + asic_op_latency[opcode]; @@ -438,9 +441,9 @@ static int v4_random_math_init(struct V4_Instruction* code, const uint64_t heigh ++code_size; } - // There is ~98.15% chance that loop condition is false, so this loop will execute only 1 iteration most of the time - // It never does more than 4 iterations for all block heights < 10,000,000 - } while (!r8_used || (code_size < NUM_INSTRUCTIONS_MIN) || (code_size > NUM_INSTRUCTIONS_MAX)); + // There is ~98.15% chance that loop condition is false, so this loop will execute only 1 iteration most of the time + // It never does more than 4 iterations for all block heights < 10,000,000 + } while(!r8_used || (code_size < NUM_INSTRUCTIONS_MIN) || (code_size > NUM_INSTRUCTIONS_MAX)); // It's guaranteed that NUM_INSTRUCTIONS_MIN <= code_size <= NUM_INSTRUCTIONS_MAX here // Add final instruction to stop the interpreter diff --git a/xmrstak/backend/cpu/hwlocMemory.cpp b/xmrstak/backend/cpu/hwlocMemory.cpp index 089570fc0..804edc55d 100644 --- a/xmrstak/backend/cpu/hwlocMemory.cpp +++ b/xmrstak/backend/cpu/hwlocMemory.cpp @@ -13,7 +13,7 @@ * * @param puId core id */ -void bindMemoryToNUMANode( size_t puId ) +void bindMemoryToNUMANode(size_t puId) { int depth; hwloc_topology_t topology; @@ -30,18 +30,18 @@ void bindMemoryToNUMANode( size_t puId ) depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU); - for( uint32_t i = 0; + for(uint32_t i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth); - i++ ) + i++) { hwloc_obj_t pu = hwloc_get_obj_by_depth(topology, depth, i); - if( pu->os_index == puId ) + if(pu->os_index == puId) { - if( 0 > hwloc_set_membind_nodeset( - topology, - pu->nodeset, - HWLOC_MEMBIND_BIND, - HWLOC_MEMBIND_THREAD)) + if(0 > hwloc_set_membind_nodeset( + topology, + pu->nodeset, + HWLOC_MEMBIND_BIND, + HWLOC_MEMBIND_THREAD)) { printer::inst()->print_msg(L0, "hwloc: can't bind memory"); } @@ -57,7 +57,7 @@ void bindMemoryToNUMANode( size_t puId ) } #else -void bindMemoryToNUMANode( size_t ) +void bindMemoryToNUMANode(size_t) { } diff --git a/xmrstak/backend/cpu/hwlocMemory.hpp b/xmrstak/backend/cpu/hwlocMemory.hpp index 2130c2ced..42fa3456f 100644 --- a/xmrstak/backend/cpu/hwlocMemory.hpp +++ b/xmrstak/backend/cpu/hwlocMemory.hpp @@ -9,4 +9,4 @@ * * @param puId core id */ -void bindMemoryToNUMANode( size_t puId ); +void bindMemoryToNUMANode(size_t puId); diff --git a/xmrstak/backend/cpu/jconf.cpp b/xmrstak/backend/cpu/jconf.cpp index a14be1732..a7bb91d61 100644 --- a/xmrstak/backend/cpu/jconf.cpp +++ b/xmrstak/backend/cpu/jconf.cpp @@ -37,7 +37,6 @@ #include #endif - namespace xmrstak { namespace cpu @@ -48,9 +47,14 @@ using namespace rapidjson; /* * This enum needs to match index in oConfigValues, otherwise we will get a runtime error */ -enum configEnum { aCpuThreadsConf, sUseSlowMem }; +enum configEnum +{ + aCpuThreadsConf, + sUseSlowMem +}; -struct configVal { +struct configVal +{ configEnum iName; const char* sName; Type iType; @@ -59,10 +63,9 @@ struct configVal { // Same order as in configEnum, as per comment above // kNullType means any type configVal oConfigValues[] = { - { aCpuThreadsConf, "cpu_threads_conf", kNullType } -}; + {aCpuThreadsConf, "cpu_threads_conf", kNullType}}; -constexpr size_t iConfigCnt = (sizeof(oConfigValues)/sizeof(oConfigValues[0])); +constexpr size_t iConfigCnt = (sizeof(oConfigValues) / sizeof(oConfigValues[0])); inline bool checkType(Type have, Type want) { @@ -95,7 +98,7 @@ jconf::jconf() prv = new opaque_private(); } -bool jconf::GetThreadConfig(size_t id, thd_cfg &cfg) +bool jconf::GetThreadConfig(size_t id, thd_cfg& cfg) { if(!prv->configValues[aCpuThreadsConf]->IsArray()) return false; @@ -148,7 +151,6 @@ bool jconf::GetThreadConfig(size_t id, thd_cfg &cfg) return true; } - size_t jconf::GetThreadCount() { if(prv->configValues[aCpuThreadsConf]->IsArray()) @@ -159,22 +161,22 @@ size_t jconf::GetThreadCount() bool jconf::parse_config(const char* sFilename) { - FILE * pFile; - char * buffer; + FILE* pFile; + char* buffer; size_t flen; pFile = fopen(sFilename, "rb"); - if (pFile == NULL) + if(pFile == NULL) { printer::inst()->print_msg(L0, "Failed to open config file %s.", sFilename); return false; } - fseek(pFile,0,SEEK_END); + fseek(pFile, 0, SEEK_END); flen = ftell(pFile); rewind(pFile); - if(flen >= 64*1024) + if(flen >= 64 * 1024) { fclose(pFile); printer::inst()->print_msg(L0, "Oversized config file - %s.", sFilename); @@ -189,7 +191,7 @@ bool jconf::parse_config(const char* sFilename) } buffer = (char*)malloc(flen + 3); - if(fread(buffer+1, flen, 1, pFile) != 1) + if(fread(buffer + 1, flen, 1, pFile) != 1) { free(buffer); fclose(pFile); @@ -211,7 +213,7 @@ bool jconf::parse_config(const char* sFilename) buffer[flen] = '}'; buffer[flen + 1] = '\0'; - prv->jsonDoc.Parse(buffer, flen+2); + prv->jsonDoc.Parse(buffer, flen + 2); free(buffer); if(prv->jsonDoc.HasParseError()) @@ -251,7 +253,7 @@ bool jconf::parse_config(const char* sFilename) } thd_cfg c; - for(size_t i=0; i < GetThreadCount(); i++) + for(size_t i = 0; i < GetThreadCount(); i++) { if(!GetThreadConfig(i, c)) { diff --git a/xmrstak/backend/cpu/jconf.hpp b/xmrstak/backend/cpu/jconf.hpp index 4ec9165d5..67dbd0275 100644 --- a/xmrstak/backend/cpu/jconf.hpp +++ b/xmrstak/backend/cpu/jconf.hpp @@ -12,16 +12,18 @@ namespace cpu class jconf { -public: + public: static jconf* inst() { - if (oInst == nullptr) oInst = new jconf; + if(oInst == nullptr) + oInst = new jconf; return oInst; }; bool parse_config(const char* sFilename = params::inst().configFileCPU.c_str()); - struct thd_cfg { + struct thd_cfg + { int iMultiway; bool bNoPrefetch; std::string asm_version_str; @@ -29,10 +31,10 @@ class jconf }; size_t GetThreadCount(); - bool GetThreadConfig(size_t id, thd_cfg &cfg); + bool GetThreadConfig(size_t id, thd_cfg& cfg); bool NeedsAutoconf(); -private: + private: jconf(); static jconf* oInst; diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp index e90b59500..0229af0a7 100644 --- a/xmrstak/backend/cpu/minethd.cpp +++ b/xmrstak/backend/cpu/minethd.cpp @@ -23,33 +23,33 @@ #include "crypto/cryptonight_aesni.h" -#include "xmrstak/misc/console.hpp" -#include "xmrstak/backend/iBackend.hpp" +#include "jconf.hpp" +#include "xmrstak/backend/cpu/cpuType.hpp" #include "xmrstak/backend/globalStates.hpp" +#include "xmrstak/backend/iBackend.hpp" #include "xmrstak/misc/configEditor.hpp" -#include "xmrstak/backend/cpu/cpuType.hpp" +#include "xmrstak/misc/console.hpp" #include "xmrstak/params.hpp" -#include "jconf.hpp" -#include "xmrstak/misc/executor.hpp" #include "minethd.hpp" #include "xmrstak/jconf.hpp" +#include "xmrstak/misc/executor.hpp" #include "hwlocMemory.hpp" #include "xmrstak/backend/miner_work.hpp" #ifndef CONF_NO_HWLOC -# include "autoAdjustHwloc.hpp" +#include "autoAdjustHwloc.hpp" #else -# include "autoAdjust.hpp" +#include "autoAdjust.hpp" #endif #include -#include +#include #include +#include #include #include -#include #include #ifdef _WIN32 @@ -58,9 +58,9 @@ #include #if defined(__APPLE__) -#include #include -#define SYSCTL_CORE_COUNT "machdep.cpu.core_count" +#include +#define SYSCTL_CORE_COUNT "machdep.cpu.core_count" #elif defined(__FreeBSD__) #include #endif //__APPLE__ @@ -87,7 +87,7 @@ bool minethd::thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id } #elif defined(__APPLE__) thread_port_t mach_thread; - thread_affinity_policy_data_t policy = { static_cast(cpu_id) }; + thread_affinity_policy_data_t policy = {static_cast(cpu_id)}; mach_thread = pthread_mach_thread_np(h); return thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, (thread_policy_t)&policy, 1) == KERN_SUCCESS; #elif defined(__FreeBSD__) @@ -96,8 +96,8 @@ bool minethd::thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id CPU_SET(cpu_id, &mn); return pthread_setaffinity_np(h, sizeof(cpuset_t), &mn) == 0; #elif defined(__OpenBSD__) - printer::inst()->print_msg(L0,"WARNING: thread pinning is not supported under OPENBSD."); - return true; + printer::inst()->print_msg(L0, "WARNING: thread pinning is not supported under OPENBSD."); + return true; #else cpu_set_t mn; CPU_ZERO(&mn); @@ -120,7 +120,7 @@ minethd::minethd(miner_work& pWork, size_t iNo, int iMultiway, bool no_prefetch, std::unique_lock lck(thd_aff_set); std::future order_guard = order_fix.get_future(); - switch (iMultiway) + switch(iMultiway) { case 5: oWorkThd = std::thread(&minethd::penta_work_main, this); @@ -150,13 +150,13 @@ minethd::minethd(miner_work& pWork, size_t iNo, int iMultiway, bool no_prefetch, cryptonight_ctx* minethd::minethd_alloc_ctx() { cryptonight_ctx* ctx; - alloc_msg msg = { 0 }; + alloc_msg msg = {0}; - switch (::jconf::inst()->GetSlowMemSetting()) + switch(::jconf::inst()->GetSlowMemSetting()) { case ::jconf::never_use: ctx = cryptonight_alloc_ctx(1, 1, &msg); - if (ctx == NULL) + if(ctx == NULL) printer::inst()->print_msg(L0, "MEMORY ALLOC FAILED: %s", msg.warning); else { @@ -170,7 +170,7 @@ cryptonight_ctx* minethd::minethd_alloc_ctx() case ::jconf::no_mlck: ctx = cryptonight_alloc_ctx(1, 0, &msg); - if (ctx == NULL) + if(ctx == NULL) printer::inst()->print_msg(L0, "MEMORY ALLOC FAILED: %s", msg.warning); else { @@ -184,12 +184,12 @@ cryptonight_ctx* minethd::minethd_alloc_ctx() case ::jconf::print_warning: ctx = cryptonight_alloc_ctx(1, 1, &msg); - if (msg.warning != NULL) + if(msg.warning != NULL) printer::inst()->print_msg(L0, "MEMORY ALLOC FAILED: %s", msg.warning); - if (ctx == NULL) + if(ctx == NULL) ctx = cryptonight_alloc_ctx(0, 0, NULL); - if (ctx != NULL) + if(ctx != NULL) { ctx->hash_fn = nullptr; ctx->loop_fn = nullptr; @@ -220,11 +220,11 @@ cryptonight_ctx* minethd::minethd_alloc_ctx() static constexpr size_t MAX_N = 5; bool minethd::self_test() { - alloc_msg msg = { 0 }; + alloc_msg msg = {0}; size_t res; bool fatal = false; - switch (::jconf::inst()->GetSlowMemSetting()) + switch(::jconf::inst()->GetSlowMemSetting()) { case ::jconf::never_use: res = cryptonight_init(1, 1, &msg); @@ -255,13 +255,13 @@ bool minethd::self_test() if(res == 0 && fatal) return false; - cryptonight_ctx *ctx[MAX_N] = {0}; - for (int i = 0; i < MAX_N; i++) + cryptonight_ctx* ctx[MAX_N] = {0}; + for(int i = 0; i < MAX_N; i++) { - if ((ctx[i] = minethd_alloc_ctx()) == nullptr) + if((ctx[i] = minethd_alloc_ctx()) == nullptr) { printer::inst()->print_msg(L0, "ERROR: miner was not able to allocate memory."); - for (int j = 0; j < i; j++) + for(int j = 0; j < i; j++) cryptonight_free_ctx(ctx[j]); return false; } @@ -279,63 +279,68 @@ bool minethd::self_test() { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test", 14, out, ctx, algo); - bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 32) == 0; + bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 32) == 0; minethd::cn_on_new_job dm; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test", 14, out, ctx, algo); - bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 32) == 0; + bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 32) == 0; func_multi_selector<2>(ctx, dm, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy log", 43, out, ctx, algo); - bResult = bResult && memcmp(out, "\x3e\xbb\x7f\x9f\x7d\x27\x3d\x7c\x31\x8d\x86\x94\x77\x55\x0c\xc8\x00\xcf\xb1\x1b\x0c\xad\xb7\xff\xbd\xf6\xf8\x9f\x3a\x47\x1c\x59" - "\xb4\x77\xd5\x02\xe4\xd8\x48\x7f\x42\xdf\xe3\x8e\xed\x73\x81\x7a\xda\x91\xb7\xe2\x63\xd2\x91\x71\xb6\x5c\x44\x3a\x01\x2a\x41\x22", 64) == 0; + bResult = bResult && memcmp(out, "\x3e\xbb\x7f\x9f\x7d\x27\x3d\x7c\x31\x8d\x86\x94\x77\x55\x0c\xc8\x00\xcf\xb1\x1b\x0c\xad\xb7\xff\xbd\xf6\xf8\x9f\x3a\x47\x1c\x59" + "\xb4\x77\xd5\x02\xe4\xd8\x48\x7f\x42\xdf\xe3\x8e\xed\x73\x81\x7a\xda\x91\xb7\xe2\x63\xd2\x91\x71\xb6\x5c\x44\x3a\x01\x2a\x41\x22", + 64) == 0; func_multi_selector<2>(ctx, dm, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy log", 43, out, ctx, algo); - bResult = bResult && memcmp(out, "\x3e\xbb\x7f\x9f\x7d\x27\x3d\x7c\x31\x8d\x86\x94\x77\x55\x0c\xc8\x00\xcf\xb1\x1b\x0c\xad\xb7\xff\xbd\xf6\xf8\x9f\x3a\x47\x1c\x59" - "\xb4\x77\xd5\x02\xe4\xd8\x48\x7f\x42\xdf\xe3\x8e\xed\x73\x81\x7a\xda\x91\xb7\xe2\x63\xd2\x91\x71\xb6\x5c\x44\x3a\x01\x2a\x41\x22", 64) == 0; + bResult = bResult && memcmp(out, "\x3e\xbb\x7f\x9f\x7d\x27\x3d\x7c\x31\x8d\x86\x94\x77\x55\x0c\xc8\x00\xcf\xb1\x1b\x0c\xad\xb7\xff\xbd\xf6\xf8\x9f\x3a\x47\x1c\x59" + "\xb4\x77\xd5\x02\xe4\xd8\x48\x7f\x42\xdf\xe3\x8e\xed\x73\x81\x7a\xda\x91\xb7\xe2\x63\xd2\x91\x71\xb6\x5c\x44\x3a\x01\x2a\x41\x22", + 64) == 0; func_multi_selector<3>(ctx, dm, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a testThis is a testThis is a test", 14, out, ctx, algo); - bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 96) == 0; + bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", + 96) == 0; func_multi_selector<4>(ctx, dm, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a testThis is a testThis is a testThis is a test", 14, out, ctx, algo); - bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 128) == 0; + bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", + 128) == 0; func_multi_selector<5>(ctx, dm, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a testThis is a testThis is a testThis is a testThis is a test", 14, out, ctx, algo); - bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" - "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 160) == 0; + bResult = bResult && memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05" + "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", + 160) == 0; } else if(algo == POW(cryptonight_lite)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\x5a\x24\xa0\x29\xde\x1c\x39\x3f\x3d\x52\x7a\x2f\x9b\x39\xdc\x3d\xb3\xbc\x87\x11\x8b\x84\x52\x9b\x9f\x0\x88\x49\x25\x4b\x5\xce", 32) == 0; + bResult = bResult && memcmp(out, "\x5a\x24\xa0\x29\xde\x1c\x39\x3f\x3d\x52\x7a\x2f\x9b\x39\xdc\x3d\xb3\xbc\x87\x11\x8b\x84\x52\x9b\x9f\x0\x88\x49\x25\x4b\x5\xce", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\x5a\x24\xa0\x29\xde\x1c\x39\x3f\x3d\x52\x7a\x2f\x9b\x39\xdc\x3d\xb3\xbc\x87\x11\x8b\x84\x52\x9b\x9f\x0\x88\x49\x25\x4b\x5\xce", 32) == 0; + bResult = bResult && memcmp(out, "\x5a\x24\xa0\x29\xde\x1c\x39\x3f\x3d\x52\x7a\x2f\x9b\x39\xdc\x3d\xb3\xbc\x87\x11\x8b\x84\x52\x9b\x9f\x0\x88\x49\x25\x4b\x5\xce", 32) == 0; } else if(algo == POW(cryptonight_monero)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\x1\x57\xc5\xee\x18\x8b\xbe\xc8\x97\x52\x85\xa3\x6\x4e\xe9\x20\x65\x21\x76\x72\xfd\x69\xa1\xae\xbd\x7\x66\xc7\xb5\x6e\xe0\xbd", 32) == 0; + bResult = bResult && memcmp(out, "\x1\x57\xc5\xee\x18\x8b\xbe\xc8\x97\x52\x85\xa3\x6\x4e\xe9\x20\x65\x21\x76\x72\xfd\x69\xa1\xae\xbd\x7\x66\xc7\xb5\x6e\xe0\xbd", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\x1\x57\xc5\xee\x18\x8b\xbe\xc8\x97\x52\x85\xa3\x6\x4e\xe9\x20\x65\x21\x76\x72\xfd\x69\xa1\xae\xbd\x7\x66\xc7\xb5\x6e\xe0\xbd", 32) == 0; + bResult = bResult && memcmp(out, "\x1\x57\xc5\xee\x18\x8b\xbe\xc8\x97\x52\x85\xa3\x6\x4e\xe9\x20\x65\x21\x76\x72\xfd\x69\xa1\xae\xbd\x7\x66\xc7\xb5\x6e\xe0\xbd", 32) == 0; } else if(algo == POW(cryptonight_monero_v8)) { @@ -351,61 +356,61 @@ bool minethd::self_test() { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xfc\xa1\x7d\x44\x37\x70\x9b\x4a\x3b\xd7\x1e\xf3\xed\x21\xb4\x17\xca\x93\xdc\x86\x79\xce\x81\xdf\xd3\xcb\xdd\xa\x22\xd7\x58\xba", 32) == 0; + bResult = bResult && memcmp(out, "\xfc\xa1\x7d\x44\x37\x70\x9b\x4a\x3b\xd7\x1e\xf3\xed\x21\xb4\x17\xca\x93\xdc\x86\x79\xce\x81\xdf\xd3\xcb\xdd\xa\x22\xd7\x58\xba", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xfc\xa1\x7d\x44\x37\x70\x9b\x4a\x3b\xd7\x1e\xf3\xed\x21\xb4\x17\xca\x93\xdc\x86\x79\xce\x81\xdf\xd3\xcb\xdd\xa\x22\xd7\x58\xba", 32) == 0; + bResult = bResult && memcmp(out, "\xfc\xa1\x7d\x44\x37\x70\x9b\x4a\x3b\xd7\x1e\xf3\xed\x21\xb4\x17\xca\x93\xdc\x86\x79\xce\x81\xdf\xd3\xcb\xdd\xa\x22\xd7\x58\xba", 32) == 0; } else if(algo == POW(cryptonight_ipbc)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xbc\xe7\x48\xaf\xc5\x31\xff\xc9\x33\x7f\xcf\x51\x1b\xe3\x20\xa3\xaa\x8d\x4\x55\xf9\x14\x2a\x61\xe8\x38\xdf\xdc\x3b\x28\x3e\x0xb0", 32) == 0; + bResult = bResult && memcmp(out, "\xbc\xe7\x48\xaf\xc5\x31\xff\xc9\x33\x7f\xcf\x51\x1b\xe3\x20\xa3\xaa\x8d\x4\x55\xf9\x14\x2a\x61\xe8\x38\xdf\xdc\x3b\x28\x3e\x0xb0", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xbc\xe7\x48\xaf\xc5\x31\xff\xc9\x33\x7f\xcf\x51\x1b\xe3\x20\xa3\xaa\x8d\x4\x55\xf9\x14\x2a\x61\xe8\x38\xdf\xdc\x3b\x28\x3e\x0", 32) == 0; + bResult = bResult && memcmp(out, "\xbc\xe7\x48\xaf\xc5\x31\xff\xc9\x33\x7f\xcf\x51\x1b\xe3\x20\xa3\xaa\x8d\x4\x55\xf9\x14\x2a\x61\xe8\x38\xdf\xdc\x3b\x28\x3e\x0", 32) == 0; } else if(algo == POW(cryptonight_stellite)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xb9\x9d\x6c\xee\x50\x3c\x6f\xa6\x3f\x30\x69\x24\x4a\x0\x9f\xe4\xd4\x69\x3f\x68\x92\xa4\x5c\xc2\x51\xae\x46\x87\x7c\x6b\x98\xae", 32) == 0; + bResult = bResult && memcmp(out, "\xb9\x9d\x6c\xee\x50\x3c\x6f\xa6\x3f\x30\x69\x24\x4a\x0\x9f\xe4\xd4\x69\x3f\x68\x92\xa4\x5c\xc2\x51\xae\x46\x87\x7c\x6b\x98\xae", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xb9\x9d\x6c\xee\x50\x3c\x6f\xa6\x3f\x30\x69\x24\x4a\x0\x9f\xe4\xd4\x69\x3f\x68\x92\xa4\x5c\xc2\x51\xae\x46\x87\x7c\x6b\x98\xae", 32) == 0; + bResult = bResult && memcmp(out, "\xb9\x9d\x6c\xee\x50\x3c\x6f\xa6\x3f\x30\x69\x24\x4a\x0\x9f\xe4\xd4\x69\x3f\x68\x92\xa4\x5c\xc2\x51\xae\x46\x87\x7c\x6b\x98\xae", 32) == 0; } else if(algo == POW(cryptonight_masari)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xbf\x5f\xd\xf3\x5a\x65\x7c\x89\xb0\x41\xcf\xf0\xd\x46\x6a\xb6\x30\xf9\x77\x7f\xd9\xc6\x3\xd7\x3b\xd8\xf1\xb5\x4b\x49\xed\x28", 32) == 0; + bResult = bResult && memcmp(out, "\xbf\x5f\xd\xf3\x5a\x65\x7c\x89\xb0\x41\xcf\xf0\xd\x46\x6a\xb6\x30\xf9\x77\x7f\xd9\xc6\x3\xd7\x3b\xd8\xf1\xb5\x4b\x49\xed\x28", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xbf\x5f\xd\xf3\x5a\x65\x7c\x89\xb0\x41\xcf\xf0\xd\x46\x6a\xb6\x30\xf9\x77\x7f\xd9\xc6\x3\xd7\x3b\xd8\xf1\xb5\x4b\x49\xed\x28", 32) == 0; + bResult = bResult && memcmp(out, "\xbf\x5f\xd\xf3\x5a\x65\x7c\x89\xb0\x41\xcf\xf0\xd\x46\x6a\xb6\x30\xf9\x77\x7f\xd9\xc6\x3\xd7\x3b\xd8\xf1\xb5\x4b\x49\xed\x28", 32) == 0; } else if(algo == POW(cryptonight_heavy)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xf9\x44\x97\xce\xb4\xf0\xd9\x84\xb\x9b\xfc\x45\x94\x74\x55\x25\xcf\x26\x83\x16\x4f\xc\xf8\x2d\xf5\xf\x25\xff\x45\x28\x2e\x85", 32) == 0; + bResult = bResult && memcmp(out, "\xf9\x44\x97\xce\xb4\xf0\xd9\x84\xb\x9b\xfc\x45\x94\x74\x55\x25\xcf\x26\x83\x16\x4f\xc\xf8\x2d\xf5\xf\x25\xff\x45\x28\x2e\x85", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xf9\x44\x97\xce\xb4\xf0\xd9\x84\xb\x9b\xfc\x45\x94\x74\x55\x25\xcf\x26\x83\x16\x4f\xc\xf8\x2d\xf5\xf\x25\xff\x45\x28\x2e\x85", 32) == 0; + bResult = bResult && memcmp(out, "\xf9\x44\x97\xce\xb4\xf0\xd9\x84\xb\x9b\xfc\x45\x94\x74\x55\x25\xcf\x26\x83\x16\x4f\xc\xf8\x2d\xf5\xf\x25\xff\x45\x28\x2e\x85", 32) == 0; } else if(algo == POW(cryptonight_haven)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xc7\xd4\x52\x9\x2b\x48\xa5\xaf\xae\x11\xaf\x40\x9a\x87\xe5\x88\xf0\x29\x35\xa3\x68\xd\xe3\x6b\xce\x43\xf6\xc8\xdf\xd3\xe3\x9", 32) == 0; + bResult = bResult && memcmp(out, "\xc7\xd4\x52\x9\x2b\x48\xa5\xaf\xae\x11\xaf\x40\x9a\x87\xe5\x88\xf0\x29\x35\xa3\x68\xd\xe3\x6b\xce\x43\xf6\xc8\xdf\xd3\xe3\x9", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xc7\xd4\x52\x9\x2b\x48\xa5\xaf\xae\x11\xaf\x40\x9a\x87\xe5\x88\xf0\x29\x35\xa3\x68\xd\xe3\x6b\xce\x43\xf6\xc8\xdf\xd3\xe3\x9", 32) == 0; + bResult = bResult && memcmp(out, "\xc7\xd4\x52\x9\x2b\x48\xa5\xaf\xae\x11\xaf\x40\x9a\x87\xe5\x88\xf0\x29\x35\xa3\x68\xd\xe3\x6b\xce\x43\xf6\xc8\xdf\xd3\xe3\x9", 32) == 0; } else if(algo == POW(cryptonight_bittube2)) { @@ -415,7 +420,7 @@ bool minethd::self_test() func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("\x38\x27\x4c\x97\xc4\x5a\x17\x2c\xfc\x97\x67\x98\x70\x42\x2e\x3a\x1a\xb0\x78\x49\x60\xc6\x05\x14\xd8\x16\x27\x14\x15\xc3\x06\xee\x3a\x3e\xd1\xa7\x7e\x31\xf6\xa8\x85\xc3\xcb\xff\x01\x02\x03\x04", 48, out, ctx, algo); - bResult = bResult && memcmp(out, "\x18\x2c\x30\x41\x93\x1a\x14\x73\xc6\xbf\x7e\x77\xfe\xb5\x17\x9b\xa8\xbe\xa9\x68\xba\x9e\xe1\xe8\x24\x1a\x12\x7a\xac\x81\xb4\x24", 32) == 0; + bResult = bResult && memcmp(out, "\x18\x2c\x30\x41\x93\x1a\x14\x73\xc6\xbf\x7e\x77\xfe\xb5\x17\x9b\xa8\xbe\xa9\x68\xba\x9e\xe1\xe8\x24\x1a\x12\x7a\xac\x81\xb4\x24", 32) == 0; ctx[0]->hash_fn("\x04\x04\xb4\x94\xce\xd9\x05\x18\xe7\x25\x5d\x01\x28\x63\xde\x8a\x4d\x27\x72\xb1\xff\x78\x8c\xd0\x56\x20\x38\x98\x3e\xd6\x8c\x94\xea\x00\xfe\x43\x66\x68\x83\x00\x00\x00\x00\x18\x7c\x2e\x0f\x66\xf5\x6b\xb9\xef\x67\xed\x35\x14\x5c\x69\xd4\x69\x0d\x1f\x98\x22\x44\x01\x2b\xea\x69\x6e\xe8\xb3\x3c\x42\x12\x01", 76, out, ctx, algo); bResult = bResult && memcmp(out, "\x7f\xbe\xb9\x92\x76\x87\x5a\x3c\x43\xc2\xbe\x5a\x73\x36\x06\xb5\xdc\x79\xcc\x9c\xf3\x7c\x43\x3e\xb4\x18\x56\x17\xfb\x9b\xc9\x36", 32) == 0; @@ -427,29 +432,29 @@ bool minethd::self_test() { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("\x03\x05\xa0\xdb\xd6\xbf\x05\xcf\x16\xe5\x03\xf3\xa6\x6f\x78\x00\x7c\xbf\x34\x14\x43\x32\xec\xbf\xc2\x2e\xd9\x5c\x87\x00\x38\x3b\x30\x9a\xce\x19\x23\xa0\x96\x4b\x00\x00\x00\x08\xba\x93\x9a\x62\x72\x4c\x0d\x75\x81\xfc\xe5\x76\x1e\x9d\x8a\x0e\x6a\x1c\x3f\x92\x4f\xdd\x84\x93\xd1\x11\x56\x49\xc0\x5e\xb6\x01", 76, out, ctx, algo); - bResult = bResult && memcmp(out, "\x40\x86\x5a\xa8\x87\x41\xec\x1d\xcc\xbd\x2b\xc6\xff\x36\xb9\x4d\x54\x71\x58\xdb\x94\x69\x8e\x3c\xa0\x3d\xe4\x81\x9a\x65\x9f\xef", 32) == 0; + bResult = bResult && memcmp(out, "\x40\x86\x5a\xa8\x87\x41\xec\x1d\xcc\xbd\x2b\xc6\xff\x36\xb9\x4d\x54\x71\x58\xdb\x94\x69\x8e\x3c\xa0\x3d\xe4\x81\x9a\x65\x9f\xef", 32) == 0; } else if(algo == POW(cryptonight_gpu)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("", 0, out, ctx, algo); - bResult = bResult && memcmp(out, "\x55\x5e\x0a\xee\x78\x79\x31\x6d\x7d\xef\xf7\x72\x97\x3c\xb9\x11\x8e\x38\x95\x70\x9d\xb2\x54\x7a\xc0\x72\xd5\xb9\x13\x10\x01\xd8", 32) == 0; + bResult = bResult && memcmp(out, "\x55\x5e\x0a\xee\x78\x79\x31\x6d\x7d\xef\xf7\x72\x97\x3c\xb9\x11\x8e\x38\x95\x70\x9d\xb2\x54\x7a\xc0\x72\xd5\xb9\x13\x10\x01\xd8", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("", 0, out, ctx, algo); - bResult = bResult && memcmp(out, "\x55\x5e\x0a\xee\x78\x79\x31\x6d\x7d\xef\xf7\x72\x97\x3c\xb9\x11\x8e\x38\x95\x70\x9d\xb2\x54\x7a\xc0\x72\xd5\xb9\x13\x10\x01\xd8", 32) == 0; + bResult = bResult && memcmp(out, "\x55\x5e\x0a\xee\x78\x79\x31\x6d\x7d\xef\xf7\x72\x97\x3c\xb9\x11\x8e\x38\x95\x70\x9d\xb2\x54\x7a\xc0\x72\xd5\xb9\x13\x10\x01\xd8", 32) == 0; } else if(algo == POW(cryptonight_conceal)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("", 0, out, ctx, algo); - bResult = bResult && memcmp(out, "\xb5\x54\x4b\x58\x16\x70\x26\x47\x63\x47\xe4\x1f\xb6\x5e\x57\xc9\x7c\xa5\x93\xfe\x0e\xb1\x0f\xb9\x2f\xa7\x3e\x5b\xae\xef\x79\x8c", 32) == 0; + bResult = bResult && memcmp(out, "\xb5\x54\x4b\x58\x16\x70\x26\x47\x63\x47\xe4\x1f\xb6\x5e\x57\xc9\x7c\xa5\x93\xfe\x0e\xb1\x0f\xb9\x2f\xa7\x3e\x5b\xae\xef\x79\x8c", 32) == 0; func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), true, algo); ctx[0]->hash_fn("", 0, out, ctx, algo); - bResult = bResult && memcmp(out, "\xb5\x54\x4b\x58\x16\x70\x26\x47\x63\x47\xe4\x1f\xb6\x5e\x57\xc9\x7c\xa5\x93\xfe\x0e\xb1\x0f\xb9\x2f\xa7\x3e\x5b\xae\xef\x79\x8c", 32) == 0; + bResult = bResult && memcmp(out, "\xb5\x54\x4b\x58\x16\x70\x26\x47\x63\x47\xe4\x1f\xb6\x5e\x57\xc9\x7c\xa5\x93\xfe\x0e\xb1\x0f\xb9\x2f\xa7\x3e\x5b\xae\xef\x79\x8c", 32) == 0; } - else if (algo == POW(cryptonight_turtle)) + else if(algo == POW(cryptonight_turtle)) { func_selector(ctx, ::jconf::inst()->HaveHardwareAes(), false, algo); ctx[0]->hash_fn("This is a test This is a test This is a test", 44, out, ctx, algo); @@ -467,7 +472,7 @@ bool minethd::self_test() work.iBlockHeight = 1806260; set_job(work, ctx); ctx[0]->hash_fn("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x74\x65\x73\x74\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x74\x65\x73\x74\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x74\x65\x73\x74", 44, out, ctx, algo); - bResult = bResult && memcmp(out, "\xf7\x59\x58\x8a\xd5\x7e\x75\x84\x67\x29\x54\x43\xa9\xbd\x71\x49\x0a\xbf\xf8\xe9\xda\xd1\xb9\x5b\x6b\xf2\xf5\xd0\xd7\x83\x87\xbc", 32) == 0; + bResult = bResult && memcmp(out, "\xf7\x59\x58\x8a\xd5\x7e\x75\x84\x67\x29\x54\x43\xa9\xbd\x71\x49\x0a\xbf\xf8\xe9\xda\xd1\xb9\x5b\x6b\xf2\xf5\xd0\xd7\x83\x87\xbc", 32) == 0; } else if(algo == POW(cryptonight_v8_reversewaltz)) { @@ -498,7 +503,7 @@ bool minethd::self_test() "Cryptonight hash self-test failed. This might be caused by bad compiler optimizations."); } - for (int i = 0; i < MAX_N; i++) + for(int i = 0; i < MAX_N; i++) cryptonight_free_ctx(ctx[i]); return bResult; @@ -520,14 +525,13 @@ std::vector minethd::thread_starter(uint32_t threadOffset, miner_work win_exit(); } - //Launch the requested number of single and double threads, to distribute //load evenly we need to alternate single and double threads size_t i, n = jconf::inst()->GetThreadCount(); pvThreads.reserve(n); jconf::thd_cfg cfg; - for (i = 0; i < n; i++) + for(i = 0; i < n; i++) { jconf::inst()->GetThreadConfig(i, cfg); @@ -572,11 +576,11 @@ static std::string getAsmName(const uint32_t num_hashes) return asm_type; } -template +template void minethd::func_multi_selector(cryptonight_ctx** ctx, minethd::cn_on_new_job& on_new_job, bool bHaveAes, bool bNoPrefetch, const xmrstak_algo& algo, const std::string& asm_version_str) { - static_assert(N >= 1, "number of threads must be >= 1" ); + static_assert(N >= 1, "number of threads must be >= 1"); // We have two independent flag bits in the functions // therefore we will build a binary digit and select the @@ -717,21 +721,20 @@ void minethd::func_multi_selector(cryptonight_ctx** ctx, minethd::cn_on_new_job& Cryptonight_hash::template hash, Cryptonight_hash::template hash, Cryptonight_hash::template hash, - Cryptonight_hash::template hash - }; + Cryptonight_hash::template hash}; std::bitset<2> digit; digit.set(0, !bHaveAes); digit.set(1, !bNoPrefetch); - ctx[0]->hash_fn = func_table[ algv << 2 | digit.to_ulong() ]; + ctx[0]->hash_fn = func_table[algv << 2 | digit.to_ulong()]; // check for asm optimized version for cryptonight_v8 if(algo == cryptonight_monero_v8) { std::string selected_asm = asm_version_str; if(selected_asm == "auto") - selected_asm = cpu::getAsmName(N); + selected_asm = cpu::getAsmName(N); if(selected_asm != "off") { @@ -747,7 +750,7 @@ void minethd::func_multi_selector(cryptonight_ctx** ctx, minethd::cn_on_new_job& { std::string selected_asm = asm_version_str; if(selected_asm == "auto") - selected_asm = cpu::getAsmName(N); + selected_asm = cpu::getAsmName(N); if(selected_asm == "off") { for(int h = 0; h < N; ++h) @@ -769,7 +772,7 @@ void minethd::func_multi_selector(cryptonight_ctx** ctx, minethd::cn_on_new_job& }; auto it = on_new_job_map.find(algo.Id()); - if (it != on_new_job_map.end()) + if(it != on_new_job_map.end()) on_new_job = it->second; else on_new_job = nullptr; @@ -806,18 +809,18 @@ void minethd::penta_work_main() multiway_work_main<5u>(); } -template -void minethd::prep_multiway_work(uint8_t *bWorkBlob, uint32_t **piNonce) +template +void minethd::prep_multiway_work(uint8_t* bWorkBlob, uint32_t** piNonce) { - for (size_t i = 0; i < N; i++) + for(size_t i = 0; i < N; i++) { memcpy(bWorkBlob + oWork.iWorkSize * i, oWork.bWorkBlob, oWork.iWorkSize); - if (i > 0) + if(i > 0) piNonce[i] = (uint32_t*)(bWorkBlob + oWork.iWorkSize * i + 39); } } -template +template void minethd::multiway_work_main() { if(affinity >= 0) //-1 means no affinity @@ -828,22 +831,22 @@ void minethd::multiway_work_main() lck.release(); std::this_thread::yield(); - cryptonight_ctx *ctx[MAX_N]; + cryptonight_ctx* ctx[MAX_N]; uint64_t iCount = 0; - uint64_t *piHashVal[MAX_N]; - uint32_t *piNonce[MAX_N]; + uint64_t* piHashVal[MAX_N]; + uint32_t* piNonce[MAX_N]; uint8_t bHashOut[MAX_N * 32]; uint8_t bWorkBlob[sizeof(miner_work::bWorkBlob) * MAX_N]; uint32_t iNonce; job_result res; - for (size_t i = 0; i < N; i++) + for(size_t i = 0; i < N; i++) { ctx[i] = minethd_alloc_ctx(); if(ctx[i] == nullptr) { printer::inst()->print_msg(L0, "ERROR: miner was not able to allocate memory."); - for (int j = 0; j < i; j++) + for(int j = 0; j < i; j++) cryptonight_free_ctx(ctx[j]); win_exit(1); } @@ -863,15 +866,15 @@ void minethd::multiway_work_main() size_t lastPoolId = 0; func_multi_selector(ctx, on_new_job, ::jconf::inst()->HaveHardwareAes(), bNoPrefetch, miner_algo, asm_version_str); - while (bQuit == 0) + while(bQuit == 0) { - if (oWork.bStall) + if(oWork.bStall) { /* We are stalled here because the executor didn't find a job for us yet, either because of network latency, or a socket problem. Since we are raison d'etre of this software it us sensible to just wait until we have something*/ - while (globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) + while(globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) std::this_thread::sleep_for(std::chrono::milliseconds(100)); globalStates::inst().consume_work(oWork, iJobNo); @@ -908,9 +911,9 @@ void minethd::multiway_work_main() if(on_new_job != nullptr) on_new_job(oWork, ctx); - while (globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) + while(globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) { - if ((iCount++ & 0x7) == 0) //Store stats every 8*N hashes + if((iCount++ & 0x7) == 0) //Store stats every 8*N hashes { uint64_t iStamp = get_timestamp_ms(); iHashCount.store(iCount * N, std::memory_order_relaxed); @@ -927,19 +930,18 @@ void minethd::multiway_work_main() break; } - for (size_t i = 0; i < N; i++) + for(size_t i = 0; i < N; i++) *piNonce[i] = iNonce++; ctx[0]->hash_fn(bWorkBlob, oWork.iWorkSize, bHashOut, ctx, miner_algo); - for (size_t i = 0; i < N; i++) + for(size_t i = 0; i < N; i++) { - if (*piHashVal[i] < oWork.iTarget) + if(*piHashVal[i] < oWork.iTarget) { executor::inst()->push_event( ex_event(job_result(oWork.sJobID, iNonce - N + i, bHashOut + 32 * i, iThreadNo, miner_algo), - oWork.iPoolId) - ); + oWork.iPoolId)); } } @@ -950,7 +952,7 @@ void minethd::multiway_work_main() prep_multiway_work(bWorkBlob, piNonce); } - for (int i = 0; i < N; i++) + for(int i = 0; i < N; i++) cryptonight_free_ctx(ctx[i]); } diff --git a/xmrstak/backend/cpu/minethd.hpp b/xmrstak/backend/cpu/minethd.hpp index 1e25f5d4f..a5201f37a 100644 --- a/xmrstak/backend/cpu/minethd.hpp +++ b/xmrstak/backend/cpu/minethd.hpp @@ -1,15 +1,15 @@ #pragma once -#include "xmrstak/jconf.hpp" #include "crypto/cryptonight.h" -#include "xmrstak/backend/miner_work.hpp" #include "xmrstak/backend/iBackend.hpp" +#include "xmrstak/backend/miner_work.hpp" +#include "xmrstak/jconf.hpp" +#include +#include #include #include #include -#include -#include namespace xmrstak { @@ -18,7 +18,7 @@ namespace cpu class minethd : public iBackend { -public: + public: static std::vector thread_starter(uint32_t threadOffset, miner_work& pWork); static bool self_test(); @@ -29,19 +29,18 @@ class minethd : public iBackend static cryptonight_ctx* minethd_alloc_ctx(); - template + template static void func_multi_selector(cryptonight_ctx**, minethd::cn_on_new_job& on_new_job, - bool bHaveAes, bool bNoPrefetch, const xmrstak_algo& algo, const std::string& asm_version_str = "off"); + bool bHaveAes, bool bNoPrefetch, const xmrstak_algo& algo, const std::string& asm_version_str = "off"); - private: - + private: minethd(miner_work& pWork, size_t iNo, int iMultiway, bool no_prefetch, int64_t affinity, const std::string& asm_version); - template + template void multiway_work_main(); - template - void prep_multiway_work(uint8_t *bWorkBlob, uint32_t **piNonce); + template + void prep_multiway_work(uint8_t* bWorkBlob, uint32_t** piNonce); void work_main(); void double_work_main(); diff --git a/xmrstak/backend/cryptonight.hpp b/xmrstak/backend/cryptonight.hpp index e58665922..262865ea0 100644 --- a/xmrstak/backend/cryptonight.hpp +++ b/xmrstak/backend/cryptonight.hpp @@ -1,9 +1,9 @@ #pragma once -#include +#include #include -#include +#include #include -#include +#include constexpr size_t start_derived_algo_id = 1000; @@ -15,10 +15,10 @@ enum xmrstak_algo_id cryptonight_monero = 3, cryptonight_heavy = 4, cryptonight_aeon = 5, - cryptonight_ipbc = 6, // equal to cryptonight_aeon with a small tweak in the miner code - cryptonight_stellite = 7, //equal to cryptonight_monero but with one tiny change - cryptonight_masari = 8, //equal to cryptonight_monero but with less iterations, used by masari - cryptonight_haven = 9, // equal to cryptonight_heavy with a small tweak + cryptonight_ipbc = 6, // equal to cryptonight_aeon with a small tweak in the miner code + cryptonight_stellite = 7, //equal to cryptonight_monero but with one tiny change + cryptonight_masari = 8, //equal to cryptonight_monero but with less iterations, used by masari + cryptonight_haven = 9, // equal to cryptonight_heavy with a small tweak cryptonight_bittube2 = 10, // derived from cryptonight_heavy with own aes-round implementation and minor other tweaks cryptonight_monero_v8 = 11, cryptonight_superfast = 12, @@ -42,35 +42,32 @@ enum xmrstak_algo_id inline std::string get_algo_name(xmrstak_algo_id algo_id) { static std::array base_algo_names = - {{ - "invalid_algo", - "cryptonight", - "cryptonight_lite", - "cryptonight_v7", - "cryptonight_heavy", - "cryptonight_lite_v7", - "cryptonight_lite_v7_xor", - "cryptonight_v7_stellite", - "cryptonight_masari", - "cryptonight_haven", - "cryptonight_bittube2", - "cryptonight_v8", - "cryptonight_superfast", - "cryptonight_gpu", - "cryptonight_conceal", - "cryptonight_r_wow", - "cryptonight_r", - "cryptonight_v8_reversewaltz" // used by graft - }}; + {{ + "invalid_algo", + "cryptonight", + "cryptonight_lite", + "cryptonight_v7", + "cryptonight_heavy", + "cryptonight_lite_v7", + "cryptonight_lite_v7_xor", + "cryptonight_v7_stellite", + "cryptonight_masari", + "cryptonight_haven", + "cryptonight_bittube2", + "cryptonight_v8", + "cryptonight_superfast", + "cryptonight_gpu", + "cryptonight_conceal", + "cryptonight_r_wow", + "cryptonight_r", + "cryptonight_v8_reversewaltz" // used by graft + }}; static std::array derived_algo_names = - {{ - "cryptonight_turtle", - "cryptonight_v8_half", // used by masari and stellite - "cryptonight_v8_zelerius", - "cryptonight_v8_double" - }}; - + {{"cryptonight_turtle", + "cryptonight_v8_half", // used by masari and stellite + "cryptonight_v8_zelerius", + "cryptonight_v8_double"}}; if(algo_id < start_derived_algo_id) return base_algo_names[algo_id]; @@ -80,19 +77,35 @@ inline std::string get_algo_name(xmrstak_algo_id algo_id) struct xmrstak_algo { - xmrstak_algo(xmrstak_algo_id name_id) : algo_name(name_id), base_algo(name_id) + xmrstak_algo(xmrstak_algo_id name_id) : + algo_name(name_id), + base_algo(name_id) { } - xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm) : algo_name(name_id), base_algo(algorithm) + xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm) : + algo_name(name_id), + base_algo(algorithm) { } - xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm, uint32_t iteration) : algo_name(name_id), base_algo(algorithm), iter(iteration) + xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm, uint32_t iteration) : + algo_name(name_id), + base_algo(algorithm), + iter(iteration) { } - xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm, uint32_t iteration, size_t memory) : algo_name(name_id), base_algo(algorithm), iter(iteration), mem(memory) + xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm, uint32_t iteration, size_t memory) : + algo_name(name_id), + base_algo(algorithm), + iter(iteration), + mem(memory) { } - xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm, uint32_t iteration, size_t memory, uint32_t mem_mask) : algo_name(name_id), base_algo(algorithm), iter(iteration), mem(memory), mask(mem_mask) + xmrstak_algo(xmrstak_algo_id name_id, xmrstak_algo_id algorithm, uint32_t iteration, size_t memory, uint32_t mem_mask) : + algo_name(name_id), + base_algo(algorithm), + iter(iteration), + mem(memory), + mask(mem_mask) { } @@ -187,35 +200,33 @@ constexpr uint32_t CN_DOUBLE_ITER = 0x100000; inline xmrstak_algo POW(xmrstak_algo_id algo_id) { - static std::array pow = {{ - {invalid_algo, invalid_algo}, + static std::array pow = {{{invalid_algo, invalid_algo}, {cryptonight, cryptonight, CN_ITER, CN_MEMORY}, - {cryptonight_lite, cryptonight_lite, CN_ITER/2, CN_MEMORY/2}, + {cryptonight_lite, cryptonight_lite, CN_ITER / 2, CN_MEMORY / 2}, {cryptonight_monero, cryptonight_monero, CN_ITER, CN_MEMORY}, - {cryptonight_heavy, cryptonight_heavy, CN_ITER/2, CN_MEMORY*2}, - {cryptonight_aeon, cryptonight_aeon, CN_ITER/2, CN_MEMORY/2}, - {cryptonight_ipbc, cryptonight_ipbc, CN_ITER/2, CN_MEMORY/2}, // equal to cryptonight_aeon with a small tweak in the miner code - {cryptonight_stellite, cryptonight_stellite, CN_ITER, CN_MEMORY}, //equal to cryptonight_monero but with one tiny change - {cryptonight_masari, cryptonight_masari, CN_ITER/2, CN_MEMORY}, //equal to cryptonight_monero but with less iterations, used by masari - {cryptonight_haven, cryptonight_haven, CN_ITER/2, CN_MEMORY*2}, // equal to cryptonight_heavy with a small tweak - {cryptonight_bittube2, cryptonight_bittube2, CN_ITER/2, CN_MEMORY*2}, // derived from cryptonight_heavy with own aes-round implementation and minor other tweaks + {cryptonight_heavy, cryptonight_heavy, CN_ITER / 2, CN_MEMORY * 2}, + {cryptonight_aeon, cryptonight_aeon, CN_ITER / 2, CN_MEMORY / 2}, + {cryptonight_ipbc, cryptonight_ipbc, CN_ITER / 2, CN_MEMORY / 2}, // equal to cryptonight_aeon with a small tweak in the miner code + {cryptonight_stellite, cryptonight_stellite, CN_ITER, CN_MEMORY}, //equal to cryptonight_monero but with one tiny change + {cryptonight_masari, cryptonight_masari, CN_ITER / 2, CN_MEMORY}, //equal to cryptonight_monero but with less iterations, used by masari + {cryptonight_haven, cryptonight_haven, CN_ITER / 2, CN_MEMORY * 2}, // equal to cryptonight_heavy with a small tweak + {cryptonight_bittube2, cryptonight_bittube2, CN_ITER / 2, CN_MEMORY * 2}, // derived from cryptonight_heavy with own aes-round implementation and minor other tweaks {cryptonight_monero_v8, cryptonight_monero_v8, CN_ITER, CN_MEMORY}, - {cryptonight_superfast, cryptonight_superfast, CN_ITER/4, CN_MEMORY}, + {cryptonight_superfast, cryptonight_superfast, CN_ITER / 4, CN_MEMORY}, {cryptonight_gpu, cryptonight_gpu, CN_GPU_ITER, CN_MEMORY, CN_GPU_MASK}, - {cryptonight_conceal, cryptonight_conceal, CN_ITER/2, CN_MEMORY}, + {cryptonight_conceal, cryptonight_conceal, CN_ITER / 2, CN_MEMORY}, {cryptonight_r_wow, cryptonight_r_wow, CN_ITER, CN_MEMORY}, {cryptonight_r, cryptonight_r, CN_ITER, CN_MEMORY}, - {cryptonight_v8_reversewaltz, cryptonight_v8_reversewaltz, CN_WALTZ_ITER, CN_MEMORY} - }}; + {cryptonight_v8_reversewaltz, cryptonight_v8_reversewaltz, CN_WALTZ_ITER, CN_MEMORY}}}; static std::array derived_pow = - {{ - {cryptonight_turtle, cryptonight_monero_v8, CN_ITER/8, CN_MEMORY/8, CN_TURTLE_MASK}, - {cryptonight_v8_half, cryptonight_monero_v8, CN_ITER/2, CN_MEMORY}, - {cryptonight_v8_zelerius, cryptonight_monero_v8, CN_ZELERIUS_ITER, CN_MEMORY}, - {cryptonight_v8_double, cryptonight_monero_v8, CN_DOUBLE_ITER, CN_MEMORY} - // {cryptonight_derived} - }}; + {{ + {cryptonight_turtle, cryptonight_monero_v8, CN_ITER / 8, CN_MEMORY / 8, CN_TURTLE_MASK}, + {cryptonight_v8_half, cryptonight_monero_v8, CN_ITER / 2, CN_MEMORY}, + {cryptonight_v8_zelerius, cryptonight_monero_v8, CN_ZELERIUS_ITER, CN_MEMORY}, + {cryptonight_v8_double, cryptonight_monero_v8, CN_DOUBLE_ITER, CN_MEMORY} + // {cryptonight_derived} + }}; if(algo_id < start_derived_algo_id) return pow[algo_id]; diff --git a/xmrstak/backend/globalStates.cpp b/xmrstak/backend/globalStates.cpp index 52ef3f391..5b4332ba4 100644 --- a/xmrstak/backend/globalStates.cpp +++ b/xmrstak/backend/globalStates.cpp @@ -21,15 +21,14 @@ * */ -#include "miner_work.hpp" #include "globalStates.hpp" +#include "miner_work.hpp" #include -#include #include +#include #include - namespace xmrstak { diff --git a/xmrstak/backend/globalStates.hpp b/xmrstak/backend/globalStates.hpp index d6966c4a2..a3ff30eea 100644 --- a/xmrstak/backend/globalStates.hpp +++ b/xmrstak/backend/globalStates.hpp @@ -1,10 +1,10 @@ #pragma once #include "xmrstak/backend/miner_work.hpp" -#include "xmrstak/misc/environment.hpp" -#include "xmrstak/misc/console.hpp" #include "xmrstak/backend/pool_data.hpp" #include "xmrstak/cpputil/read_write_lock.h" +#include "xmrstak/misc/console.hpp" +#include "xmrstak/misc/environment.hpp" #include @@ -32,7 +32,7 @@ struct globalStates nonce = iGlobalNonce.fetch_add(reserve_count); } - void consume_work( miner_work& threadWork, uint64_t& currentJobId); + void consume_work(miner_work& threadWork, uint64_t& currentJobId); miner_work oGlobalWork; std::atomic iGlobalJobNo; @@ -41,8 +41,11 @@ struct globalStates uint64_t iThreadCount; size_t pool_id = invalid_pool_id; -private: - globalStates() : iThreadCount(0), iGlobalJobNo(0), iConsumeCnt(0) + private: + globalStates() : + iThreadCount(0), + iGlobalJobNo(0), + iConsumeCnt(0) { } diff --git a/xmrstak/backend/iBackend.hpp b/xmrstak/backend/iBackend.hpp index 18411b79c..1af42c248 100644 --- a/xmrstak/backend/iBackend.hpp +++ b/xmrstak/backend/iBackend.hpp @@ -3,10 +3,10 @@ #include "xmrstak/backend/globalStates.hpp" #include -#include #include -#include +#include #include +#include template constexpr std::size_t countof(T const (&)[N]) noexcept @@ -16,35 +16,42 @@ constexpr std::size_t countof(T const (&)[N]) noexcept namespace xmrstak { - struct iBackend - { - - enum BackendType : uint32_t { UNKNOWN = 0u, CPU = 1u, AMD = 2u, NVIDIA = 3u }; - - static const char* getName(const BackendType type) - { - const char* backendNames[] = { - "unknown", - "cpu", - "amd", - "nvidia" - }; - - uint32_t i = static_cast(type); - if(i >= countof(backendNames)) - i = 0; - - return backendNames[i]; - } - - std::atomic iHashCount; - std::atomic iTimestamp; - uint32_t iThreadNo; - BackendType backendType = UNKNOWN; +struct iBackend +{ - iBackend() : iHashCount(0), iTimestamp(0) - { - } + enum BackendType : uint32_t + { + UNKNOWN = 0u, + CPU = 1u, + AMD = 2u, + NVIDIA = 3u }; + static const char* getName(const BackendType type) + { + const char* backendNames[] = { + "unknown", + "cpu", + "amd", + "nvidia"}; + + uint32_t i = static_cast(type); + if(i >= countof(backendNames)) + i = 0; + + return backendNames[i]; + } + + std::atomic iHashCount; + std::atomic iTimestamp; + uint32_t iThreadNo; + BackendType backendType = UNKNOWN; + + iBackend() : + iHashCount(0), + iTimestamp(0) + { + } +}; + } // namespace xmrstak diff --git a/xmrstak/backend/miner_work.hpp b/xmrstak/backend/miner_work.hpp index d0e5237f2..114f2db8e 100644 --- a/xmrstak/backend/miner_work.hpp +++ b/xmrstak/backend/miner_work.hpp @@ -2,95 +2,110 @@ #include "xmrstak/backend/pool_data.hpp" -#include #include -#include -#include -#include #include +#include #include +#include +#include +#include namespace xmrstak { - struct miner_work +struct miner_work +{ + char sJobID[64]; + uint8_t bWorkBlob[128]; + uint32_t iWorkSize; + uint64_t iTarget; + bool bNiceHash; + bool bStall; + size_t iPoolId; + uint64_t iBlockHeight; + uint8_t* ref_ptr; + + miner_work() : + iWorkSize(0), + bNiceHash(false), + bStall(true), + iPoolId(invalid_pool_id), + ref_ptr((uint8_t*)&iBlockHeight) {} + + miner_work(const char* sJobID, const uint8_t* bWork, uint32_t iWorkSize, + uint64_t iTarget, bool bNiceHash, size_t iPoolId, uint64_t iBlockHeiht) : + iWorkSize(iWorkSize), + iTarget(iTarget), + bNiceHash(bNiceHash), + bStall(false), + iPoolId(iPoolId), + iBlockHeight(iBlockHeiht), + ref_ptr((uint8_t*)&iBlockHeight) { - char sJobID[64]; - uint8_t bWorkBlob[128]; - uint32_t iWorkSize; - uint64_t iTarget; - bool bNiceHash; - bool bStall; - size_t iPoolId; - uint64_t iBlockHeight; - uint8_t* ref_ptr; - - miner_work() : iWorkSize(0), bNiceHash(false), bStall(true), iPoolId(invalid_pool_id), ref_ptr((uint8_t*)&iBlockHeight) { } - - miner_work(const char* sJobID, const uint8_t* bWork, uint32_t iWorkSize, - uint64_t iTarget, bool bNiceHash, size_t iPoolId, uint64_t iBlockHeiht) : iWorkSize(iWorkSize), - iTarget(iTarget), bNiceHash(bNiceHash), bStall(false), iPoolId(iPoolId), iBlockHeight(iBlockHeiht), ref_ptr((uint8_t*)&iBlockHeight) - { - assert(iWorkSize <= sizeof(bWorkBlob)); - memcpy(this->bWorkBlob, bWork, iWorkSize); - memcpy(this->sJobID, sJobID, sizeof(miner_work::sJobID)); - } - - miner_work(miner_work&& from) : iWorkSize(from.iWorkSize), iTarget(from.iTarget), - bStall(from.bStall), iPoolId(from.iPoolId), iBlockHeight(from.iBlockHeight), ref_ptr((uint8_t*)&iBlockHeight) - { - assert(iWorkSize <= sizeof(bWorkBlob)); - memcpy(bWorkBlob, from.bWorkBlob, iWorkSize); - memcpy(this->sJobID, sJobID, sizeof(miner_work::sJobID)); - } - - miner_work(miner_work const&) = delete; - - miner_work& operator=(miner_work&& from) - { - assert(this != &from); - - iBlockHeight = from.iBlockHeight; - iPoolId = from.iPoolId; - bStall = from.bStall; - iWorkSize = from.iWorkSize; - bNiceHash = from.bNiceHash; - iTarget = from.iTarget; - - assert(iWorkSize <= sizeof(bWorkBlob)); - memcpy(sJobID, from.sJobID, sizeof(sJobID)); - memcpy(bWorkBlob, from.bWorkBlob, iWorkSize); + assert(iWorkSize <= sizeof(bWorkBlob)); + memcpy(this->bWorkBlob, bWork, iWorkSize); + memcpy(this->sJobID, sJobID, sizeof(miner_work::sJobID)); + } + + miner_work(miner_work&& from) : + iWorkSize(from.iWorkSize), + iTarget(from.iTarget), + bStall(from.bStall), + iPoolId(from.iPoolId), + iBlockHeight(from.iBlockHeight), + ref_ptr((uint8_t*)&iBlockHeight) + { + assert(iWorkSize <= sizeof(bWorkBlob)); + memcpy(bWorkBlob, from.bWorkBlob, iWorkSize); + memcpy(this->sJobID, sJobID, sizeof(miner_work::sJobID)); + } - return *this; - } + miner_work(miner_work const&) = delete; + + miner_work& operator=(miner_work&& from) + { + assert(this != &from); - miner_work& operator=(miner_work const& from) - { - assert(this != &from); + iBlockHeight = from.iBlockHeight; + iPoolId = from.iPoolId; + bStall = from.bStall; + iWorkSize = from.iWorkSize; + bNiceHash = from.bNiceHash; + iTarget = from.iTarget; - iBlockHeight = from.iBlockHeight; - iPoolId = from.iPoolId; - bStall = from.bStall; - iWorkSize = from.iWorkSize; - bNiceHash = from.bNiceHash; - iTarget = from.iTarget; + assert(iWorkSize <= sizeof(bWorkBlob)); + memcpy(sJobID, from.sJobID, sizeof(sJobID)); + memcpy(bWorkBlob, from.bWorkBlob, iWorkSize); - if(!ref_ptr) - return *this; + return *this; + } - for(size_t i=0; i <= 7 && iPoolId; i++) - ref_ptr[i] = from.ref_ptr[7-i]; + miner_work& operator=(miner_work const& from) + { + assert(this != &from); - assert(iWorkSize <= sizeof(bWorkBlob)); - memcpy(sJobID, from.sJobID, sizeof(sJobID)); - memcpy(bWorkBlob, from.bWorkBlob, iWorkSize); + iBlockHeight = from.iBlockHeight; + iPoolId = from.iPoolId; + bStall = from.bStall; + iWorkSize = from.iWorkSize; + bNiceHash = from.bNiceHash; + iTarget = from.iTarget; + if(!ref_ptr) return *this; - } - uint8_t getVersion() const - { - return bWorkBlob[0]; - } + for(size_t i = 0; i <= 7 && iPoolId; i++) + ref_ptr[i] = from.ref_ptr[7 - i]; + + assert(iWorkSize <= sizeof(bWorkBlob)); + memcpy(sJobID, from.sJobID, sizeof(sJobID)); + memcpy(bWorkBlob, from.bWorkBlob, iWorkSize); - }; + return *this; + } + + uint8_t getVersion() const + { + return bWorkBlob[0]; + } +}; } // namespace xmrstak diff --git a/xmrstak/backend/nvidia/CudaCryptonightR_gen.cpp b/xmrstak/backend/nvidia/CudaCryptonightR_gen.cpp index f1bf75819..a7587cbe0 100644 --- a/xmrstak/backend/nvidia/CudaCryptonightR_gen.cpp +++ b/xmrstak/backend/nvidia/CudaCryptonightR_gen.cpp @@ -14,17 +14,17 @@ * */ -#include -#include -#include #include +#include #include +#include +#include #include -#include "xmrstak/backend/nvidia/CudaCryptonightR_gen.hpp" #include "xmrstak/backend/cpu/crypto/variant4_random_math.h" -#include "xmrstak/misc/console.hpp" +#include "xmrstak/backend/nvidia/CudaCryptonightR_gen.hpp" #include "xmrstak/cpputil/read_write_lock.h" +#include "xmrstak/misc/console.hpp" namespace xmrstak { @@ -33,80 +33,82 @@ namespace nvidia static std::string get_code(const V4_Instruction* code, int code_size) { - std::stringstream s; + std::stringstream s; - for (int i = 0; i < code_size; ++i) - { - const V4_Instruction inst = code[i]; + for(int i = 0; i < code_size; ++i) + { + const V4_Instruction inst = code[i]; - const uint32_t a = inst.dst_index; - const uint32_t b = inst.src_index; + const uint32_t a = inst.dst_index; + const uint32_t b = inst.src_index; - switch (inst.opcode) - { - case MUL: - s << 'r' << a << "*=r" << b << ';'; - break; + switch(inst.opcode) + { + case MUL: + s << 'r' << a << "*=r" << b << ';'; + break; - case ADD: - s << 'r' << a << "+=r" << b << '+' << inst.C << "U;"; - break; + case ADD: + s << 'r' << a << "+=r" << b << '+' << inst.C << "U;"; + break; - case SUB: - s << 'r' << a << "-=r" << b << ';'; - break; + case SUB: + s << 'r' << a << "-=r" << b << ';'; + break; - case ROR: - s << 'r' << a << "=rotate_right(r" << a << ",r" << b << ");"; - break; + case ROR: + s << 'r' << a << "=rotate_right(r" << a << ",r" << b << ");"; + break; - case ROL: - s << 'r' << a << "=rotate_left(r" << a << ",r" << b << ");"; - break; + case ROL: + s << 'r' << a << "=rotate_left(r" << a << ",r" << b << ");"; + break; - case XOR: - s << 'r' << a << "^=r" << b << ';'; - break; - } + case XOR: + s << 'r' << a << "^=r" << b << ';'; + break; + } - s << '\n'; - } + s << '\n'; + } - return s.str(); + return s.str(); } struct CacheEntry { - CacheEntry(xmrstak_algo algo, uint64_t height, int arch_major, int arch_minor, const std::vector& ptx, const std::string& lowered_name) : - algo(algo), - height(height), - arch_major(arch_major), - arch_minor(arch_minor), - ptx(ptx), - lowered_name(lowered_name) - {} - - xmrstak_algo algo; - uint64_t height; - int arch_major; - int arch_minor; - std::vector ptx; - std::string lowered_name; + CacheEntry(xmrstak_algo algo, uint64_t height, int arch_major, int arch_minor, const std::vector& ptx, const std::string& lowered_name) : + algo(algo), + height(height), + arch_major(arch_major), + arch_minor(arch_minor), + ptx(ptx), + lowered_name(lowered_name) + { + } + + xmrstak_algo algo; + uint64_t height; + int arch_major; + int arch_minor; + std::vector ptx; + std::string lowered_name; }; struct BackgroundTaskBase { - virtual ~BackgroundTaskBase() {} - virtual void exec() = 0; + virtual ~BackgroundTaskBase() {} + virtual void exec() = 0; }; -template +template struct BackgroundTask : public BackgroundTaskBase { - BackgroundTask(T&& func) : m_func(std::move(func)) {} - void exec() override { m_func(); } + BackgroundTask(T&& func) : + m_func(std::move(func)) {} + void exec() override { m_func(); } - T m_func; + T m_func; }; static ::cpputil::RWLock CryptonightR_cache_mutex; @@ -119,155 +121,165 @@ static std::thread* background_thread = nullptr; static void background_thread_proc() { - std::vector tasks; - for (;;) { - tasks.clear(); - { - std::lock_guard g(background_tasks_mutex); - background_tasks.swap(tasks); - } - - for (BackgroundTaskBase* task : tasks) { - task->exec(); - delete task; - } - - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } + std::vector tasks; + for(;;) + { + tasks.clear(); + { + std::lock_guard g(background_tasks_mutex); + background_tasks.swap(tasks); + } + + for(BackgroundTaskBase* task : tasks) + { + task->exec(); + delete task; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + } } -template +template static void background_exec(T&& func) { - BackgroundTaskBase* task = new BackgroundTask(std::move(func)); - - std::lock_guard g(background_tasks_mutex); - background_tasks.push_back(task); - if (!background_thread) { - background_thread = new std::thread(background_thread_proc); - } + BackgroundTaskBase* task = new BackgroundTask(std::move(func)); + + std::lock_guard g(background_tasks_mutex); + background_tasks.push_back(task); + if(!background_thread) + { + background_thread = new std::thread(background_thread_proc); + } } static void CryptonightR_build_program( - std::vector& ptx, - std::string& lowered_name, - const xmrstak_algo& algo, - uint64_t height, - uint32_t precompile_count, - int arch_major, - int arch_minor, - std::string source) + std::vector& ptx, + std::string& lowered_name, + const xmrstak_algo& algo, + uint64_t height, + uint32_t precompile_count, + int arch_major, + int arch_minor, + std::string source) { - { + { CryptonightR_cache_mutex.WriteLock(); - // Remove old programs from cache - for (size_t i = 0; i < CryptonightR_cache.size();) - { - const CacheEntry& entry = CryptonightR_cache[i]; - if ((entry.algo == algo) && (entry.height + 2 + precompile_count < height)) - { - printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu released (old program)", entry.height); - CryptonightR_cache[i] = std::move(CryptonightR_cache.back()); - CryptonightR_cache.pop_back(); - } - else - { - ++i; - } - } + // Remove old programs from cache + for(size_t i = 0; i < CryptonightR_cache.size();) + { + const CacheEntry& entry = CryptonightR_cache[i]; + if((entry.algo == algo) && (entry.height + 2 + precompile_count < height)) + { + printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu released (old program)", entry.height); + CryptonightR_cache[i] = std::move(CryptonightR_cache.back()); + CryptonightR_cache.pop_back(); + } + else + { + ++i; + } + } CryptonightR_cache_mutex.UnLock(); - } + } - ptx.clear(); - ptx.reserve(65536); + ptx.clear(); + ptx.reserve(65536); - std::lock_guard g1(CryptonightR_build_mutex); - { + std::lock_guard g1(CryptonightR_build_mutex); + { CryptonightR_cache_mutex.ReadLock(); - // Check if the cache already has this program (some other thread might have added it first) - for (const CacheEntry& entry : CryptonightR_cache) - { - if ((entry.algo == algo) && (entry.height == height) && (entry.arch_major == arch_major) && (entry.arch_minor == arch_minor)) - { - ptx = entry.ptx; - lowered_name = entry.lowered_name; + // Check if the cache already has this program (some other thread might have added it first) + for(const CacheEntry& entry : CryptonightR_cache) + { + if((entry.algo == algo) && (entry.height == height) && (entry.arch_major == arch_major) && (entry.arch_minor == arch_minor)) + { + ptx = entry.ptx; + lowered_name = entry.lowered_name; CryptonightR_cache_mutex.UnLock(); - return; - } - } + return; + } + } CryptonightR_cache_mutex.UnLock(); - } - - nvrtcProgram prog; - nvrtcResult result = nvrtcCreateProgram(&prog, source.c_str(), "CryptonightR.curt", 0, NULL, NULL); - if (result != NVRTC_SUCCESS) { - printer::inst()->print_msg(L0, "nvrtcCreateProgram failed: %s", nvrtcGetErrorString(result)); - return; - } - - result = nvrtcAddNameExpression(prog, "CryptonightR_phase2"); - if (result != NVRTC_SUCCESS) { - printer::inst()->print_msg(L0, "nvrtcAddNameExpression failed: %s", nvrtcGetErrorString(result)); - nvrtcDestroyProgram(&prog); - return; - } - - char opt0[64]; - sprintf(opt0, "--gpu-architecture=compute_%d%d", arch_major, arch_minor); - - char opt1[64]; - sprintf(opt1, "-DALGO=%d", static_cast(algo.Id())); - - const char* opts[2] = { opt0, opt1 }; - - result = nvrtcCompileProgram(prog, 2, opts); - if (result != NVRTC_SUCCESS) { - printer::inst()->print_msg(L0, "nvrtcCompileProgram failed: %s", nvrtcGetErrorString(result)); - - size_t logSize; - if (nvrtcGetProgramLogSize(prog, &logSize) == NVRTC_SUCCESS) { - char *log = new char[logSize]; - if (nvrtcGetProgramLog(prog, log) == NVRTC_SUCCESS) { - printer::inst()->print_msg(L0, "Program compile log: %s", log); - } - delete[]log; - } - nvrtcDestroyProgram(&prog); - return; - } - - - const char* name; - result = nvrtcGetLoweredName(prog, "CryptonightR_phase2", &name); - if (result != NVRTC_SUCCESS) { - printer::inst()->print_msg(L0, "nvrtcGetLoweredName failed: %s", nvrtcGetErrorString(result)); - nvrtcDestroyProgram(&prog); - return; - } - - size_t ptxSize; - result = nvrtcGetPTXSize(prog, &ptxSize); - if (result != NVRTC_SUCCESS) { - printer::inst()->print_msg(L0, "nvrtcGetPTXSize failed: %s", nvrtcGetErrorString(result)); - nvrtcDestroyProgram(&prog); - return; - } - - ptx.resize(ptxSize); - result = nvrtcGetPTX(prog, ptx.data()); - if (result != NVRTC_SUCCESS) { - printer::inst()->print_msg(L0, "nvrtcGetPTX failed: %s", nvrtcGetErrorString(result)); - nvrtcDestroyProgram(&prog); - return; - } - - lowered_name = name; - - nvrtcDestroyProgram(&prog); - - printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu compiled", height); + } + + nvrtcProgram prog; + nvrtcResult result = nvrtcCreateProgram(&prog, source.c_str(), "CryptonightR.curt", 0, NULL, NULL); + if(result != NVRTC_SUCCESS) + { + printer::inst()->print_msg(L0, "nvrtcCreateProgram failed: %s", nvrtcGetErrorString(result)); + return; + } + + result = nvrtcAddNameExpression(prog, "CryptonightR_phase2"); + if(result != NVRTC_SUCCESS) + { + printer::inst()->print_msg(L0, "nvrtcAddNameExpression failed: %s", nvrtcGetErrorString(result)); + nvrtcDestroyProgram(&prog); + return; + } + + char opt0[64]; + sprintf(opt0, "--gpu-architecture=compute_%d%d", arch_major, arch_minor); + + char opt1[64]; + sprintf(opt1, "-DALGO=%d", static_cast(algo.Id())); + + const char* opts[2] = {opt0, opt1}; + + result = nvrtcCompileProgram(prog, 2, opts); + if(result != NVRTC_SUCCESS) + { + printer::inst()->print_msg(L0, "nvrtcCompileProgram failed: %s", nvrtcGetErrorString(result)); + + size_t logSize; + if(nvrtcGetProgramLogSize(prog, &logSize) == NVRTC_SUCCESS) + { + char* log = new char[logSize]; + if(nvrtcGetProgramLog(prog, log) == NVRTC_SUCCESS) + { + printer::inst()->print_msg(L0, "Program compile log: %s", log); + } + delete[] log; + } + nvrtcDestroyProgram(&prog); + return; + } + + const char* name; + result = nvrtcGetLoweredName(prog, "CryptonightR_phase2", &name); + if(result != NVRTC_SUCCESS) + { + printer::inst()->print_msg(L0, "nvrtcGetLoweredName failed: %s", nvrtcGetErrorString(result)); + nvrtcDestroyProgram(&prog); + return; + } + + size_t ptxSize; + result = nvrtcGetPTXSize(prog, &ptxSize); + if(result != NVRTC_SUCCESS) + { + printer::inst()->print_msg(L0, "nvrtcGetPTXSize failed: %s", nvrtcGetErrorString(result)); + nvrtcDestroyProgram(&prog); + return; + } + + ptx.resize(ptxSize); + result = nvrtcGetPTX(prog, ptx.data()); + if(result != NVRTC_SUCCESS) + { + printer::inst()->print_msg(L0, "nvrtcGetPTX failed: %s", nvrtcGetErrorString(result)); + nvrtcDestroyProgram(&prog); + return; + } + + lowered_name = name; + + nvrtcDestroyProgram(&prog); + + printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu compiled", height); CryptonightR_cache_mutex.WriteLock(); CryptonightR_cache.emplace_back(algo, height, arch_major, arch_minor, ptx, lowered_name); @@ -276,62 +288,63 @@ static void CryptonightR_build_program( void CryptonightR_get_program(std::vector& ptx, std::string& lowered_name, const xmrstak_algo algo, uint64_t height, uint32_t precompile_count, int arch_major, int arch_minor, bool background) { - if (background) { - background_exec([=]() { std::vector tmp; std::string s; CryptonightR_get_program(tmp, s, algo, height, precompile_count, arch_major, arch_minor, false); }); - return; - } - - ptx.clear(); - - const char* source_code_template = - #include "nvcc_code/cuda_cryptonight_r.curt" - ; - const char include_name[] = "XMRSTAK_INCLUDE_RANDOM_MATH"; - const char* offset = strstr(source_code_template, include_name); - if (!offset) - { - printer::inst()->print_msg(L0, "CryptonightR_get_program: XMRSTAK_INCLUDE_RANDOM_MATH not found in cuda_cryptonight_r.curt"); - return; - } - - V4_Instruction code[256]; - int code_size; - switch (algo.Id()) - { - case cryptonight_r_wow: - code_size = v4_random_math_init(code, height); - break; - case cryptonight_r: - code_size = v4_random_math_init(code, height); - break; - printer::inst()->print_msg(LDEBUG, "CryptonightR_get_program: invalid algo %d", algo); - return; - } - - std::string source_code(source_code_template, offset); - source_code.append(get_code(code, code_size)); - source_code.append(offset + sizeof(include_name) - 1); - - { + if(background) + { + background_exec([=]() { std::vector tmp; std::string s; CryptonightR_get_program(tmp, s, algo, height, precompile_count, arch_major, arch_minor, false); }); + return; + } + + ptx.clear(); + + const char* source_code_template = +#include "nvcc_code/cuda_cryptonight_r.curt" + ; + const char include_name[] = "XMRSTAK_INCLUDE_RANDOM_MATH"; + const char* offset = strstr(source_code_template, include_name); + if(!offset) + { + printer::inst()->print_msg(L0, "CryptonightR_get_program: XMRSTAK_INCLUDE_RANDOM_MATH not found in cuda_cryptonight_r.curt"); + return; + } + + V4_Instruction code[256]; + int code_size; + switch(algo.Id()) + { + case cryptonight_r_wow: + code_size = v4_random_math_init(code, height); + break; + case cryptonight_r: + code_size = v4_random_math_init(code, height); + break; + printer::inst()->print_msg(LDEBUG, "CryptonightR_get_program: invalid algo %d", algo); + return; + } + + std::string source_code(source_code_template, offset); + source_code.append(get_code(code, code_size)); + source_code.append(offset + sizeof(include_name) - 1); + + { CryptonightR_cache_mutex.ReadLock(); - // Check if the cache has this program - for (const CacheEntry& entry : CryptonightR_cache) - { - if ((entry.algo == algo) && (entry.height == height) && (entry.arch_major == arch_major) && (entry.arch_minor == arch_minor)) - { - printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu found in cache", height); - ptx = entry.ptx; - lowered_name = entry.lowered_name; + // Check if the cache has this program + for(const CacheEntry& entry : CryptonightR_cache) + { + if((entry.algo == algo) && (entry.height == height) && (entry.arch_major == arch_major) && (entry.arch_minor == arch_minor)) + { + printer::inst()->print_msg(LDEBUG, "CryptonightR: program for height %llu found in cache", height); + ptx = entry.ptx; + lowered_name = entry.lowered_name; CryptonightR_cache_mutex.UnLock(); - return; - } - } + return; + } + } CryptonightR_cache_mutex.UnLock(); - } + } - CryptonightR_build_program(ptx, lowered_name, algo, height, precompile_count, arch_major, arch_minor, source_code); + CryptonightR_build_program(ptx, lowered_name, algo, height, precompile_count, arch_major, arch_minor, source_code); } +} // namespace nvidia } // namespace xmrstak -} //namespace nvidia diff --git a/xmrstak/backend/nvidia/CudaCryptonightR_gen.hpp b/xmrstak/backend/nvidia/CudaCryptonightR_gen.hpp index c3d8827b0..30abf2e59 100644 --- a/xmrstak/backend/nvidia/CudaCryptonightR_gen.hpp +++ b/xmrstak/backend/nvidia/CudaCryptonightR_gen.hpp @@ -19,9 +19,8 @@ #include "xmrstak/backend/cryptonight.hpp" #include -#include #include - +#include namespace xmrstak { @@ -29,9 +28,7 @@ namespace nvidia { void CryptonightR_get_program(std::vector& ptx, std::string& lowered_name, - const xmrstak_algo algo, uint64_t height, uint32_t precompile_count, int arch_major, int arch_minor, bool background = false); - + const xmrstak_algo algo, uint64_t height, uint32_t precompile_count, int arch_major, int arch_minor, bool background = false); +} // namespace nvidia } // namespace xmrstak -} //namespace nvidia - diff --git a/xmrstak/backend/nvidia/autoAdjust.hpp b/xmrstak/backend/nvidia/autoAdjust.hpp index 2755e03d2..a7f35b18b 100644 --- a/xmrstak/backend/nvidia/autoAdjust.hpp +++ b/xmrstak/backend/nvidia/autoAdjust.hpp @@ -3,17 +3,16 @@ #include "autoAdjust.hpp" -#include "nvcc_code/cryptonight.hpp" #include "jconf.hpp" -#include "xmrstak/misc/console.hpp" +#include "nvcc_code/cryptonight.hpp" #include "xmrstak/misc/configEditor.hpp" +#include "xmrstak/misc/console.hpp" #include "xmrstak/params.hpp" -#include #include #include #include - +#include namespace xmrstak { @@ -22,11 +21,9 @@ namespace nvidia class autoAdjust { -public: - + public: autoAdjust() { - } /** print the adjusted values if needed @@ -63,25 +60,22 @@ class autoAdjust nvidCtxVec.push_back(ctx); else printer::inst()->print_msg(L0, "WARNING: NVIDIA setup failed for GPU %d.\n", i); - } generateThreadConfig(); return true; - } -private: - + private: void generateThreadConfig() { // load the template of the backend config into a char variable - const char *tpl = - #include "./config.tpl" - ; + const char* tpl = +#include "./config.tpl" + ; configEditor configTpl{}; - configTpl.set( std::string(tpl) ); + configTpl.set(std::string(tpl)); constexpr size_t byte2mib = 1024u * 1024u; std::string conf; @@ -90,18 +84,18 @@ class autoAdjust if(ctx.device_threads * ctx.device_blocks > 0) { conf += std::string(" // gpu: ") + ctx.name + " architecture: " + std::to_string(ctx.device_arch[0] * 10 + ctx.device_arch[1]) + "\n"; - conf += std::string(" // memory: ") + std::to_string(ctx.free_device_memory / byte2mib) + "/" + std::to_string(ctx.total_device_memory / byte2mib) + " MiB\n"; + conf += std::string(" // memory: ") + std::to_string(ctx.free_device_memory / byte2mib) + "/" + std::to_string(ctx.total_device_memory / byte2mib) + " MiB\n"; conf += std::string(" // smx: ") + std::to_string(ctx.device_mpcount) + "\n"; conf += std::string(" { \"index\" : ") + std::to_string(ctx.device_id) + ",\n" + - " \"threads\" : " + std::to_string(ctx.device_threads) + ", \"blocks\" : " + std::to_string(ctx.device_blocks) + ",\n" + - " \"bfactor\" : " + std::to_string(ctx.device_bfactor) + ", \"bsleep\" : " + std::to_string(ctx.device_bsleep) + ",\n" + - " \"affine_to_cpu\" : false, \"sync_mode\" : 3,\n" + - " \"mem_mode\" : 1,\n" + - " },\n"; + " \"threads\" : " + std::to_string(ctx.device_threads) + ", \"blocks\" : " + std::to_string(ctx.device_blocks) + ",\n" + + " \"bfactor\" : " + std::to_string(ctx.device_bfactor) + ", \"bsleep\" : " + std::to_string(ctx.device_bsleep) + ",\n" + + " \"affine_to_cpu\" : false, \"sync_mode\" : 3,\n" + + " \"mem_mode\" : 1,\n" + + " },\n"; } } - configTpl.replace("GPUCONFIG",conf); + configTpl.replace("GPUCONFIG", conf); configTpl.write(params::inst().configFileNVIDIA); printer::inst()->print_msg(L0, "NVIDIA: GPU configuration stored in file '%s'", params::inst().configFileNVIDIA.c_str()); } diff --git a/xmrstak/backend/nvidia/jconf.cpp b/xmrstak/backend/nvidia/jconf.cpp index 6c443343b..1cd113c4d 100644 --- a/xmrstak/backend/nvidia/jconf.cpp +++ b/xmrstak/backend/nvidia/jconf.cpp @@ -22,8 +22,8 @@ */ #include "jconf.hpp" -#include "xmrstak/misc/jext.hpp" #include "xmrstak/misc/console.hpp" +#include "xmrstak/misc/jext.hpp" #include #include @@ -36,7 +36,6 @@ #include #endif - namespace xmrstak { namespace nvidia @@ -47,9 +46,13 @@ using namespace rapidjson; /* * This enum needs to match index in oConfigValues, otherwise we will get a runtime error */ -enum configEnum { aGpuThreadsConf }; +enum configEnum +{ + aGpuThreadsConf +}; -struct configVal { +struct configVal +{ configEnum iName; const char* sName; Type iType; @@ -58,8 +61,7 @@ struct configVal { // Same order as in configEnum, as per comment above // kNullType means any type configVal oConfigValues[] = { - { aGpuThreadsConf, "gpu_threads_conf", kNullType } -}; + {aGpuThreadsConf, "gpu_threads_conf", kNullType}}; inline bool checkType(Type have, Type want) { @@ -75,9 +77,7 @@ inline bool checkType(Type have, Type want) return false; } -constexpr size_t iConfigCnt = (sizeof(oConfigValues)/sizeof(oConfigValues[0])); - - +constexpr size_t iConfigCnt = (sizeof(oConfigValues) / sizeof(oConfigValues[0])); struct jconf::opaque_private { @@ -89,7 +89,6 @@ struct jconf::opaque_private } }; - bool jconf::NeedsAutoconf() { return !prv->configValues[aGpuThreadsConf]->IsArray(); @@ -110,7 +109,7 @@ size_t jconf::GetGPUThreadCount() return 0; } -bool jconf::GetGPUThreadConfig(size_t id, thd_cfg &cfg) +bool jconf::GetGPUThreadConfig(size_t id, thd_cfg& cfg) { if(!prv->configValues[aGpuThreadsConf]->IsArray()) return false; @@ -170,7 +169,6 @@ bool jconf::GetGPUThreadConfig(size_t id, thd_cfg &cfg) return false; } - cfg.id = gid->GetInt(); cfg.blocks = blocks->GetInt(); cfg.threads = threads->GetInt(); @@ -178,7 +176,7 @@ bool jconf::GetGPUThreadConfig(size_t id, thd_cfg &cfg) cfg.bsleep = bsleep->GetInt(); cfg.syncMode = syncMode->GetInt(); cfg.memMode = memMode->GetInt(); - + if(aff->IsNumber()) cfg.cpu_aff = aff->GetInt(); else @@ -189,22 +187,22 @@ bool jconf::GetGPUThreadConfig(size_t id, thd_cfg &cfg) bool jconf::parse_config(const char* sFilename) { - FILE * pFile; - char * buffer; + FILE* pFile; + char* buffer; size_t flen; pFile = fopen(sFilename, "rb"); - if (pFile == NULL) + if(pFile == NULL) { printer::inst()->print_msg(L0, "Failed to open config file %s.", sFilename); return false; } - fseek(pFile,0,SEEK_END); + fseek(pFile, 0, SEEK_END); flen = ftell(pFile); rewind(pFile); - if(flen >= 64*1024) + if(flen >= 64 * 1024) { fclose(pFile); printer::inst()->print_msg(L0, "Oversized config file - %s.", sFilename); @@ -219,7 +217,7 @@ bool jconf::parse_config(const char* sFilename) } buffer = (char*)malloc(flen + 3); - if(fread(buffer+1, flen, 1, pFile) != 1) + if(fread(buffer + 1, flen, 1, pFile) != 1) { free(buffer); fclose(pFile); @@ -241,7 +239,7 @@ bool jconf::parse_config(const char* sFilename) buffer[flen] = '}'; buffer[flen + 1] = '\0'; - prv->jsonDoc.Parse(buffer, flen+2); + prv->jsonDoc.Parse(buffer, flen + 2); free(buffer); if(prv->jsonDoc.HasParseError()) @@ -251,7 +249,6 @@ bool jconf::parse_config(const char* sFilename) return false; } - if(!prv->jsonDoc.IsObject()) { //This should never happen as we created the root ourselves printer::inst()->print_msg(L0, "Invalid config file '%s'. No root?", sFilename); @@ -262,7 +259,7 @@ bool jconf::parse_config(const char* sFilename) { if(oConfigValues[i].iName != i) { - printer::inst()->print_msg(L0, "Code error. oConfigValues are not in order. %s",oConfigValues[i].sName); + printer::inst()->print_msg(L0, "Code error. oConfigValues are not in order. %s", oConfigValues[i].sName); return false; } diff --git a/xmrstak/backend/nvidia/jconf.hpp b/xmrstak/backend/nvidia/jconf.hpp index 40b72f880..e924c75a9 100644 --- a/xmrstak/backend/nvidia/jconf.hpp +++ b/xmrstak/backend/nvidia/jconf.hpp @@ -1,7 +1,7 @@ #pragma once +#include "xmrstak/params.hpp" #include #include -#include "xmrstak/params.hpp" namespace xmrstak { @@ -10,16 +10,18 @@ namespace nvidia class jconf { -public: + public: static jconf* inst() { - if (oInst == nullptr) oInst = new jconf; + if(oInst == nullptr) + oInst = new jconf; return oInst; }; bool parse_config(const char* sFilename = params::inst().configFileNVIDIA.c_str()); - struct thd_cfg { + struct thd_cfg + { uint32_t id; uint32_t blocks; uint32_t threads; @@ -36,17 +38,16 @@ class jconf size_t GetGPUThreadCount(); - bool GetGPUThreadConfig(size_t id, thd_cfg &cfg); + bool GetGPUThreadConfig(size_t id, thd_cfg& cfg); bool NeedsAutoconf(); -private: + private: jconf(); static jconf* oInst; struct opaque_private; opaque_private* prv; - }; } // namespace nvidia diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 80615d7a3..4506faed6 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -23,23 +23,23 @@ #include "minethd.hpp" #include "autoAdjust.hpp" -#include "xmrstak/misc/console.hpp" -#include "xmrstak/backend/cpu/crypto/cryptonight_aesni.h" #include "xmrstak/backend/cpu/crypto/cryptonight.h" +#include "xmrstak/backend/cpu/crypto/cryptonight_aesni.h" +#include "xmrstak/backend/cpu/hwlocMemory.hpp" #include "xmrstak/backend/cpu/minethd.hpp" -#include "xmrstak/params.hpp" -#include "xmrstak/misc/executor.hpp" +#include "xmrstak/backend/cryptonight.hpp" #include "xmrstak/jconf.hpp" +#include "xmrstak/misc/console.hpp" #include "xmrstak/misc/environment.hpp" -#include "xmrstak/backend/cpu/hwlocMemory.hpp" -#include "xmrstak/backend/cryptonight.hpp" +#include "xmrstak/misc/executor.hpp" #include "xmrstak/misc/utility.hpp" +#include "xmrstak/params.hpp" #include -#include +#include #include +#include #include -#include #include #ifndef USE_PRECOMPILED_HEADERS @@ -47,8 +47,8 @@ #include #include #else -#include #include +#include #endif #include #endif @@ -59,9 +59,9 @@ namespace nvidia { #ifdef WIN32 - HINSTANCE lib_handle; +HINSTANCE lib_handle; #else - void *lib_handle; +void* lib_handle; #endif minethd::minethd(miner_work& pWork, size_t iNo, const jconf::thd_cfg& cfg) @@ -101,23 +101,21 @@ void minethd::start_mining() printer::inst()->print_msg(L1, "WARNING setting affinity failed."); } - bool minethd::self_test() { return true; } - extern "C" { #ifdef WIN32 -__declspec(dllexport) + __declspec(dllexport) #endif -std::vector* xmrstak_start_backend(uint32_t threadOffset, miner_work& pWork, environment& env) -{ - environment::inst(&env); - return nvidia::minethd::thread_starter(threadOffset, pWork); -} + std::vector* xmrstak_start_backend(uint32_t threadOffset, miner_work& pWork, environment& env) + { + environment::inst(&env); + return nvidia::minethd::thread_starter(threadOffset, pWork); + } } // extern "C" std::vector* minethd::thread_starter(uint32_t threadOffset, miner_work& pWork) @@ -141,12 +139,12 @@ std::vector* minethd::thread_starter(uint32_t threadOffset, miner_wor int deviceCount = 0; if(cuda_get_devicecount(&deviceCount) != 1) { - std::cout<<"WARNING: NVIDIA no device found"<GetGPUThreadCount(); @@ -155,7 +153,7 @@ std::vector* minethd::thread_starter(uint32_t threadOffset, miner_wor cuInit(0); jconf::thd_cfg cfg; - for (i = 0; i < n; i++) + for(i = 0; i < n; i++) { jconf::inst()->GetGPUThreadConfig(i, cfg); @@ -172,10 +170,9 @@ std::vector* minethd::thread_starter(uint32_t threadOffset, miner_wor minethd* thd = new minethd(pWork, i + threadOffset, cfg); pvThreads->push_back(thd); - } - for (i = 0; i < n; i++) + for(i = 0; i < n; i++) { static_cast((*pvThreads)[i])->start_mining(); } @@ -216,16 +213,16 @@ void minethd::work_main() uint8_t version = 0; size_t lastPoolId = 0; - while (bQuit == 0) + while(bQuit == 0) { - if (oWork.bStall) + if(oWork.bStall) { /* We are stalled here because the executor didn't find a job for us yet, * either because of network latency, or a socket problem. Since we are * raison d'etre of this software it us sensible to just wait until we have something */ - while (globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) + while(globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) std::this_thread::sleep_for(std::chrono::milliseconds(100)); globalStates::inst().consume_work(oWork, iJobNo); @@ -285,8 +282,8 @@ void minethd::work_main() for(size_t i = 0; i < foundCount; i++) { - uint8_t bWorkBlob[128]; - uint8_t bResult[32]; + uint8_t bWorkBlob[128]; + uint8_t bResult[32]; memcpy(bWorkBlob, oWork.bWorkBlob, oWork.iWorkSize); memset(bResult, 0, sizeof(job_result::bResult)); @@ -294,7 +291,7 @@ void minethd::work_main() *(uint32_t*)(bWorkBlob + 39) = foundNonce[i]; cpu_ctx->hash_fn(bWorkBlob, oWork.iWorkSize, bResult, &cpu_ctx, miner_algo); - if ( (*((uint64_t*)(bResult + 24))) < oWork.iTarget) + if((*((uint64_t*)(bResult + 24))) < oWork.iTarget) executor::inst()->push_event(ex_event(job_result(oWork.sJobID, foundNonce[i], bResult, iThreadNo, miner_algo), oWork.iPoolId)); else executor::inst()->push_event(ex_event("NVIDIA Invalid Result", ctx.device_id, oWork.iPoolId)); @@ -314,5 +311,5 @@ void minethd::work_main() } } +} // namespace nvidia } // namespace xmrstak -} //namespace nvidia diff --git a/xmrstak/backend/nvidia/minethd.hpp b/xmrstak/backend/nvidia/minethd.hpp index 3863c93e8..66c49bb1f 100644 --- a/xmrstak/backend/nvidia/minethd.hpp +++ b/xmrstak/backend/nvidia/minethd.hpp @@ -1,19 +1,18 @@ #pragma once -#include "xmrstak/jconf.hpp" #include "jconf.hpp" #include "nvcc_code/cryptonight.hpp" +#include "xmrstak/jconf.hpp" #include "xmrstak/backend/cpu/minethd.hpp" #include "xmrstak/backend/iBackend.hpp" #include "xmrstak/misc/environment.hpp" +#include +#include #include #include -#include #include -#include - namespace xmrstak { @@ -22,12 +21,11 @@ namespace nvidia class minethd : public iBackend { -public: - + public: static std::vector* thread_starter(uint32_t threadOffset, miner_work& pWork); static bool self_test(); -private: + private: typedef void (*cn_hash_fun)(const void*, size_t, void*, cryptonight_ctx**, const xmrstak_algo&); minethd(miner_work& pWork, size_t iNo, const jconf::thd_cfg& cfg); diff --git a/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp b/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp index 906701893..78abd7a3d 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp @@ -3,14 +3,15 @@ #include #include -#include "xmrstak/jconf.hpp" #include "xmrstak/backend/cryptonight.hpp" +#include "xmrstak/jconf.hpp" #include -typedef struct { +typedef struct +{ int device_id; - const char *device_name; + const char* device_name; int device_arch[2]; int device_mpcount; int device_blocks; @@ -20,18 +21,18 @@ typedef struct { int syncMode; bool memMode; - uint32_t *d_input; + uint32_t* d_input; uint32_t inputlen; - uint32_t *d_result_count; - uint32_t *d_result_nonce; - uint32_t *d_long_state; - uint32_t *d_ctx_state; - uint32_t *d_ctx_state2; - uint32_t *d_ctx_a; - uint32_t *d_ctx_b; - uint32_t *d_ctx_key1; - uint32_t *d_ctx_key2; - uint32_t *d_ctx_text; + uint32_t* d_result_count; + uint32_t* d_result_nonce; + uint32_t* d_long_state; + uint32_t* d_ctx_state; + uint32_t* d_ctx_state2; + uint32_t* d_ctx_a; + uint32_t* d_ctx_b; + uint32_t* d_ctx_key1; + uint32_t* d_ctx_key2; + uint32_t* d_ctx_text; std::string name; size_t free_device_memory; size_t total_device_memory; @@ -43,19 +44,20 @@ typedef struct { xmrstak_algo cached_algo = {xmrstak_algo_id::invalid_algo}; } nvid_ctx; -extern "C" { +extern "C" +{ -/** get device count + /** get device count * * @param deviceCount[out] cuda device count * @return error code: 0 == error is occurred, 1 == no error */ -int cuda_get_devicecount( int* deviceCount); -int cuda_get_deviceinfo(nvid_ctx *ctx); -int cryptonight_extra_cpu_init(nvid_ctx *ctx); -void cryptonight_extra_cpu_set_data( nvid_ctx* ctx, const void *data, uint32_t len); -void cryptonight_extra_cpu_prepare(nvid_ctx* ctx, uint32_t startNonce, const xmrstak_algo& miner_algo); -void cryptonight_extra_cpu_final(nvid_ctx* ctx, uint32_t startNonce, uint64_t target, uint32_t* rescount, uint32_t *resnonce, const xmrstak_algo& miner_algo); + int cuda_get_devicecount(int* deviceCount); + int cuda_get_deviceinfo(nvid_ctx* ctx); + int cryptonight_extra_cpu_init(nvid_ctx* ctx); + void cryptonight_extra_cpu_set_data(nvid_ctx* ctx, const void* data, uint32_t len); + void cryptonight_extra_cpu_prepare(nvid_ctx* ctx, uint32_t startNonce, const xmrstak_algo& miner_algo); + void cryptonight_extra_cpu_final(nvid_ctx* ctx, uint32_t startNonce, uint64_t target, uint32_t* rescount, uint32_t* resnonce, const xmrstak_algo& miner_algo); } void cryptonight_core_cpu_hash(nvid_ctx* ctx, const xmrstak_algo& miner_algo, uint32_t startNonce, uint64_t chain_height); diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp index 199025635..d33e76715 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp @@ -3,287 +3,285 @@ #include -#define N_COLS 4 -#define WPOLY 0x011b +#define N_COLS 4 +#define WPOLY 0x011b static __constant__ uint32_t d_t_fn[1024] = -{ - 0xa56363c6U, 0x847c7cf8U, 0x997777eeU, 0x8d7b7bf6U, - 0x0df2f2ffU, 0xbd6b6bd6U, 0xb16f6fdeU, 0x54c5c591U, - 0x50303060U, 0x03010102U, 0xa96767ceU, 0x7d2b2b56U, - 0x19fefee7U, 0x62d7d7b5U, 0xe6abab4dU, 0x9a7676ecU, - 0x45caca8fU, 0x9d82821fU, 0x40c9c989U, 0x877d7dfaU, - 0x15fafaefU, 0xeb5959b2U, 0xc947478eU, 0x0bf0f0fbU, - 0xecadad41U, 0x67d4d4b3U, 0xfda2a25fU, 0xeaafaf45U, - 0xbf9c9c23U, 0xf7a4a453U, 0x967272e4U, 0x5bc0c09bU, - 0xc2b7b775U, 0x1cfdfde1U, 0xae93933dU, 0x6a26264cU, - 0x5a36366cU, 0x413f3f7eU, 0x02f7f7f5U, 0x4fcccc83U, - 0x5c343468U, 0xf4a5a551U, 0x34e5e5d1U, 0x08f1f1f9U, - 0x937171e2U, 0x73d8d8abU, 0x53313162U, 0x3f15152aU, - 0x0c040408U, 0x52c7c795U, 0x65232346U, 0x5ec3c39dU, - 0x28181830U, 0xa1969637U, 0x0f05050aU, 0xb59a9a2fU, - 0x0907070eU, 0x36121224U, 0x9b80801bU, 0x3de2e2dfU, - 0x26ebebcdU, 0x6927274eU, 0xcdb2b27fU, 0x9f7575eaU, - 0x1b090912U, 0x9e83831dU, 0x742c2c58U, 0x2e1a1a34U, - 0x2d1b1b36U, 0xb26e6edcU, 0xee5a5ab4U, 0xfba0a05bU, - 0xf65252a4U, 0x4d3b3b76U, 0x61d6d6b7U, 0xceb3b37dU, - 0x7b292952U, 0x3ee3e3ddU, 0x712f2f5eU, 0x97848413U, - 0xf55353a6U, 0x68d1d1b9U, 0x00000000U, 0x2cededc1U, - 0x60202040U, 0x1ffcfce3U, 0xc8b1b179U, 0xed5b5bb6U, - 0xbe6a6ad4U, 0x46cbcb8dU, 0xd9bebe67U, 0x4b393972U, - 0xde4a4a94U, 0xd44c4c98U, 0xe85858b0U, 0x4acfcf85U, - 0x6bd0d0bbU, 0x2aefefc5U, 0xe5aaaa4fU, 0x16fbfbedU, - 0xc5434386U, 0xd74d4d9aU, 0x55333366U, 0x94858511U, - 0xcf45458aU, 0x10f9f9e9U, 0x06020204U, 0x817f7ffeU, - 0xf05050a0U, 0x443c3c78U, 0xba9f9f25U, 0xe3a8a84bU, - 0xf35151a2U, 0xfea3a35dU, 0xc0404080U, 0x8a8f8f05U, - 0xad92923fU, 0xbc9d9d21U, 0x48383870U, 0x04f5f5f1U, - 0xdfbcbc63U, 0xc1b6b677U, 0x75dadaafU, 0x63212142U, - 0x30101020U, 0x1affffe5U, 0x0ef3f3fdU, 0x6dd2d2bfU, - 0x4ccdcd81U, 0x140c0c18U, 0x35131326U, 0x2fececc3U, - 0xe15f5fbeU, 0xa2979735U, 0xcc444488U, 0x3917172eU, - 0x57c4c493U, 0xf2a7a755U, 0x827e7efcU, 0x473d3d7aU, - 0xac6464c8U, 0xe75d5dbaU, 0x2b191932U, 0x957373e6U, - 0xa06060c0U, 0x98818119U, 0xd14f4f9eU, 0x7fdcdca3U, - 0x66222244U, 0x7e2a2a54U, 0xab90903bU, 0x8388880bU, - 0xca46468cU, 0x29eeeec7U, 0xd3b8b86bU, 0x3c141428U, - 0x79dedea7U, 0xe25e5ebcU, 0x1d0b0b16U, 0x76dbdbadU, - 0x3be0e0dbU, 0x56323264U, 0x4e3a3a74U, 0x1e0a0a14U, - 0xdb494992U, 0x0a06060cU, 0x6c242448U, 0xe45c5cb8U, - 0x5dc2c29fU, 0x6ed3d3bdU, 0xefacac43U, 0xa66262c4U, - 0xa8919139U, 0xa4959531U, 0x37e4e4d3U, 0x8b7979f2U, - 0x32e7e7d5U, 0x43c8c88bU, 0x5937376eU, 0xb76d6ddaU, - 0x8c8d8d01U, 0x64d5d5b1U, 0xd24e4e9cU, 0xe0a9a949U, - 0xb46c6cd8U, 0xfa5656acU, 0x07f4f4f3U, 0x25eaeacfU, - 0xaf6565caU, 0x8e7a7af4U, 0xe9aeae47U, 0x18080810U, - 0xd5baba6fU, 0x887878f0U, 0x6f25254aU, 0x722e2e5cU, - 0x241c1c38U, 0xf1a6a657U, 0xc7b4b473U, 0x51c6c697U, - 0x23e8e8cbU, 0x7cdddda1U, 0x9c7474e8U, 0x211f1f3eU, - 0xdd4b4b96U, 0xdcbdbd61U, 0x868b8b0dU, 0x858a8a0fU, - 0x907070e0U, 0x423e3e7cU, 0xc4b5b571U, 0xaa6666ccU, - 0xd8484890U, 0x05030306U, 0x01f6f6f7U, 0x120e0e1cU, - 0xa36161c2U, 0x5f35356aU, 0xf95757aeU, 0xd0b9b969U, - 0x91868617U, 0x58c1c199U, 0x271d1d3aU, 0xb99e9e27U, - 0x38e1e1d9U, 0x13f8f8ebU, 0xb398982bU, 0x33111122U, - 0xbb6969d2U, 0x70d9d9a9U, 0x898e8e07U, 0xa7949433U, - 0xb69b9b2dU, 0x221e1e3cU, 0x92878715U, 0x20e9e9c9U, - 0x49cece87U, 0xff5555aaU, 0x78282850U, 0x7adfdfa5U, - 0x8f8c8c03U, 0xf8a1a159U, 0x80898909U, 0x170d0d1aU, - 0xdabfbf65U, 0x31e6e6d7U, 0xc6424284U, 0xb86868d0U, - 0xc3414182U, 0xb0999929U, 0x772d2d5aU, 0x110f0f1eU, - 0xcbb0b07bU, 0xfc5454a8U, 0xd6bbbb6dU, 0x3a16162cU, - 0x6363c6a5U, 0x7c7cf884U, 0x7777ee99U, 0x7b7bf68dU, - 0xf2f2ff0dU, 0x6b6bd6bdU, 0x6f6fdeb1U, 0xc5c59154U, - 0x30306050U, 0x01010203U, 0x6767cea9U, 0x2b2b567dU, - 0xfefee719U, 0xd7d7b562U, 0xabab4de6U, 0x7676ec9aU, - 0xcaca8f45U, 0x82821f9dU, 0xc9c98940U, 0x7d7dfa87U, - 0xfafaef15U, 0x5959b2ebU, 0x47478ec9U, 0xf0f0fb0bU, - 0xadad41ecU, 0xd4d4b367U, 0xa2a25ffdU, 0xafaf45eaU, - 0x9c9c23bfU, 0xa4a453f7U, 0x7272e496U, 0xc0c09b5bU, - 0xb7b775c2U, 0xfdfde11cU, 0x93933daeU, 0x26264c6aU, - 0x36366c5aU, 0x3f3f7e41U, 0xf7f7f502U, 0xcccc834fU, - 0x3434685cU, 0xa5a551f4U, 0xe5e5d134U, 0xf1f1f908U, - 0x7171e293U, 0xd8d8ab73U, 0x31316253U, 0x15152a3fU, - 0x0404080cU, 0xc7c79552U, 0x23234665U, 0xc3c39d5eU, - 0x18183028U, 0x969637a1U, 0x05050a0fU, 0x9a9a2fb5U, - 0x07070e09U, 0x12122436U, 0x80801b9bU, 0xe2e2df3dU, - 0xebebcd26U, 0x27274e69U, 0xb2b27fcdU, 0x7575ea9fU, - 0x0909121bU, 0x83831d9eU, 0x2c2c5874U, 0x1a1a342eU, - 0x1b1b362dU, 0x6e6edcb2U, 0x5a5ab4eeU, 0xa0a05bfbU, - 0x5252a4f6U, 0x3b3b764dU, 0xd6d6b761U, 0xb3b37dceU, - 0x2929527bU, 0xe3e3dd3eU, 0x2f2f5e71U, 0x84841397U, - 0x5353a6f5U, 0xd1d1b968U, 0x00000000U, 0xededc12cU, - 0x20204060U, 0xfcfce31fU, 0xb1b179c8U, 0x5b5bb6edU, - 0x6a6ad4beU, 0xcbcb8d46U, 0xbebe67d9U, 0x3939724bU, - 0x4a4a94deU, 0x4c4c98d4U, 0x5858b0e8U, 0xcfcf854aU, - 0xd0d0bb6bU, 0xefefc52aU, 0xaaaa4fe5U, 0xfbfbed16U, - 0x434386c5U, 0x4d4d9ad7U, 0x33336655U, 0x85851194U, - 0x45458acfU, 0xf9f9e910U, 0x02020406U, 0x7f7ffe81U, - 0x5050a0f0U, 0x3c3c7844U, 0x9f9f25baU, 0xa8a84be3U, - 0x5151a2f3U, 0xa3a35dfeU, 0x404080c0U, 0x8f8f058aU, - 0x92923fadU, 0x9d9d21bcU, 0x38387048U, 0xf5f5f104U, - 0xbcbc63dfU, 0xb6b677c1U, 0xdadaaf75U, 0x21214263U, - 0x10102030U, 0xffffe51aU, 0xf3f3fd0eU, 0xd2d2bf6dU, - 0xcdcd814cU, 0x0c0c1814U, 0x13132635U, 0xececc32fU, - 0x5f5fbee1U, 0x979735a2U, 0x444488ccU, 0x17172e39U, - 0xc4c49357U, 0xa7a755f2U, 0x7e7efc82U, 0x3d3d7a47U, - 0x6464c8acU, 0x5d5dbae7U, 0x1919322bU, 0x7373e695U, - 0x6060c0a0U, 0x81811998U, 0x4f4f9ed1U, 0xdcdca37fU, - 0x22224466U, 0x2a2a547eU, 0x90903babU, 0x88880b83U, - 0x46468ccaU, 0xeeeec729U, 0xb8b86bd3U, 0x1414283cU, - 0xdedea779U, 0x5e5ebce2U, 0x0b0b161dU, 0xdbdbad76U, - 0xe0e0db3bU, 0x32326456U, 0x3a3a744eU, 0x0a0a141eU, - 0x494992dbU, 0x06060c0aU, 0x2424486cU, 0x5c5cb8e4U, - 0xc2c29f5dU, 0xd3d3bd6eU, 0xacac43efU, 0x6262c4a6U, - 0x919139a8U, 0x959531a4U, 0xe4e4d337U, 0x7979f28bU, - 0xe7e7d532U, 0xc8c88b43U, 0x37376e59U, 0x6d6ddab7U, - 0x8d8d018cU, 0xd5d5b164U, 0x4e4e9cd2U, 0xa9a949e0U, - 0x6c6cd8b4U, 0x5656acfaU, 0xf4f4f307U, 0xeaeacf25U, - 0x6565caafU, 0x7a7af48eU, 0xaeae47e9U, 0x08081018U, - 0xbaba6fd5U, 0x7878f088U, 0x25254a6fU, 0x2e2e5c72U, - 0x1c1c3824U, 0xa6a657f1U, 0xb4b473c7U, 0xc6c69751U, - 0xe8e8cb23U, 0xdddda17cU, 0x7474e89cU, 0x1f1f3e21U, - 0x4b4b96ddU, 0xbdbd61dcU, 0x8b8b0d86U, 0x8a8a0f85U, - 0x7070e090U, 0x3e3e7c42U, 0xb5b571c4U, 0x6666ccaaU, - 0x484890d8U, 0x03030605U, 0xf6f6f701U, 0x0e0e1c12U, - 0x6161c2a3U, 0x35356a5fU, 0x5757aef9U, 0xb9b969d0U, - 0x86861791U, 0xc1c19958U, 0x1d1d3a27U, 0x9e9e27b9U, - 0xe1e1d938U, 0xf8f8eb13U, 0x98982bb3U, 0x11112233U, - 0x6969d2bbU, 0xd9d9a970U, 0x8e8e0789U, 0x949433a7U, - 0x9b9b2db6U, 0x1e1e3c22U, 0x87871592U, 0xe9e9c920U, - 0xcece8749U, 0x5555aaffU, 0x28285078U, 0xdfdfa57aU, - 0x8c8c038fU, 0xa1a159f8U, 0x89890980U, 0x0d0d1a17U, - 0xbfbf65daU, 0xe6e6d731U, 0x424284c6U, 0x6868d0b8U, - 0x414182c3U, 0x999929b0U, 0x2d2d5a77U, 0x0f0f1e11U, - 0xb0b07bcbU, 0x5454a8fcU, 0xbbbb6dd6U, 0x16162c3aU, - 0x63c6a563U, 0x7cf8847cU, 0x77ee9977U, 0x7bf68d7bU, - 0xf2ff0df2U, 0x6bd6bd6bU, 0x6fdeb16fU, 0xc59154c5U, - 0x30605030U, 0x01020301U, 0x67cea967U, 0x2b567d2bU, - 0xfee719feU, 0xd7b562d7U, 0xab4de6abU, 0x76ec9a76U, - 0xca8f45caU, 0x821f9d82U, 0xc98940c9U, 0x7dfa877dU, - 0xfaef15faU, 0x59b2eb59U, 0x478ec947U, 0xf0fb0bf0U, - 0xad41ecadU, 0xd4b367d4U, 0xa25ffda2U, 0xaf45eaafU, - 0x9c23bf9cU, 0xa453f7a4U, 0x72e49672U, 0xc09b5bc0U, - 0xb775c2b7U, 0xfde11cfdU, 0x933dae93U, 0x264c6a26U, - 0x366c5a36U, 0x3f7e413fU, 0xf7f502f7U, 0xcc834fccU, - 0x34685c34U, 0xa551f4a5U, 0xe5d134e5U, 0xf1f908f1U, - 0x71e29371U, 0xd8ab73d8U, 0x31625331U, 0x152a3f15U, - 0x04080c04U, 0xc79552c7U, 0x23466523U, 0xc39d5ec3U, - 0x18302818U, 0x9637a196U, 0x050a0f05U, 0x9a2fb59aU, - 0x070e0907U, 0x12243612U, 0x801b9b80U, 0xe2df3de2U, - 0xebcd26ebU, 0x274e6927U, 0xb27fcdb2U, 0x75ea9f75U, - 0x09121b09U, 0x831d9e83U, 0x2c58742cU, 0x1a342e1aU, - 0x1b362d1bU, 0x6edcb26eU, 0x5ab4ee5aU, 0xa05bfba0U, - 0x52a4f652U, 0x3b764d3bU, 0xd6b761d6U, 0xb37dceb3U, - 0x29527b29U, 0xe3dd3ee3U, 0x2f5e712fU, 0x84139784U, - 0x53a6f553U, 0xd1b968d1U, 0x00000000U, 0xedc12cedU, - 0x20406020U, 0xfce31ffcU, 0xb179c8b1U, 0x5bb6ed5bU, - 0x6ad4be6aU, 0xcb8d46cbU, 0xbe67d9beU, 0x39724b39U, - 0x4a94de4aU, 0x4c98d44cU, 0x58b0e858U, 0xcf854acfU, - 0xd0bb6bd0U, 0xefc52aefU, 0xaa4fe5aaU, 0xfbed16fbU, - 0x4386c543U, 0x4d9ad74dU, 0x33665533U, 0x85119485U, - 0x458acf45U, 0xf9e910f9U, 0x02040602U, 0x7ffe817fU, - 0x50a0f050U, 0x3c78443cU, 0x9f25ba9fU, 0xa84be3a8U, - 0x51a2f351U, 0xa35dfea3U, 0x4080c040U, 0x8f058a8fU, - 0x923fad92U, 0x9d21bc9dU, 0x38704838U, 0xf5f104f5U, - 0xbc63dfbcU, 0xb677c1b6U, 0xdaaf75daU, 0x21426321U, - 0x10203010U, 0xffe51affU, 0xf3fd0ef3U, 0xd2bf6dd2U, - 0xcd814ccdU, 0x0c18140cU, 0x13263513U, 0xecc32fecU, - 0x5fbee15fU, 0x9735a297U, 0x4488cc44U, 0x172e3917U, - 0xc49357c4U, 0xa755f2a7U, 0x7efc827eU, 0x3d7a473dU, - 0x64c8ac64U, 0x5dbae75dU, 0x19322b19U, 0x73e69573U, - 0x60c0a060U, 0x81199881U, 0x4f9ed14fU, 0xdca37fdcU, - 0x22446622U, 0x2a547e2aU, 0x903bab90U, 0x880b8388U, - 0x468cca46U, 0xeec729eeU, 0xb86bd3b8U, 0x14283c14U, - 0xdea779deU, 0x5ebce25eU, 0x0b161d0bU, 0xdbad76dbU, - 0xe0db3be0U, 0x32645632U, 0x3a744e3aU, 0x0a141e0aU, - 0x4992db49U, 0x060c0a06U, 0x24486c24U, 0x5cb8e45cU, - 0xc29f5dc2U, 0xd3bd6ed3U, 0xac43efacU, 0x62c4a662U, - 0x9139a891U, 0x9531a495U, 0xe4d337e4U, 0x79f28b79U, - 0xe7d532e7U, 0xc88b43c8U, 0x376e5937U, 0x6ddab76dU, - 0x8d018c8dU, 0xd5b164d5U, 0x4e9cd24eU, 0xa949e0a9U, - 0x6cd8b46cU, 0x56acfa56U, 0xf4f307f4U, 0xeacf25eaU, - 0x65caaf65U, 0x7af48e7aU, 0xae47e9aeU, 0x08101808U, - 0xba6fd5baU, 0x78f08878U, 0x254a6f25U, 0x2e5c722eU, - 0x1c38241cU, 0xa657f1a6U, 0xb473c7b4U, 0xc69751c6U, - 0xe8cb23e8U, 0xdda17cddU, 0x74e89c74U, 0x1f3e211fU, - 0x4b96dd4bU, 0xbd61dcbdU, 0x8b0d868bU, 0x8a0f858aU, - 0x70e09070U, 0x3e7c423eU, 0xb571c4b5U, 0x66ccaa66U, - 0x4890d848U, 0x03060503U, 0xf6f701f6U, 0x0e1c120eU, - 0x61c2a361U, 0x356a5f35U, 0x57aef957U, 0xb969d0b9U, - 0x86179186U, 0xc19958c1U, 0x1d3a271dU, 0x9e27b99eU, - 0xe1d938e1U, 0xf8eb13f8U, 0x982bb398U, 0x11223311U, - 0x69d2bb69U, 0xd9a970d9U, 0x8e07898eU, 0x9433a794U, - 0x9b2db69bU, 0x1e3c221eU, 0x87159287U, 0xe9c920e9U, - 0xce8749ceU, 0x55aaff55U, 0x28507828U, 0xdfa57adfU, - 0x8c038f8cU, 0xa159f8a1U, 0x89098089U, 0x0d1a170dU, - 0xbf65dabfU, 0xe6d731e6U, 0x4284c642U, 0x68d0b868U, - 0x4182c341U, 0x9929b099U, 0x2d5a772dU, 0x0f1e110fU, - 0xb07bcbb0U, 0x54a8fc54U, 0xbb6dd6bbU, 0x162c3a16U, - 0xc6a56363U, 0xf8847c7cU, 0xee997777U, 0xf68d7b7bU, - 0xff0df2f2U, 0xd6bd6b6bU, 0xdeb16f6fU, 0x9154c5c5U, - 0x60503030U, 0x02030101U, 0xcea96767U, 0x567d2b2bU, - 0xe719fefeU, 0xb562d7d7U, 0x4de6ababU, 0xec9a7676U, - 0x8f45cacaU, 0x1f9d8282U, 0x8940c9c9U, 0xfa877d7dU, - 0xef15fafaU, 0xb2eb5959U, 0x8ec94747U, 0xfb0bf0f0U, - 0x41ecadadU, 0xb367d4d4U, 0x5ffda2a2U, 0x45eaafafU, - 0x23bf9c9cU, 0x53f7a4a4U, 0xe4967272U, 0x9b5bc0c0U, - 0x75c2b7b7U, 0xe11cfdfdU, 0x3dae9393U, 0x4c6a2626U, - 0x6c5a3636U, 0x7e413f3fU, 0xf502f7f7U, 0x834fccccU, - 0x685c3434U, 0x51f4a5a5U, 0xd134e5e5U, 0xf908f1f1U, - 0xe2937171U, 0xab73d8d8U, 0x62533131U, 0x2a3f1515U, - 0x080c0404U, 0x9552c7c7U, 0x46652323U, 0x9d5ec3c3U, - 0x30281818U, 0x37a19696U, 0x0a0f0505U, 0x2fb59a9aU, - 0x0e090707U, 0x24361212U, 0x1b9b8080U, 0xdf3de2e2U, - 0xcd26ebebU, 0x4e692727U, 0x7fcdb2b2U, 0xea9f7575U, - 0x121b0909U, 0x1d9e8383U, 0x58742c2cU, 0x342e1a1aU, - 0x362d1b1bU, 0xdcb26e6eU, 0xb4ee5a5aU, 0x5bfba0a0U, - 0xa4f65252U, 0x764d3b3bU, 0xb761d6d6U, 0x7dceb3b3U, - 0x527b2929U, 0xdd3ee3e3U, 0x5e712f2fU, 0x13978484U, - 0xa6f55353U, 0xb968d1d1U, 0x00000000U, 0xc12cededU, - 0x40602020U, 0xe31ffcfcU, 0x79c8b1b1U, 0xb6ed5b5bU, - 0xd4be6a6aU, 0x8d46cbcbU, 0x67d9bebeU, 0x724b3939U, - 0x94de4a4aU, 0x98d44c4cU, 0xb0e85858U, 0x854acfcfU, - 0xbb6bd0d0U, 0xc52aefefU, 0x4fe5aaaaU, 0xed16fbfbU, - 0x86c54343U, 0x9ad74d4dU, 0x66553333U, 0x11948585U, - 0x8acf4545U, 0xe910f9f9U, 0x04060202U, 0xfe817f7fU, - 0xa0f05050U, 0x78443c3cU, 0x25ba9f9fU, 0x4be3a8a8U, - 0xa2f35151U, 0x5dfea3a3U, 0x80c04040U, 0x058a8f8fU, - 0x3fad9292U, 0x21bc9d9dU, 0x70483838U, 0xf104f5f5U, - 0x63dfbcbcU, 0x77c1b6b6U, 0xaf75dadaU, 0x42632121U, - 0x20301010U, 0xe51affffU, 0xfd0ef3f3U, 0xbf6dd2d2U, - 0x814ccdcdU, 0x18140c0cU, 0x26351313U, 0xc32fececU, - 0xbee15f5fU, 0x35a29797U, 0x88cc4444U, 0x2e391717U, - 0x9357c4c4U, 0x55f2a7a7U, 0xfc827e7eU, 0x7a473d3dU, - 0xc8ac6464U, 0xbae75d5dU, 0x322b1919U, 0xe6957373U, - 0xc0a06060U, 0x19988181U, 0x9ed14f4fU, 0xa37fdcdcU, - 0x44662222U, 0x547e2a2aU, 0x3bab9090U, 0x0b838888U, - 0x8cca4646U, 0xc729eeeeU, 0x6bd3b8b8U, 0x283c1414U, - 0xa779dedeU, 0xbce25e5eU, 0x161d0b0bU, 0xad76dbdbU, - 0xdb3be0e0U, 0x64563232U, 0x744e3a3aU, 0x141e0a0aU, - 0x92db4949U, 0x0c0a0606U, 0x486c2424U, 0xb8e45c5cU, - 0x9f5dc2c2U, 0xbd6ed3d3U, 0x43efacacU, 0xc4a66262U, - 0x39a89191U, 0x31a49595U, 0xd337e4e4U, 0xf28b7979U, - 0xd532e7e7U, 0x8b43c8c8U, 0x6e593737U, 0xdab76d6dU, - 0x018c8d8dU, 0xb164d5d5U, 0x9cd24e4eU, 0x49e0a9a9U, - 0xd8b46c6cU, 0xacfa5656U, 0xf307f4f4U, 0xcf25eaeaU, - 0xcaaf6565U, 0xf48e7a7aU, 0x47e9aeaeU, 0x10180808U, - 0x6fd5babaU, 0xf0887878U, 0x4a6f2525U, 0x5c722e2eU, - 0x38241c1cU, 0x57f1a6a6U, 0x73c7b4b4U, 0x9751c6c6U, - 0xcb23e8e8U, 0xa17cddddU, 0xe89c7474U, 0x3e211f1fU, - 0x96dd4b4bU, 0x61dcbdbdU, 0x0d868b8bU, 0x0f858a8aU, - 0xe0907070U, 0x7c423e3eU, 0x71c4b5b5U, 0xccaa6666U, - 0x90d84848U, 0x06050303U, 0xf701f6f6U, 0x1c120e0eU, - 0xc2a36161U, 0x6a5f3535U, 0xaef95757U, 0x69d0b9b9U, - 0x17918686U, 0x9958c1c1U, 0x3a271d1dU, 0x27b99e9eU, - 0xd938e1e1U, 0xeb13f8f8U, 0x2bb39898U, 0x22331111U, - 0xd2bb6969U, 0xa970d9d9U, 0x07898e8eU, 0x33a79494U, - 0x2db69b9bU, 0x3c221e1eU, 0x15928787U, 0xc920e9e9U, - 0x8749ceceU, 0xaaff5555U, 0x50782828U, 0xa57adfdfU, - 0x038f8c8cU, 0x59f8a1a1U, 0x09808989U, 0x1a170d0dU, - 0x65dabfbfU, 0xd731e6e6U, 0x84c64242U, 0xd0b86868U, - 0x82c34141U, 0x29b09999U, 0x5a772d2dU, 0x1e110f0fU, - 0x7bcbb0b0U, 0xa8fc5454U, 0x6dd6bbbbU, 0x2c3a1616U -}; + { + 0xa56363c6U, 0x847c7cf8U, 0x997777eeU, 0x8d7b7bf6U, + 0x0df2f2ffU, 0xbd6b6bd6U, 0xb16f6fdeU, 0x54c5c591U, + 0x50303060U, 0x03010102U, 0xa96767ceU, 0x7d2b2b56U, + 0x19fefee7U, 0x62d7d7b5U, 0xe6abab4dU, 0x9a7676ecU, + 0x45caca8fU, 0x9d82821fU, 0x40c9c989U, 0x877d7dfaU, + 0x15fafaefU, 0xeb5959b2U, 0xc947478eU, 0x0bf0f0fbU, + 0xecadad41U, 0x67d4d4b3U, 0xfda2a25fU, 0xeaafaf45U, + 0xbf9c9c23U, 0xf7a4a453U, 0x967272e4U, 0x5bc0c09bU, + 0xc2b7b775U, 0x1cfdfde1U, 0xae93933dU, 0x6a26264cU, + 0x5a36366cU, 0x413f3f7eU, 0x02f7f7f5U, 0x4fcccc83U, + 0x5c343468U, 0xf4a5a551U, 0x34e5e5d1U, 0x08f1f1f9U, + 0x937171e2U, 0x73d8d8abU, 0x53313162U, 0x3f15152aU, + 0x0c040408U, 0x52c7c795U, 0x65232346U, 0x5ec3c39dU, + 0x28181830U, 0xa1969637U, 0x0f05050aU, 0xb59a9a2fU, + 0x0907070eU, 0x36121224U, 0x9b80801bU, 0x3de2e2dfU, + 0x26ebebcdU, 0x6927274eU, 0xcdb2b27fU, 0x9f7575eaU, + 0x1b090912U, 0x9e83831dU, 0x742c2c58U, 0x2e1a1a34U, + 0x2d1b1b36U, 0xb26e6edcU, 0xee5a5ab4U, 0xfba0a05bU, + 0xf65252a4U, 0x4d3b3b76U, 0x61d6d6b7U, 0xceb3b37dU, + 0x7b292952U, 0x3ee3e3ddU, 0x712f2f5eU, 0x97848413U, + 0xf55353a6U, 0x68d1d1b9U, 0x00000000U, 0x2cededc1U, + 0x60202040U, 0x1ffcfce3U, 0xc8b1b179U, 0xed5b5bb6U, + 0xbe6a6ad4U, 0x46cbcb8dU, 0xd9bebe67U, 0x4b393972U, + 0xde4a4a94U, 0xd44c4c98U, 0xe85858b0U, 0x4acfcf85U, + 0x6bd0d0bbU, 0x2aefefc5U, 0xe5aaaa4fU, 0x16fbfbedU, + 0xc5434386U, 0xd74d4d9aU, 0x55333366U, 0x94858511U, + 0xcf45458aU, 0x10f9f9e9U, 0x06020204U, 0x817f7ffeU, + 0xf05050a0U, 0x443c3c78U, 0xba9f9f25U, 0xe3a8a84bU, + 0xf35151a2U, 0xfea3a35dU, 0xc0404080U, 0x8a8f8f05U, + 0xad92923fU, 0xbc9d9d21U, 0x48383870U, 0x04f5f5f1U, + 0xdfbcbc63U, 0xc1b6b677U, 0x75dadaafU, 0x63212142U, + 0x30101020U, 0x1affffe5U, 0x0ef3f3fdU, 0x6dd2d2bfU, + 0x4ccdcd81U, 0x140c0c18U, 0x35131326U, 0x2fececc3U, + 0xe15f5fbeU, 0xa2979735U, 0xcc444488U, 0x3917172eU, + 0x57c4c493U, 0xf2a7a755U, 0x827e7efcU, 0x473d3d7aU, + 0xac6464c8U, 0xe75d5dbaU, 0x2b191932U, 0x957373e6U, + 0xa06060c0U, 0x98818119U, 0xd14f4f9eU, 0x7fdcdca3U, + 0x66222244U, 0x7e2a2a54U, 0xab90903bU, 0x8388880bU, + 0xca46468cU, 0x29eeeec7U, 0xd3b8b86bU, 0x3c141428U, + 0x79dedea7U, 0xe25e5ebcU, 0x1d0b0b16U, 0x76dbdbadU, + 0x3be0e0dbU, 0x56323264U, 0x4e3a3a74U, 0x1e0a0a14U, + 0xdb494992U, 0x0a06060cU, 0x6c242448U, 0xe45c5cb8U, + 0x5dc2c29fU, 0x6ed3d3bdU, 0xefacac43U, 0xa66262c4U, + 0xa8919139U, 0xa4959531U, 0x37e4e4d3U, 0x8b7979f2U, + 0x32e7e7d5U, 0x43c8c88bU, 0x5937376eU, 0xb76d6ddaU, + 0x8c8d8d01U, 0x64d5d5b1U, 0xd24e4e9cU, 0xe0a9a949U, + 0xb46c6cd8U, 0xfa5656acU, 0x07f4f4f3U, 0x25eaeacfU, + 0xaf6565caU, 0x8e7a7af4U, 0xe9aeae47U, 0x18080810U, + 0xd5baba6fU, 0x887878f0U, 0x6f25254aU, 0x722e2e5cU, + 0x241c1c38U, 0xf1a6a657U, 0xc7b4b473U, 0x51c6c697U, + 0x23e8e8cbU, 0x7cdddda1U, 0x9c7474e8U, 0x211f1f3eU, + 0xdd4b4b96U, 0xdcbdbd61U, 0x868b8b0dU, 0x858a8a0fU, + 0x907070e0U, 0x423e3e7cU, 0xc4b5b571U, 0xaa6666ccU, + 0xd8484890U, 0x05030306U, 0x01f6f6f7U, 0x120e0e1cU, + 0xa36161c2U, 0x5f35356aU, 0xf95757aeU, 0xd0b9b969U, + 0x91868617U, 0x58c1c199U, 0x271d1d3aU, 0xb99e9e27U, + 0x38e1e1d9U, 0x13f8f8ebU, 0xb398982bU, 0x33111122U, + 0xbb6969d2U, 0x70d9d9a9U, 0x898e8e07U, 0xa7949433U, + 0xb69b9b2dU, 0x221e1e3cU, 0x92878715U, 0x20e9e9c9U, + 0x49cece87U, 0xff5555aaU, 0x78282850U, 0x7adfdfa5U, + 0x8f8c8c03U, 0xf8a1a159U, 0x80898909U, 0x170d0d1aU, + 0xdabfbf65U, 0x31e6e6d7U, 0xc6424284U, 0xb86868d0U, + 0xc3414182U, 0xb0999929U, 0x772d2d5aU, 0x110f0f1eU, + 0xcbb0b07bU, 0xfc5454a8U, 0xd6bbbb6dU, 0x3a16162cU, + 0x6363c6a5U, 0x7c7cf884U, 0x7777ee99U, 0x7b7bf68dU, + 0xf2f2ff0dU, 0x6b6bd6bdU, 0x6f6fdeb1U, 0xc5c59154U, + 0x30306050U, 0x01010203U, 0x6767cea9U, 0x2b2b567dU, + 0xfefee719U, 0xd7d7b562U, 0xabab4de6U, 0x7676ec9aU, + 0xcaca8f45U, 0x82821f9dU, 0xc9c98940U, 0x7d7dfa87U, + 0xfafaef15U, 0x5959b2ebU, 0x47478ec9U, 0xf0f0fb0bU, + 0xadad41ecU, 0xd4d4b367U, 0xa2a25ffdU, 0xafaf45eaU, + 0x9c9c23bfU, 0xa4a453f7U, 0x7272e496U, 0xc0c09b5bU, + 0xb7b775c2U, 0xfdfde11cU, 0x93933daeU, 0x26264c6aU, + 0x36366c5aU, 0x3f3f7e41U, 0xf7f7f502U, 0xcccc834fU, + 0x3434685cU, 0xa5a551f4U, 0xe5e5d134U, 0xf1f1f908U, + 0x7171e293U, 0xd8d8ab73U, 0x31316253U, 0x15152a3fU, + 0x0404080cU, 0xc7c79552U, 0x23234665U, 0xc3c39d5eU, + 0x18183028U, 0x969637a1U, 0x05050a0fU, 0x9a9a2fb5U, + 0x07070e09U, 0x12122436U, 0x80801b9bU, 0xe2e2df3dU, + 0xebebcd26U, 0x27274e69U, 0xb2b27fcdU, 0x7575ea9fU, + 0x0909121bU, 0x83831d9eU, 0x2c2c5874U, 0x1a1a342eU, + 0x1b1b362dU, 0x6e6edcb2U, 0x5a5ab4eeU, 0xa0a05bfbU, + 0x5252a4f6U, 0x3b3b764dU, 0xd6d6b761U, 0xb3b37dceU, + 0x2929527bU, 0xe3e3dd3eU, 0x2f2f5e71U, 0x84841397U, + 0x5353a6f5U, 0xd1d1b968U, 0x00000000U, 0xededc12cU, + 0x20204060U, 0xfcfce31fU, 0xb1b179c8U, 0x5b5bb6edU, + 0x6a6ad4beU, 0xcbcb8d46U, 0xbebe67d9U, 0x3939724bU, + 0x4a4a94deU, 0x4c4c98d4U, 0x5858b0e8U, 0xcfcf854aU, + 0xd0d0bb6bU, 0xefefc52aU, 0xaaaa4fe5U, 0xfbfbed16U, + 0x434386c5U, 0x4d4d9ad7U, 0x33336655U, 0x85851194U, + 0x45458acfU, 0xf9f9e910U, 0x02020406U, 0x7f7ffe81U, + 0x5050a0f0U, 0x3c3c7844U, 0x9f9f25baU, 0xa8a84be3U, + 0x5151a2f3U, 0xa3a35dfeU, 0x404080c0U, 0x8f8f058aU, + 0x92923fadU, 0x9d9d21bcU, 0x38387048U, 0xf5f5f104U, + 0xbcbc63dfU, 0xb6b677c1U, 0xdadaaf75U, 0x21214263U, + 0x10102030U, 0xffffe51aU, 0xf3f3fd0eU, 0xd2d2bf6dU, + 0xcdcd814cU, 0x0c0c1814U, 0x13132635U, 0xececc32fU, + 0x5f5fbee1U, 0x979735a2U, 0x444488ccU, 0x17172e39U, + 0xc4c49357U, 0xa7a755f2U, 0x7e7efc82U, 0x3d3d7a47U, + 0x6464c8acU, 0x5d5dbae7U, 0x1919322bU, 0x7373e695U, + 0x6060c0a0U, 0x81811998U, 0x4f4f9ed1U, 0xdcdca37fU, + 0x22224466U, 0x2a2a547eU, 0x90903babU, 0x88880b83U, + 0x46468ccaU, 0xeeeec729U, 0xb8b86bd3U, 0x1414283cU, + 0xdedea779U, 0x5e5ebce2U, 0x0b0b161dU, 0xdbdbad76U, + 0xe0e0db3bU, 0x32326456U, 0x3a3a744eU, 0x0a0a141eU, + 0x494992dbU, 0x06060c0aU, 0x2424486cU, 0x5c5cb8e4U, + 0xc2c29f5dU, 0xd3d3bd6eU, 0xacac43efU, 0x6262c4a6U, + 0x919139a8U, 0x959531a4U, 0xe4e4d337U, 0x7979f28bU, + 0xe7e7d532U, 0xc8c88b43U, 0x37376e59U, 0x6d6ddab7U, + 0x8d8d018cU, 0xd5d5b164U, 0x4e4e9cd2U, 0xa9a949e0U, + 0x6c6cd8b4U, 0x5656acfaU, 0xf4f4f307U, 0xeaeacf25U, + 0x6565caafU, 0x7a7af48eU, 0xaeae47e9U, 0x08081018U, + 0xbaba6fd5U, 0x7878f088U, 0x25254a6fU, 0x2e2e5c72U, + 0x1c1c3824U, 0xa6a657f1U, 0xb4b473c7U, 0xc6c69751U, + 0xe8e8cb23U, 0xdddda17cU, 0x7474e89cU, 0x1f1f3e21U, + 0x4b4b96ddU, 0xbdbd61dcU, 0x8b8b0d86U, 0x8a8a0f85U, + 0x7070e090U, 0x3e3e7c42U, 0xb5b571c4U, 0x6666ccaaU, + 0x484890d8U, 0x03030605U, 0xf6f6f701U, 0x0e0e1c12U, + 0x6161c2a3U, 0x35356a5fU, 0x5757aef9U, 0xb9b969d0U, + 0x86861791U, 0xc1c19958U, 0x1d1d3a27U, 0x9e9e27b9U, + 0xe1e1d938U, 0xf8f8eb13U, 0x98982bb3U, 0x11112233U, + 0x6969d2bbU, 0xd9d9a970U, 0x8e8e0789U, 0x949433a7U, + 0x9b9b2db6U, 0x1e1e3c22U, 0x87871592U, 0xe9e9c920U, + 0xcece8749U, 0x5555aaffU, 0x28285078U, 0xdfdfa57aU, + 0x8c8c038fU, 0xa1a159f8U, 0x89890980U, 0x0d0d1a17U, + 0xbfbf65daU, 0xe6e6d731U, 0x424284c6U, 0x6868d0b8U, + 0x414182c3U, 0x999929b0U, 0x2d2d5a77U, 0x0f0f1e11U, + 0xb0b07bcbU, 0x5454a8fcU, 0xbbbb6dd6U, 0x16162c3aU, + 0x63c6a563U, 0x7cf8847cU, 0x77ee9977U, 0x7bf68d7bU, + 0xf2ff0df2U, 0x6bd6bd6bU, 0x6fdeb16fU, 0xc59154c5U, + 0x30605030U, 0x01020301U, 0x67cea967U, 0x2b567d2bU, + 0xfee719feU, 0xd7b562d7U, 0xab4de6abU, 0x76ec9a76U, + 0xca8f45caU, 0x821f9d82U, 0xc98940c9U, 0x7dfa877dU, + 0xfaef15faU, 0x59b2eb59U, 0x478ec947U, 0xf0fb0bf0U, + 0xad41ecadU, 0xd4b367d4U, 0xa25ffda2U, 0xaf45eaafU, + 0x9c23bf9cU, 0xa453f7a4U, 0x72e49672U, 0xc09b5bc0U, + 0xb775c2b7U, 0xfde11cfdU, 0x933dae93U, 0x264c6a26U, + 0x366c5a36U, 0x3f7e413fU, 0xf7f502f7U, 0xcc834fccU, + 0x34685c34U, 0xa551f4a5U, 0xe5d134e5U, 0xf1f908f1U, + 0x71e29371U, 0xd8ab73d8U, 0x31625331U, 0x152a3f15U, + 0x04080c04U, 0xc79552c7U, 0x23466523U, 0xc39d5ec3U, + 0x18302818U, 0x9637a196U, 0x050a0f05U, 0x9a2fb59aU, + 0x070e0907U, 0x12243612U, 0x801b9b80U, 0xe2df3de2U, + 0xebcd26ebU, 0x274e6927U, 0xb27fcdb2U, 0x75ea9f75U, + 0x09121b09U, 0x831d9e83U, 0x2c58742cU, 0x1a342e1aU, + 0x1b362d1bU, 0x6edcb26eU, 0x5ab4ee5aU, 0xa05bfba0U, + 0x52a4f652U, 0x3b764d3bU, 0xd6b761d6U, 0xb37dceb3U, + 0x29527b29U, 0xe3dd3ee3U, 0x2f5e712fU, 0x84139784U, + 0x53a6f553U, 0xd1b968d1U, 0x00000000U, 0xedc12cedU, + 0x20406020U, 0xfce31ffcU, 0xb179c8b1U, 0x5bb6ed5bU, + 0x6ad4be6aU, 0xcb8d46cbU, 0xbe67d9beU, 0x39724b39U, + 0x4a94de4aU, 0x4c98d44cU, 0x58b0e858U, 0xcf854acfU, + 0xd0bb6bd0U, 0xefc52aefU, 0xaa4fe5aaU, 0xfbed16fbU, + 0x4386c543U, 0x4d9ad74dU, 0x33665533U, 0x85119485U, + 0x458acf45U, 0xf9e910f9U, 0x02040602U, 0x7ffe817fU, + 0x50a0f050U, 0x3c78443cU, 0x9f25ba9fU, 0xa84be3a8U, + 0x51a2f351U, 0xa35dfea3U, 0x4080c040U, 0x8f058a8fU, + 0x923fad92U, 0x9d21bc9dU, 0x38704838U, 0xf5f104f5U, + 0xbc63dfbcU, 0xb677c1b6U, 0xdaaf75daU, 0x21426321U, + 0x10203010U, 0xffe51affU, 0xf3fd0ef3U, 0xd2bf6dd2U, + 0xcd814ccdU, 0x0c18140cU, 0x13263513U, 0xecc32fecU, + 0x5fbee15fU, 0x9735a297U, 0x4488cc44U, 0x172e3917U, + 0xc49357c4U, 0xa755f2a7U, 0x7efc827eU, 0x3d7a473dU, + 0x64c8ac64U, 0x5dbae75dU, 0x19322b19U, 0x73e69573U, + 0x60c0a060U, 0x81199881U, 0x4f9ed14fU, 0xdca37fdcU, + 0x22446622U, 0x2a547e2aU, 0x903bab90U, 0x880b8388U, + 0x468cca46U, 0xeec729eeU, 0xb86bd3b8U, 0x14283c14U, + 0xdea779deU, 0x5ebce25eU, 0x0b161d0bU, 0xdbad76dbU, + 0xe0db3be0U, 0x32645632U, 0x3a744e3aU, 0x0a141e0aU, + 0x4992db49U, 0x060c0a06U, 0x24486c24U, 0x5cb8e45cU, + 0xc29f5dc2U, 0xd3bd6ed3U, 0xac43efacU, 0x62c4a662U, + 0x9139a891U, 0x9531a495U, 0xe4d337e4U, 0x79f28b79U, + 0xe7d532e7U, 0xc88b43c8U, 0x376e5937U, 0x6ddab76dU, + 0x8d018c8dU, 0xd5b164d5U, 0x4e9cd24eU, 0xa949e0a9U, + 0x6cd8b46cU, 0x56acfa56U, 0xf4f307f4U, 0xeacf25eaU, + 0x65caaf65U, 0x7af48e7aU, 0xae47e9aeU, 0x08101808U, + 0xba6fd5baU, 0x78f08878U, 0x254a6f25U, 0x2e5c722eU, + 0x1c38241cU, 0xa657f1a6U, 0xb473c7b4U, 0xc69751c6U, + 0xe8cb23e8U, 0xdda17cddU, 0x74e89c74U, 0x1f3e211fU, + 0x4b96dd4bU, 0xbd61dcbdU, 0x8b0d868bU, 0x8a0f858aU, + 0x70e09070U, 0x3e7c423eU, 0xb571c4b5U, 0x66ccaa66U, + 0x4890d848U, 0x03060503U, 0xf6f701f6U, 0x0e1c120eU, + 0x61c2a361U, 0x356a5f35U, 0x57aef957U, 0xb969d0b9U, + 0x86179186U, 0xc19958c1U, 0x1d3a271dU, 0x9e27b99eU, + 0xe1d938e1U, 0xf8eb13f8U, 0x982bb398U, 0x11223311U, + 0x69d2bb69U, 0xd9a970d9U, 0x8e07898eU, 0x9433a794U, + 0x9b2db69bU, 0x1e3c221eU, 0x87159287U, 0xe9c920e9U, + 0xce8749ceU, 0x55aaff55U, 0x28507828U, 0xdfa57adfU, + 0x8c038f8cU, 0xa159f8a1U, 0x89098089U, 0x0d1a170dU, + 0xbf65dabfU, 0xe6d731e6U, 0x4284c642U, 0x68d0b868U, + 0x4182c341U, 0x9929b099U, 0x2d5a772dU, 0x0f1e110fU, + 0xb07bcbb0U, 0x54a8fc54U, 0xbb6dd6bbU, 0x162c3a16U, + 0xc6a56363U, 0xf8847c7cU, 0xee997777U, 0xf68d7b7bU, + 0xff0df2f2U, 0xd6bd6b6bU, 0xdeb16f6fU, 0x9154c5c5U, + 0x60503030U, 0x02030101U, 0xcea96767U, 0x567d2b2bU, + 0xe719fefeU, 0xb562d7d7U, 0x4de6ababU, 0xec9a7676U, + 0x8f45cacaU, 0x1f9d8282U, 0x8940c9c9U, 0xfa877d7dU, + 0xef15fafaU, 0xb2eb5959U, 0x8ec94747U, 0xfb0bf0f0U, + 0x41ecadadU, 0xb367d4d4U, 0x5ffda2a2U, 0x45eaafafU, + 0x23bf9c9cU, 0x53f7a4a4U, 0xe4967272U, 0x9b5bc0c0U, + 0x75c2b7b7U, 0xe11cfdfdU, 0x3dae9393U, 0x4c6a2626U, + 0x6c5a3636U, 0x7e413f3fU, 0xf502f7f7U, 0x834fccccU, + 0x685c3434U, 0x51f4a5a5U, 0xd134e5e5U, 0xf908f1f1U, + 0xe2937171U, 0xab73d8d8U, 0x62533131U, 0x2a3f1515U, + 0x080c0404U, 0x9552c7c7U, 0x46652323U, 0x9d5ec3c3U, + 0x30281818U, 0x37a19696U, 0x0a0f0505U, 0x2fb59a9aU, + 0x0e090707U, 0x24361212U, 0x1b9b8080U, 0xdf3de2e2U, + 0xcd26ebebU, 0x4e692727U, 0x7fcdb2b2U, 0xea9f7575U, + 0x121b0909U, 0x1d9e8383U, 0x58742c2cU, 0x342e1a1aU, + 0x362d1b1bU, 0xdcb26e6eU, 0xb4ee5a5aU, 0x5bfba0a0U, + 0xa4f65252U, 0x764d3b3bU, 0xb761d6d6U, 0x7dceb3b3U, + 0x527b2929U, 0xdd3ee3e3U, 0x5e712f2fU, 0x13978484U, + 0xa6f55353U, 0xb968d1d1U, 0x00000000U, 0xc12cededU, + 0x40602020U, 0xe31ffcfcU, 0x79c8b1b1U, 0xb6ed5b5bU, + 0xd4be6a6aU, 0x8d46cbcbU, 0x67d9bebeU, 0x724b3939U, + 0x94de4a4aU, 0x98d44c4cU, 0xb0e85858U, 0x854acfcfU, + 0xbb6bd0d0U, 0xc52aefefU, 0x4fe5aaaaU, 0xed16fbfbU, + 0x86c54343U, 0x9ad74d4dU, 0x66553333U, 0x11948585U, + 0x8acf4545U, 0xe910f9f9U, 0x04060202U, 0xfe817f7fU, + 0xa0f05050U, 0x78443c3cU, 0x25ba9f9fU, 0x4be3a8a8U, + 0xa2f35151U, 0x5dfea3a3U, 0x80c04040U, 0x058a8f8fU, + 0x3fad9292U, 0x21bc9d9dU, 0x70483838U, 0xf104f5f5U, + 0x63dfbcbcU, 0x77c1b6b6U, 0xaf75dadaU, 0x42632121U, + 0x20301010U, 0xe51affffU, 0xfd0ef3f3U, 0xbf6dd2d2U, + 0x814ccdcdU, 0x18140c0cU, 0x26351313U, 0xc32fececU, + 0xbee15f5fU, 0x35a29797U, 0x88cc4444U, 0x2e391717U, + 0x9357c4c4U, 0x55f2a7a7U, 0xfc827e7eU, 0x7a473d3dU, + 0xc8ac6464U, 0xbae75d5dU, 0x322b1919U, 0xe6957373U, + 0xc0a06060U, 0x19988181U, 0x9ed14f4fU, 0xa37fdcdcU, + 0x44662222U, 0x547e2a2aU, 0x3bab9090U, 0x0b838888U, + 0x8cca4646U, 0xc729eeeeU, 0x6bd3b8b8U, 0x283c1414U, + 0xa779dedeU, 0xbce25e5eU, 0x161d0b0bU, 0xad76dbdbU, + 0xdb3be0e0U, 0x64563232U, 0x744e3a3aU, 0x141e0a0aU, + 0x92db4949U, 0x0c0a0606U, 0x486c2424U, 0xb8e45c5cU, + 0x9f5dc2c2U, 0xbd6ed3d3U, 0x43efacacU, 0xc4a66262U, + 0x39a89191U, 0x31a49595U, 0xd337e4e4U, 0xf28b7979U, + 0xd532e7e7U, 0x8b43c8c8U, 0x6e593737U, 0xdab76d6dU, + 0x018c8d8dU, 0xb164d5d5U, 0x9cd24e4eU, 0x49e0a9a9U, + 0xd8b46c6cU, 0xacfa5656U, 0xf307f4f4U, 0xcf25eaeaU, + 0xcaaf6565U, 0xf48e7a7aU, 0x47e9aeaeU, 0x10180808U, + 0x6fd5babaU, 0xf0887878U, 0x4a6f2525U, 0x5c722e2eU, + 0x38241c1cU, 0x57f1a6a6U, 0x73c7b4b4U, 0x9751c6c6U, + 0xcb23e8e8U, 0xa17cddddU, 0xe89c7474U, 0x3e211f1fU, + 0x96dd4b4bU, 0x61dcbdbdU, 0x0d868b8bU, 0x0f858a8aU, + 0xe0907070U, 0x7c423e3eU, 0x71c4b5b5U, 0xccaa6666U, + 0x90d84848U, 0x06050303U, 0xf701f6f6U, 0x1c120e0eU, + 0xc2a36161U, 0x6a5f3535U, 0xaef95757U, 0x69d0b9b9U, + 0x17918686U, 0x9958c1c1U, 0x3a271d1dU, 0x27b99e9eU, + 0xd938e1e1U, 0xeb13f8f8U, 0x2bb39898U, 0x22331111U, + 0xd2bb6969U, 0xa970d9d9U, 0x07898e8eU, 0x33a79494U, + 0x2db69b9bU, 0x3c221e1eU, 0x15928787U, 0xc920e9e9U, + 0x8749ceceU, 0xaaff5555U, 0x50782828U, 0xa57adfdfU, + 0x038f8c8cU, 0x59f8a1a1U, 0x09808989U, 0x1a170d0dU, + 0x65dabfbfU, 0xd731e6e6U, 0x84c64242U, 0xd0b86868U, + 0x82c34141U, 0x29b09999U, 0x5a772d2dU, 0x1e110f0fU, + 0x7bcbb0b0U, 0xa8fc5454U, 0x6dd6bbbbU, 0x2c3a1616U}; -#define t_fn0(x) (sharedMemory[ (x)]) +#define t_fn0(x) (sharedMemory[(x)]) #define t_fn1(x) (sharedMemory[256 + (x)]) #define t_fn2(x) (sharedMemory[512 + (x)]) #define t_fn3(x) (sharedMemory[768 + (x)]) +#define round(dummy, y, x, k) \ + y[0] = (k)[0] ^ (t_fn0(x[0] & 0xff) ^ t_fn1((x[1] >> 8) & 0xff) ^ t_fn2((x[2] >> 16) & 0xff) ^ t_fn3((x[3] >> 24))); \ + y[1] = (k)[1] ^ (t_fn0(x[1] & 0xff) ^ t_fn1((x[2] >> 8) & 0xff) ^ t_fn2((x[3] >> 16) & 0xff) ^ t_fn3((x[0] >> 24))); \ + y[2] = (k)[2] ^ (t_fn0(x[2] & 0xff) ^ t_fn1((x[3] >> 8) & 0xff) ^ t_fn2((x[0] >> 16) & 0xff) ^ t_fn3((x[1] >> 24))); \ + y[3] = (k)[3] ^ (t_fn0(x[3] & 0xff) ^ t_fn1((x[0] >> 8) & 0xff) ^ t_fn2((x[1] >> 16) & 0xff) ^ t_fn3((x[2] >> 24))); -#define round(dummy,y,x,k) \ - y[0] = (k)[0] ^ (t_fn0(x[0] & 0xff) ^ t_fn1((x[1] >> 8) & 0xff) ^ t_fn2((x[2] >> 16) & 0xff) ^ t_fn3((x[3] >> 24))); \ - y[1] = (k)[1] ^ (t_fn0(x[1] & 0xff) ^ t_fn1((x[2] >> 8) & 0xff) ^ t_fn2((x[3] >> 16) & 0xff) ^ t_fn3((x[0] >> 24))); \ - y[2] = (k)[2] ^ (t_fn0(x[2] & 0xff) ^ t_fn1((x[3] >> 8) & 0xff) ^ t_fn2((x[0] >> 16) & 0xff) ^ t_fn3((x[1] >> 24))); \ - y[3] = (k)[3] ^ (t_fn0(x[3] & 0xff) ^ t_fn1((x[0] >> 8) & 0xff) ^ t_fn2((x[1] >> 16) & 0xff) ^ t_fn3((x[2] >> 24) )); - -__device__ __forceinline__ static void cn_aes_single_round(uint32_t * __restrict__ sharedMemory, const uint32_t * __restrict__ in, uint32_t * __restrict__ out, const uint32_t * __restrict__ expandedKey) +__device__ __forceinline__ static void cn_aes_single_round(uint32_t* __restrict__ sharedMemory, const uint32_t* __restrict__ in, uint32_t* __restrict__ out, const uint32_t* __restrict__ expandedKey) { round(sharedMemory, out, in, expandedKey); } -__device__ __forceinline__ static void cn_aes_pseudo_round_mut(const uint32_t * __restrict__ sharedMemory, uint32_t * __restrict__ val, const uint32_t * __restrict__ expandedKey) +__device__ __forceinline__ static void cn_aes_pseudo_round_mut(const uint32_t* __restrict__ sharedMemory, uint32_t* __restrict__ val, const uint32_t* __restrict__ expandedKey) { uint32_t b1[4]; round(sharedMemory, b1, val, expandedKey); @@ -298,14 +296,14 @@ __device__ __forceinline__ static void cn_aes_pseudo_round_mut(const uint32_t * round(sharedMemory, val, b1, expandedKey + 9 * N_COLS); } -__device__ __forceinline__ static void cn_aes_gpu_init(uint32_t *sharedMemory) +__device__ __forceinline__ static void cn_aes_gpu_init(uint32_t* sharedMemory) { for(int i = threadIdx.x; i < 1024; i += blockDim.x) sharedMemory[i] = d_t_fn[i]; } -__device__ __forceinline__ static void cn_aes_gpu_init_half(uint32_t *sharedMemory) +__device__ __forceinline__ static void cn_aes_gpu_init_half(uint32_t* sharedMemory) { - for(int i = threadIdx.x; i < 512; i += blockDim.x) - sharedMemory[i] = d_t_fn[i]; + for(int i = threadIdx.x; i < 512; i += blockDim.x) + sharedMemory[i] = d_t_fn[i]; } diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_blake.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_blake.hpp index 611fe1c8c..efd57c944 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_blake.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_blake.hpp @@ -1,64 +1,68 @@ #pragma once -typedef struct { +#include "cuda_extra.hpp" + +typedef struct +{ uint32_t h[8], s[4], t[2]; uint32_t buflen; int nullt; uint8_t buf[64]; } blake_state; -#define U8TO32(p) \ +#define U8TO32(p) \ (((uint32_t)((p)[0]) << 24) | ((uint32_t)((p)[1]) << 16) | \ - ((uint32_t)((p)[2]) << 8) | ((uint32_t)((p)[3]) )) - -#define U32TO8(p, v) \ - (p)[0] = (uint8_t)((v) >> 24); (p)[1] = (uint8_t)((v) >> 16); \ - (p)[2] = (uint8_t)((v) >> 8); (p)[3] = (uint8_t)((v) ); - -#define BLAKE_ROT(x,n) ROTR32(x, n) -#define BLAKE_G(a,b,c,d,e) \ - v[a] += (m[d_blake_sigma[i][e]] ^ d_blake_cst[d_blake_sigma[i][e+1]]) + v[b]; \ - v[d] = BLAKE_ROT(v[d] ^ v[a],16); \ - v[c] += v[d]; \ - v[b] = BLAKE_ROT(v[b] ^ v[c],12); \ - v[a] += (m[d_blake_sigma[i][e+1]] ^ d_blake_cst[d_blake_sigma[i][e]])+v[b]; \ - v[d] = BLAKE_ROT(v[d] ^ v[a], 8); \ - v[c] += v[d]; \ + ((uint32_t)((p)[2]) << 8) | ((uint32_t)((p)[3]))) + +#define U32TO8(p, v) \ + (p)[0] = (uint8_t)((v) >> 24); \ + (p)[1] = (uint8_t)((v) >> 16); \ + (p)[2] = (uint8_t)((v) >> 8); \ + (p)[3] = (uint8_t)((v)); + +#define BLAKE_ROT(x, n) ROTR32(x, n) +#define BLAKE_G(a, b, c, d, e) \ + v[a] += (m[d_blake_sigma[i][e]] ^ d_blake_cst[d_blake_sigma[i][e + 1]]) + v[b]; \ + v[d] = BLAKE_ROT(v[d] ^ v[a], 16); \ + v[c] += v[d]; \ + v[b] = BLAKE_ROT(v[b] ^ v[c], 12); \ + v[a] += (m[d_blake_sigma[i][e + 1]] ^ d_blake_cst[d_blake_sigma[i][e]]) + v[b]; \ + v[d] = BLAKE_ROT(v[d] ^ v[a], 8); \ + v[c] += v[d]; \ v[b] = BLAKE_ROT(v[b] ^ v[c], 7); __constant__ uint8_t d_blake_sigma[14][16] = -{ - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, - {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, - {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, - {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, - {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, - {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, - {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, - {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, - {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, - {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, - {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8} -}; -__constant__ uint32_t d_blake_cst[16] -= { + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, + {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, + {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, + {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, + {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, + {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, + {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, + {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, + {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, + {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, + {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}}; +__constant__ uint32_t d_blake_cst[16] = { 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917 -}; + 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917}; -__device__ void cn_blake_compress(blake_state * S, const uint8_t * block) +__device__ void cn_blake_compress(blake_state* S, const uint8_t* block) { uint32_t v[16], m[16], i; - for (i = 0; i < 16; ++i) m[i] = U8TO32(block + i * 4); - for (i = 0; i < 8; ++i) v[i] = S->h[i]; - v[ 8] = S->s[0] ^ 0x243F6A88; - v[ 9] = S->s[1] ^ 0x85A308D3; + for(i = 0; i < 16; ++i) + m[i] = U8TO32(block + i * 4); + for(i = 0; i < 8; ++i) + v[i] = S->h[i]; + v[8] = S->s[0] ^ 0x243F6A88; + v[9] = S->s[1] ^ 0x85A308D3; v[10] = S->s[2] ^ 0x13198A2E; v[11] = S->s[3] ^ 0x03707344; v[12] = 0xA4093822; @@ -66,7 +70,7 @@ __device__ void cn_blake_compress(blake_state * S, const uint8_t * block) v[14] = 0x082EFA98; v[15] = 0xEC4E6C89; - if (S->nullt == 0) + if(S->nullt == 0) { v[12] ^= S->t[0]; v[13] ^= S->t[0]; @@ -74,50 +78,54 @@ __device__ void cn_blake_compress(blake_state * S, const uint8_t * block) v[15] ^= S->t[1]; } - for (i = 0; i < 14; ++i) + for(i = 0; i < 14; ++i) { - BLAKE_G(0, 4, 8, 12, 0); - BLAKE_G(1, 5, 9, 13, 2); - BLAKE_G(2, 6, 10, 14, 4); - BLAKE_G(3, 7, 11, 15, 6); - BLAKE_G(3, 4, 9, 14, 14); - BLAKE_G(2, 7, 8, 13, 12); - BLAKE_G(0, 5, 10, 15, 8); + BLAKE_G(0, 4, 8, 12, 0); + BLAKE_G(1, 5, 9, 13, 2); + BLAKE_G(2, 6, 10, 14, 4); + BLAKE_G(3, 7, 11, 15, 6); + BLAKE_G(3, 4, 9, 14, 14); + BLAKE_G(2, 7, 8, 13, 12); + BLAKE_G(0, 5, 10, 15, 8); BLAKE_G(1, 6, 11, 12, 10); } - for (i = 0; i < 16; ++i) S->h[i % 8] ^= v[i]; - for (i = 0; i < 8; ++i) S->h[i] ^= S->s[i % 4]; + for(i = 0; i < 16; ++i) + S->h[i % 8] ^= v[i]; + for(i = 0; i < 8; ++i) + S->h[i] ^= S->s[i % 4]; } -__device__ void cn_blake_update(blake_state * S, const uint8_t * data, uint64_t datalen) +__device__ void cn_blake_update(blake_state* S, const uint8_t* data, uint64_t datalen) { uint32_t left = S->buflen >> 3; uint32_t fill = 64 - left; - if (left && (((datalen >> 3) & 0x3F) >= fill)) + if(left && (((datalen >> 3) & 0x3F) >= fill)) { - memcpy((void *) (S->buf + left), (void *) data, fill); + memcpy((void*)(S->buf + left), (void*)data, fill); S->t[0] += 512; - if (S->t[0] == 0) S->t[1]++; + if(S->t[0] == 0) + S->t[1]++; cn_blake_compress(S, S->buf); data += fill; datalen -= (fill << 3); left = 0; } - while (datalen >= 512) + while(datalen >= 512) { S->t[0] += 512; - if (S->t[0] == 0) S->t[1]++; + if(S->t[0] == 0) + S->t[1]++; cn_blake_compress(S, data); data += 64; datalen -= 512; } - if (datalen > 0) + if(datalen > 0) { - memcpy((void *) (S->buf + left), (void *) data, datalen >> 3); + memcpy((void*)(S->buf + left), (void*)data, datalen >> 3); S->buflen = (left << 3) + datalen; } else @@ -126,31 +134,32 @@ __device__ void cn_blake_update(blake_state * S, const uint8_t * data, uint64_ } } -__device__ void cn_blake_final(blake_state * S, uint8_t * digest) +__device__ void cn_blake_final(blake_state* S, uint8_t* digest) { const uint8_t padding[] = - { - 0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }; + { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; uint8_t pa = 0x81, pb = 0x01; uint8_t msglen[8]; uint32_t lo = S->t[0] + S->buflen, hi = S->t[1]; - if (lo < (unsigned) S->buflen) hi++; + if(lo < (unsigned)S->buflen) + hi++; U32TO8(msglen + 0, hi); U32TO8(msglen + 4, lo); - if (S->buflen == 440) + if(S->buflen == 440) { S->t[0] -= 8; cn_blake_update(S, &pa, 8); } else { - if (S->buflen < 440) + if(S->buflen < 440) { - if (S->buflen == 0) S->nullt = 1; + if(S->buflen == 0) + S->nullt = 1; S->t[0] -= 440 - S->buflen; cn_blake_update(S, padding, 440 - S->buflen); } @@ -168,9 +177,9 @@ __device__ void cn_blake_final(blake_state * S, uint8_t * digest) S->t[0] -= 64; cn_blake_update(S, msglen, 64); - U32TO8(digest + 0, S->h[0]); - U32TO8(digest + 4, S->h[1]); - U32TO8(digest + 8, S->h[2]); + U32TO8(digest + 0, S->h[0]); + U32TO8(digest + 4, S->h[1]); + U32TO8(digest + 8, S->h[2]); U32TO8(digest + 12, S->h[3]); U32TO8(digest + 16, S->h[4]); U32TO8(digest + 20, S->h[5]); @@ -178,17 +187,22 @@ __device__ void cn_blake_final(blake_state * S, uint8_t * digest) U32TO8(digest + 28, S->h[7]); } -__device__ void cn_blake(const uint8_t * in, uint64_t inlen, uint8_t * out) +__device__ void cn_blake(const uint8_t* in, uint64_t inlen, uint8_t* out) { blake_state bs; - blake_state *S = (blake_state *)&bs; - - S->h[0] = 0x6A09E667; S->h[1] = 0xBB67AE85; S->h[2] = 0x3C6EF372; - S->h[3] = 0xA54FF53A; S->h[4] = 0x510E527F; S->h[5] = 0x9B05688C; - S->h[6] = 0x1F83D9AB; S->h[7] = 0x5BE0CD19; + blake_state* S = (blake_state*)&bs; + + S->h[0] = 0x6A09E667; + S->h[1] = 0xBB67AE85; + S->h[2] = 0x3C6EF372; + S->h[3] = 0xA54FF53A; + S->h[4] = 0x510E527F; + S->h[5] = 0x9B05688C; + S->h[6] = 0x1F83D9AB; + S->h[7] = 0x5BE0CD19; S->t[0] = S->t[1] = S->buflen = S->nullt = 0; S->s[0] = S->s[1] = S->s[2] = S->s[3] = 0; - cn_blake_update(S, (uint8_t *)in, inlen * 8); - cn_blake_final(S, (uint8_t *)out); + cn_blake_update(S, (uint8_t*)in, inlen * 8); + cn_blake_final(S, (uint8_t*)out); } diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu index 718cff0c7..7f610f9dc 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu @@ -1,55 +1,55 @@ #include "xmrstak/backend/cryptonight.hpp" -#include -#include -#include +#include #include #include -#include +#include +#include +#include -#include "xmrstak/jconf.hpp" -#include "xmrstak/backend/nvidia/nvcc_code/cuda_fast_int_math_v2.hpp" -#include "xmrstak/backend/nvidia/nvcc_code/cuda_fast_div_heavy.hpp" -#include "xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp" #include "xmrstak/backend/nvidia/CudaCryptonightR_gen.hpp" - +#include "xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp" +#include "xmrstak/backend/nvidia/nvcc_code/cuda_fast_div_heavy.hpp" +#include "xmrstak/backend/nvidia/nvcc_code/cuda_fast_int_math_v2.hpp" +#include "xmrstak/jconf.hpp" #ifdef _WIN32 #include extern "C" void compat_usleep(uint64_t waitTime) { - if (waitTime > 0) - { - if (waitTime > 100) - { - // use a waitable timer for larger intervals > 0.1ms - - HANDLE timer; - LARGE_INTEGER ft; - - ft.QuadPart = -10ll * int64_t(waitTime); // Convert to 100 nanosecond interval, negative value indicates relative time - - timer = CreateWaitableTimer(NULL, TRUE, NULL); - SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0); - WaitForSingleObject(timer, INFINITE); - CloseHandle(timer); - } - else - { - // use a polling loop for short intervals <= 100ms - - LARGE_INTEGER perfCnt, start, now; - __int64 elapsed; - - QueryPerformanceFrequency(&perfCnt); - QueryPerformanceCounter(&start); - do { - SwitchToThread(); - QueryPerformanceCounter((LARGE_INTEGER*) &now); - elapsed = (__int64)((now.QuadPart - start.QuadPart) / (float)perfCnt.QuadPart * 1000 * 1000); - } while ( elapsed < waitTime ); - } - } + if(waitTime > 0) + { + if(waitTime > 100) + { + // use a waitable timer for larger intervals > 0.1ms + + HANDLE timer; + LARGE_INTEGER ft; + + ft.QuadPart = -10ll * int64_t(waitTime); // Convert to 100 nanosecond interval, negative value indicates relative time + + timer = CreateWaitableTimer(NULL, TRUE, NULL); + SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0); + WaitForSingleObject(timer, INFINITE); + CloseHandle(timer); + } + else + { + // use a polling loop for short intervals <= 100ms + + LARGE_INTEGER perfCnt, start, now; + __int64 elapsed; + + QueryPerformanceFrequency(&perfCnt); + QueryPerformanceCounter(&start); + do + { + SwitchToThread(); + QueryPerformanceCounter((LARGE_INTEGER*)&now); + elapsed = (__int64)((now.QuadPart - start.QuadPart) / (float)perfCnt.QuadPart * 1000 * 1000); + } while(elapsed < waitTime); + } + } } #else #include @@ -60,9 +60,9 @@ extern "C" void compat_usleep(uint64_t waitTime) #endif #include "cryptonight.hpp" -#include "cuda_extra.hpp" #include "cuda_aes.hpp" #include "cuda_device.hpp" +#include "cuda_extra.hpp" /* sm_2X is limited to 2GB due to the small TLB * therefore we never use 64bit indices @@ -73,106 +73,113 @@ typedef uint64_t IndexType; typedef int IndexType; #endif -__device__ __forceinline__ uint64_t cuda_mul128( uint64_t multiplier, uint64_t multiplicand, uint64_t& product_hi ) +__device__ __forceinline__ uint64_t cuda_mul128(uint64_t multiplier, uint64_t multiplicand, uint64_t& product_hi) { - product_hi = __umul64hi( multiplier, multiplicand ); - return (multiplier * multiplicand ); + product_hi = __umul64hi(multiplier, multiplicand); + return (multiplier * multiplicand); } -template< typename T > -__device__ __forceinline__ T loadGlobal64( T * const addr ) +template +__device__ __forceinline__ T loadGlobal64(T* const addr) { -#if (__CUDA_ARCH__ < 700) +#if(__CUDA_ARCH__ < 700) T x; - asm volatile( "ld.global.cg.u64 %0, [%1];" : "=l"( x ) : "l"( addr ) ); + asm volatile("ld.global.cg.u64 %0, [%1];" + : "=l"(x) + : "l"(addr)); return x; #else return *addr; #endif } -template< typename T > -__device__ __forceinline__ T loadGlobal32( T * const addr ) +template +__device__ __forceinline__ T loadGlobal32(T* const addr) { -#if (__CUDA_ARCH__ < 700) +#if(__CUDA_ARCH__ < 700) T x; - asm volatile( "ld.global.cg.u32 %0, [%1];" : "=r"( x ) : "l"( addr ) ); + asm volatile("ld.global.cg.u32 %0, [%1];" + : "=r"(x) + : "l"(addr)); return x; #else return *addr; #endif } - -template< typename T > -__device__ __forceinline__ void storeGlobal32( T* addr, T const & val ) +template +__device__ __forceinline__ void storeGlobal32(T* addr, T const& val) { -#if (__CUDA_ARCH__ < 700) - asm volatile( "st.global.cg.u32 [%0], %1;" : : "l"( addr ), "r"( val ) ); +#if(__CUDA_ARCH__ < 700) + asm volatile("st.global.cg.u32 [%0], %1;" + : + : "l"(addr), "r"(val)); #else *addr = val; #endif } -template< typename T > -__device__ __forceinline__ void storeGlobal64( T* addr, T const & val ) +template +__device__ __forceinline__ void storeGlobal64(T* addr, T const& val) { -#if (__CUDA_ARCH__ < 700) - asm volatile( "st.global.cg.u64 [%0], %1;" : : "l"( addr ), "l"( val ) ); +#if(__CUDA_ARCH__ < 700) + asm volatile("st.global.cg.u64 [%0], %1;" + : + : "l"(addr), "l"(val)); #else *addr = val; #endif } -__device__ __forceinline__ uint32_t rotate16( const uint32_t n ) +__device__ __forceinline__ uint32_t rotate16(const uint32_t n) { return (n >> 16u) | (n << 16u); } __global__ void cryptonight_core_gpu_phase1( - const uint32_t ITERATIONS, const size_t MEMORY, - int threads, int bfactor, int partidx, uint32_t * __restrict__ long_state, uint32_t * __restrict__ ctx_state2, uint32_t * __restrict__ ctx_key1 ) + const uint32_t ITERATIONS, const size_t MEMORY, + int threads, int bfactor, int partidx, uint32_t* __restrict__ long_state, uint32_t* __restrict__ ctx_state2, uint32_t* __restrict__ ctx_key1) { __shared__ uint32_t sharedMemory[1024]; - cn_aes_gpu_init( sharedMemory ); - __syncthreads( ); + cn_aes_gpu_init(sharedMemory); + __syncthreads(); - const int thread = ( blockDim.x * blockIdx.x + threadIdx.x ) >> 3; - const int sub = ( threadIdx.x & 7 ) << 2; + const int thread = (blockDim.x * blockIdx.x + threadIdx.x) >> 3; + const int sub = (threadIdx.x & 7) << 2; const int batchsize = MEMORY >> bfactor; const int start = partidx * batchsize; const int end = start + batchsize; - if ( thread >= threads ) + if(thread >= threads) return; uint32_t key[40], text[4]; - MEMCPY8( key, ctx_key1 + thread * 40, 20 ); + MEMCPY8(key, ctx_key1 + thread * 40, 20); - if( partidx == 0 ) + if(partidx == 0) { // first round - MEMCPY8( text, ctx_state2 + thread * 50 + sub + 16, 2 ); + MEMCPY8(text, ctx_state2 + thread * 50 + sub + 16, 2); } else { // load previous text data - MEMCPY8( text, &long_state[( (uint64_t) thread * MEMORY ) + sub + start - 32], 2 ); + MEMCPY8(text, &long_state[((uint64_t)thread * MEMORY) + sub + start - 32], 2); } - __syncthreads( ); - for ( int i = start; i < end; i += 32 ) + __syncthreads(); + for(int i = start; i < end; i += 32) { - cn_aes_pseudo_round_mut( sharedMemory, text, key ); - MEMCPY8(&long_state[((uint64_t) thread * MEMORY) + (sub + i)], text, 2); + cn_aes_pseudo_round_mut(sharedMemory, text, key); + MEMCPY8(&long_state[((uint64_t)thread * MEMORY) + (sub + i)], text, 2); } } /** avoid warning `unused parameter` */ -template< typename T > -__forceinline__ __device__ void unusedVar( const T& ) +template +__forceinline__ __device__ void unusedVar(const T&) { } @@ -189,25 +196,25 @@ __forceinline__ __device__ void unusedVar( const T& ) * @param value value to share with other threads within the group * @param src thread number within the group from where the data is read, range [0:group_n] */ -template -__forceinline__ __device__ uint32_t shuffle(volatile uint32_t* ptr,const uint32_t sub,const int val,const uint32_t src) +template +__forceinline__ __device__ uint32_t shuffle(volatile uint32_t* ptr, const uint32_t sub, const int val, const uint32_t src) { -#if( __CUDA_ARCH__ < 300 ) - ptr[sub] = val; - return ptr[src & (group_n-1)]; +#if(__CUDA_ARCH__ < 300) + ptr[sub] = val; + return ptr[src & (group_n - 1)]; +#else + unusedVar(ptr); + unusedVar(sub); +#if(__CUDACC_VER_MAJOR__ >= 9) + return __shfl_sync(__activemask(), val, src, group_n); #else - unusedVar( ptr ); - unusedVar( sub ); -# if(__CUDACC_VER_MAJOR__ >= 9) - return __shfl_sync(__activemask(), val, src, group_n ); -# else - return __shfl( val, src, group_n ); -# endif + return __shfl(val, src, group_n); +#endif #endif } -template -__forceinline__ __device__ uint64_t shuffle64(volatile uint32_t* ptr,const uint32_t sub,const int val,const uint32_t src, const uint32_t src2) +template +__forceinline__ __device__ uint64_t shuffle64(volatile uint32_t* ptr, const uint32_t sub, const int val, const uint32_t src, const uint32_t src2) { uint64_t tmp; ((uint32_t*)&tmp)[0] = shuffle(ptr, sub, val, src); @@ -218,9 +225,9 @@ __forceinline__ __device__ uint64_t shuffle64(volatile uint32_t* ptr,const uint3 struct u64 : public uint2 { - __forceinline__ __device__ u64(){} + __forceinline__ __device__ u64() {} - __forceinline__ __device__ u64( const uint32_t x0, const uint32_t x1) + __forceinline__ __device__ u64(const uint32_t x0, const uint32_t x1) { uint2::x = x0; uint2::y = x1; @@ -231,7 +238,7 @@ struct u64 : public uint2 return *((uint64_t*)this); } - __forceinline__ __device__ u64( const uint64_t x0) + __forceinline__ __device__ u64(const uint64_t x0) { ((uint64_t*)&this->x)[0] = x0; } @@ -259,7 +266,7 @@ struct u64 : public uint2 __forceinline__ __device__ void print(int i) const { - if(i<2) + if(i < 2) printf("gpu: %lu\n", ((uint64_t*)&this->x)[0]); } }; @@ -269,42 +276,42 @@ struct u64 : public uint2 * @tparam MEM_MODE if `0` than 64bit memory transfers per thread will be used to store/load data within shared memory * else if `1` 256bit operations will be used */ -template +template #ifdef XMR_STAK_THREADS -__launch_bounds__( XMR_STAK_THREADS * 2 ) +__launch_bounds__(XMR_STAK_THREADS * 2) #endif -__global__ void cryptonight_core_gpu_phase2_double( - const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, - int threads, int bfactor, int partidx, uint32_t * d_long_state, uint32_t * d_ctx_a, uint32_t * d_ctx_b, uint32_t * d_ctx_state, - uint32_t startNonce, uint32_t * __restrict__ d_input ) + __global__ void cryptonight_core_gpu_phase2_double( + const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, + int threads, int bfactor, int partidx, uint32_t* d_long_state, uint32_t* d_ctx_a, uint32_t* d_ctx_b, uint32_t* d_ctx_state, + uint32_t startNonce, uint32_t* __restrict__ d_input) { __shared__ uint32_t sharedMemory[512]; - cn_aes_gpu_init_half( sharedMemory ); + cn_aes_gpu_init_half(sharedMemory); -#if( __CUDA_ARCH__ < 300 ) +#if(__CUDA_ARCH__ < 300) extern __shared__ uint64_t externShared[]; // 8 x 64bit values volatile uint64_t* myChunks = (volatile uint64_t*)(externShared + (threadIdx.x >> 1) * 8); - volatile uint32_t* sPtr = (volatile uint32_t*)(externShared + (blockDim.x >> 1) * 8) + (threadIdx.x & 0xFFFFFFFE); + volatile uint32_t* sPtr = (volatile uint32_t*)(externShared + (blockDim.x >> 1) * 8) + (threadIdx.x & 0xFFFFFFFE); #else extern __shared__ uint64_t chunkMem[]; - volatile uint32_t* sPtr = NULL; + volatile uint32_t* sPtr = NULL; // 8 x 64bit values volatile uint64_t* myChunks = (volatile uint64_t*)(chunkMem + (threadIdx.x >> 1) * 8); #endif - __syncthreads( ); + __syncthreads(); const uint64_t tid = (blockDim.x * blockIdx.x + threadIdx.x); const uint32_t thread = tid >> 1; const uint32_t sub = tid & 1; - if ( thread >= threads ) + if(thread >= threads) return; - uint8_t *l0 = (uint8_t*)&d_long_state[(IndexType) thread * MEMORY]; + uint8_t* l0 = (uint8_t*)&d_long_state[(IndexType)thread * MEMORY]; uint64_t ax0 = ((uint64_t*)(d_ctx_a + thread * 4))[sub]; uint64_t bx0; @@ -324,22 +331,22 @@ __global__ void cryptonight_core_gpu_phase2_double( sqrt_result = (d_ctx_b + thread * 16 + 4 * 2 + 2)[0]; } else - bx0 = ((uint64_t*)(d_ctx_b + thread * 4))[sub]; + bx0 = ((uint64_t*)(d_ctx_b + thread * 4))[sub]; - const int batchsize = (ITERATIONS * 2) >> ( 1 + bfactor ); + const int batchsize = (ITERATIONS * 2) >> (1 + bfactor); const int start = partidx * batchsize; const int end = start + batchsize; for(int i = start; i < end; ++i) { - ptr0 = (uint64_t *)&l0[idx0 & MASK & 0x1FFFC0]; + ptr0 = (uint64_t*)&l0[idx0 & MASK & 0x1FFFC0]; if(MEM_MODE == 0) { - #pragma unroll 4 +#pragma unroll 4 for(int x = 0; x < 8; x += 2) { - myChunks[x + sub] = ptr0[ x + sub ]; + myChunks[x + sub] = ptr0[x + sub]; } } else @@ -347,52 +354,51 @@ __global__ void cryptonight_core_gpu_phase2_double( uint32_t idx1 = (idx0 & 0x30) >> 3; - const u64 cx = myChunks[ idx1 + sub ]; - const u64 cx2 = myChunks[ idx1 + ((sub + 1) & 1) ]; + const u64 cx = myChunks[idx1 + sub]; + const u64 cx2 = myChunks[idx1 + ((sub + 1) & 1)]; u64 cx_aes = ax0 ^ u64( - t_fn0( cx.x & 0xff ) ^ t_fn1( (cx.y >> 8) & 0xff ) ^ rotate16(t_fn0( (cx2.x >> 16) & 0xff ) ^ t_fn1( (cx2.y >> 24 ) )), - t_fn0( cx.y & 0xff ) ^ t_fn1( (cx2.x >> 8) & 0xff ) ^ rotate16(t_fn0( (cx2.y >> 16) & 0xff ) ^ t_fn1( (cx.x >> 24 ) )) - ); + t_fn0(cx.x & 0xff) ^ t_fn1((cx.y >> 8) & 0xff) ^ rotate16(t_fn0((cx2.x >> 16) & 0xff) ^ t_fn1((cx2.y >> 24))), + t_fn0(cx.y & 0xff) ^ t_fn1((cx2.x >> 8) & 0xff) ^ rotate16(t_fn0((cx2.y >> 16) & 0xff) ^ t_fn1((cx.x >> 24)))); if(ALGO == cryptonight_monero_v8) { - const uint64_t chunk1 = myChunks[ idx1 ^ 2 + sub ]; - const uint64_t chunk2 = myChunks[ idx1 ^ 4 + sub ]; - const uint64_t chunk3 = myChunks[ idx1 ^ 6 + sub ]; -#if (__CUDACC_VER_MAJOR__ >= 9) + const uint64_t chunk1 = myChunks[idx1 ^ 2 + sub]; + const uint64_t chunk2 = myChunks[idx1 ^ 4 + sub]; + const uint64_t chunk3 = myChunks[idx1 ^ 6 + sub]; +#if(__CUDACC_VER_MAJOR__ >= 9) __syncwarp(); #else - __syncthreads( ); + __syncthreads(); #endif - myChunks[ idx1 ^ 2 + sub ] = chunk3 + bx1; - myChunks[ idx1 ^ 4 + sub ] = chunk1 + bx0; - myChunks[ idx1 ^ 6 + sub ] = chunk2 + ax0; + myChunks[idx1 ^ 2 + sub] = chunk3 + bx1; + myChunks[idx1 ^ 4 + sub] = chunk1 + bx0; + myChunks[idx1 ^ 6 + sub] = chunk2 + ax0; } else if(ALGO == cryptonight_v8_reversewaltz) { - const uint64_t chunk3 = myChunks[ idx1 ^ 2 + sub ]; - const uint64_t chunk2 = myChunks[ idx1 ^ 4 + sub ]; - const uint64_t chunk1 = myChunks[ idx1 ^ 6 + sub ]; -#if (__CUDACC_VER_MAJOR__ >= 9) + const uint64_t chunk3 = myChunks[idx1 ^ 2 + sub]; + const uint64_t chunk2 = myChunks[idx1 ^ 4 + sub]; + const uint64_t chunk1 = myChunks[idx1 ^ 6 + sub]; +#if(__CUDACC_VER_MAJOR__ >= 9) __syncwarp(); #else - __syncthreads( ); + __syncthreads(); #endif - myChunks[ idx1 ^ 2 + sub ] = chunk3 + bx1; - myChunks[ idx1 ^ 4 + sub ] = chunk1 + bx0; - myChunks[ idx1 ^ 6 + sub ] = chunk2 + ax0; + myChunks[idx1 ^ 2 + sub] = chunk3 + bx1; + myChunks[idx1 ^ 4 + sub] = chunk1 + bx0; + myChunks[idx1 ^ 6 + sub] = chunk2 + ax0; } - myChunks[ idx1 + sub ] = cx_aes ^ bx0; + myChunks[idx1 + sub] = cx_aes ^ bx0; if(MEM_MODE == 0) { - #pragma unroll 4 +#pragma unroll 4 for(int x = 0; x < 8; x += 2) { - ptr0[ x + sub ] = myChunks[x + sub]; + ptr0[x + sub] = myChunks[x + sub]; } } else @@ -400,14 +406,14 @@ __global__ void cryptonight_core_gpu_phase2_double( idx0 = shuffle<2>(sPtr, sub, cx_aes.x, 0); idx1 = (idx0 & 0x30) >> 3; - ptr0 = (uint64_t *)&l0[idx0 & MASK & 0x1FFFC0]; + ptr0 = (uint64_t*)&l0[idx0 & MASK & 0x1FFFC0]; if(MEM_MODE == 0) { - #pragma unroll 4 +#pragma unroll 4 for(int x = 0; x < 8; x += 2) { - myChunks[x + sub] = ptr0[ x + sub ]; + myChunks[x + sub] = ptr0[x + sub]; } } else @@ -417,15 +423,15 @@ __global__ void cryptonight_core_gpu_phase2_double( bx0 = cx_aes; uint64_t cx_mul; - ((uint32_t*)&cx_mul)[0] = shuffle<2>(sPtr, sub, cx_aes.x , 0); - ((uint32_t*)&cx_mul)[1] = shuffle<2>(sPtr, sub, cx_aes.y , 0); + ((uint32_t*)&cx_mul)[0] = shuffle<2>(sPtr, sub, cx_aes.x, 0); + ((uint32_t*)&cx_mul)[1] = shuffle<2>(sPtr, sub, cx_aes.y, 0); if((ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) && sub == 1) { // Use division and square root results from the _previous_ iteration to hide the latency ((uint32_t*)&division_result)[1] ^= sqrt_result; - ((uint64_t*)myChunks)[ idx1 ] ^= division_result; + ((uint64_t*)myChunks)[idx1] ^= division_result; const uint32_t dd = (static_cast(cx_mul) + (sqrt_result << 1)) | 0x80000001UL; division_result = fast_div_v2(cx_aes, dd); @@ -433,46 +439,46 @@ __global__ void cryptonight_core_gpu_phase2_double( // Use division_result as an input for the square root to prevent parallel implementation in hardware sqrt_result = fast_sqrt_v2(cx_mul + division_result); } -#if (__CUDACC_VER_MAJOR__ >= 9) - __syncwarp(); +#if(__CUDACC_VER_MAJOR__ >= 9) + __syncwarp(); #else - __syncthreads( ); + __syncthreads(); #endif - uint64_t c = ((uint64_t*)myChunks)[ idx1 + sub ]; + uint64_t c = ((uint64_t*)myChunks)[idx1 + sub]; { - uint64_t cl = ((uint64_t*)myChunks)[ idx1 ]; + uint64_t cl = ((uint64_t*)myChunks)[idx1]; // sub 0 -> hi, sub 1 -> lo - uint64_t res = sub == 0 ? __umul64hi( cx_mul, cl ) : cx_mul * cl; + uint64_t res = sub == 0 ? __umul64hi(cx_mul, cl) : cx_mul * cl; if(ALGO == cryptonight_monero_v8) { - const uint64_t chunk1 = myChunks[ idx1 ^ 2 + sub ] ^ res; - uint64_t chunk2 = myChunks[ idx1 ^ 4 + sub ]; + const uint64_t chunk1 = myChunks[idx1 ^ 2 + sub] ^ res; + uint64_t chunk2 = myChunks[idx1 ^ 4 + sub]; res ^= ((uint64_t*)&chunk2)[0]; - const uint64_t chunk3 = myChunks[ idx1 ^ 6 + sub ]; -#if (__CUDACC_VER_MAJOR__ >= 9) + const uint64_t chunk3 = myChunks[idx1 ^ 6 + sub]; +#if(__CUDACC_VER_MAJOR__ >= 9) __syncwarp(); #else - __syncthreads( ); + __syncthreads(); #endif - myChunks[ idx1 ^ 2 + sub ] = chunk3 + bx1; - myChunks[ idx1 ^ 4 + sub ] = chunk1 + bx0; - myChunks[ idx1 ^ 6 + sub ] = chunk2 + ax0; + myChunks[idx1 ^ 2 + sub] = chunk3 + bx1; + myChunks[idx1 ^ 4 + sub] = chunk1 + bx0; + myChunks[idx1 ^ 6 + sub] = chunk2 + ax0; } if(ALGO == cryptonight_v8_reversewaltz) { - const uint64_t chunk3 = myChunks[ idx1 ^ 2 + sub ] ^ res; - uint64_t chunk2 = myChunks[ idx1 ^ 4 + sub ]; + const uint64_t chunk3 = myChunks[idx1 ^ 2 + sub] ^ res; + uint64_t chunk2 = myChunks[idx1 ^ 4 + sub]; res ^= ((uint64_t*)&chunk2)[0]; - const uint64_t chunk1 = myChunks[ idx1 ^ 6 + sub ]; -#if (__CUDACC_VER_MAJOR__ >= 9) + const uint64_t chunk1 = myChunks[idx1 ^ 6 + sub]; +#if(__CUDACC_VER_MAJOR__ >= 9) __syncwarp(); #else - __syncthreads( ); + __syncthreads(); #endif - myChunks[ idx1 ^ 2 + sub ] = chunk3 + bx1; - myChunks[ idx1 ^ 4 + sub ] = chunk1 + bx0; - myChunks[ idx1 ^ 6 + sub ] = chunk2 + ax0; + myChunks[idx1 ^ 2 + sub] = chunk3 + bx1; + myChunks[idx1 ^ 4 + sub] = chunk1 + bx0; + myChunks[idx1 ^ 6 + sub] = chunk2 + ax0; } ax0 += res; } @@ -481,13 +487,13 @@ __global__ void cryptonight_core_gpu_phase2_double( bx1 = bx0; bx0 = cx_aes; } - myChunks[ idx1 + sub ] = ax0; + myChunks[idx1 + sub] = ax0; if(MEM_MODE == 0) { - #pragma unroll 4 +#pragma unroll 4 for(int x = 0; x < 8; x += 2) { - ptr0[ x + sub ] = myChunks[x + sub]; + ptr0[x + sub] = myChunks[x + sub]; } } else @@ -496,7 +502,7 @@ __global__ void cryptonight_core_gpu_phase2_double( idx0 = shuffle<2>(sPtr, sub, static_cast(ax0), 0); } - if ( bfactor > 0 ) + if(bfactor > 0) { ((uint64_t*)(d_ctx_a + thread * 4))[sub] = ax0; if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) @@ -516,41 +522,41 @@ __global__ void cryptonight_core_gpu_phase2_double( } } -template +template #ifdef XMR_STAK_THREADS -__launch_bounds__( XMR_STAK_THREADS * 4 ) +__launch_bounds__(XMR_STAK_THREADS * 4) #endif -__global__ void cryptonight_core_gpu_phase2_quad( - const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, - int threads, int bfactor, int partidx, uint32_t * d_long_state, uint32_t * d_ctx_a, uint32_t * d_ctx_b, uint32_t * d_ctx_state, - uint32_t startNonce, uint32_t * __restrict__ d_input ) + __global__ void cryptonight_core_gpu_phase2_quad( + const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, + int threads, int bfactor, int partidx, uint32_t* d_long_state, uint32_t* d_ctx_a, uint32_t* d_ctx_b, uint32_t* d_ctx_state, + uint32_t startNonce, uint32_t* __restrict__ d_input) { __shared__ uint32_t sharedMemory[1024]; - cn_aes_gpu_init( sharedMemory ); + cn_aes_gpu_init(sharedMemory); - __syncthreads( ); + __syncthreads(); - const int thread = ( blockDim.x * blockIdx.x + threadIdx.x ) >> 2; + const int thread = (blockDim.x * blockIdx.x + threadIdx.x) >> 2; const uint32_t nonce = startNonce + thread; const int sub = threadIdx.x & 3; const int sub2 = sub & 2; -#if( __CUDA_ARCH__ < 300 ) - extern __shared__ uint32_t shuffleMem[]; - volatile uint32_t* sPtr = (volatile uint32_t*)(shuffleMem + (threadIdx.x& 0xFFFFFFFC)); +#if(__CUDA_ARCH__ < 300) + extern __shared__ uint32_t shuffleMem[]; + volatile uint32_t* sPtr = (volatile uint32_t*)(shuffleMem + (threadIdx.x & 0xFFFFFFFC)); #else - volatile uint32_t* sPtr = NULL; + volatile uint32_t* sPtr = NULL; #endif - if ( thread >= threads ) + if(thread >= threads) return; int i, k; uint32_t j; - const int batchsize = (ITERATIONS * 2) >> ( 2 + bfactor ); + const int batchsize = (ITERATIONS * 2) >> (2 + bfactor); const int start = partidx * batchsize; const int end = start + batchsize; - uint32_t * long_state = &d_long_state[(IndexType) thread * MEMORY]; + uint32_t* long_state = &d_long_state[(IndexType)thread * MEMORY]; uint32_t a, d[2], idx0; uint32_t t1[2], t2[2], res; @@ -564,9 +570,9 @@ __global__ void cryptonight_core_gpu_phase2_quad( } uint32_t tweak1_2[2]; - if (ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) + if(ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) { - uint32_t * state = d_ctx_state + thread * 50; + uint32_t* state = d_ctx_state + thread * 50; tweak1_2[0] = (d_input[8] >> 24) | (d_input[9] << 8); tweak1_2[0] ^= state[48]; tweak1_2[1] = nonce; @@ -574,7 +580,7 @@ __global__ void cryptonight_core_gpu_phase2_quad( } a = (d_ctx_a + thread * 4)[sub]; - idx0 = shuffle<4>(sPtr,sub, a, 0); + idx0 = shuffle<4>(sPtr, sub, a, 0); if(ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { if(partidx != 0) @@ -585,33 +591,33 @@ __global__ void cryptonight_core_gpu_phase2_quad( } d[1] = (d_ctx_b + thread * 4)[sub]; - #pragma unroll 2 - for ( i = start; i < end; ++i ) +#pragma unroll 2 + for(i = start; i < end; ++i) { - #pragma unroll 2 - for ( int x = 0; x < 2; ++x ) +#pragma unroll 2 + for(int x = 0; x < 2; ++x) { - j = ( ( idx0 & MASK ) >> 2 ) + sub; + j = ((idx0 & MASK) >> 2) + sub; if(ALGO == cryptonight_bittube2) { uint32_t k[4]; - k[0] = ~loadGlobal32( long_state + j ); - k[1] = shuffle<4>(sPtr,sub, k[0], sub + 1); - k[2] = shuffle<4>(sPtr,sub, k[0], sub + 2); - k[3] = shuffle<4>(sPtr,sub, k[0], sub + 3); + k[0] = ~loadGlobal32(long_state + j); + k[1] = shuffle<4>(sPtr, sub, k[0], sub + 1); + k[2] = shuffle<4>(sPtr, sub, k[0], sub + 2); + k[3] = shuffle<4>(sPtr, sub, k[0], sub + 3); - #pragma unroll 4 +#pragma unroll 4 for(int i = 0; i < 4; ++i) { // only calculate the key if all data are up to date if(i == sub) { d[x] = a ^ - t_fn0( k[0] & 0xff ) ^ - t_fn1( (k[1] >> 8) & 0xff ) ^ - t_fn2( (k[2] >> 16) & 0xff ) ^ - t_fn3( (k[3] >> 24 ) ); + t_fn0(k[0] & 0xff) ^ + t_fn1((k[1] >> 8) & 0xff) ^ + t_fn2((k[2] >> 16) & 0xff) ^ + t_fn3((k[3] >> 24)); } // the last shuffle is not needed if(i != 3) @@ -619,13 +625,13 @@ __global__ void cryptonight_core_gpu_phase2_quad( /* avoid negative number for modulo * load valid key (k) depending on the round */ - k[(4 - sub + i)%4] = shuffle<4>(sPtr,sub, k[0] ^ d[x], i); + k[(4 - sub + i) % 4] = shuffle<4>(sPtr, sub, k[0] ^ d[x], i); } } } else { - uint32_t x_0 = loadGlobal32( long_state + j ); + uint32_t x_0 = loadGlobal32(long_state + j); if(ALGO == cryptonight_conceal) { @@ -642,18 +648,18 @@ __global__ void cryptonight_core_gpu_phase2_quad( x_0 = (uint32_t)(((int32_t)x_0) ^ ((int32_t)c_old)); } - const uint32_t x_1 = shuffle<4>(sPtr,sub, x_0, sub + 1); - const uint32_t x_2 = shuffle<4>(sPtr,sub, x_0, sub + 2); - const uint32_t x_3 = shuffle<4>(sPtr,sub, x_0, sub + 3); + const uint32_t x_1 = shuffle<4>(sPtr, sub, x_0, sub + 1); + const uint32_t x_2 = shuffle<4>(sPtr, sub, x_0, sub + 2); + const uint32_t x_3 = shuffle<4>(sPtr, sub, x_0, sub + 3); d[x] = a ^ - t_fn0( x_0 & 0xff ) ^ - t_fn1( (x_1 >> 8) & 0xff ) ^ - t_fn2( (x_2 >> 16) & 0xff ) ^ - t_fn3( ( x_3 >> 24 ) ); + t_fn0(x_0 & 0xff) ^ + t_fn1((x_1 >> 8) & 0xff) ^ + t_fn2((x_2 >> 16) & 0xff) ^ + t_fn3((x_3 >> 24)); } //XOR_BLOCKS_DST(c, b, &long_state[j]); - t1[0] = shuffle<4>(sPtr,sub, d[x], 0); + t1[0] = shuffle<4>(sPtr, sub, d[x], 0); const uint32_t z = d[0] ^ d[1]; if(ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) @@ -663,157 +669,157 @@ __global__ void cryptonight_core_gpu_phase2_quad( { const uint32_t index = ((z >> 26) & 12) | ((z >> 23) & 2); const uint32_t fork_7 = z ^ ((table >> index) & 0x30U) << 24; - storeGlobal32( long_state + j, sub == 2 ? fork_7 : z ); + storeGlobal32(long_state + j, sub == 2 ? fork_7 : z); } else if(ALGO == cryptonight_stellite) { const uint32_t index = ((z >> 27) & 12) | ((z >> 23) & 2); const uint32_t fork_7 = z ^ ((table >> index) & 0x30U) << 24; - storeGlobal32( long_state + j, sub == 2 ? fork_7 : z ); + storeGlobal32(long_state + j, sub == 2 ? fork_7 : z); } } else - storeGlobal32( long_state + j, z ); + storeGlobal32(long_state + j, z); //MUL_SUM_XOR_DST(c, a, &long_state[((uint32_t *)c)[0] & MASK]); - j = ( ( *t1 & MASK ) >> 2 ) + sub; + j = ((*t1 & MASK) >> 2) + sub; uint32_t yy[2]; - *( (uint64_t*) yy ) = loadGlobal64( ( (uint64_t *) long_state )+( j >> 1 ) ); + *((uint64_t*)yy) = loadGlobal64(((uint64_t*)long_state) + (j >> 1)); uint32_t zz[2]; - zz[0] = shuffle<4>(sPtr,sub, yy[0], 0); - zz[1] = shuffle<4>(sPtr,sub, yy[1], 0); + zz[0] = shuffle<4>(sPtr, sub, yy[0], 0); + zz[1] = shuffle<4>(sPtr, sub, yy[1], 0); - t1[1] = shuffle<4>(sPtr,sub, d[x], 1); - #pragma unroll - for ( k = 0; k < 2; k++ ) - t2[k] = shuffle<4>(sPtr,sub, a, k + sub2); + t1[1] = shuffle<4>(sPtr, sub, d[x], 1); +#pragma unroll + for(k = 0; k < 2; k++) + t2[k] = shuffle<4>(sPtr, sub, a, k + sub2); - *( (uint64_t *) t2 ) += sub2 ? ( *( (uint64_t *) t1 ) * *( (uint64_t*) zz ) ) : __umul64hi( *( (uint64_t *) t1 ), *( (uint64_t*) zz ) ); + *((uint64_t*)t2) += sub2 ? (*((uint64_t*)t1) * *((uint64_t*)zz)) : __umul64hi(*((uint64_t*)t1), *((uint64_t*)zz)); - res = *( (uint64_t *) t2 ) >> ( sub & 1 ? 32 : 0 ); + res = *((uint64_t*)t2) >> (sub & 1 ? 32 : 0); if(ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2) { const uint32_t tweaked_res = tweak1_2[sub & 1] ^ res; uint32_t long_state_update = sub2 ? tweaked_res : res; - if (ALGO == cryptonight_ipbc || ALGO == cryptonight_bittube2) + if(ALGO == cryptonight_ipbc || ALGO == cryptonight_bittube2) { - uint32_t value = shuffle<4>(sPtr,sub, long_state_update, sub & 1) ^ long_state_update; + uint32_t value = shuffle<4>(sPtr, sub, long_state_update, sub & 1) ^ long_state_update; long_state_update = sub >= 2 ? value : long_state_update; } - storeGlobal32( long_state + j, long_state_update ); + storeGlobal32(long_state + j, long_state_update); } else - storeGlobal32( long_state + j, res ); + storeGlobal32(long_state + j, res); - a = ( sub & 1 ? yy[1] : yy[0] ) ^ res; - idx0 = shuffle<4>(sPtr,sub, a, 0); + a = (sub & 1 ? yy[1] : yy[0]) ^ res; + idx0 = shuffle<4>(sPtr, sub, a, 0); if(ALGO == cryptonight_heavy || ALGO == cryptonight_bittube2) { - int64_t n = loadGlobal64( ( (uint64_t *) long_state ) + (( idx0 & MASK ) >> 3)); - int32_t d = loadGlobal32( (uint32_t*)(( (uint64_t *) long_state ) + (( idx0 & MASK) >> 3) + 1u )); + int64_t n = loadGlobal64(((uint64_t*)long_state) + ((idx0 & MASK) >> 3)); + int32_t d = loadGlobal32((uint32_t*)(((uint64_t*)long_state) + ((idx0 & MASK) >> 3) + 1u)); int64_t q = fast_div_heavy(n, (d | 0x5)); - if(sub&1) - storeGlobal64( ( (uint64_t *) long_state ) + (( idx0 & MASK ) >> 3), n ^ q ); + if(sub & 1) + storeGlobal64(((uint64_t*)long_state) + ((idx0 & MASK) >> 3), n ^ q); idx0 = d ^ q; } else if(ALGO == cryptonight_haven || ALGO == cryptonight_superfast) { - int64_t n = loadGlobal64( ( (uint64_t *) long_state ) + (( idx0 & MASK ) >> 3)); - int32_t d = loadGlobal32( (uint32_t*)(( (uint64_t *) long_state ) + (( idx0 & MASK) >> 3) + 1u )); + int64_t n = loadGlobal64(((uint64_t*)long_state) + ((idx0 & MASK) >> 3)); + int32_t d = loadGlobal32((uint32_t*)(((uint64_t*)long_state) + ((idx0 & MASK) >> 3) + 1u)); int64_t q = fast_div_heavy(n, (d | 0x5)); - if(sub&1) - storeGlobal64( ( (uint64_t *) long_state ) + (( idx0 & MASK ) >> 3), n ^ q ); + if(sub & 1) + storeGlobal64(((uint64_t*)long_state) + ((idx0 & MASK) >> 3), n ^ q); idx0 = (~d) ^ q; } } } - if ( bfactor > 0 ) + if(bfactor > 0) { (d_ctx_a + thread * 4)[sub] = a; (d_ctx_b + thread * 4)[sub] = d[1]; if(ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) - if(sub&1) + if(sub & 1) *(d_ctx_b + threads * 4 + thread) = idx0; if(ALGO == cryptonight_conceal) *(d_ctx_b + threads * 4 + thread * 4 + sub) = float_as_int(conc_var); } } -template +template __global__ void cryptonight_core_gpu_phase3( - const uint32_t ITERATIONS, const size_t MEMORY, - int threads, int bfactor, int partidx, const uint32_t * __restrict__ long_state, uint32_t * __restrict__ d_ctx_state, uint32_t * __restrict__ d_ctx_key2 ) + const uint32_t ITERATIONS, const size_t MEMORY, + int threads, int bfactor, int partidx, const uint32_t* __restrict__ long_state, uint32_t* __restrict__ d_ctx_state, uint32_t* __restrict__ d_ctx_key2) { __shared__ uint32_t sharedMemory[1024]; - cn_aes_gpu_init( sharedMemory ); - __syncthreads( ); + cn_aes_gpu_init(sharedMemory); + __syncthreads(); - int thread = ( blockDim.x * blockIdx.x + threadIdx.x ) >> 3; - int subv = ( threadIdx.x & 7 ); + int thread = (blockDim.x * blockIdx.x + threadIdx.x) >> 3; + int subv = (threadIdx.x & 7); int sub = subv << 2; const int batchsize = MEMORY >> bfactor; const int start = (partidx % (1 << bfactor)) * batchsize; const int end = start + batchsize; - if ( thread >= threads ) + if(thread >= threads) return; uint32_t key[40], text[4]; - MEMCPY8( key, d_ctx_key2 + thread * 40, 20 ); - MEMCPY8( text, d_ctx_state + thread * 50 + sub + 16, 2 ); + MEMCPY8(key, d_ctx_key2 + thread * 40, 20); + MEMCPY8(text, d_ctx_state + thread * 50 + sub + 16, 2); - __syncthreads( ); + __syncthreads(); -#if( __CUDA_ARCH__ < 300 ) +#if(__CUDA_ARCH__ < 300) extern __shared__ uint32_t shuffleMem[]; - volatile uint32_t* sPtr = (volatile uint32_t*)(shuffleMem + (threadIdx.x& 0xFFFFFFF8)); + volatile uint32_t* sPtr = (volatile uint32_t*)(shuffleMem + (threadIdx.x & 0xFFFFFFF8)); #else volatile uint32_t* sPtr = NULL; #endif - for ( int i = start; i < end; i += 32 ) + for(int i = start; i < end; i += 32) { - #pragma unroll - for ( int j = 0; j < 4; ++j ) - text[j] ^= long_state[((IndexType) thread * MEMORY) + ( sub + i + j)]; +#pragma unroll + for(int j = 0; j < 4; ++j) + text[j] ^= long_state[((IndexType)thread * MEMORY) + (sub + i + j)]; - cn_aes_pseudo_round_mut( sharedMemory, text, key ); + cn_aes_pseudo_round_mut(sharedMemory, text, key); if(ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { - #pragma unroll - for ( int j = 0; j < 4; ++j ) - text[j] ^= shuffle<8>(sPtr, subv, text[j], (subv+1)&7); +#pragma unroll + for(int j = 0; j < 4; ++j) + text[j] ^= shuffle<8>(sPtr, subv, text[j], (subv + 1) & 7); } } - MEMCPY8( d_ctx_state + thread * 50 + sub + 16, text, 2 ); + MEMCPY8(d_ctx_state + thread * 50 + sub + 16, text, 2); } -template +template void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo& algo) { uint32_t MASK = algo.Mask(); uint32_t ITERATIONS = algo.Iter(); - size_t MEM = algo.Mem()/4; + size_t MEM = algo.Mem() / 4; - dim3 grid( ctx->device_blocks ); - dim3 block( ctx->device_threads ); - dim3 block2( ctx->device_threads << 1 ); - dim3 block4( ctx->device_threads << 2 ); - dim3 block8( ctx->device_threads << 3 ); + dim3 grid(ctx->device_blocks); + dim3 block(ctx->device_threads); + dim3 block2(ctx->device_threads << 1); + dim3 block4(ctx->device_threads << 2); + dim3 block8(ctx->device_threads << 3); int partcount = 1 << ctx->device_bfactor; @@ -823,27 +829,29 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo * kernel splitting if the user defined a `bfactor >= 5` */ int bfactorOneThree = ctx->device_bfactor - 4; - if( bfactorOneThree < 0 ) + if(bfactorOneThree < 0) bfactorOneThree = 0; int partcountOneThree = 1 << bfactorOneThree; - for ( int i = 0; i < partcountOneThree; i++ ) + for(int i = 0; i < partcountOneThree; i++) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase1<<< grid, block8 >>>( - ITERATIONS, - MEM, - ctx->device_blocks*ctx->device_threads, - bfactorOneThree, i, - ctx->d_long_state, - (ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast ? ctx->d_ctx_state2 : ctx->d_ctx_state), - ctx->d_ctx_key1 )); - - if ( partcount > 1 && ctx->device_bsleep > 0) compat_usleep( ctx->device_bsleep ); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase1<<>>( + ITERATIONS, + MEM, + ctx->device_blocks * ctx->device_threads, + bfactorOneThree, i, + ctx->d_long_state, + (ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast ? ctx->d_ctx_state2 : ctx->d_ctx_state), + ctx->d_ctx_key1)); + + if(partcount > 1 && ctx->device_bsleep > 0) + compat_usleep(ctx->device_bsleep); } - if ( partcount > 1 && ctx->device_bsleep > 0) compat_usleep( ctx->device_bsleep ); + if(partcount > 1 && ctx->device_bsleep > 0) + compat_usleep(ctx->device_bsleep); - for ( int i = 0; i < partcount; i++ ) + for(int i = 0; i < partcount; i++) { if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) { @@ -856,12 +864,11 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo block2, sizeof(uint64_t) * block.x * 8 + // shuffle memory for fermi gpus - block2.x * sizeof(uint32_t) * static_cast< int >( ctx->device_arch[0] < 3 ) - >>>( + block2.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM, MASK, - ctx->device_blocks*ctx->device_threads, + ctx->device_blocks * ctx->device_threads, ctx->device_bfactor, i, ctx->d_long_state, @@ -869,28 +876,24 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo ctx->d_ctx_b, ctx->d_ctx_state, nonce, - ctx->d_input - ) - ); + ctx->d_input)); } else if(ALGO == cryptonight_r_wow || ALGO == cryptonight_r) { - int numThreads = ctx->device_blocks*ctx->device_threads; + int numThreads = ctx->device_blocks * ctx->device_threads; void* args[] = { &ITERATIONS, &MEM, &MASK, &numThreads, &ctx->device_bfactor, &i, - &ctx->d_long_state, &ctx->d_ctx_a, &ctx->d_ctx_b, &ctx->d_ctx_state, &nonce, &ctx->d_input - }; + &ctx->d_long_state, &ctx->d_ctx_a, &ctx->d_ctx_b, &ctx->d_ctx_state, &nonce, &ctx->d_input}; CU_CHECK(ctx->device_id, cuLaunchKernel( - ctx->kernel, - grid.x, grid.y, grid.z, - block2.x, block2.y, block2.z, - sizeof(uint64_t) * block.x * 8 + - // shuffle memory for fermi gpus - block2.x * sizeof(uint32_t) * static_cast< int >( ctx->device_arch[0] < 3 ), - nullptr, - args, 0 - )); + ctx->kernel, + grid.x, grid.y, grid.z, + block2.x, block2.y, block2.z, + sizeof(uint64_t) * block.x * 8 + + // shuffle memory for fermi gpus + block2.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3), + nullptr, + args, 0)); CU_CHECK(ctx->device_id, cuCtxSynchronize()); } else @@ -901,12 +904,11 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo cryptonight_core_gpu_phase2_quad<<< grid, block4, - block4.x * sizeof(uint32_t) * static_cast< int >( ctx->device_arch[0] < 3 ) - >>>( + block4.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM, MASK, - ctx->device_blocks*ctx->device_threads, + ctx->device_blocks * ctx->device_threads, ctx->device_bfactor, i, ctx->d_long_state, @@ -914,57 +916,54 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo ctx->d_ctx_b, ctx->d_ctx_state, nonce, - ctx->d_input - ) - ); + ctx->d_input)); } - if ( partcount > 1 && ctx->device_bsleep > 0) compat_usleep( ctx->device_bsleep ); + if(partcount > 1 && ctx->device_bsleep > 0) + compat_usleep(ctx->device_bsleep); } int roundsPhase3 = partcountOneThree; - if(ALGO == cryptonight_heavy || ALGO == cryptonight_haven|| ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast ) + if(ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { // cryptonight_heavy used two full rounds over the scratchpad memory roundsPhase3 *= 2; } - for ( int i = 0; i < roundsPhase3; i++ ) + for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - grid, - block8, - block8.x * sizeof(uint32_t) * static_cast< int >( ctx->device_arch[0] < 3 ) - >>>( - ITERATIONS, - MEM, - ctx->device_blocks*ctx->device_threads, - bfactorOneThree, i, - ctx->d_long_state, - ctx->d_ctx_state, ctx->d_ctx_key2 )); + grid, + block8, + block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + ITERATIONS, + MEM, + ctx->device_blocks * ctx->device_threads, + bfactorOneThree, i, + ctx->d_long_state, + ctx->d_ctx_state, ctx->d_ctx_key2)); } } -template +template void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo& algo) { const uint32_t MASK = algo.Mask(); const uint32_t ITERATIONS = algo.Iter(); const size_t MEM = algo.Mem(); - dim3 grid( ctx->device_blocks ); - dim3 block( ctx->device_threads ); - dim3 block2( ctx->device_threads << 1 ); - dim3 block4( ctx->device_threads << 2 ); - dim3 block8( ctx->device_threads << 3 ); + dim3 grid(ctx->device_blocks); + dim3 block(ctx->device_threads); + dim3 block2(ctx->device_threads << 1); + dim3 block4(ctx->device_threads << 2); + dim3 block8(ctx->device_threads << 3); size_t intensity = ctx->device_blocks * ctx->device_threads; CUDA_CHECK_KERNEL( ctx->device_id, - xmrstak::nvidia::cn_explode_gpu<<>>(MEM, (int*)ctx->d_ctx_state, (int*)ctx->d_long_state) - ); + xmrstak::nvidia::cn_explode_gpu<<>>(MEM, (int*)ctx->d_ctx_state, (int*)ctx->d_long_state)); int partcount = 1 << ctx->device_bfactor; for(int i = 0; i < partcount; i++) @@ -972,20 +971,16 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ CUDA_CHECK_KERNEL( ctx->device_id, // 36 x 16byte x numThreads - xmrstak::nvidia::cryptonight_core_gpu_phase2_gpu - <<device_blocks, ctx->device_threads * 16, 32 * 16 * ctx->device_threads>>> - ( - ITERATIONS, - MEM, - MASK, - (int*)ctx->d_ctx_state, - (int*)ctx->d_long_state, - ctx->device_bfactor, - i, - ctx->d_ctx_a, - ctx->d_ctx_b - ) - ); + xmrstak::nvidia::cryptonight_core_gpu_phase2_gpu<<device_blocks, ctx->device_threads * 16, 32 * 16 * ctx->device_threads>>>( + ITERATIONS, + MEM, + MASK, + (int*)ctx->d_ctx_state, + (int*)ctx->d_long_state, + ctx->device_bfactor, + i, + ctx->d_ctx_a, + ctx->d_ctx_b)); } /* bfactor for phase 3 @@ -994,32 +989,31 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ * kernel splitting if the user defined a `bfactor >= 5` */ int bfactorOneThree = ctx->device_bfactor - 4; - if( bfactorOneThree < 0 ) + if(bfactorOneThree < 0) bfactorOneThree = 0; int partcountOneThree = 1 << bfactorOneThree; int roundsPhase3 = partcountOneThree; if(ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || - ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast ) + ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { // cryptonight_heavy used two full rounds over the scratchpad memory roundsPhase3 *= 2; } - for ( int i = 0; i < roundsPhase3; i++ ) + for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - grid, - block8, - block8.x * sizeof(uint32_t) * static_cast< int >( ctx->device_arch[0] < 3 ) - >>>( - ITERATIONS, - MEM/4, - ctx->device_blocks*ctx->device_threads, - bfactorOneThree, i, - ctx->d_long_state, - ctx->d_ctx_state, ctx->d_ctx_key2 )); + grid, + block8, + block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + ITERATIONS, + MEM / 4, + ctx->device_blocks * ctx->device_threads, + bfactorOneThree, i, + ctx->d_long_state, + ctx->d_ctx_state, ctx->d_ctx_key2)); } } @@ -1030,7 +1024,7 @@ void cryptonight_core_cpu_hash(nvid_ctx* ctx, const xmrstak_algo& miner_algo, ui { if(ctx->kernel_height != chain_height || ctx->cached_algo != miner_algo) { - if(ctx->module) + if(ctx->module) cuModuleUnload(ctx->module); uint32_t PRECOMPILATION_DEPTH = 4; @@ -1045,15 +1039,16 @@ void cryptonight_core_cpu_hash(nvid_ctx* ctx, const xmrstak_algo& miner_algo, ui ctx->kernel_height = chain_height; ctx->cached_algo = miner_algo; - for (int i = 1; i <= PRECOMPILATION_DEPTH; ++i) + for(int i = 1; i <= PRECOMPILATION_DEPTH; ++i) xmrstak::nvidia::CryptonightR_get_program(ptx, lowered_name, miner_algo, chain_height + i, PRECOMPILATION_DEPTH, ctx->device_arch[0], ctx->device_arch[1], true); } } - typedef void (*cuda_hash_fn)(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo& algo); + typedef void (*cuda_hash_fn)(nvid_ctx * ctx, uint32_t nonce, const xmrstak_algo& algo); - if(miner_algo == invalid_algo) return; + if(miner_algo == invalid_algo) + return; static const cuda_hash_fn func_table[] = { cryptonight_core_gpu_hash, @@ -1105,13 +1100,11 @@ void cryptonight_core_cpu_hash(nvid_ctx* ctx, const xmrstak_algo& miner_algo, ui cryptonight_core_gpu_hash, cryptonight_core_gpu_hash, - cryptonight_core_gpu_hash - }; + cryptonight_core_gpu_hash}; std::bitset<1> digit; digit.set(0, ctx->memMode == 1); - cuda_hash_fn selected_function = func_table[ ((miner_algo - 1u) << 1) | digit.to_ulong() ]; + cuda_hash_fn selected_function = func_table[((miner_algo - 1u) << 1) | digit.to_ulong()]; selected_function(ctx, startNonce, miner_algo); - } diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp index fee7e13d1..a66804ecf 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp @@ -1,11 +1,11 @@ #pragma once +#include #include #include -#include -#include "cuda_keccak.hpp" #include "cuda_extra.hpp" +#include "cuda_keccak.hpp" namespace xmrstak { @@ -15,7 +15,7 @@ namespace nvidia struct __m128i : public int4 { - __forceinline__ __device__ __m128i(){} + __forceinline__ __device__ __m128i() {} __forceinline__ __device__ __m128i( const uint32_t x0, const uint32_t x1, @@ -27,7 +27,7 @@ struct __m128i : public int4 w = x3; } - __forceinline__ __device__ __m128i( const int x0) + __forceinline__ __device__ __m128i(const int x0) { x = x0; y = x0; @@ -41,8 +41,7 @@ struct __m128i : public int4 x | other.x, y | other.y, z | other.z, - w | other.w - ); + w | other.w); } __forceinline__ __device__ __m128i operator^(const __m128i& other) @@ -51,15 +50,14 @@ struct __m128i : public int4 x ^ other.x, y ^ other.y, z ^ other.z, - w ^ other.w - ); + w ^ other.w); } }; struct __m128 : public float4 { - __forceinline__ __device__ __m128(){} + __forceinline__ __device__ __m128() {} __forceinline__ __device__ __m128( const float x0, const float x1, @@ -71,7 +69,7 @@ struct __m128 : public float4 float4::w = x3; } - __forceinline__ __device__ __m128( const float x0) + __forceinline__ __device__ __m128(const float x0) { float4::x = x0; float4::y = x0; @@ -79,7 +77,7 @@ struct __m128 : public float4 float4::w = x0; } - __forceinline__ __device__ __m128( const __m128i& x0) + __forceinline__ __device__ __m128(const __m128i& x0) { float4::x = int2float(x0.x); float4::y = int2float(x0.y); @@ -87,14 +85,13 @@ struct __m128 : public float4 float4::w = int2float(x0.w); } - __forceinline__ __device__ __m128i get_int( ) + __forceinline__ __device__ __m128i get_int() { return __m128i( (int)x, (int)y, (int)z, - (int)w - ); + (int)w); } __forceinline__ __device__ __m128 operator+(const __m128& other) @@ -103,8 +100,7 @@ struct __m128 : public float4 x + other.x, y + other.y, z + other.z, - w + other.w - ); + w + other.w); } __forceinline__ __device__ __m128 operator-(const __m128& other) @@ -113,8 +109,7 @@ struct __m128 : public float4 x - other.x, y - other.y, z - other.z, - w - other.w - ); + w - other.w); } __forceinline__ __device__ __m128 operator*(const __m128& other) @@ -123,8 +118,7 @@ struct __m128 : public float4 x * other.x, y * other.y, z * other.z, - w * other.w - ); + w * other.w); } __forceinline__ __device__ __m128 operator/(const __m128& other) @@ -133,67 +127,64 @@ struct __m128 : public float4 x / other.x, y / other.y, z / other.z, - w / other.w - ); + w / other.w); } __forceinline__ __device__ __m128& trunc() { - x=::truncf(x); - y=::truncf(y); - z=::truncf(z); - w=::truncf(w); + x = ::truncf(x); + y = ::truncf(y); + z = ::truncf(z); + w = ::truncf(w); return *this; } __forceinline__ __device__ __m128& abs() { - x=::fabsf(x); - y=::fabsf(y); - z=::fabsf(z); - w=::fabsf(w); + x = ::fabsf(x); + y = ::fabsf(y); + z = ::fabsf(z); + w = ::fabsf(w); return *this; } __forceinline__ __device__ __m128& floor() { - x=::floorf(x); - y=::floorf(y); - z=::floorf(z); - w=::floorf(w); + x = ::floorf(x); + y = ::floorf(y); + z = ::floorf(z); + w = ::floorf(w); return *this; } }; - -template +template __device__ void print(const char* name, T value) { printf("g %s: ", name); for(int i = 0; i < 4; ++i) { - printf("%08X ",((uint32_t*)&value)[i]); + printf("%08X ", ((uint32_t*)&value)[i]); } printf("\n"); } -template<> +template <> __device__ void print<__m128>(const char* name, __m128 value) { printf("g %s: ", name); for(int i = 0; i < 4; ++i) { - printf("%f ",((float*)&value)[i]); + printf("%f ", ((float*)&value)[i]); } printf("\n"); } #define SHOW(name) print(#name, name) - __forceinline__ __device__ __m128 _mm_add_ps(__m128 a, __m128 b) { return a + b; @@ -220,8 +211,7 @@ __forceinline__ __device__ __m128 _mm_and_ps(__m128 a, int b) int_as_float(float_as_int(a.x) & b), int_as_float(float_as_int(a.y) & b), int_as_float(float_as_int(a.z) & b), - int_as_float(float_as_int(a.w) & b) - ); + int_as_float(float_as_int(a.w) & b)); } __forceinline__ __device__ __m128 _mm_or_ps(__m128 a, int b) @@ -230,8 +220,7 @@ __forceinline__ __device__ __m128 _mm_or_ps(__m128 a, int b) int_as_float(float_as_int(a.x) | b), int_as_float(float_as_int(a.y) | b), int_as_float(float_as_int(a.z) | b), - int_as_float(float_as_int(a.w) | b) - ); + int_as_float(float_as_int(a.w) | b)); } __forceinline__ __device__ __m128 _mm_xor_ps(__m128 a, int b) @@ -240,20 +229,18 @@ __forceinline__ __device__ __m128 _mm_xor_ps(__m128 a, int b) int_as_float(float_as_int(a.x) ^ b), int_as_float(float_as_int(a.y) ^ b), int_as_float(float_as_int(a.z) ^ b), - int_as_float(float_as_int(a.w) ^ b) - ); + int_as_float(float_as_int(a.w) ^ b)); } __forceinline__ __device__ __m128 _mm_fmod_ps(__m128 v, float dc) { __m128 d(dc); __m128 c = _mm_div_ps(v, d); - c.trunc();//_mm_round_ps(c, _MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC); + c.trunc(); //_mm_round_ps(c, _MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC); // c = _mm_cvtepi32_ps(_mm_cvttps_epi32(c)); - sse2 c = _mm_mul_ps(c, d); return _mm_sub_ps(v, c); - //return a.fmodf(b); } @@ -262,23 +249,20 @@ __forceinline__ __device__ __m128i _mm_xor_si128(__m128i a, __m128i b) return a ^ b; } - __forceinline__ __device__ __m128i _mm_alignr_epi8(__m128i a, const uint32_t rot) { const uint32_t right = 8 * rot; const uint32_t left = (32 - 8 * rot); return __m128i( - ((uint32_t)a.x >> right) | ( a.y << left ), - ((uint32_t)a.y >> right) | ( a.z << left ), - ((uint32_t)a.z >> right) | ( a.w << left ), - ((uint32_t)a.w >> right) | ( a.x << left ) - ); + ((uint32_t)a.x >> right) | (a.y << left), + ((uint32_t)a.y >> right) | (a.z << left), + ((uint32_t)a.z >> right) | (a.w << left), + ((uint32_t)a.w >> right) | (a.x << left)); } -__device__ __m128i* scratchpad_ptr(uint32_t idx, uint32_t n, int *lpad, const uint32_t MASK) { return (__m128i*)((uint8_t*)lpad + (idx & MASK) + n * 16); } - +__device__ __m128i* scratchpad_ptr(uint32_t idx, uint32_t n, int* lpad, const uint32_t MASK) { return (__m128i*)((uint8_t*)lpad + (idx & MASK) + n * 16); } -__forceinline__ __device__ __m128 fma_break(__m128 x) +__forceinline__ __device__ __m128 fma_break(__m128 x) { // Break the dependency chain by setitng the exp to ?????01 x = _mm_and_ps(x, 0xFEFFFFFF); @@ -290,13 +274,13 @@ __forceinline__ __device__ void sub_round(__m128 n0, __m128 n1, __m128 n2, __m12 { n1 = _mm_add_ps(n1, c); __m128 nn = _mm_mul_ps(n0, c); - nn = _mm_mul_ps(n1, _mm_mul_ps(nn,nn)); + nn = _mm_mul_ps(n1, _mm_mul_ps(nn, nn)); nn = fma_break(nn); n = _mm_add_ps(n, nn); n3 = _mm_sub_ps(n3, c); __m128 dd = _mm_mul_ps(n2, c); - dd = _mm_mul_ps(n3, _mm_mul_ps(dd,dd)); + dd = _mm_mul_ps(n3, _mm_mul_ps(dd, dd)); dd = fma_break(dd); d = _mm_add_ps(d, dd); @@ -326,7 +310,7 @@ __forceinline__ __device__ void round_compute(__m128 n0, __m128 n1, __m128 n2, _ // Make sure abs(d) > 2.0 - this prevents division by zero and accidental overflows by division by < 1.0 d = _mm_and_ps(d, 0xFF7FFFFF); d = _mm_or_ps(d, 0x40000000); - r =_mm_add_ps(r, _mm_div_ps(n,d)); + r = _mm_add_ps(r, _mm_div_ps(n, d)); } // 74*8 = 595 @@ -335,15 +319,14 @@ __forceinline__ __device__ __m128i single_comupte(__m128 n0, __m128 n1, __m128 n __m128 c(cnt); // 35 maths calls follow (140 FLOPS) __m128 r = __m128(0.0f); - for(int i=0; i< 4; ++i) + for(int i = 0; i < 4; ++i) round_compute(n0, n1, n2, n3, rnd_c, c, r); // do a quick fmod by setting exp to 2 r = _mm_and_ps(r, 0x807FFFFF); r = _mm_or_ps(r, 0x40000000); - sum = r; // 34 + sum = r; // 34 r = _mm_mul_ps(r, __m128(536870880.0f)); // 35 return r.get_int(); - } __forceinline__ __device__ void single_comupte_wrap(const uint32_t rot, const __m128i& v0, const __m128i& v1, const __m128i& v2, const __m128i& v3, float cnt, __m128 rnd_c, __m128& sum, __m128i& out) @@ -376,8 +359,7 @@ __constant__ uint32_t look[16][4] = { {3, 1, 2, 0}, {3, 2, 0, 1}, {3, 0, 1, 2}, - {3, 0, 2, 1} -}; + {3, 0, 2, 1}}; __constant__ float ccnt[16] = { 1.34375f, @@ -398,16 +380,14 @@ __constant__ float ccnt[16] = { 1.3203125f, 1.3515625f, 1.3359375f, - 1.4609375f -}; - + 1.4609375f}; __forceinline__ __device__ void sync() { -#if (__CUDACC_VER_MAJOR__ >= 9) +#if(__CUDACC_VER_MAJOR__ >= 9) __syncwarp(); #else - __syncthreads( ); + __syncthreads(); #endif } @@ -418,11 +398,11 @@ struct SharedMemChunk }; __global__ void cryptonight_core_gpu_phase2_gpu( - const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, - int32_t *spad, int *lpad_in, int bfactor, int partidx, uint32_t * roundVs, uint32_t * roundS) + const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, + int32_t* spad, int* lpad_in, int bfactor, int partidx, uint32_t* roundVs, uint32_t* roundS) { - const int batchsize = (ITERATIONS * 2) >> ( 1 + bfactor ); + const int batchsize = (ITERATIONS * 2) >> (1 + bfactor); extern __shared__ SharedMemChunk smemExtern_in[]; @@ -435,7 +415,7 @@ __global__ void cryptonight_core_gpu_phase2_gpu( uint32_t tid = threadIdx.x % 16; - const uint32_t idxHash = blockIdx.x * numHashPerBlock + threadIdx.x/16; + const uint32_t idxHash = blockIdx.x * numHashPerBlock + threadIdx.x / 16; uint32_t s = 0; __m128 vs(0); @@ -470,8 +450,7 @@ __global__ void cryptonight_core_gpu_phase2_gpu( *(smem->out + look[tid][2]), *(smem->out + look[tid][3]), ccnt[tid], rc, smem->va[tid], - smem->out[tid] - ); + smem->out[tid]); sync(); @@ -483,7 +462,7 @@ __global__ void cryptonight_core_gpu_phase2_gpu( ((int*)smem->out)[tid] = outXor; float va_tmp1 = ((float*)smem->va)[block] + ((float*)smem->va)[block + 4]; - float va_tmp2 = ((float*)smem->va)[block+ 8] + ((float*)smem->va)[block + 12]; + float va_tmp2 = ((float*)smem->va)[block + 8] + ((float*)smem->va)[block + 12]; ((float*)smem->va)[tid] = va_tmp1 + va_tmp2; sync(); @@ -505,10 +484,10 @@ __global__ void cryptonight_core_gpu_phase2_gpu( vs = _mm_div_ps(vs, __m128(64.0f)); s = out2.x ^ out2.y ^ out2.z ^ out2.w; } - if(partidx != ((1< -#include #include +#include #include /** execute and check a CUDA api command @@ -12,27 +12,30 @@ * @param msg message string which should be added to the error message * @param ... CUDA api command */ -#define CUDA_CHECK_MSG(id, msg, ...) { \ - cudaError_t error = __VA_ARGS__; \ - if(error!=cudaSuccess){ \ - std::cerr << "[CUDA] Error gpu " << id << ": <" << __FILE__ << ">:" << __LINE__; \ - std::cerr << msg << std::endl; \ - throw std::runtime_error(std::string("[CUDA] Error: ") + std::string(cudaGetErrorString(error))); \ - } \ -} \ -( (void) 0 ) - -#define CU_CHECK(id, ...) { \ - CUresult result = __VA_ARGS__; \ - if(result != CUDA_SUCCESS){ \ - const char* s; \ - cuGetErrorString(result, &s); \ - std::cerr << "[CUDA] Error gpu " << id << ": <" << __FUNCTION__ << ">:" << __LINE__ << " \"" << (s ? s : "unknown error") << "\"" << std::endl; \ - throw std::runtime_error(std::string("[CUDA] Error: ") + std::string(s ? s : "unknown error")); \ - } \ -} \ -( (void) 0 ) +#define CUDA_CHECK_MSG(id, msg, ...) \ + { \ + cudaError_t error = __VA_ARGS__; \ + if(error != cudaSuccess) \ + { \ + std::cerr << "[CUDA] Error gpu " << id << ": <" << __FILE__ << ">:" << __LINE__; \ + std::cerr << msg << std::endl; \ + throw std::runtime_error(std::string("[CUDA] Error: ") + std::string(cudaGetErrorString(error))); \ + } \ + } \ + ((void)0) +#define CU_CHECK(id, ...) \ + { \ + CUresult result = __VA_ARGS__; \ + if(result != CUDA_SUCCESS) \ + { \ + const char* s; \ + cuGetErrorString(result, &s); \ + std::cerr << "[CUDA] Error gpu " << id << ": <" << __FUNCTION__ << ">:" << __LINE__ << " \"" << (s ? s : "unknown error") << "\"" << std::endl; \ + throw std::runtime_error(std::string("[CUDA] Error: ") + std::string(s ? s : "unknown error")); \ + } \ + } \ + ((void)0) /** execute and check a CUDA api command * @@ -47,7 +50,7 @@ * @param ... CUDA kernel call */ #define CUDA_CHECK_KERNEL(id, ...) \ - __VA_ARGS__; \ + __VA_ARGS__; \ CUDA_CHECK(id, cudaGetLastError()) /** execute and check a CUDA kernel @@ -57,5 +60,5 @@ * @param ... CUDA kernel call */ #define CUDA_CHECK_MSG_KERNEL(id, msg, ...) \ - __VA_ARGS__; \ + __VA_ARGS__; \ CUDA_CHECK_MSG(id, msg, cudaGetLastError()) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu index b6e41c619..aa7c17057 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu @@ -1,83 +1,80 @@ -#include -#include -#include -#include +#include "xmrstak/jconf.hpp" #include -#include #include #include -#include -#include "xmrstak/jconf.hpp" - +#include +#include +#include +#include +#include typedef unsigned char BitSequence; typedef unsigned long long DataLength; -#include "xmrstak/backend/cryptonight.hpp" #include "cryptonight.hpp" -#include "cuda_extra.hpp" -#include "cuda_keccak.hpp" +#include "cuda_aes.hpp" #include "cuda_blake.hpp" +#include "cuda_device.hpp" +#include "cuda_extra.hpp" #include "cuda_groestl.hpp" #include "cuda_jh.hpp" +#include "cuda_keccak.hpp" #include "cuda_skein.hpp" -#include "cuda_device.hpp" -#include "cuda_aes.hpp" +#include "xmrstak/backend/cryptonight.hpp" -__constant__ uint8_t d_sub_byte[16][16] ={ - {0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 }, - {0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 }, - {0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 }, - {0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 }, - {0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 }, - {0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf }, - {0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 }, - {0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 }, - {0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 }, - {0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb }, - {0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 }, - {0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 }, - {0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a }, - {0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e }, - {0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf }, - {0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 } -}; - -__device__ __forceinline__ void cryptonight_aes_set_key( uint32_t * __restrict__ key, const uint32_t * __restrict__ data ) +__constant__ uint8_t d_sub_byte[16][16] = { + {0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76}, + {0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0}, + {0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15}, + {0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75}, + {0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84}, + {0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf}, + {0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8}, + {0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2}, + {0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73}, + {0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb}, + {0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79}, + {0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08}, + {0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a}, + {0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e}, + {0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf}, + {0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16}}; + +__device__ __forceinline__ void cryptonight_aes_set_key(uint32_t* __restrict__ key, const uint32_t* __restrict__ data) { int i, j; uint8_t temp[4]; - const uint32_t aes_gf[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 }; + const uint32_t aes_gf[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36}; - MEMSET4( key, 0, 40 ); - MEMCPY4( key, data, 8 ); + MEMSET4(key, 0, 40); + MEMCPY4(key, data, 8); #pragma unroll - for ( i = 8; i < 40; i++ ) + for(i = 8; i < 40; i++) { - *(uint32_t *) temp = key[i - 1]; - if ( i % 8 == 0 ) + *(uint32_t*)temp = key[i - 1]; + if(i % 8 == 0) { - *(uint32_t *) temp = ROTR32( *(uint32_t *) temp, 8 ); - for ( j = 0; j < 4; j++ ) - temp[j] = d_sub_byte[( temp[j] >> 4 ) & 0x0f][temp[j] & 0x0f]; - *(uint32_t *) temp ^= aes_gf[i / 8 - 1]; + *(uint32_t*)temp = ROTR32(*(uint32_t*)temp, 8); + for(j = 0; j < 4; j++) + temp[j] = d_sub_byte[(temp[j] >> 4) & 0x0f][temp[j] & 0x0f]; + *(uint32_t*)temp ^= aes_gf[i / 8 - 1]; } else { - if ( i % 8 == 4 ) + if(i % 8 == 4) { #pragma unroll - for ( j = 0; j < 4; j++ ) - temp[j] = d_sub_byte[( temp[j] >> 4 ) & 0x0f][temp[j] & 0x0f]; + for(j = 0; j < 4; j++) + temp[j] = d_sub_byte[(temp[j] >> 4) & 0x0f][temp[j] & 0x0f]; } } - key[i] = key[( i - 8 )] ^ *(uint32_t *) temp; + key[i] = key[(i - 8)] ^ *(uint32_t*)temp; } } -__device__ __forceinline__ void mix_and_propagate( uint32_t* state ) +__device__ __forceinline__ void mix_and_propagate(uint32_t* state) { uint32_t tmp0[4]; for(size_t x = 0; x < 4; ++x) @@ -93,18 +90,18 @@ __device__ __forceinline__ void mix_and_propagate( uint32_t* state ) (state + 4 * 7)[x] = (state + 4 * 7)[x] ^ tmp0[x]; } -template -__global__ void cryptonight_extra_gpu_prepare( int threads, uint32_t * __restrict__ d_input, uint32_t len, uint32_t startNonce, uint32_t * __restrict__ d_ctx_state, uint32_t * __restrict__ d_ctx_state2, uint32_t * __restrict__ d_ctx_a, uint32_t * __restrict__ d_ctx_b, uint32_t * __restrict__ d_ctx_key1, uint32_t * __restrict__ d_ctx_key2 ) +template +__global__ void cryptonight_extra_gpu_prepare(int threads, uint32_t* __restrict__ d_input, uint32_t len, uint32_t startNonce, uint32_t* __restrict__ d_ctx_state, uint32_t* __restrict__ d_ctx_state2, uint32_t* __restrict__ d_ctx_a, uint32_t* __restrict__ d_ctx_b, uint32_t* __restrict__ d_ctx_key1, uint32_t* __restrict__ d_ctx_key2) { - int thread = ( blockDim.x * blockIdx.x + threadIdx.x ); + int thread = (blockDim.x * blockIdx.x + threadIdx.x); __shared__ uint32_t sharedMemory[1024]; if(ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { - cn_aes_gpu_init( sharedMemory ); - __syncthreads( ); + cn_aes_gpu_init(sharedMemory); + __syncthreads(); } - if ( thread >= threads ) + if(thread >= threads) return; uint32_t ctx_state[50]; @@ -114,29 +111,29 @@ __global__ void cryptonight_extra_gpu_prepare( int threads, uint32_t * __restric uint32_t ctx_key2[40]; uint32_t input[32]; - memcpy( input, d_input, len ); + memcpy(input, d_input, len); //*((uint32_t *)(((char *)input) + 39)) = startNonce + thread; uint32_t nonce = startNonce + thread; - for ( int i = 0; i < sizeof (uint32_t ); ++i ) - ( ( (char *) input ) + 39 )[i] = ( (char*) ( &nonce ) )[i]; //take care of pointer alignment + for(int i = 0; i < sizeof(uint32_t); ++i) + (((char*)input) + 39)[i] = ((char*)(&nonce))[i]; //take care of pointer alignment - cn_keccak( (uint8_t *) input, len, (uint8_t *) ctx_state ); - cryptonight_aes_set_key( ctx_key1, ctx_state ); - cryptonight_aes_set_key( ctx_key2, ctx_state + 8 ); + cn_keccak((uint8_t*)input, len, (uint8_t*)ctx_state); + cryptonight_aes_set_key(ctx_key1, ctx_state); + cryptonight_aes_set_key(ctx_key2, ctx_state + 8); - XOR_BLOCKS_DST( ctx_state, ctx_state + 8, ctx_a ); - XOR_BLOCKS_DST( ctx_state + 4, ctx_state + 12, ctx_b ); - memcpy( d_ctx_a + thread * 4, ctx_a, 4 * 4 ); + XOR_BLOCKS_DST(ctx_state, ctx_state + 8, ctx_a); + XOR_BLOCKS_DST(ctx_state + 4, ctx_state + 12, ctx_b); + memcpy(d_ctx_a + thread * 4, ctx_a, 4 * 4); if(ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz) { - memcpy( d_ctx_b + thread * 16, ctx_b, 4 * 4 ); + memcpy(d_ctx_b + thread * 16, ctx_b, 4 * 4); // bx1 - XOR_BLOCKS_DST( ctx_state + 16, ctx_state + 20, ctx_b ); - memcpy( d_ctx_b + thread * 16 + 4, ctx_b, 4 * 4 ); + XOR_BLOCKS_DST(ctx_state + 16, ctx_state + 20, ctx_b); + memcpy(d_ctx_b + thread * 16 + 4, ctx_b, 4 * 4); // division_result - memcpy( d_ctx_b + thread * 16 + 2 * 4, ctx_state + 24, 4 * 2 ); + memcpy(d_ctx_b + thread * 16 + 2 * 4, ctx_state + 24, 4 * 2); // sqrt_result - memcpy( d_ctx_b + thread * 16 + 2 * 4 + 2, ctx_state + 26, 4 * 2 ); + memcpy(d_ctx_b + thread * 16 + 2 * 4 + 2, ctx_state + 26, 4 * 2); } else if(ALGO == cryptonight_r_wow || ALGO == cryptonight_r) { @@ -148,31 +145,31 @@ __global__ void cryptonight_extra_gpu_prepare( int threads, uint32_t * __restric memcpy(d_ctx_b + thread * 16 + 2 * 4, ctx_state + 24, 4 * 8); } else - memcpy( d_ctx_b + thread * 4, ctx_b, 4 * 4 ); + memcpy(d_ctx_b + thread * 4, ctx_b, 4 * 4); - memcpy( d_ctx_key1 + thread * 40, ctx_key1, 40 * 4 ); - memcpy( d_ctx_key2 + thread * 40, ctx_key2, 40 * 4 ); - memcpy( d_ctx_state + thread * 50, ctx_state, 50 * 4 ); + memcpy(d_ctx_key1 + thread * 40, ctx_key1, 40 * 4); + memcpy(d_ctx_key2 + thread * 40, ctx_key2, 40 * 4); + memcpy(d_ctx_state + thread * 50, ctx_state, 50 * 4); if(ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { - for(int i=0; i < 16; i++) + for(int i = 0; i < 16; i++) { for(size_t t = 4; t < 12; ++t) { - cn_aes_pseudo_round_mut( sharedMemory, ctx_state + 4u * t, ctx_key1 ); + cn_aes_pseudo_round_mut(sharedMemory, ctx_state + 4u * t, ctx_key1); } // scipt first 4 * 128bit blocks = 4 * 4 uint32_t values mix_and_propagate(ctx_state + 4 * 4); } // double buffer to move manipulated state into phase1 - memcpy( d_ctx_state2 + thread * 50, ctx_state, 50 * 4 ); + memcpy(d_ctx_state2 + thread * 50, ctx_state, 50 * 4); } } -template -__global__ void cryptonight_extra_gpu_final( int threads, uint64_t target, uint32_t* __restrict__ d_res_count, uint32_t * __restrict__ d_res_nonce, uint32_t * __restrict__ d_ctx_state,uint32_t * __restrict__ d_ctx_key2 ) +template +__global__ void cryptonight_extra_gpu_final(int threads, uint64_t target, uint32_t* __restrict__ d_res_count, uint32_t* __restrict__ d_res_nonce, uint32_t* __restrict__ d_ctx_state, uint32_t* __restrict__ d_ctx_key2) { const int thread = blockDim.x * blockIdx.x + threadIdx.x; @@ -181,19 +178,19 @@ __global__ void cryptonight_extra_gpu_final( int threads, uint64_t target, uint3 if(ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { - cn_aes_gpu_init( sharedMemory ); - __syncthreads( ); + cn_aes_gpu_init(sharedMemory); + __syncthreads(); } - if ( thread >= threads ) + if(thread >= threads) return; int i; - uint32_t * __restrict__ ctx_state = d_ctx_state + thread * 50; + uint32_t* __restrict__ ctx_state = d_ctx_state + thread * 50; uint64_t hash[4]; uint32_t state[50]; - #pragma unroll - for ( i = 0; i < 50; i++ ) +#pragma unroll + for(i = 0; i < 50; i++) state[i] = ctx_state[i]; if(ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || @@ -202,25 +199,25 @@ __global__ void cryptonight_extra_gpu_final( int threads, uint64_t target, uint3 uint32_t key[40]; // load keys - MEMCPY8( key, d_ctx_key2 + thread * 40, 20 ); + MEMCPY8(key, d_ctx_key2 + thread * 40, 20); - for(int i=0; i < 16; i++) + for(int i = 0; i < 16; i++) { for(size_t t = 4; t < 12; ++t) { - cn_aes_pseudo_round_mut( sharedMemory, state + 4u * t, key ); + cn_aes_pseudo_round_mut(sharedMemory, state + 4u * t, key); } // scipt first 4 * 128bit blocks = 4 * 4 uint32_t values mix_and_propagate(state + 4 * 4); } } - cn_keccakf2( (uint64_t *) state ); + cn_keccakf2((uint64_t*)state); if(ALGO == cryptonight_gpu) { - if ( ((uint64_t*)state)[3] < target ) + if(((uint64_t*)state)[3] < target) { - uint32_t idx = atomicInc( d_res_count, 0xFFFFFFFF ); + uint32_t idx = atomicInc(d_res_count, 0xFFFFFFFF); if(idx < 10) d_res_nonce[idx] = thread; @@ -228,19 +225,19 @@ __global__ void cryptonight_extra_gpu_final( int threads, uint64_t target, uint3 } else { - switch ( ( (uint8_t *) state )[0] & 0x03 ) + switch(((uint8_t*)state)[0] & 0x03) { case 0: - cn_blake( (const uint8_t *) state, 200, (uint8_t *) hash ); + cn_blake((const uint8_t*)state, 200, (uint8_t*)hash); break; case 1: - cn_groestl( (const BitSequence *) state, 200, (BitSequence *) hash ); + cn_groestl((const BitSequence*)state, 200, (BitSequence*)hash); break; case 2: - cn_jh( (const BitSequence *) state, 200, (BitSequence *) hash ); + cn_jh((const BitSequence*)state, 200, (BitSequence*)hash); break; case 3: - cn_skein( (const BitSequence *) state, 200, (BitSequence *) hash ); + cn_skein((const BitSequence*)state, 200, (BitSequence*)hash); break; default: break; @@ -249,9 +246,9 @@ __global__ void cryptonight_extra_gpu_final( int threads, uint64_t target, uint3 // Note that comparison is equivalent to subtraction - we can't just compare 8 32-bit values // and expect an accurate result for target > 32-bit without implementing carries - if ( hash[3] < target ) + if(hash[3] < target) { - uint32_t idx = atomicInc( d_res_count, 0xFFFFFFFF ); + uint32_t idx = atomicInc(d_res_count, 0xFFFFFFFF); if(idx < 10) d_res_nonce[idx] = thread; @@ -259,10 +256,10 @@ __global__ void cryptonight_extra_gpu_final( int threads, uint64_t target, uint3 } } -extern "C" void cryptonight_extra_cpu_set_data( nvid_ctx* ctx, const void *data, uint32_t len ) +extern "C" void cryptonight_extra_cpu_set_data(nvid_ctx* ctx, const void* data, uint32_t len) { ctx->inputlen = len; - CUDA_CHECK(ctx->device_id, cudaMemcpy( ctx->d_input, data, len, cudaMemcpyHostToDevice )); + CUDA_CHECK(ctx->device_id, cudaMemcpy(ctx->d_input, data, len, cudaMemcpyHostToDevice)); } extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx) @@ -290,7 +287,6 @@ extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx) case 3: CUDA_CHECK(ctx->device_id, cudaSetDeviceFlags(cudaDeviceScheduleBlockingSync)); break; - }; // prefer shared memory over L1 cache @@ -314,8 +310,7 @@ extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx) std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_heavy) != neededAlgorithms.end() || std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_haven) != neededAlgorithms.end() || std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_bittube2) != neededAlgorithms.end() || - std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_superfast) != neededAlgorithms.end() - ) + std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_superfast) != neededAlgorithms.end()) { // extent ctx_b to hold the state of idx0 ctx_b_size += sizeof(uint32_t) * wsize; @@ -326,16 +321,14 @@ extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx) { ctx_b_size += sizeof(uint32_t) * 4 * wsize; } - else if((std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_monero_v8) != neededAlgorithms.end()) - || (std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_v8_reversewaltz) != neededAlgorithms.end())) + else if((std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_monero_v8) != neededAlgorithms.end()) || (std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_v8_reversewaltz) != neededAlgorithms.end())) { // bx0 (16byte), bx1 (16byte), division_result (8byte) and sqrt_result (8byte), padding (16byte) ctx_b_size = 4 * 4 * sizeof(uint32_t) * wsize; } else if( std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_r) != neededAlgorithms.end() || - std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_r_wow) != neededAlgorithms.end() - ) + std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_r_wow) != neededAlgorithms.end()) { // bx0 (16byte), bx1 (16byte), and [r0, r1, r2, r3] (a 8byte) ctx_b_size = 4 * 4 * sizeof(uint32_t) * wsize; @@ -349,9 +342,9 @@ extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx) CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_ctx_a, 4 * sizeof(uint32_t) * wsize)); CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_ctx_b, ctx_b_size)); // POW block format http://monero.wikia.com/wiki/PoW_Block_Header_Format - CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_input, 32 * sizeof (uint32_t ) )); - CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_result_count, sizeof (uint32_t ) )); - CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_result_nonce, 10 * sizeof (uint32_t ) )); + CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_input, 32 * sizeof(uint32_t))); + CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_result_count, sizeof(uint32_t))); + CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_result_nonce, 10 * sizeof(uint32_t))); CUDA_CHECK_MSG( ctx->device_id, "\n**suggestion: Try to reduce the value of the attribute 'threads' in the NVIDIA config file.**", @@ -364,106 +357,102 @@ extern "C" void cryptonight_extra_cpu_prepare(nvid_ctx* ctx, uint32_t startNonce int threadsperblock = 128; uint32_t wsize = ctx->device_blocks * ctx->device_threads; - dim3 grid( ( wsize + threadsperblock - 1 ) / threadsperblock ); - dim3 block( threadsperblock ); + dim3 grid((wsize + threadsperblock - 1) / threadsperblock); + dim3 block(threadsperblock); if(miner_algo == cryptonight_heavy) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_haven) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_superfast) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_bittube2) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_monero_v8) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_gpu) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_r) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_r_wow) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_v8_reversewaltz) { - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state,ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state2, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } else { /* pass two times d_ctx_state because the second state is used later in phase1, * the first is used than in phase3 */ - CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>( wsize, ctx->d_input, ctx->inputlen, startNonce, - ctx->d_ctx_state, ctx->d_ctx_state, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2 )); + CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_extra_gpu_prepare<<>>(wsize, ctx->d_input, ctx->inputlen, startNonce, + ctx->d_ctx_state, ctx->d_ctx_state, ctx->d_ctx_a, ctx->d_ctx_b, ctx->d_ctx_key1, ctx->d_ctx_key2)); } } -extern "C" void cryptonight_extra_cpu_final(nvid_ctx* ctx, uint32_t startNonce, uint64_t target, uint32_t* rescount, uint32_t *resnonce, const xmrstak_algo& miner_algo) +extern "C" void cryptonight_extra_cpu_final(nvid_ctx* ctx, uint32_t startNonce, uint64_t target, uint32_t* rescount, uint32_t* resnonce, const xmrstak_algo& miner_algo) { int threadsperblock = 128; uint32_t wsize = ctx->device_blocks * ctx->device_threads; - dim3 grid( ( wsize + threadsperblock - 1 ) / threadsperblock ); - dim3 block( threadsperblock ); + dim3 grid((wsize + threadsperblock - 1) / threadsperblock); + dim3 block(threadsperblock); - CUDA_CHECK(ctx->device_id, cudaMemset( ctx->d_result_nonce, 0xFF, 10 * sizeof (uint32_t ) )); - CUDA_CHECK(ctx->device_id, cudaMemset( ctx->d_result_count, 0, sizeof (uint32_t ) )); + CUDA_CHECK(ctx->device_id, cudaMemset(ctx->d_result_nonce, 0xFF, 10 * sizeof(uint32_t))); + CUDA_CHECK(ctx->device_id, cudaMemset(ctx->d_result_count, 0, sizeof(uint32_t))); if(miner_algo == cryptonight_heavy) { CUDA_CHECK_MSG_KERNEL( ctx->device_id, "\n**suggestion: Try to increase the value of the attribute 'bfactor' in the NVIDIA config file.**", - cryptonight_extra_gpu_final<<>>( wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state,ctx->d_ctx_key2 ) - ); + cryptonight_extra_gpu_final<<>>(wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_haven) { CUDA_CHECK_MSG_KERNEL( ctx->device_id, "\n**suggestion: Try to increase the value of the attribute 'bfactor' in the NVIDIA config file.**", - cryptonight_extra_gpu_final<<>>( wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state,ctx->d_ctx_key2 ) - ); + cryptonight_extra_gpu_final<<>>(wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_superfast) { CUDA_CHECK_MSG_KERNEL( ctx->device_id, "\n**suggestion: Try to increase the value of the attribute 'bfactor' in the NVIDIA config file.**", - cryptonight_extra_gpu_final<<>>( wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state,ctx->d_ctx_key2 ) - ); + cryptonight_extra_gpu_final<<>>(wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_bittube2) { CUDA_CHECK_MSG_KERNEL( ctx->device_id, "\n**suggestion: Try to increase the value of the attribute 'bfactor' in the NVIDIA config file.**", - cryptonight_extra_gpu_final<<>>( wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state,ctx->d_ctx_key2 ) - ); + cryptonight_extra_gpu_final<<>>(wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state, ctx->d_ctx_key2)); } else if(miner_algo == cryptonight_gpu) { @@ -471,8 +460,7 @@ extern "C" void cryptonight_extra_cpu_final(nvid_ctx* ctx, uint32_t startNonce, CUDA_CHECK_MSG_KERNEL( ctx->device_id, "\n**suggestion: Try to increase the value of the attribute 'bfactor' in the NVIDIA config file.**", - cryptonight_extra_gpu_final<<>>( wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state,ctx->d_ctx_key2 ) - ); + cryptonight_extra_gpu_final<<>>(wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state, ctx->d_ctx_key2)); } else { @@ -480,16 +468,14 @@ extern "C" void cryptonight_extra_cpu_final(nvid_ctx* ctx, uint32_t startNonce, CUDA_CHECK_MSG_KERNEL( ctx->device_id, "\n**suggestion: Try to increase the value of the attribute 'bfactor' in the NVIDIA config file.**", - cryptonight_extra_gpu_final<<>>( wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state,ctx->d_ctx_key2 ) - ); + cryptonight_extra_gpu_final<<>>(wsize, target, ctx->d_result_count, ctx->d_result_nonce, ctx->d_ctx_state, ctx->d_ctx_key2)); } - CUDA_CHECK(ctx->device_id, cudaMemcpy( rescount, ctx->d_result_count, sizeof (uint32_t ), cudaMemcpyDeviceToHost )); + CUDA_CHECK(ctx->device_id, cudaMemcpy(rescount, ctx->d_result_count, sizeof(uint32_t), cudaMemcpyDeviceToHost)); CUDA_CHECK_MSG( ctx->device_id, "\n**suggestion: Try to increase the attribute 'bfactor' in the NVIDIA config file.**", - cudaMemcpy( resnonce, ctx->d_result_nonce, 10 * sizeof (uint32_t ), cudaMemcpyDeviceToHost ) - ); + cudaMemcpy(resnonce, ctx->d_result_nonce, 10 * sizeof(uint32_t), cudaMemcpyDeviceToHost)); /* There is only a 32bit limit for the counter on the device side * therefore this value can be greater than 10, in that case limit rescount @@ -497,11 +483,11 @@ extern "C" void cryptonight_extra_cpu_final(nvid_ctx* ctx, uint32_t startNonce, */ if(*rescount > 10) *rescount = 10; - for(int i=0; i < *rescount; i++) + for(int i = 0; i < *rescount; i++) resnonce[i] += startNonce; } -extern "C" int cuda_get_devicecount( int* deviceCount) +extern "C" int cuda_get_devicecount(int* deviceCount) { cudaError_t err; *deviceCount = 0; @@ -587,17 +573,17 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) std::vector arch; #define XMRSTAK_PP_TOSTRING1(str) #str #define XMRSTAK_PP_TOSTRING(str) XMRSTAK_PP_TOSTRING1(str) - char const * archStringList = XMRSTAK_PP_TOSTRING(XMRSTAK_CUDA_ARCH_LIST); + char const* archStringList = XMRSTAK_PP_TOSTRING(XMRSTAK_CUDA_ARCH_LIST); #undef XMRSTAK_PP_TOSTRING #undef XMRSTAK_PP_TOSTRING1 std::stringstream ss(archStringList); //transform string list separated with `+` into a vector of integers int tmpArch; - while ( ss >> tmpArch ) - arch.push_back( tmpArch ); + while(ss >> tmpArch) + arch.push_back(tmpArch); - #define MSG_CUDA_NO_ARCH "WARNING: skip device - binary does not contain required device architecture\n" +#define MSG_CUDA_NO_ARCH "WARNING: skip device - binary does not contain required device architecture\n" if(gpuArch >= 20 && gpuArch < 30) { // compiled binary must support sm_20 for fermi @@ -618,7 +604,7 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) * with a sm_20 only compiled binary */ for(int i = 0; i < arch.size(); ++i) - if(arch[i] >= 30 && (minSupportedArch == 0 || arch[i] < minSupportedArch)) + if(arch[i] >= 30 && (minSupportedArch == 0 || arch[i] < minSupportedArch)) minSupportedArch = arch[i]; if(minSupportedArch < 30 || gpuArch < minSupportedArch) { @@ -630,7 +616,6 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) auto neededAlgorithms = ::jconf::inst()->GetCurrentCoinSelection().GetAllAlgorithms(); bool useCryptonight_gpu = std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_gpu) != neededAlgorithms.end(); - // set all device option those marked as auto (-1) to a valid value if(ctx->device_blocks == -1) { @@ -700,7 +685,7 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) int* tmp; cudaError_t err; - #define MSG_CUDA_FUNC_FAIL "WARNING: skip device - %s failed\n" +#define MSG_CUDA_FUNC_FAIL "WARNING: skip device - %s failed\n" // a device must be selected to get the right memory usage later on err = cudaSetDevice(ctx->device_id); if(err != cudaSuccess) @@ -716,7 +701,6 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) return 3; } - size_t freeMemory = 0; size_t totalMemory = 0; CUDA_CHECK(ctx->device_id, cudaMemGetInfo(&freeMemory, &totalMemory)); @@ -746,7 +730,7 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) size_t usedMem = totalMemory - freeMemory; if(usedMem >= maxMemUsage) { - printf("WARNING: skip device - already %s MiB memory in use\n", std::to_string(usedMem/byteToMiB).c_str()); + printf("WARNING: skip device - already %s MiB memory in use\n", std::to_string(usedMem / byteToMiB).c_str()); return 4; } else @@ -764,8 +748,7 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_heavy) != neededAlgorithms.end() || std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_haven) != neededAlgorithms.end() || std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_bittube2) != neededAlgorithms.end() || - std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_superfast) != neededAlgorithms.end() - ) + std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_superfast) != neededAlgorithms.end()) perThread += 50 * 4; // state double buffer size_t max_intensity = limitedMemory / perThread; @@ -806,19 +789,18 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) size_t blockOptimal = 8 * ctx->device_mpcount; // the following values are calculated with CUDA10 and the occupancy calculator - if(gpuArch == 35 || gpuArch/10 == 5 || gpuArch/10 == 6) - blockOptimal = 7 * ctx->device_mpcount; + if(gpuArch == 35 || gpuArch / 10 == 5 || gpuArch / 10 == 6) + blockOptimal = 7 * ctx->device_mpcount; if(gpuArch == 37) - blockOptimal = 14 * ctx->device_mpcount; + blockOptimal = 14 * ctx->device_mpcount; if(gpuArch >= 70) - blockOptimal = 6 * ctx->device_mpcount; + blockOptimal = 6 * ctx->device_mpcount; if(blockOptimal * threads * hashMemSize < limitedMemory) { ctx->device_threads = threads; ctx->device_blocks = blockOptimal; } - } } printf("device init succeeded\n"); diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp index 4d369f843..09cdd6646 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp @@ -11,22 +11,22 @@ struct uint3 unsigned int x, y, z; }; -struct uint3 threadIdx; -struct uint3 blockIdx; -struct uint3 blockDim; -#define __funnelshift_r(a,b,c) 1 +struct uint3 threadIdx; +struct uint3 blockIdx; +struct uint3 blockDim; +#define __funnelshift_r(a, b, c) 1 #define __syncthreads() #define asm(x) -#define __shfl(a,b,c) 1 +#define __shfl(a, b, c) 1 #endif -#define AES_BLOCK_SIZE 16 -#define AES_KEY_SIZE 32 -#define INIT_SIZE_BLK 8 +#define AES_BLOCK_SIZE 16 +#define AES_KEY_SIZE 32 +#define INIT_SIZE_BLK 8 #define INIT_SIZE_BYTE (INIT_SIZE_BLK * AES_BLOCK_SIZE) // 128 B -#define C32(x) ((uint32_t)(x ## U)) -#define T32(x) ((x) & C32(0xFFFFFFFF)) +#define C32(x) ((uint32_t)(x##U)) +#define T32(x) ((x)&C32(0xFFFFFFFF)) #if __CUDA_ARCH__ >= 350 __forceinline__ __device__ uint64_t cuda_ROTL64(const uint64_t value, const int offset) @@ -34,71 +34,91 @@ __forceinline__ __device__ uint64_t cuda_ROTL64(const uint64_t value, const int uint2 result; if(offset >= 32) { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.x) : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.y) : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.x) + : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.y) + : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); } else { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.x) : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.y) : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.x) + : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.y) + : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); } - return __double_as_longlong(__hiloint2double(result.y, result.x)); + return __double_as_longlong(__hiloint2double(result.y, result.x)); } #define ROTL64(x, n) (cuda_ROTL64(x, n)) #else -#define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) +#define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) #endif #if __CUDA_ARCH__ < 350 #define ROTL32(x, n) T32(((x) << (n)) | ((x) >> (32 - (n)))) #define ROTR32(x, n) (((x) >> (n)) | ((x) << (32 - (n)))) #else -#define ROTL32(x, n) __funnelshift_l( (x), (x), (n) ) -#define ROTR32(x, n) __funnelshift_r( (x), (x), (n) ) +#define ROTL32(x, n) __funnelshift_l((x), (x), (n)) +#define ROTR32(x, n) __funnelshift_r((x), (x), (n)) #endif -#define MEMSET8(dst,what,cnt) { \ - int i_memset8; \ - uint64_t *out_memset8 = (uint64_t *)(dst); \ - for( i_memset8 = 0; i_memset8 < cnt; i_memset8++ ) \ - out_memset8[i_memset8] = (what); } - -#define MEMSET4(dst,what,cnt) { \ - int i_memset4; \ - uint32_t *out_memset4 = (uint32_t *)(dst); \ - for( i_memset4 = 0; i_memset4 < cnt; i_memset4++ ) \ - out_memset4[i_memset4] = (what); } - -#define MEMCPY8(dst,src,cnt) { \ - int i_memcpy8; \ - uint64_t *in_memcpy8 = (uint64_t *)(src); \ - uint64_t *out_memcpy8 = (uint64_t *)(dst); \ - for( i_memcpy8 = 0; i_memcpy8 < cnt; i_memcpy8++ ) \ - out_memcpy8[i_memcpy8] = in_memcpy8[i_memcpy8]; } - -#define MEMCPY4(dst,src,cnt) { \ - int i_memcpy4; \ - uint32_t *in_memcpy4 = (uint32_t *)(src); \ - uint32_t *out_memcpy4 = (uint32_t *)(dst); \ - for( i_memcpy4 = 0; i_memcpy4 < cnt; i_memcpy4++ ) \ - out_memcpy4[i_memcpy4] = in_memcpy4[i_memcpy4]; } - -#define XOR_BLOCKS(a,b) { \ - ((uint64_t *)a)[0] ^= ((uint64_t *)b)[0]; \ - ((uint64_t *)a)[1] ^= ((uint64_t *)b)[1]; } - -#define XOR_BLOCKS_DST(x,y,z) { \ - ((uint64_t *)z)[0] = ((uint64_t *)(x))[0] ^ ((uint64_t *)(y))[0]; \ - ((uint64_t *)z)[1] = ((uint64_t *)(x))[1] ^ ((uint64_t *)(y))[1]; } - -#define MUL_SUM_XOR_DST(a,c,dst) { \ - const uint64_t dst0 = ((uint64_t *)dst)[0]; \ - uint64_t hi, lo = cuda_mul128(((uint64_t *)a)[0], dst0, &hi) + ((uint64_t *)c)[1]; \ - hi += ((uint64_t *)c)[0]; \ - ((uint64_t *)c)[0] = dst0 ^ hi; \ - ((uint64_t *)dst)[0] = hi; \ - ((uint64_t *)c)[1] = atomicExch(((unsigned long long int *)dst) + 1, (unsigned long long int)lo) ^ lo; \ +#define MEMSET8(dst, what, cnt) \ + { \ + int i_memset8; \ + uint64_t* out_memset8 = (uint64_t*)(dst); \ + for(i_memset8 = 0; i_memset8 < cnt; i_memset8++) \ + out_memset8[i_memset8] = (what); \ } -#define E2I(x) ((size_t)(((*((uint64_t*)(x)) >> 4) & 0x1ffff))) +#define MEMSET4(dst, what, cnt) \ + { \ + int i_memset4; \ + uint32_t* out_memset4 = (uint32_t*)(dst); \ + for(i_memset4 = 0; i_memset4 < cnt; i_memset4++) \ + out_memset4[i_memset4] = (what); \ + } + +#define MEMCPY8(dst, src, cnt) \ + { \ + int i_memcpy8; \ + uint64_t* in_memcpy8 = (uint64_t*)(src); \ + uint64_t* out_memcpy8 = (uint64_t*)(dst); \ + for(i_memcpy8 = 0; i_memcpy8 < cnt; i_memcpy8++) \ + out_memcpy8[i_memcpy8] = in_memcpy8[i_memcpy8]; \ + } +#define MEMCPY4(dst, src, cnt) \ + { \ + int i_memcpy4; \ + uint32_t* in_memcpy4 = (uint32_t*)(src); \ + uint32_t* out_memcpy4 = (uint32_t*)(dst); \ + for(i_memcpy4 = 0; i_memcpy4 < cnt; i_memcpy4++) \ + out_memcpy4[i_memcpy4] = in_memcpy4[i_memcpy4]; \ + } + +#define XOR_BLOCKS(a, b) \ + { \ + ((uint64_t*)a)[0] ^= ((uint64_t*)b)[0]; \ + ((uint64_t*)a)[1] ^= ((uint64_t*)b)[1]; \ + } + +#define XOR_BLOCKS_DST(x, y, z) \ + { \ + ((uint64_t*)z)[0] = ((uint64_t*)(x))[0] ^ ((uint64_t*)(y))[0]; \ + ((uint64_t*)z)[1] = ((uint64_t*)(x))[1] ^ ((uint64_t*)(y))[1]; \ + } + +#define MUL_SUM_XOR_DST(a, c, dst) \ + { \ + const uint64_t dst0 = ((uint64_t*)dst)[0]; \ + uint64_t hi, lo = cuda_mul128(((uint64_t*)a)[0], dst0, &hi) + ((uint64_t*)c)[1]; \ + hi += ((uint64_t*)c)[0]; \ + ((uint64_t*)c)[0] = dst0 ^ hi; \ + ((uint64_t*)dst)[0] = hi; \ + ((uint64_t*)c)[1] = atomicExch(((unsigned long long int*)dst) + 1, (unsigned long long int)lo) ^ lo; \ + } + +#define E2I(x) ((size_t)(((*((uint64_t*)(x)) >> 4) & 0x1ffff))) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_fast_div_heavy.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_fast_div_heavy.hpp index 555ccbef2..a8dd1fcb2 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_fast_div_heavy.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_fast_div_heavy.hpp @@ -2,7 +2,6 @@ #include - __device__ __forceinline__ int64_t fast_div_heavy(int64_t _a, int _b) { diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_fast_int_math_v2.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_fast_int_math_v2.hpp index 0d54f1436..1fc85b2d0 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_fast_int_math_v2.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_fast_int_math_v2.hpp @@ -18,19 +18,19 @@ __device__ __forceinline__ uint64_t fast_div_v2(uint64_t a, uint32_t b) { const uint32_t r = get_reciprocal(b); const uint32_t a1 = ((uint32_t*)&a)[1]; - const uint64_t k = __umulhi(((uint32_t*)&a)[0], r) + ((uint64_t)(r) * a1) + a; + const uint64_t k = __umulhi(((uint32_t*)&a)[0], r) + ((uint64_t)(r)*a1) + a; const uint32_t q = ((uint32_t*)&k)[1]; - int64_t tmp = a - ((uint64_t)(q) * b); + int64_t tmp = a - ((uint64_t)(q)*b); ((int32_t*)(&tmp))[1] -= q < a1 ? b : 0; - + const int overshoot = ((int*)(&tmp))[1] >> 31; const int64_t tmp_u = (uint32_t)(b - 1) - tmp; const int undershoot = ((int*)&tmp_u)[1] >> 31; uint64_t result; ((uint32_t*)&result)[0] = q + overshoot - undershoot; - ((uint32_t*)&result)[1] = ((uint32_t*)(&tmp))[0] + ((uint32_t)(overshoot) & b) - ((uint32_t)(undershoot) & b); + ((uint32_t*)&result)[1] = ((uint32_t*)(&tmp))[0] + ((uint32_t)(overshoot)&b) - ((uint32_t)(undershoot)&b); return result; } @@ -39,14 +39,18 @@ __device__ __forceinline__ uint32_t fast_sqrt_v2(const uint64_t n1) { float x = __uint_as_float((((uint32_t*)&n1)[1] >> 9) + ((64U + 127U) << 23)); float x1; - asm("rsqrt.approx.f32 %0, %1;" : "=f"(x1) : "f"(x)); - asm("sqrt.approx.f32 %0, %1;" : "=f"(x) : "f"(x)); + asm("rsqrt.approx.f32 %0, %1;" + : "=f"(x1) + : "f"(x)); + asm("sqrt.approx.f32 %0, %1;" + : "=f"(x) + : "f"(x)); // The following line does x1 *= 4294967296.0f; x1 = __uint_as_float(__float_as_uint(x1) + (32U << 23)); const uint32_t x0 = __float_as_uint(x) - (158U << 23); - const int64_t delta0 = n1 - (((int64_t)(x0) * x0) << 18); + const int64_t delta0 = n1 - (((int64_t)(x0)*x0) << 18); const float delta = __int2float_rn(((int32_t*)&delta0)[1]) * x1; uint32_t result = (x0 << 10) + __float2int_rn(delta); @@ -56,6 +60,6 @@ __device__ __forceinline__ uint32_t fast_sqrt_v2(const uint64_t n1) const uint64_t x2 = (uint64_t)(s) * (s + b) + ((uint64_t)(result) << 32) - n1; const int32_t overshoot = ((int64_t)(x2 + b) > 0) ? -1 : 0; const int32_t undershoot = ((int64_t)(x2 + 0x100000000UL + s) < 0) ? 1 : 0; - result += (overshoot+undershoot); + result += (overshoot + undershoot); return result; } diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_groestl.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_groestl.hpp index d5a98b7da..3bec5b1a2 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_groestl.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_groestl.hpp @@ -4,173 +4,142 @@ #define GROESTL_LENGTHFIELDLEN GROESTL_ROWS #define GROESTL_COLS512 8 -#define GROESTL_SIZE512 (GROESTL_ROWS*GROESTL_COLS512) +#define GROESTL_SIZE512 (GROESTL_ROWS * GROESTL_COLS512) #define GROESTL_ROUNDS512 10 #define GROESTL_HASH_BIT_LEN 256 #define GROESTL_ROTL32(v, n) ROTL32(v, n) - #define li_32(h) 0x##h##u -#define GROESTL_EXT_BYTE(var,n) ((uint8_t)((uint32_t)(var) >> (8*n))) +#define GROESTL_EXT_BYTE(var, n) ((uint8_t)((uint32_t)(var) >> (8 * n))) -#define u32BIG(a) \ - ((GROESTL_ROTL32(a,8) & li_32(00FF00FF)) | (GROESTL_ROTL32(a,24) & li_32(FF00FF00))) +#define u32BIG(a) \ + ((GROESTL_ROTL32(a, 8) & li_32(00FF00FF)) | (GROESTL_ROTL32(a, 24) & li_32(FF00FF00))) -typedef struct { - uint32_t chaining[GROESTL_SIZE512/sizeof(uint32_t)]; /* actual state */ +typedef struct +{ + uint32_t chaining[GROESTL_SIZE512 / sizeof(uint32_t)]; /* actual state */ uint32_t block_counter1, - block_counter2; /* message block counter(s) */ - BitSequence buffer[GROESTL_SIZE512]; /* data buffer */ - int buf_ptr; /* data buffer pointer */ - int bits_in_last_byte; /* no. of message bits in last byte of data buffer */ + block_counter2; /* message block counter(s) */ + BitSequence buffer[GROESTL_SIZE512]; /* data buffer */ + int buf_ptr; /* data buffer pointer */ + int bits_in_last_byte; /* no. of message bits in last byte of data buffer */ } groestlHashState; - __constant__ uint32_t d_groestl_T[512] = -{ - 0xa5f432c6, 0xc6a597f4, 0x84976ff8, 0xf884eb97, 0x99b05eee, 0xee99c7b0, 0x8d8c7af6, 0xf68df78c, 0xd17e8ff, 0xff0de517, 0xbddc0ad6, 0xd6bdb7dc, 0xb1c816de, 0xdeb1a7c8, 0x54fc6d91, 0x915439fc -, 0x50f09060, 0x6050c0f0, 0x3050702, 0x2030405, 0xa9e02ece, 0xcea987e0, 0x7d87d156, 0x567dac87, 0x192bcce7, 0xe719d52b, 0x62a613b5, 0xb56271a6, 0xe6317c4d, 0x4de69a31, 0x9ab559ec, 0xec9ac3b5 -, 0x45cf408f, 0x8f4505cf, 0x9dbca31f, 0x1f9d3ebc, 0x40c04989, 0x894009c0, 0x879268fa, 0xfa87ef92, 0x153fd0ef, 0xef15c53f, 0xeb2694b2, 0xb2eb7f26, 0xc940ce8e, 0x8ec90740, 0xb1de6fb, 0xfb0bed1d -, 0xec2f6e41, 0x41ec822f, 0x67a91ab3, 0xb3677da9, 0xfd1c435f, 0x5ffdbe1c, 0xea256045, 0x45ea8a25, 0xbfdaf923, 0x23bf46da, 0xf7025153, 0x53f7a602, 0x96a145e4, 0xe496d3a1, 0x5bed769b, 0x9b5b2ded -, 0xc25d2875, 0x75c2ea5d, 0x1c24c5e1, 0xe11cd924, 0xaee9d43d, 0x3dae7ae9, 0x6abef24c, 0x4c6a98be, 0x5aee826c, 0x6c5ad8ee, 0x41c3bd7e, 0x7e41fcc3, 0x206f3f5, 0xf502f106, 0x4fd15283, 0x834f1dd1 -, 0x5ce48c68, 0x685cd0e4, 0xf4075651, 0x51f4a207, 0x345c8dd1, 0xd134b95c, 0x818e1f9, 0xf908e918, 0x93ae4ce2, 0xe293dfae, 0x73953eab, 0xab734d95, 0x53f59762, 0x6253c4f5, 0x3f416b2a, 0x2a3f5441 -, 0xc141c08, 0x80c1014, 0x52f66395, 0x955231f6, 0x65afe946, 0x46658caf, 0x5ee27f9d, 0x9d5e21e2, 0x28784830, 0x30286078, 0xa1f8cf37, 0x37a16ef8, 0xf111b0a, 0xa0f1411, 0xb5c4eb2f, 0x2fb55ec4 -, 0x91b150e, 0xe091c1b, 0x365a7e24, 0x2436485a, 0x9bb6ad1b, 0x1b9b36b6, 0x3d4798df, 0xdf3da547, 0x266aa7cd, 0xcd26816a, 0x69bbf54e, 0x4e699cbb, 0xcd4c337f, 0x7fcdfe4c, 0x9fba50ea, 0xea9fcfba -, 0x1b2d3f12, 0x121b242d, 0x9eb9a41d, 0x1d9e3ab9, 0x749cc458, 0x5874b09c, 0x2e724634, 0x342e6872, 0x2d774136, 0x362d6c77, 0xb2cd11dc, 0xdcb2a3cd, 0xee299db4, 0xb4ee7329, 0xfb164d5b, 0x5bfbb616 -, 0xf601a5a4, 0xa4f65301, 0x4dd7a176, 0x764decd7, 0x61a314b7, 0xb76175a3, 0xce49347d, 0x7dcefa49, 0x7b8ddf52, 0x527ba48d, 0x3e429fdd, 0xdd3ea142, 0x7193cd5e, 0x5e71bc93, 0x97a2b113, 0x139726a2 -, 0xf504a2a6, 0xa6f55704, 0x68b801b9, 0xb96869b8, 0x0, 0x0, 0x2c74b5c1, 0xc12c9974, 0x60a0e040, 0x406080a0, 0x1f21c2e3, 0xe31fdd21, 0xc8433a79, 0x79c8f243, 0xed2c9ab6, 0xb6ed772c -, 0xbed90dd4, 0xd4beb3d9, 0x46ca478d, 0x8d4601ca, 0xd9701767, 0x67d9ce70, 0x4bddaf72, 0x724be4dd, 0xde79ed94, 0x94de3379, 0xd467ff98, 0x98d42b67, 0xe82393b0, 0xb0e87b23, 0x4ade5b85, 0x854a11de -, 0x6bbd06bb, 0xbb6b6dbd, 0x2a7ebbc5, 0xc52a917e, 0xe5347b4f, 0x4fe59e34, 0x163ad7ed, 0xed16c13a, 0xc554d286, 0x86c51754, 0xd762f89a, 0x9ad72f62, 0x55ff9966, 0x6655ccff, 0x94a7b611, 0x119422a7 -, 0xcf4ac08a, 0x8acf0f4a, 0x1030d9e9, 0xe910c930, 0x60a0e04, 0x406080a, 0x819866fe, 0xfe81e798, 0xf00baba0, 0xa0f05b0b, 0x44ccb478, 0x7844f0cc, 0xbad5f025, 0x25ba4ad5, 0xe33e754b, 0x4be3963e -, 0xf30eaca2, 0xa2f35f0e, 0xfe19445d, 0x5dfeba19, 0xc05bdb80, 0x80c01b5b, 0x8a858005, 0x58a0a85, 0xadecd33f, 0x3fad7eec, 0xbcdffe21, 0x21bc42df, 0x48d8a870, 0x7048e0d8, 0x40cfdf1, 0xf104f90c -, 0xdf7a1963, 0x63dfc67a, 0xc1582f77, 0x77c1ee58, 0x759f30af, 0xaf75459f, 0x63a5e742, 0x426384a5, 0x30507020, 0x20304050, 0x1a2ecbe5, 0xe51ad12e, 0xe12effd, 0xfd0ee112, 0x6db708bf, 0xbf6d65b7 -, 0x4cd45581, 0x814c19d4, 0x143c2418, 0x1814303c, 0x355f7926, 0x26354c5f, 0x2f71b2c3, 0xc32f9d71, 0xe13886be, 0xbee16738, 0xa2fdc835, 0x35a26afd, 0xcc4fc788, 0x88cc0b4f, 0x394b652e, 0x2e395c4b -, 0x57f96a93, 0x93573df9, 0xf20d5855, 0x55f2aa0d, 0x829d61fc, 0xfc82e39d, 0x47c9b37a, 0x7a47f4c9, 0xacef27c8, 0xc8ac8bef, 0xe73288ba, 0xbae76f32, 0x2b7d4f32, 0x322b647d, 0x95a442e6, 0xe695d7a4 -, 0xa0fb3bc0, 0xc0a09bfb, 0x98b3aa19, 0x199832b3, 0xd168f69e, 0x9ed12768, 0x7f8122a3, 0xa37f5d81, 0x66aaee44, 0x446688aa, 0x7e82d654, 0x547ea882, 0xabe6dd3b, 0x3bab76e6, 0x839e950b, 0xb83169e -, 0xca45c98c, 0x8cca0345, 0x297bbcc7, 0xc729957b, 0xd36e056b, 0x6bd3d66e, 0x3c446c28, 0x283c5044, 0x798b2ca7, 0xa779558b, 0xe23d81bc, 0xbce2633d, 0x1d273116, 0x161d2c27, 0x769a37ad, 0xad76419a -, 0x3b4d96db, 0xdb3bad4d, 0x56fa9e64, 0x6456c8fa, 0x4ed2a674, 0x744ee8d2, 0x1e223614, 0x141e2822, 0xdb76e492, 0x92db3f76, 0xa1e120c, 0xc0a181e, 0x6cb4fc48, 0x486c90b4, 0xe4378fb8, 0xb8e46b37 -, 0x5de7789f, 0x9f5d25e7, 0x6eb20fbd, 0xbd6e61b2, 0xef2a6943, 0x43ef862a, 0xa6f135c4, 0xc4a693f1, 0xa8e3da39, 0x39a872e3, 0xa4f7c631, 0x31a462f7, 0x37598ad3, 0xd337bd59, 0x8b8674f2, 0xf28bff86 -, 0x325683d5, 0xd532b156, 0x43c54e8b, 0x8b430dc5, 0x59eb856e, 0x6e59dceb, 0xb7c218da, 0xdab7afc2, 0x8c8f8e01, 0x18c028f, 0x64ac1db1, 0xb16479ac, 0xd26df19c, 0x9cd2236d, 0xe03b7249, 0x49e0923b -, 0xb4c71fd8, 0xd8b4abc7, 0xfa15b9ac, 0xacfa4315, 0x709faf3, 0xf307fd09, 0x256fa0cf, 0xcf25856f, 0xafea20ca, 0xcaaf8fea, 0x8e897df4, 0xf48ef389, 0xe9206747, 0x47e98e20, 0x18283810, 0x10182028 -, 0xd5640b6f, 0x6fd5de64, 0x888373f0, 0xf088fb83, 0x6fb1fb4a, 0x4a6f94b1, 0x7296ca5c, 0x5c72b896, 0x246c5438, 0x3824706c, 0xf1085f57, 0x57f1ae08, 0xc7522173, 0x73c7e652, 0x51f36497, 0x975135f3 -, 0x2365aecb, 0xcb238d65, 0x7c8425a1, 0xa17c5984, 0x9cbf57e8, 0xe89ccbbf, 0x21635d3e, 0x3e217c63, 0xdd7cea96, 0x96dd377c, 0xdc7f1e61, 0x61dcc27f, 0x86919c0d, 0xd861a91, 0x85949b0f, 0xf851e94 -, 0x90ab4be0, 0xe090dbab, 0x42c6ba7c, 0x7c42f8c6, 0xc4572671, 0x71c4e257, 0xaae529cc, 0xccaa83e5, 0xd873e390, 0x90d83b73, 0x50f0906, 0x6050c0f, 0x103f4f7, 0xf701f503, 0x12362a1c, 0x1c123836 -, 0xa3fe3cc2, 0xc2a39ffe, 0x5fe18b6a, 0x6a5fd4e1, 0xf910beae, 0xaef94710, 0xd06b0269, 0x69d0d26b, 0x91a8bf17, 0x17912ea8, 0x58e87199, 0x995829e8, 0x2769533a, 0x3a277469, 0xb9d0f727, 0x27b94ed0 -, 0x384891d9, 0xd938a948, 0x1335deeb, 0xeb13cd35, 0xb3cee52b, 0x2bb356ce, 0x33557722, 0x22334455, 0xbbd604d2, 0xd2bbbfd6, 0x709039a9, 0xa9704990, 0x89808707, 0x7890e80, 0xa7f2c133, 0x33a766f2 -, 0xb6c1ec2d, 0x2db65ac1, 0x22665a3c, 0x3c227866, 0x92adb815, 0x15922aad, 0x2060a9c9, 0xc9208960, 0x49db5c87, 0x874915db, 0xff1ab0aa, 0xaaff4f1a, 0x7888d850, 0x5078a088, 0x7a8e2ba5, 0xa57a518e -, 0x8f8a8903, 0x38f068a, 0xf8134a59, 0x59f8b213, 0x809b9209, 0x980129b, 0x1739231a, 0x1a173439, 0xda751065, 0x65daca75, 0x315384d7, 0xd731b553, 0xc651d584, 0x84c61351, 0xb8d303d0, 0xd0b8bbd3 -, 0xc35edc82, 0x82c31f5e, 0xb0cbe229, 0x29b052cb, 0x7799c35a, 0x5a77b499, 0x11332d1e, 0x1e113c33, 0xcb463d7b, 0x7bcbf646, 0xfc1fb7a8, 0xa8fc4b1f, 0xd6610c6d, 0x6dd6da61, 0x3a4e622c, 0x2c3a584e -}; - -#define GROESTL_ROTATE_COLUMN_DOWN(v1, v2, amount_bytes, temp_var) \ - { temp_var = (v1<<(8*amount_bytes))|(v2>>(8*(4-amount_bytes))); \ - v2 = (v2<<(8*amount_bytes))|(v1>>(8*(4-amount_bytes))); \ - v1 = temp_var; } - -#define GROESTL_COLUMN(x,y,i,c0,c1,c2,c3,c4,c5,c6,c7,tv1,tv2,tu,tl,t) \ - tu = d_groestl_T[2*(uint32_t)x[4*c0+0]]; \ - tl = d_groestl_T[2*(uint32_t)x[4*c0+0]+1]; \ - tv1 = d_groestl_T[2*(uint32_t)x[4*c1+1]]; \ - tv2 = d_groestl_T[2*(uint32_t)x[4*c1+1]+1]; \ - GROESTL_ROTATE_COLUMN_DOWN(tv1,tv2,1,t) \ - tu ^= tv1; \ - tl ^= tv2; \ - tv1 = d_groestl_T[2*(uint32_t)x[4*c2+2]]; \ - tv2 = d_groestl_T[2*(uint32_t)x[4*c2+2]+1]; \ - GROESTL_ROTATE_COLUMN_DOWN(tv1,tv2,2,t) \ - tu ^= tv1; \ - tl ^= tv2; \ - tv1 = d_groestl_T[2*(uint32_t)x[4*c3+3]]; \ - tv2 = d_groestl_T[2*(uint32_t)x[4*c3+3]+1]; \ - GROESTL_ROTATE_COLUMN_DOWN(tv1,tv2,3,t) \ - tu ^= tv1; \ - tl ^= tv2; \ - tl ^= d_groestl_T[2*(uint32_t)x[4*c4+0]]; \ - tu ^= d_groestl_T[2*(uint32_t)x[4*c4+0]+1]; \ - tv1 = d_groestl_T[2*(uint32_t)x[4*c5+1]]; \ - tv2 = d_groestl_T[2*(uint32_t)x[4*c5+1]+1]; \ - GROESTL_ROTATE_COLUMN_DOWN(tv1,tv2,1,t) \ - tl ^= tv1; \ - tu ^= tv2; \ - tv1 = d_groestl_T[2*(uint32_t)x[4*c6+2]]; \ - tv2 = d_groestl_T[2*(uint32_t)x[4*c6+2]+1]; \ - GROESTL_ROTATE_COLUMN_DOWN(tv1,tv2,2,t) \ - tl ^= tv1; \ - tu ^= tv2; \ - tv1 = d_groestl_T[2*(uint32_t)x[4*c7+3]]; \ - tv2 = d_groestl_T[2*(uint32_t)x[4*c7+3]+1]; \ - GROESTL_ROTATE_COLUMN_DOWN(tv1,tv2,3,t) \ - tl ^= tv1; \ - tu ^= tv2; \ - y[i] = tu; \ - y[i+1] = tl; - -__device__ void cn_groestl_RND512P(uint8_t * __restrict__ x, uint32_t * __restrict__ y, uint32_t r) + { + 0xa5f432c6, 0xc6a597f4, 0x84976ff8, 0xf884eb97, 0x99b05eee, 0xee99c7b0, 0x8d8c7af6, 0xf68df78c, 0xd17e8ff, 0xff0de517, 0xbddc0ad6, 0xd6bdb7dc, 0xb1c816de, 0xdeb1a7c8, 0x54fc6d91, 0x915439fc, 0x50f09060, 0x6050c0f0, 0x3050702, 0x2030405, 0xa9e02ece, 0xcea987e0, 0x7d87d156, 0x567dac87, 0x192bcce7, 0xe719d52b, 0x62a613b5, 0xb56271a6, 0xe6317c4d, 0x4de69a31, 0x9ab559ec, 0xec9ac3b5, 0x45cf408f, 0x8f4505cf, 0x9dbca31f, 0x1f9d3ebc, 0x40c04989, 0x894009c0, 0x879268fa, 0xfa87ef92, 0x153fd0ef, 0xef15c53f, 0xeb2694b2, 0xb2eb7f26, 0xc940ce8e, 0x8ec90740, 0xb1de6fb, 0xfb0bed1d, 0xec2f6e41, 0x41ec822f, 0x67a91ab3, 0xb3677da9, 0xfd1c435f, 0x5ffdbe1c, 0xea256045, 0x45ea8a25, 0xbfdaf923, 0x23bf46da, 0xf7025153, 0x53f7a602, 0x96a145e4, 0xe496d3a1, 0x5bed769b, 0x9b5b2ded, 0xc25d2875, 0x75c2ea5d, 0x1c24c5e1, 0xe11cd924, 0xaee9d43d, 0x3dae7ae9, 0x6abef24c, 0x4c6a98be, 0x5aee826c, 0x6c5ad8ee, 0x41c3bd7e, 0x7e41fcc3, 0x206f3f5, 0xf502f106, 0x4fd15283, 0x834f1dd1, 0x5ce48c68, 0x685cd0e4, 0xf4075651, 0x51f4a207, 0x345c8dd1, 0xd134b95c, 0x818e1f9, 0xf908e918, 0x93ae4ce2, 0xe293dfae, 0x73953eab, 0xab734d95, 0x53f59762, 0x6253c4f5, 0x3f416b2a, 0x2a3f5441, 0xc141c08, 0x80c1014, 0x52f66395, 0x955231f6, 0x65afe946, 0x46658caf, 0x5ee27f9d, 0x9d5e21e2, 0x28784830, 0x30286078, 0xa1f8cf37, 0x37a16ef8, 0xf111b0a, 0xa0f1411, 0xb5c4eb2f, 0x2fb55ec4, 0x91b150e, 0xe091c1b, 0x365a7e24, 0x2436485a, 0x9bb6ad1b, 0x1b9b36b6, 0x3d4798df, 0xdf3da547, 0x266aa7cd, 0xcd26816a, 0x69bbf54e, 0x4e699cbb, 0xcd4c337f, 0x7fcdfe4c, 0x9fba50ea, 0xea9fcfba, 0x1b2d3f12, 0x121b242d, 0x9eb9a41d, 0x1d9e3ab9, 0x749cc458, 0x5874b09c, 0x2e724634, 0x342e6872, 0x2d774136, 0x362d6c77, 0xb2cd11dc, 0xdcb2a3cd, 0xee299db4, 0xb4ee7329, 0xfb164d5b, 0x5bfbb616, 0xf601a5a4, 0xa4f65301, 0x4dd7a176, 0x764decd7, 0x61a314b7, 0xb76175a3, 0xce49347d, 0x7dcefa49, 0x7b8ddf52, 0x527ba48d, 0x3e429fdd, 0xdd3ea142, 0x7193cd5e, 0x5e71bc93, 0x97a2b113, 0x139726a2, 0xf504a2a6, 0xa6f55704, 0x68b801b9, 0xb96869b8, 0x0, 0x0, 0x2c74b5c1, 0xc12c9974, 0x60a0e040, 0x406080a0, 0x1f21c2e3, 0xe31fdd21, 0xc8433a79, 0x79c8f243, 0xed2c9ab6, 0xb6ed772c, 0xbed90dd4, 0xd4beb3d9, 0x46ca478d, 0x8d4601ca, 0xd9701767, 0x67d9ce70, 0x4bddaf72, 0x724be4dd, 0xde79ed94, 0x94de3379, 0xd467ff98, 0x98d42b67, 0xe82393b0, 0xb0e87b23, 0x4ade5b85, 0x854a11de, 0x6bbd06bb, 0xbb6b6dbd, 0x2a7ebbc5, 0xc52a917e, 0xe5347b4f, 0x4fe59e34, 0x163ad7ed, 0xed16c13a, 0xc554d286, 0x86c51754, 0xd762f89a, 0x9ad72f62, 0x55ff9966, 0x6655ccff, 0x94a7b611, 0x119422a7, 0xcf4ac08a, 0x8acf0f4a, 0x1030d9e9, 0xe910c930, 0x60a0e04, 0x406080a, 0x819866fe, 0xfe81e798, 0xf00baba0, 0xa0f05b0b, 0x44ccb478, 0x7844f0cc, 0xbad5f025, 0x25ba4ad5, 0xe33e754b, 0x4be3963e, 0xf30eaca2, 0xa2f35f0e, 0xfe19445d, 0x5dfeba19, 0xc05bdb80, 0x80c01b5b, 0x8a858005, 0x58a0a85, 0xadecd33f, 0x3fad7eec, 0xbcdffe21, 0x21bc42df, 0x48d8a870, 0x7048e0d8, 0x40cfdf1, 0xf104f90c, 0xdf7a1963, 0x63dfc67a, 0xc1582f77, 0x77c1ee58, 0x759f30af, 0xaf75459f, 0x63a5e742, 0x426384a5, 0x30507020, 0x20304050, 0x1a2ecbe5, 0xe51ad12e, 0xe12effd, 0xfd0ee112, 0x6db708bf, 0xbf6d65b7, 0x4cd45581, 0x814c19d4, 0x143c2418, 0x1814303c, 0x355f7926, 0x26354c5f, 0x2f71b2c3, 0xc32f9d71, 0xe13886be, 0xbee16738, 0xa2fdc835, 0x35a26afd, 0xcc4fc788, 0x88cc0b4f, 0x394b652e, 0x2e395c4b, 0x57f96a93, 0x93573df9, 0xf20d5855, 0x55f2aa0d, 0x829d61fc, 0xfc82e39d, 0x47c9b37a, 0x7a47f4c9, 0xacef27c8, 0xc8ac8bef, 0xe73288ba, 0xbae76f32, 0x2b7d4f32, 0x322b647d, 0x95a442e6, 0xe695d7a4, 0xa0fb3bc0, 0xc0a09bfb, 0x98b3aa19, 0x199832b3, 0xd168f69e, 0x9ed12768, 0x7f8122a3, 0xa37f5d81, 0x66aaee44, 0x446688aa, 0x7e82d654, 0x547ea882, 0xabe6dd3b, 0x3bab76e6, 0x839e950b, 0xb83169e, 0xca45c98c, 0x8cca0345, 0x297bbcc7, 0xc729957b, 0xd36e056b, 0x6bd3d66e, 0x3c446c28, 0x283c5044, 0x798b2ca7, 0xa779558b, 0xe23d81bc, 0xbce2633d, 0x1d273116, 0x161d2c27, 0x769a37ad, 0xad76419a, 0x3b4d96db, 0xdb3bad4d, 0x56fa9e64, 0x6456c8fa, 0x4ed2a674, 0x744ee8d2, 0x1e223614, 0x141e2822, 0xdb76e492, 0x92db3f76, 0xa1e120c, 0xc0a181e, 0x6cb4fc48, 0x486c90b4, 0xe4378fb8, 0xb8e46b37, 0x5de7789f, 0x9f5d25e7, 0x6eb20fbd, 0xbd6e61b2, 0xef2a6943, 0x43ef862a, 0xa6f135c4, 0xc4a693f1, 0xa8e3da39, 0x39a872e3, 0xa4f7c631, 0x31a462f7, 0x37598ad3, 0xd337bd59, 0x8b8674f2, 0xf28bff86, 0x325683d5, 0xd532b156, 0x43c54e8b, 0x8b430dc5, 0x59eb856e, 0x6e59dceb, 0xb7c218da, 0xdab7afc2, 0x8c8f8e01, 0x18c028f, 0x64ac1db1, 0xb16479ac, 0xd26df19c, 0x9cd2236d, 0xe03b7249, 0x49e0923b, 0xb4c71fd8, 0xd8b4abc7, 0xfa15b9ac, 0xacfa4315, 0x709faf3, 0xf307fd09, 0x256fa0cf, 0xcf25856f, 0xafea20ca, 0xcaaf8fea, 0x8e897df4, 0xf48ef389, 0xe9206747, 0x47e98e20, 0x18283810, 0x10182028, 0xd5640b6f, 0x6fd5de64, 0x888373f0, 0xf088fb83, 0x6fb1fb4a, 0x4a6f94b1, 0x7296ca5c, 0x5c72b896, 0x246c5438, 0x3824706c, 0xf1085f57, 0x57f1ae08, 0xc7522173, 0x73c7e652, 0x51f36497, 0x975135f3, 0x2365aecb, 0xcb238d65, 0x7c8425a1, 0xa17c5984, 0x9cbf57e8, 0xe89ccbbf, 0x21635d3e, 0x3e217c63, 0xdd7cea96, 0x96dd377c, 0xdc7f1e61, 0x61dcc27f, 0x86919c0d, 0xd861a91, 0x85949b0f, 0xf851e94, 0x90ab4be0, 0xe090dbab, 0x42c6ba7c, 0x7c42f8c6, 0xc4572671, 0x71c4e257, 0xaae529cc, 0xccaa83e5, 0xd873e390, 0x90d83b73, 0x50f0906, 0x6050c0f, 0x103f4f7, 0xf701f503, 0x12362a1c, 0x1c123836, 0xa3fe3cc2, 0xc2a39ffe, 0x5fe18b6a, 0x6a5fd4e1, 0xf910beae, 0xaef94710, 0xd06b0269, 0x69d0d26b, 0x91a8bf17, 0x17912ea8, 0x58e87199, 0x995829e8, 0x2769533a, 0x3a277469, 0xb9d0f727, 0x27b94ed0, 0x384891d9, 0xd938a948, 0x1335deeb, 0xeb13cd35, 0xb3cee52b, 0x2bb356ce, 0x33557722, 0x22334455, 0xbbd604d2, 0xd2bbbfd6, 0x709039a9, 0xa9704990, 0x89808707, 0x7890e80, 0xa7f2c133, 0x33a766f2, 0xb6c1ec2d, 0x2db65ac1, 0x22665a3c, 0x3c227866, 0x92adb815, 0x15922aad, 0x2060a9c9, 0xc9208960, 0x49db5c87, 0x874915db, 0xff1ab0aa, 0xaaff4f1a, 0x7888d850, 0x5078a088, 0x7a8e2ba5, 0xa57a518e, 0x8f8a8903, 0x38f068a, 0xf8134a59, 0x59f8b213, 0x809b9209, 0x980129b, 0x1739231a, 0x1a173439, 0xda751065, 0x65daca75, 0x315384d7, 0xd731b553, 0xc651d584, 0x84c61351, 0xb8d303d0, 0xd0b8bbd3, 0xc35edc82, 0x82c31f5e, 0xb0cbe229, 0x29b052cb, 0x7799c35a, 0x5a77b499, 0x11332d1e, 0x1e113c33, 0xcb463d7b, 0x7bcbf646, 0xfc1fb7a8, 0xa8fc4b1f, 0xd6610c6d, 0x6dd6da61, 0x3a4e622c, 0x2c3a584e}; + +#define GROESTL_ROTATE_COLUMN_DOWN(v1, v2, amount_bytes, temp_var) \ + { \ + temp_var = (v1 << (8 * amount_bytes)) | (v2 >> (8 * (4 - amount_bytes))); \ + v2 = (v2 << (8 * amount_bytes)) | (v1 >> (8 * (4 - amount_bytes))); \ + v1 = temp_var; \ + } + +#define GROESTL_COLUMN(x, y, i, c0, c1, c2, c3, c4, c5, c6, c7, tv1, tv2, tu, tl, t) \ + tu = d_groestl_T[2 * (uint32_t)x[4 * c0 + 0]]; \ + tl = d_groestl_T[2 * (uint32_t)x[4 * c0 + 0] + 1]; \ + tv1 = d_groestl_T[2 * (uint32_t)x[4 * c1 + 1]]; \ + tv2 = d_groestl_T[2 * (uint32_t)x[4 * c1 + 1] + 1]; \ + GROESTL_ROTATE_COLUMN_DOWN(tv1, tv2, 1, t) \ + tu ^= tv1; \ + tl ^= tv2; \ + tv1 = d_groestl_T[2 * (uint32_t)x[4 * c2 + 2]]; \ + tv2 = d_groestl_T[2 * (uint32_t)x[4 * c2 + 2] + 1]; \ + GROESTL_ROTATE_COLUMN_DOWN(tv1, tv2, 2, t) \ + tu ^= tv1; \ + tl ^= tv2; \ + tv1 = d_groestl_T[2 * (uint32_t)x[4 * c3 + 3]]; \ + tv2 = d_groestl_T[2 * (uint32_t)x[4 * c3 + 3] + 1]; \ + GROESTL_ROTATE_COLUMN_DOWN(tv1, tv2, 3, t) \ + tu ^= tv1; \ + tl ^= tv2; \ + tl ^= d_groestl_T[2 * (uint32_t)x[4 * c4 + 0]]; \ + tu ^= d_groestl_T[2 * (uint32_t)x[4 * c4 + 0] + 1]; \ + tv1 = d_groestl_T[2 * (uint32_t)x[4 * c5 + 1]]; \ + tv2 = d_groestl_T[2 * (uint32_t)x[4 * c5 + 1] + 1]; \ + GROESTL_ROTATE_COLUMN_DOWN(tv1, tv2, 1, t) \ + tl ^= tv1; \ + tu ^= tv2; \ + tv1 = d_groestl_T[2 * (uint32_t)x[4 * c6 + 2]]; \ + tv2 = d_groestl_T[2 * (uint32_t)x[4 * c6 + 2] + 1]; \ + GROESTL_ROTATE_COLUMN_DOWN(tv1, tv2, 2, t) \ + tl ^= tv1; \ + tu ^= tv2; \ + tv1 = d_groestl_T[2 * (uint32_t)x[4 * c7 + 3]]; \ + tv2 = d_groestl_T[2 * (uint32_t)x[4 * c7 + 3] + 1]; \ + GROESTL_ROTATE_COLUMN_DOWN(tv1, tv2, 3, t) \ + tl ^= tv1; \ + tu ^= tv2; \ + y[i] = tu; \ + y[i + 1] = tl; + +__device__ void cn_groestl_RND512P(uint8_t* __restrict__ x, uint32_t* __restrict__ y, uint32_t r) { uint32_t temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp; uint32_t* x32 = (uint32_t*)x; - x32[ 0] ^= 0x00000000^r; - x32[ 2] ^= 0x00000010^r; - x32[ 4] ^= 0x00000020^r; - x32[ 6] ^= 0x00000030^r; - x32[ 8] ^= 0x00000040^r; - x32[10] ^= 0x00000050^r; - x32[12] ^= 0x00000060^r; - x32[14] ^= 0x00000070^r; - GROESTL_COLUMN(x,y, 0, 0, 2, 4, 6, 9, 11, 13, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 2, 2, 4, 6, 8, 11, 13, 15, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 4, 4, 6, 8, 10, 13, 15, 1, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 6, 6, 8, 10, 12, 15, 1, 3, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 8, 8, 10, 12, 14, 1, 3, 5, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y,10, 10, 12, 14, 0, 3, 5, 7, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y,12, 12, 14, 0, 2, 5, 7, 9, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y,14, 14, 0, 2, 4, 7, 9, 11, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + x32[0] ^= 0x00000000 ^ r; + x32[2] ^= 0x00000010 ^ r; + x32[4] ^= 0x00000020 ^ r; + x32[6] ^= 0x00000030 ^ r; + x32[8] ^= 0x00000040 ^ r; + x32[10] ^= 0x00000050 ^ r; + x32[12] ^= 0x00000060 ^ r; + x32[14] ^= 0x00000070 ^ r; + GROESTL_COLUMN(x, y, 0, 0, 2, 4, 6, 9, 11, 13, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 2, 2, 4, 6, 8, 11, 13, 15, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 4, 4, 6, 8, 10, 13, 15, 1, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 6, 6, 8, 10, 12, 15, 1, 3, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 8, 8, 10, 12, 14, 1, 3, 5, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 10, 10, 12, 14, 0, 3, 5, 7, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 12, 12, 14, 0, 2, 5, 7, 9, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 14, 14, 0, 2, 4, 7, 9, 11, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); } -__device__ void cn_groestl_RND512Q(uint8_t * __restrict__ x, uint32_t * __restrict__ y, uint32_t r) +__device__ void cn_groestl_RND512Q(uint8_t* __restrict__ x, uint32_t* __restrict__ y, uint32_t r) { uint32_t temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp; uint32_t* x32 = (uint32_t*)x; - x32[ 0] = ~x32[ 0]; - x32[ 1] ^= 0xffffffff^r; - x32[ 2] = ~x32[ 2]; - x32[ 3] ^= 0xefffffff^r; - x32[ 4] = ~x32[ 4]; - x32[ 5] ^= 0xdfffffff^r; - x32[ 6] = ~x32[ 6]; - x32[ 7] ^= 0xcfffffff^r; - x32[ 8] = ~x32[ 8]; - x32[ 9] ^= 0xbfffffff^r; + x32[0] = ~x32[0]; + x32[1] ^= 0xffffffff ^ r; + x32[2] = ~x32[2]; + x32[3] ^= 0xefffffff ^ r; + x32[4] = ~x32[4]; + x32[5] ^= 0xdfffffff ^ r; + x32[6] = ~x32[6]; + x32[7] ^= 0xcfffffff ^ r; + x32[8] = ~x32[8]; + x32[9] ^= 0xbfffffff ^ r; x32[10] = ~x32[10]; - x32[11] ^= 0xafffffff^r; + x32[11] ^= 0xafffffff ^ r; x32[12] = ~x32[12]; - x32[13] ^= 0x9fffffff^r; + x32[13] ^= 0x9fffffff ^ r; x32[14] = ~x32[14]; - x32[15] ^= 0x8fffffff^r; - GROESTL_COLUMN(x,y, 0, 2, 6, 10, 14, 1, 5, 9, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 2, 4, 8, 12, 0, 3, 7, 11, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 4, 6, 10, 14, 2, 5, 9, 13, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 6, 8, 12, 0, 4, 7, 11, 15, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y, 8, 10, 14, 2, 6, 9, 13, 1, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y,10, 12, 0, 4, 8, 11, 15, 3, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y,12, 14, 2, 6, 10, 13, 1, 5, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); - GROESTL_COLUMN(x,y,14, 0, 4, 8, 12, 15, 3, 7, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + x32[15] ^= 0x8fffffff ^ r; + GROESTL_COLUMN(x, y, 0, 2, 6, 10, 14, 1, 5, 9, 13, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 2, 4, 8, 12, 0, 3, 7, 11, 15, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 4, 6, 10, 14, 2, 5, 9, 13, 1, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 6, 8, 12, 0, 4, 7, 11, 15, 3, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 8, 10, 14, 2, 6, 9, 13, 1, 5, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 10, 12, 0, 4, 8, 11, 15, 3, 7, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 12, 14, 2, 6, 10, 13, 1, 5, 9, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); + GROESTL_COLUMN(x, y, 14, 0, 4, 8, 12, 15, 3, 7, 11, temp_v1, temp_v2, temp_upper_value, temp_lower_value, temp); } -__device__ void cn_groestl_F512(uint32_t * __restrict__ h, const uint32_t * __restrict__ m) +__device__ void cn_groestl_F512(uint32_t* __restrict__ h, const uint32_t* __restrict__ m) { int i; - uint32_t Ptmp[2*GROESTL_COLS512]; - uint32_t Qtmp[2*GROESTL_COLS512]; - uint32_t y[2*GROESTL_COLS512]; - uint32_t z[2*GROESTL_COLS512]; + uint32_t Ptmp[2 * GROESTL_COLS512]; + uint32_t Qtmp[2 * GROESTL_COLS512]; + uint32_t y[2 * GROESTL_COLS512]; + uint32_t z[2 * GROESTL_COLS512]; - for (i = 0; i < 2*GROESTL_COLS512; i++) + for(i = 0; i < 2 * GROESTL_COLS512; i++) { z[i] = m[i]; - Ptmp[i] = h[i]^m[i]; + Ptmp[i] = h[i] ^ m[i]; } cn_groestl_RND512Q((uint8_t*)z, y, 0x00000000); @@ -195,18 +164,18 @@ __device__ void cn_groestl_F512(uint32_t * __restrict__ h, const uint32_t * __re cn_groestl_RND512P((uint8_t*)z, y, 0x00000008); cn_groestl_RND512P((uint8_t*)y, Ptmp, 0x00000009); - for (i = 0; i < 2*GROESTL_COLS512; i++) - h[i] ^= Ptmp[i]^Qtmp[i]; + for(i = 0; i < 2 * GROESTL_COLS512; i++) + h[i] ^= Ptmp[i] ^ Qtmp[i]; } -__device__ void cn_groestl_outputtransformation(groestlHashState *ctx) +__device__ void cn_groestl_outputtransformation(groestlHashState* ctx) { int j; - uint32_t temp[2*GROESTL_COLS512]; - uint32_t y[2*GROESTL_COLS512]; - uint32_t z[2*GROESTL_COLS512]; + uint32_t temp[2 * GROESTL_COLS512]; + uint32_t y[2 * GROESTL_COLS512]; + uint32_t z[2 * GROESTL_COLS512]; - for (j = 0; j < 2*GROESTL_COLS512; j++) + for(j = 0; j < 2 * GROESTL_COLS512; j++) temp[j] = ctx->chaining[j]; cn_groestl_RND512P((uint8_t*)temp, y, 0x00000000); @@ -220,33 +189,33 @@ __device__ void cn_groestl_outputtransformation(groestlHashState *ctx) cn_groestl_RND512P((uint8_t*)z, y, 0x00000008); cn_groestl_RND512P((uint8_t*)y, temp, 0x00000009); - for (j = 0; j < 2*GROESTL_COLS512; j++) + for(j = 0; j < 2 * GROESTL_COLS512; j++) ctx->chaining[j] ^= temp[j]; } -__device__ void cn_groestl_transform(groestlHashState * __restrict__ ctx, - const uint8_t * __restrict__ input, int msglen) +__device__ void cn_groestl_transform(groestlHashState* __restrict__ ctx, + const uint8_t* __restrict__ input, int msglen) { - for (; msglen >= GROESTL_SIZE512; msglen -= GROESTL_SIZE512, input += GROESTL_SIZE512) + for(; msglen >= GROESTL_SIZE512; msglen -= GROESTL_SIZE512, input += GROESTL_SIZE512) { - cn_groestl_F512(ctx->chaining,(uint32_t*)input); + cn_groestl_F512(ctx->chaining, (uint32_t*)input); ctx->block_counter1++; - if (ctx->block_counter1 == 0) + if(ctx->block_counter1 == 0) ctx->block_counter2++; } } -__device__ void cn_groestl_final(groestlHashState* __restrict__ ctx, - BitSequence* __restrict__ output) +__device__ void cn_groestl_final(groestlHashState* __restrict__ ctx, + BitSequence* __restrict__ output) { - int i, j = 0, hashbytelen = GROESTL_HASH_BIT_LEN/8; - uint8_t *s = (BitSequence*)ctx->chaining; + int i, j = 0, hashbytelen = GROESTL_HASH_BIT_LEN / 8; + uint8_t* s = (BitSequence*)ctx->chaining; - if (ctx->bits_in_last_byte) + if(ctx->bits_in_last_byte) { - ctx->buffer[(int)ctx->buf_ptr-1] &= ((1<bits_in_last_byte)-1)<<(8-ctx->bits_in_last_byte); - ctx->buffer[(int)ctx->buf_ptr-1] ^= 0x1<<(7-ctx->bits_in_last_byte); + ctx->buffer[(int)ctx->buf_ptr - 1] &= ((1 << ctx->bits_in_last_byte) - 1) << (8 - ctx->bits_in_last_byte); + ctx->buffer[(int)ctx->buf_ptr - 1] ^= 0x1 << (7 - ctx->bits_in_last_byte); ctx->bits_in_last_byte = 0; } else @@ -254,29 +223,29 @@ __device__ void cn_groestl_final(groestlHashState* __restrict__ ctx, ctx->buffer[(int)ctx->buf_ptr++] = 0x80; } - if (ctx->buf_ptr > GROESTL_SIZE512-GROESTL_LENGTHFIELDLEN) + if(ctx->buf_ptr > GROESTL_SIZE512 - GROESTL_LENGTHFIELDLEN) { - while (ctx->buf_ptr < GROESTL_SIZE512) + while(ctx->buf_ptr < GROESTL_SIZE512) ctx->buffer[(int)ctx->buf_ptr++] = 0; cn_groestl_transform(ctx, ctx->buffer, GROESTL_SIZE512); ctx->buf_ptr = 0; } - while (ctx->buf_ptr < GROESTL_SIZE512-GROESTL_LENGTHFIELDLEN) + while(ctx->buf_ptr < GROESTL_SIZE512 - GROESTL_LENGTHFIELDLEN) ctx->buffer[(int)ctx->buf_ptr++] = 0; ctx->block_counter1++; - if (ctx->block_counter1 == 0) + if(ctx->block_counter1 == 0) ctx->block_counter2++; ctx->buf_ptr = GROESTL_SIZE512; - while (ctx->buf_ptr > GROESTL_SIZE512-(int)sizeof(uint32_t)) + while(ctx->buf_ptr > GROESTL_SIZE512 - (int)sizeof(uint32_t)) { ctx->buffer[(int)--ctx->buf_ptr] = (uint8_t)ctx->block_counter1; ctx->block_counter1 >>= 8; } - while (ctx->buf_ptr > GROESTL_SIZE512-GROESTL_LENGTHFIELDLEN) + while(ctx->buf_ptr > GROESTL_SIZE512 - GROESTL_LENGTHFIELDLEN) { ctx->buffer[(int)--ctx->buf_ptr] = (uint8_t)ctx->block_counter2; ctx->block_counter2 >>= 8; @@ -284,12 +253,12 @@ __device__ void cn_groestl_final(groestlHashState* __restrict__ ctx, cn_groestl_transform(ctx, ctx->buffer, GROESTL_SIZE512); cn_groestl_outputtransformation(ctx); - for (i = GROESTL_SIZE512-hashbytelen; i < GROESTL_SIZE512; i++,j++) + for(i = GROESTL_SIZE512 - hashbytelen; i < GROESTL_SIZE512; i++, j++) output[j] = s[i]; - for (i = 0; i < GROESTL_COLS512; i++) + for(i = 0; i < GROESTL_COLS512; i++) ctx->chaining[i] = 0; - for (i = 0; i < GROESTL_SIZE512; i++) + for(i = 0; i < GROESTL_SIZE512; i++) ctx->buffer[i] = 0; } @@ -297,17 +266,17 @@ __device__ void cn_groestl_update(groestlHashState* __restrict__ ctx, const BitSequence* __restrict__ input, DataLength databitlen) { int index = 0; - int msglen = (int)(databitlen/8); - int rem = (int)(databitlen%8); + int msglen = (int)(databitlen / 8); + int rem = (int)(databitlen % 8); - if (ctx->buf_ptr) + if(ctx->buf_ptr) { - while (ctx->buf_ptr < GROESTL_SIZE512 && index < msglen) + while(ctx->buf_ptr < GROESTL_SIZE512 && index < msglen) ctx->buffer[(int)ctx->buf_ptr++] = input[index++]; - if (ctx->buf_ptr < GROESTL_SIZE512) + if(ctx->buf_ptr < GROESTL_SIZE512) { - if (rem) + if(rem) { ctx->bits_in_last_byte = rem; ctx->buffer[(int)ctx->buf_ptr++] = input[index]; @@ -319,13 +288,13 @@ __device__ void cn_groestl_update(groestlHashState* __restrict__ ctx, cn_groestl_transform(ctx, ctx->buffer, GROESTL_SIZE512); } - cn_groestl_transform(ctx, input+index, msglen-index); - index += ((msglen-index)/GROESTL_SIZE512)*GROESTL_SIZE512; + cn_groestl_transform(ctx, input + index, msglen - index); + index += ((msglen - index) / GROESTL_SIZE512) * GROESTL_SIZE512; - while (index < msglen) + while(index < msglen) ctx->buffer[(int)ctx->buf_ptr++] = input[index++]; - if (rem) + if(rem) { ctx->bits_in_last_byte = rem; ctx->buffer[(int)ctx->buf_ptr++] = input[index]; @@ -336,17 +305,17 @@ __device__ void cn_groestl_init(groestlHashState* ctx) { int i = 0; - for(;i<(GROESTL_SIZE512/sizeof(uint32_t));i++) + for(; i < (GROESTL_SIZE512 / sizeof(uint32_t)); i++) ctx->chaining[i] = 0; - ctx->chaining[2*GROESTL_COLS512-1] = u32BIG((uint32_t)GROESTL_HASH_BIT_LEN); + ctx->chaining[2 * GROESTL_COLS512 - 1] = u32BIG((uint32_t)GROESTL_HASH_BIT_LEN); ctx->buf_ptr = 0; ctx->block_counter1 = 0; ctx->block_counter2 = 0; ctx->bits_in_last_byte = 0; } -__device__ void cn_groestl(const BitSequence * __restrict__ data, DataLength len, BitSequence * __restrict__ hashval) +__device__ void cn_groestl(const BitSequence* __restrict__ data, DataLength len, BitSequence* __restrict__ hashval) { DataLength databitlen = len << 3; groestlHashState context; diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_jh.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_jh.hpp index 284039ff4..1019a9b9c 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_jh.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_jh.hpp @@ -1,6 +1,7 @@ #include -typedef struct { +typedef struct +{ int hashbitlen; unsigned long long databitlen; unsigned long long datasize_in_buffer; @@ -9,159 +10,175 @@ typedef struct { } jhHashState; __constant__ unsigned char d_JH256_H0[512] = -{ - 0xeb, 0x98, 0xa3, 0x41, 0x2c, 0x20, 0xd3, 0xeb, 0x92, 0xcd, 0xbe, 0x7b, 0x9c, 0xb2, 0x45, 0xc1, - 0x1c, 0x93, 0x51, 0x91, 0x60, 0xd4, 0xc7, 0xfa, 0x26, 0x0, 0x82, 0xd6, 0x7e, 0x50, 0x8a, 0x3, - 0xa4, 0x23, 0x9e, 0x26, 0x77, 0x26, 0xb9, 0x45, 0xe0, 0xfb, 0x1a, 0x48, 0xd4, 0x1a, 0x94, 0x77, - 0xcd, 0xb5, 0xab, 0x26, 0x2, 0x6b, 0x17, 0x7a, 0x56, 0xf0, 0x24, 0x42, 0xf, 0xff, 0x2f, 0xa8, - 0x71, 0xa3, 0x96, 0x89, 0x7f, 0x2e, 0x4d, 0x75, 0x1d, 0x14, 0x49, 0x8, 0xf7, 0x7d, 0xe2, 0x62, - 0x27, 0x76, 0x95, 0xf7, 0x76, 0x24, 0x8f, 0x94, 0x87, 0xd5, 0xb6, 0x57, 0x47, 0x80, 0x29, 0x6c, - 0x5c, 0x5e, 0x27, 0x2d, 0xac, 0x8e, 0xd, 0x6c, 0x51, 0x84, 0x50, 0xc6, 0x57, 0x5, 0x7a, 0xf, - 0x7b, 0xe4, 0xd3, 0x67, 0x70, 0x24, 0x12, 0xea, 0x89, 0xe3, 0xab, 0x13, 0xd3, 0x1c, 0xd7, 0x69 -}; + { + 0xeb, 0x98, 0xa3, 0x41, 0x2c, 0x20, 0xd3, 0xeb, 0x92, 0xcd, 0xbe, 0x7b, 0x9c, 0xb2, 0x45, 0xc1, + 0x1c, 0x93, 0x51, 0x91, 0x60, 0xd4, 0xc7, 0xfa, 0x26, 0x0, 0x82, 0xd6, 0x7e, 0x50, 0x8a, 0x3, + 0xa4, 0x23, 0x9e, 0x26, 0x77, 0x26, 0xb9, 0x45, 0xe0, 0xfb, 0x1a, 0x48, 0xd4, 0x1a, 0x94, 0x77, + 0xcd, 0xb5, 0xab, 0x26, 0x2, 0x6b, 0x17, 0x7a, 0x56, 0xf0, 0x24, 0x42, 0xf, 0xff, 0x2f, 0xa8, + 0x71, 0xa3, 0x96, 0x89, 0x7f, 0x2e, 0x4d, 0x75, 0x1d, 0x14, 0x49, 0x8, 0xf7, 0x7d, 0xe2, 0x62, + 0x27, 0x76, 0x95, 0xf7, 0x76, 0x24, 0x8f, 0x94, 0x87, 0xd5, 0xb6, 0x57, 0x47, 0x80, 0x29, 0x6c, + 0x5c, 0x5e, 0x27, 0x2d, 0xac, 0x8e, 0xd, 0x6c, 0x51, 0x84, 0x50, 0xc6, 0x57, 0x5, 0x7a, 0xf, + 0x7b, 0xe4, 0xd3, 0x67, 0x70, 0x24, 0x12, 0xea, 0x89, 0xe3, 0xab, 0x13, 0xd3, 0x1c, 0xd7, 0x69}; __constant__ unsigned char d_E8_rc[42][32] = -{ - {0x72, 0xd5, 0xde, 0xa2, 0xdf, 0x15, 0xf8, 0x67, 0x7b, 0x84, 0x15, 0xa, 0xb7, 0x23, 0x15, 0x57, 0x81, 0xab, 0xd6, 0x90, 0x4d, 0x5a, 0x87, 0xf6, 0x4e, 0x9f, 0x4f, 0xc5, 0xc3, 0xd1, 0x2b, 0x40}, - {0xea, 0x98, 0x3a, 0xe0, 0x5c, 0x45, 0xfa, 0x9c, 0x3, 0xc5, 0xd2, 0x99, 0x66, 0xb2, 0x99, 0x9a, 0x66, 0x2, 0x96, 0xb4, 0xf2, 0xbb, 0x53, 0x8a, 0xb5, 0x56, 0x14, 0x1a, 0x88, 0xdb, 0xa2, 0x31}, - {0x3, 0xa3, 0x5a, 0x5c, 0x9a, 0x19, 0xe, 0xdb, 0x40, 0x3f, 0xb2, 0xa, 0x87, 0xc1, 0x44, 0x10, 0x1c, 0x5, 0x19, 0x80, 0x84, 0x9e, 0x95, 0x1d, 0x6f, 0x33, 0xeb, 0xad, 0x5e, 0xe7, 0xcd, 0xdc}, - {0x10, 0xba, 0x13, 0x92, 0x2, 0xbf, 0x6b, 0x41, 0xdc, 0x78, 0x65, 0x15, 0xf7, 0xbb, 0x27, 0xd0, 0xa, 0x2c, 0x81, 0x39, 0x37, 0xaa, 0x78, 0x50, 0x3f, 0x1a, 0xbf, 0xd2, 0x41, 0x0, 0x91, 0xd3}, - {0x42, 0x2d, 0x5a, 0xd, 0xf6, 0xcc, 0x7e, 0x90, 0xdd, 0x62, 0x9f, 0x9c, 0x92, 0xc0, 0x97, 0xce, 0x18, 0x5c, 0xa7, 0xb, 0xc7, 0x2b, 0x44, 0xac, 0xd1, 0xdf, 0x65, 0xd6, 0x63, 0xc6, 0xfc, 0x23}, - {0x97, 0x6e, 0x6c, 0x3, 0x9e, 0xe0, 0xb8, 0x1a, 0x21, 0x5, 0x45, 0x7e, 0x44, 0x6c, 0xec, 0xa8, 0xee, 0xf1, 0x3, 0xbb, 0x5d, 0x8e, 0x61, 0xfa, 0xfd, 0x96, 0x97, 0xb2, 0x94, 0x83, 0x81, 0x97}, - {0x4a, 0x8e, 0x85, 0x37, 0xdb, 0x3, 0x30, 0x2f, 0x2a, 0x67, 0x8d, 0x2d, 0xfb, 0x9f, 0x6a, 0x95, 0x8a, 0xfe, 0x73, 0x81, 0xf8, 0xb8, 0x69, 0x6c, 0x8a, 0xc7, 0x72, 0x46, 0xc0, 0x7f, 0x42, 0x14}, - {0xc5, 0xf4, 0x15, 0x8f, 0xbd, 0xc7, 0x5e, 0xc4, 0x75, 0x44, 0x6f, 0xa7, 0x8f, 0x11, 0xbb, 0x80, 0x52, 0xde, 0x75, 0xb7, 0xae, 0xe4, 0x88, 0xbc, 0x82, 0xb8, 0x0, 0x1e, 0x98, 0xa6, 0xa3, 0xf4}, - {0x8e, 0xf4, 0x8f, 0x33, 0xa9, 0xa3, 0x63, 0x15, 0xaa, 0x5f, 0x56, 0x24, 0xd5, 0xb7, 0xf9, 0x89, 0xb6, 0xf1, 0xed, 0x20, 0x7c, 0x5a, 0xe0, 0xfd, 0x36, 0xca, 0xe9, 0x5a, 0x6, 0x42, 0x2c, 0x36}, - {0xce, 0x29, 0x35, 0x43, 0x4e, 0xfe, 0x98, 0x3d, 0x53, 0x3a, 0xf9, 0x74, 0x73, 0x9a, 0x4b, 0xa7, 0xd0, 0xf5, 0x1f, 0x59, 0x6f, 0x4e, 0x81, 0x86, 0xe, 0x9d, 0xad, 0x81, 0xaf, 0xd8, 0x5a, 0x9f}, - {0xa7, 0x5, 0x6, 0x67, 0xee, 0x34, 0x62, 0x6a, 0x8b, 0xb, 0x28, 0xbe, 0x6e, 0xb9, 0x17, 0x27, 0x47, 0x74, 0x7, 0x26, 0xc6, 0x80, 0x10, 0x3f, 0xe0, 0xa0, 0x7e, 0x6f, 0xc6, 0x7e, 0x48, 0x7b}, - {0xd, 0x55, 0xa, 0xa5, 0x4a, 0xf8, 0xa4, 0xc0, 0x91, 0xe3, 0xe7, 0x9f, 0x97, 0x8e, 0xf1, 0x9e, 0x86, 0x76, 0x72, 0x81, 0x50, 0x60, 0x8d, 0xd4, 0x7e, 0x9e, 0x5a, 0x41, 0xf3, 0xe5, 0xb0, 0x62}, - {0xfc, 0x9f, 0x1f, 0xec, 0x40, 0x54, 0x20, 0x7a, 0xe3, 0xe4, 0x1a, 0x0, 0xce, 0xf4, 0xc9, 0x84, 0x4f, 0xd7, 0x94, 0xf5, 0x9d, 0xfa, 0x95, 0xd8, 0x55, 0x2e, 0x7e, 0x11, 0x24, 0xc3, 0x54, 0xa5}, - {0x5b, 0xdf, 0x72, 0x28, 0xbd, 0xfe, 0x6e, 0x28, 0x78, 0xf5, 0x7f, 0xe2, 0xf, 0xa5, 0xc4, 0xb2, 0x5, 0x89, 0x7c, 0xef, 0xee, 0x49, 0xd3, 0x2e, 0x44, 0x7e, 0x93, 0x85, 0xeb, 0x28, 0x59, 0x7f}, - {0x70, 0x5f, 0x69, 0x37, 0xb3, 0x24, 0x31, 0x4a, 0x5e, 0x86, 0x28, 0xf1, 0x1d, 0xd6, 0xe4, 0x65, 0xc7, 0x1b, 0x77, 0x4, 0x51, 0xb9, 0x20, 0xe7, 0x74, 0xfe, 0x43, 0xe8, 0x23, 0xd4, 0x87, 0x8a}, - {0x7d, 0x29, 0xe8, 0xa3, 0x92, 0x76, 0x94, 0xf2, 0xdd, 0xcb, 0x7a, 0x9, 0x9b, 0x30, 0xd9, 0xc1, 0x1d, 0x1b, 0x30, 0xfb, 0x5b, 0xdc, 0x1b, 0xe0, 0xda, 0x24, 0x49, 0x4f, 0xf2, 0x9c, 0x82, 0xbf}, - {0xa4, 0xe7, 0xba, 0x31, 0xb4, 0x70, 0xbf, 0xff, 0xd, 0x32, 0x44, 0x5, 0xde, 0xf8, 0xbc, 0x48, 0x3b, 0xae, 0xfc, 0x32, 0x53, 0xbb, 0xd3, 0x39, 0x45, 0x9f, 0xc3, 0xc1, 0xe0, 0x29, 0x8b, 0xa0}, - {0xe5, 0xc9, 0x5, 0xfd, 0xf7, 0xae, 0x9, 0xf, 0x94, 0x70, 0x34, 0x12, 0x42, 0x90, 0xf1, 0x34, 0xa2, 0x71, 0xb7, 0x1, 0xe3, 0x44, 0xed, 0x95, 0xe9, 0x3b, 0x8e, 0x36, 0x4f, 0x2f, 0x98, 0x4a}, - {0x88, 0x40, 0x1d, 0x63, 0xa0, 0x6c, 0xf6, 0x15, 0x47, 0xc1, 0x44, 0x4b, 0x87, 0x52, 0xaf, 0xff, 0x7e, 0xbb, 0x4a, 0xf1, 0xe2, 0xa, 0xc6, 0x30, 0x46, 0x70, 0xb6, 0xc5, 0xcc, 0x6e, 0x8c, 0xe6}, - {0xa4, 0xd5, 0xa4, 0x56, 0xbd, 0x4f, 0xca, 0x0, 0xda, 0x9d, 0x84, 0x4b, 0xc8, 0x3e, 0x18, 0xae, 0x73, 0x57, 0xce, 0x45, 0x30, 0x64, 0xd1, 0xad, 0xe8, 0xa6, 0xce, 0x68, 0x14, 0x5c, 0x25, 0x67}, - {0xa3, 0xda, 0x8c, 0xf2, 0xcb, 0xe, 0xe1, 0x16, 0x33, 0xe9, 0x6, 0x58, 0x9a, 0x94, 0x99, 0x9a, 0x1f, 0x60, 0xb2, 0x20, 0xc2, 0x6f, 0x84, 0x7b, 0xd1, 0xce, 0xac, 0x7f, 0xa0, 0xd1, 0x85, 0x18}, - {0x32, 0x59, 0x5b, 0xa1, 0x8d, 0xdd, 0x19, 0xd3, 0x50, 0x9a, 0x1c, 0xc0, 0xaa, 0xa5, 0xb4, 0x46, 0x9f, 0x3d, 0x63, 0x67, 0xe4, 0x4, 0x6b, 0xba, 0xf6, 0xca, 0x19, 0xab, 0xb, 0x56, 0xee, 0x7e}, - {0x1f, 0xb1, 0x79, 0xea, 0xa9, 0x28, 0x21, 0x74, 0xe9, 0xbd, 0xf7, 0x35, 0x3b, 0x36, 0x51, 0xee, 0x1d, 0x57, 0xac, 0x5a, 0x75, 0x50, 0xd3, 0x76, 0x3a, 0x46, 0xc2, 0xfe, 0xa3, 0x7d, 0x70, 0x1}, - {0xf7, 0x35, 0xc1, 0xaf, 0x98, 0xa4, 0xd8, 0x42, 0x78, 0xed, 0xec, 0x20, 0x9e, 0x6b, 0x67, 0x79, 0x41, 0x83, 0x63, 0x15, 0xea, 0x3a, 0xdb, 0xa8, 0xfa, 0xc3, 0x3b, 0x4d, 0x32, 0x83, 0x2c, 0x83}, - {0xa7, 0x40, 0x3b, 0x1f, 0x1c, 0x27, 0x47, 0xf3, 0x59, 0x40, 0xf0, 0x34, 0xb7, 0x2d, 0x76, 0x9a, 0xe7, 0x3e, 0x4e, 0x6c, 0xd2, 0x21, 0x4f, 0xfd, 0xb8, 0xfd, 0x8d, 0x39, 0xdc, 0x57, 0x59, 0xef}, - {0x8d, 0x9b, 0xc, 0x49, 0x2b, 0x49, 0xeb, 0xda, 0x5b, 0xa2, 0xd7, 0x49, 0x68, 0xf3, 0x70, 0xd, 0x7d, 0x3b, 0xae, 0xd0, 0x7a, 0x8d, 0x55, 0x84, 0xf5, 0xa5, 0xe9, 0xf0, 0xe4, 0xf8, 0x8e, 0x65}, - {0xa0, 0xb8, 0xa2, 0xf4, 0x36, 0x10, 0x3b, 0x53, 0xc, 0xa8, 0x7, 0x9e, 0x75, 0x3e, 0xec, 0x5a, 0x91, 0x68, 0x94, 0x92, 0x56, 0xe8, 0x88, 0x4f, 0x5b, 0xb0, 0x5c, 0x55, 0xf8, 0xba, 0xbc, 0x4c}, - {0xe3, 0xbb, 0x3b, 0x99, 0xf3, 0x87, 0x94, 0x7b, 0x75, 0xda, 0xf4, 0xd6, 0x72, 0x6b, 0x1c, 0x5d, 0x64, 0xae, 0xac, 0x28, 0xdc, 0x34, 0xb3, 0x6d, 0x6c, 0x34, 0xa5, 0x50, 0xb8, 0x28, 0xdb, 0x71}, - {0xf8, 0x61, 0xe2, 0xf2, 0x10, 0x8d, 0x51, 0x2a, 0xe3, 0xdb, 0x64, 0x33, 0x59, 0xdd, 0x75, 0xfc, 0x1c, 0xac, 0xbc, 0xf1, 0x43, 0xce, 0x3f, 0xa2, 0x67, 0xbb, 0xd1, 0x3c, 0x2, 0xe8, 0x43, 0xb0}, - {0x33, 0xa, 0x5b, 0xca, 0x88, 0x29, 0xa1, 0x75, 0x7f, 0x34, 0x19, 0x4d, 0xb4, 0x16, 0x53, 0x5c, 0x92, 0x3b, 0x94, 0xc3, 0xe, 0x79, 0x4d, 0x1e, 0x79, 0x74, 0x75, 0xd7, 0xb6, 0xee, 0xaf, 0x3f}, - {0xea, 0xa8, 0xd4, 0xf7, 0xbe, 0x1a, 0x39, 0x21, 0x5c, 0xf4, 0x7e, 0x9, 0x4c, 0x23, 0x27, 0x51, 0x26, 0xa3, 0x24, 0x53, 0xba, 0x32, 0x3c, 0xd2, 0x44, 0xa3, 0x17, 0x4a, 0x6d, 0xa6, 0xd5, 0xad}, - {0xb5, 0x1d, 0x3e, 0xa6, 0xaf, 0xf2, 0xc9, 0x8, 0x83, 0x59, 0x3d, 0x98, 0x91, 0x6b, 0x3c, 0x56, 0x4c, 0xf8, 0x7c, 0xa1, 0x72, 0x86, 0x60, 0x4d, 0x46, 0xe2, 0x3e, 0xcc, 0x8, 0x6e, 0xc7, 0xf6}, - {0x2f, 0x98, 0x33, 0xb3, 0xb1, 0xbc, 0x76, 0x5e, 0x2b, 0xd6, 0x66, 0xa5, 0xef, 0xc4, 0xe6, 0x2a, 0x6, 0xf4, 0xb6, 0xe8, 0xbe, 0xc1, 0xd4, 0x36, 0x74, 0xee, 0x82, 0x15, 0xbc, 0xef, 0x21, 0x63}, - {0xfd, 0xc1, 0x4e, 0xd, 0xf4, 0x53, 0xc9, 0x69, 0xa7, 0x7d, 0x5a, 0xc4, 0x6, 0x58, 0x58, 0x26, 0x7e, 0xc1, 0x14, 0x16, 0x6, 0xe0, 0xfa, 0x16, 0x7e, 0x90, 0xaf, 0x3d, 0x28, 0x63, 0x9d, 0x3f}, - {0xd2, 0xc9, 0xf2, 0xe3, 0x0, 0x9b, 0xd2, 0xc, 0x5f, 0xaa, 0xce, 0x30, 0xb7, 0xd4, 0xc, 0x30, 0x74, 0x2a, 0x51, 0x16, 0xf2, 0xe0, 0x32, 0x98, 0xd, 0xeb, 0x30, 0xd8, 0xe3, 0xce, 0xf8, 0x9a}, - {0x4b, 0xc5, 0x9e, 0x7b, 0xb5, 0xf1, 0x79, 0x92, 0xff, 0x51, 0xe6, 0x6e, 0x4, 0x86, 0x68, 0xd3, 0x9b, 0x23, 0x4d, 0x57, 0xe6, 0x96, 0x67, 0x31, 0xcc, 0xe6, 0xa6, 0xf3, 0x17, 0xa, 0x75, 0x5}, - {0xb1, 0x76, 0x81, 0xd9, 0x13, 0x32, 0x6c, 0xce, 0x3c, 0x17, 0x52, 0x84, 0xf8, 0x5, 0xa2, 0x62, 0xf4, 0x2b, 0xcb, 0xb3, 0x78, 0x47, 0x15, 0x47, 0xff, 0x46, 0x54, 0x82, 0x23, 0x93, 0x6a, 0x48}, - {0x38, 0xdf, 0x58, 0x7, 0x4e, 0x5e, 0x65, 0x65, 0xf2, 0xfc, 0x7c, 0x89, 0xfc, 0x86, 0x50, 0x8e, 0x31, 0x70, 0x2e, 0x44, 0xd0, 0xb, 0xca, 0x86, 0xf0, 0x40, 0x9, 0xa2, 0x30, 0x78, 0x47, 0x4e}, - {0x65, 0xa0, 0xee, 0x39, 0xd1, 0xf7, 0x38, 0x83, 0xf7, 0x5e, 0xe9, 0x37, 0xe4, 0x2c, 0x3a, 0xbd, 0x21, 0x97, 0xb2, 0x26, 0x1, 0x13, 0xf8, 0x6f, 0xa3, 0x44, 0xed, 0xd1, 0xef, 0x9f, 0xde, 0xe7}, - {0x8b, 0xa0, 0xdf, 0x15, 0x76, 0x25, 0x92, 0xd9, 0x3c, 0x85, 0xf7, 0xf6, 0x12, 0xdc, 0x42, 0xbe, 0xd8, 0xa7, 0xec, 0x7c, 0xab, 0x27, 0xb0, 0x7e, 0x53, 0x8d, 0x7d, 0xda, 0xaa, 0x3e, 0xa8, 0xde}, - {0xaa, 0x25, 0xce, 0x93, 0xbd, 0x2, 0x69, 0xd8, 0x5a, 0xf6, 0x43, 0xfd, 0x1a, 0x73, 0x8, 0xf9, 0xc0, 0x5f, 0xef, 0xda, 0x17, 0x4a, 0x19, 0xa5, 0x97, 0x4d, 0x66, 0x33, 0x4c, 0xfd, 0x21, 0x6a}, - {0x35, 0xb4, 0x98, 0x31, 0xdb, 0x41, 0x15, 0x70, 0xea, 0x1e, 0xf, 0xbb, 0xed, 0xcd, 0x54, 0x9b, 0x9a, 0xd0, 0x63, 0xa1, 0x51, 0x97, 0x40, 0x72, 0xf6, 0x75, 0x9d, 0xbf, 0x91, 0x47, 0x6f, 0xe2} -}; - -#define JH_SWAP1(x) (x) = ((((x) & 0x5555555555555555ULL) << 1) | (((x) & 0xaaaaaaaaaaaaaaaaULL) >> 1)); -#define JH_SWAP2(x) (x) = ((((x) & 0x3333333333333333ULL) << 2) | (((x) & 0xccccccccccccccccULL) >> 2)); -#define JH_SWAP4(x) (x) = ((((x) & 0x0f0f0f0f0f0f0f0fULL) << 4) | (((x) & 0xf0f0f0f0f0f0f0f0ULL) >> 4)); -#define JH_SWAP8(x) (x) = ((((x) & 0x00ff00ff00ff00ffULL) << 8) | (((x) & 0xff00ff00ff00ff00ULL) >> 8)); -#define JH_SWAP16(x) (x) = ((((x) & 0x0000ffff0000ffffULL) << 16) | (((x) & 0xffff0000ffff0000ULL) >> 16)); -#define JH_SWAP32(x) (x) = (((x) << 32) | ((x) >> 32)); - -#define JH_L(m0,m1,m2,m3,m4,m5,m6,m7) \ - (m4) ^= (m1); \ - (m5) ^= (m2); \ - (m6) ^= (m0) ^ (m3); \ - (m7) ^= (m0); \ - (m0) ^= (m5); \ - (m1) ^= (m6); \ - (m2) ^= (m4) ^ (m7); \ + { + {0x72, 0xd5, 0xde, 0xa2, 0xdf, 0x15, 0xf8, 0x67, 0x7b, 0x84, 0x15, 0xa, 0xb7, 0x23, 0x15, 0x57, 0x81, 0xab, 0xd6, 0x90, 0x4d, 0x5a, 0x87, 0xf6, 0x4e, 0x9f, 0x4f, 0xc5, 0xc3, 0xd1, 0x2b, 0x40}, + {0xea, 0x98, 0x3a, 0xe0, 0x5c, 0x45, 0xfa, 0x9c, 0x3, 0xc5, 0xd2, 0x99, 0x66, 0xb2, 0x99, 0x9a, 0x66, 0x2, 0x96, 0xb4, 0xf2, 0xbb, 0x53, 0x8a, 0xb5, 0x56, 0x14, 0x1a, 0x88, 0xdb, 0xa2, 0x31}, + {0x3, 0xa3, 0x5a, 0x5c, 0x9a, 0x19, 0xe, 0xdb, 0x40, 0x3f, 0xb2, 0xa, 0x87, 0xc1, 0x44, 0x10, 0x1c, 0x5, 0x19, 0x80, 0x84, 0x9e, 0x95, 0x1d, 0x6f, 0x33, 0xeb, 0xad, 0x5e, 0xe7, 0xcd, 0xdc}, + {0x10, 0xba, 0x13, 0x92, 0x2, 0xbf, 0x6b, 0x41, 0xdc, 0x78, 0x65, 0x15, 0xf7, 0xbb, 0x27, 0xd0, 0xa, 0x2c, 0x81, 0x39, 0x37, 0xaa, 0x78, 0x50, 0x3f, 0x1a, 0xbf, 0xd2, 0x41, 0x0, 0x91, 0xd3}, + {0x42, 0x2d, 0x5a, 0xd, 0xf6, 0xcc, 0x7e, 0x90, 0xdd, 0x62, 0x9f, 0x9c, 0x92, 0xc0, 0x97, 0xce, 0x18, 0x5c, 0xa7, 0xb, 0xc7, 0x2b, 0x44, 0xac, 0xd1, 0xdf, 0x65, 0xd6, 0x63, 0xc6, 0xfc, 0x23}, + {0x97, 0x6e, 0x6c, 0x3, 0x9e, 0xe0, 0xb8, 0x1a, 0x21, 0x5, 0x45, 0x7e, 0x44, 0x6c, 0xec, 0xa8, 0xee, 0xf1, 0x3, 0xbb, 0x5d, 0x8e, 0x61, 0xfa, 0xfd, 0x96, 0x97, 0xb2, 0x94, 0x83, 0x81, 0x97}, + {0x4a, 0x8e, 0x85, 0x37, 0xdb, 0x3, 0x30, 0x2f, 0x2a, 0x67, 0x8d, 0x2d, 0xfb, 0x9f, 0x6a, 0x95, 0x8a, 0xfe, 0x73, 0x81, 0xf8, 0xb8, 0x69, 0x6c, 0x8a, 0xc7, 0x72, 0x46, 0xc0, 0x7f, 0x42, 0x14}, + {0xc5, 0xf4, 0x15, 0x8f, 0xbd, 0xc7, 0x5e, 0xc4, 0x75, 0x44, 0x6f, 0xa7, 0x8f, 0x11, 0xbb, 0x80, 0x52, 0xde, 0x75, 0xb7, 0xae, 0xe4, 0x88, 0xbc, 0x82, 0xb8, 0x0, 0x1e, 0x98, 0xa6, 0xa3, 0xf4}, + {0x8e, 0xf4, 0x8f, 0x33, 0xa9, 0xa3, 0x63, 0x15, 0xaa, 0x5f, 0x56, 0x24, 0xd5, 0xb7, 0xf9, 0x89, 0xb6, 0xf1, 0xed, 0x20, 0x7c, 0x5a, 0xe0, 0xfd, 0x36, 0xca, 0xe9, 0x5a, 0x6, 0x42, 0x2c, 0x36}, + {0xce, 0x29, 0x35, 0x43, 0x4e, 0xfe, 0x98, 0x3d, 0x53, 0x3a, 0xf9, 0x74, 0x73, 0x9a, 0x4b, 0xa7, 0xd0, 0xf5, 0x1f, 0x59, 0x6f, 0x4e, 0x81, 0x86, 0xe, 0x9d, 0xad, 0x81, 0xaf, 0xd8, 0x5a, 0x9f}, + {0xa7, 0x5, 0x6, 0x67, 0xee, 0x34, 0x62, 0x6a, 0x8b, 0xb, 0x28, 0xbe, 0x6e, 0xb9, 0x17, 0x27, 0x47, 0x74, 0x7, 0x26, 0xc6, 0x80, 0x10, 0x3f, 0xe0, 0xa0, 0x7e, 0x6f, 0xc6, 0x7e, 0x48, 0x7b}, + {0xd, 0x55, 0xa, 0xa5, 0x4a, 0xf8, 0xa4, 0xc0, 0x91, 0xe3, 0xe7, 0x9f, 0x97, 0x8e, 0xf1, 0x9e, 0x86, 0x76, 0x72, 0x81, 0x50, 0x60, 0x8d, 0xd4, 0x7e, 0x9e, 0x5a, 0x41, 0xf3, 0xe5, 0xb0, 0x62}, + {0xfc, 0x9f, 0x1f, 0xec, 0x40, 0x54, 0x20, 0x7a, 0xe3, 0xe4, 0x1a, 0x0, 0xce, 0xf4, 0xc9, 0x84, 0x4f, 0xd7, 0x94, 0xf5, 0x9d, 0xfa, 0x95, 0xd8, 0x55, 0x2e, 0x7e, 0x11, 0x24, 0xc3, 0x54, 0xa5}, + {0x5b, 0xdf, 0x72, 0x28, 0xbd, 0xfe, 0x6e, 0x28, 0x78, 0xf5, 0x7f, 0xe2, 0xf, 0xa5, 0xc4, 0xb2, 0x5, 0x89, 0x7c, 0xef, 0xee, 0x49, 0xd3, 0x2e, 0x44, 0x7e, 0x93, 0x85, 0xeb, 0x28, 0x59, 0x7f}, + {0x70, 0x5f, 0x69, 0x37, 0xb3, 0x24, 0x31, 0x4a, 0x5e, 0x86, 0x28, 0xf1, 0x1d, 0xd6, 0xe4, 0x65, 0xc7, 0x1b, 0x77, 0x4, 0x51, 0xb9, 0x20, 0xe7, 0x74, 0xfe, 0x43, 0xe8, 0x23, 0xd4, 0x87, 0x8a}, + {0x7d, 0x29, 0xe8, 0xa3, 0x92, 0x76, 0x94, 0xf2, 0xdd, 0xcb, 0x7a, 0x9, 0x9b, 0x30, 0xd9, 0xc1, 0x1d, 0x1b, 0x30, 0xfb, 0x5b, 0xdc, 0x1b, 0xe0, 0xda, 0x24, 0x49, 0x4f, 0xf2, 0x9c, 0x82, 0xbf}, + {0xa4, 0xe7, 0xba, 0x31, 0xb4, 0x70, 0xbf, 0xff, 0xd, 0x32, 0x44, 0x5, 0xde, 0xf8, 0xbc, 0x48, 0x3b, 0xae, 0xfc, 0x32, 0x53, 0xbb, 0xd3, 0x39, 0x45, 0x9f, 0xc3, 0xc1, 0xe0, 0x29, 0x8b, 0xa0}, + {0xe5, 0xc9, 0x5, 0xfd, 0xf7, 0xae, 0x9, 0xf, 0x94, 0x70, 0x34, 0x12, 0x42, 0x90, 0xf1, 0x34, 0xa2, 0x71, 0xb7, 0x1, 0xe3, 0x44, 0xed, 0x95, 0xe9, 0x3b, 0x8e, 0x36, 0x4f, 0x2f, 0x98, 0x4a}, + {0x88, 0x40, 0x1d, 0x63, 0xa0, 0x6c, 0xf6, 0x15, 0x47, 0xc1, 0x44, 0x4b, 0x87, 0x52, 0xaf, 0xff, 0x7e, 0xbb, 0x4a, 0xf1, 0xe2, 0xa, 0xc6, 0x30, 0x46, 0x70, 0xb6, 0xc5, 0xcc, 0x6e, 0x8c, 0xe6}, + {0xa4, 0xd5, 0xa4, 0x56, 0xbd, 0x4f, 0xca, 0x0, 0xda, 0x9d, 0x84, 0x4b, 0xc8, 0x3e, 0x18, 0xae, 0x73, 0x57, 0xce, 0x45, 0x30, 0x64, 0xd1, 0xad, 0xe8, 0xa6, 0xce, 0x68, 0x14, 0x5c, 0x25, 0x67}, + {0xa3, 0xda, 0x8c, 0xf2, 0xcb, 0xe, 0xe1, 0x16, 0x33, 0xe9, 0x6, 0x58, 0x9a, 0x94, 0x99, 0x9a, 0x1f, 0x60, 0xb2, 0x20, 0xc2, 0x6f, 0x84, 0x7b, 0xd1, 0xce, 0xac, 0x7f, 0xa0, 0xd1, 0x85, 0x18}, + {0x32, 0x59, 0x5b, 0xa1, 0x8d, 0xdd, 0x19, 0xd3, 0x50, 0x9a, 0x1c, 0xc0, 0xaa, 0xa5, 0xb4, 0x46, 0x9f, 0x3d, 0x63, 0x67, 0xe4, 0x4, 0x6b, 0xba, 0xf6, 0xca, 0x19, 0xab, 0xb, 0x56, 0xee, 0x7e}, + {0x1f, 0xb1, 0x79, 0xea, 0xa9, 0x28, 0x21, 0x74, 0xe9, 0xbd, 0xf7, 0x35, 0x3b, 0x36, 0x51, 0xee, 0x1d, 0x57, 0xac, 0x5a, 0x75, 0x50, 0xd3, 0x76, 0x3a, 0x46, 0xc2, 0xfe, 0xa3, 0x7d, 0x70, 0x1}, + {0xf7, 0x35, 0xc1, 0xaf, 0x98, 0xa4, 0xd8, 0x42, 0x78, 0xed, 0xec, 0x20, 0x9e, 0x6b, 0x67, 0x79, 0x41, 0x83, 0x63, 0x15, 0xea, 0x3a, 0xdb, 0xa8, 0xfa, 0xc3, 0x3b, 0x4d, 0x32, 0x83, 0x2c, 0x83}, + {0xa7, 0x40, 0x3b, 0x1f, 0x1c, 0x27, 0x47, 0xf3, 0x59, 0x40, 0xf0, 0x34, 0xb7, 0x2d, 0x76, 0x9a, 0xe7, 0x3e, 0x4e, 0x6c, 0xd2, 0x21, 0x4f, 0xfd, 0xb8, 0xfd, 0x8d, 0x39, 0xdc, 0x57, 0x59, 0xef}, + {0x8d, 0x9b, 0xc, 0x49, 0x2b, 0x49, 0xeb, 0xda, 0x5b, 0xa2, 0xd7, 0x49, 0x68, 0xf3, 0x70, 0xd, 0x7d, 0x3b, 0xae, 0xd0, 0x7a, 0x8d, 0x55, 0x84, 0xf5, 0xa5, 0xe9, 0xf0, 0xe4, 0xf8, 0x8e, 0x65}, + {0xa0, 0xb8, 0xa2, 0xf4, 0x36, 0x10, 0x3b, 0x53, 0xc, 0xa8, 0x7, 0x9e, 0x75, 0x3e, 0xec, 0x5a, 0x91, 0x68, 0x94, 0x92, 0x56, 0xe8, 0x88, 0x4f, 0x5b, 0xb0, 0x5c, 0x55, 0xf8, 0xba, 0xbc, 0x4c}, + {0xe3, 0xbb, 0x3b, 0x99, 0xf3, 0x87, 0x94, 0x7b, 0x75, 0xda, 0xf4, 0xd6, 0x72, 0x6b, 0x1c, 0x5d, 0x64, 0xae, 0xac, 0x28, 0xdc, 0x34, 0xb3, 0x6d, 0x6c, 0x34, 0xa5, 0x50, 0xb8, 0x28, 0xdb, 0x71}, + {0xf8, 0x61, 0xe2, 0xf2, 0x10, 0x8d, 0x51, 0x2a, 0xe3, 0xdb, 0x64, 0x33, 0x59, 0xdd, 0x75, 0xfc, 0x1c, 0xac, 0xbc, 0xf1, 0x43, 0xce, 0x3f, 0xa2, 0x67, 0xbb, 0xd1, 0x3c, 0x2, 0xe8, 0x43, 0xb0}, + {0x33, 0xa, 0x5b, 0xca, 0x88, 0x29, 0xa1, 0x75, 0x7f, 0x34, 0x19, 0x4d, 0xb4, 0x16, 0x53, 0x5c, 0x92, 0x3b, 0x94, 0xc3, 0xe, 0x79, 0x4d, 0x1e, 0x79, 0x74, 0x75, 0xd7, 0xb6, 0xee, 0xaf, 0x3f}, + {0xea, 0xa8, 0xd4, 0xf7, 0xbe, 0x1a, 0x39, 0x21, 0x5c, 0xf4, 0x7e, 0x9, 0x4c, 0x23, 0x27, 0x51, 0x26, 0xa3, 0x24, 0x53, 0xba, 0x32, 0x3c, 0xd2, 0x44, 0xa3, 0x17, 0x4a, 0x6d, 0xa6, 0xd5, 0xad}, + {0xb5, 0x1d, 0x3e, 0xa6, 0xaf, 0xf2, 0xc9, 0x8, 0x83, 0x59, 0x3d, 0x98, 0x91, 0x6b, 0x3c, 0x56, 0x4c, 0xf8, 0x7c, 0xa1, 0x72, 0x86, 0x60, 0x4d, 0x46, 0xe2, 0x3e, 0xcc, 0x8, 0x6e, 0xc7, 0xf6}, + {0x2f, 0x98, 0x33, 0xb3, 0xb1, 0xbc, 0x76, 0x5e, 0x2b, 0xd6, 0x66, 0xa5, 0xef, 0xc4, 0xe6, 0x2a, 0x6, 0xf4, 0xb6, 0xe8, 0xbe, 0xc1, 0xd4, 0x36, 0x74, 0xee, 0x82, 0x15, 0xbc, 0xef, 0x21, 0x63}, + {0xfd, 0xc1, 0x4e, 0xd, 0xf4, 0x53, 0xc9, 0x69, 0xa7, 0x7d, 0x5a, 0xc4, 0x6, 0x58, 0x58, 0x26, 0x7e, 0xc1, 0x14, 0x16, 0x6, 0xe0, 0xfa, 0x16, 0x7e, 0x90, 0xaf, 0x3d, 0x28, 0x63, 0x9d, 0x3f}, + {0xd2, 0xc9, 0xf2, 0xe3, 0x0, 0x9b, 0xd2, 0xc, 0x5f, 0xaa, 0xce, 0x30, 0xb7, 0xd4, 0xc, 0x30, 0x74, 0x2a, 0x51, 0x16, 0xf2, 0xe0, 0x32, 0x98, 0xd, 0xeb, 0x30, 0xd8, 0xe3, 0xce, 0xf8, 0x9a}, + {0x4b, 0xc5, 0x9e, 0x7b, 0xb5, 0xf1, 0x79, 0x92, 0xff, 0x51, 0xe6, 0x6e, 0x4, 0x86, 0x68, 0xd3, 0x9b, 0x23, 0x4d, 0x57, 0xe6, 0x96, 0x67, 0x31, 0xcc, 0xe6, 0xa6, 0xf3, 0x17, 0xa, 0x75, 0x5}, + {0xb1, 0x76, 0x81, 0xd9, 0x13, 0x32, 0x6c, 0xce, 0x3c, 0x17, 0x52, 0x84, 0xf8, 0x5, 0xa2, 0x62, 0xf4, 0x2b, 0xcb, 0xb3, 0x78, 0x47, 0x15, 0x47, 0xff, 0x46, 0x54, 0x82, 0x23, 0x93, 0x6a, 0x48}, + {0x38, 0xdf, 0x58, 0x7, 0x4e, 0x5e, 0x65, 0x65, 0xf2, 0xfc, 0x7c, 0x89, 0xfc, 0x86, 0x50, 0x8e, 0x31, 0x70, 0x2e, 0x44, 0xd0, 0xb, 0xca, 0x86, 0xf0, 0x40, 0x9, 0xa2, 0x30, 0x78, 0x47, 0x4e}, + {0x65, 0xa0, 0xee, 0x39, 0xd1, 0xf7, 0x38, 0x83, 0xf7, 0x5e, 0xe9, 0x37, 0xe4, 0x2c, 0x3a, 0xbd, 0x21, 0x97, 0xb2, 0x26, 0x1, 0x13, 0xf8, 0x6f, 0xa3, 0x44, 0xed, 0xd1, 0xef, 0x9f, 0xde, 0xe7}, + {0x8b, 0xa0, 0xdf, 0x15, 0x76, 0x25, 0x92, 0xd9, 0x3c, 0x85, 0xf7, 0xf6, 0x12, 0xdc, 0x42, 0xbe, 0xd8, 0xa7, 0xec, 0x7c, 0xab, 0x27, 0xb0, 0x7e, 0x53, 0x8d, 0x7d, 0xda, 0xaa, 0x3e, 0xa8, 0xde}, + {0xaa, 0x25, 0xce, 0x93, 0xbd, 0x2, 0x69, 0xd8, 0x5a, 0xf6, 0x43, 0xfd, 0x1a, 0x73, 0x8, 0xf9, 0xc0, 0x5f, 0xef, 0xda, 0x17, 0x4a, 0x19, 0xa5, 0x97, 0x4d, 0x66, 0x33, 0x4c, 0xfd, 0x21, 0x6a}, + {0x35, 0xb4, 0x98, 0x31, 0xdb, 0x41, 0x15, 0x70, 0xea, 0x1e, 0xf, 0xbb, 0xed, 0xcd, 0x54, 0x9b, 0x9a, 0xd0, 0x63, 0xa1, 0x51, 0x97, 0x40, 0x72, 0xf6, 0x75, 0x9d, 0xbf, 0x91, 0x47, 0x6f, 0xe2}}; + +#define JH_SWAP1(x) (x) = ((((x)&0x5555555555555555ULL) << 1) | (((x)&0xaaaaaaaaaaaaaaaaULL) >> 1)); +#define JH_SWAP2(x) (x) = ((((x)&0x3333333333333333ULL) << 2) | (((x)&0xccccccccccccccccULL) >> 2)); +#define JH_SWAP4(x) (x) = ((((x)&0x0f0f0f0f0f0f0f0fULL) << 4) | (((x)&0xf0f0f0f0f0f0f0f0ULL) >> 4)); +#define JH_SWAP8(x) (x) = ((((x)&0x00ff00ff00ff00ffULL) << 8) | (((x)&0xff00ff00ff00ff00ULL) >> 8)); +#define JH_SWAP16(x) (x) = ((((x)&0x0000ffff0000ffffULL) << 16) | (((x)&0xffff0000ffff0000ULL) >> 16)); +#define JH_SWAP32(x) (x) = (((x) << 32) | ((x) >> 32)); + +#define JH_L(m0, m1, m2, m3, m4, m5, m6, m7) \ + (m4) ^= (m1); \ + (m5) ^= (m2); \ + (m6) ^= (m0) ^ (m3); \ + (m7) ^= (m0); \ + (m0) ^= (m5); \ + (m1) ^= (m6); \ + (m2) ^= (m4) ^ (m7); \ (m3) ^= (m4); -#define JH_SS(m0,m1,m2,m3,m4,m5,m6,m7,cc0,cc1) \ - m3 = ~(m3); \ - m7 = ~(m7); \ - m0 ^= ((~(m2)) & (cc0)); \ - m4 ^= ((~(m6)) & (cc1)); \ - temp0 = (cc0) ^ ((m0) & (m1));\ - temp1 = (cc1) ^ ((m4) & (m5));\ - m0 ^= ((m2) & (m3)); \ - m4 ^= ((m6) & (m7)); \ - m3 ^= ((~(m1)) & (m2)); \ - m7 ^= ((~(m5)) & (m6)); \ - m1 ^= ((m0) & (m2)); \ - m5 ^= ((m4) & (m6)); \ - m2 ^= ((m0) & (~(m3))); \ - m6 ^= ((m4) & (~(m7))); \ - m0 ^= ((m1) | (m3)); \ - m4 ^= ((m5) | (m7)); \ - m3 ^= ((m1) & (m2)); \ - m7 ^= ((m5) & (m6)); \ - m1 ^= (temp0 & (m0)); \ - m5 ^= (temp1 & (m4)); \ - m2 ^= temp0; \ +#define JH_SS(m0, m1, m2, m3, m4, m5, m6, m7, cc0, cc1) \ + m3 = ~(m3); \ + m7 = ~(m7); \ + m0 ^= ((~(m2)) & (cc0)); \ + m4 ^= ((~(m6)) & (cc1)); \ + temp0 = (cc0) ^ ((m0) & (m1)); \ + temp1 = (cc1) ^ ((m4) & (m5)); \ + m0 ^= ((m2) & (m3)); \ + m4 ^= ((m6) & (m7)); \ + m3 ^= ((~(m1)) & (m2)); \ + m7 ^= ((~(m5)) & (m6)); \ + m1 ^= ((m0) & (m2)); \ + m5 ^= ((m4) & (m6)); \ + m2 ^= ((m0) & (~(m3))); \ + m6 ^= ((m4) & (~(m7))); \ + m0 ^= ((m1) | (m3)); \ + m4 ^= ((m5) | (m7)); \ + m3 ^= ((m1) & (m2)); \ + m7 ^= ((m5) & (m6)); \ + m1 ^= (temp0 & (m0)); \ + m5 ^= (temp1 & (m4)); \ + m2 ^= temp0; \ m6 ^= temp1; -__device__ void cn_jh_E8(jhHashState *state) +__device__ void cn_jh_E8(jhHashState* state) { - uint64_t i,roundnumber,temp0,temp1; + uint64_t i, roundnumber, temp0, temp1; - for (roundnumber = 0; roundnumber < 42; roundnumber = roundnumber+7) + for(roundnumber = 0; roundnumber < 42; roundnumber = roundnumber + 7) { - for (i = 0; i < 2; i++) + for(i = 0; i < 2; i++) { - JH_SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64_t *)d_E8_rc[roundnumber+0])[i],((uint64_t *)d_E8_rc[roundnumber+0])[i+2] ); - JH_L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - JH_SWAP1(state->x[1][i]); JH_SWAP1(state->x[3][i]); JH_SWAP1(state->x[5][i]); JH_SWAP1(state->x[7][i]); + JH_SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64_t*)d_E8_rc[roundnumber + 0])[i], ((uint64_t*)d_E8_rc[roundnumber + 0])[i + 2]); + JH_L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + JH_SWAP1(state->x[1][i]); + JH_SWAP1(state->x[3][i]); + JH_SWAP1(state->x[5][i]); + JH_SWAP1(state->x[7][i]); } - for (i = 0; i < 2; i++) + for(i = 0; i < 2; i++) { - JH_SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64_t *)d_E8_rc[roundnumber+1])[i],((uint64_t *)d_E8_rc[roundnumber+1])[i+2] ); - JH_L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - JH_SWAP2(state->x[1][i]); JH_SWAP2(state->x[3][i]); JH_SWAP2(state->x[5][i]); JH_SWAP2(state->x[7][i]); + JH_SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64_t*)d_E8_rc[roundnumber + 1])[i], ((uint64_t*)d_E8_rc[roundnumber + 1])[i + 2]); + JH_L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + JH_SWAP2(state->x[1][i]); + JH_SWAP2(state->x[3][i]); + JH_SWAP2(state->x[5][i]); + JH_SWAP2(state->x[7][i]); } - for (i = 0; i < 2; i++) + for(i = 0; i < 2; i++) { - JH_SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64_t *)d_E8_rc[roundnumber+2])[i],((uint64_t *)d_E8_rc[roundnumber+2])[i+2] ); - JH_L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - JH_SWAP4(state->x[1][i]); JH_SWAP4(state->x[3][i]); JH_SWAP4(state->x[5][i]); JH_SWAP4(state->x[7][i]); + JH_SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64_t*)d_E8_rc[roundnumber + 2])[i], ((uint64_t*)d_E8_rc[roundnumber + 2])[i + 2]); + JH_L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + JH_SWAP4(state->x[1][i]); + JH_SWAP4(state->x[3][i]); + JH_SWAP4(state->x[5][i]); + JH_SWAP4(state->x[7][i]); } - for (i = 0; i < 2; i++) + for(i = 0; i < 2; i++) { - JH_SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64_t *)d_E8_rc[roundnumber+3])[i],((uint64_t *)d_E8_rc[roundnumber+3])[i+2] ); - JH_L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - JH_SWAP8(state->x[1][i]); JH_SWAP8(state->x[3][i]); JH_SWAP8(state->x[5][i]); JH_SWAP8(state->x[7][i]); + JH_SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64_t*)d_E8_rc[roundnumber + 3])[i], ((uint64_t*)d_E8_rc[roundnumber + 3])[i + 2]); + JH_L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + JH_SWAP8(state->x[1][i]); + JH_SWAP8(state->x[3][i]); + JH_SWAP8(state->x[5][i]); + JH_SWAP8(state->x[7][i]); } - for (i = 0; i < 2; i++) + for(i = 0; i < 2; i++) { - JH_SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64_t *)d_E8_rc[roundnumber+4])[i],((uint64_t *)d_E8_rc[roundnumber+4])[i+2] ); - JH_L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - JH_SWAP16(state->x[1][i]); JH_SWAP16(state->x[3][i]); JH_SWAP16(state->x[5][i]); JH_SWAP16(state->x[7][i]); + JH_SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64_t*)d_E8_rc[roundnumber + 4])[i], ((uint64_t*)d_E8_rc[roundnumber + 4])[i + 2]); + JH_L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + JH_SWAP16(state->x[1][i]); + JH_SWAP16(state->x[3][i]); + JH_SWAP16(state->x[5][i]); + JH_SWAP16(state->x[7][i]); } - for (i = 0; i < 2; i++) + for(i = 0; i < 2; i++) { - JH_SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64_t *)d_E8_rc[roundnumber+5])[i],((uint64_t *)d_E8_rc[roundnumber+5])[i+2] ); - JH_L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); - JH_SWAP32(state->x[1][i]); JH_SWAP32(state->x[3][i]); JH_SWAP32(state->x[5][i]); JH_SWAP32(state->x[7][i]); + JH_SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64_t*)d_E8_rc[roundnumber + 5])[i], ((uint64_t*)d_E8_rc[roundnumber + 5])[i + 2]); + JH_L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); + JH_SWAP32(state->x[1][i]); + JH_SWAP32(state->x[3][i]); + JH_SWAP32(state->x[5][i]); + JH_SWAP32(state->x[7][i]); } - for (i = 0; i < 2; i++) + for(i = 0; i < 2; i++) { - JH_SS(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i],((uint64_t *)d_E8_rc[roundnumber+6])[i],((uint64_t *)d_E8_rc[roundnumber+6])[i+2] ); - JH_L(state->x[0][i],state->x[2][i],state->x[4][i],state->x[6][i],state->x[1][i],state->x[3][i],state->x[5][i],state->x[7][i]); + JH_SS(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i], ((uint64_t*)d_E8_rc[roundnumber + 6])[i], ((uint64_t*)d_E8_rc[roundnumber + 6])[i + 2]); + JH_L(state->x[0][i], state->x[2][i], state->x[4][i], state->x[6][i], state->x[1][i], state->x[3][i], state->x[5][i], state->x[7][i]); } - for (i = 1; i < 8; i = i+2) + for(i = 1; i < 8; i = i + 2) { temp0 = state->x[i][0]; state->x[i][0] = state->x[i][1]; @@ -170,75 +187,75 @@ __device__ void cn_jh_E8(jhHashState *state) } } -__device__ void cn_jh_F8(jhHashState *state) +__device__ void cn_jh_F8(jhHashState* state) { uint64_t i; - for (i = 0; i < 8; i++) - state->x[i >> 1][i & 1] ^= ((uint64_t *)state->buffer)[i]; + for(i = 0; i < 8; i++) + state->x[i >> 1][i & 1] ^= ((uint64_t*)state->buffer)[i]; cn_jh_E8(state); - for (i = 0; i < 8; i++) - state->x[(8+i) >> 1][(8+i) & 1] ^= ((uint64_t *)state->buffer)[i]; + for(i = 0; i < 8; i++) + state->x[(8 + i) >> 1][(8 + i) & 1] ^= ((uint64_t*)state->buffer)[i]; } -__device__ void cn_jh_update(jhHashState * __restrict__ state, const BitSequence * __restrict__ data, DataLength databitlen) +__device__ void cn_jh_update(jhHashState* __restrict__ state, const BitSequence* __restrict__ data, DataLength databitlen) { DataLength index; state->databitlen += databitlen; index = 0; - if ( (state->datasize_in_buffer > 0 ) && (( state->datasize_in_buffer + databitlen) < 512) ) + if((state->datasize_in_buffer > 0) && ((state->datasize_in_buffer + databitlen) < 512)) { - if ( (databitlen & 7) == 0 ) - memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3)); + if((databitlen & 7) == 0) + memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64 - (state->datasize_in_buffer >> 3)); else - memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3)+1); + memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64 - (state->datasize_in_buffer >> 3) + 1); state->datasize_in_buffer += databitlen; databitlen = 0; } - if ( (state->datasize_in_buffer > 0 ) && (( state->datasize_in_buffer + databitlen) >= 512) ) + if((state->datasize_in_buffer > 0) && ((state->datasize_in_buffer + databitlen) >= 512)) { - memcpy( state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3) ); - index = 64-(state->datasize_in_buffer >> 3); + memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64 - (state->datasize_in_buffer >> 3)); + index = 64 - (state->datasize_in_buffer >> 3); databitlen = databitlen - (512 - state->datasize_in_buffer); cn_jh_F8(state); state->datasize_in_buffer = 0; } - for ( ; databitlen >= 512; index = index+64, databitlen = databitlen - 512) + for(; databitlen >= 512; index = index + 64, databitlen = databitlen - 512) { - memcpy(state->buffer, data+index, 64); + memcpy(state->buffer, data + index, 64); cn_jh_F8(state); } - if ( databitlen > 0) + if(databitlen > 0) { - if ((databitlen & 7) == 0) - memcpy(state->buffer, data+index, (databitlen & 0x1ff) >> 3); + if((databitlen & 7) == 0) + memcpy(state->buffer, data + index, (databitlen & 0x1ff) >> 3); else - memcpy(state->buffer, data+index, ((databitlen & 0x1ff) >> 3)+1); + memcpy(state->buffer, data + index, ((databitlen & 0x1ff) >> 3) + 1); state->datasize_in_buffer = databitlen; } } /*pad the message, process the padded block(s), truncate the hash value H to obtain the message digest*/ -__device__ void cn_jh_final(jhHashState * __restrict__ state, BitSequence * __restrict__ hashval) +__device__ void cn_jh_final(jhHashState* __restrict__ state, BitSequence* __restrict__ hashval) { unsigned int i; //uint32_t *bufptr = (uint32_t *)state->buffer; - if ( (state->databitlen & 0x1ff) == 0 ) + if((state->databitlen & 0x1ff) == 0) { /*pad the message when databitlen is multiple of 512 bits, then process the padded block*/ memset(state->buffer, 0, 64); //for( i = 0; i < 16; i++ ) *(bufptr+i) = 0x00000000; - state->buffer[0] = 0x80; + state->buffer[0] = 0x80; state->buffer[63] = state->databitlen & 0xff; - state->buffer[62] = (state->databitlen >> 8) & 0xff; + state->buffer[62] = (state->databitlen >> 8) & 0xff; state->buffer[61] = (state->databitlen >> 16) & 0xff; state->buffer[60] = (state->databitlen >> 24) & 0xff; state->buffer[59] = (state->databitlen >> 32) & 0xff; @@ -250,19 +267,19 @@ __device__ void cn_jh_final(jhHashState * __restrict__ state, BitSequence * __re else { /*set the rest of the bytes in the buffer to 0*/ - if ( (state->datasize_in_buffer & 7) == 0) + if((state->datasize_in_buffer & 7) == 0) { - for (i = (state->databitlen & 0x1ff) >> 3; i < 64; i++) + for(i = (state->databitlen & 0x1ff) >> 3; i < 64; i++) state->buffer[i] = 0; } else { - for (i = ((state->databitlen & 0x1ff) >> 3)+1; i < 64; i++) + for(i = ((state->databitlen & 0x1ff) >> 3) + 1; i < 64; i++) state->buffer[i] = 0; } /*pad and process the partial block when databitlen is not multiple of 512 bits, then hash the padded blocks*/ - state->buffer[((state->databitlen & 0x1ff) >> 3)] |= 1 << (7- (state->databitlen & 7)); + state->buffer[((state->databitlen & 0x1ff) >> 3)] |= 1 << (7 - (state->databitlen & 7)); cn_jh_F8(state); memset(state->buffer, 0, 64); @@ -278,10 +295,10 @@ __device__ void cn_jh_final(jhHashState * __restrict__ state, BitSequence * __re cn_jh_F8(state); } - memcpy(hashval,(unsigned char*)state->x+64+32,32); + memcpy(hashval, (unsigned char*)state->x + 64 + 32, 32); } -__device__ void cn_jh_init(jhHashState *state, int hashbitlen) +__device__ void cn_jh_init(jhHashState* state, int hashbitlen) { state->databitlen = 0; state->datasize_in_buffer = 0; @@ -289,7 +306,7 @@ __device__ void cn_jh_init(jhHashState *state, int hashbitlen) memcpy(state->x, d_JH256_H0, 128); } -__device__ void cn_jh(const BitSequence * __restrict__ data, DataLength len, BitSequence * __restrict__ hashval) +__device__ void cn_jh(const BitSequence* __restrict__ data, DataLength len, BitSequence* __restrict__ hashval) { int hashbitlen = 256; DataLength databitlen = len << 3; diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp index 3f535631d..0fe277bd5 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp @@ -7,42 +7,49 @@ __constant__ #else const #endif -uint64_t keccakf_rndc[24] ={ - 0x0000000000000001, 0x0000000000008082, 0x800000000000808a, - 0x8000000080008000, 0x000000000000808b, 0x0000000080000001, - 0x8000000080008081, 0x8000000000008009, 0x000000000000008a, - 0x0000000000000088, 0x0000000080008009, 0x000000008000000a, - 0x000000008000808b, 0x800000000000008b, 0x8000000000008089, - 0x8000000000008003, 0x8000000000008002, 0x8000000000000080, - 0x000000000000800a, 0x800000008000000a, 0x8000000080008081, - 0x8000000000008080, 0x0000000080000001, 0x8000000080008008 -}; + uint64_t keccakf_rndc[24] = { + 0x0000000000000001, 0x0000000000008082, 0x800000000000808a, + 0x8000000080008000, 0x000000000000808b, 0x0000000080000001, + 0x8000000080008081, 0x8000000000008009, 0x000000000000008a, + 0x0000000000000088, 0x0000000080008009, 0x000000008000000a, + 0x000000008000808b, 0x800000000000008b, 0x8000000000008089, + 0x8000000000008003, 0x8000000000008002, 0x8000000000000080, + 0x000000000000800a, 0x800000008000000a, 0x8000000080008081, + 0x8000000000008080, 0x0000000080000001, 0x8000000080008008}; #if __CUDA_ARCH__ >= 350 - __forceinline__ __device__ uint64_t cuda_rotl64(const uint64_t value, const int offset) +__forceinline__ __device__ uint64_t cuda_rotl64(const uint64_t value, const int offset) +{ + uint2 result; + if(offset >= 32) + { + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.x) + : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.y) + : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); + } + else { - uint2 result; - if(offset >= 32) - { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.x) : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.y) : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); - } - else - { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.x) : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(result.y) : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); - } - return __double_as_longlong(__hiloint2double(result.y, result.x)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.x) + : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.y) + : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); } - #define rotl64_1(x, y) (cuda_rotl64((x), (y))) + return __double_as_longlong(__hiloint2double(result.y, result.x)); +} +#define rotl64_1(x, y) (cuda_rotl64((x), (y))) #else - #define rotl64_1(x, y) ((x) << (y) | ((x) >> (64 - (y)))) +#define rotl64_1(x, y) ((x) << (y) | ((x) >> (64 - (y)))) #endif #define rotl64_2(x, y) rotl64_1(((x) >> 32) | ((x) << 32), (y)) #define bitselect(a, b, c) ((a) ^ ((c) & ((b) ^ (a)))) -__device__ __forceinline__ void cn_keccakf2(uint64_t *s) +__device__ __forceinline__ void cn_keccakf2(uint64_t* s) { uint8_t i; @@ -90,16 +97,46 @@ __device__ __forceinline__ void cn_keccakf2(uint64_t *s) s[7] = rotl64_1(s[10] ^ bc[4], 3); s[10] = rotl64_1(tmp1, 1); - tmp1 = s[0]; tmp2 = s[1]; s[0] = bitselect(s[0] ^ s[2], s[0], s[1]); s[1] = bitselect(s[1] ^ s[3], s[1], s[2]); s[2] = bitselect(s[2] ^ s[4], s[2], s[3]); s[3] = bitselect(s[3] ^ tmp1, s[3], s[4]); s[4] = bitselect(s[4] ^ tmp2, s[4], tmp1); - tmp1 = s[5]; tmp2 = s[6]; s[5] = bitselect(s[5] ^ s[7], s[5], s[6]); s[6] = bitselect(s[6] ^ s[8], s[6], s[7]); s[7] = bitselect(s[7] ^ s[9], s[7], s[8]); s[8] = bitselect(s[8] ^ tmp1, s[8], s[9]); s[9] = bitselect(s[9] ^ tmp2, s[9], tmp1); - tmp1 = s[10]; tmp2 = s[11]; s[10] = bitselect(s[10] ^ s[12], s[10], s[11]); s[11] = bitselect(s[11] ^ s[13], s[11], s[12]); s[12] = bitselect(s[12] ^ s[14], s[12], s[13]); s[13] = bitselect(s[13] ^ tmp1, s[13], s[14]); s[14] = bitselect(s[14] ^ tmp2, s[14], tmp1); - tmp1 = s[15]; tmp2 = s[16]; s[15] = bitselect(s[15] ^ s[17], s[15], s[16]); s[16] = bitselect(s[16] ^ s[18], s[16], s[17]); s[17] = bitselect(s[17] ^ s[19], s[17], s[18]); s[18] = bitselect(s[18] ^ tmp1, s[18], s[19]); s[19] = bitselect(s[19] ^ tmp2, s[19], tmp1); - tmp1 = s[20]; tmp2 = s[21]; s[20] = bitselect(s[20] ^ s[22], s[20], s[21]); s[21] = bitselect(s[21] ^ s[23], s[21], s[22]); s[22] = bitselect(s[22] ^ s[24], s[22], s[23]); s[23] = bitselect(s[23] ^ tmp1, s[23], s[24]); s[24] = bitselect(s[24] ^ tmp2, s[24], tmp1); + tmp1 = s[0]; + tmp2 = s[1]; + s[0] = bitselect(s[0] ^ s[2], s[0], s[1]); + s[1] = bitselect(s[1] ^ s[3], s[1], s[2]); + s[2] = bitselect(s[2] ^ s[4], s[2], s[3]); + s[3] = bitselect(s[3] ^ tmp1, s[3], s[4]); + s[4] = bitselect(s[4] ^ tmp2, s[4], tmp1); + tmp1 = s[5]; + tmp2 = s[6]; + s[5] = bitselect(s[5] ^ s[7], s[5], s[6]); + s[6] = bitselect(s[6] ^ s[8], s[6], s[7]); + s[7] = bitselect(s[7] ^ s[9], s[7], s[8]); + s[8] = bitselect(s[8] ^ tmp1, s[8], s[9]); + s[9] = bitselect(s[9] ^ tmp2, s[9], tmp1); + tmp1 = s[10]; + tmp2 = s[11]; + s[10] = bitselect(s[10] ^ s[12], s[10], s[11]); + s[11] = bitselect(s[11] ^ s[13], s[11], s[12]); + s[12] = bitselect(s[12] ^ s[14], s[12], s[13]); + s[13] = bitselect(s[13] ^ tmp1, s[13], s[14]); + s[14] = bitselect(s[14] ^ tmp2, s[14], tmp1); + tmp1 = s[15]; + tmp2 = s[16]; + s[15] = bitselect(s[15] ^ s[17], s[15], s[16]); + s[16] = bitselect(s[16] ^ s[18], s[16], s[17]); + s[17] = bitselect(s[17] ^ s[19], s[17], s[18]); + s[18] = bitselect(s[18] ^ tmp1, s[18], s[19]); + s[19] = bitselect(s[19] ^ tmp2, s[19], tmp1); + tmp1 = s[20]; + tmp2 = s[21]; + s[20] = bitselect(s[20] ^ s[22], s[20], s[21]); + s[21] = bitselect(s[21] ^ s[23], s[21], s[22]); + s[22] = bitselect(s[22] ^ s[24], s[22], s[23]); + s[23] = bitselect(s[23] ^ tmp1, s[23], s[24]); + s[24] = bitselect(s[24] ^ tmp2, s[24], tmp1); s[0] ^= keccakf_rndc[i]; } } -__device__ __forceinline__ void cn_keccakf(uint64_t *s) +__device__ __forceinline__ void cn_keccakf(uint64_t* s) { uint64_t bc[5], tmpxor[5], tmp1, tmp2; @@ -145,16 +182,46 @@ __device__ __forceinline__ void cn_keccakf(uint64_t *s) s[7] = rotl64_1(s[10] ^ bc[4], 3); s[10] = rotl64_1(tmp1, 1); - tmp1 = s[0]; tmp2 = s[1]; s[0] = bitselect(s[0] ^ s[2], s[0], s[1]); s[1] = bitselect(s[1] ^ s[3], s[1], s[2]); s[2] = bitselect(s[2] ^ s[4], s[2], s[3]); s[3] = bitselect(s[3] ^ tmp1, s[3], s[4]); s[4] = bitselect(s[4] ^ tmp2, s[4], tmp1); - tmp1 = s[5]; tmp2 = s[6]; s[5] = bitselect(s[5] ^ s[7], s[5], s[6]); s[6] = bitselect(s[6] ^ s[8], s[6], s[7]); s[7] = bitselect(s[7] ^ s[9], s[7], s[8]); s[8] = bitselect(s[8] ^ tmp1, s[8], s[9]); s[9] = bitselect(s[9] ^ tmp2, s[9], tmp1); - tmp1 = s[10]; tmp2 = s[11]; s[10] = bitselect(s[10] ^ s[12], s[10], s[11]); s[11] = bitselect(s[11] ^ s[13], s[11], s[12]); s[12] = bitselect(s[12] ^ s[14], s[12], s[13]); s[13] = bitselect(s[13] ^ tmp1, s[13], s[14]); s[14] = bitselect(s[14] ^ tmp2, s[14], tmp1); - tmp1 = s[15]; tmp2 = s[16]; s[15] = bitselect(s[15] ^ s[17], s[15], s[16]); s[16] = bitselect(s[16] ^ s[18], s[16], s[17]); s[17] = bitselect(s[17] ^ s[19], s[17], s[18]); s[18] = bitselect(s[18] ^ tmp1, s[18], s[19]); s[19] = bitselect(s[19] ^ tmp2, s[19], tmp1); - tmp1 = s[20]; tmp2 = s[21]; s[20] = bitselect(s[20] ^ s[22], s[20], s[21]); s[21] = bitselect(s[21] ^ s[23], s[21], s[22]); s[22] = bitselect(s[22] ^ s[24], s[22], s[23]); s[23] = bitselect(s[23] ^ tmp1, s[23], s[24]); s[24] = bitselect(s[24] ^ tmp2, s[24], tmp1); + tmp1 = s[0]; + tmp2 = s[1]; + s[0] = bitselect(s[0] ^ s[2], s[0], s[1]); + s[1] = bitselect(s[1] ^ s[3], s[1], s[2]); + s[2] = bitselect(s[2] ^ s[4], s[2], s[3]); + s[3] = bitselect(s[3] ^ tmp1, s[3], s[4]); + s[4] = bitselect(s[4] ^ tmp2, s[4], tmp1); + tmp1 = s[5]; + tmp2 = s[6]; + s[5] = bitselect(s[5] ^ s[7], s[5], s[6]); + s[6] = bitselect(s[6] ^ s[8], s[6], s[7]); + s[7] = bitselect(s[7] ^ s[9], s[7], s[8]); + s[8] = bitselect(s[8] ^ tmp1, s[8], s[9]); + s[9] = bitselect(s[9] ^ tmp2, s[9], tmp1); + tmp1 = s[10]; + tmp2 = s[11]; + s[10] = bitselect(s[10] ^ s[12], s[10], s[11]); + s[11] = bitselect(s[11] ^ s[13], s[11], s[12]); + s[12] = bitselect(s[12] ^ s[14], s[12], s[13]); + s[13] = bitselect(s[13] ^ tmp1, s[13], s[14]); + s[14] = bitselect(s[14] ^ tmp2, s[14], tmp1); + tmp1 = s[15]; + tmp2 = s[16]; + s[15] = bitselect(s[15] ^ s[17], s[15], s[16]); + s[16] = bitselect(s[16] ^ s[18], s[16], s[17]); + s[17] = bitselect(s[17] ^ s[19], s[17], s[18]); + s[18] = bitselect(s[18] ^ tmp1, s[18], s[19]); + s[19] = bitselect(s[19] ^ tmp2, s[19], tmp1); + tmp1 = s[20]; + tmp2 = s[21]; + s[20] = bitselect(s[20] ^ s[22], s[20], s[21]); + s[21] = bitselect(s[21] ^ s[23], s[21], s[22]); + s[22] = bitselect(s[22] ^ s[24], s[22], s[23]); + s[23] = bitselect(s[23] ^ tmp1, s[23], s[24]); + s[24] = bitselect(s[24] ^ tmp2, s[24], tmp1); s[0] ^= keccakf_rndc[i]; } } -__device__ __forceinline__ void cn_keccak(const uint8_t * __restrict__ in, uint32_t len, uint8_t * __restrict__ md) +__device__ __forceinline__ void cn_keccak(const uint8_t* __restrict__ in, uint32_t len, uint8_t* __restrict__ md) { uint64_t st[25]; diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_skein.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_skein.hpp index fc45db1ae..b8073f03b 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_skein.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_skein.hpp @@ -1,124 +1,146 @@ #pragma once -typedef unsigned int uint_t; /* native unsigned integer */ +typedef unsigned int uint_t; /* native unsigned integer */ -#define SKEIN_MODIFIER_WORDS ( 2) /* number of modifier (tweak) words */ +#define SKEIN_MODIFIER_WORDS (2) /* number of modifier (tweak) words */ -#define SKEIN_256_STATE_WORDS ( 4) -#define SKEIN_512_STATE_WORDS ( 8) +#define SKEIN_256_STATE_WORDS (4) +#define SKEIN_512_STATE_WORDS (8) #define SKEIN1024_STATE_WORDS (16) -#define SKEIN_256_STATE_BYTES ( 8*SKEIN_256_STATE_WORDS) -#define SKEIN_512_STATE_BYTES ( 8*SKEIN_512_STATE_WORDS) -#define SKEIN1024_STATE_BYTES ( 8*SKEIN1024_STATE_WORDS) +#define SKEIN_256_STATE_BYTES (8 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_STATE_BYTES (8 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_STATE_BYTES (8 * SKEIN1024_STATE_WORDS) -#define SKEIN_256_STATE_BITS (64*SKEIN_256_STATE_WORDS) -#define SKEIN_512_STATE_BITS (64*SKEIN_512_STATE_WORDS) -#define SKEIN1024_STATE_BITS (64*SKEIN1024_STATE_WORDS) +#define SKEIN_256_STATE_BITS (64 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_STATE_BITS (64 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_STATE_BITS (64 * SKEIN1024_STATE_WORDS) -#define SKEIN_256_BLOCK_BYTES ( 8*SKEIN_256_STATE_WORDS) -#define SKEIN_512_BLOCK_BYTES ( 8*SKEIN_512_STATE_WORDS) -#define SKEIN1024_BLOCK_BYTES ( 8*SKEIN1024_STATE_WORDS) +#define SKEIN_256_BLOCK_BYTES (8 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_BLOCK_BYTES (8 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_BLOCK_BYTES (8 * SKEIN1024_STATE_WORDS) -#define SKEIN_MK_64(hi32,lo32) ((lo32) + (((uint64_t) (hi32)) << 32)) -#define SKEIN_KS_PARITY SKEIN_MK_64(0x1BD11BDA,0xA9FC1A22) +#define SKEIN_MK_64(hi32, lo32) ((lo32) + (((uint64_t)(hi32)) << 32)) +#define SKEIN_KS_PARITY SKEIN_MK_64(0x1BD11BDA, 0xA9FC1A22) -#define SKEIN_T1_BIT(BIT) ((BIT) - 64) /* offset 64 because it's the second word */ +#define SKEIN_T1_BIT(BIT) ((BIT)-64) /* offset 64 because it's the second word */ -#define SKEIN_T1_POS_FIRST SKEIN_T1_BIT(126) /* bits 126 : first block flag */ -#define SKEIN_T1_POS_BIT_PAD SKEIN_T1_BIT(119) /* bit 119 : partial final input byte */ -#define SKEIN_T1_POS_FINAL SKEIN_T1_BIT(127) /* bit 127 : final block flag */ -#define SKEIN_T1_POS_BLK_TYPE SKEIN_T1_BIT(120) /* bits 120..125: type field */ +#define SKEIN_T1_POS_FIRST SKEIN_T1_BIT(126) /* bits 126 : first block flag */ +#define SKEIN_T1_POS_BIT_PAD SKEIN_T1_BIT(119) /* bit 119 : partial final input byte */ +#define SKEIN_T1_POS_FINAL SKEIN_T1_BIT(127) /* bit 127 : final block flag */ +#define SKEIN_T1_POS_BLK_TYPE SKEIN_T1_BIT(120) /* bits 120..125: type field */ -#define SKEIN_T1_FLAG_FIRST (((uint64_t) 1 ) << SKEIN_T1_POS_FIRST) -#define SKEIN_T1_FLAG_BIT_PAD (((uint64_t) 1 ) << SKEIN_T1_POS_BIT_PAD) -#define SKEIN_T1_FLAG_FINAL (((uint64_t) 1 ) << SKEIN_T1_POS_FINAL) +#define SKEIN_T1_FLAG_FIRST (((uint64_t)1) << SKEIN_T1_POS_FIRST) +#define SKEIN_T1_FLAG_BIT_PAD (((uint64_t)1) << SKEIN_T1_POS_BIT_PAD) +#define SKEIN_T1_FLAG_FINAL (((uint64_t)1) << SKEIN_T1_POS_FINAL) -#define SKEIN_BLK_TYPE_MSG (48) /* message processing */ -#define SKEIN_BLK_TYPE_OUT (63) /* output stage */ +#define SKEIN_BLK_TYPE_MSG (48) /* message processing */ +#define SKEIN_BLK_TYPE_OUT (63) /* output stage */ -#define SKEIN_T1_BLK_TYPE(T) (((uint64_t) (SKEIN_BLK_TYPE_##T)) << SKEIN_T1_POS_BLK_TYPE) +#define SKEIN_T1_BLK_TYPE(T) (((uint64_t)(SKEIN_BLK_TYPE_##T)) << SKEIN_T1_POS_BLK_TYPE) -#define SKEIN_T1_BLK_TYPE_MSG SKEIN_T1_BLK_TYPE(MSG) /* message processing */ -#define SKEIN_T1_BLK_TYPE_OUT SKEIN_T1_BLK_TYPE(OUT) /* output stage */ +#define SKEIN_T1_BLK_TYPE_MSG SKEIN_T1_BLK_TYPE(MSG) /* message processing */ +#define SKEIN_T1_BLK_TYPE_OUT SKEIN_T1_BLK_TYPE(OUT) /* output stage */ -#define SKEIN_T1_BLK_TYPE_OUT_FINAL (SKEIN_T1_BLK_TYPE_OUT | SKEIN_T1_FLAG_FINAL) +#define SKEIN_T1_BLK_TYPE_OUT_FINAL (SKEIN_T1_BLK_TYPE_OUT | SKEIN_T1_FLAG_FINAL) -#define Skein_Set_Tweak(ctxPtr,TWK_NUM,tVal) {(ctxPtr)->h.T[TWK_NUM] = (tVal);} - -#define Skein_Set_T0(ctxPtr,T0) Skein_Set_Tweak(ctxPtr,0,T0) -#define Skein_Set_T1(ctxPtr,T1) Skein_Set_Tweak(ctxPtr,1,T1) - -#define Skein_Set_T0_T1(ctxPtr,T0,T1) { \ - Skein_Set_T0(ctxPtr,(T0)); \ - Skein_Set_T1(ctxPtr,(T1)); } - -#define Skein_Start_New_Type(ctxPtr,BLK_TYPE) \ -{ Skein_Set_T0_T1(ctxPtr,0,SKEIN_T1_FLAG_FIRST | SKEIN_T1_BLK_TYPE_##BLK_TYPE); (ctxPtr)->h.bCnt=0; } - -#define Skein_Set_Bit_Pad_Flag(hdr) { (hdr).T[1] |= SKEIN_T1_FLAG_BIT_PAD; } +#define Skein_Set_Tweak(ctxPtr, TWK_NUM, tVal) \ + { \ + (ctxPtr)->h.T[TWK_NUM] = (tVal); \ + } -#define KW_TWK_BASE (0) -#define KW_KEY_BASE (3) -#define ks (kw + KW_KEY_BASE) -#define ts (kw + KW_TWK_BASE) +#define Skein_Set_T0(ctxPtr, T0) Skein_Set_Tweak(ctxPtr, 0, T0) +#define Skein_Set_T1(ctxPtr, T1) Skein_Set_Tweak(ctxPtr, 1, T1) -#define R512(p0,p1,p2,p3,p4,p5,p6,p7,R512ROT,rNum) \ - X##p0 += X##p1; X##p1 = ROTL64(X##p1,R512ROT##_0); X##p1 ^= X##p0; \ - X##p2 += X##p3; X##p3 = ROTL64(X##p3,R512ROT##_1); X##p3 ^= X##p2; \ - X##p4 += X##p5; X##p5 = ROTL64(X##p5,R512ROT##_2); X##p5 ^= X##p4; \ - X##p6 += X##p7; X##p7 = ROTL64(X##p7,R512ROT##_3); X##p7 ^= X##p6; +#define Skein_Set_T0_T1(ctxPtr, T0, T1) \ + { \ + Skein_Set_T0(ctxPtr, (T0)); \ + Skein_Set_T1(ctxPtr, (T1)); \ + } -#define I512(R) \ - X0 += ks[((R)+1) % 9]; \ - X1 += ks[((R)+2) % 9]; \ - X2 += ks[((R)+3) % 9]; \ - X3 += ks[((R)+4) % 9]; \ - X4 += ks[((R)+5) % 9]; \ - X5 += ks[((R)+6) % 9] + ts[((R)+1) % 3]; \ - X6 += ks[((R)+7) % 9] + ts[((R)+2) % 3]; \ - X7 += ks[((R)+8) % 9] + (R)+1; +#define Skein_Start_New_Type(ctxPtr, BLK_TYPE) \ + { \ + Skein_Set_T0_T1(ctxPtr, 0, SKEIN_T1_FLAG_FIRST | SKEIN_T1_BLK_TYPE_##BLK_TYPE); \ + (ctxPtr)->h.bCnt = 0; \ + } +#define Skein_Set_Bit_Pad_Flag(hdr) \ + { \ + (hdr).T[1] |= SKEIN_T1_FLAG_BIT_PAD; \ + } -#define R512_8_rounds(R) \ - R512(0,1,2,3,4,5,6,7,R_512_0,8*(R)+ 1); \ - R512(2,1,4,7,6,5,0,3,R_512_1,8*(R)+ 2); \ - R512(4,1,6,3,0,5,2,7,R_512_2,8*(R)+ 3); \ - R512(6,1,0,7,2,5,4,3,R_512_3,8*(R)+ 4); \ - I512(2*(R)); \ - R512(0,1,2,3,4,5,6,7,R_512_4,8*(R)+ 5); \ - R512(2,1,4,7,6,5,0,3,R_512_5,8*(R)+ 6); \ - R512(4,1,6,3,0,5,2,7,R_512_6,8*(R)+ 7); \ - R512(6,1,0,7,2,5,4,3,R_512_7,8*(R)+ 8); \ - I512(2*(R)+1); +#define KW_TWK_BASE (0) +#define KW_KEY_BASE (3) +#define ks (kw + KW_KEY_BASE) +#define ts (kw + KW_TWK_BASE) + +#define R512(p0, p1, p2, p3, p4, p5, p6, p7, R512ROT, rNum) \ + X##p0 += X##p1; \ + X##p1 = ROTL64(X##p1, R512ROT##_0); \ + X##p1 ^= X##p0; \ + X##p2 += X##p3; \ + X##p3 = ROTL64(X##p3, R512ROT##_1); \ + X##p3 ^= X##p2; \ + X##p4 += X##p5; \ + X##p5 = ROTL64(X##p5, R512ROT##_2); \ + X##p5 ^= X##p4; \ + X##p6 += X##p7; \ + X##p7 = ROTL64(X##p7, R512ROT##_3); \ + X##p7 ^= X##p6; + +#define I512(R) \ + X0 += ks[((R) + 1) % 9]; \ + X1 += ks[((R) + 2) % 9]; \ + X2 += ks[((R) + 3) % 9]; \ + X3 += ks[((R) + 4) % 9]; \ + X4 += ks[((R) + 5) % 9]; \ + X5 += ks[((R) + 6) % 9] + ts[((R) + 1) % 3]; \ + X6 += ks[((R) + 7) % 9] + ts[((R) + 2) % 3]; \ + X7 += ks[((R) + 8) % 9] + (R) + 1; + +#define R512_8_rounds(R) \ + R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_0, 8 * (R) + 1); \ + R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_1, 8 * (R) + 2); \ + R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_2, 8 * (R) + 3); \ + R512(6, 1, 0, 7, 2, 5, 4, 3, R_512_3, 8 * (R) + 4); \ + I512(2 * (R)); \ + R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_4, 8 * (R) + 5); \ + R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_5, 8 * (R) + 6); \ + R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_6, 8 * (R) + 7); \ + R512(6, 1, 0, 7, 2, 5, 4, 3, R_512_7, 8 * (R) + 8); \ + I512(2 * (R) + 1); typedef struct { - size_t hashBitLen; - size_t bCnt; - uint64_t T[SKEIN_MODIFIER_WORDS]; + size_t hashBitLen; + size_t bCnt; + uint64_t T[SKEIN_MODIFIER_WORDS]; } Skein_Ctxt_Hdr_t; -typedef struct { +typedef struct +{ Skein_Ctxt_Hdr_t h; - uint64_t X[SKEIN_256_STATE_WORDS]; - uint8_t b[SKEIN_256_BLOCK_BYTES]; + uint64_t X[SKEIN_256_STATE_WORDS]; + uint8_t b[SKEIN_256_BLOCK_BYTES]; } Skein_256_Ctxt_t; -typedef struct { +typedef struct +{ Skein_Ctxt_Hdr_t h; - uint64_t X[SKEIN_512_STATE_WORDS]; - uint8_t b[SKEIN_512_BLOCK_BYTES]; + uint64_t X[SKEIN_512_STATE_WORDS]; + uint8_t b[SKEIN_512_BLOCK_BYTES]; } Skein_512_Ctxt_t; -typedef struct { +typedef struct +{ Skein_Ctxt_Hdr_t h; - uint64_t X[SKEIN1024_STATE_WORDS]; - uint8_t b[SKEIN1024_BLOCK_BYTES]; + uint64_t X[SKEIN1024_STATE_WORDS]; + uint8_t b[SKEIN1024_BLOCK_BYTES]; } Skein1024_Ctxt_t; -typedef struct { - uint_t statebits; +typedef struct +{ + uint_t statebits; union { Skein_Ctxt_Hdr_t h; Skein_256_Ctxt_t ctx_256; @@ -127,21 +149,20 @@ typedef struct { } u; } skeinHashState; -__device__ void cn_skein_init(skeinHashState *state, size_t hashBitLen) +__device__ void cn_skein_init(skeinHashState* state, size_t hashBitLen) { const uint64_t SKEIN_512_IV_256[] = - { - SKEIN_MK_64(0xCCD044A1,0x2FDB3E13), - SKEIN_MK_64(0xE8359030,0x1A79A9EB), - SKEIN_MK_64(0x55AEA061,0x4F816E6F), - SKEIN_MK_64(0x2A2767A4,0xAE9B94DB), - SKEIN_MK_64(0xEC06025E,0x74DD7683), - SKEIN_MK_64(0xE7A436CD,0xC4746251), - SKEIN_MK_64(0xC36FBAF9,0x393AD185), - SKEIN_MK_64(0x3EEDBA18,0x33EDFC13) - }; + { + SKEIN_MK_64(0xCCD044A1, 0x2FDB3E13), + SKEIN_MK_64(0xE8359030, 0x1A79A9EB), + SKEIN_MK_64(0x55AEA061, 0x4F816E6F), + SKEIN_MK_64(0x2A2767A4, 0xAE9B94DB), + SKEIN_MK_64(0xEC06025E, 0x74DD7683), + SKEIN_MK_64(0xE7A436CD, 0xC4746251), + SKEIN_MK_64(0xC36FBAF9, 0x393AD185), + SKEIN_MK_64(0x3EEDBA18, 0x33EDFC13)}; - Skein_512_Ctxt_t *ctx = &state->u.ctx_512; + Skein_512_Ctxt_t* ctx = &state->u.ctx_512; ctx->h.hashBitLen = hashBitLen; @@ -150,22 +171,47 @@ __device__ void cn_skein_init(skeinHashState *state, size_t hashBitLen) Skein_Start_New_Type(ctx, MSG); } -__device__ void cn_skein512_processblock(Skein_512_Ctxt_t * __restrict__ ctx, const uint8_t * __restrict__ blkPtr, size_t blkCnt, size_t byteCntAdd) +__device__ void cn_skein512_processblock(Skein_512_Ctxt_t* __restrict__ ctx, const uint8_t* __restrict__ blkPtr, size_t blkCnt, size_t byteCntAdd) { - enum { - R_512_0_0=46, R_512_0_1=36, R_512_0_2=19, R_512_0_3=37, - R_512_1_0=33, R_512_1_1=27, R_512_1_2=14, R_512_1_3=42, - R_512_2_0=17, R_512_2_1=49, R_512_2_2=36, R_512_2_3=39, - R_512_3_0=44, R_512_3_1= 9, R_512_3_2=54, R_512_3_3=56, - R_512_4_0=39, R_512_4_1=30, R_512_4_2=34, R_512_4_3=24, - R_512_5_0=13, R_512_5_1=50, R_512_5_2=10, R_512_5_3=17, - R_512_6_0=25, R_512_6_1=29, R_512_6_2=39, R_512_6_3=43, - R_512_7_0= 8, R_512_7_1=35, R_512_7_2=56, R_512_7_3=22 + enum + { + R_512_0_0 = 46, + R_512_0_1 = 36, + R_512_0_2 = 19, + R_512_0_3 = 37, + R_512_1_0 = 33, + R_512_1_1 = 27, + R_512_1_2 = 14, + R_512_1_3 = 42, + R_512_2_0 = 17, + R_512_2_1 = 49, + R_512_2_2 = 36, + R_512_2_3 = 39, + R_512_3_0 = 44, + R_512_3_1 = 9, + R_512_3_2 = 54, + R_512_3_3 = 56, + R_512_4_0 = 39, + R_512_4_1 = 30, + R_512_4_2 = 34, + R_512_4_3 = 24, + R_512_5_0 = 13, + R_512_5_1 = 50, + R_512_5_2 = 10, + R_512_5_3 = 17, + R_512_6_0 = 25, + R_512_6_1 = 29, + R_512_6_2 = 39, + R_512_6_3 = 43, + R_512_7_0 = 8, + R_512_7_1 = 35, + R_512_7_2 = 56, + R_512_7_3 = 22 }; - uint64_t X0,X1,X2,X3,X4,X5,X6,X7; + uint64_t X0, X1, X2, X3, X4, X5, X6, X7; uint64_t w[SKEIN_512_STATE_WORDS]; - uint64_t kw[SKEIN_512_STATE_WORDS+4]; + uint64_t kw[SKEIN_512_STATE_WORDS + 4]; ts[0] = ctx->h.T[0]; ts[1] = ctx->h.T[1]; @@ -184,7 +230,7 @@ __device__ void cn_skein512_processblock(Skein_512_Ctxt_t * __restrict__ ctx, co ks[6] = ctx->X[6]; ks[7] = ctx->X[7]; ks[8] = ks[0] ^ ks[1] ^ ks[2] ^ ks[3] ^ - ks[4] ^ ks[5] ^ ks[6] ^ ks[7] ^ SKEIN_KS_PARITY; + ks[4] ^ ks[5] ^ ks[6] ^ ks[7] ^ SKEIN_KS_PARITY; ts[2] = ts[0] ^ ts[1]; @@ -201,15 +247,15 @@ __device__ void cn_skein512_processblock(Skein_512_Ctxt_t * __restrict__ ctx, co blkPtr += SKEIN_512_BLOCK_BYTES; - R512_8_rounds( 0); - R512_8_rounds( 1); - R512_8_rounds( 2); - R512_8_rounds( 3); - R512_8_rounds( 4); - R512_8_rounds( 5); - R512_8_rounds( 6); - R512_8_rounds( 7); - R512_8_rounds( 8); + R512_8_rounds(0); + R512_8_rounds(1); + R512_8_rounds(2); + R512_8_rounds(3); + R512_8_rounds(4); + R512_8_rounds(5); + R512_8_rounds(6); + R512_8_rounds(7); + R512_8_rounds(8); ctx->X[0] = X0 ^ w[0]; ctx->X[1] = X1 ^ w[1]; @@ -221,125 +267,124 @@ __device__ void cn_skein512_processblock(Skein_512_Ctxt_t * __restrict__ ctx, co ctx->X[7] = X7 ^ w[7]; ts[1] &= ~SKEIN_T1_FLAG_FIRST; - } - while (--blkCnt); + } while(--blkCnt); ctx->h.T[0] = ts[0]; ctx->h.T[1] = ts[1]; } -__device__ void cn_skein_final(skeinHashState * __restrict__ state, uint8_t * __restrict__ hashVal) +__device__ void cn_skein_final(skeinHashState* __restrict__ state, uint8_t* __restrict__ hashVal) { - size_t i,n,byteCnt; + size_t i, n, byteCnt; uint64_t X[SKEIN_512_STATE_WORDS]; - Skein_512_Ctxt_t *ctx = (Skein_512_Ctxt_t *)&state->u.ctx_512; + Skein_512_Ctxt_t* ctx = (Skein_512_Ctxt_t*)&state->u.ctx_512; //size_t tmp; //uint8_t *p8; //uint64_t *p64; ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; - if (ctx->h.bCnt < SKEIN_512_BLOCK_BYTES) + if(ctx->h.bCnt < SKEIN_512_BLOCK_BYTES) { - memset(&ctx->b[ctx->h.bCnt],0,SKEIN_512_BLOCK_BYTES - ctx->h.bCnt); + memset(&ctx->b[ctx->h.bCnt], 0, SKEIN_512_BLOCK_BYTES - ctx->h.bCnt); //p8 = &ctx->b[ctx->h.bCnt]; //tmp = SKEIN_512_BLOCK_BYTES - ctx->h.bCnt; //for( i = 0; i < tmp; i++ ) *(p8+i) = 0; } - cn_skein512_processblock(ctx,ctx->b,1,ctx->h.bCnt); + cn_skein512_processblock(ctx, ctx->b, 1, ctx->h.bCnt); byteCnt = (ctx->h.hashBitLen + 7) >> 3; //uint8_t b[SKEIN_512_BLOCK_BYTES] == 64 - memset(ctx->b,0,sizeof(ctx->b)); + memset(ctx->b, 0, sizeof(ctx->b)); //p64 = (uint64_t *)ctx->b; //for( i = 0; i < 8; i++ ) *(p64+i) = 0; - memcpy(X,ctx->X,sizeof(X)); + memcpy(X, ctx->X, sizeof(X)); - for (i=0;i*SKEIN_512_BLOCK_BYTES < byteCnt;i++) + for(i = 0; i * SKEIN_512_BLOCK_BYTES < byteCnt; i++) { - ((uint64_t *)ctx->b)[0]= (uint64_t)i; - Skein_Start_New_Type(ctx,OUT_FINAL); - cn_skein512_processblock(ctx,ctx->b,1,sizeof(uint64_t)); - n = byteCnt - i*SKEIN_512_BLOCK_BYTES; - if (n >= SKEIN_512_BLOCK_BYTES) - n = SKEIN_512_BLOCK_BYTES; - memcpy(hashVal+i*SKEIN_512_BLOCK_BYTES,ctx->X,n); - memcpy(ctx->X,X,sizeof(X)); /* restore the counter mode key for next time */ + ((uint64_t*)ctx->b)[0] = (uint64_t)i; + Skein_Start_New_Type(ctx, OUT_FINAL); + cn_skein512_processblock(ctx, ctx->b, 1, sizeof(uint64_t)); + n = byteCnt - i * SKEIN_512_BLOCK_BYTES; + if(n >= SKEIN_512_BLOCK_BYTES) + n = SKEIN_512_BLOCK_BYTES; + memcpy(hashVal + i * SKEIN_512_BLOCK_BYTES, ctx->X, n); + memcpy(ctx->X, X, sizeof(X)); /* restore the counter mode key for next time */ } } -__device__ void cn_skein512_update(Skein_512_Ctxt_t * __restrict__ ctx, const uint8_t * __restrict__ msg, size_t msgByteCnt) +__device__ void cn_skein512_update(Skein_512_Ctxt_t* __restrict__ ctx, const uint8_t* __restrict__ msg, size_t msgByteCnt) { size_t n; - if (msgByteCnt + ctx->h.bCnt > SKEIN_512_BLOCK_BYTES) + if(msgByteCnt + ctx->h.bCnt > SKEIN_512_BLOCK_BYTES) { - if (ctx->h.bCnt) + if(ctx->h.bCnt) { n = SKEIN_512_BLOCK_BYTES - ctx->h.bCnt; - if (n) + if(n) { - memcpy(&ctx->b[ctx->h.bCnt],msg,n); - msgByteCnt -= n; - msg += n; + memcpy(&ctx->b[ctx->h.bCnt], msg, n); + msgByteCnt -= n; + msg += n; ctx->h.bCnt += n; } - cn_skein512_processblock(ctx,ctx->b,1,SKEIN_512_BLOCK_BYTES); + cn_skein512_processblock(ctx, ctx->b, 1, SKEIN_512_BLOCK_BYTES); ctx->h.bCnt = 0; } - if (msgByteCnt > SKEIN_512_BLOCK_BYTES) + if(msgByteCnt > SKEIN_512_BLOCK_BYTES) { - n = (msgByteCnt-1) / SKEIN_512_BLOCK_BYTES; - cn_skein512_processblock(ctx,msg,n,SKEIN_512_BLOCK_BYTES); + n = (msgByteCnt - 1) / SKEIN_512_BLOCK_BYTES; + cn_skein512_processblock(ctx, msg, n, SKEIN_512_BLOCK_BYTES); msgByteCnt -= n * SKEIN_512_BLOCK_BYTES; - msg += n * SKEIN_512_BLOCK_BYTES; + msg += n * SKEIN_512_BLOCK_BYTES; } } - if (msgByteCnt) + if(msgByteCnt) { - memcpy(&ctx->b[ctx->h.bCnt],msg,msgByteCnt); + memcpy(&ctx->b[ctx->h.bCnt], msg, msgByteCnt); ctx->h.bCnt += msgByteCnt; } } -__device__ void cn_skein_update(skeinHashState * __restrict__ state, const BitSequence * __restrict__ data, DataLength databitlen) +__device__ void cn_skein_update(skeinHashState* __restrict__ state, const BitSequence* __restrict__ data, DataLength databitlen) { - if ((databitlen & 7) == 0) + if((databitlen & 7) == 0) { - cn_skein512_update(&state->u.ctx_512,data,databitlen >> 3); + cn_skein512_update(&state->u.ctx_512, data, databitlen >> 3); } else { size_t bCnt = (databitlen >> 3) + 1; - uint8_t b,mask; + uint8_t b, mask; - mask = (uint8_t) (1u << (7 - (databitlen & 7))); - b = (uint8_t) ((data[bCnt-1] & (0-mask)) | mask); + mask = (uint8_t)(1u << (7 - (databitlen & 7))); + b = (uint8_t)((data[bCnt - 1] & (0 - mask)) | mask); - cn_skein512_update(&state->u.ctx_512,data,bCnt-1); - cn_skein512_update(&state->u.ctx_512,&b , 1 ); + cn_skein512_update(&state->u.ctx_512, data, bCnt - 1); + cn_skein512_update(&state->u.ctx_512, &b, 1); Skein_Set_Bit_Pad_Flag(state->u.h); } } -__device__ void cn_skein(const BitSequence * __restrict__ data, DataLength len, BitSequence * __restrict__ hashval) +__device__ void cn_skein(const BitSequence* __restrict__ data, DataLength len, BitSequence* __restrict__ hashval) { int hashbitlen = 256; DataLength databitlen = len << 3; skeinHashState state; - state.statebits = 64*SKEIN_512_STATE_WORDS; + state.statebits = 64 * SKEIN_512_STATE_WORDS; cn_skein_init(&state, hashbitlen); cn_skein_update(&state, data, databitlen); diff --git a/xmrstak/backend/plugin.hpp b/xmrstak/backend/plugin.hpp index 5c7dfe16a..902a66230 100644 --- a/xmrstak/backend/plugin.hpp +++ b/xmrstak/backend/plugin.hpp @@ -3,22 +3,22 @@ #include "xmrstak/misc/environment.hpp" #include "xmrstak/params.hpp" -#include -#include -#include -#include #include "iBackend.hpp" +#include #include +#include +#include +#include #ifndef USE_PRECOMPILED_HEADERS -# ifdef WIN32 -# include -# include -# else -# include -# include -# endif -# include +#ifdef WIN32 +#include +#include +#else +#include +#include +#endif +#include #endif namespace xmrstak @@ -36,16 +36,16 @@ struct plugin libBackend = LoadLibrary(TEXT((libName + ".dll").c_str())); if(!libBackend) { - std::cerr << "WARNING: "<< m_backendName <<" cannot load backend library: " << (libName + ".dll") << std::endl; + std::cerr << "WARNING: " << m_backendName << " cannot load backend library: " << (libName + ".dll") << std::endl; return; } #else // `.so` linux file extention for dynamic libraries std::string fileExtension = ".so"; -# if defined(__APPLE__) +#if defined(__APPLE__) // `.dylib` Mac OS X file extention for dynamic libraries fileExtension = ".dylib"; -# endif +#endif // search library in working directory libBackend = dlopen(("./lib" + libName + fileExtension).c_str(), RTLD_LAZY); // fallback to binary directory @@ -56,21 +56,21 @@ struct plugin libBackend = dlopen(("lib" + libName + fileExtension).c_str(), RTLD_LAZY); if(!libBackend) { - std::cerr << "WARNING: "<< m_backendName <<" cannot load backend library: " << dlerror() << std::endl; + std::cerr << "WARNING: " << m_backendName << " cannot load backend library: " << dlerror() << std::endl; return; } #endif #ifdef WIN32 - fn_startBackend = (startBackend_t) GetProcAddress(libBackend, "xmrstak_start_backend"); - if (!fn_startBackend) + fn_startBackend = (startBackend_t)GetProcAddress(libBackend, "xmrstak_start_backend"); + if(!fn_startBackend) { - std::cerr << "WARNING: backend plugin " << libName << " contains no entry 'xmrstak_start_backend': " < +#include #include +#include #include -#include #include -#include #ifndef CONF_NO_TLS -#include #include +#include #endif #ifdef _WIN32 -# define strcasecmp _stricmp -# include -# include "xmrstak/misc/uac.hpp" +#define strcasecmp _stricmp +#include "xmrstak/misc/uac.hpp" +#include #endif // _WIN32 int do_benchmark(int block_version, int wait_sec, int work_sec); @@ -62,60 +61,62 @@ void help() using namespace std; using namespace xmrstak; - cout<<"Usage: "<> pool; std::string userName; - std::cout<<"- Username (wallet address or pool login):"<> userName; std::string passwd; - std::cin.clear(); std::cin.ignore(INT_MAX,'\n'); - std::cout<<"- Password (mostly empty or x):"<> pool_weight) || pool_weight <= 0) { std::cin.clear(); @@ -178,16 +181,16 @@ std::string get_multipool_entry(bool& final) final = !read_yes_no("- Do you want to add another pool? (y/N)", "N"); - return "\t{\"pool_address\" : \"" + pool +"\", \"wallet_address\" : \"" + userName + "\", \"rig_id\" : \"" + rigid + - "\", \"pool_password\" : \"" + passwd + "\", \"use_nicehash\" : " + bool_to_str(nicehash) + ", \"use_tls\" : " + - bool_to_str(tls) + ", \"tls_fingerprint\" : \"\", \"pool_weight\" : " + std::to_string(pool_weight) + " },\n"; + return "\t{\"pool_address\" : \"" + pool + "\", \"wallet_address\" : \"" + userName + "\", \"rig_id\" : \"" + rigid + + "\", \"pool_password\" : \"" + passwd + "\", \"use_nicehash\" : " + bool_to_str(nicehash) + ", \"use_tls\" : " + + bool_to_str(tls) + ", \"tls_fingerprint\" : \"\", \"pool_weight\" : " + std::to_string(pool_weight) + " },\n"; } inline void prompt_once(bool& prompted) { if(!prompted) { - std::cout<<"Please enter:"<> tmp; } @@ -229,7 +232,7 @@ void do_guided_pool_config(const bool use_simple_start) prompt_once(prompted); userSetPool = false; - std::cout<<"- Pool address: e.g. " << jconf::GetDefaultPool(xmrstak::params::inst().currency.c_str()) << std::endl; + std::cout << "- Pool address: e.g. " << jconf::GetDefaultPool(xmrstak::params::inst().currency.c_str()) << std::endl; std::cin >> pool; } @@ -238,7 +241,7 @@ void do_guided_pool_config(const bool use_simple_start) { prompt_once(prompted); - std::cout<<"- Username (wallet address or pool login):"<> userName; } @@ -249,10 +252,11 @@ void do_guided_pool_config(const bool use_simple_start) prompt_once(prompted); // clear everything from stdin to allow an empty password - std::cin.clear(); std::cin.ignore(INT_MAX,'\n'); + std::cin.clear(); + std::cin.ignore(INT_MAX, '\n'); stdin_flushed = true; - std::cout<<"- Password (mostly empty or x):"<> pool_weight) || pool_weight <= 0) { @@ -311,9 +316,9 @@ void do_guided_pool_config(const bool use_simple_start) } std::string pool_table; - pool_table += "\t{\"pool_address\" : \"" + pool +"\", \"wallet_address\" : \"" + userName + "\", \"rig_id\" : \"" + rigid + - "\", \"pool_password\" : \"" + passwd + "\", \"use_nicehash\" : " + bool_to_str(nicehash) + ", \"use_tls\" : " + - bool_to_str(tls) + ", \"tls_fingerprint\" : \"\", \"pool_weight\" : " + std::to_string(pool_weight) + " },\n"; + pool_table += "\t{\"pool_address\" : \"" + pool + "\", \"wallet_address\" : \"" + userName + "\", \"rig_id\" : \"" + rigid + + "\", \"pool_password\" : \"" + passwd + "\", \"use_nicehash\" : " + bool_to_str(nicehash) + ", \"use_tls\" : " + + bool_to_str(tls) + ", \"tls_fingerprint\" : \"\", \"pool_weight\" : " + std::to_string(pool_weight) + " },\n"; if(multipool) { @@ -321,14 +326,13 @@ void do_guided_pool_config(const bool use_simple_start) do { pool_table += get_multipool_entry(final); - } - while(!final); + } while(!final); } configTpl.replace("CURRENCY", currency); configTpl.replace("POOLCONF", pool_table); configTpl.write(params::inst().configFilePools); - std::cout<<"Pool configuration stored in file '"<> port) || port < 0 || port > 65535) @@ -371,10 +375,10 @@ void do_guided_config(const bool use_simple_start) configTpl.replace("HTTP_PORT", std::to_string(http_port)); configTpl.write(params::inst().configFile); - std::cout<<"Configuration stored in file '"<=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--openCLVendor' given"); win_exit(); @@ -480,7 +484,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--cpu") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--cpu' given"); win_exit(); @@ -491,7 +495,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--amd") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--amd' given"); win_exit(); @@ -502,7 +506,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--amdCacheDir") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--amdCacheDir' given"); win_exit(); @@ -513,7 +517,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--nvidia") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--nvidia' given"); win_exit(); @@ -524,7 +528,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--currency") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--currency' given"); win_exit(); @@ -535,7 +539,7 @@ int main(int argc, char *argv[]) else if(opName.compare("-o") == 0 || opName.compare("--url") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-o/--url' given"); win_exit(); @@ -547,7 +551,7 @@ int main(int argc, char *argv[]) else if(opName.compare("-O") == 0 || opName.compare("--tls-url") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-O/--tls-url' given"); win_exit(); @@ -566,7 +570,7 @@ int main(int argc, char *argv[]) } ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-u/--user' given"); win_exit(); @@ -584,7 +588,7 @@ int main(int argc, char *argv[]) } ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-p/--pass' given"); win_exit(); @@ -603,7 +607,7 @@ int main(int argc, char *argv[]) } ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-r/--rigid' given"); win_exit(); @@ -620,7 +624,7 @@ int main(int argc, char *argv[]) else if(opName.compare("-c") == 0 || opName.compare("--config") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-c/--config' given"); win_exit(); @@ -631,7 +635,7 @@ int main(int argc, char *argv[]) else if(opName.compare("-C") == 0 || opName.compare("--poolconf") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-C/--poolconf' given"); win_exit(); @@ -642,7 +646,7 @@ int main(int argc, char *argv[]) else if(opName.compare("-i") == 0 || opName.compare("--httpd") == 0) { ++i; - if( i >=argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '-i/--httpd' given"); win_exit(); @@ -668,7 +672,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--benchmark") == 0) { ++i; - if( i >= argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--benchmark' given"); win_exit(); @@ -687,7 +691,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--benchwait") == 0) { ++i; - if( i >= argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--benchwait' given"); win_exit(); @@ -706,7 +710,7 @@ int main(int argc, char *argv[]) else if(opName.compare("--benchwork") == 0) { ++i; - if( i >= argc ) + if(i >= argc) { printer::inst()->print_msg(L0, "No argument for parameter '--benchwork' given"); win_exit(); @@ -724,7 +728,7 @@ int main(int argc, char *argv[]) } else { - printer::inst()->print_msg(L0, "Parameter unknown '%s'",argv[i]); + printer::inst()->print_msg(L0, "Parameter unknown '%s'", argv[i]); win_exit(); return 1; } @@ -762,7 +766,7 @@ int main(int argc, char *argv[]) if(strlen(jconf::inst()->GetOutputFile()) != 0) printer::inst()->open_logfile(jconf::inst()->GetOutputFile()); - if (!BackendConnector::self_test()) + if(!BackendConnector::self_test()) { printer::inst()->print_msg(L0, "Self test not passed!"); win_exit(); @@ -776,7 +780,7 @@ int main(int argc, char *argv[]) win_exit(); return 1; #else - if (!httpd::inst()->start_daemon()) + if(!httpd::inst()->start_daemon()) { win_exit(); return 1; @@ -850,7 +854,7 @@ int main(int argc, char *argv[]) uint64_t currentTime = get_timestamp_ms(); /* Hard guard to make sure we never get called more than twice per second */ - if( currentTime - lastTime < 500) + if(currentTime - lastTime < 500) std::this_thread::sleep_for(std::chrono::milliseconds(500 - (currentTime - lastTime))); lastTime = currentTime; } @@ -866,7 +870,7 @@ int do_benchmark(int block_version, int wait_sec, int work_sec) printer::inst()->print_msg(L0, "Prepare benchmark for block version %d", block_version); uint8_t work[128]; - memset(work,0,128); + memset(work, 0, 128); work[0] = static_cast(block_version); xmrstak::pool_data dat; @@ -874,12 +878,12 @@ int do_benchmark(int block_version, int wait_sec, int work_sec) xmrstak::miner_work oWork = xmrstak::miner_work(); pvThreads = xmrstak::BackendConnector::thread_starter(oWork); - printer::inst()->print_msg(L0, "Wait %d sec until all backends are initialized",wait_sec); + printer::inst()->print_msg(L0, "Wait %d sec until all backends are initialized", wait_sec); std::this_thread::sleep_for(std::chrono::seconds(wait_sec)); /* AMD and NVIDIA is currently only supporting work sizes up to 128byte */ - printer::inst()->print_msg(L0, "Start a %d second benchmark...",work_sec); + printer::inst()->print_msg(L0, "Start a %d second benchmark...", work_sec); xmrstak::globalStates::inst().switch_work(xmrstak::miner_work("", work, 128, 0, false, 0, 0), dat); uint64_t iStartStamp = get_timestamp_ms(); @@ -887,7 +891,7 @@ int do_benchmark(int block_version, int wait_sec, int work_sec) xmrstak::globalStates::inst().switch_work(xmrstak::miner_work("", work, 128, 0, false, 0, 0), dat); double fTotalHps = 0.0; - for (uint32_t i = 0; i < pvThreads->size(); i++) + for(uint32_t i = 0; i < pvThreads->size(); i++) { double fHps = pvThreads->at(i)->iHashCount; fHps /= (pvThreads->at(i)->iTimestamp - iStartStamp) / 1000.0; @@ -895,7 +899,7 @@ int do_benchmark(int block_version, int wait_sec, int work_sec) auto bType = static_cast(pvThreads->at(i)->backendType); std::string name(xmrstak::iBackend::getName(bType)); - printer::inst()->print_msg(L0, "Benchmark Thread %u %s: %.1f H/S", i,name.c_str(), fHps); + printer::inst()->print_msg(L0, "Benchmark Thread %u %s: %.1f H/S", i, name.c_str(), fHps); fTotalHps += fHps; } diff --git a/xmrstak/http/httpd.cpp b/xmrstak/http/httpd.cpp index ed9abc2bc..b4f0f547e 100644 --- a/xmrstak/http/httpd.cpp +++ b/xmrstak/http/httpd.cpp @@ -23,16 +23,15 @@ #ifndef CONF_NO_HTTPD - #include "httpd.hpp" #include "webdesign.hpp" -#include "xmrstak/net/msgstruct.hpp" +#include "xmrstak/jconf.hpp" #include "xmrstak/misc/console.hpp" #include "xmrstak/misc/executor.hpp" -#include "xmrstak/jconf.hpp" +#include "xmrstak/net/msgstruct.hpp" -#include #include +#include #include #include @@ -45,21 +44,20 @@ httpd* httpd::oInst = nullptr; httpd::httpd() { - } -int httpd::req_handler(void * cls, - MHD_Connection* connection, - const char* url, - const char* method, - const char* version, - const char* upload_data, - size_t* upload_data_size, - void ** ptr) +int httpd::req_handler(void* cls, + MHD_Connection* connection, + const char* url, + const char* method, + const char* version, + const char* upload_data, + size_t* upload_data_size, + void** ptr) { - struct MHD_Response * rsp; + struct MHD_Response* rsp; - if (strcmp(method, "GET") != 0) + if(strcmp(method, "GET") != 0) return MHD_NO; if(strlen(jconf::inst()->GetHttpUsername()) != 0) @@ -68,7 +66,7 @@ int httpd::req_handler(void * cls, int ret; username = MHD_digest_auth_get_username(connection); - if (username == NULL) + if(username == NULL) { rsp = MHD_create_response_from_buffer(sHtmlAccessDeniedSize, (void*)sHtmlAccessDenied, MHD_RESPMEM_PERSISTENT); ret = MHD_queue_auth_fail_response(connection, sHttpAuthRealm, sHttpAuthOpaque, rsp, MHD_NO); @@ -78,7 +76,7 @@ int httpd::req_handler(void * cls, free(username); ret = MHD_digest_auth_check(connection, sHttpAuthRealm, jconf::inst()->GetHttpUsername(), jconf::inst()->GetHttpPassword(), 300); - if (ret == MHD_INVALID_NONCE || ret == MHD_NO) + if(ret == MHD_INVALID_NONCE || ret == MHD_NO) { rsp = MHD_create_response_from_buffer(sHtmlAccessDeniedSize, (void*)sHtmlAccessDenied, MHD_RESPMEM_PERSISTENT); ret = MHD_queue_auth_fail_response(connection, sHttpAuthRealm, sHttpAuthOpaque, rsp, (ret == MHD_INVALID_NONCE) ? MHD_YES : MHD_NO); @@ -174,4 +172,3 @@ bool httpd::start_daemon() } #endif - diff --git a/xmrstak/http/httpd.hpp b/xmrstak/http/httpd.hpp index fe534f038..dfad082ca 100644 --- a/xmrstak/http/httpd.hpp +++ b/xmrstak/http/httpd.hpp @@ -7,27 +7,28 @@ struct MHD_Connection; class httpd { -public: + public: static httpd* inst() { - if (oInst == nullptr) oInst = new httpd; + if(oInst == nullptr) + oInst = new httpd; return oInst; }; bool start_daemon(); -private: + private: httpd(); static httpd* oInst; - static int req_handler(void * cls, - MHD_Connection* connection, - const char* url, - const char* method, - const char* version, - const char* upload_data, - size_t* upload_data_size, - void ** ptr); + static int req_handler(void* cls, + MHD_Connection* connection, + const char* url, + const char* method, + const char* version, + const char* upload_data, + size_t* upload_data_size, + void** ptr); - MHD_Daemon *d; + MHD_Daemon* d; }; diff --git a/xmrstak/http/webdesign.cpp b/xmrstak/http/webdesign.cpp index 8f20078aa..fbd565269 100644 --- a/xmrstak/http/webdesign.cpp +++ b/xmrstak/http/webdesign.cpp @@ -1,114 +1,114 @@ #include -extern const char sHtmlCssEtag [] = "00000009"; -extern const char sHtmlCssFile [] = +extern const char sHtmlCssEtag[] = "00000009"; +extern const char sHtmlCssFile[] = "body {" - "font-family: Tahoma, Arial, sans-serif;" - "font-size: 80%;" - "background-color: rgb(240, 240, 240);" + "font-family: Tahoma, Arial, sans-serif;" + "font-size: 80%;" + "background-color: rgb(240, 240, 240);" "}" "a {" - "color: rgb(44, 55, 66);" + "color: rgb(44, 55, 66);" "}" "a:link {" - "text-decoration: none;" + "text-decoration: none;" "}" "a:visited {" - "color: rgb(44, 55, 66);" + "color: rgb(44, 55, 66);" "}" "a:hover {" - "color: rgb(255, 153, 0);" + "color: rgb(255, 153, 0);" "}" "a:active {" - "color: rgb(204, 122, 0);" + "color: rgb(204, 122, 0);" "}" ".all {" - "max-width:600px;" - "margin: auto;" + "max-width:600px;" + "margin: auto;" "}" ".header {" - "background-color: rgb(30, 30, 30);" - "color: white;" - "padding: 10px;" - "font-weight: bold;" - "margin: 0px;" - "margin-bottom: 10px;" + "background-color: rgb(30, 30, 30);" + "color: white;" + "padding: 10px;" + "font-weight: bold;" + "margin: 0px;" + "margin-bottom: 10px;" "}" ".version {" - "font-size: 75%;" - "text-align: right;" + "font-size: 75%;" + "text-align: right;" "}" ".links {" - "padding: 7px;" - "text-align: center;" - "background-color: rgb(215, 215, 215);" - "box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12);" + "padding: 7px;" + "text-align: center;" + "background-color: rgb(215, 215, 215);" + "box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12);" "}" ".data th, td {" - "padding: 5px 12px;" - "text-align: right;" - "border-bottom: 1px solid #ccc;" + "padding: 5px 12px;" + "text-align: right;" + "border-bottom: 1px solid #ccc;" "}" ".data tr:nth-child(even) {" - "background-color: #ddd;" + "background-color: #ddd;" "}" ".data th {" - "background-color: #ccc;" + "background-color: #ccc;" "}" ".data table {" - "width: 100%;" - "max-width: 600px;" + "width: 100%;" + "max-width: 600px;" "}" ".letter {" - "font-weight: bold;" + "font-weight: bold;" "}" "h4 {" - "background-color: rgb(0, 130, 130);" - "color: white;" - "padding: 10px;" - "margin: 10px 0px;" + "background-color: rgb(0, 130, 130);" + "color: white;" + "padding: 10px;" + "margin: 10px 0px;" "}" ".flex-container {" - "display: -webkit-flex;" - "display: flex;" + "display: -webkit-flex;" + "display: flex;" "}" ".flex-item {" - "width: 33%;" - "margin: 3px;" + "width: 33%;" + "margin: 3px;" "}" ".motd-box {" - "background-color: #ccc;" - "padding: 0px 10px 5px 10px;" - "margin-bottom: 10px;" + "background-color: #ccc;" + "padding: 0px 10px 5px 10px;" + "margin-bottom: 10px;" "}" ".motd-head {" - "border-bottom: 1px solid #000;" - "margin-bottom: 0.5em;" - "padding: 0.5em 0em;" - "font-weight: bold;" + "border-bottom: 1px solid #000;" + "margin-bottom: 0.5em;" + "padding: 0.5em 0em;" + "font-weight: bold;" "}" ".motd-body {" - "overflow: hidden;" + "overflow: hidden;" "}"; size_t sHtmlCssSize = sizeof(sHtmlCssFile) - 1; @@ -124,7 +124,7 @@ extern const char sHtmlAccessDenied[] = size_t sHtmlAccessDeniedSize = sizeof(sHtmlAccessDenied) - 1; -extern const char sHtmlCommonHeader [] = +extern const char sHtmlCommonHeader[] = "" "" "" @@ -135,15 +135,15 @@ extern const char sHtmlCommonHeader [] = "
XMR-Stak Monero Miner
" "
" - "" - "" - "" + "" + "" + "" "
" "

%s

"; @@ -151,61 +151,61 @@ extern const char sHtmlMotdBoxStart[] = "
"; extern const char sHtmlMotdEntry[] = "
Message from %s
%s
"; extern const char sHtmlMotdBoxEnd[] = "
"; -extern const char sHtmlHashrateBodyHigh [] = +extern const char sHtmlHashrateBodyHigh[] = "
" "" - ""; + ""; -extern const char sHtmlHashrateTableRow [] = +extern const char sHtmlHashrateTableRow[] = ""; -extern const char sHtmlHashrateBodyLow [] = - "" - "" +extern const char sHtmlHashrateBodyLow[] = + "" + "" "
Thread ID10s60s15mH/s
Thread ID10s60s15mH/s
%s%s%s%s
Totals:%s%s%s
Highest:%s
Totals:%s%s%s
Highest:%s
" "
"; -extern const char sHtmlConnectionBodyHigh [] = +extern const char sHtmlConnectionBodyHigh[] = "
" "" - "" - "" - "" - "" + "" + "" + "" + "" "
Rig ID%s
Pool address%s
Connected since%s
Pool ping time%u ms
Rig ID%s
Pool address%s
Connected since%s
Pool ping time%u ms
" "

Network error log

" "" - ""; + ""; -extern const char sHtmlConnectionTableRow [] = +extern const char sHtmlConnectionTableRow[] = ""; -extern const char sHtmlConnectionBodyLow [] = +extern const char sHtmlConnectionBodyLow[] = "
DateError
DateError
%s%s
"; -extern const char sHtmlResultBodyHigh [] = +extern const char sHtmlResultBodyHigh[] = "
" "" - "" - "" - "" - "" - "" + "" + "" + "" + "" + "" "
Currency%s
Difficulty%u
Good results%u / %u (%.1f %%)
Avg result time%.1f sec
Pool-side hashes%u
Currency%s
Difficulty%u
Good results%u / %u (%.1f %%)
Avg result time%.1f sec
Pool-side hashes%u
" "

Top 10 best results found

" "" - "" - "" - "" - "" - "" + "" + "" + "" + "" + "" "
1%llu2%llu
3%llu4%llu
5%llu6%llu
7%llu8%llu
9%llu10%llu
1%llu2%llu
3%llu4%llu
5%llu6%llu
7%llu8%llu
9%llu10%llu
" "

Error details

" "" - "" - ""; + "" + ""; -extern const char sHtmlResultTableRow [] = +extern const char sHtmlResultTableRow[] = ""; extern const char sHtmlResultBodyLow[] = @@ -220,31 +220,30 @@ extern const char sJsonApiResultError[] = extern const char sJsonApiConnectionError[] = "{\"last_seen\":%llu,\"text\":\"%s\"}"; -extern const char sJsonApiFormat [] = -"{" +extern const char sJsonApiFormat[] = + "{" "\"version\":\"%s\"," "\"hashrate\":{" - "\"threads\":[%s]," - "\"total\":%s," - "\"highest\":%s" + "\"threads\":[%s]," + "\"total\":%s," + "\"highest\":%s" "}," "\"results\":{" - "\"diff_current\":%llu," - "\"shares_good\":%llu," - "\"shares_total\":%llu," - "\"avg_time\":%.1f," - "\"hashes_total\":%llu," - "\"best\":[%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu]," - "\"error_log\":[%s]" + "\"diff_current\":%llu," + "\"shares_good\":%llu," + "\"shares_total\":%llu," + "\"avg_time\":%.1f," + "\"hashes_total\":%llu," + "\"best\":[%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu]," + "\"error_log\":[%s]" "}," "\"connection\":{" - "\"pool\": \"%s\"," - "\"uptime\":%llu," - "\"ping\":%llu," - "\"error_log\":[%s]" + "\"pool\": \"%s\"," + "\"uptime\":%llu," + "\"ping\":%llu," + "\"error_log\":[%s]" "}" -"}"; - + "}"; diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 5e3384a63..10082a09f 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -26,16 +26,15 @@ #include "xmrstak/misc/console.hpp" #include "xmrstak/misc/jext.hpp" -#include "xmrstak/misc/console.hpp" #include "xmrstak/misc/utility.hpp" +#include +#include +#include #include #include #include -#include #include -#include -#include #ifdef _WIN32 #define strcasecmp _stricmp @@ -44,18 +43,34 @@ #include #endif - using namespace rapidjson; /* * This enum needs to match index in oConfigValues, otherwise we will get a runtime error */ -enum configEnum { - aPoolList, sCurrency, bTlsSecureAlgo, iCallTimeout, iNetRetry, iGiveUpLimit, iVerboseLevel, bPrintMotd, iAutohashTime, - bDaemonMode, sOutputFile, iHttpdPort, sHttpLogin, sHttpPass, bPreferIpv4, bAesOverride, sUseSlowMem +enum configEnum +{ + aPoolList, + sCurrency, + bTlsSecureAlgo, + iCallTimeout, + iNetRetry, + iGiveUpLimit, + iVerboseLevel, + bPrintMotd, + iAutohashTime, + bDaemonMode, + sOutputFile, + iHttpdPort, + sHttpLogin, + sHttpPass, + bPreferIpv4, + bAesOverride, + sUseSlowMem }; -struct configVal { +struct configVal +{ configEnum iName; const char* sName; Type iType; @@ -64,68 +79,66 @@ struct configVal { // Same order as in configEnum, as per comment above // kNullType means any type configVal oConfigValues[] = { - { aPoolList, "pool_list", kArrayType }, - { sCurrency, "currency", kStringType }, - { bTlsSecureAlgo, "tls_secure_algo", kTrueType }, - { iCallTimeout, "call_timeout", kNumberType }, - { iNetRetry, "retry_time", kNumberType }, - { iGiveUpLimit, "giveup_limit", kNumberType }, - { iVerboseLevel, "verbose_level", kNumberType }, - { bPrintMotd, "print_motd", kTrueType }, - { iAutohashTime, "h_print_time", kNumberType }, - { bDaemonMode, "daemon_mode", kTrueType }, - { sOutputFile, "output_file", kStringType }, - { iHttpdPort, "httpd_port", kNumberType }, - { sHttpLogin, "http_login", kStringType }, - { sHttpPass, "http_pass", kStringType }, - { bPreferIpv4, "prefer_ipv4", kTrueType }, - { bAesOverride, "aes_override", kNullType }, - { sUseSlowMem, "use_slow_memory", kStringType } -}; - -constexpr size_t iConfigCnt = (sizeof(oConfigValues)/sizeof(oConfigValues[0])); + {aPoolList, "pool_list", kArrayType}, + {sCurrency, "currency", kStringType}, + {bTlsSecureAlgo, "tls_secure_algo", kTrueType}, + {iCallTimeout, "call_timeout", kNumberType}, + {iNetRetry, "retry_time", kNumberType}, + {iGiveUpLimit, "giveup_limit", kNumberType}, + {iVerboseLevel, "verbose_level", kNumberType}, + {bPrintMotd, "print_motd", kTrueType}, + {iAutohashTime, "h_print_time", kNumberType}, + {bDaemonMode, "daemon_mode", kTrueType}, + {sOutputFile, "output_file", kStringType}, + {iHttpdPort, "httpd_port", kNumberType}, + {sHttpLogin, "http_login", kStringType}, + {sHttpPass, "http_pass", kStringType}, + {bPreferIpv4, "prefer_ipv4", kTrueType}, + {bAesOverride, "aes_override", kNullType}, + {sUseSlowMem, "use_slow_memory", kStringType}}; + +constexpr size_t iConfigCnt = (sizeof(oConfigValues) / sizeof(oConfigValues[0])); xmrstak::coin_selection coins[] = { // name, userpool, devpool, default_pool_suggestion - { "aeon7", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, "mine.aeon-pool.com:5555" }, - { "bbscoin", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr }, - { "bittube", {POW(cryptonight_bittube2)}, {POW(cryptonight_gpu)}, "mining.bit.tube:13333" }, - { "cryptonight", {POW(cryptonight)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_bittube2", {POW(cryptonight_bittube2)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_masari", {POW(cryptonight_masari)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_heavy", {POW(cryptonight_heavy)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_lite", {POW(cryptonight_lite)}, {POW(cryptonight_aeon)}, nullptr }, - { "cryptonight_lite_v7", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr }, - { "cryptonight_lite_v7_xor", {POW(cryptonight_ipbc)}, {POW(cryptonight_aeon)}, nullptr }, - { "cryptonight_r", {POW(cryptonight_r)}, {POW(cryptonight_r)}, nullptr }, - { "cryptonight_superfast", {POW(cryptonight_superfast)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_turtle", {POW(cryptonight_turtle)}, {POW(cryptonight_turtle)}, nullptr }, - { "cryptonight_v7", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_v8", {POW(cryptonight_monero_v8)}, {POW(cryptonight_r)}, nullptr }, - { "cryptonight_v8_double", {POW(cryptonight_v8_double)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_v8_half", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_v8_reversewaltz", {POW(cryptonight_v8_reversewaltz)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_v8_zelerius", {POW(cryptonight_v8_zelerius)},{POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_v7_stellite", {POW(cryptonight_stellite)}, {POW(cryptonight_gpu)}, nullptr }, - { "cryptonight_gpu", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333" }, - { "cryptonight_conceal", {POW(cryptonight_conceal)}, {POW(cryptonight_gpu)}, nullptr }, - { "freehaven", {POW(cryptonight_superfast)}, {POW(cryptonight_gpu)}, nullptr }, - { "graft", {POW(cryptonight_v8_reversewaltz), 12, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr }, - { "haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr }, - { "lethean", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr }, - { "masari", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr }, - { "monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "pool.usxmrpool.com:3333" }, - { "qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr }, - { "ryo", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333" }, - { "stellite", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr }, - { "turtlecoin", {POW(cryptonight_turtle), 6u,POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr }, - { "plenteum", {POW(cryptonight_turtle)}, {POW(cryptonight_turtle)}, nullptr }, - { "zelerius", {POW(cryptonight_v8_zelerius), 7, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr }, - { "xcash", {POW(cryptonight_v8_double)}, {POW(cryptonight_gpu)}, nullptr } -}; - -constexpr size_t coin_algo_size = (sizeof(coins)/sizeof(coins[0])); + {"aeon7", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, "mine.aeon-pool.com:5555"}, + {"bbscoin", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr}, + {"bittube", {POW(cryptonight_bittube2)}, {POW(cryptonight_gpu)}, "mining.bit.tube:13333"}, + {"cryptonight", {POW(cryptonight)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_bittube2", {POW(cryptonight_bittube2)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_masari", {POW(cryptonight_masari)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_heavy", {POW(cryptonight_heavy)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_lite", {POW(cryptonight_lite)}, {POW(cryptonight_aeon)}, nullptr}, + {"cryptonight_lite_v7", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr}, + {"cryptonight_lite_v7_xor", {POW(cryptonight_ipbc)}, {POW(cryptonight_aeon)}, nullptr}, + {"cryptonight_r", {POW(cryptonight_r)}, {POW(cryptonight_r)}, nullptr}, + {"cryptonight_superfast", {POW(cryptonight_superfast)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_turtle", {POW(cryptonight_turtle)}, {POW(cryptonight_turtle)}, nullptr}, + {"cryptonight_v7", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_v8", {POW(cryptonight_monero_v8)}, {POW(cryptonight_r)}, nullptr}, + {"cryptonight_v8_double", {POW(cryptonight_v8_double)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_v8_half", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_v8_reversewaltz", {POW(cryptonight_v8_reversewaltz)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_v8_zelerius", {POW(cryptonight_v8_zelerius)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_v7_stellite", {POW(cryptonight_stellite)}, {POW(cryptonight_gpu)}, nullptr}, + {"cryptonight_gpu", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, + {"cryptonight_conceal", {POW(cryptonight_conceal)}, {POW(cryptonight_gpu)}, nullptr}, + {"freehaven", {POW(cryptonight_superfast)}, {POW(cryptonight_gpu)}, nullptr}, + {"graft", {POW(cryptonight_v8_reversewaltz), 12, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, + {"haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr}, + {"lethean", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, + {"masari", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, + {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "pool.usxmrpool.com:3333"}, + {"qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, + {"ryo", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, + {"stellite", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, + {"turtlecoin", {POW(cryptonight_turtle), 6u, POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr}, + {"plenteum", {POW(cryptonight_turtle)}, {POW(cryptonight_turtle)}, nullptr}, + {"zelerius", {POW(cryptonight_v8_zelerius), 7, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, + {"xcash", {POW(cryptonight_v8_double)}, {POW(cryptonight_gpu)}, nullptr}}; + +constexpr size_t coin_algo_size = (sizeof(coins) / sizeof(coins[0])); inline bool checkType(Type have, Type want) { @@ -275,7 +288,7 @@ const char* jconf::GetOutputFile() void jconf::cpuid(uint32_t eax, int32_t ecx, int32_t val[4]) { - memset(val, 0, sizeof(int32_t)*4); + memset(val, 0, sizeof(int32_t) * 4); #ifdef _WIN32 __cpuidex(val, eax, ecx); @@ -326,7 +339,7 @@ std::string jconf::GetMiningCoin() void jconf::GetAlgoList(std::string& list) { list.reserve(256); - for(size_t i=0; i < coin_algo_size; i++) + for(size_t i = 0; i < coin_algo_size; i++) { list += "\t- "; list += coins[i].coin_name; @@ -338,7 +351,7 @@ bool jconf::IsOnAlgoList(std::string& needle) { std::transform(needle.begin(), needle.end(), needle.begin(), ::tolower); - for(size_t i=0; i < coin_algo_size; i++) + for(size_t i = 0; i < coin_algo_size; i++) { if(needle == coins[i].coin_name) return true; @@ -350,7 +363,7 @@ const char* jconf::GetDefaultPool(const char* needle) { const char* default_example = "pool.example.com:3333"; - for(size_t i=0; i < coin_algo_size; i++) + for(size_t i = 0; i < coin_algo_size; i++) { if(strcmp(needle, coins[i].coin_name) == 0) { @@ -366,22 +379,22 @@ const char* jconf::GetDefaultPool(const char* needle) bool jconf::parse_file(const char* sFilename, bool main_conf) { - FILE * pFile; - char * buffer; + FILE* pFile; + char* buffer; size_t flen; pFile = fopen(sFilename, "rb"); - if (pFile == NULL) + if(pFile == NULL) { printer::inst()->print_msg(L0, "Failed to open config file %s.", sFilename); return false; } - fseek(pFile,0,SEEK_END); + fseek(pFile, 0, SEEK_END); flen = ftell(pFile); rewind(pFile); - if(flen >= 64*1024) + if(flen >= 64 * 1024) { fclose(pFile); printer::inst()->print_msg(L0, "Oversized config file - %s.", sFilename); @@ -396,7 +409,7 @@ bool jconf::parse_file(const char* sFilename, bool main_conf) } buffer = (char*)malloc(flen + 3); - if(fread(buffer+1, flen, 1, pFile) != 1) + if(fread(buffer + 1, flen, 1, pFile) != 1) { free(buffer); fclose(pFile); @@ -420,7 +433,7 @@ bool jconf::parse_file(const char* sFilename, bool main_conf) Document& root = main_conf ? prv->jsonDoc : prv->jsonDocPools; - root.Parse(buffer, flen+2); + root.Parse(buffer, flen + 2); free(buffer); if(root.HasParseError()) @@ -514,11 +527,11 @@ bool jconf::parse_config(const char* sFilename, const char* sFilenamePools) std::vector pool_weights; pool_weights.reserve(pool_cnt); - const char* aPoolValues[] = { "pool_address", "wallet_address", "rig_id", "pool_password", "use_nicehash", "use_tls", "tls_fingerprint", "pool_weight" }; - Type poolValTypes[] = { kStringType, kStringType, kStringType, kStringType, kTrueType, kTrueType, kStringType, kNumberType }; + const char* aPoolValues[] = {"pool_address", "wallet_address", "rig_id", "pool_password", "use_nicehash", "use_tls", "tls_fingerprint", "pool_weight"}; + Type poolValTypes[] = {kStringType, kStringType, kStringType, kStringType, kTrueType, kTrueType, kStringType, kNumberType}; - constexpr size_t pvcnt = sizeof(aPoolValues)/sizeof(aPoolValues[0]); - for(uint32_t i=0; i < pool_cnt; i++) + constexpr size_t pvcnt = sizeof(aPoolValues) / sizeof(aPoolValues[0]); + for(uint32_t i = 0; i < pool_cnt; i++) { const Value& oThdConf = prv->configValues[aPoolList]->GetArray()[i]; @@ -528,7 +541,7 @@ bool jconf::parse_config(const char* sFilename, const char* sFilenamePools) return false; } - for(uint32_t j=0; j < pvcnt; j++) + for(uint32_t j = 0; j < pvcnt; j++) { const Value* v; if((v = GetObjectMember(oThdConf, aPoolValues[j])) == nullptr) @@ -620,7 +633,7 @@ bool jconf::parse_config(const char* sFilename, const char* sFilenamePools) return false; } - for(size_t i=0; i < coin_algo_size; i++) + for(size_t i = 0; i < coin_algo_size; i++) { if(ctmp == coins[i].coin_name) { diff --git a/xmrstak/jconf.hpp b/xmrstak/jconf.hpp index 102b70f54..5597bf23e 100644 --- a/xmrstak/jconf.hpp +++ b/xmrstak/jconf.hpp @@ -1,15 +1,15 @@ #pragma once -#include "xmrstak/misc/environment.hpp" -#include "xmrstak/misc/coinDescription.hpp" #include "params.hpp" +#include "xmrstak/misc/coinDescription.hpp" +#include "xmrstak/misc/environment.hpp" #include #include class jconf { -public: + public: static jconf* inst() { auto& env = xmrstak::environment::inst(); @@ -20,7 +20,8 @@ class jconf bool parse_config(const char* sFilename, const char* sFilenamePools); - struct pool_cfg { + struct pool_cfg + { const char* sPoolAddr; const char* sWalletAddr; const char* sRigId; @@ -38,7 +39,8 @@ class jconf uint64_t GetPoolCount(); bool GetPoolConfig(size_t id, pool_cfg& cfg); - enum slow_mem_cfg { + enum slow_mem_cfg + { always_use, no_mlck, print_warning, @@ -80,7 +82,7 @@ class jconf slow_mem_cfg GetSlowMemSetting(); -private: + private: jconf(); bool parse_file(const char* sFilename, bool main_conf); diff --git a/xmrstak/misc/coinDescription.hpp b/xmrstak/misc/coinDescription.hpp index 65dee143c..b3b119226 100644 --- a/xmrstak/misc/coinDescription.hpp +++ b/xmrstak/misc/coinDescription.hpp @@ -2,86 +2,88 @@ #include "xmrstak/backend/cryptonight.hpp" +#include #include #include #include -#include namespace xmrstak { - struct coinDescription - { - xmrstak_algo algo = {xmrstak_algo_id::invalid_algo}; - uint8_t fork_version = 0u; - xmrstak_algo algo_root = {xmrstak_algo_id::invalid_algo}; +struct coinDescription +{ + xmrstak_algo algo = {xmrstak_algo_id::invalid_algo}; + uint8_t fork_version = 0u; + xmrstak_algo algo_root = {xmrstak_algo_id::invalid_algo}; - coinDescription() = default; + coinDescription() = default; - coinDescription( - const xmrstak_algo in_algo, - const uint8_t in_fork_version = 0, - xmrstak_algo in_algo_root = xmrstak_algo_id::invalid_algo - ) : - algo(in_algo), algo_root(in_algo_root), fork_version(in_fork_version) - {} + coinDescription( + const xmrstak_algo in_algo, + const uint8_t in_fork_version = 0, + xmrstak_algo in_algo_root = xmrstak_algo_id::invalid_algo) : + algo(in_algo), + algo_root(in_algo_root), + fork_version(in_fork_version) + { + } - inline xmrstak_algo GetMiningAlgo() const { return algo; } - inline xmrstak_algo GetMiningAlgoRoot() const { return algo_root; } - inline uint8_t GetMiningForkVersion() const { return fork_version; } - }; + inline xmrstak_algo GetMiningAlgo() const { return algo; } + inline xmrstak_algo GetMiningAlgoRoot() const { return algo_root; } + inline uint8_t GetMiningForkVersion() const { return fork_version; } +}; - struct coin_selection - { - const char* coin_name = nullptr; - /* [0] -> user pool +struct coin_selection +{ + const char* coin_name = nullptr; + /* [0] -> user pool * [1] -> dev pool */ - coinDescription pool_coin[2]; - const char* default_pool = nullptr; + coinDescription pool_coin[2]; + const char* default_pool = nullptr; - coin_selection() = default; + coin_selection() = default; - coin_selection( - const char* in_coin_name, - const coinDescription user_coinDescription, - const coinDescription dev_coinDescription, - const char* in_default_pool - ) : - coin_name(in_coin_name), default_pool(in_default_pool) - { - pool_coin[0] = user_coinDescription; - pool_coin[1] = dev_coinDescription; - } + coin_selection( + const char* in_coin_name, + const coinDescription user_coinDescription, + const coinDescription dev_coinDescription, + const char* in_default_pool) : + coin_name(in_coin_name), + default_pool(in_default_pool) + { + pool_coin[0] = user_coinDescription; + pool_coin[1] = dev_coinDescription; + } - /** get coin description for the pool + /** get coin description for the pool * * @param poolId 0 select dev pool, else the user pool is selected */ - inline coinDescription GetDescription(size_t poolId) const { - coinDescription tmp = (poolId == 0 ? pool_coin[1] : pool_coin[0]); - return tmp; - } + inline coinDescription GetDescription(size_t poolId) const + { + coinDescription tmp = (poolId == 0 ? pool_coin[1] : pool_coin[0]); + return tmp; + } - /** return all POW algorithm for the current selected currency + /** return all POW algorithm for the current selected currency * * @return required POW algorithms without duplicated entries */ - inline std::vector GetAllAlgorithms() - { - std::vector allAlgos = { - GetDescription(0).GetMiningAlgo(), - GetDescription(0).GetMiningAlgoRoot(), - GetDescription(1).GetMiningAlgo(), - GetDescription(1).GetMiningAlgoRoot() - }; + inline std::vector GetAllAlgorithms() + { + std::vector allAlgos = { + GetDescription(0).GetMiningAlgo(), + GetDescription(0).GetMiningAlgoRoot(), + GetDescription(1).GetMiningAlgo(), + GetDescription(1).GetMiningAlgoRoot()}; - std::sort(allAlgos.begin(), allAlgos.end()); - std::remove(allAlgos.begin(), allAlgos.end(), invalid_algo); - auto last = std::unique(allAlgos.begin(), allAlgos.end()); - // remove duplicated algorithms - allAlgos.erase(last, allAlgos.end()); + std::sort(allAlgos.begin(), allAlgos.end()); + std::remove(allAlgos.begin(), allAlgos.end(), invalid_algo); + auto last = std::unique(allAlgos.begin(), allAlgos.end()); + // remove duplicated algorithms + allAlgos.erase(last, allAlgos.end()); - return allAlgos; - } - }; + return allAlgos; + } +}; } // namespace xmrstak diff --git a/xmrstak/misc/configEditor.hpp b/xmrstak/misc/configEditor.hpp index 3f79df44c..ae81f62c5 100644 --- a/xmrstak/misc/configEditor.hpp +++ b/xmrstak/misc/configEditor.hpp @@ -1,10 +1,10 @@ #pragma once #include -#include #include -#include #include +#include +#include #include "../version.hpp" @@ -17,16 +17,15 @@ struct configEditor configEditor() { - } - static bool file_exist( const std::string filename) + static bool file_exist(const std::string filename) { std::ifstream fstream(filename); return fstream.good(); } - void set( const std::string && content) + void set(const std::string&& content) { m_fileContent = content; } @@ -36,8 +35,7 @@ struct configEditor std::ifstream fstream(filename); m_fileContent = std::string( (std::istreambuf_iterator(fstream)), - std::istreambuf_iterator() - ); + std::istreambuf_iterator()); return fstream.good(); } @@ -70,7 +68,6 @@ struct configEditor { m_fileContent = std::regex_replace(m_fileContent, std::regex(search), substring); } - }; } // namespace xmrstak diff --git a/xmrstak/misc/console.cpp b/xmrstak/misc/console.cpp index c39237eab..529cc9453 100644 --- a/xmrstak/misc/console.cpp +++ b/xmrstak/misc/console.cpp @@ -23,11 +23,11 @@ #include "xmrstak/misc/console.hpp" -#include +#include +#include #include #include -#include -#include +#include #ifdef _WIN32 #include @@ -37,15 +37,15 @@ int get_key() DWORD mode, rd; HANDLE h; - if ((h = GetStdHandle(STD_INPUT_HANDLE)) == NULL) + if((h = GetStdHandle(STD_INPUT_HANDLE)) == NULL) return -1; - GetConsoleMode( h, &mode ); - SetConsoleMode( h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT) ); + GetConsoleMode(h, &mode); + SetConsoleMode(h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT)); int c = 0; - ReadConsole( h, &c, 1, &rd, NULL ); - SetConsoleMode( h, mode ); + ReadConsole(h, &c, 1, &rd, NULL); + SetConsoleMode(h, mode); return c; } @@ -90,20 +90,20 @@ void reset_colour() } #else +#include #include #include -#include int get_key() { struct termios oldattr, newattr; int ch; - tcgetattr( STDIN_FILENO, &oldattr ); + tcgetattr(STDIN_FILENO, &oldattr); newattr = oldattr; - newattr.c_lflag &= ~( ICANON | ECHO ); - tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); + newattr.c_lflag &= ~(ICANON | ECHO); + tcsetattr(STDIN_FILENO, TCSANOW, &newattr); ch = getchar(); - tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); + tcsetattr(STDIN_FILENO, TCSANOW, &oldattr); return ch; } @@ -182,17 +182,17 @@ void printer::print_msg(verbosity verbose, const char* fmt, ...) va_list args; va_start(args, fmt); - vsnprintf(buf+bpos, sizeof(buf)-bpos, fmt, args); + vsnprintf(buf + bpos, sizeof(buf) - bpos, fmt, args); va_end(args); bpos = strlen(buf); - if(bpos+2 >= sizeof(buf)) + if(bpos + 2 >= sizeof(buf)) return; buf[bpos] = '\n'; - buf[bpos+1] = '\0'; + buf[bpos + 1] = '\0'; - print_str(buf); + print_str(buf); } void printer::print_str(const char* str) diff --git a/xmrstak/misc/console.hpp b/xmrstak/misc/console.hpp index 6df6597c6..3c27ee86b 100644 --- a/xmrstak/misc/console.hpp +++ b/xmrstak/misc/console.hpp @@ -4,8 +4,17 @@ #include - -enum out_colours { K_RED, K_GREEN, K_BLUE, K_YELLOW, K_CYAN, K_MAGENTA, K_WHITE, K_NONE }; +enum out_colours +{ + K_RED, + K_GREEN, + K_BLUE, + K_YELLOW, + K_CYAN, + K_MAGENTA, + K_WHITE, + K_NONE +}; // Warning - on Linux get_key will detect control keys, but not on Windows. // We will only use it for alphanum keys anyway. @@ -21,11 +30,20 @@ inline long long unsigned int int_port(size_t i) return i; } -enum verbosity : size_t { L0 = 0, L1 = 1, L2 = 2, L3 = 3, L4 = 4, LDEBUG = 10, LINF = 100}; +enum verbosity : size_t +{ + L0 = 0, + L1 = 1, + L2 = 2, + L3 = 3, + L4 = 4, + LDEBUG = 10, + LINF = 100 +}; class printer { -public: + public: static inline printer* inst() { auto& env = xmrstak::environment::inst(); @@ -39,7 +57,7 @@ class printer void print_str(const char* str); bool open_logfile(const char* file); -private: + private: printer(); std::mutex print_mutex; diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp index 79d4731e6..92fcf8acb 100644 --- a/xmrstak/misc/executor.cpp +++ b/xmrstak/misc/executor.cpp @@ -21,31 +21,30 @@ * */ -#include "xmrstak/jconf.hpp" #include "executor.hpp" +#include "xmrstak/jconf.hpp" #include "xmrstak/net/jpsock.hpp" #include "telemetry.hpp" -#include "xmrstak/backend/miner_work.hpp" -#include "xmrstak/backend/globalStates.hpp" #include "xmrstak/backend/backendConnector.hpp" +#include "xmrstak/backend/globalStates.hpp" #include "xmrstak/backend/iBackend.hpp" +#include "xmrstak/backend/miner_work.hpp" +#include "xmrstak/donate-level.hpp" +#include "xmrstak/http/webdesign.hpp" #include "xmrstak/jconf.hpp" #include "xmrstak/misc/console.hpp" -#include "xmrstak/donate-level.hpp" #include "xmrstak/version.hpp" -#include "xmrstak/http/webdesign.hpp" -#include -#include -#include #include -#include #include +#include +#include +#include +#include #include - #ifdef _WIN32 #define strncasecmp _strnicmp #endif // _WIN32 @@ -63,7 +62,7 @@ void executor::push_timed_event(ex_event&& ev, size_t sec) void executor::ex_clock_thd() { size_t tick = 0; - while (true) + while(true) { std::this_thread::sleep_for(std::chrono::milliseconds(size_t(iTickTime))); @@ -76,7 +75,7 @@ void executor::ex_clock_thd() // Service timed events std::unique_lock lck(timed_event_mutex); std::list::iterator ev = lTimedEvents.begin(); - while (ev != lTimedEvents.end()) + while(ev != lTimedEvents.end()) { ev->ticks_left--; if(ev->ticks_left == 0) @@ -96,7 +95,8 @@ bool executor::get_live_pools(std::vector& eval_pools, bool is_dev) size_t limit = jconf::inst()->GetGiveUpLimit(); size_t wait = jconf::inst()->GetNetRetry(); - if(limit == 0 || is_dev) limit = (-1); //No limit = limit of 2^64-1 + if(limit == 0 || is_dev) + limit = (-1); //No limit = limit of 2^64-1 size_t pool_count = 0; size_t over_limit = 0; @@ -330,7 +330,7 @@ void executor::on_sock_ready(size_t pool_id) { if(pool->have_call_error() && !pool->is_dev_pool()) { - std::string str = "Login error: " + pool->get_call_error(); + std::string str = "Login error: " + pool->get_call_error(); log_socket_error(pool, std::move(str)); } @@ -369,7 +369,8 @@ void executor::on_pool_have_job(size_t pool_id, pool_job& oPoolJob) dat.pool_id = pool_id; xmrstak::globalStates::inst().switch_work(xmrstak::miner_work(oPoolJob.sJobID, oPoolJob.bWorkBlob, - oPoolJob.iWorkLen, oPoolJob.iTarget, pool->is_nicehash(), pool_id, oPoolJob.iBlockHeight), dat); + oPoolJob.iWorkLen, oPoolJob.iTarget, pool->is_nicehash(), pool_id, oPoolJob.iBlockHeight), + dat); if(dat.pool_id != pool_id) { @@ -420,12 +421,11 @@ void executor::on_miner_result(size_t pool_id, job_result& oResult) //Ignore errors silently if(pool->is_running() && pool->is_logged_in()) pool->cmd_submit(oResult.sJobID, oResult.iNonce, oResult.bResult, backend_name, - backend_hashcount, total_hashcount, oResult.algorithm - ); + backend_hashcount, total_hashcount, oResult.algorithm); return; } - if (!pool->is_running() || !pool->is_logged_in()) + if(!pool->is_running() || !pool->is_logged_in()) { log_result_error("[NETWORK ERROR]"); return; @@ -433,8 +433,7 @@ void executor::on_miner_result(size_t pool_id, job_result& oResult) size_t t_start = get_timestamp_ms(); bool bResult = pool->cmd_submit(oResult.sJobID, oResult.iNonce, oResult.bResult, - backend_name, backend_hashcount, total_hashcount, oResult.algorithm - ); + backend_name, backend_hashcount, total_hashcount, oResult.algorithm); size_t t_len = get_timestamp_ms() - t_start; if(t_len > 0xFFFF) @@ -477,12 +476,14 @@ void disable_sigpipe() memset(&sa, 0, sizeof(sa)); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; - if (sigaction(SIGPIPE, &sa, 0) == -1) + if(sigaction(SIGPIPE, &sa, 0) == -1) printer::inst()->print_msg(L1, "ERROR: Call to sigaction failed!"); } #else -inline void disable_sigpipe() {} +inline void disable_sigpipe() +{ +} #endif void executor::ex_main() @@ -496,7 +497,7 @@ void executor::ex_main() // \todo collect all backend threads pvThreads = xmrstak::BackendConnector::thread_starter(oWork); - if(pvThreads->size()==0) + if(pvThreads->size() == 0) { printer::inst()->print_msg(L1, "ERROR: No miner backend enabled."); win_exit(); @@ -508,11 +509,11 @@ void executor::ex_main() size_t pc = jconf::inst()->GetPoolCount(); bool dev_tls = true; bool already_have_cli_pool = false; - size_t i=0; + size_t i = 0; for(; i < pc; i++) { jconf::pool_cfg cfg; - jconf::inst()->GetPoolConfig(i, cfg); + jconf::inst()->GetPoolConfig(i, cfg); #ifdef CONF_NO_TLS if(cfg.tls) { @@ -520,7 +521,8 @@ void executor::ex_main() win_exit(); } #endif - if(!cfg.tls) dev_tls = false; + if(!cfg.tls) + dev_tls = false; if(!xmrstak::params::inst().poolURL.empty() && xmrstak::params::inst().poolURL == cfg.sPoolAddr) { @@ -532,10 +534,10 @@ void executor::ex_main() const char* pwd = params.userSetPwd ? params.poolPasswd.c_str() : cfg.sPasswd; bool nicehash = cfg.nicehash || params.nicehashMode; - pools.emplace_back(i+1, cfg.sPoolAddr, wallet, rigid, pwd, 9.9, false, params.poolUseTls, cfg.tls_fingerprint, nicehash); + pools.emplace_back(i + 1, cfg.sPoolAddr, wallet, rigid, pwd, 9.9, false, params.poolUseTls, cfg.tls_fingerprint, nicehash); } else - pools.emplace_back(i+1, cfg.sPoolAddr, cfg.sWalletAddr, cfg.sRigId, cfg.sPasswd, cfg.weight, false, cfg.tls, cfg.tls_fingerprint, cfg.nicehash); + pools.emplace_back(i + 1, cfg.sPoolAddr, cfg.sWalletAddr, cfg.sRigId, cfg.sPasswd, cfg.weight, false, cfg.tls, cfg.tls_fingerprint, cfg.nicehash); } if(!xmrstak::params::inst().poolURL.empty() && !already_have_cli_pool) @@ -547,7 +549,7 @@ void executor::ex_main() win_exit(); } - pools.emplace_back(i+1, params.poolURL.c_str(), params.poolUsername.c_str(), params.poolRigid.c_str(), params.poolPasswd.c_str(), 9.9, false, params.poolUseTls, "", params.nicehashMode); + pools.emplace_back(i + 1, params.poolURL.c_str(), params.poolUsername.c_str(), params.poolRigid.c_str(), params.poolPasswd.c_str(), 9.9, false, params.poolUseTls, "", params.nicehashMode); } switch(jconf::inst()->GetCurrentCoinSelection().GetDescription(0).GetMiningAlgo()) @@ -604,10 +606,10 @@ void executor::ex_main() push_timed_event(ex_event(EV_HASHRATE_LOOP), jconf::inst()->GetAutohashTime()); size_t cnt = 0; - while (true) + while(true) { ev = oEventQ.pop(); - switch (ev.iName) + switch(ev.iName) { case EV_SOCK_READY: on_sock_ready(ev.iPoolId); @@ -638,9 +640,9 @@ void executor::ex_main() } case EV_PERF_TICK: - for (i = 0; i < pvThreads->size(); i++) + for(i = 0; i < pvThreads->size(); i++) telem->push_perf_value(i, pvThreads->at(i)->iHashCount.load(std::memory_order_relaxed), - pvThreads->at(i)->iTimestamp.load(std::memory_order_relaxed)); + pvThreads->at(i)->iTimestamp.load(std::memory_order_relaxed)); if((cnt++ & 0xF) == 0) //Every 16 ticks { @@ -648,7 +650,7 @@ void executor::ex_main() double fTelem; bool normal = true; - for (i = 0; i < pvThreads->size(); i++) + for(i = 0; i < pvThreads->size(); i++) { fTelem = telem->calc_telemetry_data(10000, i); if(std::isnormal(fTelem)) @@ -709,7 +711,7 @@ bool executor::motd_filter_console(std::string& motd) if(motd.size() > motd_max_length) return false; - motd.erase(std::remove_if(motd.begin(), motd.end(), [](int chr)->bool { return !((chr >= 0x20 && chr <= 0x7e) || chr == '\n');}), motd.end()); + motd.erase(std::remove_if(motd.begin(), motd.end(), [](int chr) -> bool { return !((chr >= 0x20 && chr <= 0x7e) || chr == '\n'); }), motd.end()); return motd.size() > 0; } @@ -721,7 +723,7 @@ bool executor::motd_filter_web(std::string& motd) std::string tmp; tmp.reserve(motd.size() + 128); - for(size_t i=0; i < motd.size(); i++) + for(size_t i = 0; i < motd.size(); i++) { char c = motd[i]; switch(c) @@ -774,17 +776,15 @@ void executor::hashrate_report(std::string& out) } char num[32]; - double fTotal[3] = { 0.0, 0.0, 0.0}; + double fTotal[3] = {0.0, 0.0, 0.0}; - for( uint32_t b = 0; b < 4u; ++b) + for(uint32_t b = 0; b < 4u; ++b) { std::vector backEnds; std::copy_if(pvThreads->begin(), pvThreads->end(), std::back_inserter(backEnds), - [&](xmrstak::iBackend* backend) - { + [&](xmrstak::iBackend* backend) { return backend->backendType == b; - } - ); + }); size_t nthd = backEnds.size(); if(nthd != 0) @@ -801,8 +801,8 @@ void executor::hashrate_report(std::string& out) else out.append(1, '\n'); - double fTotalCur[3] = { 0.0, 0.0, 0.0}; - for (i = 0; i < nthd; i++) + double fTotalCur[3] = {0.0, 0.0, 0.0}; + for(i = 0; i < nthd; i++) { double fHps[3]; @@ -883,12 +883,11 @@ void executor::result_report(std::string& out) size_t iGoodRes = vMineResults[0].count, iTotalRes = iGoodRes; size_t ln = vMineResults.size(); - for(size_t i=1; i < ln; i++) + for(size_t i = 1; i < ln; i++) iTotalRes += vMineResults[i].count; out.append("RESULT REPORT\n"); - out.append("Currency : "). - append(jconf::inst()->GetMiningCoin()).append("\n"); + out.append("Currency : ").append(jconf::inst()->GetMiningCoin()).append("\n"); if(iTotalRes == 0) { out.append("You haven't found any results yet.\n"); @@ -904,8 +903,7 @@ void executor::result_report(std::string& out) snprintf(num, sizeof(num), " (%.1f %%)\n", 100.0 * iGoodRes / iTotalRes); out.append("Difficulty : ").append(std::to_string(iPoolDiff)).append(1, '\n'); - out.append("Good results : ").append(std::to_string(iGoodRes)).append(" / "). - append(std::to_string(iTotalRes)).append(num); + out.append("Good results : ").append(std::to_string(iGoodRes)).append(" / ").append(std::to_string(iTotalRes)).append(num); if(iPoolCallTimes.size() != 0) { @@ -916,10 +914,10 @@ void executor::result_report(std::string& out) out.append("Pool-side hashes : ").append(std::to_string(iPoolHashes)).append(2, '\n'); out.append("Top 10 best results found:\n"); - for(size_t i=0; i < 10; i += 2) + for(size_t i = 0; i < 10; i += 2) { snprintf(num, sizeof(num), "| %2llu | %16llu | %2llu | %16llu |\n", - int_port(i), int_port(iTopDiff[i]), int_port(i+1), int_port(iTopDiff[i+1])); + int_port(i), int_port(iTopDiff[i]), int_port(i + 1), int_port(iTopDiff[i + 1])); out.append(num); } @@ -927,7 +925,7 @@ void executor::result_report(std::string& out) if(ln > 1) { out.append("| Count | Error text | Last seen |\n"); - for(size_t i=1; i < ln; i++) + for(size_t i = 1; i < ln; i++) { snprintf(num, sizeof(num), "| %5llu | %-32.32s | %s |\n", int_port(vMineResults[i].count), vMineResults[i].msg.c_str(), time_format(date, sizeof(date), vMineResults[i].time)); @@ -958,11 +956,11 @@ void executor::connection_report(std::string& out) out.append("Connected since : \n"); size_t n_calls = iPoolCallTimes.size(); - if (n_calls > 1) + if(n_calls > 1) { //Not-really-but-good-enough median - std::nth_element(iPoolCallTimes.begin(), iPoolCallTimes.begin() + n_calls/2, iPoolCallTimes.end()); - out.append("Pool ping time : ").append(std::to_string(iPoolCallTimes[n_calls/2])).append(" ms\n"); + std::nth_element(iPoolCallTimes.begin(), iPoolCallTimes.begin() + n_calls / 2, iPoolCallTimes.end()); + out.append("Pool ping time : ").append(std::to_string(iPoolCallTimes[n_calls / 2])).append(" ms\n"); } else out.append("Pool ping time : (n/a)\n"); @@ -972,7 +970,7 @@ void executor::connection_report(std::string& out) if(ln > 0) { out.append("| Date | Error text |\n"); - for(size_t i=0; i < ln; i++) + for(size_t i = 0; i < ln; i++) { snprintf(num, sizeof(num), "| %s | %-54.54s |\n", time_format(date, sizeof(date), vSocketLog[i].time), vSocketLog[i].msg.c_str()); @@ -1045,11 +1043,11 @@ void executor::http_hashrate_report(std::string& out) snprintf(buffer, sizeof(buffer), sHtmlHashrateBodyHigh, (unsigned int)nthd + 3); out.append(buffer); - double fTotal[3] = { 0.0, 0.0, 0.0}; + double fTotal[3] = {0.0, 0.0, 0.0}; auto bTypePrev = static_cast(0); std::string name; size_t j = 0; - for(size_t i=0; i < nthd; i++) + for(size_t i = 0; i < nthd; i++) { double fHps[3]; char csThreadTag[25]; @@ -1065,14 +1063,13 @@ void executor::http_hashrate_report(std::string& out) } snprintf(csThreadTag, sizeof(csThreadTag), (99 < nthd) ? "[%s.%03u]:%03u" : ((9 < nthd) ? "[%s.%02u]:%02u" : "[%s.%u]:%u"), - name.c_str(), (unsigned int)(j), (unsigned int)i - ); + name.c_str(), (unsigned int)(j), (unsigned int)i); fHps[0] = telem->calc_telemetry_data(10000, i); fHps[1] = telem->calc_telemetry_data(60000, i); fHps[2] = telem->calc_telemetry_data(900000, i); - num_a[0] = num_b[0] = num_c[0] ='\0'; + num_a[0] = num_b[0] = num_c[0] = '\0'; hps_format(fHps[0], num_a, sizeof(num_a)); hps_format(fHps[1], num_b, sizeof(num_b)); hps_format(fHps[2], num_c, sizeof(num_c)); @@ -1085,7 +1082,7 @@ void executor::http_hashrate_report(std::string& out) out.append(buffer); } - num_a[0] = num_b[0] = num_c[0] = num_d[0] ='\0'; + num_a[0] = num_b[0] = num_c[0] = num_d[0] = '\0'; hps_format(fTotal[0], num_a, sizeof(num_a)); hps_format(fTotal[1], num_b, sizeof(num_b)); hps_format(fTotal[2], num_c, sizeof(num_c)); @@ -1102,13 +1099,13 @@ void executor::http_result_report(std::string& out) out.reserve(4096); - snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Result Report", ver_html, "Result Report"); + snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Result Report", ver_html, "Result Report"); out.append(buffer); size_t iGoodRes = vMineResults[0].count, iTotalRes = iGoodRes; size_t ln = vMineResults.size(); - for(size_t i=1; i < ln; i++) + for(size_t i = 1; i < ln; i++) iTotalRes += vMineResults[i].count; double fGoodResPrc = 0.0; @@ -1119,8 +1116,7 @@ void executor::http_result_report(std::string& out) if(iPoolCallTimes.size() > 0) { using namespace std::chrono; - fAvgResTime = ((double)duration_cast(system_clock::now() - tPoolConnTime).count()) - / iPoolCallTimes.size(); + fAvgResTime = ((double)duration_cast(system_clock::now() - tPoolConnTime).count()) / iPoolCallTimes.size(); } snprintf(buffer, sizeof(buffer), sHtmlResultBodyHigh, @@ -1132,7 +1128,7 @@ void executor::http_result_report(std::string& out) out.append(buffer); - for(size_t i=1; i < vMineResults.size(); i++) + for(size_t i = 1; i < vMineResults.size(); i++) { snprintf(buffer, sizeof(buffer), sHtmlResultTableRow, vMineResults[i].msg.c_str(), int_port(vMineResults[i].count), time_format(date, sizeof(date), vMineResults[i].time)); @@ -1149,7 +1145,7 @@ void executor::http_connection_report(std::string& out) out.reserve(4096); - snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Connection Report", ver_html, "Connection Report"); + snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Connection Report", ver_html, "Connection Report"); out.append(buffer); jpsock* pool = pick_pool_by_id(current_pool_id); @@ -1157,16 +1153,16 @@ void executor::http_connection_report(std::string& out) pool = pick_pool_by_id(last_usr_pool_id); const char* cdate = "not connected"; - if (pool != nullptr && pool->is_running() && pool->is_logged_in()) + if(pool != nullptr && pool->is_running() && pool->is_logged_in()) cdate = time_format(date, sizeof(date), tPoolConnTime); size_t n_calls = iPoolCallTimes.size(); unsigned int ping_time = 0; - if (n_calls > 1) + if(n_calls > 1) { //Not-really-but-good-enough median - std::nth_element(iPoolCallTimes.begin(), iPoolCallTimes.begin() + n_calls/2, iPoolCallTimes.end()); - ping_time = iPoolCallTimes[n_calls/2]; + std::nth_element(iPoolCallTimes.begin(), iPoolCallTimes.begin() + n_calls / 2, iPoolCallTimes.end()); + ping_time = iPoolCallTimes[n_calls / 2]; } snprintf(buffer, sizeof(buffer), sHtmlConnectionBodyHigh, @@ -1175,8 +1171,7 @@ void executor::http_connection_report(std::string& out) cdate, ping_time); out.append(buffer); - - for(size_t i=0; i < vSocketLog.size(); i++) + for(size_t i = 0; i < vSocketLog.size(); i++) { snprintf(buffer, sizeof(buffer), sHtmlConnectionTableRow, time_format(date, sizeof(date), vSocketLog[i].time), vSocketLog[i].msg.c_str()); @@ -1205,12 +1200,13 @@ void executor::http_json_report(std::string& out) std::string hr_thds, res_error, cn_error; size_t nthd = pvThreads->size(); - double fTotal[3] = { 0.0, 0.0, 0.0}; + double fTotal[3] = {0.0, 0.0, 0.0}; hr_thds.reserve(nthd * 32); - for(size_t i=0; i < nthd; i++) + for(size_t i = 0; i < nthd; i++) { - if(i != 0) hr_thds.append(1, ','); + if(i != 0) + hr_thds.append(1, ','); double fHps[3]; fHps[0] = telem->calc_telemetry_data(10000, i); @@ -1238,7 +1234,7 @@ void executor::http_json_report(std::string& out) size_t iGoodRes = vMineResults[0].count, iTotalRes = iGoodRes; size_t ln = vMineResults.size(); - for(size_t i=1; i < ln; i++) + for(size_t i = 1; i < ln; i++) iTotalRes += vMineResults[i].count; jpsock* pool = pick_pool_by_id(current_pool_id); @@ -1258,10 +1254,11 @@ void executor::http_json_report(std::string& out) char buffer[2048]; res_error.reserve((vMineResults.size() - 1) * 128); - for(size_t i=1; i < vMineResults.size(); i++) + for(size_t i = 1; i < vMineResults.size(); i++) { using namespace std::chrono; - if(i != 1) res_error.append(1, ','); + if(i != 1) + res_error.append(1, ','); snprintf(buffer, sizeof(buffer), sJsonApiResultError, int_port(vMineResults[i].count), int_port(duration_cast(vMineResults[i].time.time_since_epoch()).count()), @@ -1271,18 +1268,19 @@ void executor::http_json_report(std::string& out) size_t n_calls = iPoolCallTimes.size(); size_t iPoolPing = 0; - if (n_calls > 1) + if(n_calls > 1) { //Not-really-but-good-enough median - std::nth_element(iPoolCallTimes.begin(), iPoolCallTimes.begin() + n_calls/2, iPoolCallTimes.end()); - iPoolPing = iPoolCallTimes[n_calls/2]; + std::nth_element(iPoolCallTimes.begin(), iPoolCallTimes.begin() + n_calls / 2, iPoolCallTimes.end()); + iPoolPing = iPoolCallTimes[n_calls / 2]; } cn_error.reserve(vSocketLog.size() * 256); - for(size_t i=0; i < vSocketLog.size(); i++) + for(size_t i = 0; i < vSocketLog.size(); i++) { using namespace std::chrono; - if(i != 0) cn_error.append(1, ','); + if(i != 0) + cn_error.append(1, ','); snprintf(buffer, sizeof(buffer), sJsonApiConnectionError, int_port(duration_cast(vSocketLog[i].time.time_since_epoch()).count()), @@ -1291,7 +1289,7 @@ void executor::http_json_report(std::string& out) } size_t bb_size = 2048 + hr_thds.size() + res_error.size() + cn_error.size(); - std::unique_ptr bigbuf( new char[ bb_size ] ); + std::unique_ptr bigbuf(new char[bb_size]); int bb_len = snprintf(bigbuf.get(), bb_size, sJsonApiFormat, get_version_str().c_str(), hr_thds.c_str(), hr_buffer, a, @@ -1338,8 +1336,7 @@ void executor::get_http_report(ex_event_name ev_id, std::string& data) std::lock_guard lck(httpMutex); assert(pHttpString == nullptr); - assert(ev_id == EV_HTML_HASHRATE || ev_id == EV_HTML_RESULTS - || ev_id == EV_HTML_CONNSTAT || ev_id == EV_HTML_JSON); + assert(ev_id == EV_HTML_HASHRATE || ev_id == EV_HTML_RESULTS || ev_id == EV_HTML_CONNSTAT || ev_id == EV_HTML_JSON); pHttpString = &data; httpReady = std::promise(); diff --git a/xmrstak/misc/executor.hpp b/xmrstak/misc/executor.hpp index be5ee6c2f..47359afc2 100644 --- a/xmrstak/misc/executor.hpp +++ b/xmrstak/misc/executor.hpp @@ -1,18 +1,18 @@ #pragma once -#include "thdq.hpp" #include "telemetry.hpp" +#include "thdq.hpp" #include "xmrstak/backend/iBackend.hpp" +#include "xmrstak/donate-level.hpp" #include "xmrstak/misc/environment.hpp" #include "xmrstak/net/msgstruct.hpp" -#include "xmrstak/donate-level.hpp" -#include #include +#include +#include +#include #include #include -#include -#include class jpsock; @@ -27,7 +27,7 @@ class minethd; class executor { -public: + public: static executor* inst() { auto& env = xmrstak::environment::inst(); @@ -43,13 +43,15 @@ class executor inline void push_event(ex_event&& ev) { oEventQ.push(std::move(ev)); } void push_timed_event(ex_event&& ev, size_t sec); -private: + private: struct timed_event { ex_event event; size_t ticks_left; - timed_event(ex_event&& ev, size_t ticks) : event(std::move(ev)), ticks_left(ticks) {} + timed_event(ex_event&& ev, size_t ticks) : + event(std::move(ev)), + ticks_left(ticks) {} }; inline void set_timestamp() { dev_timestamp = get_timestamp(); }; @@ -119,7 +121,8 @@ class executor std::chrono::system_clock::time_point time; std::string msg; - sck_error_log(std::string&& err) : msg(std::move(err)) + sck_error_log(std::string&& err) : + msg(std::move(err)) { time = std::chrono::system_clock::now(); } @@ -134,12 +137,16 @@ class executor std::string msg; size_t count; - result_tally() : msg("[OK]"), count(0) + result_tally() : + msg("[OK]"), + count(0) { time = std::chrono::system_clock::now(); } - result_tally(std::string&& err) : msg(std::move(err)), count(1) + result_tally(std::string&& err) : + msg(std::move(err)), + count(1) { time = std::chrono::system_clock::now(); } @@ -161,7 +168,7 @@ class executor std::vector vMineResults; //More result statistics - std::array iTopDiff { { } }; //Initialize to zero + std::array iTopDiff{{}}; //Initialize to zero std::chrono::system_clock::time_point tPoolConnTime; size_t iPoolHashes = 0; @@ -195,4 +202,3 @@ class executor inline size_t sec_to_ticks(size_t sec) { return sec * (1000 / iTickTime); } }; - diff --git a/xmrstak/misc/home_dir.hpp b/xmrstak/misc/home_dir.hpp index 8eb0fa4ea..836c7cc4e 100644 --- a/xmrstak/misc/home_dir.hpp +++ b/xmrstak/misc/home_dir.hpp @@ -4,39 +4,40 @@ #ifdef _WIN32 #include +// this comment avoid that clang format reorders the includes #include namespace { - inline std::string get_home() +inline std::string get_home() +{ + char path[MAX_PATH + 1]; + // get folder "appdata\local" + if(SHGetSpecialFolderPathA(HWND_DESKTOP, path, CSIDL_LOCAL_APPDATA, FALSE)) { - char path[MAX_PATH + 1]; - // get folder "appdata\local" - if (SHGetSpecialFolderPathA(HWND_DESKTOP, path, CSIDL_LOCAL_APPDATA, FALSE)) - { - return path; - } - else - return "."; + return path; } -} // namespace anonymous + else + return "."; +} +} // namespace #else -#include -#include #include +#include +#include namespace { - inline std::string get_home() - { - const char *home = "."; +inline std::string get_home() +{ + const char* home = "."; - if ((home = getenv("HOME")) == nullptr) - home = getpwuid(getuid())->pw_dir; + if((home = getenv("HOME")) == nullptr) + home = getpwuid(getuid())->pw_dir; - return home; - } -} // namespace anonymous + return home; +} +} // namespace #endif // _WIN32 diff --git a/xmrstak/misc/jext.hpp b/xmrstak/misc/jext.hpp index 9936fa813..421508989 100644 --- a/xmrstak/misc/jext.hpp +++ b/xmrstak/misc/jext.hpp @@ -9,7 +9,7 @@ using namespace rapidjson; inline const Value* GetObjectMember(const Value& obj, const char* key) { Value::ConstMemberIterator itr = obj.FindMember(key); - if (itr != obj.MemberEnd()) + if(itr != obj.MemberEnd()) return &itr->value; else return nullptr; @@ -48,8 +48,8 @@ inline const Value* GetObjectMember(const Value& obj, const char* key) #elif defined(__NetBSD__) -#include #include +#include #if defined(__BSWAP_RENAME) && !defined(__bswap_32) #define bswap_32(x) bswap32(x) #define bswap_64(x) bswap64(x) diff --git a/xmrstak/misc/telemetry.cpp b/xmrstak/misc/telemetry.cpp index 47442df09..16ecaa6f6 100644 --- a/xmrstak/misc/telemetry.cpp +++ b/xmrstak/misc/telemetry.cpp @@ -24,9 +24,9 @@ #include "telemetry.hpp" #include "xmrstak/net/msgstruct.hpp" +#include #include #include -#include namespace xmrstak { @@ -38,7 +38,7 @@ telemetry::telemetry(size_t iThd) iBucketTop = new uint32_t[iThd]; mtx = new std::mutex[iThd]; - for (size_t i = 0; i < iThd; i++) + for(size_t i = 0; i < iThd; i++) { ppHashCounts[i] = new uint64_t[iBucketSize]; ppTimestamps[i] = new uint64_t[iBucketSize]; @@ -51,7 +51,6 @@ telemetry::telemetry(size_t iThd) double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) { - uint64_t iEarliestHashCnt = 0; uint64_t iEarliestStamp = 0; uint64_t iLatestStamp = 0; @@ -62,20 +61,20 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) uint64_t iTimeNow = get_timestamp_ms(); //Start at 1, buckettop points to next empty - for (size_t i = 1; i < iBucketSize; i++) + for(size_t i = 1; i < iBucketSize; i++) { size_t idx = (iBucketTop[iThread] - i) & iBucketMask; //overflow expected here - if (ppTimestamps[iThread][idx] == 0) + if(ppTimestamps[iThread][idx] == 0) break; //That means we don't have the data yet - if (iLatestStamp == 0) + if(iLatestStamp == 0) { iLatestStamp = ppTimestamps[iThread][idx]; iLatestHashCnt = ppHashCounts[iThread][idx]; } - if (iTimeNow - ppTimestamps[iThread][idx] > iLastMillisec) + if(iTimeNow - ppTimestamps[iThread][idx] > iLastMillisec) { bHaveFullSet = true; break; //We are out of the requested time period @@ -86,11 +85,11 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) } lk.unlock(); - if (!bHaveFullSet || iEarliestStamp == 0 || iLatestStamp == 0) + if(!bHaveFullSet || iEarliestStamp == 0 || iLatestStamp == 0) return nan(""); //Don't think that can happen, but just in case - if (iLatestStamp - iEarliestStamp == 0) + if(iLatestStamp - iEarliestStamp == 0) return nan(""); double fHashes, fTime; diff --git a/xmrstak/misc/telemetry.hpp b/xmrstak/misc/telemetry.hpp index 580565de2..2ab2a9e5f 100644 --- a/xmrstak/misc/telemetry.hpp +++ b/xmrstak/misc/telemetry.hpp @@ -9,12 +9,12 @@ namespace xmrstak class telemetry { -public: + public: telemetry(size_t iThd); void push_perf_value(size_t iThd, uint64_t iHashCount, uint64_t iTimestamp); double calc_telemetry_data(size_t iLastMillisec, size_t iThread); -private: + private: std::mutex* mtx; constexpr static size_t iBucketSize = 2 << 11; //Power of 2 to simplify calculations constexpr static size_t iBucketMask = iBucketSize - 1; diff --git a/xmrstak/misc/thdq.hpp b/xmrstak/misc/thdq.hpp index 7a4a5cfe4..2eef30bcf 100644 --- a/xmrstak/misc/thdq.hpp +++ b/xmrstak/misc/thdq.hpp @@ -1,31 +1,37 @@ #pragma once - + +#include +#include #include #include -#include -#include - + template class thdq { -public: + public: T pop() { std::unique_lock mlock(mutex_); - while (queue_.empty()) { cond_.wait(mlock); } + while(queue_.empty()) + { + cond_.wait(mlock); + } auto item = std::move(queue_.front()); queue_.pop(); return item; } - + void pop(T& item) { std::unique_lock mlock(mutex_); - while (queue_.empty()) { cond_.wait(mlock); } + while(queue_.empty()) + { + cond_.wait(mlock); + } item = queue_.front(); queue_.pop(); } - + void push(const T& item) { std::unique_lock mlock(mutex_); @@ -33,7 +39,7 @@ class thdq mlock.unlock(); cond_.notify_one(); } - + void push(T&& item) { std::unique_lock mlock(mutex_); @@ -41,9 +47,9 @@ class thdq mlock.unlock(); cond_.notify_one(); } - -private: + + private: std::queue queue_; std::mutex mutex_; std::condition_variable cond_; -}; +}; diff --git a/xmrstak/misc/uac.cpp b/xmrstak/misc/uac.cpp index 9f940933c..c7da90bd8 100644 --- a/xmrstak/misc/uac.cpp +++ b/xmrstak/misc/uac.cpp @@ -9,24 +9,24 @@ BOOL IsElevated() { BOOL fRet = FALSE; HANDLE hToken = NULL; - if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) + if(OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { TOKEN_ELEVATION Elevation; DWORD cbSize = sizeof(TOKEN_ELEVATION); - if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) + if(GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) fRet = Elevation.TokenIsElevated; } - if (hToken) + if(hToken) CloseHandle(hToken); return fRet; } BOOL SelfElevate(const std::string& my_path, const std::string& params) { - if (IsElevated()) + if(IsElevated()) return FALSE; - SHELLEXECUTEINFO shExecInfo = { 0 }; + SHELLEXECUTEINFO shExecInfo = {0}; shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; shExecInfo.hwnd = NULL; @@ -37,7 +37,7 @@ BOOL SelfElevate(const std::string& my_path, const std::string& params) shExecInfo.nShow = SW_SHOW; shExecInfo.hInstApp = NULL; - if (!ShellExecuteEx(&shExecInfo)) + if(!ShellExecuteEx(&shExecInfo)) return FALSE; // Loiter in the background to make scripting easier @@ -65,13 +65,13 @@ VOID RequestElevation() BOOL IsWindows10OrNewer() { - OSVERSIONINFOEX osvi = { 0 }; - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - osvi.dwMajorVersion = 10; - osvi.dwMinorVersion = 0; - DWORDLONG dwlConditionMask = 0; - VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); - VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); - return ::VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask); + OSVERSIONINFOEX osvi = {0}; + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + osvi.dwMajorVersion = 10; + osvi.dwMinorVersion = 0; + DWORDLONG dwlConditionMask = 0; + VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); + VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); + return ::VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask); } #endif diff --git a/xmrstak/misc/utility.cpp b/xmrstak/misc/utility.cpp index 5177d14c2..bf665bda3 100644 --- a/xmrstak/misc/utility.cpp +++ b/xmrstak/misc/utility.cpp @@ -1,21 +1,15 @@ -#include #include - +#include namespace xmrstak { - bool strcmp_i(const std::string& str1, const std::string& str2) - { - if(str1.size() != str2.size()) - return false; - else - return (str1.empty() | str2.empty()) ? - false : - std::equal(str1.begin(), str1.end(),str2.begin(), - [](char c1, char c2) - { - return ::tolower(c1) == ::tolower(c2); - } - ); - } +bool strcmp_i(const std::string& str1, const std::string& str2) +{ + if(str1.size() != str2.size()) + return false; + else + return (str1.empty() | str2.empty()) ? false : std::equal(str1.begin(), str1.end(), str2.begin(), [](char c1, char c2) { + return ::tolower(c1) == ::tolower(c2); + }); +} } // namespace xmrstak diff --git a/xmrstak/misc/utility.hpp b/xmrstak/misc/utility.hpp index 8f2e99fb8..0eb08993d 100644 --- a/xmrstak/misc/utility.hpp +++ b/xmrstak/misc/utility.hpp @@ -4,9 +4,9 @@ namespace xmrstak { - /** case insensitive string compare +/** case insensitive string compare * * @return true if both strings are equal, else false */ - bool strcmp_i(const std::string& str1, const std::string& str2); +bool strcmp_i(const std::string& str1, const std::string& str2); } // namespace xmrstak diff --git a/xmrstak/net/jpsock.cpp b/xmrstak/net/jpsock.cpp index 786b18b4f..f9522962f 100644 --- a/xmrstak/net/jpsock.cpp +++ b/xmrstak/net/jpsock.cpp @@ -21,17 +21,17 @@ * */ -#include -#include #include +#include #include +#include #include "jpsock.hpp" -#include "socks.hpp" #include "socket.hpp" +#include "socks.hpp" -#include "xmrstak/misc/executor.hpp" #include "xmrstak/jconf.hpp" +#include "xmrstak/misc/executor.hpp" #include "xmrstak/misc/jext.hpp" #include "xmrstak/version.hpp" @@ -45,7 +45,9 @@ struct jpsock::call_rsp std::string sCallErr; uint64_t iMessageId; - call_rsp(Value* val) : pCallData(val), iMessageId(0) + call_rsp(Value* val) : + pCallData(val), + iMessageId(0) { bHaveResponse = false; iCallId = 0; @@ -70,7 +72,7 @@ typedef GenericDocument, MemoryPoolAllocator<>, MemoryPoolAllocator<>> Me struct jpsock::opaque_private { - Value oCallValue; + Value oCallValue; MemoryPoolAllocator<> callAllocator; MemoryPoolAllocator<> recvAllocator; @@ -91,12 +93,24 @@ struct jpsock::opaque_private struct jpsock::opq_json_val { const Value* val; - opq_json_val(const Value* val) : val(val) {} + opq_json_val(const Value* val) : + val(val) {} }; jpsock::jpsock(size_t id, const char* sAddr, const char* sLogin, const char* sRigId, const char* sPassword, double pool_weight, bool dev_pool, bool tls, const char* tls_fp, bool nicehash) : - net_addr(sAddr), usr_login(sLogin), usr_rigid(sRigId), usr_pass(sPassword), tls_fp(tls_fp), pool_id(id), pool_weight(pool_weight), pool(dev_pool), nicehash(nicehash), - connect_time(0), connect_attempts(0), disconnect_time(0), quiet_close(false) + net_addr(sAddr), + usr_login(sLogin), + usr_rigid(sRigId), + usr_pass(sPassword), + tls_fp(tls_fp), + pool_id(id), + pool_weight(pool_weight), + pool(dev_pool), + nicehash(nicehash), + connect_time(0), + connect_attempts(0), + disconnect_time(0), + quiet_close(false) { sock_init(); @@ -245,7 +259,7 @@ bool jpsock::jpsock_thd_main() char buf[iSockBufferSize]; size_t datalen = 0; - while (true) + while(true) { int ret = sck->recv(buf + datalen, sizeof(buf) - datalen); @@ -254,7 +268,7 @@ bool jpsock::jpsock_thd_main() datalen += ret; - if (datalen >= sizeof(buf)) + if(datalen >= sizeof(buf)) { sck->close(false); return set_socket_error("RECEIVE error: data overflow"); @@ -262,12 +276,12 @@ bool jpsock::jpsock_thd_main() char* lnend; char* lnstart = buf; - while ((lnend = (char*)memchr(lnstart, '\n', datalen)) != nullptr) + while((lnend = (char*)memchr(lnstart, '\n', datalen)) != nullptr) { lnend++; int lnlen = lnend - lnstart; - if (!process_line(lnstart, lnlen)) + if(!process_line(lnstart, lnlen)) { sck->close(false); return false; @@ -278,7 +292,7 @@ bool jpsock::jpsock_thd_main() } //Got leftover data? Move it to the front - if (datalen > 0 && buf != lnstart) + if(datalen > 0 && buf != lnstart) memmove(buf, lnstart, datalen); } } @@ -291,18 +305,18 @@ bool jpsock::process_line(char* line, size_t len) ++iMessageCnt; /*NULL terminate the line instead of '\n', parsing will add some more NULLs*/ - line[len-1] = '\0'; + line[len - 1] = '\0'; //printf("RECV: %s\n", line); - if (prv->jsonDoc.ParseInsitu(line).HasParseError()) + if(prv->jsonDoc.ParseInsitu(line).HasParseError()) return set_socket_error("PARSE error: Invalid JSON"); - if (!prv->jsonDoc.IsObject()) + if(!prv->jsonDoc.IsObject()) return set_socket_error("PARSE error: Invalid root"); const Value* mt; - if (prv->jsonDoc.HasMember("method")) + if(prv->jsonDoc.HasMember("method")) { mt = GetObjectMember(prv->jsonDoc, "method"); @@ -329,7 +343,7 @@ bool jpsock::process_line(char* line, size_t len) { uint64_t iCallId; mt = GetObjectMember(prv->jsonDoc, "id"); - if (mt == nullptr || !mt->IsUint64()) + if(mt == nullptr || !mt->IsUint64()) return set_socket_error("PARSE error: Protocol error 3"); iCallId = mt->GetUint64(); @@ -338,10 +352,10 @@ bool jpsock::process_line(char* line, size_t len) const char* sError = nullptr; size_t iErrorLen = 0; - if (mt == nullptr || mt->IsNull()) + if(mt == nullptr || mt->IsNull()) { /* If there was no error we need a result */ - if ((mt = GetObjectMember(prv->jsonDoc, "result")) == nullptr) + if((mt = GetObjectMember(prv->jsonDoc, "result")) == nullptr) return set_socket_error("PARSE error: Protocol error 7"); } else @@ -359,7 +373,7 @@ bool jpsock::process_line(char* line, size_t len) } std::unique_lock mlock(call_mutex); - if (prv->oCallRsp.pCallData == nullptr) + if(prv->oCallRsp.pCallData == nullptr) { /*Server sent us a call reply without us making a call*/ mlock.unlock(); @@ -400,7 +414,7 @@ bool jpsock::process_pool_job(const opq_json_val* params, const uint64_t message mlock.unlock(); - if (!params->val->IsObject()) + if(!params->val->IsObject()) return set_socket_error("PARSE error: Job error 1"); const Value *blob, *jobid, *target, *motd, *blk_height; @@ -410,7 +424,7 @@ bool jpsock::process_pool_job(const opq_json_val* params, const uint64_t message motd = GetObjectMember(*params->val, "motd"); blk_height = GetObjectMember(*params->val, "height"); - if (jobid == nullptr || blob == nullptr || target == nullptr || + if(jobid == nullptr || blob == nullptr || target == nullptr || !jobid->IsString() || !blob->IsString() || !target->IsString()) { return set_socket_error("PARSE error: Job error 2"); @@ -421,7 +435,7 @@ bool jpsock::process_pool_job(const opq_json_val* params, const uint64_t message std::unique_lock lck(motd_mutex); if(motd->GetStringLength() > 0) { - pool_motd.resize(motd->GetStringLength()/2 + 1); + pool_motd.resize(motd->GetStringLength() / 2 + 1); if(!hex2bin(motd->GetString(), motd->GetStringLength(), (unsigned char*)&pool_motd.front())) pool_motd.clear(); } @@ -429,7 +443,7 @@ bool jpsock::process_pool_job(const opq_json_val* params, const uint64_t message pool_motd.clear(); } - if (jobid->GetStringLength() >= sizeof(pool_job::sJobID)) // Note >= + if(jobid->GetStringLength() >= sizeof(pool_job::sJobID)) // Note >= return set_socket_error("PARSE error: Job error 3"); pool_job oPoolJob; @@ -437,10 +451,10 @@ bool jpsock::process_pool_job(const opq_json_val* params, const uint64_t message const uint32_t iWorkLen = blob->GetStringLength() / 2; oPoolJob.iWorkLen = iWorkLen; - if (iWorkLen > sizeof(pool_job::bWorkBlob)) + if(iWorkLen > sizeof(pool_job::bWorkBlob)) return set_socket_error("PARSE error: Invalid job length. Are you sure you are mining the correct coin?"); - if (!hex2bin(blob->GetString(), iWorkLen * 2, oPoolJob.bWorkBlob)) + if(!hex2bin(blob->GetString(), iWorkLen * 2, oPoolJob.bWorkBlob)) return set_socket_error("PARSE error: Job error 4"); // lock reading of oCurrentJob @@ -479,7 +493,7 @@ bool jpsock::process_pool_job(const opq_json_val* params, const uint64_t message return set_socket_error("PARSE error: Job error 5"); iJobDiff = t64_to_diff(oPoolJob.iTarget); - + if(blk_height != nullptr && blk_height->IsUint64()) oPoolJob.iBlockHeight = bswap_64(blk_height->GetUint64()); @@ -589,10 +603,10 @@ bool jpsock::cmd_login() uint64_t messageId = 0; /*Normal error conditions (failed login etc..) will end here*/ - if (!cmd_ret_wait(cmd_buffer, oResult, messageId)) + if(!cmd_ret_wait(cmd_buffer, oResult, messageId)) return false; - if (!oResult.val->IsObject()) + if(!oResult.val->IsObject()) { set_socket_error("PARSE error: Login protocol error 1"); disconnect(); @@ -603,14 +617,14 @@ bool jpsock::cmd_login() const Value* job = GetObjectMember(*oResult.val, "job"); const Value* ext = GetObjectMember(*oResult.val, "extensions"); - if (id == nullptr || job == nullptr || !id->IsString()) + if(id == nullptr || job == nullptr || !id->IsString()) { set_socket_error("PARSE error: Login protocol error 2"); disconnect(); return false; } - if (id->GetStringLength() >= sizeof(sMinerId)) + if(id->GetStringLength() >= sizeof(sMinerId)) { set_socket_error("PARSE error: Login protocol error 3"); disconnect(); @@ -622,7 +636,7 @@ bool jpsock::cmd_login() if(ext != nullptr && ext->IsArray()) { - for(size_t i=0; i < ext->Size(); i++) + for(size_t i = 0; i < ext->Size(); i++) { const Value& jextname = ext->GetArray()[i]; @@ -693,7 +707,7 @@ bool jpsock::cmd_submit(const char* sJobId, uint32_t iNonce, const uint8_t* bRes sResult[64] = '\0'; snprintf(cmd_buffer, sizeof(cmd_buffer), "{\"method\":\"submit\",\"params\":{\"id\":\"%s\",\"job_id\":\"%s\",\"nonce\":\"%s\",\"result\":\"%s\"%s%s%s%s%s%s%s},\"id\":1}\n", - sMinerId, sJobId, sNonce, sResult, sBackend, sHashcount, sAlgo, sBaseAlgo, sIterations,sMemory, sMemAlignBytes); + sMinerId, sJobId, sNonce, sResult, sBackend, sHashcount, sAlgo, sBaseAlgo, sIterations, sMemory, sMemAlignBytes); uint64_t messageId = 0; opq_json_val oResult(nullptr); @@ -732,13 +746,13 @@ bool jpsock::get_pool_motd(std::string& strin) return false; } -inline unsigned char hf_hex2bin(char c, bool &err) +inline unsigned char hf_hex2bin(char c, bool& err) { - if (c >= '0' && c <= '9') + if(c >= '0' && c <= '9') return c - '0'; - else if (c >= 'a' && c <= 'f') + else if(c >= 'a' && c <= 'f') return c - 'a' + 0xA; - else if (c >= 'A' && c <= 'F') + else if(c >= 'A' && c <= 'F') return c - 'A' + 0xA; err = true; @@ -748,17 +762,18 @@ inline unsigned char hf_hex2bin(char c, bool &err) bool jpsock::hex2bin(const char* in, unsigned int len, unsigned char* out) { bool error = false; - for (unsigned int i = 0; i < len; i += 2) + for(unsigned int i = 0; i < len; i += 2) { out[i / 2] = (hf_hex2bin(in[i], error) << 4) | hf_hex2bin(in[i + 1], error); - if (error) return false; + if(error) + return false; } return true; } inline char hf_bin2hex(unsigned char c) { - if (c <= 0x9) + if(c <= 0x9) return '0' + c; else return 'a' - 0xA + c; @@ -766,7 +781,7 @@ inline char hf_bin2hex(unsigned char c) void jpsock::bin2hex(const unsigned char* in, unsigned int len, char* out) { - for (unsigned int i = 0; i < len; i++) + for(unsigned int i = 0; i < len; i++) { out[i * 2] = hf_bin2hex((in[i] & 0xF0) >> 4); out[i * 2 + 1] = hf_bin2hex(in[i] & 0x0F); diff --git a/xmrstak/net/jpsock.hpp b/xmrstak/net/jpsock.hpp index 949764813..4ad6ebbbc 100644 --- a/xmrstak/net/jpsock.hpp +++ b/xmrstak/net/jpsock.hpp @@ -1,15 +1,14 @@ #pragma once -#include "xmrstak/backend/iBackend.hpp" #include "msgstruct.hpp" +#include "xmrstak/backend/iBackend.hpp" #include "xmrstak/jconf.hpp" -#include #include #include -#include +#include #include - +#include /* Our pool can have two kinds of errors: - Parsing or connection error @@ -27,7 +26,7 @@ class base_socket; class jpsock { -public: + public: jpsock(size_t id, const char* sAddr, const char* sLogin, const char* sRigId, const char* sPassword, double pool_weight, bool dev_pool, bool tls, const char* tls_fp, bool nicehash); ~jpsock(); @@ -55,7 +54,12 @@ class jpsock inline bool is_logged_in() { return bLoggedIn; } inline bool is_dev_pool() { return pool; } inline size_t get_pool_id() { return pool_id; } - inline bool get_disconnects(size_t& att, size_t& time) { att = connect_attempts; time = disconnect_time != 0 ? get_timestamp() - disconnect_time + 1 : 0; return pool && usr_login[0]; } + inline bool get_disconnects(size_t& att, size_t& time) + { + att = connect_attempts; + time = disconnect_time != 0 ? get_timestamp() - disconnect_time + 1 : 0; + return pool && usr_login[0]; + } inline const char* get_pool_addr() { return net_addr.c_str(); } inline const char* get_tls_fp() { return tls_fp.c_str(); } inline const char* get_rigid() { return usr_rigid.c_str(); } @@ -77,7 +81,7 @@ class jpsock bool set_socket_error_strerr(const char* a); bool set_socket_error_strerr(const char* a, int res); -private: + private: std::string net_addr; std::string usr_login; std::string usr_rigid; @@ -142,4 +146,3 @@ class jpsock uint64_t iMessageCnt = 0; uint64_t iLastMessageId = 0; }; - diff --git a/xmrstak/net/msgstruct.hpp b/xmrstak/net/msgstruct.hpp index 33980bf42..3cfce3c6f 100644 --- a/xmrstak/net/msgstruct.hpp +++ b/xmrstak/net/msgstruct.hpp @@ -2,25 +2,29 @@ #include "xmrstak/backend/cryptonight.hpp" -#include -#include #include +#include +#include // Structures that we use to pass info between threads constructors are here just to make // the stack allocation take up less space, heap is a shared resource that needs locks too of course struct pool_job { - char sJobID[64]; - uint8_t bWorkBlob[128]; - uint64_t iTarget; - uint32_t iWorkLen; - uint32_t iSavedNonce; - uint64_t iBlockHeight = uint64_t(-1); - - pool_job() : iWorkLen(0), iSavedNonce(0) {} + char sJobID[64]; + uint8_t bWorkBlob[128]; + uint64_t iTarget; + uint32_t iWorkLen; + uint32_t iSavedNonce; + uint64_t iBlockHeight = uint64_t(-1); + + pool_job() : + iWorkLen(0), + iSavedNonce(0) {} pool_job(const char* sJobID, uint64_t iTarget, const uint8_t* bWorkBlob, uint32_t iWorkLen) : - iTarget(iTarget), iWorkLen(iWorkLen), iSavedNonce(0) + iTarget(iTarget), + iWorkLen(iWorkLen), + iSavedNonce(0) { assert(iWorkLen <= sizeof(pool_job::bWorkBlob)); memcpy(this->sJobID, sJobID, sizeof(pool_job::sJobID)); @@ -30,15 +34,17 @@ struct pool_job struct job_result { - uint8_t bResult[32]; - char sJobID[64]; - uint32_t iNonce; - uint32_t iThreadId; + uint8_t bResult[32]; + char sJobID[64]; + uint32_t iNonce; + uint32_t iThreadId; xmrstak_algo algorithm = {invalid_algo}; job_result() {} job_result(const char* sJobID, uint32_t iNonce, const uint8_t* bResult, uint32_t iThreadId, const xmrstak_algo& algo) : - iNonce(iNonce), iThreadId(iThreadId), algorithm(algo) + iNonce(iNonce), + iThreadId(iThreadId), + algorithm(algo) { memcpy(this->sJobID, sJobID, sizeof(job_result::sJobID)); memcpy(this->bResult, bResult, sizeof(job_result::bResult)); @@ -51,8 +57,12 @@ struct sock_err bool silent; sock_err() {} - sock_err(std::string&& err, bool silent) : sSocketError(std::move(err)), silent(silent) { } - sock_err(sock_err&& from) : sSocketError(std::move(from.sSocketError)), silent(from.silent) {} + sock_err(std::string&& err, bool silent) : + sSocketError(std::move(err)), + silent(silent) {} + sock_err(sock_err&& from) : + sSocketError(std::move(from.sSocketError)), + silent(from.silent) {} sock_err& operator=(sock_err&& from) { @@ -62,7 +72,7 @@ struct sock_err return *this; } - ~sock_err() { } + ~sock_err() {} sock_err(sock_err const&) = delete; sock_err& operator=(sock_err const&) = delete; @@ -73,13 +83,30 @@ struct gpu_res_err { size_t idx; // GPU index const char* error_str; - gpu_res_err(const char* error_str, size_t idx) : error_str(error_str), idx(idx) {} + gpu_res_err(const char* error_str, size_t idx) : + error_str(error_str), + idx(idx) {} }; -enum ex_event_name { EV_INVALID_VAL, EV_SOCK_READY, EV_SOCK_ERROR, EV_GPU_RES_ERROR, - EV_POOL_HAVE_JOB, EV_MINER_HAVE_RESULT, EV_PERF_TICK, EV_EVAL_POOL_CHOICE, - EV_USR_HASHRATE, EV_USR_RESULTS, EV_USR_CONNSTAT, EV_HASHRATE_LOOP, - EV_HTML_HASHRATE, EV_HTML_RESULTS, EV_HTML_CONNSTAT, EV_HTML_JSON }; +enum ex_event_name +{ + EV_INVALID_VAL, + EV_SOCK_READY, + EV_SOCK_ERROR, + EV_GPU_RES_ERROR, + EV_POOL_HAVE_JOB, + EV_MINER_HAVE_RESULT, + EV_PERF_TICK, + EV_EVAL_POOL_CHOICE, + EV_USR_HASHRATE, + EV_USR_RESULTS, + EV_USR_CONNSTAT, + EV_HASHRATE_LOOP, + EV_HTML_HASHRATE, + EV_HTML_RESULTS, + EV_HTML_CONNSTAT, + EV_HTML_JSON +}; /* This is how I learned to stop worrying and love c++11 =). @@ -96,20 +123,37 @@ struct ex_event ex_event_name iName; size_t iPoolId; - union - { + union { pool_job oPoolJob; job_result oJobResult; sock_err oSocketError; gpu_res_err oGpuError; }; - ex_event() { iName = EV_INVALID_VAL; iPoolId = 0;} - ex_event(const char* gpu_err, size_t gpu_idx, size_t id) : iName(EV_GPU_RES_ERROR), iPoolId(id), oGpuError(gpu_err, gpu_idx) {} - ex_event(std::string&& err, bool silent, size_t id) : iName(EV_SOCK_ERROR), iPoolId(id), oSocketError(std::move(err), silent) { } - ex_event(job_result dat, size_t id) : iName(EV_MINER_HAVE_RESULT), iPoolId(id), oJobResult(dat) {} - ex_event(pool_job dat, size_t id) : iName(EV_POOL_HAVE_JOB), iPoolId(id), oPoolJob(dat) {} - ex_event(ex_event_name ev, size_t id = 0) : iName(ev), iPoolId(id) {} + ex_event() + { + iName = EV_INVALID_VAL; + iPoolId = 0; + } + ex_event(const char* gpu_err, size_t gpu_idx, size_t id) : + iName(EV_GPU_RES_ERROR), + iPoolId(id), + oGpuError(gpu_err, gpu_idx) {} + ex_event(std::string&& err, bool silent, size_t id) : + iName(EV_SOCK_ERROR), + iPoolId(id), + oSocketError(std::move(err), silent) {} + ex_event(job_result dat, size_t id) : + iName(EV_MINER_HAVE_RESULT), + iPoolId(id), + oJobResult(dat) {} + ex_event(pool_job dat, size_t id) : + iName(EV_POOL_HAVE_JOB), + iPoolId(id), + oPoolJob(dat) {} + ex_event(ex_event_name ev, size_t id = 0) : + iName(ev), + iPoolId(id) {} // Delete the copy operators to make sure we are moving only what is needed ex_event(ex_event const&) = delete; @@ -123,7 +167,7 @@ struct ex_event switch(iName) { case EV_SOCK_ERROR: - new (&oSocketError) sock_err(std::move(from.oSocketError)); + new(&oSocketError) sock_err(std::move(from.oSocketError)); break; case EV_MINER_HAVE_RESULT: oJobResult = from.oJobResult; @@ -151,7 +195,7 @@ struct ex_event switch(iName) { case EV_SOCK_ERROR: - new (&oSocketError) sock_err(); + new(&oSocketError) sock_err(); oSocketError = std::move(from.oSocketError); break; case EV_MINER_HAVE_RESULT: diff --git a/xmrstak/net/socket.cpp b/xmrstak/net/socket.cpp index 6fcb454cd..6a6abac15 100644 --- a/xmrstak/net/socket.cpp +++ b/xmrstak/net/socket.cpp @@ -28,16 +28,17 @@ #include "xmrstak/misc/executor.hpp" #ifndef CONF_NO_TLS -#include #include #include +#include #ifndef OPENSSL_THREADS #error OpenSSL was compiled without thread support #endif #endif -plain_socket::plain_socket(jpsock* err_callback) : pCallback(err_callback) +plain_socket::plain_socket(jpsock* err_callback) : + pCallback(err_callback) { hSocket = INVALID_SOCKET; pSockAddr = nullptr; @@ -50,58 +51,58 @@ bool plain_socket::set_hostname(const char* sAddr) sock_closed = false; size_t ln = strlen(sAddr); - if (ln >= sizeof(sAddrMb)) + if(ln >= sizeof(sAddrMb)) return pCallback->set_socket_error("CONNECT error: Pool address overflow."); memcpy(sAddrMb, sAddr, ln); sAddrMb[ln] = '\0'; - if ((sTmp = strstr(sAddrMb, "//")) != nullptr) + if((sTmp = strstr(sAddrMb, "//")) != nullptr) { sTmp += 2; memmove(sAddrMb, sTmp, strlen(sTmp) + 1); } - if ((sPort = strchr(sAddrMb, ':')) == nullptr) + if((sPort = strchr(sAddrMb, ':')) == nullptr) return pCallback->set_socket_error("CONNECT error: Pool port number not specified, please use format :."); sPort[0] = '\0'; sPort++; - addrinfo hints = { 0 }; + addrinfo hints = {0}; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; pAddrRoot = nullptr; int err; - if ((err = getaddrinfo(sAddrMb, sPort, &hints, &pAddrRoot)) != 0) + if((err = getaddrinfo(sAddrMb, sPort, &hints, &pAddrRoot)) != 0) return pCallback->set_socket_error_strerr("CONNECT error: GetAddrInfo: ", err); - addrinfo *ptr = pAddrRoot; + addrinfo* ptr = pAddrRoot; std::vector ipv4; std::vector ipv6; - while (ptr != nullptr) + while(ptr != nullptr) { - if (ptr->ai_family == AF_INET) + if(ptr->ai_family == AF_INET) ipv4.push_back(ptr); - if (ptr->ai_family == AF_INET6) + if(ptr->ai_family == AF_INET6) ipv6.push_back(ptr); ptr = ptr->ai_next; } - if (ipv4.empty() && ipv6.empty()) + if(ipv4.empty() && ipv6.empty()) { freeaddrinfo(pAddrRoot); pAddrRoot = nullptr; return pCallback->set_socket_error("CONNECT error: I found some DNS records but no IPv4 or IPv6 addresses."); } - else if (!ipv4.empty() && ipv6.empty()) + else if(!ipv4.empty() && ipv6.empty()) pSockAddr = ipv4[rand() % ipv4.size()]; - else if (ipv4.empty() && !ipv6.empty()) + else if(ipv4.empty() && !ipv6.empty()) pSockAddr = ipv6[rand() % ipv6.size()]; - else if (!ipv4.empty() && !ipv6.empty()) + else if(!ipv4.empty() && !ipv6.empty()) { if(jconf::inst()->PreferIpv4()) pSockAddr = ipv4[rand() % ipv4.size()]; @@ -111,7 +112,7 @@ bool plain_socket::set_hostname(const char* sAddr) hSocket = socket(pSockAddr->ai_family, pSockAddr->ai_socktype, pSockAddr->ai_protocol); - if (hSocket == INVALID_SOCKET) + if(hSocket == INVALID_SOCKET) { freeaddrinfo(pAddrRoot); pAddrRoot = nullptr; @@ -120,7 +121,7 @@ bool plain_socket::set_hostname(const char* sAddr) int flag = 1; /* If it fails, it fails, we won't loose too much sleep over it */ - setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); + setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(int)); return true; } @@ -133,7 +134,7 @@ bool plain_socket::connect() freeaddrinfo(pAddrRoot); pAddrRoot = nullptr; - if (ret != 0) + if(ret != 0) return pCallback->set_socket_error_strerr("CONNECT error: "); else return true; @@ -158,10 +159,10 @@ bool plain_socket::send(const char* buf) { size_t pos = 0; size_t slen = strlen(buf); - while (pos != slen) + while(pos != slen) { int ret = ::send(hSocket, buf + pos, slen - pos, 0); - if (ret == SOCKET_ERROR) + if(ret == SOCKET_ERROR) { pCallback->set_socket_error_strerr("SEND error: "); return false; @@ -184,7 +185,8 @@ void plain_socket::close(bool free) } #ifndef CONF_NO_TLS -tls_socket::tls_socket(jpsock* err_callback) : pCallback(err_callback) +tls_socket::tls_socket(jpsock* err_callback) : + pCallback(err_callback) { } @@ -193,7 +195,7 @@ void tls_socket::print_error() BIO* err_bio = BIO_new(BIO_s_mem()); ERR_print_errors(err_bio); - char *buf = nullptr; + char* buf = nullptr; size_t len = BIO_get_mem_data(err_bio, &buf); if(buf == nullptr) @@ -247,7 +249,7 @@ bool tls_socket::set_hostname(const char* sAddr) int flag = 1; /* If it fails, it fails, we won't loose too much sleep over it */ - setsockopt(BIO_get_fd(bio, nullptr), IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); + setsockopt(BIO_get_fd(bio, nullptr), IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(int)); if(BIO_set_conn_hostname(bio, sAddr) != 1) { @@ -327,7 +329,7 @@ bool tls_socket::connect() BIO_flush(b64); const char* conf_md = pCallback->get_tls_fp(); - char *b64_md = nullptr; + char* b64_md = nullptr; size_t b64_len = BIO_get_mem_data(bmem, &b64_md); if(strlen(conf_md) == 0) @@ -393,4 +395,3 @@ void tls_socket::close(bool free) } } #endif - diff --git a/xmrstak/net/socket.hpp b/xmrstak/net/socket.hpp index b09142d56..88b665adf 100644 --- a/xmrstak/net/socket.hpp +++ b/xmrstak/net/socket.hpp @@ -1,26 +1,26 @@ #pragma once -#include #include "socks.hpp" +#include class jpsock; class base_socket { -public: + public: virtual bool set_hostname(const char* sAddr) = 0; virtual bool connect() = 0; virtual int recv(char* buf, unsigned int len) = 0; virtual bool send(const char* buf) = 0; virtual void close(bool free) = 0; -protected: + protected: std::atomic sock_closed; }; class plain_socket : public base_socket { -public: + public: plain_socket(jpsock* err_callback); bool set_hostname(const char* sAddr); @@ -29,10 +29,10 @@ class plain_socket : public base_socket bool send(const char* buf); void close(bool free); -private: + private: jpsock* pCallback; - addrinfo *pSockAddr; - addrinfo *pAddrRoot; + addrinfo* pSockAddr; + addrinfo* pAddrRoot; SOCKET hSocket; }; @@ -42,7 +42,7 @@ typedef struct ssl_st SSL; class tls_socket : public base_socket { -public: + public: tls_socket(jpsock* err_callback); bool set_hostname(const char* sAddr); @@ -51,7 +51,7 @@ class tls_socket : public base_socket bool send(const char* buf); void close(bool free); -private: + private: void init_ctx(); void print_error(); diff --git a/xmrstak/net/socks.hpp b/xmrstak/net/socks.hpp index 86749e527..600e4d276 100644 --- a/xmrstak/net/socks.hpp +++ b/xmrstak/net/socks.hpp @@ -2,18 +2,19 @@ #ifdef _WIN32 #ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0601 /* Windows 7 */ +#define _WIN32_WINNT 0x0601 /* Windows 7 */ #endif + #include #include +// this comment disable clang include reordering for windows.h #include - inline void sock_init() { static bool bWSAInit = false; - if (!bWSAInit) + if(!bWSAInit) { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); @@ -56,20 +57,20 @@ inline const char* sock_gai_strerror(int err, char* buf, size_t len) #else /* Assume that any non-Windows platform uses POSIX-style sockets instead. */ -#include #include -#include /* Needed for getaddrinfo() and freeaddrinfo() */ -#include /* Needed for close() */ #include -#include +#include /* Needed for getaddrinfo() and freeaddrinfo() */ #include /* Needed for IPPROTO_TCP */ #include +#include +#include +#include /* Needed for close() */ inline void sock_init() {} typedef int SOCKET; -#define INVALID_SOCKET (-1) -#define SOCKET_ERROR (-1) +#define INVALID_SOCKET (-1) +#define SOCKET_ERROR (-1) inline void sock_close(SOCKET s) { diff --git a/xmrstak/params.hpp b/xmrstak/params.hpp index 146aaa42f..a00e51b0a 100644 --- a/xmrstak/params.hpp +++ b/xmrstak/params.hpp @@ -73,8 +73,8 @@ struct params rootAMDCacheDir(get_home() + "/.openclcache/"), configFileCPU("cpu.txt"), configFileNVIDIA("nvidia.txt") - {} - + { + } }; } // namespace xmrstak diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index c9fa175ac..8a51aa0bc 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -2,7 +2,9 @@ //! git will put "#define GIT_ARCHIVE 1" on the next line inside archives. $Format:%n#define GIT_ARCHIVE 1$ #if defined(GIT_ARCHIVE) && !defined(GIT_COMMIT_HASH) -#define GIT_COMMIT_HASH $Format:%h$ +#define GIT_COMMIT_HASH \ + $Format: \ + % h$ #endif #ifndef GIT_COMMIT_HASH @@ -35,10 +37,10 @@ #define XMRSTAK_PP_TOSTRING1(str) #str #define XMRSTAK_PP_TOSTRING(str) XMRSTAK_PP_TOSTRING1(str) -#define VERSION_LONG XMR_STAK_NAME "/" XMR_STAK_VERSION "/" XMRSTAK_PP_TOSTRING(GIT_COMMIT_HASH) "/" XMRSTAK_PP_TOSTRING(GIT_BRANCH) "/" OS_TYPE "/" XMRSTAK_PP_TOSTRING(BACKEND_TYPE) "/" +#define VERSION_LONG XMR_STAK_NAME "/" XMR_STAK_VERSION "/" XMRSTAK_PP_TOSTRING(GIT_COMMIT_HASH) "/" XMRSTAK_PP_TOSTRING(GIT_BRANCH) "/" OS_TYPE "/" XMRSTAK_PP_TOSTRING(BACKEND_TYPE) "/" #define VERSION_SHORT XMR_STAK_NAME " " XMR_STAK_VERSION " " XMRSTAK_PP_TOSTRING(GIT_COMMIT_HASH) #define VERSION_HTML "v" XMR_STAK_VERSION "-" XMRSTAK_PP_TOSTRING(GIT_COMMIT_HASH) -const char ver_long[] = VERSION_LONG; +const char ver_long[] = VERSION_LONG; const char ver_short[] = VERSION_SHORT; const char ver_html[] = VERSION_HTML; diff --git a/xmrstak/version.hpp b/xmrstak/version.hpp index cdf82f30d..85905f01c 100644 --- a/xmrstak/version.hpp +++ b/xmrstak/version.hpp @@ -1,8 +1,8 @@ #pragma once +#include "donate-level.hpp" #include #include -#include "donate-level.hpp" extern const char ver_long[]; extern const char ver_short[]; @@ -10,7 +10,7 @@ extern const char ver_html[]; inline std::string get_version_str() { - return std::string(ver_long) + std::to_string(uint32_t(fDevDonationLevel * 1000)) ; + return std::string(ver_long) + std::to_string(uint32_t(fDevDonationLevel * 1000)); } inline std::string get_version_str_short() From 253864ee1e9ce3aaf4dc69ae76be3a6ae6400517 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Tue, 26 Mar 2019 20:48:03 +0100 Subject: [PATCH 04/62] use different issue templates add issue templates to get more information to solve issues --- .github/ISSUE_TEMPLATE.md | 30 ---------------- .github/ISSUE_TEMPLATE/compile_bug_report.md | 35 +++++++++++++++++++ .../ISSUE_TEMPLATE/execution_bug_report.md | 7 ++++ .github/ISSUE_TEMPLATE/feature_request.md | 7 ++++ .github/ISSUE_TEMPLATE/tuning_help.md | 7 ++++ 5 files changed, 56 insertions(+), 30 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/compile_bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/execution_bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/tuning_help.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 8451f3289..000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,30 +0,0 @@ -Please provide as much as possible information to reproduce the issue. - -# Basic information - - Type of the CPU. - - Type of the GPU (if you try to miner with the GPU). - -# Compile issues - - Which OS do you use? - ``` - add **all** commands you used and the **full** compile output here - ``` - ``` - run `cmake -LA .` in the build folder and add the output here - ``` - -# Issue with the execution - - Do you compiled the miner by our own? - ``` - run `./xmr-stak --version-long` and add the output here - ``` - -# AMD OpenCl issue - - ``` - run `clinfo` and add the output here - ``` - -# Stability issue - - Is the CPU or GPU overclocked? - - Is the Main memory of the CPU or GPU undervolted? diff --git a/.github/ISSUE_TEMPLATE/compile_bug_report.md b/.github/ISSUE_TEMPLATE/compile_bug_report.md new file mode 100644 index 000000000..899ad941f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/compile_bug_report.md @@ -0,0 +1,35 @@ +--- +name: Compile bug report +about: You have an issue to compile xmr-stak. + +--- + +`...` are the placeholder for your answers. Please answer each question! + + +**Describe the bug** +A clear and concise description of what the bug is. + +**Which operating system do you use? ** + +``` +... +``` + +**To Reproduce** +``` +# Please post all commands and the output. +... +``` + +**Additional information.** + +``` +# run `cmake -LA .` in the build folder and add the output here +... +``` + +**Feel free to add more information.** +``` +... +``` diff --git a/.github/ISSUE_TEMPLATE/execution_bug_report.md b/.github/ISSUE_TEMPLATE/execution_bug_report.md new file mode 100644 index 000000000..edc03745a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/execution_bug_report.md @@ -0,0 +1,7 @@ +--- +name: Execution bug report +about: You have an issue to execute xmr-stak. + + --- + +**Most execution issues are caused by driver problems. Please use the [xmr-stak sub-reddit](https://www.reddit.com/r/XmrStak/) to ask for help instead of opening an issue here.** \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..90f5e4f3d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,7 @@ +--- +name: Feature request +about: Suggest an idea for xmr-stak. + +--- + +**Please explain the feature as good as possible.** diff --git a/.github/ISSUE_TEMPLATE/tuning_help.md b/.github/ISSUE_TEMPLATE/tuning_help.md new file mode 100644 index 000000000..40dedef05 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/tuning_help.md @@ -0,0 +1,7 @@ +--- +name: Need help for optimization. +about: You need help to optimize your setup. + +--- + +**Please use the [xmr-stak sub-reddit](https://www.reddit.com/r/XmrStak/) to discuss optimizations.** From 9e237e9407f07f7a1a2a3c8110f3c66b713eb445 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Thu, 28 Mar 2019 17:51:00 +0100 Subject: [PATCH 05/62] update version to 2.10.3 --- xmrstak/version.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index 8a51aa0bc..d4afd7877 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -20,7 +20,7 @@ #endif #define XMR_STAK_NAME "xmr-stak" -#define XMR_STAK_VERSION "2.10.2" +#define XMR_STAK_VERSION "2.10.3" #if defined(_WIN32) #define OS_TYPE "win" From 3e73a3d34108cdf0fba27fc1d6753847e2f2fd62 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Thu, 28 Mar 2019 22:34:20 +0100 Subject: [PATCH 06/62] fix execution issue template --- .github/ISSUE_TEMPLATE/execution_bug_report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/execution_bug_report.md b/.github/ISSUE_TEMPLATE/execution_bug_report.md index edc03745a..44ac89bf1 100644 --- a/.github/ISSUE_TEMPLATE/execution_bug_report.md +++ b/.github/ISSUE_TEMPLATE/execution_bug_report.md @@ -2,6 +2,6 @@ name: Execution bug report about: You have an issue to execute xmr-stak. - --- +--- -**Most execution issues are caused by driver problems. Please use the [xmr-stak sub-reddit](https://www.reddit.com/r/XmrStak/) to ask for help instead of opening an issue here.** \ No newline at end of file +**Most execution issues are caused by driver problems. Please use the [xmr-stak sub-reddit](https://www.reddit.com/r/XmrStak/) to ask for help instead of opening an issue here.** From d8d24bb4c8064f6fd24fcb79c7af4106a0e6e4af Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Fri, 29 Mar 2019 21:11:31 +0100 Subject: [PATCH 07/62] fix simple start Simple starts requires always user interactions if config.txt and pools.txt is not available. This PR asked the user only on the first advanced option if he/she preferse the simple start or an advanced mode. If all parameter are already defined via command line options than the question will never be shown. --- xmrstak/cli/cli-miner.cpp | 64 ++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index a53a4ba9b..cc4b1b3d9 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -195,7 +195,14 @@ inline void prompt_once(bool& prompted) } } -void do_guided_pool_config(const bool use_simple_start) +inline bool use_simple_start() +{ + // ask this question only once + static bool simple_start = read_yes_no("\nUse simple setup method? (Y/n)", "Y"); + return simple_start; +} + +void do_guided_pool_config() { using namespace xmrstak; @@ -261,19 +268,22 @@ void do_guided_pool_config(const bool use_simple_start) } auto& rigid = params::inst().poolRigid; - if(!use_simple_start && rigid.empty() && !params::inst().userSetRigid) + if(rigid.empty() && !params::inst().userSetRigid) { - prompt_once(prompted); - - if(!stdin_flushed) + if(!use_simple_start()) { - // clear everything from stdin to allow an empty rigid - std::cin.clear(); - std::cin.ignore(INT_MAX, '\n'); - } + prompt_once(prompted); - std::cout << "- Rig identifier for pool-side statistics (needs pool support). Can be empty:" << std::endl; - getline(std::cin, rigid); + if(!stdin_flushed) + { + // clear everything from stdin to allow an empty rigid + std::cin.clear(); + std::cin.ignore(INT_MAX, '\n'); + } + + std::cout << "- Rig identifier for pool-side statistics (needs pool support). Can be empty:" << std::endl; + getline(std::cin, rigid); + } } bool tls = params::inst().poolUseTls; @@ -289,15 +299,19 @@ void do_guided_pool_config(const bool use_simple_start) #endif bool nicehash = params::inst().nicehashMode; - if(!use_simple_start && !userSetPool) + if(!userSetPool) { - prompt_once(prompted); - nicehash = read_yes_no("- Do you want to use nicehash on this pool? (y/N)", "N"); + if(!use_simple_start()) + { + prompt_once(prompted); + nicehash = read_yes_no("- Do you want to use nicehash on this pool? (y/N)", "N"); + } } bool multipool = false; - if(!use_simple_start && !userSetPool) - multipool = read_yes_no("- Do you want to use multiple pools? (y/N)", "N"); + if(!userSetPool) + if(!use_simple_start()) + multipool = read_yes_no("- Do you want to use multiple pools? (y/N)", "N"); int64_t pool_weight = 1; if(multipool) @@ -335,7 +349,7 @@ void do_guided_pool_config(const bool use_simple_start) std::cout << "Pool configuration stored in file '" << params::inst().configFilePools << "'" << std::endl; } -void do_guided_config(const bool use_simple_start) +void do_guided_config() { using namespace xmrstak; @@ -353,7 +367,7 @@ void do_guided_config(const bool use_simple_start) { http_port = params::httpd_port_disabled; #ifndef CONF_NO_HTTPD - if(!use_simple_start) + if(!use_simple_start()) { prompt_once(prompted); @@ -737,17 +751,13 @@ int main(int argc, char* argv[]) bool hasConfigFile = configEditor::file_exist(params::inst().configFile); bool hasPoolConfig = configEditor::file_exist(params::inst().configFilePools); - if(!hasConfigFile || !hasPoolConfig) - { - bool use_simple_start = read_yes_no("\nUse simple setup method? (Y/n)", "Y"); + // check if we need a guided start + if(!hasConfigFile) + do_guided_config(); - // check if we need a guided start - if(!hasConfigFile) - do_guided_config(use_simple_start); + if(!hasPoolConfig) + do_guided_pool_config(); - if(!hasPoolConfig) - do_guided_pool_config(use_simple_start); - } if(!jconf::inst()->parse_config(params::inst().configFile.c_str(), params::inst().configFilePools.c_str())) { win_exit(); From 50c7bb3627021b35d97a0caad752984490eb405d Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Fri, 29 Mar 2019 23:43:20 +0100 Subject: [PATCH 08/62] avoid hash rate drop during dev pool mining Since the dev pool is sometimes using another POW than the user pool the hash date can strongly increase or decrease. In a case of a hash rate drop a monitoring software could trigger a wrong miner restart. - use the hash rate calculated during the user pool mining to interpulate the number of hashes during the dev pool mining so that the statistics stay constant. --- xmrstak/backend/amd/minethd.cpp | 6 +----- xmrstak/backend/cpu/minethd.cpp | 6 +++--- xmrstak/backend/iBackend.hpp | 24 ++++++++++++++++++++++++ xmrstak/backend/nvidia/minethd.cpp | 8 +------- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/xmrstak/backend/amd/minethd.cpp b/xmrstak/backend/amd/minethd.cpp index 667144cdd..0a181154c 100644 --- a/xmrstak/backend/amd/minethd.cpp +++ b/xmrstak/backend/amd/minethd.cpp @@ -172,7 +172,6 @@ void minethd::work_main() lck.release(); std::this_thread::yield(); - uint64_t iCount = 0; cryptonight_ctx* cpu_ctx; cpu_ctx = cpu::minethd::minethd_alloc_ctx(); @@ -288,10 +287,7 @@ void minethd::work_main() executor::inst()->push_event(ex_event("AMD Invalid Result", pGpuCtx->deviceIdx, oWork.iPoolId)); } - iCount += pGpuCtx->rawIntensity; - uint64_t iStamp = get_timestamp_ms(); - iHashCount.store(iCount, std::memory_order_relaxed); - iTimestamp.store(iStamp, std::memory_order_relaxed); + updateStats(pGpuCtx->rawIntensity, oWork.iPoolId); accRuntime += updateTimings(pGpuCtx, t0); diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp index 0229af0a7..463be1aab 100644 --- a/xmrstak/backend/cpu/minethd.cpp +++ b/xmrstak/backend/cpu/minethd.cpp @@ -833,6 +833,7 @@ void minethd::multiway_work_main() cryptonight_ctx* ctx[MAX_N]; uint64_t iCount = 0; + uint64_t iLastCount = 0; uint64_t* piHashVal[MAX_N]; uint32_t* piNonce[MAX_N]; uint8_t bHashOut[MAX_N * 32]; @@ -915,9 +916,8 @@ void minethd::multiway_work_main() { if((iCount++ & 0x7) == 0) //Store stats every 8*N hashes { - uint64_t iStamp = get_timestamp_ms(); - iHashCount.store(iCount * N, std::memory_order_relaxed); - iTimestamp.store(iStamp, std::memory_order_relaxed); + updateStats((iCount - iLastCount) * N, oWork.iPoolId); + iLastCount = iCount; } nonce_ctr -= N; diff --git a/xmrstak/backend/iBackend.hpp b/xmrstak/backend/iBackend.hpp index 1af42c248..dd59b6c52 100644 --- a/xmrstak/backend/iBackend.hpp +++ b/xmrstak/backend/iBackend.hpp @@ -1,6 +1,7 @@ #pragma once #include "xmrstak/backend/globalStates.hpp" +#include "xmrstak/net/msgstruct.hpp" #include #include @@ -46,6 +47,29 @@ struct iBackend std::atomic iTimestamp; uint32_t iThreadNo; BackendType backendType = UNKNOWN; + uint64_t iLastStamp = get_timestamp_ms(); + double avgHashPerMsec = 0.0; + + void updateStats(uint64_t numNewHashes, size_t poolId) + { + uint64_t iStamp = get_timestamp_ms(); + double timeDiff = static_cast(iStamp - iLastStamp); + iLastStamp = iStamp; + + if(poolId == 0) + { + // if dev pool is active interpolate the number of shares (avoid hash rate drops) + numNewHashes = static_cast(avgHashPerMsec * timeDiff); + } + else + { + const double hashRatePerMs = static_cast(numNewHashes) / timeDiff; + constexpr double averagingBias = 0.1; + avgHashPerMsec = avgHashPerMsec * (1.0 - averagingBias) + hashRatePerMs * averagingBias; + } + iHashCount.fetch_add(numNewHashes, std::memory_order_relaxed); + iTimestamp.store(iStamp, std::memory_order_relaxed); + } iBackend() : iHashCount(0), diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 4506faed6..32b21dc71 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -198,7 +198,6 @@ void minethd::work_main() // wait until all NVIDIA devices are initialized thread_work_guard.wait(); - uint64_t iCount = 0; cryptonight_ctx* cpu_ctx; cpu_ctx = cpu::minethd::minethd_alloc_ctx(); @@ -297,13 +296,8 @@ void minethd::work_main() executor::inst()->push_event(ex_event("NVIDIA Invalid Result", ctx.device_id, oWork.iPoolId)); } - iCount += h_per_round; iNonce += h_per_round; - - using namespace std::chrono; - uint64_t iStamp = get_timestamp_ms(); - iHashCount.store(iCount, std::memory_order_relaxed); - iTimestamp.store(iStamp, std::memory_order_relaxed); + updateStats(h_per_round, oWork.iPoolId); std::this_thread::yield(); } From 38e7eb0c74ba631c340d64ad190732603dfb16d6 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Mon, 1 Apr 2019 21:59:02 +0200 Subject: [PATCH 09/62] fix cn_r block 1802223 bug fix nvrtc deadlock with `cuda version != 10.1`: https://github.com/xmrig/xmrig-nvidia/issues/260 --- xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_r.curt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_r.curt b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_r.curt index bcf495080..214114c7e 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_r.curt +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_r.curt @@ -462,10 +462,10 @@ __global__ void CryptonightR_phase2( uint64_t bx0 = ((uint64_t*)(d_ctx_b + thread * 16))[sub]; uint64_t bx1 = ((uint64_t*)(d_ctx_b + thread * 16 + 4))[sub]; - uint32_t r0 = d_ctx_b[thread * 16 + 4 * 2]; - uint32_t r1 = d_ctx_b[thread * 16 + 4 * 2 + 1]; - uint32_t r2 = d_ctx_b[thread * 16 + 4 * 2 + 2]; - uint32_t r3 = d_ctx_b[thread * 16 + 4 * 2 + 3]; + volatile uint32_t r0 = d_ctx_b[thread * 16 + 4 * 2]; + volatile uint32_t r1 = d_ctx_b[thread * 16 + 4 * 2 + 1]; + volatile uint32_t r2 = d_ctx_b[thread * 16 + 4 * 2 + 2]; + volatile uint32_t r3 = d_ctx_b[thread * 16 + 4 * 2 + 3]; const int batchsize = (ITERATIONS * 2) >> ( 1 + bfactor ); const int start = partidx * batchsize; From 8e07b13963bee56fbad91e1920ddeb4fe9bf9475 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Mon, 1 Apr 2019 22:06:00 +0200 Subject: [PATCH 10/62] version increase to 2.10.4 --- xmrstak/version.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index d4afd7877..f42e2a0bf 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -20,7 +20,7 @@ #endif #define XMR_STAK_NAME "xmr-stak" -#define XMR_STAK_VERSION "2.10.3" +#define XMR_STAK_VERSION "2.10.4" #if defined(_WIN32) #define OS_TYPE "win" From 084077861352169e8feaf4faf474835a01b37749 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Tue, 2 Apr 2019 20:40:17 +0200 Subject: [PATCH 11/62] concurrent hash rate calculation Allow that the web interface/json api and the command line view can create the hash rate statistics concurrent. --- xmrstak/misc/telemetry.cpp | 10 ++++++---- xmrstak/misc/telemetry.hpp | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/xmrstak/misc/telemetry.cpp b/xmrstak/misc/telemetry.cpp index 16ecaa6f6..75fb4f434 100644 --- a/xmrstak/misc/telemetry.cpp +++ b/xmrstak/misc/telemetry.cpp @@ -23,6 +23,7 @@ #include "telemetry.hpp" #include "xmrstak/net/msgstruct.hpp" +#include "xmrstak/cpputil/read_write_lock.h" #include #include @@ -36,7 +37,7 @@ telemetry::telemetry(size_t iThd) ppHashCounts = new uint64_t*[iThd]; ppTimestamps = new uint64_t*[iThd]; iBucketTop = new uint32_t[iThd]; - mtx = new std::mutex[iThd]; + mtx = new ::cpputil::RWLock[iThd]; for(size_t i = 0; i < iThd; i++) { @@ -57,7 +58,7 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) uint64_t iLatestHashCnt = 0; bool bHaveFullSet = false; - std::unique_lock lk(mtx[iThread]); + mtx[iThread].ReadLock(); uint64_t iTimeNow = get_timestamp_ms(); //Start at 1, buckettop points to next empty @@ -83,7 +84,7 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) iEarliestStamp = ppTimestamps[iThread][idx]; iEarliestHashCnt = ppHashCounts[iThread][idx]; } - lk.unlock(); + mtx[iThread].UnLock(); if(!bHaveFullSet || iEarliestStamp == 0 || iLatestStamp == 0) return nan(""); @@ -102,12 +103,13 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) void telemetry::push_perf_value(size_t iThd, uint64_t iHashCount, uint64_t iTimestamp) { - std::unique_lock lk(mtx[iThd]); + mtx[iThd].WriteLock(); size_t iTop = iBucketTop[iThd]; ppHashCounts[iThd][iTop] = iHashCount; ppTimestamps[iThd][iTop] = iTimestamp; iBucketTop[iThd] = (iTop + 1) & iBucketMask; + mtx[iThd].UnLock(); } } // namespace xmrstak diff --git a/xmrstak/misc/telemetry.hpp b/xmrstak/misc/telemetry.hpp index 2ab2a9e5f..a7b77c287 100644 --- a/xmrstak/misc/telemetry.hpp +++ b/xmrstak/misc/telemetry.hpp @@ -1,5 +1,7 @@ #pragma once +#include "xmrstak/cpputil/read_write_lock.h" + #include #include #include @@ -15,7 +17,7 @@ class telemetry double calc_telemetry_data(size_t iLastMillisec, size_t iThread); private: - std::mutex* mtx; + ::cpputil::RWLock* mtx; constexpr static size_t iBucketSize = 2 << 11; //Power of 2 to simplify calculations constexpr static size_t iBucketMask = iBucketSize - 1; uint32_t* iBucketTop; From 711c08803110fd9d75230b99e175df06013df9f2 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 17 Apr 2019 20:39:28 +0200 Subject: [PATCH 12/62] fix benchmark mode fix broken benchmark mode --- xmrstak/cli/cli-miner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index cc4b1b3d9..30af616a0 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -894,7 +894,7 @@ int do_benchmark(int block_version, int wait_sec, int work_sec) /* AMD and NVIDIA is currently only supporting work sizes up to 128byte */ printer::inst()->print_msg(L0, "Start a %d second benchmark...", work_sec); - xmrstak::globalStates::inst().switch_work(xmrstak::miner_work("", work, 128, 0, false, 0, 0), dat); + xmrstak::globalStates::inst().switch_work(xmrstak::miner_work("", work, 128, 0, false, 1, 0), dat); uint64_t iStartStamp = get_timestamp_ms(); std::this_thread::sleep_for(std::chrono::seconds(work_sec)); From 94063f34276e949fc7f8e135ee6ee021a87de973 Mon Sep 17 00:00:00 2001 From: Andrey Moiseev Date: Sun, 28 Apr 2019 01:59:44 +0300 Subject: [PATCH 13/62] --log CLI parameter --- xmrstak/cli/cli-miner.cpp | 14 ++++++++++++++ xmrstak/config.tpl | 2 +- xmrstak/jconf.cpp | 5 ++++- xmrstak/params.hpp | 2 ++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index 30af616a0..26a18317b 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -90,6 +90,7 @@ void help() cout << " --noNVIDIA disable the NVIDIA miner backend" << endl; cout << " --nvidia FILE NVIDIA backend miner config file" << endl; #endif + cout << " --log FILE miner output file" << endl; #ifndef CONF_NO_HTTPD cout << " -i --httpd HTTP_PORT HTTP interface port" << endl; #endif @@ -388,6 +389,8 @@ void do_guided_config() } configTpl.replace("HTTP_PORT", std::to_string(http_port)); + + configTpl.replace("OUTPUT_FILE", params::inst().outputFile); configTpl.write(params::inst().configFile); std::cout << "Configuration stored in file '" << params::inst().configFile << "'" << std::endl; } @@ -657,6 +660,17 @@ int main(int argc, char* argv[]) } params::inst().configFilePools = argv[i]; } + else if(opName.compare("--log") == 0) + { + ++i; + if(i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--log' given"); + win_exit(); + return 1; + } + params::inst().outputFile = argv[i]; + } else if(opName.compare("-i") == 0 || opName.compare("--httpd") == 0) { ++i; diff --git a/xmrstak/config.tpl b/xmrstak/config.tpl index d8fd861a7..9edaab65f 100644 --- a/xmrstak/config.tpl +++ b/xmrstak/config.tpl @@ -129,7 +129,7 @@ R"===(// generated by XMRSTAK_VERSION * output_file - This option will log all output to a file. * */ -"output_file" : "", +"output_file" : "OUTPUT_FILE", /* * Built-in web server diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 10082a09f..2bc5205bc 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -283,7 +283,10 @@ bool jconf::DaemonMode() const char* jconf::GetOutputFile() { - return prv->configValues[sOutputFile]->GetString(); + if(xmrstak::params::inst().outputFile.length() > 0) + return xmrstak::params::inst().outputFile.c_str(); + else + return prv->configValues[sOutputFile]->GetString(); } void jconf::cpuid(uint32_t eax, int32_t ecx, int32_t val[4]) diff --git a/xmrstak/params.hpp b/xmrstak/params.hpp index a00e51b0a..9fc3b57b8 100644 --- a/xmrstak/params.hpp +++ b/xmrstak/params.hpp @@ -50,6 +50,8 @@ struct params std::string configFileNVIDIA; std::string configFileCPU; + std::string outputFile; + bool allowUAC = true; std::string minerArg0; std::string minerArgs; From 2854b3137253f609d02ba51591a3ea390984db2f Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Tue, 30 Apr 2019 21:25:51 +0200 Subject: [PATCH 14/62] change lethean POW to cn_r fix #2418 --- xmrstak/jconf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 10082a09f..8d90b654d 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -127,7 +127,7 @@ xmrstak::coin_selection coins[] = { {"freehaven", {POW(cryptonight_superfast)}, {POW(cryptonight_gpu)}, nullptr}, {"graft", {POW(cryptonight_v8_reversewaltz), 12, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, {"haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr}, - {"lethean", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, + {"lethean", {POW(cryptonight_r)}, {POW(cryptonight_r)}, nullptr}, {"masari", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "pool.usxmrpool.com:3333"}, {"qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, From e9a8563d09573d77ae9a1234e797f02d2fea1772 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Tue, 30 Apr 2019 22:12:31 +0200 Subject: [PATCH 15/62] change xmr pool suggestion pool.usxmrpool.com is not available anymore so we change the suggestion --- xmrstak/jconf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 10082a09f..80d6630fd 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -129,7 +129,7 @@ xmrstak::coin_selection coins[] = { {"haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr}, {"lethean", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, {"masari", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, - {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "pool.usxmrpool.com:3333"}, + {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "monero.miner.rocks:5551"}, {"qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, {"ryo", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, {"stellite", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, From 08492ea9f384c389cd16d6a8e7ad774d5aafd632 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 1 May 2019 21:25:25 +0200 Subject: [PATCH 16/62] rename intense to lethean I missed to rename the coin in the pools.tpl file --- xmrstak/pools.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/pools.tpl b/xmrstak/pools.tpl index ea3a276aa..42d494766 100644 --- a/xmrstak/pools.tpl +++ b/xmrstak/pools.tpl @@ -25,7 +25,7 @@ POOLCONF], * freehaven * graft * haven (automatic switch with block version 3 to cryptonight_haven) - * intense + * lethean * masari * monero (use this to support Monero's Oct 2018 fork) * qrl - Quantum Resistant Ledger From a83b48cfd5cd74f09da760bbb0ec280989ba4609 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 1 May 2019 21:39:49 +0200 Subject: [PATCH 17/62] change stellite to torque The name of the coin has changed https://medium.com/torque/rebranding-stellite-xtl-to-torque-xtc-14ae0638ef35 --- README.md | 4 ++-- xmrstak/jconf.cpp | 2 +- xmrstak/pools.tpl | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c890da1a5..7622758e3 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Besides [Monero](https://getmonero.org), following coins can be mined using this - [Plenteum](https://www.plenteum.com/) - [QRL](https://theqrl.org) - **[Ryo](https://ryo-currency.com) - Upcoming xmr-stak-gui is sponsored by Ryo** -- [Stellite](https://stellite.cash/) +- [Torque](https://torque.cash/) - [TurtleCoin](https://turtlecoin.lol) - [Zelerius](https://zelerius.org/) - [X-CASH](https://x-network.io/) @@ -72,7 +72,7 @@ If your prefered coin is not listed, you can choose one of the following algorit - cryptonight_v7_stellite - cryptonight_v8 - cryptonight_v8_double (used by X-CASH) - - cryptonight_v8_half (used by masari and stellite) + - cryptonight_v8_half (used by masari and torque) - cryptonight_v8_reversewaltz (used by graft) - cryptonight_v8_zelerius - 4MiB scratchpad memory diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 10082a09f..c22247c2b 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -132,7 +132,7 @@ xmrstak::coin_selection coins[] = { {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "pool.usxmrpool.com:3333"}, {"qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, {"ryo", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, - {"stellite", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, + {"torque", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, {"turtlecoin", {POW(cryptonight_turtle), 6u, POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr}, {"plenteum", {POW(cryptonight_turtle)}, {POW(cryptonight_turtle)}, nullptr}, {"zelerius", {POW(cryptonight_v8_zelerius), 7, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, diff --git a/xmrstak/pools.tpl b/xmrstak/pools.tpl index ea3a276aa..3cb16b77e 100644 --- a/xmrstak/pools.tpl +++ b/xmrstak/pools.tpl @@ -32,6 +32,7 @@ POOLCONF], * ryo * turtlecoin * plenteum + * torque * xcash * * Native algorithms which do not depend on any block versions: @@ -49,7 +50,7 @@ POOLCONF], * cryptonight_v7 * cryptonight_v8 * cryptonight_v8_double (used by xcash) - * cryptonight_v8_half (used by masari and stellite) + * cryptonight_v8_half (used by masari and torque) * cryptonight_v8_reversewaltz (used by graft) * cryptonight_v8_zelerius * # 4MiB scratchpad memory From 5df0f1be98af049f8bf3c3c111c49a46d67d8afa Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 1 May 2019 21:55:45 +0200 Subject: [PATCH 18/62] remove freehaven support The coin freehaven switched to pow cuckoo (not supported) --- xmrstak/jconf.cpp | 1 - xmrstak/pools.tpl | 1 - 2 files changed, 2 deletions(-) diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 10082a09f..2c3b78227 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -124,7 +124,6 @@ xmrstak::coin_selection coins[] = { {"cryptonight_v7_stellite", {POW(cryptonight_stellite)}, {POW(cryptonight_gpu)}, nullptr}, {"cryptonight_gpu", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, {"cryptonight_conceal", {POW(cryptonight_conceal)}, {POW(cryptonight_gpu)}, nullptr}, - {"freehaven", {POW(cryptonight_superfast)}, {POW(cryptonight_gpu)}, nullptr}, {"graft", {POW(cryptonight_v8_reversewaltz), 12, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, {"haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr}, {"lethean", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, diff --git a/xmrstak/pools.tpl b/xmrstak/pools.tpl index ea3a276aa..01b64bf55 100644 --- a/xmrstak/pools.tpl +++ b/xmrstak/pools.tpl @@ -22,7 +22,6 @@ POOLCONF], * aeon7 (use this for Aeon's new PoW) * bbscoin (automatic switch with block version 3 to cryptonight_v7) * bittube (uses cryptonight_bittube2 algorithm) - * freehaven * graft * haven (automatic switch with block version 3 to cryptonight_haven) * intense From 3c9c904fc9b75c39bde058e04e60a9d5e5c12940 Mon Sep 17 00:00:00 2001 From: Andrey Moiseev Date: Tue, 23 Oct 2018 19:09:24 +0300 Subject: [PATCH 19/62] Autoconf fallback --- xmrstak/backend/cpu/autoAdjustHwloc.hpp | 15 +++++++-------- xmrstak/backend/cpu/minethd.cpp | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/xmrstak/backend/cpu/autoAdjustHwloc.hpp b/xmrstak/backend/cpu/autoAdjustHwloc.hpp index d1765155a..f06b0d679 100644 --- a/xmrstak/backend/cpu/autoAdjustHwloc.hpp +++ b/xmrstak/backend/cpu/autoAdjustHwloc.hpp @@ -21,10 +21,10 @@ namespace xmrstak namespace cpu { -class autoAdjust +class autoAdjustHwloc { - public: - autoAdjust() +public: + autoAdjustHwloc() { auto neededAlgorithms = ::jconf::inst()->GetCurrentCoinSelection().GetAllAlgorithms(); @@ -60,6 +60,7 @@ class autoAdjust conf += "/*\n//CPU config is disabled by default because cryptonight_gpu is not suitable for CPU mining.\n"; } + bool is_successful = true; try { std::vector tlcs; @@ -86,10 +87,8 @@ class autoAdjust } catch(const std::runtime_error& err) { - // \todo add fallback to default auto adjust - conf += std::string(" { \"low_power_mode\" : false"); - conf += std::string(", \"no_prefetch\" : true, \"asm\" : \"off\", \"affine_to_cpu\" : false },\n"); - printer::inst()->print_msg(L0, "Autoconf FAILED: %s. Create config for a single thread.", err.what()); + is_successful = false; + printer::inst()->print_msg(L0, "Autoconf with hwloc FAILED: %s. Trying basic autoconf.", err.what()); } if(useCryptonight_gpu) @@ -101,7 +100,7 @@ class autoAdjust /* Destroy topology object. */ hwloc_topology_destroy(topology); - return true; + return is_successful; } private: diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp index 463be1aab..72570e96a 100644 --- a/xmrstak/backend/cpu/minethd.cpp +++ b/xmrstak/backend/cpu/minethd.cpp @@ -40,6 +40,7 @@ #ifndef CONF_NO_HWLOC #include "autoAdjustHwloc.hpp" +#include "autoAdjust.hpp" #else #include "autoAdjust.hpp" #endif @@ -515,9 +516,23 @@ std::vector minethd::thread_starter(uint32_t threadOffset, miner_work if(!configEditor::file_exist(params::inst().configFileCPU)) { +#ifndef CONF_NO_HWLOC + autoAdjustHwloc adjustHwloc; + if(!adjustHwloc.printConfig()) + { + autoAdjust adjust; + if(!adjust.printConfig()) + { + return pvThreads; + } + } +#else autoAdjust adjust; if(!adjust.printConfig()) + { return pvThreads; + } +#endif } if(!jconf::inst()->parse_config()) From e6c3f7bd343f2bdfb0065e8a042e891769d7c740 Mon Sep 17 00:00:00 2001 From: Andrey Moiseev Date: Fri, 3 May 2019 20:49:26 +0300 Subject: [PATCH 20/62] --h-print-time CLI option --- xmrstak/cli/cli-miner.cpp | 22 +++++++++++++++++++++- xmrstak/config.tpl | 2 +- xmrstak/jconf.cpp | 5 ++++- xmrstak/params.hpp | 1 + 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index 26a18317b..d300feb76 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -91,6 +91,7 @@ void help() cout << " --nvidia FILE NVIDIA backend miner config file" << endl; #endif cout << " --log FILE miner output file" << endl; + cout << " --h-print-time SEC interval for printing hashrate, in seconds" << endl; #ifndef CONF_NO_HTTPD cout << " -i --httpd HTTP_PORT HTTP interface port" << endl; #endif @@ -389,8 +390,8 @@ void do_guided_config() } configTpl.replace("HTTP_PORT", std::to_string(http_port)); - configTpl.replace("OUTPUT_FILE", params::inst().outputFile); + configTpl.replace("H_PRINT_TIME", std::to_string(params::inst().h_print_time > 0 ? params::inst().h_print_time : 300)); configTpl.write(params::inst().configFile); std::cout << "Configuration stored in file '" << params::inst().configFile << "'" << std::endl; } @@ -671,6 +672,25 @@ int main(int argc, char* argv[]) } params::inst().outputFile = argv[i]; } + else if (opName.compare("--h-print-time") == 0) + { + ++i; + if (i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--h-print-time' given"); + win_exit(); + return 1; + } + char* h_print_time = nullptr; + long int time = strtol(argv[i], &h_print_time, 10); + + if (time <= 0) + { + printer::inst()->print_msg(L0, "Hashrate print time must be > 0"); + return 1; + } + params::inst().h_print_time = time; + } else if(opName.compare("-i") == 0 || opName.compare("--httpd") == 0) { ++i; diff --git a/xmrstak/config.tpl b/xmrstak/config.tpl index 9edaab65f..27b12c52f 100644 --- a/xmrstak/config.tpl +++ b/xmrstak/config.tpl @@ -43,7 +43,7 @@ R"===(// generated by XMRSTAK_VERSION * h_print_time - How often, in seconds, should we print a hashrate report if verbose_level is set to 4. * This option has no effect if verbose_level is not 4. */ -"h_print_time" : 300, +"h_print_time" : H_PRINT_TIME, /* * Manual hardware AES override diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 2bc5205bc..96249b7df 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -255,7 +255,10 @@ bool jconf::PrintMotd() uint64_t jconf::GetAutohashTime() { - return prv->configValues[iAutohashTime]->GetUint64(); + if (xmrstak::params::inst().h_print_time == -1) + return prv->configValues[iAutohashTime]->GetUint64(); + else + return uint64_t(xmrstak::params::inst().h_print_time); } uint16_t jconf::GetHttpdPort() diff --git a/xmrstak/params.hpp b/xmrstak/params.hpp index 9fc3b57b8..10b548643 100644 --- a/xmrstak/params.hpp +++ b/xmrstak/params.hpp @@ -51,6 +51,7 @@ struct params std::string configFileCPU; std::string outputFile; + int h_print_time = -1; bool allowUAC = true; std::string minerArg0; From b2e431612c7b2bd95db97a390be3687ae3639035 Mon Sep 17 00:00:00 2001 From: Andrey Moiseev Date: Sat, 4 May 2019 00:19:56 +0300 Subject: [PATCH 21/62] Enabling/disabling GPUs from CLI --- xmrstak/backend/amd/autoAdjust.hpp | 27 +++++++++++++++++++++++++++ xmrstak/backend/nvidia/autoAdjust.hpp | 27 +++++++++++++++++++++++++++ xmrstak/cli/cli-miner.cpp | 24 ++++++++++++++++++++++++ xmrstak/params.hpp | 2 ++ 4 files changed, 80 insertions(+) diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp index dcabb3018..ee7168f60 100644 --- a/xmrstak/backend/amd/autoAdjust.hpp +++ b/xmrstak/backend/amd/autoAdjust.hpp @@ -89,6 +89,27 @@ class autoAdjust std::string conf; for(auto& ctx : devVec) { + std::string enabledGpus = params::inst().amdGpus; + bool enabled = true; + if (!enabledGpus.empty()) + { + enabled = false; + std::stringstream ss(enabledGpus); + + int i = -1; + while (ss >> i) + { + if (i == ctx.deviceIdx) + { + enabled = true; + break; + } + + while (ss.peek() == ',' || ss.peek() == ' ') + ss.ignore(); + } + } + size_t minFreeMem = 128u * byteToMiB; /* 1000 is a magic selected limit, the reason is that more than 2GiB memory * sowing down the memory performance because of TLB cache misses @@ -196,6 +217,9 @@ class autoAdjust } if(intensity != 0) { + if (!enabled) + conf += "/* Disabled\n"; + for(uint32_t thd = 0; thd < numThreads; ++thd) { conf += " // gpu: " + ctx.name + std::string(" compute units: ") + std::to_string(ctx.computeUnits) + "\n"; @@ -209,6 +233,9 @@ class autoAdjust std::to_string(numUnroll) + ", \"comp_mode\" : true, \"interleave\" : " + std::to_string(ctx.interleave) + "\n" + " },\n"; } + + if (!enabled) + conf += "*/\n"; } else { diff --git a/xmrstak/backend/nvidia/autoAdjust.hpp b/xmrstak/backend/nvidia/autoAdjust.hpp index a7f35b18b..bf195f768 100644 --- a/xmrstak/backend/nvidia/autoAdjust.hpp +++ b/xmrstak/backend/nvidia/autoAdjust.hpp @@ -81,8 +81,32 @@ class autoAdjust std::string conf; for(auto& ctx : nvidCtxVec) { + std::string enabledGpus = params::inst().nvidiaGpus; + bool enabled = true; + if (!enabledGpus.empty()) + { + enabled = false; + std::stringstream ss(enabledGpus); + + int i = -1; + while (ss >> i) + { + if (i == ctx.device_id) + { + enabled = true; + break; + } + + while (ss.peek() == ',' || ss.peek() == ' ') + ss.ignore(); + } + } + if(ctx.device_threads * ctx.device_blocks > 0) { + if (!enabled) + conf += "/* Disabled\n"; + conf += std::string(" // gpu: ") + ctx.name + " architecture: " + std::to_string(ctx.device_arch[0] * 10 + ctx.device_arch[1]) + "\n"; conf += std::string(" // memory: ") + std::to_string(ctx.free_device_memory / byte2mib) + "/" + std::to_string(ctx.total_device_memory / byte2mib) + " MiB\n"; conf += std::string(" // smx: ") + std::to_string(ctx.device_mpcount) + "\n"; @@ -92,6 +116,9 @@ class autoAdjust " \"affine_to_cpu\" : false, \"sync_mode\" : 3,\n" + " \"mem_mode\" : 1,\n" + " },\n"; + + if (!enabled) + conf += "*/\n"; } } diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index 26a18317b..7f7f08d4f 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -80,6 +80,7 @@ void help() #endif #ifndef CONF_NO_OPENCL cout << " --noAMD disable the AMD miner backend" << endl; + cout << " --amdGpus GPUS indices of AMD GPUs to use. Example: 0,2,3" << endl; cout << " --noAMDCache disable the AMD(OpenCL) cache for precompiled binaries" << endl; cout << " --openCLVendor VENDOR use OpenCL driver of VENDOR and devices [AMD,NVIDIA]" << endl; cout << " default: AMD" << endl; @@ -88,6 +89,7 @@ void help() #endif #ifndef CONF_NO_CUDA cout << " --noNVIDIA disable the NVIDIA miner backend" << endl; + cout << " --nvidiaGpus GPUS indices of NVIDIA GPUs to use. Example: 0,2,3" << endl; cout << " --nvidia FILE NVIDIA backend miner config file" << endl; #endif cout << " --log FILE miner output file" << endl; @@ -472,6 +474,17 @@ int main(int argc, char* argv[]) { params::inst().useAMD = false; } + else if (opName.compare("--amdGpus") == 0) + { + ++i; + if (i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--amdGpus' given"); + win_exit(); + return 1; + } + params::inst().amdGpus = argv[i]; + } else if(opName.compare("--openCLVendor") == 0) { ++i; @@ -498,6 +511,17 @@ int main(int argc, char* argv[]) { params::inst().useNVIDIA = false; } + else if (opName.compare("--nvidiaGpus") == 0) + { + ++i; + if (i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--nvidiaGpus' given"); + win_exit(); + return 1; + } + params::inst().nvidiaGpus = argv[i]; + } else if(opName.compare("--cpu") == 0) { ++i; diff --git a/xmrstak/params.hpp b/xmrstak/params.hpp index 9fc3b57b8..57f04dbf5 100644 --- a/xmrstak/params.hpp +++ b/xmrstak/params.hpp @@ -25,6 +25,8 @@ struct params bool AMDCache; bool useNVIDIA; bool useCPU; + std::string amdGpus; + std::string nvidiaGpus; // user selected OpenCL vendor std::string openCLVendor; From 0347fce7fb6058ceba2bc2bba83fc22413dbdc4f Mon Sep 17 00:00:00 2001 From: a_moiseev Date: Mon, 20 May 2019 17:51:46 +0300 Subject: [PATCH 22/62] Store GPU index in miner thread --- xmrstak/backend/amd/minethd.cpp | 1 + xmrstak/backend/iBackend.hpp | 1 + xmrstak/backend/nvidia/minethd.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/xmrstak/backend/amd/minethd.cpp b/xmrstak/backend/amd/minethd.cpp index 0a181154c..3a23e8624 100644 --- a/xmrstak/backend/amd/minethd.cpp +++ b/xmrstak/backend/amd/minethd.cpp @@ -53,6 +53,7 @@ minethd::minethd(miner_work& pWork, size_t iNo, GpuContext* ctx, const jconf::th oWork = pWork; bQuit = 0; iThreadNo = (uint8_t)iNo; + this->iGpuIndex = cfg.index; iJobNo = 0; iHashCount = 0; iTimestamp = 0; diff --git a/xmrstak/backend/iBackend.hpp b/xmrstak/backend/iBackend.hpp index dd59b6c52..3ca598bdd 100644 --- a/xmrstak/backend/iBackend.hpp +++ b/xmrstak/backend/iBackend.hpp @@ -46,6 +46,7 @@ struct iBackend std::atomic iHashCount; std::atomic iTimestamp; uint32_t iThreadNo; + uint32_t iGpuIndex; BackendType backendType = UNKNOWN; uint64_t iLastStamp = get_timestamp_ms(); double avgHashPerMsec = 0.0; diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 32b21dc71..86c860153 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -70,6 +70,7 @@ minethd::minethd(miner_work& pWork, size_t iNo, const jconf::thd_cfg& cfg) oWork = pWork; bQuit = 0; iThreadNo = (uint8_t)iNo; + this->iGpuIndex = cfg.id; iJobNo = 0; ctx.device_id = (int)cfg.id; From 55fd122225c58d3b853f6059145b3f490dbdc9e9 Mon Sep 17 00:00:00 2001 From: a_moiseev Date: Mon, 20 May 2019 18:02:52 +0300 Subject: [PATCH 23/62] Accepted/rejected share: print responsible GPU and pool --- xmrstak/misc/executor.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp index 92fcf8acb..455ba9119 100644 --- a/xmrstak/misc/executor.cpp +++ b/xmrstak/misc/executor.cpp @@ -440,17 +440,35 @@ void executor::on_miner_result(size_t pool_id, job_result& oResult) t_len = 0xFFFF; iPoolCallTimes.push_back((uint16_t)t_len); + std::string name(backend_name); + std::transform(name.begin(), name.end(), name.begin(), ::toupper); + if(bResult) { uint64_t* targets = (uint64_t*)oResult.bResult; log_result_ok(t64_to_diff(targets[3])); - printer::inst()->print_msg(L3, "Result accepted by the pool."); + + if (pvThreads->at(oResult.iThreadId)->backendType == xmrstak::iBackend::BackendType::CPU) + { + printer::inst()->print_msg(L3, "CPU: Share accepted. Pool: %s", pool->get_pool_addr()); + } + else + { + printer::inst()->print_msg(L3, "%s GPU %u: Share accepted. Pool: %s", name.c_str(), pvThreads->at(oResult.iThreadId)->iGpuIndex, pool->get_pool_addr()); + } } else { if(!pool->have_sock_error()) { - printer::inst()->print_msg(L3, "Result rejected by the pool."); + if (pvThreads->at(oResult.iThreadId)->backendType == xmrstak::iBackend::BackendType::CPU) + { + printer::inst()->print_msg(L3, "CPU: Share rejected. Pool: %s", pool->get_pool_addr()); + } + else + { + printer::inst()->print_msg(L3, "%s GPU %u: Share rejected. Pool: %s", name.c_str(), pvThreads->at(oResult.iThreadId)->iGpuIndex, pool->get_pool_addr()); + } std::string error = pool->get_call_error(); From 6fa64d634ee4442ac5778121df2a1ba6eac5720b Mon Sep 17 00:00:00 2001 From: Andrey Moiseev Date: Sun, 28 Apr 2019 03:09:43 +0300 Subject: [PATCH 24/62] Do not fail with "use_slow_memory" : "warn" and --noUAC on Windows 7 and 8 --- xmrstak/misc/uac.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xmrstak/misc/uac.cpp b/xmrstak/misc/uac.cpp index c7da90bd8..0e4f91c7b 100644 --- a/xmrstak/misc/uac.cpp +++ b/xmrstak/misc/uac.cpp @@ -1,6 +1,7 @@ #ifdef _WIN32 #include "xmrstak/misc/console.hpp" #include "xmrstak/params.hpp" +#include "xmrstak/jconf.hpp" #include #include @@ -56,6 +57,9 @@ VOID RequestElevation() if(!xmrstak::params::inst().allowUAC) { printer::inst()->print_msg(L0, "The miner needs to run as administrator, but you passed --noUAC option. Please remove it or set use_slow_memory to always."); + if (::jconf::inst()->GetSlowMemSetting() == ::jconf::print_warning) + return; + win_exit(); return; } From 743273c10df5462354f59a7684068860e06f3342 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Fri, 31 May 2019 20:21:37 +0200 Subject: [PATCH 25/62] NVIDIA: optimize cryptonight_gpu - optimize keccak - avoid bank conflicts (shared memory) in phase3 - use `__byte_perm` for rot operation if maxwell or newer --- xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp | 827 ++++++++++++------ xmrstak/backend/nvidia/nvcc_code/cuda_core.cu | 140 ++- .../nvidia/nvcc_code/cuda_cryptonight_gpu.hpp | 68 +- .../backend/nvidia/nvcc_code/cuda_extra.hpp | 43 +- .../backend/nvidia/nvcc_code/cuda_keccak.hpp | 58 +- 5 files changed, 735 insertions(+), 401 deletions(-) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp index d33e76715..385afb9ec 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp @@ -3,278 +3,560 @@ #include +#include "cuda_extra.hpp" + #define N_COLS 4 #define WPOLY 0x011b +static __constant__ uint32_t d_t_fn256[256 * 32] = +{ + 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, + 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, + 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, + 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, + 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, + 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, + 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, + 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, + 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, + 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, + 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, + 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, + 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, + 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, + 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, + 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, + 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, + 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, + 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, + 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, + 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, + 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, + 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, + 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, + 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, + 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, + 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, + 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, + 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, + 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, + 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, + 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, + 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, + 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, + 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, + 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, + 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, + 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, + 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, + 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, + 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, + 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, + 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, + 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, + 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, + 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, + 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, + 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, + 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, + 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, + 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, + 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, + 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, + 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, + 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, + 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, + 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, + 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, + 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, + 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, + 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, + 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, + 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, + 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, + 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, + 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, + 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, + 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, + 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, + 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, + 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, + 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, + 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, + 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, + 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, + 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, + 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, + 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, + 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, + 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, + 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, + 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, + 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, + 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, + 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, + 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, + 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, + 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, + 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, + 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, + 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, + 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, + 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, + 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, + 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, + 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, + 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, + 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, + 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, + 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, + 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, + 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, + 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, + 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, + 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, + 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, + 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, + 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, + 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, + 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, + 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, + 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, + 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, + 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, + 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, + 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, + 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, + 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, + 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, + 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, + 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, + 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, + 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, + 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, + 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, + 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, + 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, + 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, + 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, + 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, + 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, + 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, + 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, + 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, + 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, + 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, + 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, + 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, + 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, + 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, + 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, + 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, + 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, + 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, + 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, + 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, + 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, + 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, + 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, + 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, + 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, + 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, + 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, + 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, + 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, + 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, + 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, + 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, + 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, + 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, + 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, + 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, + 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, + 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, + 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, + 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, + 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, + 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, + 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, + 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, + 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, + 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, + 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, + 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, + 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, + 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, + 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, + 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, + 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, + 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, + 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, + 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, + 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, + 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, + 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, + 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, + 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, + 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, + 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, + 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, + 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, + 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, + 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, + 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, + 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, + 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, + 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, + 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, + 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, + 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, + 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, + 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, + 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, + 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, + 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, + 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, + 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, + 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, + 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, + 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, + 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, + 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, + 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, + 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, + 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, + 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, + 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, + 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, + 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, + 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, + 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, + 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, + 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, + 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, + 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, + 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, + 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, + 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, + 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, + 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, + 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, + 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, + 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, + 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, + 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, + 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, + 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, + 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, + 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, + 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, + 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, + 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, + 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, + 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, + 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, + 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, + 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, + 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, + 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, + 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, + 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, + 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, + 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, + 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, + 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, +0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU +}; + static __constant__ uint32_t d_t_fn[1024] = - { - 0xa56363c6U, 0x847c7cf8U, 0x997777eeU, 0x8d7b7bf6U, - 0x0df2f2ffU, 0xbd6b6bd6U, 0xb16f6fdeU, 0x54c5c591U, - 0x50303060U, 0x03010102U, 0xa96767ceU, 0x7d2b2b56U, - 0x19fefee7U, 0x62d7d7b5U, 0xe6abab4dU, 0x9a7676ecU, - 0x45caca8fU, 0x9d82821fU, 0x40c9c989U, 0x877d7dfaU, - 0x15fafaefU, 0xeb5959b2U, 0xc947478eU, 0x0bf0f0fbU, - 0xecadad41U, 0x67d4d4b3U, 0xfda2a25fU, 0xeaafaf45U, - 0xbf9c9c23U, 0xf7a4a453U, 0x967272e4U, 0x5bc0c09bU, - 0xc2b7b775U, 0x1cfdfde1U, 0xae93933dU, 0x6a26264cU, - 0x5a36366cU, 0x413f3f7eU, 0x02f7f7f5U, 0x4fcccc83U, - 0x5c343468U, 0xf4a5a551U, 0x34e5e5d1U, 0x08f1f1f9U, - 0x937171e2U, 0x73d8d8abU, 0x53313162U, 0x3f15152aU, - 0x0c040408U, 0x52c7c795U, 0x65232346U, 0x5ec3c39dU, - 0x28181830U, 0xa1969637U, 0x0f05050aU, 0xb59a9a2fU, - 0x0907070eU, 0x36121224U, 0x9b80801bU, 0x3de2e2dfU, - 0x26ebebcdU, 0x6927274eU, 0xcdb2b27fU, 0x9f7575eaU, - 0x1b090912U, 0x9e83831dU, 0x742c2c58U, 0x2e1a1a34U, - 0x2d1b1b36U, 0xb26e6edcU, 0xee5a5ab4U, 0xfba0a05bU, - 0xf65252a4U, 0x4d3b3b76U, 0x61d6d6b7U, 0xceb3b37dU, - 0x7b292952U, 0x3ee3e3ddU, 0x712f2f5eU, 0x97848413U, - 0xf55353a6U, 0x68d1d1b9U, 0x00000000U, 0x2cededc1U, - 0x60202040U, 0x1ffcfce3U, 0xc8b1b179U, 0xed5b5bb6U, - 0xbe6a6ad4U, 0x46cbcb8dU, 0xd9bebe67U, 0x4b393972U, - 0xde4a4a94U, 0xd44c4c98U, 0xe85858b0U, 0x4acfcf85U, - 0x6bd0d0bbU, 0x2aefefc5U, 0xe5aaaa4fU, 0x16fbfbedU, - 0xc5434386U, 0xd74d4d9aU, 0x55333366U, 0x94858511U, - 0xcf45458aU, 0x10f9f9e9U, 0x06020204U, 0x817f7ffeU, - 0xf05050a0U, 0x443c3c78U, 0xba9f9f25U, 0xe3a8a84bU, - 0xf35151a2U, 0xfea3a35dU, 0xc0404080U, 0x8a8f8f05U, - 0xad92923fU, 0xbc9d9d21U, 0x48383870U, 0x04f5f5f1U, - 0xdfbcbc63U, 0xc1b6b677U, 0x75dadaafU, 0x63212142U, - 0x30101020U, 0x1affffe5U, 0x0ef3f3fdU, 0x6dd2d2bfU, - 0x4ccdcd81U, 0x140c0c18U, 0x35131326U, 0x2fececc3U, - 0xe15f5fbeU, 0xa2979735U, 0xcc444488U, 0x3917172eU, - 0x57c4c493U, 0xf2a7a755U, 0x827e7efcU, 0x473d3d7aU, - 0xac6464c8U, 0xe75d5dbaU, 0x2b191932U, 0x957373e6U, - 0xa06060c0U, 0x98818119U, 0xd14f4f9eU, 0x7fdcdca3U, - 0x66222244U, 0x7e2a2a54U, 0xab90903bU, 0x8388880bU, - 0xca46468cU, 0x29eeeec7U, 0xd3b8b86bU, 0x3c141428U, - 0x79dedea7U, 0xe25e5ebcU, 0x1d0b0b16U, 0x76dbdbadU, - 0x3be0e0dbU, 0x56323264U, 0x4e3a3a74U, 0x1e0a0a14U, - 0xdb494992U, 0x0a06060cU, 0x6c242448U, 0xe45c5cb8U, - 0x5dc2c29fU, 0x6ed3d3bdU, 0xefacac43U, 0xa66262c4U, - 0xa8919139U, 0xa4959531U, 0x37e4e4d3U, 0x8b7979f2U, - 0x32e7e7d5U, 0x43c8c88bU, 0x5937376eU, 0xb76d6ddaU, - 0x8c8d8d01U, 0x64d5d5b1U, 0xd24e4e9cU, 0xe0a9a949U, - 0xb46c6cd8U, 0xfa5656acU, 0x07f4f4f3U, 0x25eaeacfU, - 0xaf6565caU, 0x8e7a7af4U, 0xe9aeae47U, 0x18080810U, - 0xd5baba6fU, 0x887878f0U, 0x6f25254aU, 0x722e2e5cU, - 0x241c1c38U, 0xf1a6a657U, 0xc7b4b473U, 0x51c6c697U, - 0x23e8e8cbU, 0x7cdddda1U, 0x9c7474e8U, 0x211f1f3eU, - 0xdd4b4b96U, 0xdcbdbd61U, 0x868b8b0dU, 0x858a8a0fU, - 0x907070e0U, 0x423e3e7cU, 0xc4b5b571U, 0xaa6666ccU, - 0xd8484890U, 0x05030306U, 0x01f6f6f7U, 0x120e0e1cU, - 0xa36161c2U, 0x5f35356aU, 0xf95757aeU, 0xd0b9b969U, - 0x91868617U, 0x58c1c199U, 0x271d1d3aU, 0xb99e9e27U, - 0x38e1e1d9U, 0x13f8f8ebU, 0xb398982bU, 0x33111122U, - 0xbb6969d2U, 0x70d9d9a9U, 0x898e8e07U, 0xa7949433U, - 0xb69b9b2dU, 0x221e1e3cU, 0x92878715U, 0x20e9e9c9U, - 0x49cece87U, 0xff5555aaU, 0x78282850U, 0x7adfdfa5U, - 0x8f8c8c03U, 0xf8a1a159U, 0x80898909U, 0x170d0d1aU, - 0xdabfbf65U, 0x31e6e6d7U, 0xc6424284U, 0xb86868d0U, - 0xc3414182U, 0xb0999929U, 0x772d2d5aU, 0x110f0f1eU, - 0xcbb0b07bU, 0xfc5454a8U, 0xd6bbbb6dU, 0x3a16162cU, - 0x6363c6a5U, 0x7c7cf884U, 0x7777ee99U, 0x7b7bf68dU, - 0xf2f2ff0dU, 0x6b6bd6bdU, 0x6f6fdeb1U, 0xc5c59154U, - 0x30306050U, 0x01010203U, 0x6767cea9U, 0x2b2b567dU, - 0xfefee719U, 0xd7d7b562U, 0xabab4de6U, 0x7676ec9aU, - 0xcaca8f45U, 0x82821f9dU, 0xc9c98940U, 0x7d7dfa87U, - 0xfafaef15U, 0x5959b2ebU, 0x47478ec9U, 0xf0f0fb0bU, - 0xadad41ecU, 0xd4d4b367U, 0xa2a25ffdU, 0xafaf45eaU, - 0x9c9c23bfU, 0xa4a453f7U, 0x7272e496U, 0xc0c09b5bU, - 0xb7b775c2U, 0xfdfde11cU, 0x93933daeU, 0x26264c6aU, - 0x36366c5aU, 0x3f3f7e41U, 0xf7f7f502U, 0xcccc834fU, - 0x3434685cU, 0xa5a551f4U, 0xe5e5d134U, 0xf1f1f908U, - 0x7171e293U, 0xd8d8ab73U, 0x31316253U, 0x15152a3fU, - 0x0404080cU, 0xc7c79552U, 0x23234665U, 0xc3c39d5eU, - 0x18183028U, 0x969637a1U, 0x05050a0fU, 0x9a9a2fb5U, - 0x07070e09U, 0x12122436U, 0x80801b9bU, 0xe2e2df3dU, - 0xebebcd26U, 0x27274e69U, 0xb2b27fcdU, 0x7575ea9fU, - 0x0909121bU, 0x83831d9eU, 0x2c2c5874U, 0x1a1a342eU, - 0x1b1b362dU, 0x6e6edcb2U, 0x5a5ab4eeU, 0xa0a05bfbU, - 0x5252a4f6U, 0x3b3b764dU, 0xd6d6b761U, 0xb3b37dceU, - 0x2929527bU, 0xe3e3dd3eU, 0x2f2f5e71U, 0x84841397U, - 0x5353a6f5U, 0xd1d1b968U, 0x00000000U, 0xededc12cU, - 0x20204060U, 0xfcfce31fU, 0xb1b179c8U, 0x5b5bb6edU, - 0x6a6ad4beU, 0xcbcb8d46U, 0xbebe67d9U, 0x3939724bU, - 0x4a4a94deU, 0x4c4c98d4U, 0x5858b0e8U, 0xcfcf854aU, - 0xd0d0bb6bU, 0xefefc52aU, 0xaaaa4fe5U, 0xfbfbed16U, - 0x434386c5U, 0x4d4d9ad7U, 0x33336655U, 0x85851194U, - 0x45458acfU, 0xf9f9e910U, 0x02020406U, 0x7f7ffe81U, - 0x5050a0f0U, 0x3c3c7844U, 0x9f9f25baU, 0xa8a84be3U, - 0x5151a2f3U, 0xa3a35dfeU, 0x404080c0U, 0x8f8f058aU, - 0x92923fadU, 0x9d9d21bcU, 0x38387048U, 0xf5f5f104U, - 0xbcbc63dfU, 0xb6b677c1U, 0xdadaaf75U, 0x21214263U, - 0x10102030U, 0xffffe51aU, 0xf3f3fd0eU, 0xd2d2bf6dU, - 0xcdcd814cU, 0x0c0c1814U, 0x13132635U, 0xececc32fU, - 0x5f5fbee1U, 0x979735a2U, 0x444488ccU, 0x17172e39U, - 0xc4c49357U, 0xa7a755f2U, 0x7e7efc82U, 0x3d3d7a47U, - 0x6464c8acU, 0x5d5dbae7U, 0x1919322bU, 0x7373e695U, - 0x6060c0a0U, 0x81811998U, 0x4f4f9ed1U, 0xdcdca37fU, - 0x22224466U, 0x2a2a547eU, 0x90903babU, 0x88880b83U, - 0x46468ccaU, 0xeeeec729U, 0xb8b86bd3U, 0x1414283cU, - 0xdedea779U, 0x5e5ebce2U, 0x0b0b161dU, 0xdbdbad76U, - 0xe0e0db3bU, 0x32326456U, 0x3a3a744eU, 0x0a0a141eU, - 0x494992dbU, 0x06060c0aU, 0x2424486cU, 0x5c5cb8e4U, - 0xc2c29f5dU, 0xd3d3bd6eU, 0xacac43efU, 0x6262c4a6U, - 0x919139a8U, 0x959531a4U, 0xe4e4d337U, 0x7979f28bU, - 0xe7e7d532U, 0xc8c88b43U, 0x37376e59U, 0x6d6ddab7U, - 0x8d8d018cU, 0xd5d5b164U, 0x4e4e9cd2U, 0xa9a949e0U, - 0x6c6cd8b4U, 0x5656acfaU, 0xf4f4f307U, 0xeaeacf25U, - 0x6565caafU, 0x7a7af48eU, 0xaeae47e9U, 0x08081018U, - 0xbaba6fd5U, 0x7878f088U, 0x25254a6fU, 0x2e2e5c72U, - 0x1c1c3824U, 0xa6a657f1U, 0xb4b473c7U, 0xc6c69751U, - 0xe8e8cb23U, 0xdddda17cU, 0x7474e89cU, 0x1f1f3e21U, - 0x4b4b96ddU, 0xbdbd61dcU, 0x8b8b0d86U, 0x8a8a0f85U, - 0x7070e090U, 0x3e3e7c42U, 0xb5b571c4U, 0x6666ccaaU, - 0x484890d8U, 0x03030605U, 0xf6f6f701U, 0x0e0e1c12U, - 0x6161c2a3U, 0x35356a5fU, 0x5757aef9U, 0xb9b969d0U, - 0x86861791U, 0xc1c19958U, 0x1d1d3a27U, 0x9e9e27b9U, - 0xe1e1d938U, 0xf8f8eb13U, 0x98982bb3U, 0x11112233U, - 0x6969d2bbU, 0xd9d9a970U, 0x8e8e0789U, 0x949433a7U, - 0x9b9b2db6U, 0x1e1e3c22U, 0x87871592U, 0xe9e9c920U, - 0xcece8749U, 0x5555aaffU, 0x28285078U, 0xdfdfa57aU, - 0x8c8c038fU, 0xa1a159f8U, 0x89890980U, 0x0d0d1a17U, - 0xbfbf65daU, 0xe6e6d731U, 0x424284c6U, 0x6868d0b8U, - 0x414182c3U, 0x999929b0U, 0x2d2d5a77U, 0x0f0f1e11U, - 0xb0b07bcbU, 0x5454a8fcU, 0xbbbb6dd6U, 0x16162c3aU, - 0x63c6a563U, 0x7cf8847cU, 0x77ee9977U, 0x7bf68d7bU, - 0xf2ff0df2U, 0x6bd6bd6bU, 0x6fdeb16fU, 0xc59154c5U, - 0x30605030U, 0x01020301U, 0x67cea967U, 0x2b567d2bU, - 0xfee719feU, 0xd7b562d7U, 0xab4de6abU, 0x76ec9a76U, - 0xca8f45caU, 0x821f9d82U, 0xc98940c9U, 0x7dfa877dU, - 0xfaef15faU, 0x59b2eb59U, 0x478ec947U, 0xf0fb0bf0U, - 0xad41ecadU, 0xd4b367d4U, 0xa25ffda2U, 0xaf45eaafU, - 0x9c23bf9cU, 0xa453f7a4U, 0x72e49672U, 0xc09b5bc0U, - 0xb775c2b7U, 0xfde11cfdU, 0x933dae93U, 0x264c6a26U, - 0x366c5a36U, 0x3f7e413fU, 0xf7f502f7U, 0xcc834fccU, - 0x34685c34U, 0xa551f4a5U, 0xe5d134e5U, 0xf1f908f1U, - 0x71e29371U, 0xd8ab73d8U, 0x31625331U, 0x152a3f15U, - 0x04080c04U, 0xc79552c7U, 0x23466523U, 0xc39d5ec3U, - 0x18302818U, 0x9637a196U, 0x050a0f05U, 0x9a2fb59aU, - 0x070e0907U, 0x12243612U, 0x801b9b80U, 0xe2df3de2U, - 0xebcd26ebU, 0x274e6927U, 0xb27fcdb2U, 0x75ea9f75U, - 0x09121b09U, 0x831d9e83U, 0x2c58742cU, 0x1a342e1aU, - 0x1b362d1bU, 0x6edcb26eU, 0x5ab4ee5aU, 0xa05bfba0U, - 0x52a4f652U, 0x3b764d3bU, 0xd6b761d6U, 0xb37dceb3U, - 0x29527b29U, 0xe3dd3ee3U, 0x2f5e712fU, 0x84139784U, - 0x53a6f553U, 0xd1b968d1U, 0x00000000U, 0xedc12cedU, - 0x20406020U, 0xfce31ffcU, 0xb179c8b1U, 0x5bb6ed5bU, - 0x6ad4be6aU, 0xcb8d46cbU, 0xbe67d9beU, 0x39724b39U, - 0x4a94de4aU, 0x4c98d44cU, 0x58b0e858U, 0xcf854acfU, - 0xd0bb6bd0U, 0xefc52aefU, 0xaa4fe5aaU, 0xfbed16fbU, - 0x4386c543U, 0x4d9ad74dU, 0x33665533U, 0x85119485U, - 0x458acf45U, 0xf9e910f9U, 0x02040602U, 0x7ffe817fU, - 0x50a0f050U, 0x3c78443cU, 0x9f25ba9fU, 0xa84be3a8U, - 0x51a2f351U, 0xa35dfea3U, 0x4080c040U, 0x8f058a8fU, - 0x923fad92U, 0x9d21bc9dU, 0x38704838U, 0xf5f104f5U, - 0xbc63dfbcU, 0xb677c1b6U, 0xdaaf75daU, 0x21426321U, - 0x10203010U, 0xffe51affU, 0xf3fd0ef3U, 0xd2bf6dd2U, - 0xcd814ccdU, 0x0c18140cU, 0x13263513U, 0xecc32fecU, - 0x5fbee15fU, 0x9735a297U, 0x4488cc44U, 0x172e3917U, - 0xc49357c4U, 0xa755f2a7U, 0x7efc827eU, 0x3d7a473dU, - 0x64c8ac64U, 0x5dbae75dU, 0x19322b19U, 0x73e69573U, - 0x60c0a060U, 0x81199881U, 0x4f9ed14fU, 0xdca37fdcU, - 0x22446622U, 0x2a547e2aU, 0x903bab90U, 0x880b8388U, - 0x468cca46U, 0xeec729eeU, 0xb86bd3b8U, 0x14283c14U, - 0xdea779deU, 0x5ebce25eU, 0x0b161d0bU, 0xdbad76dbU, - 0xe0db3be0U, 0x32645632U, 0x3a744e3aU, 0x0a141e0aU, - 0x4992db49U, 0x060c0a06U, 0x24486c24U, 0x5cb8e45cU, - 0xc29f5dc2U, 0xd3bd6ed3U, 0xac43efacU, 0x62c4a662U, - 0x9139a891U, 0x9531a495U, 0xe4d337e4U, 0x79f28b79U, - 0xe7d532e7U, 0xc88b43c8U, 0x376e5937U, 0x6ddab76dU, - 0x8d018c8dU, 0xd5b164d5U, 0x4e9cd24eU, 0xa949e0a9U, - 0x6cd8b46cU, 0x56acfa56U, 0xf4f307f4U, 0xeacf25eaU, - 0x65caaf65U, 0x7af48e7aU, 0xae47e9aeU, 0x08101808U, - 0xba6fd5baU, 0x78f08878U, 0x254a6f25U, 0x2e5c722eU, - 0x1c38241cU, 0xa657f1a6U, 0xb473c7b4U, 0xc69751c6U, - 0xe8cb23e8U, 0xdda17cddU, 0x74e89c74U, 0x1f3e211fU, - 0x4b96dd4bU, 0xbd61dcbdU, 0x8b0d868bU, 0x8a0f858aU, - 0x70e09070U, 0x3e7c423eU, 0xb571c4b5U, 0x66ccaa66U, - 0x4890d848U, 0x03060503U, 0xf6f701f6U, 0x0e1c120eU, - 0x61c2a361U, 0x356a5f35U, 0x57aef957U, 0xb969d0b9U, - 0x86179186U, 0xc19958c1U, 0x1d3a271dU, 0x9e27b99eU, - 0xe1d938e1U, 0xf8eb13f8U, 0x982bb398U, 0x11223311U, - 0x69d2bb69U, 0xd9a970d9U, 0x8e07898eU, 0x9433a794U, - 0x9b2db69bU, 0x1e3c221eU, 0x87159287U, 0xe9c920e9U, - 0xce8749ceU, 0x55aaff55U, 0x28507828U, 0xdfa57adfU, - 0x8c038f8cU, 0xa159f8a1U, 0x89098089U, 0x0d1a170dU, - 0xbf65dabfU, 0xe6d731e6U, 0x4284c642U, 0x68d0b868U, - 0x4182c341U, 0x9929b099U, 0x2d5a772dU, 0x0f1e110fU, - 0xb07bcbb0U, 0x54a8fc54U, 0xbb6dd6bbU, 0x162c3a16U, - 0xc6a56363U, 0xf8847c7cU, 0xee997777U, 0xf68d7b7bU, - 0xff0df2f2U, 0xd6bd6b6bU, 0xdeb16f6fU, 0x9154c5c5U, - 0x60503030U, 0x02030101U, 0xcea96767U, 0x567d2b2bU, - 0xe719fefeU, 0xb562d7d7U, 0x4de6ababU, 0xec9a7676U, - 0x8f45cacaU, 0x1f9d8282U, 0x8940c9c9U, 0xfa877d7dU, - 0xef15fafaU, 0xb2eb5959U, 0x8ec94747U, 0xfb0bf0f0U, - 0x41ecadadU, 0xb367d4d4U, 0x5ffda2a2U, 0x45eaafafU, - 0x23bf9c9cU, 0x53f7a4a4U, 0xe4967272U, 0x9b5bc0c0U, - 0x75c2b7b7U, 0xe11cfdfdU, 0x3dae9393U, 0x4c6a2626U, - 0x6c5a3636U, 0x7e413f3fU, 0xf502f7f7U, 0x834fccccU, - 0x685c3434U, 0x51f4a5a5U, 0xd134e5e5U, 0xf908f1f1U, - 0xe2937171U, 0xab73d8d8U, 0x62533131U, 0x2a3f1515U, - 0x080c0404U, 0x9552c7c7U, 0x46652323U, 0x9d5ec3c3U, - 0x30281818U, 0x37a19696U, 0x0a0f0505U, 0x2fb59a9aU, - 0x0e090707U, 0x24361212U, 0x1b9b8080U, 0xdf3de2e2U, - 0xcd26ebebU, 0x4e692727U, 0x7fcdb2b2U, 0xea9f7575U, - 0x121b0909U, 0x1d9e8383U, 0x58742c2cU, 0x342e1a1aU, - 0x362d1b1bU, 0xdcb26e6eU, 0xb4ee5a5aU, 0x5bfba0a0U, - 0xa4f65252U, 0x764d3b3bU, 0xb761d6d6U, 0x7dceb3b3U, - 0x527b2929U, 0xdd3ee3e3U, 0x5e712f2fU, 0x13978484U, - 0xa6f55353U, 0xb968d1d1U, 0x00000000U, 0xc12cededU, - 0x40602020U, 0xe31ffcfcU, 0x79c8b1b1U, 0xb6ed5b5bU, - 0xd4be6a6aU, 0x8d46cbcbU, 0x67d9bebeU, 0x724b3939U, - 0x94de4a4aU, 0x98d44c4cU, 0xb0e85858U, 0x854acfcfU, - 0xbb6bd0d0U, 0xc52aefefU, 0x4fe5aaaaU, 0xed16fbfbU, - 0x86c54343U, 0x9ad74d4dU, 0x66553333U, 0x11948585U, - 0x8acf4545U, 0xe910f9f9U, 0x04060202U, 0xfe817f7fU, - 0xa0f05050U, 0x78443c3cU, 0x25ba9f9fU, 0x4be3a8a8U, - 0xa2f35151U, 0x5dfea3a3U, 0x80c04040U, 0x058a8f8fU, - 0x3fad9292U, 0x21bc9d9dU, 0x70483838U, 0xf104f5f5U, - 0x63dfbcbcU, 0x77c1b6b6U, 0xaf75dadaU, 0x42632121U, - 0x20301010U, 0xe51affffU, 0xfd0ef3f3U, 0xbf6dd2d2U, - 0x814ccdcdU, 0x18140c0cU, 0x26351313U, 0xc32fececU, - 0xbee15f5fU, 0x35a29797U, 0x88cc4444U, 0x2e391717U, - 0x9357c4c4U, 0x55f2a7a7U, 0xfc827e7eU, 0x7a473d3dU, - 0xc8ac6464U, 0xbae75d5dU, 0x322b1919U, 0xe6957373U, - 0xc0a06060U, 0x19988181U, 0x9ed14f4fU, 0xa37fdcdcU, - 0x44662222U, 0x547e2a2aU, 0x3bab9090U, 0x0b838888U, - 0x8cca4646U, 0xc729eeeeU, 0x6bd3b8b8U, 0x283c1414U, - 0xa779dedeU, 0xbce25e5eU, 0x161d0b0bU, 0xad76dbdbU, - 0xdb3be0e0U, 0x64563232U, 0x744e3a3aU, 0x141e0a0aU, - 0x92db4949U, 0x0c0a0606U, 0x486c2424U, 0xb8e45c5cU, - 0x9f5dc2c2U, 0xbd6ed3d3U, 0x43efacacU, 0xc4a66262U, - 0x39a89191U, 0x31a49595U, 0xd337e4e4U, 0xf28b7979U, - 0xd532e7e7U, 0x8b43c8c8U, 0x6e593737U, 0xdab76d6dU, - 0x018c8d8dU, 0xb164d5d5U, 0x9cd24e4eU, 0x49e0a9a9U, - 0xd8b46c6cU, 0xacfa5656U, 0xf307f4f4U, 0xcf25eaeaU, - 0xcaaf6565U, 0xf48e7a7aU, 0x47e9aeaeU, 0x10180808U, - 0x6fd5babaU, 0xf0887878U, 0x4a6f2525U, 0x5c722e2eU, - 0x38241c1cU, 0x57f1a6a6U, 0x73c7b4b4U, 0x9751c6c6U, - 0xcb23e8e8U, 0xa17cddddU, 0xe89c7474U, 0x3e211f1fU, - 0x96dd4b4bU, 0x61dcbdbdU, 0x0d868b8bU, 0x0f858a8aU, - 0xe0907070U, 0x7c423e3eU, 0x71c4b5b5U, 0xccaa6666U, - 0x90d84848U, 0x06050303U, 0xf701f6f6U, 0x1c120e0eU, - 0xc2a36161U, 0x6a5f3535U, 0xaef95757U, 0x69d0b9b9U, - 0x17918686U, 0x9958c1c1U, 0x3a271d1dU, 0x27b99e9eU, - 0xd938e1e1U, 0xeb13f8f8U, 0x2bb39898U, 0x22331111U, - 0xd2bb6969U, 0xa970d9d9U, 0x07898e8eU, 0x33a79494U, - 0x2db69b9bU, 0x3c221e1eU, 0x15928787U, 0xc920e9e9U, - 0x8749ceceU, 0xaaff5555U, 0x50782828U, 0xa57adfdfU, - 0x038f8c8cU, 0x59f8a1a1U, 0x09808989U, 0x1a170d0dU, - 0x65dabfbfU, 0xd731e6e6U, 0x84c64242U, 0xd0b86868U, - 0x82c34141U, 0x29b09999U, 0x5a772d2dU, 0x1e110f0fU, - 0x7bcbb0b0U, 0xa8fc5454U, 0x6dd6bbbbU, 0x2c3a1616U}; +{ + 0xa56363c6U, 0x847c7cf8U, 0x997777eeU, 0x8d7b7bf6U, + 0x0df2f2ffU, 0xbd6b6bd6U, 0xb16f6fdeU, 0x54c5c591U, + 0x50303060U, 0x03010102U, 0xa96767ceU, 0x7d2b2b56U, + 0x19fefee7U, 0x62d7d7b5U, 0xe6abab4dU, 0x9a7676ecU, + 0x45caca8fU, 0x9d82821fU, 0x40c9c989U, 0x877d7dfaU, + 0x15fafaefU, 0xeb5959b2U, 0xc947478eU, 0x0bf0f0fbU, + 0xecadad41U, 0x67d4d4b3U, 0xfda2a25fU, 0xeaafaf45U, + 0xbf9c9c23U, 0xf7a4a453U, 0x967272e4U, 0x5bc0c09bU, + 0xc2b7b775U, 0x1cfdfde1U, 0xae93933dU, 0x6a26264cU, + 0x5a36366cU, 0x413f3f7eU, 0x02f7f7f5U, 0x4fcccc83U, + 0x5c343468U, 0xf4a5a551U, 0x34e5e5d1U, 0x08f1f1f9U, + 0x937171e2U, 0x73d8d8abU, 0x53313162U, 0x3f15152aU, + 0x0c040408U, 0x52c7c795U, 0x65232346U, 0x5ec3c39dU, + 0x28181830U, 0xa1969637U, 0x0f05050aU, 0xb59a9a2fU, + 0x0907070eU, 0x36121224U, 0x9b80801bU, 0x3de2e2dfU, + 0x26ebebcdU, 0x6927274eU, 0xcdb2b27fU, 0x9f7575eaU, + 0x1b090912U, 0x9e83831dU, 0x742c2c58U, 0x2e1a1a34U, + 0x2d1b1b36U, 0xb26e6edcU, 0xee5a5ab4U, 0xfba0a05bU, + 0xf65252a4U, 0x4d3b3b76U, 0x61d6d6b7U, 0xceb3b37dU, + 0x7b292952U, 0x3ee3e3ddU, 0x712f2f5eU, 0x97848413U, + 0xf55353a6U, 0x68d1d1b9U, 0x00000000U, 0x2cededc1U, + 0x60202040U, 0x1ffcfce3U, 0xc8b1b179U, 0xed5b5bb6U, + 0xbe6a6ad4U, 0x46cbcb8dU, 0xd9bebe67U, 0x4b393972U, + 0xde4a4a94U, 0xd44c4c98U, 0xe85858b0U, 0x4acfcf85U, + 0x6bd0d0bbU, 0x2aefefc5U, 0xe5aaaa4fU, 0x16fbfbedU, + 0xc5434386U, 0xd74d4d9aU, 0x55333366U, 0x94858511U, + 0xcf45458aU, 0x10f9f9e9U, 0x06020204U, 0x817f7ffeU, + 0xf05050a0U, 0x443c3c78U, 0xba9f9f25U, 0xe3a8a84bU, + 0xf35151a2U, 0xfea3a35dU, 0xc0404080U, 0x8a8f8f05U, + 0xad92923fU, 0xbc9d9d21U, 0x48383870U, 0x04f5f5f1U, + 0xdfbcbc63U, 0xc1b6b677U, 0x75dadaafU, 0x63212142U, + 0x30101020U, 0x1affffe5U, 0x0ef3f3fdU, 0x6dd2d2bfU, + 0x4ccdcd81U, 0x140c0c18U, 0x35131326U, 0x2fececc3U, + 0xe15f5fbeU, 0xa2979735U, 0xcc444488U, 0x3917172eU, + 0x57c4c493U, 0xf2a7a755U, 0x827e7efcU, 0x473d3d7aU, + 0xac6464c8U, 0xe75d5dbaU, 0x2b191932U, 0x957373e6U, + 0xa06060c0U, 0x98818119U, 0xd14f4f9eU, 0x7fdcdca3U, + 0x66222244U, 0x7e2a2a54U, 0xab90903bU, 0x8388880bU, + 0xca46468cU, 0x29eeeec7U, 0xd3b8b86bU, 0x3c141428U, + 0x79dedea7U, 0xe25e5ebcU, 0x1d0b0b16U, 0x76dbdbadU, + 0x3be0e0dbU, 0x56323264U, 0x4e3a3a74U, 0x1e0a0a14U, + 0xdb494992U, 0x0a06060cU, 0x6c242448U, 0xe45c5cb8U, + 0x5dc2c29fU, 0x6ed3d3bdU, 0xefacac43U, 0xa66262c4U, + 0xa8919139U, 0xa4959531U, 0x37e4e4d3U, 0x8b7979f2U, + 0x32e7e7d5U, 0x43c8c88bU, 0x5937376eU, 0xb76d6ddaU, + 0x8c8d8d01U, 0x64d5d5b1U, 0xd24e4e9cU, 0xe0a9a949U, + 0xb46c6cd8U, 0xfa5656acU, 0x07f4f4f3U, 0x25eaeacfU, + 0xaf6565caU, 0x8e7a7af4U, 0xe9aeae47U, 0x18080810U, + 0xd5baba6fU, 0x887878f0U, 0x6f25254aU, 0x722e2e5cU, + 0x241c1c38U, 0xf1a6a657U, 0xc7b4b473U, 0x51c6c697U, + 0x23e8e8cbU, 0x7cdddda1U, 0x9c7474e8U, 0x211f1f3eU, + 0xdd4b4b96U, 0xdcbdbd61U, 0x868b8b0dU, 0x858a8a0fU, + 0x907070e0U, 0x423e3e7cU, 0xc4b5b571U, 0xaa6666ccU, + 0xd8484890U, 0x05030306U, 0x01f6f6f7U, 0x120e0e1cU, + 0xa36161c2U, 0x5f35356aU, 0xf95757aeU, 0xd0b9b969U, + 0x91868617U, 0x58c1c199U, 0x271d1d3aU, 0xb99e9e27U, + 0x38e1e1d9U, 0x13f8f8ebU, 0xb398982bU, 0x33111122U, + 0xbb6969d2U, 0x70d9d9a9U, 0x898e8e07U, 0xa7949433U, + 0xb69b9b2dU, 0x221e1e3cU, 0x92878715U, 0x20e9e9c9U, + 0x49cece87U, 0xff5555aaU, 0x78282850U, 0x7adfdfa5U, + 0x8f8c8c03U, 0xf8a1a159U, 0x80898909U, 0x170d0d1aU, + 0xdabfbf65U, 0x31e6e6d7U, 0xc6424284U, 0xb86868d0U, + 0xc3414182U, 0xb0999929U, 0x772d2d5aU, 0x110f0f1eU, + 0xcbb0b07bU, 0xfc5454a8U, 0xd6bbbb6dU, 0x3a16162cU, + 0x6363c6a5U, 0x7c7cf884U, 0x7777ee99U, 0x7b7bf68dU, + 0xf2f2ff0dU, 0x6b6bd6bdU, 0x6f6fdeb1U, 0xc5c59154U, + 0x30306050U, 0x01010203U, 0x6767cea9U, 0x2b2b567dU, + 0xfefee719U, 0xd7d7b562U, 0xabab4de6U, 0x7676ec9aU, + 0xcaca8f45U, 0x82821f9dU, 0xc9c98940U, 0x7d7dfa87U, + 0xfafaef15U, 0x5959b2ebU, 0x47478ec9U, 0xf0f0fb0bU, + 0xadad41ecU, 0xd4d4b367U, 0xa2a25ffdU, 0xafaf45eaU, + 0x9c9c23bfU, 0xa4a453f7U, 0x7272e496U, 0xc0c09b5bU, + 0xb7b775c2U, 0xfdfde11cU, 0x93933daeU, 0x26264c6aU, + 0x36366c5aU, 0x3f3f7e41U, 0xf7f7f502U, 0xcccc834fU, + 0x3434685cU, 0xa5a551f4U, 0xe5e5d134U, 0xf1f1f908U, + 0x7171e293U, 0xd8d8ab73U, 0x31316253U, 0x15152a3fU, + 0x0404080cU, 0xc7c79552U, 0x23234665U, 0xc3c39d5eU, + 0x18183028U, 0x969637a1U, 0x05050a0fU, 0x9a9a2fb5U, + 0x07070e09U, 0x12122436U, 0x80801b9bU, 0xe2e2df3dU, + 0xebebcd26U, 0x27274e69U, 0xb2b27fcdU, 0x7575ea9fU, + 0x0909121bU, 0x83831d9eU, 0x2c2c5874U, 0x1a1a342eU, + 0x1b1b362dU, 0x6e6edcb2U, 0x5a5ab4eeU, 0xa0a05bfbU, + 0x5252a4f6U, 0x3b3b764dU, 0xd6d6b761U, 0xb3b37dceU, + 0x2929527bU, 0xe3e3dd3eU, 0x2f2f5e71U, 0x84841397U, + 0x5353a6f5U, 0xd1d1b968U, 0x00000000U, 0xededc12cU, + 0x20204060U, 0xfcfce31fU, 0xb1b179c8U, 0x5b5bb6edU, + 0x6a6ad4beU, 0xcbcb8d46U, 0xbebe67d9U, 0x3939724bU, + 0x4a4a94deU, 0x4c4c98d4U, 0x5858b0e8U, 0xcfcf854aU, + 0xd0d0bb6bU, 0xefefc52aU, 0xaaaa4fe5U, 0xfbfbed16U, + 0x434386c5U, 0x4d4d9ad7U, 0x33336655U, 0x85851194U, + 0x45458acfU, 0xf9f9e910U, 0x02020406U, 0x7f7ffe81U, + 0x5050a0f0U, 0x3c3c7844U, 0x9f9f25baU, 0xa8a84be3U, + 0x5151a2f3U, 0xa3a35dfeU, 0x404080c0U, 0x8f8f058aU, + 0x92923fadU, 0x9d9d21bcU, 0x38387048U, 0xf5f5f104U, + 0xbcbc63dfU, 0xb6b677c1U, 0xdadaaf75U, 0x21214263U, + 0x10102030U, 0xffffe51aU, 0xf3f3fd0eU, 0xd2d2bf6dU, + 0xcdcd814cU, 0x0c0c1814U, 0x13132635U, 0xececc32fU, + 0x5f5fbee1U, 0x979735a2U, 0x444488ccU, 0x17172e39U, + 0xc4c49357U, 0xa7a755f2U, 0x7e7efc82U, 0x3d3d7a47U, + 0x6464c8acU, 0x5d5dbae7U, 0x1919322bU, 0x7373e695U, + 0x6060c0a0U, 0x81811998U, 0x4f4f9ed1U, 0xdcdca37fU, + 0x22224466U, 0x2a2a547eU, 0x90903babU, 0x88880b83U, + 0x46468ccaU, 0xeeeec729U, 0xb8b86bd3U, 0x1414283cU, + 0xdedea779U, 0x5e5ebce2U, 0x0b0b161dU, 0xdbdbad76U, + 0xe0e0db3bU, 0x32326456U, 0x3a3a744eU, 0x0a0a141eU, + 0x494992dbU, 0x06060c0aU, 0x2424486cU, 0x5c5cb8e4U, + 0xc2c29f5dU, 0xd3d3bd6eU, 0xacac43efU, 0x6262c4a6U, + 0x919139a8U, 0x959531a4U, 0xe4e4d337U, 0x7979f28bU, + 0xe7e7d532U, 0xc8c88b43U, 0x37376e59U, 0x6d6ddab7U, + 0x8d8d018cU, 0xd5d5b164U, 0x4e4e9cd2U, 0xa9a949e0U, + 0x6c6cd8b4U, 0x5656acfaU, 0xf4f4f307U, 0xeaeacf25U, + 0x6565caafU, 0x7a7af48eU, 0xaeae47e9U, 0x08081018U, + 0xbaba6fd5U, 0x7878f088U, 0x25254a6fU, 0x2e2e5c72U, + 0x1c1c3824U, 0xa6a657f1U, 0xb4b473c7U, 0xc6c69751U, + 0xe8e8cb23U, 0xdddda17cU, 0x7474e89cU, 0x1f1f3e21U, + 0x4b4b96ddU, 0xbdbd61dcU, 0x8b8b0d86U, 0x8a8a0f85U, + 0x7070e090U, 0x3e3e7c42U, 0xb5b571c4U, 0x6666ccaaU, + 0x484890d8U, 0x03030605U, 0xf6f6f701U, 0x0e0e1c12U, + 0x6161c2a3U, 0x35356a5fU, 0x5757aef9U, 0xb9b969d0U, + 0x86861791U, 0xc1c19958U, 0x1d1d3a27U, 0x9e9e27b9U, + 0xe1e1d938U, 0xf8f8eb13U, 0x98982bb3U, 0x11112233U, + 0x6969d2bbU, 0xd9d9a970U, 0x8e8e0789U, 0x949433a7U, + 0x9b9b2db6U, 0x1e1e3c22U, 0x87871592U, 0xe9e9c920U, + 0xcece8749U, 0x5555aaffU, 0x28285078U, 0xdfdfa57aU, + 0x8c8c038fU, 0xa1a159f8U, 0x89890980U, 0x0d0d1a17U, + 0xbfbf65daU, 0xe6e6d731U, 0x424284c6U, 0x6868d0b8U, + 0x414182c3U, 0x999929b0U, 0x2d2d5a77U, 0x0f0f1e11U, + 0xb0b07bcbU, 0x5454a8fcU, 0xbbbb6dd6U, 0x16162c3aU, + 0x63c6a563U, 0x7cf8847cU, 0x77ee9977U, 0x7bf68d7bU, + 0xf2ff0df2U, 0x6bd6bd6bU, 0x6fdeb16fU, 0xc59154c5U, + 0x30605030U, 0x01020301U, 0x67cea967U, 0x2b567d2bU, + 0xfee719feU, 0xd7b562d7U, 0xab4de6abU, 0x76ec9a76U, + 0xca8f45caU, 0x821f9d82U, 0xc98940c9U, 0x7dfa877dU, + 0xfaef15faU, 0x59b2eb59U, 0x478ec947U, 0xf0fb0bf0U, + 0xad41ecadU, 0xd4b367d4U, 0xa25ffda2U, 0xaf45eaafU, + 0x9c23bf9cU, 0xa453f7a4U, 0x72e49672U, 0xc09b5bc0U, + 0xb775c2b7U, 0xfde11cfdU, 0x933dae93U, 0x264c6a26U, + 0x366c5a36U, 0x3f7e413fU, 0xf7f502f7U, 0xcc834fccU, + 0x34685c34U, 0xa551f4a5U, 0xe5d134e5U, 0xf1f908f1U, + 0x71e29371U, 0xd8ab73d8U, 0x31625331U, 0x152a3f15U, + 0x04080c04U, 0xc79552c7U, 0x23466523U, 0xc39d5ec3U, + 0x18302818U, 0x9637a196U, 0x050a0f05U, 0x9a2fb59aU, + 0x070e0907U, 0x12243612U, 0x801b9b80U, 0xe2df3de2U, + 0xebcd26ebU, 0x274e6927U, 0xb27fcdb2U, 0x75ea9f75U, + 0x09121b09U, 0x831d9e83U, 0x2c58742cU, 0x1a342e1aU, + 0x1b362d1bU, 0x6edcb26eU, 0x5ab4ee5aU, 0xa05bfba0U, + 0x52a4f652U, 0x3b764d3bU, 0xd6b761d6U, 0xb37dceb3U, + 0x29527b29U, 0xe3dd3ee3U, 0x2f5e712fU, 0x84139784U, + 0x53a6f553U, 0xd1b968d1U, 0x00000000U, 0xedc12cedU, + 0x20406020U, 0xfce31ffcU, 0xb179c8b1U, 0x5bb6ed5bU, + 0x6ad4be6aU, 0xcb8d46cbU, 0xbe67d9beU, 0x39724b39U, + 0x4a94de4aU, 0x4c98d44cU, 0x58b0e858U, 0xcf854acfU, + 0xd0bb6bd0U, 0xefc52aefU, 0xaa4fe5aaU, 0xfbed16fbU, + 0x4386c543U, 0x4d9ad74dU, 0x33665533U, 0x85119485U, + 0x458acf45U, 0xf9e910f9U, 0x02040602U, 0x7ffe817fU, + 0x50a0f050U, 0x3c78443cU, 0x9f25ba9fU, 0xa84be3a8U, + 0x51a2f351U, 0xa35dfea3U, 0x4080c040U, 0x8f058a8fU, + 0x923fad92U, 0x9d21bc9dU, 0x38704838U, 0xf5f104f5U, + 0xbc63dfbcU, 0xb677c1b6U, 0xdaaf75daU, 0x21426321U, + 0x10203010U, 0xffe51affU, 0xf3fd0ef3U, 0xd2bf6dd2U, + 0xcd814ccdU, 0x0c18140cU, 0x13263513U, 0xecc32fecU, + 0x5fbee15fU, 0x9735a297U, 0x4488cc44U, 0x172e3917U, + 0xc49357c4U, 0xa755f2a7U, 0x7efc827eU, 0x3d7a473dU, + 0x64c8ac64U, 0x5dbae75dU, 0x19322b19U, 0x73e69573U, + 0x60c0a060U, 0x81199881U, 0x4f9ed14fU, 0xdca37fdcU, + 0x22446622U, 0x2a547e2aU, 0x903bab90U, 0x880b8388U, + 0x468cca46U, 0xeec729eeU, 0xb86bd3b8U, 0x14283c14U, + 0xdea779deU, 0x5ebce25eU, 0x0b161d0bU, 0xdbad76dbU, + 0xe0db3be0U, 0x32645632U, 0x3a744e3aU, 0x0a141e0aU, + 0x4992db49U, 0x060c0a06U, 0x24486c24U, 0x5cb8e45cU, + 0xc29f5dc2U, 0xd3bd6ed3U, 0xac43efacU, 0x62c4a662U, + 0x9139a891U, 0x9531a495U, 0xe4d337e4U, 0x79f28b79U, + 0xe7d532e7U, 0xc88b43c8U, 0x376e5937U, 0x6ddab76dU, + 0x8d018c8dU, 0xd5b164d5U, 0x4e9cd24eU, 0xa949e0a9U, + 0x6cd8b46cU, 0x56acfa56U, 0xf4f307f4U, 0xeacf25eaU, + 0x65caaf65U, 0x7af48e7aU, 0xae47e9aeU, 0x08101808U, + 0xba6fd5baU, 0x78f08878U, 0x254a6f25U, 0x2e5c722eU, + 0x1c38241cU, 0xa657f1a6U, 0xb473c7b4U, 0xc69751c6U, + 0xe8cb23e8U, 0xdda17cddU, 0x74e89c74U, 0x1f3e211fU, + 0x4b96dd4bU, 0xbd61dcbdU, 0x8b0d868bU, 0x8a0f858aU, + 0x70e09070U, 0x3e7c423eU, 0xb571c4b5U, 0x66ccaa66U, + 0x4890d848U, 0x03060503U, 0xf6f701f6U, 0x0e1c120eU, + 0x61c2a361U, 0x356a5f35U, 0x57aef957U, 0xb969d0b9U, + 0x86179186U, 0xc19958c1U, 0x1d3a271dU, 0x9e27b99eU, + 0xe1d938e1U, 0xf8eb13f8U, 0x982bb398U, 0x11223311U, + 0x69d2bb69U, 0xd9a970d9U, 0x8e07898eU, 0x9433a794U, + 0x9b2db69bU, 0x1e3c221eU, 0x87159287U, 0xe9c920e9U, + 0xce8749ceU, 0x55aaff55U, 0x28507828U, 0xdfa57adfU, + 0x8c038f8cU, 0xa159f8a1U, 0x89098089U, 0x0d1a170dU, + 0xbf65dabfU, 0xe6d731e6U, 0x4284c642U, 0x68d0b868U, + 0x4182c341U, 0x9929b099U, 0x2d5a772dU, 0x0f1e110fU, + 0xb07bcbb0U, 0x54a8fc54U, 0xbb6dd6bbU, 0x162c3a16U, + 0xc6a56363U, 0xf8847c7cU, 0xee997777U, 0xf68d7b7bU, + 0xff0df2f2U, 0xd6bd6b6bU, 0xdeb16f6fU, 0x9154c5c5U, + 0x60503030U, 0x02030101U, 0xcea96767U, 0x567d2b2bU, + 0xe719fefeU, 0xb562d7d7U, 0x4de6ababU, 0xec9a7676U, + 0x8f45cacaU, 0x1f9d8282U, 0x8940c9c9U, 0xfa877d7dU, + 0xef15fafaU, 0xb2eb5959U, 0x8ec94747U, 0xfb0bf0f0U, + 0x41ecadadU, 0xb367d4d4U, 0x5ffda2a2U, 0x45eaafafU, + 0x23bf9c9cU, 0x53f7a4a4U, 0xe4967272U, 0x9b5bc0c0U, + 0x75c2b7b7U, 0xe11cfdfdU, 0x3dae9393U, 0x4c6a2626U, + 0x6c5a3636U, 0x7e413f3fU, 0xf502f7f7U, 0x834fccccU, + 0x685c3434U, 0x51f4a5a5U, 0xd134e5e5U, 0xf908f1f1U, + 0xe2937171U, 0xab73d8d8U, 0x62533131U, 0x2a3f1515U, + 0x080c0404U, 0x9552c7c7U, 0x46652323U, 0x9d5ec3c3U, + 0x30281818U, 0x37a19696U, 0x0a0f0505U, 0x2fb59a9aU, + 0x0e090707U, 0x24361212U, 0x1b9b8080U, 0xdf3de2e2U, + 0xcd26ebebU, 0x4e692727U, 0x7fcdb2b2U, 0xea9f7575U, + 0x121b0909U, 0x1d9e8383U, 0x58742c2cU, 0x342e1a1aU, + 0x362d1b1bU, 0xdcb26e6eU, 0xb4ee5a5aU, 0x5bfba0a0U, + 0xa4f65252U, 0x764d3b3bU, 0xb761d6d6U, 0x7dceb3b3U, + 0x527b2929U, 0xdd3ee3e3U, 0x5e712f2fU, 0x13978484U, + 0xa6f55353U, 0xb968d1d1U, 0x00000000U, 0xc12cededU, + 0x40602020U, 0xe31ffcfcU, 0x79c8b1b1U, 0xb6ed5b5bU, + 0xd4be6a6aU, 0x8d46cbcbU, 0x67d9bebeU, 0x724b3939U, + 0x94de4a4aU, 0x98d44c4cU, 0xb0e85858U, 0x854acfcfU, + 0xbb6bd0d0U, 0xc52aefefU, 0x4fe5aaaaU, 0xed16fbfbU, + 0x86c54343U, 0x9ad74d4dU, 0x66553333U, 0x11948585U, + 0x8acf4545U, 0xe910f9f9U, 0x04060202U, 0xfe817f7fU, + 0xa0f05050U, 0x78443c3cU, 0x25ba9f9fU, 0x4be3a8a8U, + 0xa2f35151U, 0x5dfea3a3U, 0x80c04040U, 0x058a8f8fU, + 0x3fad9292U, 0x21bc9d9dU, 0x70483838U, 0xf104f5f5U, + 0x63dfbcbcU, 0x77c1b6b6U, 0xaf75dadaU, 0x42632121U, + 0x20301010U, 0xe51affffU, 0xfd0ef3f3U, 0xbf6dd2d2U, + 0x814ccdcdU, 0x18140c0cU, 0x26351313U, 0xc32fececU, + 0xbee15f5fU, 0x35a29797U, 0x88cc4444U, 0x2e391717U, + 0x9357c4c4U, 0x55f2a7a7U, 0xfc827e7eU, 0x7a473d3dU, + 0xc8ac6464U, 0xbae75d5dU, 0x322b1919U, 0xe6957373U, + 0xc0a06060U, 0x19988181U, 0x9ed14f4fU, 0xa37fdcdcU, + 0x44662222U, 0x547e2a2aU, 0x3bab9090U, 0x0b838888U, + 0x8cca4646U, 0xc729eeeeU, 0x6bd3b8b8U, 0x283c1414U, + 0xa779dedeU, 0xbce25e5eU, 0x161d0b0bU, 0xad76dbdbU, + 0xdb3be0e0U, 0x64563232U, 0x744e3a3aU, 0x141e0a0aU, + 0x92db4949U, 0x0c0a0606U, 0x486c2424U, 0xb8e45c5cU, + 0x9f5dc2c2U, 0xbd6ed3d3U, 0x43efacacU, 0xc4a66262U, + 0x39a89191U, 0x31a49595U, 0xd337e4e4U, 0xf28b7979U, + 0xd532e7e7U, 0x8b43c8c8U, 0x6e593737U, 0xdab76d6dU, + 0x018c8d8dU, 0xb164d5d5U, 0x9cd24e4eU, 0x49e0a9a9U, + 0xd8b46c6cU, 0xacfa5656U, 0xf307f4f4U, 0xcf25eaeaU, + 0xcaaf6565U, 0xf48e7a7aU, 0x47e9aeaeU, 0x10180808U, + 0x6fd5babaU, 0xf0887878U, 0x4a6f2525U, 0x5c722e2eU, + 0x38241c1cU, 0x57f1a6a6U, 0x73c7b4b4U, 0x9751c6c6U, + 0xcb23e8e8U, 0xa17cddddU, 0xe89c7474U, 0x3e211f1fU, + 0x96dd4b4bU, 0x61dcbdbdU, 0x0d868b8bU, 0x0f858a8aU, + 0xe0907070U, 0x7c423e3eU, 0x71c4b5b5U, 0xccaa6666U, + 0x90d84848U, 0x06050303U, 0xf701f6f6U, 0x1c120e0eU, + 0xc2a36161U, 0x6a5f3535U, 0xaef95757U, 0x69d0b9b9U, + 0x17918686U, 0x9958c1c1U, 0x3a271d1dU, 0x27b99e9eU, + 0xd938e1e1U, 0xeb13f8f8U, 0x2bb39898U, 0x22331111U, + 0xd2bb6969U, 0xa970d9d9U, 0x07898e8eU, 0x33a79494U, + 0x2db69b9bU, 0x3c221e1eU, 0x15928787U, 0xc920e9e9U, + 0x8749ceceU, 0xaaff5555U, 0x50782828U, 0xa57adfdfU, + 0x038f8c8cU, 0x59f8a1a1U, 0x09808989U, 0x1a170d0dU, + 0x65dabfbfU, 0xd731e6e6U, 0x84c64242U, 0xd0b86868U, + 0x82c34141U, 0x29b09999U, 0x5a772d2dU, 0x1e110f0fU, + 0x7bcbb0b0U, 0xa8fc5454U, 0x6dd6bbbbU, 0x2c3a1616U}; + +#define t_fn32(x) (sharedMemory[(x) * 32]) #define t_fn0(x) (sharedMemory[(x)]) #define t_fn1(x) (sharedMemory[256 + (x)]) #define t_fn2(x) (sharedMemory[512 + (x)]) #define t_fn3(x) (sharedMemory[768 + (x)]) -#define round(dummy, y, x, k) \ - y[0] = (k)[0] ^ (t_fn0(x[0] & 0xff) ^ t_fn1((x[1] >> 8) & 0xff) ^ t_fn2((x[2] >> 16) & 0xff) ^ t_fn3((x[3] >> 24))); \ - y[1] = (k)[1] ^ (t_fn0(x[1] & 0xff) ^ t_fn1((x[2] >> 8) & 0xff) ^ t_fn2((x[3] >> 16) & 0xff) ^ t_fn3((x[0] >> 24))); \ - y[2] = (k)[2] ^ (t_fn0(x[2] & 0xff) ^ t_fn1((x[3] >> 8) & 0xff) ^ t_fn2((x[0] >> 16) & 0xff) ^ t_fn3((x[1] >> 24))); \ - y[3] = (k)[3] ^ (t_fn0(x[3] & 0xff) ^ t_fn1((x[0] >> 8) & 0xff) ^ t_fn2((x[1] >> 16) & 0xff) ^ t_fn3((x[2] >> 24))); +#define round(dummy, y, x, k) \ + y[0] = (k)[0] ^ t_fn0(BYTE_0(x[0])) ^ t_fn1(BYTE_1(x[1])) ^ t_fn2(BYTE_2(x[2])) ^ t_fn3(BYTE_3(x[3])); \ + y[1] = (k)[1] ^ t_fn0(BYTE_0(x[1])) ^ t_fn1(BYTE_1(x[2])) ^ t_fn2(BYTE_2(x[3])) ^ t_fn3(BYTE_3(x[0])); \ + y[2] = (k)[2] ^ t_fn0(BYTE_0(x[2])) ^ t_fn1(BYTE_1(x[3])) ^ t_fn2(BYTE_2(x[0])) ^ t_fn3(BYTE_3(x[1])); \ + y[3] = (k)[3] ^ t_fn0(BYTE_0(x[3])) ^ t_fn1(BYTE_1(x[0])) ^ t_fn2(BYTE_2(x[1])) ^ t_fn3(BYTE_3(x[2])); + + +__device__ __forceinline__ static uint4 round32(const uint32_t* __restrict__ sharedMemory, const uint4& b, uint4 a) +{ \ + a.x ^= t_fn32(BYTE_0(b.x)); + a.y ^= t_fn32(BYTE_0(b.y)); + a.z ^= t_fn32(BYTE_0(b.z)); + a.w ^= t_fn32(BYTE_0(b.w)); + a.x ^= ROTL32_8(t_fn32(BYTE_1(b.y))); + a.y ^= ROTL32_8(t_fn32(BYTE_1(b.z))); + a.z ^= ROTL32_8(t_fn32(BYTE_1(b.w))); + a.w ^= ROTL32_8(t_fn32(BYTE_1(b.x))); + a.x ^= ROTL32_16(t_fn32(BYTE_2(b.z))) ^ ROTL32_24(t_fn32(BYTE_3(b.w))); + a.y ^= ROTL32_16(t_fn32(BYTE_2(b.w))) ^ ROTL32_24(t_fn32(BYTE_3(b.x))); + a.z ^= ROTL32_16(t_fn32(BYTE_2(b.x))) ^ ROTL32_24(t_fn32(BYTE_3(b.y))); + a.w ^= ROTL32_16(t_fn32(BYTE_2(b.y))) ^ ROTL32_24(t_fn32(BYTE_3(b.z))); + return a; +} __device__ __forceinline__ static void cn_aes_single_round(uint32_t* __restrict__ sharedMemory, const uint32_t* __restrict__ in, uint32_t* __restrict__ out, const uint32_t* __restrict__ expandedKey) { @@ -296,12 +578,33 @@ __device__ __forceinline__ static void cn_aes_pseudo_round_mut(const uint32_t* _ round(sharedMemory, val, b1, expandedKey + 9 * N_COLS); } +__device__ __forceinline__ static uint4 cn_aes_pseudo_round_mut32(const uint32_t* __restrict__ sharedMemory, uint4 val, const uint4* __restrict__ expandedKey) +{ + uint4 b1 = round32(sharedMemory, val, *expandedKey); + val = round32(sharedMemory, b1, expandedKey[1]); + b1 = round32(sharedMemory, val, expandedKey[2]); + val = round32(sharedMemory, b1, expandedKey[3]); + b1 = round32(sharedMemory, val, expandedKey[4]); + val = round32(sharedMemory, b1, expandedKey[5]); + b1 = round32(sharedMemory, val, expandedKey[6]); + val = round32(sharedMemory, b1, expandedKey[7]); + b1 = round32(sharedMemory, val, expandedKey[8]); + val = round32(sharedMemory, b1, expandedKey[9]); + return val; +} + __device__ __forceinline__ static void cn_aes_gpu_init(uint32_t* sharedMemory) { for(int i = threadIdx.x; i < 1024; i += blockDim.x) sharedMemory[i] = d_t_fn[i]; } +__device__ __forceinline__ static void cn_aes_gpu_init32(uint32_t* sharedMemory) +{ + for(int i = threadIdx.x; i < 256 * 32; i += blockDim.x) + sharedMemory[i] = d_t_fn256[i]; +} + __device__ __forceinline__ static void cn_aes_gpu_init_half(uint32_t* sharedMemory) { for(int i = threadIdx.x; i < 512; i += blockDim.x) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu index 7f610f9dc..b3c0bc004 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu @@ -79,63 +79,6 @@ __device__ __forceinline__ uint64_t cuda_mul128(uint64_t multiplier, uint64_t mu return (multiplier * multiplicand); } -template -__device__ __forceinline__ T loadGlobal64(T* const addr) -{ -#if(__CUDA_ARCH__ < 700) - T x; - asm volatile("ld.global.cg.u64 %0, [%1];" - : "=l"(x) - : "l"(addr)); - return x; -#else - return *addr; -#endif -} - -template -__device__ __forceinline__ T loadGlobal32(T* const addr) -{ -#if(__CUDA_ARCH__ < 700) - T x; - asm volatile("ld.global.cg.u32 %0, [%1];" - : "=r"(x) - : "l"(addr)); - return x; -#else - return *addr; -#endif -} - -template -__device__ __forceinline__ void storeGlobal32(T* addr, T const& val) -{ -#if(__CUDA_ARCH__ < 700) - asm volatile("st.global.cg.u32 [%0], %1;" - : - : "l"(addr), "r"(val)); -#else - *addr = val; -#endif -} - -template -__device__ __forceinline__ void storeGlobal64(T* addr, T const& val) -{ -#if(__CUDA_ARCH__ < 700) - asm volatile("st.global.cg.u64 [%0], %1;" - : - : "l"(addr), "l"(val)); -#else - *addr = val; -#endif -} - -__device__ __forceinline__ uint32_t rotate16(const uint32_t n) -{ - return (n >> 16u) | (n << 16u); -} - __global__ void cryptonight_core_gpu_phase1( const uint32_t ITERATIONS, const size_t MEMORY, int threads, int bfactor, int partidx, uint32_t* __restrict__ long_state, uint32_t* __restrict__ ctx_state2, uint32_t* __restrict__ ctx_key1) @@ -358,8 +301,8 @@ __launch_bounds__(XMR_STAK_THREADS * 2) const u64 cx2 = myChunks[idx1 + ((sub + 1) & 1)]; u64 cx_aes = ax0 ^ u64( - t_fn0(cx.x & 0xff) ^ t_fn1((cx.y >> 8) & 0xff) ^ rotate16(t_fn0((cx2.x >> 16) & 0xff) ^ t_fn1((cx2.y >> 24))), - t_fn0(cx.y & 0xff) ^ t_fn1((cx2.x >> 8) & 0xff) ^ rotate16(t_fn0((cx2.y >> 16) & 0xff) ^ t_fn1((cx.x >> 24)))); + t_fn0(BYTE_0(cx.x)) ^ t_fn1(BYTE_1(cx.y)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.x)) ^ t_fn1(BYTE_3(cx2.y >> 24))), + t_fn0(BYTE_0(cx.y)) ^ t_fn1(BYTE_1(cx2.x)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.y)) ^ t_fn1(BYTE_3(cx.x >> 24)))); if(ALGO == cryptonight_monero_v8) { @@ -614,10 +557,10 @@ __launch_bounds__(XMR_STAK_THREADS * 4) if(i == sub) { d[x] = a ^ - t_fn0(k[0] & 0xff) ^ - t_fn1((k[1] >> 8) & 0xff) ^ - t_fn2((k[2] >> 16) & 0xff) ^ - t_fn3((k[3] >> 24)); + t_fn0(BYTE_0(k[0])) ^ + t_fn1(BYTE_1(k[1])) ^ + t_fn2(BYTE_2(k[2])) ^ + t_fn3(BYTE_3(k[3])); } // the last shuffle is not needed if(i != 3) @@ -652,10 +595,10 @@ __launch_bounds__(XMR_STAK_THREADS * 4) const uint32_t x_2 = shuffle<4>(sPtr, sub, x_0, sub + 2); const uint32_t x_3 = shuffle<4>(sPtr, sub, x_0, sub + 3); d[x] = a ^ - t_fn0(x_0 & 0xff) ^ - t_fn1((x_1 >> 8) & 0xff) ^ - t_fn2((x_2 >> 16) & 0xff) ^ - t_fn3((x_3 >> 24)); + t_fn0(BYTE_0(x_0)) ^ + t_fn1(BYTE_1(x_1)) ^ + t_fn2(BYTE_2(x_2)) ^ + t_fn3(BYTE_3(x_3)); } //XOR_BLOCKS_DST(c, b, &long_state[j]); @@ -757,11 +700,16 @@ __launch_bounds__(XMR_STAK_THREADS * 4) template __global__ void cryptonight_core_gpu_phase3( const uint32_t ITERATIONS, const size_t MEMORY, - int threads, int bfactor, int partidx, const uint32_t* __restrict__ long_state, uint32_t* __restrict__ d_ctx_state, uint32_t* __restrict__ d_ctx_key2) + int threads, int bfactor, int partidx, uint32_t* long_stateIn, const uint32_t* const __restrict__ d_ctx_stateIn, uint32_t* __restrict__ d_ctx_key2) { - __shared__ uint32_t sharedMemory[1024]; + __shared__ uint32_t sharedMemoryX[256 * 32]; - cn_aes_gpu_init(sharedMemory); + /* avoid that the compiler is later in the aes round optimizing `sharedMemory[ x * 32 ]` to `sharedMemoryX + x * 32 + twidx`*/ + const int twidx = (threadIdx.x * 4) % 128; + // this is equivalent to `(uint32_t*)sharedMemoryX + twidx;` where `twidx` is [0;32) + char* sharedMemory = (char*)sharedMemoryX + twidx; + + cn_aes_gpu_init32(sharedMemoryX); __syncthreads(); int thread = (blockDim.x * blockIdx.x + threadIdx.x) >> 3; @@ -775,9 +723,17 @@ __global__ void cryptonight_core_gpu_phase3( if(thread >= threads) return; + const uint32_t* const long_state = long_stateIn + ((IndexType)thread * MEMORY) + sub; + uint32_t key[40], text[4]; - MEMCPY8(key, d_ctx_key2 + thread * 40, 20); - MEMCPY8(text, d_ctx_state + thread * 50 + sub + 16, 2); + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + ((ulonglong4*)key)[j] = ((ulonglong4*)(d_ctx_key2 + thread * 40))[j]; + + uint64_t* d_ctx_state = (uint64_t*)(d_ctx_stateIn + thread * 50 + sub + 16); + #pragma unroll 2 + for(int j = 0; j < 2; ++j) + ((uint64_t*)text)[j] = loadGlobal64(d_ctx_state + j); __syncthreads(); @@ -790,22 +746,30 @@ __global__ void cryptonight_core_gpu_phase3( for(int i = start; i < end; i += 32) { -#pragma unroll + uint32_t tmp[4]; + ((ulonglong2*)(tmp))[0] = ((ulonglong2*)(long_state + i))[0]; + #pragma unroll 4 for(int j = 0; j < 4; ++j) - text[j] ^= long_state[((IndexType)thread * MEMORY) + (sub + i + j)]; + text[j] ^= tmp[j]; - cn_aes_pseudo_round_mut(sharedMemory, text, key); + ((uint4*)text)[0] = cn_aes_pseudo_round_mut32((uint32_t*)sharedMemory, ((uint4*)text)[0], (uint4*)key); if(ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { -#pragma unroll + uint32_t tmp[4]; + #pragma unroll 4 + for(int j = 0; j < 4; ++j) + tmp[j] = shuffle<8>(sPtr, subv, text[j], (subv + 1) & 7); + #pragma unroll 4 for(int j = 0; j < 4; ++j) - text[j] ^= shuffle<8>(sPtr, subv, text[j], (subv + 1) & 7); + text[j] ^= tmp[j]; } } - MEMCPY8(d_ctx_state + thread * 50 + sub + 16, text, 2); + #pragma unroll 2 + for(int j = 0; j < 2; ++j) + storeGlobal64(d_ctx_state + j, ((uint64_t*)text)[j]); } template @@ -934,9 +898,9 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - grid, - block8, - block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + (grid.x + 1) / 2, + block8.x * 2, + 2 * block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM, ctx->device_blocks * ctx->device_threads, @@ -963,7 +927,7 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ CUDA_CHECK_KERNEL( ctx->device_id, - xmrstak::nvidia::cn_explode_gpu<<>>(MEM, (int*)ctx->d_ctx_state, (int*)ctx->d_long_state)); + xmrstak::nvidia::cn_explode_gpu<<>>(MEM, (int*)ctx->d_ctx_state, (int*)ctx->d_long_state)); int partcount = 1 << ctx->device_bfactor; for(int i = 0; i < partcount; i++) @@ -971,7 +935,7 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ CUDA_CHECK_KERNEL( ctx->device_id, // 36 x 16byte x numThreads - xmrstak::nvidia::cryptonight_core_gpu_phase2_gpu<<device_blocks, ctx->device_threads * 16, 32 * 16 * ctx->device_threads>>>( + xmrstak::nvidia::cryptonight_core_gpu_phase2_gpu<<device_blocks, ctx->device_threads * 16, 33 * 16 * ctx->device_threads>>>( ITERATIONS, MEM, MASK, @@ -986,9 +950,9 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ /* bfactor for phase 3 * * 3 consume less time than phase 2, therefore we begin with the - * kernel splitting if the user defined a `bfactor >= 5` + * kernel splitting if the user defined a `bfactor >= 8` */ - int bfactorOneThree = ctx->device_bfactor - 4; + int bfactorOneThree = ctx->device_bfactor - 8; if(bfactorOneThree < 0) bfactorOneThree = 0; @@ -1005,9 +969,9 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - grid, - block8, - block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + (grid.x + 1) / 2, + block8.x * 2 , + 2 * block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM / 4, ctx->device_blocks * ctx->device_threads, diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp index a66804ecf..516d4ca00 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp @@ -7,6 +7,58 @@ #include "cuda_extra.hpp" #include "cuda_keccak.hpp" +template +__device__ __forceinline__ T loadGlobal64(T* const addr) +{ +#if(__CUDA_ARCH__ < 700) + T x; + asm volatile("ld.global.cg.u64 %0, [%1];" + : "=l"(x) + : "l"(addr)); + return x; +#else + return *addr; +#endif +} + +template +__device__ __forceinline__ T loadGlobal32(T* const addr) +{ +#if(__CUDA_ARCH__ < 700) + T x; + asm volatile("ld.global.cg.u32 %0, [%1];" + : "=r"(x) + : "l"(addr)); + return x; +#else + return *addr; +#endif +} + +template +__device__ __forceinline__ void storeGlobal32(T* addr, T const& val) +{ +#if(__CUDA_ARCH__ < 700) + asm volatile("st.global.cg.u32 [%0], %1;" + : + : "l"(addr), "r"(val)); +#else + *addr = val; +#endif +} + +template +__device__ __forceinline__ void storeGlobal64(T* addr, T const& val) +{ +#if(__CUDA_ARCH__ < 700) + asm volatile("st.global.cg.u64 [%0], %1;" + : + : "l"(addr), "l"(val)); +#else + *addr = val; +#endif +} + namespace xmrstak { namespace nvidia @@ -394,9 +446,10 @@ __forceinline__ __device__ void sync() struct SharedMemChunk { __m128i out[16]; - __m128 va[16]; + __m128 va[17]; }; +__launch_bounds__(128, 8) __global__ void cryptonight_core_gpu_phase2_gpu( const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, int32_t* spad, int* lpad_in, int bfactor, int partidx, uint32_t* roundVs, uint32_t* roundS) @@ -435,10 +488,10 @@ __global__ void cryptonight_core_gpu_phase2_gpu( const uint32_t tidm = tid % 4; const uint32_t block = tidd * 16 + tidm; - for(size_t i = 0; i < batchsize; i++) + for(int i = 0; i < batchsize; i++) { sync(); - int tmp = ((int*)scratchpad_ptr(s, tidd, lpad, MASK))[tidm]; + int tmp = loadGlobal32( ((int*)scratchpad_ptr(s, tidd, lpad, MASK)) + tidm ); ((int*)smem->out)[tid] = tmp; sync(); @@ -458,7 +511,7 @@ __global__ void cryptonight_core_gpu_phase2_gpu( for(uint32_t dd = block + 4; dd < (tidd + 1) * 16; dd += 4) outXor ^= ((int*)smem->out)[dd]; - ((int*)scratchpad_ptr(s, tidd, lpad, MASK))[tidm] = outXor ^ tmp; + storeGlobal32( ((int*)scratchpad_ptr(s, tidd, lpad, MASK)) + tidm, outXor ^ tmp ); ((int*)smem->out)[tid] = outXor; float va_tmp1 = ((float*)smem->va)[block] + ((float*)smem->va)[block + 4]; @@ -528,9 +581,12 @@ __global__ void cn_explode_gpu(const size_t MEMORY, int32_t* spad_in, int* lpad_ uint64_t* spad = (uint64_t*)((uint8_t*)spad_in + blockIdx.x * 200); for(int i = threadIdx.x; i < 25; i += blockDim.x) - state[i] = spad[i]; + state[i] = loadGlobal64(spad + i); - sync(); + if(blockDim.x > 32) + __syncthreads(); + else + sync(); for(uint64_t i = threadIdx.x; i < MEMORY / 512; i += blockDim.x) { diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp index 09cdd6646..ec7e3e0a4 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp @@ -2,24 +2,6 @@ #include "xmrstak/backend/cryptonight.hpp" -#ifdef __INTELLISENSE__ -#define __CUDA_ARCH__ 520 -/* avoid red underlining */ - -struct uint3 -{ - unsigned int x, y, z; -}; - -struct uint3 threadIdx; -struct uint3 blockIdx; -struct uint3 blockDim; -#define __funnelshift_r(a, b, c) 1 -#define __syncthreads() -#define asm(x) -#define __shfl(a, b, c) 1 -#endif - #define AES_BLOCK_SIZE 16 #define AES_KEY_SIZE 32 #define INIT_SIZE_BLK 8 @@ -52,9 +34,10 @@ __forceinline__ __device__ uint64_t cuda_ROTL64(const uint64_t value, const int } return __double_as_longlong(__hiloint2double(result.y, result.x)); } -#define ROTL64(x, n) (cuda_ROTL64(x, n)) + +# define ROTL64(x, n) (cuda_ROTL64(x, n)) #else -#define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) +# define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) #endif #if __CUDA_ARCH__ < 350 @@ -65,6 +48,26 @@ __forceinline__ __device__ uint64_t cuda_ROTL64(const uint64_t value, const int #define ROTR32(x, n) __funnelshift_r((x), (x), (n)) #endif +#if __CUDA_ARCH__ >= 500 +# define BYTE_0(x) __byte_perm(x, 0u, 0x4440) +# define BYTE_1(x) __byte_perm(x, 0u, 0x4441) +# define BYTE_2(x) __byte_perm(x, 0u, 0x4442) +# define BYTE_3(x) __byte_perm(x, 0u, 0x4443) + +# define ROTL32_8(x) __byte_perm(x, x, 0x2103) +# define ROTL32_16(x) __byte_perm(x, x, 0x1032) +# define ROTL32_24(x) __byte_perm(x, x, 0x0321) +#else +# define BYTE_0(x) (((x) ) & 0xff) +# define BYTE_1(x) (((x) >> 8) & 0xff) +# define BYTE_2(x) (((x) >> 16) & 0xff) +# define BYTE_3(x) (((x) >> 24)) + +# define ROTL32_8(x) ROTL32(x, 8) +# define ROTL32_16(x) ROTL32(x, 16) +# define ROTL32_24(x) ROTL32(x, 24) +#endif + #define MEMSET8(dst, what, cnt) \ { \ int i_memset8; \ diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp index 0fe277bd5..5bbc787e3 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp @@ -18,42 +18,50 @@ const 0x8000000000008080, 0x0000000080000001, 0x8000000080008008}; #if __CUDA_ARCH__ >= 350 -__forceinline__ __device__ uint64_t cuda_rotl64(const uint64_t value, const int offset) +/** @param offset must be < 32 + */ +__forceinline__ __device__ uint64_t cuda_rotl64(const uint32_t v0, const uint32_t v1, const int offset) { uint2 result; - if(offset >= 32) - { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.x) - : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.y) - : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); - } - else - { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.x) - : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.y) - : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); - } - return __double_as_longlong(__hiloint2double(result.y, result.x)); + + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.y) + : "r"(v0), "r"(v1), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.x) + : "r"(v1), "r"(v0), "r"(offset)); + + return *((uint64_t*)&result); +} +__device__ __forceinline__ uint64_t rotl64_1(const uint64_t x, const int y) +{ + return cuda_rotl64(((uint32_t*)&x)[0], ((uint32_t*)&x)[1], (y)); +} + +__device__ __forceinline__ uint64_t rotl64_2(const uint64_t x, const int y) +{ + return cuda_rotl64(((uint32_t*)&x)[1], ((uint32_t*)&x)[0], (y)); } -#define rotl64_1(x, y) (cuda_rotl64((x), (y))) + #else + #define rotl64_1(x, y) ((x) << (y) | ((x) >> (64 - (y)))) +__device__ __forceinline__ uint64_t rotl64_2(const uint64_t x, const int y) +{ + uint64_t tmp; + ((uint32_t*)&tmp)[0] = ((uint32_t*)&x)[1]; + ((uint32_t*)&tmp)[1] = ((uint32_t*)&x)[0]; + + return rotl64_1(tmp, (y)); +} #endif -#define rotl64_2(x, y) rotl64_1(((x) >> 32) | ((x) << 32), (y)) + #define bitselect(a, b, c) ((a) ^ ((c) & ((b) ^ (a)))) __device__ __forceinline__ void cn_keccakf2(uint64_t* s) { - uint8_t i; - - for(i = 0; i < 24; ++i) + for(int16_t i = 0; i < 24; ++i) { uint64_t bc[5], tmpxor[5], tmp1, tmp2; From 42112950ebc21c411278d13409f1f6e61016332c Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Fri, 31 May 2019 21:16:22 +0200 Subject: [PATCH 26/62] dev release option - extent cmake flag `XMR-STAK_COMPILE` to create release binaries - disable support for nvidia backend library loading for non release binaries - disable cn_r supoort for linux nvidia backend if release binaries where created --- CMakeLists.txt | 19 +++++++-- xmrstak/backend/backendConnector.cpp | 61 +++++++++++++++++++--------- 2 files changed, 57 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41e993eee..795829e66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,13 +44,13 @@ endif() set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${BUILD_TYPE}") set(XMR-STAK_COMPILE "native" CACHE STRING "select CPU compute architecture") -set_property(CACHE XMR-STAK_COMPILE PROPERTY STRINGS "native;generic") +set_property(CACHE XMR-STAK_COMPILE PROPERTY STRINGS "native;generic;dev_release") if(XMR-STAK_COMPILE STREQUAL "native") if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") set(CMAKE_CXX_FLAGS "-march=native -mtune=native ${CMAKE_CXX_FLAGS}") set(CMAKE_C_FLAGS "-march=native -mtune=native ${CMAKE_C_FLAGS}") endif() -elseif(XMR-STAK_COMPILE STREQUAL "generic") +elseif(XMR-STAK_COMPILE STREQUAL "generic" OR XMR-STAK_COMPILE STREQUAL "dev_release") add_definitions("-DCONF_ENFORCE_OpenCL_1_2=1") else() message(FATAL_ERROR "XMR-STAK_COMPILE is set to an unknown value '${XMR-STAK_COMPILE}'") @@ -496,6 +496,10 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") set(CMAKE_C_FLAGS "-Wl,-z,noexecstack ${CMAKE_C_FLAGS}") endif() +if(XMR-STAK_COMPILE STREQUAL "dev_release") + add_definitions(-DXMRSTAK_DEV_RELEASE) +endif() + # activate static libgcc and libstdc++ linking if(CMAKE_LINK_STATIC) set(BUILD_SHARED_LIBRARIES OFF) @@ -586,7 +590,16 @@ if(CUDA_FOUND) ) endif() - set(CUDA_LIBRARIES ${CUDA_LIB} ${CUDA_NVRTC_LIB} ${CUDA_LIBRARIES}) + set(CUDA_LIBRARIES ${CUDA_LIB} ${CUDA_LIBRARIES}) + if(XMR-STAK_COMPILE STREQUAL "dev_release") + # do not link nvrtc for linux binaries, cn-r will be disabled + if(WIN32) + set(CUDA_LIBRARIES ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB}) + endif() + else() + set(CUDA_LIBRARIES ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB}) + endif() + target_link_libraries(xmrstak_cuda_backend ${CUDA_LIBRARIES}) target_link_libraries(xmrstak_cuda_backend xmr-stak-backend xmr-stak-asm) endif() diff --git a/xmrstak/backend/backendConnector.cpp b/xmrstak/backend/backendConnector.cpp index 808fdca37..93a8fd9d6 100644 --- a/xmrstak/backend/backendConnector.cpp +++ b/xmrstak/backend/backendConnector.cpp @@ -81,31 +81,52 @@ std::vector* BackendConnector::thread_starter(miner_work& pWork) #ifndef CONF_NO_CUDA if(params::inst().useNVIDIA) { + bool disableNvidia = false; + plugin nvidiaplugin; - std::vector libNames = {"xmrstak_cuda_backend_cuda10_0", "xmrstak_cuda_backend_cuda9_2", "xmrstak_cuda_backend"}; +#ifdef XMRSTAK_DEV_RELEASE + std::vector libNames = {"xmrstak_cuda_backend_cuda10_0", "xmrstak_cuda_backend"}; +# ifndef _WIN32 + auto neededAlgorithms = ::jconf::inst()->GetCurrentCoinSelection().GetAllAlgorithms(); + bool cn_r_derivate = + std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_r) != neededAlgorithms.end() || + std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_r_wow) != neededAlgorithms.end(); + + if(cn_r_derivate) + { + disableNvidia = true; + printer::inst()->print_msg(L0, "WARNING: The linux release binaries not support cryptonight_r derived coins for NVIDIA."); + } +# endif +#else + std::vector libNames = {"xmrstak_cuda_backend"}; +#endif size_t numWorkers = 0u; - for(const auto& name : libNames) + if(!disableNvidia) { - printer::inst()->print_msg(L0, "NVIDIA: try to load library '%s'", name.c_str()); - nvidiaplugin.load("NVIDIA", name); - std::vector* nvidiaThreads = nvidiaplugin.startBackend(static_cast(pvThreads->size()), pWork, environment::inst()); - if(nvidiaThreads != nullptr) - { - pvThreads->insert(std::end(*pvThreads), std::begin(*nvidiaThreads), std::end(*nvidiaThreads)); - numWorkers = nvidiaThreads->size(); - delete nvidiaThreads; - } - else - { - // remove the plugin if we have found no GPUs - nvidiaplugin.unload(); - } - // we found at leat one working GPU - if(numWorkers != 0) + for(const auto& name : libNames) { - printer::inst()->print_msg(L0, "NVIDIA: use library '%s'", name.c_str()); - break; + printer::inst()->print_msg(L0, "NVIDIA: try to load library '%s'", name.c_str()); + nvidiaplugin.load("NVIDIA", name); + std::vector* nvidiaThreads = nvidiaplugin.startBackend(static_cast(pvThreads->size()), pWork, environment::inst()); + if(nvidiaThreads != nullptr) + { + pvThreads->insert(std::end(*pvThreads), std::begin(*nvidiaThreads), std::end(*nvidiaThreads)); + numWorkers = nvidiaThreads->size(); + delete nvidiaThreads; + } + else + { + // remove the plugin if we have found no GPUs + nvidiaplugin.unload(); + } + // we found at leat one working GPU + if(numWorkers != 0) + { + printer::inst()->print_msg(L0, "NVIDIA: use library '%s'", name.c_str()); + break; + } } } if(numWorkers == 0) From 92780adf4ccc031710a42494043b39449ee90bf5 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 8 Jun 2019 20:59:03 +0200 Subject: [PATCH 27/62] increase version to 2.10.5 --- xmrstak/version.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index f42e2a0bf..70041ec97 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -20,7 +20,7 @@ #endif #define XMR_STAK_NAME "xmr-stak" -#define XMR_STAK_VERSION "2.10.4" +#define XMR_STAK_VERSION "2.10.5" #if defined(_WIN32) #define OS_TYPE "win" From a2d6c1abdf5a7bbd9d0f3962f533f3dbe5f37799 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 8 Jun 2019 20:55:32 +0200 Subject: [PATCH 28/62] OpenCL: rocm shuffle - use native rocm shuffle function - chnage local memory access pattern --- xmrstak/backend/amd/amd_gpu/gpu.cpp | 6 +- .../backend/amd/amd_gpu/opencl/cryptonight.cl | 247 +++++++++++------- 2 files changed, 151 insertions(+), 102 deletions(-) diff --git a/xmrstak/backend/amd/amd_gpu/gpu.cpp b/xmrstak/backend/amd/amd_gpu/gpu.cpp index 77857612e..3c4384722 100644 --- a/xmrstak/backend/amd/amd_gpu/gpu.cpp +++ b/xmrstak/backend/amd/amd_gpu/gpu.cpp @@ -1280,17 +1280,17 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner } } - if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[2], 2, Nonce, gthreads, lthreads, 0, NULL, NULL)) != CL_SUCCESS) + size_t NonceT[2] = {0, ctx->Nonce}, gthreadsT[2] = {8, g_thd}, lthreadsT[2] = {8 , w_size}; + if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[2], 2, NonceT, gthreadsT, lthreadsT, 0, NULL, NULL)) != CL_SUCCESS) { printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 2); - return ERR_OCL_API; + return ERR_OCL_API; } if(miner_algo != cryptonight_gpu) { for(int i = 0; i < 4; ++i) { - size_t tmpNonce = ctx->Nonce; if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[i + 3], 1, &tmpNonce, &g_thd, &w_size, 0, NULL, NULL)) != CL_SUCCESS) { printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), i + 3); diff --git a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl index 471e46a53..29ab63aad 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl @@ -867,9 +867,14 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states } )===" - R"===( +R"===( +#if defined(__clang__) +# if __has_builtin(__builtin_amdgcn_ds_bpermute) +# define HAS_AMD_BPERMUTE 1 +# endif +#endif -__attribute__((reqd_work_group_size(8, 8, 1))) +__attribute__((reqd_work_group_size(8, WORKSIZE, 1))) __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states, #if (ALGO == cryptonight_gpu) @@ -878,88 +883,123 @@ __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states __global uint *Branch0, __global uint *Branch1, __global uint *Branch2, __global uint *Branch3, uint Threads) #endif { - __local uint AES0[256], AES1[256], AES2[256], AES3[256]; - uint ExpandedKey2[40]; - uint4 text; + __local uint AES0[256], AES1[256], AES2[256], AES3[256]; + uint ExpandedKey2[40]; + uint4 text; - const uint gIdx = getIdx(); + uint gIdx = get_global_id(1) - get_global_offset(1); + uint groupIdx = get_local_id(1); + uint lIdx = get_local_id(0); - for (int i = get_local_id(1) * 8 + get_local_id(0); i < 256; i += 8 * 8) { - const uint tmp = AES0_C[i]; - AES0[i] = tmp; - AES1[i] = rotate(tmp, 8U); - AES2[i] = rotate(tmp, 16U); - AES3[i] = rotate(tmp, 24U); - } + for (int i = groupIdx * 8 + lIdx; i < 256; i += get_local_size(0) * get_local_size(1)) { + const uint tmp = AES0_C[i]; + AES0[i] = tmp; + AES1[i] = rotate(tmp, 8U); + AES2[i] = rotate(tmp, 16U); + AES3[i] = rotate(tmp, 24U); + } - barrier(CLK_LOCAL_MEM_FENCE); + barrier(CLK_LOCAL_MEM_FENCE); #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) - __local uint4 xin1[8][8]; - __local uint4 xin2[8][8]; + __local uint4 xin1[WORKSIZE][8]; + __local uint4 xin2[WORKSIZE][8]; #endif #if(COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) + // do not use early return here + if(gIdx < Threads) #endif - { - states += 25 * gIdx; + { + states += 25 * gIdx; #if(STRIDED_INDEX==0) - Scratchpad += gIdx * (MEMORY >> 4); + Scratchpad += gIdx * (MEMORY >> 4); #elif(STRIDED_INDEX==1) - Scratchpad += gIdx; + Scratchpad += gIdx; #elif(STRIDED_INDEX==2) - Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + MEM_CHUNK * (gIdx % WORKSIZE); + Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + MEM_CHUNK * (gIdx % WORKSIZE); #elif(STRIDED_INDEX==3) - Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + (gIdx % WORKSIZE); + Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + (gIdx % WORKSIZE); #endif - #if defined(__Tahiti__) || defined(__Pitcairn__) + #if defined(__Tahiti__) || defined(__Pitcairn__) - for(int i = 0; i < 4; ++i) ((ulong *)ExpandedKey2)[i] = states[i + 4]; - text = vload4(get_local_id(1) + 4, (__global uint *)states); + for(int i = 0; i < 4; ++i) ((ulong *)ExpandedKey2)[i] = states[i + 4]; + text = vload4(lIdx + 4, (__global uint *)states); - #else + #else + text = vload4(lIdx + 4, (__global uint *)states); + ((uint8 *)ExpandedKey2)[0] = vload8(1, (__global uint *)states); - text = vload4(get_local_id(1) + 4, (__global uint *)states); - ((uint8 *)ExpandedKey2)[0] = vload8(1, (__global uint *)states); + #endif - #endif - - AESExpandKey256(ExpandedKey2); - } + AESExpandKey256(ExpandedKey2); + } - barrier(CLK_LOCAL_MEM_FENCE); + barrier(CLK_LOCAL_MEM_FENCE); #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) - __local uint4* xin1_store = &xin1[get_local_id(1)][get_local_id(0)]; - __local uint4* xin1_load = &xin1[(get_local_id(1) + 1) % 8][get_local_id(0)]; - __local uint4* xin2_store = &xin2[get_local_id(1)][get_local_id(0)]; - __local uint4* xin2_load = &xin2[(get_local_id(1) + 1) % 8][get_local_id(0)]; - *xin2_store = (uint4)(0, 0, 0, 0); +# if (HAS_AMD_BPERMUTE == 1) + int lane = (groupIdx * 8 + ((lIdx + 1) % 8)) << 2; + uint4 tmp = (uint4)(0, 0, 0, 0); +# else + __local uint4* xin1_store = &xin1[groupIdx][lIdx]; + __local uint4* xin1_load = &xin1[groupIdx][(lIdx + 1) % 8]; + __local uint4* xin2_store = &xin2[groupIdx][lIdx]; + __local uint4* xin2_load = &xin2[groupIdx][(lIdx + 1) % 8]; + *xin2_store = (uint4)(0, 0, 0, 0); +# endif #endif #if(COMP_MODE == 1) - // do not use early return here - if (gIdx < Threads) + // do not use early return here + if (gIdx < Threads) #endif - { + { #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) + +# if (HAS_AMD_BPERMUTE == 1) + #pragma unroll 2 + for(int i = 0, i1 = lIdx; i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) + { + text ^= Scratchpad[IDX((uint)i1)]; + text ^= tmp; + + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + + text.s0 ^= __builtin_amdgcn_ds_bpermute(lane, text.s0); + text.s1 ^= __builtin_amdgcn_ds_bpermute(lane, text.s1); + text.s2 ^= __builtin_amdgcn_ds_bpermute(lane, text.s2); + text.s3 ^= __builtin_amdgcn_ds_bpermute(lane, text.s3); + //__builtin_amdgcn_s_waitcnt(0); + text ^= Scratchpad[IDX((uint)i1 + 8u)]; + + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + tmp.s0 = __builtin_amdgcn_ds_bpermute(lane, text.s0); + tmp.s1 = __builtin_amdgcn_ds_bpermute(lane, text.s1); + tmp.s2 = __builtin_amdgcn_ds_bpermute(lane, text.s2); + tmp.s3 = __builtin_amdgcn_ds_bpermute(lane, text.s3); + //__builtin_amdgcn_s_waitcnt(0); + } + + text ^= tmp; +# else + #pragma unroll 2 - for(int i = 0, i1 = get_local_id(1); i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) + for(int i = 0, i1 = lIdx; i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) { text ^= Scratchpad[IDX((uint)i1)]; barrier(CLK_LOCAL_MEM_FENCE); text ^= *xin2_load; - #pragma unroll 10 for(int j = 0; j < 10; ++j) text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); - *xin1_store = text; - text ^= Scratchpad[IDX((uint)i1 + 8u)]; barrier(CLK_LOCAL_MEM_FENCE); text ^= *xin1_load; @@ -971,83 +1011,92 @@ __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states *xin2_store = text; } - barrier(CLK_LOCAL_MEM_FENCE); - text ^= *xin2_load; + barrier(CLK_LOCAL_MEM_FENCE); + text ^= *xin2_load; +# endif #else - #pragma unroll 2 - for (int i = 0; i < (MEMORY >> 7); ++i) { - text ^= Scratchpad[IDX((uint)((i << 3) + get_local_id(1)))]; - - #pragma unroll 10 - for(int j = 0; j < 10; ++j) - text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); - } + #pragma unroll 2 + for (int i = 0; i < (MEMORY >> 7); ++i) + { + text ^= Scratchpad[IDX((uint)((i << 3) + lIdx))]; + + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + } #endif - } + } #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) - /* Also left over threads performe this loop. - * The left over thread results will be ignored - */ - #pragma unroll 16 - for(size_t i = 0; i < 16; i++) - { - #pragma unroll 10 - for (int j = 0; j < 10; ++j) { - text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); - } - - barrier(CLK_LOCAL_MEM_FENCE); - *xin1_store = text; - barrier(CLK_LOCAL_MEM_FENCE); - text ^= *xin1_load; - } + /* Also left over threads performe this loop. + * The left over thread results will be ignored + */ + #pragma unroll 16 + for(size_t i = 0; i < 16; i++) + { + #pragma unroll 10 + for (int j = 0; j < 10; ++j) { + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + } +#if (HAS_AMD_BPERMUTE == 1) + text.s0 ^= __builtin_amdgcn_ds_bpermute(lane, text.s0); + text.s1 ^= __builtin_amdgcn_ds_bpermute(lane, text.s1); + text.s2 ^= __builtin_amdgcn_ds_bpermute(lane, text.s2); + text.s3 ^= __builtin_amdgcn_ds_bpermute(lane, text.s3); + //__builtin_amdgcn_s_waitcnt(0); +#else + barrier(CLK_LOCAL_MEM_FENCE); + *xin1_store = text; + barrier(CLK_LOCAL_MEM_FENCE); + text ^= *xin1_load; +#endif + } #endif - __local ulong State_buf[8 * 25]; + __local ulong State_buf[8 * 25]; #if(COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) + // do not use early return here + if(gIdx < Threads) #endif - { - vstore2(as_ulong2(text), get_local_id(1) + 4, states); - } + { + vstore2(as_ulong2(text), lIdx + 4, states); + } - barrier(CLK_GLOBAL_MEM_FENCE); + barrier(CLK_GLOBAL_MEM_FENCE); #if(COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) + // do not use early return here + if(gIdx < Threads) #endif - { - if(!get_local_id(1)) - { - __local ulong* State = State_buf + get_local_id(0) * 25; + { + if(!lIdx) + { + __local ulong* State = State_buf + groupIdx * 25; - for(int i = 0; i < 25; ++i) State[i] = states[i]; + for(int i = 0; i < 25; ++i) State[i] = states[i]; - keccakf1600_2(State); + keccakf1600_2(State); #if (ALGO == cryptonight_gpu) if(State[3] <= Target) { ulong outIdx = atomic_inc(output + 0xFF); if(outIdx < 0xFF) - output[outIdx] = get_global_id(0); + output[outIdx] = get_global_id(1); } #else - for(int i = 0; i < 25; ++i) states[i] = State[i]; + for(int i = 0; i < 25; ++i) states[i] = State[i]; - uint StateSwitch = State[0] & 3; - __global uint *destinationBranch1 = StateSwitch == 0 ? Branch0 : Branch1; - __global uint *destinationBranch2 = StateSwitch == 2 ? Branch2 : Branch3; - __global uint *destinationBranch = StateSwitch < 2 ? destinationBranch1 : destinationBranch2; - destinationBranch[atomic_inc(destinationBranch + Threads)] = gIdx; + uint StateSwitch = State[0] & 3; + __global uint *destinationBranch1 = StateSwitch == 0 ? Branch0 : Branch1; + __global uint *destinationBranch2 = StateSwitch == 2 ? Branch2 : Branch3; + __global uint *destinationBranch = StateSwitch < 2 ? destinationBranch1 : destinationBranch2; + destinationBranch[atomic_inc(destinationBranch + Threads)] = gIdx; #endif - } - } - mem_fence(CLK_GLOBAL_MEM_FENCE); + } + } + mem_fence(CLK_GLOBAL_MEM_FENCE); } )===" From 0745a5d6160c0eb4eb299bf05ab9077e6d7533e2 Mon Sep 17 00:00:00 2001 From: Soroush Mirzaei Date: Wed, 19 Jun 2019 13:55:04 +0430 Subject: [PATCH 29/62] Updated the broken links in usage.md --- doc/usage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/usage.md b/doc/usage.md index 82d26dcc5..a81387edf 100644 --- a/doc/usage.md +++ b/doc/usage.md @@ -1,9 +1,9 @@ # HowTo Use xmr-stak ## Content Overview -* [Configuration](#configuration) +* [Configurations](#configurations) * [Usage on Windows](#usage-on-windows) -* [Usage on Linux](#usage-on-linux) +* [Usage on Linux & macOS](#usage-on-linux--macos) * [Command Line Options](#command-line-options) * [Use different backends](#use-different-backends) * [HTML and JSON API report configuraton](#html-and-json-api-report-configuraton) From 9c25bc799c3d8dab39b7b2686de44b88d0d4c833 Mon Sep 17 00:00:00 2001 From: Ryo-RU Date: Mon, 24 Jun 2019 18:48:59 +0200 Subject: [PATCH 30/62] doc edits and fixes --- README.md | 63 ++++++---- doc/FAQ.md | 89 +------------ doc/{img => _img}/interleave.png | Bin doc/_img/stak-yt-cover.jpg | Bin 0 -> 88047 bytes doc/{ => compile}/compile.md | 0 doc/{ => compile}/compile_FreeBSD.md | 0 doc/{ => compile}/compile_Linux.md | 0 doc/{ => compile}/compile_Windows.md | 0 doc/{ => compile}/compile_macOS.md | 0 doc/troubleshooting.md | 119 ++++++++++++++++++ doc/tuning.md | 180 +++++++++++++++------------ doc/usage.md | 6 +- 12 files changed, 270 insertions(+), 187 deletions(-) rename doc/{img => _img}/interleave.png (100%) create mode 100644 doc/_img/stak-yt-cover.jpg rename doc/{ => compile}/compile.md (100%) rename doc/{ => compile}/compile_FreeBSD.md (100%) rename doc/{ => compile}/compile_Linux.md (100%) rename doc/{ => compile}/compile_Windows.md (100%) rename doc/{ => compile}/compile_macOS.md (100%) create mode 100644 doc/troubleshooting.md diff --git a/README.md b/README.md index 7622758e3..9ffb0b9fc 100644 --- a/README.md +++ b/README.md @@ -1,73 +1,88 @@ ###### fireice-uk's and psychocrypt's -# XMR-Stak - Cryptonight All-in-One Mining Software +# XMR-Stak: Cryptonight All-in-One Mining Software -XMR-Stak is a universal Stratum pool miner. This miner supports CPUs, AMD and NVIDIA GPUs and can be used to mine the crypto currencies Monero, Aeon and many more Cryptonight coins. +XMR-Stak is a universal open source stratum pool miner. This miner supports CPUs, AMD and NVIDIA GPUs and can be used various crypto currencies: Ryo, Monero, Turtlecoin, Graft, Bittube, Loki, Aeon and many more Cryptonight coins. -## HTML reports - -## Video setup guide on Windows -[](https://youtu.be/YNMa8NplWus) +## Video guides +[](https://www.youtube.com/playlist?list=PLAhUkom29iGMFoN8pk91JA-oqvxlmJ5H8) ###### Video by Crypto Sewer ## Overview * [Features](#features) -* [Supported altcoins](#supported-altcoins) +* [Supported coins and algorithms](#supported-coins-and-algorithms) * [Download](#download) -* [Usage](doc/usage.md) -* [HowTo Compile](doc/compile.md) * [FAQ](doc/FAQ.md) * [Developer Donation](#default-developer-donation) * [Developer PGP Key's](doc/pgp_keys.md) +## Guides and FAQ +To improve our support we created [Xmr-Stak forum](https://www.reddit.com/r/XmrStak). Check it out if you have a problem, or you are looking for most up to date config for your card and [guides](https://www.reddit.com/r/XmrStak/wiki/index). +* [Usage](doc/usage.md) +* [How to compile](doc/compile/compile.md) +* [Fine tuning](doc/tuning.md) +* [FAQ](doc/FAQ.md) +* [Troubleshooting](doc/troubleshooting.md) (Fixing common problems) + ## Features -- support all common backends (CPU/x86, AMD-GPU and NVIDIA-GPU) -- support all common OS (Linux, Windows and macOS) -- supports algorithm cryptonight for Monero (XMR) and cryptonight-light (AEON) -- easy to use - - guided start (no need to edit a config file for the first start) - - auto-configuration for each backend -- open source software (GPLv3) -- TLS support +- Supports all common backends (CPU/x86, AMD/NVIDIA GPU). +- Supports all common OS (Linux, Windows and macOS). +- Supports 15 cryptonight-variant mining algorithms + Cryptonight-GPU. +- Easy to use and flexible in setup: + - guided start with easy/advanced setup option (no need to edit a config file for the first start) + - auto-configuration and config file creation for each backend. +- Open source software (GPLv3) +- TLS support. - [HTML statistics](doc/usage.md#html-and-json-api-report-configuraton) - [JSON API for monitoring](doc/usage.md#html-and-json-api-report-configuraton) -## Supported altcoins +## HTML reports + + +## Supported coins and algorithms + +Following coins can be mined using this miner: -Besides [Monero](https://getmonero.org), following coins can be mined using this miner: - [Aeon](http://www.aeon.cash) -- [BBSCoin](https://www.bbscoin.xyz) - [BitTube](https://coin.bit.tube/) - [Conceal](https://conceal.network) - [Graft](https://www.graft.network) - [Haven](https://havenprotocol.com) - [Lethean](https://lethean.io) +- [Loki](https://loki.network/) - [Masari](https://getmasari.org) +- [Monero](https://getmonero.org) - [Plenteum](https://www.plenteum.com/) - [QRL](https://theqrl.org) -- **[Ryo](https://ryo-currency.com) - Upcoming xmr-stak-gui is sponsored by Ryo** +- **[Ryo](https://ryo-currency.com) - Upcoming xmr-stak-gui is sponsored by Ryo Currency** - [Torque](https://torque.cash/) - [TurtleCoin](https://turtlecoin.lol) - [Zelerius](https://zelerius.org/) - [X-CASH](https://x-network.io/) -Ryo currency is a way for us to implement the ideas that we were unable to in +**[Ryo Currency](https://ryo-currency.com)** - is a way for us to implement the ideas that we were unable to in Monero. See [here](https://github.com/fireice-uk/cryptonote-speedup-demo/) for details. -If your prefered coin is not listed, you can choose one of the following algorithms: +If your preferred coin is not listed, you can choose one of the following mining algorithms: - 256Kib scratchpad memory - cryptonight_turtle + + - 1MiB scratchpad memory - cryptonight_lite - cryptonight_lite_v7 - cryptonight_lite_v7_xor (algorithm used by ipbc) + + - 2MiB scratchpad memory - cryptonight - cryptonight_gpu (for Ryo's 14th of Feb fork) + - cryptonight_r - cryptonight_masari (used in 2018) + - cryptonight_conceal - cryptonight_v7 - cryptonight_v7_stellite - cryptonight_v8 @@ -75,6 +90,8 @@ If your prefered coin is not listed, you can choose one of the following algorit - cryptonight_v8_half (used by masari and torque) - cryptonight_v8_reversewaltz (used by graft) - cryptonight_v8_zelerius + + - 4MiB scratchpad memory - cryptonight_haven - cryptonight_heavy diff --git a/doc/FAQ.md b/doc/FAQ.md index f744e3d24..b78ac15cb 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -1,104 +1,27 @@ # FAQ +To improve our support we created [Xmr-Stak forum](https://www.reddit.com/r/XmrStak). Check it out if you have a problem, or you are looking for most up to date config for your card and [guides](https://www.reddit.com/r/XmrStak/wiki/index). + ## Content Overview -* ["Obtaining SeLockMemoryPrivilege failed."](#obtaining-selockmemoryprivilege-failed) -* [VirtualAlloc failed](#virtualalloc-failed) -* [Error msvcp140.dll and vcruntime140.dll not available](#error-msvcp140dll-and-vcruntime140dll-not-available) -* [Error: MEMORY ALLOC FAILED: mmap failed](#error-memory-alloc-failed-mmap-failed) -* [Illegal instruction (core dumped)](#illegal-instruction) * [Virus Protection Alert](#virus-protection-alert) * [Change Currency to Mine](#change-currency-to-mine) * [How can I mine Monero](#how-can-i-mine-monero) * [Which currency must be chosen if my fork coin is not listed](#which-currency-must-be-chosen-if-my-fork-coin-is-not-listed) -* [Internal compiler error: Killed (program cc1plus)](#internal-compiler-error) - -## "Obtaining SeLockMemoryPrivilege failed." - -For professional versions of Windows see [this article](https://msdn.microsoft.com/en-gb/library/ms190730.aspx). -Make sure to reboot afterwards! - -For Windows 7/10 Home: - -1) Download and install [Windows Server 2003 Resource Kit Tools](https://www.microsoft.com/en-us/download/details.aspx?id=17657). Ignore any incompatibility warning during installation. - -2) Open cmd or PowerShell as an administrator. - -3) Use `ntrights -u %USERNAME% +r SeLockMemoryPrivilege` where %USERNAME% is the user that will be running the program. - -4) Reboot. - -Reference: http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?pid=259791#pid259791 - -*Warning: Do not download ntrights.exe from any other site other than the offical Microsoft download page.* - -## VirtualAlloc failed - -If you set up the user rights properly ([see above](https://github.com/fireice-uk/xmr-stak/blob/master/doc/FAQ.md#selockmemoryprivilege-failed)), and your system has 4-8GB of RAM (50%+ use), there is a significant chance that there simply won't be a large enough chunk of contiguous memory because Windows is fairly bad at mitigating memory fragmentation. - -If that happens, disable all auto-starting applications and run the miner after a reboot. - -## Error msvcp140.dll and vcruntime140.dll not available - -Download and install this [runtime package](https://go.microsoft.com/fwlink/?LinkId=746572) from Microsoft. *Warning: Do NOT use "missing dll" sites - dll's are exe files with another name, and it is a fairly safe bet that any dll on a shady site like that will be trojaned. Please download offical runtimes from Microsoft above.* - - -## Error: MEMORY ALLOC FAILED: mmap failed - -On Linux you will need to configure large page support and increase your memlock limit (`ulimit -l`). - -Never put settings directly into `/etc/sysctl.conf` or `/etc/security/limits.conf` as those are system defaults and can be replaced in upgrades, and custom settings in that file are deprecated in all distros since at least wheezy/trusty (has been illegal in RedHat based distros for longer than that), and will be even more deprecated with systemd (it no longer even reads sysctl.conf, ONLY sysctl.d files, for example - there is a link to the old `/etc/sysctl.conf` for backward compatibility but that can go away at any time). Also adding to `/etc/rc.local` is extra incorrect, systemd does not even use that file anymore (once the sysvinit compatibility layer is gone, rc.local will no longer work). - -To check current settings, run `/sbin/sysctl vm.nr_hugepages ; ulimit -l` as whatever user you will run `xmr-stak` as (example shows bad/low sample defaults): - - $ /sbin/sysctl vm.nr_hugepages ; ulimit -l - vm.nr_hugepages = 0 - 16 - -To set large page support, add the following lines to `/etc/sysctl.d/60-hugepages.conf`: - - vm.nr_hugepages=128 - -You WILL need to run `sudo sysctl --system` for these settings to take effect on your system (or reboot). In some cases (many threads, very large CPU, etc) you may need more than 128 (try 256 if there are still complaints from thread inits) - -To increase the memlock (ulimit -l), add following lines to `/etc/security/limits.d/60-memlock.conf`: - - * - memlock 262144 - root - memlock 262144 - -You WILL need to log out and log back in for these settings to take effect on your user (no need to reboot, just relogin in your session). -Recheck after completing these steps to validate: - - $ /sbin/sysctl vm.nr_hugepages ; ulimit -l - vm.nr_hugepages = 128 - 262144 - -You can also do it Windows-style and simply run-as-root, but this is NOT recommended for security reasons. Also running as root does not properly get around the `ulimit -l` being large enough (and limits `*` does not apply to `root` either, it must be specified explicitly). - -## Illegal Instruction - -This typically means you are trying to run it on a CPU that does not have [AES](https://en.wikipedia.org/wiki/AES_instruction_set). This only happens on older version of miner, new version gives better error message (but still wont' work since your CPU doesn't support the required instructions). - -## Virus Protection Alert +### Virus Protection Alert Some virus protection software flags the miner binary as *malware*. This is a false positive — the software does not contain any malware (and since it is open source, you can verify that yourself!) If your antivirus software flags **xmr-stak**, it will likely move it to its quarantine area. You may have to whitelist **xmr-stak** in your antivirus. -## Change Currency to Mine - +### Change Currency to Mine If the miner is compiled for Monero and Aeon than you can change - the value `currency` in the config *or* - start the miner with the [command line option](usage.md) `--currency monero` or `--currency aeon7` - run `xmr-stak --help` to see all supported currencies and algorithms -## How can I mine Monero - +### How can I mine Monero Set the value `currency` in `pools.txt` to `monero`. -## Which currency must be chosen if my fork coin is not listed - +### Which currency must be chosen if my fork coin is not listed If your coin you want to mine is not listed please check the documentation of the coin and try to find out if `cryptonight` or `cryptonight-lite` is the used algorithm. Select one of these generic coin algorithms. -## Internal compiler error - -Seeing `g++: internal compiler error: Killed (program cc1plus)` is probably related to not enough RAM to compile. 1 Gb RAM should be enough (it is on clean Ubuntu 16.04). diff --git a/doc/img/interleave.png b/doc/_img/interleave.png similarity index 100% rename from doc/img/interleave.png rename to doc/_img/interleave.png diff --git a/doc/_img/stak-yt-cover.jpg b/doc/_img/stak-yt-cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff21acebf00aedac991a01b8d449ee86f8387b37 GIT binary patch literal 88047 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•PY_`7hGLE8+%cynMq@CFW+?`p=pGWiI{9pU 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
5sZDo6FMzc-oIUqnVZ%CwS3eGo-U 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 z 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 Mg3*EjD|WvBAAZF2b^rhX literal 0 HcmV?d00001 diff --git a/doc/compile.md b/doc/compile/compile.md similarity index 100% rename from doc/compile.md rename to doc/compile/compile.md diff --git a/doc/compile_FreeBSD.md b/doc/compile/compile_FreeBSD.md similarity index 100% rename from doc/compile_FreeBSD.md rename to doc/compile/compile_FreeBSD.md diff --git a/doc/compile_Linux.md b/doc/compile/compile_Linux.md similarity index 100% rename from doc/compile_Linux.md rename to doc/compile/compile_Linux.md diff --git a/doc/compile_Windows.md b/doc/compile/compile_Windows.md similarity index 100% rename from doc/compile_Windows.md rename to doc/compile/compile_Windows.md diff --git a/doc/compile_macOS.md b/doc/compile/compile_macOS.md similarity index 100% rename from doc/compile_macOS.md rename to doc/compile/compile_macOS.md diff --git a/doc/troubleshooting.md b/doc/troubleshooting.md new file mode 100644 index 000000000..fb0dc88ce --- /dev/null +++ b/doc/troubleshooting.md @@ -0,0 +1,119 @@ +# Troubleshooting +To improve our support we created [Xmr-Stak forum](https://www.reddit.com/r/XmrStak). Check it out if you have a problem, or you are looking for most up to date config for your card and [guides](https://www.reddit.com/r/XmrStak/wiki/index). + + +### 1. CL_MEM_OBJECT_ALLOCATION_FAILURE when calling clEnqueue +This error means that GPU can't allocate the requested amount of memory that is specified by your config. There is 2 known solutions of this problem: + +* Check if you occasionally use too many threads per one GPU (check *index* value in amd.txt) +* You set too high `intensity` value in amd.txt - try to reduce it to lower values (multiple to `worksize`) +* If you are using Windows - you may have not enough virtual memory in system. Add virtual memory (don't be afraid if it goes up to 60gb per 6 GPU rig) + + + +### 2. GPU is not detected +Check if you have antivirus software turned on. If yes - it could delete some .dll files (for example xmrstak\_cuda\_backend\_cuda10\_0.dll) + + + +### 3. Illegal Instruction +This typically means you are trying to run it on a CPU that does not have [AES](https://en.wikipedia.org/wiki/AES_instruction_set). This only happens on older version of miner, new version gives better error message (but still wont' work since your CPU doesn't support the required instructions). + + + +### 4. Internal compiler error +Seeing `g++: internal compiler error: Killed (program cc1plus)`is probably related to not enough RAM to compile. 1 Gb RAM should be enough (on clean Ubuntu 16.04). + + + +### 5. Invalid Result GPU ID +This error can be caused by several reasons, here is most common, known successful practices how to fix it: + +* **Hardware problem: overclock/overvoltage/undervoltage** \- try to use stock clocks and voltages. +* **Software problem: drivers** \- try to change driver versions (for AMD gpu most commonly stable versions are: blockchain drivers or 18.6.1) +* **Miner misconfiguration** \- try to reduce `intensity` (if AMD) or `threads` or `bfactor` (if NVIDIA) in config file. + +If you still receive these errors, [report please the issue](https://github.com/fireice-uk/xmr-stak/issues). + + +### 6. IP is banned +Pool has banned your IP, This can be caused by several reasons: + +* You selected wrong pool port or the static diff is too low. (Learn more about [pool ports and diff](https://www.reddit.com/r/XmrStak/wiki/guides/other-questions#wiki_1._pool_ports_and_difficulty)) +* You had too many [invalid shares \[8\]](https://www.reddit.com/r/XmrStak/wiki/troubleshooting#wiki_8._invalid_result_gpu_id) + + + +### 7. MEMORY ALLOC FAILED: mmap failed +On Linux you will need to configure large page support and increase your memlock limit (`ulimit -l`). + +Never put settings directly into `/etc/sysctl.conf` or `/etc/security/limits.conf` as those are system defaults and can be replaced in upgrades, and custom settings in that file are deprecated in all distros since at least wheezy/trusty (has been illegal in RedHat based distros for longer than that), and will be even more deprecated with systemd (it no longer even reads sysctl.conf, ONLY sysctl.d files, for example - there is a link to the old `/etc/sysctl.conf` for backward compatibility but that can go away at any time). Also adding to `/etc/rc.local` is extra incorrect, systemd does not even use that file anymore (once the sysvinit compatibility layer is gone, rc.local will no longer work). To check current settings, run `/sbin/sysctl vm.nr_hugepages ; ulimit -l` as whatever user you will run xmr-stak as (example shows bad/low sample defaults): + + $ /sbin/sysctl vm.nr_hugepages ; ulimit -l vm.nr_hugepages = 0 16 + +To set large page support, add the following lines to `/etc/sysctl.d/60-hugepages.conf`: + + vm.nr_hugepages=128 + +You WILL need to run `sudo sysctl --system` for these settings to take effect on your system (or reboot). In some cases (many threads, very large CPU, etc) you may need more than 128 (try 256 if there are still complaints from thread inits) + +To increase the memlock (`ulimit -l`), add following lines to `/etc/security/limits.d/60-memlock.conf`: + + * - memlock 262144 root - memlock 262144 + +You WILL need to log out and log back in for these settings to take effect on your user (no need to reboot, just relogin in your session). Recheck after completing these steps to validate: + + $ /sbin/sysctl vm.nr_hugepages ; ulimit -l vm.nr_hugepages = 128 262144 + +You can also do it Windows-style and simply run-as-root, but this is NOT recommended for security reasons. Also running as root does not properly get around the `ulimit -l` being large enough (and limits `*` does not apply to `root` either, it must be specified explicitly). + + +### 8. msvcp140.dll and vcruntime140.dll are not available +Download and install this [runtime package](https://go.microsoft.com/fwlink/?LinkId=746572) from Microsoft. + +>***Warning***\*: Do NOT use "missing dll" sites - dll's are exe files with another name, and it is a fairly safe bet that any dll on a shady site like that will be trojaned. Please download offical runtimes from Microsoft above.\* + + + +###9. Obtaining SeLockMemoryPrivilege failed. +For professional versions of Windows see [this article](https://msdn.microsoft.com/en-gb/library/ms190730.aspx). Make sure to reboot afterwards! + +**For Windows 7/10 Home:** + +1. Download and install [Windows Server 2003 Resource Kit Tools](https://www.microsoft.com/en-us/download/details.aspx?id=17657). Ignore any incompatibility warning during installation. +2. Open cmd or PowerShell as an administrator. +3. `Use ntrights -u %USERNAME% +r SeLockMemoryPrivilege`where `%USERNAME%` is the user that will be running the program. +4. Reboot. + +Reference: [http://rybkaforum.net/cgi-bin/rybkaforum/topic\_show.pl?pid=259791#pid259791](http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?pid=259791#pid259791) + +*Warning: Do not download ntrights.exe from any other site other than the offical Microsoft download page.* + + +### 10. Share rejected - Low diff share +Check if a coin that you are mining has changed algorithm in one of its forks and you use right hashing algorithm in pools.txt (parameter: `currency`). + + + +### 11. VirtualAlloc failed +If you set up the user rights properly ([see issue #7](https://www.reddit.com/r/XmrStak/wiki/troubleshooting#wiki_7._memory_alloc_failed.3A_mmap_failed)), and your system has 4-8GB of RAM (and 50%+ is in use), there is a significant chance that there simply won't be a large enough chunk of contiguous memory because Windows is fairly bad at mitigating memory fragmentation. + +If that happens, disable all auto-starting applications and run the miner after a reboot. + + +### 12. (Ubuntu compiling) - Nvidia insufficient driver +If you have this error after compiling xmr-stak in Ubuntu - make sure you have the latest drivers and not X.org.X Nouveau or v390. Install them manually or with [cuda package](https://www.reddit.com/r/XmrStak/wiki/guides/startup#wiki_2._ubuntu_18.10_setup_.2B_nvidia_.28compiling_from_source.29) + + + +### 13. (Ubuntu compiling) - Could NOT find OpenCL (missing: OpenCL_LIBRARY OpenCL_INCLUDE_DIR) Cmake error at CmakeLists.txt +When [compiling in Ubuntu with Nvidia](https://www.reddit.com/r/XmrStak/wiki/guides/startup#wiki_2._ubuntu_18.10_setup_.2B_nvidia_.28compiling_from_source.29) devices, and running `cmake ..` command add additional param that disables OpenCL: `cmake .. -DOpenCL_ENABLE=OFF` + + + +### 14. (Ubuntu compiling) - gcc v8 is not supported +Cuda 10 ships with gcc and g++ ver.8 which is not supported. Make sure you [set gcc and g++ to v6](https://www.reddit.com/r/XmrStak/wiki/guides/startup#wiki_2.2_compiling) before compiling. (step 2.2.6) + + + + diff --git a/doc/tuning.md b/doc/tuning.md index 6d07d4ddc..a504b85ef 100644 --- a/doc/tuning.md +++ b/doc/tuning.md @@ -3,41 +3,59 @@ ## Content Overview * [Benchmark](#benchmark) * [Windows](#windows) +* [Managing GPUs](#managing-GPUs) * [NVIDIA Backend](#nvidia-backend) * [Choose Value for `threads` and `blocks`](#choose-value-for-threads-and-blocks) * [Add more GPUs](#add-more-gpus) * [AMD Backend](#amd-backend) * [Choose `intensity` and `worksize`](#choose-intensity-and-worksize) - * [Add more GPUs](#add-more-gpus) - * [Two Threads per GPU](two-threads-per-gpu) - * [Interleave Tuning](interleave-tuning ) + * [Two Threads per GPU](two-threads-per-GPU) + * [Interleave Tuning](interleave-tuning) * [disable comp_mode](#disable-comp_mode) - * [change the scratchpad memory pattern](change-the-scratchpad-memory-pattern) + * [Auto-tune](#auto-tune) + * [Change the scratchpad memory pattern](change-the-scratchpad-memory-pattern) * [Increase Memory Pool](#increase-memory-pool) * [Scratchpad Indexing](#scratchpad-indexing) * [CPU Backend](#cpu-backend) * [Choose Value for `low_power_mode`](#choose-value-for-low_power_mode) ## Benchmark -To benchmark the miner speed there are two ways. - - Mine against a pool end press the key `h` after 30 sec to see the hash report. - - Start the miner with the cli option `--benchmark BLOCKVERSION`. The miner will not connect to any pool and performs a 60sec performance benchmark with all enabled back-ends. +You can benchmark the miner in two ways: + - Edit `config.txt` and set `verbose_level` to 4 and `h_print_time` to 30 and start the miner. You will see hash report each 30 seconds. + - Start the miner with the cli option `--benchmark BLOCKVERSION`. The miner will not connect to any pool and performs a 60sec performance benchmark with all enabled backends. ## Windows "Run As Administrator" prompt (UAC) confirmation is needed to use large pages on Windows 7. On Windows 10 it is only needed once to set up the account to use them. Disable the dialog with the command line option `--noUAC` +### Managing GPUs + +To turn on and off a GPU you need to add/remove config set to `GPU_threads_conf`. +`index` is the number of the GPU, the index order not follow the order from `nvidia-smi` or the order shown in windows. + +``` +"GPU_threads_conf" : +[ + { "index" : 0, "threads" : 17, "blocks" : 60, "bfactor" : 0, "bsleep" : 0, + "affine_to_cpu" : false, "sync_mode" : 3, "mem_mode" : 1, + }, + { "index" : 1, "threads" : 17, "blocks" : 60, "bfactor" : 0, "bsleep" : 0, + "affine_to_cpu" : false, "sync_mode" : 3, "mem_mode" : 1, + }, +], +``` + ## NVIDIA Backend By default the NVIDIA backend can be tuned in the config file `nvidia.txt` ### Choose Value for `threads` and `blocks` -The optimal parameter for the `threads` and `blocks` option in `config.txt` depend on your GPU. -For all GPU's with a compute capability `>=2.0` and `<6.0` there is a restriction of the amount of RAM that can be used for the mining algorithm. -The maximum RAM that can be used must be less than 2GB (e.g. GTX TITAN) or 1GB (e.g. GTX 750-TI). -The amount of RAM used for mining can be changed with `"threads" : T, "blocks : B"`. +The optimal values for the `threads` and `blocks` parameters in `nvidia.txt` depend on your GPU model and selected mining algorithm. +For all GPU's with a compute capability `>=2.0` and `<6.0` there is a restriction of the amount of vRAM that can be used for the mining algorithm. +The maximum vRAM that can be used must be less than 2GB (e.g. GTX TITAN) or 1GB (e.g. GTX 750-TI). +The amount of vRAM used for mining can be changed with `"threads" : T, "blocks : B"`. - `T` = threads used per block - `B` = CUDA blocks started (should be a multiple of the multiprocessors `M` on the GPU) @@ -48,23 +66,6 @@ and full fill all restrictions `16 * 48 * 2 = 1536` and `48 mod 24 = 0`. The memory limit for NVIDIA Pascal GPUs is `16` GiB if the newest CUDA driver is used. -### Add More GPUs - -To add a new GPU you need to add a new config set to `gpu_threads_conf`. -`index` is the number of the gpu, the index order not follow the order from `nvidia-smi` or the order shown in windows. - -``` -"gpu_threads_conf" : -[ - { "index" : 0, "threads" : 17, "blocks" : 60, "bfactor" : 0, "bsleep" : 0, - "affine_to_cpu" : false, "sync_mode" : 3, "mem_mode" : 1, - }, - { "index" : 1, "threads" : 17, "blocks" : 60, "bfactor" : 0, "bsleep" : 0, - "affine_to_cpu" : false, "sync_mode" : 3, "mem_mode" : 1, - }, -], -``` - ## AMD Backend By default the AMD backend can be tuned in the config file `amd.txt` @@ -75,38 +76,16 @@ Intensity means the number of threads used to mine. The maximum intensity is GPU `worksize` is the number of threads working together to increase the miner performance. In the most cases a `worksize` of `16` or `8` is optimal. -### Add More GPUs - -To add a new GPU you need to add a new config set to `gpu_threads_conf`. `index` is the OpenCL index of the gpu. -`platform_index`is the index of the OpenCL platform (Intel / AMD / Nvidia). -If you are unsure of either GPU or platform index value, you can use `clinfo` tool that comes with AMD APP SDK to dump the values. - -``` -"gpu_threads_conf" : -[ - { "index" : 0, "intensity" : 1000, "worksize" : 8, "affine_to_cpu" : false, - "strided_index" : true, "mem_chunk" : 2, "unroll" : 8, "comp_mode" : true, - "interleave" : 40 - }, - { "index" : 1, "intensity" : 1000, "worksize" : 8, "affine_to_cpu" : false, - "strided_index" : true, "mem_chunk" : 2, "unroll" : 8, "comp_mode" : true, - "interleave" : 40 - }, -], - -"platform_index" : 0, -``` ### Two Threads per GPU -Some GPUs like AMD Vega can mine faster if two threads are using the same GPU. -Use the auto generated config as base and repeat the config entry for a GPU. -If the attribute `index` is used twice than two threads will use one GPU. -Take care that the required memory usage on the GPU will also double. -Therefore adjust your intensity by hand. +Some AMD GPUs can mine faster on some mining algorithms if two threads are using the same GPU. +If you have `amd.txt` config with one `index` entry per GPU - duplicate these entries to run 2 threads per GPU. +*Notice*: Keep in mind that the memory usage on the GPU will also double - therefore adjust your `intensity` by hand. +Example of 2-threaded config: ``` -"gpu_threads_conf" : +"GPU_threads_conf" : [ { "index" : 0, "intensity" : 1000, "worksize" : 8, "affine_to_cpu" : false, "strided_index" : true, "mem_chunk" : 2, "unroll" : 8, "comp_mode" : true, @@ -123,43 +102,88 @@ Therefore adjust your intensity by hand. ### Interleave Tuning -Interleave controls when a worker thread is starting to calculate a bunch of hashes -if two worker threads are used to utilize one GPU. -This option has no effect if only one worker thread is used per GPU. +**Note 1:** Interleaving is available for AMD GPUs only. -![Interleave](img/interleave.png) +**Note 2** Interleaving has effect only when 2+ threads are used per each GPU. -Interleave defines how long a thread needs to wait to start the next hash calculation relative to the last started worker thread. -To choose a interleave value larger than 50% makes no sense because than the gpu will not be utilized well enough. -In the most cases the default 40 is a good value but on some systems e.g. Linux Rocm 1.9.1 driver with RX5XX you need to adjust the value. -If you get many interleave message in a row (over 1 minute) you should adjust the value. +Interleave controls when a worker thread is starting to calculate hashes if two worker threads are used to utilize one GPU. This parameter is designed to reduce total idle periods of GPU while mining -``` -OpenCL Interleave 0|1: 642/2400.50 ms - 30.1 -OpenCL Interleave 0|0: 355/2265.05 ms - 30.2 -OpenCL Interleave 0|1: 221/2215.65 ms - 30.2 -``` +![Interleave](_img/interleave.png) -description: -``` -|: / ms - +**1.Reading and understanding the log:** -``` -`last delay` should gou slowly to 0. -If it goes down and than jumps to a very large value multiple times within a minute you should reduce the intensity by 5. -The `intensity value` will automatically go up and down within the range of +-5% to adjust kernel run-time fluctuations. -Automatic adjustment is disabled as long as `auto-tuning` is active and will be started after it is finished. -If `last delay` goes down to 10ms and the messages stops and repeated from time to time with delays up to 15ms you will have already a good value. +`OpenCL Interleave 0|0: 265/1372.30 ms - 40.1` +`OpenCL Interleave 0|1: 125/1330.10 ms - 40.2` +`OpenCL Interleave 0|0: 74/1323.67 ms - 40.2` +`OpenCL Interleave 0|1: 43/1312.01 ms - 40.2` +`OpenCL Interleave 0|1: 16/1283.20 ms - 40.2` + +Reads as: +`OpenCL Interleave GPU ID|Thread ID: last delay/average calculation time per hash bunch - interleave value` + + +**2.Do I need to adjust it?** +In general, interleaving can be used as representation how 2-threading works with your GPU at current set of settings (including GPU power profile, miner settings, drivers). And default value `"interleave" : 40` in `amd.txt` works good in most cases. + +2.1 Optimal setup: After you started mining you have `last delay` value reduced over time to minimum possible value and stays at it. The best scenario is when `last delay` value settled around 10-15 and interleave messages appear rarely. The reported hashrate will be close to max. of GPU capabilities. + +2.2 Not optimal setup: After you started mining you have `last delay` value reducing over time and jumping back to high values, or rising after the start of mining. The reported hashrate will be lower compared to max. possible. + +**3.Adjusting Interleaving and optimizing hashrate** +**Note:** setting `interleave` value in amd.txt higher than 50 has no practical sense + +If you faced situation described in 2.2 then you need to keep in mind that this can be caused by several possible reasons, so treat them accordingly and start miner after each attempt and check logs and hashrate: + +- Miner misconfiguration 1: Adjust "interleave" in amd.txt by couple points +/- +- Miner misconfiguration 2: Adjust "intensity" in amd.txt by setting lower value (multiple to "worksize" value) +- GPU overclock: Reduce overclock/overvoltage values of GPU memory and GPU core +- Drivers issue: Try [reinstalling your drivers](https://www.amd.com/en/support) (there are 3 possible options to try: blockchain drivers, v18.6.1, or newest version) +​ ### disable comp_mode `comp_mode` means compatibility mode and removes some checks in compute kernel those takes care that the miner can be used on a wide range of AMD/OpenCL GPU devices. To avoid miner crashes the `intensity` should be a multiple of `worksize` if `comp_mode` is `false`. -### change the scratchpad memory pattern +### Auto tune + +**Note:** This feature is available for AMD gpus only. + +Auto-tuning feature may help you to speed up seek process of finding optimal intensity for your GPU (vs manual check, in case if you want to compare autogenerated intensity with the most performing value). + +When set, miner will perform several (defined by user) rounds per each intensity check of given range. When setting number of rounds - keep in mind that you want to have a balance of speed and reliability of the checking. + +After setting number of checks per intensity value, you will need to set ceiling value after which the miner will stop checking intensity values. + +**1.Enabling and configuring auto-tune** +Navigate to amd.txt config file in miner's folder, find (in the bottom part) parameter "auto_tune" : 0, and set it to "auto_tune" : 6, (6-10 rounds per intensity value suits most cases.) +Set autogenerated value of "intensity" : X, for each thread in amd.txt to slightly higher level (e.g. from 890 to 1000) +Start xmr-stak.exe + +**2. Reading and understanding the log** +Here is an example of log for 1 GPU with 2 threads (your values will vary): +`OpenCL 0|0: auto-tune validate intensity 848|840` +`OpenCL 0|1: auto-tune validate intensity 848|840` +`OpenCL 0|0: auto-tune validate intensity 856|848` +`OpenCL 0|1: auto-tune validate intensity 856|848` +Reads as: `OpenCL GPU ID|Thread ID auto-tune validate intensity Currently checked value|last succesfully checked value` + +After the checking, you will see + +`OpenCL 0|0: lock intensity at 896` +`OpenCL 0|1: lock intensity at 896` +Write down these locked intensity values and stop miner. + +**3. Finalizing setup** +Set "auto_tune" value (step 1.1) in `amd.txt` back to "auto_tune" : 0, +Enter locked intensity values from step 2. +Start miner. + +### Change the scratchpad memory pattern By changing `strided_index` to `2` the number of contiguous elements (a 16 byte) for one miner thread can be fine tuned with the option `mem_chunk`. + ### Increase Memory Pool By setting the following environment variables before the miner is started OpenCl allows the miner to more threads. diff --git a/doc/usage.md b/doc/usage.md index 82d26dcc5..85d715f84 100644 --- a/doc/usage.md +++ b/doc/usage.md @@ -1,7 +1,7 @@ -# HowTo Use xmr-stak +# HowTo Use Xmr-Stak ## Content Overview -* [Configuration](#configuration) +* [Configurations](#configurations) * [Usage on Windows](#usage-on-windows) * [Usage on Linux](#usage-on-linux) * [Command Line Options](#command-line-options) @@ -77,6 +77,6 @@ Debug the docker image by getting inside: docker run --entrypoint=/bin/bash --rm -it -u $(id -u):$(id -g) --name fireice-uk/xmr-stak -v "$PWD":/mnt xmr-stak ``` -## HTML and JSON API report configuraton +## HTML and JSON API report configuration To configure the reports shown on the [README](../README.md) side you need to edit the httpd_port variable. Then enable wifi on your phone and navigate to [miner ip address]:[httpd_port] in your phone browser. If you want to use the data in scripts, you can get the JSON version of the data at url [miner ip address]:[httpd_port]/api.json From b74ff88ac254fe1a64da392a7ac2b244396b4ffd Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sun, 30 Jun 2019 21:52:01 +0200 Subject: [PATCH 31/62] NVIDIA: fix cryptonight_v8 and derived pows - #2443 broke cryptonight_v8 and dereived POW e.g. masari, rcyptonight_v8_half --- xmrstak/backend/nvidia/nvcc_code/cuda_core.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu index b3c0bc004..4c4698b4b 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu @@ -301,8 +301,8 @@ __launch_bounds__(XMR_STAK_THREADS * 2) const u64 cx2 = myChunks[idx1 + ((sub + 1) & 1)]; u64 cx_aes = ax0 ^ u64( - t_fn0(BYTE_0(cx.x)) ^ t_fn1(BYTE_1(cx.y)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.x)) ^ t_fn1(BYTE_3(cx2.y >> 24))), - t_fn0(BYTE_0(cx.y)) ^ t_fn1(BYTE_1(cx2.x)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.y)) ^ t_fn1(BYTE_3(cx.x >> 24)))); + t_fn0(BYTE_0(cx.x)) ^ t_fn1(BYTE_1(cx.y)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.x)) ^ t_fn1(BYTE_3(cx2.y))), + t_fn0(BYTE_0(cx.y)) ^ t_fn1(BYTE_1(cx2.x)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.y)) ^ t_fn1(BYTE_3(cx.x)))); if(ALGO == cryptonight_monero_v8) { From 442581ec4c6019d092160a50cdfb8e1b7a1bbf60 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sun, 30 Jun 2019 22:35:59 +0200 Subject: [PATCH 32/62] NVIDIA: releax 'threads' config - with #2443 the possible maximum number of threads per block was reduced because phase3 used 16 threads per share (is automatically avoided if thread limit is exeeded) - warn user if `threads` is to large and adjust to a valid value --- .../backend/nvidia/nvcc_code/cryptonight.hpp | 1 + xmrstak/backend/nvidia/nvcc_code/cuda_core.cu | 27 ++++++++++++++----- .../backend/nvidia/nvcc_code/cuda_extra.cu | 19 ++++++++++++- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp b/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp index 78abd7a3d..29e29d12c 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cryptonight.hpp @@ -18,6 +18,7 @@ typedef struct int device_threads; int device_bfactor; int device_bsleep; + int device_maxThreadsPerBlock; int syncMode; bool memMode; diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu index b3c0bc004..719b048e2 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu @@ -895,12 +895,19 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo roundsPhase3 *= 2; } + int blockSizePhase3 = block8.x; + int gridSizePhase3 = grid.x; + if(blockSizePhase3 * 2 <= ctx->device_maxThreadsPerBlock) + { + blockSizePhase3 *= 2; + gridSizePhase3 = (blockSizePhase3 + 1) / 2; + } for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - (grid.x + 1) / 2, - block8.x * 2, - 2 * block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + gridSizePhase3, + blockSizePhase3, + blockSizePhase3 * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM, ctx->device_blocks * ctx->device_threads, @@ -966,12 +973,20 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ roundsPhase3 *= 2; } + int blockSizePhase3 = block8.x; + int gridSizePhase3 = grid.x; + if(blockSizePhase3 * 2 <= ctx->device_maxThreadsPerBlock) + { + blockSizePhase3 *= 2; + gridSizePhase3 = (blockSizePhase3 + 1) / 2; + } + for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - (grid.x + 1) / 2, - block8.x * 2 , - 2 * block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + gridSizePhase3, + blockSizePhase3, + blockSizePhase3 * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM / 4, ctx->device_blocks * ctx->device_threads, diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu index aa7c17057..8c1bb8b5d 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu @@ -560,12 +560,13 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) ctx->device_mpcount = props.multiProcessorCount; ctx->device_arch[0] = props.major; ctx->device_arch[1] = props.minor; + ctx->device_maxThreadsPerBlock = props.maxThreadsPerBlock; const int gpuArch = ctx->device_arch[0] * 10 + ctx->device_arch[1]; ctx->name = std::string(props.name); - printf("CUDA [%d.%d/%d.%d] GPU#%d, device architecture %d: \"%s\"... ", + printf("CUDA [%d.%d/%d.%d] GPU#%d, device architecture %d: \"%s\"...\n", version / 1000, (version % 1000 / 10), CUDART_VERSION / 1000, (CUDART_VERSION % 1000) / 10, ctx->device_id, gpuArch, ctx->device_name); @@ -803,6 +804,22 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) } } } + + if(useCryptonight_gpu) + { + // cryptonight_gpu used 16 threads per share + if(ctx->device_threads * 16 > ctx->device_maxThreadsPerBlock) + { + ctx->device_threads = ctx->device_maxThreadsPerBlock / 16; + printf("WARNING: 'threads' configuration to large, value adjusted to %i\n", ctx->device_threads); + } + } + else if(ctx->device_threads * 8 > ctx->device_maxThreadsPerBlock) + { + // by default cryptonight CUDA implementations uses 8 threads per thread for some kernel + ctx->device_threads = ctx->device_maxThreadsPerBlock / 8; + printf("WARNING: 'threads' configuration to large, value adjusted to %i\n", ctx->device_threads); + } printf("device init succeeded\n"); return 0; From 309259516ded040b4177660ffb76abd80befe867 Mon Sep 17 00:00:00 2001 From: Pablo Cholaky Date: Tue, 16 Jul 2019 06:03:18 -0400 Subject: [PATCH 33/62] Make explicit the architecture of the project at beginning --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ffb0b9fc..d42c05f5e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ###### fireice-uk's and psychocrypt's # XMR-Stak: Cryptonight All-in-One Mining Software -XMR-Stak is a universal open source stratum pool miner. This miner supports CPUs, AMD and NVIDIA GPUs and can be used various crypto currencies: Ryo, Monero, Turtlecoin, Graft, Bittube, Loki, Aeon and many more Cryptonight coins. +XMR-Stak is a universal open source stratum pool miner. This miner supports x86-64 CPUs, AMD and NVIDIA GPUs and can be used various crypto currencies: Ryo, Monero, Turtlecoin, Graft, Bittube, Loki, Aeon and many more Cryptonight coins. From e8565a8bb025adf5395ae7a91467f433cd7edc20 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 20 Jul 2019 21:58:55 +0200 Subject: [PATCH 34/62] fix AMD driver 19.7.X bug Since AMD driver 19.7.X the miner crashes without any error message. The driver bug shows up in windows and linux. The reason for the crash are two for loop. The workaround is to partly unroll the loops by hand. --- .../backend/amd/amd_gpu/opencl/cryptonight.cl | 37 ++++++++- .../backend/amd/amd_gpu/opencl/wolf-skein.cl | 82 ++++++++++++++++++- 2 files changed, 115 insertions(+), 4 deletions(-) diff --git a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl index 29ab63aad..d17b79215 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl @@ -1356,7 +1356,42 @@ __kernel void Groestl(__global ulong *states, __global uint *BranchBuf, __global #endif ulong H[8], M[8]; - for (uint i = 0; i < 3; ++i) { + // BUG: AMD driver 19.7.X crashs if this is written as loop + // Thx AMD for so bad software + uint i = 0; + { + ((ulong8 *)M)[0] = vload8(i, states); + + for (uint x = 0; x < 8; ++x) { + H[x] = M[x] ^ State[x]; + } + + PERM_SMALL_P(H); + PERM_SMALL_Q(M); + + for (uint x = 0; x < 8; ++x) + { + State[x] ^= H[x] ^ M[x]; + } + } + i = 1; + { + ((ulong8 *)M)[0] = vload8(i, states); + + for (uint x = 0; x < 8; ++x) { + H[x] = M[x] ^ State[x]; + } + + PERM_SMALL_P(H); + PERM_SMALL_Q(M); + + for (uint x = 0; x < 8; ++x) + { + State[x] ^= H[x] ^ M[x]; + } + } + i = 2; + { ((ulong8 *)M)[0] = vload8(i, states); for (uint x = 0; x < 8; ++x) { diff --git a/xmrstak/backend/amd/amd_gpu/opencl/wolf-skein.cl b/xmrstak/backend/amd/amd_gpu/opencl/wolf-skein.cl index 73ef90882..17abc3bc8 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/wolf-skein.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/wolf-skein.cl @@ -90,8 +90,85 @@ ulong8 SkeinOddRound(ulong8 p, const ulong8 h, const ulong *t, const uint s, con ulong8 Skein512Block(ulong8 p, ulong8 h, ulong h8, const ulong *t) { - #pragma unroll - for(int i = 0; i < 18; ++i) + // BUG: AMD driver 19.7.X crashs if this is written as loop + // Thx AMD for so bad software + int i = 0; + { + p = SkeinEvenRound(p, h, t, 0U, i); + ++i; + ulong tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinOddRound(p, h, t, 1U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinEvenRound(p, h, t, 2U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinOddRound(p, h, t, 0U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinEvenRound(p, h, t, 1U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinOddRound(p, h, t, 2U, i); + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + ++i; + } + { + p = SkeinEvenRound(p, h, t, 0U, i); + ++i; + ulong tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinOddRound(p, h, t, 1U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinEvenRound(p, h, t, 2U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinOddRound(p, h, t, 0U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinEvenRound(p, h, t, 1U, i); + ++i; + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + p = SkeinOddRound(p, h, t, 2U, i); + tmp = h.s0; + h = shuffle(h, (ulong8)(1, 2, 3, 4, 5, 6, 7, 0)); + h.s7 = h8; + h8 = tmp; + ++i; + } { p = SkeinEvenRound(p, h, t, 0U, i); ++i; @@ -129,7 +206,6 @@ ulong8 Skein512Block(ulong8 p, ulong8 h, ulong h8, const ulong *t) h.s7 = h8; h8 = tmp; } - p += h; p.s5 += t[0]; p.s6 += t[1]; From ad846c4fb86cc701889122f8548d9fb1d8821a6d Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 20 Jul 2019 22:22:24 +0200 Subject: [PATCH 35/62] increase version to 2.10.6 --- xmrstak/version.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index 70041ec97..ce2c5f0af 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -20,7 +20,7 @@ #endif #define XMR_STAK_NAME "xmr-stak" -#define XMR_STAK_VERSION "2.10.5" +#define XMR_STAK_VERSION "2.10.6" #if defined(_WIN32) #define OS_TYPE "win" From 38ecd0d72752180e1542237e7b05930f8d78f3d4 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 31 Jul 2019 10:18:01 +0200 Subject: [PATCH 36/62] NVIDIA: fix broken phase 3 - with #2468 I fully break the miner: producing invalid results and not scan all shares The relase 2.10.6 is fully broken for NVIDIA and should not be used. --- xmrstak/backend/nvidia/nvcc_code/cuda_core.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu index 53345c95c..6c769b3e8 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu @@ -900,7 +900,7 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo if(blockSizePhase3 * 2 <= ctx->device_maxThreadsPerBlock) { blockSizePhase3 *= 2; - gridSizePhase3 = (blockSizePhase3 + 1) / 2; + gridSizePhase3 = (gridSizePhase3 + 1) / 2; } for(int i = 0; i < roundsPhase3; i++) { @@ -978,7 +978,7 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ if(blockSizePhase3 * 2 <= ctx->device_maxThreadsPerBlock) { blockSizePhase3 *= 2; - gridSizePhase3 = (blockSizePhase3 + 1) / 2; + gridSizePhase3 = (gridSizePhase3 + 1) / 2; } for(int i = 0; i < roundsPhase3; i++) From 59d01477a33c92312adca6a5da421e1c5856d9ee Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 31 Jul 2019 10:30:56 +0200 Subject: [PATCH 37/62] AMD: optimize VEGA auto suggestion - increase the work size to 16 for cryptonight_gpu for vega GPUs --- xmrstak/backend/amd/autoAdjust.hpp | 40 ++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp index ee7168f60..858c03844 100644 --- a/xmrstak/backend/amd/autoAdjust.hpp +++ b/xmrstak/backend/amd/autoAdjust.hpp @@ -110,6 +110,21 @@ class autoAdjust } } + // check if cryptonight_monero_v8 is selected for the user or dev pool + bool useCryptonight_v8 = (std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_monero_v8) != neededAlgorithms.end()); + + // true for all cryptonight_heavy derivates since we check the user and dev pool + bool useCryptonight_heavy = std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_heavy) != neededAlgorithms.end(); + + // true for cryptonight_gpu as main user pool algorithm + bool useCryptonight_gpu = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgo() == cryptonight_gpu; + + bool useCryptonight_r = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgo() == cryptonight_r; + + bool useCryptonight_r_wow = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgo() == cryptonight_r_wow; + + // 8 threads per block (this is a good value for the most gpus) + uint32_t default_workSize = 8; size_t minFreeMem = 128u * byteToMiB; /* 1000 is a magic selected limit, the reason is that more than 2GiB memory * sowing down the memory performance because of TLB cache misses @@ -130,6 +145,9 @@ class autoAdjust * to avoid out of memory errors */ maxThreads = 2024u; + + if(useCryptonight_gpu) + default_workSize = 16u; } // NVIDIA optimizations @@ -142,19 +160,6 @@ class autoAdjust minFreeMem = 512u * byteToMiB; } - // check if cryptonight_monero_v8 is selected for the user or dev pool - bool useCryptonight_v8 = (std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_monero_v8) != neededAlgorithms.end()); - - // true for all cryptonight_heavy derivates since we check the user and dev pool - bool useCryptonight_heavy = std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_heavy) != neededAlgorithms.end(); - - // true for cryptonight_gpu as main user pool algorithm - bool useCryptonight_gpu = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgo() == cryptonight_gpu; - - bool useCryptonight_r = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgo() == cryptonight_r; - - bool useCryptonight_r_wow = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgo() == cryptonight_r_wow; - // set strided index to default ctx.stridedIndex = 1; @@ -203,11 +208,11 @@ class autoAdjust size_t perThread = hashMemSize + 240u; size_t maxIntensity = memPerThread / perThread; size_t possibleIntensity = std::min(maxThreads, maxIntensity); - // map intensity to a multiple of the compute unit count, 8 is the number of threads per work group - size_t intensity = (possibleIntensity / (8 * ctx.computeUnits)) * ctx.computeUnits * 8; + // map intensity to a multiple of the compute unit count, default_workSize is the number of threads per work group + size_t intensity = (possibleIntensity / (default_workSize * ctx.computeUnits)) * ctx.computeUnits * default_workSize; // in the case we use two threads per gpu we can be relax and need no multiple of the number of compute units if(numThreads == 2) - intensity = (possibleIntensity / 8) * 8; + intensity = (possibleIntensity / default_workSize) * default_workSize; //If the intensity is 0, then it's because the multiple of the unit count is greater than intensity if(intensity == 0) @@ -225,9 +230,8 @@ class autoAdjust conf += " // gpu: " + ctx.name + std::string(" compute units: ") + std::to_string(ctx.computeUnits) + "\n"; conf += " // memory:" + std::to_string(memPerThread / byteToMiB) + "|" + std::to_string(ctx.maxMemPerAlloc / byteToMiB) + "|" + std::to_string(maxAvailableFreeMem / byteToMiB) + " MiB (used per thread|max per alloc|total free)\n"; - // set 8 threads per block (this is a good value for the most gpus) conf += std::string(" { \"index\" : ") + std::to_string(ctx.deviceIdx) + ",\n" + - " \"intensity\" : " + std::to_string(intensity) + ", \"worksize\" : " + std::to_string(8) + ",\n" + + " \"intensity\" : " + std::to_string(intensity) + ", \"worksize\" : " + std::to_string(default_workSize) + ",\n" + " \"affine_to_cpu\" : false, \"strided_index\" : " + std::to_string(ctx.stridedIndex) + ", \"mem_chunk\" : 2,\n" " \"unroll\" : " + std::to_string(numUnroll) + ", \"comp_mode\" : true, \"interleave\" : " + std::to_string(ctx.interleave) + "\n" + From ad470409a50d9b65d8beee8fe19c6b1266c8ec87 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 31 Jul 2019 18:08:01 +0200 Subject: [PATCH 38/62] set version to 2.10.7 --- xmrstak/version.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index ce2c5f0af..bbf5a84c8 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -20,7 +20,7 @@ #endif #define XMR_STAK_NAME "xmr-stak" -#define XMR_STAK_VERSION "2.10.6" +#define XMR_STAK_VERSION "2.10.7" #if defined(_WIN32) #define OS_TYPE "win" From d1afcec292af3a2c8d9a0182f55524782d0173e8 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 31 Jul 2019 18:18:12 +0200 Subject: [PATCH 39/62] remove unsupported currencies - remove `turtlecoin`, `xcash` and `loki` All of this currencies forked to an unsupported POW algorithm. --- README.md | 3 --- xmrstak/jconf.cpp | 4 +--- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/README.md b/README.md index 9ffb0b9fc..f448d5fe5 100644 --- a/README.md +++ b/README.md @@ -52,16 +52,13 @@ Following coins can be mined using this miner: - [Graft](https://www.graft.network) - [Haven](https://havenprotocol.com) - [Lethean](https://lethean.io) -- [Loki](https://loki.network/) - [Masari](https://getmasari.org) - [Monero](https://getmonero.org) - [Plenteum](https://www.plenteum.com/) - [QRL](https://theqrl.org) - **[Ryo](https://ryo-currency.com) - Upcoming xmr-stak-gui is sponsored by Ryo Currency** - [Torque](https://torque.cash/) -- [TurtleCoin](https://turtlecoin.lol) - [Zelerius](https://zelerius.org/) -- [X-CASH](https://x-network.io/) **[Ryo Currency](https://ryo-currency.com)** - is a way for us to implement the ideas that we were unable to in Monero. See [here](https://github.com/fireice-uk/cryptonote-speedup-demo/) for details. diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 010f75407..bf76d34f3 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -132,10 +132,8 @@ xmrstak::coin_selection coins[] = { {"qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, {"ryo", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, {"torque", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, - {"turtlecoin", {POW(cryptonight_turtle), 6u, POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr}, {"plenteum", {POW(cryptonight_turtle)}, {POW(cryptonight_turtle)}, nullptr}, - {"zelerius", {POW(cryptonight_v8_zelerius), 7, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, - {"xcash", {POW(cryptonight_v8_double)}, {POW(cryptonight_gpu)}, nullptr}}; + {"zelerius", {POW(cryptonight_v8_zelerius), 7, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}}; constexpr size_t coin_algo_size = (sizeof(coins) / sizeof(coins[0])); From 506942a610698d03d0be7116ed04f65e8b3a43cc Mon Sep 17 00:00:00 2001 From: JoeyChen Date: Mon, 19 Aug 2019 18:57:07 +0800 Subject: [PATCH 40/62] Update compile_Windows.md addition for cmake ENABLE parameter --- doc/compile/compile_Windows.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/compile/compile_Windows.md b/doc/compile/compile_Windows.md index 64d68bab1..37925576a 100644 --- a/doc/compile/compile_Windows.md +++ b/doc/compile/compile_Windows.md @@ -111,6 +111,15 @@ Do not follow old information that you need the AMD APP SDK. AMD has removed the cd bin\Release + copy C:\xmr-stak-dep\openssl\bin\* . + ``` +- For Exclude some of dependence you can follow the command below to set the ENABLE to OFF + ``` + make -G "Visual Studio 15 2017 Win64" -T v141,host=x64 -DCMAKE_BUILD_TYPE=Release -DMICROHTTPD_ENABLE=OFF -DCUDA_ENABLE=OFF -DOpenCL_ENABLE=OFF .. + cmake --build . --config Release --target clean + cmake --build . --config Release --target install + cd bin\Release + copy C:\xmr-stak-dep\openssl\bin\* . ``` - Miner is by default compiled for NVIDIA GPUs (if CUDA is installed), AMD GPUs (if the AMD OCL-SDK_light is installed) and CPUs. From 292db293a7f3586564ec906aca76ba232dd62657 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 24 Aug 2019 21:07:39 +0200 Subject: [PATCH 41/62] AMD: optimize auto adjustement solve #2517 In the case we can utilize more than 75% of the compute units we will not enforce a multiple of the compute units. --- xmrstak/backend/amd/autoAdjust.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp index 858c03844..595f0bc5d 100644 --- a/xmrstak/backend/amd/autoAdjust.hpp +++ b/xmrstak/backend/amd/autoAdjust.hpp @@ -210,8 +210,11 @@ class autoAdjust size_t possibleIntensity = std::min(maxThreads, maxIntensity); // map intensity to a multiple of the compute unit count, default_workSize is the number of threads per work group size_t intensity = (possibleIntensity / (default_workSize * ctx.computeUnits)) * ctx.computeUnits * default_workSize; - // in the case we use two threads per gpu we can be relax and need no multiple of the number of compute units - if(numThreads == 2) + + size_t computeUnitUtilization = ((possibleIntensity * 100) / (default_workSize * ctx.computeUnits)) % 100; + // in the case we use two threads per gpu or if we can utilize over 75% of the compute units + // we can be relax and need no multiple of the number of compute units + if(numThreads == 2 || computeUnitUtilization >= 75) intensity = (possibleIntensity / default_workSize) * default_workSize; //If the intensity is 0, then it's because the multiple of the unit count is greater than intensity From 28be4125f88cc349ccbc7e696b1e74522cd057a9 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 24 Aug 2019 21:27:45 +0200 Subject: [PATCH 42/62] AMD: optimize fiji and radeon VII auto config cn-gpu solve #2510 and #2505 set worksize to 16 instead of 8 --- xmrstak/backend/amd/autoAdjust.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp index 858c03844..f27ecfe02 100644 --- a/xmrstak/backend/amd/autoAdjust.hpp +++ b/xmrstak/backend/amd/autoAdjust.hpp @@ -138,7 +138,10 @@ class autoAdjust // UNKNOWN ctx.name.compare("gfx900") == 0 || ctx.name.compare("gfx903") == 0 || - ctx.name.compare("gfx905") == 0) + ctx.name.compare("gfx905") == 0 || + // Radeon VII + ctx.name.compare("gfx906") == 0 || + ctx.name.compare("Fiji") == 0) { /* Increase the number of threads for AMD VEGA gpus. * Limit the number of threads based on the issue: https://github.com/fireice-uk/xmr-stak/issues/5#issuecomment-339425089 From 82513935b894032ecf92f59c7f53cd48c328cfe8 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 24 Aug 2019 22:26:37 +0200 Subject: [PATCH 43/62] fix used `empty()` instead of `clear()` solve first part of #2541 --- xmrstak/misc/executor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp index 455ba9119..3f930dc82 100644 --- a/xmrstak/misc/executor.cpp +++ b/xmrstak/misc/executor.cpp @@ -783,7 +783,7 @@ void executor::hashrate_report(std::string& out) std::string motd; for(jpsock& pool : pools) { - motd.empty(); + motd.clear(); if(pool.get_pool_motd(motd) && motd_filter_console(motd)) { out.append("Message from ").append(pool.get_pool_addr()).append(":\n"); @@ -1040,7 +1040,7 @@ void executor::http_hashrate_report(std::string& out) std::string motd; for(jpsock& pool : pools) { - motd.empty(); + motd.clear(); if(pool.get_pool_motd(motd) && motd_filter_web(motd)) { if(!have_motd) From d048bf78673636bf2fd232993f47e3a9a237774f Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 24 Aug 2019 22:33:49 +0200 Subject: [PATCH 44/62] fix useless mutex solve partly #2514 Remove a mutex which is not needed at all because all data are accessed from one thread only. --- xmrstak/misc/telemetry.cpp | 6 ------ xmrstak/misc/telemetry.hpp | 4 ---- 2 files changed, 10 deletions(-) diff --git a/xmrstak/misc/telemetry.cpp b/xmrstak/misc/telemetry.cpp index 75fb4f434..ea73e6281 100644 --- a/xmrstak/misc/telemetry.cpp +++ b/xmrstak/misc/telemetry.cpp @@ -23,7 +23,6 @@ #include "telemetry.hpp" #include "xmrstak/net/msgstruct.hpp" -#include "xmrstak/cpputil/read_write_lock.h" #include #include @@ -37,7 +36,6 @@ telemetry::telemetry(size_t iThd) ppHashCounts = new uint64_t*[iThd]; ppTimestamps = new uint64_t*[iThd]; iBucketTop = new uint32_t[iThd]; - mtx = new ::cpputil::RWLock[iThd]; for(size_t i = 0; i < iThd; i++) { @@ -58,7 +56,6 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) uint64_t iLatestHashCnt = 0; bool bHaveFullSet = false; - mtx[iThread].ReadLock(); uint64_t iTimeNow = get_timestamp_ms(); //Start at 1, buckettop points to next empty @@ -84,7 +81,6 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) iEarliestStamp = ppTimestamps[iThread][idx]; iEarliestHashCnt = ppHashCounts[iThread][idx]; } - mtx[iThread].UnLock(); if(!bHaveFullSet || iEarliestStamp == 0 || iLatestStamp == 0) return nan(""); @@ -103,13 +99,11 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) void telemetry::push_perf_value(size_t iThd, uint64_t iHashCount, uint64_t iTimestamp) { - mtx[iThd].WriteLock(); size_t iTop = iBucketTop[iThd]; ppHashCounts[iThd][iTop] = iHashCount; ppTimestamps[iThd][iTop] = iTimestamp; iBucketTop[iThd] = (iTop + 1) & iBucketMask; - mtx[iThd].UnLock(); } } // namespace xmrstak diff --git a/xmrstak/misc/telemetry.hpp b/xmrstak/misc/telemetry.hpp index a7b77c287..fb87bcd32 100644 --- a/xmrstak/misc/telemetry.hpp +++ b/xmrstak/misc/telemetry.hpp @@ -1,10 +1,7 @@ #pragma once -#include "xmrstak/cpputil/read_write_lock.h" - #include #include -#include namespace xmrstak { @@ -17,7 +14,6 @@ class telemetry double calc_telemetry_data(size_t iLastMillisec, size_t iThread); private: - ::cpputil::RWLock* mtx; constexpr static size_t iBucketSize = 2 << 11; //Power of 2 to simplify calculations constexpr static size_t iBucketMask = iBucketSize - 1; uint32_t* iBucketTop; From 54dae74bacc1af4f19558005f8e02d4f6a6ba1e4 Mon Sep 17 00:00:00 2001 From: Dobromir Dobrev Date: Thu, 12 Sep 2019 17:42:35 +0000 Subject: [PATCH 45/62] Faster xmrstak_backend initialization, prevents unsupported binary in BUILD_STATIC=ON --- xmrstak/backend/plugin.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xmrstak/backend/plugin.hpp b/xmrstak/backend/plugin.hpp index 902a66230..560507691 100644 --- a/xmrstak/backend/plugin.hpp +++ b/xmrstak/backend/plugin.hpp @@ -47,13 +47,13 @@ struct plugin fileExtension = ".dylib"; #endif // search library in working directory - libBackend = dlopen(("./lib" + libName + fileExtension).c_str(), RTLD_LAZY); + libBackend = dlopen(("./lib" + libName + fileExtension).c_str(), RTLD_NOW | RTLD_LAZY | RTLD_GLOBAL); // fallback to binary directory if(!libBackend) - libBackend = dlopen((params::inst().executablePrefix + "lib" + libName + fileExtension).c_str(), RTLD_LAZY); + libBackend = dlopen((params::inst().executablePrefix + "lib" + libName + fileExtension).c_str(), RTLD_NOW | RTLD_LAZY | RTLD_GLOBAL); // try use LD_LIBRARY_PATH if(!libBackend) - libBackend = dlopen(("lib" + libName + fileExtension).c_str(), RTLD_LAZY); + libBackend = dlopen(("lib" + libName + fileExtension).c_str(), RTLD_NOW | RTLD_LAZY | RTLD_GLOBAL); if(!libBackend) { std::cerr << "WARNING: " << m_backendName << " cannot load backend library: " << dlerror() << std::endl; From bca9255e3bb19d1e4041f265e341cb498c7dfb51 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Thu, 19 Sep 2019 20:43:14 +0200 Subject: [PATCH 46/62] fix singletons Since we can not implement clean image book singletons (windows issues with shared libraries) we used a hierarchical to "emulate" singletons. During the creation race consitions are possible. THis PR will handle the raceconditions with a mutex, since we pass the creation of a singleton creation only onse we have no performance issue. --- xmrstak/backend/cpu/crypto/cryptonight.h | 1 + xmrstak/backend/globalStates.hpp | 6 +++++- xmrstak/jconf.hpp | 6 +++++- xmrstak/misc/console.hpp | 6 +++++- xmrstak/misc/environment.cpp | 19 +++++++++++++++++++ xmrstak/misc/environment.hpp | 10 ++++++++++ xmrstak/misc/executor.hpp | 6 +++++- xmrstak/params.hpp | 6 +++++- 8 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 xmrstak/misc/environment.cpp diff --git a/xmrstak/backend/cpu/crypto/cryptonight.h b/xmrstak/backend/cpu/crypto/cryptonight.h index c8b8320b0..2a91269f8 100644 --- a/xmrstak/backend/cpu/crypto/cryptonight.h +++ b/xmrstak/backend/cpu/crypto/cryptonight.h @@ -39,6 +39,7 @@ struct cryptonight_ctx union { extra_ctx_r cn_r_ctx; }; + }; struct alloc_msg diff --git a/xmrstak/backend/globalStates.hpp b/xmrstak/backend/globalStates.hpp index a3ff30eea..a67580166 100644 --- a/xmrstak/backend/globalStates.hpp +++ b/xmrstak/backend/globalStates.hpp @@ -17,7 +17,11 @@ struct globalStates { auto& env = environment::inst(); if(env.pglobalStates == nullptr) - env.pglobalStates = new globalStates; + { + std::unique_lock lck(env.update); + if(env.pglobalStates == nullptr) + env.pglobalStates = new globalStates; + } return *env.pglobalStates; } diff --git a/xmrstak/jconf.hpp b/xmrstak/jconf.hpp index 5597bf23e..17cbf5b9a 100644 --- a/xmrstak/jconf.hpp +++ b/xmrstak/jconf.hpp @@ -14,7 +14,11 @@ class jconf { auto& env = xmrstak::environment::inst(); if(env.pJconfConfig == nullptr) - env.pJconfConfig = new jconf; + { + std::unique_lock lck(env.update); + if(env.pJconfConfig == nullptr) + env.pJconfConfig = new jconf; + } return env.pJconfConfig; }; diff --git a/xmrstak/misc/console.hpp b/xmrstak/misc/console.hpp index 3c27ee86b..12efef6c7 100644 --- a/xmrstak/misc/console.hpp +++ b/xmrstak/misc/console.hpp @@ -48,7 +48,11 @@ class printer { auto& env = xmrstak::environment::inst(); if(env.pPrinter == nullptr) - env.pPrinter = new printer; + { + std::unique_lock lck(env.update); + if(env.pPrinter == nullptr) + env.pPrinter = new printer; + } return env.pPrinter; }; diff --git a/xmrstak/misc/environment.cpp b/xmrstak/misc/environment.cpp new file mode 100644 index 000000000..9f1be511d --- /dev/null +++ b/xmrstak/misc/environment.cpp @@ -0,0 +1,19 @@ +#include "environment.hpp" + +#include "xmrstak/misc/console.hpp" +#include "xmrstak/backend/cpu/crypto/cryptonight.h" +#include "xmrstak/params.hpp" +#include "xmrstak/misc/executor.hpp" +#include "xmrstak/jconf.hpp" + +namespace xmrstak +{ +void environment::init_singeltons() +{ + printer::inst(); + globalStates::inst(); + jconf::inst(); + executor::inst(); + params::inst(); +} +} diff --git a/xmrstak/misc/environment.hpp b/xmrstak/misc/environment.hpp index b67c85874..f37aedd61 100644 --- a/xmrstak/misc/environment.hpp +++ b/xmrstak/misc/environment.hpp @@ -1,5 +1,7 @@ #pragma once +#include + class printer; class jconf; class executor; @@ -19,7 +21,10 @@ struct environment if(env == nullptr) { if(init == nullptr) + { env = new environment; + env->init_singeltons(); + } else env = init; } @@ -36,6 +41,11 @@ struct environment jconf* pJconfConfig = nullptr; executor* pExecutor = nullptr; params* pParams = nullptr; + + std::mutex update; + +private: + void init_singeltons(); }; } // namespace xmrstak diff --git a/xmrstak/misc/executor.hpp b/xmrstak/misc/executor.hpp index 47359afc2..385b2f4e3 100644 --- a/xmrstak/misc/executor.hpp +++ b/xmrstak/misc/executor.hpp @@ -32,7 +32,11 @@ class executor { auto& env = xmrstak::environment::inst(); if(env.pExecutor == nullptr) - env.pExecutor = new executor; + { + std::unique_lock lck(env.update); + if(env.pExecutor == nullptr) + env.pExecutor = new executor; + } return env.pExecutor; }; diff --git a/xmrstak/params.hpp b/xmrstak/params.hpp index 9f958f937..5bfbac381 100644 --- a/xmrstak/params.hpp +++ b/xmrstak/params.hpp @@ -15,7 +15,11 @@ struct params { auto& env = environment::inst(); if(env.pParams == nullptr) - env.pParams = new params; + { + std::unique_lock lck(env.update); + if(env.pParams == nullptr) + env.pParams = new params; + } return *env.pParams; } From f626f07254413891778bf3ed53629f7698bf13e0 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 24 Aug 2019 21:22:50 +0200 Subject: [PATCH 47/62] AMD: optimize unroll for rx5700 solve #2509 - use unroll 8 for RX5700 - use 2 threads for cnr_gpu and RX5700 --- xmrstak/backend/amd/autoAdjust.hpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp index 858c03844..3b8c56785 100644 --- a/xmrstak/backend/amd/autoAdjust.hpp +++ b/xmrstak/backend/amd/autoAdjust.hpp @@ -181,6 +181,7 @@ class autoAdjust } uint32_t numUnroll = 8; + uint32_t numThreads = 1u; if(useCryptonight_gpu) { @@ -188,7 +189,11 @@ class autoAdjust // @todo check again after all optimizations maxThreads = ctx.computeUnits * 6 * 8; ctx.stridedIndex = 0; - numUnroll = 1; + // do not change unroll for AMD RX5700 but set 2 threads per gpu + if(ctx.name.compare("gfx1010") == 0) + numThreads = 2; + else + numUnroll = 1; } // keep 128MiB memory free (value is randomly chosen) from the max available memory @@ -196,7 +201,6 @@ class autoAdjust size_t memPerThread = std::min(ctx.maxMemPerAlloc, maxAvailableFreeMem); - uint32_t numThreads = 1u; if(ctx.isAMD && !useCryptonight_gpu) { numThreads = 2; From 0b1f88ca8b816ad6e9eb8de011b8d5480d730d4f Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Tue, 24 Sep 2019 21:26:25 +0200 Subject: [PATCH 48/62] fix locking to secure affinity update fix #2514 - use `unlock()` instead of `relase()` - fix NVIDIA affinity setting --- xmrstak/backend/amd/minethd.cpp | 2 +- xmrstak/backend/cpu/minethd.cpp | 2 +- xmrstak/backend/nvidia/minethd.cpp | 11 +++++++---- xmrstak/backend/nvidia/minethd.hpp | 1 + 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/xmrstak/backend/amd/minethd.cpp b/xmrstak/backend/amd/minethd.cpp index 3a23e8624..3a65de8e2 100644 --- a/xmrstak/backend/amd/minethd.cpp +++ b/xmrstak/backend/amd/minethd.cpp @@ -170,7 +170,7 @@ void minethd::work_main() order_fix.set_value(); std::unique_lock lck(thd_aff_set); - lck.release(); + lck.unlock(); std::this_thread::yield(); cryptonight_ctx* cpu_ctx; diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp index 72570e96a..43759776f 100644 --- a/xmrstak/backend/cpu/minethd.cpp +++ b/xmrstak/backend/cpu/minethd.cpp @@ -843,7 +843,7 @@ void minethd::multiway_work_main() order_fix.set_value(); std::unique_lock lck(thd_aff_set); - lck.release(); + lck.unlock(); std::this_thread::yield(); cryptonight_ctx* ctx[MAX_N]; diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 86c860153..c65bba162 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -82,6 +82,7 @@ minethd::minethd(miner_work& pWork, size_t iNo, const jconf::thd_cfg& cfg) ctx.memMode = cfg.memMode; this->affinity = cfg.cpu_aff; + std::unique_lock lck(thd_aff_set); std::future numa_guard = numa_promise.get_future(); thread_work_guard = thread_work_promise.get_future(); @@ -92,14 +93,15 @@ minethd::minethd(miner_work& pWork, size_t iNo, const jconf::thd_cfg& cfg) * without concurrent threads (CUDA driver is less occupied). */ numa_guard.wait(); + + if(this->affinity >= 0) //-1 means no affinity + if(!cpu::minethd::thd_setaffinity(oWorkThd.native_handle(), affinity)) + printer::inst()->print_msg(L1, "WARNING setting affinity failed."); } void minethd::start_mining() { thread_work_promise.set_value(); - if(this->affinity >= 0) //-1 means no affinity - if(!cpu::minethd::thd_setaffinity(oWorkThd.native_handle(), affinity)) - printer::inst()->print_msg(L1, "WARNING setting affinity failed."); } bool minethd::self_test() @@ -194,7 +196,8 @@ void minethd::work_main() // numa memory bind and gpu memory is initialized numa_promise.set_value(); - + std::unique_lock lck(thd_aff_set); + lck.unlock(); std::this_thread::yield(); // wait until all NVIDIA devices are initialized thread_work_guard.wait(); diff --git a/xmrstak/backend/nvidia/minethd.hpp b/xmrstak/backend/nvidia/minethd.hpp index 66c49bb1f..bbbc7b6ee 100644 --- a/xmrstak/backend/nvidia/minethd.hpp +++ b/xmrstak/backend/nvidia/minethd.hpp @@ -42,6 +42,7 @@ class minethd : public iBackend std::promise numa_promise; std::promise thread_work_promise; + std::mutex thd_aff_set; // block thread until all NVIDIA GPUs are initialized std::future thread_work_guard; From bab1ee876dcdbace9c87ba604eb3c9a63c281255 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Tue, 22 Oct 2019 20:13:40 +0200 Subject: [PATCH 49/62] remove aeon support Aeon is forking on 25.10.1029 to a fpga minable POW. --- README.md | 3 +-- xmrstak/jconf.cpp | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index eca50611f..ac89ba7c1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ###### fireice-uk's and psychocrypt's # XMR-Stak: Cryptonight All-in-One Mining Software -XMR-Stak is a universal open source stratum pool miner. This miner supports x86-64 CPUs, AMD and NVIDIA GPUs and can be used various crypto currencies: Ryo, Monero, Turtlecoin, Graft, Bittube, Loki, Aeon and many more Cryptonight coins. +XMR-Stak is a universal open source stratum pool miner. This miner supports x86-64 CPUs, AMD and NVIDIA GPUs and can be used various crypto currencies: Ryo, Monero, Turtlecoin, Graft, Bittube, and many more Cryptonight coins. @@ -46,7 +46,6 @@ To improve our support we created [Xmr-Stak forum](https://www.reddit.com/r/XmrS Following coins can be mined using this miner: -- [Aeon](http://www.aeon.cash) - [BitTube](https://coin.bit.tube/) - [Conceal](https://conceal.network) - [Graft](https://www.graft.network) diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index bf76d34f3..0e29db83d 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -101,7 +101,6 @@ constexpr size_t iConfigCnt = (sizeof(oConfigValues) / sizeof(oConfigValues[0])) xmrstak::coin_selection coins[] = { // name, userpool, devpool, default_pool_suggestion - {"aeon7", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, "mine.aeon-pool.com:5555"}, {"bbscoin", {POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr}, {"bittube", {POW(cryptonight_bittube2)}, {POW(cryptonight_gpu)}, "mining.bit.tube:13333"}, {"cryptonight", {POW(cryptonight)}, {POW(cryptonight_gpu)}, nullptr}, From 2494d96f4f60a708d3564a24170e089a1d22aa66 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Tue, 22 Oct 2019 20:53:46 +0200 Subject: [PATCH 50/62] [NVIDIA] fix possible out of memory with auto cfg fix #2531 Set number of threads for `cryptonight_gpu always to `8` and adkust the number of blocks depending of the free memory.` --- .../backend/nvidia/nvcc_code/cuda_extra.cu | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu index 8c1bb8b5d..d5b292cb4 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu @@ -634,6 +634,10 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) if(props.multiProcessorCount <= 6) ctx->device_bfactor += 2; } + + // for the most algorithms we are using 8 threads per hash + uint32_t threadsPerHash = 8; + if(ctx->device_threads == -1) { /* sm_20 devices can only run 512 threads per cuda block @@ -642,9 +646,6 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) */ const uint32_t maxThreadsPerBlock = props.major < 3 ? 512 : 1024; - // for the most algorithms we are using 8 threads per hash - uint32_t threadsPerHash = 8; - // phase2_gpu uses 16 threads per hash if(useCryptonight_gpu) threadsPerHash = 16; @@ -789,6 +790,8 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) // 8 is chosen by checking the occupancy calculator size_t blockOptimal = 8 * ctx->device_mpcount; + if(gpuArch == 30) + blockOptimal = 8 * ctx->device_mpcount; // the following values are calculated with CUDA10 and the occupancy calculator if(gpuArch == 35 || gpuArch / 10 == 5 || gpuArch / 10 == 6) blockOptimal = 7 * ctx->device_mpcount; @@ -798,26 +801,17 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) blockOptimal = 6 * ctx->device_mpcount; if(blockOptimal * threads * hashMemSize < limitedMemory) - { - ctx->device_threads = threads; ctx->device_blocks = blockOptimal; - } + else + ctx->device_blocks = limitedMemory / hashMemSize / threads; // round to a memory fitting value + ctx->device_threads = threads; } } - if(useCryptonight_gpu) - { - // cryptonight_gpu used 16 threads per share - if(ctx->device_threads * 16 > ctx->device_maxThreadsPerBlock) - { - ctx->device_threads = ctx->device_maxThreadsPerBlock / 16; - printf("WARNING: 'threads' configuration to large, value adjusted to %i\n", ctx->device_threads); - } - } - else if(ctx->device_threads * 8 > ctx->device_maxThreadsPerBlock) + if(ctx->device_threads * threadsPerHash > ctx->device_maxThreadsPerBlock) { // by default cryptonight CUDA implementations uses 8 threads per thread for some kernel - ctx->device_threads = ctx->device_maxThreadsPerBlock / 8; + ctx->device_threads = ctx->device_maxThreadsPerBlock / threadsPerHash; printf("WARNING: 'threads' configuration to large, value adjusted to %i\n", ctx->device_threads); } printf("device init succeeded\n"); From b339c5d25c282597de2748acc3c955379a8eed87 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sun, 17 Nov 2019 19:48:27 +0100 Subject: [PATCH 51/62] fix tsl not used on first start - during the start of the miner and the guided setup the tls settings was ignored. - fix that parameters from the guided start is passed to the parameter singelton --- xmrstak/cli/cli-miner.cpp | 12 ++++++------ xmrstak/misc/executor.cpp | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index 7d358edb3..70174c537 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -219,7 +219,7 @@ void do_guided_pool_config() configTpl.set(std::string(tpl)); bool prompted = false; - auto& currency = params::inst().currency; + auto currency = params::inst().currency; if(currency.empty() || !jconf::IsOnAlgoList(currency)) { prompt_once(prompted); @@ -236,7 +236,7 @@ void do_guided_pool_config() currency = tmp; } - auto& pool = params::inst().poolURL; + auto pool = params::inst().poolURL; bool userSetPool = true; if(pool.empty()) { @@ -247,7 +247,7 @@ void do_guided_pool_config() std::cin >> pool; } - auto& userName = params::inst().poolUsername; + auto userName = params::inst().poolUsername; if(userName.empty()) { prompt_once(prompted); @@ -257,7 +257,7 @@ void do_guided_pool_config() } bool stdin_flushed = false; - auto& passwd = params::inst().poolPasswd; + auto passwd = params::inst().poolPasswd; if(passwd.empty() && !params::inst().userSetPwd) { prompt_once(prompted); @@ -271,7 +271,7 @@ void do_guided_pool_config() getline(std::cin, passwd); } - auto& rigid = params::inst().poolRigid; + auto rigid = params::inst().poolRigid; if(rigid.empty() && !params::inst().userSetRigid) { if(!use_simple_start()) @@ -366,7 +366,7 @@ void do_guided_config() configTpl.set(std::string(tpl)); bool prompted = false; - auto& http_port = params::inst().httpd_port; + auto http_port = params::inst().httpd_port; if(http_port == params::httpd_port_unset) { http_port = params::httpd_port_disabled; diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp index 3f930dc82..0266312d1 100644 --- a/xmrstak/misc/executor.cpp +++ b/xmrstak/misc/executor.cpp @@ -551,8 +551,9 @@ void executor::ex_main() const char* rigid = params.userSetRigid ? params.poolRigid.c_str() : cfg.sRigId; const char* pwd = params.userSetPwd ? params.poolPasswd.c_str() : cfg.sPasswd; bool nicehash = cfg.nicehash || params.nicehashMode; + bool tls = params.poolUseTls; - pools.emplace_back(i + 1, cfg.sPoolAddr, wallet, rigid, pwd, 9.9, false, params.poolUseTls, cfg.tls_fingerprint, nicehash); + pools.emplace_back(i + 1, cfg.sPoolAddr, wallet, rigid, pwd, 9.9, false, tls, cfg.tls_fingerprint, nicehash); } else pools.emplace_back(i + 1, cfg.sPoolAddr, cfg.sWalletAddr, cfg.sRigId, cfg.sPasswd, cfg.weight, false, cfg.tls, cfg.tls_fingerprint, cfg.nicehash); From fc6200a58897297fb0b1260d74db53d0d5376d57 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sun, 17 Nov 2019 19:11:24 +0100 Subject: [PATCH 52/62] fix hwloc warning - fix warning depricated `hwloc_set_membind_nodeset` (since hwloc 2.0) --- xmrstak/backend/cpu/hwlocMemory.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/xmrstak/backend/cpu/hwlocMemory.cpp b/xmrstak/backend/cpu/hwlocMemory.cpp index 804edc55d..067f27975 100644 --- a/xmrstak/backend/cpu/hwlocMemory.cpp +++ b/xmrstak/backend/cpu/hwlocMemory.cpp @@ -6,6 +6,24 @@ #include +static __hwloc_inline int +xmrstak_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) +{ +#if HWLOC_API_VERSION >= 0x20000 + return hwloc_set_membind( + topology, + nodeset, + policy, + flags| HWLOC_MEMBIND_BYNODESET); +#else + return hwloc_set_membind_nodeset( + topology, + nodeset, + policy, + flags); +#endif +} + /** pin memory to NUMA node * * Set the default memory policy for the current thread to bind memory to the @@ -37,7 +55,7 @@ void bindMemoryToNUMANode(size_t puId) hwloc_obj_t pu = hwloc_get_obj_by_depth(topology, depth, i); if(pu->os_index == puId) { - if(0 > hwloc_set_membind_nodeset( + if(0 > xmrstak_set_membind_nodeset( topology, pu->nodeset, HWLOC_MEMBIND_BIND, From d5e0d3102d2b2535412ac309a18a49788bf2c28b Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Wed, 20 Nov 2019 19:50:02 +0100 Subject: [PATCH 53/62] fix benchmark mode Check for minimal required block version. Block version must be greater than 0. --- xmrstak/cli/cli-miner.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index 7d358edb3..88605a662 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -937,6 +937,12 @@ int do_benchmark(int block_version, int wait_sec, int work_sec) printer::inst()->print_msg(L0, "Prepare benchmark for block version %d", block_version); + if(block_version <= 0) + { + printer::inst()->print_msg(L0, "Block version must be >0, current value is %u.", block_version); + return 1; + } + uint8_t work[128]; memset(work, 0, 128); work[0] = static_cast(block_version); From d89b504b7985aa97831d00fdfd2a6b93d717e91d Mon Sep 17 00:00:00 2001 From: Ryo-RU Date: Sat, 30 Nov 2019 18:28:35 +0100 Subject: [PATCH 54/62] update README --- README.md | 125 ++-------------------- doc/README.md | 132 ++++++++++++++++++++++++ doc/_img/2ragerx-btn.png | Bin 0 -> 15591 bytes doc/_img/2xmr-stak-btn.png | Bin 0 -> 14880 bytes doc/_img/YT.png | Bin 0 -> 27725 bytes doc/_img/cpu.png | Bin 0 -> 189129 bytes doc/_img/faq-green.png | Bin 0 -> 4966 bytes doc/_img/faq.png | Bin 0 -> 4571 bytes doc/_img/features-xmr-stak.png | Bin 0 -> 131998 bytes doc/_img/features.png | Bin 0 -> 133304 bytes doc/_img/fee.png | Bin 0 -> 47658 bytes doc/_img/fine-tuning-green.png | Bin 0 -> 6216 bytes doc/_img/fine-tuning.png | Bin 0 -> 5860 bytes doc/_img/gpu.png | Bin 0 -> 399628 bytes doc/_img/header.png | Bin 0 -> 103979 bytes doc/_img/how-to-compile-green.png | Bin 0 -> 8492 bytes doc/_img/how-to-compile.png | Bin 0 -> 7940 bytes doc/_img/html_reports.png | Bin 0 -> 180437 bytes doc/_img/menu-donations-green.png | Bin 0 -> 6585 bytes doc/_img/menu-donations.png | Bin 0 -> 6581 bytes doc/_img/menu-features-green.png | Bin 0 -> 6303 bytes doc/_img/menu-features.png | Bin 0 -> 6332 bytes doc/_img/menu-get-miner-green.png | Bin 0 -> 6302 bytes doc/_img/menu-get-miner.png | Bin 0 -> 6304 bytes doc/_img/menu-support-green.png | Bin 0 -> 6237 bytes doc/_img/menu-support.png | Bin 0 -> 6236 bytes doc/_img/menu-supported-coins-green.png | Bin 0 -> 8874 bytes doc/_img/menu-supported-coins.png | Bin 0 -> 8908 bytes doc/_img/ragerx-btn.png | Bin 0 -> 15128 bytes doc/_img/ragerx.png | Bin 0 -> 157717 bytes doc/_img/rx.png | Bin 0 -> 150966 bytes doc/_img/split.png | Bin 0 -> 87634 bytes doc/_img/troubleshooting-green.png | Bin 0 -> 8603 bytes doc/_img/troubleshooting.png | Bin 0 -> 8162 bytes doc/_img/usage-green.png | Bin 0 -> 5957 bytes doc/_img/usage.png | Bin 0 -> 5502 bytes doc/_img/xmr-stak-btn-active.png | Bin 0 -> 21021 bytes doc/_img/xmr-stak-btn.png | Bin 0 -> 14409 bytes doc/_img/xmr-stak-cpu-connection.png | Bin 0 -> 63870 bytes doc/_img/xmr-stak-cpu-hashrate.png | Bin 0 -> 56718 bytes doc/_img/xmr-stak-cpu-results.png | Bin 0 -> 82874 bytes doc/_img/xmr-stak-rx-btn-inactive.png | Bin 0 -> 16194 bytes doc/_img/xmr-stak-rx-btn.png | Bin 0 -> 17501 bytes doc/_img/xmrig.png | Bin 0 -> 149324 bytes 44 files changed, 142 insertions(+), 115 deletions(-) create mode 100644 doc/README.md create mode 100644 doc/_img/2ragerx-btn.png create mode 100644 doc/_img/2xmr-stak-btn.png create mode 100644 doc/_img/YT.png create mode 100644 doc/_img/cpu.png create mode 100644 doc/_img/faq-green.png create mode 100644 doc/_img/faq.png create mode 100644 doc/_img/features-xmr-stak.png create mode 100644 doc/_img/features.png create mode 100644 doc/_img/fee.png create mode 100644 doc/_img/fine-tuning-green.png create mode 100644 doc/_img/fine-tuning.png create mode 100644 doc/_img/gpu.png create mode 100644 doc/_img/header.png create mode 100644 doc/_img/how-to-compile-green.png create mode 100644 doc/_img/how-to-compile.png create mode 100644 doc/_img/html_reports.png create mode 100644 doc/_img/menu-donations-green.png create mode 100644 doc/_img/menu-donations.png create mode 100644 doc/_img/menu-features-green.png create mode 100644 doc/_img/menu-features.png create mode 100644 doc/_img/menu-get-miner-green.png create mode 100644 doc/_img/menu-get-miner.png create mode 100644 doc/_img/menu-support-green.png create mode 100644 doc/_img/menu-support.png create mode 100644 doc/_img/menu-supported-coins-green.png create mode 100644 doc/_img/menu-supported-coins.png create mode 100644 doc/_img/ragerx-btn.png create mode 100644 doc/_img/ragerx.png create mode 100644 doc/_img/rx.png create mode 100644 doc/_img/split.png create mode 100644 doc/_img/troubleshooting-green.png create mode 100644 doc/_img/troubleshooting.png create mode 100644 doc/_img/usage-green.png create mode 100644 doc/_img/usage.png create mode 100644 doc/_img/xmr-stak-btn-active.png create mode 100644 doc/_img/xmr-stak-btn.png create mode 100644 doc/_img/xmr-stak-cpu-connection.png create mode 100644 doc/_img/xmr-stak-cpu-hashrate.png create mode 100644 doc/_img/xmr-stak-cpu-results.png create mode 100644 doc/_img/xmr-stak-rx-btn-inactive.png create mode 100644 doc/_img/xmr-stak-rx-btn.png create mode 100644 doc/_img/xmrig.png diff --git a/README.md b/README.md index ac89ba7c1..2e2eb61fa 100644 --- a/README.md +++ b/README.md @@ -1,115 +1,10 @@ -###### fireice-uk's and psychocrypt's -# XMR-Stak: Cryptonight All-in-One Mining Software - -XMR-Stak is a universal open source stratum pool miner. This miner supports x86-64 CPUs, AMD and NVIDIA GPUs and can be used various crypto currencies: Ryo, Monero, Turtlecoin, Graft, Bittube, and many more Cryptonight coins. - - - -## Video guides -[](https://www.youtube.com/playlist?list=PLAhUkom29iGMFoN8pk91JA-oqvxlmJ5H8) -###### Video by Crypto Sewer - -## Overview -* [Features](#features) -* [Supported coins and algorithms](#supported-coins-and-algorithms) -* [Download](#download) -* [FAQ](doc/FAQ.md) -* [Developer Donation](#default-developer-donation) -* [Developer PGP Key's](doc/pgp_keys.md) - -## Guides and FAQ -To improve our support we created [Xmr-Stak forum](https://www.reddit.com/r/XmrStak). Check it out if you have a problem, or you are looking for most up to date config for your card and [guides](https://www.reddit.com/r/XmrStak/wiki/index). -* [Usage](doc/usage.md) -* [How to compile](doc/compile/compile.md) -* [Fine tuning](doc/tuning.md) -* [FAQ](doc/FAQ.md) -* [Troubleshooting](doc/troubleshooting.md) (Fixing common problems) - -## Features - -- Supports all common backends (CPU/x86, AMD/NVIDIA GPU). -- Supports all common OS (Linux, Windows and macOS). -- Supports 15 cryptonight-variant mining algorithms + Cryptonight-GPU. -- Easy to use and flexible in setup: - - guided start with easy/advanced setup option (no need to edit a config file for the first start) - - auto-configuration and config file creation for each backend. -- Open source software (GPLv3) -- TLS support. -- [HTML statistics](doc/usage.md#html-and-json-api-report-configuraton) -- [JSON API for monitoring](doc/usage.md#html-and-json-api-report-configuraton) - -## HTML reports - - -## Supported coins and algorithms - -Following coins can be mined using this miner: - - -- [BitTube](https://coin.bit.tube/) -- [Conceal](https://conceal.network) -- [Graft](https://www.graft.network) -- [Haven](https://havenprotocol.com) -- [Lethean](https://lethean.io) -- [Masari](https://getmasari.org) -- [Monero](https://getmonero.org) -- [Plenteum](https://www.plenteum.com/) -- [QRL](https://theqrl.org) -- **[Ryo](https://ryo-currency.com) - Upcoming xmr-stak-gui is sponsored by Ryo Currency** -- [Torque](https://torque.cash/) -- [Zelerius](https://zelerius.org/) - -**[Ryo Currency](https://ryo-currency.com)** - is a way for us to implement the ideas that we were unable to in -Monero. See [here](https://github.com/fireice-uk/cryptonote-speedup-demo/) for details. - -If your preferred coin is not listed, you can choose one of the following mining algorithms: -- 256Kib scratchpad memory - - cryptonight_turtle - - -- 1MiB scratchpad memory - - cryptonight_lite - - cryptonight_lite_v7 - - cryptonight_lite_v7_xor (algorithm used by ipbc) - - -- 2MiB scratchpad memory - - cryptonight - - cryptonight_gpu (for Ryo's 14th of Feb fork) - - cryptonight_r - - cryptonight_masari (used in 2018) - - cryptonight_conceal - - cryptonight_v7 - - cryptonight_v7_stellite - - cryptonight_v8 - - cryptonight_v8_double (used by X-CASH) - - cryptonight_v8_half (used by masari and torque) - - cryptonight_v8_reversewaltz (used by graft) - - cryptonight_v8_zelerius - - -- 4MiB scratchpad memory - - cryptonight_haven - - cryptonight_heavy - -Please note, this list is not complete and is not an endorsement. - -## Download - -You can find the latest releases and precompiled binaries on GitHub under [Releases](https://github.com/fireice-uk/xmr-stak/releases). - -## Default Developer Donation - -By default, the miner will donate 2% of the hashpower (2 minutes in 100 minutes) to my pool. If you want to change that, edit [donate-level.hpp](xmrstak/donate-level.hpp) before you build the binaries. - -If you want to donate directly to support further development, here is my wallet - -fireice-uk: -``` -4581HhZkQHgZrZjKeCfCJxZff9E3xCgHGF25zABZz7oR71TnbbgiS7sK9jveE6Dx6uMs2LwszDuvQJgRZQotdpHt1fTdDhk -``` - -psychocrypt: -``` -45tcqnJMgd3VqeTznNotiNj4G9PQoK67TGRiHyj6EYSZ31NUbAfs9XdiU5squmZb717iHJLxZv3KfEw8jCYGL5wa19yrVCn -``` +
+ +
Error text
CountLast seen
Error text
CountLast seen
%s
%llu%s
+

+

+ + + + +
\ No newline at end of file diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 000000000..fef37ddd3 --- /dev/null +++ b/doc/README.md @@ -0,0 +1,132 @@ + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +## Introduction +XMR-Stak is a universal open source stratum pool miner. This miner supports CPUs, AMD and NVIDIA GPUs and can be used for mining various crypto currencies: Ryo, Graft, Bittube, Conceal, Haven and many more Cryptonight coins. + +## Features overview +[](#) + +## Supported coins and algorithms +Xmr-Stak supports various variants of Cryptonight algorithm. Use one of the following options (type this coin alias in either `pool.txt` config file or on startup configuration under `"currency"` parameter and miner will pick it's variant of Cryptonight algorithm for mining): + +| | | | +| --- | --- | --- | +| [BitTube](https://coin.bit.tube/) | [Plenteum](https://www.plenteum.com/) | | +| [Conceal](https://conceal.network) | [QRL](https://theqrl.org) | | +| [Graft](https://www.graft.network) | [Ryo](https://ryo-currency.com) | **Atom Wallet Solo mining mode is sponsored by [RYO](https://ryo-currency.com/)** | +| [Haven](https://havenprotocol.com) | [X-CASH](https://x-network.io/) | | +| [Lethean](https://lethean.io) | [Zelerius](https://zelerius.org/) | | +| [Masari](https://getmasari.org) | | | + + +**[Ryo Currency](https://ryo-currency.com)** - is a way for us to implement the ideas that we were unable to in +Monero. See [here](https://github.com/fireice-uk/cryptonote-speedup-demo/) for details. + +If your preferred coin is not listed, you can choose one of the following mining algorithms: + +| 256 KiB scratchpad memory | 1 MiB scratchpad memory | 2 MiB scratchpad memory | 4 MiB scratchpad memory | +| --- | --- | --- | --- | +| cryptonight_turtle | cryptonight_lite | cryptonight | cryptonight_bittube2 | +| --- | cryptonight_lite_v7 | cryptonight_gpu | cryptonight_haven | +| --- | --- | cryptonight_conceal | cryptonight_heavy | +| --- | --- | cryptonight_r | --- | +| --- | --- | cryptonight_masari (used in 2018) | --- | +| --- | --- | cryptonight_v8_reversewaltz | --- | +| --- | --- | cryptonight_v7 | --- | +| --- | --- | cryptonight_v8 | --- | +| --- | --- | cryptonight_v8_half (used by masari) | --- | +| --- | --- | cryptonight_v8_double (used by X-CASH) | --- | +| --- | --- | cryptonight_v8_zelerius | --- | + +Please note, this list is not complete and is not an endorsement. + + +## Get Miner +Please note that code is developed on the [dev branch](https://github.com/fireice-uk/xmr-stak/commits/dev), if you want to check out the latest updates, before they are merged on main branch, please refer there. Master branch will always point to a version that we consider stable, so you can download the code by simply typing `git clone https://github.com/fireice-uk/xmr-stak.git` + +Also you can find the latest releases and precompiled binaries on GitHub under [releases](https://github.com/fireice-uk/xmr-stak/releases/latest) section. + +If you want to compile the miner from source files, navigate to ["how to compile"](compile/compile.md) section of docs or [xmr-stak forum](https://www.reddit.com/r/XmrStak/wiki/guides/startup) where you will find the latest step-by-step instructions. + + +## Start Mining +Miner has 2 ways of initial configuring: simple and advanced. The simple method will prompt user with minimum information. Required answers are y , (or yes), n , (or no): + +#### Simple setup: +* `Use simple setup method?` y +* `Please enter the currency that you want to mine:` Enter currency or mining algorithm +* `Enter pool address (pool address:port):` Enter pool connection address:port +* `Username (wallet address or pool login):` Enter wallet address +* `Password (mostly empty or x):` press Enter +* `Does this pool port support TLS/SSL? Use no if unknown. (y/N):` press y or n + +#### Advanced setup: +* `Use simple setup method?` n +* `Do you want to use the HTTP interface? Unlike the screen display, browser interface is not affected by the GPU lag. If you don't want to use it, please enter 0, otherwise enter port number that the miner should listen on` 5656 +* `Please enter the currency that you want to mine:` Enter currency or mining algorithm +* `Enter pool address (pool address:port):` Enter pool connection address:port +* `Username (wallet address or pool login):` Enter wallet address +* `Password (mostly empty or x):` press Enter +* `Rig identifier for pool-side statistics (needs pool support). Can be empty:` Enter rig name or press Enter +* `Does this pool port support TLS/SSL? Use no if unknown. (y/N)` Enter y or n +* `Do you want to use nicehash on this pool? (y/N)` n +* `Do you want to use multiple pools? (y/N)` Enter y if you want to se up backup pool or n + + +## Additional Guides and Feedback +[](https://www.youtube.com/playlist?list=PLAhUkom29iGMFoN8pk91JA-oqvxlmJ5H8) +###### Video by Crypto Sewer + +To improve our support we created [Xmr-Stak forum](https://www.reddit.com/r/XmrStak). Check it out if you have a problem, or you are looking for most up to date config for your card and [guides](https://www.reddit.com/r/XmrStak/wiki/index). + + + + + + + + + +
+ +## Default Developer Donation +By default, the miner will donate 2% of the hashpower (2 minutes in 100 minutes) to my pool. If you want to change that, edit [donate-level.hpp](xmrstak/donate-level.hpp) before you build the binaries. + +If you want to donate directly to support further development, here is my wallet + +fireice-uk: +``` +4581HhZkQHgZrZjKeCfCJxZff9E3xCgHGF25zABZz7oR71TnbbgiS7sK9jveE6Dx6uMs2LwszDuvQJgRZQotdpHt1fTdDhk +``` + +psychocrypt: +``` +45tcqnJMgd3VqeTznNotiNj4G9PQoK67TGRiHyj6EYSZ31NUbAfs9XdiU5squmZb717iHJLxZv3KfEw8jCYGL5wa19yrVCn +``` \ No newline at end of file diff --git a/doc/_img/2ragerx-btn.png b/doc/_img/2ragerx-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0edd98c33cc5b68709ee4847a80aa7f3f9a9c1 GIT binary patch literal 15591 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 literal 0 HcmV?d00001 diff --git a/doc/_img/cpu.png b/doc/_img/cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..6a370fbc95b2726e282759c76320b6c2e54945c9 GIT binary patch literal 189129 zcmd422|Sd2`!_s9#y+GPq-JaxS!RY|hA2api7=KBYG#ZjyCGXjj3tIFLkMLVvX(4G zD8&?t3L{IFB3%iUB-GV&>Z-2$|9|iMx$n>OJn!?qK77oa=W+g)<996IV>!=T9WfCW zkP-laK*DCGMnn*Z=Q;?)H3;SguCR6+(||A9UWSHN25$ajDvW4?hbf_OI4lALQcBOd zaEEZ;N+RKo^r5aId+^JtfW6jMK0_T0vtvmxhbqI28Z*NzvbbOE*>y;&pN#W(6!%_} z4ucQ;r?+%f#2V6tc#|hT6-?rG^>LMuhYRAZ<#RMPA-9?hb?X|YO*)ZqW6>$w#c2hElq_d3Ou>1cJVU2t6yOA;+UfXnK1XxVu6@$GOa9T)d;5GDHR)mu!10sgBPU6%FJs@a3lV zX*BOiI8WF%^wfIi!=)`JPK#Q+=quRKH*vK#TfK3vkK8;y3v}9oE

?l44ifnnsRbaN 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 literal 0 HcmV?d00001 diff --git a/doc/_img/faq-green.png b/doc/_img/faq-green.png new file mode 100644 index 0000000000000000000000000000000000000000..440a855b28d99368887c29508a438ab4f57e1aaa GIT binary patch literal 4966 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 JOO4$3{s#~j=v)8* literal 0 HcmV?d00001 diff --git a/doc/_img/faq.png b/doc/_img/faq.png new file mode 100644 index 0000000000000000000000000000000000000000..83167e3c7fe2c3701e29b3e91c3080b85ee06f4e GIT binary patch literal 4571 zcmcIocT`i^-n{`-nhF92R3wB^aGa1r0!cK|TO`y-=Sj*1LP=s0s)Y!M1w@fxK>?|X zAUZw)1(fEXf`bUdpr|mQf~c4`BGTo%Q7rF!<2?U)Su1y)+`G^I?X!RTp0if=yE@x1 zR$ieD0Kj5L2OD<)fc*rGaf))#m2-L9PUwai$J*M}lFeg+2zPrcgb|iRBCZ1fqx8%} zb<`$T&AoLiZGXx0R2=w&Z|LS4-qn!m=yw3&U21*gyrXp{a~Zcheo8HktLy)0r<|dE zgXNz}JLG>UNwiK~RGX z8E(6w-6vHPchhQKJEwC))s~7&oO=jrE*2%n zrdPTu3+4c7%h(RJt>Onlie4(IURAIa=A;`CCiXqDZz z^Cn+siIfpXXV;kVt6(Zsww1nn-Ynm^Bp#@5c9|XZFuw&ksl<2i5dwgUhU^OivQB9O zz#=ma-CN{Mb0V{N5ylLezs4~Uds0{thg{1iH$VhgxDBEh6o}+5d#qu5zZBoV<^ZEykuxByNyO7K0ria z6y(Q-dedAH);s}-AQ+pXSXev(VMa2>nwsEAq@NHt43>z-5Ybo@6xNiC$B=P2#QX;d zRTHp-$nG|F^R=K~6l91<#3!TC(b3Vy(I&<`K`a4Agg^;nxgtgkiYqku z#9#voSpp7U#NlxfGDZfI7b&73A*COe5W)XU%N5Ss1Q~{oVervdV~lJ`pMW&l-$NrJ zKBI*q+bF2YyxzYg7Sdz+Ale-i@*)K+&^8L>iVQv#JYfj$8`?fU{x^ke*5`u! zNJ01qd)O>A7!F22+(HP8{h*IewibX45l=wp@xnhf%Jox4gtfJ-F(ibM7l+H{MGM!- zM9t3uZ5Seuf|NZ+VKFEiiH;?au|zV~WIe`&jKO?_(x51?86w8_fq86BQ0(_WX*9AU zS14j|S)ij01qq2V=5W|#EQyW7fJ`=u$YKSdKs=s+B4LRj3QL4U;8_GL7DN1?3z~1k zV@1l$kj?*?TsDsdaeOwEj3Hu}3^o&wBA5h`P#_V{LNT#sBoqU~Aex#HFlKCm=_fW9 z0S9_{7~x;D%2cr-Mhu3{Wa1%@FlN{w6xIaKKoNsTrYJm%iDR2!SYQx|g+zR*Yt0Mi z31~bv2)w>f{|-uLPJNE;mjLZpAw{EsjpFGv*45P+7!kkj9jFZ8$c3mH*= zum1ab|G!l~Z!Rl@!3_qX9Tbg}tp_dJYd*FH{r|i6rR#JsM&!hZ1qH%+3#=HyU(EP| z`+#v~L_q0q;6)=uJOs2w@j2n(*Ae;vk}>`V=qrQ&l5>j?%GfukK0f6W+b>+RTjyq-@Z^cd4=Q{z2n*qjT^1^G`9K7)M=bGH zKkJrxz~a-YHco|)?f)Fb43_YCxk0Ki_rGxHjuFAXlo5KjdH76g) z8e3Dm``XV!(wU`+#~xHrYQkOxcwEnY$JjW86JDN@PUcGeoh0sJgu}?`id`^;tKF9B zNQZ-ef9Z#iY`J^F7f$zd&l~q#JYBRFEtHCptG4#Wznknm)aL0Mdb{%c=E?}&bz>Pj z>n5K+^Gfc`y)?7?X77xx?b7O~ylbN)v)#s*$Fn!Jie0VVI4Vo%2+MT~eDTZt+HtJe zrq1pQ2k|cFpQ}4Kx+Xo@Oc`?TY`u%lY@r@g7#!}K+f{qfxrpw3dw1uM`{VsMTjrXK z2=n+S9e(j@Ndl{4#ef3Ir0v;yw-(P1x0c(3+*7j?kA{VMb?=&wz$=Y+3=Y5XOOhzq z60hHBZ~8Up^305n*Sj9GS*8&(x+3^R=IVlr&R!+3hu4p^`jcX=IPEz#)8;(1Tq@|imt?t&Hwj*yJym`U


MhAYJ(Ye@6*CVZU-*BR(>t zT%%nhC@m+XLu9Fp3{@6u#6A8QT{p@lAz!`kg#B}5>z{{piv0_cG*M~`{L`Ovij%G1Ck^EKp6hgw*rPSIw;6_@!ToWkm@-wGuAX57jmiH zsoCbV984^CPw^mbHGE3d0Kdh|Dm8!<6Z1C0Lb)O5Vo!+q&UJ{)bzR6c**(PYP~&?| z)$eKdF@0Ii9Ni}ii=GkPXK$QPgzp+jCz(uk=jLyQr|%oSTM{?*bkcOXYpW%>NvVXz zJm6}!s%E;~ZIw=%mQmx2exuAx?vCMn@kULH)Kgg`fz_D>j}d*fwfLJ3G$94Zl zM|$;b`o2rGa$4f^g;%5DVJqw=3ro@~%H@ISXI?O|`m&(1w3PQYF7*b74_IvQrQkYd zU5vLI5+<&lEtTk+P7I#8B_YxW97fWN`-P{EN^%KKD?E3{?vw7dHo#k*$ar3pk&M{o zn$*>FL{ML87cg@at~+D0KHz2EGr*#|?Ct9bU5*7MNsX+%U<;r#?0?8bc^7`nQKFIW z(PE$0hs;bsmaSHn>|C^WzpNy^CG!4@OyG|Pwnm~t*w{puL1s&Jhw|Rm_{CI3L&-8I zZCaIp&T7s6fW*F(9%_;GRAEIaAa2Xvl5SAZHfs=%vV1_b8@!8}6jeV}>0JOjt)N(6 z;nE{5BsoB{9$Tive|7ZooBd@+Xi*yeP-(rf^ej4lwQ`b1Lb9yaAr%kCC$$=MawdmL z^2}0dL+q*}!@Qn(_`D>KADYgq)#mKhT>!3kY(1Q(kcoCs;#(a!+Knh!XzNW;$iuG2 zz+jaUo#7=X*}BA#iQ160g?HoFv`t;Y!gE#TQinxkvc0eU3-}>-MC-~TDlk~8AIQ*k zUk7zlJt(|bo$DzmRGo`_)%xI0`}B!-Dep;Br$iN9r73UP3G1)5UCj5{&PIw^jW6=l z$@^2TwA)YJxS}RH&ii5Z^;Wssv-U+;clLmo(jOq+7}cQ%r&T-SnS*A3;H<19!;%D@ zWKpx!;X**jP1IElJxxZ1lJ|z5vrnm2F;2%Lq?)txNxdu5eW*bJxF@QK#ZBR8F=tkV~Qv@CV>qk>zC*ykf-rxof0%hE<&GNBC=t9yxs0<)&(2v0t1WVQkf$mmDe)H7f%Gs z6ZPGi4Y&2r+328q249W3Hgi90OF+-IF7&3lk2X^x8gp z#_jRkqrp8X@VhFuzKw&g4(q_Py0(=__eeeZUgaye28C$y_Nc1#+*6{Z!xsRvRTnbS zt8`1~>dK=x`H9=y{2ar6S2c)vvh_w`spqY_>;x-&UrmFe z&G6V*BYj2-)8Bt&WR5?+Inw`*X(KJGpSC$v(rbuMaZK!8(h_6ec4M`TdYVp%y`k|g z^f{oTJj}ehl3g;xd=1#QT(7=Yg8=lKi#g4z6ufPxwWNo7HL=M~F3@%PGyhSP{>7q8 zjm<;XXC|@FKELP9aOS_|DJ7A@;N!|%C($pR}btI#1dR3cCs=iU964lKgZ&+k9{r+Esq|Mn(kWMAfT9?IZ;VL|%h=<2caJtn^QqCAoX47d_kCj%534s|`zIO)+gfgF zMRs$wxjWxoyssOO2c}%Rq-=53xv603F`uKA zjK{B9idW{oZ%Mqeg8Rxs9l3@-x8v3ZX}jm8yDgDHow+@~XXVbar=|qkgMQFnrGZ=% zc>d+{b6P;X()l4|`S98&H>0KNhR*T|SGguRaBh^t8&oyK7#1z7_bdmWO}W0^<$T}E zIR(`_h$4M;kB2pzb9nONg+*2!5tl~ZDjIG>WG1kz6iTom_UeVrrxm|(nOUlJi6u|p Tc;+|Re+Q1X&Nk&%feHTyZ&qHs literal 0 HcmV?d00001 diff --git a/doc/_img/features-xmr-stak.png b/doc/_img/features-xmr-stak.png new file mode 100644 index 0000000000000000000000000000000000000000..ef75a3b14900b26de7aaaa9d35eefbda57507bb9 GIT binary patch literal 131998 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 literal 0 HcmV?d00001 diff --git a/doc/_img/fee.png b/doc/_img/fee.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3cdaf00aac9a238f1bdeb5bd1e6b089d0e8b8d GIT binary patch literal 47658 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

>=ikz93r``Q=taV=U_;$ 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 U?+A(f)fd(JIt1+!yi@3Z06;foq5uE@ literal 0 HcmV?d00001 diff --git a/doc/_img/fine-tuning.png b/doc/_img/fine-tuning.png new file mode 100644 index 0000000000000000000000000000000000000000..6b817cffe64118b20fb6ce4560e1ab4edb2da007 GIT binary patch literal 5860 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 S$8UT@H8Zj{tkU=V<9`4a1^ed! literal 0 HcmV?d00001 diff --git a/doc/_img/gpu.png b/doc/_img/gpu.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5578007e31c9231567aa9d2c1675419ee54d5d GIT binary patch literal 399628 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 V|pqZsNs+7`0lL5USSe%J#u9vjP+@L;POnk z4+T4~IP726-HW+Wr1e{w%aAu>buf3mddiY8-2af7$4_j2W?W9aIe|!!fDcLf;u|9^ zq^*p9B>?qY$&D~^0V|Q^b7$H>7dDyEPedSj^ZriX@HTZo+4Ok#8O0qFvt&1g)`Ltu z(Ho1loy!x+x>>7`XDaW7%}n{G1XNf-VCY*j91o-bA8 zoOM6CcvS5RZ9f26^i81~btl0s;aSNGo-Y!SIFK?fny#|94(Q}0JZ-5wcv~DXx-1WR z0Sy51)uO)@%I|e*8-a)sQl|@nFN(6NX=B|PILL((A4rr=xzpmI%kyw@IMLw)Zqse? zc3NKlOuXr;u|e^UNx;6#f@mCaS9Sm{rBs-1+v4&XZ0@YxPYet#am@FyqAkIgk=uu< zZEf*o^!>rj^#7MiN#-(epoQM;a#*@x7WRQ}-`}S-dev?1pJm8)CB!k#&z-3Ph`RI( zw#l-}KTcW9E`*QWerf%?ijtZoW!Gpjd1!x}Eoz8}z3pYeC3~v=LE-?CDSckdP~tqa zZPaj_!52Y60?ytT$)$spOnW{7Yk@zo%WLPuTK7rM4~D{rW2`+?p8zdc@coJxcyX^4xRS*7F zcQsttflDO_cD)^D?JIRNq81SH!WJM996l(gEAyviRsaFWlZHVn-^ko*JfC?)-|*-g zf7A~w+pJ0N!PTdJWqk`I+{#7O%nGOgcyN|l+gZ$OztcQRg{y{VdftRnK6?X|6W+hT zkO80@TL0mdnIy}AT!`f>qu#TO8^6cR41Z2YGq3Cd2X1sC6jb*2s}&mdiys*llsU*y z|NNSy-?iZ+1Nl{M``TIjO-hs4q?Tt`#(BC%1x)u^oxYi7FSL1bZTf<0I7DI;i>r0u zvO`#U5ASj1nBWw7jO5l(N&=WRsQ!KkkkQ!lZk|=VtD?^j8Y&1Nx?j?~awpve7xQj> zLMf!^=RFnfz2Co=Io?e22*w(wvyxg!!LL^WzY%F75UayjrS3e9U z)}A2ed(Pl!>k&1UiWqh$*kf-r)>u?ri4pSs4nq*zZ`CnLE_%+GtG9w#bM#+8)-G(p zi@Rh=C;W-v3r&1Bz>hWUIJ1=oJ?R6g7b1pxQH)j2S^!5nrgCP>?q$EwGa?Cjq)bfF z!{HB|frF}+A~LspUSR)+qWXB~0~1 zh%a~{3k78vShlQ4@^)`?bdh(t#J>A8?4ZukA33L|8rOa*b1StVsEnPU;Zs9_&kwuB zg8x+#X)Z;-l(4&PULUZb?>d&0pjkEz0cA>98HQ;?Pu4W9&ptX|Z~u6Cl3aQkRX;eu ztw~+oe0KHd=CJwIQx%cUZ)D6azs%M4?ESq7Ay_kFX=lEKhIV7VB|JbyxAeCoQqyeV zto+GaRT}GA710AHi7E|bUEdK_ada>|fO+h4K1R{!z(bKHkRwre>C-CsywA)5W)~0F zekFinpX52q_^sywIJafAcg1hyV&*Q6ZnKYQhbM_N(=#!HdPtyl)%1G5#u?IRoRs$_ zC0E?K;^v23s@>)D-E3)svp)Yprm!RU*^T`i;e*iKwd)M-45~u@TXO`QDsR_)+U9Ns z^geffSTe9xYNjajVOc7@>B5^peH|+Q(~lw3d@~vFHs|yYmt}o2|1pp&;C+y4f_Wsu*lH^Pm%RBdMYw{x6#vXKkrj{~7&t zX5r<^%~y1iA1VrF@%d@t_q2}4r_q8tP2~IW*pDU5TrZU$9)&tg$Osu!VP*S87E} zk~luKg=%e9Z+LlbTMZP7^1Vq|^8&S%Q&Ur{uCCg5EcWK!ubclLmNgRyCyF9fF0w`K zn5Nlgoo&W@ApK$CNtDxI2LryW6v2_lDI7zK#<^RAw16Pn$OQejbQ zl%Sprh~T$5lTmwK!i^uX*cP3xHdChhIVabg0Lh|Dv*nO7t)WT_LT=x@|B-wM83Wy4asoj0fExnj)JbR6MG zt4}0YRIhixhKA*J8U8e}m(}& zzcpOaiK69}QbrvX^tQ)$#Ky(Cw?l2z@VLS@gUdGP+t z8Z{vw4(k!g4jOlR9T^Xey$RukISv^xpj@+>sjxGYqeDVZD6dyvkH8==!g z;QW1m^^H&7B4nV@)mZyO64BFD=tVF_g^L&DqKM0AW-)?8>w zIy(GxeQEaD)kgAbOQU6Mr=?<_8N~kw8Tt=T~XD|5dy$VES-5 z#>*WkE>=zkt@hL{9=#V?lY_`*rSzj{f()ng$_k(o9csUb(d37Ek+qk-mt$t+)z)5B zTs@q~VNd^hMK?5gkqH{7E4)@x#4H4__qw$BjREG7K;jc>d%cpi36IGcqm^A`sfd_s z+hndYU@QIi>*c^?;h}>E3!8OuV%1EYH6H6XBfn#{>geY8`tzjdurXrXMThcSgDnU3 zED0J=t$OlK;?q|0azCfgA^a=;vk5Qh9HRDbi(C3k*S(o;IH_?YPbJ}WFA;~f1t~L@ z2g{K7Uk~11|AgbwBP;7-+|TBhsgFxY3^4Bv&JTXqi14li5}1tF^ZYFoRi=uObHKE@ zIAqtc>p+$5RL6~r$z_OCsj{sN6-X6qifyZmJP{(uKLRf_g0?0q!(X)Y92D$^gfD%u zsxXA)2~YhC&4>4ZP`J}3=~4GYWMrsi4hu+^Pbes4wupLW7rEml$SMJli3AIuxOPEf zu7Co^Ph+`4NgMaxU8?JDmyt%95rJ}JjPH@RD`ZZFHz{7ZE7qVB-PQu;}aEV zt7p!i;+4v0nY~|~t4szSGWSIX*M&Vg?V}YA`Y6LAx6=QLW2y47L2Y71W%9^uh$m4% zPs^3w`OKMU>)Rs3W&{&gnZ4WT%yUQ|$$+QC$>gmG)pM$H-ldhD$Xa(kful%~=vS%I zJIz#k*M$t%+!8B`FZULcsKH99688Di_PmG73% zd2!&=x);xV5i_+Z`G>c<>$M}q+L5Jj8{0_6W46tu0|hLrsmHVaTwwHcpg|LFN^btx z`QCRP*M?#U6MTv&_gZDi6b!yL>N$&9H0HMUHQ!zE z<$gf04Q5BaB^QJIFXmcaEW4MtoEiCkKvy_^Yp!I*d4l9bws73{@Cbo*uY2;7rjbO0 zHp06SrHskYBkj1H;PdWMB>@I35Wx>B6%J_UPJTQcz8_4aYnaL1bIux%3&KulyE<)} zETFhguPULVNtX4w{`QvB$bC@5erJwH$E>qRE1zH`K`&f^NOen}v;+VCPY5uT7^%St z6Pf9R!gT+uPIu|z{Y&+nvb5kz(b4KeDXVN2#k{HawaV5*Q9IN7bDE?SuEp;cUdQG* z-yo?AAQ9Y1z|WaM_F)ma-ue3_O!Aq}k={oCaDph$VCsQdm#Ir8Ez&_r%5 zUPy^>T{oe>Lua#+Is4w4&=iZ{6q&35fqiP90`e_887Rey<&ZB_!cW)Hqq?UZWQh@^ z?#th=FKFiu#|ijoHTc4a2BGVv`3zJ@ffU>Q1onZ^A|+rK2Qh+y8_y_L;Adsf5x5QQ zq9@&!I|-P{_y)+7lP zm`NjChvySL?(|A|t9ZvudacGA$i>IL@eBa1@Af5M*G-jg4#x%Tv04A{bGzX}lY2I` z963qtA$XjOq&%76{48}wGwIBz@X8j!S>BFu>Q1H(p6dic|KssGwtEXov7O;EJaeS( zUxmN`K3esoXe*}v2bRTmuZ@*2SBfS^kGr)8&Mt?X@w>JD^c$vob_y*gf5gip;YO(c z>78BqFo=!s(Z(_}-1|Fc^eWIIQSE%b@vwE){*mp1*9yjc z#r~eEx11N96Y^yo*=^D;J|nq7n|W`#;ndv`T)9Q&4tH9gxy=1ykbpU4qnZczN4$}^E4tbH=j<55pTF2jO(-z@NO-(*2tcklg4Zq*?9e_X zpBd#GY%6Us2VY27A}oL-03`*RC6qt=3J2ADa3c~rgZ~NxsD-xihl%mW+(IOyU=ctW z>8wrtPMl4b_93o&MLN;`s?>}BN7Q@AQ~ihk|0P1nPBK$R)-ggxPDB~UcI>^fHyOu# z+sWqG9EC$=?-{aZCxkdgcJ|6%zo*~#`}uzUtlO=QoAY`-$8|lf``t50pT!41Os9!{ zc|9Ay>UOsuHqY4rb!v0p)zCUXMcZrjG&UEPXPqi-o(BDcfc`M9XmM7>M z=f<3mf3Na~!sEg3=A^v7EUkATb8;>x_8?F|>vlSwYF(6HVw}_-Xige%Ih%$NGmm!= zkVU)_8TQ@r?ijx^d%!~ALng`~;^?+y-*=fy%7#8vy#wmyKLTip9+StCe3(hj z5hBSE+rfF7W{u_U$82!*dA^PV1G+4FSZNjfiDE*?N7G^af+X#H2tQWfg(M*sr)soB z1%|CNEOT`~H{a>hL2Gwpf-!+vtpg-j7-P9APhDpUE~z^-b;WhKSpH{j?D-by+qqHo z^dz6=Ru^W{M(U(>{U^cr!kTT1^<89;VsNLNZN|lB2@8C`?FL10QW6t>n6a%{$8Yfo zbTt~*5NN@gZL?&2Z3pne7;4yC@6BPl%@V%V z#PQ_(Z*l53Li-qrB^CmMmQ0uB3))hbeQ(ubrTP3#dzDm9O#^eXt+~eH>W!G%=weu@ zPf?wE*Fn~!DFlJz(tM0D{^fL^kL)PiV zw__Hx7BxpbsneSE2RWt7H+*0`uu_Ibga;630u@@U3`nirKIDn1R3m-Zz2t9`t~BEL zob5hK3VE3M6Q6IUm!af6W-(m*hbosp$N#4YeE$2Dyg3u2><3tAa5sbHGIuh~zG2eK zX(dH(x}}rD{MnqHb=Q|Ra`A>xs&{j&)kkr!8PcVXwQx2BHBWY4f^)^T-W^lj3f7R1 zVs@W?{kTKY&;K@Kb(Vbrph{+J@N#S76C7e+Q`&(rl#Tm6j=#TD{&_|@XD$dkgz$xE z{6y6*5^ANjKJeE>I>NSjvX%apat7shOt;0#%kR*;b}x1UIz=DFtheamx~$=(AppF; zOlRyZFEBJ1|18eypXofe@C(85>T&C@sT+&(Abb zq_+cO$t%{x6sU&ZnYX~4%v<_46Ctb&^v1;>7%X#rcVzYt_5A+#cyMGg5j3Os!-QMb z?zh{|PmLxNvfkQD9-epe8T#__ZK8L7m$Rx>rFHZnc6_fH3WDilTRn^pO_7I8&VL8s z6>s+^A1izuO#-D(s%|qYEW}*o2iWcNN8_i$VI{JpdhL_0VOn%J8t6uCM6Q@I zmjcIoDd}W;6^7W`AD+b4do?$$UP$Ua9oi2bR}x7>f%D#SC+`XDBvU21tq;*PL1w<- z-n8&r@k(B@k~_Z4V(%@34f-NV#iwgNFxlk(Zyp9`(5L^;@#gcIpfS4sid|R%`)uRU zrM4RN&^EoB3&-0z{UtMn2#2&cZR{U<5DTD0czQFmkKJ5^A>K-N2?>-7?ovJ%Y~$RWbj087*83MR-#gdq;X(Y&H*6SQ=QOdg^qk#zc;{Zt}0Cw0jB zJt{$~P?w{yb>PAa27n5Hg>H>6a@fTRo|E>upAbfxkc^kRh3ODtFytX9m`?wd=e3bd zrLpOIL$Cjq>c6i2$3}IV?cS8#-v5>lx7sW4*SQ{E9Atjvun~kd?~EwXU<(XHvI2!J zbu4e{>M5q;*SJQE+V_j`R3;+GW2oCDm2(}+x6451nsVoIouyDg6m2ZNU<*1akpY-? zf$YP;;s-v$InZ95XV2Wq)gWoh?$KC;)ax7n>5_z-4?ggJ`lsL633Qb~0VJtV6#V-$ zGMr~#M}zk>fidR)7QV0ef9>7AI=#{T+>MJn_flS6={n=%A#$3kkjy!(Llw=$Kn67> zo>vuETM!8=}7TE?ixQM^YoFXyt8 z+79|FJHC?5k%9`vCMWV;Nq33QNE_ZQLnKc69Y`6KFRl0YTPD9B;IG}}4Q?Ji*eoF`Dn=0XUzP0kO5L}x zY2Kc7JJ7V?5obz#LrfRFseAt>Yn~d5Mg3DHLRn`S$EieSoM@u%Ii}UI8tYw_N$F;pS6se{#GYBeHeUD#LwPhNc6Eb zA<;s{aJeBU`yxq5Aw^(JTOdc3D*B%3Pg{kCeHzddtRhaQvB{ymN8LY;uwVIptW<0N zx7ZTOZ3){gdM&8syH!9JB`dn!Z074wJtoJoLmy;(&SiMr0*2Kc1%=2`aE@pCi_Q10 z_>wzs5XZLsV;^8pg3Ced9%FbJB|ujC{f?VjmiLG9@IomV%AbuIfOtB3Ei z(8S!g8yEgD;W3^wM0sA{BHpgfd)#48@WBwm+-CjRYd@T&@DC%jeQL!7b!v`n#^%J2($Zd<*7U0O4}IL;))eVFeuO$ z23%(afu^>~K95X!3k^=xyH7E$PO2)QYHviC%yB}1z*@@A0llcY-Od7Mc;K&x-fiN) z#nvwXMmqF3^fsRYS|<`92M0b%fWj{rf>QU@GJ0eB<&^WVAFXP{kpvz&cqNGh(T;)V z+CE4*k%Cr8;b_~wP*X!I`(#({vt;hocQ1a|7_zb@-)({K$xo?@>-ZbBe}t+Wz+$xu zt3S+wLZY^tq{jSZi36r|728O&(u)b2C@3+FFQCu78r<5Y3J)cClio(pS1u z9J_KxdlC3(P*K$5x)KSqcQ*JwJeoP)EHE!%?C{ebF7vum9ZT4B9Qri)Aahs5%8!*T z`d;AuD%Q;s3z%cqhpY2|fGo(cuyFj$%@SVF99UX7qBJ^}3La`j?Oe(l+#`CSADroMJmB;t_*;D;}D0hC5fr8|J%sLDrYmY)r{6upF z>|D0mLj;&1NvG>IEF_YLyFL`zC$^E$(5c*;ix(v1Cp>O-H1LFaj3zL*dcH(EFPh(#$ftHE@69;Iz)uBy1zVm~S z?4Q3>JhPYDuP-yM`uXpk4buHMU|kWHtMg}F044h5Qp@uW-YTy{*4WsYnD<>kz2Vln zyhEIlhRirvBEcogWn`RUb(2j5Rek?i4)9(qMI&CZD4zaFBU{Kw?)FCi88{kYWnx0;uJ0qnVZp!)ev!jFJH_pD@^^i+yg`dQh{cHOuXxWb%@Pm?4&~N=qar zc;)2Cfn?50(TNYT6YWxOu1mx*B=xaMt%)7u%@+?} z$q!fY$#`;xQmR&`<=I#q&!o!H7ojxa2*0fdYwVaoJPA1eFa)TO$OXUFuqBd?2zGk< z20dmiKc9+vDS!#|SFQf`sYxDQL1LJ?ewKmK?)0xGl_b~bE9_h60(^av@q5;SzPE#i zz-4~;mV$DEjw071yH`dG!QISa-+?J++Od|i5nO}DXT1_HO}tvdk=hhp&j31p5zH|E zWd4V|h_2N!GWzl>RAQ^AB1*Yn@QYQpsiQv{3~4o;&76TDcfE)2QsP#CJa; z$g(iB71n5|+tenu-E?IxF)sgwI4Nl6P2OD=3fEl0^D*2wd(s2qCQC`3=D*;i-nA)d zmzq`UbtX%3wHKhf^5CkNM_^ybC6D%>Ye?@U)klyTfxy5L0W?8HlrZTsg_yuv zX1VjQ)(XcGYBz(xm44eFwL#>62$u;e791Q$DokONzDHzTnZ83SCs<)3!oIjvDZZ9& zR5&qv-O=eQz`^rLHo9FCmG>y{=s337vqnOPR8CF zUltlRRMNP7E^`QUP)P5NB7Y+%N7b2q9(hxi*%NvGaJGnxxk5H%^SHo}LI=m4z8?CI z4TQa#x5@EmUTVh^aYW3gUOMX}b;DUG+P?l$MckPd1QVh@~lFaYmCj9#B>_z}jI zj9P@ZnTQC^s7606SyANnm>02xk(S#>g1Ym9y_XRfIUo)1a0yzeuLFYwvs%djbkVoZ zp;9=k&dG7!l!toPu-V7n{DxKr0MS6i?%|U1k4<#cZ{da0U(f600X*AU zP)3jbj1|*)diuhJL4_9 z#AYpsY)mwUza}J&%eRp(8n1J+F1}{;WnWEMrKYXondl~~VIQmNc4eH1NqFEV-^c-! z`Y5i_?X%xCX}9_-3Lmh9{T=B5Q5H*0x%cZ0!mOYAXX`}Z&Wu)^qe3x&68DtkHA8nA zf?zuY@g8MRhwa z1M9Q*PG*>6oDFT}TO5x?lZKD?pvFK1ujO)OUQz9PPE)$g+PXl&H-aelVJ8r%l<^O6$D+uLp|%Z;U^=`>~)T^cOgIoZ_`XTV{p1p{muYymsB;OXh+&*_%ISrU2C2xxQe z1I8z_KNe1$mwfe5nU3fpQ(mi8+n}m}=1qJBDN36XLwOKP{oP+)R800CyrW;YA%UEf zJM86t+ma*j+dm$1au;1VO$uSx2+8%;&)JcY>kqjNHH4Qzdrxg;nx!cV$p8Cq_9EN+ z-GqGbn_tcs-jihD47=5PRw@fcV^h;w zdhy}ThP})eWB;ic?|$JW9N4bjrKe<3l(Gr{Mc?Fo&@2wvX(2tP53ph~4g3*ZJ02V| zU4rdfE2eZOp1Vb&Mw^eTQGZE2TiG1QN3wcAcx+_q%R`_??ev;IH=)9TaCZN$x(DY0 zB0axTYFKD71+`d@)X&T(My7-N1A0aI7_qci|G3|E57xdvMJ&O+k4(3C3kId#GTT({ z4k)o<1%Pt4A3+XcT`q=J?FAS);My4kRA-`3FkZ@AmDEXG(AmdCLAK(G38s1sgkU0H z1}VMzO@p&5D*l@`ZC{EJ4EgC!|2{*39O@lIxQNi*7*`j=BvNHBV>rv#H&S)(^CDng zd3gnx7asLSs~F-K16V!~X!Ut90LTsy=IGSCl%AYc0nC2y4L%j|ORrB~`*jQrb0z+2 zv!=E09{ZE+m$XC8+(7&co-m)^yf1{Y$`~`zt>8THqgK1@c{p5s*xY~vF?N-JH3GWm z|3rjrhXE5NF^_mo#LV5{pgX1sucvw$n9l|VXzyF+4t?HA0z6P_p}?S4&c0uX5Ef;G z_XQK+SXS25XkFw_zu)VO-#&v~9uqHHSy>C}k8a!1h5=lW3E!WAiTw=Y5B7n3ddRh2 zHo)fq#*qoPmBLHgU&k&XW8{Jax_4%eiz%)zk`akaKBUxbRx!Bs=h6N9s1@ zq~gq32B|g57~elR9tjZtGwKAwqRy*|^10O)FMrm|HMU617c+<401XOF^Ne%l0K;90 z%jx?7@3p36j{k8-y21Iy67#tg7woX8AALbOSQDz%^}cz$Ulb%BL&>O={bmXT>?of& zSlL;`kL{cuJ^tbMwx@FF)x$k!`r~`O7&nfq=_|j7#ij?|%669P_vpBL37y`6j;Y@9${9$rKkLqZxB5dj<5x@=`6!9chh09a6ICrMF$Ug zmSuv+$w|hjTlQmpns$Sqg{#z6O=@W-)K#F$eV;E3G!hTi6m1F1rO4gr*AV+hn%>?=Huy(r_YP8xAjF4jlqbGQNo0DP+3d)1h&Di7dFY$Oq>R=&qW zx<4{Sv8SgEYKCx0a(o@K45LG;|5lI;FTBWY;PdR37VZb}ngHP=&Cm_Baq)8|t<~!a zZ*@IpvE#A?m6g+vH9Dpq%=&Hn0gb4A(?u5;Mhnq`eO(#%02bO5@q@>*F$|nETHaqn zezrpW6eNU-mD0S@t$?d5RNL4m3*ZC+4NhraJ4^`Xw#RV|XR{Wfe}vz_u2}`Ok>5`Y z0pLFWo%WQ7#J95iY8;*C=P-$b>e6{aai^vOngR*&eRKG$vCq$l)y)X*o^e-Di~9;J zPiyBmWOs)0g~W0o)1N}#kv>qd%7l-6sB@`hm&VzWNVQHeMM6iLF4|L}(IkNoq0@i# z`7iquI%hKoJkT=+h$k4h5{Yd3_JyPzI=axI55Xl7Cz#%q=P!mB@GvRM*KMGrC-@+U zA7W9t;9v710sLQQ@``8&iI#kna#`6dCt@*Q;z6=nR~Ay3Rp~i3ByYh%sV)fzLTkkd zH!fb;b7HutZW~{C;HSFf3?=AqC4%Ed(y}k|$s9X zoai>ixyd>9~c4fByVqNycuF4gB8}NzC2I6~vDK9dcQ`^Zeb?$*+pz716dXW%*u98DNg8HcP*sKO$(0 zW`P5H_M=GJNq0ATmLcaCez`8nxS{!@fSp|Kkx?Yb#P3;hSoaK!4oF_$jTk83vRV_+tqI?k+2WE+dV3Q*?=-PQix z9DM!SQJtzAll~phYka}MM9uEdpSC6Qs0Bh>S>jKQwv1h!3Ykj%Cm6Svg=ZZR&cUm z)rSRd6?2BF>mqcX5?H3i^Eg59zJ7Vr3e~Ple!etnF)6ghSbQI#0npl;ZlWbHtYn7p zDwrtYOnQRpa0C5|V)4R5{V!6{%UY4a5IE5EsV{H7!Z4*NGB;5=DKRG#za3gi^V_}q#@=!l z_)Nvb^f^={UR*o_99MreQf}*7+~|@2)W@WJ-0CBY;2L)Bb2?$MyQUB?20|3IlDqBm z2!c#@``5$bi(S&6y%aCBE6mVHut|6R`%@C_JO2zeyYMfq(xARVr%6@t&dSBvVTIGI z5dawDGXu6&e`F*sruJV6>|kSrh(pA43y-(ue3J1S^o!bp+H3gRO|9pkwFDRb7qp7N z=+g&(oS2z!ppGk`W0~s^V2aLX(LVh)701@N(eBb&0!#K_dXhm6X`E2OO(-%<@6q0= zz&a6~M|_)cImx?cBVG1-mLP3t&2eMgaoMzSUz&@S?0&eiNL6E46n)W3*gKpVE$c)* zy|u&p$isoIqgtPVaa+&sbLEfjl5d3~=~^P1JsbVtd`baj`yRFYR>JhLs{t!kvc*o@ zmt~_OPFD5Xgl(DK`j6;r(8%6`M%DL1Rm-PKgerjqIPHfHM=%i1TsQTPQ@hh(7ibi{JwmMbbv7lkaiz8tJF?R=f!~V zP@at*nrFe*jN_{PXsMVW;KjGx=8Oqh;QxDU#z?=_x_` zOK4bSkfUr^H@#w-YyOo)>;m9y{fD9f*z)cPIkjJUj!nAbi>rRStJXk21_}Qtz9_Gw z3o@d1B5dKyGEhV(f5h7H$x=jBN6Yk5yqxLht7L0e%t>WHaleAGp zD?E=;$A79gMUM&+9L@BaoYTHqhL%`u1a!4$a;*%j3{+itlx4}SS@KFTlL%y};L$+| zm0_FwwOApSTC&l*Ub#0YmnF6zLcvjaWh$Ja9i1;w(CZf6ci%eD0+%#VgbFg?0Di{) zXbwze=pLuCSp`h?P9V@vqP0W$xddD)V(c^_Kl-oV^iBDa9`h@{chajT-l! z!lg2wQu*uBFOKECxZ}`MGW_#GW+`ccxAC!WAF5MiM%764N8TRilYUnLp<)+k#ELil z*HY+{K}1;aP2FS%Jp+_Ya3YhAvuDp+uo$^6an7C}dIGVezJE9LG+MqDAjlgSnS3_z zflQm_!($)@>GIhQ07|aO3)V8ddu}Dxh6AI)Zm<1+@~w7yl-^?5A`BtNrKgP52`Gwd z{Ibivr<2T5Rw2lB8L-#PlYcpzH)o5|5~RCXfJP=iKnIXI*jY9hE?ceqB|BB;^{yKB zLMv2`F6NHUE}o9A1BxJrN*mCL0@AupYIea8Q5m%VyleW#HCAx<%LC<4dzs*1ktq@I z={kYu^&fd?`Yl-pFqt{By+kr5q*(tvOwgtZLKs_rzL;&dKrno~trIlj)ZOu^t0aJM zn>eR@dB>a->z_Y(Dz6;Coy{+ebyKP|f7XIsE|i#k>+$_D!xD7E6U5^~X4VeF)}Pxd zKJFLvf4z79fbLxb4c9m#p#!B8R4;t21h)MFnE)J(+xh%X8?JX98lyO~XKe z{SQP>EGtDdY1lCkIHi`h_RuTPp^&TI+h_lvvwZ+WOKB4mN)bx=+i^1O1*5h~evZ@@ zxAvg96Se>&TjQV^Vh#ZLxBZ|jO0z%y`A4_Mfmt|e>Cudxz9v5@KUPeLl%IQTiReP{ z@=u#uo9cAoi;`!1+irfyG_A^B^vk=}#S^ujv2dTJSk5AtwnQ>U9<&YEy=c({TlcHR zyh4u_iXVM2o4ML~eYk~dA9@lFXwe(E+VIipQKc3IDb`6TlUYD zS@2^e{IAhSc*B4+7fXebYhe{-gk9cRXO!ucvAJ zkT@?Mx+QJo5V|?$e*Jyd$MGa_lJQSg(x|{zMi)nU)HroYjFd(9zY}!_8Z1fcehSrp z*xgt_6}IHJGE^85m&$R$+iAuWV`vIwE3A9Q(Y>C&jTqwnUhq zg){SyeT}w34Uf_dgmBrMzxs(TKbgxWIhhUs_?h1|iajm_lCK|Q{6ES^Fj=xYELRUD zyt8sxc7$nBV~oFaxqO_c5j~UaxcYaci>XamAgll@$i|&zQGn}^taJb!?k~&(l{P;b zND{$)7HXt;^38aA_xt*8eq2QOeKATMvKNxoRA8xZ{=0BeA)or$g^I}h-0Lv-nF}hX ziZfx#7o1^}waV)fz*Gr?bRAl@U<8dY;=q7%%v&41V|Ichsb0wK{C|YE^2qb?%^p{) z*b%j-4ta&Fcn=H=nCR13cqghE-HVuiuT>eb?a3J=C;vL8xVSie<*PhZriKyd5(17~ zvcofwqBM8X^1B!QB&gNOGGEN%+@9K^z0IjGaQ#G`*z@|-dXGHFOnGXxCinfEHBicb zZhCa(2xZRHFuBhW0=w~5w%Z+4gMgjSz_a~rfUw+1l%P^i1;e=8YL%YloTgW1beH)& zB<-=JQwVtwv|sMdo+`)lq<5CT%qUza>G!Y9=$#@D`}S0d@6!?aWLYNx^C@-{GVGZ0#?f@JT*gl)1z6FT!!Vs3!b zO8!0~VbMb0qIcgzRX!0?{!pEw!lWx9VMP?ZJ>N+GHJx3VHac8W^j~p;E-NwGLKMtK zTI0*vXvV7pS}6ox4vkpY*lH5MOcEyxE{3DJeu>3^d0sXmJiJ-9{>tcm-v>Z9AVcx> zQI_VX4GxO#XQtMVd-@64t|Kp2xLRLbbmG%|!6_Gq^k_>99!~H)(@})EXae9~W9bEN zlI-;eLP_7p{(5dKYjOW0%9Z9>{eBla3%P&Aa)Z-SH(cJzAL?5~9NfEL$9T>CauW>t z@8E#R>DvYA7U{Sw=)7)`8EBW)p!R3zSkc58#wI$G4L|%xQ zYo+WtC>2$YL5&qekJR4K*^O!M5zaFmm$e_@k3Ud1y4ZUE)_!X?OElvnhg!X;)_T9F zTB^X`C6H-q6Dtid5KS@F&1d+>V&pnr7hY!ny{z=)PcadOC5GC+ogW_DsdDL6M0@B8 zU=jT*{4;*fLHESm{P6OzmGHjPcgRGstRpv>aUA-a^2QND^4@9L-R|A7kLRk3qGKX!h|IT z(Cag(??CnqQPNG#Ug?>84YVN!PR!0-*MAQifJC-vvLRxhzYMF_;`m zzIoSrp#JUyVA;@Qvd2l<4Gy)3+juJ8nFl4D=y06UQ?5b&hD{-Cws*3il8&B{DH3Th zo;LwOA>K6_0;|+#&q$Kqo;(HI51GVv;kr(Lcodl=zkkEM#nQWmj00KIi}k!P?2L zLC!~X|E@G?3Ssau56oTyv!AJj<0a*FUP&S`yKFtbvX(hXo`7>7sf7Fc3C9QH0!I`q z(w#Rt%SE@nFK(vr7y?G6gF>t3%D;0M@Ss=;GP#`WJzm(Q9d}1AuO?nI@vXt-`p@){ z_#d!wH6Fg`8;)XQ4wxcu();v$0|&x|-BhuRR#*zMr2B$WkpWs>0UJNe^`sr%xC{G`mVo;Ea6Z_x7KO#MeO z0;ul6YHT-N;lh&!(_%-2Il#~mGW+*93w|XoqI=Ht z3ZJ_-bcFb7@#@=L1 z9mDr`HM*jMt~Odm!F72$q~$8Wu%xMojyqyqp^CrTRl9X`egsSvOjj%EnMf)Vb4aFkN@sT9`@gCk`9gWCT8Nc1cn(a(4bWdb zVxPH@G5R`9=JWHa^m`2BSqMI`6FG~txieZe$XsY(C~mY5y%+fahIrq-XjbEH4O=U0 zQBLNV%sNEvS+-NzG4}H}YtZ)<^)`olp;bUJ^f9So&aYHKC2PTqW3=!nc#!DNMulub z64&zhqkpsP9@Urf04>oO|0Fzh z)r0s>n;b_dYxH9ku(D^g&%FoW?%h4R(#ndapzSmDP4`AaBas7Wv`j8SBv4cw@N^#- zi)dbCQ3tVq(B(~FVk>vrW)eS3OW~||hD}lnpvEXHUEMX6x-&1be7tLZ&5Q>X&H6o7 z955usFiP~5=gQsyIulA=kNuuWSU=Dy_^w7~n}bX3DZLYT;ty(wi+~sw7=o#rx2IKe zFko=Wcdc_JP#(X#-tECP23?=K1R+1CLwYU#P{)e5*S1{w0g(Uli8^-gcp-LZ^Iep% z;j^$NIYOm`koIuW-S!k?uoMtr_m4NM#0S6MIs-vTIUA*`+crv>5C(DI)Y=*E47U|t zFpOApp4GP>1+0b>R@uut--DaZ`|NO(Ix@X0E^GBxK<9S8S{p{h;aZse%qe=FUSE z)W?4e#w|YtYL|p>J~VQ*BC*-N=euhy3JJ#>6K)0#t`;9!ITcROzH2UMpHmxvo0lfx zERK`X!dFjgrVnEQ$H=*2&zS|FMoRkN!Nra#XUxF*9kP-#{Z=WoNN`m^3??kouC-P2 z!l}Yyv;NG7MqaCq(RiYEwh{MJv#0XHA2j?H;)V5~R4Ah2S49Rww$PPRZ0 zfjG0)k_A$E7q3jUSPzfmdkw+n)?ojBbr_gj9gjS#U--}vwZqd|5w&_58Y@KIhhya8 zAQ;TI2l0|;rBDQ zA{(A>2pN+xIy!%Fu9twkODpw26dIIET)C=$j4lu0@36+AI;C|feD~y6D3~A1KjCy=o9o3>>x{_L zK%+i?!kS#r*H;3Fkeuh=+{KljY#sUcc$aFQRG=JcaNK%>G`i^AJ)mwg$V!ZsQ5{S| z;dQ&$FcfSftHij$y;WDAUVH8Pob#LHC7Jp;QLhs1B=b#NZAxiXOAqr^Z*ASXrM?)M zL8%$EYy$j8<<|xOM)v+(pr)53|EQsi<^sI;XR$QVA8+D?#90>;(OojWe65LgXq&%& z8GyaVrgrj;sT_zuX@e@k^9))%xpE-eGd@1IIvH{D4`0dl2`fPRGT=Pq5<~n0RI4{n zn9%0b{9qTAvg3#7x$i!1c0y~8KxXi0F;Qh_iPt~ok+p^!@FCw+DwP1f4Y1qC04=cK&dbTf)(i)Z9J$M!1oA_kXfKWmRLWh*R0QVz=2zLEb!V% zoG(b2y14j+ess|Hy{ychi|AIlA!C}6{}2H7Vc6A!+xTeN%IVev7;HRu+TL~Tmz(vU za0zc@_rei8r>T};@W!AF-qvO_=iuE6Re8}-Df9~L^0x~RYxGv2#*G3Jq1XbW#{kW= z@I7$Ml7dcfYwP)%7oJrHWjkGM_;3ol^-Np&*YSeqTQ^GBYPj$F(>_}*Z>HZ^JGhL# zT|>5((-30uJ<`~IYTFbh$WFF28c9*==agjGFVKt3fv83~X{J8~#npo8XJH$iQu<$} z;`r6xO&F@p%Sg#4{OQ?KrTzh6NF<3_n?V-nRg;o)4Xi;fxZ{?hLDE@EqLeylYE3~4lwU@Y zKi%CONCQipZ>UIwq+O24GvFTzzCm*cy}tAU?;}uKg(zs#tbUs)q)DoAaJx9A4EWbQ z+ff5`#aKV5gPm;%fHE#{U2gkt6Vfkv6Rb|I9~3x#kRswSXc}<3`mvpm2P{kJZaVbX zCrMleSX8wo@<+r%x7YG&f!qiR2zJ4K2~=8=_vLenKaOr9f1~pLS}v^W2Rq=PJVr~g z&ET9Sb@9uw*6T2>z=a_^Dd~Ch!OT%UB}8`N*&!qJZ4x4?J?@Dt=@1bf)O5G6u+(*R z@3F3$_uW6gg+R1!IifojMDX`3E3bDuQSU`Quo;s{zy|xkI+UR0W+oQ zkRQShe-qF6pS=ufopn(}qPJ~%k`Ql^Kd4k-T{EEsW8-JnhqL~EE_!p0Lx2O{>o8{% zaXlu7CxG?^6L7+T)WAxuhAAt&@4O9Gfc8mlJ?h<$ihRJkJG3egVj4mn#1}K9H&_33 zse06Q_k15aOhh;Et`R(?#52C@Sznt@Wl$mYaS2btW1au?n4X}l=CcdtKlfQZ^uPcOtY_C;#`HKh#TfAXR2&58q6<*Ly6BP3cOnPi`vHp* z1gPwyk7myPgAD$ZrzjxS1J_qc`ADt8?{~4;Ik-)7{F^GUOWJP-;%b@pkGZSIfDA8c zp*tqQV%e)@w<`l$nz}E?Ax+&aA`Ne-g2ph44ydcVyeW146Y>}}4`39ux9a1O$SI&b zaGpPYRsnkwV-99$_JjtOtH%c34Q%i44f9WQJfE=@LY}TB60y|1L&h&HB{3Sm`M>_K z=eEAXby?51i^mIgOcHgZT8G#SmT4UA#{HqD?-@GlN6fo!DS3_w!Br6-t7I%z0pp*& zP@X_NP3UuVn@3jPyE+Zohx7f=8(D33J)n+tKddp?!t}w{;tD}$SN&R586_X1hZ5W@ z_#h~QG*UWsnW(X#Hl|uoR?m%*-!Iy0 zkVz03q=gv0n<< z?k7N=orS)V4;=eg&GJyOH@>sLNF>x8w~>~SJ7G^Lt>$h3diU$!j4*#wv$N*D6rkS_ z&Bnd8!X`qVY0lrp8_yD&7}Kk)Xy{Ao>{OCxQ)8$3_3HIpMom+bRI&x^49x5NGBY)e zQ7-J9JUum3$Z5opOYzZ?0-3CEUgQ`seY)*^VRJDYXGj#VD(HzDR^L(vfzvDxdKP>M z?K3+1E26Clk8hwlsV7Jyu6gkMsRlv|AqRNT!_vBwDp_`_$on86Rd8_U=~jGWpo6YK)4O_pmvOy?2J!9~ zrrUq|lB8*XfNXNP%MHHtA?#*fj$@u(bozR!L6!iUDW8ZozlA&b|4&JDO~ zD)_8?hq_FwSOeWRdQAIFeyz2=%+QEFOwU+NnP{olgmxq;{$$zmdLVN9=TNB3H>s zeOD;(Rov1;n}m5J&!z`153BUqS;kaOgw*EtP01&pXPQ#(ew%Za)B0>7@2+w3Co7*L zI8cqfT2CpHc$?k)I(!vtgMSl9Pt=_vtH%J>V;=HpM98w$f;bZXLJ^eWZ-5(1w3)qB zL?VRvn?KpOJHQnXxI8U5C2fzB$(3xJ<`EYd%GI@$SFeELT$K|bUudkdJbc;~jljhF z9mF7-E|xq)X^OdO{qCa=3ycq1EJO#+r;5~;qPl(GoeF}HL!{pHdy$xW=Sw_UQpS(S ze{#}vG2IJmb^6I26;a-AIG$Td7DD;qVZHr<23Nw?y|mtt^p9Q zwaMDh>DiSSHU3z4YVK6=+vFnR*oCD)aeD4-} zG*t98`}sr{WLtbE^|zI`F&O_edZ*6!gcGRDxZcFW_ba&@`Ey$CyBj076fdvdy5X5H~#J)&|1I$Ku2G{VA|24GAS65Ub({Se17~4R3|J~K+=n>SQuN5O0X;> zAi5na&YX2gi}@8}(QHcXvUN^yZLf?D=&SO+J0A|y6glBW}1l86h+s}>iP3ykk|8&pltE3!w_PfQ2SvHn-bPBiKEE~Z0 zibyx_`PZ)r(yGZLdSb~d{|gA@p0Zu)btwMM^fuTN`vA7T`cW^+zKw?x;(ie86LKc< zlnUoCOsLXAKi?o!Hg^?*NRs*jF_XswqS|-pg?gTtbqz=y0<(=$lTCX2rv9T)gf9m? z!Aze9(3RUN>AvBmWs_RJ!_3{ZWUSVmrw76J+AqG&0kj`NHc=LIwez%X`jpZ*{ zSXB1{$5rFzX<6RlS~V+>h*C&_d#y@chl7z@JUxasei|-nqV8Pb?wOg z@Gz!JjBX})w~VS4e940dFhQ)rCqsPg{c&6ptE+KLKsb41S8!hwfKP|-#4sKuKQLUc6&$h2+ zJcBO2t;#~fV4lk7iI0ytrRN3ru661@7_#}C^Q(aUN+E%|yV{0O>AaPfX+v6)QaU7F zH%};IkRGM|)KYv9p$A&nOY=Pa{I`QCh7&*qk=U41eIAs~!6>H0j!i92T|R-If-lDW zMb_a{iDDS`A<1p_;PyaaXEvKrSokg@Q*l&B*hY zBO}uzBe^t{0$lGqT_wozCI5r8@+#on9WblUoMyG^S$aRcs>c0QTGP{AGlfR?u{37v zp`JK0R6$^Y(Cx@`TYcB)bJXX5w+!BPHTn+@RO5E{CA$CAlbX_wv6kjKPk$BE;bZ8k zDRL#mch?Lv{Em}+j9G8E4&`5-6?iVWyRWO#p=2qDdbSUw~q+gd4?WyXvGCdkJrW<0~>gKn3$45yaC_0kq;axf%XcKaTkp!Ls>-(~OC zcHUa|e$l|lcbnfs{#r$cwi)iQh_J_c^5X$LyytGH z#C(coytXE;i#EesXnxcp>dQq<9(9Q6f7?km!M_nbYe(p9u+;j0VHbF%#ts725exU0 zXLBLR&J6l5da{uIoA_P-Ei@=9Ddkj^jI4P4(;uT$;cEXYcJm;$>LriiIA*R?sGFUo zj4^~9_^rk}EE&4Tp@dcA{aMT^*JJWCzZfo_vf!VM?@E?ueM6btpEKC`&s)dM*s}uhKl2!_ zWB=BLSih*3Zf;uDHB|$)rQy%QdV7gMwFVgEB;~))xAAM27}c8wH2vS_Kr&bj=)PtK z_jjKY7l|#g9P9Dj&bMTY$@&*h8uc=gE|`WxLw>OoQz6_?7fzx6%C0G zUYQV1tTk)(P)vXKSse9D(;_+L$CAMdyZ(6;XVFRB0_ftH($3da2<<41R6&&@{=Vx< z(w0^OuhSw@`P%Vz=L_QGYwgeAK)=^UEo#gxTt$1fa^$Dg+ZyiY_vIPZmTgNS)4`Du!Q5Kgr03p* z4_Ia8w6uLl2!r*T?|mgMoW6?6R{sB(dh4*L!ft)oKuQE81OW-j84#qDPN|_|=#&QO zZV5pefdQ#OfguKF2*1Fdn-Ek&5vCr71 zgC>{?7ze)9u=F~9c^=n66SP;HXcQM-*tEsmr!JS@zE(?z6{h#z9Q$mGt zye!eIEu6{L0s5Wns{C8&UU*;W1D=L`jh8mI3_=D~{+_Qr_lCpa^x8H%RJY>g?+Cj9Uvpee{$*mJVv`OK9nOm>`<y00xMY{|8KZQvmn7xx$gk?-L_&*$uHmH~bv=i+~9f)?&? z!vqF=*LO~Rk5F~pAD7Ns0?smWZ-{ohv(C?j0f6Hdss8^f71H5GVVdfHa^6l6mTBI? z=e@m44|=s9Td=%NeNSx}ubrY_S(QC%H1w2MP!8Rb=0%5pFY2UVV4^y4OOdXJF=wZc zV+zkwiZYXhTi;-)T)1#3Vqi7SXS`>^2;_T>xC^nbu8Ix;OppR3(0YZB2`_ETO77(| z;WJ;gmlCj{D3sDZrMn$jQ0p@rFm3SxI}FevT~Ccor(kGAPH&;TA&rO88jOx9X-oiM zT)m9sAaYZT0?Y^&1>sR4IBRbli@vU_qWN#los+AsR^=e*diqc|wco1l+q#useTVsx7lw{`#UJ+0r?~R@yGM3CHzf*-iW&mfHq+ju zv2Mm5*0&rf?r-|P6c$!WwWa;pGsQeWD3arC@XDo@Ysb?hF(!1f`=#(`%WwT^UPY#V zCQg*_^~Yy7s!T}n;kAPviSDIvypM(`zLrT-61?!crE9GXUaRD6OP{^ z#B!RhOUrU-ZmzgC(z`kvF|HG4IF z$B#Q3uSDA{MOO1y_1SoT*fL`M!Y*I=zL65eG#{QVi;d{8$1)2Op={&YtQE%qOEr+n zIwpX?I0L4U4(joO){~@8L^*0v6)HQW^qWUwwnA|Sfr)AxMS>71fDuI315Cbv*Cg(6 zX@|L@CWVUHw9YrpHK^vV0@;mv6?N5RKhx{$Oc!WwG3D5f=cJ-A%CWp$K-J!7raI3q zPQP?=fEvQT5D(W6Um^ur8T{rA&g=iAj%byc3#|HU^R{Tc2{d&K-1OU7*a0<)aOhiu znroK_sah(-Kll3*B~_a+@@b~>Z%vZJ#%NGF!p`BT#0F`CIFo{|?6BYkP%&kpL4WIc z%g>>o=H(Bj5_T)>UDNJNtL5;|q&NPsPMeC&>&?i{UgXccdE*yn9B}P~A654v`t5Ah zX6dE+LRSlW!k)Q6ZOE{P()dpNfltil#c_#xa9Ge$z}B@*8~{m2lc?qX2B6Zlhg6q* zmh6|F*Ttm)aau8NWx)u++t-Fizq&}qcf1WuO_y3u)xV}92hQVpfrMdNAwHQfKX}w+ zCZ?+TQ1|J~YoN3EpU1!b+xny!(~E|~yRZCr8DSrJ0Rdmn+}$af@rv>k2s z+;#v-sG2IH!M)xKE#PLsX@&B}r=G;uJ;UH=%DMikYW?Z&^&oiu)vu^aAteoDF$}te z(RR!JQUhF41Q0EhgXjxv!b6Ko;#W!{KaZN7eew^%UpXi=C*HpN1H{S7?{OMrhznUhrM3mOPFb%mr43 zwP7r?havdm_2uua%iiT>GJwMJ3Rvkg4f4k{OF^Qy7KC`KG5q?P6#uf|ryC56r`8bZ zW;Q}}lLP+D*0)BW<2UEHD5iYcf6XB9$m+KUtg{Im{p0Njj5Rsv?^ltyJWxalK|1?ZUK^ z^*?BpS_hfRi&p}SAf@EwJJjmT0^I;K)Fss6MK`lEslQ;U8QMeBNOYaB_TTqye%bSxBbY@4cE$EuFBj0M zxM@O|va%Czl*TVYL&reuIdvfBDh2;L(``OsG!0O%g=bxx&DZH-dft`*#sAUoE zgq1}R?y3`1RpC~*6vYSYiCXOxF~>~~=?Mo6Hk>ta?7P3LFj{$0=&ZG^Llgq-=bWNt z{#?bytoqGgYq4Bgl2r+kHaivtW_4>3L2^)hWmxocHhFbdV^z3|rNd6Pv_?KNzL2BP zJ|-!7vaxl?pLNo8%8MX7z8^@Hf=Hr1GVb?{#j&WpDlWH@(*qwwVDk(eIy2Ku?MOr0!asz(LzGlnj~G_X7R} z3UusV8HYPk08oAWeFeZ-zoaf7zg}Qb9e;G1i_&-i|LcFBbTOc|EF{R^`G4-ie>2x$ zr}wZ^R*=sid-4uVGdY{5;nUq9AuIRpk{};>CRQNA%I!hI!?DT`^071mXzpwuU0i%$ z!?h*Zy|Fh3-2*{m1?_HgW6j3;UB*NZ&M_`oMd?xujkY=nr3Cqq?8&l|+)krygCMZa zTneB^P1f5^(u`UTkmcK18oUKub}W<%M&ER7)&WrKWiX1cG&pNrxC>B+^BJN(dN+wb zNr6*6I2cJIuAN0a3Myg^W&Kc0fUXqi6acKkI{9iGPmKm^YbS|1 z|F)0)z301>zXX2aXh9;~ROou%f5kYH<8-_@@@=AZ6<;0mmNYOleB%fO8~TL67vi*s zsAWYR(x?2o#>V)7y;c3+0~;yOkL_(DUa$}(J#PErduZJo z!T-IEc8#~wn!{*0n3}cOW*{B;!;ulFn!^swPp+pp(x7$nkYhj9&+sICIR4T zd(!Mq7sa?g&^k3kPi#pDC5^aiS^_Suu&H;ptIId^gC3i}i0)Mz?tE%3nc^Jw0K`z^ z_y}X>+GQ4LPLq&zA+?rPfP3k3r9*q%<}Qz4CQ8{&&Bo5QwOY+J_$miVXaRMOjUD(o zI0SsD+ukw019hGFPif9>h@Z6GJlU#n?eJ9{neJ!1@?hM6VQCw;}(UY*}M1c z|G9wex3D$m{cja<-Kr$FJT(zlTCm>;@0M!f6h26L!O(m^(o;{$u|7~@*&g3ISbV}4g{cT6d3Fu>o8Zr zKq(#oakJK-kAmagvnQEUdTDF*aM8kG0 zlbIzYef}*`ZgC60BgPGlltK0>wYw2pKaRg}5CU^{M)v0~^$DJJ8zm*rc8sQKdj8Hg z=Fq&0@Apx6l%>W!yHQXWeI8MKjoXptq^_p6Fj4S*)M?te&e^c(b=Yi6$Wh+npHE%e zS-Cx4&rJQUfpGO3+^P|O_209#tP#Zor4USD5jOXKP#EBQ^T5N`hSs2`ah$$@~Z!J0a@=hJ@ScXD(xXgWdd!`-TEPIk+cY3Yb?SN$pr zH);G<%2M;Dwk+emQpSVJ-=Lalh@E78M z(ZSe465TDs6uta4dxYdvP2gu|JY$Xphb~lPhSArqv=Umd}&SRBk_RW z_~GxTr=J3s-K*je34zqeZpzA9jQ8vAB&r7izil!yt5SAz%DO6afWa&}uh+T9=>%W_ z>QeB%77fs5KY1h(D3l;uK2;=1&4}YE`Yew_rZjQr5zvTGW=T;;s;GDid&#>w?X1)= zMVMQ-5g^_XEdBiHxwGUez7_#Ik9o5PD8bM@w_)*~jLgi{i41-~c>5G}T)0_^!SE58 zXZ6&PTu!6^drx*a|Dc=N2|cz@ue}==sQ|ZsT)T!2@|Hl7-oq6ibR6z6pZrLNqWqwR zf47x^EOMoA+WAb_hP&pS_r+nw!$`zVc^ets3guZVFwjjK^NX<1=k$xoE1t!L z91fHYE;}A;!&ij3HI-zbD^>lV*}A>U8WH4$gsS$~JJn}`zt^BQ5(9h@6*k9|2d|LS zoH6&N+&0~&W?2UMzBO}4$I1UIFOgkKPcEh6XzS8%TTO~5P3)Z{A+R@UUU$Eq{Bbv- znmY2ms#N$@=hAv}{UbJg(+YLGrAzT(pp^4H^vztr@)?biVK5j9L8v^vM$-%rMsla{ z#PhyEeGCdX)!?YH5c9tL#KE; zX0m`(?fdsPQ|Pvt>ElI1xW$Q~qpak~URICW>M!Bf3pZ!AnAaAU4ycR_cqgaQ0dmJA zWMcQ!C(U}!=aA*{WH4o27*KKIUI*W1BErWi*Us}zpx40@_i+Dnu<9NgaiAw-3u?(| z=8{;JyI3l#BgOH=iRn&VO{C%TIV5Lwv~m_g*Ul;~eaTSWyU_RV+eykoQnxgO!&m*} zvjJDSchA498|3?ZE7a((q5wUck=7?S!kl(3Rh-ZqiZNj8R#SKj)o|WyWqwA|XDeXT zwICun#H|c*pl^{~Oa^HN$0=LR8VUyaZor7w`OKb{1EwciKvk_Pgq^~8aj~bsga=SDXWQ&mCu06o z&(_3^Q-`l#s;GHROG>KymzV<1vh;qE6E_X%y#Mu)tt$<7a zLaLXut8M#{G1}C`+|Lh|kpbFmImJP*?{99okdZ{zup4>tm-jlglg()*CnjC_(9(ha z9}^^FI^!wvHg>p3^4!hT_n^mGKdM-XQ~zPzop1`W4aJzwR*vbIUjSSB-uU=90Fv{o zOZEZE-;M^4b!B%*IcTAO%f-v2#I!)Cr2h4mKcIn_SF@dJ`=*wXl$g5d5+ybayidP> zjWT;0zA(Kw;N;@sdj5Tq=gs!DA)n~$uGLkR($bd9?5P<5ZRuN*jZ);N)puXFU3vAt zokXx!MM}CaEq>WCB;r`#rR><^lfHq&*{>d15tC?Vq_cONRk7bWUQkTum$(kQ50hzj z`#~hwBjqu&))B02RiZ6WN{%OuC zoV@4h-^=fAGUbvLDat4S1_8=45Xv^YQ{jS@XuX1!AFcpw9ZaJz{FMy;nAm#fhgdP! zTcx6R*l+Cz5OiMQ z=?6FffAIHNr6sVa0UR4P(yd4CSWr(`xlfaxz%$9$oo7S@S&VJE|iDC#&0)~16edE;~A1tdiZ|6dlmK7aoTKz48nmQ&(B+kaPOmy4eTcV53Y?IJzupk)z3Q6oCR0x zM(}l@7$cUxvdb7cDQOC9mgY#|>zjamw_u<1MktVXEP-UG_S1pCVn(`l%3EX+6(lwA zbxaJCW!XRf4P!k3^KuwJifN`H!dq=XLiO@VCj2x>NusDZ#LFiGOSfnD<5;41tnz0& zJmz`VFkiGxVQ@XT=x#J-?^F}=_`?gMgg@xV_W%*c-s!((ulMWf9P5l@)S(zqEq8lQ zVL(to>x))w8q--c|{U1GaI_`a^6`Hb8?d3Q*KD@b=o;RO;vaFEhuwN@sFKg@e7nq0o2< zD-(qMIrM|TwA{FhR(v`;JakgGC1PoxKg$Drj3%=^-?G=qtH5s|2kE;$osU{kjGI(Z z^UnDE2R$2AxSFtojmfM3{i>=bylG`+NnQi?q-zNNxF8i!EnVjL90ca#?TH#hiVAs( zJQK-L^Si+4eXTs6GSvR_c2;89qVu%%_C7r5H>i+}eaq5q7~b$`rHnqJpn7Tr6MS2k zYA3ShJ-un+$WE&De0tg&AXo;dWiS3&>Qd}ks+n21c1;ro?e zqB9n_(Jh1&Vl`GLndhPJp>V)eT%HcP#9)iV36>NrpG{;yzB~6 zc8KI)ZkPvVCUI&#FnbY;ATsJka1Clo+ZrYP65R}j8u@=$FO^wKhfzJa*Z-ZzQN+2r zP$Ncc0CadyQr|H^M>B0*7~&Wkl|NIW4VbZ8!*j0FazgGC-m6AKd!Hg?Z%CeDFkB zd0@_C8E1Svg;74nDx%#^HoKe4)MPcs2fKa<|dgT=8T$exJTI&aC7BjQnd7H8=BHi6`k#4#abX)N1F35>{SP6E%2l z@Bs{k)$+FUjSkOYczirlV@&k{{VaZ^qtR7{$RRCkzLQ`)i)3RqQ&Vedgy2N#}dt!4%ayU zVT*kw1f7glrK*6ZPNu2fjZWUZ5?6CgHkMe68>3du!+oH zz-yg14oz)>?(mqk0+0b9!~2dV4O=j8@9dQM@!rf#6o}=R&AFvao&2c+?0tU&c+9Gb z0bj$s*SE&0puGl${Xfhk{E}^WF7Ny}h$6cjO{4yUf%pk(sAnvc+SQ2vKEb6EBI6BVeCyuNjQ=d6*)2~6 zqNv@K9^wLPyUM3e_$GIe@k9u2#;AUJUzf zBM2R}C1U3U$VYoZ87m5ZC#>juxTB&6-bg9T=(P5`w)nrKCyui6OIY_iL&%g|NDR1V znHHfo9aTH5di2k=rrqU3R7W+F9RMIlU{HQS-LXF^kK@nrMe$hK{Ha(e8q5wD7mRKl zCuuovWA1ggJ9?3S*Zld1;rzewaMVzE8Slj4lu3z(ua5^Qyt zH`07V5l@;2Nw+s|lt@F4=~=dW<%qDliGy=%WIzR^_2{UTk51(eFm4VNvzIod;KP_y zdd;uK5A*x;a#Ee2S~|#?Bcx`%r^i_4y^M{00-z8tIs@php^tI%akdncqvff27>9A^ z4_Rpk+}x-yI-1GdLn8M)=_v1-mGn8Y@|wm!t4FsYk9i0I4-$ZC{6#@07sfv6P_CE! z!+YKbNoUL-MCHjY;=2{B2YQnZsYy;fEHsWPU1?}cFeO1^bvM87pm{M~Qm`JZ^MnuP z9GGEk{E=*Cut_3Z-6dm?!vDRQI5POUx&f~c^Pj3`omwyF_YOPo7yufMgK{n-J|wuK zToNN@KjFQO4yY*JdN4jtPE~st*dYwb=UF~GG(~nD z_85qhi~|#X=uq43avfAJ1@zWV@f+cX?_Xkw_n#oS_dbLe->qSk{_-#il^Oi47{cU%C-@=k9a6<{t7Me+sRV#uOdBl zr|B~TPN1{>!WwtQc=Ns8yGk;&Z!wnN$?nBk`D5 zaHS$#=MtCo@aKM~Pr6bHUC%c}fTLBYs$c&RAnyE_r)%;=KjU1FcRyieY{T~=ED|CzoSUU@$^F0R z-#J19BmuKgupaD#eg4)M9$>=mZ|#t)h1AuBx&)SzflH;THd$dtSWvl+9!k%Y60(wN zZHmdl&Ws~h_m`A868s>w!y= zbr|TZA3U75rti!jlMbfP>U|Ws^D6qKTzce;^rEbiuhZ`j%n?!|YCA#4nz{A=8TbDE zHs(GramV!YYid3o+z;Jya$$Aje@xQv?sr$3v95ZuxJcW=spN1?zGWEQ#%{yB!Zhb4iyJh~G-8QI(mMAbOd;J+@;pA0M! z*&4%*=Ov2bRdOJ|E2^oV0+i%ZrVqLR&dK>%9;5khwTy%Erft(vh)1>p@PY;DNap8? zRqg3IbhF4|TrmbYxTtVxx^vu44RnO6NZ{NV$d_Y#yy)2aYfJZPCcjszk`sj`>2e~K z>X182t{=7JOv<+!xdEXya94NtJ9a1IaURCV`;GqZ2LFFX-kdIKS8*X%uJ$7w$kQ}5 z7`TjPnTjdz?FO*`)PLQ`(saVHulC=E9(hNp;%GJz;5CZO} zT%SK+(8J8AkOQZ6Z#k8a5k)zpKdV3GhA&3q@l668ut8cVZ|zR9P`KtWr=$6{|H5Y^Cl5>y`M2y)*$k|& z?PU!Zcz6-iX_yietIjIG^bBmoQAoQBO{m^+3oqe@kS}6MR3q7xx0NAv)--{gM0Y_? zYi6}6vfbf7v<170ht&7wfDW!pk!=W9D4~KdN8??F@9g5P3}9ipZhW&4A~-nLtl)xJ zR1fii?OmNG6$d%`RPioehJ~Dkd}ehJCi0H~yjh?4ovv-8#arVlUx{wgtS6_Q1RjPt z<|-Rbzp7biRAuUaWfHm`d*LGI+^ZFy^onx+c(N7yXzaT=vh_j4s7YgZZF>U1B9-5k z)lQ%unQ^^cc{~q_5_7^Y%gMuX`mSRrP%Lnx%Irp#qOwD9j0~O6U;y|Z36x2ze=NP9 z)>3grh)sXc-8)~FQ9^2ffotRR5=aTHF%&!yL|?=l+)Ld3j^msm zrcsg)yjuY9?_Be$8kLF+Dw)|i0rG?4>t$tVz_(^Tnj6i(TL%RVb-paXIK+ecQ?-Ek zGe&0ALGFwhSuT{YaeQIPwpughpc4eG9IW%r{Vyj#;H)o{v^G%L@pFdH=S(kxd=&dc zI8-(5sqPa>`GZf|eL4|Ra?gbl>MsZ8<5(radYK%Q4u5tuw$3Ty?s79Sa$Ry0hHuTy z!DBngcyz_wVn0stT{MWKpKSYl2K1?TSw1##l%qs=nKv==loeN9dP{K+Qkib8GwkJxgNZ$ zl((Cgt~WKc*CQ-Du8FQo>FxLE`Wg^OOm~pvZW(VC{^HA0JOha$`6jhDB6U7EPm4O9 zGrJ1%mBsqnWX%s+l1_+nMO52|!}Tt;42C(gbp8kdDLj}pKL}_{pr%z@X0hH8+x77f z0-{q`Y@&y6Or}{rWOXele>;SyK;p2T1hK)FI`8yUr z*tUQnw>_n$u=#igvX;|Yw`~fLL&p_)#P>3D-j;%+D>Tjiv;G3eIG_vh!G&vL63J(7 zhn7ruiGC_7!nL07uB#Q>VGo77LYK^LRvzGrdz_}cZUWq2-`rz*VXr}<`^;l1|8EQ7 zbLk}f0*}k9@;f>fm=NU4*DctWRV?|V8mlL5ud~v}AFMXm4Bt(Uf)h5}Rwi|w`g)3} zsXAjwb-!0M765yp^~9SsFqIlr7MZqzP5o`<`;^4U>_7o??*+v8wEh&R0BU!vE4bI3 zeE0!tVll#BAUhbY9(mOrBBqo{6Q*%EbHp2R(T3*xLz_2QbLx>s^ZTUfs#`Mit$TM> z?7+jA+qE{cs(!Sn??ppa!@;9;(uIWRdeWEMj`X*0VmHK-#hUJezKfD-&D=l#u}7>J zSqn70vT!PDA{58-7{i*dK5AL`+IP3Oq%iNM50Wy=cKJ$U5iDv4L5an)HEj<#C?Rfi zfXq&l;&J38xiY>(*J+12{=Gbo@2B^(9}oY_p(2U`lxRic&$LaaYXNIhCWo4j@>*n} zhR+Z+h4YpDoVGfCu(h(2fcmkoMhQkbZ;E+YfNpv}NF-+nmj^gCO5d^pA}BSErIm9U z;_pRx=2e*2TDaEpXL$0I`aXx01^>IB0G7x(q3-ma0GS4RHC*U>Q8fFf6a1om=m(vT zD&^Zaz(&Tmy@T3SEOhC~%ey{8z{-N>MmIfx{*af(^lCS0DkN2lV(v*>vC&;7M)gN~ zt!Wj$(-tG+Ts*(1ZhiP;=tRiF)UP2~vOQw{oSEgfZn?3x9#@OMcgw_H)3r{m*WDh0 z=mToy;L>F2>&X;CV>eXosn+lLJtP81d;`xKd1%J)pfckGbCySoQPE zA*A;X^8;XFk-SX&)nDuq>;}WI##1S(wdJ_2g)Q@kAO_5#9*f1pYaS0m4lc#7+NW>o zUm#rDZb;b9e|>W*U~Z?rIhHgi_^I5)>^4BDpPw@~L{LAed*i*=bvK6~%A$>_!uuZ6 zgIGPjq2?^D)x~;3)XwNm12KF(-97>aXcmKtBEBD&)lFm`A{htCVq}(5+nyaqA}3T0 zw`TPEUnrBo#tQ6Z;8gfbWnq0s4q-qo1?X|t)mEtY$iNbSz%a;Hty{x~)YARe(Uv3} z8gJFDp%EN_Ib0f*uHV|ZSKqQeRt~U~^F?5vXrwqyk`F8faGMI(BC~l_wE-NVONc&} zIX$&Xv1i(RF@ZPBQT@NoJ&gdhG@OR5khSeRkUMi% z_%J!NgJcibt`W+Pkck~lzhVd|{DDz^z!T`vJAL}K`bjHD(Q@!-^MK1uK8XI(H|vA) z12~VJ53BuKz^6-W#437?rdeui^VbMJ2sPs*9v9lhE*`uknPKBFX<@DTxQ4|-nePv% zIt;@KMK%B}LJmmj(?jEsL0z_wI8;Lvfj4F-*Zqhdc#wov=kRSjH$yY*;Dqz(JgC7Q z^p&)tx%e!@Y-|6|_=}j%Mf0ex#?caLa$`ti0ZkL4BXSilcMh040<$SCkCk$EK2ze; zfs8T`am0j0JNx{!qX!h@{w?$}5Vl5g-v!@UD9u*}98Zy)N;gN;ra&ihFJ^?+1P~=l zeOea`h314=euo|d1?m6yY=05Uv~N~Ds`THF{)l0fBPGNQ`VnhJ=YBCyWWqLzsFYW9 z4eFSPGfFWwc$>t~K~Nakp*^p#MS2K(bD^nt|yV>-I{BB*|guwWoTEO}Swqx*u$ zpXqCiktT;%3ig!NNZ$YO)B8m6*|!Jo(i6#lbqV2@4!HyC6!v)=D30V-KuM>}$Gf&z zKjJK^3tEdO0V@l%9o98gv$GgD?928|Yd>XZ{^Y*onE+ngWTmAqe1sEf{mg|?%P&(%i&mQaNTdU_2mdzqMWAI|4auYu1_+%Y+Jd=S)({P%e zspT#>#JIMbL-shRraY9@xwQQyr@u>LPxr;BdfXh{`@pI0rDccmW4N5h+G!SX9bPQ} zJm_c2Y7c>1-?5&hM>`G>9yR|(fC*PWRypVZ80O?zt67M-svj(^pR-Lzw_z()&kw$$ z1J`YZ28FWbCJP{XJ;ZugU0Znn6>&xFCQ}%A;3>$y8i{V^a^V`We*WCNoCS6YBNbW; z0dCd*PIkDD&<_xd_zx7+X27WnRnJu)nVnyOb8pu*;q^!k?dv3;epAM)Nu+xJyo1}R_ph20>RAKu!0;JM0zR{di0o^)WfBw#o353+Ys zoxC=Wkm4h)WyMRpP-Nn$Ub-rY3%OON^4n1W`PsbNY+-l!7T_ecR;cUcRrKsK$bMw6 zA_@kx)T32Q{%w?GZh<;mi&>${rDV`fe)`l6wChMIHT&fh}PIOzmhsYoL& zP%`&Q`5?&@Okd`m6G5NjMhgtOU4_1Ti8tmDqnmy|Le#LSk&Ur1fv>Ba;(A~a&mG@ zQ&Siypbgt|DwZX$k4~SYL8;FBtknrZOra~Ux=mB7xM)S$k%w%x~lb!U+oZw@h`G6 z#^ir@!kbUtR|Xk6ShG=z4M4bQrz?--+-FbQI1_bPRwlkNNl)dPnKUCQ z>vW~XHR8ps3i(z(MGa0cBZs?UO8gd^{G?NpJ5Rn77(Q7`B1!7CJQvBE8iNuLv{E{! ztvtzDAq*S2kr>{t9nZXQ5d}seL+~)F^3rhKn^w;W#gLnt^gWV`ceUiJc*n1^8~Tif?5n(gOE*@B$C8Wn&J)D#N?m#xy3~)So36NmC_Ey4$C2 zd_TN4Qz0-)_V)P)tq9tx%% z6rHVMcMpHD8&Nak&xY-VIJJ|s0XOas6B*M)ca1f{tiW?M%msu2y`~kn_ zHkce45DiT_xwjwg!u72&dr@dnn7egrxj{{dkKj;D0TjL>G%1SId3ty92&@Xy3EgVM zX-!-gRoeBjd(G0L~S8tzeRn69-(YK&yI+?Nzi?)>pzKruW%Uo31o&(H}8;Wr>T) z=O7gF&NVA4dSMLk<6r5HsSFAI-2KKi{iR&^)KnVoxa-GZz9&sG%(-KUkfMy_q;i+= zbl5};ufxgk!>AF$1T-mjS+t%L`qP7T`-=ROsGqCv5!*t8ITRLF zOgx)3H_K`i*dJ@i9(S?*DDy7U)0U_{bP-N20odd{;4*muWXL`Oi-Mf|GQmW62@P~2 z^pEAq5L_jC6cx=H`!}?p7V9o}IPtdt6JwGmJe<1e$AT~uL!(ZQy}MDssZ8PLHk>_y zg&{Z}6k!MTO-ED)`zxI?5NX*t(_3UD0_6P3j1*}C6s~_I7&c@`AqCYv>Mm8B#n5@3>=0ltNDK%PfCnK8_D)I^gT0 zJKnAXP3WE3G-Bc?UQNzCN;$y;t2k*`5ETS4xB8@2QC%-oyHiRgUBrSaNLAE7>b$`B zC;eag_dmggcwB7(jDawM;%`6IeJ$OaZ3>HU0{U zq5Us5{>~f`nB9carw{*D859vL`MW(_a|Zlx9GomfDca6ClV|(nk59#@8RK45`maUt zhTQD=f4?8@xm~-Vru45z@%vNqK0}l${Co=E z0_GfY6To@3=y*_TIYZn{O{cermqu!2pv7fUBcVT~j6-Xw?8%vD=coCJNF@i~wlyB>e7+KYlqy2dbJwvw|;JL%dt%cuSYy!G@~Fl>hTutcI5Kk(<#HvQjMct3E< z(V~yG*1tC$7`Cwiw7Ji>w}h(abei^Euy%4GU{4#boLg%iqDhsOov97{C_!@jV62EPSJvJt5`2wPo5S(Q>G zNUo%r=D4{EYh(t7as-CVsSi-gX0j9@a&>jUMGnK9D5d4kTs+s+ba-{!w8hapP>wJN z?{8l(6^9yAh&_-Qeu?X#^F72sqhazIzMq3lbV4*=2xV>Giaj3H|N01p=IVL-E2Mhy_3bE2+l6QfwI%cg zzG&q0*NRNS?ui2}BvGD4EVnneHE+ZOChHsD?-q1@3b-$2o@yaff$%qfRCV1RUgfzv z){w`I;qOkPz8SoI7XutR$8|w~RV#GQsQEdEySA=95MX==OwNx}_=($YZw=5bQDBY- zIqstBDh*;6@4f@i_s8(fjFr;9Mx^u8m`>;NmD8xXBPqou&hwU#+PJY5t9V}AsnGLq ziGb6lziAYxgmBaK3T=wT`pDrMhpc}yz-Yfe#ORg_PjfdW8kBy?5dS&bOZYUnAAU`b zmw@A0RAzQC>A>FPq$WXjIAJ@J?aTOvvYXp^o6Z!{b<;)6PEQ16D6g4a`#j8+MBpWaaa#!Zq75%eRpVk~_nB13f^Jw%=cj{Uds|9P>;XRM=aeh?4 zmWHJwE=^B^TVp5n$Cx^513`n2i$Lhq$#jQ;KsAsY5RIY~vxf)hejj5&vYPsm zsJz}Dv2w6{4F_Se5H5HP7L}@IA7Og(tmoB61qK~mj@%PcQXGp@n`OI~P>YJ;+Zds4 zoadG<*+i!5892lA&|7@Gyqe|TcyYDKJOHLX5%UbH*tFb#PD#de6`+1}GFEu~3tbu5 za(V;f!(U;UZ1n8>zYgW!kirEThr5#MV-&?kUcc)%rHHgDe)?BnUa8OQGO_UGjQ>-w zBD%&DvQvN(sV&(~^G)|{I*}J@b(&D-*ILR~c}k;8rIOCt68EmJmJ*2)&on7CC^CW8 zBl&ChF$;eH02dL5!=J0-A4TT&Um$u*{37GZKI)I|Jf+^O}TD2O}f z#jAHbTf)|-(qywvqO}Y-KtK|JOr8TsLlSG`4Kfb{EADi?@q~y>2*H6ZO{^wyq8Mf6 z>HCNJFtblCJm#Y`of?N3W}EJd#R{6#Xyc#yCR)C&^AZ+TeIqQRVrRbJ`6b7f%&t}* zoG=_XbRCKb66sQg!#nMo++_&kB9~lMLkm;UErVz(@1J4Opr|FO@jd%AD$3nQNgak= ze;1PN?pHOl95{CtsHY<$Tw0P3<0W?vrfye2heSYweRkf)+p(IxS`>_kWl)TnbKMB+ z*1M?yKFSsCKH+6W1#R#~CeEa8{JaC%fE_75pdc~#PwX;J$=txDWuntJ>=imzd#g<# zG8x`iwe+fT*bVu;P0$P(!w8PKhxKxs7sQtQvkoBu)B=(ftkDQzKNGFbHq>{esSU9u z0LMG80w9#9L;CxV98f#$rw0l;CU=xFlMx_lS&9!en-94vU(pe7Rd=+zIbf)CZ1!YR zb!(`mijkZHe9Mh{?_cis^rHG*l<}o0B5U;Yl34%>UV@)lU;imm$5fcPFURLD!NPx6 zOpCG4E4Bd=LA1x2d z)zOa!IAJhESlfk9QT?qYlVKN0+vs}F@Q>m-GW~&v4-5>!Gb~~kZcW*qIQP0vTj$m< z&7LK*rEP0`06OK&jgTwb*{gnRrj@lOulSbxwpF{?jYV$s#^AtcTqW)f3f)zAQ#Krn zeOl#N!#GT2p-fiG(so8`k}$WDF8@1BL6YA6czH4N%~E7*s!3D;J@ItNciV%iw{Ibb zb9#7zm&14zK-hMfj{&J7{CxU}dPwcy-!f78O%uluVQ!V-hUQE8ezU76`j)k@VD%Lk zxF{+&2AH}wtD4Q%_wf>Zf9`rXAZEU&b{%2q-8YPfDs2C#5Cor0HPT5u9x>7k+`yvU zZ#>mV@e7!RLcn#G>+&Fci|e^a@gM!kjTX7Z-aVDlc(`fYRJ6?_&Nx~!)QUIDB>r>_ zQ|r^YTmO){Up>t9{@^!+(loSTq&I)f%3aUjxlNs$nk2r!c%hb^9Vp7F4Bi4WOi#y( z#P5si840b5Rf6XI7U*&-V+>b{GZD3b-&azAvtQ$n)DnWSBvT|8&$HnNe$g?7{a&+A zUOWdR{IpXrgvtasHPTH6Zd+~WWH?$M1{!uchj)zF`*bH0bN=()tZ!9+9pfr5R-UR= zfWYcDVe;nfr;sl!iTpJ6+faGt?(Tq0q9>W?pVXIbQHVGtCB-sw2a4^oP@%@Hp4|a7 zO`Dejsz8YI8%>>?No09sS4Uk_>i<#wHE$1Lu29EVvWSV430Bci?Lj6SYW%GLOH@juUQP0p^(;XTd0P3JUj`QmD<{FmUa9uG%k(BNU%@~`{!J!+Bo z3NLwCqeTEpo%_Q`U=P`R&Y&!dP@Yat6n8RW^U)BxF ziRgZ)qXk+6f{txdM=tEHNOmy$8sIjcF$Gu8$n+P>#oY6yIwp?M@Bg7&e%3uuz`&yBu>UBC zZVJ_=KAtL|dKVDgOX53VbP>&vqh>X}zX~(lIvrmmr9e>5PWekTgfRZq8w;t$S*?MX zIYaDev7TO{pTDDJGJiWW4TN9FXxg37 z|NSiaN6X5a_%?@!MCe*=C^UaTKWhhVWi5Sxk=*q7^QL{_{zAe(KU8&Z77?zNA{q)=@sk|(unO%*uO#I(&5pmrOPvu;XxmX1_v=oF+U*?JJ zYGlMhR83%O!uFYO<5Zc6?vYgBe1h5-g!LZ<8UjcsKUxD)mC7~nG4G>yDU|$8ek-)w zZU%KC;+4uYKsYAw!%IBR`=LugwL0Yos14%(qw1}~qJE?O?H@=>NlOaSjYvreh%`tH z-H4QQgF}mgl%#-wGz>9FcbC*4F?5%7cl{ss!QStC;N^*2j5FVPVy(}*Z?+QFEJ!ui zmb*TO(vAlUR)+v22^lKJ@s&8$O;|)E%!D0YiA?;V1PH_Q4}C#=ji}NjNRFi*pukhA z8|y)Is0l#Ro@#JLZcNAg4Rri}w@}a$#OQef`rbOtbQLbLptMs+%3edIAw4_Mc<<5O znNzX(X4V<4Ux!qO`@P$Kw6!}^2{vX^Wb%#bcPo!0EfS}@;8_?{Ffb;@idUEGHaYUN z>Ihmr>(I;toCG1DG{lQMvUJn4_%;5W(|Cx@C72E?>+EzqjMB0xeVRD&zwHuMGVZCm z%=nd%9KPW+53iN3_^$r&V7Vq5w&sukMr7m7Exlivv*^=D4mPb4y5q`2uY{voPaW{- zw=RPUMe0P_blA_zJ9&4K8`=kM^a+V_Vj2(9P@?_WL5l53M{_p;Bm9$p@A$W^&|n$~ z&W~Lz_CjCg)v=d+rjXWhHCgezVFE04c*0%-MLf)S)n8%~&HR=`i#T~m1S4hENc30a zzYL!%I9a!Yf5YJnLC+|T zN6W(kL`qi{>y|<*+m?8xHrw-1qAoO0s(47d2|t?^QgB=ghMG~wJ?*<>cTxla>{cd|Uz^No(HqqZj+ zMgQB}l?oQc9tkuvao$Rc*FNunIAUSj*w%X0x4H^tH1@p^S0m4bu@j=TMJ6d@)BpHs zT+}()=S0hTn^CNAb2J`w781+`+z&O5{rw@F#Edl`{p_3Isqw_s5oNt4o|C`wZSeNKKtCft^zbZHRp$noQ)#mIm~n3Yoei;R`s;L1+i!Ad5C;n5aD#l<>d7fN z(cP-Q9{tz7JMSND>=(2?u#UiNKYQy8<`fo*xpi<*a=Fur+L(hfB0m^vxYIgx@zlz4`9=>Kk7X2f7(!@8d`|m5FTD;@b?j-TQb3G_*h! zG-`&$SUechl!p#jqohiuPY%-PPJy&-`E44i2r}Rp1qe?DBd_qI;2B1zZQon%O@9A zK8lmk7eEBAC_Dc;3?~;To(%{nwZTH#Uh=sy!{@3&8YoK;Py^;tQ8smB@o-^f3eg5W za!(IXsR+R(f=9bii=DwJyVbL0_eJ)#ZnC@6k~?pmIj~IWO}(WKdn@Q$ zP7I8ujlR6BUi&TU0IXLV6L)uv_g5_@=ED=I?8|#^B8apa*5axmrjSTT+`$arQy!Ne zGaD|TO3FjnNmUnwk@{M`t-%p6a^thB7!U%|@;ASZLR}P(T~%TyEsM8ciVT%HTVe=> zShQRLDT-xZ+S2WhrH!_bX02=-rqpQ`8ca#7ZW3i#o7&O@h6C}UX3EptK9^X=?*G&& zkRSFT3y_(p_zNZxfvp+=3VhHsZGHSU7GFuNI15k-!DuN2R{!&RY!~D2aDI9)z&5q7 zq*1D<2N)W&7=PB+g105KGX6g|RtG};IcicRboys1xJd}MAW_q0j?NVGjWf^Y{;sYe z@n|tMa34~2lwH{y_^?$EW{7F>)(y3OA8*R5&(2zGCuYr_ji6LG%&|*NRw-guaYG!0 zye21R&d8ql=$Zdhee8EP(Xb=A%12FcRfH}*Nf;!hcDR~9(|DF0vJbVij-%X1{W}%; zHM9DpRexd9#~oS1P_Z1ioSCmrE%En9%|407G+N_EOGV#!Kif#vpTNNVCumYOecZfn z4g3ol|9gh}DCpU1tSzl(#lY2iZgs*%z>YCeX9e6&#N&3}XOs$5oZ&%PCnXw+Ptes1 zqx6-i1}c7X_J5Zi4iB3Cro;w;WrN%S3)T%7=DN^O{J!?o`}?R(jU7m^T?1j&2ySrZ zobAfB9gI7d#3q;3)d*M$OSh3LO_m!hliEbEW6vg$FU=!&GL9=awHtRb!6%kQ-O zjOgyNU;p2+wt>`=n^6BLa~@4rRIT@$;IbUu6pA1&u?&e9wV&7G+5^qhzO$?+w#*3T z_9SlaX*_XreRSgRG$eq7oW%bSv*_ZEd0RJ;Fdd4}-->`j5}j<(cd`Gh7WcGwkvIf2 zLM#jOTf?2GFM} z!OxvOw2woIjMO@`FKVraFz*_)QS?(T9KY+mp-;L~lre?yez3!sb4PC??Yee6)zhOK zNjq>dqJy7=!f^X4IJ4j3Oq?qEv(`lUR5fdLys|Gl>MHNdRY8kbp_i7|FF6F+cq$O= z$Z`9c<-{3T#)<>NZeVQOSNrK&qGj-Zvg!O07XP)gayHc?w}ydFn@t@4z#Ult&@u|# z-eYRGq1E;pQw(6Cp*N+g;1-Xd6;-#DPLvtKSxhRx*BjaL?~VLBmU@Ah>%`vT{EC&^-}WEMvsO8c&_kuVhpV7g3vicftk>;os5MQ0h_ z4Vg4VXx?6)CS4iU$1voe&>xEXhXjliv|q`Y;R5b#s8mUMpVFFE`i$=Av$8%;T}`1i z@3*BSBi}Wd!v} zR60FHRV{Y*t4*vUW9n=iXu8YFbB4R0c|1$w>yCYHcFhc1av%!%FF_`qGK5!{TX^21 z`w-cl&%e3oXm;Y4pLwLHRC7skdEppRW?Lx6hs7zf$r5D|!RNlbK)LzhBau1v^PHSH2jcinWXi^P3}^p=IGnmh z(}AUEfKtaevN96#6A$B22w@ehh~ebF5x#L9svhTm=a{Tj+7i|^EnMVo)IENC?-q)} zhe!37gjH2g=Wirj9^hrRu6Ls7rx%so&eWe4TA1E^3dW#g(&AzG51=wgizmKqHEWTe zKXWq5Z*+WlQDC;4Vjpuf)Q~@Gt3`&<`Xk>eIGQXZps_4;>21eq#5X$K;}3QyF4sLd zU>>5A;JuMV6)n3EwaDg^Ds&&H@+=uIMtkBSxI8BzU|hE$Id%!s(ywE6%a`Bs;9*dl zxQYLrwr$#4t7DOE%fROO=Z4RfoRV!uzJR$ zs3D;6l7?EJM#^d=v$xd0ql!{znb{ zV)ug-2=a?S)8SymeLv}kv-%y;)l8C`t%dZ}Ca@-E@Hj~_#@(iwj#)tCd#C?E{dAc3 zYKZio-n@3Y2@C-DpM%eQW5CuiAeH?caEQm(`xo zN5k5_p!ARybF=zzP;O#{qtbq2Uj<9)a(Y`sq_L0%V}YF>r!NWW;E$PxiU!Z zTJ6K~oaR8L;6&8htha(n2(9HQp>#}6=u+!5+&45|{@CO*i%skoaRyot_*Akm!Fa#Y z>=ZRTk;WEuhoI&TxYNi;VbGF-7|^tX?{HraEk=Rbdx> z1Nkfb%g-kJK>-E32P5YgpLU~l{ez5MI>rv4ws$KPg1L`Dq}rQtD~>C0uOicm+gkuj%}9K`Q9iOZ^-Y$2-LDFgKE z!l#_sLa=m)$9;CD?iGaXln6aFVI^~HdM87#Ls1S+Lr!ZoG_0k7vgHYB@*KVJ_#lt5 zauAmttg#iQj?H`8ygzDN73MSh)`?1<%cq6*!%XFX?xM}Y87Pw%r`_43A!^cf@j!)n_ zG6jf5#HfkTQPNZ~Jy);UBYFE>vpl}=;y4@Sf1CzP-X`NT)%-ot{$h=ic8nt!L#g7C zZT?1>K=On&^jKnB&BFp03|)$g|G9%6D=RCH`L`qkNdZ3yTQ~Uv&Rd-sQ}^JTD!dO? zAAV#k^sla>ZFyL23tAr#gB#~mgH=@BlwQ`qZtNv#HqiJ1&+ZG!mL!iNcjC8Giw+%E zc4q@8CtMZqTFnQ2hie5GKb|KVcMEQKM?XlfD`nNR~I67noLG_?e!*|s=Twg z7@7J>%Z$~i z@h>W0#Ukz$lUB~Jfz{ChN)E@ zewqPocA1VF`e-XqtS)mr_|!IHIoQQ-8*Fp&1!Z&cUFBW*9Jk_Azbze6&~xlP3Zk6J z`!h`FzC`ZV)PI8#y@N3(@A--vQ(K2*1F>3L`b-561k?}1G8~@};Of=i*1gnc*Ohv8 zfQ;r3ZBjgW)N&!j{A0>4!ARCY&{0iKKv(^v+mKpl=%oy|xi^kMGvpX5pyo{?M_>kQqq_}b+VMbA!+>{hvBF&~e?opcuTHXBsq#f_4|6ksY zXuoTGb@+>-t=K9s8I7Z*9>7;ys-z2Z1(Uj94t~Yq>0t{@vf&w+_u3fFlmS=}NBm?4 zG#KjxC%Wkgocotn-juyBM_4LsRf^5MN9E<)abLwkQAMWnxbT_6W&4ArU-ecbvVqOm z6^!&~`cvD^?)DA`e><&-4&)9$%bXgb3f+I!3~sxIny=bbfOL%!H~mAzuUxD^MlEX zje$rscZQCkSdqhkSi@|$4mX)Ko(AO^-Pz^f{rhm9`!;rRHI5w4egV7zIv3C$NndU2 zc^>;_r8d?~ZQL@APEgFmY3=87laPzVF$eOo9l|dOWX$uDMTaexG}L{Cc12f@#?;(} z?_QhAa!9t-7$S%{jWrtYKJ}^HmeZ>Vq+$Po-}j7)-6(e!)@YU*bM_L6=TUIRn|*-y z+{thwpq9P46^2AvLfq?i}n^hv%8p{8!3Vk zyq2Sx>iB~#S$8?=Bnw@Zm}#z31ylR(ue*6~omp62I#!E2K)|%Uy0LIASd=ac#jN$K z08cRipQ@I8u+xr|VTrVgaadJn%=tn@oeMqBZ3Y^uRHloY*@3v7?OswJ$A2Xx&av;} zyH^wZwLbR|Kc-OH4c5qvf6u58vHhyjpoC8irv$Gfzj19swrN zw!N!Zw0FA_J^;_X!$CmNxK30B$FglD!UD+g5MdSoJX5sbfYIYjfp3xSf5?=mqwQdq zEL#<=t)m?yJqgVe@C-?;Z?l&pog8-1bGHPRFO^XOUtPRCRC%_iosR$vXZk3nlX*;# z@t+*tS$cVSIqKVr@^XEjh?hN5!O^t!#IfWpRL2)AMBq^qEK&+T3+b?+b39xm{tgK( z_FrZH!wB|%POdrLK=ehdKOhzMIO%cFyIAJX=jRs#bU&-tTqiHXHXdhHzqib6CGbod z_%O~EYH@zGbNgkqpnZ%poiM13iOt1V?dz8mf_Y`VX4sFECcg2OzX#oqu`_Ph@Vl{c z9;x}&5B`ypJ{pLy*PkGFW2QcuUGxb86LzXCsYGu)-+EWDDtQh0$2i})b+1;+Q35;C z>BY9czrD#*i$3U@uKP$iB<8l$_yc-v>0;A_#>2ozkHp^(!a;*eB#Dh8mHp=G*w8>od}AKr zwY?THPjrEQq9dU8>DBVa-4&X?)MV_;b z|EKf+-0eN@dvfv6&eOsNG0Zi|SELx(=x?W9Nn7C7 zzi5R;mPw!$^FJa9ift>8$?X~Mm)vn(lQw?4#m@VypJuKL7)Q2%#%n^aswACL=vvoWJ-1m|Vrzlc?>ym0hCTGSs0CU^ zvQqxT@P(jhD4+Q&odo<>Lm0&Mc3|Sh$d0+Wsn1lUyxwRA;6Ju1W+MB9@8x(JLt=<5 zUV0nv^giIRXu*2zw{M*OY1v|6K>7HV?&d2nKhjyGU|R?8{tagUmMofi=s6U3Y+`=B z_R_k|nbA4+V3xq|D`C0c+e_99Fw|8>Tgvl~$L{VZS|@pGd#o=HHo_PoSesdVJ5!b$ zt+{Jc)zNR~t8sL6Zr<#d)x&d-MAOg@J}Y3dsgfg$k6{VDKh5Ag0ztPwP0?sSXsn5; zb;{gw7Zd2ZZgxy|M-o+=Xvh5{t3#(sqE_qR_@LW_S=lgSLhfN+<`4iPmY}7Jq6V$E zP-&<6F}31wQNpLqrfoxKd^I1F)SNWD^-%)Q<6Ab5W^UhpTyQ9Q?tPsQ?|7pS-EwuF zC%B-~PUI=Yda<75bJ4t*$&zIk1u@Ltr_%RJvfn3@Vy*T0z1Z(RYys9fFlCvjPkhH3 zJ3M`5i1WOT4I9J-eT6m*{O4CT{7RIHp8xGztY7pV3cc06<+uLB*UlR$AgAhcbK|JY zE4~u5;dE*~G;yDU=;Gf>>8Yc`YQF1%;?uf&FKgO|gnUVl@LJa7lf3bXK-M@k81s1W zJJNQ2q21N&%B5|PTpV`JklH`%?~FvTfAh58HhChv^Tl#UqW$9#5_z_m;-~dWa>EAP z;1ni3D^$q>SimsW12F@i4NQrsibSj*jM#vYb0Kjjze%fms!82rZL#Ax!3H0B$rNQl zEvJvJY2OO~)TD7Ao`MSEo3^)W<4#|-aauUHsg4`juM?%mU~mD+k{6r23J1^(hp|$H zs=qlMS*%zcy(yCoE9p8-#somOmr$llufmVfL0`HJZth@MoYC~-W}g$Usin7NhjF3G zjMC}&bo11u!ar|XD?}QLf=2kM9-JwHk6O$tz#%`FFVuAd!B2rJWTcIykZyV63lv4S zcbX8F9LphDK-CN}i;z-Opa^}VK9zka;iH|ECz#Rbxu_pM z>9Ot1o{n5bY_tfh*0oTZN0?T~rKO!cJfl10+0~8{&cAqr;J1GQ5|{>A{4xhY{KU@` zufJ$yETJnXDV^%5%fF%zelMqak=eNJr|}%R|K^`MSCMDg%|D+xqWGMBkW{*9x!>ma zbh9x%d;U9SN}Rj2=CqEHrfpnFM4|C>tU{~j-N)8V&ll-8Zk^%;=*kH1ul8PO{KK3^ zkoSd5M7bPZH=|s%J`4=BlsS+54}FVn4ygEc_qs>g@MH)*sO}G2^p_TY2Q*>Y-%H*L zF?(N+N96W<`mx=q_T#`siYEIyRzHXV!@LVMe+>S@y4t7Gyl^lyLYmI+LZK+={m4{YNb`( zeb&!N47olPF?in_uxZfbb8}EDop88>l=&jIHjtjM8++NGk$LFa(Cc&^Vr9L=*bUjIzwIFg+2Q4!{oV19wjW1*%)IN6 znNlUfixoe8S=E$0D#Z*Cm5U+5wpib7$gB=--55x&_$lt|&`*q{kO3iR?BeqU$*$af zoof3D*rdeInz2E~>^9bF95OJhFZy!gI|k`$!J!o>9hvEF6Sf^exN|epb$HsxNAC;sQgE<$T);vw(2q#NL8Y zsL$x!ZG(m=bQ_E7oY>_a za-de4N475AOJ7Xrj*eWNcSRDcKGxlpvRoj^F~!ak=%puje^{+F>!H!>4t?t6d+bV-gi|VfBeh{_Pt|y_>XY{mQ9Sb{(&`=`(;@E#? zg~NYXj-vw%3kGIK(G*qpZ=w!08Vno!R!B04ESzrHZ~5-L*F-(>M3{C*eD#GuLv`cI zYya_sy`rb-JghiWor_;Q7CvntFmDd*esfuLrpxUPt@ptP!AzP7-wnb21czNuT|g~- zU-%UAS-sSz!m4F(olw+=t9ewuV_Pc4HYz=$cB3s|^}~-Ect>dnD{90OOX+|@B`kZQ zmBE?q35G7*@yI@;p_0uXVL6EkFVdDVBNflj4m z@}Mul|E>Xo%Y#}b&2+g{(o=1)l)N#r`ahT`UFX_pk%@1P3< zbm^k}7u5zMjtcN(?~2kRzTw?DR)Mjy)9PZ$1~IaD7z0m@Fc~s=7P9tZCNufse;Woj z?=yYW^jG7x;eJ1M;1y2_`xG1?x>T5RFl1)%o#1InTcDO7veXjkWpBdvZgXj9_ zkqj7oxEu3Icq0&6&;H??Acw|trH{2p)hmRC45ed>NknMd*7SRqidzFIMbUXLQ^AFc zwS8*O$jLY&GB~SJdI>y_ci3b~Zy`$z|C&RPLgiVtaWi9QDD-;7b;i;W73Ru@z|-^Q zHWE&7-5lr+rzmo1IQtQThWkE@o~y>)Ux3P_nPi*QQa&_mzQ@ioB-HEOm~@iud`ppg z92H`aAd}asXHuCFV#YCK)5E+saW!-L+Rlll?f3O3FyN(UTw6C%4HLWp_L}WLOZKh+ zDYoms331m~L6bA+^n~&`h8#?8Ms`_Vds@ngWWuEol)7}yl+p$)&M-|TqE}JD+oj2Q z6Z7xt#MO;@3L_B{V(^db8Pw|bBH+HQOgsiaCDrWiV_q}W`|2GYB?8{btX~0MNc01l zIdn{N0Ar zSvx1+-^>?q<1Gin^_119vILrmU;z`P4^|aJ{*|#^?fLfrRUQ3y%K|>14K`@@%Bbzl zepJQrai_zVxip>a$LvVQg}DebdvTA3o3lwadgl`8=ikO-YW{-e`%+1bT2)4M?_%-^ zKbliEQ@wa!v+XZ_z5TZA*wrQ<(_w18H$#wG@+0(S=j>u0$Fs<2)#E*q)#IbG3x@;D zCTq%nV5L(=D($ONg=xf`x0&6w^J64;<+$NH8x?g50MJZ0?Ie0TE9}ptI6mTJA%1$X zSaQ{O8j*%uCn(V79+Kd%=(XF0lD|M>{w9hK$vbyk9Nv3nte2pkz7b;fny~o0m}wZG zpQ`Hy00$%-52ZOco0(Jmz1>@aO zE5i;o&PH(NHKdk_LS0iMA8HYEG&?C0%NYWQ1hNH4J>;9&>A69lHXALyJ9km!U{p`a z`Ku^R4AKCNRF;hhMb+ISyX#*XBQ_;}*SoXy9Wh|`;;)8$QYnLB-TFlNqI2^aIBzar zsX4gdYTw#s|An2j)($~Md>XaFWlK)w*ysIj1$A5K+`VVnay_c(iY!d}1Rxt%BWw*3 z&^C?F5<8_(%?yrIbXBeXh;&g;CAJJ?edD>vX_Yq~@_-y!`nZN@yy}CSBztbnPK`t! zHDUr@BCNW-pVJc@)Jk1}G}BcmR8;$$i8ngsVzm4wA_lv^Lhi1y-xHOidW z@+UjhY*{YKcvR>-?k6JMaY}86io#v!6pP|Too3gP{9J?TyvZT0zjR_))>CYMXS|sW zhe9W4CFxMB%S-j6jYPKRcQo3?1gIsJToJ)-DTYVP(pXYOOf@aKI3IB`tCP%g@z{k{ zlbI1DvS#lv91@R)`h-uTN*7Rz&YW{zzd~KYqSkr${-9e4Fhu38J*mYe+T4vqGui19 zzZqsmmfn`Jo3L-wST<#}Qil2N)n2iIZ@O5`7RvPRRrAFq_dYzPSP=+MVfBdW1n;U9v!JB^;&H zK=a$tj|X&5l-1OJH5(^92m|5xt6jCjpaukUtCM5yY zn03E`<7ja!MMvQ6^?_kh!Z-v}VYYwoEeIhxJJA3$sz7;U;P~g~E+*~kBEx#G&o5QB z6~?r8AG0N=0bYPhP{Ft~jzZB~7EMVLdl5-Uu-SmA@FIW+o?JgV5?k<)q_jAIMgxqr zQ*OsdAG?y05-4yMjhj0-gaS3ykL2VffRTLwedgG7pA3+U#vzLZcyNIGyzjko*VroK z7kpaQ?We`kg+denyZEZwgt}*`_0BsYu+0hhQAPwD%}M$AL1Di0O;RH(Aj`fVri-BA zZ}?1@C6*2ib#71K(D@G9pEWo0b1vw*wAgMP=haE{6^UzImng#Lq?T z>-zC2{AF?Y%d;-qnE#A!TMA` zhkw1k0sQ7bYczko_((PFRYhiG_!!XL*461T*FQu?;)v&tY6%&`xN=SO^wyTwluoWY zuCAJBV7Fu#D1ffbFCg$hv?G;0_0ZGR&sx}b-5jwD?V!j7zl#_M2nc)lbV|9$R*_fk z1gIIw$xo-%J4gC(04q)Om39Ol5Mm6o!yy|8lY+Ro37!paT0nX~xD8-b@OYW7%CUTu zfKHZ}cwiWe^ljf@#IN!_~OCA{)ZC)f-@)fD=I5HkB+wTw)Qdb zBtDXWsiL_dQ;dw{OS)bKp zGf)@yr91r|#bw~ih zkr#CT!vyrQ*z^T)j^D0%p$4+!D(QsVD+pM;7RC@N3*9YkI6FlBQ+OWQc&|+`eBt*l z_H{1ok(Bys?iCy8!be_;lFFJX%`oS7^B5*o~3Wtzr!3Dnywij5I^}(2X4G}N$x)YzHK#zYNCNyUdz9ue_J7_ zbxIA_PLg>*wlUNa#P)5?)7AX9h-;%dYMPJ50p57A4KwQa!XkQj*MluQ=owbARe+md z(_0#ePcc1o&=753t_E+nPha}(yANY@jG@7g$$93;i25lyM%Bcn@<*3;YZlgWb&Qt) zyxRMs4YM0->hIe5{=%2|Sb+9CMznNZ(|rnvk zy0v4buq|;mO1j=_NcuwO6Ei*zX+E9<@N0eMdexwIieLkW6@Y!_X7)7ys4 zpVmULipBoNy#DYM6cvd#AC1GGf9|k|7H>bymfNbXLK-$!@_EVFsgQ(HlEL? z^iJ*=mYy}l#|q7ViUS`2yI!KbsGkKcSnC%pq9q1aJKx;mc)4Bg%m|slsvd*I!~J0a z!QaW)$d@>_8A=!LpJ=}0x*oAIk^~nwaq+IWXvyxS4ovT*&q)_c(Z;Wz2D@@G$WiUJ z>@xzWuQXN1hU7g~G<=}+PTELwlp{zD)XJ?ylgTj@N^zUk6w z?w)ep5V`EdPWM{o(=WlwC28J|i|-u2@(pA{oF9Ux73?SQOnLr;0~y0+p9FH_8@?nS zlc}>;x$z9)(&>Ij*uVu}Ul`=#;85z9Ugxz*#M5}NLSQ5^`>V|-C(O(NAYAUw7{T~` zXYkRKv+`B%^g@ULjfp<1*IvI&D6}bev!2i{14Ah4eSwJAz>4GTMujlGU4p8)inx%z zeog`xjk5WmiC=TiNP@XR#VrQl+g7tbZA9KWcF=eV2@OysSLTN;rDHzYyViXz)+iuk z6PzGdJsq2%WiQf2j9SS(IP;kvfoo&P`)>mmgInr7-e2*S*f^67uLu=KT|J}$v#C}L zer>t{;$eb9ENmOg*vH{B!MuWv=OgL~S;c&Ac*UBSolU@aNS)$ZfB67Ar=t5v!4;c| zCQh!CqAbAjF?qch0rNg$HOeB?Y|jCYDc)YkGI0DochQ)-%V3i2OMBkI7g}c5r6eZf zA>ilAIV%{$91}FhJF<`|IgEoLgqB207e2t_r%odL99Fu8QXOswmrsN33P;)b^ZG_i zHf$AK!Oq(2zhQBfyp(SvRuk)%IbTrIhjAlQ|LA}WrrifCEAO-9{EKd(7QjTF@n8_u z4|U^W&9x0Wz4-n7(^ec}Sy=Vf$&r}*+i&MUabxhQwS%v_)W2&A&P|QgONu8fAz+3? zzeF%v;)-|9fxN^~tQdvn}$5CHBqleinud=>%;C)-A)?YsR~ zhaa_a0HQH6Y+c`YnxskW{n`-6KYM7QA#$|d1^Ag|?BkI=;_t4p71>0*oFsQWI(1s^ zxI Hw|_hS%sZy$G!kL`TkHOMO6JN6mYmL1}sfE|gx9k5|^ zYpRJEJ0jGhht;v@w>DC5ug{ji_~oFZ|Cih~h?wK^Fvt@tI{$Sx;PzHjXRkgIgO3}K z!j66Ko1q~YShZf8IMXk~6EHlc9fTMscr0C9ib)8?W`NZOp-dSq!W0zkXGHHW{l!gowKceD7VjI45L&q|3{<1otL?`fgfv84S=t1hMSW zfryt-mJ8%9>FPN~Pt9VV1*kSONqHyaB>p>qww&dbZ(A#_oP>x~gaw$rSNaRvhp6*@ zwcriaE)rM=RQ5%JFEWM`xpVrO5fDFO=hzr#HsId{ge^+}#ljbx?*NVhJIFNch#j7w z^MLZ%h7>km1=C9{PC%(FfV^$TPcOe2CSUx7X)-N}6Cnb`3sEaE@1I&B(!n{v_2f!i zdF?wRQ%OM=kczk-EJ}bwrLvmqL94{PpOw`bhiD+%pYKh+=VjpRpiWUXO;uK3-)AcP z-qQQ?=Pp?TmsjNo!-!Oz_@sItQDAA~YQ<5V%@K ze!FpGM$+TT(0U)BRPq7epc8lU?(*8JIE$K zn5Z!!ahtY}q7_l52xYW+OHCjGJ);I6&vTVnzM~HIMTYhBy`|poGT?{6RjWDfysWWO z`6pwI%4a~kwWtMt#FW*@xDd^J)#J9pQL6NjNIopN5t}Mtq%S`65uSK=whO+I4@;!) zJ~sGI6G{*7pX=?OQs9Rg8tIxl+c>}HjEB|U&iXGvPx~|Ytq{&vCwdsccayhIIDbPC zVJpV4d`+KG03z7ND{;00`+VxIU^pLjSs2b!;@qgFSbwO#M` zIRCs76LY`f1iLq_oq=8Ch7Yxb%hzl<{88JgA8DyefW*DHy>N4uho%h#Mg9v4_%xN_ z6=FQKPKONOpk-dzNUnu217oNUkbmG^1tzL;+6)Z`ee^u4gz>2 zwzn1KOtoa(YXJBGOb#Uc)V81ezoAJy`j$k(19kkmf=$LvCXDyjy~9botuJ=@^FHp6 zl+zzST#7NLuwc+}18vaNU%NJ;a#{O1cjxJ1YZRREX{Yy5QA&X0S@7T;G&?*_OlV-o zy>4UaS80C}DevS+%ce-u`NCxVz+0?$bh3) z0`lEl9^OY}DN||0Z}sH2R3M|gXSaEFw`+O%Ya@AtMRD^T&tibT9l?}~oY_B7@Iu#A?XE)J{JSLg zTB{OrQtX&kH*BhJ1*f^osf;@|eCkP^=D!R5nE6A1Po`q9AcmM~@FXbRE}z~%2I_-# zaD2~X4WDLgV0heiWkvI<7OqWt;v?RC7U>9>`P%@7UAh6D$Wx((Rd9q{ocC2F45eS! zHgXaKR}m?@!3Wbjm18sHs-~BZ$QSr`J%Qx?TrF*>Lh_VN3}FFGGcuU?2SeBUOTsJc zoNP?6ca7(5g-@idw{L+yYoL9ZA>(e0Ws+a?8)4Ax^|>opfdu}DS>OUK4!B4U1K;;) z)r9x$B*}3={;M0?EOj{0Zh5kv?A?GGMI;ANkxwzH{K34Jbwdc+TX*ll!B-V z^NF+>>^JsD`<%+Apia1hkfVoY8%SD$oBqHKE>;_F)Fl|^>DlDB zvZKp6)iu@w%YDTsr>mC_r;FtD^krZh0Y3X@QFX5WI2!zb(0r+$TUPxbm`)s#JZe?L zG(|?9xMeZipnyg;NzQhjE*!O855yJ8q9yxf2xiqtJ_9drRjikr36PDYq~y$%TRQ2b9F^>U zO5)HV6U6g*h|oDUUXrn>rLQKl&{^5qW(hX6P<`Kcib+883=7pq+;`AtH&W=&$f2Ef z6-_0Q8hCklasTT8Ey{ychw;`*tqjZ>^wm-~_E zHI~eG?AT@{yS_w+_sJiIYcyPQaTPR%9U4HW{**>cXR(%ueroKvEpb72ErGpwLj>dw10!u z7puc5ctM-GN4Qi;)ON{dZ&JoG#j?}+W6zvzq<6S=$@YsD)%=e8j3!BfM8>+~>(*%B zS?{Loz3iffqJ4*7fqNK~6#oUcQU6#Pa0;b%dZRHG6EDB#LcpbyH-1+lFyoIzYFFDe zRCD~TR0@lgx0R0!U5#;d<|TJ<6S``Su7~TK4h=-i%$*ZNe@(iK^4W(#CjNfq;lwlI z;TIPZV-V|TIlP6osFSFk8nAT%7aK?iQ@mWCcVF0wmqna!>L>=MxKTxRYg%H&ZCo*C zY81iuNRM!KA_48L@uttN@o;@cGrUq^>|48zv2U6&ynkmWz@f&spOm7TqMl}3q%(NudaK}e*jHP1e}1m^UI^8=GP?XCzwsJN>{s`GhHATh|Os{$=10@hC@k# zhA!>t&V_hM)oJQChH}moIe25=jAN4$$!7yvI)fLiDfX&oh~^sa-%$8#thT;BcHroH z>xyT8n#>vw%GAqE=aP$yfsfv(%flIn1os;LrWm)_DK!}-fgAp}s;Z?#2^)beq8V2! z#NkCY0Vvph+qiUVc;YQ#Kjau;B<7igAN9P>X$ci<_^_{$yXXA4kGM_rOr34M1I6Sg z$yS1!h8G14Sg0X{#ib?AYe(&gXoHLrrLJ&4-ZH0C_Jyl6&#*WW&&L9)w|YJ9B?>L^ zpnP?(Zs7Pt`?{P|3{ino0j~5utE`y#13*``8A9I`s$rV@5>y=8i%?ZnGeml}ww#FD zOgh|+Dv>`WprN z!I!Q?(a_WGQVN;@U~HWU9FMCxX9)hCUmG_0*gpz{ypR-9f=|dY)Hz);fR(ITXkli6 zz8REWkHDgE>fU^C#bxVaciq^eNZL~u!J=n5ctKwE1<*Xf8OPoCv+Rt&zItaZK45$`9-pC2)7Du8qJzr@NJ^OC4d z2lHlTtAuZ3tC$A6T+#KX#t3pr6m8JX@>pGBQ(MQ&L( zlsw?jcGQz#En>+Van5Um@8!zYZNK8=E^)c+OXzN}6cvu@0P3JPw{^96t9eDR=}xUBXr8O-1BzRRH67)r}v_nq6T zu+%GWESFAPb9?pV*4W=5qo7Gz@z2qbqUK%Q^@?@&JR)5b0i4lFB(kE3ul+~f(WP=c zew?FMo$b=|9p8>aCNVKdgp4+GqC&xqYB1kDw-fBn8b$2rs{7WQ+##>2z^fGaV6{Og zP2`25CukpHkKOxqDj6mF@7KT9S~T}*=TojmZ#!x?k7su{fsEX9&QK?Hu}FH(TOfn4 z@e(-$F2)tXYQMJSF-WDvDWereBUJNU=hnq1EZi+WFF8d5vDe>ScVLMsK1xgd*fO*G zQt_WFIkyIT>QDns2qB4V8z|R$?fjN=m}+#*2cH?3p%EnKF=D{2VZpF_Gu|O!feZRI zNXgSz8A%$kIc$%0;4Vk2k0NnCtx&_OfENcSt<<5?~ zvsDN>8=fV%ULEB#8kI>M3KG2!tO?Bh#RLf(3e*!Y?40MtPa6XM%+S!Qtnr!kQ;a_0 zG!7hf>`Su?7mz1!=SB;Z8FT(xk8jqq1WbmfC`P8Fy@8J-& z9-CNAL?SB%6-HG49#-uq@E_KbkL#G?HN^>6_thA2#&56WR%I@1)8|ee3;5sO$&ZY6 zS8aGp)ik(oYT*IGK>x8A5{YE(pYy81Qp}}@>TdAC$c>yD@wX=G{$WpwM^vp*$oa-=xx#YnN}*MT-@A7Nk0nc zbD#0J9)-Vy^`};FX5j4eb}#A>&?F}5c)T26_^JWFZ*|N)E4;G_J5Xu@NV9pbc8fZ=AB(z^mk9)iB zqZT`vf;6!r#tUq&_d&$zXyAlrtsbrQNAzIN?VW~6S>RSwR0wOlppGPLV2v;7u@j~g zAV9M{z3i^0>VgqQto-0q@+^T-M)#cf%%w?A{?CJ@KWi~Lgkd@7Vs?F9FP=c?pd3{9 z9sSdHD*T0w!^zPnHZHyn;o0dOhj9|*s-zQ4F*$auM1QJWX|6C|w3kZ1N}TNz|GdFL z-Gg*fVq-UX+ZdYR7RB3n1-T&k1 zEd!eF{{LY`KoA5Zq`N~xK#&xW8q(b$0@5HkQUNK+!9eL69ZGi!Na*P9nsj&F$Lsg~ z-_LviY<{+L-tj6G7*npkoYsZ41BL}Iu<3Qr-r~$7c=1wmr{q1kj=yaqR9MZYG3&89 zG2h=aMWL?_P7`|@w-L`shoIV!rW6eRNhr6nrjCw|r`BU%n0chR)-xT?K!Vd*1r7$W zNQMsHcfwSTQ)PTLxKx$3=g#@bjbaNH9v+EyU%qHEPoGff)izE*ZF5uy=fb=L{1$3k zn`OjPQklrn1h9o#2@Uh9QbT1?RgQ3D<{IPs8-GRjaVa8*TM8a{P-NG- zR}$baO7?h|{}?k_Wg<&*WlDEprSBpYC!b$TwS=?WD1#UG1$=J}s*-5^T0K-Hzmna7 z7s;P6?ADmpEtBhSU>dJbwn6}6k1m_NUDALriM)e`Nnw$Ins&Ob)QV4~BUT1|FaWe) zsM6b=XsQ$EDniIGm0Pn^ii>~!$j+SDd0}EQZdbyRS#oGQNK1fDBmFCH4|>wFC4!4N z$G)cByr7uKOA{kxEL@GIG`bcu4n~A&^T+aoFB^OuAal z+2~=N|HX7>}fSUMSGbOha)R6d%6cG5-+~( z9g+Z_g?^2y7r8clBHuWR9;*I{cKvMv64)FBa%T}ATs^EXix#R6gy&aHYkuqK85=T3 zuUPp{UV4#HEzt$PvvjX!nDVS|>nyXpC8iD(JsDpTe#_b7PLDPjM#ywoC z$1x@MOGAycD_WDboW&yc8tlscRXl^LI+985SI)&q`=4dlC8evzKF#!hG=2|V`K5cm zU?AW5^JT>wlA@BNN`zqS{As1!+Zv!V~)$>OtsC4N*Tgr~bi^kTA z!AF5ur__nZmlFK0G&lN5D#)cSr>Kj+X?(&Mmi6i9)+BGZt6MeGNfqQlIi{33RRpm< z)>s<^7q?na<8)N6;#uahxl~Bi8yPHmX z#)JlNljOWeK%89paLO0%L zg|BDhW30J=0R^a5%4csHeA0W`gC5$4_2bE?tzx)VR!-bdKbIr=Os`G`BbAl$+Id>5 zB=!GF*|W*td#mYhW^12MPvf{@hep?nU2DBco^8p8NVolXC?;`o5th_SM0B!RM#LQ~ zuyw}QSlm!gPxb%{s5FH=hAli^nDL_c$-ELUQg7JI4-Di+$H?Rf(W!lrc72%2YkLVO za`k+EZ5H4g4epH38g7l_{KXQ{5cY^{y5fO`t-~gRtlR_!o)5r(9TzS8y|{y#T@**D zNDjv#M3|798Qr4CUpgbh(>!||*@AlU?Sgvf6+Q#)Dp z#9YNdorpgJZ-^8n3pXLd#1k%G=N6%saQ*s|!$&d|0<|Xe@jb09FHA(Krr2 z_)jY)YkNpuJ*S9LTPxKL6-1Pg&^J;WP1romnvhAftQC8cFHufgcZZIYIMTMWp9R>CspRmnLMz?p(q;!zBGVuC%oq z$oyT!<$UlyfQvpQ!2FI}sU~a78KODYEG-jERx#}C?2PJszu`-Y$%2=x;_@gzlQpmt zL#}`{^3UU{ySqx5Mo4C5ez4RI6M3?pjON(VGy@yM0OI4$P`r6JA5X&RuOUBYp5gNH z^DnZt9wIi+{6hCAW239^AD8Ep6w!u7bzAt*j>0s+H34c)m$JF8r<11DIHkX@r_V?p z_^weVnM8nRT`*Y^Zjtb(jZ7F$753%f!m&q79A#WNM znH+k1gDno7B5*R3g-Df8uwpe8p}*EakXjsqpgs=~FQPuc1t5>=PMq9y+n-SvJKtvd0=X@;w~ zTqpe>JetvrH%u1XFjap)Ts4Lol|b_ z1>vTZIx#a(>!pYb3=G`5@R3IJme5!j+oSt`-5dW#n|nAWTJ*$>U^4lH1J^4dG057H-HI6Cmfr{7UdY*%9|e*NJlR;5-` zTs!@^iR0H7m`SZtzQyB`{83fFaWCj2%ump*7mRxBn^7>LuPaY3Q%J0zK9gJYr(r?I zPg9o|Lq9PqD$A6d+(}CwNas*cHxYGQZ`Ebm^UrY z8mH2&r}@zqtj(AHfohXKSVXa;n;alsw#QdD-D;OQuiz29xEI?a8Gz}RSn>-jcNq2p z_OqUamj3#?1NoR9aO+AX>2Yjgno(nh-@VzrShuSTADAmeywQMwX7Xb9%>UOwrs{tw zA%OW7%}72lK=+Xjcf&&z1k)L@zl0v%2f6SA^+%)!H-@w-KPX4nPV!aKtf7{O3%{8i z&uWcGxfR1a29PT+f|sU(>PdW09wp~{JY+LUBaM?w@ZO@%duKXPim6&&hZPswm)122 zli}Z~1fQ}eKg)w3r*0@$M%-_6baYF<{AkY7j`fY}Z}@)8n*W}?>oDB`y2WZc?yD*mQf7Z>GEI_We6=;si=xQ8WLp;cE%E=A9hbhe~l2(Ph_AD zHL2AEMlEmq$zZt}@`{S(jV4dAK!BfAA)zEzvR2EbU&=ITPW3m1>&iku!IueE)$~5) zHa;L3XZcd11*Pm@$SzCOQ^3(X$U57=j`YjEo67@>B&5RieL3A-CvO(cn`;I+x ziN2mfr5lKZ3FVRClM5xl_`!5*NE3fHz#3;cWvpa7S*73ko~rT%)eC&<$omLLuG`;} z#({x>{ht;whreXNO&tp`SeMP?DN$*&F^CC5;2+pB=eaNw-;?Uc!ip8R)04lB63Ki&vWM@V{fBz7?!Le#w!d2QSw2%|jShJB z|9!B}B=FvNtL&j$3`FG<>>^5XxgNV7;l)T2WeYT(W;DPFUZs;`y5a>K1xTt+>aWB1 zm~eFk=h9z`)Ovo(CSm%)g0;lzFR@(QI+``(>0%6|!M+RaCro=yBCBZ=p#uY<+BO-~ zu0HW)YKRV3aV2zZ9B<7F70}wNC%QE}Q70DM8)L?jRlgVV>n!E7Luq=^<0Ww<8JyMeEz6vlCGVZgJa)r zZ!e~^F~@5RZ@g|ykN1Qhd&budDc!Do<)P{^=jE^5fieUa!1OhNgc4n-C<`XdYc%uH zd{0GMYvQ+u9NaRi&TEOGhz+{<6Z^W26<6lC=gp`+Mya3+%0x}V24N4jB8=d?oh9aX+M?=g zQuY6x*$jbgDmkW_>+Q!+^x`G+8p9v*Jnx)UOv-O1h>Lb=y|g9Nw*^k7hqSk}rw6}7 z<*pY~82@B&s3GXL6$1BH8l{9VD}JgGWA=OsO+SR5ay~)&zWjOS;Fh(e?+)L>?i+T# z3`*$Y40#Yb+b7nfW3na;o`*X&r)g30Y{W`1ld?;0?!wlKc{MXQ2tZOJW=`MJcPe_8 zpxaF*GUuM-Reb(jnISWwLW8%o*eo(jLw>C;T8218v#+Fri#)35FUOPbD$h$=Gb~@a z5ULh7P|52!lsnA;v(bVe+LFB_4yExBkGL`HP8QiG_wHM&Kc|Y$gjA#)uM|a<+P#U> z8~ZYSwP_(LYOswdN4Xi>qS&?Q2++wJlQRolQhUJQz?ILTmel2>0~VxmWQVhu1om2J zzcxRAv}fq^W7XTMYrG5hFAb!`^=3m%Wph~fBOA*atyk9PvROs}Bi!Sy!tpu|kdB7D>}k2RK2i9z=awT)T77EUf%~Tar={uG z2cdYgPo9_EQX5g03F0e?LAN4Tw;TYTLrZsZRkLb9>G75~ijU~$!ESWzJ>JDSykQr$ zM!ME2o#TeN?*2o^SIw=p!=tSs1-H647OH;985#A(-G%>~x3nh<^yW8PYde84lT)3q zS`Z2+T70$g?tA}XwdkD;Rg8c+(*^v_EQD2pa(@$_5J>G^m)^8rXpXzRjAYUX9AETC zlO(|EEgQ42DJhictE%}4cUx@l0m1H#slH;1g~*3u`(dhL&#~@H8^B|T>8RU3SF)od z2C!vl*=6C+<#OB(jgS)cC(WBIJ(&sGI)xQX1;bdZaKOd+)=Ckz2mMVn4R%82H&sS4 zyjaPUA_!tj8^6-N3Z@8#tK1J7P;I@jB%Mb*5n(I|x-WVMxmT&!u>&*dzq-L+=n-RB zsuSq=>$^w1EhQ_~HdY^pd765g}C@XFk6Vn&(~k@;K@r$uxd#jJhFdGaIxPpxHauFBOcoxMKgD`wK@d z=Sd|$zh(yi?4$%ho2FbEzVu>g!fAnaCgHhoBi2j-_JK+5m)oyTy)_`1LHB|1c)=yE zxcbMucN*S3eORm|yR^NUqItL{f;i3O;l{7Ics=+<9RZp)M|aLa-hu`FYkuU*XnUBs z=U7t~`|rF%xl1NCDUiibUxwL2L?FGWkV3(M_<7Q72vNhLC(}jOp-!(byhua&9AEhz z`g(Q;Qe06|U7nu#3N5%&p`tIM9YS5G_{okz+SQ_$p?j{cuN3Jk51gR$$EMFw`g zNB!!kC^<@n1UHE!2?_4~ZhZ9q31U(S@T@x>&v8nZejw4&vtHR@NwA6IZe}=G1*%h^e zfCkn&3Z*U@Yg|jA0g0v(9{>pdf!JMx9itsC?ck2vuZq-?Uo}ihn=k|3D4w|nqW*D( z;RHaT(d9ri5}g>u=aC0}(v|^WnVun~Ns>U{Q7XVVfD}P9vDUvZzqcA?sf@7`B(Jo`l}Pf;F7AWF zK1wX-_~RFAh-Rl7aj%mo<1u!&JKEMK`3JcVZ0yw#=5=p-q(xGcR}sXy;p^A(qQRLrPm@*a1JG^o^K4FN)C%O z+}S^)uKrsE!9NSKk4@J!gB7;^w9BbjD_?P%mV9CMPi)^nI(u-D)i(dwF))VfvWIn( z1r|A-_&_$+H}V@lFC>DhG_FH=XzO>qR#WZ+y?>_oF#$H@^+unAO8#IqKE~B@i9-=) zZxd*wlkUK}EBdDsU);;EOa3JA0PwF+vr{;!B7UHqORkty%(Ve)gq5s#))d0bv9W47 zDa}rap<0fV%9Sw)Q)w(bYLQ=^_!+CsXA-YP2t8#2aAU2> zqZwcNZ?iQ!CP|av$}yq9rumX24Yzi7>nmSi6jkx;{aA;@Q}Hc6=tgMzSO+$ z6}513&XUl5Q~x~FE9THDlU}P%EhG~Iw^qdfD1fP`N{UdM>MkWnigluH-{`b zMBAo*^@lv|`t&k`e&ULbi5_L|9|Jz!1<9AumCPw;g;#o{P?S<4NL z`nwmuZE6JcmV{xf8D6O>Wb@VdRR1kEWWUUWE3*gt_z~93q)3$Fn(I0rhJV~`Gq?QF z1mD~?#Iz_;)s15x*D1N&805oO*PcoB!jibF=58!)d7>9|I^8(+Ue8d+(BHGT^=0(p zu@ClMbKD^1Ia_IOB`$$mb{HM5GgWQ<4`4L}*d!t;a9uN!H~Lons6a)HS|++0Z&K=NSI5#qSA*G;L(cwM5SMGStCu%Y;0^ctxUnT8mymM zW8`W5zN!#|Ub~~k&$YI+6^!KJ3}8BbX=Qb3q+i$lUf767lMi!4m`cJeER@FkBVc># zuprri;%4SGnF71Mu`#0xVM8-F5VovMS*I_hdCsp*FKguRwwu8d)qnQJ;~yU9r~jM6 zxs*ONj`S;INfi<&ahtBUTtz?FAMAao7@vTzn#O{xuzJE1OqZNy?(dQK?_Dv5;>YDp z^>{?tmLB+JAjQwPz!CXE%EM0)!>65AH$>6nJ|!uMe1M<2xD-m$LDo6F8HPYu&PH(< zwz)8WnRwdkDjF(&xG%E`{R4^yco~;ewS=v7=`^s?WnFG-zYzmk3a@neLc!uGJw?Ywb|P<)#^m^5e|p< z`RwkB+KHGekja8mlsKLH6TC`M-^k!cH>Mktn3b!u1F-FFcQ=ADnY%+DTR+TRU-?LI zDs;7sP)e=a6XwA3TCY?kLYKh7!NHZcILxL~;y2taaM;k#9|02B(LJKz`<>P1Ilt0_ zR}{)jjOlnjh`3F*2Bf3XFK}u7y^`T$W9+T+-5ByNaT=dha~RXo+?m98MAO*C+akgRKy0Cbp3~#eO8k5;+~G3Y$S|f0>HUn8bUqrd zx&(z?Mbo0{t)Kr%6GaXmMrh|x(1eU#jP3wxtiYMLVlppP^b2YncIIL`JFxf8R@Lj; zw$8W}Feh-{7$)&C6*@39o7r*!Cl$IKCm$B?rMi*uzolby*xYRE-qcS&Tl3b?!}jct z53Z=wFEojc?j- z6Fly(U5)uT9x;`3eOXt`M?r&IoJfs`TD08t;V45`@2mK~x`~Jrw*%uq-ZuBy!kt9; zW$%$#2c7-3EQ@$?+hyUXzu^|x5msoOHo}XFxp7Lwe?5a3Q|sZ zB#oP=_pDFRe8$RGO_ZegucfsPD&X0TDql&n`K~|3x|_%n=}mo`A{T5 zAh?PG0oS^ssVVS99=&xi0U$H4qt?T+KLV=9kD3?DfU5+~TIW*OlJn1@9Qm&o*Qh!V zhqxiHQ8fk3pai@l*GgQ>n~=w<-qRhz2s(h-+YbDtMgysl!? zNoVq<5RAh}7Sj8L=O*k+QW=50aBVOFlVaaP+SFxNr1%3Y8WAY$!PRM{2vznA0zGr$ z4`z4%9du@3^9bH9E3L0tsNX$#$e+}g{Xu6LW&m2wW&`rW9$~kAI{oxgq>HxA@%A<# z8SrzN7%q2oDWwX#_{O7cr~oG0^mOb9;EV#D9b@o6S=i#=IL0V(spP!2%Zqo-vhD5; z5vzro`Tw?&gXiYS*UyVYq-y|rRm>tz_3R6B3PAhL3}O9lRp>7j+5D1 z;*BB^h6;9woaL&wN)9GRU!Yg&Vgnvsh+9t&4Qm=TIpxO&fz_-FN zr|AP_V5Lq1v`ndW!SL*7(WZoaPMo%h?2~557zW^HnORz5Anb>SR=+B+E5--I1q~rt z5bbaDszgyYC=xahqVdYP_O;GIh$J1+)LD(Fh~;(_(W>z{q4f<%4_kKNcru?sUPWii;!&C z9?2=0kMheSN05AW7)0Ch>nOt~@#5ko1OZ--uMG$i65EQx*KtU>_k&1HmRnYOy!P9# z^i52d6$!7t8Qv4MCTY4k6=l=j-|r2r+xrPlC|fCObWS0l!IPe${v32uI%yCyOMU;= zMksCeQPFJIm+)w~e`lF7J{rNCDEU&v8{Ed?aF(8x#^4-~M zs;g6^YE%>f+J-{aaOz8+=zmmCaOpC5xHMx*wE=FMiT|3Q|1xWO{>+8|jmF7du=$PW zmL?D^hbUDLK7DS(n3Ts;)<~-rK z`AY)mO#iB>UU}y!y}^G2831oQwqmFQ);tZWoX%P_LR3`uCr9X`gQALU0s_i$*h|p1 zj<2xGTkGTqrZB!RGPj_Xt{ji5nz)pd+RU7(l6Y|`7$?Cp$L8^pQ10VIOGWiW9Vqi_ z?P-+uo?YLtcmH5PgBa&osGK_@q2pc|O10WJ0R!r&ZK_d1MDd2LJOXl}O~fB>6C9O2 z@Kp|~y;oVJZHhqKj&dMFKW&uDd8Dj}>!U{H zZv?3IKQNKqu{#WTzKpiR`_t93fKUUq{G9ftm9@38L1c9p(O;Kt-Q(YAH_ujP(kNGG zUy(y#$fJ^KyUkel%} zKUG>I`65bHhq}XO$YjVuKvmkG+q;SV%&9w78$b(?@bmNuwuF)xosRbcK#TS5h?Lu9 zXIfAsEez1|*~;U+t$Gh&;GYU3k!x^xcakH|RhlI^(2+AMI*=bawpvFn4NO(8%61=E z^l)GpE3j?~yn7AH11l5+f>|X^qVw?Z5hx1x*r|sFn%CBXHKq@)ch5`~hY=Wf)MBq% zB{LVcR0=x|8LVxfpAlWM5+Z(yV`F2_dW$IlCl}C%B+r+=0KsFp-_`oYnfI|z^D|BC z5dqL-KP4rt_dcNjs6-PtHn`^$VZcUQa=EVqEfkL$?0!dfUMCU@ZJ~z|kAIZ-{TzJx z0K!B8q*biQFI$d`%9{WB0R2QJm!=u|xu?KinxY3tF1}S))7vCFq{u-}rUgND76)h- zT5;X+i-Mxy@Aug{hr+6dV)^rtE~lxFwd=^SmcEM^t$>dhG|s6^zfV1G%a}=djOu=6 zvRAY8Y%}lVWs~Hyyo5DkIKu@ZL0AYLSZ=4KJln{O% ziTDF-GYX?mE{;gS78;D4?Z#KD^=18q{MHI130Eq!JuQAm$0BKYcPEqOQ6WH`?y`H0 z!EMqIiE04nZ`x>YVkQ&_;Q&)osb6V^VhG3l0Zy55W5|jy=u35S2g^J zf&o>`sJ@~N3=!W_Qr7z57pw0@1w_8jiJgS(A;fY|k-VBFCDe$S653$0g@-20|CrYb`j zu2`H-tP8a+lVw}k2@HxFMiUOiZ>l>K?S6xfMQa`#gz3~fR^DUphaCv#u^qBhBMaxt z#mnV#_@vE7&^c90rmOtKD2Q0G%TR=$L9m!|!tLWwnTjS5A(Kt_J*0|+Ji+ptGNV8U z8?F%I35#OKd$Dd;;|{hC_tf?Eq4%BB?-dgBg0qxIKd?@7M`RzI0r=W0UE6AmNh=u` z>6XytewUzK`Kpw}6Nl;|R$mjrb0iVpg_`htc*1@@;zaU)|I*bgS7u14rKOrD9+6!D zBlT=)FYlMM4djnraUbi&#G+4bnNB(I>gOx&?d8Rd9iGw*U{OywJG=5rN!{?#MAu0t zWm4>L7A_%{^*>^2WrM(0SNL4U4UUQf4oJZ^*{G$dEhFHn5%7NQ0nm6(g%p{lQ?Mr6 z>kQ^q`{wPkq*aV9^tb|I*o{d!J7<}MR3a+Zrek`V;QPCfJ)iUR7|i7z1w>yGC+-8P z4YdS>GTmHI$2-_Z4jau!5dS5p_fXKGsQ(!2v`H>&;@tio=8>A>l<4!EU$S~mUsw|}dA{s{e} ziEsra;+dDudhBn?YYWnX9~be0vXRDNt`jC={DB&(9&7m$w3LCPnfti(#g@glwOjo2sL52hQIbeQ%wvOhTWM;qu?yHzy`MKjBN0cmd%Y z7L$iZi1o8^99?cnvCFC_fHkOhGfjKQRu)$&p^q>{R<#ufJeaM_SOYtnrRA8-1Tv5M-q9p3$H?dBE}4L*#W@7%x^W?i}c9to7yeiQj40qdX>oKHfiuEt2KU zImYyRABXbNxICL9XCB-KuVx3G0{(Bu=^_L=>CNfEh&LQOy|mZ+p}-j8n{afBpv>>b zqp6{WrJY;VUd>OZ;{SMCL@j$rPL9`NMbGcKo(K1MO(x>+VoG;(bfuonlhFq^LyyF2 z>EBkpfV0ADXo#bO_8xl8H}JrfajJxB%C=tQZAG1FrfIPunBTJyLoD@SYcI)yGz)Xa zZ>k_E=lKuqvwq2v+<{T*5Jo}XtE;^o^lIJlU|>Klsa?GDcm>Jr*7gl%U1LrL^j0QDro z9?norgnqgX6{Zq&0c48FF3->4t0pJq+Pq_Eaie~e;M@4wsT9jl|3|KN+TWT9`ZC4z z1Fr#R;VP!B@rn zyXtDe0ZjEY5FutpBDV5FyVu?jrWrR>Y}c7*Z&Pj=e8Q(vSyI1#CjAkc9_#vEsUTQq zk5$_jRs7np*b>Hz-qOo)vl#UF=+Ru-oQapE082RVnmxuYNJtY1f9F%LvgOK$bR8Cu z<=K3O@C-hDjQF~WHTx2-fP?wGL&OO z(Di><7Pbi++?lRI9J0G0u7{`1YRKvvaNj@_)r>8KaC~S=OjU&{_5?Sqexocxa`?LK z{kB<^rg9S+Ir>Xcmmpqog{*n0fgo&CVx@as+QQznV=$4Q`x!T&eos}Ex=n(eq6+W9pLQHyfWQ)^xA*g{JU|y>kjD%-*e{YsE zxp1hDmZ_a7y{=jn*&yio>GFnkb8yRJqPZdX6?y08G=;1>0Ee)y-CL>k*(HIJBo6KJ z=Drkx)@BNEX_R(zczAC6=3PDnOLCmCmEZB$%9n7W@uC$zv#|5RwiTArWpZZs!PJoy zs-3gDRazD0I6b>YHi|lNoKAc5swwWr^kjFGnb6Ic0TJf?G+s11WkML&%n)kJ3Q!uI z9I$Ph32ucSr$|PhB8U~BM-v~SynnRL938I+KW+TH^2>ol#HaoD0J5>&G5YHFpU_5e zE1!#PlkPR0=%pSg^{!>A=#urEt_8&BU;XG z-k!RXZ@z4;SQVvs+}KHK+kWrFga6Wi-yrOLMGn}?3%1Mejn(st_8K&8DQ3!>ppZSEk)pDS z!<8b^5P!?_mMXAif12{NP9x0y5HbthD+V0j?MN{mU?{fM_UQqcnE(YpMU)Vf{(n3K zPqgljTiCk+qZYTBGI5mL>D=`mg+Es#e??8>^|R9j!_wSq3sJ%x9Pq|@ zPV{n-QACm?M*Ubw%8?UbivPPn|wvqI%|ontVQa|>=UF6Y=*hI+^H^u zq*jj9h_q}H`HU!+FItq*-6ond0FW3T%%vRO@%V?V zeuD;k5U5}@5oQnwm_Ow8UyMV&%sKd4F)MOW{y*S;ZjeF@zh$4FTH>mUyHmT1_I4aN zJUtHB903H>C-pMa3!tYHf$Rp=?Q7hfQB27MrYQ8dTeXf6uw&}cuZ zDd)$1X>Q~iRPj*XSpqsv%P`-5`>91u~E=cE}T)mE!ByK8wiDrrzGe?&3iQ_ zW)j}L??Jp)u#Vrf6QGF8OCi5ZZmN)+{9~*xGMU{KLmA1Zz#iW55wSMrAagI57*zgr z??V@wfMfIZ_4RvtMn>d;!cgd@Kr9X+Ƒa)h>qH?UL4@ad#Tc#YIcxZtVK^2Ng`G|7bX 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 literal 0 HcmV?d00001 diff --git a/doc/_img/header.png b/doc/_img/header.png new file mode 100644 index 0000000000000000000000000000000000000000..8c9eeefadbaeb21cc4676dfe31b049fb2d1ba610 GIT binary patch literal 103979 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
    ?j$kqhik(cX!WC6+w{$JyHQsU@{Xn&%RI4hZ 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 literal 0 HcmV?d00001 diff --git a/doc/_img/how-to-compile-green.png b/doc/_img/how-to-compile-green.png new file mode 100644 index 0000000000000000000000000000000000000000..e82c8b693263487874f10e5ad2285e02881754f8 GIT binary patch literal 8492 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 ILEH%bAL}mVFaQ7m literal 0 HcmV?d00001 diff --git a/doc/_img/how-to-compile.png b/doc/_img/how-to-compile.png new file mode 100644 index 0000000000000000000000000000000000000000..a54603484cdb5fa65350559245af1c5a919338dc GIT binary patch literal 7940 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 Xxf`_CD<=N_msLm8K%+$M*4_UC8YT|o literal 0 HcmV?d00001 diff --git a/doc/_img/html_reports.png b/doc/_img/html_reports.png new file mode 100644 index 0000000000000000000000000000000000000000..2d17bc1bfb1ff5275361808d5821f7a4707cd091 GIT binary patch literal 180437 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 literal 0 HcmV?d00001 diff --git a/doc/_img/menu-donations-green.png b/doc/_img/menu-donations-green.png new file mode 100644 index 0000000000000000000000000000000000000000..a299980d36fb39f7ff3c47b37a0d58de0cce459a GIT binary patch literal 6585 zcmcIpc|6qH|DHtI4V5KfP_~RQ_L;0>P1b2_MKxvy!}Xt}rV()Zqfe)D>n*ZG|DoaemH^M20q8Btai#$4?C*+C!>*HIG# zGzhdq9w;lZG6CPj3a=obLY=6uZ>5K)I1?afV-!RNjzDP0fE)Dqtjw6dWz6fHHHg49NXA9ifUU)%2 zjFTm1bn*Hq;y}-i9OuF75!Mk4_QgJZ38j-=&jnmkna)|H=K2(SgTT^WZGxk7tmg*J zYiCtD)0NEK|UTbQyYY{gF70+~Ko z3Iv}%_nfXJ7K>=&q@CVjCgS9A?!;y8rw((Nt|EfNlUXUfgYmo5;(C;8#4bje?&*JQ zE%5u?&NFZ^lDbHZ?Y&#|OCg(Dyn_n_a;7n>uDq6jgPvcOLWqsvk;D(qom3(2Icxw1 zU#m{7+QCs}Sa~A+6Tc>R2&k#Ua%17R&hLPdY*Z5mItawEXZvplDE*os2*m0|#Mm?J z&CQTFil+j0TVDk~Pbz>0fi!jes92l_fdO$QxDv@)5_7eU5)dL@OTtdoT+y7WPjDle z1keb_11vDO01q4jFQKCi(ey(C1fB#27UJhgBGZw6S`uG*kwAI78YThx3SoF?NqkGF zy}1=cpF$%*R29^qIJk-`L>-|3S5sC&AmkxRif|2>q6Q4E427#9RTPm*N|5g#31BoD z-UW#^F#0|g@T4W-#$Zs9Fqp5euY#|#0)^%Z1I&VeDJsE~l%N0tO7|x-uzpZ7UGfKm z0fCOA5vdF!g$&td#5z;F8CnuRq~E6CN&SFOLmyz2@A3XuVmij3N`RpWbc#0(M=1QBp=Ksv%VohZTW>;y0){UZ{;Lb`=WgL#6gutu1 z5R_CUAb*XkPa#og<`g`juCfFKk3+gpXr5TWLPSrjD*;9&yKWmAURTqyH{0&J9a;B>+1pOk#UJuX8aG(PXhl}P8&Ml zv0qSqYx_F}BO;jqVR(~?fKPvN^-m%FjQCqNz_#8r0{vH1KbrrJ=eReON}&NO0FVnX z|1aqN9rbst1{5-OdwuMDuCz|feu|W% z)r|$mn`7rVBVt$&c8@6MIsuUQjtNR<9 zfgsol_aD_+_tYRa)SiVe`UMuKhAF* z?-2O4RJfeR{=WKgREF!5Ta}+lE>o6aAzP1@OQlZERR%lp_*TrWzk12zT`}wEQ9Q+M z*nZt9&-a=|O{vG=Kt{LOMpW4y2Pf?dNodx{M;Qb&$A-^uh4Z zUE6f&%^E%GrNH6efKdyNNY}5e$Jr=87L5&41-e#8CxA6lP$oS$KSY`hUBBvc`EJeW zy7{rb_@I!W*jwVk(uB!pZwy4C@D|k*L1MFO9WA59>EpX^u`Nlr?9*eFF$A$F=KB@D!ipES5 zr!*u|aN}2jTzDIc#8{b9of5h*^CgGdrbwHqGi_UfI!vJG&=Rn!88T)6=^_=FpOz-l zYSsEI$@RE?CwdAR6L40+0T$%PxUrb?`B~3MX?+C$sRt2v+N`uQKL^{X=Hz&PMM|St zKJ1cRa|`@bzV(u=!86&VwY>Suowi=TKsPmn?W#3pa0KX|OLhmI0&I`#Uv%BFcXr$6 zRkIs!6BQLHIDr@mS`8l*@s>x43z4A>_cd;elKjcds4#|cB7o8kXyr`q zuAaK(1zd>6v|Z2X(Z;QW-8^+)K1@Dx`Vt;;6>ZX!JK47RBER9d%_D)^2e#%$HRsAn z$q#rhbI67zF^LAB*^(4PSowe1l^O5L&3H9+QZ|8GH&?xaobRnO&V~;}UpE6Ng z2K}6;!z}dPcxH6HJ+-m4V9q6y+-h-CFG}e;+RSYq@BO%srho`s>T=e3!cx{x!@HX> zdReS2Aj_t3P1tYxx1{Vt)_E>kW^SA>O>{HJuc*7ohq@mp^TuBsrf~Y~Laokzzu6{O z*TI`t+iKZyPkP`fgy7E|gSR_FhKI;2RkGC&C;b&#jXHNXE-y}lmb^{|?;|${1ENUaHx5KhAK)^*kFI6YH=l8TjD^Pdcup0#y_Z--S^?eKabo z>wfEUtww0_S)u+$t&a83Q`4N0G?lAq^6Q%qIYgZD2-arNGq$E+$03B;k(q~P0u~MQ zo9HlT$u2Gj!JSD}pRuVC0hOk(u7hwI|{B zIw_(dls6M4FRzsDDS}{#$(K;)#y^tMySp|1sG0sC&8_w2WAhWutjIB^cCWVSB>Mc9 z;w;6PX(b!3H5OBGC%e4FS&W1Zf<94yxU(xyI3E^RMXx0YhM_UG2sD$4Eb}vjnwCS; zzHz)$8POo}95_s_#f9E;^0AteHPwN`gL|g(diBgfkglnsKBkXN%1w?O-+9sW5N7|9 z6f-syv+tq=d&#@I-ihF7p*<fBaQxk_$irOnZ4GI#`wPJq2JEu1`4L@ z6@;=GdYbbv)Pf!!?(`YU$h-o^hZApFci*%x4Ab=SJaWd(GdJb)o$D*B!lUVbTs!@7 z(M2G+%wu?mRQbsKuwCPcfZ5&1&&IK*WSeJrP11{tr9dD%ixb!r$jZfb(b31B4GL|f zVLGjlVt1JrH{O;9j=dF2ku%SdIbaRa9Yh@&(h-0M)GvNGZoKD@KGyR^2~>ll7hir* z7m!WsA`#=I4rx{|oIWP7Uz|G%gJwE5cHKH1E@bU%V*>%XnVKB8 zeP(_SUic_^+LH5|QL=RC zwu&x_fJd{?-oLrm@Y(W;l-$9m`~90>2L06MEg?2N;-KkAQI~VjrZ?bh5hd8sW=hZ5;CCuA-*JRcm;;Fq8NCD|bY#)luq@R7_XcmM{ zyiP*%e{v>`b!2U=go1nb5|^1Sj93Ea6q1XtMM?lmjKP*x(ED>lg3E-l25$QVisL^- zG9FBj!nfqD`lC`{H@7z4r5J6h*gubx$`?=L+KutA__BU;2&ZH?P@q@UQ zm>UZFTwc5)k$JDYV(BXiQOm4Lit)|@19yyIkC{#B#sIan+Ok}m;-rGSJ*EP?SYhM_ za)$0)NmBodJ|$izg(h$2BHPx(R|4&(qmJP&@}lyNI*S<5V>%q0Qx}74OMzWmyVJOH zcgUxq!OhvkQHSTfTt<)<7Te{0_Yah%otZG8?MTHP)? zlZ_4o(T*+kiM(_@GM`YGgK5SzqeGL>RM~^93W$_aNhMj|fO6{U(AA}C<1Gt*teTFs z#~#~bn%?&h<#_~nX$zEa)=-WJNNfZ z3||m~8L}!y6!9iFwmar{1vw=}?Dr`D3<9;7^p_Q39WO%f&lLjT0jeQo&=?O3)a-r4ReDV>e}pF-mOUTf??^pe|N?H_+D>zyC_p%wqs4jp(1OR*1EoGSC5ULa4(Sng=hU#I>Lo-9&(fAYLHtg{8l|U>8&qVpzp5ZMij;onvMVoeH4v^Uh{#%P z28o}0C1<+1wFka-d6h$PYtt)B@91!A;emsfUCm=E+ZZ+{UtjemAK82>9-Dwo$b-s( zs%P;Mh$whDN@b`Zh5TjQ@w4Z~yA$@#+h_RPN_QhdE{>RIo-_K4nm zsN+U~fqG;fY&wU}adv7owqaLXTE;-5h-E{MpRKjk@w-Lu+hnQY=fL>XwlcS8?#JES zwCZ#6_=iWzDZq(|x*>cJcn5+`gU+!%VK@u6jVeRJ44(LX9LXPOxjf*rGZyTct%43^ zd&1?MezPLxMgQ9Sdwxg{bEgqDHjpY84+hDf%gE zxJ}ugqfwtLEC5ZP$6$>4DN!TdM{`$Hg*Vnlg26YmUcvpi&LKO1CkUTlG*eDs@uwcsG( zo0ndetbLgac7bx*d-SHS2n}3Ldsx$tSAJ@rn-U^KlGaW{xE}EWeQdF6M_`*i2{8U((+oQ4F6?I&~nP2u`b(=(tM2u{hm}cew<4yJ#FStKfZ|!ue X&})-;*+km@&%jYb3xiVBnb7|OyPpog literal 0 HcmV?d00001 diff --git a/doc/_img/menu-donations.png b/doc/_img/menu-donations.png new file mode 100644 index 0000000000000000000000000000000000000000..f73facf6fb8521a852cfcd3a609c01696d7c672e GIT binary patch literal 6581 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 literal 0 HcmV?d00001 diff --git a/doc/_img/menu-features-green.png b/doc/_img/menu-features-green.png new file mode 100644 index 0000000000000000000000000000000000000000..527d68d4c46437e6a752b23c9b9a5d509b9828a2 GIT binary patch literal 6303 zcmcIpc{r5o{~k*kQW0f@jG?lPF*CLqA!ckNWGf@ZEU!$=VrHz77L;s!}`B`p{&_V9hRp6~gczUTb&o9mjnp7(w3=YHL`@Gl0ZgsF;F0obu z0)Z^IwIMn~AVS(;8v_*ve;FkK5#S9&27$2EoX(~KaA#`^xH=k#Gtz)S)RWVas!26l zWe-;?Sk|7~1|4|L+32*@zwLIs?T({x_X0x7C0jxobrq{9az-kVrR4c6LU^O~ZS(iy z;UcwphX_%UOXB)IW%S_`n}p6&J2GONVm`VT1hpm?4K;Mh`J5Eq?{G3Fs2~s`wK3o> ztWN;l-(i1qRIhF}5~G|;5>fTOsQ{=Pk$7C)k|%~1ZOl5mM{4E%Jcn+5DaXxuCuSA4 zN^ln-r26r2DX;xqJQL-3+$~A2m(Uiaoqqd0QdT@63tSuW0dmXe26MHfrRj-H*b3#t zu_T$cW+%D(0ugVtvcI8H#kSJIKgJ{HO{6ZPh&H6D2w^k31Mqx8G_;;R+z_XOHo)rPaN2N;F4_pCYlK2$k!Sf2o4l?lR^&*$J#sNmpWonWjEo4XqYngxf_#h@@4B#1!rLRoxD2$IE9 z{mwuHcr-49!)LHr@I^)nl^w`8L4ZoXhQQ?fpk?vCr3p+JDulv8p>=c@L;4Q1xBuTz zCi4fH$F~duXZfc0Z;5%Xp&S6^4Di^2TpC~*1hDw3-zVevviWSDFZ&nTesuqrLOSio zgq%RG|CjX8X(+%SV1nE{5R3kzkAo+00SceZb!D^tzZYuj_Zi^?!eU`?aP{pB7M&f; z(^wSsZ45x9@BtIVVm}hCi^SkuF<88=As&m-(ghp3U!nG(73dT`<==tXbcRppzk%A@ z<84_yK7~aCY>6faP?QdXLB|_Xv4;8v2Kq>h58VJsq3anUDQF{Iq`p2)A4kPe0X;1J zi!N|HkxdI+Ovd8)ug;~jX&}dsgyPY<7$YAe92PVy)d1ws^FdOnR3oH5j)ukQ15_hj zEbyJpk;?!V55@n_tc$AXAR`8?3+UrOEk1yu9@589PalcHVgMu+V68A3T@HuCJ5SModGcVueTY0lf8eZ^XvFvUjQWiAI1L)F7I0k zEGWBwCgUgW3&w%M1l?i74u)_doHt1adfRF1P}~bb;po1>Ij!|HMjU zvnY$}>sNd~`~Qi_8hijV!OU@gq3mb>KQVoa;TJsLdly;081t*mP(RJ^Uq<`_`O|ar z`zY{Xyx9D43IH#DoFf1hXnihtN=V?YGJ-%>B-;|rT|>@{WbE))>Tap5s~M&S%FLRP9-F+IcL>MErIHvT65m=Vsi-$X_1gy>npuS4`~&* z^*jUZ5w+Gnt{L&f*F%ySxP*o53mN4#1a>VIok+wbA z*M65`dEDkoruz`$**Fdg`ZQD(oTa|qBk>1_Eg%HCd=!rBg8y!vBHr>q``6MvE-`0p6N%IilVKs zNeKvxoLiGX#r^G`7CL9;Z|p;yc=TjM&=bbq9#+n@lH)WEVjXgHQfAJRw#?nv!?Vx{POFpbItG*kHW(%`U00R-;YK_ zL_TvL%1RF$T)LhgJj{vW5IA=3weGZ9ub6xMk zlbtuK-2FH+FFJbX`w0Eek*>9*Ty2sx1TG4zDMnTA8+cX#$x^e)tD64wCck5H-`Lc! z&}Pzj=h?{eZP|7uq30L8Os7B5FPR62O|I+>nP_PXmKN4%YcJaSmUvQLA!Kf3s2FgN zKKQmNC6xrtQ5){86!gzI>MI2_d5tbKKgt{r71w_@s+kw%>a4lG|G;bq#XSTJ&34f3 z!q^EDnM~7#ZpWm#W56-j#%%ts$rR`5Oumv+K&`c0qEDUJx`leXKzxaIOJ*6=GO!Ag zl{(-#z4{G4`=!rH<&ET zq18ENLe>oM4f=TfqP^a2=V$qA;gSn;t;Gq0kNA8t>>M{;29Gi|#+Y)Z+KM$@9deL9 z&%3WDJJ(NM*q&UZT9lMIGa6|!Vd%9l&*8A#(!Ocig^rp4D$L;Ac&W5!fR0uXNAZeI z%^d~HD6JQD{8y2tGp}ATRg8(^mas>y$tfh#*e0j@vlX`NO~KPIE4Ej21YS>$OC?-; z_|yX0F)O^^8H}rntF(_+-(VkV7XGp8QSWqZe!MEW{hEH1I3^yqo8(mZ@N$i-?Gi{d zqi-^!o4U6w=3oMs91ony6*^~3ANB3k&+1N7uTo1x~^omWgs&0W%+C-mt0P={jW zSt|^Z(0_#D9WV4yroYkGP3OJBv0bLyO=sFaCPhx?cuc;io_Bauc9|(dl5SKkOcmZr zB5~@&xs_MJxIChk1q|GoZ0QLys)we(lYe02bs6opX(>d-R{OMbOpdFZ*z7x^?@6^) zw6>(OW{LvCD^;Rt>t$;VsO3e5bW}63-6S%v8ZW`XtFVlRim)>my`R3nnrLXHuDNFFhU7A~wsfL{ zXW09+duwzSj$S4R%~wBG3R?Af`MRr|NUj(dc*dA(we(+$kbhtgQp)NJ1~0bXfwpRH6}-aSpeZroY*8_u;23HhWpIay)? zg@m8xnyDUdnMk`WsTha#@oq(!FC;~WF{n~P0uc%#BsOgjQJX0z1Y+|36{&oDm zm(*9kQJ%Y>cFMcYjZLC2%@00jk%mBTbIWobo9;BKcwn;K#zmtPApoytO7L~^m*qcVWBK`gA99cK~hE6UNOSbHPKt&ycQ{y5ZynLXKng$F8jG8I)*^mbMpFxjx5bJqY<|q z{h}yWLKJe$a!XnK`mN>5z$GC{P`7C9DHC*PA+tOOWXR>L-KFe+qTG*F13?)=s?wx8 zo~h8HVsb0CPVH>*lgaV zos-Y9*IY6;I0}`vIv$-)xn94B9N5xCmJ+$mRsYZlCYja}Ha0<}yR?=ixZLTFW!QffgE+sxd8j}f;=LiUP96e1 z7mhQ<>mN^_vLV%0NVdd-dj%VHS!cii5Q&w7WCsZ{M@8(bJ&f*{YaAsqeyb=N)k9kN zwE!>?mGRp*lXNO4dfy1tTzqy)%0OT>xt4DUqkh^`zsp`v)CFdR4N7rao^D{;UJJTN zl~j23EHwRLd!yfw(i>}(&kB_&3zd}7vST9~Cf5&XPIXKIwX0cVPi5TrT*ukz0<-Cf zw`Erb{bi*!mmIV+FRTc$QjHBgyJuD$%emSUUz^bFwH%5GDGdrF7dFS*3C>37*c9u> zv`bqx-bxtobg{|PT-}^jNfSDKdQf+F)lLg+`S0rjDu)+WIi;TSn|Ydr?Gk5ol~lol zff6&^u8L0&Zl+&3kn6`{c^M=^-SX}OT|1tY$iq}y5tE}~*^H|yo1tzME+rd-+$KGh zBT#LCWwxHw#`XPs%gkI1B|POLrb!cH^?Sy5Y?c^wqmO*n|4K008GS4J8gYHgB|tIca6pL}>1d`5VC5QU~P6`K*2_Q|U>i=J0iUw@;W zH`Sv*T3=vuh_9`eEWA0qccbwZ#C*IkZhPLCK>x;2!y&uk7732lc-%R=(bp|KIj#pA zq9gUxeI~{BFj7p(E8?S$CI1mvm3U%~Gsd{5a7|k=;mR9@`Ghygt7WT>lauV;pUO^6 zy*zfL3bM=6!QM4@*)$O9bX0hWn2P=HoiD{-c=p%V=a;D8b{m-15F@-+-=05I1m8-Cmog66jQMYvGmHEj zbsG^lsa6rb!O%q5FmfS9_%~rp*MXt=xs`{OLajH7iN@dSUe*vMbkEtwYUW@Zp`N3@ zWkf3UV~^Yg=i4vjlrpyEw|exb){XQwZ-PMTj-a_XT zSov_lj&-ogx_ZpeS$ENMx~qo=a#Q6CPeIo$eR`#0{z2hWCFGsx*GKvc4I&gFClAQj z5+vMCPT-246h+j)C`YN{?NjqP6P>*U$BIP_wjCk9D0GEAdR2Fibq0-WDSL34(4Jpx zljvbAB8@pZAWo0~4jT=npcP}U5?gdxSM&GQ`m-WAoX@&)Io{HR0&;vm$+F4V4yq#g z-r&{VRfa@Tjni5?-JG|M{<7}*t@+(rc^6zW@{G5a&m*nlI4TAkl^fHV_Tk6vNKR^X zk}~BLF@gtgnX4=|LlLsmnf~Dm&U=SPFZS%<#6ZoPVKp!}Pn9TyX!@Em|2^aomy+VO zBA%r#{NgFDDjOm(#GRf1X@ z!}3Mr#|yI9$)nJR+NsIH9}Fw&?CKMB6o!vHzdA85BSY^}lRdR}za{B0Kl7}tQ1?AWPGssjnY}5G?&hp^~J MEggtO7TyQ{1F1Zjng9R* literal 0 HcmV?d00001 diff --git a/doc/_img/menu-features.png b/doc/_img/menu-features.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf71064d1dbe9f6e151beddfb7decd313e2dc03 GIT binary patch literal 6332 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 literal 0 HcmV?d00001 diff --git a/doc/_img/menu-get-miner-green.png b/doc/_img/menu-get-miner-green.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3bd5753bce12d411efc01e2d7b7c6b55056eee GIT binary patch literal 6302 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 Ow}GySPN9}d$o~QNAfBNB literal 0 HcmV?d00001 diff --git a/doc/_img/menu-get-miner.png b/doc/_img/menu-get-miner.png new file mode 100644 index 0000000000000000000000000000000000000000..891a35f16fa28e14e98f713163c10bba0cde3f78 GIT binary patch literal 6304 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 Tj~iV62e_G$CF#nJ1Bd<(((-`` literal 0 HcmV?d00001 diff --git a/doc/_img/menu-support-green.png b/doc/_img/menu-support-green.png new file mode 100644 index 0000000000000000000000000000000000000000..3db8e76efbbc326e493a66472e2f6744ed4cb922 GIT binary patch literal 6237 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 literal 0 HcmV?d00001 diff --git a/doc/_img/ragerx.png b/doc/_img/ragerx.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2453d2a3016facf8d25feae75ae3b87e1b836f GIT binary patch literal 157717 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 IM6N<$g75n_IRF3v literal 0 HcmV?d00001 diff --git a/doc/_img/rx.png b/doc/_img/rx.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c4c3dfac1d84278677ee839df1d4589951f61c GIT binary patch literal 150966 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 z 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�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 z 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⩔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 literal 0 HcmV?d00001 diff --git a/doc/_img/troubleshooting-green.png b/doc/_img/troubleshooting-green.png new file mode 100644 index 0000000000000000000000000000000000000000..d36cec8b8418e61507ac7e38f3fa30857d57c4c6 GIT binary patch literal 8603 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 I*MMc_UyLX53IG5A literal 0 HcmV?d00001 diff --git a/doc/_img/usage.png b/doc/_img/usage.png new file mode 100644 index 0000000000000000000000000000000000000000..d9421ba66c5b4fe5ee0e55856e0dcfd1b460c820 GIT binary patch literal 5502 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 RdHL@>3ll5jLL>L1{{yDWRfGTl literal 0 HcmV?d00001 diff --git a/doc/_img/xmr-stak-btn-active.png b/doc/_img/xmr-stak-btn-active.png new file mode 100644 index 0000000000000000000000000000000000000000..68520be91520b9e65257787575d0f733a7a2697d GIT binary patch literal 21021 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 AD*ylh literal 0 HcmV?d00001 diff --git a/doc/_img/xmr-stak-btn.png b/doc/_img/xmr-stak-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..0356f41aa3dc8eba1e6baac94e5e402631b8b86e GIT binary patch literal 14409 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 literal 0 HcmV?d00001 diff --git a/doc/_img/xmr-stak-cpu-connection.png b/doc/_img/xmr-stak-cpu-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..d07a8d0a93892e6be9ebc924af82f42571a3262e GIT binary patch literal 63870 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 literal 0 HcmV?d00001 diff --git a/doc/_img/xmr-stak-rx-btn.png b/doc/_img/xmr-stak-rx-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..39f0c87f7aedc73f2b5fadea89f8fd4b5816cc61 GIT binary patch literal 17501 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

    9c?Ruy)Pue-+tnKB=LQ^)Q0mEdR$ZE`rZu z|D}BQV(%^XWHN|`B(5ZxQQJxIZLyeJxX=FR$DC)rNcQ!TPy$_Q)#&EIe3Gb1_>`5u zXnybItE4+lzgXVG*-$ic!m;XQ-El_e#KsmMeAih8Nh5^N6Om=d@+b~N)j_y06|#zD zD4tkn9b$CAAhpZ)xx;wvm~X6im&H7YDt8c8|EibbR^uZEknZ3ONR9mvBoM?R0^#Rf z_5Lu?3eb+&?wMC_!WIZf)c#0nPZW_u@N5>Hi-krL7K zAd@1UadQE)Qg=JN;fymKr%PP9>d9oU3k!?qKLB_@hrecQ4vf|@pN7RgsubWcLt)eOV@A;s05u<=zthpPo8Oa(iXZDI!@7u2JZe%c|6s+vYuqZGj&eakJH|z5DQ0t&Om8)=5Jj;eonBwPq?*BXHnG{`y(>^0z1QnztQ& z*4Z-D!nj(>mnYVL?9@-jEmrrAo4!*mrHo=SzB<(3{Qi@VJ5z?7_3VwladyRBr|T+> zrt_#4A2!UY0{7tgjqf>jZ3M>n$LTWkX9sVbDD!#FNII$3uqDhNvr!_H81i~xqpkef zAm`Yc8B`)8Q>tLkazQRRmwegCx$761S@+T1D=1ZiZ_5-+Iu~!;0P!wEv9ky?U6Ods zz7arC_iH^65IRGlo`x89fkd+tMJbk#he&z$-ohb4c(iswHK?1vFQnk(xTHDDG7VM? zDJz~JV0_-B4~HOERR;4(?vwpVGJkRv$BgQfl62ChltHaw2;3dADMq3#EDN{Ih_wW~ zZ`NRE=4H`x)xzWP3U?iyC#g<$4vsz9?>%&S!{u{#0a!HaNHWo8l8&8tN-k@M&pmC~ z_jsv^Jn#SP+Zy7TPZIV~(IP-f-3@cc;_lx%dG*QM`Gy)1K~bRJI=%H-3lG{lH{Gwf zB1KDQ^;gLKKJUmdf6bN!0G!B+f{w*skgu}0zc5Z)**j`J90A}4-#yr0KCn2hibe3? z`Q=ad(-!wmib5H!>?BYse_Nst4 zxe9BmQXsq|CN)h5Yql_L7KTYu&(&8|CW#{9wx!2-&arcg?m08J>)C6P$!}ja{*sM* z*3LOL+MSK79h+EiWMXvp>3MJZ-U>xj@^3D>RX@&%p7G?`q z(o~9n=*cgx|2()@RIO!p)jj_vAE7-iBtn8F;8QD#w}s-0*E0bp0YGnJm?hxRrgL2d_*F(5AiOG zz%OpB;M_kwa{cKtt4jjladVCVIFozZ$LFbfztcwZ^B6Bfe7mq~IcLP>*r1S&UBM@DeL}YKSw-}KL#v`&S8UP=_!tP{a*GNkl ziyQWM`21p{bCFzh%gEvQ>W33c)id_P4HO6@9qZ3&?-jDxI-PiYv6G~Nl1u3q3=%VA zOqxr;WX0N?H0l!Oi1Qi3w4nrf%Ch}D3cO`3LbTG;T(q$Hweg6mLg`0X=3)W>CPa!zCu|i_ z;3h3AvSS%>$xgwPKp+Jw-; zI-nre1|1DOPxZ_HQ!p8$MjQiiF+S-xx51$`3 zD}<9@Q+nFsW0%h{m-xWM+K(Q&jO9i*&p+|{_5TcD$C=B2YsVAgIY}t()ONrYjlm&^ z=d=K4%20DwG*K8Z_5x|MyhigBlC+7aU_6!37dOkkx^n19`y|DCoQlZq$@%g5ir)UY zT|U)M9@FYP5eb*iIuNHF?avW*NM|-zLx?oI)Z5;1N9gKJr7vzeEI%haiqaIePmu*g z6O_=pO*v&dp?G8PhpFofRgntyUp@Eqn%QQ5{nNusqO}nOFJ5zOMnTXXv?!wlOT7DD zMEk0BOp%c!_j5n@g>!C9L_4E3__}yJo~sec$@+IeBb?#eJfOh-)#BhW)G1C~iNrR#MO+qYHrY~o&zRm)L^ zq{P?Z6^a7vK0WseC-pm5ANkWAYgDyg`XVya8=`ga#Dymp%{m(IvS#%Bf&OfoCya~C z? z);$|~x9mK>fZ^Wabu6jtHV-}0Ze_pU7x%``l%a2oKm7@#p93%~$Nzsz-t*Nnw`@PR z%%HuZ>xNHUGqP*_EQ_R`D+|9pzEZUiylC@wc?|V>w%yLvun=!O(;%Bwr+|Bb0m@q3^)gM5Y%o>j~OUY1lT{n=%3q0G?3ih8}v1fc3@YacfP4nx| z?>e~g(+8G?G!>CK-T6&(&lJY0o$Xm}RCRkWr`B`Ss|ge53Fe%92Dksfn8I2=l|Em~ zHqH#pB#D#nN-0IMjk*aixRD!U|7bUHuuv{n>#a+ zJTiIt-yXm1bQz*y#)cs6dxqIH)a$8gE+zN-;{6{naGtU#B1wX`jR^}Vd0+ha#p==h z|7G+3nICKFAta0z>J!L~i_Iwb=l$zwpjoyHWc{2|{OZ`bg}-(8M*0|DaR}9soaYqH ztiBfrI;d(t_gf9eE`AYIVg+rl>nW6iz_-|P;bRMuw?a>C|BI&ISHIsc-ZvD0KvPOX zLuO9uOklyK92b-YQw)#kABwlB57dw)A_XO>C|u3YA6od*P4#s)&)d6s-rkEZkfP$)5Ud+McjwA) z@~eqF_s{oUVJxJ8V0IIykm_KoLen6g!oNrXr4*a#hT45RPE_aBxiYza*2(65s@HJu zxg~&fT>|9ZiS;2108qm}`XOezp_Eg(`_Rc7j?J0-q|vWUPgRIx_qnV8`uLL`>5m%J zSED-vra_rPLY{2eQfnwqfenu&qQ)ScVe(FCkM$6rJHmf(r|wujwrG|ChyQYTQRrSu z{3GW^n2d3@Kg6}6;t6+B*cu-KfZ3ikgUH{^kRYFuNN*xUKp2Dl+>gsfV!ovqB@vbE z_4}kimgf@tG_rB)vQm4qy4C4;G#PP8vsI@qZj;+YLoS!n>-AFS;vg3!2gAZeY%(Ra z1=Zk9lf803ECTbO9E_3=}9Sp0|LEYMe?LNf$W(W`HSs0zxs-AU1UW7 zOyoI{n5b%l?s%R5a9MRD|M9@JCv&e$ZU<&vGkk2yDyiEPQ>_BWH4NVmf5r#?mHoeDFoNI{r#9U*x_L$K!Hc}$IbAd?5mHfA6Q#WKhThoEE&Aw1 zqyUfg!}tB>%KQFl>^Yw}eL2wV+Q3l_X495k0;YDpLx>WO9~l_LSZ^fZ4ki&@;z2e? z3|}l6s!v#AmfhD5Z#|iZ;O+x$_`?%cQL=W<;s1N<-9H>#bb7M;?yj_E(JBYeu^hNZ{a8QO}_Nrb4wx$JYdzp z+y?uitx#*;MlI_xF-n)!64jY?j!IAU+6N}q{>{E?#aoi9h1U!?c-pdqPh4_eTpT_E zk6Src&fT!s{EKfMTULkhF_#_k(5cyRqqTDmubp!kz>7B6C;Lt>{np_nZ@qtc3yyZEHl7^NHbq4Cd1+t6PXhK83XdAld{(+1V{>*NCQ9w)Ef@V)qa(a_1? z-TJM;#g$bfma(^bIuM z1o+bUWnVnAPF1Z=#7Uyi<$s7`N+cS7H+vvC}Hi~BWvd#IdG=;zTJzH zH(abr+bdQ~9C*vANPJLl^H=}rZO*6{lTRDq>k|%3Hj}1Q$s=YvOkNPtMi-irb$4EN0X*Thv z&6Ysj4WMOeaR+baX9?6vAhYFsyYz7Cxo2X@>-PR9k0#nG_%ln58@iH*x16gA!GE%> z$qsPl1An!;S8b*HCN}XtDr{9GQRA`ad<{J=>Q0H7tOe642iC5%c9fmrXvPhr!tZ=F z6=;zbABhJyB2iPJ(|40AVq-WxN`LcW+sCgQx~!BsEhZMcl=9|#*SvrCil?tQar4q6 z0M^YN8y#3QykNtDzumnE*8Q9> zuPL5$8OLZk50j!55azLN_(c4@ZDN^5Hg}BuvfL#T2wFQwK?%F~gcxyifWCvdp1`_p zEN-!Da&3~vA{jIf(W1q%Yrx?=+P)4gIRGMQ|Ky_h{EFejKRCN6U?Tvrr=w|d;0mzO zLn=UH4|{ysl98wU#2*qU2*of3nlZ%5YBqHJ?8(SG{?x(cAp3jaym=d10PH+7v~$PO zzud7@yhGV-i%-2~>&~@vj{sOZ_ZXUHe6fSYTgddfUP(-M5cO_=S=kcCYK`Ig-`>;g zCPNBRN@&vg;Ok$CqF?A@vSJbdOR6w<1p7=85HlW+(&Owxo&tbguV<1BHd6o!rc!ve zpGn!t$-am+CbrIqO@4SNd3fPES0OAVZLkL0*HYq~0S81;SU;P(K#bvjS6rM?%&2A3 zV(o5dO8olfA4ZkIzOzfYeo3TgdFb>8_=_PtF-eY`%ceOG@rM&--oq0s0PH`vxYz4( zw;nuOGwp7kf8U3XZaJ+(d~0v%Rgls(vv&`yzblr8qf9x&Y9bv`F&ssOv!RTK#f=Lt z2Ik1*GiO)ybXZ(2Μ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 B{iXl_ literal 0 HcmV?d00001 From fa9dbc0baa9971ff99a5fd22d5ed3cb42ff12d05 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 30 Nov 2019 21:09:57 +0100 Subject: [PATCH 55/62] version increase to 2.10.8 --- xmrstak/version.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index bbf5a84c8..51c4e4e63 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -20,7 +20,7 @@ #endif #define XMR_STAK_NAME "xmr-stak" -#define XMR_STAK_VERSION "2.10.7" +#define XMR_STAK_VERSION "2.10.8" #if defined(_WIN32) #define OS_TYPE "win" From e85c15c51d423901f29111571e239b3976357b15 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sat, 30 Nov 2019 21:12:52 +0100 Subject: [PATCH 56/62] remove monero support --- xmrstak/jconf.cpp | 1 - xmrstak/pools.tpl | 2 -- 2 files changed, 3 deletions(-) diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 0e29db83d..c50211d1e 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -127,7 +127,6 @@ xmrstak::coin_selection coins[] = { {"haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr}, {"lethean", {POW(cryptonight_r)}, {POW(cryptonight_r)}, nullptr}, {"masari", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, - {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "monero.miner.rocks:5551"}, {"qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, {"ryo", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, {"torque", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, diff --git a/xmrstak/pools.tpl b/xmrstak/pools.tpl index a7a1cba43..eb57a3f04 100644 --- a/xmrstak/pools.tpl +++ b/xmrstak/pools.tpl @@ -19,14 +19,12 @@ POOLCONF], /* * Currency to mine. Supported values: * - * aeon7 (use this for Aeon's new PoW) * bbscoin (automatic switch with block version 3 to cryptonight_v7) * bittube (uses cryptonight_bittube2 algorithm) * graft * haven (automatic switch with block version 3 to cryptonight_haven) * lethean * masari - * monero (use this to support Monero's Oct 2018 fork) * qrl - Quantum Resistant Ledger * ryo * turtlecoin From 52a93b2059952c8377388dc349a6599e61299f77 Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Sun, 1 Dec 2019 22:25:11 +0100 Subject: [PATCH 57/62] fix broken link --- doc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.md b/doc/README.md index fef37ddd3..f4daf19d4 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,7 +1,7 @@ - + From c052887a856ae890f187812553caa0b7ecf6767d Mon Sep 17 00:00:00 2001 From: psychocrypt Date: Mon, 2 Dec 2019 16:05:52 +0100 Subject: [PATCH 58/62] add youtube link --- doc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.md b/doc/README.md index f4daf19d4..7a1f13288 100644 --- a/doc/README.md +++ b/doc/README.md @@ -101,7 +101,7 @@ Miner has 2 ways of initial configuring: simple and advanced. The simple method ## Additional Guides and Feedback -[](https://www.youtube.com/playlist?list=PLAhUkom29iGMFoN8pk91JA-oqvxlmJ5H8) +[](https://www.youtube.com/c/xmrstak) ###### Video by Crypto Sewer To improve our support we created [Xmr-Stak forum](https://www.reddit.com/r/XmrStak). Check it out if you have a problem, or you are looking for most up to date config for your card and [guides](https://www.reddit.com/r/XmrStak/wiki/index). From 418b23a5b18761be56dfdb67860efc1ed57ae287 Mon Sep 17 00:00:00 2001 From: sdf0000 <86475174+sdf0000@users.noreply.github.com> Date: Fri, 25 Jun 2021 12:22:13 +0000 Subject: [PATCH 59/62] Add .circleci/config.yml --- .circleci/config.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..6f98693ad --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,13 @@ +# Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/2.0/configuration-reference +version: 2.1 +# Use a package of configuration called an orb. +orbs: + # Declare a dependency on the welcome-orb + welcome: circleci/welcome-orb@0.4.1 +# Orchestrate or schedule a set of jobs +workflows: + # Name the workflow "welcome" + welcome: + # Run the welcome/run job in its own container + jobs: + - welcome/run From bdc8bec059ff8eba3e0292d95ba69d9132895d33 Mon Sep 17 00:00:00 2001 From: sdf0000 <86475174+sdf0000@users.noreply.github.com> Date: Fri, 25 Jun 2021 12:33:52 +0000 Subject: [PATCH 60/62] Add .circleci/config.yml --- .circleci/config.yml | 46 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6f98693ad..6a532cb37 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,41 @@ -# Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/2.0/configuration-reference version: 2.1 -# Use a package of configuration called an orb. + orbs: - # Declare a dependency on the welcome-orb - welcome: circleci/welcome-orb@0.4.1 -# Orchestrate or schedule a set of jobs + # The python orb contains a set of prepackaged CircleCI configuration you can use repeatedly in your configuration files + # Orb commands and jobs help you with common scripting around a language/tool + # so you dont have to copy and paste it everywhere. + # See the orb documentation here: https://circleci.com/developer/orbs/orb/circleci/python + python: circleci/python@1.2 + workflows: - # Name the workflow "welcome" - welcome: - # Run the welcome/run job in its own container + sample: # This is the name of the workflow, feel free to change it to better match your workflow. + # Inside the workflow, you define the jobs you want to run. + # For more details on extending your workflow, see the configuration docs: https://circleci.com/docs/2.0/configuration-reference/#workflows jobs: - - welcome/run + - build-and-test + + +jobs: + build-and-test: # This is the name of the job, feel free to change it to better match what you're trying to do! + # These next lines defines a Docker executors: https://circleci.com/docs/2.0/executor-types/ + # You can specify an image from Dockerhub or use one of the convenience images from CircleCI's Developer Hub + # A list of available CircleCI Docker convenience images are available here: https://circleci.com/developer/images/image/cimg/python + # The executor is the environment in which the steps below will be executed - below will use a python 3.9 container + # Change the version below to your required version of python + docker: + - image: cimg/python:3.8 + # Checkout the code as the first step. This is a dedicated CircleCI step. + # The python orb's install-packages step will install the dependencies from a Pipfile via Pipenv by default. + # Here we're making sure we use just use the system-wide pip. By default it uses the project root's requirements.txt. + # Then run your tests! + # CircleCI will report the results back to your VCS provider. + steps: + - checkout + - python/install-packages: + pkg-manager: pip + # app-dir: ~/project/package-directory/ # If you're requirements.txt isn't in the root directory. + # pip-dependency-file: test-requirements.txt # if you have a different name for your requirements file, maybe one that combines your runtime and test requirements. + - run: + name: Run tests + # This assumes pytest is installed via the install-package step above + command: pytest From c4bba8dfbd77753a1ebf4bb81214805ea16d34db Mon Sep 17 00:00:00 2001 From: sdf0000 <86475174+sdf0000@users.noreply.github.com> Date: Fri, 25 Jun 2021 12:41:35 +0000 Subject: [PATCH 61/62] Add .circleci/config.yml --- .circleci/config.yml | 50 ++++++++++++-------------------------------- 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6a532cb37..bf47f5f07 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,41 +1,17 @@ -version: 2.1 - -orbs: - # The python orb contains a set of prepackaged CircleCI configuration you can use repeatedly in your configuration files - # Orb commands and jobs help you with common scripting around a language/tool - # so you dont have to copy and paste it everywhere. - # See the orb documentation here: https://circleci.com/developer/orbs/orb/circleci/python - python: circleci/python@1.2 - -workflows: - sample: # This is the name of the workflow, feel free to change it to better match your workflow. - # Inside the workflow, you define the jobs you want to run. - # For more details on extending your workflow, see the configuration docs: https://circleci.com/docs/2.0/configuration-reference/#workflows - jobs: - - build-and-test - - + +version: 2 jobs: - build-and-test: # This is the name of the job, feel free to change it to better match what you're trying to do! - # These next lines defines a Docker executors: https://circleci.com/docs/2.0/executor-types/ - # You can specify an image from Dockerhub or use one of the convenience images from CircleCI's Developer Hub - # A list of available CircleCI Docker convenience images are available here: https://circleci.com/developer/images/image/cimg/python - # The executor is the environment in which the steps below will be executed - below will use a python 3.9 container - # Change the version below to your required version of python - docker: - - image: cimg/python:3.8 - # Checkout the code as the first step. This is a dedicated CircleCI step. - # The python orb's install-packages step will install the dependencies from a Pipfile via Pipenv by default. - # Here we're making sure we use just use the system-wide pip. By default it uses the project root's requirements.txt. - # Then run your tests! - # CircleCI will report the results back to your VCS provider. + build: + machine: true + working_directory: /home/circleci/project + steps: - checkout - - python/install-packages: - pkg-manager: pip - # app-dir: ~/project/package-directory/ # If you're requirements.txt isn't in the root directory. - # pip-dependency-file: test-requirements.txt # if you have a different name for your requirements file, maybe one that combines your runtime and test requirements. + + - run: + name: Build the docker image + command: docker build -t xmr-stak:$CIRCLE_BRANCH /home/circleci/project + - run: - name: Run tests - # This assumes pytest is installed via the install-package step above - command: pytest + name: Run a benchmark with Monero V8 + command: docker run --rm -t xmr-stak:$CIRCLE_BRANCH /usr/local/bin/xmr-benchmark.sh \ No newline at end of file From 737f7a8ad4bf5e3aac8498bc02e1156ebd5161c9 Mon Sep 17 00:00:00 2001 From: sdf0000 <86475174+sdf0000@users.noreply.github.com> Date: Fri, 25 Jun 2021 12:49:31 +0000 Subject: [PATCH 62/62] Add .circleci/config.yml --- .circleci/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bf47f5f07..2349ab411 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,3 @@ - version: 2 jobs: build:

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%0DZs zFu!C(vyw?&C6MJPQA|h#|E3&#A)<%gCxi8TeI2jEgN}bo`;CmdYsmY832gSYJ?z9nl zN>hKYSY`g&2eCopD^x}kX|>LG^9GaoZt4vST9^{ZaD5q$s07?pTA$z zT4LLcm*a2b#{*Js|Bm*@A@pF37^S}$sX|9JtCRyX#iOwYZ2Av1x}9RwP%sZ)uRBQ=7Iwy@8-h9jFMoBx(o5yi4WUv*Y%|vV zOhI=0XH2kx!OimLewS5CgaacWGN4!weOQR?xXwjd#Dju@%lf?O%ChM5X*fa+r20B( zZ!tF`I{tp(|CgBF5b-_lYp>NCl#aViZ+96)Sa3}0j6r6~nZ5Zlg74TC_*^kh!{*-+ z7TD7Q+i5@;+Px~(iQI1N)BkO@mmOX#z}Rsa>0aq_J8wNE%Xt2Nm>ih#Zf;>iv8*FZ zAVBiECzw4-=vL|STot1%NGxUuHj=7H7LSC`g5TDc`mP z*&ERRhiCaJ6-;xs@3T5NiG`%$dAkzwAl2{s7b_@wz?Q%mE}qj#^Ts*iZ!24%n9NHuzJ~?-k`A2)UZ5?b_(P1VI+Im)5B!k-8zBiS!%1th#!{hgN)Nl znX5wOY9{~lRW=9zv(fC^l5T>Ujg%DEyUjkbm1AG^!J-!rW0M7a%5TtQP*2 z`Zy0pkO(a(-MG33_6rwfpehyI$tvKp8RhixRN5*O8RP|}Oug~xN+jd=KM{Y6`KPSU zMLEw8Tr@%&lweDC9tj2hwY7$Imss_(=066wSQYZu0xsuc2mJ!d3Glja*OIPRHSr}0 zt&Rh*CTE1>Yi%3b=`zYGP@n`OuigXga4H;L_$)7j38NgUVwL$Yt@B(F$z;u`RcPDF z+>(aqxN5Fbg?OR`7?2Y$zwqST8ZLMipp!!WlQ6zz2RamNwt|7iA%dX%pKl0$InG&- z%Zzou&K7f5Y;09sOkFN4YjF9!1lF5wu87Za$}doHeD zy2E<&=J`yU-DE0<(7Ki7`0XoP7pByLaa#uToYr%cWg)qiL#InGlOU3j$SwCrxPl|; z%G-fRN2Cy@Xu&k1ooi?N+va))=B$e>cEKyPj+uwu~^+PRy7M{}XW`x4?hNVhDl6rKFsHbSVnFU!2Zodb&-{5QT2? zdKaE6e$5H~bjAmy-P?paqPm8~i9?NsCd`CjPy_5X+1O4LZ_O zOX=rxm8(^6*1)A{I2~bE$7|%-ho?cK{)lkSqflxOfN30OFSixOU6oa4!fuVqZokD< z?6x-6d>m3;#g~;WsU7?xl9_~{J0ryjQ`r|{Y90o9J|$#$bKX)QoGh%;rt|V#OCPE+ zNfRM6M}%+}xJFXi3Qtb9Qu8_IAO3qt23>Dyew^0fR86sK(ws5FHUpG3nwN0oPKL>Q z`RL4kPtnjap|KoYcR1xY9#<{HxT1m+Ak6jW(A*!3t-LSNu6uBNtG`=qTjPj?je`S& z5x!hk@~!YRSICY+1ck`ouL)3DFK+4h;Gv?-2r*69o~b5gPU__)6SPSvI?a4@J@h_J zh3e9Y$#*S;m*Gw`%xog+1sgOFb9S%V zYVeKe0vA-B5+`JSPjw}K%eZkpvu=2T`1Sd3jv$bA_(?Iq`nStVz|DO#B3vdT|AZ5V z<4Wdu-4Z%y_mON$?_O%my&8gr{Dk(Z=1LSybQWI%|DS zf*7>*_MMjbV_I6I;)B{I>lYh$OF6g?K`uWp_uC2G?yeK9-}g}b4EZj`a2euoM+1F# zx_?-ZT5){nZ|g8csMu&AOub%oZGgX`M3hqxOEJ49@G$(^!(iQZtyG45 z9h}bk96tYpAfJ1--{gSq{5`(*F;%X^)82orFZP*2uFYhVqb7TW{hKt=eJFN1?d=T} z6iAa&s(H7~e^$=3{lH&I;XF`4%U0OSaqB^CTG&^PCG(%498@#4ps;rtVWf6(jez>$ zIp3@GLl^I{1Q7^y02Z#0GD&k0TV@d<|9bXq~nM3fvOa^37#FASp_;30KE%XN?eqLFT2bAx>)x^4(qJ^5f)MU{;Z6$3bJT3^+fS#(%^pAUBq?;MOME+~Z&Tn`KYUd~gf{k<3qPXV= zmq6`)rcCtYZhS##KaiLi*9wuK6F0nwJgcp!oO;4{+pLEVE@wvviBp~h+ z^i)&hnH{5frE7k!HP`e9#Lrj`7dZ{QCgiJzCf6nnwwS#BM22zi+a|FJyz(r!d5~)aQ)w7aMMrQ%lIBO2}6WFsqUuMH|Jb4a>=>Pm)NCee7r%+wl$-dMHi_vdLBl>?NOI$D+v1P5D;f!UqsAXp4~}Lk7Vid6 zS#=9aNX12w60&PEykwE4fk-R zjJ0DX|6ahS0iATbGl90z#&p-=?d{xH8_t97E2SQb{7k{6-PyJQ%%n%YCL&GQ{zF|= zbuNo5#YFuT73x4q9pi`3C|zFQU_GE7Mm(4eJbEY)h_>g0AE!h8(H?N$kX;~Tk^a37 zDmW6v*RUBet};kT3Nn37NBe%`t; zvL7PwB%#1}s3QDihU$8iAmc^rb`<%a+H?IwCItb?6Zkz&4^y;X#U;v6ykF?lUk~%} zRHip^5B(@zv@;qpnTe<{Mc8RCePTt3;0-6|~d*)3bTnkF0%B z^rG}Qc&K)H3* zTGI)rQr*el)`f*UM^$ClCDxA>5dYTu9RzX%@&t&nLvVE*r#~m^=vqRk8~VkxvN<&D zLo%n~w}jAIt8swv?SurPC9hW8H)JsFmJI+)jICEQQ+N=VT{&Y+K$~?ZM!Eiu<1Ox1 zoP|r=8E@``q#K?-jLYMljTIVPois>=J?=_fZWXxxWA1eOl9Atgn{zMu(T^rjeA3c{ z=d>^f-(l%cR}`_yWN88B-BIm; zg=nvd+t(|01#1$`SXFWR*(c8*bjXAC2|ba8Ye2f}F_^|rE0wf8py4;UzuE@BRs_Vu zt{M3|RH|`&BB^G8jS^g+^f&6tyT+Jm!Q>DWq8q#rs=e!kqkFqrAW=7{*?*$xOKmX4O)$xU4Kpy_9envw@5E(F5 zlg)O{sbeCKfH%N-i~($SnF}YZAW52~j<})crcex6XCdUsfgW1&5MoJ$#5U<`$zI6w zTI0rx_vM!J3(637&_+#*N^Hx{l64zHZ*Dd%FQ=!kE)Un7kMXdOgyg~|^ud?$Ia*!k zR;@QwS_JI*kw}`4anx)Wp=atBl2u8J{t6+<7=HQ0E2()OP?#LUUqM-)OFJ;PbbC0I z>-6O3-$Ulg2Ja?+KbehBT%ccr*2yz)5~bM$E@)8t5D^h1F#8AsF$9SQ=aA>41yaR)k&C8Xf)zv} z&yN$AmgfaWy)vE?bOSTf`^*}D0VyQe!_HGiD1wYaB}clgLURx|!or>2oTn+~gY-cn z+5ZcX!v6P@7aH=wsE{LQk4xk zQgI>5Y{LY|vi({dcDCaYMVP7&O4MTQ&H4drTO8wd@g77GG$5fw$>dk{D}@sNMNiPxHkIa1#D`gDI_th zaQa>N=8jc4QdN9b29knGk%Zt&BZn*M~#KXpL! zLqJm%)e$*poB~oPge;g^#Oxy&u^| zm>eqbpjZ#l73pR6ckN8s2wHn*RZ zvw4tk)(CHt#)by=NQlDfMF!2A(&%qbWLQ|hF#_Oue9ZIMDvV}Q``(S{nr%4w^!dO} z)2Inyl0JHMosE89Uf**7uJ6h=z*xc$X|GbWFCo#K@3bE~N6;@yRTul{X|n8QF`$7= zJ(KlNy&^edr1P3f(BNo= zwFFu+ua$;piNt-xNc>>Q3MCBLAj6^Z9P0_6ve_V-ft4#D~>6-?$O+D$Y*5u^3i>@6#Ay?t?dS8X2`$ZSEKp>%B*UN()$q&*wS z`3f1LeJ8wEmp+b&e1~Lvc%ir45k^(wrcVb2yv4@E{XzL$Z4uWFr}Ktf##_3=3EQYA zDLv-s8uIy}7Z%MUPo-A=qwcxI#xvBSd6v9~nbF~Ds^eaxpRX2B`slV7c$&eIK zSTYvk3gm035Um~I39lA#>SJUpWW`&)Yi4NY{jt7@{vw{DaY3daIe^YjLt%(Q(8 zwexy%UbExYo<$yHX`uxZ{=S2+%H#a-C*pbCLgZkyOH(6EC z7H7of1M_%LV*Xgt&9B_gh{UVD0*RitmrG8VJQ>+DMf(=l9nbBNJCpdPzbdSs%s1%= z#4ssw&3_Q*4+%pkX)U`&Xho?!e9OlBdD}CCa8K$1ovv5Y16& z=TtCuW(w+ev#D^y*qS0pkS;r3s?ta<8QL;+{9-df3`BHg{&=B};4xdXXsggI2sp2! zV8q6C=0kqpnyUR4(p3T4J=M{R1WmS;e-vo?ZM!n*jQQd- z)iVh*w1E5;l1sXr-}1=M z1<$Arcql}W!NDZ>2EFL%N{Ywaqu%qH*d$`I^XG|RW4@N1dM+YKpa{ut^ZX3xnw3r(xr`wW7X7K#6G1r-K3gfJg>VxKJPsBT|2c#wB_VZuDd(eXAinJ z#^42ANs?vN^4b9_QM+V7K}W8AN`r&#;^CIi=zRMliwL5B|Nq}n#24- zdD;Z+Qf7oT6>DJgu}1MFJy(ApRL~r4pJDeUabSo}Ku>=N6;^_vBiWPJhb)txz%A^W zV}56cg75v;d*9n6zhCo79rpMCgG$Ue+(b(^|T2(fgn|zhy zalSc`QK%U@juBDAn07%RMmxA=7tHE?K|gRNi+CgDL||c^7s4@j z_wAN_nY}g3y@hD5RS3Rn-Gu57GU8MpPfqoNZj{|oB=6_Lc{57Hw_r^>nP!r1qh!mu zRlmD$tI5m`J@izu=x8t)kZXV6e93r){)GEDbd))Nc>A7k`rVPd<_9r3C2AspEykzaOpV4X^VwJxNk@ZYHJA=0 zYmN5OW!U>b8zw{r4fzl+5^)0k;DI;E!&Z&ueC|NRSN0T@==w@wKb;B{(R1pu*V>c0 zJ;VWoGXf+G^f{Y9CD$I@u`1_(8mqTILfdJiMhuP7dAjO~n?9Iu6sI0kIyyd1@DDR2 zCiI?YFt_W>cV@}9k-z`qPZfbRN>}A_7H`P%nuwB@svn@jnO7pHIe&J9wm&`r2KY*! z4+aG?S}O|g%@#-BN1t_sdd}++PL`hN85LP)?F&4*F95)V3vc7gqkdSJ;r4rSg|%#W-SLBF@v7VMIAx4!{g`rFvwV#u)wp?+|sSXuPFE zYjB>GmrUg3_bw`o^ds|r zO`aRN*gve!EFMgZ_AIDw>!Kc}ELpt2UaMl1C`s4(oEHd^N#^HLHi`gK))@glOb8FVcX8m}_ z$ob7=K#v$g$NJdUhlAuvC7O5+f#mv|e7lEv&l6r7T^qx*wC=7auDz}-XC;jV&2VICNa9LEmkjuxs{gD(u_Y}Ps^2S#4yLpP?rMCO!Gk23a&&3wI^Bbtt2qP@g z89#hNx#Whj?D>5SxeWfFKUY}`EHv7m+;%1Ca%St3JMw|u_9b@`J-%4@|fKHECq#aIl@0JX%Dk0x7>uHUzy zVcH&lJvRj+_T5#vMMr_dtLvrh4$TtqZa!B;w8S_@cwu=oK_u?A&F37&sCjeE0nEGKGv!fV#67tIw(_dwvMNFnAw=-bLUYRZdnynQtk(Cvx= zyJ;60t|-dL6}@6vj=_83cH$a_^@|c|*vznV`z0i*<{QsAAWwo?v$QEwT>i@KI4K{0 z{@^&!$X72%)P*W>>b8Y^z+cP>VIrBZAy-Uo}$G$-YTGZc(tEur3Ax(gz zo84x>L2$;a%a_}gr={r;!Q~nqhW%`7v{y(NUfJ#HnGJKuox+3JRTYK-lY>LW@jS!Y zlQS=LXN)kl!DJ?GxZpxK{`29K*;Et}j0#7C*IJKQq*+0e%Sq%CG=~onRR|fpnAwl> z(>+sS67i3~S5;9lp|IuewzGeE8dol`fBH2$(!P22qn!Rn`I~$Wzc%;c%|!OB$xfJF zC9%*Siiq8&Hl{{{#>9fumT;=budvZ*B6FWZu0=RE%S)%TJbIcRTUr{MpKnv&WE*XV z4nNK-#K98x_P$uZCOpr%ufJ{7MG*WrD=#NNW@zKPjPLR`4}Yr==YRqBP^Um)Av1l6 zTgfHeuzq|@IqkILM^8C(b0gJ1IlaHjKYpqR56-cwqqCixG1nW2R zn?-78s2W4cMX;8dNLohDL~U-tN|6$6%@e6YfiF^w$_@1yp~ADyW4wy6pELI)gDGpB zCe)#CmOa=8j|AC_+PppnQX*O03VE3QGWn0kMzt!pp>mkdppIG9(a z$5y_fjOV+Ql&gye#6v4<;n16|Z(>+r1LM4jPHaZ^0CcWH{^^;^Fm*m*PX{F2VDnzOx{<@28 zrEjuLExrPog@B72%x%Cp?e0bq9PZIro}vH57EmKYj@QTJ7lG zY3<&L8=>Jq_25J2DS!JOf){GWH(;Y`e214mwQc|Sy4F$Om~^me7rK#%k2>ESxDSzfqc}P^>>A$94awZ zYb+Qri10H~wRYsuTh$EZB_^RnC9Wvvi{1#P5-OW9w}X|aOO`$1kOkH{OQtciEuzal*&@JDK3$UAa-vmC1;N32o^!pK*yei~#sv4-VSce^^iT1e zt#TTr!rUjw9^HsO%DS!(yaZGzisUF6MR5bxoL4P+F9ZRbFT6awt}?mV&4b$y;0osb z^A=4ICIYl&X;c`JNZt=_F*_wvGh%Q@i_Mj@Ei^ZdX;~AwK*I`6M115SVXjnmIDa>- z$<5;4Hd%aoy;KQo)9cOMQ~Mrwm=W9?WI&rZ3~+16*j$GuN!1W)B4wffB&zbb-n&_4 z#D{4vf(fm_qoRr5W}dBVkD3Jyy1R3Nq_iOtM`b~!(rCkbZ)h6a}l)blf6K~)^% zFe6^3iP@7lWG`kg60yoGuC0jfRLGy$@sdQX;1sNDGy}iJ6q{JC@PJs@KI5%^*Zoi@ zZ~|eAFbLRa$gYxgQy`?^iL&|vaS|(}GJ*fs5^OYV^shRbAiOY0eeF=&e0{%O-ZfIH z8g)Lg8d%~0W2~z0mT9O}4m4pzz~B?#Y7(9_SMJ;lDT;cCeHNQ_SAMNL12BlUxO&)=||H<(NuH=+l zN;ksD)GuS2_7H9TJBh*(DvjDq7AA=pb%-QvbB#`$Z0*A(X>vA&1tjX?viz>Ul0UkO zAx&Wep2`jlnt4&A%Bw)WO#I5POy26VR8lep+fVmdtvJLIzVteAK+}f|o8l)-xXBs2)3V?5wzHDZReO9n+Me3+HuZQh$~QDZL1b`>aB@W1jZ0J< z;vpNCN5+`@ihKRU5}DE8ckm8aIhZ`51c{=Psw+`U*=U6=?g`#qh8p7;ejeMDfLq|= z9xtBDtXG@$bFpjxY?GD$bnM^o z2_!K3l+az$)wxT@(-Jt~9h@;m@!aXLQWS^GwCZ+7<#AIiW8Ara%t4Iwb_L8sO29(q zic4d^!9kJ3*MzK`bV1vhow_4xIgp0Mn(F!a%YM6qhVB-3N- zm&xj#tvbFi>vY;@fsQlv5V=HgL@B}TNGE)lTf1*MZOFJflg-;`>Z!q0J`DAY?k~-- z#D1{9wf*#%m*)6H)a=WB^7d;&tbzpw&u2dxP23 zGA3z)$8Agt+<8;&dKK)Yur~g5AGh)LK8@VGtY?zV!~HF8gyB%GkSW=Jf*2?~Mg$w0 zX4lTB>4#HAo=}$ofk{tL&NzatYQ=Uj^-V&yw{_TxzQrwXEVXl7W6r!ve-SC}sY;14 zHO&oubue`whndh zMV~h0Hrm`&!aQqkYg!mqzcOtkvJ}W_vAhmhEqJ;;;GOcFp`w-?8d0)~rBi!~^F3Cf zf4fT(5*dhe56|E|j+JZXy`q4taj`d&FA`E*Hi_6sZnn>8-7-mCg<+S*YHn4Ce9-?` z;WZ|l_{y4_X<(%}XjUv4LYKN`-G)Oc8B&LnugxJNtEjCkU3_D?N+PPHrrckA6Yv4H zv_M+!gPU6^NFow?G&H8q7HbXrM8IpHI2nr6h@pJA!t60;t` zNpoi#>~*aA>pa=j^)x=+y#{xe*YU9_`+m8OPma54kYO5ksf!tHFvcCVzcoimynAO` z3=Vy?k5l@?#;RidskDTeflAR73xSyI zCpPCZ%G8uKzvBYb?28OUqD zi#0QL8+{7ZgtLbmi+F^% zs#BY`a$D8%^QT%yTeCAp+#((f1Qw4Zqi@4ZWRWOhF7El?_LV4OXP;1-sKd9Tk{43R zq;nC@?vyv9X_Cy~I zE5uIKDljm}X(*OclTx**@9gYu>OPr5&=ib}i%ShENy&(}g_xXeU?b_iiW^nR%BLl( z{&9hZS!CzL4ddnb{JB7=k0^$s-tOY&vbJ>Cy7y^n<{6vhJ)%4&!R3^S`JCLAUa*`! zzfMdjv5&$Ksop~yVJ|yHRx zg{qv?lJMRKY2PwwDVM^S#;3-mIX5O%#faGDmOJ8Ux%gd5lcF;U$DlGDy`TwuIul$N*`J&B@l90dzcMI-=1_lX( z1b5fq7Ti4qcZc9ka35?K2<~pdgS*4P00VDs?(c7S@5}2?wOUqp*Qz?F>g;p&mdm#M zd-;hz`-hKh26!I$=S2`_m0pWI!gsmJc*f25(FBpK z`AD%9L^#0UuHAI%NQnS%^o?R(7ONwYdhZ3 zh8YD>sM|xzq&X_Wdi6Cg!|*W`>9oHdD07FA62T4Al(3j3d`^c-&1RjPMmuyS+(f{l1y5{d*xz zd8~2J4>vc-ul+T;S@bCa)sZ2nj$l>GN;3S z3~@yJ*wVs|Jch_3HZ%&E5-_}B7E=|D$Kr3@{!WUlU#pJLz6-M7ytSEByn?xg2?mCa zrFqX~(3GseBCwt&Mq!ZPlt9z=9ul6J2mDRm{p%yY5FG)$lBV9Gm7Mj}VQMp>tCHjU#=1v|M#AWGM&h zW1H<(+G6RBPTb=Y?Kl_Pjm{qPaPsz2W~)&)6_1d%;^<+CM$4DntFSXsEfw&t8}%xB9iv zK31DI0eX`5JnG{)8!eEu0_ytuNqUyHNUl5VP{iQUTbjob9$zrZ+^i;S5zQFe2iC7B zFDd_KSf5T37w1nvb=V^-_tD#SQa)EOp9JL+TiP&v}lfMs3i1LD8-p z^IZ9Jc7HS_MxNP0S5kLY6U{FFQjC1F6CGtESTq$H>>74ngO#&i4&`0v2rsi7J8ShnKkn>{^#q{G8)HQs=%k{DZfH7 zDCHq)YpOk%3HcYYEpUuj%fTsIQUO;c8jWFG@_EP+8BKhX8{tIm_9caQZ`AHhD;A9? z78u=p>`(OC6{cjI^Szat#p5X63trY0Ikpsuw+FZ;0|nX5s)s~`Yo;{Ylm$clZn@(O zrTM%`_-=Q;+F|i)TJ8-e3j;&th7u)}>_C2gV5723D6`-P&@GzuI!MW@!+mRNbwoTvx709$X=pEXn3}E{V(5QkczLutjdfS~0pvlTEQ^bIf)X^S zmM!c8>$J=3EjANzS|(vut(M0I1;5l(qt=C{|ELsu2~;%$PO}hCe7UOVmQ-wYWc0 z|8+7|;P3bwV&GnL5`Q#6`{S*+3r6+&hd{s<=!|7*VzFxEkgIbb@G(Qj^{+X3VA93~ znC)zqYs28@5bF}lJzArLe)#(cyisfNiRdxAtL6Oud}#YvgP>N;z&T|!M<76%W=V=! zSzF%QhYJFPn+-xte0E%)1_E^A5$yS&_62CBhpQQ8lLbCD8V^kbzDX)oR(K;e$uv>Y z)fYwh$2@X|z{hmy2-!2Y5r1O7spj-N@AM30H=NG>t1LA`h1M21J1Mz*vI$P3@o^c7rq%Iq~9Ut48ZFo=CNJ(A?mSK$@uejZqr3N#l97uhq zi&HkQ!tnK3V9K54mb2so(JF-9Ss>G+&kJ-?jB81$m!U7TlF8EeuDXdqyd!)2gQCUz zm!D5aqr9(Y{Dp3(4<^pE3eN}EOE+LE3SpXR`RcSpuy{S!dTEi7FZsj4Zy? z+WKdUwr97@H!g^>W4R1|A93}=JsYTV@>FgCZB z#;961=_2$_TiQWN93tICF{*95cQ`)5`Z$`zsd186S{5WVr+|;ec<|65B=S!K{WW|G z+njZYDT!%II&I1dVeS>3e%AX3phKpSg!psrUw5rGLnPsLX7P{t{^|%#8g39qL>F*rTsK-EYKX{FlaEexg&&8K%tU zkG!+g)7+|dP)nVR+)^=%T(h^yH6ndaO}j{XAT^YJ%>(pEw(&V8+!>E55TJtP=RK2t zATDe}pyY!*Y<{J^Q#q?Ynu3wpQdZf0n^+gZbOSDlT-{6h6ee&m3>S{>O_{_^V#G_J zEfP}wMTfLO!=eln2#%`J^u4zopa5OZJ~BM}*UP(i{87Jg+-tO5`KMC*IA@9cwxSKHNngErXUQK4oK0Lc;2jw}GZ^0uO2;fD zm{nXt96?6kE1i&+eR&5O6=;XUa{gKEBPdh0ch>)s&88A{!Y7g7=F-FDPfF|U*U|LB zbZJ(LRPfH%yDg(cE55!}ultV@=gPxYR_$@M5fM}GA>)Qhmv(b2e% zocAkp;ln*bA*Txn2a$1P4eiNkXNTa+_OpYd^E51un5qn-Ju__fy}Nuqx$Ktx)^44j z*Gpv;MCq*u%lhw+%(E)Aa)#ULz3VeiiWycb1@$a7RUO>6+}Zjlg$pd$dw&>n^YsZI zl1y7qyx$-Tk6|UnBiubc>)j5q(o+Gc^|75CEIeikZ*X&?bJ(tqF_my-sCYjdt!?Za z%ao!xaA8v^mAV6^f?DEz_}AeCH`{EzBMuL3RX;D&A+TE8gxViRmFWls=Fm%ZxfFZ!%g-#V2&%i4`x8Hb+&u;%UCwAOW0IH_$91?XI{ zA0YSB?O0a~R1%gr$z6aaO_vS1j3lC;{WeJ1eH4Iw+-kg$dlBefL2tdbDm+5saeISi z7>HN*mz*ZA@vR;|ZXRW>R2-br&?Tsm^b-8E%|uKBPUQ22e!DZ4Y^N6)&yDS_oNZyc z6{r!*OK#WL(ZRn8d(KmCAXuR=+uIyCOlT=9zlXrMd<=GW$My5u!<0rPzm`&!v~F(^ z!-HM}vENlaqxJPBDquuBWnJ~W2R2lbCd^)LoZ#sgXS5U--1I&LgiRKu(al9036S*8aI=Ab;m@| za>Ea&Uxg9fxh`h{z-SXeZVE?&*%QX|cG!YeZ{l4tYVD;ZhaVeEXD^W*Z)r*~+@0pj z4A;}tnECxKr%WznnA~Wr(n+}tswS?y+-9FBh~5^=^z#KgOTxqvHB;C>FtjKGl3!|T z?5tlFlv4?UC9@%SJDHZF*ljn5QE)SesXOd)zEz1wi_VR-D)rSjllmaD4pNC$jy&2z zb)pr&PL$BW-ZZI80wgD5C{eo`h1=uXw+wD_4)JVX-g+Wi^?OOBI%&P{HYB%t$>FAZ zR?(rKbR+Yo@(6QBFuzJs>4jGgC8mDpvX+nr9)Ntrs8h1yGxAZp3%R9W13ML^DLjR+ z`ttd1pVMJ2l@Nq+VMBAYT9N!eq<8Jgi{25E?JIU|hfM8m)Y|5npT4MnsQ%;PVeILb zY8b|BvR)7eZ-%nrQw6erP*|xs$9zaMNXBp~VVQE>&BLwYf9)~C15g)kQbe)RqB~Z~ zrCo)-b*POatkf4z$|`gj46kjuViCQ&-klw(;NhOFeC#(|Tk7(fBcCNns#MLLsPi<1 z$q^mus3@JXbI$>(2J2kIrd{mmG`eJL#G934>|F@0qW9sL+4s?_dX2}+qj1PjYw*=M zCoW}%FAWj&`Ae^vqGV}LvD=0IZaLf!WBrO!aS(_W%#=ERAVnNb2&!#wH1v0gQQElu zs7jX^T}4=3Qm$K4s0C|X8P0faMA+Lozma4qn(?l%>H3Edx1?sQHOEF-iuHmGsb?#H zZ~p!zBvL&FD&=rXoi5_^@^%((x4HQz9d%V#U(h&g66178_|-d1bfF!Q}+X zeM1=tkO0@@^o@_--gRb}r`Q$^4gs4-W`Yfy<#Xk)@P0sRo?gh4;U(4tkgjr!;~X$D zZD|K8o)t!D(fY@c`iv0ae8AYlu_zm8^<&BwMWakJgSFZO+@oOptmdSE5Kb00n=OJL z^+f{k1wD}%UQgb`Um-MWU0$hl*-aTS@A9dPlIuth?aHhTBgNEZ7B4X!0kcEs4X*(@ zAA+Py#L;TP@J}?np1YyBRAql0Zgi-(cQxKi{`qZsD55q2YyDUs>U?%vLGprg z9tY7f4uqx^8H)Z&N!#YsOHi+!g`kKtOjLb@iAPYS3#v**P*gNi&D>Yp~Ji-7@qR zec#A(W+cBP5XN(|P&3tQaF9CmVr!w`@O%85NC22WN~pLjrpg-m01MQ~iTIgQe=71G z+>-daK)Ow#vCa0KtN6lA@aNw{#$(j%C}d1)xDn{Ge>`J^q|X|M4arnauO*d58^p+2 z@3++0TlHZp<2Y0Ni#~i>oGBFw%7ijBQpO1as#|ltUo*r~nd-Bf|0dT5U!iq# z+)(CX8zSq*nWU#+?8l)D{Mw3Ip~>q-gv~{r56bx!J35l%eA%7svbfYtC{xs*Ki{}& z=?^KmDe8LVL9DID4#tuCn9eJJ#moilY0WUA>1-P4kp39?m6=*q@6+%&njz_kJqcL# zh)UMtilmP+aQaPrLqcjQ_pz0Um90@p$v95pRKIBG$4Hu|{sq2Xm@;JC2n!b35QAv{Gs>rik)0&v?DL&4=75^)pwv%_Z2NTVA_b_`cNwsD z3fE-6LK5A&F8F7(p=K~m8tET#x-o@N*!xW7V){glQuH^{rF9!l)X_&CE?#RY1*XU* zLSt~BqlsZN2BnaO-l-zNAET9GP3<{l67Y?JzChh!pN&`h!=Z3o*3x0sN|8?b1 zl42%k0C;^&TcE)x6F$gw-g%!Fc=HAw)4}@W-b4KXS;Qiv!Uj6+$q2|g3VBC1PsdRU z)36S%LY1fBCB5!P`>gZweGFW-j`S9B`2D2uQ2T0L3W@=Hb$K$?=w@z!Zm7cfdEezn zA<&9_POw*#3NMYPsZ)}yQhlFk5MX7SqZV2H?X%WQrgNlLa4*4(@WBs5=g{dri$LwU zh}f=-{PGoSoC4O8cx^nrWhje?Bmt9Lc!dD$JCa2bgYr!cNkg)a>V*kon82}Eg+N7>b=4t|4n|+^;Q|CH{W%rSB!6$ z*Y)9V?m-Q0w-QH^`oDldP87<}-7MVHXwCD@^YOh2ito!WXJP4UJ+B=G!wW!8`$YSV z+`04&LP4!5Ric!7o$pe^3siDaer}}Jr@Kue=EY~svV26XA(Fn>-nk7aW1N95R<(cBhw@Sfa7P(KKD8%ZRZ3z@8x_9EJ!vIw7 z0^R#)!+%~D0!XORZ0-w(HZUr)8rNHn0{QCb+GabZ1_KpokFr2tBW_i$$O&MrbYCX2|)`T7Kk>BH@DjZkPa;DAIxrAA)JPRD$K%zsvA z)pvL%4&%0&tZ(ehq!GA0ZA6?@ve=D_iRB~*a~D!)!FDQ+k*=M&!VgQ%_A~dHu54^N zkCuMWmf4nV-l7`;yn!pOu(aXlkX_EJMIpOw-35r@PL}Yt9Y5lB-<16AyIO#da#l$! z&M5%~cZ)P%Wf)T=b#XAzbYtHzQfH<}LCCCpE|{Rymx;c|oM}9kMn{O$Xm#l&wTQ(> z?bXv*0*E|Q9e_`pN=%VDyHHDRW0kXOS55PiRysOrq4pt?-9N3(goxyc<*M;oFd64M zrrjds@edn0vekGpS?=Vj7I#`ea>9}kxcF6@@86x;C*pAwzJ0vh!hGw#5~$I4wLfq3 z>Cu;bEFE-pG@!5o4viK4ksZ>+crfjsUx><9Ct@zsVs*xVJGspE9tk=?n!+!S7u(>^ z28aJ;vtJ*rX)<#{q6J!{`NXPDe92|qGh;TN0RB32a3ZXKDS@VS$CrvO`U8Hs0$1Ml(JS77w7H2+9Ej6k`;E9cZ|r1BlmXN{asZTQ1_@?%?Wii zj_wMz;rWgWb^pC~z5rb|%VJPkRJBH@7=Jn6V;|!woU~bXEGU1>^1|f9~rwCsmoL zAF>dd|Hbrzw7ot|S6J^T2xT=MT}QQ7=ph%%jI%lV^IG{4A9Yp)J$9`shd~9finC`m zI^Wv!ea_c>%)_UBVW3%gg>RDRF>sjI01lM*c&LU0!vgXG9atj-0Z(I{V18vd!4 zC*^X$kI|E_g58;wa*Sm+c|ZDVQ(JL#8f%eusT{ZQo>H46?pSO z>2`tLZJ9pqcf89|wR_xx(-kYr?Wrk#p{l1{kjRWwY<|%6V(0MBzV7A^>&dn^ zU-S1avoO5lsa?VkGZNhga(YAs|D9yi74UT<-}|Zk5q&r~a%&I2!LI$_YI}b`WF(k@ zB!4RI9ft(4Z0=z9<(}~mln^H*tgtimdPlb8-g)Z8`liJ}aQWs3#n!c}U90)*#mGE1 z_}vlS4`YioGotMa2j+^oDM%F74`a*Bm8LfeMjMNT?ej;*cVoBC5G)<9SIv?Y{KJ}p zh?RPm?0Z=`@@*ptigLyZ=9B zE)_oY^fW1j=)vVX>tLYFfpc)ccAW1<89wW0YC z_Wi;-hBJ4CY(-r_toB78EBdou%)K>hDaycD%l>M`MuYgu3?WLK+~g!93xm9Y*8)P`P-Lx**C_fBO8XX4?Rt4xOUW)X<(VdqMp@pk zAOP9=*#7v*4Jc(~^RPT+`CW+9fafjg5dLE00WPhMllvWuC7Qt>EPxT6*i|%uauevf z{JF9B@utV>44VHvLryZB8QM%!wTy4){JzHq`C)8%b-rsQk>Yt;(=$xwkoIM|@sfc} zWoR+|#fJ$k1})iY;i_#=;Z=;j;oFKiY{<{0CGMPnD)G*F7D@}intLm)rF(yk02cj+$lLgP4uV`(>dxrV&hM1#*&^SY*Wn5{ePqLK z1T*bAP0;6*Vovvfi1qG+o$HIOxKRNK4NvQ_lSZY!*9m>Zy+d0b7=AwL9>@4Pe!3mm zJUqkC-xttc3}#`^$9JHo!0Uxqurgb2j0rZb5@(*EGN$ z^_pRKvKYA}I;oJ`Hw_yN<*N$L3A|mTuJH(|n*TQQe?!SfzJnRUt%9AYS?pzWRe%>%+zTcT)+~@PqOFY}UYc|GX;B9lu|8PgJJE7b4H3DXdO#pNkJ|ZZ3kj=? zo_E6ypZ)al%gy$JIrhk}tuYcCb^%SFyLRNZMaQQpncVP*PztfuzO?a4402NhC8^ki zaMzJd%^kkE+xU4UJaSh@qJ@BG*1M11V{|GcFRSxr0tTFp`PS-Orb|uReYix~94v&5 zZb9S~ua`NTQYIJdlO=PT6BOKI<&cUQf5MKuJG(00?gWWV!XvJcRZ}r#zWN;Ps(mR4 zw{(H)ovRt9KBmNm&Z1WX4(~7vc}cX}YMQjW!oEKHJfeN(Ak4ebPX`acXH_o0UyHF@ z(ca=;t5XmnAm+DOQ-(s??{AkgDl!VMb1Y?6vuy074$JGgG3cn?kpO*)wxPHOtG;u! z7pDvcKHQxWMn`MJ^bL6ca6xm@a0lz-PSq;gbSxG2UG+cMcs9ga22P~0;JWHF8N7m# zyR$Bjz>?*17f`P|)>G@MQ2U=P-Vzt@nc%l42peRy-Q%#v-UWZIej*4&Vg-*u?lbPj?^C<-f-Mb{gwHtQm~1n`baGQU&I^Uao2HrZHY zRn_K9eI+89@nPYtJT0?26E(`hC`_Vg(J4VNsDpKXwy>S{BO;oEJN`Ex0`7-ghW~TS ztATaqy#x$rfjEBLewv$S1y*-145Ij-J@_SvQD2b}9v%PoIFG9N{BoR{kjGZ7QeOwMrNrgMD#2gA{~wp! BRpbBw literal 0 HcmV?d00001 diff --git a/doc/_img/features.png b/doc/_img/features.png new file mode 100644 index 0000000000000000000000000000000000000000..37c8772918f1ff4c1c10ed599f32d3e8bc53d808 GIT binary patch literal 133304 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