@@ -94,22 +94,28 @@ namespace randomx {
94
94
95
95
constexpr int32_t superScalarHashOffset = RandomXCodeSize;
96
96
97
- const uint8_t * codePrologue = (uint8_t *)&randomx_program_prologue;
98
- const uint8_t * codeLoopBegin = (uint8_t *)&randomx_program_loop_begin;
99
- const uint8_t * codeLoopLoad = (uint8_t *)&randomx_program_loop_load;
100
- const uint8_t * codeProgamStart = (uint8_t *)&randomx_program_start;
101
- const uint8_t * codeReadDataset = (uint8_t *)&randomx_program_read_dataset;
102
- const uint8_t * codeReadDatasetLightSshInit = (uint8_t *)&randomx_program_read_dataset_sshash_init;
103
- const uint8_t * codeReadDatasetLightSshFin = (uint8_t *)&randomx_program_read_dataset_sshash_fin;
104
- const uint8_t * codeDatasetInit = (uint8_t *)&randomx_dataset_init;
105
- const uint8_t * codeLoopStore = (uint8_t *)&randomx_program_loop_store;
106
- const uint8_t * codeLoopEnd = (uint8_t *)&randomx_program_loop_end;
107
- const uint8_t * codeEpilogue = (uint8_t *)&randomx_program_epilogue;
108
- const uint8_t * codeProgramEnd = (uint8_t *)&randomx_program_end;
109
- const uint8_t * codeShhLoad = (uint8_t *)&randomx_sshash_load;
110
- const uint8_t * codeShhPrefetch = (uint8_t *)&randomx_sshash_prefetch;
111
- const uint8_t * codeShhEnd = (uint8_t *)&randomx_sshash_end;
112
- const uint8_t * codeShhInit = (uint8_t *)&randomx_sshash_init;
97
+ #if defined(_MSC_VER) && (defined(_DEBUG) || defined (RELWITHDEBINFO))
98
+ #define ADDR (x ) ((((uint8_t *)&x)[0 ] == 0xE9 ) ? (((uint8_t *)&x) + *(const int32_t *)(((uint8_t *)&x) + 1 ) + 5 ) : ((uint8_t *)&x))
99
+ #else
100
+ #define ADDR (x ) ((uint8_t *)&x)
101
+ #endif
102
+
103
+ const uint8_t * codePrologue = ADDR(randomx_program_prologue);
104
+ const uint8_t * codeLoopBegin = ADDR(randomx_program_loop_begin);
105
+ const uint8_t * codeLoopLoad = ADDR(randomx_program_loop_load);
106
+ const uint8_t * codeProgamStart = ADDR(randomx_program_start);
107
+ const uint8_t * codeReadDataset = ADDR(randomx_program_read_dataset);
108
+ const uint8_t * codeReadDatasetLightSshInit = ADDR(randomx_program_read_dataset_sshash_init);
109
+ const uint8_t * codeReadDatasetLightSshFin = ADDR(randomx_program_read_dataset_sshash_fin);
110
+ const uint8_t * codeDatasetInit = ADDR(randomx_dataset_init);
111
+ const uint8_t * codeLoopStore = ADDR(randomx_program_loop_store);
112
+ const uint8_t * codeLoopEnd = ADDR(randomx_program_loop_end);
113
+ const uint8_t * codeEpilogue = ADDR(randomx_program_epilogue);
114
+ const uint8_t * codeProgramEnd = ADDR(randomx_program_end);
115
+ const uint8_t * codeShhLoad = ADDR(randomx_sshash_load);
116
+ const uint8_t * codeShhPrefetch = ADDR(randomx_sshash_prefetch);
117
+ const uint8_t * codeShhEnd = ADDR(randomx_sshash_end);
118
+ const uint8_t * codeShhInit = ADDR(randomx_sshash_init);
113
119
114
120
const int32_t prologueSize = codeLoopBegin - codePrologue;
115
121
const int32_t loopLoadSize = codeProgamStart - codeLoopLoad;
@@ -320,7 +326,7 @@ namespace randomx {
320
326
emitByte (0xc0 + pcfg.readReg0 );
321
327
emit (REX_XOR_RAX_R64);
322
328
emitByte (0xc0 + pcfg.readReg1 );
323
- emit (( const uint8_t *)& randomx_prefetch_scratchpad, (( uint8_t *)& randomx_prefetch_scratchpad_end) - (( uint8_t *)& randomx_prefetch_scratchpad));
329
+ emit (ADDR ( randomx_prefetch_scratchpad), ADDR ( randomx_prefetch_scratchpad_end) - ADDR ( randomx_prefetch_scratchpad));
324
330
memcpy (code + codePos, codeLoopStore, loopStoreSize);
325
331
codePos += loopStoreSize;
326
332
emit (SUB_EBX);
0 commit comments