AMD Athlon™ Processor x86 Code Optimization

Instruction

Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Control Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Decoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Dispatch and Execution Resources. . . . . . . . . . . . . . . . . 187 Short Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Short Lengths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Arithmetic, 64-Bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Execution Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Operand, Consider Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Pipeline Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Pipeline Stages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Scheduler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Use 32-Bit Data Types for Integer Code . . . . . . . . . . . . . . 13

L

L2 Cache Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 LEA Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Load/Store Pipeline Operations . . . . . . . . . . . . . . . . . . . . . 151 Load-Execute Instructions . . . . . . . . . . . . . . . . . . . . . . . . . 9, 34 Floating-Point Instructions . . . . . . . . . . . . . . . . . . . . . 10, 35 Integer Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Load-Store Unit (LSU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Local Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28, 31, 56 Loop Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Loops

Deriving Loop Control For Partially Unrolled . . . . . . . . . 70 Generic Loop Hoisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Minimize Pointer Arithmetic. . . . . . . . . . . . . . . . . . . . . . . 73 Partial Loop Unrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 REP String with Low Variable Counts . . . . . . . . . . . . . . . 85 Unroll Small Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Unrolling Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

M

Memory

Pushing Memory Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Size and Alignment Issues . . . . . . . . . . . . . . . . . . . . . . . 8, 45 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Memory Type Range Register (MTRR) . . . . . . . . . . . . . . . 171 Capability Register Format . . . . . . . . . . . . . . . . . . . . . . . 174 Default Type Register Format . . . . . . . . . . . . . . . . . . . . . 175 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Fixed-Range Register Format . . . . . . . . . . . . . . . . . . . . . 182 MSR Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 MTRRs and PAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Overlapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Variable-Range MTRR Register Format . . . . . . . . . . . . 183 MMX™ Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Block Copies and Block Fills . . . . . . . . . . . . . . . . . . . . . . 115 Integer-Only Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 MOVQ Instruction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 PAND to Find Absolute Value in 3DNow! Code. . . . . . . 119 PCMP Instead of 3DNow! PFCMP . . . . . . . . . . . . . . . . . 114 PCMPEQD to Set an MMX Register. . . . . . . . . . . . . . . . 119 PMADDWD Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . 111 PREFETCHNTA/T0/T1/T2 Instruction . . . . . . . . . . . . . . . 47 PXOR Instruction . . . . . . . . . . . . . . . . . . . . . . .113, 118119

22007E/0 — November 1999

MOVZX and MOVSX Instructions . . . . . . . . . . . . . . . . . . . . 73 MSR Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Multiplication

Alternative Code When Multiplying by a Constant . . . . 81 Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Multiplies over Divides, Floating Point . . . . . . . . . . . . . . 97 Muxing Constructs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

N

Newton-Raphson Reciprocal. . . . . . . . . . . . . . . . . . . . . . . . 109 Newton-Raphson Reciprocal Square Root . . . . . . . . . . . . 111

O

Operands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Largest Possible Operand Size, Repeated String . . . . . . 84

Optimization Star. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

P

Page Attribute Table (PAT). . . . . . . . . . . . . . . . . 171, 177178

Parallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

PerfCtr MSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

PerfEvtSel MSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Performance-Monitoring Counters. . . . . . . . . . . 161, 168169

Pipeline and Execution Unit Resources Overview. . . . . . 141

Pointers

De-referenced Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 31

Use Array-Style Code Instead . . . . . . . . . . . . . . . . . . . . . 15

Population Count Function. . . . . . . . . . . . . . . . . . . . . . . . . . 91

Predecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Prefetch

Determing Distance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Prototypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

R

Recursive Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Register Operands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Register Reads and Writes, Partial . . . . . . . . . . . . . . . . . . . 37

REP Prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 8485

S

Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 SHLD Instruction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 SHR Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Signed Words to Floating-Point Conversion . . . . . . . . . . . 113 Square Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Stack

Alignment Considerations . . . . . . . . . . . . . . . . . . . . . . . . 54 Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Store-to-Load Forwarding . . . . . . . . . . . . . . . . . . 18, 51, 5354 Stream of Packed Unsigned Bytes . . . . . . . . . . . . . . . . . . . 125 String Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Structure (Struct). . . . . . . . . . . . . . . . . . . . . . . . . . . . 2728,56 Subexpressions, Explicitly Extract Common . . . . . . . . . . . 26 Superscalar Processor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Switch Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21, 24

238

Index

Page 254
Image 254
AMD x86 manual Index