
Replace Branches with Computation in 3DNow!™ Code
63
22007E/0—November 1999
AMD Athlon™ Processor x86 Code Optimization
Example 4:
C code:
#define PI 3.14159265358979323
float x,z,r,res;
/* 0 <= r <= PI/4 */
z = abs(x)
if (z < 1) {
res = r;
}
else {
res = PI/2-r;
}
3DNow! code:
;in:
MM0 = x
;
MM1 = r
;out: MM1 = res
MOVQ
MM5, mabs ; mask to clear sign bit
MOVQ
MM6, one ; 1.0
PAND
MM0, MM5 ; z=abs(x)
PCMPGTD MM6, MM0 ; z < 1 ? 0xffffffff : 0
MOVQ
MM4, pio2 ; pi/2
PFSUB
MM4, MM1 ; pi/2-r
PANDN
MM6, MM4 ; z < 1 ? 0 : pi/2-r
PFMAX
MM1, MM6 ; res = z < 1 ? r : pi/2-r
Summary of Contents for Athlon Processor x86
Page 1: ...AMD Athlon Processor x86 Code Optimization Guide TM...
Page 12: ...xii List of Figures AMD Athlon Processor x86 Code Optimization 22007E 0 November 1999...
Page 16: ...xvi Revision History AMD Athlon Processor x86 Code Optimization 22007E 0 November 1999...
Page 202: ...186 Page Attribute Table PAT AMD Athlon Processor x86 Code Optimization 22007E 0 November 1999...
Page 252: ...236 VectorPath Instructions AMD Athlon Processor x86 Code Optimization 22007E 0 November 1999...
Page 256: ...240 Index AMD Athlon Processor x86 Code Optimization 22007E 0 November 1999...