summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shader_recompiler/CMakeLists.txt3
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp4
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp38
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_register.cpp (renamed from src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set.cpp)0
4 files changed, 40 insertions, 5 deletions
diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt
index 057857299..981a79e44 100644
--- a/src/shader_recompiler/CMakeLists.txt
+++ b/src/shader_recompiler/CMakeLists.txt
@@ -89,7 +89,8 @@ add_library(shader_recompiler STATIC
89 frontend/maxwell/translate/impl/move_register.cpp 89 frontend/maxwell/translate/impl/move_register.cpp
90 frontend/maxwell/translate/impl/move_special_register.cpp 90 frontend/maxwell/translate/impl/move_special_register.cpp
91 frontend/maxwell/translate/impl/not_implemented.cpp 91 frontend/maxwell/translate/impl/not_implemented.cpp
92 frontend/maxwell/translate/impl/predicate_set.cpp 92 frontend/maxwell/translate/impl/predicate_set_predicate.cpp
93 frontend/maxwell/translate/impl/predicate_set_register.cpp
93 frontend/maxwell/translate/impl/select_source_with_predicate.cpp 94 frontend/maxwell/translate/impl/select_source_with_predicate.cpp
94 frontend/maxwell/translate/translate.cpp 95 frontend/maxwell/translate/translate.cpp
95 frontend/maxwell/translate/translate.h 96 frontend/maxwell/translate/translate.h
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp
index 291d7a4bc..91a9858c6 100644
--- a/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp
@@ -593,10 +593,6 @@ void TranslatorVisitor::PRMT_imm(u64) {
593 ThrowNotImplemented(Opcode::PRMT_imm); 593 ThrowNotImplemented(Opcode::PRMT_imm);
594} 594}
595 595
596void TranslatorVisitor::PSETP(u64) {
597 ThrowNotImplemented(Opcode::PSETP);
598}
599
600void TranslatorVisitor::R2B(u64) { 596void TranslatorVisitor::R2B(u64) {
601 ThrowNotImplemented(Opcode::R2B); 597 ThrowNotImplemented(Opcode::R2B);
602} 598}
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp
new file mode 100644
index 000000000..75d1fa8c1
--- /dev/null
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp
@@ -0,0 +1,38 @@
1// Copyright 2021 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "common/bit_field.h"
6#include "common/common_types.h"
7#include "shader_recompiler/frontend/maxwell/translate/impl/common_funcs.h"
8#include "shader_recompiler/frontend/maxwell/translate/impl/impl.h"
9
10namespace Shader::Maxwell {
11void TranslatorVisitor::PSETP(u64 insn) {
12 union {
13 u64 raw;
14 BitField<0, 3, IR::Pred> dest_pred_b;
15 BitField<3, 3, IR::Pred> dest_pred_a;
16 BitField<12, 3, IR::Pred> pred_a;
17 BitField<15, 1, u64> neg_pred_a;
18 BitField<24, 2, BooleanOp> bop_1;
19 BitField<29, 3, IR::Pred> pred_b;
20 BitField<32, 1, u64> neg_pred_b;
21 BitField<39, 3, IR::Pred> pred_c;
22 BitField<42, 1, u64> neg_pred_c;
23 BitField<45, 2, BooleanOp> bop_2;
24 } const pset{insn};
25
26 const IR::U1 pred_a{ir.GetPred(pset.pred_a, pset.neg_pred_a != 0)};
27 const IR::U1 pred_b{ir.GetPred(pset.pred_b, pset.neg_pred_b != 0)};
28 const IR::U1 pred_c{ir.GetPred(pset.pred_c, pset.neg_pred_c != 0)};
29
30 const IR::U1 lhs_a{PredicateCombine(ir, pred_a, pred_b, pset.bop_1)};
31 const IR::U1 lhs_b{PredicateCombine(ir, ir.LogicalNot(pred_a), pred_b, pset.bop_1)};
32 const IR::U1 result_a{PredicateCombine(ir, lhs_a, pred_c, pset.bop_2)};
33 const IR::U1 result_b{PredicateCombine(ir, lhs_b, pred_c, pset.bop_2)};
34
35 ir.SetPred(pset.dest_pred_a, result_a);
36 ir.SetPred(pset.dest_pred_b, result_b);
37}
38} // namespace Shader::Maxwell
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_register.cpp
index 6c15963fa..6c15963fa 100644
--- a/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set.cpp
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_register.cpp