Register saving conventions Procedures and functions must preserve the EBX, ESI, EDI, and EBP registers, but can modify the EAX, EDX, and
ECX registers. When implementing a constructor or destructor in assembler, be sure to preserve the DL register.
Procedures and functions are invoked with the assumption that the CPU's direction flag is cleared (corresponding
to a CLD instruction) and must return with the direction flag cleared.
Note: Delphi language procedures and functions are generally invoked with the assumption that the FPU stack is
empty: The compiler tries to use all eight FPU stack entries when it generates code.
When working with the MMX and XMM instructions, be sure to preserve the values of the xmm and mm registers.
Delphi functions are invoked with the assumption that the x87 FPU data registers are available for use by x87 floating
point instructions. That is, the compiler assumes that the EMMS/FEMMS instruction has been called after MMX
operations. Delphi functions do not make any assumptions about the state and content of xmm registers. They do
not guarantee that the content of xmm registers is unchanged.