Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (149343 => 149344)
--- trunk/Source/_javascript_Core/ChangeLog 2013-04-30 01:03:52 UTC (rev 149343)
+++ trunk/Source/_javascript_Core/ChangeLog 2013-04-30 01:22:32 UTC (rev 149344)
@@ -1,3 +1,25 @@
+2013-04-29 Benjamin Poulain <[email protected]>
+
+ Unify the data access of StringImpl members from _javascript_Core
+ https://bugs.webkit.org/show_bug.cgi?id=115320
+
+ Reviewed by Andreas Kling.
+
+ DFG accesses the member infos by directly calling the methods on StringImpl,
+ while the baseline JIT was using helper methods on ThunkHelpers.
+
+ Cut the middle man, and use StringImpl directly everywhere.
+
+ * jit/JITInlines.h:
+ (JSC::JIT::emitLoadCharacterString):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ * jit/JSInterfaceJIT.h:
+ * jit/ThunkGenerators.cpp:
+ (JSC::stringCharLoad):
+
2013-04-29 Benjamin Poulain <[email protected]>
Use push and pop for iOS math function thunks
Modified: trunk/Source/_javascript_Core/jit/JITInlines.h (149343 => 149344)
--- trunk/Source/_javascript_Core/jit/JITInlines.h 2013-04-30 01:03:52 UTC (rev 149343)
+++ trunk/Source/_javascript_Core/jit/JITInlines.h 2013-04-30 01:22:32 UTC (rev 149344)
@@ -82,12 +82,12 @@
failures.append(branch32(NotEqual, MacroAssembler::Address(src, ThunkHelpers::jsStringLengthOffset()), TrustedImm32(1)));
loadPtr(MacroAssembler::Address(src, ThunkHelpers::jsStringValueOffset()), dst);
failures.append(branchTest32(Zero, dst));
- loadPtr(MacroAssembler::Address(dst, ThunkHelpers::stringImplFlagsOffset()), regT1);
- loadPtr(MacroAssembler::Address(dst, ThunkHelpers::stringImplDataOffset()), dst);
+ loadPtr(MacroAssembler::Address(dst, StringImpl::flagsOffset()), regT1);
+ loadPtr(MacroAssembler::Address(dst, StringImpl::dataOffset()), dst);
JumpList is16Bit;
JumpList cont8Bit;
- is16Bit.append(branchTest32(Zero, regT1, TrustedImm32(ThunkHelpers::stringImpl8BitFlag())));
+ is16Bit.append(branchTest32(Zero, regT1, TrustedImm32(StringImpl::flagIs8Bit())));
load8(MacroAssembler::Address(dst, 0), dst);
cont8Bit.append(jump());
is16Bit.link(this);
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (149343 => 149344)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2013-04-30 01:03:52 UTC (rev 149343)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2013-04-30 01:22:32 UTC (rev 149344)
@@ -71,9 +71,9 @@
JumpList is16Bit;
JumpList cont8Bit;
// Load the string flags
- jit.loadPtr(Address(regT0, ThunkHelpers::stringImplFlagsOffset()), regT2);
- jit.loadPtr(Address(regT0, ThunkHelpers::stringImplDataOffset()), regT0);
- is16Bit.append(jit.branchTest32(Zero, regT2, TrustedImm32(ThunkHelpers::stringImpl8BitFlag())));
+ jit.loadPtr(Address(regT0, StringImpl::flagsOffset()), regT2);
+ jit.loadPtr(Address(regT0, StringImpl::dataOffset()), regT0);
+ is16Bit.append(jit.branchTest32(Zero, regT2, TrustedImm32(StringImpl::flagIs8Bit())));
jit.load8(BaseIndex(regT0, regT1, TimesOne, 0), regT0);
cont8Bit.append(jit.jump());
is16Bit.link(&jit);
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (149343 => 149344)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2013-04-30 01:03:52 UTC (rev 149343)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2013-04-30 01:22:32 UTC (rev 149344)
@@ -110,9 +110,9 @@
JumpList is16Bit;
JumpList cont8Bit;
// Load the string flags
- jit.loadPtr(Address(regT0, ThunkHelpers::stringImplFlagsOffset()), regT1);
- jit.loadPtr(Address(regT0, ThunkHelpers::stringImplDataOffset()), regT0);
- is16Bit.append(jit.branchTest32(Zero, regT1, TrustedImm32(ThunkHelpers::stringImpl8BitFlag())));
+ jit.loadPtr(Address(regT0, StringImpl::flagsOffset()), regT1);
+ jit.loadPtr(Address(regT0, StringImpl::dataOffset()), regT0);
+ is16Bit.append(jit.branchTest32(Zero, regT1, TrustedImm32(StringImpl::flagIs8Bit())));
jit.load8(BaseIndex(regT0, regT2, TimesOne, 0), regT0);
cont8Bit.append(jit.jump());
is16Bit.link(&jit);
Modified: trunk/Source/_javascript_Core/jit/JSInterfaceJIT.h (149343 => 149344)
--- trunk/Source/_javascript_Core/jit/JSInterfaceJIT.h 2013-04-30 01:03:52 UTC (rev 149343)
+++ trunk/Source/_javascript_Core/jit/JSInterfaceJIT.h 2013-04-30 01:22:32 UTC (rev 149344)
@@ -219,9 +219,6 @@
};
struct ThunkHelpers {
- static unsigned stringImplFlagsOffset() { return StringImpl::flagsOffset(); }
- static unsigned stringImpl8BitFlag() { return StringImpl::flagIs8Bit(); }
- static unsigned stringImplDataOffset() { return StringImpl::dataOffset(); }
static unsigned jsStringLengthOffset() { return OBJECT_OFFSETOF(JSString, m_length); }
static unsigned jsStringValueOffset() { return OBJECT_OFFSETOF(JSString, m_value); }
};
Modified: trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp (149343 => 149344)
--- trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp 2013-04-30 01:03:52 UTC (rev 149343)
+++ trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp 2013-04-30 01:22:32 UTC (rev 149344)
@@ -436,9 +436,9 @@
SpecializedThunkJIT::JumpList is16Bit;
SpecializedThunkJIT::JumpList cont8Bit;
// Load the string flags
- jit.loadPtr(MacroAssembler::Address(SpecializedThunkJIT::regT0, ThunkHelpers::stringImplFlagsOffset()), SpecializedThunkJIT::regT2);
- jit.loadPtr(MacroAssembler::Address(SpecializedThunkJIT::regT0, ThunkHelpers::stringImplDataOffset()), SpecializedThunkJIT::regT0);
- is16Bit.append(jit.branchTest32(MacroAssembler::Zero, SpecializedThunkJIT::regT2, MacroAssembler::TrustedImm32(ThunkHelpers::stringImpl8BitFlag())));
+ jit.loadPtr(MacroAssembler::Address(SpecializedThunkJIT::regT0, StringImpl::flagsOffset()), SpecializedThunkJIT::regT2);
+ jit.loadPtr(MacroAssembler::Address(SpecializedThunkJIT::regT0, StringImpl::dataOffset()), SpecializedThunkJIT::regT0);
+ is16Bit.append(jit.branchTest32(MacroAssembler::Zero, SpecializedThunkJIT::regT2, MacroAssembler::TrustedImm32(StringImpl::flagIs8Bit())));
jit.load8(MacroAssembler::BaseIndex(SpecializedThunkJIT::regT0, SpecializedThunkJIT::regT1, MacroAssembler::TimesOne, 0), SpecializedThunkJIT::regT0);
cont8Bit.append(jit.jump());
is16Bit.link(&jit);