Add back the ability to disable MASM_PROBE from the build.
authormark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Aug 2017 05:09:06 +0000 (05:09 +0000)
committermark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Aug 2017 05:09:06 +0000 (05:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175656
<rdar://problem/33933720>

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

This is needed for ports that the existing MASM_PROBE implementation doesn't work
well with e.g. GTK with ARM_THUMB2.  Note that if the DFG_JIT will be disabled by
default if !ENABLE(MASM_PROBE).

* assembler/AbstractMacroAssembler.h:
* assembler/MacroAssembler.cpp:
* assembler/MacroAssembler.h:
* assembler/MacroAssemblerARM.cpp:
* assembler/MacroAssemblerARM64.cpp:
* assembler/MacroAssemblerARMv7.cpp:
* assembler/MacroAssemblerPrinter.cpp:
* assembler/MacroAssemblerPrinter.h:
* assembler/MacroAssemblerX86Common.cpp:
* assembler/testmasm.cpp:
(JSC::run):
* b3/B3LowerToAir.cpp:
* b3/air/AirPrintSpecial.cpp:
* b3/air/AirPrintSpecial.h:

Source/WTF:

* wtf/Platform.h:

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

16 files changed:
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
Source/JavaScriptCore/assembler/MacroAssembler.cpp
Source/JavaScriptCore/assembler/MacroAssembler.h
Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp
Source/JavaScriptCore/assembler/MacroAssemblerARM64.cpp
Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp
Source/JavaScriptCore/assembler/MacroAssemblerPrinter.cpp
Source/JavaScriptCore/assembler/MacroAssemblerPrinter.h
Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp
Source/JavaScriptCore/assembler/testmasm.cpp
Source/JavaScriptCore/b3/B3LowerToAir.cpp
Source/JavaScriptCore/b3/air/AirPrintSpecial.cpp
Source/JavaScriptCore/b3/air/AirPrintSpecial.h
Source/WTF/ChangeLog
Source/WTF/wtf/Platform.h

index 84b711a..b102b61 100644 (file)
@@ -1,3 +1,30 @@
+2017-08-16  Mark Lam  <mark.lam@apple.com>
+
+        Add back the ability to disable MASM_PROBE from the build.
+        https://bugs.webkit.org/show_bug.cgi?id=175656
+        <rdar://problem/33933720>
+
+        Reviewed by Yusuke Suzuki.
+
+        This is needed for ports that the existing MASM_PROBE implementation doesn't work
+        well with e.g. GTK with ARM_THUMB2.  Note that if the DFG_JIT will be disabled by
+        default if !ENABLE(MASM_PROBE).
+
+        * assembler/AbstractMacroAssembler.h:
+        * assembler/MacroAssembler.cpp:
+        * assembler/MacroAssembler.h:
+        * assembler/MacroAssemblerARM.cpp:
+        * assembler/MacroAssemblerARM64.cpp:
+        * assembler/MacroAssemblerARMv7.cpp:
+        * assembler/MacroAssemblerPrinter.cpp:
+        * assembler/MacroAssemblerPrinter.h:
+        * assembler/MacroAssemblerX86Common.cpp:
+        * assembler/testmasm.cpp:
+        (JSC::run):
+        * b3/B3LowerToAir.cpp:
+        * b3/air/AirPrintSpecial.cpp:
+        * b3/air/AirPrintSpecial.h:
+
 2017-08-16  Dan Bernstein  <mitz@apple.com>
 
         [Cocoa] Older-iOS install name symbols are being exported on other platforms
index deecf2d..14d552a 100644 (file)
@@ -43,8 +43,10 @@ namespace JSC {
 
 #if ENABLE(ASSEMBLER)
 
+#if ENABLE(MASM_PROBE)
 struct ProbeContext;
 typedef void (*ProbeFunction)(struct ProbeContext*);
+#endif
     
 class AllowMacroScratchRegisterUsage;
 class DisallowMacroScratchRegisterUsage;
index 4185cdb..7300157 100644 (file)
@@ -34,6 +34,7 @@ namespace JSC {
 
 const double MacroAssembler::twoToThe32 = (double)0x100000000ull;
 
+#if ENABLE(MASM_PROBE)
 static void stdFunctionCallback(ProbeContext* context)
 {
     auto func = static_cast<const std::function<void(ProbeContext*)>*>(context->arg);
@@ -44,6 +45,7 @@ void MacroAssembler::probe(std::function<void(ProbeContext*)> func)
 {
     probe(stdFunctionCallback, new std::function<void(ProbeContext*)>(func));
 }
+#endif // ENABLE(MASM_PROBE)
 
 } // namespace JSC
 
index 19878d1..2177ba3 100644 (file)
@@ -1824,6 +1824,7 @@ public:
         urshift32(src, trustedImm32ForShift(amount), dest);
     }
 
+#if ENABLE(MASM_PROBE)
     struct CPUState;
 
     // This function emits code to preserve the CPUState (e.g. registers),
@@ -1885,8 +1886,10 @@ public:
     void print(Arguments&&... args);
 
     void print(Printer::PrintRecordList*);
+#endif // ENABLE(MASM_PROBE)
 };
 
+#if ENABLE(MASM_PROBE)
 struct MacroAssembler::CPUState {
     static inline const char* gprName(RegisterID id) { return MacroAssembler::gprName(id); }
     static inline const char* sprName(SPRegisterID id) { return MacroAssembler::sprName(id); }
@@ -2046,7 +2049,8 @@ struct ProbeContext {
     template<typename T> T fp() { return cpu.fp<T>(); }
     template<typename T> T sp() { return cpu.sp<T>(); }
 };
-    
+#endif // ENABLE(MASM_PROBE)
+
 } // namespace JSC
 
 namespace WTF {
index efac95b..a4374f8 100644 (file)
@@ -96,6 +96,8 @@ void MacroAssemblerARM::load32WithUnalignedHalfWords(BaseIndex address, Register
 }
 #endif // CPU(ARMV5_OR_LOWER)
 
+#if ENABLE(MASM_PROBE)
+
 extern "C" void ctiMasmProbeTrampoline();
 
 #if COMPILER(GCC_OR_CLANG)
@@ -393,6 +395,7 @@ void MacroAssembler::probe(ProbeFunction function, void* arg)
     m_assembler.blx(RegisterID::S0);
 
 }
+#endif // ENABLE(MASM_PROBE)
 
 } // namespace JSC
 
