lizzie 6 days ago
parent
commit
88a2d2cecb
  1. 11
      src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp
  2. 4
      src/dynarmic/src/dynarmic/backend/x64/stack_layout.h
  3. 6
      src/video_core/host_shaders/CMakeLists.txt

11
src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp

@ -90,9 +90,8 @@ A64EmitX64::BlockDescriptor A64EmitX64::Emit(IR::Block& block) noexcept {
code.align();
const auto* const entrypoint = code.getCurr();
code.push(rbp);
code.mov(rbp, rsp);
code.and_(rsp, -16);
// code.mov(code.qword[rsp + ABI_SHADOW_SPACE + offsetof(StackLayout, abi_base_pointer)], rbp);
// code.lea(rbp, code.ptr[rsp + ABI_SHADOW_SPACE - 8]);
DEBUG_ASSERT(block.GetCondition() == IR::Cond::AL);
typedef void (EmitX64::*EmitHandlerFn)(EmitContext& context, IR::Inst* inst);
@ -148,6 +147,9 @@ finish_this_inst:
if (conf.enable_cycle_counting) {
EmitAddCycles(block.CycleCount());
}
//code.mov(rbp, code.qword[rsp + ABI_SHADOW_SPACE + offsetof(StackLayout, abi_base_pointer)]);
EmitTerminal(block.GetTerminal(), ctx.Location().SetSingleStepping(false), ctx.IsSingleStep());
code.int3();
@ -252,9 +254,6 @@ void A64EmitX64::GenTerminalHandlers() {
}
code.and_(code.ABI_PARAM1.cvt32(), fast_dispatch_table_mask);
code.lea(code.ABI_RETURN, code.ptr[code.ABI_PARAM2 + code.ABI_PARAM1]);
code.mov(rsp, rbp);
code.pop(rbp);
code.ret();
PerfMapRegister(fast_dispatch_table_lookup, code.getCurr(), "a64_fast_dispatch_table_lookup");
}

4
src/dynarmic/src/dynarmic/backend/x64/stack_layout.h

@ -22,13 +22,11 @@ constexpr size_t SpillCount = 64;
#endif
struct alignas(16) StackLayout {
u64 abi_base_pointer;
s64 cycles_remaining;
s64 cycles_to_run;
std::array<std::array<u64, 2>, SpillCount> spill;
u32 save_host_MXCSR;
bool check_bit;
};

6
src/video_core/host_shaders/CMakeLists.txt

@ -135,7 +135,7 @@ foreach(SOURCE_FILE IN ITEMS ${SHADER_FILES})
${SOURCE_FILE}
DEPENDS
${INPUT_FILE}
${SHADER_DIR}
# ${SHADER_DIR}
# HEADER_GENERATOR should be included here but msbuild seems to assume it's always modified
)
set(SHADER_HEADERS ${SHADER_HEADERS} ${SOURCE_HEADER_FILE})
@ -151,8 +151,8 @@ foreach(SOURCE_FILE IN ITEMS ${SHADER_FILES})
${GLSLANGVALIDATOR} -V ${QUIET_FLAG} -I"${FIDELITYFX_INCLUDE_DIR}" ${GLSL_FLAGS} --variable-name ${SPIRV_VARIABLE_NAME} -o ${SPIRV_HEADER_FILE} ${SOURCE_FILE} --target-env ${SPIR_V_VERSION}
MAIN_DEPENDENCY
${SOURCE_FILE}
DEPENDS
${SHADER_DIR}
#DEPENDS
# ${SHADER_DIR}
)
set(SHADER_HEADERS ${SHADER_HEADERS} ${SPIRV_HEADER_FILE})
endif()

Loading…
Cancel
Save