ref: 06b60293ad32c72b3ee5809d47a4c8ed83776d4a
dir: /win32-386/tas.c/
// could also use windozy InterlockedCompareExchange(p, 1, 0), but why int tas(long *p) { int v; _asm { mov eax, p mov ebx, 1 xchg ebx, [eax] mov v, ebx } switch(v) { case 0: case 1: return v; default: print("canlock: corrupted 0x%lux\n", v); return 1; } }