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]"

Reply via email to