for all reading here, I show some typical problems: mostly typ change problems
1.)type change, the pointer will be cutted
------ Erstellen gestartet: Projekt: Optimizer, Konfiguration: Release32-NOGFX Win32 ------
Kompilieren...
Microsoft (R) 32-Bit C/C++-Optimierungscompiler Version 14.00.50727.42 für 80x86
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
cl /O2 /Ob2 /Oi /Ot /Oy /GT /I "../../../boinc/win_build" /I ".." /I "..\.." /I "..\..\..\boinc\lib" /I "../../../boinc/api" /I "../../db" /I "C:\Programme\Intel\IPP\5.2_beta\ia32\tools\staticlib" /I "C:\Programme\Intel\IPP\5.2_beta\ia32\include" /I "C:\Programme\Microsoft Platform SDK for Windows Server 2003 R2\Include" /I "C:\Programme\Intel\MKL\9.0\include" /I "C:\boincstuff\seti_boinc_2k3_2.2B-Ben-Joe\client\Optimizer" /D "USE_IPP" /D "USE_SSE2" /D "WIN32" /D "_WIN32" /D "_WINDOWS" /D "_CONSOLE" /D "NDEBUG" /D "_LIB" /D "_MT" /D "CLIENT" /D "NBOINC_APP_GRAPHICS" /D "_UNICODE" /D "UNICODE" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /GF /FD /EHsc /MT /Zp16 /Gy /Yc"stdafx.h" /Fp"Release32-NOGFX\Optimizer.pch" /Fo"Release32-NOGFX\\" /Fd"Release32-NOGFX\vc80.pdb" /W3 /c /Wp64 /Zi /Gd /TP /FI "win-config.h" ".\opt_SSE.cpp"
opt_SSE.cpp
.\opt_SSE.cpp(146) : warning C4311: 'Typumwandlung': Zeigerverkürzung von 'const float *__w64 ' zu 'unsigned int'
Das Buildprotokoll wurde unter "file://c:\boincstuff\seti_boinc_2k3_2.2B-Ben-Joe\client\Optimizer\Release32-NOGFX\BuildLog.htm" gespeichert.
Optimizer - 0 Fehler, 1 Warnung(en)
------------------------------------------------------------
2. a typical type change error --->
------ Erstellen gestartet: Projekt: Optimizer, Konfiguration: Release32-NOGFX Win32 ------
Kompilieren...
Microsoft (R) 32-Bit C/C++-Optimierungscompiler Version 14.00.50727.42 für 80x86
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
cl /O2 /Ob2 /Oi /Ot /Oy /GT /I "../../../boinc/win_build" /I ".." /I "..\.." /I "..\..\..\boinc\lib" /I "../../../boinc/api" /I "../../db" /I "C:\Programme\Intel\IPP\5.2_beta\ia32\tools\staticlib" /I "C:\Programme\Intel\IPP\5.2_beta\ia32\include" /I "C:\Programme\Microsoft Platform SDK for Windows Server 2003 R2\Include" /I "C:\Programme\Intel\MKL\9.0\include" /I "C:\boincstuff\seti_boinc_2k3_2.2B-Ben-Joe\client\Optimizer" /D "USE_IPP" /D "USE_SSE2" /D "WIN32" /D "_WIN32" /D "_WINDOWS" /D "_CONSOLE" /D "NDEBUG" /D "_LIB" /D "_MT" /D "CLIENT" /D "NBOINC_APP_GRAPHICS" /D "_UNICODE" /D "UNICODE" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /GF /FD /EHsc /MT /Zp16 /Gy /Yc"stdafx.h" /Fp"Release32-NOGFX\Optimizer.pch" /Fo"Release32-NOGFX\\" /Fd"Release32-NOGFX\vc80.pdb" /W3 /c /Wp64 /Zi /Gd /TP /FI "win-config.h" ".\opt_SSE2.cpp"
opt_SSE2.cpp
.\opt_SSE2.cpp(85) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(124) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(127) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(134) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(137) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(142) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(145) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(146) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
.\opt_SSE2.cpp(148) : error C2440: 'Typumwandlung': 'VEC' kann nicht in 'VEC_I' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
Das Buildprotokoll wurde unter "file://c:\boincstuff\seti_boinc_2k3_2.2B-Ben-Joe\client\Optimizer\Release32-NOGFX\BuildLog.htm" gespeichert.
Optimizer - 9 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
analyse this:
we look at line 85 and found:
s_put1_NC(p, sum1 ); <-- there is the error
the statement is a macro. s_put1_NC is defined in opcodes_SSE2.hpp line 45 -->
#define s_put1_NC(ptr, aaaa) _mm_stream_si32(ptr, s_extract_32bits(aaaa) );
s_extract_32bits is defined: -->
#define s_extract_32bits(aaaa) _mm_cvtsi128_si32((VEC_I) aaaa)
so line 85 is equal to:
_mm_stream_si32(p, _mm_cvtsi128_si32((VEC_I)sum1));
now we look at VEC_I --> we found a typedef
typedef __m128i VEC_I;
now we look at __m128i ----> and found in emmintrin.h a typedef union structure __m128i --->
typedef union __declspec(intrin_type) __declspec(align(16)) __m128i {
__int8 m128i_i8[16];
__int16 m128i_i16[8];
__int32 m128i_i32[4];
__int64 m128i_i64[2];
unsigned __int8 m128i_u8[16];
unsigned __int16 m128i_u16[8];
unsigned __int32 m128i_u32[4];
unsigned __int64 m128i_u64[2];
} __m128i;
---------------------------------------------------
now we look at sum1 ---> we found it in opt_SSE2 line 61 --->
VEC sum1, sum2;
now we look at VEC and found a typedef in line 39 opcodes_SSE.hpp
typedef __m128 VEC;
now we look at __m128 ---> found in xmmintrin.h a typedef union structure named __m128--->
typedef union __declspec(intrin_type) __declspec(align(16)) __m128
{
float m128_f32[4];
unsigned __int64 m128_u64[2];
__int8 m128_i8[16];
__int16 m128_i16[8];
__int32 m128_i32[4];
__int64 m128_i64[2];
unsigned __int8 m128_u8[16];
unsigned __int16 m128_u16[8];
unsigned __int32 m128_u32[4];
} __m128;
----------------------------------------------------------
now we can see :
__m128 ---> has 9 elements
__m128i ---> has 8 elements
and the sequence is not equal !!!!
-----------------------------------------------
therefore we can not write : __m128i = __m128
therefore we can not write: VEC_I = VEC
therefore VEC can not converted to VEC_I
that´s the problem
-----------------------------
-----------------------------
any suggestions
---------------------------
at first we will do both in equal sequence like this --->
typedef union __declspec(intrin_type) __declspec(align(16)) __m128
{
__int8 m128_i8[16];
__int16 m128_i16[8];
__int32 m128_i32[4];
__int64 m128_i64[2];
unsigned __int8 m128_u8[16];
unsigned __int16 m128_u16[8];
unsigned __int32 m128_u32[4];
unsigned __int64 m128_u64[2];
float m128_f32[4];
} __m128;
what we will do with the 9. element
------------------------------------------------------
@ben can you have a look at it ??
seti_britta