2013-07-07 3 views
0

мне интересно, если Microsofts SSE intrinsics немного отличается от нормы, потому что я пытался компиляции этого кода с GCC с флагами -msse -msse2 -msse3 -msse4SSE intrinsics, компилирующий код MSDN с ошибкой GCC?

#include <stdio.h> 
#include <smmintrin.h> 

int main() 
{ 
    __m128i a, b; 

    a.m128i_u64[0] = 0x000000000000000; 
    b.m128i_u64[0] = 0xFFFFFFFFFFFFFFF; 

    a.m128i_u64[1] = 0x000000000000000; 
    b.m128i_u64[1] = 0x000000000000000; 

    int res1 = _mm_testnzc_si128(a, b); 

    a.m128i_u64[0] = 0x000000000000001; 

    int res2 = _mm_testnzc_si128(a, b); 

    printf_s("First result should be 0: %d\nSecond result should be 1: %d\n", 
       res1, res2); 

    return 0; 
} 

и он дал мне следующие ошибки:

sse_test_not_zero.c||In function 'main':| 
sse_test_not_zero.c|8|error: request for member 'm128i_u64' in something not a structure or union| 
sse_test_not_zero.c|9|error: request for member 'm128i_u64' in something not a structure or union| 
sse_test_not_zero.c|9|warning: integer constant is too large for 'long' type| 
sse_test_not_zero.c|11|error: request for member 'm128i_u64' in something not a structure or union| 
sse_test_not_zero.c|12|error: request for member 'm128i_u64' in something not a structure or union| 
sse_test_not_zero.c|16|error: request for member 'm128i_u64' in something not a structure or union| 
sse_test_not_zero.c|20|warning: implicit declaration of function 'printf_s'| 

Это кажется мне нужно создать struct для __m128i, хотя может быть лучшее решение этой проблемы, если кто-то знает об этом.

ответ

2

Определение SSE типов, таких как __m128i, отличается от Microsoft-land, чем в остальном мире. Если вы хотите написать переносимый SSE-код, то придерживайтесь встроенных функций, которые являются общими для всех платформ, и не делайте никаких предположений о том, как определяются типы векторов SSE (т. Е. Рассматривают их как более или менее непрозрачные типы данных). Вы можете реализовать код в своем вопросе, используя только подходящие свойства _mm_set_xxx.

+1

Это еще одна причина, по которой я даю палец Microsoft. Кстати, их земля разрушается. – pandoragami

+0

@ user2555139: Microsoft имеет гораздо меньше расширений, чем GNU для векторов, поэтому ваш комментарий немного странный. –

Смежные вопросы