Get rid of .internal.h convention in LIBC_INTRIN

This commit is contained in:
Justine Tunney 2024-07-19 19:36:25 -07:00
parent 0ed916ad5c
commit 86d884cce2
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
591 changed files with 773 additions and 773 deletions

22
libc/intrin/xchg.h Normal file
View file

@ -0,0 +1,22 @@
#ifndef COSMOPOLITAN_LIBC_BITS_XCHG_H_
#define COSMOPOLITAN_LIBC_BITS_XCHG_H_
#include "libc/str/str.h"
/**
* Exchanges *MEMORY into *LOCALVAR.
*
* @return *MEMORY
* todo(jart): what's the point of this?
*/
#define xchg(MEMORY, LOCALVAR) \
({ \
autotype(MEMORY) Memory = (MEMORY); \
typeof(Memory) LocalVar = (LOCALVAR); \
typeof(*Memory) Temp; \
memcpy(&Temp, Memory, sizeof(Temp)); \
memcpy(Memory, LocalVar, sizeof(Temp)); \
memcpy(LocalVar, &Temp, sizeof(Temp)); \
Temp; \
})
#endif /* COSMOPOLITAN_LIBC_BITS_XCHG_H_ */