diff -urN a/configure b/configure --- a/configure 2012-03-24 13:06:47.000000000 -0600 +++ b/configure 2012-06-08 14:37:25.504009179 -0600 @@ -15984,38 +15984,9 @@ LIBS="$LIBS -framework ApplicationServices" fi elif test "$use_arch" = "arm"; then - CFLAGS="$CFLAGS -mfloat-abi=softfp -mno-apcs-stack-check" - CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp -mno-apcs-stack-check" - FFMPEG_EXTRACFLAGS="-mfloat-abi=softfp" - if test "$use_tegra" = "yes"; then - # Compile for ARMv7a architecture, need to test gcc for vfpv3-d16 support - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mfpu=vfpv3-d16" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - CFLAGS="$SAVE_CFLAGS -Wno-psabi -Wa,-march=armv7a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mthumb-interwork" - CXXFLAGS="$CXXFLAGS -Wno-psabi -Wa,-march=armv7a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mthumb-interwork" - FFMPEG_EXTRACFLAGS="$FFMPEG_EXTRACFLAGS -mtune=cortex-a9 -mfpu=vfpv3-d16" - use_cpu=cortex-a9 -else - CFLAGS="$SAVE_CFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork" - CXXFLAGS="$CXXFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork" - use_cpu=cortex-a8 -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - else - # Compile for ARMv7a architecture, CortexA8 cpu and check for enabled NEON coprocessor - CFLAGS="$CFLAGS -Wa,-march=armv7a -mcpu=cortex-a8" - CXXFLAGS="$CXXFLAGS -Wa,-march=armv7a -mcpu=cortex-a8" - if test "$use_neon" = "yes"; then - CFLAGS="$CFLAGS -mfpu=neon -mvectorize-with-neon-quad" - CXXFLAGS="$CXXFLAGS -mfpu=neon -mvectorize-with-neon-quad" - FFMPEG_EXTRACFLAGS="$FFMPEG_EXTRACFLAGS -mfpu=neon" - fi - fi + CFLAGS="$CFLAGS" + CXXFLAGS="$CXXFLAGS" + FFMPEG_EXTRACFLAGS="" fi # Checks for library functions. diff -urN a/configure.in b/configure.in --- a/configure.in 2012-03-21 16:07:50.000000000 -0600 +++ b/configure.in 2012-06-08 14:46:52.687054825 -0600 @@ -572,32 +572,9 @@ LIBS="$LIBS -framework ApplicationServices" fi elif test "$use_arch" = "arm"; then - CFLAGS="$CFLAGS -mfloat-abi=softfp -mno-apcs-stack-check" - CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp -mno-apcs-stack-check" - FFMPEG_EXTRACFLAGS="-mfloat-abi=softfp" - if test "$use_tegra" = "yes"; then - # Compile for ARMv7a architecture, need to test gcc for vfpv3-d16 support - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mfpu=vfpv3-d16" - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE([int foo;])], - [ CFLAGS="$SAVE_CFLAGS -Wno-psabi -Wa,-march=armv7a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mthumb-interwork" - CXXFLAGS="$CXXFLAGS -Wno-psabi -Wa,-march=armv7a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mthumb-interwork" - FFMPEG_EXTRACFLAGS="$FFMPEG_EXTRACFLAGS -mtune=cortex-a9 -mfpu=vfpv3-d16" - use_cpu=cortex-a9], - [ CFLAGS="$SAVE_CFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork" - CXXFLAGS="$CXXFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork" - use_cpu=cortex-a8]) - else - # Compile for ARMv7a architecture, CortexA8 cpu and check for enabled NEON coprocessor - CFLAGS="$CFLAGS -Wa,-march=armv7a -mcpu=cortex-a8" - CXXFLAGS="$CXXFLAGS -Wa,-march=armv7a -mcpu=cortex-a8" - if test "$use_neon" = "yes"; then - CFLAGS="$CFLAGS -mfpu=neon -mvectorize-with-neon-quad" - CXXFLAGS="$CXXFLAGS -mfpu=neon -mvectorize-with-neon-quad" - FFMPEG_EXTRACFLAGS="$FFMPEG_EXTRACFLAGS -mfpu=neon" - fi - fi + CFLAGS="$CFLAGS" + CXXFLAGS="$CXXFLAGS" + FFMPEG_EXTRACFLAGS="" fi # Checks for library functions. diff -urN a/xbmc/utils/MathUtils.h b/xbmc/utils/MathUtils.h --- a/xbmc/utils/MathUtils.h 2012-03-21 16:07:50.000000000 -0600 +++ b/xbmc/utils/MathUtils.h 2012-06-08 15:43:59.044891727 -0600 @@ -63,46 +63,8 @@ sar i, 1 } #else -#if defined(__powerpc__) || defined(__ppc__) +#if defined(__powerpc__) || defined(__ppc__) || defined(__arm__) i = floor(x + round_to_nearest); -#elif defined(__arm__) - // From 'ARMĀ®v7-M Architecture Reference Manual' page A7-569: - // "The floating-point to integer operation (vcvt) [normally] uses the Round towards Zero rounding mode" - // Because of this...we must use some less-than-straightforward logic to perform this operation without - // changing the rounding mode flags - - /* The assembly below implements the following logic: - if (x < 0) - inc = -0.5f - else - inc = 0.5f - int_val = trunc(x+inc); - err = x - int_val; - if (err == 0.5f) - int_val++; - return int_val; - */ - - __asm__ __volatile__ ( - "vmov.F64 d1,%[rnd_val] \n\t" // Copy round_to_nearest into a working register (d1 = 0.5) - "fcmpezd %P[value] \n\t" // Check value against zero (value == 0?) - "fmstat \n\t" // Copy the floating-point status flags into the general-purpose status flags - "it mi \n\t" - "vnegmi.F64 d1, d1 \n\t" // if N-flag is set, negate round_to_nearest (if (value < 0) d1 = -1 * d1) - "vadd.F64 d1,%P[value],d1 \n\t" // Add round_to_nearest to value, store result in working register (d1 += value) - "vcvt.S32.F64 s3,d1 \n\t" // Truncate(round towards zero) (s3 = (int)d1) - "vmov %[result],s3 \n\t" // Store the integer result in a general-purpose register (result = s3) - "vcvt.F64.S32 d1,s3 \n\t" // Convert back to floating-point (d1 = (double)s3) - "vsub.F64 d1,%P[value],d1 \n\t" // Calculate the error (d1 = value - d1) - "vmov.F64 d2,%[rnd_val] \n\t" // d2 = 0.5; - "fcmped d1, d2 \n\t" // (d1 == 0.5?) - "fmstat \n\t" // Copy the floating-point status flags into the general-purpose status flags - "it eq \n\t" - "addeq %[result],#1 \n\t" // (if (d1 == d2) result++;) - : [result] "=r"(i) // Outputs - : [rnd_val] "Dv" (round_to_nearest), [value] "w"(x) // Inputs - : "d1", "d2", "s3" // Clobbers - ); #else __asm__ __volatile__ ( "fadd %%st\n\t"