まずは、以下のプログラムを実行して下さい。

#include "amd3d.h"
#include <windows.h>
#include <math.h>
#include <stdio.h>
main()
{
long n;
float a,b,c;
char buf[80];
DWORD dt1,dt2;
double ddt;
b = 3;
dt1 = GetTickCount();
_asm{
femms
}
for(n=0;n<100000000;n++)
{
_asm{
// femms
movd
mm0,b
pfrsqrt
(m1,m0)
;mm1
??? | 1/sqrt(b) 15ビット精度
movq
mm2,mm1
pfmul
(m1,m1)
pfrsqit1 (m1,m0)
pfrcpit2 (m1,m2)
;mm1
??? | 1/sqrt(b) 24ビット精度
pfmul
(m0,m1)
;mm0
??? | sqrt(b)
movd
a,mm0
movd
c,mm1
// femms
}
}
_asm{
femms
}
dt2 = GetTickCount();
ddt = (double)(dt2-dt1)/1000.0;
sprintf(buf,"%f %f\n3DNow!による処理時間は %.3f
秒です",a,c,ddt);
MessageBox(GetDesktopWindow(), buf,"Test 3DNow!",MB_OK);
dt1 = GetTickCount();
for(n=0;n<100000000;n++)
{
_asm{
fld
b
fsqrt
fstp
a
}
}
dt2 = GetTickCount();
ddt = (double)(dt2-dt1)/1000.0;
sprintf(buf,"%f %f\nFPUによる処理時間は %.3f
秒です",a,1/a,ddt);
MessageBox(GetDesktopWindow(), buf,"Test 3DNow!",MB_OK);
}

これが、3DNow!とFPUの処理速度差です。
これでも平方根は、K6-FPUの方がP6-FPUより速いんですけど、この差です。