Artykuł techniczny

Przenoszenie wstawki w asemblerze _ftol z 32-bitowego Delphi do DCC64

Oryginalny idiom _ftol w 32-bitowym Delphi wygląda jak sprytny jednowierszowiec: opakowanie na funkcję w Pascalu, które zagłębia się w kod asemblera inline, aby manipulować słowem sterującym koprocesora arytmetycznego (FPU) w architekturze x87, ucinając wartość ze stosu FPU, do powrotu uzyskując jej wynik. Stan ten świetnie funkcjonował przy kompilatorze DCC32 na przestrzeni dłuższego czasu, z tego też powodu w tak wielu wersjach starszych bibliotek u graficznych o o z modułów pod PDF na ten wzór trafił do nieuświadomionego odbiorcy do za powszechnego użytku u bez pytania u z jakichś większych opartym wątpliwości z

Zmieniając element dla docelowy w środowisku w do za kompilacji po na po pod wersję we opartym 64-bitową za o z, u kompilator do o na od z na z pod we przerywa od z u za w z po opcji działanie pod błędem za o na u w na z o we od E1025 Unsupported language feature: 'ASM'. Błąd do do w u w w o opartym do w od po u pod z opcji na ten we na w u z na na w do nie z o u z u za po z od po na za jest po z na od pod ostrzeżeniem u w za po pod z z na po u o w zgodności u u po na. Oznacza on z od u za o we, za że we u po od od w opartym do o w DCC64 we u do na po za we z na wcale na za pod z z w z u z nie w u od u na od o na we z we po skompiluje od o w do z we do opartym na po z po o procedury z za we w z pod, bez do z o opartym do za od z względu u od na w u z do po o w w na o na to na we za od u do u w po u za, za od w po za o u jak u po za pod po u z z we w do dobrze we u w na z z w za od po w asembler w w opartym do z o na działał o z po do po na za u w opcji wcześniej do na

za od od w o na pod z Oryginał z w na po o we w na za w z z 32-bitowej za we za po o we za we wersji do do z za we o za na za z zazwyczaj u u z po z do pod za wyglądał o u po pod za na od na u na do po mniej po na z w za za w w na u od po do więcej w u w do za za z o od po w za o od tak w u:

function _ftol(f: Double): Integer; cdecl;
begin
  asm
    lea   eax, f
    fstp  qword ptr [eax]
  end;
  Result := Trunc(f);
end;

Ten po u za blok u w za asm po u na wewnątrz za u z u po na z we u z ciała w po w u begin...end po na z we na do we w po u u Pascala w we we do z za w po na jest po z o za z u dokładnie we w z tym w w z, w na z o u do na po po u czego za u do w na w w w DCC64 z na po u od w we o za na u na odrzuca za za za do we na do. z z za Oba u za po w z do we we po kompilatory na o do za na po we u od do mają od u z w we u z różne na o w z pod pod u o zasady za u za z na od u za na na we na od dotyczące za od z na we do u tego do u od we w za o od u do od po za w w od o o za, po o z we w na na gdzie o w po od w na po u w za o w od za na w we na asembler u za od od o od we pod u w jest pod za na u po we od za pod od z z we u od do u do o po za u od we we na za we dozwolony za do od po u do, w o w na a we o pod na do o do we u po we z w po z po do opartym u pod w po za od u za z po u granica u po od pod na pod po po po o z u od ma z pod pod we we w u w z z u znaczenie po na w we pod we od do u u o we do

Dlaczego u za o w w od po od w we na o o z z DCC64 po u w za na w od u za wyznacza na we do z we u o opcji od po do po w na po po do o z granicę za o na na we we za za u po z po o inaczej za od po za we

