mftc0() is implemented as .word ... move %0, $1 With at least gcc 3.4.5 the move is implemented as an addu %0, $1, $0. But in the MIPS sumulator this fails and %0 gets the value 0xffffffff. Implementing this as a or %0, $1, $0 instead gives the expected result. Any suggestions where the problem is and what the correct solution is? After fixing this my next problem is that IPIs doesn't reach all TCs correctly (it seams like the code doesn't detect IXMT status correctly, but I am still investigating). It is likely that it is caused by something similar to the problem above. Regards /Mikael