Monero
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
randomx::JitCompilerA64 Class Reference

#include <jit_compiler_a64.hpp>

Public Member Functions

 JitCompilerA64 ()
 
 ~JitCompilerA64 ()
 
void generateProgram (Program &, ProgramConfiguration &)
 
void generateProgramLight (Program &, ProgramConfiguration &, uint32_t)
 
template<size_t N>
void generateSuperscalarHash (SuperscalarProgram(&programs)[N], std::vector< uint64_t > &)
 
void generateDatasetInitCode ()
 
ProgramFuncgetProgramFunc ()
 
DatasetInitFuncgetDatasetInitFunc ()
 
uint8_tgetCode ()
 
size_t getCodeSize ()
 
void enableWriting ()
 
void enableExecution ()
 
void enableAll ()
 

Private Member Functions

void emitMovImmediate (uint32_t dst, uint32_t imm, uint8_t *code, uint32_t &codePos)
 
void emitAddImmediate (uint32_t dst, uint32_t src, uint32_t imm, uint8_t *code, uint32_t &codePos)
 
template<uint32_t tmp_reg>
void emitMemLoad (uint32_t dst, uint32_t src, Instruction &instr, uint8_t *code, uint32_t &codePos)
 
template<uint32_t tmp_reg_fp>
void emitMemLoadFP (uint32_t src, Instruction &instr, uint8_t *code, uint32_t &codePos)
 
void h_IADD_RS (Instruction &, uint32_t &)
 
void h_IADD_M (Instruction &, uint32_t &)
 
void h_ISUB_R (Instruction &, uint32_t &)
 
void h_ISUB_M (Instruction &, uint32_t &)
 
void h_IMUL_R (Instruction &, uint32_t &)
 
void h_IMUL_M (Instruction &, uint32_t &)
 
void h_IMULH_R (Instruction &, uint32_t &)
 
void h_IMULH_M (Instruction &, uint32_t &)
 
void h_ISMULH_R (Instruction &, uint32_t &)
 
void h_ISMULH_M (Instruction &, uint32_t &)
 
void h_IMUL_RCP (Instruction &, uint32_t &)
 
void h_INEG_R (Instruction &, uint32_t &)
 
void h_IXOR_R (Instruction &, uint32_t &)
 
void h_IXOR_M (Instruction &, uint32_t &)
 
void h_IROR_R (Instruction &, uint32_t &)
 
void h_IROL_R (Instruction &, uint32_t &)
 
void h_ISWAP_R (Instruction &, uint32_t &)
 
void h_FSWAP_R (Instruction &, uint32_t &)
 
void h_FADD_R (Instruction &, uint32_t &)
 
void h_FADD_M (Instruction &, uint32_t &)
 
void h_FSUB_R (Instruction &, uint32_t &)
 
void h_FSUB_M (Instruction &, uint32_t &)
 
void h_FSCAL_R (Instruction &, uint32_t &)
 
void h_FMUL_R (Instruction &, uint32_t &)
 
void h_FDIV_M (Instruction &, uint32_t &)
 
void h_FSQRT_R (Instruction &, uint32_t &)
 
void h_CBRANCH (Instruction &, uint32_t &)
 
void h_CFROUND (Instruction &, uint32_t &)
 
void h_ISTORE (Instruction &, uint32_t &)
 
void h_NOP (Instruction &, uint32_t &)
 

Static Private Member Functions

static void emit32 (uint32_t val, uint8_t *code, uint32_t &codePos)
 
static void emit64 (uint64_t val, uint8_t *code, uint32_t &codePos)
 

Private Attributes

uint32_t reg_changed_offset [8]
 
uint8_tcode
 
uint32_t literalPos
 
uint32_t num32bitLiterals
 

Static Private Attributes

static InstructionGeneratorA64 engine [256]
 

Constructor & Destructor Documentation

◆ JitCompilerA64()

randomx::JitCompilerA64::JitCompilerA64 ( )

◆ ~JitCompilerA64()

randomx::JitCompilerA64::~JitCompilerA64 ( )

Member Function Documentation

◆ emit32()

static void randomx::JitCompilerA64::emit32 ( uint32_t  val,
uint8_t code,
uint32_t codePos 
)
inlinestaticprivate

◆ emit64()

static void randomx::JitCompilerA64::emit64 ( uint64_t  val,
uint8_t code,
uint32_t codePos 
)
inlinestaticprivate

◆ emitAddImmediate()

void randomx::JitCompilerA64::emitAddImmediate ( uint32_t  dst,
uint32_t  src,
uint32_t  imm,
uint8_t code,
uint32_t codePos 
)
private

◆ emitMemLoad()

template<uint32_t tmp_reg>
void randomx::JitCompilerA64::emitMemLoad ( uint32_t  dst,
uint32_t  src,
Instruction instr,
uint8_t code,
uint32_t codePos 
)
private

◆ emitMemLoadFP()

