diff --git a/audio/drivers_resampler/cc_resampler.c b/audio/drivers_resampler/cc_resampler.c index 3a47a5c7e1..11b8d017e2 100644 --- a/audio/drivers_resampler/cc_resampler.c +++ b/audio/drivers_resampler/cc_resampler.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "../audio_resampler_driver.h" @@ -271,7 +272,7 @@ static void resampler_CC_upsample(void *re_, struct resampler_data *data) audio_frame_float_t *inp = (audio_frame_float_t*)data->data_in; audio_frame_float_t *inp_max = (audio_frame_float_t*)(inp + data->input_frames); audio_frame_float_t *outp = (audio_frame_float_t*)data->data_out; - float b = MIN(data->ratio, 1.00); /* cutoff frequency. */ + float b = float_min(data->ratio, 1.00); /* cutoff frequency. */ float ratio = 1.0 / data->ratio; __m128 vec_previous = _mm_loadu_ps((float*)&re->buffer[0]); __m128 vec_current = _mm_loadu_ps((float*)&re->buffer[2]); @@ -446,7 +447,7 @@ static void resampler_CC_upsample(void *re_, struct resampler_data *data) audio_frame_float_t *inp_max = (audio_frame_float_t*) (inp + data->input_frames); audio_frame_float_t *outp = (audio_frame_float_t*)data->data_out; - float b = MIN(data->ratio, 1.00); /* cutoff frequency. */ + float b = float_min(data->ratio, 1.00); /* cutoff frequency. */ float ratio = 1.0 / data->ratio; while (inp != inp_max) diff --git a/libretro-common/include/math/float_minmax.h b/libretro-common/include/math/float_minmax.h new file mode 100644 index 0000000000..c4a0a7f3e5 --- /dev/null +++ b/libretro-common/include/math/float_minmax.h @@ -0,0 +1,61 @@ +/* Copyright (C) 2010-2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (float_minmax.h). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef __LIBRETRO_SDK_MATH_FLOAT_MINMAX_H__ +#define __LIBRETRO_SDK_MATH_FLOAT_MINMAX_H__ + +#include + +#include +#include +#include + +#ifdef __SSE2__ +#include +#include +#endif + +static INLINE float float_min(float a, float b) +{ +#ifdef __SSE2__ + _mm_store_ss( &a, _mm_min_ss(_mm_set_ss(a),_mm_set_ss(b)) ); + return a; +#elif defined(__STDC_C99__) || defined(__STDC_C11__) + return fminf(a, b); +#else + return MIN(a, b); +#endif +} + +static INLINE float float_max(float a, float b) +{ +#ifdef __SSE2__ + _mm_store_ss( &a, _mm_max_ss(_mm_set_ss(a),_mm_set_ss(b)) ); + return a; +#elif defined(__STDC_C99__) || defined(__STDC_C11__) + return fmaxf(a, b); +#else + return MAX(a, b); +#endif +} + + +#endif