committed by
ameerj
4 changed files with 77 additions and 66 deletions
-
40src/shader_recompiler/backend/glasm/emit_glasm.cpp
-
75src/shader_recompiler/backend/glasm/emit_glasm_bitwise_conversion.cpp
-
4src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
-
24src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp
@ -0,0 +1,75 @@ |
|||
// Copyright 2021 yuzu Emulator Project
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include "shader_recompiler/backend/glasm/emit_context.h"
|
|||
#include "shader_recompiler/backend/glasm/emit_glasm_instructions.h"
|
|||
#include "shader_recompiler/frontend/ir/value.h"
|
|||
|
|||
namespace Shader::Backend::GLASM { |
|||
|
|||
static void Alias(IR::Inst& inst, const IR::Value& value) { |
|||
if (value.IsImmediate()) { |
|||
return; |
|||
} |
|||
IR::Inst* const value_inst{value.InstRecursive()}; |
|||
if (inst.GetOpcode() == IR::Opcode::Identity) { |
|||
value_inst->DestructiveAddUsage(inst.UseCount()); |
|||
value_inst->DestructiveRemoveUsage(); |
|||
} |
|||
inst.SetDefinition(value_inst->Definition<Id>()); |
|||
} |
|||
|
|||
void EmitIdentity(EmitContext&, IR::Inst& inst, const IR::Value& value) { |
|||
Alias(inst, value); |
|||
} |
|||
|
|||
void EmitBitCastU16F16(EmitContext&, IR::Inst& inst, const IR::Value& value) { |
|||
Alias(inst, value); |
|||
} |
|||
|
|||
void EmitBitCastU32F32(EmitContext&, IR::Inst& inst, const IR::Value& value) { |
|||
Alias(inst, value); |
|||
} |
|||
|
|||
void EmitBitCastU64F64(EmitContext&, IR::Inst& inst, const IR::Value& value) { |
|||
Alias(inst, value); |
|||
} |
|||
|
|||
void EmitBitCastF16U16(EmitContext&, IR::Inst& inst, const IR::Value& value) { |
|||
Alias(inst, value); |
|||
} |
|||
|
|||
void EmitBitCastF32U32(EmitContext&, IR::Inst& inst, const IR::Value& value) { |
|||
Alias(inst, value); |
|||
} |
|||
|
|||
void EmitBitCastF64U64(EmitContext&, IR::Inst& inst, const IR::Value& value) { |
|||
Alias(inst, value); |
|||
} |
|||
|
|||
void EmitPackUint2x32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) { |
|||
throw NotImplementedException("GLASM instruction"); |
|||
} |
|||
|
|||
void EmitUnpackUint2x32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) { |
|||
throw NotImplementedException("GLASM instruction"); |
|||
} |
|||
|
|||
void EmitPackFloat2x16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) { |
|||
throw NotImplementedException("GLASM instruction"); |
|||
} |
|||
|
|||
void EmitUnpackFloat2x16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) { |
|||
throw NotImplementedException("GLASM instruction"); |
|||
} |
|||
|
|||
void EmitPackHalf2x16(EmitContext& ctx, IR::Inst& inst, Register value) { |
|||
ctx.Add("PK2H {}.x,{};", inst, value); |
|||
} |
|||
|
|||
void EmitUnpackHalf2x16(EmitContext& ctx, IR::Inst& inst, Register value) { |
|||
ctx.Add("UP2H {}.xy,{}.x;", inst, value); |
|||
} |
|||
|
|||
} // namespace Shader::Backend::GLASM
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue