aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2025-12-09 05:28:01 +0100
committercrueter <crueter@eden-emu.dev>2025-12-09 05:28:01 +0100
commit77d83b008a3d0eab2c97d80cfd1f5d7d2055dec8 (patch)
tree37271d1eae0e089ccc4a87ccb1d60973d90f87a9 /src
parent69a84ee0a6742a51b9059c6a597a6efca7f3af9c (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.cpp11
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 {