aboutsummaryrefslogtreecommitdiffstats
path: root/src/opts/opts_check_arm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/opts/opts_check_arm.cpp')
-rw-r--r--src/opts/opts_check_arm.cpp72
1 files changed, 52 insertions, 20 deletions
diff --git a/src/opts/opts_check_arm.cpp b/src/opts/opts_check_arm.cpp
index 079e80f..4fcea2d 100644
--- a/src/opts/opts_check_arm.cpp
+++ b/src/opts/opts_check_arm.cpp
@@ -1,31 +1,63 @@
-/*
- **
- ** Copyright 2006-2010, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
+/***************************************************************************
+ Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+ Copyright 2006-2010, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you
+ may not use this file except in compliance with the License. You may
+ obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ permissions and limitations under the License.
+ ***************************************************************************/
+
+/* Changes:
+ * 2011-04-01 ARM
+ * Merged the functions from src/opts/opts_check_arm_neon.cpp
+ * Modified to return ARM version of memset16 and memset32 if no neon
+ * available in the core
*/
#include "SkUtils.h"
-extern "C" {
- void arm_memset16(uint16_t* dst, uint16_t value, int count);
- void arm_memset32(uint32_t* dst, uint32_t value, int count);
+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);
+
+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);
+
+static inline bool hasNeonRegisters() {
+#if defined(__ARM_HAVE_NEON) && defined(SK_CPU_LENDIAN)
+ return true;
+#else
+ return false;
+#endif
}
SkMemset16Proc SkMemset16GetPlatformProc() {
- return arm_memset16;
+ if (hasNeonRegisters()) {
+ return memset16_neon;
+ } else {
+#if defined(SK_CPU_LENDIAN)
+ return arm_memset16;
+#else
+ return NULL;
+#endif
+ }
}
SkMemset32Proc SkMemset32GetPlatformProc() {
- return arm_memset32;
+ if (hasNeonRegisters()) {
+ return memset32_neon;
+ } else {
+#if defined(SK_CPU_LENDIAN)
+ return arm_memset32;
+#else
+ return NULL;
+#endif
+ }
}