Причём, только fpc 3: тот же код, скомпилированный fpc 2.6.4 x86_64 работает отлично.
А вот fpc 3 + x86_64 + asm = битый код, который молча запарывает память и крашится где-то в другом месте.
Потом найду время - заставлю высрать ассемблерный вывод чтобы понять, чего он такого косячит. Навскидку - забивает на объявления запорченных регистров в конце asm блока.
З.Ы. Проверял только под {$asmmode intel}
Добавлено спустя 3 часа 5 минут 23 секунды:
Ничего не понимаю.
Выглядят одинаковыми:
- Код: Выделить всё
- Result^.events[High(Result^.events)].eType:= deke_Terminator;
 {$ifdef CPUX86_64}
 asm
 mov rsi, qword[Result]
 mov ax, ss
 mov word[rsi + TMotherSEHState.StackSegment], ax
 end['rax', 'rsi'];
 {$endif}
 {$ifdef CPU386}
 asm
 mov esi, dword[Result]
 mov ax, ss
 mov word[esi + TMotherSEHState.StackSegment], ax
 end['eax', 'esi'];
 {$endif}
 LeaveCriticalsection(Mother^.SehCriticalSection);
2.6.4:
- Код: Выделить всё
- ; [37] Result^.events[High(Result^.events)].eType:= deke_Terminator;
 mov rax,qword ptr [rbp-8]
 ; Register raxreleased
 mov dword ptr [rax+59118],1
 ; Register raxallocated
 ; Register rsiallocated
 @@l3527:
 ; [43] mov rsi, qword[Result]
 mov rsi,qword ptr [rbp-8]
 @@l3528:
 ; [44] mov ax, ss
 mov ax,ss
 @@l3529:
 ; [45] mov word[rsi + TMotherSEHState.StackSegment], ax
 mov word ptr [rsi+60],ax
 ; Register raxreleased
 ; Register rsireleased
 ; Register raxallocated
 @@l3530:
 ; [56] LeaveCriticalsection(Mother^.SehCriticalSection);
 mov rax,qword ptr [U_CL_CGE_MOTHER+$]
3.0.4:
- Код: Выделить всё
- # [37] Result^.events[High(Result^.events)].eType:= deke_Terminator;
 movq -8(%rbp),%rax
 movl $1,59118(%rax)
 # Register rax released
 # Register rax,rsi allocated
 .Ll4092:
 # [43] mov rsi, qword[Result]
 movq -8(%rbp),%rsi
 .Ll4093:
 # [44] mov ax, ss
 movw %ss,%ax
 .Ll4094:
 # [45] mov word[rsi + TMotherSEHState.StackSegment], ax
 movw %ax,60(%rsi)
 # Register rsi released
 # Register rax allocated
 .Ll4095:
 # [56] LeaveCriticalsection(Mother^.SehCriticalSection);
 movq U_$CL_CGE_$$_MOTHER(%rip),%rax






 
 
