| --- SeExpr-2.11/src/SeExpr/SeNoise.cpp.orig 2015-08-28 22:32:38 UTC |
| +++ SeExpr-2.11/src/SeExpr/SeNoise.cpp |
| @@ -16,7 +16,9 @@ |
| */ |
| |
| #include <iostream> |
| +#ifdef __SSE4_1__ |
| #include <smmintrin.h> |
| +#endif |
| |
| #include "SeExprBuiltins.h" |
| namespace{ |
| @@ -25,14 +27,18 @@ namespace{ |
| #include "SeNoise.h" |
| namespace SeExpr{ |
| |
| +#ifdef __SSE4_1__ |
| inline double floorSSE(double val) { |
| - return _mm_cvtsd_f64(_mm_floor_sd(_mm_set_sd(0.0), _mm_set_sd(val))); |
| + return _mm_floor_sd(_mm_set_sd(0.0), _mm_set_sd(val))[0]; |
| } |
| |
| inline double roundSSE(double val) { |
| - return _mm_cvtsd_f64(_mm_round_sd(_mm_set_sd(0.0), _mm_set_sd(val), _MM_FROUND_TO_NEAREST_INT)); |
| + return _mm_round_sd(_mm_set_sd(0.0), _mm_set_sd(val), _MM_FROUND_TO_NEAREST_INT)[0]; |
| } |
| - |
| +#else |
| +#define floorSSE floor |
| +#define roundSSE round |
| +#endif |
| |
| //! This is the Quintic interpolant from Perlin's Improved Noise Paper |
| double s_curve(double t) { |