PERFORCE change 85221 for review
John Baldwin
jhb at FreeBSD.org
Thu Oct 13 10:26:14 PDT 2005
http://perforce.freebsd.org/chv.cgi?CH=85221
Change 85221 by jhb at jhb_slimer on 2005/10/13 17:26:01
Try to use memory operands in atomic operations and add missing
constraints to let the compiler know that the memory is modified
for the userland atomic operations.
Affected files ...
.. //depot/projects/smpng/sys/arm/include/atomic.h#19 edit
Differences ...
==== //depot/projects/smpng/sys/arm/include/atomic.h#19 (text+ko) ====
@@ -77,9 +77,9 @@
static __inline uint32_t
__swp(uint32_t val, volatile uint32_t *ptr)
{
- __asm __volatile("swp %0, %2, [%3]"
+ __asm __volatile("swp %0, %2, %1"
: "=&r" (val), "=m" (*ptr)
- : "r" (val) , "r" (ptr), "m" (*ptr)
+ : "r" (val) , "m" (*ptr)
: "memory");
return (val);
}
@@ -154,16 +154,17 @@
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, [%2]\n"
+ "ldr %1, %2\n"
"cmp %1, %3\n"
- "streq %4, [%2]\n"
+ "streq %4, %2\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
"moveq %1, #1\n"
"movne %1, #0\n"
: "=r" (ras_start), "=r" (done)
- ,"+r" (p), "+r" (cmpval), "+r" (newval));
+ ,"=m" (*p), "+r" (cmpval), "+r" (newval)
+ : "m" (*p));
return (done);
}
@@ -179,13 +180,14 @@
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, [%2]\n"
+ "ldr %1, %2\n"
"add %1, %1, %3\n"
- "str %1, [%2]\n"
+ "str %1, %2\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val));
+ : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (val)
+ : "m" (*p));
}
static __inline void
@@ -200,14 +202,15 @@
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, [%2]\n"
+ "ldr %1, %2\n"
"sub %1, %1, %3\n"
- "str %1, [%2]\n"
+ "str %1, %2\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val));
+ : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (val)
+ : "m" (*p));
}
static __inline void
@@ -222,14 +225,15 @@
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, [%2]\n"
+ "ldr %1, %2\n"
"orr %1, %1, %3\n"
- "str %1, [%2]\n"
+ "str %1, %2\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (setmask));
+ : "=r" (ras_start), "=r" (start), "=m" (*address), "+r" (setmask)
+ : "m" (*address));
}
static __inline void
@@ -244,13 +248,14 @@
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, [%2]\n"
+ "ldr %1, %2\n"
"bic %1, %1, %3\n"
- "str %1, [%2]\n"
+ "str %1, %2\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (clearmask));
+ : "=r" (ras_start), "=r" (start), "=m" (*address), "+r" (clearmask)
+ : "m" (*address));
}
@@ -272,7 +277,8 @@
"2:\n"
"mov %3, #0\n"
"str %3, [%0]\n"
- : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (v));
+ : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (v)
+ : "m" (*p));
return (start);
}
More information about the p4-projects
mailing list