template<uint32_t tmp_reg_fp>
void randomx::JitCompilerA64::emitMemLoadFP ( uint32_t  src,
Instruction instr,
uint8_t code,
uint32_t codePos 
)
private

◆ emitMovImmediate()

void randomx::JitCompilerA64::emitMovImmediate ( uint32_t  dst,
uint32_t  imm,
uint8_t code,
uint32_t codePos 
)
private

◆ enableAll()

void randomx::JitCompilerA64::enableAll ( )

◆ enableExecution()

void randomx::JitCompilerA64::enableExecution ( )

◆ enableWriting()

void randomx::JitCompilerA64::enableWriting ( )

◆ generateDatasetInitCode()

void randomx::JitCompilerA64::generateDatasetInitCode ( )
inline

◆ generateProgram()

void randomx::JitCompilerA64::generateProgram ( Program program,
ProgramConfiguration config 
)

◆ generateProgramLight()

void randomx::JitCompilerA64::generateProgramLight ( Program program,
ProgramConfiguration config,
uint32_t  datasetOffset 
)

◆ generateSuperscalarHash()

template<size_t N>
template void randomx::JitCompilerA64::generateSuperscalarHash ( SuperscalarProgram(&)  programs[N],
std::vector< uint64_t > &   
)

◆ getCode()

uint8_t* randomx::JitCompilerA64::getCode ( )
inline

◆ getCodeSize()

size_t randomx::JitCompilerA64::getCodeSize ( )

◆ getDatasetInitFunc()

DatasetInitFunc * randomx::JitCompilerA64::getDatasetInitFunc ( )

◆ getProgramFunc()

ProgramFunc* randomx::JitCompilerA64::getProgramFunc ( )
inline

◆ h_CBRANCH()

void randomx::JitCompilerA64::h_CBRANCH ( Instruction instr,
uint32_t codePos 
)
private

◆ h_CFROUND()

void randomx::JitCompilerA64::h_CFROUND ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FADD_M()

void randomx::JitCompilerA64::h_FADD_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FADD_R()

void randomx::JitCompilerA64::h_FADD_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FDIV_M()

void randomx::JitCompilerA64::h_FDIV_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FMUL_R()

void randomx::JitCompilerA64::h_FMUL_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FSCAL_R()

void randomx::JitCompilerA64::h_FSCAL_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FSQRT_R()

void randomx::JitCompilerA64::h_FSQRT_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FSUB_M()

void randomx::JitCompilerA64::h_FSUB_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FSUB_R()

void randomx::JitCompilerA64::h_FSUB_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_FSWAP_R()

void randomx::JitCompilerA64::h_FSWAP_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IADD_M()

void randomx::JitCompilerA64::h_IADD_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IADD_RS()

void randomx::JitCompilerA64::h_IADD_RS ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IMUL_M()

void randomx::JitCompilerA64::h_IMUL_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IMUL_R()

void randomx::JitCompilerA64::h_IMUL_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IMUL_RCP()

void randomx::JitCompilerA64::h_IMUL_RCP ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IMULH_M()

void randomx::JitCompilerA64::h_IMULH_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IMULH_R()

void randomx::JitCompilerA64::h_IMULH_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_INEG_R()

void randomx::JitCompilerA64::h_INEG_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IROL_R()

void randomx::JitCompilerA64::h_IROL_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IROR_R()

void randomx::JitCompilerA64::h_IROR_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_ISMULH_M()

void randomx::JitCompilerA64::h_ISMULH_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_ISMULH_R()

void randomx::JitCompilerA64::h_ISMULH_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_ISTORE()

void randomx::JitCompilerA64::h_ISTORE ( Instruction instr,
uint32_t codePos 
)
private

◆ h_ISUB_M()

void randomx::JitCompilerA64::h_ISUB_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_ISUB_R()

void randomx::JitCompilerA64::h_ISUB_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_ISWAP_R()

void randomx::JitCompilerA64::h_ISWAP_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IXOR_M()

void randomx::JitCompilerA64::h_IXOR_M ( Instruction instr,
uint32_t codePos 
)
private

◆ h_IXOR_R()

void randomx::JitCompilerA64::h_IXOR_R ( Instruction instr,
uint32_t codePos 
)
private

◆ h_NOP()

void randomx::JitCompilerA64::h_NOP ( Instruction instr,
uint32_t codePos 
)
private

Member Data Documentation

◆ code

uint8_t* randomx::JitCompilerA64::code
private

◆ engine

InstructionGeneratorA64 randomx::JitCompilerA64::engine
staticprivate

◆ literalPos

uint32_t randomx::JitCompilerA64::literalPos
private

◆ num32bitLiterals

uint32_t randomx::JitCompilerA64::num32bitLiterals
private

◆ reg_changed_offset

uint32_t randomx::JitCompilerA64::reg_changed_offset[8]
private

The documentation for this class was generated from the following files: