Emulator Issues #11778
ARM64 JIT Bug: SD Gundam - Scad Hammers hangs after Level 1 dialogue
RSDJAF - SD Gundam: Scad Hammers hangs after Level 1 dialogue, and random hangs in other level after dialogue.
void JitArm64::fcmpX(UGeckoInstruction inst) function doesn't work correctly.(
fcmpo, Floating Compare Ordered)
JitArm64::FallBackToInterpreter and it work fine.
#2 Updated by degasus over 1 year ago
weihuoya, may you do me a favor and debug a bit more within this instruction?
First, let's check if there is an dependency on the former or the later intstructions. So please insert in https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp#L255 this code once in the beginning and in a second test in the end:
If flushing the register cache in the begin of the instruction fixes the issue, the bug is likely within some special cases within this instruction.
If flushing in the end of the instruction fixes it, the bug is within another instruction and the bisecting to fcmp is wrong.
If the bug still happens with both flushing, the bug must be within this instruction. So this should be easy to fix.
Afterwards, especially in the first and last case, I'd like to check which of the cases within the instruction are affected. So may you please add in line 267 this code:
FALLBACK_IF(a != b);
even better would be the full combination of
FALLBACK_IF(a != b && singles);
This should highlight where to search for the issue.
Thanks a lot.
#3 Updated by weihuoya over 1 year ago
- File game hangs.jpg game hangs.jpg added
- File flush in the beginning.jpg flush in the beginning.jpg added
- File fallback to interpreter.jpg fallback to interpreter.jpg added
flush in the beginning: black screen.
flush in the end: nothing changes.
FALLBACK_IF(singles && a != b && inst.SUBOP10 == 32); in the beginning, fix issue.
#4 Updated by weihuoya over 1 year ago
FALLBACK_IF(singles && a != b && inst.SUBOP10 == 32); wiil cause metroid prime black screen. https://www.youtube.com/watch?v=8V_0z_5y7WA&feature=youtu.be
FALLBACK_IF(a != b && inst.SUBOP10 == 32); fix metroid prime.