diff options
| author | lizzie <lizzie@eden-emu.dev> | 2025-12-09 05:28:01 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-12-09 05:28:01 +0100 |
| commit | 77d83b008a3d0eab2c97d80cfd1f5d7d2055dec8 (patch) | |
| tree | 37271d1eae0e089ccc4a87ccb1d60973d90f87a9 /src | |
| parent | 69a84ee0a6742a51b9059c6a597a6efca7f3af9c (diff) | |
[dynarmic] avoid IsInmediate() comical call recursion (#3145)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3145
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarmic/src/dynarmic/ir/value.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/dynarmic/src/dynarmic/ir/value.cpp b/src/dynarmic/src/dynarmic/ir/value.cpp index 6f8a386827..59b17b5a7b 100644 --- a/src/dynarmic/src/dynarmic/ir/value.cpp +++ b/src/dynarmic/src/dynarmic/ir/value.cpp @@ -100,9 +100,14 @@ bool Value::IsEmpty() const noexcept { } bool Value::IsImmediate() const noexcept { - if (IsIdentity()) - return inner.inst->GetArg(0).IsImmediate(); - return type != Type::Opaque; + IR::Type current_type = type; + IR::Inst const* current_inst = inner.inst; + while (current_type == Type::Opaque && current_inst->GetOpcode() == Opcode::Identity) { + Value const& arg = current_inst->GetArg(0); + current_type = arg.type; + current_inst = arg.inner.inst; + } + return current_type != Type::Opaque; } Type Value::GetType() const noexcept { |
