22007E/0 — November 1999

AMD Athlon™ Processor x86 Code Optimization

Example (Preferred):

Prolog:

PUSH

EBP

 

MOV

EBP, ESP

 

SUB

ESP, SIZE_OF_LOCALS

;size of local variables

AND

ESP, –8

 

 

;push registers that need to be preserved

Epilog:

;pop register that needed to be preserved

MOV

ESP, EBP

 

POP

EBP

 

RET

 

 

With this technique, function arguments can be accessed via EBP, and local variables can be accessed via ESP. In order to free EBP for general use, it needs to be saved and restored between the prolog and the epilog.

Align TBYTE Variables on Quadword Aligned Addresses

Align variables of type TBYTE on quadword aligned addresses. In order to make an array of TBYTE variables that are aligned, array elements are 16-bytes apart. In general, TBYTE variables should be avoided. Use double-precision variables instead.

C Language Structure Component Considerations

Structures (‘struct’ in C language) should be made the size of a multiple of the largest base type of any of their components. To meet this requirement, padding should be used where necessary.

Language definitions permitting, to minimize padding, structure components should be sorted and allocated such that the components with a larger base type are allocated ahead of those with a smaller base type. For example, consider the following code:

Align TBYTE Variables on Quadword Aligned Addresses

55

Page 71
Image 71
AMD x86 manual Align Tbyte Variables on Quadword Aligned Addresses