Title: [188867] branches/jsc-tailcall/Source/_javascript_Core
Revision
188867
Author
[email protected]
Date
2015-08-24 10:25:57 -0700 (Mon, 24 Aug 2015)

Log Message

jsc-tailcall: Introduce RegisterMap<T>
https://bugs.webkit.org/show_bug.cgi?id=148335

Reviewed by Michael Saboff.

Introduce RegisterMap<T>, GPRMap<T> and FPRMap<T> dense mappings for
Reg, GPRReg and FPRReg.

* _javascript_Core.vcxproj/_javascript_Core.vcxproj:
* _javascript_Core.vcxproj/_javascript_Core.vcxproj.filters:
* _javascript_Core.xcodeproj/project.pbxproj:
* jit/RegisterMap.h: Added.
(JSC::RegisterMap::operator[]):
(JSC::GPRMap::operator[]):
(JSC::FPRMap::operator[]):

Modified Paths

Added Paths

Diff

Modified: branches/jsc-tailcall/Source/_javascript_Core/ChangeLog (188866 => 188867)


--- branches/jsc-tailcall/Source/_javascript_Core/ChangeLog	2015-08-24 17:24:08 UTC (rev 188866)
+++ branches/jsc-tailcall/Source/_javascript_Core/ChangeLog	2015-08-24 17:25:57 UTC (rev 188867)
@@ -1,5 +1,23 @@
 2015-08-24  Basile Clement  <[email protected]>
 
+        jsc-tailcall: Introduce RegisterMap<T>
+        https://bugs.webkit.org/show_bug.cgi?id=148335
+
+        Reviewed by Michael Saboff.
+
+        Introduce RegisterMap<T>, GPRMap<T> and FPRMap<T> dense mappings for
+        Reg, GPRReg and FPRReg.
+
+        * _javascript_Core.vcxproj/_javascript_Core.vcxproj:
+        * _javascript_Core.vcxproj/_javascript_Core.vcxproj.filters:
+        * _javascript_Core.xcodeproj/project.pbxproj:
+        * jit/RegisterMap.h: Added.
+        (JSC::RegisterMap::operator[]):
+        (JSC::GPRMap::operator[]):
+        (JSC::FPRMap::operator[]):
+
+2015-08-24  Basile Clement  <[email protected]>
+
         jsc-tailcall: Make a bunch of MacroAssembler operations constexpr
         https://bugs.webkit.org/show_bug.cgi?id=148334
 

Modified: branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj (188866 => 188867)


--- branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj	2015-08-24 17:24:08 UTC (rev 188866)
+++ branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj	2015-08-24 17:25:57 UTC (rev 188867)
@@ -1400,6 +1400,7 @@
     <ClInclude Include="..\jit\Reg.h" />
     <ClInclude Include="..\jit\RegisterAtOffset.h" />
     <ClInclude Include="..\jit\RegisterAtOffsetList.h" />
+    <ClInclude Include="..\jit\RegisterMap.h" />
     <ClInclude Include="..\jit\RegisterPreservationWrapperGenerator.h" />
     <ClInclude Include="..\jit\RegisterSet.h" />
     <ClInclude Include="..\jit\Repatch.h" />

Modified: branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters (188866 => 188867)


--- branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters	2015-08-24 17:24:08 UTC (rev 188866)
+++ branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters	2015-08-24 17:25:57 UTC (rev 188867)
@@ -3784,6 +3784,9 @@
     <ClInclude Include="..\jit\Repatch.h">
       <Filter>jit</Filter>
     </ClInclude>
+    <ClInclude Include="..\jit\RegisterMap.h">
+      <Filter>jit</Filter>
+    </ClInclude>
     <ClInclude Include="..\jit\RegisterSet.h">
       <Filter>jit</Filter>
     </ClInclude>

Modified: branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (188866 => 188867)


--- branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2015-08-24 17:24:08 UTC (rev 188866)
+++ branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2015-08-24 17:25:57 UTC (rev 188867)
@@ -960,6 +960,7 @@
 		5DBB151B131D0B310056AD36 /* testapi.js in Copy Support Script */ = {isa = PBXBuildFile; fileRef = 14D857740A4696C80032146C /* testapi.js */; };
 		5DBB1525131D0BD70056AD36 /* minidom.js in Copy Support Script */ = {isa = PBXBuildFile; fileRef = 1412110D0A48788700480255 /* minidom.js */; };
 		5DE6E5B30E1728EC00180407 /* create_hash_table in Headers */ = {isa = PBXBuildFile; fileRef = F692A8540255597D01FF60F7 /* create_hash_table */; settings = {ATTRIBUTES = (); }; };
+		623A37EC1B87A7C000754209 /* RegisterMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 623A37EB1B87A7BD00754209 /* RegisterMap.h */; };
 		627673231B680C1E00FD9F2E /* CallMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 627673211B680C1E00FD9F2E /* CallMode.cpp */; };
 		627673241B680C1E00FD9F2E /* CallMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 627673221B680C1E00FD9F2E /* CallMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		62D2D38F1ADF103F000206C1 /* FunctionRareData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62D2D38D1ADF103F000206C1 /* FunctionRareData.cpp */; };
