__smp_xadd4 -- Exchange and Add 4 Byte Values Atomically

Format

#include <builtin.h>
unsigned int __smp_xadd4(unsigned int *op1, unsigned int op2)

Language Level: None
__smp_xadd4 exchanges the 4 byte memory operand, *op1, with the 4 byte immediate operand, op2, and stores the sum of the two values in the memory operand. The exchange and add operation is atomic even on multi-processor machines. This builtin function will not work on a 386 processor.

Return Value
The original value of the memory operand is returned.

Example
This example adds 1 to the value of mem and prints out the original value of mem.

#include <stdio.h>
#include <builtin.h>
unsigned int mem = -1;
int main(void)
{
   if (__smp_xadd4(&mem, 1) == -1)
   {
      printf("Memory location should now be zero.\n");
   }
   printf("mem = %u\n", mem);
   /****************************************
      The output should be:
      Memory location should now be zero.
      mem = 0
   ****************************************/
   return 0;
}


__xadd4 -- Exchange and Add 4 Byte Values