22007E/0 — November 1999

AMD Athlon™ Processor x86 Code Optimization

6

Branch Optimizations

Wh i l e t h e A M D A t h l o n ™ p ro c e s s o r c o n t a i n s a ve ry sophisticated branch unit, certain optimizations increase the effectiveness of the branch prediction unit. This chapter discusses rules that improve branch prediction and minimize branch penalties. Guidelines are listed in order of importance.

Avoid Branches Dependent on Random Data

are difficult to predict. For example, a piece of code receives a

TOPrandom stream of characters “A” through “Z” and branches ifAvoid conditional branches depending on random data, as thesethe character is before “M” in the collating sequence.Data-dependent branches acting upon basically random data

causes the branch prediction logic to mispredict the branch about 50% of the time.

If possible, design branch-free alternative code sequences, which results in shorter average execution time. This technique is especially important if the branch body is small. Examples 1 and 2 illustrate this concept using the CMOV instruction. Note that the AMD-K6®processor does not support the CMOV instruction. Therefore, blended AMD-K6 and AMD Athlon processor code should use examples 3 and 4.

Avoid Branches Dependent on Random Data

57

Page 73
Image 73
AMD x86 manual Branch Optimizations, Avoid Branches Dependent on Random Data