No subject


Wed Aug 1 07:28:53 PDT 2012


* CMakeLists.txt:
* GNUmakefile.am:
* GNUmakefile.list.am:
* Target.pri:
* WebCore.gyp/WebCore.gyp:
* WebCore.gypi:
* WebCore.pri:
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/cpu/arm/filters/FEBlendNEON.h: Renamed from Source/We=
bCore/platform/graphics/filters/arm/FEBlendNEON.h.
(WebCore):
(FEBlendUtilitiesNEON):
(WebCore::FEBlendUtilitiesNEON::div255):
(WebCore::FEBlendUtilitiesNEON::normal):
(WebCore::FEBlendUtilitiesNEON::multiply):
(WebCore::FEBlendUtilitiesNEON::screen):
(WebCore::FEBlendUtilitiesNEON::darken):
(WebCore::FEBlendUtilitiesNEON::lighten):
(WebCore::FEBlend::platformApplyNEON):
* platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h: Renamed =
from Source/WebCore/platform/graphics/filters/arm/FECompositeArithmeticNE=
ON.h.
(WebCore):
(WebCore::FEComposite::computeArithmeticPixelsNeon):
(WebCore::FEComposite::platformArithmeticNeon):
* platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h: Renamed from So=
urce/WebCore/platform/graphics/filters/arm/FEGaussianBlurNEON.h.
(WebCore):
(WebCore::boxBlurNEON):
* platform/graphics/cpu/arm/filters/FELightingNEON.cpp: Renamed from Sour=
ce/WebCore/platform/graphics/filters/arm/FELightingNEON.cpp.
(WebCore):
(WebCore::feLightingConstantsForNeon):
(WebCore::FELighting::platformApplyNeonWorker):
(WebCore::FELighting::getPowerCoefficients):
* platform/graphics/cpu/arm/filters/FELightingNEON.h: Renamed from Source=
/WebCore/platform/graphics/filters/arm/FELightingNEON.h.
(WebCore):
(FELightingFloatArgumentsForNeon):
(FELightingPaintingDataForNeon):
(WebCore::FELighting::platformApplyNeon):
* platform/graphics/cpu/arm/filters/NEONHelpers.h: Renamed from Source/We=
bCore/platform/graphics/filters/arm/NEONHelpers.h.
(WebCore):
(WebCore::loadRGBA8AsFloat):
(WebCore::storeFloatAsRGBA8):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href=3D"#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMa=
keLists.txt</a></li>
<li><a href=3D"#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeL=
og</a></li>
<li><a href=3D"#trunkSourceWebCoreGNUmakefileam">trunk/Source/WebCore/GNU=
makefile.am</a></li>
<li><a href=3D"#trunkSourceWebCoreGNUmakefilelistam">trunk/Source/WebCore=
/GNUmakefile.list.am</a></li>
<li><a href=3D"#trunkSourceWebCoreTargetpri">trunk/Source/WebCore/Target.=
pri</a></li>
<li><a href=3D"#trunkSourceWebCoreWebCoregypWebCoregyp">trunk/Source/WebC=
ore/WebCore.gyp/WebCore.gyp</a></li>
<li><a href=3D"#trunkSourceWebCoreWebCoregypi">trunk/Source/WebCore/WebCo=
re.gypi</a></li>
<li><a href=3D"#trunkSourceWebCoreWebCorepri">trunk/Source/WebCore/WebCor=
e.pri</a></li>
<li><a href=3D"#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/S=
ource/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/Source/WebCore/platform/graphics/cpu/arm/filters/</li>
<li><a href=3D"#trunkSourceWebCoreplatformgraphicscpuarmfiltersFEBlendNEO=
Nh">trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FEBlendNEON.h<=
/a></li>
<li><a href=3D"#trunkSourceWebCoreplatformgraphicscpuarmfiltersFEComposit=
eArithmeticNEONh">trunk/Source/WebCore/platform/graphics/cpu/arm/filters/=
FECompositeArithmeticNEON.h</a></li>
<li><a href=3D"#trunkSourceWebCoreplatformgraphicscpuarmfiltersFEGaussian=
BlurNEONh">trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FEGauss=
ianBlurNEON.h</a></li>
<li><a href=3D"#trunkSourceWebCoreplatformgraphicscpuarmfiltersFELighting=
NEONcpp">trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FELightin=
gNEON.cpp</a></li>
<li><a href=3D"#trunkSourceWebCoreplatformgraphicscpuarmfiltersFELighting=
NEONh">trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FELightingN=
EON.h</a></li>
<li><a href=3D"#trunkSourceWebCoreplatformgraphicscpuarmfiltersNEONHelper=
sh">trunk/Source/WebCore/platform/graphics/cpu/arm/filters/NEONHelpers.h<=
/a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li>trunk/Source/WebCore/platform/graphics/filters/arm/</li>
</ul>

