使用__m64引用将C ++项目转换为x64 [英] Converting a C++ project to x64 with __m64 references

查看:196
本文介绍了使用__m64引用将C ++项目转换为x64的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,当我开始转换并将目标设置为 x64时,我得到了7个未解决的外部组件。两个示例:

So when I started the conversion and set the target to 'x64', I get 7 unresolved externals. Two examples:

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和其他DLL能够针对MachineX64进行编译。在编辑标头的源并将其放置在我的本地目录中之后,它仍然不允许我通过右键单击...再次进行编译。
有人问过类似的问题,但我找不到适合我的问题。

So I tried investigating these a bit deeper, and I found that it doesn't like the __m64 inside the header files: Specifically mmintrin.h (there might be others). In my amateur hour with C++, because I haven't messed with the language in years, (I'm usually in the C# department), I attempted to edit the header files, and replace __m64 with __m128i ??!!. Don't know what is the correct route, to get this and other DLLs to compile against MachineX64. After editing and putting the source of the header in my local directory, it still doesn't allow me to compile via right-click... again-Amateur-hour. There has been a few people that have asked similar questions, but I couldn't find the right one for me.

这里是'mmintrin.h'的示例,其中不支持__m64 ...

Here is a sample of 'mmintrin.h' with unsupported __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);
...


推荐答案

__ m64 类型文档:


x64处理器不支持__m64数据类型。使用__m64作为MMX内部函数一部分的应用程序必须重写,以使用等效的SSE和SSE2内部函数。

The __m64 data type is not supported on x64 processors. Applications that use __m64 as part of MMX intrinsics must be rewritten to use equivalent SSE and SSE2 intrinsics.

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

因此,您似乎有三个选择:坚持使用32位,将MMX内部函数移植到SSE或回退到非SIMD实现(如果有的话-如果没有,则考虑以标量代码重新实现)。

So it looks like you have three options: stick with 32 bits, port the MMX intrinsics to SSE, or fall back to a non-SIMD implementation (if you have one - if not then consider re-implementing in scalar code).

这篇关于使用__m64引用将C ++项目转换为x64的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