Add CPU(UNKNOWN) to cover all the unknown CPU types
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 20 Nov 2017 01:41:20 +0000 (01:41 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 20 Nov 2017 01:41:20 +0000 (01:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=179243

Reviewed by JF Bastien.

.:

Drop SH4, S390, and S390X explicit support. They are handled as CPU(UNKNOWN).

* CMakeLists.txt:

Source/JavaScriptCore:

* CMakeLists.txt:

Source/WTF:

This patch adds a new CPU type, `CPU(UNKNOWN)` to cover all the unknown CPUs.
This CPU architecture tells conservative assumption to make JSC work on all
the unknown generic CPUs. And we make several CPUs (ALPHA, SH4, S390, S390X, IA64, IA64_32)
UNKNOWN.

We also make InlineASM available only for !CPU(UNKNOWN). In an unknown CPU, inline asm is not useful.

And we also introduce a generic way to detect 64bit pointer environment by using
__SIZEOF_POINTER__ predefined macro, or `UINTPTR_MAX > UINT32_MAX`.

* wtf/InlineASM.h:
* wtf/Platform.h:
* wtf/dtoa/utils.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@225040 268f45cc-cd09-0410-ab3c-d52691b4dbfc

CMakeLists.txt
ChangeLog
Source/JavaScriptCore/CMakeLists.txt
Source/JavaScriptCore/ChangeLog
Source/WTF/ChangeLog
Source/WTF/wtf/InlineASM.h
Source/WTF/wtf/Platform.h
Source/WTF/wtf/dtoa/utils.h

index 4e52b73..706e1b3 100644 (file)
@@ -80,12 +80,8 @@ if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
     set(WTF_CPU_ARM 1)
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
     set(WTF_CPU_ARM64 1)
-elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "alpha*")
-    set(WTF_CPU_ALPHA 1)
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
     set(WTF_CPU_MIPS 1)
-elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "sh4")
-    set(WTF_CPU_SH4 1)
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(x64|x86_64|amd64)")
     set(WTF_CPU_X86_64 1)
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|x86)")
@@ -96,14 +92,8 @@ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64")
     set(WTF_CPU_PPC64 1)
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
     set(WTF_CPU_PPC64LE 1)
-elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "parisc*")
-    set(WTF_CPU_HPPA 1)
-elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "s390")
-    set(WTF_CPU_S390 1)
-elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
-    set(WTF_CPU_S390X 1)
 else ()
-    message(FATAL_ERROR "Unknown CPU '${LOWERCASE_CMAKE_SYSTEM_PROCESSOR}'")
+    set(WTF_CPU_UNKNOWN 1)
 endif ()
 
 # -----------------------------------------------------------------------------
index 662d910..da716bc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2017-11-19  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Add CPU(UNKNOWN) to cover all the unknown CPU types
+        https://bugs.webkit.org/show_bug.cgi?id=179243
+
+        Reviewed by JF Bastien.
+
+        Drop SH4, S390, and S390X explicit support. They are handled as CPU(UNKNOWN).
+
+        * CMakeLists.txt:
+
 2017-11-19  Tim Horton  <timothy_horton@apple.com>
 
         Remove unused LEGACY_VENDOR_PREFIXES feature flag
