Conversion d’un projet C ++ en x64 avec des références __m64

Ainsi, lorsque j’ai lancé la conversion et défini la cible sur «x64», j’ai 7 références externes non résolues. Deux exemples:

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 

J’ai donc essayé de les étudier un peu plus en profondeur et j’ai constaté qu’il n’appréciait pas le __m64 à l’intérieur des fichiers d’en-tête: Spécifiquement mminsortingn.h (il pourrait y en avoir d’autres). Dans mon heure d’amateur avec C ++, parce que je ne m’étais pas soucié de la langue depuis des années (je suis généralement dans le département C #), j’ai tenté de modifier les fichiers d’en-tête et de remplacer __m64 par __m128i ?? !!. Je ne sais pas quelle est la route correcte, pour obtenir cette DLL et d’autres DLL à comstackr avec MachineX64. Après avoir édité et mis la source de l’en-tête dans mon répertoire local, cela ne me permet toujours pas de comstackr via un clic droit … à nouveau-amateur-heure. Quelques personnes ont posé des questions similaires, mais je ne trouvais pas la bonne pour moi.

Voici un exemple de ‘mminsortingn.h’ avec __m64 non supporté …

 typedef union __declspec(insortingn_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 insortingnsics */ 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); ... 

Dans la documentation de type __m64 :

Le type de données __m64 n’est pas pris en charge sur les processeurs x64. Les applications qui utilisent __m64 dans les composants insortingnsèques de MMX doivent être réécrites pour utiliser des composants insortingnsèques SSE et SSE2 équivalents.

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

Il semble donc que vous ayez trois options: restr avec 32 bits, porter les composants insortingnsèques de MMX vers SSE ou recourir à une implémentation non SIMD (si vous en avez une – sinon envisagez une nouvelle implémentation en code scalaire).