Re-enable av1_filter_intra_predictor_neon for Armv7
Use load_unaligned_u8_4x1 instead of load_u8_4x1 for loading elements
from the input buffer, since the latter causes SIGBUS on Armv7 systems
with load alignment checks enabled.
This reverts commit 110978ffa5ef0520406f7f922dbea300488aa468.
Bug: aomedia:349436249
Change-Id: I9697a3fb222f96fa143e2e19b933a0ee12603088
diff --git a/av1/common/arm/reconintra_neon.c b/av1/common/arm/reconintra_neon.c
index 81eb224..dc0cb17 100644
--- a/av1/common/arm/reconintra_neon.c
+++ b/av1/common/arm/reconintra_neon.c
@@ -21,9 +21,6 @@
#define MAX_UPSAMPLE_SZ 16
-// TODO(aomedia:349436249): enable for armv7 after SIGBUS is fixed.
-#if AOM_ARCH_AARCH64
-
// These kernels are a transposed version of those defined in reconintra.c,
// with the absolute value of the negatives taken in the top row.
DECLARE_ALIGNED(16, const uint8_t,
@@ -113,7 +110,7 @@
uint8x8_t s6 = vld1_dup_u8(&buffer[r + 1][c - 1]);
do {
- uint8x8_t s1234 = load_u8_4x1(&buffer[r - 1][c - 1] + 1);
+ uint8x8_t s1234 = load_unaligned_u8_4x1(&buffer[r - 1][c - 1] + 1);
uint8x8_t s1 = vdup_lane_u8(s1234, 0);
uint8x8_t s2 = vdup_lane_u8(s1234, 1);
uint8x8_t s3 = vdup_lane_u8(s1234, 2);
@@ -212,7 +209,6 @@
} while (r < height + 1);
}
}
-#endif // AOM_ARCH_AARCH64
void av1_filter_intra_edge_neon(uint8_t *p, int sz, int strength) {
if (!strength) return;
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl
index ec9435b..1d14bd1 100644
--- a/av1/common/av1_rtcd_defs.pl
+++ b/av1/common/av1_rtcd_defs.pl
@@ -126,12 +126,7 @@
# FILTER_INTRA predictor functions
add_proto qw/void av1_filter_intra_predictor/, "uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size, const uint8_t *above, const uint8_t *left, int mode";
-# TODO(aomedia:349436249): enable NEON for armv7 after SIGBUS is fixed.
-if (aom_config("AOM_ARCH_ARM") eq "yes" && aom_config("AOM_ARCH_AARCH64") eq "") {
- specialize qw/av1_filter_intra_predictor sse4_1/;
-} else {
- specialize qw/av1_filter_intra_predictor sse4_1 neon/;
-}
+specialize qw/av1_filter_intra_predictor sse4_1 neon/;
# High bitdepth functions
diff --git a/test/filterintra_test.cc b/test/filterintra_test.cc
index a0bba4c..314be03 100644
--- a/test/filterintra_test.cc
+++ b/test/filterintra_test.cc
@@ -171,8 +171,6 @@
#endif // HAVE_SSE4_1
#if HAVE_NEON
-// TODO(aomedia:349436249): enable for armv7 after SIGBUS is fixed.
-#if AOM_ARCH_AARCH64
const PredFuncMode kPredFuncMdArrayNEON[] = {
make_tuple(&av1_filter_intra_predictor_c, &av1_filter_intra_predictor_neon,
FILTER_DC_PRED),
@@ -194,9 +192,6 @@
NEON, AV1FilterIntraPredTest,
::testing::Combine(::testing::ValuesIn(kPredFuncMdArrayNEON),
::testing::ValuesIn(kTxSizeNEON)));
-#else // !AOM_ARCH_AARCH64
-GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AV1FilterIntraPredTest);
-#endif // AOM_ARCH_AARCH64
#endif // HAVE_NEON
} // namespace