diff options
| author | 2021-05-09 22:43:29 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:31 -0400 | |
| commit | ad61b47f80b96436ef675abcf1123668d9c1180d (patch) | |
| tree | 555fb6be6058322eae22e7088e8fbc4a615f796d /src/shader_recompiler/backend/glasm/reg_alloc.h | |
| parent | glasm: Add fp min/max insts and fix store for fp64 on GLASM (diff) | |
| download | yuzu-ad61b47f80b96436ef675abcf1123668d9c1180d.tar.gz yuzu-ad61b47f80b96436ef675abcf1123668d9c1180d.tar.xz yuzu-ad61b47f80b96436ef675abcf1123668d9c1180d.zip | |
glasm: Add conversion instructions to GLASM
Diffstat (limited to 'src/shader_recompiler/backend/glasm/reg_alloc.h')
| -rw-r--r-- | src/shader_recompiler/backend/glasm/reg_alloc.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/shader_recompiler/backend/glasm/reg_alloc.h b/src/shader_recompiler/backend/glasm/reg_alloc.h index f1899eae1..200c51610 100644 --- a/src/shader_recompiler/backend/glasm/reg_alloc.h +++ b/src/shader_recompiler/backend/glasm/reg_alloc.h | |||
| @@ -27,6 +27,7 @@ enum class Type : u32 { | |||
| 27 | U32, | 27 | U32, |
| 28 | S32, | 28 | S32, |
| 29 | F32, | 29 | F32, |
| 30 | U64, | ||
| 30 | F64, | 31 | F64, |
| 31 | }; | 32 | }; |
| 32 | 33 | ||
| @@ -55,6 +56,7 @@ struct Value { | |||
| 55 | u32 imm_u32; | 56 | u32 imm_u32; |
| 56 | s32 imm_s32; | 57 | s32 imm_s32; |
| 57 | f32 imm_f32; | 58 | f32 imm_f32; |
| 59 | u64 imm_u64; | ||
| 58 | f64 imm_f64; | 60 | f64 imm_f64; |
| 59 | }; | 61 | }; |
| 60 | 62 | ||
| @@ -71,6 +73,8 @@ struct Value { | |||
| 71 | return imm_s32 == rhs.imm_s32; | 73 | return imm_s32 == rhs.imm_s32; |
| 72 | case Type::F32: | 74 | case Type::F32: |
| 73 | return Common::BitCast<u32>(imm_f32) == Common::BitCast<u32>(rhs.imm_f32); | 75 | return Common::BitCast<u32>(imm_f32) == Common::BitCast<u32>(rhs.imm_f32); |
| 76 | case Type::U64: | ||
| 77 | return imm_u64 == rhs.imm_u64; | ||
| 74 | case Type::F64: | 78 | case Type::F64: |
| 75 | return Common::BitCast<u64>(imm_f64) == Common::BitCast<u64>(rhs.imm_f64); | 79 | return Common::BitCast<u64>(imm_f64) == Common::BitCast<u64>(rhs.imm_f64); |
| 76 | } | 80 | } |
| @@ -103,6 +107,10 @@ public: | |||
| 103 | 107 | ||
| 104 | void FreeReg(Register reg); | 108 | void FreeReg(Register reg); |
| 105 | 109 | ||
| 110 | void InvalidateConditionCodes() { | ||
| 111 | // This does nothing for now | ||
| 112 | } | ||
| 113 | |||
| 106 | [[nodiscard]] size_t NumUsedRegisters() const noexcept { | 114 | [[nodiscard]] size_t NumUsedRegisters() const noexcept { |
| 107 | return num_used_registers; | 115 | return num_used_registers; |
| 108 | } | 116 | } |
| @@ -210,6 +218,7 @@ struct fmt::formatter<Shader::Backend::GLASM::ScalarU32> { | |||
| 210 | return fmt::format_to(ctx.out(), "{}", static_cast<u32>(value.imm_s32)); | 218 | return fmt::format_to(ctx.out(), "{}", static_cast<u32>(value.imm_s32)); |
| 211 | case Shader::Backend::GLASM::Type::F32: | 219 | case Shader::Backend::GLASM::Type::F32: |
| 212 | return fmt::format_to(ctx.out(), "{}", Common::BitCast<u32>(value.imm_f32)); | 220 | return fmt::format_to(ctx.out(), "{}", Common::BitCast<u32>(value.imm_f32)); |
| 221 | case Shader::Backend::GLASM::Type::U64: | ||
| 213 | case Shader::Backend::GLASM::Type::F64: | 222 | case Shader::Backend::GLASM::Type::F64: |
| 214 | break; | 223 | break; |
| 215 | } | 224 | } |
| @@ -233,6 +242,7 @@ struct fmt::formatter<Shader::Backend::GLASM::ScalarS32> { | |||
| 233 | return fmt::format_to(ctx.out(), "{}", value.imm_s32); | 242 | return fmt::format_to(ctx.out(), "{}", value.imm_s32); |
| 234 | case Shader::Backend::GLASM::Type::F32: | 243 | case Shader::Backend::GLASM::Type::F32: |
| 235 | return fmt::format_to(ctx.out(), "{}", Common::BitCast<s32>(value.imm_f32)); | 244 | return fmt::format_to(ctx.out(), "{}", Common::BitCast<s32>(value.imm_f32)); |
| 245 | case Shader::Backend::GLASM::Type::U64: | ||
| 236 | case Shader::Backend::GLASM::Type::F64: | 246 | case Shader::Backend::GLASM::Type::F64: |
| 237 | break; | 247 | break; |
| 238 | } | 248 | } |
| @@ -256,6 +266,7 @@ struct fmt::formatter<Shader::Backend::GLASM::ScalarF32> { | |||
| 256 | return fmt::format_to(ctx.out(), "{}", Common::BitCast<s32>(value.imm_s32)); | 266 | return fmt::format_to(ctx.out(), "{}", Common::BitCast<s32>(value.imm_s32)); |
| 257 | case Shader::Backend::GLASM::Type::F32: | 267 | case Shader::Backend::GLASM::Type::F32: |
| 258 | return fmt::format_to(ctx.out(), "{}", value.imm_f32); | 268 | return fmt::format_to(ctx.out(), "{}", value.imm_f32); |
| 269 | case Shader::Backend::GLASM::Type::U64: | ||
| 259 | case Shader::Backend::GLASM::Type::F64: | 270 | case Shader::Backend::GLASM::Type::F64: |
| 260 | break; | 271 | break; |
| 261 | } | 272 | } |
| @@ -277,6 +288,8 @@ struct fmt::formatter<Shader::Backend::GLASM::ScalarF64> { | |||
| 277 | case Shader::Backend::GLASM::Type::S32: | 288 | case Shader::Backend::GLASM::Type::S32: |
| 278 | case Shader::Backend::GLASM::Type::F32: | 289 | case Shader::Backend::GLASM::Type::F32: |
| 279 | break; | 290 | break; |
| 291 | case Shader::Backend::GLASM::Type::U64: | ||
| 292 | return format_to(ctx.out(), "{}", Common::BitCast<f64>(value.imm_u64)); | ||
| 280 | case Shader::Backend::GLASM::Type::F64: | 293 | case Shader::Backend::GLASM::Type::F64: |
| 281 | return format_to(ctx.out(), "{}", value.imm_f64); | 294 | return format_to(ctx.out(), "{}", value.imm_f64); |
| 282 | } | 295 | } |