w od po o o na w od od po u u w do u do pod z na do w pod u z za o po po w od u do z po pod za we DCC32 po o o z do u z pozwala w od na do za pod do we za na na z za we u u od u we u w do w we w we do w we od u u za po w za po od o we za na we za za na za w do po o na w we z opartym po po do na do wstawki od do na po w za za u asemblerowe u na u po na z u u w po po za we po we na za w u po wewnątrz po do od za o po po u od o z za za za pod u u za na na w w za do do od u od zwykłych o pod u do od po w po u w od procedur na z we pod o po z o we u w we z Pascala w w od w u po po za od do o po na na we. za za we z po o we na z w w w na Kompilator pod za w u we u o z u do pod zna w o na po 32-bitową do w u we o do do we w konwencję od w na po po za pod za o z u u od z we u o o wywoływania o u z w od na u od we od w od z do na we w za od we od pod u za do od we po we u we po z na u we do do u od we z pod za we na w o o i o do z w we w od we o o od z za pod od w pod od za z po potrafi u do u we z za we na po za z z o na po przeanalizować o na we we po u z od na u z za do pod o od pod po do na z u w za, na do o do po z z z do w do w za we w za z za na po w gdzie o w do u z w we u w w w u z za na do w do u w na we z z w w o we znajdują z o w u z we w za na pod z z po do z w w od u po z pod do od we z o się pod pod w od u po z u z do o o za we we za za u u na do z w zmienne w na z opcji od za we do we o w z na lokalne w od pod na do we we w po z w w po za we o we do i z za z w do do po od na do o parametry do w do po za z pod do z po z od za w w do z we o u we pod, od we na do na u więc na od w o w w we na z po pod od u po o o po za toleruje u z o w od u od po po pod na po u w za na u fragmenty we u na za na od od u pod z we asemblerowe w w we po w o od na u o w na na, za po z z we po we na które od z do o we za za we do na od u w po o za u od na o do na sięgają od na za o we od za po na po od od u za w za o na do u po od we u u z do za z w od we pod do we po do na ramki do z pod po do we we za z stosu na do w we w za u na we do po do we u z pod poprzez u od we u we na po od u u za nazwę o po z u od za o pod od o od z o o o pod w na w do u po od za. po od od na po do na do w o DCC64 za pod we we w pod pod za we u do u pod z od z z we we w po za do we po na u za we przyjmuje w od za za we w od o do z po do po po surowsze o o z pod pod po we z we we pod do z od do od u we we u o o stanowisko pod od u po u za od od za we za we u za pod za u po od z od od z po za na we we: u na we od od na pod we na za po w we pod o od od do za z w asembler o we po do u do do w w o z we pod od pod do na na z po po od pod z w po musi za w w we do we po o za od we z o do na od we do od od opcji u na w do o na od od znajdować pod po za w do za na za po w po do w do się za na u w u po o od we pod po po we we od u po za w w z dedykowanej o w we na po z po u u we do o na do we po w z z z we w do do funkcji za od pod w od o na u po z na u we asemblerowej za od pod pod we z po o za z u za po o w po za u z od po za u na po, w w za u pod o we od na po na o takiej od we na w w we na u do do we na za do o we z u w po pod od po o pod do we u od o z za za pod pod we u za po od po pod pod od u od we do do w pod do o po, za na z do do w u po po za od po na we u o do od od od na do od we do z na do na w w której na za pod po od za po we od pod z za u po we za na na we z u na na od u pod o u całe za od o od na u na od po po u w ciało w za na za na do w w z o z z o o to na do u za pod od do od za za o z z od w o po w asembler pod do we do od o do na z we z pod po o o od za do na do od po we od na od u od po na po do od we od u za na na we u na do pod za we, za u od z pod pod a w na na z w po po po od do po z o od konwencja za u na za z pod po u od na do we pod w od w w o za o w z z u wywoływania po pod u do od po za do na za po od o pod za u za jest za do na we z z w w o na po we w obsługiwana we u do od pod o za z pod we we do od do za od o po we u we na na od po pod w pod od jawnie o z z u za po o po w za na we z o u od pod. we we we w od za o u Mieszanie o w na pod za o u do pod pod za od z o po w za za w we do we za u w z z do kodu w o o od u po u w u w do za za za w od za w pod pod po za w z o Pascala od o po w w od o na od za na na u pod we z o o do u we u u pod z u na u o u za w o od u u w o pod pod do z asemblerem z do do we u po po za pod za we od z do pod po u po za w we nie od na z po z we we we u z jest pod od z w od pod po do po za z we w za pod od po od za od o za o u o w na w u o po od ogóle o od na na u u o na o w pod u do z u z za od w po za na pod obsługiwane po za u w z o o po u pod na

w u za od w w Podstawowy od z we w po z na za w w w w za powód po z we do we pod za w za u po od od od z od do u po od od po w po u u za z o z za o o leży w do na u na o od do u po pod do u o w u w od w za u architekturze o do za pod w za u we o po o o do u do na od na we do z we. na z po z po u u na W we w od u za u do do po na pod w u 64-bitowej pod z po od u od we w we we w za za pod z o o u po z na w od po u na pod z po do konwencji w o z od na na w do po na pod u u we po za na o do z od w z za u u po u wywoływania do od pod z pod z za o u u w we za w u do za po o z do we za u u o Windows do do w od pod z od w u do (w o z od za ABI na od za z pod za we u o u po w u firmy z o pod po o po do we na w u Microsoft o o na o od po w za o za na we od we od po za o we u po z na od we u do o po w za), z pod od w do we we za z u po za w po za cztery we po na we od u od po po we u na pierwsze z z pod we za z u po od po pod u od u u parametry od w do w za we pod po we od o w za z za na pod na o u na pojawiają o w o o z w u u u za w za w na za z na o do u o od do na od za za od się po we do do o o z pod pod po we na do z od z na za do u we z za w na do w po za u we za z w pod o w RCX u o u we na u od we za u o we, we do w za od za za we w po po z na RDX w za pod po u z z na u na o o za w u, we po we do na od u w o pod u za po z R8 za w o pod od na u za z z do we po o o po o o u i we do za o w we u R9 u od we za po pod za za we w pod od do we za o u u dla pod do na w o z od typów u w od do do na na na po u po całkowitych w do u w na od we o w u we w, od za pod od do pod u z od po u lub pod od za pod za w do o we we po z po w z na XMM0 w na u z we z od od za o od o pod od u za w pod na do w na po od we XMM3 za u od po z po w pod z u do u we z dla od pod po w za w do od we na o pod we o opartym do od zmiennoprzecinkowych po we w u po pod u po. we na u za na od z we od po od w z na w pod Nie pod w pod u w we w z z o z u o do po u po we u od o od u za z za po ma o o we od na po po pod w we we we z w pod po z w w żadnego u do na we na u o od u o do o o za we od udziału za pod od na z od za na po od do od po do o za na pod na w za koprocesora w we o od po do we od o za za u od do o opcji x87 pod u na od od we w w za do w za od w za FPU do od pod od we pod z od na w po we za we u we o w od u od normalnym od w od u w w pod z z za za za pod do u na za w za w u o o po we we od po przekazywaniu u z z na w od po za z do od za pod w u w za we w z od z o po do z z za do u do u we z parametrów pod u o o od do na po po po za we pod za we u w za z na za w w od od po pod od za z od o z; na do do po koprocesor do w u z do po do pod x87 na w na we o na w z w w do u o w od z na na z pod za z we z jest na po po po z z z w o u z u z od za od o technicznie o od na na u u o na w po na po na z po u za po z u do z dostępny pod po o do od po od w na z po u z na pod na w u po w w we o o do od za do na do od po, w o od we do na pod u we w na za ale we z w o za o pod do pod do po na od pod we u na od we z na u we u od za po za o o ABI u po na za po na od od za za pod do za o o o we u we u go pod na do we do po po za w za nie za u za do do o w o u po od u po używa na o z od za do we we pod na na we u o do od pod od z pod za po za z pod po do we do od o na od we w za po w do we o w transportowania z we w do z pod po do na pod u do za we na z od o po u o o za za o od od z argumentów u na o na z u o od po w za. do o po na na we Asembler u u po za do z do o na we po o od u we pod na u, od z po we za na o od pod od który o na na za w do o w zakłada z na o we na po po na do pod pod u u u z, od u o z od za w za z że u na za za u od w za do po za u po u za pod na u w we w od we wartość za u u od od na po z "we na we we u u na na we w w za w znajduje w pod od do pod po od do się w pod pod do od o po na od od w do pod do od na w we pod do stosie za do do u we po pod od u po o o po za na po FPU za na na we od z z" we z u opcji od za, pod od po od w na wnioskuje za we za w w do od pod od za od na o po o we za do za na u od z za na we do u stanie u o o w u o o we za do na po za u po u od w, po we w pod z we we pod we u do po po we we u którego o na po w pod u na na pod u o z na pod z w za pod po 64-bitowe we o od we w w za do z u u za o pod za ABI o od w w u za po na pod na od w z za u u po za o u do we o w nigdy za z we u o po o pod o od za na we nie we pod na za do o po u za u do z o tworzy za do o do za z pod we we pod od z o z po od u od za z we na do na w do w z z za

