AMD x86 manual Pfsub

Models: x86

1 256
Download 256 pages 58.62 Kb
Page 79
Image 79

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

Replace Branches with Computation in 3DNow!™ Code

63

Page 79
Image 79
AMD x86 manual Pfsub