I couldn't wait, I just checked Delphi 4's Free method and it looks like this...
[pascal]
procedure TObject.Free;
asm
TEST EAX, EAX
JE @@exit
MOV ECX, [EAX]
MOV DL, 1
CALL dword ptr [ECX], vmtDestroy
@@exit:
end;
[/pascal]

I am not familiar with assembler at all, so someone will need to tell me if the TEST EAX, EAX is the same as if Self <> nil.