AMD 250 Manuale Utente
Chapter 4
Instruction-Decoding Optimizations
83
Software Optimization Guide for AMD64 Processors
25112
Rev. 3.06
September 2005
4.8
Using LEAVE for Function Epilogues
Optimization
The recommended optimization for function epilogues depends on whether the function allocates
local variables.
local variables.
Application
This optimization applies to:
•
32-bit software
•
64-bit software
Rationale
Functions That Allocate Local Variables
The LEAVE instruction is a single-byte instruction and saves 2 bytes of code space over the
traditional epilogue. Replacing the traditional sequence with LEAVE also preserves decode
bandwidth.
traditional epilogue. Replacing the traditional sequence with LEAVE also preserves decode
bandwidth.
Functions That Do not Allocate Local Variables
Accessing function arguments and local variables directly through ESP frees EBP for use as a
general-purpose register.
general-purpose register.
Background
The function arguments and local variables inside a function are referenced through a so-called frame
pointer. In AMD64 code, the base pointer register (rBP) is customarily used as a frame pointer. You
set up the frame pointer at the beginning of the function using a function prologue:
pointer. In AMD64 code, the base pointer register (rBP) is customarily used as a frame pointer. You
set up the frame pointer at the beginning of the function using a function prologue:
push ebp ; Save old frame pointer.
mov ebp, esp ; Initialize new frame pointer.
sub esp,
n ; Allocate space for local variables (only if the
; function allocates local variables).
If the function
Then
Allocates local variables
Replace the traditional function epilogue with the LEAVE instruction.
Does not allocate local variables
Do no use function prologues or epilogues. Access function
arguments and local variables through rSP.
arguments and local variables through rSP.