diff options
author | Jun Fang <jun_fang@foxitsoftware.com> | 2015-10-13 15:28:55 +0800 |
---|---|---|
committer | Jun Fang <jun_fang@foxitsoftware.com> | 2015-10-13 00:49:26 -0700 |
commit | e865ed12c4a476a4c74bf1ae97d3a6fa8ca06f0a (patch) | |
tree | 9b2bad54f5afe41a627b0848347c3442f3c33635 /third_party/libopenjpeg20/opj_includes.h | |
parent | a8a39e25af3c19bb91434fdf367cffa0e1536934 (diff) | |
download | pdfium-e865ed12c4a476a4c74bf1ae97d3a6fa8ca06f0a.tar.xz |
upgrade openjpeg to commit# cf352af
BUG=457480,497355
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1338973005 .
Diffstat (limited to 'third_party/libopenjpeg20/opj_includes.h')
-rw-r--r-- | third_party/libopenjpeg20/opj_includes.h | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/third_party/libopenjpeg20/opj_includes.h b/third_party/libopenjpeg20/opj_includes.h index e3d4686488..f855b7c669 100644 --- a/third_party/libopenjpeg20/opj_includes.h +++ b/third_party/libopenjpeg20/opj_includes.h @@ -118,33 +118,65 @@ #endif #endif + + /* MSVC before 2013 and Borland C do not have lrintf */ -#if defined(_MSC_VER) && (_MSC_VER < 1800) || defined(__BORLANDC__) -static INLINE long lrintf(float f){ +#if defined(_MSC_VER) +#include <intrin.h> +static INLINE long opj_lrintf(float f){ #ifdef _M_X64 - return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f)); -#else + 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)); */ +#elif defined(_M_IX86) int i; - - _asm{ + _asm{ fld f fistp i }; return i; +#else + return (long)((f>0.0f) ? (f + 0.5f) : (f - 0.5f)); #endif } +#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 + int i; + + _asm { + fld f + fistp i + }; + + 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 <intrin.h> +# 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" |