function CAS8(const oldValue, newValue: byte; var destination): boolean;
asm
lock cmpxchg byte ptr [destination], newValue
setz al
end; { CAS8 }
function CAS32(const oldValue: pointer; newValue: pointer; var destination): boolean;
asm
lock cmpxchg
dword ptr [destination], newValue
setz al
end; { CAS32 }
function CAS64(const oldData: pointer; oldReference: cardinal; newData: pointer; newReference: cardinal; var destination): boolean;
asm
push edi
push ebx
mov ebx, newData
mov ecx, newReference
mov edi, destination
lock cmpxchg8b qword ptr [edi]
setz al
pop ebx
pop edi
end; { CAS64 }
2014-02-21