[libav-devel] [PATCH 01/13] arm64: add cycle counter support

Martin Storsjö martin at martin.st
Thu Dec 10 14:31:35 CET 2015


On Wed, 9 Dec 2015, Janne Grunau wrote:

> The ISB (instruction synchronization barrier) might be too heavy for
> START/STOPTIMER use but should be more accurate in checkasm where the
> timing overhead is subtracted.
> ---
> libavutil/aarch64/timer.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
> libavutil/timer.h         |  4 +++-
> 2 files changed, 47 insertions(+), 1 deletion(-)
> create mode 100644 libavutil/aarch64/timer.h
>
> diff --git a/libavutil/aarch64/timer.h b/libavutil/aarch64/timer.h
> new file mode 100644
> index 0000000..382cfd9
> --- /dev/null
> +++ b/libavutil/aarch64/timer.h
> @@ -0,0 +1,44 @@
> +/*
> + * Copyright (c) 2015 Janne Grunau <janne-libav at jannau.net>
> + *
> + * This file is part of Libav.
> + *
> + * Libav is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * Libav is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with Libav; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#ifndef AVUTIL_AARCH64_TIMER_H
> +#define AVUTIL_AARCH64_TIMER_H
> +
> +#include <stdint.h>
> +#include "config.h"
> +
> +#if HAVE_INLINE_ASM
> +
> +#define AV_READ_TIME read_time
> +
> +static inline uint64_t read_time(void)
> +{
> +    uint64_t cycle_counter;
> +    __asm__ volatile(
> +        "isb                   \t\n"
> +        "mrs %0, pmccntr_el0       "
> +        : "=r"(cycle_counter) :: "memory" );
> +
> +    return cycle_counter;
> +}
> +
> +#endif /* HAVE_INLINE_ASM */
> +
> +#endif /* AVUTIL_AARCH64_TIMER_H */
> diff --git a/libavutil/timer.h b/libavutil/timer.h
> index 0d93d7c..cc4c5a5 100644
> --- a/libavutil/timer.h
> +++ b/libavutil/timer.h
> @@ -38,7 +38,9 @@
>
> #include "log.h"
>
> -#if   ARCH_ARM
> +#if   ARCH_AARCH64
> +#   include "aarch64/timer.h"
> +#elif ARCH_ARM
> #   include "arm/timer.h"
> #elif ARCH_BFIN
> #   include "bfin/timer.h"
> -- 
> 2.6.4

Ok

// Martin


More information about the libav-devel mailing list