summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp
diff options
context:
space:
mode:
authorameerj <52414509+ameerj@users.noreply.github.com>2021-03-01 07:30:09 +0100
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:23 +0200
commite0389286165805258fa2e54014c2dc506ffb9f35 (patch)
treed7830153aac3a2ad93fd93f8b74516bbeb8f3718 /src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp
parentshader: Make IMNMX, SHR, SEL stylistically more consistent (diff)
downloadyuzu-e0389286165805258fa2e54014c2dc506ffb9f35.tar
yuzu-e0389286165805258fa2e54014c2dc506ffb9f35.tar.gz
yuzu-e0389286165805258fa2e54014c2dc506ffb9f35.tar.bz2
yuzu-e0389286165805258fa2e54014c2dc506ffb9f35.tar.lz
yuzu-e0389286165805258fa2e54014c2dc506ffb9f35.tar.xz
yuzu-e0389286165805258fa2e54014c2dc506ffb9f35.tar.zst
yuzu-e0389286165805258fa2e54014c2dc506ffb9f35.zip
Diffstat (limited to 'src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp')
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp
new file mode 100644
index 000000000..3ec146b1a
--- /dev/null
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/common_funcs.cpp
@@ -0,0 +1,46 @@
+// Copyright 2021 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "shader_recompiler/frontend/maxwell/translate/impl/common_funcs.h"
+
+namespace Shader::Maxwell {
+[[nodiscard]] IR::U1 IntegerCompare(TranslatorVisitor& v, const IR::U32& operand_1,
+ const IR::U32& operand_2, ComparisonOp compare_op,
+ bool is_signed) {
+ switch (compare_op) {
+ case ComparisonOp::False:
+ return v.ir.Imm1(false);
+ case ComparisonOp::LessThan:
+ return v.ir.ILessThan(operand_1, operand_2, is_signed);
+ case ComparisonOp::Equal:
+ return v.ir.IEqual(operand_1, operand_2);
+ case ComparisonOp::LessThanEqual:
+ return v.ir.ILessThanEqual(operand_1, operand_2, is_signed);
+ case ComparisonOp::GreaterThan:
+ return v.ir.IGreaterThan(operand_1, operand_2, is_signed);
+ case ComparisonOp::NotEqual:
+ return v.ir.INotEqual(operand_1, operand_2);
+ case ComparisonOp::GreaterThanEqual:
+ return v.ir.IGreaterThanEqual(operand_1, operand_2, is_signed);
+ case ComparisonOp::True:
+ return v.ir.Imm1(true);
+ default:
+ throw NotImplementedException("CMP");
+ }
+}
+
+[[nodiscard]] IR::U1 PredicateCombine(TranslatorVisitor& v, const IR::U1& predicate_1,
+ const IR::U1& predicate_2, BooleanOp bop) {
+ switch (bop) {
+ case BooleanOp::And:
+ return v.ir.LogicalAnd(predicate_1, predicate_2);
+ case BooleanOp::Or:
+ return v.ir.LogicalOr(predicate_1, predicate_2);
+ case BooleanOp::Xor:
+ return v.ir.LogicalXor(predicate_1, predicate_2);
+ default:
+ throw NotImplementedException("BOP");
+ }
+}
+} // namespace Shader::Maxwell