Качать tarball пакет здесь http://sourceforge.net/projects/libsimd
- Код: Выделить всё
- typedef float vecs3[3];
 void simd_vecs3_assign(float a, float b, float c, vecs3 v)
 {
 #ifdef USE_3DNOW
 /* set up the pointers : %eax = v, %edx = &a */
 /* move into MMX registers a,b and c*/
 /* assign to v */
 
 __asm__ __volatile__(
 "movd %%eax, %%mm0\n"
 "movd %%esi, %%mm1\n"
 "movd %%ecx, %%mm2\n"
 "pfacc %%mm1, %%mm0\n"
 "movq %%mm0, (%%edx)\n"
 "movd %%mm2, 8(%%edx)\n"
 :
 : "a" (a), "S" (b), "c" (c), "d" (v)
 : "memory");
 #else
 /* in C : */
 v[0]=a;
 v[1]=b;
 v[2]=c;
 #endif
 }
Пытаюсь портировать в FPC. Неполучается из за недостаточной квалификации в асме. прошу помощи.
- Код: Выделить всё
- type ta=array[0..2]of single;
 V1:ta;
 procedure GetVector(X, Y, Z: single; var V: ta);
 begin
 asm
 movd mm0, [eax]
 movd mm1, [esi]
 movd mm2, [ecx]
 pfacc mm0, mm1
 movq [edx], mm0
 movd [edx+8], mm2
 end;
 {V[0] := X;
 V[1] := Y;
 V[2] := Z;}
 end;
 проверяю
 GetVector(5,34,67,V1);
 Form1.caption := FloatToStr(v1[0])+ ' ' +FloatToStr(v1[1])+ ' ' +FloatToStr(v1[2]);
Вылетает.
ставил в конец асм-вставки emms и femms из модуля mmx не помогает
p.s если кто хочет помоч в переводе то буду рад.



 



 Интересно, _еще_ медленнее это можно сделать?
  Интересно, _еще_ медленнее это можно сделать?