</div>
<div id=3D"patch">
<h3>Diff</h3>
<a id=3D"trunkSourceWebCoreCMakeListstxt"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt =
(134766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/CMakeLists.txt	2012-11-15 1=
3:04:54 UTC (rev 134766)
+++ trunk/Source/WebCore/CMakeLists.txt	2012-11-15 13:42:28 UTC (rev 1347=
67)
</span><span class=3D"lines">@@ -49,8 +49,8 @@
</span><span class=3D"cx">     &quot;${WEBCORE_DIR}/platform/audio&quot;
</span><span class=3D"cx">     &quot;${WEBCORE_DIR}/platform/graphics&quo=
t;
</span><span class=3D"cx">     &quot;${WEBCORE_DIR}/platform/graphics/cpu=
/arm&quot;
</span><ins>+    &quot;${WEBCORE_DIR}/platform/graphics/cpu/arm/filters&q=
uot;
</ins><span class=3D"cx">     &quot;${WEBCORE_DIR}/platform/graphics/filt=
ers&quot;
</span><del>-    &quot;${WEBCORE_DIR}/platform/graphics/filters/arm&quot;
</del><span class=3D"cx">     &quot;${WEBCORE_DIR}/platform/graphics/harf=
buzz&quot;
</span><span class=3D"cx">     &quot;${WEBCORE_DIR}/platform/graphics/har=
fbuzz/ng&quot;
</span><span class=3D"cx">     &quot;${WEBCORE_DIR}/platform/graphics/ope=
ntype&quot;
</span><span class=3D"lines">@@ -1904,6 +1904,8 @@
</span><span class=3D"cx">     platform/graphics/TiledBackingStore.cpp
</span><span class=3D"cx">     platform/graphics/WidthIterator.cpp
</span><span class=3D"cx">=20
</span><ins>+    platform/graphics/cpu/arm/filters/FELightingNEON.cpp
+
</ins><span class=3D"cx">     platform/graphics/filters/CustomFilterCompi=
ledProgram.cpp
</span><span class=3D"cx">     platform/graphics/filters/CustomFilterGlob=
alContext.cpp
</span><span class=3D"cx">     platform/graphics/filters/CustomFilterMesh=
.cpp
</span><span class=3D"lines">@@ -1941,8 +1943,6 @@
</span><span class=3D"cx">     platform/graphics/filters/SourceGraphic.cp=
p
</span><span class=3D"cx">     platform/graphics/filters/SpotLightSource.=
cpp
</span><span class=3D"cx">=20
</span><del>-    platform/graphics/filters/arm/FELightingNEON.cpp
-
</del><span class=3D"cx">     platform/graphics/texmap/TextureMapper.cpp
</span><span class=3D"cx">     platform/graphics/texmap/TextureMapperBack=
ingStore.cpp
</span><span class=3D"cx">     platform/graphics/texmap/TextureMapperImag=
eBuffer.cpp
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreChangeLog"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (1347=
66 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/ChangeLog	2012-11-15 13:04:=
54 UTC (rev 134766)
+++ trunk/Source/WebCore/ChangeLog	2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -1,3 +1,54 @@
</span><ins>+2012-11-15  Gabor Rapcsanyi  &lt;rgabor at webkit.org&gt;
+
+        Relocate the ARM NEON SVG filter optimizations
+        https://bugs.webkit.org/show_bug.cgi?id=3D102214
+
+        Reviewed by Zoltan Herczeg.
+
+        Relocate the ARM filter optimizations into platform/graphics/cpu=
/arm
+        to keep them together with the others.
+        From now all graphics optimization for ARM NEON should go here.
+
+        * CMakeLists.txt:
+        * GNUmakefile.am:
+        * GNUmakefile.list.am:
+        * Target.pri:
+        * WebCore.gyp/WebCore.gyp:
+        * WebCore.gypi:
+        * WebCore.pri:
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/graphics/cpu/arm/filters/FEBlendNEON.h: Renamed from =
Source/WebCore/platform/graphics/filters/arm/FEBlendNEON.h.
+        (WebCore):
+        (FEBlendUtilitiesNEON):
+        (WebCore::FEBlendUtilitiesNEON::div255):
+        (WebCore::FEBlendUtilitiesNEON::normal):
+        (WebCore::FEBlendUtilitiesNEON::multiply):
+        (WebCore::FEBlendUtilitiesNEON::screen):
+        (WebCore::FEBlendUtilitiesNEON::darken):
+        (WebCore::FEBlendUtilitiesNEON::lighten):
+        (WebCore::FEBlend::platformApplyNEON):
+        * platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h:=
 Renamed from Source/WebCore/platform/graphics/filters/arm/FECompositeAri=
thmeticNEON.h.
+        (WebCore):
+        (WebCore::FEComposite::computeArithmeticPixelsNeon):
+        (WebCore::FEComposite::platformArithmeticNeon):
+        * platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h: Rename=
d from Source/WebCore/platform/graphics/filters/arm/FEGaussianBlurNEON.h.
+        (WebCore):
+        (WebCore::boxBlurNEON):
+        * platform/graphics/cpu/arm/filters/FELightingNEON.cpp: Renamed =
from Source/WebCore/platform/graphics/filters/arm/FELightingNEON.cpp.
+        (WebCore):
+        (WebCore::feLightingConstantsForNeon):
+        (WebCore::FELighting::platformApplyNeonWorker):
+        (WebCore::FELighting::getPowerCoefficients):
+        * platform/graphics/cpu/arm/filters/FELightingNEON.h: Renamed fr=
om Source/WebCore/platform/graphics/filters/arm/FELightingNEON.h.
+        (WebCore):
+        (FELightingFloatArgumentsForNeon):
+        (FELightingPaintingDataForNeon):
+        (WebCore::FELighting::platformApplyNeon):
+        * platform/graphics/cpu/arm/filters/NEONHelpers.h: Renamed from =
Source/WebCore/platform/graphics/filters/arm/NEONHelpers.h.
+        (WebCore):
+        (WebCore::loadRGBA8AsFloat):
+        (WebCore::storeFloatAsRGBA8):
+
</ins><span class=3D"cx"> 2012-11-15  Mike West  &lt;mkwst at chromium.org&g=
t;
</span><span class=3D"cx">=20
</span><span class=3D"cx">         We should trigger a console warning wh=
en we encounter invalid sandbox flags.
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreGNUmakefileam"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/GNUmakefile.am =
(134766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/GNUmakefile.am	2012-11-15 1=
3:04:54 UTC (rev 134766)
+++ trunk/Source/WebCore/GNUmakefile.am	2012-11-15 13:42:28 UTC (rev 1347=
67)
</span><span class=3D"lines">@@ -55,8 +55,8 @@
</span><span class=3D"cx"> 	-I$(srcdir)/Source/WebCore/platform/audio \
</span><span class=3D"cx"> 	-I$(srcdir)/Source/WebCore/platform/graphics =
\
</span><span class=3D"cx"> 	-I$(srcdir)/Source/WebCore/platform/graphics/=
cpu/arm \
</span><ins>+	-I$(srcdir)/Source/WebCore/platform/graphics/cpu/arm/filter=
s/ \
</ins><span class=3D"cx"> 	-I$(srcdir)/Source/WebCore/platform/graphics/f=
ilters \
</span><del>-	-I$(srcdir)/Source/WebCore/platform/graphics/filters/arm \
</del><span class=3D"cx"> 	-I$(srcdir)/Source/WebCore/platform/graphics/g=
pu \
</span><span class=3D"cx"> 	-I$(srcdir)/Source/WebCore/platform/graphics/=
opengl \
</span><span class=3D"cx"> 	-I$(srcdir)/Source/WebCore/platform/graphics/=
opentype \
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreGNUmakefilelistam"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/GNUmakefile.lis=
t.am (134766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/GNUmakefile.list.am	2012-11=
-15 13:04:54 UTC (rev 134766)
+++ trunk/Source/WebCore/GNUmakefile.list.am	2012-11-15 13:42:28 UTC (rev=
 134767)
</span><span class=3D"lines">@@ -4271,6 +4271,12 @@
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/ANGLEWebKitB=
ridge.cpp \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/ANGLEWebKitB=
ridge.h \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/cpu/arm/Grap=
hicsContext3DNEON.h \
</span><ins>+	Source/WebCore/platform/graphics/cpu/arm/filters/NEONHelper=
s.h \
+	Source/WebCore/platform/graphics/cpu/arm/filters/FEBlendNEON.h \
+	Source/WebCore/platform/graphics/cpu/arm/filters/FECompositeArithmeticN=
EON.h \
+	Source/WebCore/platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h \
+	Source/WebCore/platform/graphics/cpu/arm/filters/FELightingNEON.cpp \
+	Source/WebCore/platform/graphics/cpu/arm/filters/FELightingNEON.h \
</ins><span class=3D"cx"> 	Source/WebCore/platform/graphics/BitmapImage.c=
pp \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/BitmapImage.=
h \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/Color.cpp \
</span><span class=3D"lines">@@ -4388,12 +4394,6 @@
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/filters/Sour=
ceGraphic.h \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/filters/Spot=
LightSource.cpp \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/filters/Spot=
LightSource.h \
</span><del>-	Source/WebCore/platform/graphics/filters/arm/NEONHelpers.h =
\
-	Source/WebCore/platform/graphics/filters/arm/FEBlendNEON.h \
-	Source/WebCore/platform/graphics/filters/arm/FECompositeArithmeticNEON.=
h \
-	Source/WebCore/platform/graphics/filters/arm/FEGaussianBlurNEON.h \
-	Source/WebCore/platform/graphics/filters/arm/FELightingNEON.cpp \
-	Source/WebCore/platform/graphics/filters/arm/FELightingNEON.h \
</del><span class=3D"cx"> 	Source/WebCore/platform/graphics/FloatPoint3D.=
cpp \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/FloatPoint3D=
.h \
</span><span class=3D"cx"> 	Source/WebCore/platform/graphics/FloatPoint.c=
pp \
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreTargetpri"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/Target.pri (134=
766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/Target.pri	2012-11-15 13:04=
:54 UTC (rev 134766)
+++ trunk/Source/WebCore/Target.pri	2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -2074,6 +2074,11 @@
</span><span class=3D"cx">     platform/mock/ScrollbarThemeMock.h \
</span><span class=3D"cx">     platform/graphics/BitmapImage.h \
</span><span class=3D"cx">     platform/graphics/Color.h \
</span><ins>+    platform/graphics/cpu/arm/filters/NEONHelpers.h \
+    platform/graphics/cpu/arm/filters/FEBlendNEON.h \
+    platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h \
+    platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h \
+    platform/graphics/cpu/arm/filters/FELightingNEON.h \
</ins><span class=3D"cx">     platform/graphics/CrossfadeGeneratedImage.h=
 \
</span><span class=3D"cx">     platform/graphics/filters/CustomFilterArra=
yParameter.h \
</span><span class=3D"cx">     platform/graphics/filters/CustomFilterCons=
tants.h \
</span><span class=3D"lines">@@ -2115,11 +2120,6 @@
</span><span class=3D"cx">     platform/graphics/filters/LightSource.h \
</span><span class=3D"cx">     platform/graphics/filters/SourceAlpha.h \
</span><span class=3D"cx">     platform/graphics/filters/SourceGraphic.h =
\
</span><del>-    platform/graphics/filters/arm/NEONHelpers.h \
-    platform/graphics/filters/arm/FEBlendNEON.h \
-    platform/graphics/filters/arm/FECompositeArithmeticNEON.h \
-    platform/graphics/filters/arm/FEGaussianBlurNEON.h \
-    platform/graphics/filters/arm/FELightingNEON.h \
</del><span class=3D"cx">     platform/graphics/FloatPoint3D.h \
</span><span class=3D"cx">     platform/graphics/FloatPoint.h \
</span><span class=3D"cx">     platform/graphics/FloatQuad.h \
</span><span class=3D"lines">@@ -3501,6 +3501,7 @@
</span><span class=3D"cx">=20
</span><span class=3D"cx"> enable?(FILTERS) {
</span><span class=3D"cx">     SOURCES +=3D \
</span><ins>+        platform/graphics/cpu/arm/filters/FELightingNEON.cpp=
 \
</ins><span class=3D"cx">         platform/graphics/filters/CustomFilterG=
lobalContext.cpp \
</span><span class=3D"cx">         platform/graphics/filters/CustomFilter=
Operation.cpp \
</span><span class=3D"cx">         platform/graphics/filters/CustomFilter=
ParameterList.cpp \
</span><span class=3D"lines">@@ -3539,7 +3540,6 @@
</span><span class=3D"cx">         platform/graphics/filters/SpotLightSou=
rce.cpp \
</span><span class=3D"cx">         platform/graphics/filters/SourceAlpha.=
cpp \
</span><span class=3D"cx">         platform/graphics/filters/SourceGraphi=
c.cpp \
</span><del>-        platform/graphics/filters/arm/FELightingNEON.cpp \
</del><span class=3D"cx"> }
</span><span class=3D"cx">=20
</span><span class=3D"cx"> enable?(MATHML) {
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreWebCoregypWebCoregyp"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/WebCore.gyp/Web=
Core.gyp (134766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/WebCore.gyp/WebCore.gyp	201=
2-11-15 13:04:54 UTC (rev 134766)
+++ trunk/Source/WebCore/WebCore.gyp/WebCore.gyp	2012-11-15 13:42:28 UTC =
(rev 134767)
</span><span class=3D"lines">@@ -112,8 +112,8 @@
</span><span class=3D"cx">       '../platform/graphics/chromium',
</span><span class=3D"cx">       '../platform/graphics/chromium/cc',
</span><span class=3D"cx">       '../platform/graphics/cpu/arm',
</span><ins>+      '../platform/graphics/cpu/arm/filters',
</ins><span class=3D"cx">       '../platform/graphics/filters',
</span><del>-      '../platform/graphics/filters/arm',
</del><span class=3D"cx">       '../platform/graphics/filters/skia',
</span><span class=3D"cx">       '../platform/graphics/gpu',
</span><span class=3D"cx">       '../platform/graphics/opentype',
</span><span class=3D"lines">@@ -1664,7 +1664,7 @@
</span><span class=3D"cx">         ['exclude', 'platform/Theme\\.cpp$'],
</span><span class=3D"cx">         # *NEON.cpp files need special compile=
 options.
</span><span class=3D"cx">         # They are moved to the webcore_arm_ne=
on target.
</span><del>-        ['exclude', 'platform/graphics/filters/arm/.*NEON\\.=
(cpp|h)'],
</del><ins>+        ['exclude', 'platform/graphics/cpu/arm/filters/.*NEON=
\\.(cpp|h)'],
</ins><span class=3D"cx">         ['exclude', 'platform/image-encoders/JP=
EGImageEncoder\\.(cpp|h)$'],
</span><span class=3D"cx">         ['exclude', 'platform/image-encoders/P=
NGImageEncoder\\.(cpp|h)$'],
</span><span class=3D"cx">         ['exclude', 'platform/network/Resource=
Handle\\.cpp$'],
</span><span class=3D"lines">@@ -1935,7 +1935,7 @@
</span><span class=3D"cx">           ],
</span><span class=3D"cx">           'sources/': [
</span><span class=3D"cx">             ['exclude', '.*'],
</span><del>-            ['include', 'platform/graphics/filters/arm/.*NEO=
N\\.(cpp|h)'],
</del><ins>+            ['include', 'platform/graphics/cpu/arm/filters/.*=
NEON\\.(cpp|h)'],
</ins><span class=3D"cx">           ],
</span><span class=3D"cx">           'cflags': ['-marm'],
</span><span class=3D"cx">           'conditions': [
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreWebCoregypi"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/WebCore.gypi (1=
34766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/WebCore.gypi	2012-11-15 13:=
04:54 UTC (rev 134766)
+++ trunk/Source/WebCore/WebCore.gypi	2012-11-15 13:42:28 UTC (rev 134767=
)
</span><span class=3D"lines">@@ -415,6 +415,12 @@
</span><span class=3D"cx">             'platform/graphics/TextRun.h',
</span><span class=3D"cx">             'platform/graphics/TypesettingFeat=
ures.h',
</span><span class=3D"cx">             'platform/graphics/cpu/arm/Graphic=
sContext3DNEON.h',
</span><ins>+            'platform/graphics/cpu/arm/filters/NEONHelpers.h=
',
+            'platform/graphics/cpu/arm/filters/FEBlendNEON.h',
+            'platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON=
.h',
+            'platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h',
+            'platform/graphics/cpu/arm/filters/FELightingNEON.cpp',
+            'platform/graphics/cpu/arm/filters/FELightingNEON.h',
</ins><span class=3D"cx">             'platform/graphics/cg/ImageBufferDa=
taCG.h',
</span><span class=3D"cx">             'platform/graphics/mac/ColorMac.h'=
,
</span><span class=3D"cx">             'platform/graphics/mac/MediaPlayer=
Proxy.h',
</span><span class=3D"lines">@@ -5025,12 +5031,6 @@
</span><span class=3D"cx">             'platform/graphics/filters/SourceG=
raphic.h',
</span><span class=3D"cx">             'platform/graphics/filters/SpotLig=
htSource.cpp',
</span><span class=3D"cx">             'platform/graphics/filters/SpotLig=
htSource.h',
</span><del>-            'platform/graphics/filters/arm/NEONHelpers.h',
-            'platform/graphics/filters/arm/FEBlendNEON.h',
-            'platform/graphics/filters/arm/FECompositeArithmeticNEON.h',
-            'platform/graphics/filters/arm/FEGaussianBlurNEON.h',
-            'platform/graphics/filters/arm/FELightingNEON.cpp',
-            'platform/graphics/filters/arm/FELightingNEON.h',
</del><span class=3D"cx">             'platform/graphics/filters/skia/FEB=
lendSkia.cpp',
</span><span class=3D"cx">             'platform/graphics/filters/skia/FE=
ColorMatrixSkia.cpp',
</span><span class=3D"cx">             'platform/graphics/filters/skia/FE=
ComponentTransferSkia.cpp',
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreWebCorepri"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/WebCore.pri (13=
4766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/WebCore.pri	2012-11-15 13:0=
4:54 UTC (rev 134766)
+++ trunk/Source/WebCore/WebCore.pri	2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -54,8 +54,8 @@
</span><span class=3D"cx">     $$SOURCE_DIR/platform/audio \
</span><span class=3D"cx">     $$SOURCE_DIR/platform/graphics \
</span><span class=3D"cx">     $$SOURCE_DIR/platform/graphics/cpu/arm \
</span><ins>+    $$SOURCE_DIR/platform/graphics/cpu/arm/filters \
</ins><span class=3D"cx">     $$SOURCE_DIR/platform/graphics/filters \
</span><del>-    $$SOURCE_DIR/platform/graphics/filters/arm \
</del><span class=3D"cx">     $$SOURCE_DIR/platform/graphics/opengl \
</span><span class=3D"cx">     $$SOURCE_DIR/platform/graphics/opentype \
</span><span class=3D"cx">     $$SOURCE_DIR/platform/graphics/qt \
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class=3D"modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodepr=
oj/project.pbxproj (134766 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.p=
bxproj	2012-11-15 13:04:54 UTC (rev 134766)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2012-11-15 13:=
42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -1377,10 +1377,6 @@
</span><span class=3D"cx"> 		49E912AC0EFAC906009D0CAF /* AnimationList.cp=
p in Sources */ =3D {isa =3D PBXBuildFile; fileRef =3D 49E912A70EFAC90600=
9D0CAF /* AnimationList.cpp */; };
</span><span class=3D"cx"> 		49E912AD0EFAC906009D0CAF /* AnimationList.h =
in Headers */ =3D {isa =3D PBXBuildFile; fileRef =3D 49E912A80EFAC906009D=
0CAF /* AnimationList.h */; settings =3D {ATTRIBUTES =3D (Private, ); }; =
};
</span><span class=3D"cx"> 		49E912AE0EFAC906009D0CAF /* TimingFunction.h=
 in Headers */ =3D {isa =3D PBXBuildFile; fileRef =3D 49E912A90EFAC906009=
D0CAF /* TimingFunction.h */; settings =3D {ATTRIBUTES =3D (Private, ); }=
; };
</span><del>-		49ECEB681499790D00CDD3A4 /* FECompositeArithmeticNEON.h in=
 Headers */ =3D {isa =3D PBXBuildFile; fileRef =3D 49ECEB5E1499790D00CDD3=
A4 /* FECompositeArithmeticNEON.h */; };
-		49ECEB6A1499790D00CDD3A4 /* FEGaussianBlurNEON.h in Headers */ =3D {is=
a =3D PBXBuildFile; fileRef =3D 49ECEB601499790D00CDD3A4 /* FEGaussianBlu=
rNEON.h */; };
-		49ECEB6B1499790D00CDD3A4 /* FELightingNEON.cpp in Sources */ =3D {isa =
=3D PBXBuildFile; fileRef =3D 49ECEB611499790D00CDD3A4 /* FELightingNEON.=
cpp */; };
-		49ECEB6C1499790D00CDD3A4 /* FELightingNEON.h in Headers */ =3D {isa =3D=
 PBXBuildFile; fileRef =3D 49ECEB621499790D00CDD3A4 /* FELightingNEON.h *=
/; };
</del><span class=3D"cx"> 		49ECEB6D1499790D00CDD3A4 /* FilterOperation.c=
pp in Sources */ =3D {isa =3D PBXBuildFile; fileRef =3D 49ECEB631499790D0=
0CDD3A4 /* FilterOperation.cpp */; };
</span><span class=3D"cx"> 		49ECEB6E1499790D00CDD3A4 /* FilterOperation.=
h in Headers */ =3D {isa =3D PBXBuildFile; fileRef =3D 49ECEB641499790D00=
CDD3A4 /* FilterOperation.h */; settings =3D {ATTRIBUTES =3D (Private, );=
 }; };
</span><span class=3D"cx"> 		49ECEB6F1499790D00CDD3A4 /* FilterOperations=
.cpp in Sources */ =3D {isa =3D PBXBuildFile; fileRef =3D 49ECEB651499790=
D00CDD3A4 /* FilterOperations.cpp */; };
</span><span class=3D"lines">@@ -8583,10 +8579,6 @@
</span><span class=3D"cx"> 		49E912A70EFAC906009D0CAF /* AnimationList.cp=
p */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType=
 =3D sourcecode.cpp.cpp; name =3D AnimationList.cpp; path =3D animation/A=
nimationList.cpp; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		49E912A80EFAC906009D0CAF /* AnimationList.h =
*/ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D=
 sourcecode.c.h; name =3D AnimationList.h; path =3D animation/AnimationLi=
st.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		49E912A90EFAC906009D0CAF /* TimingFunction.h=
 */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =
=3D sourcecode.c.h; name =3D TimingFunction.h; path =3D animation/TimingF=
unction.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><del>-		49ECEB5E1499790D00CDD3A4 /* FECompositeArithmeticNEON.h */=
 =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D=
 sourcecode.c.h; path =3D FECompositeArithmeticNEON.h; sourceTree =3D &qu=
ot;&lt;group&gt;&quot;; };
-		49ECEB601499790D00CDD3A4 /* FEGaussianBlurNEON.h */ =3D {isa =3D PBXFi=
leReference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.h; pa=
th =3D FEGaussianBlurNEON.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
-		49ECEB611499790D00CDD3A4 /* FELightingNEON.cpp */ =3D {isa =3D PBXFile=
Reference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.cpp.cpp; =
path =3D FELightingNEON.cpp; sourceTree =3D &quot;&lt;group&gt;&quot;; };
-		49ECEB621499790D00CDD3A4 /* FELightingNEON.h */ =3D {isa =3D PBXFileRe=
ference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.h; path =3D=
 FELightingNEON.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</del><span class=3D"cx"> 		49ECEB631499790D00CDD3A4 /* FilterOperation.c=
pp */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileTyp=
e =3D sourcecode.cpp.cpp; name =3D FilterOperation.cpp; path =3D filters/=
FilterOperation.cpp; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		49ECEB641499790D00CDD3A4 /* FilterOperation.=
h */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType=
 =3D sourcecode.c.h; name =3D FilterOperation.h; path =3D filters/FilterO=
peration.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		49ECEB651499790D00CDD3A4 /* FilterOperations=
.cpp */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileT=
ype =3D sourcecode.cpp.cpp; name =3D FilterOperations.cpp; path =3D filte=
rs/FilterOperations.cpp; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"lines">@@ -10374,7 +10366,6 @@
</span><span class=3D"cx"> 		91089D2F14C335CD005AFC49 /* JSUint8ClampedAr=
ray.cpp */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFi=
leType =3D sourcecode.cpp.cpp; path =3D JSUint8ClampedArray.cpp; sourceTr=
ee =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		91089D3014C335CD005AFC49 /* JSUint8ClampedAr=
ray.h */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFile=
Type =3D sourcecode.c.h; path =3D JSUint8ClampedArray.h; sourceTree =3D &=
quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		91A3905814C0F4B900F67901 /* Uint8ClampedArra=
y.idl */ =3D {isa =3D PBXFileReference; lastKnownFileType =3D text; name =
=3D Uint8ClampedArray.idl; path =3D canvas/Uint8ClampedArray.idl; sourceT=
ree =3D &quot;&lt;group&gt;&quot;; };
</span><del>-		930062D7159B45B600ACD48A /* NEONHelpers.h */ =3D {isa =3D =
PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.=
h; path =3D NEONHelpers.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</del><span class=3D"cx"> 		9302B0BC0D79F82900C7EE83 /* PageGroup.cpp */ =
=3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D =
sourcecode.cpp.cpp; path =3D PageGroup.cpp; sourceTree =3D &quot;&lt;grou=
p&gt;&quot;; };
</span><span class=3D"cx"> 		9302B0BE0D79F82C00C7EE83 /* PageGroup.h */ =3D=
 {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D sou=
rcecode.c.h; path =3D PageGroup.h; sourceTree =3D &quot;&lt;group&gt;&quo=
t;; };
</span><span class=3D"cx"> 		9305B24C098F1B6B00C28855 /* Timer.h */ =3D {=
isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D sourc=
ecode.c.h; path =3D Timer.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"lines">@@ -10478,6 +10469,12 @@
</span><span class=3D"cx"> 		93309EA0099EB78C0056E581 /* SharedTimer.h */=
 =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D=
 sourcecode.c.h; path =3D SharedTimer.h; sourceTree =3D &quot;&lt;group&g=
t;&quot;; };
</span><span class=3D"cx"> 		93309EA1099EB78C0056E581 /* Timer.cpp */ =3D=
 {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D sou=
rcecode.cpp.cpp; path =3D Timer.cpp; sourceTree =3D &quot;&lt;group&gt;&q=
uot;; };
</span><span class=3D"cx"> 		9332AB3D16515D7700D827EC /* GraphicsContext3=
DNEON.h */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFi=
leType =3D sourcecode.c.h; path =3D GraphicsContext3DNEON.h; sourceTree =3D=
 &quot;&lt;group&gt;&quot;; };
</span><ins>+		9332AB871653A97900D827EC /* FEBlendNEON.h */ =3D {isa =3D =
PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.=
h; path =3D FEBlendNEON.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
+		9332AB881653A97900D827EC /* FECompositeArithmeticNEON.h */ =3D {isa =3D=
 PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c=
.h; path =3D FECompositeArithmeticNEON.h; sourceTree =3D &quot;&lt;group&=
gt;&quot;; };
+		9332AB891653A97900D827EC /* FEGaussianBlurNEON.h */ =3D {isa =3D PBXFi=
leReference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.h; pa=
th =3D FEGaussianBlurNEON.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
+		9332AB8A1653A97900D827EC /* FELightingNEON.cpp */ =3D {isa =3D PBXFile=
Reference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.cpp.cpp; =
path =3D FELightingNEON.cpp; sourceTree =3D &quot;&lt;group&gt;&quot;; };
+		9332AB8B1653A97900D827EC /* FELightingNEON.h */ =3D {isa =3D PBXFileRe=
ference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.h; path =3D=
 FELightingNEON.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
+		9332AB8C1653A97900D827EC /* NEONHelpers.h */ =3D {isa =3D PBXFileRefer=
ence; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.h; path =3D =
NEONHelpers.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</ins><span class=3D"cx"> 		93354A3B0B24F8C9003F6DEA /* UIEventWithKeySta=
te.cpp */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFil=
eType =3D sourcecode.cpp.cpp; path =3D UIEventWithKeyState.cpp; sourceTre=
e =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		933A142B0B7D188600A53FFD /* TextEvent.cpp */=
 =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D=
 sourcecode.cpp.cpp; path =3D TextEvent.cpp; sourceTree =3D &quot;&lt;gro=
up&gt;&quot;; };
</span><span class=3D"cx"> 		933A142C0B7D188600A53FFD /* TextEvent.idl */=
 =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D=
 text; path =3D TextEvent.idl; sourceTree =3D &quot;&lt;group&gt;&quot;; =
};
</span><span class=3D"lines">@@ -10532,7 +10529,6 @@
</span><span class=3D"cx"> 		938192040F87E1EC00D5352A /* BinaryPropertyLi=
st.h */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileT=
ype =3D sourcecode.c.h; path =3D BinaryPropertyList.h; sourceTree =3D &qu=
ot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		9382AAB10D8C386100F357A6 /* NodeWithIndex.h =
*/ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D=
 sourcecode.c.h; path =3D NodeWithIndex.h; sourceTree =3D &quot;&lt;group=
&gt;&quot;; };
</span><span class=3D"cx"> 		9382DF5710A8D5C900925652 /* ColorSpace.h */ =
=3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D =
sourcecode.c.h; path =3D ColorSpace.h; sourceTree =3D &quot;&lt;group&gt;=
&quot;; };
</span><del>-		938C496815AD67E300FCB2E1 /* FEBlendNEON.h */ =3D {isa =3D =
PBXFileReference; fileEncoding =3D 4; lastKnownFileType =3D sourcecode.c.=
h; path =3D FEBlendNEON.h; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</del><span class=3D"cx"> 		938E65F009F09840008A48EC /* JSHTMLElementWrap=
perFactory.h */ =3D {isa =3D PBXFileReference; fileEncoding =3D 30; lastK=
nownFileType =3D sourcecode.c.h; path =3D JSHTMLElementWrapperFactory.h; =
sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		938E65F609F0985D008A48EC /* JSHTMLElementWra=
pperFactory.cpp */ =3D {isa =3D PBXFileReference; fileEncoding =3D 30; la=
stKnownFileType =3D sourcecode.cpp.cpp; path =3D JSHTMLElementWrapperFact=
ory.cpp; sourceTree =3D &quot;&lt;group&gt;&quot;; };
</span><span class=3D"cx"> 		938E662509F09956008A48EC /* HTMLCanvasElemen=
t.idl */ =3D {isa =3D PBXFileReference; fileEncoding =3D 4; lastKnownFile=
Type =3D text; path =3D HTMLCanvasElement.idl; sourceTree =3D &quot;&lt;g=
roup&gt;&quot;; };
</span><span class=3D"lines">@@ -15421,20 +15417,6 @@
</span><span class=3D"cx"> 			name =3D animation;
</span><span class=3D"cx"> 			sourceTree =3D &quot;&lt;group&gt;&quot;;
</span><span class=3D"cx"> 		};
</span><del>-		49ECEB5C1499790D00CDD3A4 /* arm */ =3D {
-			isa =3D PBXGroup;
-			children =3D (
-				938C496815AD67E300FCB2E1 /* FEBlendNEON.h */,
-				49ECEB5E1499790D00CDD3A4 /* FECompositeArithmeticNEON.h */,
-				49ECEB601499790D00CDD3A4 /* FEGaussianBlurNEON.h */,
-				49ECEB611499790D00CDD3A4 /* FELightingNEON.cpp */,
-				49ECEB621499790D00CDD3A4 /* FELightingNEON.h */,
-				930062D7159B45B600ACD48A /* NEONHelpers.h */,
-			);
-			name =3D arm;
-			path =3D filters/arm;
-			sourceTree =3D &quot;&lt;group&gt;&quot;;
-		};
</del><span class=3D"cx"> 		5126E6B60A2E3AEF005C29FA /* icon */ =3D {
</span><span class=3D"cx"> 			isa =3D PBXGroup;
</span><span class=3D"cx"> 			children =3D (
</span><span class=3D"lines">@@ -17381,11 +17363,25 @@
</span><span class=3D"cx"> 		9332AB3C16515D7700D827EC /* arm */ =3D {
</span><span class=3D"cx"> 			isa =3D PBXGroup;
</span><span class=3D"cx"> 			children =3D (
</span><ins>+				9332AB861653A97900D827EC /* filters */,
</ins><span class=3D"cx"> 				9332AB3D16515D7700D827EC /* GraphicsContext=
3DNEON.h */,
</span><span class=3D"cx"> 			);
</span><span class=3D"cx"> 			path =3D arm;
</span><span class=3D"cx"> 			sourceTree =3D &quot;&lt;group&gt;&quot;;
</span><span class=3D"cx"> 		};
</span><ins>+		9332AB861653A97900D827EC /* filters */ =3D {
+			isa =3D PBXGroup;
+			children =3D (
+				9332AB871653A97900D827EC /* FEBlendNEON.h */,
+				9332AB881653A97900D827EC /* FECompositeArithmeticNEON.h */,
+				9332AB891653A97900D827EC /* FEGaussianBlurNEON.h */,
+				9332AB8A1653A97900D827EC /* FELightingNEON.cpp */,
+				9332AB8B1653A97900D827EC /* FELightingNEON.h */,
+				9332AB8C1653A97900D827EC /* NEONHelpers.h */,
+			);
+			path =3D filters;
+			sourceTree =3D &quot;&lt;group&gt;&quot;;
+		};
</ins><span class=3D"cx"> 		9363B6290F8E8FE000803810 /* cf */ =3D {
</span><span class=3D"cx"> 			isa =3D PBXGroup;
</span><span class=3D"cx"> 			children =3D (
</span><span class=3D"lines">@@ -18279,7 +18275,6 @@
</span><span class=3D"cx"> 				5093334E163B0E4300099A60 /* CustomFilterPa=
rameterList.h */,
</span><span class=3D"cx"> 				50D32855163B313F0016111E /* ValidatedCusto=
mFilterOperation.cpp */,
</span><span class=3D"cx"> 				50D32856163B313F0016111E /* ValidatedCusto=
mFilterOperation.h */,
</span><del>-				49ECEB5C1499790D00CDD3A4 /* arm */,
</del><span class=3D"cx"> 				15B3FC1715FB217800A81BCB /* CustomFilterArr=
ayParameter.h */,
</span><span class=3D"cx"> 				50D4060F147D49DE00D30BB5 /* CustomFilterCo=
mpiledProgram.cpp */,
</span><span class=3D"cx"> 				50D40610147D49DE00D30BB5 /* CustomFilterCo=
mpiledProgram.h */,
</span><span class=3D"lines">@@ -23538,7 +23533,6 @@
</span><span class=3D"cx"> 				A75E8B8B0E1DE2D6007F2481 /* FEColorMatrix.=
h in Headers */,
</span><span class=3D"cx"> 				A75E8B8D0E1DE2D6007F2481 /* FEComponentTra=
nsfer.h in Headers */,
</span><span class=3D"cx"> 				A75E8B8F0E1DE2D6007F2481 /* FEComposite.h =
in Headers */,
</span><del>-				49ECEB681499790D00CDD3A4 /* FECompositeArithmeticNEON.h =
in Headers */,
</del><span class=3D"cx"> 				84730D791248F0B300D3A9C9 /* FEConvolveMatri=
x.h in Headers */,
</span><span class=3D"cx"> 				50D403C814768C9400D30BB5 /* FECustomFilter=
.h in Headers */,
</span><span class=3D"cx"> 				84730D7B1248F0B300D3A9C9 /* FEDiffuseLight=
ing.h in Headers */,
</span><span class=3D"lines">@@ -23546,9 +23540,7 @@
</span><span class=3D"cx"> 				4358E8811360A31700E4748C /* FEDropShadow.h=
 in Headers */,
</span><span class=3D"cx"> 				84730D7F1248F0B300D3A9C9 /* FEFlood.h in H=
eaders */,
</span><span class=3D"cx"> 				84801955108BAFB300CB2B1F /* FEGaussianBlur=
.h in Headers */,
</span><del>-				49ECEB6A1499790D00CDD3A4 /* FEGaussianBlurNEON.h in Head=
ers */,
</del><span class=3D"cx"> 				84730D811248F0B300D3A9C9 /* FELighting.h in=
 Headers */,
</span><del>-				49ECEB6C1499790D00CDD3A4 /* FELightingNEON.h in Headers =
*/,
</del><span class=3D"cx"> 				84730D831248F0B300D3A9C9 /* FEMerge.h in He=
aders */,
</span><span class=3D"cx"> 				84730D851248F0B300D3A9C9 /* FEMorphology.h=
 in Headers */,
</span><span class=3D"cx"> 				84730D871248F0B300D3A9C9 /* FEOffset.h in =
Headers */,
</span><span class=3D"lines">@@ -26784,7 +26776,6 @@
</span><span class=3D"cx"> 				84730D7E1248F0B300D3A9C9 /* FEFlood.cpp in=
 Sources */,
</span><span class=3D"cx"> 				84801954108BAFB300CB2B1F /* FEGaussianBlur=
.cpp in Sources */,
</span><span class=3D"cx"> 				84730D801248F0B300D3A9C9 /* FELighting.cpp=
 in Sources */,
</span><del>-				49ECEB6B1499790D00CDD3A4 /* FELightingNEON.cpp in Source=
s */,
</del><span class=3D"cx"> 				84730D821248F0B300D3A9C9 /* FEMerge.cpp in =
Sources */,
</span><span class=3D"cx"> 				84730D841248F0B300D3A9C9 /* FEMorphology.c=
pp in Sources */,
</span><span class=3D"cx"> 				84730D861248F0B300D3A9C9 /* FEOffset.cpp i=
n Sources */,
</span></span></pre></div>
<a id=3D"trunkSourceWebCoreplatformgraphicscpuarmfiltersFEBlendNEONhfromr=
ev134766trunkSourceWebCoreplatformgraphicsfiltersarmFEBlendNEONh"></a>
<div class=3D"copfile"><h4>Copied: trunk/Source/WebCore/platform/graphics=
/cpu/arm/filters/FEBlendNEON.h (from rev 134766, trunk/Source/WebCore/pla=
tform/graphics/filters/arm/FEBlendNEON.h) (0 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/platform/graphics/cpu/arm/f=
ilters/FEBlendNEON.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FEBlendNEON.h	=
2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -0,0 +1,175 @@
</span><ins>+/*
+ * Copyright (C) 2012 University of Szeged
+ * Copyright (C) 2012 Gabor Rapcsanyi
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in th=
e
+ *    documentation and/or other materials provided with the distributio=
n.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FEBlendNEON_h
+#define FEBlendNEON_h
+
+#include &lt;wtf/Platform.h&gt;
+
+#if ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#include &quot;FEBlend.h&quot;
+#include &lt;arm_neon.h&gt;
+
+namespace WebCore {
+
+class FEBlendUtilitiesNEON {
+public:
+    static inline uint16x8_t div255(uint16x8_t num, uint16x8_t sixteenCo=
nst255, uint16x8_t sixteenConstOne)
+    {
+        uint16x8_t quotient =3D vshrq_n_u16(num, 8);
+        uint16x8_t remainder =3D vaddq_u16(vsubq_u16(num, vmulq_u16(sixt=
eenConst255, quotient)), sixteenConstOne);
+        return vaddq_u16(quotient, vshrq_n_u16(remainder, 8));
+    }
+
+    static inline uint16x8_t normal(uint16x8_t pixelA, uint16x8_t pixelB=
, uint16x8_t alphaA, uint16x8_t,
+                                    uint16x8_t sixteenConst255, uint16x8=
_t sixteenConstOne)
+    {
+        uint16x8_t tmp1 =3D vsubq_u16(sixteenConst255, alphaA);
+        uint16x8_t tmp2 =3D vmulq_u16(tmp1, pixelB);
+        uint16x8_t tmp3 =3D div255(tmp2, sixteenConst255, sixteenConstOn=
e);
+        return vaddq_u16(tmp3, pixelA);
+    }
+
+    static inline uint16x8_t multiply(uint16x8_t pixelA, uint16x8_t pixe=
lB, uint16x8_t alphaA, uint16x8_t alphaB,
+                                      uint16x8_t sixteenConst255, uint16=
x8_t sixteenConstOne)
+    {
+        uint16x8_t tmp1 =3D vsubq_u16(sixteenConst255, alphaA);
+        uint16x8_t tmp2 =3D vmulq_u16(tmp1, pixelB);
+        uint16x8_t tmp3 =3D vaddq_u16(vsubq_u16(sixteenConst255, alphaB)=
, pixelB);
+        uint16x8_t tmp4 =3D vmulq_u16(tmp3, pixelA);
+        uint16x8_t tmp5 =3D vaddq_u16(tmp2, tmp4);
+        return div255(tmp5, sixteenConst255, sixteenConstOne);
+    }
+
+    static inline uint16x8_t screen(uint16x8_t pixelA, uint16x8_t pixelB=
, uint16x8_t, uint16x8_t,
+                                    uint16x8_t sixteenConst255, uint16x8=
_t sixteenConstOne)
+    {
+        uint16x8_t tmp1 =3D vaddq_u16(pixelA, pixelB);
+        uint16x8_t tmp2 =3D vmulq_u16(pixelA, pixelB);
+        uint16x8_t tmp3 =3D div255(tmp2, sixteenConst255, sixteenConstOn=
e);
+        return vsubq_u16(tmp1, tmp3);
+    }
+
+    static inline uint16x8_t darken(uint16x8_t pixelA, uint16x8_t pixelB=
, uint16x8_t alphaA, uint16x8_t alphaB,
+                                    uint16x8_t sixteenConst255, uint16x8=
_t sixteenConstOne)
+    {
+        uint16x8_t tmp1 =3D vsubq_u16(sixteenConst255, alphaA);
+        uint16x8_t tmp2 =3D vmulq_u16(tmp1, pixelB);
+        uint16x8_t tmp3 =3D div255(tmp2, sixteenConst255, sixteenConstOn=
e);
+        uint16x8_t tmp4 =3D vaddq_u16(tmp3, pixelA);
+
+        uint16x8_t tmp5 =3D vsubq_u16(sixteenConst255, alphaB);
+        uint16x8_t tmp6 =3D vmulq_u16(tmp5, pixelA);
+        uint16x8_t tmp7 =3D div255(tmp6, sixteenConst255, sixteenConstOn=
e);
+        uint16x8_t tmp8 =3D vaddq_u16(tmp7, pixelB);
+
+        return vminq_u16(tmp4, tmp8);
+    }
+
+    static inline uint16x8_t lighten(uint16x8_t pixelA, uint16x8_t pixel=
B, uint16x8_t alphaA, uint16x8_t alphaB,
+                                     uint16x8_t sixteenConst255, uint16x=
8_t sixteenConstOne)
+    {
+        uint16x8_t tmp1 =3D vsubq_u16(sixteenConst255, alphaA);
+        uint16x8_t tmp2 =3D vmulq_u16(tmp1, pixelB);
+        uint16x8_t tmp3 =3D div255(tmp2, sixteenConst255, sixteenConstOn=
e);
+        uint16x8_t tmp4 =3D vaddq_u16(tmp3, pixelA);
+
+        uint16x8_t tmp5 =3D vsubq_u16(sixteenConst255, alphaB);
+        uint16x8_t tmp6 =3D vmulq_u16(tmp5, pixelA);
+        uint16x8_t tmp7 =3D div255(tmp6, sixteenConst255, sixteenConstOn=
e);
+        uint16x8_t tmp8 =3D vaddq_u16(tmp7, pixelB);
+
+        return vmaxq_u16(tmp4, tmp8);
+    }
+};
+
+void FEBlend::platformApplyNEON(unsigned char* srcPixelArrayA, unsigned =
char* srcPixelArrayB, unsigned char* dstPixelArray,
+                                unsigned colorArrayLength)
+{
+    uint8_t* sourcePixelA =3D reinterpret_cast&lt;uint8_t*&gt;(srcPixelA=
rrayA);
+    uint8_t* sourcePixelB =3D reinterpret_cast&lt;uint8_t*&gt;(srcPixelA=
rrayB);
+    uint8_t* destinationPixel =3D reinterpret_cast&lt;uint8_t*&gt;(dstPi=
xelArray);
+
+    uint16x8_t sixteenConst255 =3D vdupq_n_u16(255);
+    uint16x8_t sixteenConstOne =3D vdupq_n_u16(1);
+
+    unsigned colorOffset =3D 0;
+    while (colorOffset &lt; colorArrayLength) {
+        unsigned char alphaA1 =3D srcPixelArrayA[colorOffset + 3];
+        unsigned char alphaB1 =3D srcPixelArrayB[colorOffset + 3];
+        unsigned char alphaA2 =3D srcPixelArrayA[colorOffset + 7];
+        unsigned char alphaB2 =3D srcPixelArrayB[colorOffset + 7];
+
+        uint16x8_t doubblePixelA =3D vmovl_u8(vld1_u8(sourcePixelA + col=
orOffset));
+        uint16x8_t doubblePixelB =3D vmovl_u8(vld1_u8(sourcePixelB + col=
orOffset));
+        uint16x8_t alphaA =3D vcombine_u16(vdup_n_u16(alphaA1), vdup_n_u=
16(alphaA2));
+        uint16x8_t alphaB =3D vcombine_u16(vdup_n_u16(alphaB1), vdup_n_u=
16(alphaB2));
+
+        uint16x8_t result;
+        switch (m_mode) {
+        case FEBLEND_MODE_NORMAL:
+            result =3D FEBlendUtilitiesNEON::normal(doubblePixelA, doubb=
lePixelB, alphaA, alphaB, sixteenConst255, sixteenConstOne);
+            break;
+        case FEBLEND_MODE_MULTIPLY:
+            result =3D FEBlendUtilitiesNEON::multiply(doubblePixelA, dou=
bblePixelB, alphaA, alphaB, sixteenConst255, sixteenConstOne);
+            break;
+        case FEBLEND_MODE_SCREEN:
+            result =3D FEBlendUtilitiesNEON::screen(doubblePixelA, doubb=
lePixelB, alphaA, alphaB, sixteenConst255, sixteenConstOne);
+            break;
+        case FEBLEND_MODE_DARKEN:
+            result =3D FEBlendUtilitiesNEON::darken(doubblePixelA, doubb=
lePixelB, alphaA, alphaB, sixteenConst255, sixteenConstOne);
+            break;
+        case FEBLEND_MODE_LIGHTEN:
+            result =3D FEBlendUtilitiesNEON::lighten(doubblePixelA, doub=
blePixelB, alphaA, alphaB, sixteenConst255, sixteenConstOne);
+            break;
+        case FEBLEND_MODE_UNKNOWN:
+        default:
+            result =3D vdupq_n_u16(0);
+            break;
+        }
+
+        vst1_u8(destinationPixel + colorOffset, vmovn_u16(result));
+
+        unsigned char alphaR1 =3D 255 - ((255 - alphaA1) * (255 - alphaB=
1)) / 255;
+        unsigned char alphaR2 =3D 255 - ((255 - alphaA2) * (255 - alphaB=
2)) / 255;
+
+        dstPixelArray[colorOffset + 3] =3D alphaR1;
+        dstPixelArray[colorOffset + 7] =3D alphaR2;
+
+        colorOffset +=3D 8;
+        if (colorOffset &gt; colorArrayLength) {
+            ASSERT(colorOffset - 4 =3D=3D colorArrayLength);
+            colorOffset =3D colorArrayLength - 8;
+        }
+    }
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#endif // FEBlendNEON_h
</ins></span></pre></div>
<a id=3D"trunkSourceWebCoreplatformgraphicscpuarmfiltersFECompositeArithm=
eticNEONhfromrev134766trunkSourceWebCoreplatformgraphicsfiltersarmFECompo=
siteArithmeticNEONh"></a>
<div class=3D"copfile"><h4>Copied: trunk/Source/WebCore/platform/graphics=
/cpu/arm/filters/FECompositeArithmeticNEON.h (from rev 134766, trunk/Sour=
ce/WebCore/platform/graphics/filters/arm/FECompositeArithmeticNEON.h) (0 =
=3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/platform/graphics/cpu/arm/f=
ilters/FECompositeArithmeticNEON.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FECompositeAri=
thmeticNEON.h	2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -0,0 +1,99 @@
</span><ins>+/*
+ * Copyright (C) 2011 University of Szeged
+ * Copyright (C) 2011 Felician Marton
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in th=
e
+ *    documentation and/or other materials provided with the distributio=
n.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FECompositeArithmeticNEON_h
+#define FECompositeArithmeticNEON_h
+
+#if ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#include &quot;FEComposite.h&quot;
+#include &lt;arm_neon.h&gt;
+
+namespace WebCore {
+
+template &lt;int b1, int b4&gt;
+inline void FEComposite::computeArithmeticPixelsNeon(unsigned char* sour=
ce, unsigned char* destination,
+    unsigned pixelArrayLength, float k1, float k2, float k3, float k4)
+{
+    float32x4_t k1x4 =3D vdupq_n_f32(k1 / 255);
+    float32x4_t k2x4 =3D vdupq_n_f32(k2);
+    float32x4_t k3x4 =3D vdupq_n_f32(k3);
+    float32x4_t k4x4 =3D vdupq_n_f32(k4 * 255);
+    uint32x4_t max255 =3D vdupq_n_u32(255);
+
+    uint32_t* sourcePixel =3D reinterpret_cast&lt;uint32_t*&gt;(source);
+    uint32_t* destinationPixel =3D reinterpret_cast&lt;uint32_t*&gt;(des=
tination);
+    uint32_t* destinationEndPixel =3D destinationPixel + (pixelArrayLeng=
th &gt;&gt; 2);
+
+    while (destinationPixel &lt; destinationEndPixel) {
+        uint32x2_t temporary1 =3D vset_lane_u32(*sourcePixel, temporary1=
, 0);
+        uint16x4_t temporary2 =3D vget_low_u16(vmovl_u8(vreinterpret_u8_=
u32(temporary1)));
+        float32x4_t sourcePixelAsFloat =3D vcvtq_f32_u32(vmovl_u16(tempo=
rary2));
+
+        temporary1 =3D vset_lane_u32(*destinationPixel, temporary1, 0);
+        temporary2 =3D vget_low_u16(vmovl_u8(vreinterpret_u8_u32(tempora=
ry1)));
+        float32x4_t destinationPixelAsFloat =3D vcvtq_f32_u32(vmovl_u16(=
temporary2));
+
+        float32x4_t result =3D vmulq_f32(sourcePixelAsFloat, k2x4);
+        result =3D vmlaq_f32(result, destinationPixelAsFloat, k3x4);
+        if (b1)
+            result =3D vmlaq_f32(result, vmulq_f32(sourcePixelAsFloat, d=
estinationPixelAsFloat), k1x4);
+        if (b4)
+            result =3D vaddq_f32(result, k4x4);
+
+        // Convert result to uint so negative values are converted to ze=
ro.
+        uint16x4_t temporary3 =3D vmovn_u32(vminq_u32(vcvtq_u32_f32(resu=
lt), max255));
+        uint8x8_t temporary4 =3D vmovn_u16(vcombine_u16(temporary3, temp=
orary3));
+        *destinationPixel++ =3D vget_lane_u32(vreinterpret_u32_u8(tempor=
ary4), 0);
+        ++sourcePixel;
+    }
+}
+
+inline void FEComposite::platformArithmeticNeon(unsigned char* source, u=
nsigned char* destination,
+    unsigned pixelArrayLength, float k1, float k2, float k3, float k4)
+{
+    if (!k4) {
+        if (!k1) {
+            computeArithmeticPixelsNeon&lt;0, 0&gt;(source, destination,=
 pixelArrayLength, k1, k2, k3, k4);
+            return;
+        }
+
+        computeArithmeticPixelsNeon&lt;1, 0&gt;(source, destination, pix=
elArrayLength, k1, k2, k3, k4);
+        return;
+    }
+
+    if (!k1) {
+        computeArithmeticPixelsNeon&lt;0, 1&gt;(source, destination, pix=
elArrayLength, k1, k2, k3, k4);
+        return;
+    }
+    computeArithmeticPixelsNeon&lt;1, 1&gt;(source, destination, pixelAr=
rayLength, k1, k2, k3, k4);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#endif // FECompositeArithmeticNEON_h
</ins></span></pre></div>
<a id=3D"trunkSourceWebCoreplatformgraphicscpuarmfiltersFEGaussianBlurNEO=
Nhfromrev134766trunkSourceWebCoreplatformgraphicsfiltersarmFEGaussianBlur=
NEONh"></a>
<div class=3D"copfile"><h4>Copied: trunk/Source/WebCore/platform/graphics=
/cpu/arm/filters/FEGaussianBlurNEON.h (from rev 134766, trunk/Source/WebC=
ore/platform/graphics/filters/arm/FEGaussianBlurNEON.h) (0 =3D> 134767)</=
h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/platform/graphics/cpu/arm/f=
ilters/FEGaussianBlurNEON.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FEGaussianBlur=
NEON.h	2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -0,0 +1,78 @@
</span><ins>+/*
+ * Copyright (C) 2011 University of Szeged
+ * Copyright (C) 2011 Zoltan Herczeg
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in th=
e
+ *    documentation and/or other materials provided with the distributio=
n.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FEGaussianBlurNEON_h
+#define FEGaussianBlurNEON_h
+
+#if ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#include &quot;FEGaussianBlur.h&quot;
+#include &quot;NEONHelpers.h&quot;
+
+namespace WebCore {
+
+inline void boxBlurNEON(Uint8ClampedArray* srcPixelArray, Uint8ClampedAr=
ray* dstPixelArray,
+                        unsigned dx, int dxLeft, int dxRight, int stride=
, int strideLine, int effectWidth, int effectHeight)
+{
+    uint32_t* sourcePixel =3D reinterpret_cast&lt;uint32_t*&gt;(srcPixel=
Array-&gt;data());
+    uint32_t* destinationPixel =3D reinterpret_cast&lt;uint32_t*&gt;(dst=
PixelArray-&gt;data());
+
+    float32x4_t deltaX =3D vdupq_n_f32(1.0 / dx);
+    int pixelLine =3D strideLine / 4;
+    int pixelStride =3D stride / 4;
+
+    for (int y =3D 0; y &lt; effectHeight; ++y) {
+        int line =3D y * pixelLine;
+        float32x4_t sum =3D vdupq_n_f32(0);
+        // Fill the kernel
+        int maxKernelSize =3D std::min(dxRight, effectWidth);
+        for (int i =3D 0; i &lt; maxKernelSize; ++i) {
+            float32x4_t sourcePixelAsFloat =3D loadRGBA8AsFloat(sourcePi=
xel + line + i * pixelStride);
+            sum =3D vaddq_f32(sum, sourcePixelAsFloat);
+        }
+
+        // Blurring
+        for (int x =3D 0; x &lt; effectWidth; ++x) {
+            int pixelOffset =3D line + x * pixelStride;
+            float32x4_t result =3D vmulq_f32(sum, deltaX);
+            storeFloatAsRGBA8(result, destinationPixel + pixelOffset);
+            if (x &gt;=3D dxLeft) {
+                float32x4_t sourcePixelAsFloat =3D loadRGBA8AsFloat(sour=
cePixel + pixelOffset - dxLeft * pixelStride);
+                sum =3D vsubq_f32(sum, sourcePixelAsFloat);
+            }
+            if (x + dxRight &lt; effectWidth) {
+                float32x4_t sourcePixelAsFloat =3D loadRGBA8AsFloat(sour=
cePixel + pixelOffset + dxRight * pixelStride);
+                sum =3D vaddq_f32(sum, sourcePixelAsFloat);
+            }
+        }
+    }
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#endif // FEGaussianBlurNEON_h
</ins></span></pre></div>
<a id=3D"trunkSourceWebCoreplatformgraphicscpuarmfiltersFELightingNEONcpp=
fromrev134766trunkSourceWebCoreplatformgraphicsfiltersarmFELightingNEONcp=
p"></a>
<div class=3D"copfile"><h4>Copied: trunk/Source/WebCore/platform/graphics=
/cpu/arm/filters/FELightingNEON.cpp (from rev 134766, trunk/Source/WebCor=
e/platform/graphics/filters/arm/FELightingNEON.cpp) (0 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/platform/graphics/cpu/arm/f=
ilters/FELightingNEON.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FELightingNEON=
.cpp	2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -0,0 +1,504 @@
</span><ins>+/*
+ * Copyright (C) 2011 University of Szeged
+ * Copyright (C) 2011 Zoltan Herczeg
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in th=
e
+ *    documentation and/or other materials provided with the distributio=
n.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;FELightingNEON.h&quot;
+
+#if CPU(ARM_NEON) &amp;&amp; CPU(ARM_TRADITIONAL) &amp;&amp; COMPILER(GC=
C)
+
+#include &lt;wtf/Alignment.h&gt;
+
+namespace WebCore {
+
+// These constants are copied to the following SIMD registers:
+//   ALPHAX_Q ALPHAY_Q REMAPX_D REMAPY_D
+
+static WTF_ALIGNED(short, s_FELightingConstantsForNeon[], 16) =3D {
+    // Alpha coefficients.
+    -2, 1, 0, -1, 2, 1, 0, -1,
+    0, -1, -2, -1, 0, 1, 2, 1,
+    // Remapping indicies.
+    0x0f0e, 0x0302, 0x0504, 0x0706,
+    0x0b0a, 0x1312, 0x1514, 0x1716,
+};
+
+short* feLightingConstantsForNeon()
+{
+    return s_FELightingConstantsForNeon;
+}
+
+void FELighting::platformApplyNeonWorker(FELightingPaintingDataForNeon* =
parameters)
+{
+    neonDrawLighting(parameters);
+}
+
+#define ASSTRING(str) #str
+#define TOSTRING(value) ASSTRING(value)
+
+#define PIXELS_OFFSET TOSTRING(0)
+#define YSTART_OFFSET TOSTRING(4)
+#define WIDTH_OFFSET TOSTRING(8)
+#define HEIGHT_OFFSET TOSTRING(12)
+#define FLAGS_OFFSET TOSTRING(16)
+#define SPECULAR_EXPONENT_OFFSET TOSTRING(20)
+#define CONE_EXPONENT_OFFSET TOSTRING(24)
+#define FLOAT_ARGUMENTS_OFFSET TOSTRING(28)
+#define PAINTING_CONSTANTS_OFFSET TOSTRING(32)
+#define NL &quot;\n&quot;
+
+// Register allocation
+#define PAINTING_DATA_R       &quot;r11&quot;
+#define RESET_WIDTH_R         PAINTING_DATA_R
+#define PIXELS_R              &quot;r4&quot;
+#define WIDTH_R               &quot;r5&quot;
+#define HEIGHT_R              &quot;r6&quot;
+#define FLAGS_R               &quot;r7&quot;
+#define SPECULAR_EXPONENT_R   &quot;r8&quot;
+#define CONE_EXPONENT_R       &quot;r10&quot;
+#define SCANLINE_R            &quot;r12&quot;
+
+#define TMP1_Q                &quot;q0&quot;
+#define TMP1_D0               &quot;d0&quot;
+#define TMP1_S0               &quot;s0&quot;
+#define TMP1_S1               &quot;s1&quot;
+#define TMP1_D1               &quot;d1&quot;
+#define TMP1_S2               &quot;s2&quot;
+#define TMP1_S3               &quot;s3&quot;
+#define TMP2_Q                &quot;q1&quot;
+#define TMP2_D0               &quot;d2&quot;
+#define TMP2_S0               &quot;s4&quot;
+#define TMP2_S1               &quot;s5&quot;
+#define TMP2_D1               &quot;d3&quot;
+#define TMP2_S2               &quot;s6&quot;
+#define TMP2_S3               &quot;s7&quot;
+#define TMP3_Q                &quot;q2&quot;
+#define TMP3_D0               &quot;d4&quot;
+#define TMP3_S0               &quot;s8&quot;
+#define TMP3_S1               &quot;s9&quot;
+#define TMP3_D1               &quot;d5&quot;
+#define TMP3_S2               &quot;s10&quot;
+#define TMP3_S3               &quot;s11&quot;
+
+#define COSINE_OF_ANGLE       &quot;s12&quot;
+#define POWF_INT_S            &quot;s13&quot;
+#define POWF_FRAC_S           &quot;s14&quot;
+#define SPOT_COLOR_Q          &quot;q4&quot;
+
+// Because of VMIN and VMAX CONST_ZERO_S and CONST_ONE_S
+// must be placed on the same side of the double vector
+
+// Current pixel position
+#define POSITION_Q            &quot;q5&quot;
+#define POSITION_X_S          &quot;s20&quot;
+#define POSITION_Y_S          &quot;s21&quot;
+#define POSITION_Z_S          &quot;s22&quot;
+#define CONST_ZERO_HI_D       &quot;d11&quot;
+#define CONST_ZERO_S          &quot;s23&quot;
+
+// -------------------------------
+//     Variable arguments
+// Misc arguments
+#define READ1_RANGE           &quot;d12-d15&quot;
+#define READ2_RANGE           &quot;d16-d19&quot;
+#define READ3_RANGE           &quot;d20-d21&quot;
+
+#define SCALE_S               &quot;s24&quot;
+#define SCALE_DIV4_S          &quot;s25&quot;
+#define DIFFUSE_CONST_S       &quot;s26&quot;
+
+// Light source position
+#define CONE_CUT_OFF_S        &quot;s28&quot;
+#define CONE_FULL_LIGHT_S     &quot;s29&quot;
+#define CONE_CUT_OFF_RANGE_S  &quot;s30&quot;
+#define CONST_ONE_HI_D        &quot;d15&quot;
+#define CONST_ONE_S           &quot;s31&quot;
+
+#define LIGHT_Q               &quot;q8&quot;
+#define DIRECTION_Q           &quot;q9&quot;
+#define COLOR_Q               &quot;q10&quot;
+// -------------------------------
+//    Constant coefficients
+#define READ4_RANGE           &quot;d22-d25&quot;
+#define READ5_RANGE           &quot;d26-d27&quot;
+
+#define ALPHAX_Q              &quot;q11&quot;
+#define ALPHAY_Q              &quot;q12&quot;
+#define REMAPX_D              &quot;d26&quot;
+#define REMAPY_D              &quot;d27&quot;
+// -------------------------------
+
+#define ALL_ROWS_D            &quot;{d28,d29,d30}&quot;
+#define TOP_ROW_D             &quot;d28&quot;
+#define MIDDLE_ROW_D          &quot;d29&quot;
+#define BOTTOM_ROW_D          &quot;d30&quot;
+
+#define GET_LENGTH(source, temp) \
+    &quot;vmul.f32 &quot; temp##_Q &quot;, &quot; source##_Q &quot;, &qu=
ot; source##_Q NL \
+    &quot;vadd.f32 &quot; source##_S3 &quot;, &quot; temp##_S0 &quot;, &=
quot; temp##_S1 NL \
+    &quot;vadd.f32 &quot; source##_S3 &quot;, &quot; source##_S3 &quot;,=
 &quot; temp##_S2 NL \
+    &quot;vsqrt.f32 &quot; source##_S3 &quot;, &quot; source##_S3 NL
+
+// destination##_S3 can contain the multiply of length.
+#define DOT_PRODUCT(destination, source1, source2) \
+    &quot;vmul.f32 &quot; destination##_Q &quot;, &quot; source1##_Q &qu=
ot;, &quot; source2##_Q NL \
+    &quot;vadd.f32 &quot; destination##_S0 &quot;, &quot; destination##_=
S0 &quot;, &quot; destination##_S1 NL \
+    &quot;vadd.f32 &quot; destination##_S0 &quot;, &quot; destination##_=
S0 &quot;, &quot; destination##_S2 NL
+
+#define MULTIPLY_BY_DIFFUSE_CONST(normalVectorLength, dotProductLength) =
\
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_DIFFUSE_CONST=
_IS_1) NL \
+    &quot;vmuleq.f32 &quot; TMP2_S1 &quot;, &quot; DIFFUSE_CONST_S &quot=
;, &quot; normalVectorLength NL \
+    &quot;vdiveq.f32 &quot; TMP2_S1 &quot;, &quot; TMP2_S1 &quot;, &quot=
; dotProductLength NL \
+    &quot;vdivne.f32 &quot; TMP2_S1 &quot;, &quot; normalVectorLength &q=
uot;, &quot; dotProductLength NL
+
+#define POWF_SQR(value, exponent, current, remaining) \
+    &quot;tst &quot; exponent &quot;, #&quot; ASSTRING(current) NL \
+    &quot;vmulne.f32 &quot; value &quot;, &quot; value &quot;, &quot; PO=
WF_INT_S NL \
+    &quot;tst &quot; exponent &quot;, #&quot; ASSTRING(remaining) NL \
+    &quot;vmulne.f32 &quot; POWF_INT_S &quot;, &quot; POWF_INT_S &quot;,=
 &quot; POWF_INT_S NL
+
+#define POWF_SQRT(value, exponent, current, remaining) \
+    &quot;tst &quot; exponent &quot;, #&quot; ASSTRING(remaining) NL \
+    &quot;vsqrtne.f32 &quot; POWF_FRAC_S &quot;, &quot; POWF_FRAC_S NL \
+    &quot;tst &quot; exponent &quot;, #&quot; ASSTRING(current) NL \
+    &quot;vmulne.f32 &quot; value &quot;, &quot; value &quot;, &quot; PO=
WF_FRAC_S NL
+
+// This simplified powf function is sufficiently accurate.
+#define POWF(value, exponent) \
+    &quot;tst &quot; exponent &quot;, #0xfc0&quot; NL \
+    &quot;vmovne.f32 &quot; POWF_INT_S &quot;, &quot; value NL \
+    &quot;tst &quot; exponent &quot;, #0x03f&quot; NL \
+    &quot;vmovne.f32 &quot; POWF_FRAC_S &quot;, &quot; value NL \
+    &quot;vmov.f32 &quot; value &quot;, &quot; CONST_ONE_S NL \
+    \
+    POWF_SQR(value, exponent, 0x040, 0xf80) \
+    POWF_SQR(value, exponent, 0x080, 0xf00) \
+    POWF_SQR(value, exponent, 0x100, 0xe00) \
+    POWF_SQR(value, exponent, 0x200, 0xc00) \
+    POWF_SQR(value, exponent, 0x400, 0x800) \
+    &quot;tst &quot; exponent &quot;, #0x800&quot; NL \
+    &quot;vmulne.f32 &quot; value &quot;, &quot; value &quot;, &quot; PO=
WF_INT_S NL \
+    \
+    POWF_SQRT(value, exponent, 0x20, 0x3f) \
+    POWF_SQRT(value, exponent, 0x10, 0x1f) \
+    POWF_SQRT(value, exponent, 0x08, 0x0f) \
+    POWF_SQRT(value, exponent, 0x04, 0x07) \
+    POWF_SQRT(value, exponent, 0x02, 0x03) \
+    POWF_SQRT(value, exponent, 0x01, 0x01)
+
+// The following algorithm is an ARM-NEON optimized version of
+// the main loop found in FELighting.cpp. Since the whole code
+// is redesigned to be as effective as possible (ARM specific
+// thinking), it is four times faster than its C++ counterpart.
+
+asm ( // NOLINT
+&quot;.globl &quot; TOSTRING(neonDrawLighting) NL
+TOSTRING(neonDrawLighting) &quot;:&quot; NL
+    // Because of the clever register allocation, nothing is stored on t=
he stack
+    // except the saved registers.
+    // Stack must be aligned to 8 bytes.
+    &quot;stmdb sp!, {r4-r8, r10, r11, lr}&quot; NL
+    &quot;vstmdb sp!, {d8-d15}&quot; NL
+    &quot;mov &quot; PAINTING_DATA_R &quot;, r0&quot; NL
+
+    // The following two arguments are loaded to SIMD registers.
+    &quot;ldr r0, [&quot; PAINTING_DATA_R &quot;, #&quot; FLOAT_ARGUMENT=
S_OFFSET &quot;]&quot; NL
+    &quot;ldr r1, [&quot; PAINTING_DATA_R &quot;, #&quot; PAINTING_CONST=
ANTS_OFFSET &quot;]&quot; NL
+    &quot;ldr &quot; PIXELS_R &quot;, [&quot; PAINTING_DATA_R &quot;, #&=
quot; PIXELS_OFFSET &quot;]&quot; NL
+    &quot;vldr.f32 &quot; POSITION_Y_S &quot;, [&quot; PAINTING_DATA_R &=
quot;, #&quot; YSTART_OFFSET &quot;]&quot;  NL
+    &quot;ldr &quot; WIDTH_R &quot;, [&quot; PAINTING_DATA_R &quot;, #&q=
uot; WIDTH_OFFSET &quot;]&quot; NL
+    &quot;ldr &quot; HEIGHT_R &quot;, [&quot; PAINTING_DATA_R &quot;, #&=
quot; HEIGHT_OFFSET &quot;]&quot; NL
+    &quot;ldr &quot; FLAGS_R &quot;, [&quot; PAINTING_DATA_R &quot;, #&q=
uot; FLAGS_OFFSET &quot;]&quot; NL
+    &quot;ldr &quot; SPECULAR_EXPONENT_R &quot;, [&quot; PAINTING_DATA_R=
 &quot;, #&quot; SPECULAR_EXPONENT_OFFSET &quot;]&quot; NL
+    &quot;ldr &quot; CONE_EXPONENT_R &quot;, [&quot; PAINTING_DATA_R &qu=
ot;, #&quot; CONE_EXPONENT_OFFSET &quot;]&quot; NL
+
+    // Load all data to the SIMD registers with the least number of inst=
ructions.
+    &quot;vld1.f32 { &quot; READ1_RANGE &quot; }, [r0]!&quot; NL
+    &quot;vld1.f32 { &quot; READ2_RANGE &quot; }, [r0]!&quot; NL
+    &quot;vld1.f32 { &quot; READ3_RANGE &quot; }, [r0]!&quot; NL
+    &quot;vld1.s16 {&quot; READ4_RANGE &quot;}, [r1]!&quot; NL
+    &quot;vld1.s16 {&quot; READ5_RANGE &quot;}, [r1]!&quot; NL
+
+    // Initializing local variables.
+    &quot;mov &quot; SCANLINE_R &quot;, &quot; WIDTH_R &quot;, lsl #2&qu=
ot; NL
+    &quot;add &quot; SCANLINE_R &quot;, &quot; SCANLINE_R &quot;, #8&quo=
t; NL
+    &quot;add &quot; PIXELS_R &quot;, &quot; PIXELS_R &quot;, &quot; SCA=
NLINE_R NL
+    &quot;add &quot; PIXELS_R &quot;, &quot; PIXELS_R &quot;, #3&quot; N=
L
+    &quot;mov r0, #0&quot; NL
+    &quot;vmov.f32 &quot; CONST_ZERO_S &quot;, r0&quot; NL
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_SPOT_LIGHT) N=
L
+    &quot;vmov.f32 &quot; SPOT_COLOR_Q &quot;, &quot; COLOR_Q NL
+    &quot;mov &quot; RESET_WIDTH_R &quot;, &quot; WIDTH_R NL
+
+&quot;.mainLoop:&quot; NL
+    &quot;mov r3, #3&quot; NL
+    &quot;vmov.f32 &quot; POSITION_X_S &quot;, &quot; CONST_ONE_S NL
+
+&quot;.scanline:&quot; NL
+    // The ROW registers are storing the alpha channel of the last three=
 pixels.
+    // The alpha channel is stored as signed short (sint16) values. The =
fourth value
+    // is garbage. The following instructions are shifting out the unnec=
essary alpha
+    // values and load the next ones.
+    &quot;ldrb r0, [&quot; PIXELS_R &quot;, -&quot; SCANLINE_R &quot;]&q=
uot; NL
+    &quot;ldrb r1, [&quot; PIXELS_R &quot;, +&quot; SCANLINE_R &quot;]&q=
uot; NL
+    &quot;ldrb r2, [&quot; PIXELS_R &quot;], #4&quot; NL
+    &quot;vext.s16 &quot; TOP_ROW_D &quot;, &quot; TOP_ROW_D &quot;, &qu=
ot; TOP_ROW_D &quot;, #3&quot; NL
+    &quot;vext.s16 &quot; MIDDLE_ROW_D &quot;, &quot; MIDDLE_ROW_D &quot=
;, &quot; MIDDLE_ROW_D &quot;, #3&quot; NL
+    &quot;vext.s16 &quot; BOTTOM_ROW_D &quot;, &quot; BOTTOM_ROW_D &quot=
;, &quot; BOTTOM_ROW_D &quot;, #3&quot; NL
+    &quot;vmov.s16 &quot; TOP_ROW_D &quot;[1], r0&quot; NL
+    &quot;vmov.s16 &quot; MIDDLE_ROW_D &quot;[1], r2&quot; NL
+    &quot;vmov.s16 &quot; BOTTOM_ROW_D &quot;[1], r1&quot; NL
+
+    // The two border pixels (rightmost and leftmost) are skipped when
+    // the next scanline is reached. It also jumps, when the algorithm
+    // is started, and the first free alpha values are loaded to each ro=
w.
+    &quot;subs r3, r3, #1&quot; NL
+    &quot;bne .scanline&quot; NL
+
+    // The light vector goes to TMP1_Q. It is constant in case of distan=
t light.
+    // The fourth value contains the length of the light vector.
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_POINT_LIGHT |=
 FLAG_SPOT_LIGHT) NL
+    &quot;beq .distantLight&quot; NL
+
+    &quot;vmov.s16 r3, &quot; MIDDLE_ROW_D &quot;[2]&quot; NL
+    &quot;vmov.f32 &quot; POSITION_Z_S &quot;, r3&quot; NL
+    &quot;vcvt.f32.s32 &quot; POSITION_Z_S &quot;, &quot; POSITION_Z_S N=
L
+    &quot;vmul.f32 &quot; POSITION_Z_S &quot;, &quot; POSITION_Z_S &quot=
;, &quot; SCALE_S NL
+
+    &quot;vsub.f32 &quot; TMP1_Q &quot;, &quot; LIGHT_Q &quot;, &quot; P=
OSITION_Q NL
+    GET_LENGTH(TMP1, TMP2)
+
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_SPOT_LIGHT) N=
L
+    &quot;bne .cosineOfAngle&quot; NL
+&quot;.visiblePixel:&quot; NL
+
+    //     | -1  0  1 |      | -1 -2 -1 |
+    // X =3D | -2  0  2 |  Y =3D |  0  0  0 |
+    //     | -1  0  1 |      |  1  2  1 |
+
+    // Multiply the alpha values by the X and Y matrices.
+
+    // Moving the 8 alpha value to TMP3.
+    &quot;vtbl.8 &quot; TMP3_D0 &quot;, &quot; ALL_ROWS_D &quot;, &quot;=
 REMAPX_D NL
+    &quot;vtbl.8 &quot; TMP3_D1 &quot;, &quot; ALL_ROWS_D &quot;, &quot;=
 REMAPY_D NL
+
+    &quot;vmul.s16 &quot; TMP2_Q &quot;, &quot; TMP3_Q &quot;, &quot; AL=
PHAX_Q NL
+    &quot;vpadd.s16 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot;=
 TMP2_D1 NL
+    &quot;vpadd.s16 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot;=
 TMP2_D0 NL
+    &quot;vpadd.s16 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot;=
 TMP2_D0 NL
+    &quot;vmov.s16 r0, &quot; TMP2_D0 &quot;[0]&quot; NL
+
+    &quot;vmul.s16 &quot; TMP2_Q &quot;, &quot; TMP3_Q &quot;, &quot; AL=
PHAY_Q NL
+    &quot;vpadd.s16 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot;=
 TMP2_D1 NL
+    &quot;vpadd.s16 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot;=
 TMP2_D0 NL
+    &quot;vpadd.s16 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot;=
 TMP2_D0 NL
+    &quot;vmov.s16 r1, &quot; TMP2_D0 &quot;[0]&quot; NL
+
+    // r0 and r1 contains the X and Y coordinates of the
+    // normal vector, respectively.
+
+    // Calculating the spot light strength.
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_SPOT_LIGHT) N=
L
+    &quot;beq .endLight&quot; NL
+
+    &quot;vneg.f32 &quot; TMP3_S1 &quot;, &quot; COSINE_OF_ANGLE NL
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_CONE_EXPONENT=
_IS_1) NL
+    &quot;beq .coneExpPowf&quot; NL
+&quot;.coneExpPowfFinished:&quot; NL
+
+    // Smoothing the cone edge if necessary.
+    &quot;vcmp.f32 &quot; COSINE_OF_ANGLE &quot;, &quot; CONE_FULL_LIGHT=
_S NL
+    &quot;fmstat&quot; NL
+    &quot;bhi .cutOff&quot; NL
+&quot;.cutOffFinished:&quot; NL
+
+    &quot;vmin.f32 &quot; TMP3_D0 &quot;, &quot; TMP3_D0 &quot;, &quot; =
CONST_ONE_HI_D NL
+    &quot;vmul.f32 &quot; COLOR_Q &quot;, &quot; SPOT_COLOR_Q &quot;, &q=
uot; TMP3_D0 &quot;[1]&quot; NL
+
+&quot;.endLight:&quot; NL
+    // Summarize:
+    // r0 and r1 contains the normalVector.
+    // TMP1_Q contains the light vector and its length.
+    // COLOR_Q contains the color of the light vector.
+
+    // Test whether both r0 and r1 are zero (Normal vector is (0, 0, 1))=
.
+    &quot;orrs r2, r0, r1&quot; NL
+    &quot;bne .normalVectorIsNonZero&quot; NL
+
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_SPECULAR_LIGH=
T) NL
+    &quot;bne .specularLight1&quot; NL
+
+    // Calculate diffuse light strength.
+    MULTIPLY_BY_DIFFUSE_CONST(TMP1_S2, TMP1_S3)
+    &quot;b .lightStrengthCalculated&quot; NL
+
+&quot;.specularLight1:&quot; NL
+    // Calculating specular light strength.
+    &quot;vadd.f32 &quot; TMP1_S2 &quot;, &quot; TMP1_S2 &quot;, &quot; =
TMP1_S3 NL
+    GET_LENGTH(TMP1, TMP2)
+
+    // When the exponent is 1, we don't need to call an expensive powf f=
unction.
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_SPECULAR_EXPO=
NENT_IS_1) NL
+    &quot;vdiveq.f32 &quot; TMP2_S1 &quot;, &quot; TMP1_S2 &quot;, &quot=
; TMP1_S3 NL
+    &quot;beq .specularExpPowf&quot; NL
+
+    MULTIPLY_BY_DIFFUSE_CONST(TMP1_S2, TMP1_S3)
+    &quot;b .lightStrengthCalculated&quot; NL
+
+&quot;.normalVectorIsNonZero:&quot; NL
+    // Normal vector goes to TMP2, and its length is calculated as well.
+    &quot;vmov.s32 &quot; TMP2_S0 &quot;, r0&quot; NL
+    &quot;vcvt.f32.s32 &quot; TMP2_S0 &quot;, &quot; TMP2_S0 NL
+    &quot;vmul.f32 &quot; TMP2_S0 &quot;, &quot; TMP2_S0 &quot;, &quot; =
SCALE_DIV4_S NL
+    &quot;vmov.s32 &quot; TMP2_S1 &quot;, r1&quot; NL
+    &quot;vcvt.f32.s32 &quot; TMP2_S1 &quot;, &quot; TMP2_S1 NL
+    &quot;vmul.f32 &quot; TMP2_S1 &quot;, &quot; TMP2_S1 &quot;, &quot; =
SCALE_DIV4_S NL
+    &quot;vmov.f32 &quot; TMP2_S2 &quot;, &quot; CONST_ONE_S NL
+    GET_LENGTH(TMP2, TMP3)
+
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_SPECULAR_LIGH=
T) NL
+    &quot;bne .specularLight2&quot; NL
+
+    // Calculating diffuse light strength.
+    DOT_PRODUCT(TMP3, TMP2, TMP1)
+    MULTIPLY_BY_DIFFUSE_CONST(TMP3_S0, TMP3_S3)
+    &quot;b .lightStrengthCalculated&quot; NL
+
+&quot;.specularLight2:&quot; NL
+    // Calculating specular light strength.
+    &quot;vadd.f32 &quot; TMP1_S2 &quot;, &quot; TMP1_S2 &quot;, &quot; =
TMP1_S3 NL
+    GET_LENGTH(TMP1, TMP3)
+    DOT_PRODUCT(TMP3, TMP2, TMP1)
+
+    // When the exponent is 1, we don't need to call an expensive powf f=
unction.
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_SPECULAR_EXPO=
NENT_IS_1) NL
+    &quot;vdiveq.f32 &quot; TMP2_S1 &quot;, &quot; TMP3_S0 &quot;, &quot=
; TMP3_S3 NL
+    &quot;beq .specularExpPowf&quot; NL
+    MULTIPLY_BY_DIFFUSE_CONST(TMP3_S0, TMP3_S3)
+
+&quot;.lightStrengthCalculated:&quot; NL
+    // TMP2_S1 contains the light strength. Clamp it to [0, 1]
+    &quot;vmax.f32 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot; =
CONST_ZERO_HI_D NL
+    &quot;vmin.f32 &quot; TMP2_D0 &quot;, &quot; TMP2_D0 &quot;, &quot; =
CONST_ONE_HI_D NL
+    &quot;vmul.f32 &quot; TMP3_Q &quot;, &quot; COLOR_Q &quot;, &quot; T=
MP2_D0 &quot;[1]&quot; NL
+    &quot;vcvt.u32.f32 &quot; TMP3_Q &quot;, &quot; TMP3_Q NL
+    &quot;vmov.u32 r2, r3, &quot; TMP3_S0 &quot;, &quot; TMP3_S1 NL
+    // The color values are stored in-place.
+    &quot;strb r2, [&quot; PIXELS_R &quot;, #-11]&quot; NL
+    &quot;strb r3, [&quot; PIXELS_R &quot;, #-10]&quot; NL
+    &quot;vmov.u32 r2, &quot; TMP3_S2 NL
+    &quot;strb r2, [&quot; PIXELS_R &quot;, #-9]&quot; NL
+
+    // Continue to the next pixel.
+&quot;.blackPixel:&quot; NL
+    &quot;vadd.f32 &quot; POSITION_X_S &quot;, &quot; CONST_ONE_S NL
+    &quot;mov r3, #1&quot; NL
+    &quot;subs &quot; WIDTH_R &quot;, &quot; WIDTH_R &quot;, #1&quot; NL
+    &quot;bne .scanline&quot; NL
+
+    // If the end of the scanline is reached, we continue
+    // to the next scanline.
+    &quot;vadd.f32 &quot; POSITION_Y_S &quot;, &quot; CONST_ONE_S NL
+    &quot;mov &quot; WIDTH_R &quot;, &quot; RESET_WIDTH_R NL
+    &quot;subs &quot; HEIGHT_R &quot;, &quot; HEIGHT_R &quot;, #1&quot; =
NL
+    &quot;bne .mainLoop&quot; NL
+
+    // Return.
+    &quot;vldmia sp!, {d8-d15}&quot; NL
+    &quot;ldmia sp!, {r4-r8, r10, r11, pc}&quot; NL
+
+&quot;.distantLight:&quot; NL
+    // In case of distant light, the light vector is constant,
+    // we simply copy it.
+    &quot;vmov.f32 &quot; TMP1_Q &quot;, &quot; LIGHT_Q NL
+    &quot;b .visiblePixel&quot; NL
+
+&quot;.cosineOfAngle:&quot; NL
+    // If the pixel is outside of the cone angle, it is simply a black p=
ixel.
+    DOT_PRODUCT(TMP3, TMP1, DIRECTION)
+    &quot;vdiv.f32 &quot; COSINE_OF_ANGLE &quot;, &quot; TMP3_S0 &quot;,=
 &quot; TMP1_S3 NL
+    &quot;vcmp.f32 &quot; COSINE_OF_ANGLE &quot;, &quot; CONE_CUT_OFF_S =
NL
+    &quot;fmstat&quot; NL
+    &quot;bls .visiblePixel&quot; NL
+    &quot;mov r0, #0&quot; NL
+    &quot;strh r0, [&quot; PIXELS_R &quot;, #-11]&quot; NL
+    &quot;strb r0, [&quot; PIXELS_R &quot;, #-9]&quot; NL
+    &quot;b .blackPixel&quot; NL
+
+&quot;.cutOff:&quot; NL
+    // Smoothing the light strength on the cone edge.
+    &quot;vsub.f32 &quot; TMP3_S0 &quot;, &quot; CONE_CUT_OFF_S &quot;, =
&quot; COSINE_OF_ANGLE NL
+    &quot;vdiv.f32 &quot; TMP3_S0 &quot;, &quot; TMP3_S0 &quot;, &quot; =
CONE_CUT_OFF_RANGE_S NL
+    &quot;vmul.f32 &quot; TMP3_S1 &quot;, &quot; TMP3_S1 &quot;, &quot; =
TMP3_S0 NL
+    &quot;b .cutOffFinished&quot; NL
+
+&quot;.coneExpPowf:&quot; NL
+    POWF(TMP3_S1, CONE_EXPONENT_R)
+    &quot;b .coneExpPowfFinished&quot; NL
+
+&quot;.specularExpPowf:&quot; NL
+    POWF(TMP2_S1, SPECULAR_EXPONENT_R)
+    &quot;tst &quot; FLAGS_R &quot;, #&quot; TOSTRING(FLAG_DIFFUSE_CONST=
_IS_1) NL
+    &quot;vmuleq.f32 &quot; TMP2_S1 &quot;, &quot; TMP2_S1 &quot;, &quot=
; DIFFUSE_CONST_S NL
+    &quot;b .lightStrengthCalculated&quot; NL
+); // NOLINT
+
+int FELighting::getPowerCoefficients(float exponent)
+{
+    // Calling a powf function from the assembly code would require to s=
ave
+    // and reload a lot of NEON registers. Since the base is in range [0=
..1]
+    // and only 8 bit precision is required, we use our own powf functio=
n.
+    // This is probably not the best, but it uses only a few registers a=
nd
+    // gives us enough precision (modifying the exponent field directly =
would
+    // also be possible).
+
+    // First, we limit the exponent to maximum of 64, which gives us eno=
ugh
+    // precision. We split the exponent to an integer and fraction part,
+    // since a^x =3D (a^y)*(a^z) where x =3D y+z. The integer exponent o=
f the
+    // power is estimated by square, and the fraction exponent of the po=
wer
+    // is estimated by square root assembly instructions.
+    int i, result;
+
+    if (exponent &lt; 0)
+        exponent =3D 1 / (-exponent);
+
+    if (exponent &gt; 63.99)
+        exponent =3D 63.99;
+
+    exponent /=3D 64;
+    result =3D 0;
+    for (i =3D 11; i &gt;=3D 0; --i) {
+        exponent *=3D 2;
+        if (exponent &gt;=3D 1) {
+            result |=3D 1 &lt;&lt; i;
+            exponent -=3D 1;
+        }
+    }
+    return result;
+}
+
+} // namespace WebCore
+
+#endif // CPU(ARM_NEON) &amp;&amp; COMPILER(GCC)
</ins></span></pre></div>
<a id=3D"trunkSourceWebCoreplatformgraphicscpuarmfiltersFELightingNEONhfr=
omrev134766trunkSourceWebCoreplatformgraphicsfiltersarmFELightingNEONh"><=
/a>
<div class=3D"copfile"><h4>Copied: trunk/Source/WebCore/platform/graphics=
/cpu/arm/filters/FELightingNEON.h (from rev 134766, trunk/Source/WebCore/=
platform/graphics/filters/arm/FELightingNEON.h) (0 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/platform/graphics/cpu/arm/f=
ilters/FELightingNEON.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/cpu/arm/filters/FELightingNEON=
.h	2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -0,0 +1,201 @@
</span><ins>+/*
+ * Copyright (C) 2011 University of Szeged
+ * Copyright (C) 2011 Zoltan Herczeg
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in th=
e
+ *    documentation and/or other materials provided with the distributio=
n.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FELightingNEON_h
+#define FELightingNEON_h
+
+#if CPU(ARM_NEON) &amp;&amp; CPU(ARM_TRADITIONAL) &amp;&amp; COMPILER(GC=
C)
+
+#include &quot;FELighting.h&quot;
+#include &lt;wtf/Alignment.h&gt;
+#include &lt;wtf/ParallelJobs.h&gt;
+
+namespace WebCore {
+
+// Otherwise: Distant Light.
+#define FLAG_POINT_LIGHT                 0x01
+#define FLAG_SPOT_LIGHT                  0x02
+#define FLAG_CONE_EXPONENT_IS_1          0x04
+
+// Otherwise: Diffuse light.
+#define FLAG_SPECULAR_LIGHT              0x10
+#define FLAG_DIFFUSE_CONST_IS_1          0x20
+#define FLAG_SPECULAR_EXPONENT_IS_1      0x40
+
+// Must be aligned to 16 bytes.
+struct FELightingFloatArgumentsForNeon {
+    float surfaceScale;
+    float minusSurfaceScaleDividedByFour;
+    float diffuseConstant;
+    float padding1;
+
+    float coneCutOffLimit;
+    float coneFullLight;
+    float coneCutOffRange;
+    float constOne;
+
+    float lightX;
+    float lightY;
+    float lightZ;
+    float padding2;
+
+    float directionX;
+    float directionY;
+    float directionZ;
+    float padding3;
+
+    float colorRed;
+    float colorGreen;
+    float colorBlue;
+    float padding4;
+};
+
+struct FELightingPaintingDataForNeon {
+    unsigned char* pixels;
+    float yStart;
+    int widthDecreasedByTwo;
+    int absoluteHeight;
+    // Combination of FLAG constants above.
+    int flags;
+    int specularExponent;
+    int coneExponent;
+    FELightingFloatArgumentsForNeon* floatArguments;
+    short* paintingConstants;
+};
+
+short* feLightingConstantsForNeon();
+
+extern &quot;C&quot; {
+void neonDrawLighting(FELightingPaintingDataForNeon*);
+}
+
+inline void FELighting::platformApplyNeon(LightingData&amp; data, LightS=
ource::PaintingData&amp; paintingData)
+{
+    WTF_ALIGNED(FELightingFloatArgumentsForNeon, floatArguments, 16);
+
+    FELightingPaintingDataForNeon neonData =3D {
+        data.pixels-&gt;data(),
+        1,
+        data.widthDecreasedByOne - 1,
+        data.heightDecreasedByOne - 1,
+        0,
+        0,
+        0,
+        &amp;floatArguments,
+        feLightingConstantsForNeon()
+    };
+
+    // Set light source arguments.
+    floatArguments.constOne =3D 1;
+
+    floatArguments.colorRed =3D m_lightingColor.red();
+    floatArguments.colorGreen =3D m_lightingColor.green();
+    floatArguments.colorBlue =3D m_lightingColor.blue();
+    floatArguments.padding4 =3D 0;
+
+    if (m_lightSource-&gt;type() =3D=3D LS_POINT) {
+        neonData.flags |=3D FLAG_POINT_LIGHT;
+        PointLightSource* pointLightSource =3D static_cast&lt;PointLight=
Source*&gt;(m_lightSource.get());
+        floatArguments.lightX =3D pointLightSource-&gt;position().x();
+        floatArguments.lightY =3D pointLightSource-&gt;position().y();
+        floatArguments.lightZ =3D pointLightSource-&gt;position().z();
+        floatArguments.padding2 =3D 0;
+    } else if (m_lightSource-&gt;type() =3D=3D LS_SPOT) {
+        neonData.flags |=3D FLAG_SPOT_LIGHT;
+        SpotLightSource* spotLightSource =3D static_cast&lt;SpotLightSou=
rce*&gt;(m_lightSource.get());
+        floatArguments.lightX =3D spotLightSource-&gt;position().x();
+        floatArguments.lightY =3D spotLightSource-&gt;position().y();
+        floatArguments.lightZ =3D spotLightSource-&gt;position().z();
+        floatArguments.padding2 =3D 0;
+
+        floatArguments.directionX =3D paintingData.directionVector.x();
+        floatArguments.directionY =3D paintingData.directionVector.y();
+        floatArguments.directionZ =3D paintingData.directionVector.z();
+        floatArguments.padding3 =3D 0;
+
+        floatArguments.coneCutOffLimit =3D paintingData.coneCutOffLimit;
+        floatArguments.coneFullLight =3D paintingData.coneFullLight;
+        floatArguments.coneCutOffRange =3D paintingData.coneCutOffLimit =
- paintingData.coneFullLight;
+        neonData.coneExponent =3D getPowerCoefficients(spotLightSource-&=
gt;specularExponent());
+        if (spotLightSource-&gt;specularExponent() =3D=3D 1)
+            neonData.flags |=3D FLAG_CONE_EXPONENT_IS_1;
+    } else {
+        ASSERT(m_lightSource-&gt;type() =3D=3D LS_DISTANT);
+        floatArguments.lightX =3D paintingData.lightVector.x();
+        floatArguments.lightY =3D paintingData.lightVector.y();
+        floatArguments.lightZ =3D paintingData.lightVector.z();
+        floatArguments.padding2 =3D 1;
+    }
+
+    // Set lighting arguments.
+    floatArguments.surfaceScale =3D data.surfaceScale;
+    floatArguments.minusSurfaceScaleDividedByFour =3D -data.surfaceScale=
 / 4;
+    if (m_lightingType =3D=3D FELighting::DiffuseLighting)
+        floatArguments.diffuseConstant =3D m_diffuseConstant;
+    else {
+        neonData.flags |=3D FLAG_SPECULAR_LIGHT;
+        floatArguments.diffuseConstant =3D m_specularConstant;
+        neonData.specularExponent =3D getPowerCoefficients(m_specularExp=
onent);
+        if (m_specularExponent =3D=3D 1)
+            neonData.flags |=3D FLAG_SPECULAR_EXPONENT_IS_1;
+    }
+    if (floatArguments.diffuseConstant =3D=3D 1)
+        neonData.flags |=3D FLAG_DIFFUSE_CONST_IS_1;
+
+    int optimalThreadNumber =3D ((data.widthDecreasedByOne - 1) * (data.=
heightDecreasedByOne - 1)) / s_minimalRectDimension;
+    if (optimalThreadNumber &gt; 1) {
+        // Initialize parallel jobs
+        ParallelJobs&lt;FELightingPaintingDataForNeon&gt; parallelJobs(&=
amp;WebCore::FELighting::platformApplyNeonWorker, optimalThreadNumber);
+
+        // Fill the parameter array
+        int job =3D parallelJobs.numberOfJobs();
+        if (job &gt; 1) {
+            int yStart =3D 1;
+            int yStep =3D (data.heightDecreasedByOne - 1) / job;
+            for (--job; job &gt;=3D 0; --job) {
+                FELightingPaintingDataForNeon&amp; params =3D parallelJo=
bs.parameter(job);
+                params =3D neonData;
+                params.yStart =3D yStart;
+                params.pixels +=3D (yStart - 1) * (data.widthDecreasedBy=
One + 1) * 4;
+                if (job &gt; 0) {
+                    params.absoluteHeight =3D yStep;
+                    yStart +=3D yStep;
+                } else
+                    params.absoluteHeight =3D data.heightDecreasedByOne =
- yStart;
+            }
+            parallelJobs.execute();
+            return;
+        }
+    }
+
+    neonDrawLighting(&amp;neonData);
+}
+
+} // namespace WebCore
+
+#endif // CPU(ARM_NEON) &amp;&amp; COMPILER(GCC)
+
+#endif // FELightingNEON_h
</ins></span></pre></div>
<a id=3D"trunkSourceWebCoreplatformgraphicscpuarmfiltersNEONHelpershfromr=
ev134766trunkSourceWebCoreplatformgraphicsfiltersarmNEONHelpersh"></a>
<div class=3D"copfile"><h4>Copied: trunk/Source/WebCore/platform/graphics=
/cpu/arm/filters/NEONHelpers.h (from rev 134766, trunk/Source/WebCore/pla=
tform/graphics/filters/arm/NEONHelpers.h) (0 =3D> 134767)</h4>
<pre class=3D"diff"><span>
<span class=3D"info">--- trunk/Source/WebCore/platform/graphics/cpu/arm/f=
ilters/NEONHelpers.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/cpu/arm/filters/NEONHelpers.h	=
2012-11-15 13:42:28 UTC (rev 134767)
</span><span class=3D"lines">@@ -0,0 +1,57 @@
</span><ins>+/*
+ * Copyright (C) 2012 University of Szeged
+ * Copyright (C) 2012 Gabor Rapcsanyi
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in th=
e
+ *    documentation and/or other materials provided with the distributio=
n.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef NEONHelpers_h
+#define NEONHelpers_h
+
+#include &lt;wtf/Platform.h&gt;
+
+#if ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#include &lt;arm_neon.h&gt;
+
+namespace WebCore {
+
+inline float32x4_t loadRGBA8AsFloat(uint32_t* source)
+{
+    uint32x2_t temporary1 =3D {0, 0};
+    temporary1 =3D vset_lane_u32(*source, temporary1, 0);
+    uint16x4_t temporary2 =3D vget_low_u16(vmovl_u8(vreinterpret_u8_u32(=
temporary1)));
+    return vcvtq_f32_u32(vmovl_u16(temporary2));
+}
+
+inline void storeFloatAsRGBA8(float32x4_t data, uint32_t* destination)
+{
+    uint16x4_t temporary1 =3D vmovn_u32(vcvtq_u32_f32(data));
+    uint8x8_t temporary2 =3D vmovn_u16(vcombine_u16(temporary1, temporar=
y1));
+    *destination =3D vget_lane_u32(vreinterpret_u32_u8(temporary2), 0);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(FILTERS) &amp;&amp; HAVE(ARM_NEON_INTRINSICS)
+
+#endif // NEONHelpers_h
</ins></span></pre>
</div>
</div>

</body>
</html>


More information about the webkit-changes mailing list