mirror of
https://git.wownero.com/wownero/RandomWOW.git
synced 2024-08-15 00:23:14 +00:00
Removed capital letters from filenames
This commit is contained in:
parent
d7276d5786
commit
d7eefce583
44 changed files with 263 additions and 299 deletions
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Instruction.hpp"
|
#include "instruction.hpp"
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
@ -330,7 +330,7 @@ namespace randomx {
|
||||||
os << std::endl;
|
os << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "instructionWeights.hpp"
|
#include "instruction_weights.hpp"
|
||||||
#define INST_NAME(x) REPN(#x, WT(x))
|
#define INST_NAME(x) REPN(#x, WT(x))
|
||||||
#define INST_HANDLE(x) REPN(&Instruction::h_##x, WT(x))
|
#define INST_HANDLE(x) REPN(&Instruction::h_##x, WT(x))
|
||||||
|
|
||||||
|
@ -380,7 +380,7 @@ namespace randomx {
|
||||||
INST_NAME(NOP)
|
INST_NAME(NOP)
|
||||||
};
|
};
|
||||||
|
|
||||||
InstructionVisualizer Instruction::engine[256] = {
|
InstructionFormatter Instruction::engine[256] = {
|
||||||
//Integer
|
//Integer
|
||||||
INST_HANDLE(IADD_RS)
|
INST_HANDLE(IADD_RS)
|
||||||
INST_HANDLE(IADD_M)
|
INST_HANDLE(IADD_M)
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace randomx {
|
||||||
|
|
||||||
class Instruction;
|
class Instruction;
|
||||||
|
|
||||||
typedef void(Instruction::*InstructionVisualizer)(std::ostream&) const;
|
typedef void(Instruction::*InstructionFormatter)(std::ostream&) const;
|
||||||
|
|
||||||
namespace InstructionType {
|
namespace InstructionType {
|
||||||
constexpr int IADD_RS = 0;
|
constexpr int IADD_RS = 0;
|
||||||
|
@ -71,9 +71,6 @@ namespace randomx {
|
||||||
|
|
||||||
class Instruction {
|
class Instruction {
|
||||||
public:
|
public:
|
||||||
uint8_t opcode;
|
|
||||||
uint8_t dst;
|
|
||||||
uint8_t src;
|
|
||||||
uint32_t getImm32() const {
|
uint32_t getImm32() const {
|
||||||
return load32(&imm32);
|
return load32(&imm32);
|
||||||
}
|
}
|
||||||
|
@ -102,17 +99,20 @@ namespace randomx {
|
||||||
void setMod(uint8_t val) {
|
void setMod(uint8_t val) {
|
||||||
mod = val;
|
mod = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t opcode;
|
||||||
|
uint8_t dst;
|
||||||
|
uint8_t src;
|
||||||
private:
|
private:
|
||||||
uint8_t mod;
|
uint8_t mod;
|
||||||
uint32_t imm32;
|
uint32_t imm32;
|
||||||
|
|
||||||
void print(std::ostream&) const;
|
void print(std::ostream&) const;
|
||||||
static const char* names[256];
|
static const char* names[256];
|
||||||
static InstructionVisualizer engine[256];
|
static InstructionFormatter engine[256];
|
||||||
|
|
||||||
void genAddressReg(std::ostream& os) const;
|
void genAddressReg(std::ostream& os) const;
|
||||||
void genAddressImm(std::ostream& os) const;
|
void genAddressImm(std::ostream& os) const;
|
||||||
void genAddressRegDst(std::ostream&) const;
|
void genAddressRegDst(std::ostream&) const;
|
||||||
|
|
||||||
void h_IADD_RS(std::ostream&) const;
|
void h_IADD_RS(std::ostream&) const;
|
||||||
void h_IADD_M(std::ostream&) const;
|
void h_IADD_M(std::ostream&) const;
|
||||||
void h_IADD_RC(std::ostream&) const;
|
void h_IADD_RC(std::ostream&) const;
|
||||||
|
@ -152,6 +152,6 @@ namespace randomx {
|
||||||
void h_NOP(std::ostream&) const;
|
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");
|
||||||
|
|
||||||
}
|
}
|
|
@ -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<http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "Program.hpp"
|
|
||||||
#include "hashAes1Rx4.hpp"
|
|
||||||
|
|
||||||
namespace RandomX {
|
|
||||||
template<size_t PROGRAM_SIZE>
|
|
||||||
void ProgramBase::print(std::ostream& os) const {
|
|
||||||
for (int i = 0; i < RANDOMX_PROGRAM_SIZE; ++i) {
|
|
||||||
auto instr = programBuffer[i];
|
|
||||||
os << instr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -22,7 +22,7 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "Instruction.hpp"
|
#include "instruction.hpp"
|
||||||
#include "blake2/endian.h"
|
#include "blake2/endian.h"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
@ -58,5 +58,5 @@ namespace randomx {
|
||||||
Instruction programBuffer[RANDOMX_PROGRAM_SIZE];
|
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");
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "softAes.h"
|
#include "soft_aes.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Calculate a 512-bit hash of 'input' using 4 lanes of AES.
|
Calculate a 512-bit hash of 'input' using 4 lanes of AES.
|
|
@ -17,7 +17,9 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "softAes.h"
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
template<bool softAes>
|
template<bool softAes>
|
||||||
void hashAes1Rx4(const void *input, size_t inputSize, void *hash);
|
void hashAes1Rx4(const void *input, size_t inputSize, void *hash);
|
|
@ -20,8 +20,8 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "allocator.hpp"
|
#include "allocator.hpp"
|
||||||
#include "virtualMemory.hpp"
|
#include "intrin_portable.h"
|
||||||
#include "intrinPortable.h"
|
#include "virtual_memory.hpp"
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
|
@ -19,11 +19,11 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
//#define TRACE
|
//#define TRACE
|
||||||
|
|
||||||
#include <climits>
|
#include <climits>
|
||||||
#include "AssemblyGeneratorX86.hpp"
|
#include "assembly_generator_x86.hpp"
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "reciprocal.h"
|
#include "reciprocal.h"
|
||||||
#include "Program.hpp"
|
#include "program.hpp"
|
||||||
#include "superscalarGenerator.hpp"
|
#include "superscalar.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ namespace randomx {
|
||||||
asmCode << "mov " << regR[instr.dst] << ", rdx" << std::endl;
|
asmCode << "mov " << regR[instr.dst] << ", rdx" << std::endl;
|
||||||
break;
|
break;
|
||||||
case SuperscalarInstructionType::IMUL_RCP:
|
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;
|
asmCode << "imul " << regR[instr.dst] << ", rax" << std::endl;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -210,7 +210,7 @@ namespace randomx {
|
||||||
asmCode << regR[instr.dst] << " = smulh(" << regR[instr.dst] << ", " << regR[instr.src] << ");" << std::endl;
|
asmCode << regR[instr.dst] << " = smulh(" << regR[instr.dst] << ", " << regR[instr.src] << ");" << std::endl;
|
||||||
break;
|
break;
|
||||||
case SuperscalarInstructionType::IMUL_RCP:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
UNREACHABLE;
|
UNREACHABLE;
|
||||||
|
@ -477,7 +477,7 @@ namespace randomx {
|
||||||
if (instr.getImm32() != 0) {
|
if (instr.getImm32() != 0) {
|
||||||
registerUsage[instr.dst] = i;
|
registerUsage[instr.dst] = i;
|
||||||
uint32_t divisor = instr.getImm32();
|
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;
|
asmCode << "\timul " << regR[instr.dst] << ", rax" << std::endl;
|
||||||
traceint(instr);
|
traceint(instr);
|
||||||
}
|
}
|
||||||
|
@ -691,7 +691,7 @@ namespace randomx {
|
||||||
tracenop(instr);
|
tracenop(instr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "instructionWeights.hpp"
|
#include "instruction_weights.hpp"
|
||||||
#define INST_HANDLE(x) REPN(&AssemblyGeneratorX86::h_##x, WT(x))
|
#define INST_HANDLE(x) REPN(&AssemblyGeneratorX86::h_##x, WT(x))
|
||||||
|
|
||||||
InstructionGenerator AssemblyGeneratorX86::engine[256] = {
|
InstructionGenerator AssemblyGeneratorX86::engine[256] = {
|
|
@ -19,9 +19,6 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Instruction.hpp"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "common.hpp"
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
@ -29,6 +26,7 @@ namespace randomx {
|
||||||
class Program;
|
class Program;
|
||||||
class SuperscalarProgram;
|
class SuperscalarProgram;
|
||||||
class AssemblyGeneratorX86;
|
class AssemblyGeneratorX86;
|
||||||
|
class Instruction;
|
||||||
|
|
||||||
typedef void(AssemblyGeneratorX86::*InstructionGenerator)(Instruction&, int);
|
typedef void(AssemblyGeneratorX86::*InstructionGenerator)(Instruction&, int);
|
||||||
|
|
||||||
|
@ -41,22 +39,15 @@ namespace randomx {
|
||||||
os << asmCode.rdbuf();
|
os << asmCode.rdbuf();
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
static InstructionGenerator engine[256];
|
|
||||||
std::stringstream asmCode;
|
|
||||||
int registerUsage[8];
|
|
||||||
|
|
||||||
void genAddressReg(Instruction&, const char*);
|
void genAddressReg(Instruction&, const char*);
|
||||||
void genAddressRegDst(Instruction&, int);
|
void genAddressRegDst(Instruction&, int);
|
||||||
int32_t genAddressImm(Instruction&);
|
int32_t genAddressImm(Instruction&);
|
||||||
int getConditionRegister();
|
int getConditionRegister();
|
||||||
void handleCondition(Instruction&, int);
|
void handleCondition(Instruction&, int);
|
||||||
|
|
||||||
void generateCode(Instruction&, int);
|
void generateCode(Instruction&, int);
|
||||||
|
|
||||||
void traceint(Instruction&);
|
void traceint(Instruction&);
|
||||||
void traceflt(Instruction&);
|
void traceflt(Instruction&);
|
||||||
void tracenop(Instruction&);
|
void tracenop(Instruction&);
|
||||||
|
|
||||||
void h_IADD_RS(Instruction&, int);
|
void h_IADD_RS(Instruction&, int);
|
||||||
void h_IADD_M(Instruction&, int);
|
void h_IADD_M(Instruction&, int);
|
||||||
void h_IADD_RC(Instruction&, int);
|
void h_IADD_RC(Instruction&, int);
|
||||||
|
@ -94,5 +85,9 @@ namespace randomx {
|
||||||
void h_ISTORE(Instruction&, int);
|
void h_ISTORE(Instruction&, int);
|
||||||
void h_FSTORE(Instruction&, int);
|
void h_FSTORE(Instruction&, int);
|
||||||
void h_NOP(Instruction&, int);
|
void h_NOP(Instruction&, int);
|
||||||
|
|
||||||
|
static InstructionGenerator engine[256];
|
||||||
|
std::stringstream asmCode;
|
||||||
|
int registerUsage[8];
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -20,15 +20,16 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "blake2/blake2.h"
|
#include "blake2/blake2.h"
|
||||||
#include "blake2/endian.h"
|
#include "blake2/endian.h"
|
||||||
#include "Blake2Generator.hpp"
|
#include "blake2_generator.hpp"
|
||||||
#include "common.hpp"
|
|
||||||
|
|
||||||
namespace randomx {
|
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));
|
memset(data, 0, sizeof(data));
|
||||||
memcpy(data, seed, SeedSize);
|
memcpy(data, seed, seedSize > maxSeedSize ? maxSeedSize : seedSize);
|
||||||
store32(&data[60], nonce);
|
store32(&data[maxSeedSize], nonce);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Blake2Generator::getByte() {
|
uint8_t Blake2Generator::getByte() {
|
|
@ -18,19 +18,20 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
||||||
class Blake2Generator {
|
class Blake2Generator {
|
||||||
public:
|
public:
|
||||||
Blake2Generator(const void* seed, int nonce);
|
Blake2Generator(const void* seed, size_t seedSize, int nonce = 0);
|
||||||
uint8_t getByte();
|
uint8_t getByte();
|
||||||
uint32_t getInt32();
|
uint32_t getInt32();
|
||||||
private:
|
private:
|
||||||
|
void checkData(const size_t);
|
||||||
|
|
||||||
uint8_t data[64];
|
uint8_t data[64];
|
||||||
size_t dataIndex;
|
size_t dataIndex;
|
||||||
|
|
||||||
void checkData(const size_t);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -17,6 +17,12 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* 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 <new>
|
#include <new>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
@ -26,9 +32,9 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "dataset.hpp"
|
#include "dataset.hpp"
|
||||||
#include "virtualMemory.hpp"
|
#include "virtual_memory.hpp"
|
||||||
#include "superscalarGenerator.hpp"
|
#include "superscalar.hpp"
|
||||||
#include "Blake2Generator.hpp"
|
#include "blake2_generator.hpp"
|
||||||
#include "reciprocal.h"
|
#include "reciprocal.h"
|
||||||
#include "blake2/endian.h"
|
#include "blake2/endian.h"
|
||||||
#include "argon2.h"
|
#include "argon2.h"
|
||||||
|
@ -100,13 +106,13 @@ void randomx_cache::initialize(const void *seed, size_t seedSize) {
|
||||||
fill_memory_blocks(&instance);
|
fill_memory_blocks(&instance);
|
||||||
|
|
||||||
reciprocalCache.clear();
|
reciprocalCache.clear();
|
||||||
randomx::Blake2Generator gen(seed, 1000);
|
randomx::Blake2Generator gen(seed, seedSize, 1000); //TODO
|
||||||
for (int i = 0; i < RANDOMX_CACHE_ACCESSES; ++i) {
|
for (int i = 0; i < RANDOMX_CACHE_ACCESSES; ++i) {
|
||||||
randomx::generateSuperscalar(programs[i], gen);
|
randomx::generateSuperscalar(programs[i], gen);
|
||||||
for (unsigned j = 0; j < programs[i].getSize(); ++j) {
|
for (unsigned j = 0; j < programs[i].getSize(); ++j) {
|
||||||
auto& instr = programs[i](j);
|
auto& instr = programs[i](j);
|
||||||
if (instr.opcode == randomx::SuperscalarInstructionType::IMUL_RCP) {
|
if (instr.opcode == randomx::SuperscalarInstructionType::IMUL_RCP) {
|
||||||
auto rcp = reciprocal(instr.getImm32());
|
auto rcp = randomx_reciprocal(instr.getImm32());
|
||||||
instr.setImm32(reciprocalCache.size());
|
instr.setImm32(reciprocalCache.size());
|
||||||
reciprocalCache.push_back(rcp);
|
reciprocalCache.push_back(rcp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,29 +21,26 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "intrinPortable.h"
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "randomx.h"
|
|
||||||
#include "Program.hpp"
|
|
||||||
#include "superscalar_program.hpp"
|
#include "superscalar_program.hpp"
|
||||||
#include "JitCompilerX86.hpp"
|
#include "jit_compiler_x86.hpp"
|
||||||
#include "allocator.hpp"
|
#include "allocator.hpp"
|
||||||
|
|
||||||
|
/* Global scope for C binding */
|
||||||
struct randomx_dataset {
|
struct randomx_dataset {
|
||||||
virtual ~randomx_dataset() = 0;
|
virtual ~randomx_dataset() = 0;
|
||||||
virtual bool allocate() = 0;
|
virtual bool allocate() = 0;
|
||||||
uint8_t* memory = nullptr;
|
uint8_t* memory = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Global scope for C binding */
|
||||||
struct randomx_cache : public randomx_dataset {
|
struct randomx_cache : public randomx_dataset {
|
||||||
virtual randomx::DatasetInitFunc getInitFunc() = 0;
|
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];
|
randomx::SuperscalarProgram programs[RANDOMX_CACHE_ACCESSES];
|
||||||
std::vector<uint64_t> reciprocalCache;
|
std::vector<uint64_t> reciprocalCache;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
||||||
template<class Allocator>
|
template<class Allocator>
|
||||||
|
|
|
@ -101,4 +101,4 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#define REPCASE256(x) REPCASE128(x) REPCASE128(x)
|
#define REPCASE256(x) REPCASE128(x) REPCASE128(x)
|
||||||
#define REPCASENX(x,N) REPCASE##N(x)
|
#define REPCASENX(x,N) REPCASE##N(x)
|
||||||
#define REPCASEN(x,N) REPCASENX(x,N)
|
#define REPCASEN(x,N) REPCASENX(x,N)
|
||||||
#define CASE_REP(x) REPCASEN(x, WT(x))
|
#define CASE_REP(x) REPCASEN(x, WT(x))
|
|
@ -16,9 +16,9 @@ GNU General Public License for more details.
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
#include "intrinPortable.h"
|
|
||||||
#include "blake2/endian.h"
|
|
||||||
#pragma STDC FENV_ACCESS on
|
#pragma STDC FENV_ACCESS on
|
||||||
#include <cfenv>
|
#include <cfenv>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
@ -26,6 +26,8 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#endif
|
#endif
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
#include "intrin_portable.h"
|
||||||
|
#include "blake2/endian.h"
|
||||||
|
|
||||||
#if defined(__SIZEOF_INT128__)
|
#if defined(__SIZEOF_INT128__)
|
||||||
typedef unsigned __int128 uint128_t;
|
typedef unsigned __int128 uint128_t;
|
||||||
|
@ -87,14 +89,14 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
uint64_t rotr(uint64_t a, int b) {
|
uint64_t rotr(uint64_t a, int b) {
|
||||||
return (a >> b) | (a << (64 - b));
|
return (a >> b) | (a << (64 - b));
|
||||||
}
|
}
|
||||||
#define HAS_ROTR
|
#define HAVE_ROTR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_ROTL
|
#ifndef HAVE_ROTL
|
||||||
uint64_t rotl(uint64_t a, int b) {
|
uint64_t rotl(uint64_t a, int b) {
|
||||||
return (a << b) | (a >> (64 - b));
|
return (a << b) | (a >> (64 - b));
|
||||||
}
|
}
|
||||||
#define HAS_ROTL
|
#define HAVE_ROTL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_MULH
|
#ifndef HAVE_MULH
|
||||||
|
@ -126,11 +128,6 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#define HAVE_SMULH
|
#define HAVE_SMULH
|
||||||
#endif
|
#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
|
#if __GNUC__ >= 5
|
||||||
#undef __has_builtin
|
#undef __has_builtin
|
||||||
#define __has_builtin(x) 1
|
#define __has_builtin(x) 1
|
|
@ -330,7 +330,6 @@ __m128d ieee_set_exponent(__m128d x) {
|
||||||
}
|
}
|
||||||
|
|
||||||
double loadDoublePortable(const void* addr);
|
double loadDoublePortable(const void* addr);
|
||||||
|
|
||||||
uint64_t mulh(uint64_t, uint64_t);
|
uint64_t mulh(uint64_t, uint64_t);
|
||||||
int64_t smulh(int64_t, int64_t);
|
int64_t smulh(int64_t, int64_t);
|
||||||
uint64_t rotl(uint64_t, int);
|
uint64_t rotl(uint64_t, int);
|
|
@ -17,20 +17,14 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cstring>
|
|
||||||
#include <climits>
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include "JitCompilerX86.hpp"
|
#include "jit_compiler_x86.hpp"
|
||||||
#include "Program.hpp"
|
|
||||||
#include "reciprocal.h"
|
|
||||||
#include "virtualMemory.hpp"
|
|
||||||
#include "intrinPortable.h"
|
|
||||||
|
|
||||||
#define RANDOMX_JUMP
|
#define RANDOMX_JUMP
|
||||||
|
|
||||||
|
#if !defined(_M_X64) && !defined(__x86_64__)
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
||||||
#if !defined(_M_X64) && !defined(__x86_64__)
|
|
||||||
JitCompilerX86::JitCompilerX86() {
|
JitCompilerX86::JitCompilerX86() {
|
||||||
throw std::runtime_error("JIT compiler only supports x86-64 CPUs");
|
throw std::runtime_error("JIT compiler only supports x86-64 CPUs");
|
||||||
}
|
}
|
||||||
|
@ -46,8 +40,19 @@ namespace randomx {
|
||||||
size_t JitCompilerX86::getCodeSize() {
|
size_t JitCompilerX86::getCodeSize() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <climits>
|
||||||
|
#include "jit_compiler_x86_static.hpp"
|
||||||
|
#include "superscalar.hpp"
|
||||||
|
#include "program.hpp"
|
||||||
|
#include "reciprocal.h"
|
||||||
|
#include "virtual_memory.hpp"
|
||||||
|
|
||||||
|
namespace randomx {
|
||||||
/*
|
/*
|
||||||
|
|
||||||
REGISTER ALLOCATION:
|
REGISTER ALLOCATION:
|
||||||
|
@ -87,9 +92,6 @@ namespace randomx {
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "JitCompilerX86-static.hpp"
|
|
||||||
#include "superscalarGenerator.hpp"
|
|
||||||
|
|
||||||
#define NOP_TEST true
|
#define NOP_TEST true
|
||||||
|
|
||||||
const uint8_t* codePrologue = (uint8_t*)&randomx_program_prologue;
|
const uint8_t* codePrologue = (uint8_t*)&randomx_program_prologue;
|
||||||
|
@ -675,7 +677,7 @@ namespace randomx {
|
||||||
}
|
}
|
||||||
registerUsage[instr.dst] = i;
|
registerUsage[instr.dst] = i;
|
||||||
emit(MOV_RAX_I);
|
emit(MOV_RAX_I);
|
||||||
emit64(reciprocal(instr.getImm32()));
|
emit64(randomx_reciprocal(instr.getImm32()));
|
||||||
emit(REX_IMUL_RM);
|
emit(REX_IMUL_RM);
|
||||||
emitByte(0xc0 + 8 * instr.dst);
|
emitByte(0xc0 + 8 * instr.dst);
|
||||||
}
|
}
|
||||||
|
@ -1017,7 +1019,7 @@ namespace randomx {
|
||||||
emitByte(0x90);
|
emitByte(0x90);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "instructionWeights.hpp"
|
#include "instruction_weights.hpp"
|
||||||
#define INST_HANDLE(x) REPN(&JitCompilerX86::h_##x, WT(x))
|
#define INST_HANDLE(x) REPN(&JitCompilerX86::h_##x, WT(x))
|
||||||
|
|
||||||
InstructionGeneratorX86 JitCompilerX86::engine[256] = {
|
InstructionGeneratorX86 JitCompilerX86::engine[256] = {
|
|
@ -19,11 +19,10 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common.hpp"
|
#include <cstdint>
|
||||||
#include "Instruction.hpp"
|
|
||||||
#include "superscalar_program.hpp"
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "common.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
||||||
|
@ -31,6 +30,7 @@ namespace randomx {
|
||||||
class ProgramConfiguration;
|
class ProgramConfiguration;
|
||||||
class SuperscalarProgram;
|
class SuperscalarProgram;
|
||||||
class JitCompilerX86;
|
class JitCompilerX86;
|
||||||
|
class Instruction;
|
||||||
|
|
||||||
typedef void(JitCompilerX86::*InstructionGeneratorX86)(Instruction&, int);
|
typedef void(JitCompilerX86::*InstructionGeneratorX86)(Instruction&, int);
|
||||||
|
|
|
@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void randomx_program_prologue();
|
void randomx_program_prologue();
|
||||||
void randomx_program_loop_begin();
|
void randomx_program_loop_begin();
|
||||||
|
@ -36,4 +38,4 @@ extern "C" {
|
||||||
void randomx_sshash_end();
|
void randomx_sshash_end();
|
||||||
void randomx_sshash_init();
|
void randomx_sshash_init();
|
||||||
void randomx_program_end();
|
void randomx_program_end();
|
||||||
}
|
}
|
|
@ -19,7 +19,7 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
//#define TRACE
|
//#define TRACE
|
||||||
|
|
||||||
//#include "AssemblyGeneratorX86.hpp"
|
//#include "AssemblyGeneratorX86.hpp"
|
||||||
#include "Stopwatch.hpp"
|
#include "stopwatch.hpp"
|
||||||
//#include "blake2/blake2.h"
|
//#include "blake2/blake2.h"
|
||||||
#include "blake2/endian.h"
|
#include "blake2/endian.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
|
@ -19,12 +19,10 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "randomx.h"
|
#include "randomx.h"
|
||||||
#include "dataset.hpp"
|
#include "dataset.hpp"
|
||||||
#include "VirtualMachine.hpp"
|
#include "vm_interpreted.hpp"
|
||||||
#include "./InterpretedVirtualMachine.hpp"
|
#include "vm_interpreted_light.hpp"
|
||||||
#include "./InterpretedLightVirtualMachine.hpp"
|
#include "vm_compiled.hpp"
|
||||||
#include "./CompiledVirtualMachine.hpp"
|
#include "vm_compiled_light.hpp"
|
||||||
#include "./CompiledLightVirtualMachine.hpp"
|
|
||||||
#include "virtualMemory.hpp"
|
|
||||||
#include "blake2/blake2.h"
|
#include "blake2/blake2.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
|
@ -19,7 +19,6 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "reciprocal.h"
|
#include "reciprocal.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Calculates rcp = 2**x / divisor for highest integer x such that rcp < 2**64.
|
Calculates rcp = 2**x / divisor for highest integer x such that rcp < 2**64.
|
||||||
|
|
||||||
|
@ -34,7 +33,7 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
ret
|
ret
|
||||||
|
|
||||||
*/
|
*/
|
||||||
uint64_t reciprocal(uint64_t divisor) {
|
uint64_t randomx_reciprocal(uint64_t divisor) {
|
||||||
|
|
||||||
const uint64_t p2exp63 = 1ULL << 63;
|
const uint64_t p2exp63 = 1ULL << 63;
|
||||||
|
|
||||||
|
|
|
@ -18,13 +18,14 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint64_t reciprocal(uint64_t);
|
uint64_t randomx_reciprocal(uint64_t);
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "softAes.h"
|
#include "soft_aes.h"
|
||||||
|
|
||||||
alignas(16) const uint8_t sbox[256] = {
|
alignas(16) const uint8_t sbox[256] = {
|
||||||
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
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) {
|
__m128i soft_aesenc(__m128i in, __m128i key) {
|
||||||
uint32_t s0, s1, s2, s3;
|
uint32_t s0, s1, s2, s3;
|
||||||
|
|
||||||
s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xFF));
|
s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xff));
|
||||||
s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xAA));
|
s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xaa));
|
||||||
s2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0x55));
|
s2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0x55));
|
||||||
s3 = _mm_cvtsi128_si32(in);
|
s3 = _mm_cvtsi128_si32(in);
|
||||||
|
|
||||||
|
@ -339,8 +339,8 @@ __m128i soft_aesenc(__m128i in, __m128i key) {
|
||||||
__m128i soft_aesdec(__m128i in, __m128i key) {
|
__m128i soft_aesdec(__m128i in, __m128i key) {
|
||||||
uint32_t s0, s1, s2, s3;
|
uint32_t s0, s1, s2, s3;
|
||||||
|
|
||||||
s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xFF));
|
s0 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xff));
|
||||||
s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xAA));
|
s1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0xaa));
|
||||||
s2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0x55));
|
s2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(in, 0x55));
|
||||||
s3 = _mm_cvtsi128_si32(in);
|
s3 = _mm_cvtsi128_si32(in);
|
||||||
|
|
|
@ -18,8 +18,9 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "intrinPortable.h"
|
#include "intrin_portable.h"
|
||||||
|
|
||||||
__m128i soft_aesenc(__m128i in, __m128i key);
|
__m128i soft_aesenc(__m128i in, __m128i key);
|
||||||
|
|
|
@ -25,8 +25,8 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include "superscalarGenerator.hpp"
|
#include "superscalar.hpp"
|
||||||
#include "intrinPortable.h"
|
#include "intrin_portable.h"
|
||||||
#include "reciprocal.h"
|
#include "reciprocal.h"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
@ -885,11 +885,11 @@ namespace randomx {
|
||||||
if (reciprocals != nullptr)
|
if (reciprocals != nullptr)
|
||||||
r[instr.dst] *= (*reciprocals)[instr.getImm32()];
|
r[instr.dst] *= (*reciprocals)[instr.getImm32()];
|
||||||
else
|
else
|
||||||
r[instr.dst] *= reciprocal(instr.getImm32());
|
r[instr.dst] *= randomx_reciprocal(instr.getImm32());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
UNREACHABLE;
|
UNREACHABLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -18,9 +18,11 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "superscalar_program.hpp"
|
|
||||||
#include "Blake2Generator.hpp"
|
#include <cstdint>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "superscalar_program.hpp"
|
||||||
|
#include "blake2_generator.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
// Intel Ivy Bridge reference
|
// Intel Ivy Bridge reference
|
||||||
|
@ -45,5 +47,5 @@ namespace randomx {
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateSuperscalar(SuperscalarProgram& prog, Blake2Generator& gen);
|
void generateSuperscalar(SuperscalarProgram& prog, Blake2Generator& gen);
|
||||||
void executeSuperscalar(int_reg_t(&r)[8], SuperscalarProgram& prog, std::vector<uint64_t> *reciprocals = nullptr);
|
void executeSuperscalar(uint64_t(&r)[8], SuperscalarProgram& prog, std::vector<uint64_t> *reciprocals = nullptr);
|
||||||
}
|
}
|
|
@ -20,7 +20,7 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include "Instruction.hpp"
|
#include "instruction.hpp"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
|
@ -17,13 +17,13 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "VirtualMachine.hpp"
|
#include "virtual_machine.hpp"
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "hashAes1Rx4.hpp"
|
#include "aes_hash.hpp"
|
||||||
#include "blake2/blake2.h"
|
#include "blake2/blake2.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include "intrinPortable.h"
|
#include "intrin_portable.h"
|
||||||
#include "allocator.hpp"
|
#include "allocator.hpp"
|
||||||
|
|
||||||
randomx_vm::~randomx_vm() {
|
randomx_vm::~randomx_vm() {
|
|
@ -21,8 +21,7 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "dataset.hpp"
|
#include "program.hpp"
|
||||||
#include "Program.hpp"
|
|
||||||
|
|
||||||
/* Global namespace for C binding */
|
/* Global namespace for C binding */
|
||||||
class randomx_vm {
|
class randomx_vm {
|
||||||
|
@ -38,7 +37,6 @@ public:
|
||||||
randomx::RegisterFile *getRegisterFile() {
|
randomx::RegisterFile *getRegisterFile() {
|
||||||
return ®
|
return ®
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initialize();
|
void initialize();
|
||||||
alignas(64) randomx::Program program;
|
alignas(64) randomx::Program program;
|
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "virtualMemory.hpp"
|
#include "virtual_memory.hpp"
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "CompiledVirtualMachine.hpp"
|
#include "vm_compiled.hpp"
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
|
@ -20,8 +20,11 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
#include "VirtualMachine.hpp"
|
#include <cstdint>
|
||||||
#include "JitCompilerX86.hpp"
|
#include "virtual_machine.hpp"
|
||||||
|
#include "jit_compiler_x86.hpp"
|
||||||
|
#include "allocator.hpp"
|
||||||
|
#include "dataset.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "CompiledLightVirtualMachine.hpp"
|
#include "vm_compiled_light.hpp"
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
|
@ -18,11 +18,9 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
//#define TRACEVM
|
|
||||||
#include <new>
|
#include <new>
|
||||||
#include "CompiledVirtualMachine.hpp"
|
#include "vm_compiled.hpp"
|
||||||
#include "JitCompilerX86.hpp"
|
|
||||||
#include "intrinPortable.h"
|
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
|
@ -16,20 +16,21 @@ GNU General Public License for more details.
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define TRACE
|
//#define TRACE
|
||||||
//#define FPUCHECK
|
//#define FPUCHECK
|
||||||
#define RANDOMX_JUMP
|
#define RANDOMX_JUMP
|
||||||
#include "InterpretedVirtualMachine.hpp"
|
|
||||||
#include "dataset.hpp"
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cfloat>
|
#include <cfloat>
|
||||||
#include <thread>
|
|
||||||
#include <climits>
|
#include <climits>
|
||||||
#include "intrinPortable.h"
|
#include "vm_interpreted.hpp"
|
||||||
|
#include "dataset.hpp"
|
||||||
|
#include "intrin_portable.h"
|
||||||
#include "reciprocal.h"
|
#include "reciprocal.h"
|
||||||
|
|
||||||
#ifdef FPUCHECK
|
#ifdef FPUCHECK
|
||||||
|
@ -465,7 +466,7 @@ namespace randomx {
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
#include "instructionWeights.hpp"
|
#include "instruction_weights.hpp"
|
||||||
|
|
||||||
template<class Allocator, bool softAes>
|
template<class Allocator, bool softAes>
|
||||||
void InterpretedVm<Allocator, softAes>::precompileProgram(int_reg_t(&r)[8], __m128d (&f)[4], __m128d (&e)[4], __m128d (&a)[4]) {
|
void InterpretedVm<Allocator, softAes>::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;
|
auto dst = instr.dst % RegistersCount;
|
||||||
ibc.type = InstructionType::IMUL_R;
|
ibc.type = InstructionType::IMUL_R;
|
||||||
ibc.idst = &r[dst];
|
ibc.idst = &r[dst];
|
||||||
ibc.imm = reciprocal(divisor);
|
ibc.imm = randomx_reciprocal(divisor);
|
||||||
ibc.isrc = &ibc.imm;
|
ibc.isrc = &ibc.imm;
|
||||||
registerUsage[instr.dst] = i;
|
registerUsage[instr.dst] = i;
|
||||||
}
|
}
|
|
@ -20,10 +20,11 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
#include "VirtualMachine.hpp"
|
|
||||||
#include "Program.hpp"
|
|
||||||
#include "intrinPortable.h"
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "common.hpp"
|
||||||
|
#include "virtual_machine.hpp"
|
||||||
|
#include "intrin_portable.h"
|
||||||
|
#include "allocator.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "InterpretedLightVirtualMachine.hpp"
|
#include "vm_interpreted_light.hpp"
|
||||||
#include "dataset.hpp"
|
#include "dataset.hpp"
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
|
@ -20,8 +20,7 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
#include "InterpretedVirtualMachine.hpp"
|
#include "vm_interpreted.hpp"
|
||||||
#include "superscalar_program.hpp"
|
|
||||||
|
|
||||||
namespace randomx {
|
namespace randomx {
|
||||||
|
|
|
@ -127,60 +127,58 @@
|
||||||
<ClCompile Include="..\src\allocator.cpp" />
|
<ClCompile Include="..\src\allocator.cpp" />
|
||||||
<ClCompile Include="..\src\argon2_core.c" />
|
<ClCompile Include="..\src\argon2_core.c" />
|
||||||
<ClCompile Include="..\src\argon2_ref.c" />
|
<ClCompile Include="..\src\argon2_ref.c" />
|
||||||
<ClCompile Include="..\src\AssemblyGeneratorX86.cpp" />
|
<ClCompile Include="..\src\assembly_generator_x86.cpp" />
|
||||||
<ClCompile Include="..\src\Blake2Generator.cpp" />
|
<ClCompile Include="..\src\blake2_benerator.cpp" />
|
||||||
<ClCompile Include="..\src\blake2\blake2b.c" />
|
<ClCompile Include="..\src\blake2\blake2b.c" />
|
||||||
<ClCompile Include="..\src\CompiledLightVirtualMachine.cpp" />
|
<ClCompile Include="..\src\vm_compiled_light.cpp" />
|
||||||
<ClCompile Include="..\src\CompiledVirtualMachine.cpp" />
|
<ClCompile Include="..\src\vm_compiled.cpp" />
|
||||||
<ClCompile Include="..\src\dataset.cpp" />
|
<ClCompile Include="..\src\dataset.cpp" />
|
||||||
<ClCompile Include="..\src\hashAes1Rx4.cpp" />
|
<ClCompile Include="..\src\aes_hash.cpp" />
|
||||||
<ClCompile Include="..\src\Instruction.cpp" />
|
<ClCompile Include="..\src\instruction.cpp" />
|
||||||
<ClCompile Include="..\src\instructionsPortable.cpp" />
|
<ClCompile Include="..\src\instructions_portable.cpp" />
|
||||||
<ClCompile Include="..\src\InterpretedLightVirtualMachine.cpp" />
|
<ClCompile Include="..\src\vm_interpreted_light.cpp" />
|
||||||
<ClCompile Include="..\src\InterpretedVirtualMachine.cpp" />
|
<ClCompile Include="..\src\vm_interpreted.cpp" />
|
||||||
<ClCompile Include="..\src\JitCompilerX86.cpp" />
|
<ClCompile Include="..\src\jit_compiler_x86.cpp" />
|
||||||
<ClCompile Include="..\src\randomx.cpp" />
|
<ClCompile Include="..\src\randomx.cpp" />
|
||||||
<ClCompile Include="..\src\superscalarGenerator.cpp" />
|
<ClCompile Include="..\src\superscalar.cpp" />
|
||||||
<ClCompile Include="..\src\main.cpp" />
|
<ClCompile Include="..\src\main.cpp" />
|
||||||
<ClCompile Include="..\src\reciprocal.c" />
|
<ClCompile Include="..\src\reciprocal.c" />
|
||||||
<ClCompile Include="..\src\softAes.cpp" />
|
<ClCompile Include="..\src\soft_aes.cpp" />
|
||||||
<ClCompile Include="..\src\VirtualMachine.cpp" />
|
<ClCompile Include="..\src\virtual_machine.cpp" />
|
||||||
<ClCompile Include="..\src\virtualMemory.cpp" />
|
<ClCompile Include="..\src\virtual_memory.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<MASM Include="..\src\JitCompilerX86-static.asm" />
|
<MASM Include="..\src\jit_compiler_x86_staticc.asm" />
|
||||||
<MASM Include="..\src\squareHash.asm" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\allocator.hpp" />
|
<ClInclude Include="..\src\allocator.hpp" />
|
||||||
<ClInclude Include="..\src\argon2.h" />
|
<ClInclude Include="..\src\argon2.h" />
|
||||||
<ClInclude Include="..\src\argon2_core.h" />
|
<ClInclude Include="..\src\argon2_core.h" />
|
||||||
<ClInclude Include="..\src\AssemblyGeneratorX86.hpp" />
|
<ClInclude Include="..\src\assembly_generator_x86.hpp" />
|
||||||
<ClInclude Include="..\src\Blake2Generator.hpp" />
|
<ClInclude Include="..\src\blake2_generator.hpp" />
|
||||||
<ClInclude Include="..\src\catch.hpp" />
|
<ClInclude Include="..\src\catch.hpp" />
|
||||||
<ClInclude Include="..\src\common.hpp" />
|
<ClInclude Include="..\src\common.hpp" />
|
||||||
<ClInclude Include="..\src\CompiledLightVirtualMachine.hpp" />
|
<ClInclude Include="..\src\vm_compiled_light.hpp" />
|
||||||
<ClInclude Include="..\src\CompiledVirtualMachine.hpp" />
|
<ClInclude Include="..\src\vm_compiled.hpp" />
|
||||||
<ClInclude Include="..\src\configuration.h" />
|
<ClInclude Include="..\src\configuration.h" />
|
||||||
<ClInclude Include="..\src\dataset.hpp" />
|
<ClInclude Include="..\src\dataset.hpp" />
|
||||||
<ClInclude Include="..\src\hashAes1Rx4.hpp" />
|
<ClInclude Include="..\src\aes_hash.hpp" />
|
||||||
<ClInclude Include="..\src\Instruction.hpp" />
|
<ClInclude Include="..\src\instruction.hpp" />
|
||||||
<ClInclude Include="..\src\instructionWeights.hpp" />
|
<ClInclude Include="..\src\instruction_weights.hpp" />
|
||||||
<ClInclude Include="..\src\InterpretedLightVirtualMachine.hpp" />
|
<ClInclude Include="..\src\vm_interpreted_light.hpp" />
|
||||||
<ClInclude Include="..\src\InterpretedVirtualMachine.hpp" />
|
<ClInclude Include="..\src\vm_interpreted.hpp" />
|
||||||
<ClInclude Include="..\src\intrinPortable.h" />
|
<ClInclude Include="..\src\intrin_portable.h" />
|
||||||
<ClInclude Include="..\src\JitCompilerX86-static.hpp" />
|
<ClInclude Include="..\src\jit_compiler_x86_static.hpp" />
|
||||||
<ClInclude Include="..\src\JitCompilerX86.hpp" />
|
<ClInclude Include="..\src\jit_compiler_x86.hpp" />
|
||||||
<ClInclude Include="..\src\randomx.h" />
|
<ClInclude Include="..\src\randomx.h" />
|
||||||
<ClInclude Include="..\src\superscalarGenerator.hpp" />
|
<ClInclude Include="..\src\superscalar.hpp" />
|
||||||
<ClInclude Include="..\src\Program.hpp" />
|
<ClInclude Include="..\src\program.hpp" />
|
||||||
<ClInclude Include="..\src\reciprocal.h" />
|
<ClInclude Include="..\src\reciprocal.h" />
|
||||||
<ClInclude Include="..\src\softAes.h" />
|
<ClInclude Include="..\src\soft_aes.h" />
|
||||||
<ClInclude Include="..\src\squareHash.h" />
|
<ClInclude Include="..\src\stopwatch.hpp" />
|
||||||
<ClInclude Include="..\src\Stopwatch.hpp" />
|
|
||||||
<ClInclude Include="..\src\superscalar_program.hpp" />
|
<ClInclude Include="..\src\superscalar_program.hpp" />
|
||||||
<ClInclude Include="..\src\VirtualMachine.hpp" />
|
<ClInclude Include="..\src\virtual_machine.hpp" />
|
||||||
<ClInclude Include="..\src\virtualMemory.hpp" />
|
<ClInclude Include="..\src\virtual_memory.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
|
|
@ -24,69 +24,66 @@
|
||||||
<ClCompile Include="..\src\reciprocal.c">
|
<ClCompile Include="..\src\reciprocal.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\AssemblyGeneratorX86.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\CompiledLightVirtualMachine.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\CompiledVirtualMachine.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\dataset.cpp">
|
<ClCompile Include="..\src\dataset.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\hashAes1Rx4.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\Instruction.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\instructionsPortable.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\InterpretedVirtualMachine.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\JitCompilerX86.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\main.cpp">
|
<ClCompile Include="..\src\main.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\softAes.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\VirtualMachine.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\virtualMemory.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\blake2\blake2b.c">
|
<ClCompile Include="..\src\blake2\blake2b.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\Blake2Generator.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\superscalarGenerator.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\randomx.cpp">
|
<ClCompile Include="..\src\randomx.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\allocator.cpp">
|
<ClCompile Include="..\src\allocator.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\InterpretedLightVirtualMachine.cpp">
|
<ClCompile Include="..\src\assembly_generator_x86.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\blake2_benerator.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\vm_compiled_light.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\vm_compiled.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\aes_hash.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\instruction.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\instructions_portable.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\vm_interpreted_light.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\jit_compiler_x86.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\soft_aes.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\superscalar.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\virtual_machine.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\vm_interpreted.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\virtual_memory.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<MASM Include="..\src\JitCompilerX86-static.asm">
|
<MASM Include="..\src\jit_compiler_x86_staticc.asm">
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</MASM>
|
|
||||||
<MASM Include="..\src\squareHash.asm">
|
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</MASM>
|
</MASM>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -97,85 +94,82 @@
|
||||||
<ClInclude Include="..\src\argon2_core.h">
|
<ClInclude Include="..\src\argon2_core.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\AssemblyGeneratorX86.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\catch.hpp">
|
<ClInclude Include="..\src\catch.hpp">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\common.hpp">
|
<ClInclude Include="..\src\common.hpp">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\CompiledLightVirtualMachine.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\CompiledVirtualMachine.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\configuration.h">
|
<ClInclude Include="..\src\configuration.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\dataset.hpp">
|
<ClInclude Include="..\src\dataset.hpp">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\hashAes1Rx4.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\Instruction.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\instructionWeights.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\InterpretedVirtualMachine.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\intrinPortable.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\JitCompilerX86.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\JitCompilerX86-static.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\Program.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\reciprocal.h">
|
<ClInclude Include="..\src\reciprocal.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\softAes.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\squareHash.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\Stopwatch.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\VirtualMachine.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\virtualMemory.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\Blake2Generator.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\superscalarGenerator.hpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\randomx.h">
|
<ClInclude Include="..\src\randomx.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\allocator.hpp">
|
<ClInclude Include="..\src\allocator.hpp">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\InterpretedLightVirtualMachine.hpp">
|
<ClInclude Include="..\src\superscalar_program.hpp">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\superscalar_program.hpp">
|
<ClInclude Include="..\src\assembly_generator_x86.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\blake2_generator.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\aes_hash.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\instruction.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\instruction_weights.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\vm_compiled_light.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\vm_compiled.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\vm_interpreted_light.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\vm_interpreted.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\intrin_portable.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\jit_compiler_x86.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\jit_compiler_x86_static.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\program.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\soft_aes.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\stopwatch.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\virtual_machine.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\virtual_memory.hpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\superscalar.hpp">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
Loading…
Reference in a new issue