index c2cd4b8..45a010b 100644 (file)
@@ -32,6 +32,8 @@
 
 namespace JSC {
 
+#if ENABLE(MASM_PROBE)
+
 extern "C" void ctiMasmProbeTrampoline();
 
 using namespace ARM64Registers;
@@ -556,6 +558,8 @@ void MacroAssembler::probe(ProbeFunction function, void* arg)
     add64(TrustedImm32(sizeof(OutgoingProbeRecord)), sp);
 }
 
+#endif // ENABLE(MASM_PROBE)
+
 } // namespace JSC
 
 #endif // ENABLE(ASSEMBLER) && CPU(ARM64)
index e98aee2..61fc490 100644 (file)
@@ -32,6 +32,8 @@
 
 namespace JSC {
 
+#if ENABLE(MASM_PROBE)
+
 extern "C" void ctiMasmProbeTrampoline();
 
 #if COMPILER(GCC_OR_CLANG)
@@ -336,6 +338,7 @@ void MacroAssembler::probe(ProbeFunction function, void* arg)
     move(trustedImm32FromPtr(ctiMasmProbeTrampoline), RegisterID::ip);
     m_assembler.blx(RegisterID::ip);
 }
+#endif // ENABLE(MASM_PROBE)
 
 } // namespace JSC
 
index b9e30f6..df8ef1b 100644 (file)
@@ -27,6 +27,7 @@
 #include "MacroAssemblerPrinter.h"
 
 #if ENABLE(ASSEMBLER)
