| 1 | From https://github.com/FFTW/fftw3/issues/73 |
| 2 | |
| 3 | diff --git a/configure.ac b/configure.ac |
| 4 | index 83a295f..51d290a 100644 |
| 5 | --- a/configure.ac |
| 6 | +++ b/configure.ac |
| 7 | @@ -212,11 +212,21 @@ if test "$have_neon" = "yes"; then |
| 8 | fi |
| 9 | AM_CONDITIONAL(HAVE_NEON, test "$have_neon" = "yes") |
| 10 | |
| 11 | -AC_ARG_ENABLE(armv8cyclecounter, [AC_HELP_STRING([--enable-armv8cyclecounter],[enable the cycle counter on ARMv8 ; require enabling in kernel mode, see <https://github.com/rdolbeau/enable_arm_pmu>])], have_armv8cyclecounter=$enableval) |
| 12 | +AC_ARG_ENABLE(armv8cyclecounter, [AC_HELP_STRING([--enable-armv8cyclecounter],[enable the cycle counter on ARMv8 via the PMCCNTR_EL0 register. Requires enabling in kernel mode, see <https://github.com/rdolbeau/enable_arm_pmu>])], have_armv8cyclecounter=$enableval) |
| 13 | if test "$have_armv8cyclecounter"x = "yes"x; then |
| 14 | AC_DEFINE(HAVE_ARMV8CC,1,[Define if you have enabled the cycle counter on ARMv8]) |
| 15 | fi |
| 16 | |
| 17 | +AC_ARG_ENABLE(armv8-cntvct-el0, [AC_HELP_STRING([--enable-armv8-cntvct-el0],[enable the cycle counter on ARMv8 via the CNTVCT_EL0 register])], have_armv8cntvctel0=$enableval) |
| 18 | +if test "$have_armv8cntvctel0"x = "yes"x; then |
| 19 | + AC_DEFINE(HAVE_ARMV8_CNTVCT_EL0,1,[Define if you have enabled the CNTVCT_EL0 cycle counter on ARMv8]) |
| 20 | +fi |
| 21 | + |
| 22 | +AC_ARG_ENABLE(armv7a-cntvct, [AC_HELP_STRING([--enable-armv7a-cntvct],[enable the cycle counter on Armv7a via the CNTVCT register])], have_armv7acntvct=$enableval) |
| 23 | +if test "$have_armv7acntvct"x = "yes"x; then |
| 24 | + AC_DEFINE(HAVE_ARMV7A_CNTVCT,1,[Define if you have enabled the CNTVCT cycle counter on ARMv7a]) |
| 25 | +fi |
| 26 | + |
| 27 | AC_ARG_ENABLE(generic-simd128, [AC_HELP_STRING([--enable-generic-simd128],[enable generic (gcc) 128-bit SIMD optimizations])], have_generic_simd128=$enableval, have_generic_simd128=no) |
| 28 | if test "$have_generic_simd128" = "yes"; then |
| 29 | AC_DEFINE(HAVE_GENERIC_SIMD128,1,[Define to enable generic (gcc) 128-bit SIMD optimizations.]) |
| 30 | @@ -719,36 +729,6 @@ AM_CONDITIONAL(OPENMP, test "$enable_openmp" = "yes") |
| 31 | AM_CONDITIONAL(SMP, test "$enable_threads" = "yes" -o "$enable_openmp" = "yes") |
| 32 | AM_CONDITIONAL(COMBINED_THREADS, test x"$with_combined_threads" = xyes) |
| 33 | |
| 34 | - |
| 35 | -dnl ----------------------------------------------------------------------- |
| 36 | -dnl Check for not-always-available (not quite) cycle counters |
| 37 | -case "${host_cpu}" in |
| 38 | - armv7*) |
| 39 | - AC_MSG_CHECKING([armv7a has 64 bits readable CNTVCT]) |
| 40 | - AC_RUN_IFELSE( |
| 41 | - [AC_LANG_PROGRAM([[#include <stdint.h>]], |
| 42 | - [[uint32_t Rt, Rt2 = 0;asm volatile("mrrc p15, 1, %0, %1, c14" : "=r"(Rt), "=r"(Rt2));]] |
| 43 | - )], |
| 44 | - [AC_DEFINE(ARMV7A_HAS_CNTCVT,1,[Define if CNTVCT is 64 bits readable on armv7a ]) |
| 45 | - AC_MSG_RESULT([yes])], |
| 46 | - [AC_MSG_RESULT([no])] |
| 47 | - ) |
| 48 | - ;; |
| 49 | - aarch64) |
| 50 | - AC_MSG_CHECKING([armv8 has 64 bits readable CNTVCT_EL0]) |
| 51 | - AC_RUN_IFELSE( |
| 52 | - [AC_LANG_PROGRAM([[#include <stdint.h>]], |
| 53 | - [[uint64_t Rt;asm volatile("mrs %0, CNTVCT_EL0" : "=r" (Rt));]] |
| 54 | - )], |
| 55 | - [AC_DEFINE(ARMV8_HAS_CNTCVT_EL0,1,[Define if CNTVCT_EL0 is 64 bits readable on armv8 ]) |
| 56 | - AC_MSG_RESULT([yes])], |
| 57 | - [AC_MSG_RESULT([no])] |
| 58 | - ) |
| 59 | - ;; |
| 60 | - *) |
| 61 | - ;; |
| 62 | -esac |
| 63 | - |
| 64 | dnl ----------------------------------------------------------------------- |
| 65 | |
| 66 | AC_MSG_CHECKING([whether a cycle counter is available]) |
| 67 | diff --git a/kernel/cycle.h b/kernel/cycle.h |
| 68 | index 873e92e..781792c 100644 |
| 69 | --- a/kernel/cycle.h |
| 70 | +++ b/kernel/cycle.h |
| 71 | @@ -515,7 +515,7 @@ INLINE_ELAPSED(inline) |
| 72 | #endif |
| 73 | #endif /* HAVE_MIPS_ZBUS_TIMER */ |
| 74 | |
| 75 | -#if defined(__ARM_ARCH_7A__) && defined(ARMV7A_HAS_CNTCVT) |
| 76 | +#if defined(__ARM_ARCH_7A__) && defined(ARMV7A_HAS_CNTVCT) |
| 77 | typedef uint64_t ticks; |
| 78 | static inline ticks getticks(void) |
| 79 | { |
| 80 | @@ -527,7 +527,7 @@ INLINE_ELAPSED(inline) |
| 81 | #define HAVE_TICK_COUNTER |
| 82 | #endif |
| 83 | |
| 84 | -#if defined(__aarch64__) && defined(ARMV8_HAS_CNTCVT_EL0) && !defined(HAVE_ARMV8CC) |
| 85 | +#if defined(__aarch64__) && defined(HAVE_ARMV8_CNTVCT_EL0) && !defined(HAVE_ARMV8CC) |
| 86 | typedef uint64_t ticks; |
| 87 | static inline ticks getticks(void) |
| 88 | { |