Un nop può essere utilizzato in uno slot di ritardo quando nessuna altra istruzione può essere riordinata per essere inserita lì.
lw v0,4(v1)
jr v0
In MIPS, questo sarebbe un bug perché al momento in cui jr stava leggendo il registro v0 il registro v0 non è stato ancora caricato con il valore dell'istruzione precedente.
Il modo per risolvere il problema sarebbe:
lw v0,4(v1)
nop
jr v0
nop
Questo riempie gli slot dealy dopo la parola load e le istruzioni jump register con un nop in modo che l'istruzione word load sia completata prima che venga eseguito il comando jump register.
Ulteriori letture - un po 'su SPARC riempimento di slot di ritardo . Da quel documento:
What can be put into the delay slot?
- Some useful instruction that should be executed whether you branch or not.
- Some instruction that does useful work only when you branch (or when you don't branch), but doesn't do any harm if executed in the
other case.
- When all else fails, a NOP instruction
What MUST NOT be put into the delay slot?
- Anything that sets the CC that the branch decision depends on. The branch instruction makes the decision on whether to branch or not
right away but it doesn't actually do the branch until after the delay
instruction. (Only the branch is delayed, not the decision.)
- Another branch instruction. (What happens if you do this is not even defined! The result is unpredictable!)
- A "set" instruction. This is really two instructions, not one, and only half of it will be in the delay slot. (The assembler will warn
you about this.)
Notare la terza opzione nel cosa inserire nello slot di ritardo. Il bug che hai visto era probabilmente qualcuno che riempiva una delle cose che non dovevano essere inserite nello slot di ritardo. Mettere un nop in quella posizione risolverebbe quindi il bug.
Nota: dopo aver riletto la domanda, questo era per x86, che non ha slot di ritardo (la ramificazione invece blocca semplicemente la pipeline). Quindi quella non sarebbe la causa / soluzione del bug. Sui sistemi RISC, quella avrebbe potuto essere la risposta.