diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 4094826..570a76c 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,18 @@
+2022-01-25  Pablo Saavedra  <psaavedra@igalia.com>
+
+        [WPE][GTK] Build error in ARMv7 Neon targets after r286152
+        https://bugs.webkit.org/show_bug.cgi?id=235410
+
+        Reviewed by Simon Fraser.
+
+        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
+        (WebCore::FEBlend::platformApplySoftware): Deleted.
+        * platform/graphics/filters/software/FEBlendSoftwareApplier.cpp:
+        (WebCore::FEBlendSoftwareApplier::apply const):
+        * platform/graphics/filters/software/FECompositeSoftwareApplier.cpp:
+        (WebCore::FECompositeSoftwareApplier::applyArithmetic const):
+        * platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp:
+
 2022-01-25  Antti Koivisto  <antti@apple.com>
 
         [CSS Container Queries] Parsing support for container-name property
diff --git a/Source/WebCore/platform/graphics/cpu/arm/filters/FEBlendNEON.h b/Source/WebCore/platform/graphics/cpu/arm/filters/FEBlendNEON.h
index b52b8ac..ae7d98d 100644
--- a/Source/WebCore/platform/graphics/cpu/arm/filters/FEBlendNEON.h
+++ b/Source/WebCore/platform/graphics/cpu/arm/filters/FEBlendNEON.h
@@ -106,42 +106,6 @@
     }
 };
 
-bool FEBlend::platformApplySoftware(const Filter&)
-{
-    FilterEffect* in = inputEffect(0);
-    FilterEffect* in2 = inputEffect(1);
-
-    auto& destinationPixelBuffer = pixelBufferResult(AlphaPremultiplication::Premultiplied);
-    if (!destinationPixelBuffer)
-        return false;
-
-    auto& destinationPixelArray = destinationPixelBuffer->data();
-
-    IntRect effectADrawingRect = requestedRegionOfInputPixelBuffer(in->absolutePaintRect());
-    auto sourcePixelArrayA = in->getPixelBufferResult(AlphaPremultiplication::Premultiplied, effectADrawingRect);
-
-    IntRect effectBDrawingRect = requestedRegionOfInputPixelBuffer(in2->absolutePaintRect());
-    auto sourcePixelArrayB = in2->getPixelBufferResult(AlphaPremultiplication::Premultiplied, effectBDrawingRect);
-
-    unsigned sourcePixelArrayLength = sourcePixelArrayA->length();
-    ASSERT(pixelArrayLength == sourcePixelArrayB->length());
-
-    if (sourcePixelArrayLength >= 8) {
-        platformApplyNEON(sourcePixelArrayA->data(), sourcePixelArrayB->data(), destinationPixelArray.data(), sourcePixelArrayLength);
-        return true;
-    }
-    // If there is just one pixel we expand it to two.
-    ASSERT(sourcePixelArrayLength > 0);
-    uint32_t sourceA[2] = {0, 0};
-    uint32_t sourceBAndDest[2] = {0, 0};
-
-    sourceA[0] = reinterpret_cast<uint32_t*>(sourcePixelArrayA->data())[0];
-    sourceBAndDest[0] = reinterpret_cast<uint32_t*>(sourcePixelArrayB->data())[0];
-    platformApplyNEON(reinterpret_cast<uint8_t*>(sourceA), reinterpret_cast<uint8_t*>(sourceBAndDest), reinterpret_cast<uint8_t*>(sourceBAndDest), 8);
-    reinterpret_cast<uint32_t*>(destinationPixelArray.data())[0] = sourceBAndDest[0];
-    return true;
-}
-
 void FEBlend::platformApplyNEON(unsigned char* srcPixelArrayA, unsigned char* srcPixelArrayB, unsigned char* dstPixelArray,
                                 unsigned colorArrayLength)
 {
diff --git a/Source/WebCore/platform/graphics/filters/software/FEBlendSoftwareApplier.cpp b/Source/WebCore/platform/graphics/filters/software/FEBlendSoftwareApplier.cpp
index 53d5afc..0702cd4 100644
--- a/Source/WebCore/platform/graphics/filters/software/FEBlendSoftwareApplier.cpp
+++ b/Source/WebCore/platform/graphics/filters/software/FEBlendSoftwareApplier.cpp
@@ -33,7 +33,6 @@
 
 namespace WebCore {
 
-#if !HAVE(ARM_NEON_INTRINSICS)
 bool FEBlendSoftwareApplier::apply(const Filter&, const FilterImageVector& inputs, FilterImage& result) const
 {
     auto& input = inputs[0].get();
@@ -56,6 +55,5 @@
     filterContext.drawImageBuffer(*inputImage, inputImageRect, { { }, inputImage->logicalSize() }, { CompositeOperator::SourceOver, m_effect.blendMode() });
     return true;
 }
-#endif
 
 } // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/filters/software/FECompositeSoftwareApplier.cpp b/Source/WebCore/platform/graphics/filters/software/FECompositeSoftwareApplier.cpp
index 292cef7..28a16ce 100644
--- a/Source/WebCore/platform/graphics/filters/software/FECompositeSoftwareApplier.cpp
+++ b/Source/WebCore/platform/graphics/filters/software/FECompositeSoftwareApplier.cpp
@@ -145,7 +145,9 @@
 
     int length = sourcePixelArray.length();
     ASSERT(length == static_cast<int>(destinationPixelArray.length()));
+#if !HAVE(ARM_NEON_INTRINSICS)
     applyPlatformArithmetic(sourcePixelArray.data(), destinationPixelArray.data(), length, m_effect.k1(), m_effect.k2(), m_effect.k3(), m_effect.k4());
+#endif
     return true;
 }
 
diff --git a/Source/WebCore/platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp b/Source/WebCore/platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp
index f6a9399..dee0480 100644
--- a/Source/WebCore/platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp
+++ b/Source/WebCore/platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp
@@ -27,6 +27,9 @@
 #include "FEGaussianBlurSoftwareApplier.h"
 
 #include "FEGaussianBlur.h"
+#if HAVE(ARM_NEON_INTRINSICS)
+#include "FEGaussianBlurNEON.h"
+#endif
 #include "GraphicsContext.h"
 #include "ImageBuffer.h"
 #include "PixelBuffer.h"
