All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ralf Baechle <ralf@linux-mips.org>
To: "Mike K." <linux_linux_2003@hotmail.com>
Cc: linux-mips@linux-mips.org
Subject: Re: __asm__  C code in mips-Linux
Date: Thu, 3 Apr 2003 04:09:47 +0200	[thread overview]
Message-ID: <20030403040947.A21764@linux-mips.org> (raw)
In-Reply-To: <BAY2-F148jSQU0d0uub000985dc@hotmail.com>; from linux_linux_2003@hotmail.com on Wed, Apr 02, 2003 at 05:02:08PM -0800

On Wed, Apr 02, 2003 at 05:02:08PM -0800, Mike K. wrote:

> extern __inline__ void atomic_add(int i, atomic_t * v)
> {
> 	unsigned long temp;
> 
> 	__asm__ __volatile__(
> 		"1:   ll      %0, %1      # atomic_add\n"
> 		"     addu    %0, %2                  \n"
> 		"     sc      %0, %1                  \n"
> 		"     beqz    %0, 1b                  \n"
> 		: "=&r" (temp), "=m" (v->counter)
> 		: "Ir" (i), "m" (v->counter));
> }
> 
> 
> Beginner questions on the above code:
> 1. what is %0 %1 %2?
> 2. what is the details meaning of the last two line of the above code?

%0 stands for the 0th operand of the asm statement, that is the temp
variable, %1 for the first that is v->counter, %2 for the second that is
the variable i.  In the strings like "=&r" the = means that the argument
will be assigned to, r means the argument / result is to be passed in a
register (%0 will then be replaced by gcc with that register) and m
means some memory location, gcc will then replace %1 with that memory
location.  "Ir" means gcc can pass the variable i in either a register
(that's the r) or as a 16-bit constant (the I).  Again %3 will be
replaced with whatever gcc deciedes to pass here.  All the output
operands are listed after the first colon - and be marked with a = sign;
the input operands are listed after the second colon.  After a third
colon all registers that get destroyed by a piece of inline assembly
can be listed like :"$5","$6" but we don't need that here.

> 3. Very thanksful if you can comment each line with detail description  for 
> me, thanks a lot!

Your basic spinlock described in the R4000 manual from 10 years ago :-)

  Ralf

  reply	other threads:[~2003-04-03  2:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-03  1:02 __asm__ C code in mips-Linux Mike K.
2003-04-03  2:09 ` Ralf Baechle [this message]
2003-04-03 12:58 ` Kevin D. Kissell
2003-04-03 12:58   ` Kevin D. Kissell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030403040947.A21764@linux-mips.org \
    --to=ralf@linux-mips.org \
    --cc=linux-mips@linux-mips.org \
    --cc=linux_linux_2003@hotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.