X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fopenjp2%2Fopj_includes.h;h=f855b7c6694045ebb1108a188971fa28e6d00f0e;hb=a1fc83cc255ff7697d6ca68ea4e1c42710771756;hp=d8faede017a82645c92094a29caee5eeb23d40fb;hpb=8c4afeff40857138aada9f3301a43d4dfce7b7ed;p=openjpeg.git diff --git a/src/lib/openjp2/opj_includes.h b/src/lib/openjp2/opj_includes.h index d8faede0..f855b7c6 100644 --- a/src/lib/openjp2/opj_includes.h +++ b/src/lib/openjp2/opj_includes.h @@ -123,13 +123,13 @@ /* MSVC before 2013 and Borland C do not have lrintf */ #if defined(_MSC_VER) #include -static INLINE long lrintf(float f){ +static INLINE long opj_lrintf(float f){ #ifdef _M_X64 return _mm_cvt_ss2si(_mm_load_ss(&f)); /* commented out line breaks many tests */ /* return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f)); */ -#else +#elif defined(_M_IX86) int i; _asm{ fld f @@ -137,12 +137,12 @@ static INLINE long lrintf(float f){ }; return i; +#else + return (long)((f>0.0f) ? (f + 0.5f) : (f - 0.5f)); #endif } -#endif - -#if defined(__BORLANDC__) -static INLINE long lrintf(float f) { +#elif defined(__BORLANDC__) +static INLINE long opj_lrintf(float f) { #ifdef _M_X64 return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f)); #else @@ -156,19 +156,27 @@ static INLINE long lrintf(float f) { return i; #endif } +#else +static INLINE long opj_lrintf(float f) { + return lrintf(f); +} #endif - - #if defined(_MSC_VER) && (_MSC_VER < 1400) #define vsnprintf _vsnprintf #endif +/* MSVC x86 is really bad at doing int64 = int32 * int32 on its own. Use intrinsic. */ +#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__INTEL_COMPILER) && defined(_M_IX86) +# include +# pragma intrinsic(__emul) +#endif + #include "opj_inttypes.h" #include "opj_clock.h" #include "opj_malloc.h" -#include "function_list.h" #include "event.h" +#include "function_list.h" #include "bio.h" #include "cio.h"