+#if ENABLE(MASM_PROBE)
 
 #include "MacroAssembler.h"
 #include <inttypes.h>
@@ -184,4 +185,5 @@ void printCallback(ProbeContext* probeContext)
 } // namespace Printer
 } // namespace JSC
 
+#endif // ENABLE(MASM_PROBE)
 #endif // ENABLE(ASSEMBLER)
index 4e230ed..0e1521b 100644 (file)
@@ -31,6 +31,7 @@
 namespace JSC {
 
 #if ENABLE(ASSEMBLER)
+#if ENABLE(MASM_PROBE)
 
 // What is MacroAssembler::print()?
 // ===============================
@@ -238,6 +239,7 @@ inline void MacroAssembler::print(Printer::PrintRecordList* printRecordList)
     probe(Printer::printCallback, printRecordList);
 }
 
+#endif // ENABLE(MASM_PROBE)
 #endif // ENABLE(ASSEMBLER)
 
 } // namespace JSC
index 1a56605..a47ab9a 100644 (file)
@@ -32,6 +32,8 @@
 
 namespace JSC {
 
+#if ENABLE(MASM_PROBE)
+
 extern "C" void ctiMasmProbeTrampoline();
 
 #if COMPILER(GCC_OR_CLANG)
@@ -575,6 +577,7 @@ void MacroAssembler::probe(ProbeFunction function, void* arg)
     move(TrustedImmPtr(reinterpret_cast<void*>(ctiMasmProbeTrampoline)), RegisterID::eax);
     call(RegisterID::eax);
 }
+#endif // ENABLE(MASM_PROBE)
 
 #if CPU(X86) && !OS(MAC_OS_X)
 MacroAssemblerX86Common::SSE2CheckState MacroAssemblerX86Common::s_sse2CheckState = NotCheckedSSE2;
index 80c05f7..9dec50d 100644 (file)
@@ -50,6 +50,7 @@ static void usage()
 
 #if ENABLE(JIT)
 
+#if ENABLE(MASM_PROBE)
 namespace WTF {
 
 static void printInternal(PrintStream& out, void* value)
@@ -58,12 +59,15 @@ static void printInternal(PrintStream& out, void* value)
 }
 
 } // namespace WTF
+#endif // ENABLE(MASM_PROBE)
 
 using namespace JSC;
 
 namespace {
 
+#if ENABLE(MASM_PROBE)
 using CPUState = MacroAssembler::CPUState;
+#endif
 
 StaticLock crashLock;
 
@@ -93,6 +97,7 @@ template<typename T> T nextID(T id) { return static_cast<T>(id + 1); }
         CRASH();                                                        \
     } while (false)
 
+#if ENABLE(MASM_PROBE)
 bool isPC(MacroAssembler::RegisterID id)
 {
 #if CPU(ARM_THUMB2) || CPU(ARM_TRADITIONAL)
@@ -123,6 +128,7 @@ bool isSpecialGPR(MacroAssembler::RegisterID id)
 #endif
     return false;
 }
+#endif // ENABLE(MASM_PROBE)
 
 MacroAssemblerCodeRef compile(Generator&& generate)
 {
@@ -155,6 +161,7 @@ void testSimple()
     }), 42);
 }
 
+#if ENABLE(MASM_PROBE)
 void testProbeReadsArgumentRegisters()
 {
     bool probeWasCalled = false;
@@ -661,6 +668,7 @@ void testProbeModifiesStackWithCallback()
 
     CHECK_EQ(probeCallCount, 3);
 }
