Quote:
You're supposed to use the following instruction slot to do something useful, so you don't want to delay it.
You only delay the instruction if it uses the same register that just got loaded. Not only this makes the pipeline transparent to the programmer, but it also minimizes ROM usage for your program, as if you can't fit anything useful, you don't have to insert a NOP.
Quote:
At least I believe that's how it's done on MIPS (PIC32) too
I'm no expert, I think MIPS exposes delay slots after branches, but I'm pretty sure instructions dependencies are handled correctly. I might be wrong though.
Quote:
What I have more problems with understanding is how MIPS can get away with not having a carry flag
For shift/rotates just check the value before the shift/rotate operation.
For additions, if and only if the result is smaller than any of the operands (unsigned comparison) then a carry has happened.