dsp arm64: fix crash when VIXL_DEBUG is off

This commit is contained in:
Flyinghead 2019-01-24 21:47:55 +01:00
parent 08473d765a
commit fca6f3cecb
3 changed files with 13 additions and 4 deletions

View File

@ -32,7 +32,7 @@ extern void Arm64CacheFlush(void* start, void* end);
class DSPAssembler : public MacroAssembler
{
public:
DSPAssembler(u8 *code_buffer, size_t size) : MacroAssembler(code_buffer, size), aica_ram_lit(&aica_ram[0], GetLiteralPool()) {}
DSPAssembler(u8 *code_buffer, size_t size) : MacroAssembler(code_buffer, size), aica_ram_lit(NULL) {}
void Compile(struct dsp_t *DSP)
{
@ -307,7 +307,7 @@ public:
{
//MEMVAL[(step + 2) & 3] = UNPACK(*(u16 *)&aica_ram[ADDR & ARAM_MASK]);
CalculateADDR(ADDR, op, ADRS_REG, MDEC_CT);
Ldr(x1, &aica_ram_lit);
Ldr(x1, GetAicaRam());
MemOperand aram_op(x1, Register::GetXRegFromCode(ADDR.GetCode()));
Ldrh(w0, aram_op);
GenCallRuntime(UNPACK);
@ -321,7 +321,7 @@ public:
GenCallRuntime(PACK);
CalculateADDR(ADDR, op, ADRS_REG, MDEC_CT);
Ldr(x1, &aica_ram_lit);
Ldr(x1, GetAicaRam());
MemOperand aram_op(x1, Register::GetXRegFromCode(ADDR.GetCode()));
Strh(w0, aram_op);
}
@ -462,6 +462,13 @@ private:
die("Unsupported ARAM_SIZE");
}
Literal<u8*> *GetAicaRam()
{
if (aica_ram_lit == NULL)
aica_ram_lit = new Literal<u8*>(&aica_ram[0], GetLiteralPool(), RawLiteral::kDeletedOnPoolDestruction);
return aica_ram_lit;
}
void Disassemble(Instruction* instr_start, Instruction* instr_end)
{
Decoder decoder;
@ -477,7 +484,7 @@ private:
}
struct dsp_t *DSP;
Literal<u8*> aica_ram_lit;
Literal<u8*> *aica_ram_lit;
};
void dsp_recompile()

View File

@ -2247,6 +2247,7 @@ void ngen_ResetBlocks()
*/
void ngen_init()
{
printf("Initializing the ARM32 dynarec\n");
verify(FPCB_OFFSET == -0x2100000 || FPCB_OFFSET == -0x4100000);
verify(rcb_noffs(p_sh4rcb->fpcb) == FPCB_OFFSET);

View File

@ -246,6 +246,7 @@ void ngen_mainloop(void* v_cntx)
void ngen_init()
{
printf("Initializing the ARM64 dynarec\n");
ngen_FailedToFindBlock = &ngen_FailedToFindBlock_;
}