Skip to content

Commit

Permalink
Merge pull request #7147 from lioncash/emitter
Browse files Browse the repository at this point in the history
DSP: Replace x64 JIT pointer with a pointer to an architecture-agnostic base
  • Loading branch information
degasus committed Jun 21, 2018
2 parents 52990d2 + b7301be commit 630c3f0
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 25 deletions.
13 changes: 7 additions & 6 deletions Source/Core/Core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,18 @@ add_library(core
Debugger/Dump.cpp
Debugger/PPCDebugInterface.cpp
Debugger/RSO.cpp
DSP/DSPAssembler.cpp
DSP/DSPDisassembler.cpp
DSP/DSPAccelerator.cpp
DSP/DSPAnalyzer.cpp
DSP/DSPAssembler.cpp
DSP/DSPCaptureLogger.cpp
DSP/DSPCodeUtil.cpp
DSP/DSPCore.cpp
DSP/DSPDisassembler.cpp
DSP/DSPHWInterface.cpp
DSP/DSPMemoryMap.cpp
DSP/DSPStacks.cpp
DSP/DSPAnalyzer.cpp
DSP/DSPCodeUtil.cpp
DSP/LabelMap.cpp
DSP/DSPCore.cpp
DSP/DSPTables.cpp
DSP/LabelMap.cpp
DSP/Interpreter/DSPIntArithmetic.cpp
DSP/Interpreter/DSPIntBranch.cpp
DSP/Interpreter/DSPIntCCUtil.cpp
Expand All @@ -59,6 +59,7 @@ add_library(core
DSP/Interpreter/DSPIntMisc.cpp
DSP/Interpreter/DSPIntMultiplier.cpp
DSP/Interpreter/DSPIntTables.cpp
DSP/Jit/DSPEmitterBase.cpp
DSP/Jit/x64/DSPEmitter.cpp
DSP/Jit/x64/DSPJitRegCache.cpp
DSP/Jit/x64/DSPJitExtOps.cpp
Expand Down
10 changes: 6 additions & 4 deletions Source/Core/Core/Core.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,13 @@
<ClCompile Include="Debugger\PPCDebugInterface.cpp" />
<ClCompile Include="Debugger\RSO.cpp" />
<ClCompile Include="DSPEmulator.cpp" />
<ClCompile Include="DSP\DSPAssembler.cpp" />
<ClCompile Include="DSP\DSPDisassembler.cpp" />
<ClCompile Include="DSP\DSPAccelerator.cpp" />
<ClCompile Include="DSP\DSPAnalyzer.cpp" />
<ClCompile Include="DSP\DSPAssembler.cpp" />
<ClCompile Include="DSP\DSPCaptureLogger.cpp" />
<ClCompile Include="DSP\DSPCodeUtil.cpp" />
<ClCompile Include="DSP\DSPCore.cpp" />
<ClCompile Include="DSP\DSPDisassembler.cpp" />
<ClCompile Include="DSP\DSPHWInterface.cpp" />
<ClCompile Include="DSP\DSPMemoryMap.cpp" />
<ClCompile Include="DSP\DSPStacks.cpp" />
Expand All @@ -82,6 +82,7 @@
<ClCompile Include="DSP\Interpreter\DSPIntMisc.cpp" />
<ClCompile Include="DSP\Interpreter\DSPIntMultiplier.cpp" />
<ClCompile Include="DSP\Interpreter\DSPIntTables.cpp" />
<ClCompile Include="DSP\Jit\DSPEmitterBase.cpp" />
<ClCompile Include="DSP\Jit\x64\DSPEmitter.cpp" />
<ClCompile Include="DSP\Jit\x64\DSPJitArithmetic.cpp" />
<ClCompile Include="DSP\Jit\x64\DSPJitBranch.cpp" />
Expand Down Expand Up @@ -326,15 +327,15 @@
<ClInclude Include="Debugger\PPCDebugInterface.h" />
<ClInclude Include="Debugger\RSO.h" />
<ClInclude Include="DSPEmulator.h" />
<ClInclude Include="DSP\DSPAssembler.h" />
<ClInclude Include="DSP\DSPDisassembler.h" />
<ClInclude Include="DSP\DSPAccelerator.h" />
<ClInclude Include="DSP\DSPAnalyzer.h" />
<ClInclude Include="DSP\DSPAssembler.h" />
<ClInclude Include="DSP\DSPBreakpoints.h" />
<ClInclude Include="DSP\DSPCaptureLogger.h" />
<ClInclude Include="DSP\DSPCodeUtil.h" />
<ClInclude Include="DSP\DSPCommon.h" />
<ClInclude Include="DSP\DSPCore.h" />
<ClInclude Include="DSP\DSPDisassembler.h" />
<ClInclude Include="DSP\DSPHost.h" />
<ClInclude Include="DSP\DSPHWInterface.h" />
<ClInclude Include="DSP\DSPMemoryMap.h" />
Expand All @@ -345,6 +346,7 @@
<ClInclude Include="DSP\Interpreter\DSPIntExtOps.h" />
<ClInclude Include="DSP\Interpreter\DSPIntTables.h" />
<ClInclude Include="DSP\Interpreter\DSPIntUtil.h" />
<ClInclude Include="DSP\Jit\DSPEmitterBase.h" />
<ClInclude Include="DSP\Jit\x64\DSPEmitter.h" />
<ClInclude Include="DSP\Jit\x64\DSPJitRegCache.h" />
<ClInclude Include="DSP\Jit\x64\DSPJitTables.h" />
Expand Down
6 changes: 6 additions & 0 deletions Source/Core/Core/Core.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,9 @@
<ClCompile Include="DSP\Interpreter\DSPIntTables.cpp">
<Filter>DSPCore\Interpreter</Filter>
</ClCompile>
<ClCompile Include="DSP\Jit\DSPEmitterBase.cpp">
<Filter>DSPCore\Jit</Filter>
</ClCompile>
<ClCompile Include="DSP\Jit\x64\DSPJitRegCache.cpp">
<Filter>DSPCore\Jit\x64</Filter>
</ClCompile>
Expand Down Expand Up @@ -972,6 +975,9 @@
<ClInclude Include="DSP\Interpreter\DSPIntUtil.h">
<Filter>DSPCore\Interpreter</Filter>
</ClInclude>
<ClInclude Include="DSP\Jit\DSPEmitterBase.h">
<Filter>DSPCore\Jit</Filter>
</ClInclude>
<ClInclude Include="DSP\Jit\x64\DSPJitRegCache.h">
<Filter>DSPCore\Jit\x64</Filter>
</ClInclude>
Expand Down
7 changes: 3 additions & 4 deletions Source/Core/Core/DSP/DSPCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,15 @@
#include "Core/DSP/DSPHost.h"
#include "Core/DSP/Interpreter/DSPIntUtil.h"
#include "Core/DSP/Interpreter/DSPInterpreter.h"
#include "Core/DSP/Jit/x64/DSPEmitter.h"
#include "Core/HW/DSP.h"
#include "Core/DSP/Jit/DSPEmitterBase.h"

namespace DSP
{
SDSP g_dsp;
DSPBreakpoints g_dsp_breakpoints;
static State core_state = State::Stopped;
bool g_init_hax = false;
std::unique_ptr<JIT::x64::DSPEmitter> g_dsp_jit;
std::unique_ptr<JIT::DSPEmitter> g_dsp_jit;
std::unique_ptr<DSPCaptureLogger> g_dsp_cap;
static Common::Event step_event;

Expand Down Expand Up @@ -172,7 +171,7 @@ bool DSPCore_Init(const DSPInitOptions& opts)

// Initialize JIT, if necessary
if (opts.core_type == DSPInitOptions::CoreType::JIT64)
g_dsp_jit = std::make_unique<JIT::x64::DSPEmitter>();
g_dsp_jit = JIT::CreateDSPEmitter();

g_dsp_cap.reset(opts.capture_logger);

Expand Down
5 changes: 1 addition & 4 deletions Source/Core/Core/DSP/DSPCore.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,8 @@ class Accelerator;

namespace JIT
{
namespace x64
{
class DSPEmitter;
}
}

enum : u32
{
Expand Down Expand Up @@ -317,7 +314,7 @@ struct SDSP
extern SDSP g_dsp;
extern DSPBreakpoints g_dsp_breakpoints;
extern bool g_init_hax;
extern std::unique_ptr<JIT::x64::DSPEmitter> g_dsp_jit;
extern std::unique_ptr<JIT::DSPEmitter> g_dsp_jit;
extern std::unique_ptr<DSPCaptureLogger> g_dsp_cap;

struct DSPInitOptions
Expand Down
23 changes: 23 additions & 0 deletions Source/Core/Core/DSP/Jit/DSPEmitterBase.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright 2018 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#include "Core/DSP/Jit/DSPEmitterBase.h"

#if defined(_M_X86) || defined(_M_X86_64)
#include "Core/DSP/Jit/x64/DSPEmitter.h"
#endif

namespace DSP::JIT
{
DSPEmitter::~DSPEmitter() = default;

std::unique_ptr<DSPEmitter> CreateDSPEmitter()
{
#if defined(_M_X86) || defined(_M_X86_64)
return std::make_unique<x64::DSPEmitter>();
#else
return std::make_unique<DSPEmitterNull>();
#endif
}
} // namespace DSP::JIT
35 changes: 35 additions & 0 deletions Source/Core/Core/DSP/Jit/DSPEmitterBase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright 2018 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#pragma once

#include <memory>

#include "Common/CommonTypes.h"

class PointerWrap;

namespace DSP::JIT
{
class DSPEmitter
{
public:
virtual ~DSPEmitter();

virtual u16 RunCycles(u16 cycles) = 0;
virtual void ClearIRAM() = 0;

virtual void DoState(PointerWrap& p) = 0;
};

class DSPEmitterNull final : public DSPEmitter
{
public:
u16 RunCycles(u16) override { return 0; }
void ClearIRAM() override {}
void DoState(PointerWrap&) override {}
};

std::unique_ptr<DSPEmitter> CreateDSPEmitter();
} // namespace DSP::JIT
12 changes: 6 additions & 6 deletions Source/Core/Core/DSP/Jit/x64/DSPEmitter.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "Common/x64Emitter.h"

#include "Core/DSP/DSPCommon.h"
#include "Core/DSP/Jit/DSPEmitterBase.h"
#include "Core/DSP/Jit/x64/DSPJitRegCache.h"

class PointerWrap;
Expand All @@ -24,7 +25,7 @@ enum class StackRegister;

namespace JIT::x64
{
class DSPEmitter : public Gen::X64CodeBlock
class DSPEmitter final : public JIT::DSPEmitter, public Gen::X64CodeBlock
{
public:
using DSPCompiledCode = u32 (*)();
Expand All @@ -33,14 +34,13 @@ class DSPEmitter : public Gen::X64CodeBlock
static constexpr size_t MAX_BLOCKS = 0x10000;

DSPEmitter();
~DSPEmitter();
~DSPEmitter() override;

u16 RunCycles(u16 cycles);

void DoState(PointerWrap& p);
u16 RunCycles(u16 cycles) override;
void DoState(PointerWrap& p) override;
void ClearIRAM() override;

void EmitInstruction(UDSPInstruction inst);
void ClearIRAM();
void ClearIRAMandDSPJITCodespaceReset();

void CompileDispatcher();
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/HW/DSPLLE/DSPLLE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#include "Core/DSP/DSPHost.h"
#include "Core/DSP/DSPTables.h"
#include "Core/DSP/Interpreter/DSPInterpreter.h"
#include "Core/DSP/Jit/x64/DSPEmitter.h"
#include "Core/DSP/Jit/DSPEmitterBase.h"
#include "Core/HW/DSPLLE/DSPLLEGlobals.h"
#include "Core/HW/Memmap.h"
#include "Core/Host.h"
Expand Down

0 comments on commit 630c3f0

Please sign in to comment.