Hello Gurus
Question from a mips new-bie
127 extern __inline__ void atomic_add(int i, atomic_t
* v)
128 {
129 unsigned long temp;
130
131 __asm__ __volatile__(
132 "1: ll %0, %1 #
atomic_add\n"
133 " addu %0, %2
\n"
134 " sc %0, %1
\n"
135 " beqz %0, 1b
\n"
136 : "=&r" (temp), "=m" (v->counter)
137 : "Ir" (i), "m" (v->counter));
138 }
Now I look at the input operand v->counter
We want two things :
1. Hint the compiler that memory at (v->counter) is
modified.
2. Result of (C expression) should go into %xyz
register
So v->counter goes into %1, IOW ll from an int!
Does not make sense to me.
Why does it work, What am I missing?
I mean in general what is the expression for a m
constraint ptr (because I want ptr to be in regiser)
or *ptr (because I wanna tell compiler that *ptr is
what gets changed)
I hope you include me in reply as I am not subscribed
to this list. Is there anyway to check this mailing
list online
Thanks and regards
__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html
|