Ed Schouten wrote:
Author: ed
Date: Sat Jun 13 13:56:06 2009
New Revision: 194110
URL: http://svn.freebsd.org/changeset/base/194110
Log:
Simplify the inline assembler (and correct potential error) of
pte_load_store().
Submitted by: Christoph Mallon
Modified:
head/sys/i386/include/pmap.h
Modified: head/sys/i386/include/pmap.h
==============================================================================
--- head/sys/i386/include/pmap.h Sat Jun 13 13:54:03 2009
(r194109)
+++ head/sys/i386/include/pmap.h Sat Jun 13 13:56:06 2009
(r194110)
@@ -362,15 +362,8 @@ pte_load(pt_entry_t *ptep)
static __inline pt_entry_t
pte_load_store(pt_entry_t *ptep, pt_entry_t pte)
{
- pt_entry_t r;
-
- __asm __volatile(
- "xchgl %0,%1"
- : "=m" (*ptep),
- "=r" (r)
- : "1" (pte),
- "m" (*ptep));
- return (r);
+ __asm volatile("xchgl %0, %1" : "+m" (*ptep), "+r" (pte));
+ return (pte);
}
#define pte_load_clear(pte) atomic_readandclear_int(pte)
I'm afraid that this change violates the rules, specifically, "+" cannot
be combined with "m":
File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline,
Up: C Extensions
5.35 Assembler Instructions with C Expression Operands
======================================================
... Extended asm supports input-output or read-write
operands. Use the constraint character `+' to indicate such an operand
and list it with the output operands. You should only use read-write
operands when the constraints for the operand (or the operand in which
only some of the bits are to be changed) allow a register.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"