diff --git a/CMakeLists.txt b/CMakeLists.txt index 792f26c6b..bd6055cc8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -495,7 +495,7 @@ if(LIBC) strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp _stricmp _strnicmp sscanf atan atan2 acos asin ceil copysign cos - cosf fabs floor log pow scalbn sin sinf sqrt sqrtf tan tanf) + cosf fabs floor log pow round scalbn sin sinf sqrt sqrtf tan tanf) string(TOUPPER ${_FN} _UPPER) set(HAVE_${_UPPER} 1) endforeach() @@ -541,7 +541,7 @@ if(LIBC) if(HAVE_LIBM) set(CMAKE_REQUIRED_LIBRARIES m) foreach(_FN - atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin + atan atan2 ceil copysign cos cosf fabs floor log pow round scalbn sin sinf sqrt sqrtf tan tanf) string(TOUPPER ${_FN} _UPPER) set(_HAVEVAR "HAVE_${_UPPER}") diff --git a/configure b/configure index 08ecfbf35..beb7b8e9a 100755 --- a/configure +++ b/configure @@ -16641,7 +16641,7 @@ if test "x$ac_cv_lib_m_pow" = xyes; then : LIBS="$LIBS -lm"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm" fi - for ac_func in atan atan2 acos asin ceil copysign cos cosf fabs floor log pow scalbn sin sinf sqrt sqrtf tan tanf + for ac_func in atan atan2 acos asin ceil copysign cos cosf fabs floor log pow round scalbn sin sinf sqrt sqrtf tan tanf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.in b/configure.in index 3c87ea754..1464d7eb0 100644 --- a/configure.in +++ b/configure.in @@ -271,7 +271,7 @@ if test x$enable_libc = xyes; then AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove strlen strlcpy strlcat strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp vsscanf vsnprintf fseeko fseeko64 sigaction setjmp nanosleep sysconf sysctlbyname) AC_CHECK_LIB(m, pow, [LIBS="$LIBS -lm"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm"]) - AC_CHECK_FUNCS(atan atan2 acos asin ceil copysign cos cosf fabs floor log pow scalbn sin sinf sqrt sqrtf tan tanf) + AC_CHECK_FUNCS(atan atan2 acos asin ceil copysign cos cosf fabs floor log pow round scalbn sin sinf sqrt sqrtf tan tanf) AC_CHECK_LIB(iconv, iconv_open, [LIBS="$LIBS -liconv"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -liconv"]) AC_CHECK_FUNCS(iconv) diff --git a/include/SDL_config.h.cmake b/include/SDL_config.h.cmake index 9bcf6e909..c149ee8b0 100644 --- a/include/SDL_config.h.cmake +++ b/include/SDL_config.h.cmake @@ -140,6 +140,7 @@ #cmakedefine HAVE_FLOOR 1 #cmakedefine HAVE_LOG 1 #cmakedefine HAVE_POW 1 +#cmakedefine HAVE_ROUND 1 #cmakedefine HAVE_SCALBN 1 #cmakedefine HAVE_SIN 1 #cmakedefine HAVE_SINF 1 diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in index 145a7b772..96c69451d 100644 --- a/include/SDL_config.h.in +++ b/include/SDL_config.h.in @@ -150,6 +150,7 @@ #undef HAVE_FLOOR #undef HAVE_LOG #undef HAVE_POW +#undef HAVE_ROUND #undef HAVE_SCALBN #undef HAVE_SIN #undef HAVE_SINF diff --git a/include/SDL_config_android.h b/include/SDL_config_android.h index 569ff1d5e..8300b46da 100644 --- a/include/SDL_config_android.h +++ b/include/SDL_config_android.h @@ -96,6 +96,7 @@ #define HAVE_FLOOR 1 #define HAVE_LOG 1 #define HAVE_POW 1 +#define HAVE_ROUND 1 #define HAVE_SCALBN 1 #define HAVE_SIN 1 #define HAVE_SINF 1 diff --git a/include/SDL_config_iphoneos.h b/include/SDL_config_iphoneos.h index 4e3eb2c92..75ec3c151 100644 --- a/include/SDL_config_iphoneos.h +++ b/include/SDL_config_iphoneos.h @@ -94,6 +94,7 @@ #define HAVE_FLOOR 1 #define HAVE_LOG 1 #define HAVE_POW 1 +#define HAVE_ROUND 1 #define HAVE_SCALBN 1 #define HAVE_SIN 1 #define HAVE_SINF 1 diff --git a/include/SDL_config_macosx.h b/include/SDL_config_macosx.h index b6af492d4..ebb63cb5f 100644 --- a/include/SDL_config_macosx.h +++ b/include/SDL_config_macosx.h @@ -92,6 +92,7 @@ #define HAVE_FLOOR 1 #define HAVE_LOG 1 #define HAVE_POW 1 +#define HAVE_ROUND 1 #define HAVE_SCALBN 1 #define HAVE_SIN 1 #define HAVE_SINF 1 diff --git a/include/SDL_config_pandora.h b/include/SDL_config_pandora.h index aead1ff9f..2851ada68 100644 --- a/include/SDL_config_pandora.h +++ b/include/SDL_config_pandora.h @@ -91,6 +91,7 @@ #define HAVE_FABS 1 #define HAVE_FLOOR 1 #define HAVE_LOG 1 +#define HAVE_ROUND 1 #define HAVE_SCALBN 1 #define HAVE_SIN 1 #define HAVE_SINF 1 diff --git a/include/SDL_config_psp.h b/include/SDL_config_psp.h index 617d691f2..354dc3f7c 100644 --- a/include/SDL_config_psp.h +++ b/include/SDL_config_psp.h @@ -94,6 +94,7 @@ #define HAVE_FLOOR 1 #define HAVE_LOG 1 #define HAVE_POW 1 +#define HAVE_ROUND 1 #define HAVE_SCALBN 1 #define HAVE_SIN 1 #define HAVE_SINF 1 diff --git a/include/SDL_config_windows.h b/include/SDL_config_windows.h index 8bc7ffe09..1b329e214 100644 --- a/include/SDL_config_windows.h +++ b/include/SDL_config_windows.h @@ -133,6 +133,7 @@ typedef unsigned int uintptr_t; #define HAVE_FLOOR 1 #define HAVE_LOG 1 #define HAVE_POW 1 +#define HAVE_ROUND 1 #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 diff --git a/include/SDL_config_winrt.h b/include/SDL_config_winrt.h index d70a0bcd6..aa634764b 100644 --- a/include/SDL_config_winrt.h +++ b/include/SDL_config_winrt.h @@ -135,6 +135,7 @@ typedef unsigned int uintptr_t; #define HAVE_FLOOR 1 #define HAVE_LOG 1 #define HAVE_POW 1 +#define HAVE_ROUND 1 //#define HAVE_SCALBN 1 #define HAVE__SCALB 1 #define HAVE_SIN 1 diff --git a/include/SDL_config_wiz.h b/include/SDL_config_wiz.h index 9204567c6..46bc816f0 100644 --- a/include/SDL_config_wiz.h +++ b/include/SDL_config_wiz.h @@ -85,6 +85,7 @@ #define HAVE_FABS 1 #define HAVE_FLOOR 1 #define HAVE_LOG 1 +#define HAVE_ROUND 1 #define HAVE_SCALBN 1 #define HAVE_SIN 1 #define HAVE_SINF 1 diff --git a/include/SDL_stdinc.h b/include/SDL_stdinc.h index 78d3402e7..47a5ca9d4 100644 --- a/include/SDL_stdinc.h +++ b/include/SDL_stdinc.h @@ -428,6 +428,7 @@ extern DECLSPEC double SDLCALL SDL_fabs(double x); extern DECLSPEC double SDLCALL SDL_floor(double x); extern DECLSPEC double SDLCALL SDL_log(double x); extern DECLSPEC double SDLCALL SDL_pow(double x, double y); +extern DECLSPEC double SDLCALL SDL_round(double x); extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); extern DECLSPEC double SDLCALL SDL_sin(double x); extern DECLSPEC float SDLCALL SDL_sinf(float x); diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index 8bcde6312..d88796425 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -591,3 +591,4 @@ #define SDL_QueueAudio SDL_QueueAudio_REAL #define SDL_GetQueuedAudioSize SDL_GetQueuedAudioSize_REAL #define SDL_ClearQueuedAudio SDL_ClearQueuedAudio_REAL +#define SDL_round SDL_round_REAL diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index c41cdc9f0..0b8546d73 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -623,3 +623,4 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX2,(void),(),return) SDL_DYNAPI_PROC(int,SDL_QueueAudio,(SDL_AudioDeviceID a, const void *b, Uint32 c),(a,b,c),return) SDL_DYNAPI_PROC(Uint32,SDL_GetQueuedAudioSize,(SDL_AudioDeviceID a),(a),return) SDL_DYNAPI_PROC(void,SDL_ClearQueuedAudio,(SDL_AudioDeviceID a),(a),) +SDL_DYNAPI_PROC(double,SDL_round,(double a),(a),return) diff --git a/src/libm/math_libm.h b/src/libm/math_libm.h index 6b479f44d..88f785267 100644 --- a/src/libm/math_libm.h +++ b/src/libm/math_libm.h @@ -30,6 +30,7 @@ double SDL_uclibc_fabs(double x); double SDL_uclibc_floor(double x); double SDL_uclibc_log(double x); double SDL_uclibc_pow(double x, double y); +double SDL_uclibc_round(double x); double SDL_uclibc_scalbn(double x, int n); double SDL_uclibc_sin(double x); double SDL_uclibc_sqrt(double x); diff --git a/src/libm/math_private.h b/src/libm/math_private.h index 74c8b3d45..78b62408e 100644 --- a/src/libm/math_private.h +++ b/src/libm/math_private.h @@ -37,6 +37,7 @@ typedef unsigned int u_int32_t; #define floor SDL_uclibc_floor #define __ieee754_log SDL_uclibc_log #define __ieee754_pow SDL_uclibc_pow +#define round SDL_uclibc_round #define scalbn SDL_uclibc_scalbn #define sin SDL_uclibc_sin #define __ieee754_sqrt SDL_uclibc_sqrt diff --git a/src/stdlib/SDL_stdlib.c b/src/stdlib/SDL_stdlib.c index b1de63d2a..493bebe44 100644 --- a/src/stdlib/SDL_stdlib.c +++ b/src/stdlib/SDL_stdlib.c @@ -169,6 +169,16 @@ SDL_pow(double x, double y) #endif /* HAVE_POW */ } +double +SDL_round(double x) +{ +#if defined(HAVE_ROUND) + return round(x); +#else + return SDL_uclibc_round(x); +#endif /* HAVE_ROUND */ +} + double SDL_scalbn(double x, int n) {