merge in jb-release history after reset to jb-dev
diff --git a/Android.mk b/Android.mk
index 2aca0da..3285f93 100644
--- a/Android.mk
+++ b/Android.mk
@@ -147,6 +147,10 @@
# installed.
LOCAL_REQUIRED_MODULES := libclcore.bc libbcc.so.sha1
+ifeq ($(ARCH_ARM_HAVE_NEON),true)
+LOCAL_REQUIRED_MODULES += libclcore_neon.bc
+endif
+
# Link-Time Optimization on libbcc.so
#
# -Wl,--exclude-libs=ALL only applies to library archives. It would hide most
diff --git a/lib/ExecutionEngine/Compiler.cpp b/lib/ExecutionEngine/Compiler.cpp
index 58a49c5..cf18ef6 100644
--- a/lib/ExecutionEngine/Compiler.cpp
+++ b/lib/ExecutionEngine/Compiler.cpp
@@ -186,19 +186,13 @@
# endif
# endif
-# if defined(ARCH_ARM_HAVE_NEON)
+# if defined(ARCH_ARM_HAVE_NEON) && !defined(DISABLE_ARCH_ARM_HAVE_NEON)
Features.push_back("+neon");
Features.push_back("+neonfp");
# else
Features.push_back("-neon");
Features.push_back("-neonfp");
# endif
-
-// FIXME(all): Turn NEON back on after debugging the rebase.
-# if 1 || defined(DISABLE_ARCH_ARM_HAVE_NEON)
- Features.push_back("-neon");
- Features.push_back("-neonfp");
-# endif
}
// Register the scheduler
@@ -252,6 +246,8 @@
llvm::TargetData *TD = NULL;
llvm::TargetMachine *TM = NULL;
+ std::vector<std::string> ExtraFeatures;
+
std::string FeaturesStr;
if (mModule == NULL) // No module was loaded
@@ -305,12 +301,12 @@
#if defined(ARCH_ARM_HAVE_NEON)
// Full-precision means we have to disable NEON
if (ME.getRSFloatPrecision() == bcinfo::RS_FP_Full) {
- Features.push_back("-neon");
- Features.push_back("-neonfp");
+ ExtraFeatures.push_back("-neon");
+ ExtraFeatures.push_back("-neonfp");
}
#endif
- if (!CPU.empty() || !Features.empty()) {
+ if (!CPU.empty() || !Features.empty() || !ExtraFeatures.empty()) {
llvm::SubtargetFeatures F;
for (std::vector<std::string>::const_iterator
@@ -318,6 +314,11 @@
F.AddFeature(*I);
}
+ for (std::vector<std::string>::const_iterator
+ I = ExtraFeatures.begin(), E = ExtraFeatures.end(); I != E; I++) {
+ F.AddFeature(*I);
+ }
+
FeaturesStr = F.getString();
}
diff --git a/lib/ScriptCRT/Android.mk b/lib/ScriptCRT/Android.mk
index d439181..f8b6d80 100644
--- a/lib/ScriptCRT/Android.mk
+++ b/lib/ScriptCRT/Android.mk
@@ -16,10 +16,27 @@
LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclcore.bc
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+# C/LLVM-IR source files for the library
+clcore_base_files := \
+ rs_allocation.c \
+ rs_cl.c \
+ rs_core.c \
+ rs_element.c \
+ rs_mesh.c \
+ rs_program.c \
+ rs_sample.c \
+ rs_sampler.c \
+ convert.ll \
+ matrix.ll \
+ pixel_packing.ll
+
+clcore_files := \
+ $(clcore_base_files) \
+ clamp.c
+
+clcore_neon_files := \
+ $(clcore_base_files) \
+ neon/clamp.ll
ifeq "REL" "$(PLATFORM_VERSION_CODENAME)"
RS_VERSION := $(PLATFORM_SDK_VERSION)
@@ -30,56 +47,22 @@
RS_VERSION := "(1 + $(PLATFORM_SDK_VERSION))"
endif
-# C source files for the library
-clcore_c_files := \
- clamp.c \
- rs_allocation.c \
- rs_cl.c \
- rs_core.c \
- rs_element.c \
- rs_mesh.c \
- rs_program.c \
- rs_sample.c \
- rs_sampler.c
+# Build the base version of the library
+include $(CLEAR_VARS)
+LOCAL_MODULE := libclcore.bc
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_SRC_FILES := $(clcore_files)
-# Hand-written bitcode for the library
-clcore_ll_files := \
- convert.ll \
- matrix.ll \
- pixel_packing.ll
+include $(LOCAL_PATH)/build_bc_lib.mk
-include $(BUILD_SYSTEM)/base_rules.mk
+# Build a NEON-enabled version of the library (if possible)
+ifeq ($(ARCH_ARM_HAVE_NEON),true)
+include $(CLEAR_VARS)
+LOCAL_MODULE := libclcore_neon.bc
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_SRC_FILES := $(clcore_neon_files)
-clcore_CLANG := $(HOST_OUT_EXECUTABLES)/clang$(HOST_EXECUTABLE_SUFFIX)
-clcore_LLVM_LINK := $(HOST_OUT_EXECUTABLES)/llvm-link$(HOST_EXECUTABLE_SUFFIX)
-clcore_LLVM_LD := $(HOST_OUT_EXECUTABLES)/llvm-ld$(HOST_EXECUTABLE_SUFFIX)
-clcore_LLVM_AS := $(HOST_OUT_EXECUTABLES)/llvm-as$(HOST_EXECUTABLE_SUFFIX)
-clcore_LLVM_DIS := $(HOST_OUT_EXECUTABLES)/llvm-dis$(HOST_EXECUTABLE_SUFFIX)
-
-clcore_c_bc_files := $(patsubst %.c,%.bc, \
- $(addprefix $(intermediates)/, $(clcore_c_files)))
-
-clcore_ll_bc_files := $(patsubst %.ll,%.bc, \
- $(addprefix $(intermediates)/, $(clcore_ll_files)))
-
-$(clcore_c_bc_files): PRIVATE_INCLUDES := \
- frameworks/rs/scriptc \
- external/clang/lib/Headers
-
-$(clcore_c_bc_files): $(intermediates)/%.bc: $(LOCAL_PATH)/%.c $(clcore_CLANG)
- @mkdir -p $(dir $@)
- $(hide) $(clcore_CLANG) $(addprefix -I, $(PRIVATE_INCLUDES)) -MD -DRS_VERSION=$(RS_VERSION) -std=c99 -c -O3 -fno-builtin -emit-llvm -ccc-host-triple armv7-none-linux-gnueabi -fsigned-char $< -o $@
-
-$(clcore_ll_bc_files): $(intermediates)/%.bc: $(LOCAL_PATH)/%.ll $(clcore_LLVM_AS)
- @mkdir -p $(dir $@)
- $(hide) $(clcore_LLVM_AS) $< -o $@
-
--include $(clcore_c_bc_files:%.bc=%.d)
--include $(clcore_ll_bc_files:%.bc=%.d)
-
-$(LOCAL_BUILT_MODULE): PRIVATE_BC_FILES := $(clcore_c_bc_files) $(clcore_ll_bc_files)
-$(LOCAL_BUILT_MODULE): $(clcore_c_bc_files) $(clcore_ll_bc_files)
-$(LOCAL_BUILT_MODULE): $(clcore_LLVM_LINK) $(clcore_LLVM_LD)
-$(LOCAL_BUILT_MODULE): $(clcore_LLVM_AS) $(clcore_LLVM_DIS)
- @mkdir -p $(dir $@)
- $(hide) $(clcore_LLVM_LINK) $(PRIVATE_BC_FILES) -o $@
+include $(LOCAL_PATH)/build_bc_lib.mk
+endif
diff --git a/lib/ScriptCRT/build_bc_lib.mk b/lib/ScriptCRT/build_bc_lib.mk
new file mode 100644
index 0000000..fd5bc9c
--- /dev/null
+++ b/lib/ScriptCRT/build_bc_lib.mk
@@ -0,0 +1,58 @@
+#
+# Copyright (C) 2012 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.
+#
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+bc_cflags := -MD \
+ -DRS_VERSION=$(RS_VERSION) \
+ -std=c99 \
+ -c \
+ -O3 \
+ -fno-builtin \
+ -emit-llvm \
+ -ccc-host-triple armv7-none-linux-gnueabi \
+ -fsigned-char
+
+c_sources := $(filter %.c,$(LOCAL_SRC_FILES))
+ll_sources := $(filter %.ll,$(LOCAL_SRC_FILES))
+
+c_bc_files := $(patsubst %.c,%.bc, \
+ $(addprefix $(intermediates)/, $(c_sources)))
+
+ll_bc_files := $(patsubst %.ll,%.bc, \
+ $(addprefix $(intermediates)/, $(ll_sources)))
+
+$(c_bc_files): PRIVATE_INCLUDES := \
+ frameworks/rs/scriptc \
+ external/clang/lib/Headers
+
+$(c_bc_files): $(intermediates)/%.bc: $(LOCAL_PATH)/%.c $(CLANG)
+ @mkdir -p $(dir $@)
+ $(hide) $(CLANG) $(addprefix -I, $(PRIVATE_INCLUDES)) $(bc_cflags) $< -o $@
+
+$(ll_bc_files): $(intermediates)/%.bc: $(LOCAL_PATH)/%.ll $(LLVM_AS)
+ @mkdir -p $(dir $@)
+ $(hide) $(LLVM_AS) $< -o $@
+
+-include $(c_bc_files:%.bc=%.d)
+-include $(ll_bc_files:%.bc=%.d)
+
+$(LOCAL_BUILT_MODULE): PRIVATE_BC_FILES := $(c_bc_files) $(ll_bc_files)
+$(LOCAL_BUILT_MODULE): $(c_bc_files) $(ll_bc_files)
+$(LOCAL_BUILT_MODULE): $(LLVM_LINK) $(clcore_LLVM_LD)
+$(LOCAL_BUILT_MODULE): $(LLVM_AS)
+ @mkdir -p $(dir $@)
+ $(hide) $(LLVM_LINK) $(PRIVATE_BC_FILES) -o $@