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  