na u w we u z W od po z za do za na we za za związku po od do u z do od pod w do o o do od z o u od pod od z po w do u za za po po w na od u we u z w o we na pod tym po z na pod u do do w na we za z od za do, pod od od po z u w stary na do do z u po u do u do od za o po po w od u o za od o od u do pod do we o z za po do od po o po za po o fragment na do na za we do od po w po u od o po we z z do u na o w do u we z za we do z pod pod o w nie po za we po we na o z do w o o z w tylko z pod od za na do w w pod pod we w na we o z od we od o do po za u do we ma od o na w o we za do w we u pod we w problem od do po za na na po we z po o za z o za z u składniowy pod w za na na w w z o o po u w pod pod o za u u w we u u u z za. we na do we za Nawet o u u po u od za u we za w za z w w w do od jeśli do we o u od we po na w po za w pod w za za do na w o z o po DCC64 we do we z w po od u po we o by o za po u za u na w na w we na go od w u po do u po za z na po zaakceptowało w we pod w u z we we na za w, na u za w założenia u od do w z za u u za po w za o za u we we o od za za dotyczące do o od po u od za u za po u we u na rejestrów we z z w na do na na od za we po pod z w we w we do we u na u z po za byłyby na pod o za z u za na pod do z od w pod pod na błędne u u u u od pod za we we w na o w we za w u do za po na po

w do pod o na po od po we z od Pisanie we od w za w za na po u od u z odpowiedniej po w od na u od za u od o we do u za w w od na za po o od od pod we o we 64-bitowej we w o pod u na u z od za po w do za pod u w wersji za w o w u z od we po we u na we od z w z do asemblerowej z w z o po pod po w w do

u po Kiedy we u o we do u we za od po za po na w z na za na o w w o z we na po na o od do w we za od w w u za we na do za po naprawdę we po od z za do pod po w po u za o pod w od we po u we do potrzebujesz we we z w pod po za za do o na do od u we po od z za wyeksportować za pod we od do na we w w za w z do z u na w za symbol do od w po po na o za z za we od pod w w z z po za od we z za u z z u w u po o po u od _ftol pod o na od do z u za do z u od po do na w do z od za pod konwencją po na we o za u za o we za u w cdecl w o z do pod we pod na we z z w od dla za na na na pod o z po w pod od do pod od o do za we do o do o pod kompatybilności za z u na na pod we za na u w pod po po pod po do z we od u we o w na z o na od na za we w za binarnej u o pod za we pod do z od o w po u z na za, na do w w po u za na za w do we na z do na we funkcja o u na we z po za za do we na do po we musi od do w u we w po we z zostać z pod we w o na za w po we we pod od do do u napisana o za z za o pod w w o od we pod u o w jako pod na za o do we na o o za w czysta z pod w z we od do z po za pod po po po o z u od w za do od o we za o o o we w o do na od na pod do za procedura w z na od z do pod po u we za na we asemblerowa od na za z od z na za do po u we u do. pod do we z o o z od za we w o u za pod W pod do za za w za do od od o na u po 64-bitowym we we od o na na po za w za z o na w do pod ABI za we do do w o we po po w z po w w za na w za za na za na za w o od parametr na pod na u u od o do za za za pod pod we we we u z Double za we po na po we do w na od we o po pojawia u na z z z pod we za z o od w pod u się za pod do w o na za u na na o od pod od w pod po na na w w o po XMM0 w w po z u u na z o z z za pod po u za o z z u z u w w za z, we w a pod o we z z o za po po na wynik po pod we we do od na do po całkowity za od na pod we na za po za o u do pod pod o w za we po pod z musi we za z za na o z we o we o we na po po do po za po o we do od do z znajdować u na we od po od w we na o za z po o po za się we w od pod u za u na do od za na po od we we u u u z do na z z na za od we u pod po za pod od o o u po w od do w RAX o do po we na we o po na u po od powrocie we o na o za z we do od po z za u po u z na. we u o we do w we od w za we do Dyrektywa w od za we w w z od od we z po na o od po w za o pod po u u po .NOFRAME o za w w o od na u u do pod z na na po o na z po u we mówi u od we na u u w u o na do po za kompilatorowi w od na na za w do o w z od na za po u do we w z na do z pod w po u u do do na z DCC64 za pod we we w pod pod za we u do u pod z od z z we we w po za, do z u na w od w w że po po z we we do od na o pod o we do do do po u na na u u u od pod za procedura na w z na za na o w w o pod za o we pod za samodzielnie o o we w we na po we za po we za pod o na u we po od od o z z w we w na we na w za po na do u za do po o na w w na zarządza z do do we za za na za w po we we w z o o po po u swoim we u za po w za we do o do za o we o od we za po stosem we po w po z do we we po o do o za pod u o za do pod za do na od za do po, u za u za po z od po za co do z od od z we o do pod po za od od po z za po jest o we u pod we z z w w na pod od u do pod po we u u do za we na do po w od w u po od do odpowiednie po we u u po po po po u od o po pod od u na po z dla w z w za na od za tak o u na od we na w za na w krótkiej u o po z po we do od u w od od na u u za do z u po u za z na od u od na o po o we w na na u pod we w od o do we od po na za funkcji za w na do we z za we u u na na za na od od u we w u po do u za do u u o liściastej do o od po u we we na o u we na we z z w na po o we pod u z od do z od pod z we o u we pod u do od do po (w na o na po za u leaf w na z o w za z pod pod w do u we w o o z w w za do z u u za we u po na function w po na o z za za za o w za z do o za):

function _ftol: Integer; cdecl;
// Zgodnie z 64-bitowym ABI oczekuje się wartości Double w XMM0
asm
  .NOFRAME
  cvttsd2si  rax, xmm0   // obcięcie do liczby całkowitej, wynik w rax
end;

w u z CVTTSD2SI z u na do po z za na to o we z u za u do do we na z w w na po u w za na w instrukcja pod za pod u do o u po od pod na pod po za pod od we z w u po na w o za na za z z od z zestawu u po w do od u na o za od we z za po SSE2 do o u na od we z na u po od za u służąca za do we w na u u pod o od na w na od za po do po o za konwersji za o w po do na za we do od po z za o we w za za pod liczby w z z na po u za po z we do we pod zmiennoprzecinkowej o we na u do od na od po na pod na od z pod u u za do od o we z o z na za we do podwójnej pod po po do na pod u z z precyzji o od pod od na na od we do u na o w w u o o z o z na za we na pod po w we od o o po u ze od we w do z na do na w w pod u we znakiem po od z o na o po pod od we na we do z we pod po na u, w od do po na u od we na od za do na po za u z we po we w pod z obcięciem o po po u od do we we we do o od z o pod w u we u pod z u we w o za z za do po za na na do w od we do w na za z na po z z do do na za u do pod u za pod na na pod z w zera we w o na za o we od za po na po od od u za w za, po we o od do u po w od u do na za za po od za w na z od na u w co u w z u od w za do na po we z po od na z z u do do od w na jest pod na od po we na we pod po we na od u w dokładnie o na za we do w u od do tym po u o od z pod w za z na za w na po u u u na w po we za po od we u o za o w, za od o u z w we w na po co w po za do z pod z o w za na we na u u do _ftol z do we po w po po w w do od na od na w o za pod u u na z o na we od u od za po pod do na pod za za po w za za do powinno od za na we we z z o u do na po w za w o od u do od w robić pod na we po po do. we u w w w na Jest na u na od u po w po od po od w za za do to od z od na o na u po w z z we u od za u u jedna z na z do na w na u we po u od za u z instrukcja pod u w za po pod od pod do za od w we za po na od od, w o z u na o która do po za z pod po we u po na u na we po u od od po na od za na bierze we od z od we w na po w we po pod do za u w z na z u u z od z u parametr od we u pod po po we z we pod do w we o w bezpośrednio w od na do we pod po u do za o o po od z po za na we we u u po u stamtąd od w u za we u o o z za z u w w od za od z u od po w z z we od na w po w za pod do we pod o w, za we na po z po o za z o po gdzie na o w pod po w pod we do o za we w pod za do po z od zostawiło o do opartym u pod we do za z od na o na po za u w z z z za od go u po po na o za z we do u o do u o od u na we o po od po we o o ABI u na o z w do o o w o we, do o do od po od w we na o o we i u w z o o po po od pod za z w pod o w na o w we u za w z po o z u od w do od o pod we pod we umieszcza za u u w na z za na pod na o u na we u wynik w na po od we od o za w w we u od od tam u za po do o u po u po, we we pod z na po z pod z od po od po do w na gdzie w z do do za o do za do po o na we z z w do z za we oczekuje o na za do we do za w na pod go z o od pod do na na u ABI na po we od na za na na z za za o u po na na z z o u z u za pod. we w we pod od za od na z z w za od w na za do za o na z do o od po Nie do we z we po za o po po w od po we z wymaga we pod za z do za u to do z za we po na po z z pod do od żadnego w za do pod po z w o do we u po we żonglowania pod na do na od u w na o pod na na u z z od na z na do we za o we pod za pod z w słowem z we w na po o o do u do na za pod na do za sterującym u z do opartym pod za o pod pod z w u o w na FPU do we u pod do o we za za za po u we u u po od z o do za do do w na na w na na na po u w za na w pod po w u od u od u w z za za od pod we do na o pod na za

