Визуальное Преобразование проекта C ++ в x64 со ссылками __m64

Поэтому, когда я начал преобразование и установил цель на «x64», я получил 7 неразрешенных внешних объектов. Два примера:

error LNK2001: unresolved external symbol _m_empty    ...CONVOLUTION_2D_USHORT.obj  CONVOLUTION_2D_USHORT
error LNK2001: unresolved external symbol _mm_setzero_si64  ...CONVOLUTION_2D_USHORT.obj    CONVOLUTION_2D_USHORT

Поэтому я попытался исследовать их немного глубже и обнаружил, что ему не нравится __m64 внутри заголовочных файлов: в частности, mmintrin.h (могут быть и другие). Во время моего любительского часа с C ++, потому что я годами не перепутал язык (я обычно в отделе C #), я попытался отредактировать заголовочные файлы и заменить __m64 на __m128i ?? !!. Не знаю, каков правильный маршрут, чтобы заставить эту и другие библиотеки DLL компилироваться с MachineX64. После редактирования и размещения исходного заголовка в моем локальном каталоге он все еще не позволяет мне скомпилировать с помощью щелчка правой кнопкой мыши … again-Amateur-hour.
Было несколько человек, которые задавали подобные вопросы, но я не мог найти подходящий для меня.

Вот пример mmintrin.h с неподдерживаемым __m64 …

typedef union __declspec(intrin_type)_CRT_ALIGN(8) __m64
{
unsigned __int64    m64_u64;
float               m64_f32[2];
__int8              m64_i8[8];
__int16             m64_i16[4];
__int32             m64_i32[2];
__int64             m64_i64;
unsigned __int8     m64_u8[8];
unsigned __int16    m64_u16[4];
unsigned __int32    m64_u32[2];
} __m64;

/* General support intrinsics */
void  _m_empty(void);
__m64 _m_from_int(int _I);
int   _m_to_int(__m64 _M);
__m64 _m_packsswb(__m64 _MM1, __m64 _MM2);
__m64 _m_packssdw(__m64 _MM1, __m64 _MM2);
__m64 _m_packuswb(__m64 _MM1, __m64 _MM2);
__m64 _m_punpckhbw(__m64 _MM1, __m64 _MM2);
__m64 _m_punpckhwd(__m64 _MM1, __m64 _MM2);
__m64 _m_punpckhdq(__m64 _MM1, __m64 _MM2);
__m64 _m_punpcklbw(__m64 _MM1, __m64 _MM2);
__m64 _m_punpcklwd(__m64 _MM1, __m64 _MM2);
__m64 _m_punpckldq(__m64 _MM1, __m64 _MM2);
...

9

Решение

От __m64 тип документации:

Тип данных __m64 не поддерживается на процессорах x64. Приложения, которые используют __m64 как часть встроенных функций MMX, должны быть переписаны для использования эквивалентных встроенных функций SSE и SSE2.

http://msdn.microsoft.com/en-us/library/08x3t697(v=vs.110).aspx

Похоже, у вас есть три варианта: придерживаться 32-битного кода, перенести встроенные функции MMX в SSE или использовать не-SIMD-реализацию (если она есть — если нет, то подумайте о повторной реализации в скалярном коде).

9

Другие решения


По вопросам рекламы [email protected]