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.

Reply via email to