@ -12,6 +12,7 @@
# include "CryptonightR_template.h"
static const uint8_t prologue [ ] = {
# if defined __i386 || defined __x86_64__
0x4C , 0x8B , 0xD7 , // mov r10, rdi
0x53 , // push rbx
0x55 , // push rbp
@ -26,9 +27,11 @@ static const uint8_t prologue[] = {
0x41 , 0x8B , 0x42 , 0x18 , // mov eax, DWORD PTR [r10+24]
0x41 , 0x8B , 0x52 , 0x1C , // mov edx, DWORD PTR [r10+28]
0x45 , 0x8B , 0x4A , 0x20 , // mov r9d, DWORD PTR [r10+32]
# endif
} ;
static const uint8_t epilogue [ ] = {
# if defined __i386 || defined __x86_64__
0x49 , 0x8B , 0xE3 , // mov rsp, r11
0x41 , 0x89 , 0x1A , // mov DWORD PTR [r10], ebx
0x41 , 0x89 , 0x72 , 0x04 , // mov DWORD PTR [r10+4], esi
@ -38,6 +41,7 @@ static const uint8_t epilogue[] = {
0x5D , // pop rbp
0x5B , // pop rbx
0xC3 , // ret
# endif
} ;
# define APPEND_CODE(src, size) \
@ -50,6 +54,7 @@ static const uint8_t epilogue[] = {
int v4_generate_JIT_code ( const struct V4_Instruction * code , v4_random_math_JIT_func buf , const size_t buf_size )
{
# if defined __i386 || defined __x86_64__
uint8_t * JIT_code = ( uint8_t * ) buf ;
const uint8_t * JIT_code_end = JIT_code + buf_size ;
@ -99,4 +104,7 @@ int v4_generate_JIT_code(const struct V4_Instruction* code, v4_random_math_JIT_f
__builtin___clear_cache ( ( char * ) buf , ( char * ) JIT_code ) ;
return 0 ;
# else
return 1 ;
# endif
}