@@ -2676,6 +2677,7 @@
 		5DAFD6CB146B686300FBEFB4 /* JSC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = JSC.xcconfig; sourceTree = "<group>"; };
 		5DDDF44614FEE72200B4FB4D /* LLIntDesiredOffsets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LLIntDesiredOffsets.h; path = LLIntOffsets/LLIntDesiredOffsets.h; sourceTree = BUILT_PRODUCTS_DIR; };
 		5DE3D0F40DD8DDFB00468714 /* WebKitAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitAvailability.h; sourceTree = "<group>"; };
+		623A37EB1B87A7BD00754209 /* RegisterMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterMap.h; sourceTree = "<group>"; };
 		627673211B680C1E00FD9F2E /* CallMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CallMode.cpp; sourceTree = "<group>"; };
 		627673221B680C1E00FD9F2E /* CallMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallMode.h; sourceTree = "<group>"; };
 		62A9A29E1B0BED4800BD54CA /* DFGLazyNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGLazyNode.cpp; path = dfg/DFGLazyNode.cpp; sourceTree = "<group>"; };
@@ -3965,6 +3967,7 @@
 				6540C79F1B82D9CE000F6B79 /* RegisterAtOffset.h */,
 				6540C79C1B82D99D000F6B79 /* RegisterAtOffsetList.cpp */,
 				6540C79D1B82D99D000F6B79 /* RegisterAtOffsetList.h */,
+				623A37EB1B87A7BD00754209 /* RegisterMap.h */,
 				0F6B1CBB1861246A00845D97 /* RegisterPreservationWrapperGenerator.cpp */,
 				0F6B1CBC1861246A00845D97 /* RegisterPreservationWrapperGenerator.h */,
 				0FC3141418146D7000033232 /* RegisterSet.cpp */,
@@ -6113,6 +6116,7 @@
 				FEF68361174343CC00A32E25 /* JITStubsX86.h in Headers */,
 				FEF68360174343CC00A32E25 /* JITStubsX86_64.h in Headers */,
 				ADDB1F6318D77DBE009B58A8 /* OpaqueRootSet.h in Headers */,
+				623A37EC1B87A7C000754209 /* RegisterMap.h in Headers */,
 				A7A4AE1017973B4D005612B1 /* JITStubsX86Common.h in Headers */,
 				0F5EF91F16878F7D003E5C25 /* JITThunks.h in Headers */,
 				0FC712E317CD8793008CC93C /* JITToDFGDeferredCompilationCallback.h in Headers */,

Added: branches/jsc-tailcall/Source/_javascript_Core/jit/RegisterMap.h (0 => 188867)


--- branches/jsc-tailcall/Source/_javascript_Core/jit/RegisterMap.h	                        (rev 0)
+++ branches/jsc-tailcall/Source/_javascript_Core/jit/RegisterMap.h	2015-08-24 17:25:57 UTC (rev 188867)
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef RegisterMap_h
+#define RegisterMap_h
+
+#if ENABLE(JIT)
+
+#include "MacroAssembler.h"
+#include "Reg.h"
+
+namespace JSC {
+
+template<typename T>
+class RegisterMap {
+public:
+    T& operator[](Reg reg)
+    {
+        return m_map[reg.index()];
+    }
+
+    T& operator[](GPRReg gpr)
+    {
+        return m_map[MacroAssembler::registerIndex(gpr)];
+    }
+
+    T& operator[](FPRReg fpr)
+    {
+        return m_map[MacroAssembler::registerIndex(fpr)];
+    }
+
+    const T& operator[](Reg reg) const
+    {
+        return m_map[reg.index()];
+    }
+
+    const T& operator[](GPRReg gpr) const
+    {
+        return m_map[MacroAssembler::registerIndex(gpr)];
+    }
+
+    const T& operator[](FPRReg fpr) const
+    {
+        return m_map[MacroAssembler::registerIndex(fpr)];
+    }
+
+private:
+    std::array<T, MacroAssembler::totalNumberOfRegisters()> m_map { };
+};
+
+template<typename T>
+class GPRMap {
+public:
+    T& operator[](GPRReg gpr)
+    {
+        return m_map[MacroAssembler::registerIndex(gpr)];
+    }
+
+    const T& operator[](GPRReg gpr) const
+    {
+        return m_map[MacroAssembler::registerIndex(gpr)];
+    }
+
+private:
+    std::array<T, MacroAssembler::numberOfRegisters()> m_map { };
+};
+
+template<typename T>
+class FPRMap {
+public:
+    T& operator[](FPRReg fpr)
+    {
+        return m_map[MacroAssembler::fpRegisterIndex(fpr)];
+    }
+
+    const T& operator[](FPRReg fpr) const
+    {
+        return m_map[MacroAssembler::fpRegisterIndex(fpr)];
+    }
+
+private:
+    std::array<T, MacroAssembler::numberOfFPRegisters()> m_map { };
+};
+
+} // namespace JSC
+
+#endif // ENABLE(JIT)
+
+#endif // RegisterMap_h
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to