Merge "Add support for x86 to hello-neon sample"

This commit is contained in:
Andrew Hsieh
2014-09-15 17:43:18 +00:00
committed by Gerrit Code Review
3 changed files with 18 additions and 8 deletions

View File

@@ -6,8 +6,11 @@ LOCAL_MODULE := helloneon
LOCAL_SRC_FILES := helloneon.c LOCAL_SRC_FILES := helloneon.c
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) ifeq ($(TARGET_ARCH_ABI),$(filter $(TARGET_ARCH_ABI), armeabi-v7a x86))
LOCAL_CFLAGS := -DHAVE_NEON=1 LOCAL_CFLAGS := -DHAVE_NEON=1
ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_CFLAGS += -mssse3
endif
LOCAL_SRC_FILES += helloneon-intrinsics.c.neon LOCAL_SRC_FILES += helloneon-intrinsics.c.neon
endif endif

View File

@@ -1,2 +1 @@
# Build both ARMv5TE and ARMv7-A machine code. APP_ABI := armeabi armeabi-v7a arm64-v8a x86
APP_ABI := armeabi armeabi-v7a arm64-v8a

View File

@@ -81,6 +81,7 @@ Java_com_example_neon_HelloNeon_stringFromJNI( JNIEnv* env,
jobject thiz ) jobject thiz )
{ {
char* str; char* str;
AndroidCpuFamily family;
uint64_t features; uint64_t features;
char buffer[512]; char buffer[512];
char tryNeon = 0; char tryNeon = 0;
@@ -112,20 +113,27 @@ Java_com_example_neon_HelloNeon_stringFromJNI( JNIEnv* env,
strlcat(buffer, "Neon version : ", sizeof buffer); strlcat(buffer, "Neon version : ", sizeof buffer);
if (android_getCpuFamily() != ANDROID_CPU_FAMILY_ARM) { family = android_getCpuFamily();
strlcat(buffer, "Not an ARM CPU !\n", sizeof buffer); if ((family != ANDROID_CPU_FAMILY_ARM) &&
(family != ANDROID_CPU_FAMILY_X86))
{
strlcat(buffer, "Not an ARM and not an X86 CPU !\n", sizeof buffer);
goto EXIT; goto EXIT;
} }
features = android_getCpuFeatures(); features = android_getCpuFeatures();
if ((features & ANDROID_CPU_ARM_FEATURE_ARMv7) == 0) { if (((features & ANDROID_CPU_ARM_FEATURE_ARMv7) == 0) &&
strlcat(buffer, "Not an ARMv7 CPU !\n", sizeof buffer); ((features & ANDROID_CPU_X86_FEATURE_SSSE3) == 0))
{
strlcat(buffer, "Not an ARMv7 and not an X86 SSSE3 CPU !\n", sizeof buffer);
goto EXIT; goto EXIT;
} }
/* HAVE_NEON is defined in Android.mk ! */ /* HAVE_NEON is defined in Android.mk ! */
#ifdef HAVE_NEON #ifdef HAVE_NEON
if ((features & ANDROID_CPU_ARM_FEATURE_NEON) == 0) { if (((features & ANDROID_CPU_ARM_FEATURE_NEON) == 0) &&
((features & ANDROID_CPU_X86_FEATURE_SSSE3) == 0))
{
strlcat(buffer, "CPU doesn't support NEON !\n", sizeof buffer); strlcat(buffer, "CPU doesn't support NEON !\n", sizeof buffer);
goto EXIT; goto EXIT;
} }