Subject: mips inline asm question

From: 黒津 基弥 <[email-masked]>
Date: Wed, 24 Sep 2003 15:04:56 +0900 (JST)

Hi, all;

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));
}

Thanks in advance
mips4700

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/

---

From: Ralf Baechle <[email-masked]>
Date: Tue, 23 Sep 2003 23:22:09 -0700

> static inline void set_context(unsigned long 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