Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (207998 => 207999)
--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp 2016-10-27 19:49:49 UTC (rev 207998)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp 2016-10-27 20:00:38 UTC (rev 207999)
@@ -31,6 +31,7 @@
#include "CSSSelector.h"
#include "CSSSelectorList.h"
+#include "DOMJITHelpers.h"
#include "Element.h"
#include "ElementData.h"
#include "ElementRareData.h"
@@ -2311,12 +2312,6 @@
return branchOnResolvingMode(Assembler::NotEqual, SelectorChecker::Mode::ResolvingStyle, checkingContext);
}
-static void getDocument(Assembler& assembler, Assembler::RegisterID element, Assembler::RegisterID output)
-{
- assembler.loadPtr(Assembler::Address(element, Node::treeScopeMemoryOffset()), output);
- assembler.loadPtr(Assembler::Address(output, TreeScope::documentScopeMemoryOffset()), output);
-}
-
void SelectorCodeGenerator::generateSpecialFailureInQuirksModeForActiveAndHoverIfNeeded(Assembler::JumpList& failureCases, const SelectorFragment& fragment)
{
if (fragment.onlyMatchesLinksInQuirksMode) {
@@ -2326,7 +2321,7 @@
// Only quirks mode restrict :hover and :active.
static_assert(sizeof(DocumentCompatibilityMode) == 1, "We generate a byte load/test for the compatibility mode.");
LocalRegister documentAddress(m_registerAllocator);
- getDocument(m_assembler, elementAddressRegister, documentAddress);
+ DOMJIT::loadDocument(m_assembler, elementAddressRegister, documentAddress);
failureCases.append(m_assembler.branchTest8(Assembler::NonZero, Assembler::Address(documentAddress, Document::compatibilityModeMemoryOffset()), Assembler::TrustedImm32(static_cast<std::underlying_type<DocumentCompatibilityMode>::type>(DocumentCompatibilityMode::QuirksMode))));
isLink.link(&m_assembler);
@@ -2992,7 +2987,7 @@
{
LocalRegister document(m_registerAllocator);
- getDocument(m_assembler, elementAddressRegister, document);
+ DOMJIT::loadDocument(m_assembler, elementAddressRegister, document);
failureCases.append(testIsHTMLClassOnDocument(Assembler::Zero, m_assembler, document));
}
@@ -3422,7 +3417,7 @@
caseSensitiveCases.append(testIsHTMLFlagOnNode(Assembler::Zero, m_assembler, elementAddressRegister));
{
LocalRegister document(m_registerAllocator);
- getDocument(m_assembler, elementAddressRegister, document);
+ DOMJIT::loadDocument(m_assembler, elementAddressRegister, document);
caseSensitiveCases.append(testIsHTMLClassOnDocument(Assembler::Zero, m_assembler, document));
}
@@ -3780,7 +3775,7 @@
void SelectorCodeGenerator::generateElementIsRoot(Assembler::JumpList& failureCases)
{
LocalRegister document(m_registerAllocator);
- getDocument(m_assembler, elementAddressRegister, document);
+ DOMJIT::loadDocument(m_assembler, elementAddressRegister, document);
failureCases.append(m_assembler.branchPtr(Assembler::NotEqual, Assembler::Address(document, Document::documentElementMemoryOffset()), elementAddressRegister));
}
@@ -3794,7 +3789,7 @@
Assembler::Jump scopeIsNotNull = m_assembler.branchTestPtr(Assembler::NonZero, scope);
- getDocument(m_assembler, elementAddressRegister, scope);
+ DOMJIT::loadDocument(m_assembler, elementAddressRegister, scope);
m_assembler.loadPtr(Assembler::Address(scope, Document::documentElementMemoryOffset()), scope);
scopeIsNotNull.link(&m_assembler);
@@ -3804,7 +3799,7 @@
void SelectorCodeGenerator::generateElementIsTarget(Assembler::JumpList& failureCases)
{
LocalRegister document(m_registerAllocator);
- getDocument(m_assembler, elementAddressRegister, document);
+ DOMJIT::loadDocument(m_assembler, elementAddressRegister, document);
failureCases.append(m_assembler.branchPtr(Assembler::NotEqual, Assembler::Address(document, Document::cssTargetMemoryOffset()), elementAddressRegister));
}
Modified: trunk/Source/WebCore/domjit/DOMJITHelpers.h (207998 => 207999)
--- trunk/Source/WebCore/domjit/DOMJITHelpers.h 2016-10-27 19:49:49 UTC (rev 207998)
+++ trunk/Source/WebCore/domjit/DOMJITHelpers.h 2016-10-27 20:00:38 UTC (rev 207999)
@@ -37,7 +37,10 @@
using JSC::CCallHelpers;
using JSC::GPRReg;
using JSC::JSValueRegs;
+using JSC::MacroAssembler;
+static_assert(std::is_same<GPRReg, MacroAssembler::RegisterID>::value, "GPRReg is the alias to the MacroAssembler::RegisterID");
+
inline CCallHelpers::Jump branchIfNotWorldIsNormal(CCallHelpers& jit, GPRReg globalObject)
{
return jit.branchTest8(CCallHelpers::Zero, CCallHelpers::Address(globalObject, JSDOMGlobalObject::offsetOfWorldIsNormal()));
@@ -137,6 +140,12 @@
return jit.branchIfNotType(target, JSC::JSType(JSDocumentWrapperType));
}
+inline void loadDocument(MacroAssembler& jit, GPRReg node, GPRReg output)
+{
+ jit.loadPtr(CCallHelpers::Address(node, Node::treeScopeMemoryOffset()), output);
+ jit.loadPtr(CCallHelpers::Address(output, TreeScope::documentScopeMemoryOffset()), output);
+}
+
} }
#endif
Modified: trunk/Source/WebCore/domjit/JSNodeDOMJIT.cpp (207998 => 207999)
--- trunk/Source/WebCore/domjit/JSNodeDOMJIT.cpp 2016-10-27 19:49:49 UTC (rev 207998)
+++ trunk/Source/WebCore/domjit/JSNodeDOMJIT.cpp 2016-10-27 20:00:38 UTC (rev 207999)
@@ -206,9 +206,7 @@
notDocument.link(&jit);
jit.loadPtr(CCallHelpers::Address(node, JSNode::offsetOfWrapped()), scratch);
- jit.loadPtr(CCallHelpers::Address(scratch, Node::treeScopeMemoryOffset()), scratch);
- jit.loadPtr(CCallHelpers::Address(scratch, TreeScope::documentScopeMemoryOffset()), scratch);
-
+ DOMJIT::loadDocument(jit, scratch, scratch);
DOMJIT::toWrapper<Document>(jit, params, scratch, globalObject, result, toWrapperSlow<Document>, globalObjectValue);
done.link(&jit);
return CCallHelpers::JumpList();