[英]Converting a C++ project to x64 with __m64 references
因此,當我開始轉換並將目標設置為“ 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進行編譯。 編輯標題的源並將其放置在我的本地目錄中之后,它仍然不允許我通過右鍵單擊...再次進行業余時間編譯。 有幾個人問過類似的問題,但我找不到適合我的問題。
這是帶有不受支持的__m64的'mmintrin.h'示例。
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);
...
從__m64
類型文檔中:
x64處理器不支持__m64數據類型。 使用__m64作為MMX內部函數一部分的應用程序必須重寫,以使用等效的SSE和SSE2內部函數。
http://msdn.microsoft.com/en-us/library/08x3t697(v=vs.110).aspx
因此,看起來您有三個選擇:堅持使用32位,將MMX內部函數移植到SSE或回退到非SIMD實現(如果有的話-如果沒有,則考慮在標量代碼中重新實現)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.