From 3e26513656bff4e70ab14b9a3913b98068950d9a Mon Sep 17 00:00:00 2001 From: Clement Courbet Date: Fri, 18 Jun 2021 13:21:37 +0000 Subject: [PATCH] Add WEBP_RESTRICT & use it in VP8BitReader Marking the `VP8BitReader` as `__restrict__` helps the compiler generate better code avoiding issues related to aliasing (re-loads/stores). Change-Id: Ib7178f57e27e5f40572efc3e567cdf994ea6d928 --- src/utils/bit_reader_inl_utils.h | 2 +- src/utils/utils.h | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/utils/bit_reader_inl_utils.h b/src/utils/bit_reader_inl_utils.h index 46b38807..c5f9ae5c 100644 --- a/src/utils/bit_reader_inl_utils.h +++ b/src/utils/bit_reader_inl_utils.h @@ -104,7 +104,7 @@ void VP8LoadNewBytes(VP8BitReader* const br) { } // Read a bit with proba 'prob'. Speed-critical function! -static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, +static WEBP_INLINE int VP8GetBit(VP8BitReader* WEBP_RESTRICT const br, int prob, const char label[]) { // Don't move this declaration! It makes a big speed difference to store // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't diff --git a/src/utils/utils.h b/src/utils/utils.h index ef04f108..0026a747 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -25,6 +25,16 @@ #include "src/dsp/dsp.h" #include "src/webp/types.h" +//------------------------------------------------------------------------------ +// restrict + +#if defined(__GNUC__) || defined(__clang__) +#define WEBP_RESTRICT __restrict +#else +#define WEBP_RESTRICT +#endif + + #ifdef __cplusplus extern "C" { #endif