Clarify GCC version check
The version check was incorrectly matching some versions of clang which reported as gcc 4.2 Change-Id: I686d3576e71883fe1463206b56ab5e2aa9bb68a8
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <arm_neon.h>
|
#include <arm_neon.h>
|
||||||
#include "./vpx_config.h"
|
#include "./vpx_config.h"
|
||||||
|
#include "vpx_ports/arm.h"
|
||||||
|
|
||||||
static INLINE void vp8_loop_filter_neon(
|
static INLINE void vp8_loop_filter_neon(
|
||||||
uint8x16_t qblimit, // flimit
|
uint8x16_t qblimit, // flimit
|
||||||
@@ -253,23 +254,7 @@ void vp8_loop_filter_horizontal_edge_uv_neon(
|
|||||||
|
|
||||||
static INLINE void write_4x8(unsigned char *dst, int pitch,
|
static INLINE void write_4x8(unsigned char *dst, int pitch,
|
||||||
const uint8x8x4_t result) {
|
const uint8x8x4_t result) {
|
||||||
#if (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))
|
#ifdef VPX_INCOMPATIBLE_GCC
|
||||||
vst4_lane_u8(dst, result, 0);
|
|
||||||
dst += pitch;
|
|
||||||
vst4_lane_u8(dst, result, 1);
|
|
||||||
dst += pitch;
|
|
||||||
vst4_lane_u8(dst, result, 2);
|
|
||||||
dst += pitch;
|
|
||||||
vst4_lane_u8(dst, result, 3);
|
|
||||||
dst += pitch;
|
|
||||||
vst4_lane_u8(dst, result, 4);
|
|
||||||
dst += pitch;
|
|
||||||
vst4_lane_u8(dst, result, 5);
|
|
||||||
dst += pitch;
|
|
||||||
vst4_lane_u8(dst, result, 6);
|
|
||||||
dst += pitch;
|
|
||||||
vst4_lane_u8(dst, result, 7);
|
|
||||||
#else
|
|
||||||
/*
|
/*
|
||||||
* uint8x8x4_t result
|
* uint8x8x4_t result
|
||||||
00 01 02 03 | 04 05 06 07
|
00 01 02 03 | 04 05 06 07
|
||||||
@@ -316,7 +301,23 @@ static INLINE void write_4x8(unsigned char *dst, int pitch,
|
|||||||
vst1_lane_u32((uint32_t *)dst, x_2_6, 1);
|
vst1_lane_u32((uint32_t *)dst, x_2_6, 1);
|
||||||
dst += pitch;
|
dst += pitch;
|
||||||
vst1_lane_u32((uint32_t *)dst, x_3_7, 1);
|
vst1_lane_u32((uint32_t *)dst, x_3_7, 1);
|
||||||
#endif
|
#else
|
||||||
|
vst4_lane_u8(dst, result, 0);
|
||||||
|
dst += pitch;
|
||||||
|
vst4_lane_u8(dst, result, 1);
|
||||||
|
dst += pitch;
|
||||||
|
vst4_lane_u8(dst, result, 2);
|
||||||
|
dst += pitch;
|
||||||
|
vst4_lane_u8(dst, result, 3);
|
||||||
|
dst += pitch;
|
||||||
|
vst4_lane_u8(dst, result, 4);
|
||||||
|
dst += pitch;
|
||||||
|
vst4_lane_u8(dst, result, 5);
|
||||||
|
dst += pitch;
|
||||||
|
vst4_lane_u8(dst, result, 6);
|
||||||
|
dst += pitch;
|
||||||
|
vst4_lane_u8(dst, result, 7);
|
||||||
|
#endif // VPX_INCOMPATIBLE_GCC
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_vertical_edge_y_neon(
|
void vp8_loop_filter_vertical_edge_y_neon(
|
||||||
|
@@ -10,45 +10,9 @@
|
|||||||
|
|
||||||
#include <arm_neon.h>
|
#include <arm_neon.h>
|
||||||
#include "./vpx_config.h"
|
#include "./vpx_config.h"
|
||||||
|
#include "vpx_ports/arm.h"
|
||||||
|
|
||||||
#if (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))
|
#ifdef VPX_INCOMPATIBLE_GCC
|
||||||
static INLINE void write_2x8(unsigned char *dst, int pitch,
|
|
||||||
const uint8x8x2_t result,
|
|
||||||
const uint8x8x2_t result2) {
|
|
||||||
vst2_lane_u8(dst, result, 0);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result, 1);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result, 2);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result, 3);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result, 4);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result, 5);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result, 6);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result, 7);
|
|
||||||
dst += pitch;
|
|
||||||
|
|
||||||
vst2_lane_u8(dst, result2, 0);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result2, 1);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result2, 2);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result2, 3);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result2, 4);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result2, 5);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result2, 6);
|
|
||||||
dst += pitch;
|
|
||||||
vst2_lane_u8(dst, result2, 7);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static INLINE void write_2x4(unsigned char *dst, int pitch,
|
static INLINE void write_2x4(unsigned char *dst, int pitch,
|
||||||
const uint8x8x2_t result) {
|
const uint8x8x2_t result) {
|
||||||
/*
|
/*
|
||||||
@@ -88,30 +52,47 @@ static INLINE void write_2x8(unsigned char *dst, int pitch,
|
|||||||
dst += pitch * 8;
|
dst += pitch * 8;
|
||||||
write_2x4(dst, pitch, result2);
|
write_2x4(dst, pitch, result2);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))
|
|
||||||
static INLINE
|
|
||||||
uint8x8x4_t read_4x8(unsigned char *src, int pitch, uint8x8x4_t x) {
|
|
||||||
x = vld4_lane_u8(src, x, 0);
|
|
||||||
src += pitch;
|
|
||||||
x = vld4_lane_u8(src, x, 1);
|
|
||||||
src += pitch;
|
|
||||||
x = vld4_lane_u8(src, x, 2);
|
|
||||||
src += pitch;
|
|
||||||
x = vld4_lane_u8(src, x, 3);
|
|
||||||
src += pitch;
|
|
||||||
x = vld4_lane_u8(src, x, 4);
|
|
||||||
src += pitch;
|
|
||||||
x = vld4_lane_u8(src, x, 5);
|
|
||||||
src += pitch;
|
|
||||||
x = vld4_lane_u8(src, x, 6);
|
|
||||||
src += pitch;
|
|
||||||
x = vld4_lane_u8(src, x, 7);
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
|
static INLINE void write_2x8(unsigned char *dst, int pitch,
|
||||||
|
const uint8x8x2_t result,
|
||||||
|
const uint8x8x2_t result2) {
|
||||||
|
vst2_lane_u8(dst, result, 0);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result, 1);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result, 2);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result, 3);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result, 4);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result, 5);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result, 6);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result, 7);
|
||||||
|
dst += pitch;
|
||||||
|
|
||||||
|
vst2_lane_u8(dst, result2, 0);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result2, 1);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result2, 2);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result2, 3);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result2, 4);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result2, 5);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result2, 6);
|
||||||
|
dst += pitch;
|
||||||
|
vst2_lane_u8(dst, result2, 7);
|
||||||
|
}
|
||||||
|
#endif // VPX_INCOMPATIBLE_GCC
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VPX_INCOMPATIBLE_GCC
|
||||||
static INLINE
|
static INLINE
|
||||||
uint8x8x4_t read_4x8(unsigned char *src, int pitch, uint8x8x4_t x) {
|
uint8x8x4_t read_4x8(unsigned char *src, int pitch, uint8x8x4_t x) {
|
||||||
const uint8x8_t a = vld1_u8(src);
|
const uint8x8_t a = vld1_u8(src);
|
||||||
@@ -169,7 +150,27 @@ uint8x8x4_t read_4x8(unsigned char *src, int pitch, uint8x8x4_t x) {
|
|||||||
|
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
static INLINE
|
||||||
|
uint8x8x4_t read_4x8(unsigned char *src, int pitch, uint8x8x4_t x) {
|
||||||
|
x = vld4_lane_u8(src, x, 0);
|
||||||
|
src += pitch;
|
||||||
|
x = vld4_lane_u8(src, x, 1);
|
||||||
|
src += pitch;
|
||||||
|
x = vld4_lane_u8(src, x, 2);
|
||||||
|
src += pitch;
|
||||||
|
x = vld4_lane_u8(src, x, 3);
|
||||||
|
src += pitch;
|
||||||
|
x = vld4_lane_u8(src, x, 4);
|
||||||
|
src += pitch;
|
||||||
|
x = vld4_lane_u8(src, x, 5);
|
||||||
|
src += pitch;
|
||||||
|
x = vld4_lane_u8(src, x, 6);
|
||||||
|
src += pitch;
|
||||||
|
x = vld4_lane_u8(src, x, 7);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#endif // VPX_INCOMPATIBLE_GCC
|
||||||
|
|
||||||
static INLINE void vp8_loop_filter_simple_vertical_edge_neon(
|
static INLINE void vp8_loop_filter_simple_vertical_edge_neon(
|
||||||
unsigned char *s,
|
unsigned char *s,
|
||||||
|
@@ -27,6 +27,12 @@ extern "C" {
|
|||||||
|
|
||||||
int arm_cpu_caps(void);
|
int arm_cpu_caps(void);
|
||||||
|
|
||||||
|
// Earlier gcc compilers have issues with some neon intrinsics
|
||||||
|
#if !defined(__clang__) && defined(__GNUC__) && \
|
||||||
|
__GNUC__ == 4 && __GNUC_MINOR__ <= 6
|
||||||
|
#define VPX_INCOMPATIBLE_GCC
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user