#include <stdlib.h>
static inline uint
xchg(volatile unsigned int *addr, unsigned int newval)
{
uint result;
asm volatile("lock; xchgl %0, %1" : "+m" (*addr), "=a" (result) : "1" (newval) : "cc");
return result;
}
¿Puede alguien decirme qué hace exactamente este código? Quiero decir que tengo una idea o las partes de este comando. "1" newval es la entrada, "= a" es eliminar su valor anterior y actualizarlo. "m" es para la operación de memoria, pero estoy confundido acerca de la funcionalidad de esta función. ¿Qué hace el signo "+ m"? ¿Esta función hace algo como m = a; m = newval; devuelva un¿Ensamblaje de llamadas en GCC?
también aquí http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6 – osgx