From 57c928aaba5588e5c51ebde9aaf66b9a77ea95b4 Mon Sep 17 00:00:00 2001 From: Anton Konovalov Date: Mon, 19 May 2014 16:38:40 +0700 Subject: [PATCH] Add support for x86 to hello-neon sample The sample hello-neon was updated to support x86 ABI. This change is required: https://android-review.googlesource.com/107511 Change-Id: Icc175afd6785cf454d168973582d7d85455624b5 Signed-off-by: Anton Konovalov Signed-off-by: Pavel Chupin --- ndk/samples/hello-neon/jni/Android.mk | 5 ++++- ndk/samples/hello-neon/jni/Application.mk | 3 +-- ndk/samples/hello-neon/jni/helloneon.c | 18 +++++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ndk/samples/hello-neon/jni/Android.mk b/ndk/samples/hello-neon/jni/Android.mk index 685b01b31..eeaae966f 100644 --- a/ndk/samples/hello-neon/jni/Android.mk +++ b/ndk/samples/hello-neon/jni/Android.mk @@ -6,8 +6,11 @@ LOCAL_MODULE := helloneon 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 +ifeq ($(TARGET_ARCH_ABI),x86) + LOCAL_CFLAGS += -mssse3 +endif LOCAL_SRC_FILES += helloneon-intrinsics.c.neon endif diff --git a/ndk/samples/hello-neon/jni/Application.mk b/ndk/samples/hello-neon/jni/Application.mk index 6e8154b91..7985a6898 100644 --- a/ndk/samples/hello-neon/jni/Application.mk +++ b/ndk/samples/hello-neon/jni/Application.mk @@ -1,2 +1 @@ -# Build both ARMv5TE and ARMv7-A machine code. -APP_ABI := armeabi armeabi-v7a arm64-v8a +APP_ABI := armeabi armeabi-v7a arm64-v8a x86 diff --git a/ndk/samples/hello-neon/jni/helloneon.c b/ndk/samples/hello-neon/jni/helloneon.c index ee19e0873..6d22c14bf 100644 --- a/ndk/samples/hello-neon/jni/helloneon.c +++ b/ndk/samples/hello-neon/jni/helloneon.c @@ -81,6 +81,7 @@ Java_com_example_neon_HelloNeon_stringFromJNI( JNIEnv* env, jobject thiz ) { char* str; + AndroidCpuFamily family; uint64_t features; char buffer[512]; char tryNeon = 0; @@ -112,20 +113,27 @@ Java_com_example_neon_HelloNeon_stringFromJNI( JNIEnv* env, strlcat(buffer, "Neon version : ", sizeof buffer); - if (android_getCpuFamily() != ANDROID_CPU_FAMILY_ARM) { - strlcat(buffer, "Not an ARM CPU !\n", sizeof buffer); + family = android_getCpuFamily(); + 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; } features = android_getCpuFeatures(); - if ((features & ANDROID_CPU_ARM_FEATURE_ARMv7) == 0) { - strlcat(buffer, "Not an ARMv7 CPU !\n", sizeof buffer); + if (((features & ANDROID_CPU_ARM_FEATURE_ARMv7) == 0) && + ((features & ANDROID_CPU_X86_FEATURE_SSSE3) == 0)) + { + strlcat(buffer, "Not an ARMv7 and not an X86 SSSE3 CPU !\n", sizeof buffer); goto EXIT; } /* HAVE_NEON is defined in Android.mk ! */ #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); goto EXIT; }