On Wed, Sep 24, 2003 at 03:04:56PM +0900, ?$B9uDE ?$B4pLo wrote: > The following code is from > linux-2.4.20/include/asm-mips/mipsregs.h. > Could anyone tell how the difference between %z0 ("Jr") > and %0 ("r") is? > I compiled this code and deassemble the object, but I > can't find any > difference with my toolchains(gcc-2.95.3, binutils-2.11). > > static inline void set_context(unsigned long val) > { > __asm__ __volatile__( > ".set push\n\t" > ".set reorder\n\t" > "mtc0 %z0, $4\n\t" > ".set pop" > : : "Jr" (val)); > } %z0 is just like %0 except if %0 has the value of 0 the compiler will insert register $0. "Jr" mean the compiler can either use a register or the constant zero. Both combined mean the compiler will not waste a real register but use $zero. Ralf