1 /*************************************************************************** 2 * Copyright (c) 2010, Code Aurora Forum. All rights reserved. 3 * Copyright 2006-2010, The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 ***************************************************************************/ 8 9 /* Changes: 10 * 2011-04-01 ARM 11 * Merged the functions from src/opts/opts_check_arm_neon.cpp 12 * Modified to return ARM version of memset16 and memset32 if no neon 13 * available in the core 14 */ 15 16 #include "SkBlitRow.h" 17 #include "SkUtils.h" 18 19 #include "SkUtilsArm.h" 20 21 #if defined(SK_CPU_LENDIAN) && !SK_ARM_NEON_IS_NONE 22 extern "C" void memset16_neon(uint16_t dst[], uint16_t value, int count); 23 extern "C" void memset32_neon(uint32_t dst[], uint32_t value, int count); 24 #endif 25 26 #if defined(SK_CPU_LENDIAN) 27 extern "C" void arm_memset16(uint16_t* dst, uint16_t value, int count); 28 extern "C" void arm_memset32(uint32_t* dst, uint32_t value, int count); 29 #endif 30 31 SkMemset16Proc SkMemset16GetPlatformProc() { 32 // FIXME: memset.arm.S is using syntax incompatible with XCode 33 #if !defined(SK_CPU_LENDIAN) || defined(SK_BUILD_FOR_IOS) 34 return NULL; 35 #elif SK_ARM_NEON_IS_DYNAMIC 36 if (sk_cpu_arm_has_neon()) { 37 return memset16_neon; 38 } else { 39 return arm_memset16; 40 } 41 #elif SK_ARM_NEON_IS_ALWAYS 42 return memset16_neon; 43 #else 44 return arm_memset16; 45 #endif 46 } 47 48 SkMemset32Proc SkMemset32GetPlatformProc() { 49 // FIXME: memset.arm.S is using syntax incompatible with XCode 50 #if !defined(SK_CPU_LENDIAN) || defined(SK_BUILD_FOR_IOS) 51 return NULL; 52 #elif SK_ARM_NEON_IS_DYNAMIC 53 if (sk_cpu_arm_has_neon()) { 54 return memset32_neon; 55 } else { 56 return arm_memset32; 57 } 58 #elif SK_ARM_NEON_IS_ALWAYS 59 return memset32_neon; 60 #else 61 return arm_memset32; 62 #endif 63 } 64 65 SkBlitRow::ColorRectProc PlatformColorRectProcFactory() { 66 return NULL; 67 } 68