On 13-Apr-99 Mitchell Blank Jr wrote:
> Dave Airlie wrote:
>> The piece of code below is from int-handler.S,
>> on line 7 below (b find_int) does this jump unconditionally to
>> because if it does what is the and for afterwards as surely it will
>> get processed...
> MIPS has something called a "branch delay slot". The instruction
> immediately following the branch always gets executed EVEN IF THE
> BRANCH HAPPENS. Basically, this improves pipeline efficiency
> since you can set up for the branch while you are still doing useful
> stuff. Sometimes you have to put a NOP there because after producing
> enough information for the branch to be decided theres no work left
> to do.
> Most modern processors do something like this behind your back. On the
> MIPS, it is explicit and you (or your compiler) has to manually decide
> what to put there.
To make things even more interesting, the pipelines on R2000/R3000
processors are non interlocking, in contrast to the R4000 and higher. That
means that even load delay slots are visible.