w na za u w w na w na na do pod do Zwróć za u od za z za we po we na o w o z za na na od z w po za uwagę u z o o o pod w po na z z o na po za o do za z we po w za, po pod od o za w w o od na u że do w we do na na w na u pod u do w od w u po pod za jeśli pod na u do z w we we o opcji we pod pod po za na z u na za u po dane o o po w od z na na z pod we na od za na w u u z we do o o za w u z we w w z pod u u za o o z o od po w u po u we pod wejściowe o po po o po na po na na od przekraczają z do na do po po u w za od u u za po w za z po po do u zakres pod za o za u we na u z po w 32-bitowej z z w we u w w w u z na na u pod we na u do w na po do o w za o do do na na liczby o w pod za u u w we u u u z do za po o z u w po od na w na na od po do z całkowitej do o o od z z u na za o od o pod u za o z z we za po do ze pod u za po z od po o po z za znakiem we do o na w na u od u z o po pod o za z na we na we od pod u za u o z u do o, u za z do z na za we na pod do za we od za do CVTTSD2SI u we w z o do opcji pod do na u o po w od w u za w w po o do z za na o z we na we we po u we na po z po u zwraca we u na do we po od po pod u u po z z od z z we w do do nieokreśloną w pod po na na za do od pod o we o na do w za wartość o do u pod z od o w od po po pod do we całkowitą od do o z po po po od z we pod pod za za pod za we na w po za w pod pod po za od od (do po od od $80000000 na za o o po). pod z za w od z od po za do na u we z na na z pod pod od za z od o u w na u pod po do u Jest w pod do za za w po pod za o od w o na z o w za po za od po na na u we na na to we do do o o za we na po za pod u po u za za po po w za od u za we do w na od po za na za o od w pod do u od u u takie po we do na na po do we samo na na od za od z na o do u we u u z do pod z u w zachowanie po od w we na do za za we o o o w pod za po u o z za, z po z po u na o za od w za na z po na w za od po u w jak z w od u z do u pod za z pod od we u z za w o we w u od w z we przypadku pod do za z od do na do z od u z u w w po pod za po we u od o u w za od od od fistp z pod z we od do z po za pod po o w pod po w z u o u o x87 we pod do o za za u po od z od od po na na do za dla z po u we do po od pod pod pod z od we u za od do do do na za u na na po danych od z o w za na pod we o we po na z na od z o u od o za z z z u pod u we z z po za od do z na na po o pod na do po od po o na po po z od o na wejściowych pod na u pod do pod z do o w na z o na we za za na z na po do po pod o po od we o za spoza we w po o o do u do na we o od za o po u zakresu o do u od na u do od na od o we pod na za za z z do u pod z. o o do do u za u To u we w za we na od od w do o z w z o, o na w o z od na za we w za po pod od o czy po na o po w do do z od z po od za z od pod we do pod o o we o u u twoje na w do u z we z od od od po pod w na za w funkcje pod od na na od we po wywołujące na w o do o za w do o w do we od pod do w od po w na o o z w mogą o z po pod do z z z po z wygenerować od we pod pod pod w u we u pod o do pod z z za w pod pod takie od w z za u po u z we w za w z pod w za do od od wartości we po we w pod z po w po z u o po do o za, u u pod za za we we w z na z od pod w w u u pod na za do we od z o do za od za z o z jest o u pod we od do u po z po we na do z za na pod na od od z warte pod do o z za od w za potwierdzenia na u u u po we za na od o o z po w pod z u przed pod za w we u za z w w na pod do po o po w u u u u od pod za na do za z u na na do pod u do ogłoszeniem po po o z za pod na z z po u we z na na z pod za, od o z na z o za od że po u od u po do od za z we z na z o za migracja na pod za za z do z do we została do u z u we pod o o u z o za na po u do zakończona do u o o z za po we o o po za o do u pod z za na za do po

o o na w z pod we do w u o o Kiedy na za po u o opcji u z na pod do u Trunc z do w po we do do za pod u w z opartym za jest z opartym po po po w na u w za z o z we we w u w w do od do u lepszym we o od o za za do opcji na u od pod u po z do u rozwiązaniem po u o z za od u do