index 8d58522..408e391 100644 (file)
@@ -576,19 +576,7 @@ add_custom_command(
 
 list(APPEND JavaScriptCore_HEADERS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InjectedScriptSource.h)
 
-if (WTF_CPU_ARM)
-elseif (WTF_CPU_ARM64)
-elseif (WTF_CPU_ALPHA)
-elseif (WTF_CPU_HPPA)
-elseif (WTF_CPU_PPC)
-elseif (WTF_CPU_PPC64)
-elseif (WTF_CPU_PPC64LE)
-elseif (WTF_CPU_S390)
-elseif (WTF_CPU_S390X)
-elseif (WTF_CPU_MIPS)
-elseif (WTF_CPU_SH4)
-elseif (WTF_CPU_X86)
-elseif (WTF_CPU_X86_64)
+if (WTF_CPU_X86_64)
     if (MSVC AND ENABLE_JIT)
         add_custom_command(
             OUTPUT ${DERIVED_SOURCES_DIR}/JITStubsMSVC64.obj
@@ -598,8 +586,6 @@ elseif (WTF_CPU_X86_64)
 
         list(APPEND JavaScriptCore_SOURCES ${DERIVED_SOURCES_DIR}/JITStubsMSVC64.obj)
     endif ()
-else ()
-    message(FATAL_ERROR "Unknown CPU")
 endif ()
 
 WEBKIT_FRAMEWORK_DECLARE(JavaScriptCore)
index 1565107..77c28a5 100644 (file)
@@ -1,3 +1,12 @@
+2017-11-19  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Add CPU(UNKNOWN) to cover all the unknown CPU types
+        https://bugs.webkit.org/show_bug.cgi?id=179243
+
+        Reviewed by JF Bastien.
+
+        * CMakeLists.txt:
+
 2017-11-19  Tim Horton  <timothy_horton@apple.com>
 
         Remove unused LEGACY_VENDOR_PREFIXES feature flag
index f041763..6281de3 100644 (file)
@@ -1,3 +1,24 @@
+2017-11-19  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Add CPU(UNKNOWN) to cover all the unknown CPU types
+        https://bugs.webkit.org/show_bug.cgi?id=179243
+
+        Reviewed by JF Bastien.
+
+        This patch adds a new CPU type, `CPU(UNKNOWN)` to cover all the unknown CPUs.
+        This CPU architecture tells conservative assumption to make JSC work on all
+        the unknown generic CPUs. And we make several CPUs (ALPHA, SH4, S390, S390X, IA64, IA64_32)
+        UNKNOWN.
+
+        We also make InlineASM available only for !CPU(UNKNOWN). In an unknown CPU, inline asm is not useful.
+
+        And we also introduce a generic way to detect 64bit pointer environment by using
+        __SIZEOF_POINTER__ predefined macro, or `UINTPTR_MAX > UINT32_MAX`.
+
+        * wtf/InlineASM.h:
+        * wtf/Platform.h:
+        * wtf/dtoa/utils.h:
+
 2017-11-19  Tim Horton  <timothy_horton@apple.com>
 
         Remove unused LEGACY_VENDOR_PREFIXES feature flag
index dfea4ed..603119b 100644 (file)
@@ -25,6 +25,8 @@
 
 #ifndef InlineASM_h
 #define InlineASM_h
+#include <wtf/Platform.h>
+#if !CPU(UNKNOWN)
 
 /* asm directive helpers */ 
 
@@ -65,7 +67,7 @@
 #elif   OS(LINUX)               \
      || OS(FREEBSD)             \
      || OS(OPENBSD)             \
-     || (OS(HPUX) && CPU(IA64)) \
+     || OS(HPUX)                \
      || OS(NETBSD)
     // ELF platform
 #define HIDE_SYMBOL(name) ".hidden " #name
@@ -94,4 +96,5 @@
 #define INLINE_ARM_FUNCTION(name)
 #endif
 
+#endif // !CPU(UNKNOWN)
 #endif // InlineASM_h
index 8073469..5cd43f2 100644 (file)
 
 
 /* ==== CPU() - the target CPU architecture ==== */
-
-/* CPU(ALPHA) - DEC Alpha */
-#if defined(__alpha__)
-#define WTF_CPU_ALPHA 1
-#endif
-
-/* CPU(HPPA) - HP PA-RISC */
-#if defined(__hppa__) || defined(__hppa64__)
-#define WTF_CPU_HPPA 1
-#endif
-
-/* CPU(IA64) - Itanium / IA-64 */
-#if defined(__ia64__)
-#define WTF_CPU_IA64 1
-/* 32-bit mode on Itanium */
-#if !defined(__LP64__)
-#define WTF_CPU_IA64_32 1
-#endif
-#endif
+/* CPU(KNOWN) becomes true if we explicitly support a target CPU. */
 
 /* CPU(MIPS) - MIPS 32-bit and 64-bit */
 #if (defined(mips) || defined(__mips__) || defined(MIPS) || defined(_MIPS_) || defined(__mips64))
@@ -86,6 +68,7 @@
 #define WTF_CPU_MIPS 1
 #define WTF_MIPS_ARCH __mips
 #endif
+#define WTF_CPU_KNOWN 1
 #define WTF_MIPS_PIC (defined __PIC__)
 #define WTF_MIPS_ISA(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH == v)
 #define WTF_MIPS_ISA_AT_LEAST(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH >= v)
     && defined(__BYTE_ORDER__) \
     && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
 #define WTF_CPU_PPC64 1
+#define WTF_CPU_KNOWN 1
 #endif
 
 /* CPU(PPC64) - PowerPC 64-bit Little Endian */
     && defined(__BYTE_ORDER__) \
     && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
 #define WTF_CPU_PPC64LE 1
+#define WTF_CPU_KNOWN 1
 #endif
 
 /* CPU(PPC) - PowerPC 32-bit */
     && !CPU(PPC64)             \
     && CPU(BIG_ENDIAN)
 #define WTF_CPU_PPC 1
-#endif
-
-/* CPU(SH4) - SuperH SH-4 */
-#if defined(__SH4__)
-#define WTF_CPU_SH4 1
-#endif
-
-/* CPU(S390X) - S390 64-bit */
-#if defined(__s390x__)
-#define WTF_CPU_S390X 1
-#endif
-
-/* CPU(S390) - S390 32-bit */
-#if (  defined(__s390__)        \
-    && !CPU(S390X))
-#define WTF_CPU_S390 1
+#define WTF_CPU_KNOWN 1
 #endif
 
 /* CPU(X86) - i386 / x86 32-bit */
     || defined(_X86_)    \
     || defined(__THW_INTEL)
 #define WTF_CPU_X86 1
+#define WTF_CPU_KNOWN 1
 
 #if defined(__SSE2__) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2)
 #define WTF_CPU_X86_SSE2 1
     || defined(_M_X64)
 #define WTF_CPU_X86_64 1
 #define WTF_CPU_X86_SSE2 1
+#define WTF_CPU_KNOWN 1
 #endif
 
 /* CPU(ARM64) - Apple */
 #if (defined(__arm64__) && defined(__APPLE__)) || defined(__aarch64__)
 #define WTF_CPU_ARM64 1
+#define WTF_CPU_KNOWN 1
 
 #if defined(__arm64e__)
 #define WTF_CPU_ARM64E 1
     || defined(ARM) \
     || defined(_ARM_)
 #define WTF_CPU_ARM 1
+#define WTF_CPU_KNOWN 1
 
 #if defined(__ARM_PCS_VFP)
 #define WTF_CPU_ARM_HARDFP 1
 
 #endif /* ARM */
 
-#if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(ALPHA) || CPU(HPPA)
+#if !CPU(KNOWN)
+#define WTF_CPU_UNKNOWN 1
+#endif
+
+#if CPU(ARM) || CPU(MIPS) || CPU(UNKNOWN)
 #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1
 #endif
 
 #endif
 
 #if !defined(USE_JSVALUE64) && !defined(USE_JSVALUE32_64)
-#if (CPU(X86_64) && !defined(__ILP32__) && (OS(UNIX) || OS(WINDOWS))) \
-    || (CPU(IA64) && !CPU(IA64_32)) \
-    || CPU(ALPHA) \
-    || (CPU(ARM64) && !defined(__ILP32__)) \
-    || CPU(S390X) \
-    || CPU(MIPS64) \
-    || CPU(PPC64) \
-    || CPU(PPC64LE)
+#if COMPILER(GCC_OR_CLANG)
+/* __LP64__ is not defined on 64bit Windows since it uses LLP64. Using __SIZEOF_POINTER__ is simpler. */
+#if __SIZEOF_POINTER__ == 8
+#define USE_JSVALUE64 1
+#elif __SIZEOF_POINTER__ == 4
+#define USE_JSVALUE32_64 1
+#else
+#error "Unsupported pointer width"
+#endif
+#elif COMPILER(MSVC)
+#if defined(_WIN64)
 #define USE_JSVALUE64 1
 #else
 #define USE_JSVALUE32_64 1
 #endif
+#else
+/* This is the most generic way. But in OS(DARWIN), Platform.h can be included by sandbox definition file (.sb).
+ * At that time, we cannot include "stdint.h" header. So in the case of known compilers, we use predefined constants instead. */
+#include <stdint.h>
+#if UINTPTR_MAX > UINT32_MAX
+#define USE_JSVALUE64 1
+#else
+#define USE_JSVALUE32_64 1
+#endif
+#endif
 #endif /* !defined(USE_JSVALUE64) && !defined(USE_JSVALUE32_64) */
 
 /* The JIT is enabled by default on all x86, x86-64, ARM & MIPS platforms except ARMv7k. */
index edb171b..14a9478 100644 (file)
@@ -49,7 +49,7 @@
 defined(__ARMEL__) || \
 defined(_MIPS_ARCH_MIPS32R2)
 #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
-#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
+#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(ARM64)
 #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
 #elif defined(_M_IX86) || defined(__i386__)
 #if defined(_WIN32)
@@ -59,7 +59,8 @@ defined(_MIPS_ARCH_MIPS32R2)
 #undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
 #endif  // _WIN32
 #else
-#error Target architecture was not detected as supported by Double-Conversion.
+// Conservatively disable double conversion for unknown architectures.
+#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
 #endif