Compiler Optimizations

An example of the type of function you can write is as follows:

function LongMul(X, Y: Integer): Longint; asm

MOV EAX,X

IMUL Y

end;

The compiler performs several optimizations on these routines:

  • No code is generated to copy value parameters into local variables. This affects all string-type value parameters and other value parameters whose size isn't 1, 2, or 4 bytes. Within the routine, such parameters must be treated as if they were var parameters.
  • Unless a function returns a string, variant, or interface reference, the compiler doesn't allocate a function result variable; a reference to the @Result symbol is an error. For strings, variants, and interfaces, the caller always allocates an @Result pointer.
  • The compiler only generates stack frames for nested routines, for routines that have local parameters, or for routines that have parameters on the stack.
  • Locals is the size of the local variables and Params is the size of the parameters. If both Locals and Params are zero, there is no entry code, and the exit code consists simply of a RET instruction.

The automatically generated entry and exit code for the routine looks like this:

PUSH EBP ;Present if Locals

MOV EBP,ESP ;Present if Locals <> 0 or

SUB ESP,Locals ;Present if Locals <> 0

MOV ESP,EBP ;Present if Locals <> 0

POP EBP ;Present if Locals

RET Params ;Always present

If locals include variants, long strings, or interfaces, they are initialized to zero but not finalized.

Project Management Made Easy

Project Management Made Easy

What you need to know about… Project Management Made Easy! Project management consists of more than just a large building project and can encompass small projects as well. No matter what the size of your project, you need to have some sort of project management. How you manage your project has everything to do with its outcome.

Get My Free Ebook


Post a comment