Jump: subroutine calls | |||||||||||||||||
main: | subroutine: | ||||||||||||||||
jal offset |
|
addi . . . | |||||||||||||||
sll $0, $0, 0 | ori . . . | ||||||||||||||||
next |
|
blah | |||||||||||||||
. . . | |||||||||||||||||
jr $r31 | |||||||||||||||||
What happens if a jal call is made while in a subroutine? | |||||||||||||||||
return address overwritten with a new return address | |||||||||||||||||
must place the return address onto the stack (memory) | |||||||||||||||||
It turns out that the return address is PC + 8, not PC + 4 | |||||||||||||||||
jump instructions have to be followed by a branch delay slot instruction | |||||||||||||||||
purpose of avoiding stalling in pipelines | |||||||||||||||||