Inline-Assembler-Code в C, скопировать значения из массива в xmm - PullRequest
1 голос
/ 18 ноября 2011

У меня есть два массива, и я хочу получить точечный продукт. Как мне получить значения vek и vec в xmm0 и xmm1? И как мне получить значение, стоящее в xmm1 (??), чтобы я мог использовать его для "printf"?

#include <stdio.h>
main(){

float vek[4] = {4.0, 3.0, 2.0, 1.0};

float vec[4] = {1.0, 2.0, 3.0, 4.0};

asm(

"DPPS $0xFF, %xmm0, %xmm1"

??

);

printf( "Result: %f\n, ??)
}

1 Ответ

2 голосов
/ 18 ноября 2011

Как справедливо говорит @Mysticial, используйте встроенные функции вместо необработанного ассемблера:

#include <stdio.h>
#include <smmintrin.h> // SSE 4.1

int main()
{

    __m128 vek = _mm_set_ps(4.0, 3.0, 2.0, 1.0);
    __m128 vec = _mm_set_ps(1.0, 2.0, 3.0, 4.0);

    __m128 result = _mm_dp_ps(vek, vec, 0xff);

    printf("result = { %vf }\n", result);

    return 0;
}

Обратите внимание, что не все компиляторы поддерживают спецификатор формата %v для значений SIMD - если ваш компилятор не поддерживаетВам нужно будет реализовать подходящий метод для печати результата, например, использовать объединение.

...