因此,当我开始转换并将目标设置为'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
Run Code Online (Sandbox Code Playgroud)
所以我试着更深入地研究这些,我发现它不喜欢头文件中的__m64:特别是mmintrin.h(可能还有其他的).在我使用C++的业余时间,因为我多年来没有弄乱语言,(我通常在C#部门),我试图编辑头文件,并用__m128i替换__m64 !! !! 不知道什么是正确的路由,让这个和其他DLL编译对MachineX64.编辑并将标题源放在我的本地目录后,它仍然不允许我通过右键单击...再次 - 业余小时编译.有几个人问过类似的问题,但我找不到合适的问题.
以下是'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, …Run Code Online (Sandbox Code Playgroud) 英特尔内在函数的名称中内置了向量的子类型。例如,_mm_set1_ps是 a ps,即packed single-precisionaka。A float。尽管它们中的大多数的含义是明确的,但它们的“全名”packed single-precision从功能描述中并不总是清晰的。我创建了下表。不幸的是,有些条目丢失了。它们有何价值?其他问题见表下方。
| 缩写 | 全名 | C/++ 等效项 |
|---|---|---|
| 附注 | 压缩单精度 | 漂浮 |
| 酸碱度 | 压缩半精度 | 没有任何** |
| PD | 压缩双精度 | 双倍的 |
| 个人电脑 | 压缩半精度复数 | 没有任何** |
| pi8 | ??? | int8_t |
| PI16 | ??? | int16_t |
| pi32 | ??? | int32_t |
| Epi8 | ??? | int8_t |
| 表观16 | ??? | int16_t |
| 表观32 | ??? | int32_t |
| 表观64 | ??? | int64_t |
| 外延64x | ??? | int64_t |
附加问题:
epiX和 和有什么区别piX?pi64存在?epi64和 和有什么区别epi64x?** 我发现了这个,但似乎没有标准方法来表示 C/++ 中的半精度(复数)值。如果这有任何改变,请纠正我。