diff --git a/src/Instruction.cpp b/src/Instruction.cpp index ac687d0..24a44b7 100644 --- a/src/Instruction.cpp +++ b/src/Instruction.cpp @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "Instruction.hpp" +#include "instruction.hpp" #include "common.hpp" namespace randomx { @@ -330,7 +330,7 @@ namespace randomx { os << std::endl; } -#include "instructionWeights.hpp" +#include "instruction_weights.hpp" #define INST_NAME(x) REPN(#x, WT(x)) #define INST_HANDLE(x) REPN(&Instruction::h_##x, WT(x)) @@ -380,7 +380,7 @@ namespace randomx { INST_NAME(NOP) }; - InstructionVisualizer Instruction::engine[256] = { + InstructionFormatter Instruction::engine[256] = { //Integer INST_HANDLE(IADD_RS) INST_HANDLE(IADD_M) diff --git a/src/Instruction.hpp b/src/Instruction.hpp index 89db7e3..2fef4de 100644 --- a/src/Instruction.hpp +++ b/src/Instruction.hpp @@ -27,7 +27,7 @@ namespace randomx { class Instruction; - typedef void(Instruction::*InstructionVisualizer)(std::ostream&) const; + typedef void(Instruction::*InstructionFormatter)(std::ostream&) const; namespace InstructionType { constexpr int IADD_RS = 0; @@ -71,9 +71,6 @@ namespace randomx { class Instruction { public: - uint8_t opcode; - uint8_t dst; - uint8_t src; uint32_t getImm32() const { return load32(&imm32); } @@ -102,17 +99,20 @@ namespace randomx { void setMod(uint8_t val) { mod = val; } + + uint8_t opcode; + uint8_t dst; + uint8_t src; private: uint8_t mod; uint32_t imm32; + void print(std::ostream&) const; static const char* names[256]; - static InstructionVisualizer engine[256]; - + static InstructionFormatter engine[256]; void genAddressReg(std::ostream& os) const; void genAddressImm(std::ostream& os) const; void genAddressRegDst(std::ostream&) const; - void h_IADD_RS(std::ostream&) const; void h_IADD_M(std::ostream&) const; void h_IADD_RC(std::ostream&) const; @@ -152,6 +152,6 @@ namespace randomx { void h_NOP(std::ostream&) const; }; - static_assert(sizeof(Instruction) == 8, "Invalid alignment of struct Instruction"); + static_assert(sizeof(Instruction) == 8, "Invalid size of struct randomx::Instruction"); } \ No newline at end of file diff --git a/src/Program.cpp b/src/Program.cpp deleted file mode 100644 index 2b10f0b..0000000 --- a/src/Program.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright (c) 2018 tevador - -This file is part of RandomX. - -RandomX is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -RandomX 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 RandomX. If not, see. -*/ - -#include "Program.hpp" -#include "hashAes1Rx4.hpp" - -namespace RandomX { - template - void ProgramBase::print(std::ostream& os) const { - for (int i = 0; i < RANDOMX_PROGRAM_SIZE; ++i) { - auto instr = programBuffer[i]; - os << instr; - } - } -} diff --git a/src/Program.hpp b/src/Program.hpp index c7ba0f9..630d42d 100644 --- a/src/Program.hpp +++ b/src/Program.hpp @@ -22,7 +22,7 @@ along with RandomX. If not, see. #include #include #include "common.hpp" -#include "Instruction.hpp" +#include "instruction.hpp" #include "blake2/endian.h" namespace randomx { @@ -58,5 +58,5 @@ namespace randomx { Instruction programBuffer[RANDOMX_PROGRAM_SIZE]; }; - static_assert(sizeof(Program) % 64 == 0, "Invalid size of class Program"); + static_assert(sizeof(Program) % 64 == 0, "Invalid size of class randomx::Program"); } diff --git a/src/hashAes1Rx4.cpp b/src/aes_hash.cpp similarity index 99% rename from src/hashAes1Rx4.cpp rename to src/aes_hash.cpp index a9069ea..9fbbb02 100644 --- a/src/hashAes1Rx4.cpp +++ b/src/aes_hash.cpp @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "softAes.h" +#include "soft_aes.h" /* Calculate a 512-bit hash of 'input' using 4 lanes of AES. diff --git a/src/hashAes1Rx4.hpp b/src/aes_hash.hpp similarity index 96% rename from src/hashAes1Rx4.hpp rename to src/aes_hash.hpp index 8c0c156..c29f7d9 100644 --- a/src/hashAes1Rx4.hpp +++ b/src/aes_hash.hpp @@ -17,7 +17,9 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "softAes.h" +#pragma once + +#include template void hashAes1Rx4(const void *input, size_t inputSize, void *hash); diff --git a/src/allocator.cpp b/src/allocator.cpp index f5a9a06..456767f 100644 --- a/src/allocator.cpp +++ b/src/allocator.cpp @@ -20,8 +20,8 @@ along with RandomX. If not, see. #pragma once #include "allocator.hpp" -#include "virtualMemory.hpp" -#include "intrinPortable.h" +#include "intrin_portable.h" +#include "virtual_memory.hpp" #include "common.hpp" namespace randomx { diff --git a/src/AssemblyGeneratorX86.cpp b/src/assembly_generator_x86.cpp similarity index 98% rename from src/AssemblyGeneratorX86.cpp rename to src/assembly_generator_x86.cpp index be91988..485c549 100644 --- a/src/AssemblyGeneratorX86.cpp +++ b/src/assembly_generator_x86.cpp @@ -19,11 +19,11 @@ along with RandomX. If not, see. //#define TRACE #include -#include "AssemblyGeneratorX86.hpp" +#include "assembly_generator_x86.hpp" #include "common.hpp" #include "reciprocal.h" -#include "Program.hpp" -#include "superscalarGenerator.hpp" +#include "program.hpp" +#include "superscalar.hpp" namespace randomx { @@ -117,7 +117,7 @@ namespace randomx { asmCode << "mov " << regR[instr.dst] << ", rdx" << std::endl; break; case SuperscalarInstructionType::IMUL_RCP: - asmCode << "mov rax, " << (int64_t)reciprocal(instr.getImm32()) << std::endl; + asmCode << "mov rax, " << (int64_t)randomx_reciprocal(instr.getImm32()) << std::endl; asmCode << "imul " << regR[instr.dst] << ", rax" << std::endl; break; default: @@ -210,7 +210,7 @@ namespace randomx { asmCode << regR[instr.dst] << " = smulh(" << regR[instr.dst] << ", " << regR[instr.src] << ");" << std::endl; break; case SuperscalarInstructionType::IMUL_RCP: - asmCode << regR[instr.dst] << " *= " << (int64_t)reciprocal(instr.getImm32()) << ";" << std::endl; + asmCode << regR[instr.dst] << " *= " << (int64_t)randomx_reciprocal(instr.getImm32()) << ";" << std::endl; break; default: UNREACHABLE; @@ -477,7 +477,7 @@ namespace randomx { if (instr.getImm32() != 0) { registerUsage[instr.dst] = i; uint32_t divisor = instr.getImm32(); - asmCode << "\tmov rax, " << reciprocal(instr.getImm32()) << std::endl; + asmCode << "\tmov rax, " << randomx_reciprocal(instr.getImm32()) << std::endl; asmCode << "\timul " << regR[instr.dst] << ", rax" << std::endl; traceint(instr); } @@ -691,7 +691,7 @@ namespace randomx { tracenop(instr); } -#include "instructionWeights.hpp" +#include "instruction_weights.hpp" #define INST_HANDLE(x) REPN(&AssemblyGeneratorX86::h_##x, WT(x)) InstructionGenerator AssemblyGeneratorX86::engine[256] = { diff --git a/src/AssemblyGeneratorX86.hpp b/src/assembly_generator_x86.hpp similarity index 97% rename from src/AssemblyGeneratorX86.hpp rename to src/assembly_generator_x86.hpp index 417491c..f5b523f 100644 --- a/src/AssemblyGeneratorX86.hpp +++ b/src/assembly_generator_x86.hpp @@ -19,9 +19,6 @@ along with RandomX. If not, see. #pragma once -#include "Instruction.hpp" -#include "configuration.h" -#include "common.hpp" #include namespace randomx { @@ -29,6 +26,7 @@ namespace randomx { class Program; class SuperscalarProgram; class AssemblyGeneratorX86; + class Instruction; typedef void(AssemblyGeneratorX86::*InstructionGenerator)(Instruction&, int); @@ -41,22 +39,15 @@ namespace randomx { os << asmCode.rdbuf(); } private: - static InstructionGenerator engine[256]; - std::stringstream asmCode; - int registerUsage[8]; - void genAddressReg(Instruction&, const char*); void genAddressRegDst(Instruction&, int); int32_t genAddressImm(Instruction&); int getConditionRegister(); void handleCondition(Instruction&, int); - void generateCode(Instruction&, int); - void traceint(Instruction&); void traceflt(Instruction&); void tracenop(Instruction&); - void h_IADD_RS(Instruction&, int); void h_IADD_M(Instruction&, int); void h_IADD_RC(Instruction&, int); @@ -94,5 +85,9 @@ namespace randomx { void h_ISTORE(Instruction&, int); void h_FSTORE(Instruction&, int); void h_NOP(Instruction&, int); + + static InstructionGenerator engine[256]; + std::stringstream asmCode; + int registerUsage[8]; }; } \ No newline at end of file diff --git a/src/Blake2Generator.cpp b/src/blake2_benerator.cpp similarity index 81% rename from src/Blake2Generator.cpp rename to src/blake2_benerator.cpp index 2cc0129..4454abb 100644 --- a/src/Blake2Generator.cpp +++ b/src/blake2_benerator.cpp @@ -20,15 +20,16 @@ along with RandomX. If not, see. #include #include "blake2/blake2.h" #include "blake2/endian.h" -#include "Blake2Generator.hpp" -#include "common.hpp" +#include "blake2_generator.hpp" namespace randomx { - Blake2Generator::Blake2Generator(const void* seed, int nonce) : dataIndex(sizeof(data)) { + constexpr int maxSeedSize = 60; + + Blake2Generator::Blake2Generator(const void* seed, size_t seedSize, int nonce) : dataIndex(sizeof(data)) { memset(data, 0, sizeof(data)); - memcpy(data, seed, SeedSize); - store32(&data[60], nonce); + memcpy(data, seed, seedSize > maxSeedSize ? maxSeedSize : seedSize); + store32(&data[maxSeedSize], nonce); } uint8_t Blake2Generator::getByte() { diff --git a/src/Blake2Generator.hpp b/src/blake2_generator.hpp similarity index 92% rename from src/Blake2Generator.hpp rename to src/blake2_generator.hpp index fa85548..7124762 100644 --- a/src/Blake2Generator.hpp +++ b/src/blake2_generator.hpp @@ -18,19 +18,20 @@ along with RandomX. If not, see. */ #pragma once + #include namespace randomx { class Blake2Generator { public: - Blake2Generator(const void* seed, int nonce); + Blake2Generator(const void* seed, size_t seedSize, int nonce = 0); uint8_t getByte(); uint32_t getInt32(); private: + void checkData(const size_t); + uint8_t data[64]; size_t dataIndex; - - void checkData(const size_t); }; } \ No newline at end of file diff --git a/src/dataset.cpp b/src/dataset.cpp index e632547..a241697 100644 --- a/src/dataset.cpp +++ b/src/dataset.cpp @@ -17,6 +17,12 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ +/* Original code from Argon2 reference source code package used under CC0 Licence + * https://github.com/P-H-C/phc-winner-argon2 + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves +*/ + #include #include #include @@ -26,9 +32,9 @@ along with RandomX. If not, see. #include "common.hpp" #include "dataset.hpp" -#include "virtualMemory.hpp" -#include "superscalarGenerator.hpp" -#include "Blake2Generator.hpp" +#include "virtual_memory.hpp" +#include "superscalar.hpp" +#include "blake2_generator.hpp" #include "reciprocal.h" #include "blake2/endian.h" #include "argon2.h" @@ -100,13 +106,13 @@ void randomx_cache::initialize(const void *seed, size_t seedSize) { fill_memory_blocks(&instance); reciprocalCache.clear(); - randomx::Blake2Generator gen(seed, 1000); + randomx::Blake2Generator gen(seed, seedSize, 1000); //TODO for (int i = 0; i < RANDOMX_CACHE_ACCESSES; ++i) { randomx::generateSuperscalar(programs[i], gen); for (unsigned j = 0; j < programs[i].getSize(); ++j) { auto& instr = programs[i](j); if (instr.opcode == randomx::SuperscalarInstructionType::IMUL_RCP) { - auto rcp = reciprocal(instr.getImm32()); + auto rcp = randomx_reciprocal(instr.getImm32()); instr.setImm32(reciprocalCache.size()); reciprocalCache.push_back(rcp); } diff --git a/src/dataset.hpp b/src/dataset.hpp index 12c2021..c6b1e83 100644 --- a/src/dataset.hpp +++ b/src/dataset.hpp @@ -21,29 +21,26 @@ along with RandomX. If not, see. #include #include -#include "intrinPortable.h" #include "common.hpp" -#include "randomx.h" -#include "Program.hpp" #include "superscalar_program.hpp" -#include "JitCompilerX86.hpp" +#include "jit_compiler_x86.hpp" #include "allocator.hpp" +/* Global scope for C binding */ struct randomx_dataset { virtual ~randomx_dataset() = 0; virtual bool allocate() = 0; uint8_t* memory = nullptr; }; +/* Global scope for C binding */ struct randomx_cache : public randomx_dataset { virtual randomx::DatasetInitFunc getInitFunc() = 0; - virtual void initialize(const void *seed, size_t seedSize); //argon2 + virtual void initialize(const void *seed, size_t seedSize); randomx::SuperscalarProgram programs[RANDOMX_CACHE_ACCESSES]; std::vector reciprocalCache; }; - - namespace randomx { template diff --git a/src/instructionWeights.hpp b/src/instruction_weights.hpp similarity index 98% rename from src/instructionWeights.hpp rename to src/instruction_weights.hpp index a95a464..7f9389e 100644 --- a/src/instructionWeights.hpp +++ b/src/instruction_weights.hpp @@ -101,4 +101,4 @@ along with RandomX. If not, see. #define REPCASE256(x) REPCASE128(x) REPCASE128(x) #define REPCASENX(x,N) REPCASE##N(x) #define REPCASEN(x,N) REPCASENX(x,N) -#define CASE_REP(x) REPCASEN(x, WT(x)) \ No newline at end of file +#define CASE_REP(x) REPCASEN(x, WT(x)) diff --git a/src/instructionsPortable.cpp b/src/instructions_portable.cpp similarity index 95% rename from src/instructionsPortable.cpp rename to src/instructions_portable.cpp index 59d19c5..ac12eed 100644 --- a/src/instructionsPortable.cpp +++ b/src/instructions_portable.cpp @@ -16,9 +16,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ + //#define DEBUG -#include "intrinPortable.h" -#include "blake2/endian.h" + #pragma STDC FENV_ACCESS on #include #include @@ -26,6 +26,8 @@ along with RandomX. If not, see. #include #endif #include "common.hpp" +#include "intrin_portable.h" +#include "blake2/endian.h" #if defined(__SIZEOF_INT128__) typedef unsigned __int128 uint128_t; @@ -87,14 +89,14 @@ along with RandomX. If not, see. uint64_t rotr(uint64_t a, int b) { return (a >> b) | (a << (64 - b)); } - #define HAS_ROTR + #define HAVE_ROTR #endif #ifndef HAVE_ROTL uint64_t rotl(uint64_t a, int b) { return (a << b) | (a >> (64 - b)); } - #define HAS_ROTL + #define HAVE_ROTL #endif #ifndef HAVE_MULH @@ -126,11 +128,6 @@ along with RandomX. If not, see. #define HAVE_SMULH #endif -// avoid undefined behavior of signed overflow -static inline int32_t safeSub(int32_t a, int32_t b) { - return int32_t(uint32_t(a) - uint32_t(b)); -} - #if __GNUC__ >= 5 #undef __has_builtin #define __has_builtin(x) 1 diff --git a/src/intrinPortable.h b/src/intrin_portable.h similarity index 99% rename from src/intrinPortable.h rename to src/intrin_portable.h index 972716f..221a56b 100644 --- a/src/intrinPortable.h +++ b/src/intrin_portable.h @@ -330,7 +330,6 @@ __m128d ieee_set_exponent(__m128d x) { } double loadDoublePortable(const void* addr); - uint64_t mulh(uint64_t, uint64_t); int64_t smulh(int64_t, int64_t); uint64_t rotl(uint64_t, int); diff --git a/src/JitCompilerX86.cpp b/src/jit_compiler_x86.cpp similarity index 99% rename from src/JitCompilerX86.cpp rename to src/jit_compiler_x86.cpp index 3b423a0..abd698a 100644 --- a/src/JitCompilerX86.cpp +++ b/src/jit_compiler_x86.cpp @@ -17,20 +17,14 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include -#include #include -#include "JitCompilerX86.hpp" -#include "Program.hpp" -#include "reciprocal.h" -#include "virtualMemory.hpp" -#include "intrinPortable.h" +#include "jit_compiler_x86.hpp" #define RANDOMX_JUMP +#if !defined(_M_X64) && !defined(__x86_64__) namespace randomx { -#if !defined(_M_X64) && !defined(__x86_64__) JitCompilerX86::JitCompilerX86() { throw std::runtime_error("JIT compiler only supports x86-64 CPUs"); } @@ -46,8 +40,19 @@ namespace randomx { size_t JitCompilerX86::getCodeSize() { return 0; } + +} #else +#include +#include +#include "jit_compiler_x86_static.hpp" +#include "superscalar.hpp" +#include "program.hpp" +#include "reciprocal.h" +#include "virtual_memory.hpp" + +namespace randomx { /* REGISTER ALLOCATION: @@ -87,9 +92,6 @@ namespace randomx { */ -#include "JitCompilerX86-static.hpp" -#include "superscalarGenerator.hpp" - #define NOP_TEST true const uint8_t* codePrologue = (uint8_t*)&randomx_program_prologue; @@ -675,7 +677,7 @@ namespace randomx { } registerUsage[instr.dst] = i; emit(MOV_RAX_I); - emit64(reciprocal(instr.getImm32())); + emit64(randomx_reciprocal(instr.getImm32())); emit(REX_IMUL_RM); emitByte(0xc0 + 8 * instr.dst); } @@ -1017,7 +1019,7 @@ namespace randomx { emitByte(0x90); } -#include "instructionWeights.hpp" +#include "instruction_weights.hpp" #define INST_HANDLE(x) REPN(&JitCompilerX86::h_##x, WT(x)) InstructionGeneratorX86 JitCompilerX86::engine[256] = { diff --git a/src/JitCompilerX86.hpp b/src/jit_compiler_x86.hpp similarity index 98% rename from src/JitCompilerX86.hpp rename to src/jit_compiler_x86.hpp index fd02434..fec2747 100644 --- a/src/JitCompilerX86.hpp +++ b/src/jit_compiler_x86.hpp @@ -19,11 +19,10 @@ along with RandomX. If not, see. #pragma once -#include "common.hpp" -#include "Instruction.hpp" -#include "superscalar_program.hpp" +#include #include #include +#include "common.hpp" namespace randomx { @@ -31,6 +30,7 @@ namespace randomx { class ProgramConfiguration; class SuperscalarProgram; class JitCompilerX86; + class Instruction; typedef void(JitCompilerX86::*InstructionGeneratorX86)(Instruction&, int); diff --git a/src/JitCompilerX86-static.S b/src/jit_compiler_x86_static.S similarity index 100% rename from src/JitCompilerX86-static.S rename to src/jit_compiler_x86_static.S diff --git a/src/JitCompilerX86-static.hpp b/src/jit_compiler_x86_static.hpp similarity index 98% rename from src/JitCompilerX86-static.hpp rename to src/jit_compiler_x86_static.hpp index 3bb56ac..5e8d0ce 100644 --- a/src/JitCompilerX86-static.hpp +++ b/src/jit_compiler_x86_static.hpp @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ +#pragma once + extern "C" { void randomx_program_prologue(); void randomx_program_loop_begin(); @@ -36,4 +38,4 @@ extern "C" { void randomx_sshash_end(); void randomx_sshash_init(); void randomx_program_end(); -} \ No newline at end of file +} diff --git a/src/JitCompilerX86-static.asm b/src/jit_compiler_x86_staticc.asm similarity index 100% rename from src/JitCompilerX86-static.asm rename to src/jit_compiler_x86_staticc.asm diff --git a/src/main.cpp b/src/main.cpp index cbf2a61..0fb9d32 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,7 +19,7 @@ along with RandomX. If not, see. //#define TRACE //#include "AssemblyGeneratorX86.hpp" -#include "Stopwatch.hpp" +#include "stopwatch.hpp" //#include "blake2/blake2.h" #include "blake2/endian.h" #include diff --git a/src/randomx.cpp b/src/randomx.cpp index d45cfea..3f6a429 100644 --- a/src/randomx.cpp +++ b/src/randomx.cpp @@ -19,12 +19,10 @@ along with RandomX. If not, see. #include "randomx.h" #include "dataset.hpp" -#include "VirtualMachine.hpp" -#include "./InterpretedVirtualMachine.hpp" -#include "./InterpretedLightVirtualMachine.hpp" -#include "./CompiledVirtualMachine.hpp" -#include "./CompiledLightVirtualMachine.hpp" -#include "virtualMemory.hpp" +#include "vm_interpreted.hpp" +#include "vm_interpreted_light.hpp" +#include "vm_compiled.hpp" +#include "vm_compiled_light.hpp" #include "blake2/blake2.h" extern "C" { diff --git a/src/reciprocal.c b/src/reciprocal.c index c414702..862d7ec 100644 --- a/src/reciprocal.c +++ b/src/reciprocal.c @@ -19,7 +19,6 @@ along with RandomX. If not, see. #include "reciprocal.h" - /* Calculates rcp = 2**x / divisor for highest integer x such that rcp < 2**64. @@ -34,7 +33,7 @@ along with RandomX. If not, see. ret */ -uint64_t reciprocal(uint64_t divisor) { +uint64_t randomx_reciprocal(uint64_t divisor) { const uint64_t p2exp63 = 1ULL << 63; diff --git a/src/reciprocal.h b/src/reciprocal.h index 0d13394..4132d6e 100644 --- a/src/reciprocal.h +++ b/src/reciprocal.h @@ -18,13 +18,14 @@ along with RandomX. If not, see. */ #pragma once + #include #if defined(__cplusplus) extern "C" { #endif - uint64_t reciprocal(uint64_t); +uint64_t randomx_reciprocal(uint64_t); #if defined(__cplusplus) } diff --git a/src/softAes.cpp b/src/soft_aes.cpp similarity index 99% rename from src/softAes.cpp rename to src/soft_aes.cpp index b51d92c..81dc66b 100644 --- a/src/softAes.cpp +++ b/src/soft_aes.cpp @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "softAes.h" +#include "soft_aes.h" alignas(16) const uint8_t sbox[256] = { 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, @@ -321,8 +321,8 @@ alignas(16) const uint32_t lutDec3[256] = { __m128i soft_aesenc(__m128i in, __m128i key) { uint32_t s0, s1, s2, s3; - s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xFF)); - s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xAA)); + s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xff)); + s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xaa)); s2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0x55)); s3 = _mm_cvtsi128_si32(in); @@ -339,8 +339,8 @@ __m128i soft_aesenc(__m128i in, __m128i key) { __m128i soft_aesdec(__m128i in, __m128i key) { uint32_t s0, s1, s2, s3; - s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xFF)); - s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xAA)); + s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xff)); + s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xaa)); s2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0x55)); s3 = _mm_cvtsi128_si32(in); diff --git a/src/softAes.h b/src/soft_aes.h similarity index 97% rename from src/softAes.h rename to src/soft_aes.h index 9054ef1..12e9ce4 100644 --- a/src/softAes.h +++ b/src/soft_aes.h @@ -18,8 +18,9 @@ along with RandomX. If not, see. */ #pragma once + #include -#include "intrinPortable.h" +#include "intrin_portable.h" __m128i soft_aesenc(__m128i in, __m128i key); diff --git a/src/superscalarGenerator.cpp b/src/superscalar.cpp similarity index 99% rename from src/superscalarGenerator.cpp rename to src/superscalar.cpp index 98d8658..3537f35 100644 --- a/src/superscalarGenerator.cpp +++ b/src/superscalar.cpp @@ -25,8 +25,8 @@ along with RandomX. If not, see. #include #include #include -#include "superscalarGenerator.hpp" -#include "intrinPortable.h" +#include "superscalar.hpp" +#include "intrin_portable.h" #include "reciprocal.h" namespace randomx { @@ -885,11 +885,11 @@ namespace randomx { if (reciprocals != nullptr) r[instr.dst] *= (*reciprocals)[instr.getImm32()]; else - r[instr.dst] *= reciprocal(instr.getImm32()); + r[instr.dst] *= randomx_reciprocal(instr.getImm32()); break; default: UNREACHABLE; } } } -} \ No newline at end of file +} diff --git a/src/superscalarGenerator.hpp b/src/superscalar.hpp similarity index 94% rename from src/superscalarGenerator.hpp rename to src/superscalar.hpp index 71d38b1..b599c2a 100644 --- a/src/superscalarGenerator.hpp +++ b/src/superscalar.hpp @@ -18,9 +18,11 @@ along with RandomX. If not, see. */ #pragma once -#include "superscalar_program.hpp" -#include "Blake2Generator.hpp" + +#include #include +#include "superscalar_program.hpp" +#include "blake2_generator.hpp" namespace randomx { // Intel Ivy Bridge reference @@ -45,5 +47,5 @@ namespace randomx { } void generateSuperscalar(SuperscalarProgram& prog, Blake2Generator& gen); - void executeSuperscalar(int_reg_t(&r)[8], SuperscalarProgram& prog, std::vector *reciprocals = nullptr); + void executeSuperscalar(uint64_t(&r)[8], SuperscalarProgram& prog, std::vector *reciprocals = nullptr); } \ No newline at end of file diff --git a/src/superscalar_program.hpp b/src/superscalar_program.hpp index d4296ca..5d83a39 100644 --- a/src/superscalar_program.hpp +++ b/src/superscalar_program.hpp @@ -20,7 +20,7 @@ along with RandomX. If not, see. #pragma once #include -#include "Instruction.hpp" +#include "instruction.hpp" #include "configuration.h" namespace randomx { diff --git a/src/VirtualMachine.cpp b/src/virtual_machine.cpp similarity index 98% rename from src/VirtualMachine.cpp rename to src/virtual_machine.cpp index 9fd102e..e232f8c 100644 --- a/src/VirtualMachine.cpp +++ b/src/virtual_machine.cpp @@ -17,13 +17,13 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "VirtualMachine.hpp" +#include "virtual_machine.hpp" #include "common.hpp" -#include "hashAes1Rx4.hpp" +#include "aes_hash.hpp" #include "blake2/blake2.h" #include #include -#include "intrinPortable.h" +#include "intrin_portable.h" #include "allocator.hpp" randomx_vm::~randomx_vm() { diff --git a/src/VirtualMachine.hpp b/src/virtual_machine.hpp similarity index 97% rename from src/VirtualMachine.hpp rename to src/virtual_machine.hpp index bf83a03..0f788f6 100644 --- a/src/VirtualMachine.hpp +++ b/src/virtual_machine.hpp @@ -21,8 +21,7 @@ along with RandomX. If not, see. #include #include "common.hpp" -#include "dataset.hpp" -#include "Program.hpp" +#include "program.hpp" /* Global namespace for C binding */ class randomx_vm { @@ -38,7 +37,6 @@ public: randomx::RegisterFile *getRegisterFile() { return ® } - protected: void initialize(); alignas(64) randomx::Program program; diff --git a/src/virtualMemory.cpp b/src/virtual_memory.cpp similarity index 99% rename from src/virtualMemory.cpp rename to src/virtual_memory.cpp index 17b91da..f524bef 100644 --- a/src/virtualMemory.cpp +++ b/src/virtual_memory.cpp @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "virtualMemory.hpp" +#include "virtual_memory.hpp" #include diff --git a/src/virtualMemory.hpp b/src/virtual_memory.hpp similarity index 100% rename from src/virtualMemory.hpp rename to src/virtual_memory.hpp diff --git a/src/CompiledVirtualMachine.cpp b/src/vm_compiled.cpp similarity index 98% rename from src/CompiledVirtualMachine.cpp rename to src/vm_compiled.cpp index 639fc8c..098245e 100644 --- a/src/CompiledVirtualMachine.cpp +++ b/src/vm_compiled.cpp @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "CompiledVirtualMachine.hpp" +#include "vm_compiled.hpp" #include "common.hpp" namespace randomx { diff --git a/src/CompiledVirtualMachine.hpp b/src/vm_compiled.hpp similarity index 93% rename from src/CompiledVirtualMachine.hpp rename to src/vm_compiled.hpp index 94fb856..0556afe 100644 --- a/src/CompiledVirtualMachine.hpp +++ b/src/vm_compiled.hpp @@ -20,8 +20,11 @@ along with RandomX. If not, see. #pragma once #include -#include "VirtualMachine.hpp" -#include "JitCompilerX86.hpp" +#include +#include "virtual_machine.hpp" +#include "jit_compiler_x86.hpp" +#include "allocator.hpp" +#include "dataset.hpp" namespace randomx { diff --git a/src/CompiledLightVirtualMachine.cpp b/src/vm_compiled_light.cpp similarity index 97% rename from src/CompiledLightVirtualMachine.cpp rename to src/vm_compiled_light.cpp index ab3c8e3..c817191 100644 --- a/src/CompiledLightVirtualMachine.cpp +++ b/src/vm_compiled_light.cpp @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "CompiledLightVirtualMachine.hpp" +#include "vm_compiled_light.hpp" #include "common.hpp" #include diff --git a/src/CompiledLightVirtualMachine.hpp b/src/vm_compiled_light.hpp similarity index 94% rename from src/CompiledLightVirtualMachine.hpp rename to src/vm_compiled_light.hpp index 813ddbf..e66e786 100644 --- a/src/CompiledLightVirtualMachine.hpp +++ b/src/vm_compiled_light.hpp @@ -18,11 +18,9 @@ along with RandomX. If not, see. */ #pragma once -//#define TRACEVM + #include -#include "CompiledVirtualMachine.hpp" -#include "JitCompilerX86.hpp" -#include "intrinPortable.h" +#include "vm_compiled.hpp" namespace randomx { diff --git a/src/InterpretedVirtualMachine.cpp b/src/vm_interpreted.cpp similarity index 99% rename from src/InterpretedVirtualMachine.cpp rename to src/vm_interpreted.cpp index 5c40890..55b7fbd 100644 --- a/src/InterpretedVirtualMachine.cpp +++ b/src/vm_interpreted.cpp @@ -16,20 +16,21 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ + //#define TRACE //#define FPUCHECK #define RANDOMX_JUMP -#include "InterpretedVirtualMachine.hpp" -#include "dataset.hpp" + #include #include #include #include #include #include -#include #include -#include "intrinPortable.h" +#include "vm_interpreted.hpp" +#include "dataset.hpp" +#include "intrin_portable.h" #include "reciprocal.h" #ifdef FPUCHECK @@ -465,7 +466,7 @@ namespace randomx { } }*/ -#include "instructionWeights.hpp" +#include "instruction_weights.hpp" template void InterpretedVm::precompileProgram(int_reg_t(&r)[8], __m128d (&f)[4], __m128d (&e)[4], __m128d (&a)[4]) { @@ -652,7 +653,7 @@ namespace randomx { auto dst = instr.dst % RegistersCount; ibc.type = InstructionType::IMUL_R; ibc.idst = &r[dst]; - ibc.imm = reciprocal(divisor); + ibc.imm = randomx_reciprocal(divisor); ibc.isrc = &ibc.imm; registerUsage[instr.dst] = i; } diff --git a/src/InterpretedVirtualMachine.hpp b/src/vm_interpreted.hpp similarity index 96% rename from src/InterpretedVirtualMachine.hpp rename to src/vm_interpreted.hpp index bcf42ca..10e1ccf 100644 --- a/src/InterpretedVirtualMachine.hpp +++ b/src/vm_interpreted.hpp @@ -20,10 +20,11 @@ along with RandomX. If not, see. #pragma once #include -#include "VirtualMachine.hpp" -#include "Program.hpp" -#include "intrinPortable.h" #include +#include "common.hpp" +#include "virtual_machine.hpp" +#include "intrin_portable.h" +#include "allocator.hpp" namespace randomx { diff --git a/src/InterpretedLightVirtualMachine.cpp b/src/vm_interpreted_light.cpp similarity index 97% rename from src/InterpretedLightVirtualMachine.cpp rename to src/vm_interpreted_light.cpp index 76f633f..791f448 100644 --- a/src/InterpretedLightVirtualMachine.cpp +++ b/src/vm_interpreted_light.cpp @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with RandomX. If not, see. */ -#include "InterpretedLightVirtualMachine.hpp" +#include "vm_interpreted_light.hpp" #include "dataset.hpp" namespace randomx { diff --git a/src/InterpretedLightVirtualMachine.hpp b/src/vm_interpreted_light.hpp similarity index 95% rename from src/InterpretedLightVirtualMachine.hpp rename to src/vm_interpreted_light.hpp index ab94a07..657452c 100644 --- a/src/InterpretedLightVirtualMachine.hpp +++ b/src/vm_interpreted_light.hpp @@ -20,8 +20,7 @@ along with RandomX. If not, see. #pragma once #include -#include "InterpretedVirtualMachine.hpp" -#include "superscalar_program.hpp" +#include "vm_interpreted.hpp" namespace randomx { diff --git a/vcxproj/randomx.vcxproj b/vcxproj/randomx.vcxproj index 1ed504b..a3fe530 100644 --- a/vcxproj/randomx.vcxproj +++ b/vcxproj/randomx.vcxproj @@ -127,60 +127,58 @@ - - + + - - + + - - - - - - + + + + + + - + - - - + + + - - + - - + + - - + + - - - - - - - - + + + + + + + + - - + + - - - + + - - + + diff --git a/vcxproj/randomx.vcxproj.filters b/vcxproj/randomx.vcxproj.filters index 2e6958a..847c9b1 100644 --- a/vcxproj/randomx.vcxproj.filters +++ b/vcxproj/randomx.vcxproj.filters @@ -24,69 +24,66 @@ Source Files - - Source Files - - - Source Files - - - Source Files - Source Files - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - Source Files - - Source Files - - - Source Files - - - Source Files - Source Files - - Source Files - - - Source Files - Source Files Source Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files - - Source Files - - + Source Files @@ -97,85 +94,82 @@ Header Files - - Header Files - Header Files Header Files - - Header Files - - - Header Files - Header Files Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files Header Files - + Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files