Por que o compilador insiste que minha função está embutida quando não está?
Por que estou recebendo
[Erro DCC] ProjectCOWArray.dpr (23): A função embutida E2426 não deve ter bloco asm
program ProjectCOWArray;
{$APPTYPE CONSOLE}
{$R *.res}
type
PRefCount = ^TRefCount;
TRefCount = array[0..1] of integer;
TCOWArray<T> = record
private
fData: TArray<T>;
private
procedure IncRefCount; <<-- not inline
end;
{ TCOWArray<T> }
procedure TCOWArray<T>.IncRefCount;
asm
{$if defined(win32)}
mov eax,fData;
lock inc dword ptr [eax - 8];
{$ifend}
{$if defined(win64)}
mov rax,fData;
lock inc dword ptr[rax -12];
{$ifend}
end;
begin
end.
O Delphi XE2 não possuiAtomicIncrement
, então como resolvo esse problema?
Gostaria de reter o montador, porque, caso contrário, não posso ter olock
prefixo e eu não quero usarInterlockedIncrement
porque essa é uma função WinAPI e eu não quero esse tipo de sobrecarga.