Revision: 19217
Author: [email protected]
Date: Mon Feb 10 09:15:49 2014 UTC
Log: A64: More fixes to enable building for Android Arm64
- Fix android_target_arch after Android platform rename.
- Specify gcc tool names rather than using wildcards (this breaks in newer
NDK
versions due to matching multiple tools in some cases.
- Add missing non-simulator supportt to test-assembler-a64
- Avoid ambiguous pow(int, int) error messages in test-platform.cc
- Add support for GET_STACK_POINTER in test-platform.cc
[email protected]
Review URL: https://codereview.chromium.org/143003028
http://code.google.com/p/v8/source/detail?r=19217
Modified:
/branches/experimental/a64/Makefile.android
/branches/experimental/a64/build/android.gypi
/branches/experimental/a64/test/cctest/test-assembler-a64.cc
/branches/experimental/a64/test/cctest/test-platform.cc
=======================================
--- /branches/experimental/a64/Makefile.android Fri Feb 7 12:52:25 2014 UTC
+++ /branches/experimental/a64/Makefile.android Mon Feb 10 09:15:49 2014 UTC
@@ -49,20 +49,25 @@
ifeq ($(ARCH), android_arm)
DEFINES = target_arch=arm v8_target_arch=arm android_target_arch=arm
DEFINES += arm_neon=0 arm_version=7
- TOOLCHAIN_ARCH = arm-linux-androideabi-4.6
+ TOOLCHAIN_ARCH = arm-linux-androideabi
+ TOOLCHAIN_VER = 4.6
else
ifeq ($(ARCH), android_a64)
- DEFINES = target_arch=a64 v8_target_arch=a64
android_target_arch=aarch64
- TOOLCHAIN_ARCH = aarch64-linux-android-4.8
+ DEFINES = target_arch=a64 v8_target_arch=a64 android_target_arch=arm64
+ TOOLCHAIN_ARCH = aarch64-linux-android
+ TOOLCHAIN_VER = 4.8
else
ifeq ($(ARCH), android_mipsel)
DEFINES = target_arch=mipsel v8_target_arch=mipsel
DEFINES += android_target_arch=mips mips_arch_variant=mips32r2
- TOOLCHAIN_ARCH = mipsel-linux-android-4.6
+ TOOLCHAIN_ARCH = mipsel-linux-android
+ TOOLCHAIN_VER = 4.6
+
else
ifeq ($(ARCH), android_ia32)
DEFINES = target_arch=ia32 v8_target_arch=ia32
android_target_arch=x86
- TOOLCHAIN_ARCH = x86-4.6
+ TOOLCHAIN_ARCH = x86
+ TOOLCHAIN_VER = 4.6
else
$(error Target architecture "${ARCH}" is not supported)
endif
@@ -70,7 +75,8 @@
endif
endif
-TOOLCHAIN_PATH = ${ANDROID_NDK_ROOT}/toolchains/${TOOLCHAIN_ARCH}/prebuilt
+TOOLCHAIN_PATH = \
+
${ANDROID_NDK_ROOT}/toolchains/${TOOLCHAIN_ARCH}-${TOOLCHAIN_VER}/prebuilt
ANDROID_TOOLCHAIN ?= ${TOOLCHAIN_PATH}/${TOOLCHAIN_DIR}
ifeq ($(wildcard $(ANDROID_TOOLCHAIN)),)
$(error Cannot find Android toolchain in "${ANDROID_TOOLCHAIN}". Please
\
@@ -84,12 +90,12 @@
.SECONDEXPANSION:
$(ANDROID_BUILDS): $(OUTDIR)/Makefile.$$@
@$(MAKE) -C "$(OUTDIR)" -f Makefile.$@ \
- CXX="$(ANDROID_TOOLCHAIN)/bin/*-g++" \
- AR="$(ANDROID_TOOLCHAIN)/bin/*-ar" \
- RANLIB="$(ANDROID_TOOLCHAIN)/bin/*-ranlib" \
- CC="$(ANDROID_TOOLCHAIN)/bin/*-gcc" \
- LD="$(ANDROID_TOOLCHAIN)/bin/*-ld" \
- LINK="$(ANDROID_TOOLCHAIN)/bin/*-g++" \
+ CXX="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_ARCH}-g++" \
+ AR="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_ARCH}-ar" \
+ RANLIB="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_ARCH}-ranlib" \
+ CC="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_ARCH}-gcc" \
+ LD="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_ARCH}-ld" \
+ LINK="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_ARCH}-g++" \
BUILDTYPE=$(shell echo $(subst .,,$(suffix $@)) | \
python -c "print raw_input().capitalize()") \
builddir="$(shell pwd)/$(OUTDIR)/$@"
@@ -99,8 +105,8 @@
$(ANDROID_MAKEFILES):
GYP_GENERATORS=make-android \
GYP_DEFINES="${DEFINES}" \
- CC="${ANDROID_TOOLCHAIN}/bin/*-gcc" \
- CXX="${ANDROID_TOOLCHAIN}/bin/*-g++" \
+ CC="${ANDROID_TOOLCHAIN}/bin/${TOOLCHAIN_ARCH}-gcc" \
+ CXX="${ANDROID_TOOLCHAIN}/bin/${TOOLCHAIN_ARCH}-g++" \
PYTHONPATH="$(shell pwd)/tools/generate_shim_headers:$(PYTHONPATH)" \
build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \
-Ibuild/standalone.gypi --depth=. -Ibuild/android.gypi \
=======================================
--- /branches/experimental/a64/build/android.gypi Fri Feb 7 12:52:25 2014
UTC
+++ /branches/experimental/a64/build/android.gypi Mon Feb 10 09:15:49 2014
UTC
@@ -184,6 +184,11 @@
'-L<(android_stlport_libs)/x86',
],
}],
+ ['target_arch=="a64"', {
+ 'ldflags': [
+ '-L<(android_stlport_libs)/arm64',
+ ],
+ }],
],
}],
['target_arch=="ia32"', {
@@ -208,10 +213,19 @@
],
'target_conditions': [
['_type=="executable"', {
+ 'conditions': [
+ ['target_arch=="a64"', {
+ 'ldflags': [
+ '-Wl,-dynamic-linker,/system/bin/linker64',
+ ],
+ }, {
+ 'ldflags': [
+ '-Wl,-dynamic-linker,/system/bin/linker',
+ ],
+ }]
+ ],
'ldflags': [
'-Bdynamic',
- '-Wl,-dynamic-linker,/system/bin/linker',
- '-Wl,--gc-sections',
'-Wl,-z,nocopyreloc',
# crtbegin_dynamic.o should be the last item in ldflags.
'<(android_lib)/crtbegin_dynamic.o',
@@ -242,7 +256,6 @@
'ldflags': [ '-m32', '-pthread' ],
'ldflags!': [
'-Wl,-z,noexecstack',
- '-Wl,--gc-sections',
'-Wl,-O1',
'-Wl,--as-needed',
],
=======================================
--- /branches/experimental/a64/test/cctest/test-assembler-a64.cc Thu Feb 6
14:30:18 2014 UTC
+++ /branches/experimental/a64/test/cctest/test-assembler-a64.cc Mon Feb 10
09:15:49 2014 UTC
@@ -166,6 +166,9 @@
#else // ifdef USE_SIMULATOR.
// Run the test on real hardware or models.
#define
SETUP_SIZE(buf_size) \
+ Isolate* isolate =
Isolate::Current(); \
+ HandleScope
scope(isolate); \
+ ASSERT(isolate !=
NULL); \
byte* buf = new
byte[buf_size]; \
MacroAssembler masm(isolate, buf,
buf_size); \
RegisterDump
core; \
@@ -5789,7 +5792,7 @@
{2.0, 2.0f},
{FLT_MAX, FLT_MAX},
// - The smallest normalized float.
- {pow(2, -126), powf(2, -126)},
+ {pow(2.0, -126), powf(2, -126)},
// - Normal floats that need (ties-to-even) rounding.
// For normalized numbers:
// bit 29 (0x0000000020000000) is the lowest-order bit which
will
@@ -5816,7 +5819,7 @@
{kFP64PositiveInfinity, kFP32PositiveInfinity},
{DBL_MAX, kFP32PositiveInfinity},
// - The smallest exponent that's too big for a float.
- {pow(2, 128), kFP32PositiveInfinity},
+ {pow(2.0, 128), kFP32PositiveInfinity},
// - This exponent is in range, but the value rounds to infinity.
{rawbits_to_double(0x47effffff0000000), kFP32PositiveInfinity},
@@ -6793,16 +6796,16 @@
double expected_ucvtf_base = rawbits_to_double(expected_ucvtf_bits);
for (int fbits = 0; fbits <= 32; fbits++) {
- double expected_scvtf = expected_scvtf_base / pow(2, fbits);
- double expected_ucvtf = expected_ucvtf_base / pow(2, fbits);
+ double expected_scvtf = expected_scvtf_base / pow(2.0, fbits);
+ double expected_ucvtf = expected_ucvtf_base / pow(2.0, fbits);
ASSERT_EQUAL_FP64(expected_scvtf, results_scvtf_x[fbits]);
ASSERT_EQUAL_FP64(expected_ucvtf, results_ucvtf_x[fbits]);
if (cvtf_s32) ASSERT_EQUAL_FP64(expected_scvtf,
results_scvtf_w[fbits]);
if (cvtf_u32) ASSERT_EQUAL_FP64(expected_ucvtf,
results_ucvtf_w[fbits]);
}
for (int fbits = 33; fbits <= 64; fbits++) {
- double expected_scvtf = expected_scvtf_base / pow(2, fbits);
- double expected_ucvtf = expected_ucvtf_base / pow(2, fbits);
+ double expected_scvtf = expected_scvtf_base / pow(2.0, fbits);
+ double expected_ucvtf = expected_ucvtf_base / pow(2.0, fbits);
ASSERT_EQUAL_FP64(expected_scvtf, results_scvtf_x[fbits]);
ASSERT_EQUAL_FP64(expected_ucvtf, results_ucvtf_x[fbits]);
}
@@ -9381,8 +9384,8 @@
ECMA262ToInt32Helper(-1, -1.0);
// The largest representable value that is less than 1.
- ECMA262ToInt32Helper(0, 0x001fffffffffffff * pow(2, -53));
- ECMA262ToInt32Helper(0, 0x001fffffffffffff * -pow(2, -53));
+ ECMA262ToInt32Helper(0, 0x001fffffffffffff * pow(2.0, -53));
+ ECMA262ToInt32Helper(0, 0x001fffffffffffff * -pow(2.0, -53));
ECMA262ToInt32Helper(0, std::numeric_limits<double>::denorm_min());
ECMA262ToInt32Helper(0, -std::numeric_limits<double>::denorm_min());
@@ -9407,29 +9410,29 @@
ECMA262ToInt32Helper(-0xfffff800, 0xfffffffffffff800 * -1.0);
// The largest conversion which doesn't produce a zero result.
- ECMA262ToInt32Helper(0x80000000, 0x001fffffffffffff * pow(2, 31));
- ECMA262ToInt32Helper(-0x80000000, 0x001fffffffffffff * -pow(2, 31));
+ ECMA262ToInt32Helper(0x80000000, 0x001fffffffffffff * pow(2.0, 31));
+ ECMA262ToInt32Helper(-0x80000000, 0x001fffffffffffff * -pow(2.0, 31));
// Some large conversions to check the shifting function.
ECMA262ToInt32Helper(0x6789abcd, 0x001123456789abcd);
- ECMA262ToInt32Helper(0x12345678, 0x001123456789abcd * pow(2, -20));
- ECMA262ToInt32Helper(0x891a2b3c, 0x001123456789abcd * pow(2, -21));
- ECMA262ToInt32Helper(0x11234567, 0x001123456789abcd * pow(2, -24));
+ ECMA262ToInt32Helper(0x12345678, 0x001123456789abcd * pow(2.0, -20));
+ ECMA262ToInt32Helper(0x891a2b3c, 0x001123456789abcd * pow(2.0, -21));
+ ECMA262ToInt32Helper(0x11234567, 0x001123456789abcd * pow(2.0, -24));
ECMA262ToInt32Helper(-0x6789abcd, 0x001123456789abcd * -1.0);
- ECMA262ToInt32Helper(-0x12345678, 0x001123456789abcd * -pow(2, -20));
- ECMA262ToInt32Helper(-0x891a2b3c, 0x001123456789abcd * -pow(2, -21));
- ECMA262ToInt32Helper(-0x11234567, 0x001123456789abcd * -pow(2, -24));
+ ECMA262ToInt32Helper(-0x12345678, 0x001123456789abcd * -pow(2.0, -20));
+ ECMA262ToInt32Helper(-0x891a2b3c, 0x001123456789abcd * -pow(2.0, -21));
+ ECMA262ToInt32Helper(-0x11234567, 0x001123456789abcd * -pow(2.0, -24));
// ==== 84 <= exponent ====
// The smallest conversion which produces a zero result by shifting the
// mantissa out of the int32_t range.
- ECMA262ToInt32Helper(0, pow(2, 32));
- ECMA262ToInt32Helper(0, -pow(2, 32));
+ ECMA262ToInt32Helper(0, pow(2.0, 32));
+ ECMA262ToInt32Helper(0, -pow(2.0, 32));
// Some very large conversions.
- ECMA262ToInt32Helper(0, 0x001fffffffffffff * pow(2, 32));
- ECMA262ToInt32Helper(0, 0x001fffffffffffff * -pow(2, 32));
+ ECMA262ToInt32Helper(0, 0x001fffffffffffff * pow(2.0, 32));
+ ECMA262ToInt32Helper(0, 0x001fffffffffffff * -pow(2.0, 32));
ECMA262ToInt32Helper(0, DBL_MAX);
ECMA262ToInt32Helper(0, -DBL_MAX);
=======================================
--- /branches/experimental/a64/test/cctest/test-platform.cc Fri Feb 7
15:10:05 2014 UTC
+++ /branches/experimental/a64/test/cctest/test-platform.cc Mon Feb 10
09:15:49 2014 UTC
@@ -53,6 +53,12 @@
do { \
ASM("str %%sp, %0" : "=g" (sp_addr)); \
} while (0)
+#elif defined(__AARCH64EL__)
+#define GET_STACK_POINTER() \
+ static int sp_addr = 0; \
+ do { \
+ ASM("mov x16, sp; str x16, %0" : "=g" (sp_addr)); \
+ } while (0)
#elif defined(__MIPSEL__)
#define GET_STACK_POINTER() \
static int sp_addr = 0; \
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.