Remove ARM assembly memsets.
authormtklein <mtklein@chromium.org>
Thu, 9 Apr 2015 16:16:28 +0000 (09:16 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 9 Apr 2015 16:16:28 +0000 (09:16 -0700)
Step 1 of a zillion in the quest for NEON on iOS,
and step 1 of a different zillion in the Great Assembly Purge.

ios, arm, arm64, arm_v7, arm_v7_neon all build.

BUG=skia:

Review URL: https://codereview.chromium.org/1072063002

gyp/opts.gyp
gyp/opts.gypi
src/opts/SkUtils_opts_arm.cpp
src/opts/memset.arm.S [deleted file]

index a60505e556145f5540f6c6a587f5f7b748cb4c61..2e08664dd2bb842e6d1a92b7bce9955f3553f3f7 100644 (file)
@@ -69,7 +69,6 @@
             [ 'skia_os == "ios"', {
               'sources!': [
                 # these fail to compile under xcode for ios
-                '../src/opts/memset.arm.S',
                 '../src/opts/SkBitmapProcState_opts_arm.cpp',
                 '../src/opts/SkBlitRow_opts_arm.cpp',
               ],
index 90dc408ed379515690a9efde82a835d15b8bc9b0..96283874b0a79c8a82eacc20d0f1de3afc2d3f91 100644 (file)
@@ -23,7 +23,6 @@
             '<(skia_src_path)/opts/SkTextureCompression_opts_arm.cpp',
             '<(skia_src_path)/opts/SkUtils_opts_arm.cpp',
             '<(skia_src_path)/opts/SkXfermode_opts_arm.cpp',
-            '<(skia_src_path)/opts/memset.arm.S',
         ],
         'neon_sources': [
             '<(skia_src_path)/opts/SkBitmapProcState_arm_neon.cpp',
index b1c9d0aa93e188d2bad85c03fa31a3ba97f3d51f..b3a652e74535f35fe08c906abdaf12f49b49ff0d 100644 (file)
@@ -8,47 +8,26 @@
 #include "SkUtils.h"
 #include "SkUtilsArm.h"
 
-#if defined(SK_CPU_LENDIAN) && !SK_ARM_NEON_IS_NONE
 extern "C" void memset16_neon(uint16_t dst[], uint16_t value, int count);
 extern "C" void memset32_neon(uint32_t dst[], uint32_t value, int count);
-#endif
-
-#if defined(SK_CPU_LENDIAN)
-extern "C" void arm_memset16(uint16_t* dst, uint16_t value, int count);
-extern "C" void arm_memset32(uint32_t* dst, uint32_t value, int count);
-#endif
 
 SkMemset16Proc SkMemset16GetPlatformProc() {
-    // FIXME: memset.arm.S is using syntax incompatible with XCode
-#if !defined(SK_CPU_LENDIAN) || defined(SK_BUILD_FOR_IOS)
-    return NULL;
-#elif SK_ARM_NEON_IS_DYNAMIC
-    if (sk_cpu_arm_has_neon()) {
-        return memset16_neon;
-    } else {
-        return arm_memset16;
-    }
-#elif SK_ARM_NEON_IS_ALWAYS
+#if SK_ARM_NEON_IS_ALWAYS
     return memset16_neon;
+#elif SK_ARM_NEON_IS_DYNAMIC
+    return sk_cpu_arm_has_neon() ? memset16_neon : nullptr;
 #else
-    return arm_memset16;
+    return nullptr;
 #endif
 }
 
 SkMemset32Proc SkMemset32GetPlatformProc() {
-    // FIXME: memset.arm.S is using syntax incompatible with XCode
-#if !defined(SK_CPU_LENDIAN) || defined(SK_BUILD_FOR_IOS)
-    return NULL;
-#elif SK_ARM_NEON_IS_DYNAMIC
-    if (sk_cpu_arm_has_neon()) {
-        return memset32_neon;
-    } else {
-        return arm_memset32;
-    }
-#elif SK_ARM_NEON_IS_ALWAYS
+#if SK_ARM_NEON_IS_ALWAYS
     return memset32_neon;
+#elif SK_ARM_NEON_IS_DYNAMIC
+    return sk_cpu_arm_has_neon() ? memset32_neon : nullptr;
 #else
-    return arm_memset32;
+    return nullptr;
 #endif
 }
 
diff --git a/src/opts/memset.arm.S b/src/opts/memset.arm.S
deleted file mode 100644 (file)
index 8c82f74..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2010 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Changes:
- * 2010-08-11 Steve McIntyre <steve.mcintyre@arm.com>
- *    Added small changes to the two functions to make them work on the
- *    specified number of 16- or 32-bit values rather than the original
- *    code which was specified as a count of bytes. More verbose comments
- *    to aid future maintenance.
- */
-
-    .text
-    .align 4
-    .syntax unified
-
-    .global arm_memset32
-    .hidden arm_memset32
-    .type   arm_memset32, %function
-    .global arm_memset16
-    .hidden arm_memset16
-    .type   arm_memset16, %function
-
-/*
- * Optimized memset functions for ARM.
- *
- * void arm_memset16(uint16_t* dst, uint16_t value, int count);
- * void arm_memset32(uint32_t* dst, uint32_t value, int count);
- *
- */
-arm_memset16:
-        .fnstart
-        push        {lr}
-
-        /* if count is equal to zero then abort */
-        teq         r2, #0
-        ble         .Lfinish
-
-        /* Multiply count by 2 - go from the number of 16-bit shorts
-         * to the number of bytes desired. */
-        mov         r2, r2, lsl #1
-
-        /* expand the data to 32 bits */
-        orr         r1, r1, r1, lsl #16
-
-        /* align to 32 bits */
-        tst         r0, #2
-        strhne      r1, [r0], #2
-        subne       r2, r2, #2
-
-        /* Now jump into the main loop below. */
-        b           .Lwork_32
-        .fnend
-
-arm_memset32:
-        .fnstart
-        push        {lr}
-
-        /* if count is equal to zero then abort */
-        teq         r2, #0
-        ble         .Lfinish
-
-        /* Multiply count by 4 - go from the number of 32-bit words to
-         * the number of bytes desired. */
-        mov         r2, r2, lsl #2
-
-.Lwork_32:
-        /* Set up registers ready for writing them out. */
-        mov         ip, r1
-        mov         lr, r1
-
-        /* Try to align the destination to a cache line. Assume 32
-         * byte (8 word) cache lines, it's the common case. */
-        rsb         r3, r0, #0
-        ands        r3, r3, #0x1C
-        beq         .Laligned32
-        cmp         r3, r2
-        andhi       r3, r2, #0x1C
-        sub         r2, r2, r3
-
-        /* (Optionally) write any unaligned leading bytes.
-         * (0-28 bytes, length in r3) */
-        movs        r3, r3, lsl #28
-        stmiacs     r0!, {r1, lr}
-        stmiacs     r0!, {r1, lr}
-        stmiami     r0!, {r1, lr}
-        movs        r3, r3, lsl #2
-        strcs       r1, [r0], #4
-
-        /* Now quickly loop through the cache-aligned data. */
-.Laligned32:
-        mov         r3, r1
-1:      subs        r2, r2, #32
-        stmiahs     r0!, {r1,r3,ip,lr}
-        stmiahs     r0!, {r1,r3,ip,lr}
-        bhs         1b
-        add         r2, r2, #32
-
-        /* (Optionally) store any remaining trailing bytes.
-         * (0-30 bytes, length in r2) */
-        movs        r2, r2, lsl #28
-        stmiacs     r0!, {r1,r3,ip,lr}
-        stmiami     r0!, {r1,lr}
-        movs        r2, r2, lsl #2
-        strcs       r1, [r0], #4
-        strhmi      lr, [r0], #2
-
-.Lfinish:
-        pop         {pc}
-        .fnend