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-all mailing list