blob: 52d3c36e71ce23d0a33dba255f46b78aab46f8b2 [file] [log] [blame]
2009-06-15 Gavin Barraclough <barraclough@apple.com>
Rubber Stamped by Sam Weinig.
Rename PatchBuffer to LinkBuffer. Previously our terminology has been a little
mixed up, but we have decided to fix on refering to the process that takes place
at the end of code generation as 'linking', and on any modifications that take
place later (and once the code has potentially already been executed) as 'patching'.
However, the term 'PatchBuffer' is already in use, and needs to be repurposed.
To try to minimize confusion, we're going to switch the terminology over in stages,
so for now we'll refer to later modifications as 'repatching'. This means that the
new 'PatchBuffer' has been introduced with the name 'RepatchBuffer' instead.
This patch renames the old 'PatchBuffer' to 'LinkBuffer'. We'll leave ToT in this
state for a week or so to try to avoid to much overlap of the meaning of the term
'PatchBuffer', then will come back and rename 'RepatchBuffer'.
* assembler/ARMv7Assembler.h:
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::LinkBuffer::LinkBuffer):
(JSC::AbstractMacroAssembler::LinkBuffer::~LinkBuffer):
* jit/JIT.cpp:
(JSC::JIT::privateCompile):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::privateCompilePatchGetArrayLength):
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdSelfList):
(JSC::JIT::privateCompileGetByIdProtoList):
(JSC::JIT::privateCompileGetByIdChainList):
(JSC::JIT::privateCompileGetByIdChain):
* yarr/RegexJIT.cpp:
(JSC::Yarr::RegexGenerator::compile):
2009-06-15 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
Having moved most of their functionality into the RepatchBuffer class,
we can simplify the CodeLocation* classes.
The CodeLocation* classes are currently a tangle of templatey and friendly
badness, burried in the middle of AbstractMacroAssembler. Having moved
the ability to repatch out into RepatchBufer they are now do-nothing wrappers
on CodePtr (MacroAssemblerCodePtr), that only exist to provide type-safety.
Simplify the code, and move them off into their own header.
* JavaScriptCore.xcodeproj/project.pbxproj:
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::PatchBuffer::patch):
* assembler/CodeLocation.h: Copied from assembler/AbstractMacroAssembler.h.
(JSC::CodeLocationCommon::CodeLocationCommon):
(JSC::CodeLocationInstruction::CodeLocationInstruction):
(JSC::CodeLocationLabel::CodeLocationLabel):
(JSC::CodeLocationJump::CodeLocationJump):
(JSC::CodeLocationCall::CodeLocationCall):
(JSC::CodeLocationNearCall::CodeLocationNearCall):
(JSC::CodeLocationDataLabel32::CodeLocationDataLabel32):
(JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr):
(JSC::CodeLocationCommon::instructionAtOffset):
(JSC::CodeLocationCommon::labelAtOffset):
(JSC::CodeLocationCommon::jumpAtOffset):
(JSC::CodeLocationCommon::callAtOffset):
(JSC::CodeLocationCommon::nearCallAtOffset):
(JSC::CodeLocationCommon::dataLabelPtrAtOffset):
(JSC::CodeLocationCommon::dataLabel32AtOffset):
* assembler/MacroAssemblerCodeRef.h:
(JSC::MacroAssemblerCodePtr::operator!):
* bytecode/CodeBlock.h:
(JSC::getStructureStubInfoReturnLocation):
(JSC::getCallLinkInfoReturnLocation):
(JSC::getMethodCallLinkInfoReturnLocation):
* bytecode/Instruction.h:
* bytecode/JumpTable.h:
(JSC::StringJumpTable::ctiForValue):
(JSC::SimpleJumpTable::ctiForValue):
* bytecode/StructureStubInfo.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitCatch):
* jit/JIT.cpp:
(JSC::JIT::privateCompile):
* jit/JITStubs.cpp:
(JSC::JITStubs::DEFINE_STUB_FUNCTION):
(JSC::JITStubs::getPolymorphicAccessStructureListSlot):
2009-06-15 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
Having introduced the RepatchBuffer, ProcessorReturnAddress is now a do-nothing
wrapper around ReturnAddressPtr. Remove it. In tugging on this piece of string
it made sense to roll out the use of ReturnAddressPtr a little further into
JITStubs (which had always been the intention).
No performance impact.
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline):
(JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction):
(JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline):
* assembler/MacroAssemblerCodeRef.h:
(JSC::ReturnAddressPtr::ReturnAddressPtr):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::getStubInfo):
(JSC::CodeBlock::getCallLinkInfo):
(JSC::CodeBlock::getMethodCallLinkInfo):
(JSC::CodeBlock::getBytecodeIndex):
* interpreter/Interpreter.cpp:
(JSC::bytecodeOffsetForPC):
* jit/JIT.cpp:
(JSC::ctiPatchNearCallByReturnAddress):
(JSC::ctiPatchCallByReturnAddress):
* jit/JIT.h:
(JSC::JIT::compileGetByIdProto):
(JSC::JIT::compileGetByIdChain):
(JSC::JIT::compilePutByIdTransition):
(JSC::JIT::compilePatchGetArrayLength):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::patchGetByIdSelf):
(JSC::JIT::patchPutByIdReplace):
(JSC::JIT::privateCompilePatchGetArrayLength):
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdChain):
* jit/JITStubs.cpp:
(JSC::JITThunks::tryCachePutByID):
(JSC::JITThunks::tryCacheGetByID):
(JSC::StackHack::StackHack):
(JSC::returnToThrowTrampoline):
(JSC::throwStackOverflowError):
(JSC::JITStubs::DEFINE_STUB_FUNCTION):
* jit/JITStubs.h:
(JSC::):
(JSC::JITStackFrame::returnAddressSlot):
* runtime/JSGlobalData.h:
2009-06-15 Simon Fraser <simon.fraser@apple.com>
Reviewed by Mark Rowe.
<rdar://problem/6974857>
Define ENABLE_3D_RENDERING when building on 10.6, and move ENABLE_3D_RENDERING
switch from config.h to wtf/Platform.h.
* Configurations/FeatureDefines.xcconfig:
* wtf/Platform.h:
2009-06-15 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Move repatching methods into a set of methods on a class. This will allow us to
coallesce memory reprotection calls. Really, we want this class to be called
PatchBuffer, we want the class PatchBuffer to be called LinkBuffer, we want both
to be memblers of MacroAssembler rather then AbstractMacroAssembler, we don't
want the CodeLocationFoo types anymore (they are now only really there to provide
type safety, and that is completely undermined by the way we use offsets). Then
the link & patch buffers should delegate the actual patching calls to the
architecture-specific layer of the MacroAssembler. Landing all these changes as a
sequence of patches.
No performance impact.
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall):
(JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall):
(JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue):
(JSC::AbstractMacroAssembler::RepatchBuffer::RepatchBuffer):
(JSC::AbstractMacroAssembler::RepatchBuffer::relink):
(JSC::AbstractMacroAssembler::RepatchBuffer::repatch):
(JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline):
(JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction):
(JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline):
(JSC::AbstractMacroAssembler::RepatchBuffer::repatchLoadPtrToLEA):
* jit/JIT.cpp:
(JSC::ctiPatchNearCallByReturnAddress):
(JSC::ctiPatchCallByReturnAddress):
(JSC::JIT::unlinkCall):
(JSC::JIT::linkCall):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::patchGetByIdSelf):
(JSC::JIT::patchMethodCallProto):
(JSC::JIT::patchPutByIdReplace):
(JSC::JIT::privateCompilePatchGetArrayLength):
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdSelfList):
(JSC::JIT::privateCompileGetByIdProtoList):
(JSC::JIT::privateCompileGetByIdChainList):
(JSC::JIT::privateCompileGetByIdChain):
2009-06-15 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Hunt & Oliver Garen.
We are currently generating two copies of the slow path for op_call for no reason. Stop that.
Originally op_call used two slow paths since the first set up the pointer to the CallLinkInfo
for use when linking. However this is now looked up using the return address (as we do for
property accesses) so the two paths are now identical.
No performance impact, reduces memory footprint.
* bytecode/CodeBlock.h:
* jit/JIT.cpp:
(JSC::JIT::privateCompile):
(JSC::JIT::linkCall):
* jit/JIT.h:
* jit/JITCall.cpp:
(JSC::JIT::compileOpCallSlowCase):
* jit/JITStubs.cpp:
(JSC::JITStubs::DEFINE_STUB_FUNCTION):
2009-06-12 Dave Hyatt <hyatt@apple.com>
Reviewed by Anders Carlsson.
https://bugs.webkit.org/show_bug.cgi?id=26373
Add a new class to Threading in wtf called ReadWriteLock that handles single writer/multiple reader locking.
Provide a pthreads-only implementation of the lock for now, as this class is only going to be used
on Snow Leopard at first.
* wtf/Threading.h:
(WTF::ReadWriteLock::impl):
* wtf/ThreadingPthreads.cpp:
(WTF::ReadWriteLock::ReadWriteLock):
(WTF::ReadWriteLock::~ReadWriteLock):
(WTF::ReadWriteLock::readLock):
(WTF::ReadWriteLock::tryReadLock):
(WTF::ReadWriteLock::writeLock):
(WTF::ReadWriteLock::tryWriteLock):
(WTF::ReadWriteLock::unlock):
2009-06-12 Oliver Hunt <oliver@apple.com>
Reviewed by Geoff Garen.
Make LiteralParser non-recursive
Convert LiteralParser from using a simple recursive descent parser
to a hand rolled PDA. Relatively simple conversion, but required
modifications to MarkedArgumentBuffer to make it more suitable as
a generic marked vector. I'll refactor and rename MarkedArgumentBuffer
in future as there are many other cases where it will be useful to
have such a class.
* runtime/ArgList.h:
(JSC::MarkedArgumentBuffer::MarkedArgumentBuffer):
(JSC::MarkedArgumentBuffer::append):
(JSC::MarkedArgumentBuffer::removeLast):
(JSC::MarkedArgumentBuffer::last):
* runtime/LiteralParser.cpp:
(JSC::LiteralParser::parse):
* runtime/LiteralParser.h:
(JSC::LiteralParser::LiteralParser):
(JSC::LiteralParser::tryLiteralParse):
(JSC::LiteralParser::):
2009-06-12 David Levin <levin@chromium.org>
Reviewed by NOBODY (build fix for windows).
Adjust the exports for JSC on Windows like what was done for OSX in
the previous commit.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-06-12 David Levin <levin@chromium.org>
Reviewed by Darin Adler.
UString shouldn't create sharedBuffer for SmallStrings.
https://bugs.webkit.org/show_bug.cgi?id=26360
The methods changed are not used by JSC, so there is no JS perf impact. However,
there is a potential DOM perf impact, so I re-ran several of the tests that
I ran previously and ensured that the perf stay the same which caused me to
adjust the minLengthToShare.
* JavaScriptCore.exp:
* runtime/UString.cpp:
(JSC::UString::Rep::sharedBuffer):
Determines if the buffer being shared is big enough before doing so.
Previously, BaseString::sharedBuffer was called but it would only know
the length of the base string (BaseString::len) which may not be the same
as the string being shared (Rep::len).
(JSC::UString::BaseString::sharedBuffer):
This is now only be used by Rep::sharedBuffer. which does the length check.
* runtime/UString.h:
2009-06-12 Dimitri Glazkov <dglazkov@chromium.org>
Reviewed by Eric Seidel.
https://bugs.webkit.org/show_bug.cgi?id=26191
Remove xmath include in MathExtras.h, because it is not needed and also
breaks VS2008 builds with TR1 turned on.
* wtf/MathExtras.h: Removed xmath include.
2009-06-12 Peter Kasting <pkasting@google.com>
Reviewed by Eric Seidel.
* ChangeLog-2007-10-14: Change pseudonym "Don Gibson" to me (was used while Google Chrome was not public); update my email address.
2009-06-12 Kevin Ollivier <kevino@theolliviers.com>
wx build fix. Adding JSONObject.cpp to the build.
* JavaScriptCoreSources.bkl:
2009-06-12 Laszlo Gombos <laszlo.1.gombos@nokia.com>
Reviewed by Jan Michael Alonzo.
[Qt] Fix build break
https://bugs.webkit.org/show_bug.cgi?id=26340
* JavaScriptCore.pri: Add JSONObject.cpp to LUT files.
2009-06-11 Oliver Hunt <oliver@apple.com>
Reviewed by NOBODY (build fix).
Lower stringify recursion limit to deal with small windows stack.
* JavaScriptCore.xcodeproj/project.pbxproj:
* runtime/JSONObject.cpp:
(JSC::Stringifier::):
2009-06-11 Laszlo Gombos <laszlo.1.gombos@nokia.com>
Reviewed by Holger Freyther.
Fix compilation warnings
<https://bugs.webkit.org/show_bug.cgi?id=26015>
* wtf/ThreadingNone.cpp:
(WTF::ThreadCondition::wait): Fix compilation warning.
(WTF::ThreadCondition::timedWait): Ditto.
2009-06-10 Brent Fulgham <bfulgham@webkit.org>
Build fix for Windows target.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
Correct missing </File> tag after @r44550 that prevents the
project from being loaded in the Visual Studio IDE.
2009-06-09 Gavin Barraclough <barraclough@apple.com>
Rubber Stamped by Mark Rowe.
Tidy up a couple of comments.
* assembler/ARMv7Assembler.h:
Fix date in copyright, neaten up a couple of comments.
* assembler/MacroAssemblerARMv7.h:
Fix date in copyright.
2009-06-07 Oliver Hunt <oliver@apple.com>
Reviewed by Sam Weinig.
Bug 26249: Support JSON.stringify
<https://bugs.webkit.org/show_bug.cgi?id=26249>
Implement JSON.stringify. This patch handles all the semantics of the ES5
JSON.stringify function, including replacer functions and arrays and both
string and numeric gap arguments.
Currently uses a clamped recursive algorithm basically identical to the spec
description but with a few minor tweaks for performance and corrected semantics
discussed in the es-discuss mailing list.
* DerivedSources.make:
* GNUmakefile.am:
* JavaScriptCore.pri:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
* JavaScriptCore.xcodeproj/project.pbxproj:
* interpreter/CallFrame.h:
(JSC::ExecState::jsonTable):
* runtime/CommonIdentifiers.h:
add toJSON to the list of common identifiers
* runtime/JSGlobalData.cpp:
(JSC::JSGlobalData::JSGlobalData):
(JSC::JSGlobalData::~JSGlobalData):
* runtime/JSGlobalData.h:
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::reset):
Add support for the JSON object lookup table
* runtime/JSONObject.cpp: Added.
(JSC::):
(JSC::JSONObject::getOwnPropertySlot):
(JSC::Stringifier::):
(JSC::Stringifier::Stringifier):
(JSC::Stringifier::stringify):
(JSC::Stringifier::appendString):
(JSC::Stringifier::StringKeyGenerator::StringKeyGenerator):
(JSC::Stringifier::StringKeyGenerator::getKey):
(JSC::Stringifier::IntKeyGenerator::IntKeyGenerator):
(JSC::Stringifier::IntKeyGenerator::getKey):
These KeyGenerator classes are used to abstract away the lazy evaluation of keys for
toJSON and replacer functions.
(JSC::Stringifier::toJSONValue):
(JSC::Stringifier::stringifyArray):
(JSC::Stringifier::stringifyObject):
(JSC::JSONProtoFuncStringify):
* runtime/JSONObject.h: Added.
(JSC::JSONObject:::JSObject):
(JSC::JSONObject::classInfo):
(JSC::JSONObject::createStructure):
2009-06-09 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
Enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS on ARMv7 platforms.
These optimizations function correctly with no further changes.
* wtf/Platform.h:
Change to enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS.
2009-06-09 Gavin Barraclough <barraclough@apple.com>
Not Reviewed, build fix.
* assembler/MacroAssemblerARMv7.h:
2009-06-09 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
Enable JIT_OPTIMIZE_ARITHMETIC on ARMv7 platforms.
Temporarily split support for 'branchTruncateDoubleToInt32' onto its own switch
('supportsFloatingPointTruncate'). See comment in MacroAssemblerARMv7, we need
to work out wherther we are going to be able to support the current interface on
all platforms, or whether this should be refactored.
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::supportsFloatingPoint):
Add implementation of supportsFloatingPointTruncate (returns true).
(JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
Add implementation of supportsFloatingPointTruncate (returns false).
(JSC::MacroAssemblerARMv7::loadDouble):
(JSC::MacroAssemblerARMv7::storeDouble):
(JSC::MacroAssemblerARMv7::addDouble):
(JSC::MacroAssemblerARMv7::subDouble):
(JSC::MacroAssemblerARMv7::mulDouble):
(JSC::MacroAssemblerARMv7::convertInt32ToDouble):
(JSC::MacroAssemblerARMv7::branchDouble):
Implement FP code genertion operations.
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
Add implementation of supportsFloatingPointTruncate (returns true).
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
Add implementation of supportsFloatingPointTruncate (returns true).
* jit/JITArithmetic.cpp:
(JSC::JIT::emit_op_rshift):
Changed to call supportsFloatingPointTruncate().
(JSC::JIT::emitSlow_op_rshift):
Changed to call supportsFloatingPointTruncate().
* wtf/Platform.h:
Change to enable JIT_OPTIMIZE_ARITHMETIC.
2009-06-09 Gavin Barraclough <barraclough@apple.com>
Reviewed by Mark Rowe & Geoff Garen.
Enable JIT_OPTIMIZE_PROPERTY_ACCESS on ARMv7 platforms.
Firm up interface for planting load intructions that will be repatched by
repatchLoadPtrToLEA(). This method should now no longer be applied to just
any loadPtr instruction.
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::loadPtrWithPatchToLEA):
Implement loadPtrWithPatchToLEA interface (plants a load with a fixed width address).
(JSC::MacroAssemblerARMv7::move):
(JSC::MacroAssemblerARMv7::nearCall):
(JSC::MacroAssemblerARMv7::call):
(JSC::MacroAssemblerARMv7::moveWithPatch):
(JSC::MacroAssemblerARMv7::tailRecursiveCall):
Switch to use common method 'moveFixedWidthEncoding()' to perform fixed width (often patchable) loads.
(JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):
Move an immediate to a register, always plants movT3/movt instruction pair.
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::loadPtrWithPatchToLEA):
Implement loadPtrWithPatchToLEA interface (just a regular 32-bit load on x86).
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::loadPtrWithPatchToLEA):
Implement loadPtrWithPatchToLEA interface (just a regular 64-bit load on x86_64).
* jit/JITPropertyAccess.cpp:
(JSC::JIT::compileGetByIdHotPath):
(JSC::JIT::emit_op_put_by_id):
* wtf/Platform.h:
Change to enable JIT_OPTIMIZE_PROPERTY_ACCESS.
2009-06-08 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
Enable JS language JIT for ARM thumb2 platforms. Add ARMv7 specific
asm & constants, add appropriate configuration switches to Platform.h.
Landing this disabled until jump linking is completed (see YARR jit patch).
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::load32):
Fix: should load pointer with ImmPtr not Imm32.
(JSC::MacroAssemblerARMv7::store32):
Fix: should load pointer with ImmPtr not Imm32.
(JSC::MacroAssemblerARMv7::move):
Fix: When moving an Imm32 that is actually a pointer, should call movT3()
not mov(), to ensure code generation is repeatable (for exception handling).
* jit/JIT.cpp:
(JSC::JIT::privateCompileCTIMachineTrampolines):
Disable JIT_OPTIMIZE_NATIVE_CALL specific code generation if the optimization is not enabled.
* jit/JIT.h:
Add ARMv7 specific values of constants & register names.
* jit/JITInlineMethods.h:
(JSC::JIT::preverveReturnAddressAfterCall):
(JSC::JIT::restoreReturnAddressBeforeReturn):
(JSC::JIT::restoreArgumentReferenceForTrampoline):
Implement for ARMv7 (move value to/from lr).
* jit/JITStubs.cpp:
Add JIT entry/thow trampolines, add macro to add thunk wrapper around stub routines.
* jit/JITStubs.h:
(JSC::JITStackFrame::returnAddressSlot):
Add ARMv7 stack frame object.
* wtf/Platform.h:
Add changes necessary to allow JIT to build on this platform, disabled.
2009-06-08 Mark Rowe <mrowe@apple.com>
Speculative GTK build fix.
* wtf/DateMath.cpp:
2009-06-08 Gavin Barraclough <barraclough@apple.com>
Reviewed by Mark Rowe.
Previous patch caused a regression.
Restructure so no new (empty, inline) function calls are added on x86.
* jit/ExecutableAllocator.h:
(JSC::ExecutableAllocator::makeWritable):
(JSC::ExecutableAllocator::makeExecutable):
(JSC::ExecutableAllocator::reprotectRegion):
(JSC::ExecutableAllocator::cacheFlush):
2009-06-08 Dimitri Glazkov <dglazkov@chromium.org>
Unreviewed, GTK build fix (thanks, bdash).
* GNUmakefile.am: Moved DateMath with all other wtf kin.
2009-06-08 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
Add (incomplete) support to YARR for running with the jit enabled
on Arm thumb2 platforms. Adds new Assembler/MacroAssembler classes,
along with cache flushing support, tweaks to MacroAssemblerCodePtr
to support decorated thumb code pointers, and new enter/exit code
to YARR jit for the platform.
Support for this platform is still under development - the assembler
currrently only supports planting and linking jumps with a 16Mb range.
As such, initially commiting in a disabled state.
* JavaScriptCore.xcodeproj/project.pbxproj:
Add new assembler files.
* assembler/ARMv7Assembler.h: Added.
Add new Assembler.
* assembler/AbstractMacroAssembler.h:
Tweaks to ensure sizes of pointer values planted in JIT code do not change.
* assembler/MacroAssembler.h:
On ARMv7 platforms use MacroAssemblerARMv7.
* assembler/MacroAssemblerARMv7.h: Added.
Add new MacroAssembler.
* assembler/MacroAssemblerCodeRef.h:
(JSC::FunctionPtr::FunctionPtr):
Add better ASSERT.
(JSC::ReturnAddressPtr::ReturnAddressPtr):
Add better ASSERT.
(JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
On ARMv7, MacroAssemblerCodePtr's mush be 'decorated' with a low bit set,
to indicate to the processor that the code is thumb code, not traditional
32-bit ARM.
(JSC::MacroAssemblerCodePtr::dataLocation):
On ARMv7, decoration must be removed.
* jit/ExecutableAllocator.h:
(JSC::ExecutableAllocator::makeWritable):
Reformatted, no change.
(JSC::ExecutableAllocator::makeExecutable):
When marking code executable also cache flush it, where necessary.
(JSC::ExecutableAllocator::MakeWritable::MakeWritable):
Only use the null implementation of this class if both !ASSEMBLER_WX_EXCLUSIVE
and running on x86(_64) - on other platforms we may also need ensure that
makeExecutable is called at the end to flush caches.
(JSC::ExecutableAllocator::reprotectRegion):
Reformatted, no change.
(JSC::ExecutableAllocator::cacheFlush):
Cache flush a region of memory, or platforms where this is necessary.
* wtf/Platform.h:
Add changes necessary to allow YARR jit to build on this platform, disabled.
* yarr/RegexJIT.cpp:
(JSC::Yarr::RegexGenerator::generateEnter):
(JSC::Yarr::RegexGenerator::generateReturn):
Add support to these methods for ARMv7.
2009-06-08 Dimitri Glazkov <dglazkov@chromium.org>
Unreviewed, fix my previous fix.
* runtime/DateInstance.cpp:
(JSC::DateInstance::msToGregorianDateTime): Use WTF namespace qualifier to
disambiguate func signatures.
2009-06-08 Mark Rowe <mrowe@apple.com>
Attempt to fix the Tiger build.
* wtf/Platform.h: Only test the value of the macro once we know it is defined.
2009-06-08 Dimitri Glazkov <dglazkov@chromium.org>
Unreviewed, another Windows build fix.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-06-08 Dimitri Glazkov <dglazkov@chromium.org>
Unreviewed, projectile-fixing Windows build.
* runtime/DateConversion.cpp: Added StringExtras include.
* wtf/DateMath.cpp: Replaced math with algorithm include (looking for std::min def for Windows).
2009-06-08 Dimitri Glazkov <dglazkov@chromium.org>
Unreviewed, Windows build fix.
* runtime/DateConstructor.cpp: Changed to use WTF namespace.
* runtime/DateConversion.cpp: Added UString include.
* runtime/DateInstance.cpp: Changed to use WTF namespace.
* wtf/DateMath.cpp: Added math include.
2009-06-08 Dimitri Glazkov <dglazkov@chromium.org>
Reviewed by Eric Seidel.
https://bugs.webkit.org/show_bug.cgi?id=26238
Move most of runtime/DateMath functions to wtf/DateMath, and split off conversion-related
helpers to DateConversion.
* AllInOneFile.cpp: Changed DateMath->DateConversion.
* GNUmakefile.am: Ditto and added DateMath.
* JavaScriptCore.exp: Ditto.
* JavaScriptCore.pri: Ditto.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
* JavaScriptCore.vcproj/WTF/WTF.vcproj: Added DateMath.
* JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
* JavaScriptCoreSources.bkl: Ditto.
* pcre/pcre_exec.cpp: Changed to use DateMath.
* profiler/ProfileNode.cpp:
(JSC::getCount): Changed to use DateConversion.
* runtime/DateConstructor.cpp: Ditto.
* runtime/DateConversion.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp.
(JSC::parseDate): Refactored to use null-terminated characters as input.
* runtime/DateConversion.h: Copied from JavaScriptCore/runtime/DateMath.h.
* runtime/DateInstance.cpp: Changed to use wtf/DateMath.
* runtime/DateInstance.h: Ditto.
* runtime/DateMath.cpp: Removed.
* runtime/DateMath.h: Removed.
* runtime/DatePrototype.cpp: Ditto.
* runtime/InitializeThreading.cpp: Ditto.
* wtf/DateMath.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp.
* wtf/DateMath.h: Copied from JavaScriptCore/runtime/DateMath.h.
2009-06-08 Steve Falkenburg <sfalken@apple.com>
Windows build fix.
* JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
2009-06-07 David Kilzer <ddkilzer@apple.com>
Make JavaScriptCore compile for iPhone and iPhone Simulator
Reviewed by Gavin Barraclough.
* Configurations/Base.xcconfig: Split GCC_ENABLE_OBJC_GC on
$(REAL_PLATFORM_NAME). Added $(ARCHS_UNIVERSAL_IPHONE_OS) to
VALID_ARCHS. Added REAL_PLATFORM_NAME_iphoneos,
REAL_PLATFORM_NAME_iphonesimulator, HAVE_DTRACE_iphoneos and
HAVE_DTRACE_iphonesimulator variables.
* Configurations/DebugRelase.xcconfig: Split ARCHS definition on
$(REAL_PLATFORM_NAME).
* Configurations/JavaScriptCore.xcconfig: Added
EXPORTED_SYMBOLS_FILE_armv6 and EXPORTED_SYMBOLS_FILE_armv7
variables. Split OTHER_LDFLAGS into OTHER_LDFLAGS_BASE and
OTHER_LDFLAGS_$(REAL_PLATFORM_NAME) since CoreServices.framework
is only linked to on Mac OS X.
* JavaScriptCore.xcodeproj/project.pbxproj: Removed references
to CoreServices.framework since it's linked using OTHER_LDFLAGS
in JavaScriptCore.xcconfig.
* profiler/ProfilerServer.mm: Added #import for iPhone
Simulator.
(-[ProfilerServer init]): Conditionalize use of
NSDistributedNotificationCenter to non-iPhone or iPhone
Simulator.
* wtf/FastMalloc.cpp:
(WTF::TCMallocStats::): Build fix for iPhone and iPhone
Simulator.
* wtf/Platform.h: Defined PLATFORM(IPHONE) and
PLATFORM(IPHONE_SIMULATOR).
* wtf/ThreadingPthreads.cpp:
(WTF::setThreadNameInternal): Build fix for iPhone and iPhone
Simulator.
2009-06-08 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
Reviewed by Simon Hausmann.
[Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build
* JavaScriptCore.pri:
* JavaScriptCore.pro:
* jsc.pro:
2009-06-07 Gavin Barraclough <barraclough@apple.com>
RS by Sam Weinig.
Remove bonus bogus \n from last commit.
* jit/JITStubs.cpp:
(JSC::):
2009-06-07 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
Change the implementation of op_throw so the stub function always modifies its
return address - if it doesn't find a 'catch' it will switch to a trampoline
to force a return from JIT execution. This saves memory, by avoiding the need
for a unique return for every op_throw.
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_throw):
JITStubs::cti_op_throw now always changes its return address,
remove return code generated after the stub call (this is now
handled by ctiOpThrowNotCaught).
* jit/JITStubs.cpp:
(JSC::):
Add ctiOpThrowNotCaught definitions.
(JSC::JITStubs::DEFINE_STUB_FUNCTION):
Change cti_op_throw to always change its return address.
* jit/JITStubs.h:
Add ctiOpThrowNotCaught declaration.
2009-06-05 Gavin Barraclough <barraclough@apple.com>
Rudder stamped by Sam Weinig.
Add missing ASSERT.
* assembler/X86Assembler.h:
(JSC::X86Assembler::getRelocatedAddress):
2009-06-05 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
Switch storePtrWithPatch to take the initial immediate value as an argument.
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::storePtrWithPatch):
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::storePtrWithPatch):
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_jsr):
2009-06-05 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
Remove patchLength..tByIdExternalLoadPrefix magic numbers from JIT.h.
These aren't really suitable values to be tracking within common code
of the JIT, since they are not (and realistically cannot) be checked
by ASSERTs, as the other repatch offsets are. Move this functionality
(skipping the REX prefix when patching load instructions to LEAs on
x86-64) into the X86Assembler.
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadPtrToLEA):
* assembler/X86Assembler.h:
(JSC::X86Assembler::repatchLoadPtrToLEA):
* jit/JIT.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::patchGetByIdSelf):
(JSC::JIT::patchPutByIdReplace):
2009-06-05 Shinichiro Hamaji <hamaji@chromium.org>
Bug 26160: Compile fails in MacOSX when GNU fileutils are installed
<https://bugs.webkit.org/show_bug.cgi?id=26160>
Reviewed by Alexey Proskuryakov.
Use /bin/ln instead of ln for cases where this command is used with -h option.
As this option is not supported by GNU fileutils, this change helps users
who have GNU fileutils in their PATH.
* JavaScriptCore.xcodeproj/project.pbxproj:
2009-06-05 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Remove DoubleNotEqual floating point comparison condition for now -
it is not used, and it is unclear the semantics are correct (I think
this comparison would actually give you not-equal-or-unordered, which
might be what is wanted... we can revisit this interface & get it
right when required).
Also, fix asserts in branchArith32 ops. All adds & subs can check
for Signed, multiply only sets OF so can only check for overflow.
* assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::):
(JSC::MacroAssemblerX86Common::branchAdd32):
(JSC::MacroAssemblerX86Common::branchMul32):
(JSC::MacroAssemblerX86Common::branchSub32):
2009-06-05 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Minor tidy up in JITStubs.
* jit/JITStubs.cpp:
(JSC::StackHack::StackHack):
* jit/JITStubs.h:
2009-06-05 Koen Kooi <koen@dominion.thruhere.net>
Reviewed by Xan Lopez.
Build fix for glib unicode backend.
* wtf/unicode/glib/UnicodeMacrosFromICU.h:
2009-06-05 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
3 tiny cleanups:
* assembler/MacroAssemblerX86.h:
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::storePtrWithPatch):
store*() methods should take an ImplicitAddress, rather than an Address.
* assembler/X86Assembler.h:
Make patchPointer private.
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_ret):
Remove empty line at end of function.
2009-06-05 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Encapsulate many uses of void* in the assembler & jit with types that provide
more semantic information. The new types are:
* MacroAssemblerCodePtr - this wraps a pointer into JIT generated code.
* FunctionPtr - this wraps a pointer to a C/C++ function in JSC.
* ReturnAddressPtr - this wraps a return address resulting from a 'call' instruction.
Wrapping these types allows for stronger type-checking than is possible with everything
represented a void*. For example, it is now enforced by the type system that near
calls can only be linked to JIT code and not to C functions in JSC (this was previously
required, but could not be enforced on the interface).
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon):
(JSC::AbstractMacroAssembler::CodeLocationCommon::dataLocation):
(JSC::AbstractMacroAssembler::CodeLocationCommon::executableAddress):
(JSC::AbstractMacroAssembler::CodeLocationCommon::reset):
(JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA):
(JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction):
(JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch):
(JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler):
(JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR):
(JSC::AbstractMacroAssembler::CodeLocationLabel::operator!):
(JSC::AbstractMacroAssembler::CodeLocationLabel::reset):
(JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel):
(JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination):
(JSC::AbstractMacroAssembler::CodeLocationJump::relink):
(JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump):
(JSC::AbstractMacroAssembler::CodeLocationCall::relink):
(JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue):
(JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall):
(JSC::AbstractMacroAssembler::CodeLocationNearCall::relink):
(JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue):
(JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall):
(JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch):
(JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32):
(JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch):
(JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::addressForLookup):
(JSC::AbstractMacroAssembler::trampolineAt):
(JSC::AbstractMacroAssembler::PatchBuffer::link):
(JSC::AbstractMacroAssembler::PatchBuffer::performFinalization):
(JSC::::CodeLocationCommon::instructionAtOffset):
(JSC::::CodeLocationCommon::labelAtOffset):
(JSC::::CodeLocationCommon::jumpAtOffset):
(JSC::::CodeLocationCommon::callAtOffset):
(JSC::::CodeLocationCommon::nearCallAtOffset):
(JSC::::CodeLocationCommon::dataLabelPtrAtOffset):
(JSC::::CodeLocationCommon::dataLabel32AtOffset):
* assembler/MacroAssemblerCodeRef.h:
(JSC::FunctionPtr::FunctionPtr):
(JSC::FunctionPtr::value):
(JSC::FunctionPtr::executableAddress):
(JSC::ReturnAddressPtr::ReturnAddressPtr):
(JSC::ReturnAddressPtr::value):
(JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
(JSC::MacroAssemblerCodePtr::executableAddress):
(JSC::MacroAssemblerCodePtr::dataLocation):
(JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
* assembler/X86Assembler.h:
(JSC::X86Assembler::patchPointerForCall):
* jit/JIT.cpp:
(JSC::ctiPatchNearCallByReturnAddress):
(JSC::ctiPatchCallByReturnAddress):
(JSC::JIT::privateCompile):
(JSC::JIT::privateCompileCTIMachineTrampolines):
* jit/JIT.h:
(JSC::JIT::compileCTIMachineTrampolines):
* jit/JITCall.cpp:
(JSC::JIT::compileOpCall):
* jit/JITCode.h:
(JSC::JITCode::operator !):
(JSC::JITCode::addressForCall):
(JSC::JITCode::offsetOf):
(JSC::JITCode::execute):
(JSC::JITCode::size):
(JSC::JITCode::HostFunction):
* jit/JITInlineMethods.h:
(JSC::JIT::emitNakedCall):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::patchGetByIdSelf):
(JSC::JIT::patchPutByIdReplace):
(JSC::JIT::privateCompilePatchGetArrayLength):
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdChain):
* jit/JITStubs.cpp:
(JSC::JITThunks::JITThunks):
(JSC::JITThunks::tryCachePutByID):
(JSC::JITThunks::tryCacheGetByID):
(JSC::JITStubs::DEFINE_STUB_FUNCTION):
* jit/JITStubs.h:
(JSC::JITThunks::ctiArrayLengthTrampoline):
(JSC::JITThunks::ctiStringLengthTrampoline):
(JSC::JITThunks::ctiVirtualCallPreLink):
(JSC::JITThunks::ctiVirtualCallLink):
(JSC::JITThunks::ctiVirtualCall):
(JSC::JITThunks::ctiNativeCallThunk):
* yarr/RegexJIT.h:
(JSC::Yarr::RegexCodeBlock::operator!):
(JSC::Yarr::RegexCodeBlock::execute):
2009-06-05 Antti Koivisto <antti@apple.com>
Try to unbreak Windows build.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-06-03 Antti Koivisto <antti@apple.com>
Reviewed by Dave Kilzer.
https://bugs.webkit.org/show_bug.cgi?id=13128
Safari not obeying cache header
Export JSC::parseDate()
* JavaScriptCore.exp:
* JavaScriptCore.xcodeproj/project.pbxproj:
2009-06-04 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
Bug in property caching of getters and setters.
Make sure that the transition logic accounts for getters and setters.
If we don't we end up screwing up the transition tables so that some
transitions will start incorrectly believing that they need to check
for getters and setters.
* runtime/JSObject.cpp:
(JSC::JSObject::defineGetter):
(JSC::JSObject::defineSetter):
* runtime/JSObject.h:
(JSC::):
* runtime/Structure.h:
2009-06-04 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
Minor tweak to PatchBuffer, change it so it no longer holds a CodeRef, and instead
holds a separate code pointer and executable pool. Since it now always holds its
own copy of the code size, and to simplify the construction sequence, it's neater
this way.
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer):
(JSC::AbstractMacroAssembler::PatchBuffer::finalizeCode):
(JSC::AbstractMacroAssembler::PatchBuffer::code):
(JSC::AbstractMacroAssembler::PatchBuffer::performFinalization):
2009-06-04 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Remove 'JIT_STUB_ARGUMENT_STACK' this is unused and untested.
This just leaves JIT_STUB_ARGUMENT_REGISTER and JIT_STUB_ARGUMENT_VA_LIST.
Since JIT_STUB_ARGUMENT_REGISTER is the sensible configuration on most platforms,
remove this define and make this the default behaviour.
Platforms must now define JIT_STUB_ARGUMENT_VA_LIST to get crazy va_list voodoo,
if they so desire.
(Refactoring of #ifdefs only, no functional change, no performance impact.)
* jit/JIT.h:
* jit/JITInlineMethods.h:
(JSC::JIT::restoreArgumentReference):
(JSC::JIT::restoreArgumentReferenceForTrampoline):
* jit/JITStubs.cpp:
(JSC::):
* jit/JITStubs.h:
* wtf/Platform.h:
2009-06-04 Gavin Barraclough <barraclough@apple.com>
Rubber stamped by Sam Weinig.
* jit/JITArithmetic.cpp:
Remove some redundant typedefs, unused since arithmetic was added to the MacroAssembler interface.
2009-06-04 Brent Fulgham <bfulgham@webkit.org>
Build fix due to header include problem.
* interpreter/Interpreter.h: Remove wtf from includes so that
compile can find the headers in expected places.
2009-06-04 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
Reviewed by Darin Adler.
HashTable class (JavaScriptCore/wtf/HashTable.h) doesn't instantiated by 'new', so
inheritance was removed. HashTable struct has been instantiated by operator new in
JSGlobalData.cpp:106.
HashTable couldn't inherited from FastAllocBase since struct with inheritance is
no longer POD, so HashTable struct has been instantiated by fastNew, destroyed by
fastDelete.
* interpreter/Interpreter.h:
* runtime/JSGlobalData.cpp:
(JSC::JSGlobalData::JSGlobalData):
(JSC::JSGlobalData::~JSGlobalData):
* wtf/HashTable.h:
2009-06-04 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Wrap the code that plants pushes/pops planted by JIT in explanatorily named
methods; move property storage reallocation into a standard stub function.
~No performance impact (possible <1% progression on x86-64, likely just noise).
* jit/JIT.cpp:
(JSC::JIT::privateCompile):
(JSC::JIT::privateCompileCTIMachineTrampolines):
Wrap calls to push/pop.
* jit/JIT.h:
Declare the new wrapper methods.
* jit/JITInlineMethods.h:
(JSC::JIT::preverveReturnAddressAfterCall):
(JSC::JIT::restoreReturnAddressBeforeReturn):
Define the new wrapper methods.
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_end):
(JSC::JIT::emit_op_ret):
Wrap calls to push/pop.
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByIdTransition):
Move property storage reallocation into a standard stub function.
* jit/JITStubs.cpp:
(JSC::JITStubs::DEFINE_STUB_FUNCTION):
* jit/JITStubs.h:
(JSC::JITStubs::):
2009-06-04 Laszlo Gombos <laszlo.1.gombos@nokia.com>
Reviewed by Ariya Hidayat.
[Qt] Single-threaded QtWebKit configuration
<https://bugs.webkit.org/show_bug.cgi?id=26015>
* JavaScriptCore.pri: Use ThreadingNone.cpp instead of
ThreadingQt.cpp and make sure ENABLE_JSC_MULTIPLE_THREADS is turned off
when ENABLE_SINGLE_THREADED is tuned on
* wtf/ThreadingNone.cpp:
(WTF::ThreadCondition::wait): Fix compilation warning.
(WTF::ThreadCondition::timedWait): Ditto.
2009-06-02 Mark Rowe <mrowe@apple.com>
Reviewed by Anders Carlsson.
Remove workaround that was added to address <rdar://problem/5488678> as it no longer affects our Tiger builds.
* Configurations/Base.xcconfig:
2009-06-02 Xan Lopez <xlopez@igalia.com>
Reviewed by Sam Weinig.
Use C-style comments in Platform.h so it can be included from C
files.
* wtf/Platform.h:
2009-06-02 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
Rubber-stamped by Simon Hausmann.
Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir
This fixes the Windows-build if the user does not have a /tmp directory.
* pcre/dftables:
2009-06-02 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver ">>" Hunt.
emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint().
Fixerate, and refactor/comment the code a little to make it clearer what is going on.
* jit/JITArithmetic.cpp:
(JSC::JIT::emit_op_rshift):
(JSC::JIT::emitSlow_op_rshift):
2009-06-01 Gavin Barraclough <barraclough@apple.com>
Reviewed by NOBODY - speculative windows build fix (errm, for the other patch!).
* jit/JITStubs.cpp:
(JSC::):
2009-06-01 Gavin Barraclough <barraclough@apple.com>
Reviewed by NOBODY - speculative windows build fix.
* assembler/AbstractMacroAssembler.h:
(JSC::::CodeLocationCall::CodeLocationCall):
(JSC::::CodeLocationNearCall::CodeLocationNearCall):
2009-06-01 Gavin Barraclough <barraclough@apple.com>
Reviewed by Olliej Hunt.
Change JITStub functions from being static members on the JITStub class to be
global extern "C" functions, and switch their the function signature declaration
in the definition of the functions to be C-macro generated. This makes it easier
to work with the stub functions from assembler code (since the names no longer
require mangling), and by delaring the functions with a macro we can look at
also auto-generating asm thunks to wrap the JITStub functions to perform the
work currently in 'restoreArgumentReference' (as a memory saving).
Making this change also forces us to be a bit more realistic about what is private
on the Register and CallFrame objects. Presently most everything on these classes
is private, and the classes have plenty of friends. We could befriend all the
global functions to perpetuate the delusion of encapsulation, but using friends is
a bit of a sledgehammer solution here - since friends can poke around with all of
the class's privates, and since all the major classes taht operate on Regsiters are
currently friends, right there is currently in practice very little protection at
all. Better to start removing friend delclarations, and exposing just the parts
that need to be exposed.
* interpreter/CallFrame.h:
(JSC::ExecState::returnPC):
(JSC::ExecState::setCallerFrame):
(JSC::ExecState::returnValueRegister):
(JSC::ExecState::setArgumentCount):
(JSC::ExecState::setCallee):
(JSC::ExecState::setCodeBlock):
* interpreter/Interpreter.h:
* interpreter/Register.h:
(JSC::Register::Register):
(JSC::Register::i):
* jit/JITStubs.cpp:
(JSC::):
(JSC::JITThunks::JITThunks):
(JSC::JITThunks::tryCachePutByID):
(JSC::JITThunks::tryCacheGetByID):
(JSC::JITStubs::DEFINE_STUB_FUNCTION):
* jit/JITStubs.h:
(JSC::JITStubs::):
* runtime/JSFunction.h:
(JSC::JSFunction::nativeFunction):
(JSC::JSFunction::classInfo):
* runtime/JSGlobalData.h:
2009-06-01 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
Tidy up the literal parser.
Make the number lexing in the LiteralParser exactly match the JSON spec, which
makes us cover more cases, but also more strict. Also made string lexing only
allow double-quoted strings.
* runtime/LiteralParser.cpp:
(JSC::LiteralParser::Lexer::lex):
(JSC::LiteralParser::Lexer::lexString):
(JSC::LiteralParser::Lexer::lexNumber):
2009-06-01 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam "WX" Weinig.
Allow the JIT to operate without relying on use of RWX memory, on platforms where this is supported.
This patch adds a switch to Platform.h (ENABLE_ASSEMBLER_WX_EXCLUSIVE) which enables this mode of operation.
When this flag is set, all executable memory will be allocated RX, and switched to RW only whilst being
modified. Upon completion of code generation the protection is switched back to RX to allow execution.
Further optimization will be required before it is desirable to enable this mode of operation by default;
enabling this presently incurs a 5%-10% regression.
(Submitting disabled - no performance impact).
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA):
(JSC::AbstractMacroAssembler::CodeLocationLabel::fromFunctionPointer):
(JSC::AbstractMacroAssembler::CodeLocationJump::relink):
(JSC::AbstractMacroAssembler::CodeLocationCall::relink):
(JSC::AbstractMacroAssembler::CodeLocationNearCall::relink):
(JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch):
(JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline):
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToFunction):
(JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer):
(JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer):
(JSC::AbstractMacroAssembler::PatchBuffer::link):
(JSC::AbstractMacroAssembler::PatchBuffer::patch):
(JSC::AbstractMacroAssembler::PatchBuffer::performFinalization):
(JSC::::CodeLocationCommon::nearCallAtOffset):
(JSC::::CodeLocationCall::CodeLocationCall):
(JSC::::CodeLocationNearCall::CodeLocationNearCall):
* assembler/AssemblerBuffer.h:
(JSC::AssemblerBuffer::executableCopy):
* assembler/X86Assembler.h:
(JSC::CAN_SIGN_EXTEND_U32_64):
(JSC::X86Assembler::linkJump):
(JSC::X86Assembler::linkCall):
(JSC::X86Assembler::patchPointer):
(JSC::X86Assembler::relinkJump):
(JSC::X86Assembler::relinkCall):
(JSC::X86Assembler::repatchInt32):
(JSC::X86Assembler::repatchPointer):
(JSC::X86Assembler::repatchLoadToLEA):
(JSC::X86Assembler::patchInt32):
(JSC::X86Assembler::patchRel32):
* jit/ExecutableAllocator.h:
(JSC::ExecutableAllocator::):
(JSC::ExecutableAllocator::makeWritable):
(JSC::ExecutableAllocator::makeExecutable):
* jit/ExecutableAllocatorFixedVMPool.cpp:
(JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
* jit/ExecutableAllocatorPosix.cpp:
(JSC::ExecutablePool::systemAlloc):
(JSC::ExecutablePool::systemRelease):
(JSC::ExecutableAllocator::reprotectRegion):
* jit/ExecutableAllocatorWin.cpp:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::patchGetByIdSelf):
(JSC::JIT::patchPutByIdReplace):
* wtf/Platform.h:
2009-05-29 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
Reviewed by Darin Adler.
Inherits Interpreter class from FastAllocBase because it has been
instantiated by 'new' in JavaScriptCore/runtime/JSGlobalData.cpp.
* interpreter/Interpreter.h:
2009-06-01 David Levin <levin@chromium.org>
Reviewed by NOBODY (windows build fix).
Add exports for windows (corresponding to the JavaScriptCore.exp modification
in the previous change).
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-06-01 David Levin <levin@chromium.org>
Reviewed by Darin Alder and Maciej Stachowiak.
Bug 26057: StringImpl should share buffers with UString.
https://bugs.webkit.org/show_bug.cgi?id=26057
* JavaScriptCore.exp:
* runtime/UString.cpp:
(JSC::UString::Rep::create):
(JSC::UString::BaseString::sharedBuffer): Only do the sharing when
the buffer exceeds a certain size. The size was tuned by running
various dom benchmarks with numbers ranging from 20 to 800 and finding
a place that seemed to do the best overall.
* runtime/UString.h:
2009-05-31 Gavin Barraclough <barraclough@apple.com>
Reviewed by Olliej "you just need to change NativeFunctionWrapper.h" Hunt.
Add ENABLE_JIT_OPTIMIZE_NATIVE_CALL switch to allow JIT to operate without native call optimizations.
* runtime/NativeFunctionWrapper.h:
* wtf/Platform.h:
2009-05-30 Darin Adler <darin@apple.com>
Reviewed by Sam Weinig.
<rdar://problem/6935193> REGRESSION (r42734): Celtic Kane JavaScript benchmark does not run:
"Maximum call stack size exceeded"
* runtime/ArrayPrototype.cpp:
(JSC::arrayProtoFuncToString): Use the same recursion limit as the other recursion checks.
We need a limit of at least 100 to run the benchmark above.
(JSC::arrayProtoFuncToLocaleString): Ditto.
(JSC::arrayProtoFuncJoin): Ditto.
2009-05-28 Dirk Schulze <krit@webkit.org>
Reviewed by Nikolas Zimmermann.
Added new build flag --filters for Mac. More details in WebCore/ChangeLog.
* Configurations/FeatureDefines.xcconfig:
2009-05-27 Oliver Hunt <oliver@apple.com>
Reviewed by Mark Rowe.
<rdar://problem/6928025> Stack overflow in JSC::stringProtoFuncReplace() running jsFunFuzz
We should always check for exceptions after creating a CachedCall, this wasn't being done in
the string replace logic.
* runtime/StringPrototype.cpp:
(JSC::stringProtoFuncReplace):
2009-05-27 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
Unreviewed (make distcheck) build fix; adding missing headers.
* GNUmakefile.am:
2009-05-27 Jessie Berlin <jberlin@apple.com>
Reviewed by Adam Roben
Fix the Windows build.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-05-27 Fridrich Strba <fridrich.strba@bluewin.ch>
Reviewed by Gustavo Noronha.
When building on Windows, consider Windows specific files.
* GNUmakefile.am:
2009-05-27 Fridrich Strba <fridrich.strba@bluewin.ch>
Reviewed by Maciej Stachowiak.
When building with MinGW, don't use the __declspec(dl{import,export})
decorations and rely on the linker to use its nifty auto-import feature.
It is extremely hard to get the decorations right with MinGW in general
and impossible in WebKit, where the resulting shared library is linking
together some static libraries.
* config.h:
2009-05-26 Holger Hans Peter Freyther <zecke@selfish.org>
Reviewed by Xan Lopez.
https://bugs.webkit.org/show_bug.cgi?id=25613
Be able to use GOwnPtr for GHashTable as well. The assumption
is that the hash table has been created with g_hash_table_new_full
and has proper destruction functions.
* wtf/GOwnPtr.cpp:
(WTF::GHashTable):
* wtf/GOwnPtr.h:
2009-05-26 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
<rdar://problem/6924033> REGRESSION: Assertion failure due to forward references
Add a pattern type for forward references to ensure that we don't confuse the
quantifier alternatives assertion.
* yarr/RegexCompiler.cpp:
(JSC::Yarr::RegexPatternConstructor::atomBackReference):
(JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets):
* yarr/RegexInterpreter.cpp:
(JSC::Yarr::ByteCompiler::emitDisjunction):
* yarr/RegexJIT.cpp:
(JSC::Yarr::RegexGenerator::generateTerm):
* yarr/RegexPattern.h:
(JSC::Yarr::PatternTerm::):
(JSC::Yarr::PatternTerm::PatternTerm):
(JSC::Yarr::PatternTerm::ForwardReference):
2009-05-26 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Fix for: <rdar://problem/6918095> REGRESSION: jQuery load() issue (25981),
and also an ASSERT failure on http://ihasahotdog.com/.
When overwriting a property on a dictionary with a cached specific value,
clear the cache if new value being written is different.
* JavaScriptCore.exp:
Export the new symbols.
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_get_by_id_method_check_second):
Close dictionary prototypes upon caching a method access, as would happen when caching
a regular get_by_id.
* runtime/JSObject.h:
(JSC::JSObject::propertyStorage):
(JSC::JSObject::locationForOffset):
Make these methods private.
(JSC::JSObject::putDirectInternal):
When overwriting a property on a dictionary with a cached specific value,
clear the cache if new value being written is different.
* runtime/Structure.cpp:
(JSC::Structure::despecifyDictionaryFunction):
Reset the specific value field for a given property in a dictionary.
(JSC::Structure::despecifyFunctionTransition):
Rename of 'changeFunctionTransition' (this was already internally refered to as a despecification).
* runtime/Structure.h:
Declare new method.
2009-05-26 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver "pieces of eight" Hunt.
When reseting RegexPattern class, should fully reset the class, not just bits of it.
In particular, we delete the cached character classes (for wordchars, etc), but do
not reset the set of pointers to the cached classes. In the case of a repeated parse
due to an illegal back-reference we will continue to use the deleted character class.
* yarr/RegexPattern.h:
(JSC::Yarr::RegexPattern::reset):
2009-05-26 Brent Fulgham <bfulgham@webkit.org>
Build fix to correct r44161.
* wtf/FastAllocBase.h:
2009-05-26 Zoltan Horvath <horvath.zoltan.6@stud.u-szeged.hu>
Reviewed by Maciej Stachowiak.
Inherite HashTable from FastAllocBase, because it has been instantiated by
'new' in JavaScriptCore/runtime/JSGlobalData.cpp.
* wtf/HashTable.h:
* wtf/FastAllocBase.h: Remove 'wtf' path from TypeTraits.h to allow use outside of wtf.
2009-05-25 David Levin <levin@chromium.org>
Reviewed by Maciej Stachowiak and Oliver Hunt.
https://bugs.webkit.org/show_bug.cgi?id=25126
Allow the buffer underlying UString to be shared.
In order to not grow the underlying size of any structure,
there is a union in the Rep string which holds
+ m_sharedBuffer -- a pointer to the shared ref counted buffer
if the class is BaseString and the buffer is being shared OR
+ m_baseString -- the BaseString if the class is only UString::Rep
but not a UString::BaseString
Ideally, m_sharedBuffer would be a RefPtr, but it cannot be because
it is in a union.
No change in sunspider perf.
* JavaScriptCore.vcproj/WTF/WTF.vcproj:
* JavaScriptCore.xcodeproj/project.pbxproj:
* runtime/UString.cpp:
(JSC::UString::Rep::share):
(JSC::UString::Rep::destroy):
(JSC::UString::BaseString::sharedBuffer):
(JSC::UString::BaseString::setSharedBuffer):
(JSC::UString::BaseString::slowIsBufferReadOnly):
(JSC::expandCapacity):
(JSC::UString::Rep::reserveCapacity):
(JSC::UString::expandPreCapacity):
(JSC::concatenate):
(JSC::UString::append):
* runtime/UString.h:
(JSC::UString::Rep::Rep):
(JSC::UString::Rep::):
(JSC::UString::BaseString::isShared):
(JSC::UString::BaseString::isBufferReadOnly):
(JSC::UString::Rep::baseString):
* wtf/CrossThreadRefCounted.h:
(WTF::CrossThreadRefCounted::isShared):
* wtf/OwnFastMallocPtr.h: Added.
(WTF::OwnFastMallocPtr::OwnFastMallocPtr):
(WTF::OwnFastMallocPtr::~OwnFastMallocPtr):
(WTF::OwnFastMallocPtr::get):
(WTF::OwnFastMallocPtr::release):
2009-05-25 Oliver Hunt <oliver@apple.com>
Reviewed by Maciej Stachowiak.
Re-add interpreter logic to jit-enabled builds as GCC mysteriously regresses without it
* wtf/Platform.h:
2009-05-25 Fridrich Strba <fridrich.strba@bluewin.ch>
Reviewed by Maciej Stachowiak.
The functions written in assembly need to have a leading
underscore on Windows too.
* jit/JITStubs.cpp:
2009-05-24 Steve Falkenburg <sfalken@apple.com>
Build fix for experimental PGO Windows target.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2009-05-23 David Kilzer <ddkilzer@apple.com>
Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr
<https://bugs.webkit.org/show_bug.cgi?id=25495>
Reviewed by Oliver Hunt.
* GNUmakefile.am: Added OwnPtrCommon.h and PassOwnPtr.h.
* JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
* JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
* wtf/OwnPtr.h:
(WTF::OwnPtr::OwnPtr): Added constructors that take a
PassOwnPtr. Also added a copy constructor declaration that's
required when assigning a PassOwnPtr to a stack-based OwnPtr.
(WTF::operator=): Added assignment operator methods that take a
PassOwnPtr.
(WTF::swap): Reformatted.
(WTF::operator==): Whitespace changes.
(WTF::operator!=): Ditto.
* wtf/OwnPtrCommon.h: Added.
(WTF::deleteOwnedPtr):
* wtf/PassOwnPtr.h: Added.
(WTF::PassOwnPtr::PassOwnPtr):
(WTF::PassOwnPtr::~PassOwnPtr):
(WTF::PassOwnPtr::get):
(WTF::PassOwnPtr::clear):
(WTF::PassOwnPtr::release):
(WTF::PassOwnPtr::operator*):
(WTF::PassOwnPtr::operator->):
(WTF::PassOwnPtr::operator!):
(WTF::PassOwnPtr::operator UnspecifiedBoolType):
(WTF::::operator):
(WTF::operator==):
(WTF::operator!=):
(WTF::static_pointer_cast):
(WTF::const_pointer_cast):
(WTF::getPtr):
2009-05-23 Oliver Hunt <oliver@apple.com>
Reviewed by Maciej Stachowiak.
Remove interpreter specific logic from the JIT builds.
This saves ~100k in JSC release builds.
* interpreter/Interpreter.cpp:
(JSC::Interpreter::privateExecute):
* interpreter/Interpreter.h:
* wtf/Platform.h:
2009-05-22 Mark Rowe <mrowe@apple.com>
Part two of an attempted Windows build fix.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-05-22 Mark Rowe <mrowe@apple.com>
Part one of an attempted Windows build fix.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-05-21 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
op_method_check
Optimize method calls, by caching specific function values within the Structure.
The new opcode is used almost like an x86 opcode prefix byte to optimize op_get_by_id,
where the property access is being used to read a function to be passed to op-call (i.e.
'foo.bar();'). This patch modifies the Structure class such that when a property is
put to an object for the first time we will check if the value is a function. If it is,
we will cache the function value on the Structure. A Structure in such a state guarantees
that not only does a property with the given identifier exist on the object, but also that
its value is unchanged. Upon any further attempt to put a property with the same identifier
(but a different value) to the object, it will transition back to a normal Structure (where
it will guarantee the presence but not the value of the property).
op_method_check makes use of the new information made available by the Structure, by
augmenting the functionality of op_get_by_id. Upon generating a FunctionCallDotNode a
check will be emitted prior to the property access reading the function value, and the JIT
will generate an extra (initially unlinked but patchable) set of checks prior to the regular
JIT code for get_by_id. The new code will do inline structure and prototype structure check
(unlike a regular get_by_id, which can only handle 'self' accesses inline), and then performs
an immediate load of the function value, rather than using memory accesses to load the value
from the obejct's property storage array. If the method check fails it will revert, or if
the access is polymorphic, the op_get_by_id will continue to operate - and optimize itself -
just as any other regular op_get_by_id would.
~2.5% on v8-tests, due to a ~9% progression on richards.
* API/JSCallbackObjectFunctions.h:
(JSC::::put):
(JSC::::staticFunctionGetter):
* API/JSObjectRef.cpp:
(JSObjectMakeConstructor):
* JavaScriptCore.exp:
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::differenceBetween):
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::moveWithPatch):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dump):
* bytecode/CodeBlock.h:
(JSC::getMethodCallLinkInfoReturnLocation):
(JSC::CodeBlock::getMethodCallLinkInfo):
(JSC::CodeBlock::addMethodCallLinkInfos):
(JSC::CodeBlock::methodCallLinkInfo):
* bytecode/Opcode.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitMethodCheck):
* bytecompiler/BytecodeGenerator.h:
* interpreter/Interpreter.cpp:
(JSC::Interpreter::privateExecute):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):
(JSC::JIT::privateCompile):
* jit/JIT.h:
(JSC::MethodCallCompilationInfo::MethodCallCompilationInfo):
* jit/JITOpcodes.cpp:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::emit_op_method_check):
(JSC::JIT::emitSlow_op_method_check):
(JSC::JIT::emit_op_get_by_id):
(JSC::JIT::emitSlow_op_get_by_id):
(JSC::JIT::emit_op_put_by_id):
(JSC::JIT::emitSlow_op_put_by_id):
(JSC::JIT::compileGetByIdHotPath):
(JSC::JIT::compileGetByIdSlowCase):
(JSC::JIT::patchMethodCallProto):
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_get_by_id_method_check):
(JSC::JITStubs::cti_op_get_by_id_method_check_second):
* jit/JITStubs.h:
* jsc.cpp:
(GlobalObject::GlobalObject):
* parser/Nodes.cpp:
(JSC::FunctionCallDotNode::emitBytecode):
* runtime/Arguments.cpp:
(JSC::Arguments::put):
* runtime/ArrayConstructor.cpp:
(JSC::ArrayConstructor::ArrayConstructor):
* runtime/BooleanConstructor.cpp:
(JSC::BooleanConstructor::BooleanConstructor):
* runtime/DateConstructor.cpp:
(JSC::DateConstructor::DateConstructor):
* runtime/ErrorConstructor.cpp:
(JSC::ErrorConstructor::ErrorConstructor):
(JSC::constructError):
* runtime/ErrorPrototype.cpp:
(JSC::ErrorPrototype::ErrorPrototype):
* runtime/FunctionConstructor.cpp:
(JSC::FunctionConstructor::FunctionConstructor):
* runtime/FunctionPrototype.cpp:
(JSC::FunctionPrototype::FunctionPrototype):
* runtime/InternalFunction.cpp:
(JSC::InternalFunction::InternalFunction):
* runtime/JSActivation.cpp:
(JSC::JSActivation::put):
(JSC::JSActivation::putWithAttributes):
* runtime/JSByteArray.cpp:
(JSC::JSByteArray::JSByteArray):
* runtime/JSFunction.cpp:
(JSC::JSFunction::JSFunction):
(JSC::JSFunction::getOwnPropertySlot):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::putWithAttributes):
(JSC::JSGlobalObject::reset):
(JSC::JSGlobalObject::mark):
* runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
(JSC::JSGlobalObject::methodCallDummy):
* runtime/JSObject.cpp:
(JSC::JSObject::put):
(JSC::JSObject::putWithAttributes):
(JSC::JSObject::deleteProperty):
(JSC::JSObject::defineGetter):
(JSC::JSObject::defineSetter):
(JSC::JSObject::getPropertyAttributes):
(JSC::JSObject::getPropertySpecificFunction):
(JSC::JSObject::putDirectFunction):
(JSC::JSObject::putDirectFunctionWithoutTransition):
* runtime/JSObject.h:
(JSC::getJSFunction):
(JSC::JSObject::getDirectLocation):
(JSC::JSObject::putDirect):
(JSC::JSObject::putDirectWithoutTransition):
* runtime/LiteralParser.cpp:
(JSC::LiteralParser::parseObject):
* runtime/Lookup.cpp:
(JSC::setUpStaticFunctionSlot):
* runtime/Lookup.h:
(JSC::lookupPut):
* runtime/MathObject.cpp:
(JSC::MathObject::MathObject):
* runtime/NativeErrorConstructor.cpp:
(JSC::NativeErrorConstructor::NativeErrorConstructor):
(JSC::NativeErrorConstructor::construct):
* runtime/NativeErrorPrototype.cpp:
(JSC::NativeErrorPrototype::NativeErrorPrototype):
* runtime/NumberConstructor.cpp:
(JSC::NumberConstructor::NumberConstructor):
* runtime/ObjectConstructor.cpp:
(JSC::ObjectConstructor::ObjectConstructor):
* runtime/PropertyMapHashTable.h:
(JSC::PropertyMapEntry::PropertyMapEntry):
* runtime/PrototypeFunction.cpp:
(JSC::PrototypeFunction::PrototypeFunction):
* runtime/PutPropertySlot.h:
(JSC::PutPropertySlot::):
(JSC::PutPropertySlot::PutPropertySlot):
(JSC::PutPropertySlot::setNewProperty):
(JSC::PutPropertySlot::setDespecifyFunctionProperty):
(JSC::PutPropertySlot::isCacheable):
(JSC::PutPropertySlot::cachedOffset):
* runtime/RegExpConstructor.cpp:
(JSC::RegExpConstructor::RegExpConstructor):
* runtime/StringConstructor.cpp:
(JSC::StringConstructor::StringConstructor):
* runtime/StringPrototype.cpp:
(JSC::StringPrototype::StringPrototype):
* runtime/Structure.cpp:
(JSC::Structure::Structure):
(JSC::Structure::~Structure):
(JSC::Structure::materializePropertyMap):
(JSC::Structure::addPropertyTransitionToExistingStructure):
(JSC::Structure::addPropertyTransition):
(JSC::Structure::changeFunctionTransition):
(JSC::Structure::addPropertyWithoutTransition):
(JSC::Structure::get):
(JSC::Structure::despecifyFunction):
(JSC::Structure::put):
(JSC::Structure::remove):
* runtime/Structure.h:
(JSC::Structure::get):
(JSC::Structure::specificFunction):
* runtime/StructureTransitionTable.h:
(JSC::StructureTransitionTableHashTraits::emptyValue):
* wtf/Platform.h:
2009-05-22 Brent Fulgham <bfulgham@webkit.org>
Reviewed by Steve Falkenburg.
https://bugs.webkit.org/show_bug.cgi?id=25950
JavaScriptCore Fails to build on Windows (Cairo) due to CoreFoundation
link requirement.
Modify project to add new Debug_CFLite and Release_CFLite targets. These
use the new JavaScriptCoreCFLite.vsprops to link against CFLite.dll.
Existing projects are changed to use the new JavaScriptCoreCF.vsprops
to link against CoreFoundation.dll.
The JavaScriptCoreCommon.vsprops is modified to remove the link
against CoreFoundation.dll.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
2009-05-22 Dominik Röttsches <dominik.roettsches@access-company.com>
Reviewed by Gustavo Noronha.
https://bugs.webkit.org/show_bug.cgi?id=15914
[GTK] Implement Unicode functionality using GLib
Original patch by Jürg Billeter and Naiem Shaik.
Implementing WTF Unicode functionality based on GLib.
* GNUmakefile.am:
* wtf/unicode/Unicode.h:
* wtf/unicode/glib: Added.
* wtf/unicode/glib/UnicodeGLib.cpp: Added.
(WTF::Unicode::foldCase):
(WTF::Unicode::toLower):
(WTF::Unicode::toUpper):
(WTF::Unicode::direction):
(WTF::Unicode::umemcasecmp):
* wtf/unicode/glib/UnicodeGLib.h: Added.
(WTF::Unicode::):
(WTF::Unicode::toLower):
(WTF::Unicode::toUpper):
(WTF::Unicode::toTitleCase):
(WTF::Unicode::isArabicChar):
(WTF::Unicode::isFormatChar):
(WTF::Unicode::isSeparatorSpace):
(WTF::Unicode::isPrintableChar):
(WTF::Unicode::isDigit):
(WTF::Unicode::isPunct):
(WTF::Unicode::mirroredChar):
(WTF::Unicode::category):
(WTF::Unicode::isLower):
(WTF::Unicode::digitValue):
(WTF::Unicode::combiningClass):
(WTF::Unicode::decompositionType):
* wtf/unicode/glib/UnicodeMacrosFromICU.h: Added.
2009-05-21 Xan Lopez <xlopez@igalia.com>
Unreviewed build fix.
Add MacroAssemblerCodeRef.h to file list.
* GNUmakefile.am:
2009-05-21 Gavin Barraclough <barraclough@apple.com>
Reviewed by Darin Adler.
Addition of MacroAssemblerCodeRef.h rubber stamped by Geoff Garen.
Refactor JIT code-handle objects. The representation of generated code is currently
a bit of a mess. We have a class JITCode which wraps the pointer to a block of
generated code, but this object does not reference the executable pool meaning that
external events (the pool being derefed) could make the pointer become invalid.
To overcome this both the JIT and Yarr implement further (and similar) objects to
wrap the code pointer with a RefPtr to the pool. To add to the mire, as well as the
CodeBlock containing a handle onto the code the FunctionBodyNode also contains a
copy of the code pointer which is used almost (but not entirely) uniquely to access
the JIT code for a function.
Rationalization of all this:
* Add a new type 'MacroAssembler::CodeRef' as a handle for a block of JIT generated code.
* Change the JIT & Yarr to internally handle code using CodeRefs.
* Move the CodeRef (formerly anow defunct JITCodeRef) from CodeBlock to its owner node.
* Remove the (now) redundant code pointer from FunctionBodyNode.
While tidying this up I've made the PatchBuffer return code in new allocations using a CodeRef,
and have enforced an interface that the PatchBuffer will always be used, and 'finalizeCode()' or
'finalizeCodeAddendum()' will always be called exactly once on the PatchBuffer to complete code generation.
This gives us a potentially useful hook ('PatchBuffer::performFinalization()') at the end of generation,
which may have a number of uses. It may be helpful should we wish to switch our generation
model to allow RW/RX exclusive memory, and it may be useful on non-cache-coherent platforms to
give us an oportunity to cache flush as necessary.
No performance impact.
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline):
(JSC::AbstractMacroAssembler::CodeRef::CodeRef):
(JSC::AbstractMacroAssembler::CodeRef::trampolineAt):
(JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer):
(JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer):
(JSC::AbstractMacroAssembler::PatchBuffer::link):
(JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive):
(JSC::AbstractMacroAssembler::PatchBuffer::patch):
(JSC::AbstractMacroAssembler::PatchBuffer::complete):
(JSC::AbstractMacroAssembler::PatchBuffer::finalize):
(JSC::AbstractMacroAssembler::PatchBuffer::entry):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::CodeBlock):
(JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
(JSC::CodeBlock::setJITCode):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::getBytecodeIndex):
(JSC::CodeBlock::executablePool):
* interpreter/CallFrameClosure.h:
* interpreter/Interpreter.cpp:
(JSC::Interpreter::execute):
(JSC::Interpreter::prepareForRepeatCall):
* jit/JIT.cpp:
(JSC::JIT::privateCompile):
(JSC::JIT::privateCompileCTIMachineTrampolines):
(JSC::JIT::linkCall):
* jit/JIT.h:
* jit/JITCode.h:
(JSC::JITCode::JITCode):
(JSC::JITCode::operator bool):
(JSC::JITCode::addressForCall):
(JSC::JITCode::offsetOf):
(JSC::JITCode::execute):
(JSC::JITCode::size):
(JSC::JITCode::executablePool):
(JSC::JITCode::HostFunction):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::privateCompilePatchGetArrayLength):
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdSelfList):
(JSC::JIT::privateCompileGetByIdProtoList):
(JSC::JIT::privateCompileGetByIdChainList):
(JSC::JIT::privateCompileGetByIdChain):
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_vm_dontLazyLinkCall):
(JSC::JITStubs::cti_vm_lazyLinkCall):
* parser/Nodes.cpp:
(JSC::ProgramNode::generateJITCode):
(JSC::EvalNode::generateJITCode):
(JSC::FunctionBodyNode::FunctionBodyNode):
(JSC::FunctionBodyNode::createNativeThunk):
(JSC::FunctionBodyNode::generateJITCode):
* parser/Nodes.h:
(JSC::ScopeNode::generatedJITCode):
(JSC::ScopeNode::getExecutablePool):
(JSC::ScopeNode::setJITCode):
(JSC::ProgramNode::jitCode):
(JSC::EvalNode::jitCode):
(JSC::FunctionBodyNode::jitCode):
* runtime/RegExp.cpp:
(JSC::RegExp::match):
* yarr/RegexJIT.cpp:
(JSC::Yarr::RegexGenerator::compile):
(JSC::Yarr::jitCompileRegex):
(JSC::Yarr::executeRegex):
* yarr/RegexJIT.h:
(JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
(JSC::Yarr::RegexCodeBlock::pcreFallback):
(JSC::Yarr::RegexCodeBlock::setFallback):
(JSC::Yarr::RegexCodeBlock::operator bool):
(JSC::Yarr::RegexCodeBlock::set):
(JSC::Yarr::RegexCodeBlock::execute):
2009-05-21 Oliver Hunt <oliver@apple.com>
Reviewed by Maciej Stachowiak.
<rdar://problem/6910264> REGRESSION: Cached DOM global object property access fails in browser (25921)
<https://bugs.webkit.org/show_bug.cgi?id=25921>
When caching properties on the global object we need to ensure that we're
not attempting to cache through a shell object.
* interpreter/Interpreter.cpp:
(JSC::Interpreter::resolveGlobal):
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_resolve_global):
2009-05-21 Steve Falkenburg <sfalken@apple.com>
Windows build fix.
* JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
2009-05-21 Cameron Zwarich <zwarich@apple.com>
Reviewed by Mark Rowe.
Bug 25945: Add support for MADV_FREE to TCMalloc
<https://bugs.webkit.org/show_bug.cgi?id=25945>
<rdar://problem/6910754>
Add support for MADV_FREE to TCMalloc_SystemRelease for platforms that
don't also support MADV_FREE_REUSE. The code is identical to the MADV_DONTNEED
case except for the advice passed to madvise(), so combining the two cases
makes the most sense.
* wtf/Platform.h: Only define HAVE_MADV_FREE when not building on Tiger or
Leopard, because while it is defined on these platforms it actually does
nothing.
* wtf/TCSystemAlloc.cpp:
(TCMalloc_SystemRelease): use MADV_FREE if it is available; otherwise use
MADV_DONTNEED.
2009-05-21 Mark Rowe <mrowe@apple.com>
Reviewed by Oliver Hunt.
Fix <https://bugs.webkit.org/show_bug.cgi?id=25917> / <rdar://problem/6910066>.
Bug 25917: REGRESSION (r43559?): Javascript debugger crashes when pausing page
The debugger currently retrieves the arguments object from an activation rather than pulling
it from a call frame. This is unreliable to due to the recent optimization to lazily create
the arguments object. In the long-term it should stop doing that (<rdar://problem/6911886>),
but for now we force eager creation of the arguments object when debugging.
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
2009-05-21 Cameron Zwarich <zwarich@apple.com>
Reviewed by Maciej Stachowiak.
Bug 25912: Harden NumberPrototype.cpp by removing use of strcpy()
<https://bugs.webkit.org/show_bug.cgi?id=25912>
This causes no change on SunSpider.
* runtime/NumberPrototype.cpp:
(JSC::integerPartNoExp): replace strcpy() with memcpy(), ASSERT that the
temporary buffer has sufficient space to store the result, and move the
explicit null-termination closer to the memcpy() for easier visual inspection
of the code.
(JSC::fractionalPartToString): replace strcpy() with memcpy(), and ASSERT
that the temporary buffer has sufficient space to store the result. There
is no explicit null-termination because this is done by the caller. The
same is already true for exponentialPartToString().
(JSC::numberProtoFuncToExponential): replace strcpy() with memcpy(), explicitly
null-terminate the result, and ASSERT that the temporary buffer has sufficient
space to store the result.
2009-05-20 Sam Weinig <sam@webkit.org>
Reviewed by Cameron Zwarich.
Cleanup the JSGlobalData when exiting early with the usage statement in jsc.
* jsc.cpp:
(printUsageStatement):
(parseArguments):
(jscmain):
2009-05-20 Stephanie Lewis <slewis@apple.com>
Update the order files. <rdar://problem/6881750> Generate new order files.
* JavaScriptCore.order:
2009-05-19 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org>
Reviewed by Simon Hausmann.
Replace WREC with YARR + YARR_JIT for the Qt port. This is only
used when compiled with JIT support for now, so it is a drop-in
replacement for the WREC usage. Still including the wrec headers
as they are being referred from RegExp.h, though the contents of
that header it protected by "#if ENABLE(WREC)".
* JavaScriptCore.pri:
2009-05-20 Xan Lopez <xlopez@igalia.com>
Reviewed by Eric Seidel.
Fix GTK debug build.
The function dumpDisjunction, compiled with debug enabled, uses
printf, which needs stdio.h to be included.
* yarr/RegexInterpreter.cpp:
2009-05-20 Laszlo Gombos <laszlo.1.gombos@nokia.com>
Reviewed by George Staikos.
BUG 25843: [Qt] Remove qt-port build flag
<https://bugs.webkit.org/show_bug.cgi?id=25843>
* JavaScriptCore.pro:
2009-05-19 Geoffrey Garen <ggaren@apple.com>
Windows build fix.
* interpreter/RegisterFile.cpp:
(JSC::RegisterFile::releaseExcessCapacity): Copy-paste typo.
2009-05-19 Geoffrey Garen <ggaren@apple.com>
Reviewed by Sam Weinig.
Fixed <rdar://problem/6885680> CrashTracer: [USER] 1 crash in Install
Mac OS X at <unknown binary> • 0x9274241c
(Original patch by Joe Sokol and Ronnie Misra.)
SunSpider says 1.004x faster.
* interpreter/RegisterFile.cpp:
(JSC::RegisterFile::releaseExcessCapacity): Instead of doing complicated
math that sometimes used to overflow, just release the full range of the
register file.
* interpreter/RegisterFile.h:
(JSC::isPageAligned):
(JSC::RegisterFile::RegisterFile): Added ASSERTs to verify that it's
safe to release the full range of the register file.
(JSC::RegisterFile::shrink): No need to releaseExcessCapacity() if the
new end is not smaller than the old end. (Also, doing so used to cause
numeric overflow, unmapping basically the whole process from memory.)
2009-05-19 Oliver Hunt <oliver@apple.com>
RS=Mark Rowe.
<rdar://problem/6888393> REGRESSION: Start Debugging JavaScript crashes browser (nightly builds only?)
<https://bugs.webkit.org/show_bug.cgi?id=25717>
Remove JSC_FAST_CALL as it wasn't gaining us anything, and was
resulting in weird bugs in the nightly builds.
* parser/Nodes.cpp:
* parser/Nodes.h:
(JSC::ExpressionNode::isNumber):
(JSC::ExpressionNode::isString):
(JSC::ExpressionNode::isNull):
(JSC::ExpressionNode::isPure):
(JSC::ExpressionNode::isLocation):
(JSC::ExpressionNode::isResolveNode):
(JSC::ExpressionNode::isBracketAccessorNode):
(JSC::ExpressionNode::isDotAccessorNode):
(JSC::ExpressionNode::isFuncExprNode):
(JSC::ExpressionNode::isSimpleArray):
(JSC::ExpressionNode::isAdd):
(JSC::ExpressionNode::resultDescriptor):
(JSC::StatementNode::firstLine):
(JSC::StatementNode::lastLine):
(JSC::StatementNode::isEmptyStatement):
(JSC::StatementNode::isReturnNode):
(JSC::StatementNode::isExprStatement):
(JSC::StatementNode::isBlock):
(JSC::NullNode::isNull):
(JSC::BooleanNode::isPure):
(JSC::NumberNode::value):
(JSC::NumberNode::setValue):
(JSC::NumberNode::isNumber):
(JSC::NumberNode::isPure):
(JSC::StringNode::isPure):
(JSC::StringNode::isString):
(JSC::ResolveNode::identifier):
(JSC::ResolveNode::isLocation):
(JSC::ResolveNode::isResolveNode):
(JSC::BracketAccessorNode::isLocation):
(JSC::BracketAccessorNode::isBracketAccessorNode):
(JSC::DotAccessorNode::base):
(JSC::DotAccessorNode::identifier):
(JSC::DotAccessorNode::isLocation):
(JSC::DotAccessorNode::isDotAccessorNode):
(JSC::TypeOfResolveNode::identifier):
(JSC::AddNode::isAdd):
(JSC::BlockNode::isBlock):
(JSC::EmptyStatementNode::isEmptyStatement):
(JSC::ExprStatementNode::isExprStatement):
(JSC::ReturnNode::isReturnNode):
(JSC::ScopeNode::sourceURL):
(JSC::ProgramNode::bytecode):
(JSC::EvalNode::bytecode):
(JSC::FunctionBodyNode::parameters):
(JSC::FunctionBodyNode::toSourceString):
(JSC::FunctionBodyNode::bytecode):
(JSC::FuncExprNode::isFuncExprNode):
2009-05-19 Maciej Stachowiak <mjs@apple.com>
Reviewed by Gavin Barraclough.
- speed up string comparison, especially for short strings
~1% on SunSpider
* JavaScriptCore.exp:
* runtime/UString.cpp:
* runtime/UString.h:
(JSC::operator==): Inline UString's operator==, since it is called from
hot places in the runtime. Also, specialize 2-char strings in a similar way to
1-char, since we're taking the hit of a switch anyway.
2009-05-18 Maciej Stachowiak <mjs@apple.com>
Reviewed by Gavin Barraclough.
- for polymorphic prototype lookups, increase the number of slots from 4 to 8
~4% faster on v8 raytrace benchmark
* bytecode/Instruction.h:
2009-05-18 Maciej Stachowiak <mjs@apple.com>
Reviewed by Oliver Hunt.
- tighten up the code for the load_varargs stub
~1-2% on v8-raytrace
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that
the compiler didn't feel like hoisting for us. Remove unneeded exception check.
2009-05-18 Maciej Stachowiak <mjs@apple.com>
Reviewed by Geoff Garen.
- Improve code generation for access to prototype properties
~0.4% speedup on SunSpider.
Based on a suggestion from Geoff Garen.
* jit/JIT.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::compileGetDirectOffset):
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdProtoList):
(JSC::JIT::privateCompileGetByIdChainList):
(JSC::JIT::privateCompileGetByIdChain):
2009-05-18 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
Reviewed by Gavin Barraclough.
Enable YARR, and disable WREC for GTK+.
* GNUmakefile.am:
* yarr/RegexParser.h:
2009-05-18 Jan Michael Alonzo <jmalonzo@webkit.org>
Reviewed by Xan Lopez.
[Gtk] Various autotools build refactoring and fixes
https://bugs.webkit.org/show_bug.cgi?id=25286
Add -no-install and -no-fast-install to programs and tests that we
don't install. Also remove -O2 since this is already handled at
configure time.
* GNUmakefile.am:
2009-05-17 Jan Michael Alonzo <jmalonzo@webkit.org>
Reviewed by Xan Lopez.
[Gtk] Various autotools build refactoring and fixes
https://bugs.webkit.org/show_bug.cgi?id=25286
Add JavaScriptCore/ to JSC include path only since it's not
required when building WebCore.
* GNUmakefile.am:
2009-05-17 Steve Falkenburg <sfalken@apple.com>
Windows build fix
* JavaScriptCore.vcproj/JavaScriptCore.make:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2009-05-15 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Looking like MSVC doesn't like static variables in inline methods?
Make the state of the SSE2 check a static variable on the class
MacroAssemblerX86Common as a speculative build fix for Windows.
* assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::convertInt32ToDouble):
(JSC::MacroAssemblerX86Common::branchDouble):
(JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
(JSC::MacroAssemblerX86Common::isSSE2Present):
(JSC::MacroAssemblerX86Common::):
* jit/JIT.cpp:
2009-05-15 Adam Roben <aroben@apple.com>
Add some assembler headers to JavaScriptCore.vcproj
This is just a convenience for Windows developers.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2009-05-15 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add
API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()',
FP is presently only supported on SSE2 platforms, not x87. On platforms where a suitable
hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all
other methods ASSERT_NOT_REACHED().
* assembler/AbstractMacroAssembler.h:
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::MacroAssemblerX86):
(JSC::MacroAssemblerX86::branch32):
(JSC::MacroAssemblerX86::branchPtrWithPatch):
(JSC::MacroAssemblerX86::supportsFloatingPoint):
* assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::):
(JSC::MacroAssemblerX86Common::loadDouble):
(JSC::MacroAssemblerX86Common::storeDouble):
(JSC::MacroAssemblerX86Common::addDouble):
(JSC::MacroAssemblerX86Common::subDouble):
(JSC::MacroAssemblerX86Common::mulDouble):
(JSC::MacroAssemblerX86Common::convertInt32ToDouble):
(JSC::MacroAssemblerX86Common::branchDouble):
(JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
(JSC::MacroAssemblerX86Common::branch32):
(JSC::MacroAssemblerX86Common::branch16):
(JSC::MacroAssemblerX86Common::branchTest32):
(JSC::MacroAssemblerX86Common::branchAdd32):
(JSC::MacroAssemblerX86Common::branchMul32):
(JSC::MacroAssemblerX86Common::branchSub32):
(JSC::MacroAssemblerX86Common::set32):
(JSC::MacroAssemblerX86Common::setTest32):
(JSC::MacroAssemblerX86Common::x86Condition):
(JSC::MacroAssemblerX86Common::isSSE2Present):
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::movePtrToDouble):
(JSC::MacroAssemblerX86_64::moveDoubleToPtr):
(JSC::MacroAssemblerX86_64::setPtr):
(JSC::MacroAssemblerX86_64::branchPtr):
(JSC::MacroAssemblerX86_64::branchTestPtr):
(JSC::MacroAssemblerX86_64::branchAddPtr):
(JSC::MacroAssemblerX86_64::branchSubPtr):
(JSC::MacroAssemblerX86_64::supportsFloatingPoint):
* assembler/X86Assembler.h:
* jit/JIT.cpp:
(JSC::JIT::JIT):
* jit/JIT.h:
* jit/JITArithmetic.cpp:
(JSC::JIT::emit_op_rshift):
(JSC::JIT::emitSlow_op_rshift):
(JSC::JIT::emitSlow_op_jnless):
(JSC::JIT::emitSlow_op_jnlesseq):
(JSC::JIT::compileBinaryArithOp):
(JSC::JIT::compileBinaryArithOpSlowCase):
(JSC::JIT::emit_op_add):
(JSC::JIT::emitSlow_op_add):
(JSC::JIT::emit_op_mul):
(JSC::JIT::emitSlow_op_mul):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByIdTransition):
2009-05-15 Francisco Tolmasky <francisco@280north.com>
BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack
<https://bugs.webkit.org/show_bug.cgi?id=25467>
Reviewed by Adam Roben.
* JavaScriptCore.exp: Added calculatedFunctionName
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName
* debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode.
(JSC::DebuggerCallFrame::calculatedFunctionName):
* debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode.
2009-05-14 Gavin Barraclough <barraclough@apple.com>
Build fix, not reviewed.
Quick fixes for JIT builds with OPTIMIZE flags disabled.
* jit/JITCall.cpp:
(JSC::JIT::compileOpCall):
(JSC::JIT::compileOpCallSlowCase):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::compilePutByIdHotPath):
2009-05-14 Steve Falkenburg <sfalken@apple.com>
Back out incorrect Windows build fix
* JavaScriptCore.vcproj/JavaScriptCore.make:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2009-05-14 Steve Falkenburg <sfalken@apple.com>
Windows build fix
* JavaScriptCore.vcproj/JavaScriptCore.make:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2009-05-14 Adam Roben <aroben@apple.com>
Windows jsc build fix
r43648 modified jsc.vcproj's post-build event not to try to copy files
that aren't present. Then r43661 mistakenly un-did that modification.
This patch restores the modification from r43648, but puts the code in
jscCommon.vsprops (where it should have been added in r43648).
* JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty
VCPostBuildEventTool tags.
* JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build
event command line to match the one in jsc.vcproj from r43648.
2009-05-14 Laszlo Gombos <laszlo.1.gombos@nokia.com>
Reviewed by Darin Adler.
https://bugs.webkit.org/show_bug.cgi?id=25325
Make sure pthread_self() is declared before it gets called in Collector.cpp
* runtime/Collector.cpp: Include pthread.h in most Unix-like platforms
(not just for OPENBSD)
2009-05-14 Mark Rowe <mrowe@apple.com>
Reviewed by Oliver Hunt.
Fix <https://bugs.webkit.org/show_bug.cgi?id=25785>.
Bug 25785: Segfault in mark when using JSObjectMakeConstructor
* API/JSObjectRef.cpp:
(JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0. We need to use the default object prototype when it does.
* API/tests/testapi.c:
(main): Add a test case.
* runtime/JSObject.h:
(JSC::JSObject::putDirect): Add a clearer assertion for a null value. The assertion on the next line does catch this,
but the cause of the failure is not clear from the assertion itself.
2009-05-14 Mark Rowe <mrowe@apple.com>
Rubber-stamped by Darin Adler.
<rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2
The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode.
Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR
if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not.
* Configurations/Base.xcconfig:
2009-05-14 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
Checking register file bounds should be a ptr comparison (m_end is a Register*).
Also, the compare should be unsigned, pointers don'ts go negative.
* jit/JIT.cpp:
(JSC::JIT::privateCompile):
2009-05-13 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Fix <rdar://problem/6882919> REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730)
op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0.
This leads to bad happen.
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_loop_if_less):
(JSC::JIT::emitSlow_op_loop_if_less):
2009-05-13 Dmitry Titov <dimich@chromium.org>
Rubber-stamped by Mark Rowe.
https://bugs.webkit.org/show_bug.cgi?id=25746
Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4.
* JavaScriptCore.exp:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
* bytecode/SamplingTool.cpp:
(JSC::SamplingThread::start):
(JSC::SamplingThread::stop):
* bytecode/SamplingTool.h:
* wtf/CrossThreadRefCounted.h:
(WTF::CrossThreadRefCounted::CrossThreadRefCounted):
(WTF::::ref):
(WTF::::deref):
* wtf/Threading.h:
* wtf/ThreadingNone.cpp:
* wtf/ThreadingPthreads.cpp:
(WTF::threadMapMutex):
(WTF::initializeThreading):
(WTF::threadMap):
(WTF::identifierByPthreadHandle):
(WTF::establishIdentifierForPthreadHandle):
(WTF::pthreadHandleForIdentifier):
(WTF::clearPthreadHandleForIdentifier):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::detachThread):
(WTF::currentThread):
* wtf/ThreadingWin.cpp:
(WTF::threadMapMutex):
(WTF::initializeThreading):
(WTF::threadMap):
(WTF::storeThreadHandleByIdentifier):
(WTF::threadHandleForIdentifier):
(WTF::clearThreadHandleForIdentifier):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::detachThread):
(WTF::currentThread):
* wtf/gtk/ThreadingGtk.cpp:
(WTF::threadMapMutex):
(WTF::initializeThreading):
(WTF::threadMap):
(WTF::identifierByGthreadHandle):
(WTF::establishIdentifierForThread):
(WTF::threadForIdentifier):
(WTF::clearThreadForIdentifier):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::currentThread):
* wtf/qt/ThreadingQt.cpp:
(WTF::threadMapMutex):
(WTF::threadMap):
(WTF::identifierByQthreadHandle):
(WTF::establishIdentifierForThread):
(WTF::clearThreadForIdentifier):
(WTF::threadForIdentifier):
(WTF::initializeThreading):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::currentThread):
2009-05-13 Darin Adler <darin@apple.com>
Revert the parser arena change. It was a slowdown, not a speedup.
Better luck next time (I'll break it up into pieces).
2009-05-13 Darin Adler <darin@apple.com>
Tiger build fix.
* parser/Grammar.y: Add back empty code blocks, needed by older
versions of bison on certain rules.
2009-05-13 Steve Falkenburg <sfalken@apple.com>
Windows build fix.
* JavaScriptCore.vcproj/jsc/jsc.vcproj:
2009-05-13 Adam Roben <aroben@apple.com>
Windows build fixes after r43642
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
Updated.
* debugger/Debugger.cpp:
* runtime/ArrayConstructor.cpp:
* runtime/JSArray.cpp:
* runtime/RegExp.cpp:
* runtime/RegExpConstructor.cpp:
* runtime/RegExpPrototype.cpp:
* runtime/StringPrototype.cpp:
Added missing #includes.
2009-05-13 Darin Adler <darin@apple.com>
Reviewed by Cameron Zwarich.
Bug 25674: syntax tree nodes should use arena allocation
https://bugs.webkit.org/show_bug.cgi?id=25674
Step 3: Add some actual arena allocation. About 1% SunSpider speedup.
* JavaScriptCore.exp: Updated.
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
contains const Identifier* now.
(JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const
Identifier&.
* bytecompiler/BytecodeGenerator.h: Ditto
* bytecompiler/SegmentedVector.h: Added isEmpty.
* debugger/Debugger.cpp:
(JSC::Debugger::recompileAllJSFunctions): Moved this function here from
WebCore so WebCore doesn't need the details of FunctionBodyNode.
* debugger/Debugger.h: Ditto.
* interpreter/Interpreter.cpp:
(JSC::Interpreter::execute): Updated since VarStack contains const
Identifier* now.
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body
rather than on the function object, since we can't easily have inlined
access to the FunctionBodyNode in JSFunction.h since WebCore needs
access to that header.
(JSC::JITStubs::cti_op_construct_JSConstruct): Ditto.
* profiler/Profiler.cpp:
(JSC::Profiler::createCallIdentifier): Ditto.
* parser/Grammar.y: Use JSGlobalData* to pass the global data pointer
around whenever possible instead of using void*. Changed
SET_EXCEPTION_LOCATION from a macro to an inline function. Marked
the structure-creating functions inline. Changed the VarStack to use
identifier pointers instead of actual identifiers. This takes
advantage of the fact that all identifier pointers come from the
arena and avoids reference count churn. Changed Identifier* to
const Identifier* to make sure we don't modify any by accident.
Used identifiers for regular expression strings too, using the new
scanRegExp that has out parameters instead of the old one that relied
on side effects in the Lexer. Move the creation of numeric identifiers
out of this file and into the PropertyNode constructor.
* parser/Lexer.cpp:
(JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
(JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
and changed to call ParserArena.
(JSC::Lexer::scanRegExp): Added out arguments that are const Identifier*
as well as a prefix character argument so we can handle the /= case
without a string append.
(JSC::Lexer::skipRegExp): Added. Skips a regular expression without
allocating Identifier objects.
(JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern,
and m_flags, and added code to set m_arena to 0.
* parser/Lexer.h: Updated for changes above.
* parser/NodeConstructors.h:
(JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
on the arena.
(JSC::ParserArenaDeletable::operator new): Changed to call the
allocateDeletable function on the arena instead of deleteWithArena.
(JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead
of UString since these come from the parser which makes identifiers.
(JSC::PropertyNode::PropertyNode): Added new constructor that makes
numeric identifiers. Some day we might want to optimize this for
integers so it doesn't create a string for each one.
(JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
since it's now a const Identifier& so it can't be left uninitialized.
(JSC::BreakNode::BreakNode): Ditto.
(JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
to keep track of the statements rather than a separate statement vector.
(JSC::BlockNode::BlockNode): Ditto.
(JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.
* parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
It seemed strangely out of place in the header.
(JSC::ThrowableExpressionData::emitThrowError): Added an overload for
UString as well as Identifier.
(JSC::SourceElements::singleStatement): Added.
(JSC::SourceElements::lastStatement): Added.
(JSC::RegExpNode::emitBytecode): Updated since the pattern and flags
are now Identifier instead of UString. Also changed the throwError code
to use the substitution mechanism instead of doing a string append.
(JSC::SourceElements::emitBytecode): Added. Replaces the old
statementListEmitCode function, since we now keep the SourceElements
objects around.
(JSC::BlockNode::lastStatement): Added.
(JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
statementListEmitCode.
(JSC::CaseClauseNode::emitBytecode): Added.
(JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
instead of statementListEmitCode.
(JSC::ScopeNodeData::ScopeNodeData): Changed to store the
SourceElements* instead of using releaseContentsIntoVector.
(JSC::ScopeNode::emitStatementsBytecode): Added.
(JSC::ScopeNode::singleStatement): Added.
(JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
of statementListEmitCode.
(JSC::EvalNode::emitBytecode): Ditto.
(JSC::EvalNode::generateBytecode): Removed code to clear the children
vector. This optimization is no longer possible since everything is in
a single arena.
(JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
insetad of statementListEmitCode and check for the return node using
the new functions.
* parser/Nodes.h: Changed VarStack to store const Identifier* instead
of Identifier and rely on the arena to control lifetime. Added a new
ParserArenaFreeable class. Made ParserArenaDeletable inherit from
FastAllocBase instead of having its own operator new. Base the Node
class on ParserArenaFreeable. Changed the various Node classes
to use const Identifier& instead of Identifier to avoid the need to
call their destructors and allow them to function as "freeable" in the
arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
as a base class since they do not descend from Node. Eliminated the
StatementVector type and instead have various classes use SourceElements*
instead of StatementVector. This prevents those classes from having th
use ParserArenaDeletable to make sure the vector destructor is called.
* parser/Parser.cpp:
(JSC::Parser::parse): Pass the arena to the lexer.
* parser/Parser.h: Added an include of ParserArena.h, which is no longer
included by Nodes.h.
* parser/ParserArena.cpp:
(JSC::ParserArena::ParserArena): Added. Initializes the new members,
m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
(JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
since we store only the current pointer and the end of pool pointer.
(JSC::ParserArena::deallocateObjects): Added. Contains the common
memory-deallocation logic used by both the destructor and the
reset function.
(JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
(JSC::ParserArena::reset): Ditto. Also added code to zero out the
new structures, and switched to use clear() instead of shrink(0) since
we don't really reuse arenas.
(JSC::ParserArena::makeNumericIdentifier): Added.
(JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
is empty.
(JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
since this is used only for assertions at the moment.
* parser/ParserArena.h: Added an actual arena of "freeable" objects,
ones that don't need destructors to be called. Also added the segmented
vector of identifiers that used to be in the Lexer.
* runtime/FunctionConstructor.cpp:
(JSC::extractFunctionBody): Use singleStatement function rather than
getting at a StatementVector.
* runtime/FunctionPrototype.cpp:
(JSC::functionProtoFuncToString): Call isHostFunction on the body
rather than the function object.
* runtime/JSFunction.cpp:
(JSC::JSFunction::JSFunction): Moved the structure version of this in
here from the header. It's not hot enough that it needs to be inlined.
(JSC::JSFunction::isHostFunction): Moved this in here from the header.
It's now a helper to be used only within the class.
(JSC::JSFunction::setBody): Moved this in here. It's not hot enough that
it needs to be inlined, and we want to be able to compile the header
without the definition of FunctionBodyNode.
* runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was
exposing too much JavaScriptCore dependency to WebCore. Because of this
change and some changes made to WebCore, we could now export a lot fewer
headers from JavaScriptCore, but I have not done that yet in this check-in.
Made a couple functions non-inline. Removes some isHostFunction() assertions.
* wtf/FastAllocBase.h: Added the conventional using statements we use in
WTF so we can use identifiers from the WTF namespace without explicit
namespace qualification or namespace directive. This is the usual WTF style,
although it's unconventional in the C++ world. We use the namespace primarily
for link-time disambiguation, not compile-time.
* wtf/FastMalloc.cpp: Fixed an incorrect comment.
2009-05-13 Xan Lopez <xlopez@igalia.com>
Unreviewed build fix: add JITStubCall.h to files list.
* GNUmakefile.am:
2009-05-13 Ariya Hidayat <ariya.hidayat@nokia.com>
Unreviewed build fix, as suggested by Yael Aharon <yael.aharon@nokia.com>.
* wtf/qt/ThreadingQt.cpp:
(WTF::waitForThreadCompletion): renamed IsValid to isValid.
2009-05-13 Jan Michael Alonzo <jmalonzo@webkit.org>
Revert r43562 - [Gtk] WTF_USE_JSC is already defined in
WebCore/config.h.
* wtf/Platform.h:
2009-05-12 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Add SamplingCounter tool to provide a simple mechanism for counting events in JSC
(enabled using ENABLE(SAMPLING_COUNTERS)). To count events within a single function
use the class 'SamplingCounter', where the counter may be incremented from multiple
functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or
heap allocated, rather than statically declared) should use the DeletableSamplingCounter.
Further description of these classes is provided alongside their definition in
SamplingTool.h.
Counters may be incremented from c++ by calling the 'count()' method on the counter,
or may be incremented by JIT code by using the 'emitCount()' method within the JIT.
This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check.
* JavaScriptCore.exp:
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::addWithCarry32):
(JSC::MacroAssemblerX86::and32):
(JSC::MacroAssemblerX86::or32):
* assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::and32):
(JSC::MacroAssemblerX86Common::or32):
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::and32):
(JSC::MacroAssemblerX86_64::or32):
(JSC::MacroAssemblerX86_64::addPtr):
* assembler/X86Assembler.h:
(JSC::X86Assembler::):
(JSC::X86Assembler::adcl_im):
(JSC::X86Assembler::addq_im):
(JSC::X86Assembler::andl_im):
(JSC::X86Assembler::orl_im):
* bytecode/SamplingTool.cpp:
(JSC::AbstractSamplingCounter::dump):
* bytecode/SamplingTool.h:
(JSC::AbstractSamplingCounter::count):
(JSC::GlobalSamplingCounter::name):
(JSC::SamplingCounter::SamplingCounter):
* jit/JIT.h:
* jit/JITCall.cpp:
(JSC::):
* jit/JITInlineMethods.h:
(JSC::JIT::setSamplingFlag):
(JSC::JIT::clearSamplingFlag):
(JSC::JIT::emitCount):
* jsc.cpp:
(runWithScripts):
* parser/Nodes.cpp:
(JSC::ScopeNode::ScopeNode):
* wtf/Platform.h:
2009-05-13 Steve Falkenburg <sfalken@apple.com>
Windows build fix.
* JavaScriptCore.vcproj/JavaScriptCore.make:
2009-05-12 Steve Falkenburg <sfalken@apple.com>
Windows build fix.
* JavaScriptCore.vcproj/JavaScriptCore.make:
2009-05-12 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
<rdar://problem/6881457> Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com
We created the arguments objects before an op_push_scope but not
before op_push_new_scope, this meant a null arguments object could
be resolved inside catch blocks.
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitPushNewScope):
2009-05-12 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
<rdar://problem/6879881> Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com
<https://bugs.webkit.org/show_bug.cgi?id=25736> Crash loading www.google.dk/ig (and other igoogle's as well)
Following on from the lazy arguments creation patch, it's now
possible for an activation to to have a null register in the callframe
so we can't just blindly mark the local registers in an activation,
and must null check first instead.
* API/tests/testapi.c:
(functionGC):
* API/tests/testapi.js:
(bludgeonArguments.return.g):
(bludgeonArguments):
* runtime/JSActivation.cpp:
(JSC::JSActivation::mark):
2009-05-12 Gavin Barraclough <barraclough@apple.com>
Rubber stamped by Geoff Garen.
WTF_USE_CTI_REPATCH_PIC is no longer used, remove.
* jit/JIT.h:
* jit/JITStubCall.h:
2009-05-12 Gavin Barraclough <barraclough@apple.com>
Reviewed by Maciej Stachowiak.
We've run into some problems where changing the size of the class JIT leads to
performance fluctuations. Try forcing alignment in an attempt to stabalize this.
* jit/JIT.h:
2009-05-12 Kevin Ollivier <kevino@theolliviers.com>
wx build fix. Add ParserArena.cpp to the build.
* JavaScriptCoreSources.bkl:
2009-05-12 Oliver Hunt <oliver@apple.com>
Reviewed by Geoff Garen.
Unsigned underflow on 64bit cannot be treated as a negative number
This code included some placeswhere we deliberately create negative offsets
from unsigned values, on 32bit this is "safe", but in 64bit builds much
badness occurs. Solution is to use signed types as nature intended.
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_load_varargs):
2009-05-12 Jan Michael Alonzo <jmalonzo@webkit.org>
Reviewed by Holger Freyther.
[Gtk] Various autotools build refactoring and fixes
https://bugs.webkit.org/show_bug.cgi?id=25286
Define WTF_USE_JSC for the Gtk port.
* wtf/Platform.h:
2009-05-12 Maciej Stachowiak <mjs@apple.com>
Reviewed by Oliver Hunt.
- allow all of strictEqual to be inlined into cti_op_stricteq once again
We had this optimization once but accidentally lost it at some point.
* runtime/Operations.h:
(JSC::JSValue::strictEqualSlowCaseInline):
(JSC::JSValue::strictEqual):
2009-05-12 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
instanceof should throw if the constructor being tested does not implement
'HasInstance" (i.e. is a function). Instead we were returning false.
* interpreter/Interpreter.cpp:
(JSC::isInvalidParamForIn):
(JSC::isInvalidParamForInstanceOf):
(JSC::Interpreter::privateExecute):
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_instanceof):
* tests/mozilla/ecma_2/instanceof/instanceof-003.js:
Fix broken test case.
* tests/mozilla/ecma_2/instanceof/regress-7635.js:
Remove broken test case (was an exact duplicate of a test in instanceof-003.js).
2009-05-12 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
Improve function call forwarding performance
Make creation of the Arguments object occur lazily, so it
is not necessarily created for every function that references
it. Then add logic to Function.apply to allow it to avoid
allocating the Arguments object at all. Helps a lot with
the function forwarding/binding logic in jQuery, Prototype,
and numerous other JS libraries.
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dump):
* bytecode/Opcode.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::registerFor):
(JSC::BytecodeGenerator::willResolveToArguments):
(JSC::BytecodeGenerator::uncheckedRegisterForArguments):
(JSC::BytecodeGenerator::createArgumentsIfNecessary):
(JSC::BytecodeGenerator::emitCallEval):
(JSC::BytecodeGenerator::emitPushScope):
* bytecompiler/BytecodeGenerator.h:
* interpreter/Interpreter.cpp:
(JSC::Interpreter::privateExecute):
(JSC::Interpreter::retrieveArguments):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
* jit/JIT.h:
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_create_arguments):
(JSC::JIT::emit_op_init_arguments):
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_tear_off_arguments):
(JSC::JITStubs::cti_op_load_varargs):
* parser/Nodes.cpp:
(JSC::ApplyFunctionCallDotNode::emitBytecode):
2009-05-11 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
Enable use of SamplingFlags directly from JIT code.
* bytecode/SamplingTool.h:
* jit/JIT.h:
(JSC::JIT::sampleCodeBlock):
(JSC::JIT::sampleInstruction):
* jit/JITInlineMethods.h:
(JSC::JIT::setSamplingFlag):
(JSC::JIT::clearSamplingFlag):
2009-05-11 Gavin Barraclough <barraclough@apple.com>
Reviewed by Cameron Zwarich.
Implement JIT generation for instanceof for non-objects (always returns false).
Also fixes the sequencing of the prototype and value isObject checks, to no match the spec.
0.5% progression on v8 tests overall, due to 3.5% on early-boyer.
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):
* runtime/JSObject.cpp:
(JSC::JSObject::hasInstance):
* runtime/TypeInfo.h:
(JSC::TypeInfo::TypeInfo):
2009-05-11 Geoffrey Garen <ggaren@apple.com>
Reviewed by Sam Weinig.
A little more JIT refactoring.
Rearranged code to more clearly indicate what's conditionally compiled
and why. Now, all shared code is at the top of our JIT files, and all
#if'd code is at the bottom. #if'd code is delineated by large comments.
Moved functions that relate to the JIT but don't explicitly do codegen
into JIT.cpp. Refactored SSE2 check to store its result as a data member
in the JIT.
* jit/JIT.cpp:
(JSC::isSSE2Present):
(JSC::JIT::JIT):
(JSC::JIT::unlinkCall):
(JSC::JIT::linkCall):
* jit/JIT.h:
(JSC::JIT::isSSE2Present):
* jit/JITArithmetic.cpp:
(JSC::JIT::emit_op_mod):
(JSC::JIT::emitSlow_op_mod):
* jit/JITCall.cpp:
(JSC::JIT::compileOpCallVarargs):
(JSC::JIT::compileOpCallVarargsSlowCase):
2009-05-11 Holger Hans Peter Freyther <zecke@selfish.org>
Build fix.
* JavaScriptCore.pri: Build the new JITOpcodes.cpp
2009-05-11 Sam Weinig <sam@webkit.org>
Reviewed by Geoffrey Garen.
More re-factoring of JIT code generation. Use a macro to
forward the main switch-statement cases to the helper functions.
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):
2009-05-11 Sam Weinig <sam@webkit.org>
Reviewed by Geoffrey Garen.
More re-factoring of JIT code generation to move opcode generation
to helper functions outside the main switch-statement and gave those
helper functions standardized names. This patch covers the remaining
slow cases.
* jit/JIT.cpp:
* jit/JIT.h:
* jit/JITOpcodes.cpp:
2009-05-11 Geoffrey Garen <ggaren@apple.com>
Build fix.
* GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project.
2009-05-11 Geoffrey Garen <ggaren@apple.com>
Build fix.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
JITOpcodes.cpp and JITStubCall.h to the project.
2009-05-11 Geoffrey Garen <ggaren@apple.com>
Reviewed by Sam Weinig.
Some JIT refactoring.
Moved JITStubCall* into its own header.
Modified JITStubCall to ASSERT that its return value is handled correctly.
Also, replaced function template with explicit instantiations to resolve
some confusion.
Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes,
and calls to killLastResultRegister().
* JavaScriptCore.xcodeproj/project.pbxproj:
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompile):
* jit/JIT.h:
* jit/JITArithmetic.cpp:
* jit/JITCall.cpp:
* jit/JITInlineMethods.h:
(JSC::JIT::restoreArgumentReference):
* jit/JITPropertyAccess.cpp:
* jit/JITStubCall.h: Copied from jit/JIT.h.
(JSC::JITStubCall::JITStubCall):
(JSC::JITStubCall::addArgument):
(JSC::JITStubCall::call):
(JSC::JITStubCall::):
2009-05-11 Sam Weinig <sam@webkit.org>
Reviewed by Geoffrey Garen.
Start re-factoring JIT code generation to move opcode generation
to helper functions outside the main switch-statement and gave those
helper functions standardized names. This patch only covers the main
pass and all the arithmetic opcodes in the slow path.
* JavaScriptCore.xcodeproj/project.pbxproj:
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):
* jit/JIT.h:
* jit/JITArithmetic.cpp:
* jit/JITOpcodes.cpp: Copied from jit/JIT.cpp.
* jit/JITPropertyAccess.cpp:
2009-05-11 Steve Falkenburg <sfalken@apple.com>
Re-add experimental PGO configs.
Reviewed by Adam Roben.
* JavaScriptCore.vcproj/JavaScriptCore.make:
* JavaScriptCore.vcproj/JavaScriptCore.sln:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
* JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
* JavaScriptCore.vcproj/jsc/jsc.vcproj:
2009-05-11 Sam Weinig <sam@webkit.org>
Reviewed by Geoffrey "1" Garen.
Rip out the !USE(CTI_REPATCH_PIC) code. It was untested and unused.
* jit/JIT.h:
(JSC::JIT::compileGetByIdChainList):
(JSC::JIT::compileGetByIdChain):
(JSC::JIT::compileCTIMachineTrampolines):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdChainList):
(JSC::JIT::privateCompileGetByIdChain):
* jit/JITStubs.cpp:
(JSC::JITStubs::tryCachePutByID):
(JSC::JITStubs::tryCacheGetByID):
2009-05-11 Dmitry Titov <dimich@chromium.org>
GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK.
* wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion().
2009-05-11 Adam Roben <aroben@apple.com>
Build fix for newer versions of GCC
* wtf/ThreadingPthreads.cpp: Added a declaration of
waitForThreadCompletion before its definition to silence a warning.
2009-05-11 Dmitry Titov <dimich@chromium.org>
Reviewed by Alexey Proskuryakov and Adam Roben.
https://bugs.webkit.org/show_bug.cgi?id=25348
Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.
* wtf/Threading.h:
(WTF::ThreadIdentifier::ThreadIdentifier):
(WTF::ThreadIdentifier::isValid):
(WTF::ThreadIdentifier::invalidate):
(WTF::ThreadIdentifier::platformId):
ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and
methods that are used across the code on thread ids: construction, comparisons,
check for 'valid' state etc. '0' is used as invalid id, which happens to just work
with all platform-specific thread id implementations.
All the following files repeatedly reflect the new ThreadIdentifier for each platform.
We remove ThreadMap and threadMapMutex from all of them, remove the functions that
populated/searched/cleared the map and add platform-specific comparison operators
for ThreadIdentifier.
There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the
public build uses WTF threading functions with old type of ThreadingIdentifier.
The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new
functions so the deprecated ones can be removed.
* wtf/gtk/ThreadingGtk.cpp:
(WTF::ThreadIdentifier::operator==):
(WTF::ThreadIdentifier::operator!=):
(WTF::initializeThreading):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::currentThread):
* wtf/ThreadingNone.cpp:
(WTF::ThreadIdentifier::operator==):
(WTF::ThreadIdentifier::operator!=):
* wtf/ThreadingPthreads.cpp:
(WTF::ThreadIdentifier::operator==):
(WTF::ThreadIdentifier::operator!=):
(WTF::initializeThreading):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::detachThread):
(WTF::currentThread):
(WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac.
Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t.
This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can
load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous
decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t.
This function will be removed as soon as Safari 4 will release next public build.
* wtf/qt/ThreadingQt.cpp:
(WTF::ThreadIdentifier::operator==):
(WTF::ThreadIdentifier::operator!=):
(WTF::initializeThreading):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::currentThread):
* wtf/ThreadingWin.cpp:
(WTF::ThreadIdentifier::operator==):
(WTF::ThreadIdentifier::operator!=):
(WTF::initializeThreading):
(WTF::createThreadInternal): All the platforms (except Windows) used a sequential
counter as a thread ID and mapped it into platform ID. Windows was using native thread
id and mapped it into thread handle. Since we can always obtain a thread handle
by thread id, createThread now closes the handle.
(WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle,
it means the thread already exited.
(WTF::detachThread):
(WTF::currentThread):
(WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now).
(WTF::waitForThreadCompletionDeprecated): same.
(WTF::currentThreadDeprecated): same.
(WTF::createThreadDeprecated): same.
* bytecode/SamplingTool.h:
* bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor.
* JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions
since they now take a different type as a parameter.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions
that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto.
2009-05-11 Darin Adler <darin@apple.com>
Reviewed by Oliver Hunt.
Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object.
https://bugs.webkit.org/show_bug.cgi?id=25560
rdar://problem/6861069
I missed this case back a year ago when I sped up handling
of JavaScript wrappers. Easy to fix.
* runtime/JSObject.h:
(JSC::JSValue::get): Return the prototype itself if the property name
is __proto__.
* runtime/JSString.cpp:
(JSC::JSString::getOwnPropertySlot): Ditto.
2009-05-09 Oliver Hunt <oliver@apple.com>
Reviewed by Maciej Stachowiak.
Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileCTIMachineTrampolines):
* jit/JIT.h:
* jit/JITInlineMethods.h:
(JSC::JIT::emitGetFromCallFrameHeaderPtr):
(JSC::JIT::emitGetFromCallFrameHeader32):
2009-05-11 Holger Hans Peter Freyther <zecke@selfish.org>
Unreviewed build fix. Build ParserAreana.cpp for Qt
* JavaScriptCore.pri:
2009-05-11 Norbert Leser <norbert.leser@nokia.com>
Reviewed by Darin Adler.
https://bugs.webkit.org/show_bug.cgi?id=24536
Symbian compilers cannot resolve WTF::PassRefPtr<JSC::Profile>
unless Profile.h is included.
* profiler/ProfileGenerator.h:
2009-05-11 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
Reviewed by Holger Freyther.
https://bugs.webkit.org/show_bug.cgi?id=24284
* JavaScriptCore.pri: coding style modified
* jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES
2009-05-11 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
Reviewed by NOBODY (build fix).
Also add ParserArena, in addition to AllInOne, for release builds,
since adding it to AllInOne breaks Mac.
* GNUmakefile.am:
2009-05-11 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
Unreviewed build fix. Adding ParserArena to the autotools build.
* GNUmakefile.am:
2009-05-11 Adam Roben <aroben@apple.com>
More Windows build fixes after r43479
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
Export ParserArena::reset.
2009-05-11 Adam Roben <aroben@apple.com>
Windows build fixes after r43479
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
ParserArena to the project.
* parser/NodeConstructors.h: Added a missing include.
(JSC::ParserArenaDeletable::operator new): Marked these as inline.
2009-05-10 Maciej Stachowiak <mjs@apple.com>
Reviewed by Geoff Garen.
- fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit
https://bugs.webkit.org/show_bug.cgi?id=25680
Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit.
* jit/JIT.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::patchGetByIdSelf):
(JSC::JIT::patchPutByIdReplace):
2009-05-10 Darin Adler <darin@apple.com>
Reviewed by Cameron Zwarich.
Bug 25674: syntax tree nodes should use arena allocation
https://bugs.webkit.org/show_bug.cgi?id=25674
Part two: Remove reference counting from most nodes.
* JavaScriptCore.exp: Updated.
* JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp.
* parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of
ParserArenaData. Took out now-nonfunctional code that tries to manually
release declaration list. Changed the new calls that create FuncDeclNode
and FuncExprNode so that they use the proper version of operator new for
the reference-counted idiom, not the deletion idiom.
* parser/NodeConstructors.h:
(JSC::ParserArenaDeletable::operator new): Added.
(JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added.
(JSC::Node::Node): Removed ParserRefCounted initializer.
(JSC::ElementNode::ElementNode): Ditto.
(JSC::PropertyNode::PropertyNode): Ditto.
(JSC::ArgumentsNode::ArgumentsNode): Ditto.
(JSC::SourceElements::SourceElements): Ditto.
(JSC::ParameterNode::ParameterNode): Ditto.
(JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer.
(JSC::FuncDeclNode::FuncDeclNode): Ditto.
(JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer.
(JSC::ClauseListNode::ClauseListNode): Ditto.
(JSC::CaseBlockNode::CaseBlockNode): Ditto.
* parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of
ParserArenaData.
* parser/Nodes.cpp:
(JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer.
(JSC::ProgramNode::create): Use the proper version of operator new for
the reference-counted idiom, not the deletion idiom. Use the arena
contains function instead of the vecctor find function.
(JSC::EvalNode::create): Use the proper version of operator new for
the reference-counted idiom, not the deletion idiom. Use the arena
reset function instead of the vector shrink function.
(JSC::FunctionBodyNode::createNativeThunk): Use the proper version
of operator new for the reference-counted idiom, not the deletion idiom.
(JSC::FunctionBodyNode::create): More of the same.
* parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted
to replace ParserRefCounted. Fixed inheritance so only the classes that
need reference counting inherit from ParserArenaRefCounted.
* parser/Parser.cpp:
(JSC::Parser::parse): Set m_sourceElements to 0 since it now starts
uninitialized. Just set it to 0 again in the failure case, since it's
now just a raw pointer, not an owning one.
(JSC::Parser::reparseInPlace): Removed now-unneeded get() function.
(JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData
with uses of ParserArenaData.
* parser/Parser.h: Less RefPtr, more arena.
* parser/ParserArena.cpp: Added.
* parser/ParserArena.h: Added.
* runtime/JSGlobalData.cpp:
(JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's
now in the Parser.
(JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef.
(JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit.
* runtime/JSGlobalData.h: Removed parserArena, which is now in Parser.
* wtf/RefCounted.h: Added deletionHasBegun function, for use in
assertions to catch deletion not done by the deref function.
2009-05-10 David Kilzer <ddkilzer@apple.com>
Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-05-10 David Kilzer <ddkilzer@apple.com>
Try to fix the Windows build by removing an unknown symbol
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2009-05-10 David Kilzer <ddkilzer@apple.com>
Touch Nodes.cpp to try to fix Windows build
* parser/Nodes.cpp: Removed whitespace.
2009-05-10 Darin Adler <darin@apple.com>
Reviewed by Maciej Stachowiak.
Quick fix for failures seen on buildbot. Maciej plans a better fix later.
* wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt
from 32 to 64. Parsing "1e500", for example, requires more than 32 words.
2009-05-10 Darin Adler <darin@apple.com>
Reviewed by Sam Weinig.
Bug 25674: syntax tree nodes should use arena allocation
Part one: Change lifetimes so we won't have to use reference
counting so much, but don't eliminate the reference counts
entirely yet.
* JavaScriptCore.exp: Updated.
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers
instead of RefPtr.
(JSC::BytecodeGenerator::emitCall): Ditto.
(JSC::BytecodeGenerator::emitConstruct): Ditto.
* parser/Grammar.y: Update node creating code to use new (JSGlobalData*)
instead of the plain new. At the moment this is just a hook for future
arena allocation; it's inline and JSGlobalData* is not used.
* parser/NodeConstructors.h: Updated for name change of parserObjects to
parserArena. Also added explicit initialization for raw pointers that used
to be RefPtr. Also removed some uses of get() that aren't needed now that
the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode
and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*)
as above.
* parser/Nodes.cpp: Eliminated NodeReleaser and all use of it.
(JSC::ParserRefCounted::ParserRefCounted): Updated for name change of
parserObjects to parserArena.
(JSC::SourceElements::append): Use raw pointers.
(JSC::ArrayNode::emitBytecode): Ditto.
(JSC::ArrayNode::isSimpleArray): Ditto.
(JSC::ArrayNode::toArgumentList): Ditto.
(JSC::ObjectLiteralNode::emitBytecode): Ditto.
(JSC::PropertyListNode::emitBytecode): Ditto.
(JSC::BracketAccessorNode::emitBytecode): Ditto.
(JSC::DotAccessorNode::emitBytecode): Ditto.
(JSC::ArgumentListNode::emitBytecode): Ditto.
(JSC::NewExprNode::emitBytecode): Ditto.
(JSC::EvalFunctionCallNode::emitBytecode): Ditto.
(JSC::FunctionCallValueNode::emitBytecode): Ditto.
(JSC::FunctionCallResolveNode::emitBytecode): Ditto.
(JSC::FunctionCallBracketNode::emitBytecode): Ditto.
(JSC::FunctionCallDotNode::emitBytecode): Ditto.
(JSC::CallFunctionCallDotNode::emitBytecode): Ditto.
(JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto.
(JSC::PostfixBracketNode::emitBytecode): Ditto.
(JSC::PostfixDotNode::emitBytecode): Ditto.
(JSC::DeleteBracketNode::emitBytecode): Ditto.
(JSC::DeleteDotNode::emitBytecode): Ditto.
(JSC::DeleteValueNode::emitBytecode): Ditto.
(JSC::VoidNode::emitBytecode): Ditto.
(JSC::TypeOfValueNode::emitBytecode): Ditto.
(JSC::PrefixBracketNode::emitBytecode): Ditto.
(JSC::PrefixDotNode::emitBytecode): Ditto.
(JSC::UnaryOpNode::emitBytecode): Ditto.
(JSC::BinaryOpNode::emitStrcat): Ditto.
(JSC::BinaryOpNode::emitBytecode): Ditto.
(JSC::EqualNode::emitBytecode): Ditto.
(JSC::StrictEqualNode::emitBytecode): Ditto.
(JSC::ReverseBinaryOpNode::emitBytecode): Ditto.
(JSC::ThrowableBinaryOpNode::emitBytecode): Ditto.
(JSC::InstanceOfNode::emitBytecode): Ditto.
(JSC::LogicalOpNode::emitBytecode): Ditto.
(JSC::ConditionalNode::emitBytecode): Ditto.
(JSC::ReadModifyResolveNode::emitBytecode): Ditto.
(JSC::AssignResolveNode::emitBytecode): Ditto.
(JSC::AssignDotNode::emitBytecode): Ditto.
(JSC::ReadModifyDotNode::emitBytecode): Ditto.
(JSC::AssignBracketNode::emitBytecode): Ditto.
(JSC::ReadModifyBracketNode::emitBytecode): Ditto.
(JSC::CommaNode::emitBytecode): Ditto.
(JSC::ConstDeclNode::emitCodeSingle): Ditto.
(JSC::ConstDeclNode::emitBytecode): Ditto.
(JSC::ConstStatementNode::emitBytecode): Ditto.
(JSC::statementListEmitCode): Ditto.
(JSC::BlockNode::emitBytecode): Ditto.
(JSC::ExprStatementNode::emitBytecode): Ditto.
(JSC::VarStatementNode::emitBytecode): Ditto.
(JSC::IfNode::emitBytecode): Ditto.
(JSC::IfElseNode::emitBytecode): Ditto.
(JSC::DoWhileNode::emitBytecode): Ditto.
(JSC::WhileNode::emitBytecode): Ditto.
(JSC::ForNode::emitBytecode): Ditto.
(JSC::ForInNode::emitBytecode): Ditto.
(JSC::ReturnNode::emitBytecode): Ditto.
(JSC::WithNode::emitBytecode): Ditto.
(JSC::CaseBlockNode::tryOptimizedSwitch): Ditto.
(JSC::CaseBlockNode::emitBytecodeForBlock): Ditto.
(JSC::SwitchNode::emitBytecode): Ditto.
(JSC::LabelNode::emitBytecode): Ditto.
(JSC::ThrowNode::emitBytecode): Ditto.
(JSC::TryNode::emitBytecode): Ditto.
(JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership
of the arena, varStack and functionStack.
(JSC::ScopeNode::ScopeNode): Pass in the arena when creating the
ScopeNodeData.
(JSC::ProgramNode::ProgramNode): Made this inline since it's used
in only one place.
(JSC::ProgramNode::create): Changed this to return a PassRefPtr since
we plan to have the scope nodes be outside the arena, so they will need
some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr
in the future, though). Remove the node from the newly-created arena to
avoid a circular reference. Later we'll keep the node out of the arena
by using a different operator new, but for now it's the ParserRefCounted
constructor that puts the node into the arena, and there's no way to
bypass that.
(JSC::EvalNode::EvalNode): Ditto.
(JSC::EvalNode::create): Ditto.
(JSC::FunctionBodyNode::FunctionBodyNode): Ditto.
(JSC::FunctionBodyNode::createNativeThunk): Moved the code that
reseets the arena here instead of the caller.
(JSC::FunctionBodyNode::create): Same change as the other create
functions above.
(JSC::FunctionBodyNode::emitBytecode): Use raw pointers.
* parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to
use raw pointers. Removed the releaseNodes function. Added an override
of operator new that takes a JSGlobalData* to prepare for future arena use.
Use raw pointers instead of RefPtr everywhere possible.
* parser/Parser.cpp:
(JSC::Parser::reparseInPlace): Pass the arena in.
* parser/Parser.h:
(JSC::Parser::parse): Updated for name change of parserObjects to parserArena.
(JSC::Parser::reparse): Ditto.
* runtime/FunctionConstructor.cpp:
(JSC::extractFunctionBody): Ditto.
* runtime/JSGlobalData.cpp:
(JSC::JSGlobalData::~JSGlobalData): Ditto.
(JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the
FunctionBodyNode::createNativeThunk function.
* runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to
parserArena.
* wtf/NotFound.h: Added the usual "using WTF" to this header to match the
rest of WTF.
2009-05-10 Dimitri Glazkov <dglazkov@chromium.org>
Reviewed by Geoffrey Garen.
https://bugs.webkit.org/show_bug.cgi?id=25670
Remove no longer valid chunk of code from dtoa.
* wtf/dtoa.cpp:
(WTF::dtoa): Removed invalid code.
2009-05-10 Alexey Proskuryakov <ap@webkit.org>
Reviewed by Geoff Garen.
"Class const *" is the same as "const Class*", use the latter syntax consistently.
See <http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.9>.
* pcre/pcre_compile.cpp:
(calculateCompiledPatternLength):
* runtime/JSObject.h:
(JSC::JSObject::offsetForLocation):
(JSC::JSObject::locationForOffset):
2009-05-10 Maciej Stachowiak <mjs@apple.com>
Reviewed by Alexey Proskuryakov.
- speedup dtoa/strtod
Added a bunch of inlining, and replaced malloc with stack allocation.
0.5% SunSpider speedup (7% on string-tagcloud).
* runtime/NumberPrototype.cpp:
(JSC::integerPartNoExp):
(JSC::numberProtoFuncToExponential):
* runtime/UString.cpp:
(JSC::concatenate):
(JSC::UString::from):
* wtf/dtoa.cpp:
(WTF::BigInt::BigInt):
(WTF::BigInt::operator=):
(WTF::Balloc):
(WTF::Bfree):
(WTF::multadd):
(WTF::s2b):
(WTF::i2b):
(WTF::mult):
(WTF::pow5mult):
(WTF::lshift):
(WTF::cmp):
(WTF::diff):
(WTF::b2d):
(WTF::d2b):
(WTF::ratio):
(WTF::strtod):
(WTF::quorem):
(WTF::freedtoa):
(WTF::dtoa):
* wtf/dtoa.h:
2009-05-09 Mike Hommey <glandium@debian.org>
Reviewed by Geoffrey Garen. Landed by Jan Alonzo.
Enable JIT on x86-64 gtk+
https://bugs.webkit.org/show_bug.cgi?id=24724
* GNUmakefile.am:
2009-05-09 Geoffrey Garen <ggaren@apple.com>
Reviewed by Cameron Zwarich.
Removed the last non-call-related manually managed JIT stub call.
* jit/JITArithmetic.cpp:
(JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall
abstraction, instead of emitPutJITStubArg.
2009-05-09 Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Reviewed by Gustavo Noronha.
https://bugs.webkit.org/show_bug.cgi?id=25653
PLATFORM(X86_64) inherits ia64
__ia64__ is defined by gcc in an IA64 arch and has completely
nothing in common with X86-64 exept both are from Intel and have
an 64bit address space. That's it. Since code seems to expect x86
here, ia64 has to go.
* wtf/Platform.h:
2009-05-09 Gustavo Noronha Silva <gns@gnome.org>
Suggested by Geoffrey Garen.
Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a
build breakage on non-Mac X86-64 when JIT is enabled.
* jit/JITArithmetic.cpp:
2009-05-09 Gustavo Noronha Silva <gns@gnome.org>
Build fix, adding missing files to make dist.
* GNUmakefile.am:
2009-05-09 Geoffrey Garen <ggaren@apple.com>
Windows build fix.
* assembler/X86Assembler.h:
(JSC::X86Assembler::patchLoadToLEA):
2009-05-09 Geoffrey Garen <ggaren@apple.com>
Windows build fix.
* assembler/X86Assembler.h:
(JSC::X86Assembler::patchLoadToLEA):
2009-05-09 Maciej Stachowiak <mjs@apple.com>
Reviewed by Gavin Barraclough.
Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me.
- Assorted speedups to property access
~.3%-1% speedup on SunSpider
1) When we know from the structure ID that an object is using inline storage, plant direct
loads and stores against it; no need to indirect through storage pointer.
2) Also because of the above, union the property storage pointer with the first inline property
slot and add an extra inline property slot.
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction):
(JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA):
(JSC::::CodeLocationCommon::instructionAtOffset):
* assembler/MacroAssembler.h:
(JSC::MacroAssembler::storePtr):
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::store32):
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::storePtr):
* assembler/X86Assembler.h:
(JSC::X86Assembler::movq_EAXm):
(JSC::X86Assembler::movl_rm):
(JSC::X86Assembler::patchLoadToLEA):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
* jit/JIT.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::compileGetByIdHotPath):
(JSC::JIT::compilePutByIdHotPath):
(JSC::JIT::compilePutDirectOffset):
(JSC::JIT::compileGetDirectOffset):
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::patchGetByIdSelf):
(JSC::JIT::patchPutByIdReplace):
(JSC::JIT::privateCompileGetByIdSelf):
(JSC::JIT::privateCompileGetByIdProto):
(JSC::JIT::privateCompileGetByIdSelfList):
(JSC::JIT::privateCompileGetByIdProtoList):
(JSC::JIT::privateCompileGetByIdChainList):
(JSC::JIT::privateCompileGetByIdChain):
(JSC::JIT::privateCompilePutByIdReplace):
* runtime/JSObject.cpp:
(JSC::JSObject::mark):
(JSC::JSObject::removeDirect):
* runtime/JSObject.h:
(JSC::JSObject::propertyStorage):
(JSC::JSObject::getDirect):
(JSC::JSObject::getOffset):
(JSC::JSObject::offsetForLocation):
(JSC::JSObject::locationForOffset):
(JSC::JSObject::getDirectOffset):
(JSC::JSObject::putDirectOffset):
(JSC::JSObject::isUsingInlineStorage):
(JSC::JSObject::):
(JSC::JSObject::JSObject):
(JSC::JSObject::~JSObject):
(JSC::Structure::isUsingInlineStorage):
(JSC::JSObject::putDirect):
(JSC::JSObject::putDirectWithoutTransition):
(JSC::JSObject::allocatePropertyStorageInline):
* runtime/Structure.h:
2009-05-09 Geoffrey Garen <ggaren@apple.com>
Reviewed by Gavin Barraclough.
Changed all our JIT stubs so that they return a maximum of 1 JS value or
two non-JS pointers, and do all other value returning through out
parameters, in preparation for 64bit JS values on a 32bit system.
Stubs that used to return two JSValues now return one JSValue and take
and out parameter specifying where in the register array the second
value should go.
SunSpider reports no change.
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
* jit/JITArithmetic.cpp:
(JSC::JIT::compileFastArithSlow_op_post_inc):
(JSC::JIT::compileFastArithSlow_op_post_dec):
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_call_arityCheck):
(JSC::JITStubs::cti_op_resolve_func):
(JSC::JITStubs::cti_op_post_inc):
(JSC::JITStubs::cti_op_resolve_with_base):
(JSC::JITStubs::cti_op_post_dec):
* jit/JITStubs.h:
(JSC::):
2009-05-08 Geoffrey Garen <ggaren@apple.com>
Reviewed by Cameron Zwarich.
Fixed <rdar://problem/6634956> CrashTracer: [REGRESSION] >400 crashes
in Safari at com.apple.JavaScriptCore • JSC::BytecodeGenerator::emitComplexJumpScopes + 468
https://bugs.webkit.org/show_bug.cgi?id=25658
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop
with a bounds check. The old loop logic would decrement and read topScope
without a bounds check, which could cause crashes on page boundaries.
2009-05-08 Jan Michael Alonzo <jmalonzo@webkit.org>
Reviewed by NOBODY (BuildFix).
Gtk fix: add LiteralParser to the build script per r43424.
Add LiteralParser to the Qt and Wx build scripts too.
* GNUmakefile.am:
* JavaScriptCore.pri:
* JavaScriptCoreSources.bkl:
2009-05-08 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough and Darin Adler.
Add a limited literal parser for eval to handle object and array literals fired at eval
This is a simplified parser and lexer that we can throw at strings passed to eval
in case a site is using eval to parse JSON (eg. json2.js). The lexer is intentionally
limited (in effect it's whitelisting a limited "common" subset of the JSON grammar)
as this decreases the likelihood of us wating time attempting to parse any significant
amount of non-JSON content.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
* JavaScriptCore.xcodeproj/project.pbxproj:
* interpreter/Interpreter.cpp:
(JSC::Interpreter::callEval):
* runtime/JSGlobalObjectFunctions.cpp:
(JSC::globalFuncEval):
* runtime/LiteralParser.cpp: Added.
(JSC::isStringCharacter):
(JSC::LiteralParser::Lexer::lex):
(JSC::LiteralParser::Lexer::lexString):
(JSC::LiteralParser::Lexer::lexNumber):
(JSC::LiteralParser::parseStatement):
(JSC::LiteralParser::parseExpression):
(JSC::LiteralParser::parseArray):
(JSC::LiteralParser::parseObject):
(JSC::LiteralParser::StackGuard::StackGuard):
(JSC::LiteralParser::StackGuard::~StackGuard):
(JSC::LiteralParser::StackGuard::isSafe):
* runtime/LiteralParser.h: Added.
(JSC::LiteralParser::LiteralParser):
(JSC::LiteralParser::attemptJSONParse):
(JSC::LiteralParser::):
(JSC::LiteralParser::Lexer::Lexer):
(JSC::LiteralParser::Lexer::next):
(JSC::LiteralParser::Lexer::currentToken):
(JSC::LiteralParser::abortParse):
2009-05-08 Geoffrey Garen <ggaren@apple.com>
Not reviewed.
Restored a Mozilla JS test I accidentally gutted.
* tests/mozilla/ecma/Array/15.4.4.2.js:
(getTestCases):
(test):
2009-05-08 Geoffrey Garen <ggaren@apple.com>
Reviewed by Gavin Barraclough.
More abstraction for JITStub calls from JITed code.
Added a JITStubCall class that automatically handles things like assigning
arguments to different stack slots and storing return values. Deployed
the class in about a billion places. A bunch more places remain to be
fixed up, but this is a good stopping point for now.
* jit/JIT.cpp:
(JSC::JIT::emitTimeoutCheck):
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):
(JSC::JIT::privateCompile):
* jit/JIT.h:
(JSC::JIT::JSRInfo::JSRInfo):
(JSC::JITStubCall::JITStubCall):
(JSC::JITStubCall::addArgument):
(JSC::JITStubCall::call):
(JSC::JITStubCall::):
(JSC::CallEvalJITStub::CallEvalJITStub):
* jit/JITArithmetic.cpp:
(JSC::JIT::compileFastArithSlow_op_lshift):
(JSC::JIT::compileFastArithSlow_op_rshift):
(JSC::JIT::compileFastArithSlow_op_jnless):
(JSC::JIT::compileFastArithSlow_op_bitand):
(JSC::JIT::compileFastArithSlow_op_mod):
(JSC::JIT::compileFastArith_op_mod):
(JSC::JIT::compileFastArithSlow_op_post_inc):
(JSC::JIT::compileFastArithSlow_op_post_dec):
(JSC::JIT::compileFastArithSlow_op_pre_inc):
(JSC::JIT::compileFastArithSlow_op_pre_dec):
(JSC::JIT::compileFastArith_op_add):
(JSC::JIT::compileFastArith_op_mul):
(JSC::JIT::compileFastArith_op_sub):
(JSC::JIT::compileBinaryArithOpSlowCase):
(JSC::JIT::compileFastArithSlow_op_add):
(JSC::JIT::compileFastArithSlow_op_mul):
* jit/JITCall.cpp:
(JSC::JIT::compileOpCall):
(JSC::):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::compileGetByIdHotPath):
(JSC::JIT::compilePutByIdHotPath):
(JSC::JIT::compileGetByIdSlowCase):
(JSC::JIT::compilePutByIdSlowCase):
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_resolve_func):
(JSC::JITStubs::cti_op_resolve_with_base):
2009-05-08 Cameron Zwarich <cwzwarich@uwaterloo.ca>
Reviewed by Maciej Stachowiak.
Add a new opcode jnlesseq, and optimize its compilation in the JIT using
techniques similar to what were used to optimize jnless in r43363.
This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube,
control-flow-recursive, date-format-xparb, and string-base64.
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dump): Add support for dumping op_jnlesseq.
* bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes.
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization
for op_jnlesseq when emitting lesseq followed by a jump.
* interpreter/Interpreter.cpp:
(JSC::Interpreter::privateExecute): Add case for op_jnlesseq.
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq.
(JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq.
* jit/JIT.h:
* jit/JITArithmetic.cpp:
(JSC::JIT::compileFastArith_op_jnlesseq): Added.
(JSC::JIT::compileFastArithSlow_op_jnlesseq): Added.
* jit/JITStubs.cpp:
(JSC::JITStubs::cti_op_jlesseq): Added.
* jit/JITStubs.h:
2009-05-08 Maciej Stachowiak <mjs@apple.com>
Reviewed by Cameron Zwarich.
- fix test failures on 64-bit
* jit/JITArithmetic.cpp:
(JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an
immediate int as an immediate float in the 64-bit value representation.
2009-05-08 Gavin Barraclough <barraclough@apple.com>
Rubber stamped by Oliver Hunt.
Removing an empty constructor and an uncalled, empty function seems to be a
pretty solid 1% regeression on my machine, so I'm going to put them back.
Um. Yeah, this this pretty pointles and makes no sense at all. I officially
lose the will to live in 3... 2...
* bytecode/SamplingTool.cpp:
(JSC::SamplingTool::notifyOfScope):
* bytecode/SamplingTool.h:
(JSC::SamplingTool::~SamplingTool):
2009-05-08 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver "I see lots of ifdefs" Hunt.
Fix (kinda) for sampling tool breakage. The codeblock sampling tool has become
b0rked due to recent changes in native function calling. The initialization of
a ScopeNode appears to now occur before the sampling tool (or possibly the
interpreter has been brought into existence, wihich leads to crashyness).
This patch doesn't fix the problem. The crash occurs when tracking a Scope, but
we shouldn't need to track scopes when we're just sampling opcodes, not
codeblocks. Not retaining Scopes when just opcode sampling will reduce sampling
overhead reducing any instrumentation skew, which is a good thing. As a side
benefit this patch also gets the opcode sampling going again, albeit in a bit of
a lame way. Will come back later with a proper fix from codeblock sampling.
* JavaScriptCore.exp:
* bytecode/SamplingTool.cpp:
(JSC::compareLineCountInfoSampling):
(JSC::SamplingTool::dump):
* bytecode/SamplingTool.h:
(JSC::SamplingTool::SamplingTool):
* parser/Nodes.cpp:
(JSC::ScopeNode::ScopeNode):
2009-05-07 Mark Rowe <mrowe@apple.com>
Rubber-stamped by Oliver Hunt.
Fix <https://bugs.webkit.org/show_bug.cgi?id=25640>.
Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed
Roll out r43366 as it removed symbols that Safari 4 Beta uses.
* JavaScriptCore.exp:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
* bytecode/SamplingTool.cpp:
(JSC::SamplingThread::start):
(JSC::SamplingThread::stop):
* bytecode/SamplingTool.h:
* wtf/CrossThreadRefCounted.h:
(WTF::CrossThreadRefCounted::CrossThreadRefCounted):
(WTF::::ref):
(WTF::::deref):
* wtf/Threading.h:
* wtf/ThreadingNone.cpp:
* wtf/ThreadingPthreads.cpp:
(WTF::threadMapMutex):
(WTF::initializeThreading):
(WTF::threadMap):
(WTF::identifierByPthreadHandle):
(WTF::establishIdentifierForPthreadHandle):
(WTF::pthreadHandleForIdentifier):
(WTF::clearPthreadHandleForIdentifier):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::detachThread):
(WTF::currentThread):
* wtf/ThreadingWin.cpp:
(WTF::threadMapMutex):
(WTF::initializeThreading):
(WTF::threadMap):
(WTF::storeThreadHandleByIdentifier):
(WTF::threadHandleForIdentifier):
(WTF::clearThreadHandleForIdentifier):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::detachThread):
(WTF::currentThread):
* wtf/gtk/ThreadingGtk.cpp:
(WTF::threadMapMutex):
(WTF::initializeThreading):
(WTF::threadMap):
(WTF::identifierByGthreadHandle):
(WTF::establishIdentifierForThread):
(WTF::threadForIdentifier):
(WTF::clearThreadForIdentifier):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::currentThread):
* wtf/qt/ThreadingQt.cpp:
(WTF::threadMapMutex):
(WTF::threadMap):
(WTF::identifierByQthreadHandle):
(WTF::establishIdentifierForThread):
(WTF::clearThreadForIdentifier):
(WTF::threadForIdentifier):
(WTF::initializeThreading):
(WTF::createThreadInternal):
(WTF::waitForThreadCompletion):
(WTF::currentThread):
2009-05-07 Gustavo Noronha Silva <gns@gnome.org>
Suggested by Oliver Hunt.
Also check for Linux for the special-cased calling convention.
* jit/JIT.cpp:
(JSC::JIT::privateCompileCTIMachineTrampolines):
* wtf/Platform.h:
2009-05-07 Gavin Barraclough <barraclough@apple.com>