w o za od do za Asemblerową na od z do pod po w po u za o za od we na od za pod na wersję u do do za za o od za do powyżej od u u pod do u za po za od z w w po od warto do pod po po od za we w pod od o na na po na od napisać po do od u z na do do na z tylko od pod u do wtedy od o we do w we od z na po za po od z do po po we od z z, za w gdy w od z pod z w pod o w na w u za we masz do u z u pod za na do we o po za od z rzeczywiste pod pod u na po u u u na w na po w u na w za wymagania w po od po o na za do we w na w dotyczące za od na do na pod od o za w od o we na na zgodności po na z we u z binarnej do za po do z na w od po do o u na: we z u opcji u po z w z od po jakiś za u w w do po z od z od o z do od do za z za pod po z za zewnętrzny na w o do na od na pod do za z na we na we w kod z o pod na po na z od pod za pod w we za od w wywołujący za u w po na za do we na do na u u do od oczekuje z na w za we w do na do po na we o we po za z u symbolu za pod we od do na pod do we na o _ftol po pod za do o we z o z na za na pod z do pod konkretną na o z o z na u do na od w konwencją po na na z za wywoływania na u od we pod pod do pod za, od o z a u pod po po za na ty z w po na w na do na w we na z po od nie po z o za od na u z u za po od od na na od we po pod od na w od z na o na o możesz w we od z u pod do po we po za we u po zmienić na od na od o po pod od po o pod do we na z u w tego po do za w do w w u pod o z po do w w za z z z u w z w po z po za do kodu o na od u u po do do o po do z po na u po u wywołującego z do o za od z za we o we po na za po u o. we u za po od we od Ta na u pod o we od do u u o za w za w pod od po po z od sytuacja we w do do o za we we we na u z we we po z z od na pod o zdarza po we o o od w o u za z w w po za się w na do do z w po od u za do we z u pod od w pod pod u rzadko po z na u po od we u za od za w u do za na na na pod. na na u z z u za we po u na W o z u z z we w we w na we o z w w po za pod u z o we o za od we do do w na większości za do we po na za o we od w do pod w we do we przypadków u pod po do do we w od pod u u _ftol po z po do od za za we we w do o z o pod od o od w po u od był do od we po do o prywatną na z po o z z we po o we z za z do po u o od z we na pod na z od pod u pod do na funkcją po w w u po u w w od do za o za do u u o pod na do po od pod z we do u z pomocniczą na w pod z u z z pod z za pod u u, we u do od pod po u w do od o we za na za u po u za pod w do we w za u na na we w od do o w o za u o używaną od za w z tylko o za od u za z w we pod o na na po na we wewnątrz za po na do w po do na za w we we u po tego do na o na na z samego na z pod o w od w po od pod modułu na w na pod z do po o za za do i po o za z o o u w za po od o nie u u w o w po z z od za od od na u było do pod od o do żadnej pod na na od we po za z w pod w zewnętrznej we z z od we o pod po od we we u na pod zależności u po za z z z we we w pod pod za we we w na po po na w po za na od do od o od pod do z we do za u u we w na od jej o za z na do nazwy do u w od za do o we pod na we u za od u pod lub pod we do we od od po z we z od od do konwencji we o po pod na za u od. za w o z z u pod u we za pod w pod po we od o od po za

we za u za za u w do w W u na o z w do pod we po o o takim we u z na za u w przypadku za na u pod we od we za zastąp za od pod o za z pod we za z o we od do na u o za od to od w pod w z w u od o do za zwykłym u po od na u po pod do w za o za u po z u z do o u z o o z od pod na z do Pascalem w po we pod z po na po o z we we we u z za pod na po we do w na o z od za we w pod z do we:

function _ftol(f: Double): Integer; cdecl;
begin
  Result := Trunc(f);
end;

u od Trunc z w we od na we pod do od w od o z obcina z po u za we pod u o we o w z o we na do od wartość o z we do w o o z u u za we u po na za we po na u za od na we po pod od od o za od po do do w pod we we zera na z z po po z u u, za na w o co w we u do u pod z u u po z we we po z opcji za w do na opartym pod u odpowiada do pod po w na od za temu na w za o na o we po, na na pod we co pod o w z po do od za po u robiło w we od z od we za po pod _ftol we w o we w u za pod o w z w z do we w na po pod we za za u ustawieniem w po po z na we pod o z w od o z w o z na na pod za na na do po od po od po do pod za w od za do słowa po na u w od u u po po we w od we z pod za sterującego z u na na u we o do za z we z z w w o na w u pod we w od po do pod x87 na na za o o po do z tryb w u po do u do do na z na za od we z w u w o obcinania za na za po pod od o za z. u z u u z u z Kod za we na w po od we od do po do z u u po ten do od z o kompiluje we za na we na u o od od na z po z się po pod u po pod do w o na za o za po u do o we z we pod pod u od z po w do u DCC32 na u pod od na u i z po z DCC64 po u u do u z za o po po w od u do z po pod za we w po do po do z we po we w do u u bez na pod za pod z z za za za pod we od od z u do we na modyfikacji u za na pod w o od na u po u. za z od na po do Kompilator w pod z o z z za pod o na u generuje w we od od do o do do we w od po od na odpowiednią po od za o u z u z od instrukcję z na od we u do o po w za na od dla w o po od po po u we u na każdego za z na o o na o z celu w od z na do za za za: po o za po w we o pod we z do pod na od u we na u w x64 za z o za pod pod na w o do o u po od u od i z za o u w za po pod tak u na od na za o w we pod we do pod z we za od z za we we we na o u we na do z za na w o pod na u do z na za we od w z w zazwyczaj od we we w do z o wyemituje z na w za u po CVTTSD2SI na pod pod pod na u od z za na we, po we we o pod z u czyli z u w po na za we po z tę o z we po w za na do samą za z od za od we we z we po u na we u po we z za na po na na od na u instrukcję z o u na we u z we w za na do, w po od po od z co po od za o po u w pod pod po za w za od od z za z za pod od do pod u na w we z z w pod za po wersji w w w o na pod za za w napisanej u po z pod po w u u u z z do o od po u od od we od pod za we w od o we po we z do od w pod po na za po do w ręcznie we do w od na za pod w z o pod w od we. o w Zyskujesz za z za we pod u o we o o za u na z u do od po za w u w pod pod o u od identyczne o do za pod w z z u po zachowanie we do po za na na po z pod po po o u do z, na w na od od pod do na u za o za od o od u u z we do o o po o we brak w w we w po do na za pod na za o do po warunków na z za za o u we pod pod we o z do do zależnych po do na za na od od po od platformy w o na o pod od po z pod za na pod na w w u we od po pod na w u po pod za i po na na w w u u o od brak o za o u o w u u w we w o za pod za z na u o na asemblera z od od u w we na po po w z po do pod na na utrzymania w we do za od po o do do we pod u

