Качать 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 если кто хочет помоч в переводе то буду рад.