diff options
author | 2014-03-28 17:56:14 +0000 | |
---|---|---|
committer | 2014-03-28 17:56:14 +0000 | |
commit | 7a0e27577dddd63e035e3ad8fde71f880d39943e (patch) | |
tree | 588effaadbd4715785ec9d13210ad7a29fd85271 /gyp | |
parent | cb3f07940c11beaf2ccd3bfe76c18994f0cc4154 (diff) |
ARM Skia NEON patches - 35 - First AArch64 support
Aarch64 support
This change contains the necessary modifications to have Skia build and
run properly on an ARMv8 processor in aarch64 execution state.
Here's a list of the changes:
- add an arm64 target to the build system + SK_CPU_ARM64 flag
- MatrixTest was failing when built in Release mode. Fused MAC
instructions were generated which made some intermediate results
more accurate. As the test relies on result comparison, the more
precise results when compared to others led to a gap bigger than
what was tolerated. As I don't know if some actual skia code relies
on results being comparable, I've disabled fused MAC instruction
with -ffp-contract=off for arm64.
- Modify include/core/SkOnce.h to have barriers work.
- SK_CPU_ARM64 implies SK_ARM_NEON_MODE_ALWAYS.
- use existing Xfermode optimisations with modifications that can be
removed in the future when toolchains are ready. Also save a few
instructions is two Xfermodes (will apply to ARM too).
- use existing SkBoxBlur and SkMorphology optimisations.
- use existing SkBlitMask optimisations
- use existing BitmapProcState and Convolution optimisations.
Future changes will include:
- Blitters (only partialy merged upstream)
- SkUtils (there's little value in sending asm optimisations without
having them benchmarked on real hardware).
Signed-off-by: Kevin PETIT <kevin.petit@arm.com>
BUG=skia:
R=djsollen@google.com, reed@google.com, mtklein@google.com, halcanary@google.com
Author: kevin.petit@arm.com
Review URL: https://codereview.chromium.org/143423004
git-svn-id: http://skia.googlecode.com/svn/trunk@13980 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gyp')
-rw-r--r-- | gyp/common_conditions.gypi | 6 | ||||
-rw-r--r-- | gyp/common_variables.gypi | 2 | ||||
-rw-r--r-- | gyp/opts.gyp | 17 |
3 files changed, 24 insertions, 1 deletions
diff --git a/gyp/common_conditions.gypi b/gyp/common_conditions.gypi index 82f63f375b..777473b9cf 100644 --- a/gyp/common_conditions.gypi +++ b/gyp/common_conditions.gypi @@ -8,6 +8,12 @@ 'SK_FORCE_DISTANCEFIELD_FONTS=<(skia_force_distancefield_fonts)', ], 'conditions' : [ + [ 'skia_arch_type == "arm64"', { + 'cflags': [ + '-ffp-contract=off', + ], + }], + [ 'skia_os == "win"', { 'defines': [ diff --git a/gyp/common_variables.gypi b/gyp/common_variables.gypi index 6145d47e01..0d749f4004 100644 --- a/gyp/common_variables.gypi +++ b/gyp/common_variables.gypi @@ -72,7 +72,7 @@ }, { 'skia_poppler_enabled%': 0, }], - [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "mac"]', { + [ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "mac"] or skia_arch_type == "arm64"', { 'skia_arch_width%': 64, }, { 'skia_arch_width%': 32, diff --git a/gyp/opts.gyp b/gyp/opts.gyp index 2fd0e95809..783ea4eb7a 100644 --- a/gyp/opts.gyp +++ b/gyp/opts.gyp @@ -122,6 +122,23 @@ '-mno-apcs-frame', ] }], + [ 'skia_arch_type == "arm64"', { + 'sources': [ + '../src/opts/SkBitmapProcState_arm_neon.cpp', + '../src/opts/SkBitmapProcState_matrixProcs_neon.cpp', + '../src/opts/SkBitmapProcState_opts_arm.cpp', + '../src/opts/SkBlitMask_opts_arm.cpp', + '../src/opts/SkBlitMask_opts_arm_neon.cpp', + '../src/opts/SkBlitRow_opts_none.cpp', + '../src/opts/SkBlurImage_opts_arm.cpp', + '../src/opts/SkBlurImage_opts_neon.cpp', + '../src/opts/SkMorphology_opts_arm.cpp', + '../src/opts/SkMorphology_opts_neon.cpp', + '../src/opts/SkUtils_opts_none.cpp', + '../src/opts/SkXfermode_opts_arm.cpp', + '../src/opts/SkXfermode_opts_arm_neon.cpp', + ], + }], ], }, # For the same lame reasons as what is done for skia_opts, we have to |