Merge "remove WEBP_FORCE_ALIGNED and use memcpy() instead."
This commit is contained in:
commit
48c810b85c
@ -6,7 +6,6 @@ project(libwebp C)
|
|||||||
option(WEBP_BUILD_CWEBP "Build the cwebp command line tool." OFF)
|
option(WEBP_BUILD_CWEBP "Build the cwebp command line tool." OFF)
|
||||||
option(WEBP_BUILD_DWEBP "Build the dwebp command line tool." OFF)
|
option(WEBP_BUILD_DWEBP "Build the dwebp command line tool." OFF)
|
||||||
option(WEBP_EXPERIMENTAL_FEATURES "Build with experimental features." OFF)
|
option(WEBP_EXPERIMENTAL_FEATURES "Build with experimental features." OFF)
|
||||||
option(WEBP_FORCE_ALIGNED "Force aligned memory operations." OFF)
|
|
||||||
option(WEBP_ENABLE_SWAP_16BIT_CSP "Enable byte swap for 16 bit colorspaces." OFF)
|
option(WEBP_ENABLE_SWAP_16BIT_CSP "Enable byte swap for 16 bit colorspaces." OFF)
|
||||||
|
|
||||||
set(WEBP_DEP_LIBRARIES)
|
set(WEBP_DEP_LIBRARIES)
|
||||||
|
@ -103,9 +103,6 @@
|
|||||||
/* Enable experimental code */
|
/* Enable experimental code */
|
||||||
#cmakedefine WEBP_EXPERIMENTAL_FEATURES 1
|
#cmakedefine WEBP_EXPERIMENTAL_FEATURES 1
|
||||||
|
|
||||||
/* Define to 1 to force aligned memory operations */
|
|
||||||
#cmakedefine WEBP_FORCE_ALIGNED 1
|
|
||||||
|
|
||||||
/* Set to 1 if AVX2 is supported */
|
/* Set to 1 if AVX2 is supported */
|
||||||
#cmakedefine WEBP_HAVE_AVX2 1
|
#cmakedefine WEBP_HAVE_AVX2 1
|
||||||
|
|
||||||
|
13
configure.ac
13
configure.ac
@ -596,19 +596,6 @@ if test "$enable_wic" = "yes"; then
|
|||||||
fi
|
fi
|
||||||
esac
|
esac
|
||||||
|
|
||||||
dnl === If --enable-aligned is defined, define WEBP_FORCE_ALIGNED
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(if --enable-aligned option is specified)
|
|
||||||
AC_ARG_ENABLE([aligned],
|
|
||||||
AS_HELP_STRING([--enable-aligned],
|
|
||||||
[Force aligned memory operations in non-dsp code
|
|
||||||
(may be slower)]))
|
|
||||||
if test "$enable_aligned" = "yes"; then
|
|
||||||
AC_DEFINE(WEBP_FORCE_ALIGNED, [1],
|
|
||||||
[Define to 1 to force aligned memory operations])
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT(${enable_aligned-no})
|
|
||||||
|
|
||||||
dnl === If --enable-swap-16bit-csp is defined, add -DWEBP_SWAP_16BIT_CSP
|
dnl === If --enable-swap-16bit-csp is defined, add -DWEBP_SWAP_16BIT_CSP
|
||||||
|
|
||||||
USE_SWAP_16BIT_CSP=""
|
USE_SWAP_16BIT_CSP=""
|
||||||
|
@ -111,8 +111,7 @@ extern "C" {
|
|||||||
|
|
||||||
#define WEBP_UBSAN_IGNORE_UNDEF
|
#define WEBP_UBSAN_IGNORE_UNDEF
|
||||||
#define WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW
|
#define WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW
|
||||||
#if !defined(WEBP_FORCE_ALIGNED) && defined(__clang__) && \
|
#if defined(__clang__) && defined(__has_attribute)
|
||||||
defined(__has_attribute)
|
|
||||||
#if __has_attribute(no_sanitize)
|
#if __has_attribute(no_sanitize)
|
||||||
// This macro prevents the undefined behavior sanitizer from reporting
|
// This macro prevents the undefined behavior sanitizer from reporting
|
||||||
// failures. This is only meant to silence unaligned loads on platforms that
|
// failures. This is only meant to silence unaligned loads on platforms that
|
||||||
|
@ -20,9 +20,7 @@
|
|||||||
#include "../webp/config.h"
|
#include "../webp/config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WEBP_FORCE_ALIGNED
|
#include <string.h> // for memcpy
|
||||||
#include <string.h> // memcpy
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "../dsp/dsp.h"
|
#include "../dsp/dsp.h"
|
||||||
#include "./bit_reader.h"
|
#include "./bit_reader.h"
|
||||||
@ -62,10 +60,7 @@ void VP8LoadNewBytes(VP8BitReader* const br) {
|
|||||||
if (br->buf_ < br->buf_max_) {
|
if (br->buf_ < br->buf_max_) {
|
||||||
// convert memory type to register type (with some zero'ing!)
|
// convert memory type to register type (with some zero'ing!)
|
||||||
bit_t bits;
|
bit_t bits;
|
||||||
#if defined(WEBP_FORCE_ALIGNED)
|
#if defined(WEBP_USE_MIPS32)
|
||||||
lbit_t in_bits;
|
|
||||||
memcpy(&in_bits, br->buf_, sizeof(in_bits));
|
|
||||||
#elif defined(WEBP_USE_MIPS32)
|
|
||||||
// This is needed because of un-aligned read.
|
// This is needed because of un-aligned read.
|
||||||
lbit_t in_bits;
|
lbit_t in_bits;
|
||||||
lbit_t* p_buf_ = (lbit_t*)br->buf_;
|
lbit_t* p_buf_ = (lbit_t*)br->buf_;
|
||||||
@ -80,7 +75,8 @@ void VP8LoadNewBytes(VP8BitReader* const br) {
|
|||||||
: "memory", "at"
|
: "memory", "at"
|
||||||
);
|
);
|
||||||
#else
|
#else
|
||||||
const lbit_t in_bits = *(const lbit_t*)br->buf_;
|
lbit_t in_bits;
|
||||||
|
memcpy(&in_bits, br->buf_, sizeof(in_bits));
|
||||||
#endif
|
#endif
|
||||||
br->buf_ += BITS >> 3;
|
br->buf_ += BITS >> 3;
|
||||||
#if !defined(WORDS_BIGENDIAN)
|
#if !defined(WORDS_BIGENDIAN)
|
||||||
|
@ -54,7 +54,6 @@ WEBP_EXTERN(void) WebPSafeFree(void* const ptr);
|
|||||||
#define WEBP_ALIGN_CST 31
|
#define WEBP_ALIGN_CST 31
|
||||||
#define WEBP_ALIGN(PTR) (((uintptr_t)(PTR) + WEBP_ALIGN_CST) & ~WEBP_ALIGN_CST)
|
#define WEBP_ALIGN(PTR) (((uintptr_t)(PTR) + WEBP_ALIGN_CST) & ~WEBP_ALIGN_CST)
|
||||||
|
|
||||||
#if defined(WEBP_FORCE_ALIGNED)
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
// memcpy() is the safe way of moving potentially unaligned 32b memory.
|
// memcpy() is the safe way of moving potentially unaligned 32b memory.
|
||||||
static WEBP_INLINE uint32_t WebPMemToUint32(const uint8_t* const ptr) {
|
static WEBP_INLINE uint32_t WebPMemToUint32(const uint8_t* const ptr) {
|
||||||
@ -65,16 +64,6 @@ static WEBP_INLINE uint32_t WebPMemToUint32(const uint8_t* const ptr) {
|
|||||||
static WEBP_INLINE void WebPUint32ToMem(uint8_t* const ptr, uint32_t val) {
|
static WEBP_INLINE void WebPUint32ToMem(uint8_t* const ptr, uint32_t val) {
|
||||||
memcpy(ptr, &val, sizeof(val));
|
memcpy(ptr, &val, sizeof(val));
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE
|
|
||||||
uint32_t WebPMemToUint32(const uint8_t* const ptr) {
|
|
||||||
return *(const uint32_t*)ptr;
|
|
||||||
}
|
|
||||||
static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE
|
|
||||||
void WebPUint32ToMem(uint8_t* const ptr, uint32_t val) {
|
|
||||||
*(uint32_t*)ptr = val;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Reading/writing data.
|
// Reading/writing data.
|
||||||
|
Loading…
Reference in New Issue
Block a user