@@ -98,9 +98,11 @@ JitCompilerA64::JitCompilerA64()
9898 memset (reg_changed_offset, 0 , sizeof (reg_changed_offset));
9999 memcpy (code, (void *) randomx_program_aarch64, CodeSize);
100100
101- #ifdef __GNUC__
102- __builtin___clear_cache (reinterpret_cast <char *>(code), reinterpret_cast <char *>(code + CodeSize));
103- #endif
101+ #ifdef HAVE_BUILTIN_CLEAR_CACHE
102+ __builtin___clear_cache (reinterpret_cast <char *>(code), reinterpret_cast <char *>(code + CodeSize));
103+ #else
104+ sys_icache_invalidate (code, code + CodeSize);
105+ #endif
104106}
105107
106108JitCompilerA64::~JitCompilerA64 ()
@@ -169,9 +171,11 @@ void JitCompilerA64::generateProgram(Program& program, ProgramConfiguration& con
169171 codePos = ((uint8_t *)randomx_program_aarch64_update_spMix1) - ((uint8_t *)randomx_program_aarch64);
170172 emit32 (ARMV8A::EOR | 10 | (IntRegMap[config.readReg0 ] << 5 ) | (IntRegMap[config.readReg1 ] << 16 ), code, codePos);
171173
172- #ifdef __GNUC__
173- __builtin___clear_cache (reinterpret_cast <char *>(code + MainLoopBegin), reinterpret_cast <char *>(code + codePos));
174- #endif
174+ #ifdef HAVE_BUILTIN_CLEAR_CACHE
175+ __builtin___clear_cache (reinterpret_cast <char *>(code), reinterpret_cast <char *>(code + CodeSize));
176+ #else
177+ sys_icache_invalidate (code, code + CodeSize);
178+ #endif
175179}
176180
177181void JitCompilerA64::generateProgramLight (Program& program, ProgramConfiguration& config, uint32_t datasetOffset)
@@ -226,9 +230,11 @@ void JitCompilerA64::generateProgramLight(Program& program, ProgramConfiguration
226230 emit32 (ARMV8A::ADD_IMM_LO | 2 | (2 << 5 ) | (imm_lo << 10 ), code, codePos);
227231 emit32 (ARMV8A::ADD_IMM_HI | 2 | (2 << 5 ) | (imm_hi << 10 ), code, codePos);
228232
229- #ifdef __GNUC__
230- __builtin___clear_cache (reinterpret_cast <char *>(code + MainLoopBegin), reinterpret_cast <char *>(code + codePos));
231- #endif
233+ #ifdef HAVE_BUILTIN_CLEAR_CACHE
234+ __builtin___clear_cache (reinterpret_cast <char *>(code), reinterpret_cast <char *>(code + CodeSize));
235+ #else
236+ sys_icache_invalidate (code, code + CodeSize);
237+ #endif
232238}
233239
234240template <size_t N>
@@ -344,9 +350,11 @@ void JitCompilerA64::generateSuperscalarHash(SuperscalarProgram(&programs)[N], s
344350 memcpy (code + codePos, p1, p2 - p1);
345351 codePos += p2 - p1;
346352
347- #ifdef __GNUC__
348- __builtin___clear_cache (reinterpret_cast <char *>(code + CodeSize), reinterpret_cast <char *>(code + codePos));
349- #endif
353+ #ifdef HAVE_BUILTIN_CLEAR_CACHE
354+ __builtin___clear_cache (reinterpret_cast <char *>(code), reinterpret_cast <char *>(code + CodeSize));
355+ #else
356+ sys_icache_invalidate (code, code + CodeSize);
357+ #endif
350358}
351359
352360template void JitCompilerA64::generateSuperscalarHash (SuperscalarProgram(&programs)[RANDOMX_CACHE_ACCESSES], std::vector<uint64_t> &reciprocalCache);
0 commit comments