簡體   English   中英

使用__m64引用將C ++項目轉換為x64

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM