diff --git a/src/crypto/randomx/jit_compiler_a64.cpp b/src/crypto/randomx/jit_compiler_a64.cpp index 5c8bbea2..c4f0f002 100644 --- a/src/crypto/randomx/jit_compiler_a64.cpp +++ b/src/crypto/randomx/jit_compiler_a64.cpp @@ -108,7 +108,6 @@ JitCompilerA64::JitCompilerA64(bool hugePagesEnable, bool) : hugePages(hugePagesJIT && hugePagesEnable), literalPos(ImulRcpLiteralsEnd) { - allocate(CodeSize); } JitCompilerA64::~JitCompilerA64() @@ -118,8 +117,13 @@ JitCompilerA64::~JitCompilerA64() void JitCompilerA64::generateProgram(Program& program, ProgramConfiguration& config, uint32_t) { + if (!allocatedSize) { + allocate(CodeSize); + } #ifdef XMRIG_SECURE_JIT - enableWriting(); + else { + enableWriting(); + } #endif uint32_t codePos = MainLoopBegin + 4; @@ -173,8 +177,13 @@ void JitCompilerA64::generateProgram(Program& program, ProgramConfiguration& con void JitCompilerA64::generateProgramLight(Program& program, ProgramConfiguration& config, uint32_t datasetOffset) { + if (!allocatedSize) { + allocate(CodeSize); + } #ifdef XMRIG_SECURE_JIT - enableWriting(); + else { + enableWriting(); + } #endif uint32_t codePos = MainLoopBegin + 4; @@ -235,12 +244,8 @@ void JitCompilerA64::generateProgramLight(Program& program, ProgramConfiguration template void JitCompilerA64::generateSuperscalarHash(SuperscalarProgram(&programs)[N]) { - const size_t requiredSize = CodeSize + CalcDatasetItemSize(); - if (allocatedSize < requiredSize) { - if (allocatedSize) { - freePagedMemory(code, allocatedSize); - } - allocate(requiredSize); + if (!allocatedSize) { + allocate(CodeSize + CalcDatasetItemSize()); } #ifdef XMRIG_SECURE_JIT else {