Add x86 target support
Change makefiles to allow targeting X86 along with ARM.
Add some #if statements in Runtime.{c,def} to allow targeting X86 along
wtih ARM.
Change-Id: I3b26ade0e2b464ad410d892bfec22897fa7f7009
diff --git a/Android.mk b/Android.mk
index a55d339..07cba90 100644
--- a/Android.mk
+++ b/Android.mk
@@ -62,45 +62,81 @@
LOCAL_MODULE := libbcc
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := \
- $(libbcc_SRC_FILES) \
- runtime/lib/arm/adddf3vfp.S \
- runtime/lib/arm/addsf3vfp.S \
- runtime/lib/arm/divdf3vfp.S \
- runtime/lib/arm/divsf3vfp.S \
- runtime/lib/arm/eqdf2vfp.S \
- runtime/lib/arm/eqsf2vfp.S \
- runtime/lib/arm/extendsfdf2vfp.S \
- runtime/lib/arm/fixdfsivfp.S \
- runtime/lib/arm/fixsfsivfp.S \
- runtime/lib/arm/fixunsdfsivfp.S \
- runtime/lib/arm/fixunssfsivfp.S \
- runtime/lib/arm/floatsidfvfp.S \
- runtime/lib/arm/floatsisfvfp.S \
- runtime/lib/arm/floatunssidfvfp.S \
- runtime/lib/arm/floatunssisfvfp.S \
- runtime/lib/arm/gedf2vfp.S \
- runtime/lib/arm/gesf2vfp.S \
- runtime/lib/arm/gtdf2vfp.S \
- runtime/lib/arm/gtsf2vfp.S \
- runtime/lib/arm/ledf2vfp.S \
- runtime/lib/arm/lesf2vfp.S \
- runtime/lib/arm/ltdf2vfp.S \
- runtime/lib/arm/ltsf2vfp.S \
- runtime/lib/arm/muldf3vfp.S \
- runtime/lib/arm/mulsf3vfp.S \
- runtime/lib/arm/nedf2vfp.S \
- runtime/lib/arm/negdf2vfp.S \
- runtime/lib/arm/negsf2vfp.S \
- runtime/lib/arm/nesf2vfp.S \
- runtime/lib/arm/subdf3vfp.S \
- runtime/lib/arm/subsf3vfp.S \
- runtime/lib/arm/truncdfsf2vfp.S \
- runtime/lib/arm/unorddf2vfp.S \
- runtime/lib/arm/unordsf2vfp.S
+ $(libbcc_SRC_FILES)
-LOCAL_STATIC_LIBRARIES := \
- libLLVMARMCodeGen \
- libLLVMARMInfo \
+ifeq ($(TARGET_ARCH),arm)
+ LOCAL_SRC_FILES += \
+ runtime/lib/arm/adddf3vfp.S \
+ runtime/lib/arm/addsf3vfp.S \
+ runtime/lib/arm/divdf3vfp.S \
+ runtime/lib/arm/divsf3vfp.S \
+ runtime/lib/arm/eqdf2vfp.S \
+ runtime/lib/arm/eqsf2vfp.S \
+ runtime/lib/arm/extendsfdf2vfp.S \
+ runtime/lib/arm/fixdfsivfp.S \
+ runtime/lib/arm/fixsfsivfp.S \
+ runtime/lib/arm/fixunsdfsivfp.S \
+ runtime/lib/arm/fixunssfsivfp.S \
+ runtime/lib/arm/floatsidfvfp.S \
+ runtime/lib/arm/floatsisfvfp.S \
+ runtime/lib/arm/floatunssidfvfp.S \
+ runtime/lib/arm/floatunssisfvfp.S \
+ runtime/lib/arm/gedf2vfp.S \
+ runtime/lib/arm/gesf2vfp.S \
+ runtime/lib/arm/gtdf2vfp.S \
+ runtime/lib/arm/gtsf2vfp.S \
+ runtime/lib/arm/ledf2vfp.S \
+ runtime/lib/arm/lesf2vfp.S \
+ runtime/lib/arm/ltdf2vfp.S \
+ runtime/lib/arm/ltsf2vfp.S \
+ runtime/lib/arm/muldf3vfp.S \
+ runtime/lib/arm/mulsf3vfp.S \
+ runtime/lib/arm/nedf2vfp.S \
+ runtime/lib/arm/negdf2vfp.S \
+ runtime/lib/arm/negsf2vfp.S \
+ runtime/lib/arm/nesf2vfp.S \
+ runtime/lib/arm/subdf3vfp.S \
+ runtime/lib/arm/subsf3vfp.S \
+ runtime/lib/arm/truncdfsf2vfp.S \
+ runtime/lib/arm/unorddf2vfp.S \
+ runtime/lib/arm/unordsf2vfp.S
+else
+ ifeq ($(TARGET_ARCH),x86) # We don't support x86-64 right now
+ LOCAL_SRC_FILES += \
+ runtime/lib/i386/ashldi3.S \
+ runtime/lib/i386/ashrdi3.S \
+ runtime/lib/i386/divdi3.S \
+ runtime/lib/i386/floatdidf.S \
+ runtime/lib/i386/floatdisf.S \
+ runtime/lib/i386/floatdixf.S \
+ runtime/lib/i386/floatundidf.S \
+ runtime/lib/i386/floatundisf.S \
+ runtime/lib/i386/floatundixf.S \
+ runtime/lib/i386/lshrdi3.S \
+ runtime/lib/i386/moddi3.S \
+ runtime/lib/i386/muldi3.S \
+ runtime/lib/i386/udivdi3.S \
+ runtime/lib/i386/umoddi3.S
+ else
+ $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+ endif
+endif
+
+ifeq ($(TARGET_ARCH),arm)
+ LOCAL_STATIC_LIBRARIES := \
+ libLLVMARMCodeGen \
+ libLLVMARMInfo
+else
+ ifeq ($(TARGET_ARCH),x86) # We don't support x86-64 right now
+ LOCAL_STATIC_LIBRARIES := \
+ libLLVMX86CodeGen \
+ libLLVMX86Info
+ else
+ $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+ endif
+endif
+
+LOCAL_STATIC_LIBRARIES += \
libLLVMBitReader \
libLLVMSelectionDAG \
libLLVMAsmPrinter \
@@ -129,11 +165,22 @@
$(LOCAL_PATH)
ifeq ($(libbcc_USE_DISASSEMBLER),1)
-LOCAL_STATIC_LIBRARIES := \
- libLLVMARMDisassembler \
- libLLVMARMAsmPrinter \
- libLLVMMCParser \
- $(LOCAL_STATIC_LIBRARIES)
+ ifeq ($(TARGET_ARCH),arm)
+ LOCAL_STATIC_LIBRARIES += \
+ libLLVMARMDisassembler \
+ libLLVMARMAsmPrinter
+ else
+ ifeq ($(TARGET_ARCH),x86)
+ LOCAL_STATIC_LIBRARIES += \
+ libLLVMX86Disassembler \
+ libLLVMX86AsmPrinter
+ else
+ $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+ endif
+ endif
+ LOCAL_STATIC_LIBRARIES += \
+ libLLVMMCParser \
+ $(LOCAL_STATIC_LIBRARIES)
endif
# This makes libclcore.bc get installed if and only if the target libbcc.so is installed.
@@ -143,7 +190,7 @@
# and reduces the size of libbcc.so by about 800k.
# As libLLVMBitReader:libLLVMCore:libLLVMSupport are used by pixelflinger2,
# use below instead.
-LOCAL_LDFLAGS += -Wl,--exclude-libs=libLLVMARMDisassembler:libLLVMARMAsmPrinter:libLLVMMCParser:libLLVMARMCodeGen:libLLVMARMInfo:libLLVMSelectionDAG:libLLVMAsmPrinter:libLLVMCodeGen:libLLVMLinker:libLLVMJIT:libLLVMTarget:libLLVMMC:libLLVMScalarOpts:libLLVMInstCombine:libLLVMipo:libLLVMipa:libLLVMTransformUtils:libLLVMSystem:libLLVMAnalysis
+LOCAL_LDFLAGS += -Wl,--exclude-libs=libLLVMARMDisassembler:libLLVMARMAsmPrinter:libLLVMX86Disassembler:libLLVMX86AsmPrinter:libLLVMMCParser:libLLVMARMCodeGen:libLLVMARMInfo:libLLVMSelectionDAG:libLLVMAsmPrinter:libLLVMCodeGen:libLLVMLinker:libLLVMJIT:libLLVMTarget:libLLVMMC:libLLVMScalarOpts:libLLVMInstCombine:libLLVMipo:libLLVMipa:libLLVMTransformUtils:libLLVMSystem:libLLVMAnalysis
include $(LLVM_ROOT_PATH)/llvm-device-build.mk
include $(BUILD_SHARED_LIBRARY)
@@ -194,12 +241,24 @@
$(LOCAL_PATH)
# definitions for LLVM
-LOCAL_CFLAGS += -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DFORCE_ARM_CODEGEN=1 -DDEBUG_CODEGEN=1
+LOCAL_CFLAGS += -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DDEBUG_CODEGEN=1
+
+ifeq ($(TARGET_ARCH),arm)
+ LOCAL_CFLAGS += -DFORCE_ARM_CODEGEN=1
+else
+ ifeq ($(TARGET_ARCH),x86)
+ LOCAL_CFLAGS += -DFORCE_X86_CODEGEN=1
+ else
+ $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+ endif
+endif
ifeq ($(libbcc_USE_DISASSEMBLER),1)
LOCAL_STATIC_LIBRARIES := \
libLLVMARMDisassembler \
libLLVMARMAsmPrinter \
+ libLLVMX86Disassembler \
+ libLLVMX86AsmPrinter \
libLLVMMCParser \
$(LOCAL_STATIC_LIBRARIES)
endif
diff --git a/lib/bcc/Runtime.c b/lib/bcc/Runtime.c
index 86f8615..77f79d8 100644
--- a/lib/bcc/Runtime.c
+++ b/lib/bcc/Runtime.c
@@ -18,7 +18,9 @@
#include "runtime/lib/absvsi2.c"
#include "runtime/lib/addvdi3.c"
#include "runtime/lib/addvsi3.c"
-#include "runtime/lib/ashldi3.c"
+#if !defined(__i386__) && !defined(__SSE2__)
+# include "runtime/lib/ashldi3.c"
+#endif
#ifndef ANDROID
# include "runtime/lib/ashrdi3.c"
#endif
@@ -30,7 +32,9 @@
#ifndef ANDROID // no complex.h
# include "runtime/lib/divdc3.c"
#endif
-#include "runtime/lib/divdi3.c"
+#if !defined(__i386__)
+# include "runtime/lib/divdi3.c"
+#endif
#ifndef ANDROID // no complex.h
# include "runtime/lib/divsc3.c"
#endif
@@ -41,16 +45,22 @@
#include "runtime/lib/fixunsdfsi.c"
#include "runtime/lib/fixunssfdi.c"
#include "runtime/lib/fixunssfsi.c"
-#include "runtime/lib/floatdidf.c"
-#include "runtime/lib/floatdisf.c"
-#include "runtime/lib/floatundidf.c"
-#include "runtime/lib/floatundisf.c"
-#include "runtime/lib/lshrdi3.c"
-#include "runtime/lib/moddi3.c"
+#if !defined(__i386__)
+# include "runtime/lib/floatdidf.c"
+# include "runtime/lib/floatdisf.c"
+# include "runtime/lib/floatundidf.c"
+# include "runtime/lib/floatundisf.c"
+# include "runtime/lib/moddi3.c"
+#endif
+#if !defined(__i386__) && !defined(__SSE2__)
+# include "runtime/lib/lshrdi3.c"
+#endif
#ifndef ANDROID // no complex.h
# include "runtime/lib/muldc3.c"
#endif
-#include "runtime/lib/muldi3.c"
+#if !defined(__i386__)
+# include "runtime/lib/muldi3.c"
+#endif
#ifndef ANDROID // no complex.h
# include "runtime/lib/mulsc3.c"
#endif
@@ -68,10 +78,14 @@
#include "runtime/lib/subvdi3.c"
#include "runtime/lib/subvsi3.c"
#include "runtime/lib/ucmpdi2.c"
-#include "runtime/lib/udivdi3.c"
+#if !defined(__i386__)
+# include "runtime/lib/udivdi3.c"
+#endif
#include "runtime/lib/udivsi3.c"
#include "runtime/lib/udivmoddi4.c"
-#include "runtime/lib/umoddi3.c"
+#if !defined(__i386__)
+# include "runtime/lib/umoddi3.c"
+#endif
#include "runtime/lib/eprintf.c"
#include <string.h>
diff --git a/lib/bcc/Runtime.def b/lib/bcc/Runtime.def
index 484915f..eac19ec 100644
--- a/lib/bcc/Runtime.def
+++ b/lib/bcc/Runtime.def
@@ -33,7 +33,9 @@
DEF_LLVM_RUNTIME(__addvdi3)
DEF_LLVM_RUNTIME(__addvsi3)
-DEF_LLVM_RUNTIME(__ashldi3)
+#if !defined(__i386__) && !defined(__SSE2__)
+ DEF_LLVM_RUNTIME(__ashldi3)
+#endif
#ifndef ANDROID // has one in bionic
DEF_LLVM_RUNTIME(__ashrdi3)
#endif
@@ -55,7 +57,9 @@
DEF_GENERIC_OR_VFP_RUNTIME(__divdf3)
-DEF_LLVM_RUNTIME(__divdi3)
+#if !defined(__i386__)
+ DEF_LLVM_RUNTIME(__divdi3)
+#endif
#ifndef ANDROID // no complex extension
DEF_LLVM_RUNTIME(__divsc3)
@@ -84,14 +88,18 @@
DEF_LLVM_OR_VFP_RUNTIME(__fixunssfsi)
-DEF_LLVM_RUNTIME(__floatdidf)
-DEF_LLVM_RUNTIME(__floatdisf)
+#if !defined(__i386__)
+ DEF_LLVM_RUNTIME(__floatdidf)
+ DEF_LLVM_RUNTIME(__floatdisf)
+#endif
DEF_GENERIC_OR_VFP_RUNTIME(__floatsidf)
DEF_GENERIC_OR_VFP_RUNTIME(__floatsisf)
-DEF_LLVM_RUNTIME(__floatundidf)
-DEF_LLVM_RUNTIME(__floatundisf)
+#if !defined(__i386__)
+ DEF_LLVM_RUNTIME(__floatundidf)
+ DEF_LLVM_RUNTIME(__floatundisf)
+#endif
DEF_GENERIC_RUNTIME(__floatunsidf)
DEF_GENERIC_RUNTIME(__floatunsisf)
@@ -107,20 +115,26 @@
DEF_GENERIC_OR_VFP_RUNTIME(__ledf2)
DEF_GENERIC_OR_VFP_RUNTIME(__lesf2)
-DEF_LLVM_RUNTIME(__lshrdi3)
+#if !defined(__i386__) && !defined(__SSE2__)
+ DEF_LLVM_RUNTIME(__lshrdi3)
+#endif
DEF_VFP_RUNTIME(__ltdf2)
DEF_VFP_RUNTIME(__ltsf2)
-DEF_LLVM_RUNTIME(__moddi3)
+#if !defined(__i386__)
+ DEF_LLVM_RUNTIME(__moddi3)
+#endif
#ifndef ANDROID // no complex extension
DEF_LLVM_RUNTIME(__muldc3)
#endif
DEF_GENERIC_OR_VFP_RUNTIME(__muldf3)
-DEF_LLVM_RUNTIME(__muldi3)
-DEF_LLVM_RUNTIME(__muldsi3)
+#if !defined(__i386__)
+ DEF_LLVM_RUNTIME(__muldi3)
+ DEF_LLVM_RUNTIME(__muldsi3)
+#endif
#ifndef ANDROID // no complex extension
DEF_LLVM_RUNTIME(__mulsc3)
@@ -160,10 +174,14 @@
DEF_GENERIC_OR_VFP_RUNTIME(__truncdfsf2)
DEF_LLVM_RUNTIME(__ucmpdi2)
-DEF_LLVM_RUNTIME(__udivdi3)
+#if !defined(__i386__)
+ DEF_LLVM_RUNTIME(__udivdi3)
+#endif
DEF_LLVM_RUNTIME(__udivmoddi4)
DEF_LLVM_RUNTIME(__udivsi3)
-DEF_LLVM_RUNTIME(__umoddi3)
+#if !defined(__i386__)
+ DEF_LLVM_RUNTIME(__umoddi3)
+#endif
DEF_GENERIC_OR_VFP_RUNTIME(__unorddf2)
DEF_GENERIC_OR_VFP_RUNTIME(__unordsf2)