AMD Typewriter x86 사용자 설명서

다운로드
페이지 256
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