do Jedyna za z w z w od do po na różnica pod u do u za we na za o za z na z za po u o z na pod u na za semantyczna we do we u na u za z we u od za po za na u, po we u po u o na o którą za pod od z w za w po we o na na za warto do w we po o od u w we sprawdzić pod na w w we u od pod z u w u po o po u z od na o we na po po z od: o do we z Trunc na do we w o po za za o na w w do zgłasza o na w w u w od u z za pod o na u wyjątek do za po u za u do od w za w za u EInvalidOp na we od u od na o z w do do na do pod domyślnej z od we po we u pod z po po o na o u od we za po konfiguracji po z o po z po z na po we za po Delphi o pod do we u od od u o pod na na w, na za o gdy z od od w z po wartość z od za za o z za wejściowa o na po na na w z u o o pod we w u po pod w za we jest pod w u do od za we we we na o u we na u w o w NaN do na we od pod we w pod lub u po nieskończonością do u we za od po za w we na o o z z do o pod. o do po o do z z na u we od po w od w u do x87 na o na w w do za z fistp z od za w za pod po u z po o pod po za o o w oryginalnym po we z za we do z za w od we o u do za u kodzie od w z u we z pod za za w u w w od na na z po po od u od do po w za za po do do u w w we do na po prostu pod do na po zapisywało w w we o od o pod z po u wzorzec we za za do od od o na pod z w bitowy we od po na o w w za od u we po w do od z za we pod do za, pod u po z z od na pod o o u nie w o we od o na na zgłaszając za pod do od u we do pod o o z u po żadnych za we pod od do od o po na do we u z pod za na za w do wyjątków o od w o do o u po po we we. o we u do pod za u na o pod z Jeśli po w po o o twój z na od u do u w u na za za u od u o za kod z do z do w od po u od do we na przekazuje z za o do od nietypowe u od na z od w o we pod na u we u we do o w od we od z za w u we u za pod za u po po za po wartości do w od na za u u z po od pod u o za do we pod z za zmiennoprzecinkowe u na za pod u we w o za z pod na za za w od za w w od na w u o od pod do we po do u w z z o za po na na za z o tej do na do w z po u po od od na na od we po pod od na w w w w za funkcji po po u za u, po o do u a do z u od pod za na pod po od u we stare za za pod we zachowanie o od na do o u do we po po za do za na od od u we w u po u w w było o po po na w u pod ciche za pod od z w u po za na do pod za z u pod, pod na od po użyj od o do u za za we od IsNaN do za na od o pod do o z na o za w po z na u oraz od na na we po na u do od u z na po pod IsInfinite w u z z modułu od od o w od w o we Math z na za z z po za od we pod o pod do, z za we od pod u do z za zanim u po z wywołasz od po u od od od o z za na na pod po po po z od pod z we o u pod od o Trunc z do do u za w w po od z u po od

o na na od na na na na w po za u za Kompilacja u o za u pod po po pod warunkowa w do po z w z od za do, na u z u po po gdy do na we oba za o w po we z z w w o po cele o po we po pozostają w w w na we po pod o na u aktywne za za od we u pod po po o w u

po na od Niektóre pod u we na o do od w w po o za u od u od w od u w we do z o projekty na o o pod po o od u od na po do po w na u pod o we we po z z od na muszą za na od nadal w we pod o od u o po po w od u do dostarczać na za od u od w do zarówno o do na za o z u w po 32-bitowe z na o na z u o za w, od pod w na od z jak z do do z we i za do u za na od o o z z za od za z w na u we we od na u 64-bitowe we po po z pod pod w na do z o we we za z pod pod w pliki z we pod o za o od z w pod we do w binarne z za na u we do do u do u do od za o po po w we u do do na na na po u po u w od u za u. za pod do z Jeśli o po w za od za oryginalna po po u z do od pod o od pod z pod we o z po we do po wersja za za na o z we pod we w po za za asemblerowa od we po u po pod pod na za za w musi we na u o we w po o o we we na od o po z zostać na o zachowana w do pod o z na o w w o od dla u u za z wersji u na za za od pod na na u 32-bitowej za z do we, u o we od u za na na we we a od z do po na pod w u od dla o po na po od za pod za od od po z u w po w we do u po w w z z u na za za u od u na od od u pod we za w w za wersji na z u u u do za we na 64-bitowej na o od po z do po po o należy u na u w w u u o od na w od o od w od we po dostarczyć za po z w za na od nową w pod w we w od we o u do do implementację po o u do, na od za o za użyj do na od za w pod dyrektywy pod od w za z we warunkowej pod o po pod o we po po na z u u po w o u w pod z do we od pod CPUX64 pod o na od do z u za za w od za:

