summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/frontend/ir/ir_emitter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_recompiler/frontend/ir/ir_emitter.h')
-rw-r--r--src/shader_recompiler/frontend/ir/ir_emitter.h69
1 files changed, 36 insertions, 33 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h
index 84b844898..bfd9916cc 100644
--- a/src/shader_recompiler/frontend/ir/ir_emitter.h
+++ b/src/shader_recompiler/frontend/ir/ir_emitter.h
@@ -27,9 +27,9 @@ public:
[[nodiscard]] U16 Imm16(u16 value) const;
[[nodiscard]] U32 Imm32(u32 value) const;
[[nodiscard]] U32 Imm32(s32 value) const;
- [[nodiscard]] U32 Imm32(f32 value) const;
+ [[nodiscard]] F32 Imm32(f32 value) const;
[[nodiscard]] U64 Imm64(u64 value) const;
- [[nodiscard]] U64 Imm64(f64 value) const;
+ [[nodiscard]] F64 Imm64(f64 value) const;
void Branch(IR::Block* label);
void BranchConditional(const U1& cond, IR::Block* true_label, IR::Block* false_label);
@@ -55,8 +55,8 @@ public:
void SetCFlag(const U1& value);
void SetOFlag(const U1& value);
- [[nodiscard]] U32 GetAttribute(IR::Attribute attribute);
- void SetAttribute(IR::Attribute attribute, const U32& value);
+ [[nodiscard]] F32 GetAttribute(IR::Attribute attribute);
+ void SetAttribute(IR::Attribute attribute, const F32& value);
[[nodiscard]] U32 WorkgroupIdX();
[[nodiscard]] U32 WorkgroupIdY();
@@ -87,44 +87,47 @@ public:
[[nodiscard]] U1 GetCarryFromOp(const Value& op);
[[nodiscard]] U1 GetOverflowFromOp(const Value& op);
- [[nodiscard]] Value CompositeConstruct(const UAny& e1, const UAny& e2);
- [[nodiscard]] Value CompositeConstruct(const UAny& e1, const UAny& e2, const UAny& e3);
- [[nodiscard]] Value CompositeConstruct(const UAny& e1, const UAny& e2, const UAny& e3,
- const UAny& e4);
- [[nodiscard]] UAny CompositeExtract(const Value& vector, size_t element);
+ [[nodiscard]] Value CompositeConstruct(const Value& e1, const Value& e2);
+ [[nodiscard]] Value CompositeConstruct(const Value& e1, const Value& e2, const Value& e3);
+ [[nodiscard]] Value CompositeConstruct(const Value& e1, const Value& e2, const Value& e3,
+ const Value& e4);
+ [[nodiscard]] Value CompositeExtract(const Value& vector, size_t element);
[[nodiscard]] UAny Select(const U1& condition, const UAny& true_value, const UAny& false_value);
+ template <typename Dest, typename Source>
+ [[nodiscard]] Dest BitCast(const Source& value);
+
[[nodiscard]] U64 PackUint2x32(const Value& vector);
[[nodiscard]] Value UnpackUint2x32(const U64& value);
[[nodiscard]] U32 PackFloat2x16(const Value& vector);
[[nodiscard]] Value UnpackFloat2x16(const U32& value);
- [[nodiscard]] U64 PackDouble2x32(const Value& vector);
- [[nodiscard]] Value UnpackDouble2x32(const U64& value);
+ [[nodiscard]] F64 PackDouble2x32(const Value& vector);
+ [[nodiscard]] Value UnpackDouble2x32(const F64& value);
- [[nodiscard]] U16U32U64 FPAdd(const U16U32U64& a, const U16U32U64& b, FpControl control = {});
- [[nodiscard]] U16U32U64 FPMul(const U16U32U64& a, const U16U32U64& b, FpControl control = {});
- [[nodiscard]] U16U32U64 FPFma(const U16U32U64& a, const U16U32U64& b, const U16U32U64& c,
+ [[nodiscard]] F16F32F64 FPAdd(const F16F32F64& a, const F16F32F64& b, FpControl control = {});
+ [[nodiscard]] F16F32F64 FPMul(const F16F32F64& a, const F16F32F64& b, FpControl control = {});
+ [[nodiscard]] F16F32F64 FPFma(const F16F32F64& a, const F16F32F64& b, const F16F32F64& c,
FpControl control = {});
- [[nodiscard]] U16U32U64 FPAbs(const U16U32U64& value);
- [[nodiscard]] U16U32U64 FPNeg(const U16U32U64& value);
- [[nodiscard]] U16U32U64 FPAbsNeg(const U16U32U64& value, bool abs, bool neg);
-
- [[nodiscard]] U32 FPCosNotReduced(const U32& value);
- [[nodiscard]] U32 FPExp2NotReduced(const U32& value);
- [[nodiscard]] U32 FPLog2(const U32& value);
- [[nodiscard]] U32U64 FPRecip(const U32U64& value);
- [[nodiscard]] U32U64 FPRecipSqrt(const U32U64& value);
- [[nodiscard]] U32 FPSinNotReduced(const U32& value);
- [[nodiscard]] U32 FPSqrt(const U32& value);
- [[nodiscard]] U16U32U64 FPSaturate(const U16U32U64& value);
- [[nodiscard]] U16U32U64 FPRoundEven(const U16U32U64& value);
- [[nodiscard]] U16U32U64 FPFloor(const U16U32U64& value);
- [[nodiscard]] U16U32U64 FPCeil(const U16U32U64& value);
- [[nodiscard]] U16U32U64 FPTrunc(const U16U32U64& value);
+ [[nodiscard]] F16F32F64 FPAbs(const F16F32F64& value);
+ [[nodiscard]] F16F32F64 FPNeg(const F16F32F64& value);
+ [[nodiscard]] F16F32F64 FPAbsNeg(const F16F32F64& value, bool abs, bool neg);
+
+ [[nodiscard]] F32 FPCosNotReduced(const F32& value);
+ [[nodiscard]] F32 FPExp2NotReduced(const F32& value);
+ [[nodiscard]] F32 FPLog2(const F32& value);
+ [[nodiscard]] F32F64 FPRecip(const F32F64& value);
+ [[nodiscard]] F32F64 FPRecipSqrt(const F32F64& value);
+ [[nodiscard]] F32 FPSinNotReduced(const F32& value);
+ [[nodiscard]] F32 FPSqrt(const F32& value);
+ [[nodiscard]] F16F32F64 FPSaturate(const F16F32F64& value);
+ [[nodiscard]] F16F32F64 FPRoundEven(const F16F32F64& value);
+ [[nodiscard]] F16F32F64 FPFloor(const F16F32F64& value);
+ [[nodiscard]] F16F32F64 FPCeil(const F16F32F64& value);
+ [[nodiscard]] F16F32F64 FPTrunc(const F16F32F64& value);
[[nodiscard]] U32U64 IAdd(const U32U64& a, const U32U64& b);
[[nodiscard]] U32U64 ISub(const U32U64& a, const U32U64& b);
@@ -154,9 +157,9 @@ public:
[[nodiscard]] U1 LogicalXor(const U1& a, const U1& b);
[[nodiscard]] U1 LogicalNot(const U1& value);
- [[nodiscard]] U32U64 ConvertFToS(size_t bitsize, const U16U32U64& value);
- [[nodiscard]] U32U64 ConvertFToU(size_t bitsize, const U16U32U64& value);
- [[nodiscard]] U32U64 ConvertFToI(size_t bitsize, bool is_signed, const U16U32U64& value);
+ [[nodiscard]] U32U64 ConvertFToS(size_t bitsize, const F16F32F64& value);
+ [[nodiscard]] U32U64 ConvertFToU(size_t bitsize, const F16F32F64& value);
+ [[nodiscard]] U32U64 ConvertFToI(size_t bitsize, bool is_signed, const F16F32F64& value);
[[nodiscard]] U32U64 ConvertU(size_t result_bitsize, const U32U64& value);