svn commit: r194110 - head/sys/i386/include
Alan Cox
alc at cs.rice.edu
Sat Jun 13 18:10:40 UTC 2009
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.
More information about the svn-src-head
mailing list