switch: dsp dynarec fix

This commit is contained in:
Flyinghead 2021-07-15 12:24:42 +02:00
parent 4fa89c4a45
commit 1e37e8f333
1 changed files with 14 additions and 4 deletions

View File

@ -28,6 +28,16 @@
#include <aarch64/macro-assembler-aarch64.h>
using namespace vixl::aarch64;
constexpr size_t CodeSize = 4096 * 8; //32 kb, 8 pages
#if defined(__unix__) || defined(__SWITCH__)
alignas(4096) static u8 DynCode[CodeSize] __attribute__((section(".text")));
#elif defined(__APPLE__)
alignas(4096) static u8 DynCode[CodeSize] __attribute__((section("__TEXT, .text")));
#else
#error "Unsupported platform for arm64 DSP dynarec"
#endif
static u8 *pCodeBuffer;
static ptrdiff_t rx_offset;
@ -448,21 +458,21 @@ void dsp_recompile()
break;
}
}
DSPAssembler assembler(pCodeBuffer, sizeof(dsp.DynCode));
DSPAssembler assembler(pCodeBuffer, sizeof(DynCode));
assembler.Compile(&dsp);
}
void dsp_rec_init()
{
#ifdef FEAT_NO_RWX_PAGES
verify(vmem_platform_prepare_jit_block(dsp.DynCode, sizeof(dsp.DynCode), (void**)&pCodeBuffer, &rx_offset));
verify(vmem_platform_prepare_jit_block(DynCode, sizeof(DynCode), (void**)&pCodeBuffer, &rx_offset));
#else
verify(vmem_platform_prepare_jit_block(dsp.DynCode, sizeof(dsp.DynCode), (void**)&pCodeBuffer));
verify(vmem_platform_prepare_jit_block(DynCode, sizeof(DynCode), (void**)&pCodeBuffer));
#endif
}
void dsp_rec_step()
{
((void (*)())(pCodeBuffer + rx_offset))();
((void (*)())(DynCode))();
}
#endif