9 changed files with 88 additions and 101 deletions
-
1src/shader_recompiler/CMakeLists.txt
-
54src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp
-
7src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.h
-
8src/shader_recompiler/frontend/maxwell/translate/impl/impl.h
-
4src/shader_recompiler/frontend/maxwell/translate/impl/integer_compare.cpp
-
6src/shader_recompiler/frontend/maxwell/translate/impl/integer_compare_and_set.cpp
-
64src/shader_recompiler/frontend/maxwell/translate/impl/integer_set_predicate.cpp
-
4src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp
-
41src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set.cpp
@ -0,0 +1,41 @@ |
|||||
|
// Copyright 2021 yuzu Emulator Project
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include "common/bit_field.h"
|
||||
|
#include "common/common_types.h"
|
||||
|
#include "shader_recompiler/frontend/maxwell/translate/impl/common_funcs.h"
|
||||
|
#include "shader_recompiler/frontend/maxwell/translate/impl/impl.h"
|
||||
|
|
||||
|
namespace Shader::Maxwell { |
||||
|
void TranslatorVisitor::PSET(u64 insn) { |
||||
|
union { |
||||
|
u64 raw; |
||||
|
BitField<0, 8, IR::Reg> dest_reg; |
||||
|
BitField<12, 3, IR::Pred> pred_a; |
||||
|
BitField<15, 1, u64> neg_pred_a; |
||||
|
BitField<24, 2, BooleanOp> bop_1; |
||||
|
BitField<29, 3, IR::Pred> pred_b; |
||||
|
BitField<32, 1, u64> neg_pred_b; |
||||
|
BitField<39, 3, IR::Pred> pred_c; |
||||
|
BitField<42, 1, u64> neg_pred_c; |
||||
|
BitField<44, 1, u64> bf; |
||||
|
BitField<45, 2, BooleanOp> bop_2; |
||||
|
} const pset{insn}; |
||||
|
|
||||
|
const IR::U1 pred_a{ir.GetPred(pset.pred_a, pset.neg_pred_a != 0)}; |
||||
|
const IR::U1 pred_b{ir.GetPred(pset.pred_b, pset.neg_pred_b != 0)}; |
||||
|
const IR::U1 pred_c{ir.GetPred(pset.pred_c, pset.neg_pred_c != 0)}; |
||||
|
|
||||
|
const IR::U1 res_1{PredicateCombine(ir, pred_a, pred_b, pset.bop_1)}; |
||||
|
const IR::U1 res_2{PredicateCombine(ir, res_1, pred_c, pset.bop_2)}; |
||||
|
|
||||
|
const IR::U32 true_result{pset.bf != 0 ? ir.Imm32(0x3f800000) : ir.Imm32(-1)}; |
||||
|
const IR::U32 false_result{ir.Imm32(0)}; |
||||
|
|
||||
|
const IR::U32 result{ir.Select(res_2, true_result, false_result)}; |
||||
|
|
||||
|
X(pset.dest_reg, result); |
||||
|
} |
||||
|
|
||||
|
} // namespace Shader::Maxwell
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue