ref: d920d42c8bad0719f8a91f5121d5f7c080e2a332
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; } }