diff --git a/src/xenia/cpu/x64/x64_emitter.cc b/src/xenia/cpu/x64/x64_emitter.cc index c1cb05e24..5b5c4bbeb 100644 --- a/src/xenia/cpu/x64/x64_emitter.cc +++ b/src/xenia/cpu/x64/x64_emitter.cc @@ -673,6 +673,10 @@ void X64Emitter::TraceKernelCall() { return; } + for (int n = 0; n < 5; n++) { + c.nop(); + } + if (FLAGS_annotate_disassembly) { c.comment("XeTraceKernelCall (+spill)"); } @@ -691,6 +695,10 @@ void X64Emitter::TraceKernelCall() { call->setArgument(1, arg1); call->setArgument(2, c.getGpArg(1)); call->setArgument(3, arg3); + + for (int n = 0; n < 2; n++) { + c.nop(); + } } void X64Emitter::TraceUserCall() { @@ -700,6 +708,10 @@ void X64Emitter::TraceUserCall() { return; } + for (int n = 0; n < 5; n++) { + c.nop(); + } + if (FLAGS_annotate_disassembly) { c.comment("XeTraceUserCall (+spill)"); } @@ -718,6 +730,10 @@ void X64Emitter::TraceUserCall() { call->setArgument(1, arg1); call->setArgument(2, c.getGpArg(1)); call->setArgument(3, arg3); + + for (int n = 0; n < 2; n++) { + c.nop(); + } } void X64Emitter::TraceInstruction(InstrData& i) { @@ -727,6 +743,10 @@ void X64Emitter::TraceInstruction(InstrData& i) { return; } + for (int n = 0; n < 5; n++) { + c.nop(); + } + if (FLAGS_annotate_disassembly) { c.comment("XeTraceInstruction (+spill)"); } @@ -744,6 +764,10 @@ void X64Emitter::TraceInstruction(InstrData& i) { call->setArgument(0, c.getGpArg(0)); call->setArgument(1, arg1); call->setArgument(2, arg2); + + for (int n = 0; n < 2; n++) { + c.nop(); + } } void X64Emitter::TraceInvalidInstruction(InstrData& i) { @@ -753,6 +777,10 @@ void X64Emitter::TraceInvalidInstruction(InstrData& i) { c.comment("XeInvalidInstruction (+spill)"); } + for (int n = 0; n < 5; n++) { + c.nop(); + } + SpillRegisters(); // TODO(benvanik): remove once fixed: https://code.google.com/p/asmjit/issues/detail?id=86 @@ -766,6 +794,10 @@ void X64Emitter::TraceInvalidInstruction(InstrData& i) { call->setArgument(0, c.getGpArg(0)); call->setArgument(1, arg1); call->setArgument(2, arg2); + + for (int n = 0; n < 5; n++) { + c.nop(); + } #endif } @@ -776,6 +808,10 @@ void X64Emitter::TraceBranch(uint32_t cia) { return; } + for (int n = 0; n < 5; n++) { + c.nop(); + } + if (FLAGS_annotate_disassembly) { c.comment("XeTraceBranch (+spill)"); } @@ -815,6 +851,10 @@ void X64Emitter::TraceBranch(uint32_t cia) { call->setArgument(0, c.getGpArg(0)); call->setArgument(1, arg1); call->setArgument(2, arg2); + + for (int n = 0; n < 2; n++) { + c.nop(); + } } int X64Emitter::GenerateIndirectionBranch(uint32_t cia, GpVar& target,