diff --git a/src/shader_recompiler/backend/asm_x64/emit_x64_instructions.h b/src/shader_recompiler/backend/asm_x64/emit_x64_instructions.h index ff92cfb54..c5058500d 100644 --- a/src/shader_recompiler/backend/asm_x64/emit_x64_instructions.h +++ b/src/shader_recompiler/backend/asm_x64/emit_x64_instructions.h @@ -116,8 +116,8 @@ void EmitUndefU8(EmitContext& ctx); void EmitUndefU16(EmitContext& ctx); void EmitUndefU32(EmitContext& ctx); void EmitUndefU64(EmitContext& ctx); -void EmitLoadSharedU32(EmitContext& ctx); -void EmitLoadSharedU64(EmitContext& ctx); +void EmitLoadSharedU32(EmitContext& ctx, const Operands& dest, const Operands& offset); +void EmitLoadSharedU64(EmitContext& ctx, const Operands& dest, const Operands& offset); void EmitWriteSharedU32(EmitContext& ctx); void EmitWriteSharedU64(EmitContext& ctx); void EmitSharedAtomicIAdd32(EmitContext& ctx); diff --git a/src/shader_recompiler/backend/asm_x64/emit_x64_shared_memory.cpp b/src/shader_recompiler/backend/asm_x64/emit_x64_shared_memory.cpp index 5957afd33..ebdce18e3 100644 --- a/src/shader_recompiler/backend/asm_x64/emit_x64_shared_memory.cpp +++ b/src/shader_recompiler/backend/asm_x64/emit_x64_shared_memory.cpp @@ -6,12 +6,27 @@ namespace Shader::Backend::X64 { -void EmitLoadSharedU32(EmitContext& ctx) { - throw NotImplementedException("LoadSharedU32"); +void EmitLoadSharedU32(EmitContext& ctx, const Operands& dest, const Operands& offset) { + LOG_WARNING(Render_Recompiler, "EmitLoadSharedU32 stubbed, setting to 0"); + if (dest[0].IsMem()) { + ctx.Code().mov(dest[0].Mem(), 0); + } else { + ctx.Code().xor_(dest[0].Reg(), dest[0].Reg()); + } } -void EmitLoadSharedU64(EmitContext& ctx) { - throw NotImplementedException("LoadSharedU64"); +void EmitLoadSharedU64(EmitContext& ctx, const Operands& dest, const Operands& offset) { + LOG_WARNING(Render_Recompiler, "EmitLoadSharedU64 stubbed, setting to 0"); + if (dest[0].IsMem()) { + ctx.Code().mov(dest[0].Mem(), 0); + } else { + ctx.Code().xor_(dest[0].Reg(), dest[0].Reg()); + } + if (dest[1].IsMem()) { + ctx.Code().mov(dest[1].Mem(), 0); + } else { + ctx.Code().xor_(dest[1].Reg(), dest[1].Reg()); + } } void EmitWriteSharedU32(EmitContext& ctx) {