+#endif // ENABLE(MASM_PROBE)
 
 #define RUN(test) do {                          \
         if (!shouldRun(#test))                  \
@@ -688,6 +696,7 @@ void run(const char* filter)
 
     RUN(testSimple());
 
+#if ENABLE(MASM_PROBE)
     RUN(testProbeReadsArgumentRegisters());
     RUN(testProbeWritesArgumentRegisters());
     RUN(testProbePreservesGPRS());
@@ -695,6 +704,7 @@ void run(const char* filter)
     RUN(testProbeModifiesStackPointerToNBytesBelowSP());
     RUN(testProbeModifiesProgramCounter());
     RUN(testProbeModifiesStackWithCallback());
+#endif // ENABLE(MASM_PROBE)
 
     if (tasks.isEmpty())
         usage();
index 333f9d1..1489c31 100644 (file)
@@ -1150,6 +1150,7 @@ private:
         return Air::Oops;
     }
 
+#if ENABLE(MASM_PROBE)
     template<typename... Arguments>
     void print(Arguments&&... arguments)
     {
@@ -1166,6 +1167,7 @@ private:
         Printer::appendAirArgs(inst, std::forward<Arguments>(arguments)...);
         append(WTFMove(inst));
     }
+#endif // ENABLE(MASM_PROBE)
 
     template<typename... Arguments>
     void append(Air::Kind kind, Arguments&&... arguments)
index 6dc23ae..c9989b4 100644 (file)
@@ -27,6 +27,7 @@
 #include "AirPrintSpecial.h"
 
 #if ENABLE(B3_JIT)
+#if ENABLE(MASM_PROBE)
 
 #include "MacroAssemblerPrinter.h"
 
@@ -124,4 +125,5 @@ NO_RETURN void printAirArg(PrintStream&, Context&)
 
 } // namespace JSC
 
+#endif // ENABLE(MASM_PROBE)
 #endif // ENABLE(B3_JIT)
index 31ca05a..b9a4d7b 100644 (file)
@@ -26,6 +26,7 @@
 #pragma once
 
 #if ENABLE(B3_JIT)
+#if ENABLE(MASM_PROBE)
 
 #include "AirInst.h"
 #include "AirSpecial.h"
@@ -128,4 +129,5 @@ private:
 
 } } } // namespace JSC::B3::Air
 
+#endif // ENABLE(MASM_PROBE)
 #endif // ENABLE(B3_JIT)
index 8c06c8c..e53be4b 100644 (file)
@@ -1,5 +1,15 @@
 2017-08-16  Mark Lam  <mark.lam@apple.com>
 
+        Add back the ability to disable MASM_PROBE from the build.
+        https://bugs.webkit.org/show_bug.cgi?id=175656
+        <rdar://problem/33933720>
+
+        Reviewed by Yusuke Suzuki.
+
+        * wtf/Platform.h:
+
+2017-08-16  Mark Lam  <mark.lam@apple.com>
+
         Gardening: fix GTK ARM_THUMB2 build.
         https://bugs.webkit.org/show_bug.cgi?id=175446
 
index 015b35a..c5dfeed 100644 (file)
 #define ENABLE_FAST_TLS_JIT 1
 #endif
 
-/* If the baseline jit is not available, then disable upper tiers as well: */
-#if !ENABLE(JIT)
+#if CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) || CPU(ARM64) || CPU(ARM_TRADITIONAL)
+#define ENABLE_MASM_PROBE 1
+#else
+#define ENABLE_MASM_PROBE 0
+#endif
+
+#if OS(WINDOW)
+#undef ENABLE_MASM_PROBE
+#define ENABLE_MASM_PROBE 0
+#endif
+#if PLATFORM(GTK) && CPU(ARM_THUMB2)
+/* FIXME: https://bugs.webkit.org/show_bug.cgi?id=175514 */
+#undef ENABLE_MASM_PROBE
+#define ENABLE_MASM_PROBE 0
+#endif
+
+/* If the baseline jit is not available, then disable upper tiers as well.
+   The MacroAssembler::probe() is also required for supporting the upper tiers. */
+#if !ENABLE(JIT) || !ENABLE(MASM_PROBE)
 #undef ENABLE_DFG_JIT
 #undef ENABLE_FTL_JIT
 #define ENABLE_DFG_JIT 0