<div dir="ltr">The MIPS R5900 core that powers the PlayStation 2's CPU has a hardware bug that affects very short loops of 6 or less instructions where the processor may fail to branch under "special conditions" (don't you love vague hardware manuals?)<div><br></div><div>The obvious solution is to pad the loop with NOPs so that it is bigger than 6 instructions long.</div><div><br></div><div>However, I have a few questions to ask about this.</div><div><br></div><div>First, where would I go about adding a pass that detects and works around this hardware bug? Presumably it would have to go as a pass after instruction selection, but I'm unfamiliar with LLVM internals in this case.</div><div><br></div><div>Second, assuming I implemented a fix for this, would it get merged upstream? The R5900 isn't a supported processor by either LLVM or GCC, so I could understand some reluctance to merge it, even hidden behind a target feature.</div></div>