user manual

Replace Branches with Computation in 3DNow! Code 63
22007E/0November 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