function _ftol(f: Double): Integer; cdecl;
begin
{$IFDEF CPUX64}
  Result := Trunc(f);
{$ELSE}
  // ścieżka 32-bitowa: DCC32 akceptuje inline asm
  asm
    lea   eax, f
    fstp  qword ptr [eax]
  end;
  Result := Trunc(f);
{$ENDIF}
end;

od pod o we To u do na od w najmniejsza pod u we na o we od we w o możliwa u o z od za po mechaniczna za u po na o o za z o na za o na na u od od pod w o od poprawka u do od po o o o u za do po o i z do po od po o z od od na po na po od warto o u w pod na do za o w do o z o pod w od traktować do za po na po o w we w ją za za na po za jako na od do we za w tymczasową o o za za pod. do za w we u u w po po za z za Kod od we po od do z z po o u we, na o w po z we z od po za po na w z który w we od we od z do pod do o za o o opiera o z we we o w w u się od na za na na z za asemblerze pod z po po po we w w pod u specyficznym na do o na w o we z w od za u na pod za za o we u do po w dla o pod we za do o za od za w na pod architektury o od w z za do we z u w po z z we po we w w w za w w po od do za do we we do w po procedurze z z od na pod o o do z pod do w o na za we od pomocniczej w za we z, do w na po od której pod pod za z w pod o jedynym o w na o w we u z w u we po we za w za celem z pod u po na do pod po za na jest w od do obcinanie od za za po od u u we liczby po o od za w o zmiennoprzecinkowej po o pod na do po do od na o z po w po na o na we z do do u do za do we pod od z we od po po po z od na od liczby za po po z od z od do w w o w całkowitej w u od w do w z po u pod, w w u za pociąga po w na pod za na u po za po na po u po we w za za za sobą o u we o niepotrzebny we od na do od z do za pod we w po we z z za z od po w pod o w na dług do od o u w we do z z. z po u po na u na we za u na 32-bitowa do do na z do po o na za od u gałąź pod o u za może za z z na u we od z do o po o u w w we od po na we całkowicie po u od pod z we o u we pod pod od we do do w z na w za we na o na do z o we po po w zniknąć do w we o w w po z o z po od po we pod od pod na na u, po u u u na gdy pod o od w w u za we u o w w o za u o u pod od do za tylko od z pod w za do od o we o po za u potwierdzisz we z od na w od z we od o od we pod z na po z z po za, u do w w pod pod we na że za za o z od na od w za od we z za u nic o we w do we z nie o u po pod z za za do o z od na u o w na z u za we na od od do za do za od po o po na do na za we do od u od z pod pod za na polega we we na do w od we za w po do u do do o z od we od do z z pod efektach u z po od za na u za po w za po u na za na pod z o u za z w w na pod od u w na ubocznych u we o u z od za od o o na o z na u do za w od pod do pod od we w z po od w od u na z od na w we do za FPU z po za ze z w we u o do od pod od we pod z o u pod do na z starej do o u w do z w po z po za pod po po u z u na na od u po za w od za u we za z z pod na u u implementacji u o za na do za w za pod

pod po w Jeśli w do za we od u na funkcja na u pod do z pod po do we we za z we z na u u od o we u pojawia pod od z na na z na na w do w z w u od od pod z za u za na po u po na na we się od pod u o po z po w o we o we na po w od za, od w do po na pod komponencie za w za na po u do od używanym za opartym w na we od po po w od u do o w za o w wielu do z po we na w z do do za o w do od modułach z po z po, na z o o do we do przeszukaj do na za w po w z na u do z za za u cały z u u u do w do kod od w pod na w pod o o za na za do po we od w we pod po na o za z we do u od w z pod na od kątem od do od z od po w z z we u od za po u za u do we w o o _ftol za pod pod we od po po u w za na w do z we o u we w za, od od na we od zanim w do po za po od z do we po za we od w z za u u na do zdecydujesz we do o od z o pod pod w po na z u u u pod za za we u na we na z pod na w u po w do o z do u od pod o pod pod po się z u na z po na migrację na pod u o o po na. po Symbol w na o z z za pod z do po o za na w od u o za tej o pod u z do we do od o za we nazwie w pod w o na o pod od o u po może z pod na w we od w o z u zostać z od pod u o do we u po po we w za o od z od za we o na pod na za do do u we u pod o z po do w za w na za do we z za z u u z z na na z z od u za we do w u z do po po z o u o zdeklarowany od po za w na do w za więcej za o na niż z we pod z na o jednym po u za za o za w na u do z za we po pod u za miejscu z do za za po od za w od; o po w za na we do o na w na kompilator z we na za do w za u w za za na pod pod od we do do pod od we o za u wybiera do do u we na we po po po u po u u jeden od za z z w do z i z pod we za z od o cicho w za we we w ignoruje u za z u po za po pod do pozostałe na z od do u po, po od u na u za od we za do o po o do za o u o w na na we po z co na za do na we po od od pod pod z u oznacza w od u za od, z we w po z w u z we w w po w na na we u za od za we do we u w po że do od pod o za za możesz z o pod u od naprawić do po za od za we we w na do pod od od u od od z jedną w do we po z z pod do od w od na do od z we od do z w we pod pod z za u za na z po z kopię po za o we z u do u we z od i do do po za nadal z z pod na u z u po do łączyć za do o we w z się z po z inną w pod od na w od w w z z w w o do u za po, do na do od która za we od za nie do o za za do o na pod na została pod do do na pod po do od we po w tknięta o na w po z o po u na w na