2009-08-10 Oliver Hunt Reviewed by NOBODY (And another build fix). Add new exports for MSVC * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: * JavaScriptCore.xcodeproj/project.pbxproj: 2009-08-10 Oliver Hunt Reviewed by NOBODY (yet another build fix). Remove obsolete entries from MSVC exports file * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-08-10 Oliver Hunt Reviewed by NOBODY (Build fix). Add includes needed for non-allinonefile builds * runtime/GetterSetter.h: * runtime/ScopeChain.h: 2009-08-10 Oliver Hunt Reviewed by NOBODY (Build fix). Fix export file for last build fix * JavaScriptCore.exp: 2009-08-10 Oliver Hunt Reviewed by NOBODY (Build fix). Hoist page size initialization into platform specific code. * jit/ExecutableAllocatorPosix.cpp: * jit/ExecutableAllocatorWin.cpp: * runtime/MarkStack.h: (JSC::MarkStack::pageSize): * runtime/MarkStackPosix.cpp: (JSC::MarkStack::initializePagesize): * runtime/MarkStackWin.cpp: (JSC::MarkStack::initializePagesize): 2009-08-07 Oliver Hunt Reviewed by Gavin Barraclough. Stack overflow crash in JavaScript garbage collector mark pass https://bugs.webkit.org/show_bug.cgi?id=12216 Make the GC mark phase iterative by using an explicit mark stack. To do this marking any single object is performed in multiple stages * The object is appended to the MarkStack, this sets the marked bit for the object using the new markDirect() function, and then returns * When the MarkStack is drain()ed the object is popped off the stack and markChildren(MarkStack&) is called on the object to collect all of its children. drain() then repeats until the stack is empty. Additionally I renamed a number of methods from 'mark' to 'markAggregate' in order to make it more clear that marking of those object was not going to result in an actual recursive mark. * GNUmakefile.am * JavaScriptCore.exp: * JavaScriptCore.gypi: * JavaScriptCore.pri: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/CodeBlock.cpp: (JSC::CodeBlock::markAggregate): * bytecode/CodeBlock.h: * bytecode/EvalCodeCache.h: (JSC::EvalCodeCache::markAggregate): * debugger/DebuggerActivation.cpp: (JSC::DebuggerActivation::markChildren): * debugger/DebuggerActivation.h: * interpreter/Register.h: * interpreter/RegisterFile.h: (JSC::RegisterFile::markGlobals): (JSC::RegisterFile::markCallFrames): * parser/Nodes.cpp: (JSC::ScopeNodeData::markAggregate): (JSC::EvalNode::markAggregate): (JSC::FunctionBodyNode::markAggregate): * parser/Nodes.h: (JSC::ScopeNode::markAggregate): * runtime/ArgList.cpp: (JSC::MarkedArgumentBuffer::markLists): * runtime/ArgList.h: * runtime/Arguments.cpp: (JSC::Arguments::markChildren): * runtime/Arguments.h: * runtime/Collector.cpp: (JSC::Heap::markConservatively): (JSC::Heap::markCurrentThreadConservativelyInternal): (JSC::Heap::markCurrentThreadConservatively): (JSC::Heap::markOtherThreadConservatively): (JSC::Heap::markStackObjectsConservatively): (JSC::Heap::markProtectedObjects): (JSC::Heap::collect): * runtime/Collector.h: * runtime/GetterSetter.cpp: (JSC::GetterSetter::markChildren): * runtime/GetterSetter.h: (JSC::GetterSetter::GetterSetter): (JSC::GetterSetter::createStructure): * runtime/GlobalEvalFunction.cpp: (JSC::GlobalEvalFunction::markChildren): * runtime/GlobalEvalFunction.h: * runtime/JSActivation.cpp: (JSC::JSActivation::markChildren): * runtime/JSActivation.h: * runtime/JSArray.cpp: (JSC::JSArray::markChildren): * runtime/JSArray.h: * runtime/JSCell.h: (JSC::JSCell::markCellDirect): (JSC::JSCell::markChildren): (JSC::JSValue::markDirect): (JSC::JSValue::markChildren): (JSC::JSValue::hasChildren): (JSC::MarkStack::append): (JSC::MarkStack::drain): * runtime/JSFunction.cpp: (JSC::JSFunction::markChildren): * runtime/JSFunction.h: * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData): * runtime/JSGlobalData.h: * runtime/JSGlobalObject.cpp: (JSC::markIfNeeded): (JSC::JSGlobalObject::markChildren): * runtime/JSGlobalObject.h: * runtime/JSNotAnObject.cpp: (JSC::JSNotAnObject::markChildren): * runtime/JSNotAnObject.h: * runtime/JSONObject.cpp: (JSC::Stringifier::markAggregate): (JSC::JSONObject::markStringifiers): * runtime/JSONObject.h: * runtime/JSObject.cpp: (JSC::JSObject::markChildren): (JSC::JSObject::defineGetter): (JSC::JSObject::defineSetter): * runtime/JSObject.h: * runtime/JSPropertyNameIterator.cpp: (JSC::JSPropertyNameIterator::markChildren): * runtime/JSPropertyNameIterator.h: (JSC::JSPropertyNameIterator::createStructure): (JSC::JSPropertyNameIterator::JSPropertyNameIterator): (JSC::JSPropertyNameIterator::create): * runtime/JSStaticScopeObject.cpp: (JSC::JSStaticScopeObject::markChildren): * runtime/JSStaticScopeObject.h: * runtime/JSType.h: (JSC::): * runtime/JSValue.h: * runtime/JSWrapperObject.cpp: (JSC::JSWrapperObject::markChildren): * runtime/JSWrapperObject.h: * runtime/MarkStack.cpp: Added. (JSC::MarkStack::compact): * runtime/MarkStack.h: Added. (JSC::): (JSC::MarkStack::MarkStack): (JSC::MarkStack::append): (JSC::MarkStack::appendValues): (JSC::MarkStack::~MarkStack): (JSC::MarkStack::MarkSet::MarkSet): (JSC::MarkStack::pageSize): MarkStackArray is a non-shrinking, mmap-based vector type used for storing objects to be marked. (JSC::MarkStack::MarkStackArray::MarkStackArray): (JSC::MarkStack::MarkStackArray::~MarkStackArray): (JSC::MarkStack::MarkStackArray::expand): (JSC::MarkStack::MarkStackArray::append): (JSC::MarkStack::MarkStackArray::removeLast): (JSC::MarkStack::MarkStackArray::isEmpty): (JSC::MarkStack::MarkStackArray::size): (JSC::MarkStack::MarkStackArray::shrinkAllocation): * runtime/MarkStackPosix.cpp: Added. (JSC::MarkStack::allocateStack): (JSC::MarkStack::releaseStack): * runtime/MarkStackWin.cpp: Added. (JSC::MarkStack::allocateStack): (JSC::MarkStack::releaseStack): * runtime/ScopeChain.h: * runtime/ScopeChainMark.h: (JSC::ScopeChain::markAggregate): * runtime/SmallStrings.cpp: (JSC::SmallStrings::mark): * runtime/Structure.h: (JSC::Structure::markAggregate): 2009-08-10 Mark Rowe Reviewed by Darin Adler. Fix hundreds of "pointer being freed was not allocated" errors seen on the build bot. * wtf/FastMalloc.h: Implement nothrow variants of the delete and delete[] operators since we implement the nothrow variants of new and new[]. The nothrow variant of delete is called explicitly in the implementation of std::sort which was resulting in FastMalloc-allocated memory being passed to the system allocator to free. 2009-08-10 Jan Michael Alonzo [Gtk] Unreviewed build fix. Move JSAPIValueWrapper.cpp/.h in the debug section. This file is already part of AllInOneFile in Release builds. * GNUmakefile.am: 2009-08-10 Darin Adler * wtf/FastMalloc.h: Fix build. 2009-08-10 Darin Adler Reviewed by Mark Rowe. FastMalloc.h has cross-platform code but marked as WinCE-only https://bugs.webkit.org/show_bug.cgi?id=28160 1) The support for nothrow was inside #if PLATFORM(WINCE) even though it is not platform-specific. 2) The code tried to override operator delete nothrow, which does not exist. 3) The code in the header checks the value of USE_SYSTEM_MALLOC, but the code in FastMalloc.cpp checks only if the macro is defined. * wtf/FastMalloc.h: See above. * wtf/FastMalloc.cpp: Ditto. 2009-08-10 Sam Weinig Reviewed by Anders Carlsson. Fix an annoying indentation issue. * runtime/DateConstructor.cpp: (JSC::constructDate): 2009-08-10 Xan Lopez Unreviewed build fix. Add new files to makefile. * GNUmakefile.am: 2009-08-10 Simon Hausmann Fix compilation with the interpreter instead of the JIT by including PrototypeFunction.h as forward-declared through NativeFunctionWrapper.h. * runtime/ObjectConstructor.cpp: 2009-08-09 Oliver Hunt Reviewed by George Staikos. JSON.stringify replacer returning undefined does not omit object properties https://bugs.webkit.org/show_bug.cgi?id=28118 Correct behaviour of stringify when using a replacer function that returns undefined. This is a simple change to move the undefined value check to after the replacer function is called. This means that the replacer function is now called for properties with the value undefined, however i've confirmed that this behaviour is correct. In addition I've made the cyclic object exception have a more useful error message. * runtime/JSONObject.cpp: (JSC::Stringifier::appendStringifiedValue): 2009-08-08 Oliver Hunt Reviewed by Eric Seidel and Sam Weinig. [ES5] Implement Object.getPrototypeOf https://bugs.webkit.org/show_bug.cgi?id=28114 Implement getPrototypeOf * runtime/CommonIdentifiers.h: * runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::reset): * runtime/ObjectConstructor.cpp: (JSC::ObjectConstructor::ObjectConstructor): (JSC::objectConsGetPrototypeOf): * runtime/ObjectConstructor.h: 2009-08-07 Zoltan Horvath Reviewed by Eric Seidel. Allow custom memory allocation control for Noncopyable class https://bugs.webkit.org/show_bug.cgi?id=27879 Several classes which are inherited from Noncopyable are instantiated by operator new, so Noncopyable class has been inherited from FastAllocBase. * wtf/Noncopyable.h: 2009-08-07 George Staikos Reviewed by Eric Seidel. https://bugs.webkit.org/show_bug.cgi?id=27305 Implement WinCE-specific unicode layer. Written by George Staikos with bug fixes by Yong Li refactored by Joe Mason * wtf/Platform.h: * wtf/unicode/Unicode.h: * wtf/unicode/wince/UnicodeWince.cpp: Added. (WTF::Unicode::toLower): (WTF::Unicode::toUpper): (WTF::Unicode::foldCase): (WTF::Unicode::isPrintableChar): (WTF::Unicode::isSpace): (WTF::Unicode::isLetter): (WTF::Unicode::isUpper): (WTF::Unicode::isLower): (WTF::Unicode::isDigit): (WTF::Unicode::isPunct): (WTF::Unicode::toTitleCase): (WTF::Unicode::direction): (WTF::Unicode::category): (WTF::Unicode::decompositionType): (WTF::Unicode::combiningClass): (WTF::Unicode::mirroredChar): (WTF::Unicode::digitValue): * wtf/unicode/wince/UnicodeWince.h: Added. (WTF::Unicode::): (WTF::Unicode::isSeparatorSpace): (WTF::Unicode::isHighSurrogate): (WTF::Unicode::isLowSurrogate): (WTF::Unicode::isArabicChar): (WTF::Unicode::hasLineBreakingPropertyComplexContext): (WTF::Unicode::umemcasecmp): (WTF::Unicode::surrogateToUcs4): 2009-08-07 Yongjun Zhang Reviewed by Eric Seidel. https://bugs.webkit.org/show_bug.cgi?id=28069 Add inline to help winscw compiler resolve specialized argument in templated functions. * runtime/LiteralParser.cpp: (JSC::LiteralParser::Lexer::lexString): 2009-08-07 Zoltan Horvath Reviewed by Eric Seidel. Allow custom memory allocation control for RegExpObjectData struct http://bugs.webkit.org/show_bug.cgi?id=26750 Inherits RegExpObjectData struct from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/runtime/RegExpObject.cpp:62 * runtime/RegExpObject.h: 2009-08-06 Norbert Leser Reviewed by Darin Adler. Updated patch for bug #27059: Symbian platform always uses little endian encoding, regardless of compiler. We need to make sure that we correctly detect EABI architecture for armv5 targets on Symbian, where __EABI__ is set but not __ARM_EABI__ * wtf/Platform.h: 2009-08-06 Adam Barth Unreviewed revert. http://bugs.webkit.org/show_bug.cgi?id=27879 Revert 46877 because it broke GTK. * wtf/Noncopyable.h: 2009-08-06 Gavin Barraclough Reviewed by Oliver Hunt. Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification. ( https://bugs.webkit.org/show_bug.cgi?id=27635 ) This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%. (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled). * bytecode/CodeBlock.cpp: (JSC::printStructureStubInfo): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID. * bytecode/CodeBlock.h: (JSC::): (JSC::CallLinkInfo::seenOnce): (JSC::CallLinkInfo::setSeen): (JSC::MethodCallLinkInfo::seenOnce): (JSC::MethodCallLinkInfo::setSeen): - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once. * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::deref): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID. * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::StructureStubInfo): (JSC::StructureStubInfo::initGetByIdSelf): (JSC::StructureStubInfo::initGetByIdProto): (JSC::StructureStubInfo::initGetByIdChain): (JSC::StructureStubInfo::initGetByIdSelfList): (JSC::StructureStubInfo::initGetByIdProtoList): (JSC::StructureStubInfo::initPutByIdTransition): (JSC::StructureStubInfo::initPutByIdReplace): (JSC::StructureStubInfo::seenOnce): (JSC::StructureStubInfo::setSeen): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitGetById): (JSC::BytecodeGenerator::emitPutById): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): (JSC::JIT::unlinkCall): - Remove the "don't lazy link" stage of calls. * jit/JIT.h: (JSC::JIT::compileCTIMachineTrampolines): - Remove the "don't lazy link" stage of calls. * jit/JITCall.cpp: (JSC::JIT::compileOpCallSlowCase): - Remove the "don't lazy link" stage of calls. * jit/JITStubs.cpp: (JSC::JITThunks::JITThunks): (JSC::JITThunks::tryCachePutByID): (JSC::JITThunks::tryCacheGetByID): (JSC::JITStubs::DEFINE_STUB_FUNCTION): (JSC::JITStubs::getPolymorphicAccessStructureListSlot): - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check. * jit/JITStubs.h: (JSC::JITThunks::ctiStringLengthTrampoline): (JSC::JITStubs::): - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check. * wtf/PtrAndFlags.h: (WTF::PtrAndFlags::PtrAndFlags): (WTF::PtrAndFlags::operator!): (WTF::PtrAndFlags::operator->): - Add ! and -> operators, add constuctor with pointer argument. 2009-08-06 Zoltan Horvath Reviewed by Adam Barth. Allow custom memory allocation control for Noncopyable class https://bugs.webkit.org/show_bug.cgi?id=27879 Several classes which inherited from Noncopyable are instantiated by operator new, so Noncopyable class has been inherited from FastAllocBase. * wtf/Noncopyable.h: 2009-08-06 Mark Rowe Rubber-stamped by Sam Weinig. Add explicit dependencies for our build verification scripts to ensure that they always run after linking has completed. * JavaScriptCore.xcodeproj/project.pbxproj: 2009-08-06 Mark Rowe Bring a little order to our otherwise out of control lives. * JavaScriptCore.xcodeproj/project.pbxproj: 2009-08-06 Zoltan Horvath Reviewed by Darin Adler. Allow custom memory allocation control for JavaScriptCore's PolymorphicAccessStructureList struct https://bugs.webkit.org/show_bug.cgi?id=27877 Inherits PolymorphicAccessStructureList struct from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/jit/JITStubs.cpp:1229. * bytecode/Instruction.h: 2009-08-05 Zoltan Horvath Reviewed by Darin Adler. Allow custom memory allocation control for JavaScriptCore's ScopeNodeData struct https://bugs.webkit.org/show_bug.cgi?id=27875 Inherits ScopeNodeData struct from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/parser/Nodes.cpp:1848. * parser/Nodes.h: 2009-08-05 Zoltan Herczeg Reviewed by Gavin Barraclough. Add floating point support for generic ARM port. https://bugs.webkit.org/show_bug.cgi?id=24986 * assembler/ARMAssembler.cpp: (JSC::ARMAssembler::doubleTransfer): * assembler/ARMAssembler.h: (JSC::ARM::): (JSC::ARMAssembler::): (JSC::ARMAssembler::faddd_r): (JSC::ARMAssembler::fsubd_r): (JSC::ARMAssembler::fmuld_r): (JSC::ARMAssembler::fcmpd_r): (JSC::ARMAssembler::fdtr_u): (JSC::ARMAssembler::fdtr_d): (JSC::ARMAssembler::fmsr_r): (JSC::ARMAssembler::fsitod_r): (JSC::ARMAssembler::fmstat): * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::): (JSC::MacroAssemblerARM::supportsFloatingPoint): (JSC::MacroAssemblerARM::loadDouble): (JSC::MacroAssemblerARM::storeDouble): (JSC::MacroAssemblerARM::addDouble): (JSC::MacroAssemblerARM::subDouble): (JSC::MacroAssemblerARM::mulDouble): (JSC::MacroAssemblerARM::convertInt32ToDouble): (JSC::MacroAssemblerARM::branchDouble): * jit/JIT.h: 2009-08-05 Zoltan Herczeg Reviewed by Gavin Barraclough. Add JIT support for generic ARM port without optimizations. https://bugs.webkit.org/show_bug.cgi?id=24986 All JIT optimizations are disabled. Signed off by Zoltan Herczeg Signed off by Gabor Loki * assembler/ARMAssembler.cpp: (JSC::ARMAssembler::baseIndexTransfer32): * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::Imm32::Imm32): * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::store32): (JSC::MacroAssemblerARM::move): (JSC::MacroAssemblerARM::branch32): (JSC::MacroAssemblerARM::add32): (JSC::MacroAssemblerARM::sub32): (JSC::MacroAssemblerARM::load32): * bytecode/CodeBlock.h: (JSC::CodeBlock::getBytecodeIndex): * jit/JIT.h: * jit/JITInlineMethods.h: (JSC::JIT::restoreArgumentReference): * jit/JITOpcodes.cpp: * jit/JITStubs.cpp: * jit/JITStubs.h: (JSC::JITStackFrame::returnAddressSlot): * wtf/Platform.h: 2009-08-04 Gavin Barraclough Rubber Stamped by Oiver Hunt. Revert r46643 since this breaks the Yarr::Interpreter running the v8 tests. https://bugs.webkit.org/show_bug.cgi?id=27874 * yarr/RegexInterpreter.cpp: (JSC::Yarr::Interpreter::allocDisjunctionContext): (JSC::Yarr::Interpreter::freeDisjunctionContext): (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext): 2009-08-04 Oliver Hunt Reviewed by NOBODY (build fix). PPC64 Build fix * wtf/Platform.h: 2009-08-04 Benjamin C Meyer Reviewed by Adam Treat Explicitly include limits.h header when using INT_MAX and INT_MIN * interpreter/Interpreter.cpp 2009-08-03 Harald Fernengel Reviewed by Darin Adler. Fix compile error for ambigous call to abs() https://bugs.webkit.org/show_bug.cgi?id=27873 Fix ambiguity in abs(long int) call by calling labs() instead * wtf/DateMath.cpp: replace call to abs() with labs() 2009-08-03 Laszlo Gombos Reviewed by Eric Seidel. [Qt] Consolidate common gcc flags to WebKit.pri https://bugs.webkit.org/show_bug.cgi?id=27934 * JavaScriptCore.pro: 2009-08-03 Ada Chan Fixed the Tiger build. * wtf/FastMalloc.cpp: 2009-08-03 Ada Chan Reviewed by Darin Adler. Don't use background thread to scavenge memory on Tiger until we figure out why it causes a crash. https://bugs.webkit.org/show_bug.cgi?id=27900 * wtf/FastMalloc.cpp: 2009-08-03 Fumitoshi Ukai Reviewed by Jan Alonzo. Fix build break on Gtk/x86_64. https://bugs.webkit.org/show_bug.cgi?id=27936 Use JSVALUE64 for X86_64 LINUX, except Qt. * wtf/Platform.h: 2009-08-02 Xan Lopez Fix the GTK+ build. * wtf/Platform.h: 2009-08-02 Geoffrey Garen Reviewed by Sam Weinig. Disabled JSVALUE32_64 on Qt builds, since all layout tests mysteriously crash with it enabled. * wtf/Platform.h: 2009-08-02 Geoffrey Garen Qt build fix. Added JSAPIValueWrapper.cpp to the build. * JavaScriptCore.pri: 2009-08-02 Geoffrey Garen Windows build fix. Exported symbols for JSAPIValueWrapper. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-08-02 Geoffrey Garen GTK build fix. * jit/JITStubs.cpp: #include , for a definition of va_start. 2009-08-02 Geoffrey Garen Qt build fix. * runtime/Collector.cpp: #include , for a definition of ULONG_MAX. 2009-08-02 Geoffrey Garen Windows build fix: Nixed JSImmediate::prototype, JSImmediate::toObject, and JSImmediate::toThisObject, and removed their exported symbols. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: * runtime/JSImmediate.cpp: * runtime/JSImmediate.h: 2009-08-02 Geoffrey Garen Reviewed by Mark Rowe. Enabled JSVALUE32_64 by default on all platforms other than x86_64 (which uses JSVALUE64). * wtf/Platform.h: 2009-08-02 Kevin Ollivier Reviewed by Jan Alonzo. Script for building the JavaScriptCore library for wx. https://bugs.webkit.org/show_bug.cgi?id=27619 * wscript: Added. 2009-08-02 Yong Li Reviewed by George Staikos. DateMath depends on strftime and localtime, which need to be imported manually on WinCE https://bugs.webkit.org/show_bug.cgi?id=26558 * wtf/DateMath.cpp: 2009-08-01 David Kilzer wtf/Threading.h: added include of Platform.h Reviewed by Mark Rowe. * wtf/Threading.h: Added #include "Platform.h" since this header uses PLATFORM() and other macros. 2009-08-01 Mark Rowe Rubber-stamped by Oliver Hunt. Roll out r46668 as it was misinformed. ScopeChain is only used with placement new. * runtime/ScopeChain.h: 2009-08-01 Zoltan Horvath Allow custom memory allocation control for JavaScriptCore's HashMap class http://bugs.webkit.org/show_bug.cgi?id=27871 Inherits HashMap class from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:148. * wtf/RefPtrHashMap.h: (WTF::): 2009-08-01 Zoltan Horvath Allow custom memory allocation control for JavaScriptCore's ScopeChain class https://bugs.webkit.org/show_bug.cgi?id=27834 Inherits ScopeChain class from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/runtime/JSFunction.h:109. * runtime/ScopeChain.h: 2009-08-01 Zoltan Horvath Reviewed by Darin Adler. Allow custom memory allocation control for JavaScriptCore's RegExpConstructorPrivate struct https://bugs.webkit.org/show_bug.cgi?id=27833 Inherits RegExpConstructorPrivate class from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/runtime/RegExpConstructor.cpp:152. * runtime/RegExpConstructor.cpp: 2009-07-31 Yong Li Reviewed by George Staikos. Resurrect the old GetTickCount implementation of currentTime, controlled by WTF_USE_QUERY_PERFORMANCE_COUNTER currentSystemTime taken from older WebKit; currentTime written by Yong Li ; cleanup by Joe Mason https://bugs.webkit.org/show_bug.cgi?id=27848 * wtf/CurrentTime.cpp: (WTF::currentSystemTime): get current time with GetCurrentFT (WTF::currentTime): track msec elapsed since first currentSystemTime call using GetTickCount * wtf/Platform.h: 2009-07-31 Ada Chan Fixes the Windows release-PGO build. Reviewed by Jon Honeycutt. * JavaScriptCore.vcproj/WTF/WTF.vcproj: Suppresses the warning about unreachable code that we get by adding "return 0" to WTF::TCMalloc_PageHeap::runScavengerThread(). * wtf/FastMalloc.cpp: (WTF::TCMalloc_PageHeap::runScavengerThread): Fixes the error about the method not returning a value in the release-PGO build. 2009-07-31 Zoltan Horvath Change malloc to fastMalloc and free to fastFree in Yarr's RegexInterpreter.cpp https://bugs.webkit.org/show_bug.cgi?id=27874 Use fastMalloc and fastFree instead of malloc and free in RegexInterpreter.cpp's methods. * yarr/RegexInterpreter.cpp: (JSC::Yarr::Interpreter::allocDisjunctionContext): (JSC::Yarr::Interpreter::freeDisjunctionContext): (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext): 2009-07-30 Xan Lopez Reviewed by Jan Alonzo. Fix compiler warning. GCC does not like C++-style comments in preprocessor directives. * wtf/Platform.h: 2009-07-30 John McCall Reviewed by Gavin Barraclough. Optimize the X86_64 trampolines: avoid the need for filler arguments and move the stub-args area closer to the stack pointer. * jit/JIT.h: adjust patch offsets because of slight code-size change * jit/JITCode.h: (JSC::JITCode::execute): don't pass filler args * jit/JITStubs.cpp: (ctiTrampoline): (X86_64): push args onto stack, use args directly (ctiVMThrowTrampoline): (X86_64): adjust %rsp by correct displacement (ctiOpThrowNotCaught): (X86_64): adjust %rsp by correct displacement * jit/JITStubs.h: (JITStackFrame): (X86_64): move args area earlier (ctiTrampoline): remove filler args from prototype 2009-07-30 Gavin Barraclough Reviewed by NOBODY (build fix). Temporarily revert r46618 since this is b0rking on Linux. 2009-07-23 Gavin Barraclough Reviewed by Oliver Hunt. Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification. ( https://bugs.webkit.org/show_bug.cgi?id=27635 ) This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%. (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled). * bytecode/CodeBlock.cpp: (JSC::printStructureStubInfo): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID. * bytecode/CodeBlock.h: (JSC::): (JSC::CallLinkInfo::seenOnce): (JSC::CallLinkInfo::setSeen): (JSC::MethodCallLinkInfo::seenOnce): (JSC::MethodCallLinkInfo::setSeen): - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once. * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::deref): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID. * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::StructureStubInfo): (JSC::StructureStubInfo::initGetByIdSelf): (JSC::StructureStubInfo::initGetByIdProto): (JSC::StructureStubInfo::initGetByIdChain): (JSC::StructureStubInfo::initGetByIdSelfList): (JSC::StructureStubInfo::initGetByIdProtoList): (JSC::StructureStubInfo::initPutByIdTransition): (JSC::StructureStubInfo::initPutByIdReplace): (JSC::StructureStubInfo::seenOnce): (JSC::StructureStubInfo::setSeen): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitGetById): (JSC::BytecodeGenerator::emitPutById): - Make StructureStubInfo store the type as an integer, rather than an OpcodeID. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): (JSC::JIT::unlinkCall): - Remove the "don't lazy link" stage of calls. * jit/JIT.h: (JSC::JIT::compileCTIMachineTrampolines): - Remove the "don't lazy link" stage of calls. * jit/JITCall.cpp: (JSC::JIT::compileOpCallSlowCase): - Remove the "don't lazy link" stage of calls. * jit/JITStubs.cpp: (JSC::JITThunks::JITThunks): (JSC::JITThunks::tryCachePutByID): (JSC::JITThunks::tryCacheGetByID): (JSC::JITStubs::DEFINE_STUB_FUNCTION): (JSC::JITStubs::getPolymorphicAccessStructureListSlot): - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check. * jit/JITStubs.h: (JSC::JITThunks::ctiStringLengthTrampoline): (JSC::JITStubs::): - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check. * wtf/PtrAndFlags.h: (WTF::PtrAndFlags::PtrAndFlags): (WTF::PtrAndFlags::operator!): (WTF::PtrAndFlags::operator->): - Add ! and -> operators, add constuctor with pointer argument. 2009-07-30 Geoffrey Garen Reviewed by Gavin Barraclough. Fixed failing tests seen on Windows buildbot. * jit/JITStubs.cpp: (JSC::DEFINE_STUB_FUNCTION): * jit/JITStubs.h: (JSC::): Use "int" instead of "bool" to guarantee a 32-bit result, regardless of compiler. gcc on mac uses 32-bit values for bool, but gcc on linux and MSVC on Windows use 8-bit values. 2009-07-30 Geoffrey Garen Windows build fix: added missing symbols on Windows. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-07-30 Geoffrey Garen Windows build fix: removed stale symbols on Windows. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: === End merge of nitro-extreme branch 2009-07-30 === 2009-07-20 Geoffrey Garen Fixed a post-review typo in r46066 that caused tons of test failures. SunSpider reports no change. * runtime/JSArray.cpp: (JSC::JSArray::JSArray): Initialize the full vector capacity, to avoid uninitialized members at the end. 2009-07-20 Geoffrey Garen Windows WebKit build fix: Added some missing exports. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-07-17 Geoffrey Garen Reviewed by Sam Weinig. Get the branch working on windows. https://bugs.webkit.org/show_bug.cgi?id=27391 SunSpider says 0.3% faster. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Updated MSVC export lists to fix linker errors. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added / removed new / old project files. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): Used #pragma pack to tell MSVC that these structures represent actual memory layout, and should not be automatically aligned. Changed the return value load to load a 64bit quantity into the canonical registers. * jit/JIT.h: Moved OBJECT_OFFSETOF definition to StdLibExtras.h because it's needed by more than just the JIT, and it supplements a standard library macro (offsetof). * jit/JITCall.cpp: (JSC::JIT::compileOpCallInitializeCallFrame): Fixed an incorrectly signed cast to resolve an MSVC warning. * jit/JITStubs.h: Used #pragma pack to tell MSVC that these structures represent actual memory layout, and should not be automatically aligned. * runtime/JSArray.cpp: (JSC::JSArray::JSArray): Replaced memset_pattern8 with a for loop, since memset_pattern8 is not portable. (I verified that this version of the loop gives the best performance / generated code in GCC.) * runtime/JSObject.h: (JSC::JSObject::JSObject): Removed accidental usage of FIELD_OFFSET -- OBJECT_OFFSETOF is our new macro name. (FIELD_OFFSET conflicts with a definition in winnt.h.) * runtime/JSValue.cpp: Added some headers needed by non-all-in-one builds. * runtime/JSValue.h: (JSC::JSValue::): Made the tag signed, to match MSVC's signed enum values. (GCC doesn't seem to care one way or the other.) * wtf/MainThread.cpp: Moved the StdLibExtras.h #include -- I did this a while ago to resolve a conflict with winnt.h. I can't remember if it's truly still needed, but what the heck. * wtf/StdLibExtras.h: Moved OBJECT_OFFSETOF definition here. 2009-07-06 Geoffrey Garen Reviewed by Sam Weinig (?). Fixed an assertion seen during the stress test. Don't assume that, if op1 is constant, op2 is not, and vice versa. Sadly, not all constants get folded. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emitSlow_op_jnlesseq): 2009-07-06 Geoffrey Garen Reviewed by Sam Weinig. Include op_convert_this in result caching. No change on SunSpider or v8. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_convert_this): * jit/JITStubs.cpp: (JSC::DEFINE_STUB_FUNCTION): * jit/JITStubs.h: (JSC::): Made the op_convert_this JIT stub return an EncodedJSValue, so to maintain the result caching contract that { tag, payload } can be found in { regT1, regT0 }. 2009-07-06 Geoffrey Garen Reviewed by Sam Weinig. Implemented result chaining. 1% faster on SunSpider. 4%-5% faster on v8. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::move): * assembler/X86Assembler.h: (JSC::X86Assembler::movl_rr): Added an optimization to eliminate no-op mov instructions, to simplify chaining. * jit/JIT.cpp: (JSC::JIT::JIT): * jit/JIT.h: Added data members and helper functions for recording chained results. We record both a mapping from virtual to machine register and the opcode for which the mapping is valid, to help ensure that the mapping isn't used after the mapped register has been stomped by other instructions. * jit/JITCall.cpp: (JSC::JIT::compileOpCallVarargs): (JSC::JIT::compileOpCallVarargsSlowCase): (JSC::JIT::emit_op_ret): (JSC::JIT::emit_op_construct_verify): (JSC::JIT::compileOpCall): (JSC::JIT::compileOpCallSlowCase): Chain function call results. * jit/JITInlineMethods.h: (JSC::JIT::emitLoadTag): (JSC::JIT::emitLoadPayload): (JSC::JIT::emitLoad): (JSC::JIT::emitLoad2): (JSC::JIT::isLabeled): (JSC::JIT::map): (JSC::JIT::unmap): (JSC::JIT::isMapped): (JSC::JIT::getMappedPayload): (JSC::JIT::getMappedTag): Use helper functions when loading virtual registers into machine registers, in case the loads can be eliminated by chaining. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_mov): (JSC::JIT::emit_op_end): (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_get_global_var): (JSC::JIT::emit_op_put_global_var): (JSC::JIT::emit_op_get_scoped_var): (JSC::JIT::emit_op_put_scoped_var): (JSC::JIT::emit_op_to_primitive): (JSC::JIT::emit_op_resolve_global): (JSC::JIT::emit_op_jneq_ptr): (JSC::JIT::emit_op_next_pname): (JSC::JIT::emit_op_to_jsnumber): (JSC::JIT::emit_op_catch): Chain results from these opcodes. (JSC::JIT::emit_op_profile_will_call): (JSC::JIT::emit_op_profile_did_call): Load the profiler into regT2 to avoid stomping a chained result. * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_method_check): (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_get_by_id): Chain results from these opcodes. * jit/JITStubCall.h: (JSC::JITStubCall::addArgument): Always use { regT1, regT0 }, to facilitate chaining. (JSC::JITStubCall::call): Unmap all mapped registers, since our callee stub might stomp them. 2009-07-01 Sam Weinig Reviewed by Gavin Barraclough. Don't reload values in emitBinaryDoubleOp. SunSpider reports a 0.6% progression. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emitBinaryDoubleOp): 2009-07-01 Sam Weinig Reviewed by Geoffrey Garen. Convert op_div to load op1 and op2 up front. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_div): 2009-07-01 Sam Weinig Reviewed by Geoffrey Garen. Don't emit code in emitBinaryDoubleOp if code is unreachable, observable via an empty (unlinked) jumplist passed in. This only effects op_jnless and op_jnlesseq at present. * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emitSlow_op_jnlesseq): (JSC::JIT::emitBinaryDoubleOp): 2009-07-01 Geoffrey Garen Reviewed by Sam Weinig. Converted op_mod to put { tag, payload } in { regT1, regT0 }, and tidied up its constant case. SunSpider reports a 0.2% regression, but a micro-benchmark of op_mod shows a 12% speedup, and the SunSpider test that uses op_mod most should benefit a lot from result caching in the end, since it almost always performs (expression) % constant. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_mod): (JSC::JIT::emitSlow_op_mod): 2009-06-30 Sam Weinig Reviewed by Geoffrey Garen. Converted some more arithmetic ops to put { tag, payload } in { regT1, regT0 }. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): 2009-06-30 Geoffrey Garen Reviewed by Sam Weinig. Converted some more arithmetic ops to put { tag, payload } in { regT1, regT0 }, and added a case for subtract constant. SunSpider says no change. v8 says 0.3% slower. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_add): (JSC::JIT::emitAdd32Constant): (JSC::JIT::emitSlow_op_add): (JSC::JIT::emit_op_sub): (JSC::JIT::emitSub32Constant): (JSC::JIT::emitSlow_op_sub): 2009-06-30 Gavin Barraclough Reviewed by Sam Weinig. Remove more uses of addressFor(), load double constants directly from the constantpool in the CodeBlock, rather than from the register file. * jit/JITArithmetic.cpp: (JSC::JIT::emitAdd32Constant): (JSC::JIT::emitBinaryDoubleOp): 2009-06-30 Geoffrey Garen Reviewed by Sam Weinig. Fixed a bug in postfix ops, where we would treat x = x++ and x = x-- as a no-op, even if x were not an int, and the ++/-- could have side-effects. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_post_inc): (JSC::JIT::emitSlow_op_post_inc): (JSC::JIT::emit_op_post_dec): (JSC::JIT::emitSlow_op_post_dec): 2009-06-30 Geoffrey Garen Reviewed by Sam Weinig. Converted some arithmetic ops to put { tag, payload } in { regT1, regT0 }. SunSpider says 0.7% faster. v8 says no change. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emit_op_lshift): (JSC::JIT::emit_op_rshift): (JSC::JIT::emit_op_bitand): (JSC::JIT::emit_op_bitor): (JSC::JIT::emit_op_bitxor): * jit/JITInlineMethods.h: (JSC::JIT::isOperandConstantImmediateInt): (JSC::JIT::getOperandConstantImmediateInt): 2009-06-30 Gavin Barraclough Reviewed by Sam Weinig. Start removing cases of addressFor(). * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emitAdd32Constant): (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_div): * jit/JITInlineMethods.h: (JSC::JIT::emitLoadDouble): (JSC::JIT::emitLoadInt32ToDouble): (JSC::JIT::emitStoreDouble): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): 2009-06-30 Geoffrey Garen Rolled back in my last patch with regression fixed. * jit/JIT.cpp: (JSC::JIT::privateCompileSlowCases): * jit/JIT.h: * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): (JSC::JIT::emit_op_resolve_global): (JSC::JIT::emitSlow_op_resolve_global): (JSC::JIT::emit_op_eq): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emit_op_neq): (JSC::JIT::emitSlow_op_neq): 2009-06-30 Geoffrey Garen Rolled out my last patch because it was a 2% SunSpider regression. * jit/JIT.cpp: (JSC::JIT::privateCompileSlowCases): * jit/JIT.h: * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): (JSC::JIT::emit_op_resolve_global): (JSC::JIT::emit_op_eq): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emit_op_neq): (JSC::JIT::emitSlow_op_neq): 2009-06-30 Geoffrey Garen Reviewed by Gavin "Sam Weinig" Barraclough. Standardized the rest of our opcodes to put { tag, payload } in { regT1, regT0 } where possible. * jit/JIT.cpp: (JSC::JIT::privateCompileSlowCases): * jit/JIT.h: * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): (JSC::JIT::emit_op_resolve_global): (JSC::JIT::emitSlow_op_resolve_global): (JSC::JIT::emit_op_eq): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emit_op_neq): (JSC::JIT::emitSlow_op_neq): 2009-06-30 Gavin Barraclough Reviewed by Geoffrey Garen. Replace calls to store32(tagFor()) and store32(payloadFor()) with emitStoreInt32(), emitStoreBool(), and emitStoreCell(). * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_negate): (JSC::JIT::emit_op_lshift): (JSC::JIT::emit_op_rshift): (JSC::JIT::emit_op_bitand): (JSC::JIT::emitBitAnd32Constant): (JSC::JIT::emit_op_bitor): (JSC::JIT::emitBitOr32Constant): (JSC::JIT::emit_op_bitxor): (JSC::JIT::emitBitXor32Constant): (JSC::JIT::emit_op_bitnot): (JSC::JIT::emit_op_post_inc): (JSC::JIT::emit_op_post_dec): (JSC::JIT::emit_op_pre_inc): (JSC::JIT::emit_op_pre_dec): (JSC::JIT::emit_op_add): (JSC::JIT::emitAdd32Constant): (JSC::JIT::emit_op_sub): (JSC::JIT::emitSub32ConstantLeft): (JSC::JIT::emitSub32ConstantRight): (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): (JSC::JIT::emit_op_div): (JSC::JIT::emit_op_mod): * jit/JITCall.cpp: (JSC::JIT::emit_op_load_varargs): * jit/JITInlineMethods.h: (JSC::JIT::emitStoreInt32): (JSC::JIT::emitStoreCell): (JSC::JIT::emitStoreBool): (JSC::JIT::emitStore): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_not): (JSC::JIT::emit_op_eq): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emit_op_neq): (JSC::JIT::emitSlow_op_neq): (JSC::JIT::compileOpStrictEq): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): * jit/JITStubCall.h: (JSC::JITStubCall::call): 2009-06-30 Geoffrey Garen Reviewed by Sam Weinig. Standardized the rest of the property access instructions to put { tag, payload } in { regT1, regT0 }. Small v8 speedup, 0.2% SunSpider slowdown. * jit/JIT.h: * jit/JITInlineMethods.h: (JSC::JIT::emitLoad): (JSC::JIT::emitLoad2): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::patchPutByIdReplace): 2009-06-29 Sam Weinig Reviewed by Gavin Barraclough. Various cleanups. - Use fpRegT* instead of X86::xmm*. - Use a switch statement in emitBinaryDoubleOp instead of a bunch of if/elses. * jit/JITArithmetic.cpp: (JSC::JIT::emitAdd32Constant): (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_div): 2009-06-29 Sam Weinig Reviewed by Geoffrey Garen. Add inline code dealing with doubles for op_jfalse and op_jtrue. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::): (JSC::MacroAssemblerX86Common::zeroDouble): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): 2009-06-28 Geoffrey Garen Reviewed by Sam Weinig. Standardized op_get_by_id to put { tag, payload } in { regT1, regT0 }. SunSpider and v8 report maybe 0.2%-0.4% regressions, but the optimization this enables will win much more than that back. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): * jit/JIT.h: * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_method_check): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::compileGetByIdHotPath): (JSC::JIT::compileGetByIdSlowCase): (JSC::JIT::patchGetByIdSelf): (JSC::JIT::privateCompilePatchGetArrayLength): (JSC::JIT::privateCompileGetByIdProto): (JSC::JIT::privateCompileGetByIdSelfList): (JSC::JIT::privateCompileGetByIdProtoList): (JSC::JIT::privateCompileGetByIdChainList): (JSC::JIT::privateCompileGetByIdChain): 2009-06-26 Geoffrey Garen Reviewed by Maciej Stachowiak. Standardized op_call to put { tag, payload } in { regT1, regT0 }. SunSpider and v8 report no change. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): * jit/JITCall.cpp: (JSC::JIT::compileOpCallInitializeCallFrame): (JSC::JIT::compileOpCallSetupArgs): (JSC::JIT::compileOpConstructSetupArgs): (JSC::JIT::compileOpCallVarargsSetupArgs): (JSC::JIT::compileOpCallVarargs): (JSC::JIT::compileOpCall): (JSC::JIT::compileOpCallSlowCase): 2009-06-26 Sam Weinig Reviewed by Geoffrey Garen. Handle multiplying by zero a little better by inlining the case that both operands are non-negative into the slowpath. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::branchOr32): * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): 2009-06-25 Geoffrey Garen Reviewed by Sam Weinig. Optimize x++ to ++x inside for loops. Sadly, no measurable speedup, but this should help with result chaining. * parser/Nodes.cpp: (JSC::ForNode::emitBytecode): 2009-06-25 Geoffrey Garen Reviewed by Sam Weinig. Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_bitnot): (JSC::JIT::emit_op_post_inc): 2009-06-25 Geoffrey Garen Reviewed by Sam Weinig. Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_bitnot): (JSC::JIT::emit_op_post_dec): (JSC::JIT::emit_op_pre_inc): (JSC::JIT::emitSlow_op_pre_inc): (JSC::JIT::emit_op_pre_dec): (JSC::JIT::emitSlow_op_pre_dec): 2009-06-25 Geoffrey Garen Reviewed by Sam Weinig. Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_negate): (JSC::JIT::emitSlow_op_negate): * jit/JITCall.cpp: (JSC::JIT::emit_op_construct_verify): (JSC::JIT::emitSlow_op_construct_verify): 2009-06-25 Geoffrey Garen Reviewed by Sam Weinig. Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_true): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): 2009-06-25 Geoffrey Garen Reviewed by Sam Weinig (sort of, maybe). Fixed some ASSERTs in http/tests/security. These ASSERTs were introduced by http://trac.webkit.org/changeset/45057, but the underlying problem was actually older. http://trac.webkit.org/changeset/45057 just exposed the problem by enabling optimization in more cases. The ASSERTs fired because we tested PropertySlot::slotBase() for validity, but slotBase() ASSERTs if it's invalid, so we would ASSERT before the test could happen. Solution: Remove the ASSERT. Maybe it was valid once, but it clearly goes against a pattern we've deployed of late. The underlying problem was that WebCore would re-use a PropertySlot in the case of a forwarding access, and the second use would not completely overwrite the first use. Solution: Make sure to overwrite m_offset when setting a value on a PropertySlot. (Other values already get implicitly overwritten during reuse.) * runtime/PropertySlot.h: (JSC::PropertySlot::PropertySlot): (JSC::PropertySlot::setValueSlot): (JSC::PropertySlot::setValue): (JSC::PropertySlot::setRegisterSlot): (JSC::PropertySlot::setUndefined): (JSC::PropertySlot::slotBase): (JSC::PropertySlot::clearOffset): 2009-06-24 Gavin Barraclough Reviewed by Geoff Garen. Enable JIT_OPTIMIZE_METHOD_CALLS on the branch, implementation matches current implemenatation in ToT. * jit/JIT.h: * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_method_check): (JSC::JIT::emitSlow_op_method_check): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::compileGetByIdHotPath): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::compileGetByIdSlowCase): 2009-06-23 Geoffrey Garen Reviewed by Sam Weinig. Bit off a tiny bit more of standardizing opcode behavior to help with result caching. SunSpider reports no change, v8 maybe a tiny speedup. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_to_jsnumber): (JSC::JIT::emitSlow_op_to_jsnumber): (JSC::JIT::emit_op_convert_this): (JSC::JIT::emitSlow_op_convert_this): 2009-06-23 Geoffrey Garen Reviewed by Sam Weinig. Bit off a tiny bit more of standardizing opcode behavior to help with result caching -- including removing my old enemy, op_resolve_function, because it was non-standard, and removing it felt better than helping it limp along. SunSpider reports no change, v8 maybe a tiny speedup. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dump): * bytecode/Opcode.h: * bytecompiler/BytecodeGenerator.cpp: * bytecompiler/BytecodeGenerator.h: * interpreter/Interpreter.cpp: (JSC::Interpreter::privateExecute): * jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): * jit/JIT.h: * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_get_scoped_var): (JSC::JIT::emit_op_put_scoped_var): (JSC::JIT::emit_op_to_primitive): (JSC::JIT::emitSlow_op_to_primitive): * jit/JITStubs.cpp: * jit/JITStubs.h: * parser/Nodes.cpp: (JSC::FunctionCallResolveNode::emitBytecode): 2009-06-23 Geoffrey Garen Reviewed by Sam Weinig. Bit off a tiny bit of standardizing opcode behavior to help with result caching. 0.6% SunSpider speedup. 0.3% v8 speedup. * jit/JITInlineMethods.h: (JSC::JIT::emitLoad): Accomodate a base register that overlaps with payload by loading tag before payload, to avoid stomping base/payload. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_mov): Abide by the standard "tag in regT1, payload in regT0" semantics. (JSC::JIT::emit_op_get_global_var): (JSC::JIT::emit_op_put_global_var): Ditto. Also, removed some irrelevent loads while I was at it. The global object's "d" pointer never changes after construction. 2009-06-23 Gavin Barraclough Reviewed by Sam Weinig. Remove 'arguments' field from Register union (again). This time do so without breaking tests (radical, I know). * interpreter/CallFrame.h: (JSC::ExecState::optionalCalleeArguments): (JSC::ExecState::setArgumentCount): (JSC::ExecState::init): * interpreter/Interpreter.cpp: (JSC::Interpreter::dumpRegisters): (JSC::Interpreter::unwindCallFrame): (JSC::Interpreter::privateExecute): (JSC::Interpreter::retrieveArguments): * interpreter/Register.h: (JSC::Register::withInt): (JSC::Register::): (JSC::Register::Register): (JSC::Register::i): * jit/JITStubs.cpp: (JSC::JITStubs::cti_op_tear_off_arguments): * runtime/Arguments.h: (JSC::JSActivation::copyRegisters): (JSC::Register::arguments): * runtime/JSActivation.cpp: (JSC::JSActivation::argumentsGetter): * runtime/JSActivation.h: 2009-06-23 Geoffrey Garen Reviewed by Sam Weinig. Removed some result register tracking cruft in preparation for a new result tracking mechanism. SunSpider reports no change. * assembler/AbstractMacroAssembler.h: * assembler/X86Assembler.h: (JSC::X86Assembler::JmpDst::JmpDst): No need to track jump targets in machine code; we already do this in bytecode. * jit/JIT.cpp: (JSC::JIT::JIT): (JSC::JIT::emitTimeoutCheck): Make sure to save and restore the result registers, so an opcode with a timeout check can still benefit from result register caching. (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompileSlowCases): Removed calls to killLastResultRegister() in preparation for something new. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emit_op_jnlesseq): * jit/JITInlineMethods.h: (JSC::JIT::emitGetFromCallFrameHeaderPtr): (JSC::JIT::emitGetFromCallFrameHeader32): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_jmp): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jneq_ptr): (JSC::JIT::emit_op_jsr): (JSC::JIT::emit_op_sret): (JSC::JIT::emit_op_jmp_scopes): ditto * jit/JITStubCall.h: (JSC::JITStubCall::JITStubCall): (JSC::JITStubCall::getArgument): added a mechanism for reloading an argument you passed to a JIT stub, for use in emitTimeoutCheck. 2009-06-23 Sam Weinig Reviewed by Geoffrey Garen. Remove now-useless inplace variants of binary ops. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_bitand): (JSC::JIT::emit_op_bitor): (JSC::JIT::emit_op_bitxor): (JSC::JIT::emit_op_add): (JSC::JIT::emit_op_sub): (JSC::JIT::emit_op_mul): 2009-06-23 Sam Weinig Reviewed by Geoffrey Garen. Move off memory operands to aid in re-enabling result caching. - No regression measured. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_negate): (JSC::JIT::emit_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emit_op_lshift): (JSC::JIT::emit_op_rshift): (JSC::JIT::emit_op_bitand): (JSC::JIT::emitBitAnd32Constant): (JSC::JIT::emitBitAnd32InPlace): (JSC::JIT::emit_op_bitor): (JSC::JIT::emitBitOr32Constant): (JSC::JIT::emitBitOr32InPlace): (JSC::JIT::emit_op_bitxor): (JSC::JIT::emitBitXor32Constant): (JSC::JIT::emitBitXor32InPlace): (JSC::JIT::emit_op_bitnot): (JSC::JIT::emit_op_post_inc): (JSC::JIT::emit_op_post_dec): (JSC::JIT::emit_op_pre_inc): (JSC::JIT::emitSlow_op_pre_inc): (JSC::JIT::emit_op_pre_dec): (JSC::JIT::emitSlow_op_pre_dec): (JSC::JIT::emit_op_add): (JSC::JIT::emitAdd32Constant): (JSC::JIT::emitAdd32InPlace): (JSC::JIT::emitSlow_op_add): (JSC::JIT::emitSlowAdd32Constant): (JSC::JIT::emit_op_sub): (JSC::JIT::emitSlow_op_sub): (JSC::JIT::emitSub32ConstantLeft): (JSC::JIT::emitSub32ConstantRight): (JSC::JIT::emitSub32InPlaceLeft): (JSC::JIT::emitSub32InPlaceRight): (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_mul): (JSC::JIT::emitMul32InPlace): (JSC::JIT::emit_op_div): (JSC::JIT::emit_op_mod): * jit/JITCall.cpp: (JSC::JIT::compileOpCallVarargs): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_to_primitive): (JSC::JIT::emit_op_not): (JSC::JIT::emit_op_jneq_ptr): (JSC::JIT::emit_op_eq): (JSC::JIT::emit_op_neq): (JSC::JIT::emit_op_to_jsnumber): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_put_by_val): 2009-06-23 Geoffrey Garen Reviewed by Sam Weinig. Fixed some missing and/or misplaced labels in bytecode generation, so we don't have to work around them in JIT code generation. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitJumpSubroutine): * parser/Nodes.cpp: (JSC::TryNode::emitBytecode): 2009-06-22 Geoffrey Garen Reviewed by Sam Weinig. For member function calls, emit "this" directly into the "this" slot for the function call, instead of moving it there later. This reduces time spent in op_mov during certain calls, like "a.b.c()". 1%-2% speedup on v8, mostly richards and delta-blue. * parser/Nodes.cpp: (JSC::FunctionCallDotNode::emitBytecode): 2009-06-22 Gavin Barraclough Reviewed by Sam Weinig. Remove 'arguments' field from Register union. Having JSCell derived types in the union is dangerous since it opens the possibility for the field to be written as a raw pointer but then read as a JSValue. This will lead to statle data being read for the tag, which may be dangerous. Having removed Arguments* types form Register, all arguments objects must always explicitly be stored in the register file as JSValues. * interpreter/CallFrame.h: (JSC::ExecState::optionalCalleeArguments): * interpreter/Interpreter.cpp: (JSC::Interpreter::unwindCallFrame): (JSC::Interpreter::privateExecute): (JSC::Interpreter::retrieveArguments): * interpreter/Register.h: (JSC::Register::): * jit/JITStubs.cpp: (JSC::JITStubs::cti_op_tear_off_arguments): * runtime/Arguments.h: (JSC::JSActivation::copyRegisters): * runtime/JSActivation.cpp: (JSC::JSActivation::argumentsGetter): * runtime/JSActivation.h: 2009-06-03 Sam Weinig Reviewed by Geoffrey Garen. Add back known this value optimization by abstracting slow case if not JSCell jumps. * jit/JIT.h: * jit/JITCall.cpp: (JSC::JIT::compileOpCallVarargs): (JSC::JIT::compileOpCallVarargsSlowCase): (JSC::JIT::compileOpCall): (JSC::JIT::compileOpCallSlowCase): * jit/JITInlineMethods.h: (JSC::JIT::emitJumpSlowCaseIfNotJSCell): (JSC::JIT::linkSlowCaseIfNotJSCell): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitSlow_op_put_by_val): (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): 2009-06-01 Geoffrey Garen Reviewed by Sam Weinig. Fixed some of the regression in crypto-aes.js. (8.5% speedup in crypto-aes.js.) SunSpider reports no change overall. Division was producing double results, which took the slow path through array access code. Strangely, all my attempts at versions of this patch that modified array access code to accept ints encoded as doubles along the fast or slow paths were regressions. So I did this instead. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_div): When dividing an int by an int, go ahead and try to turn the result into an int. Don't just do int division, though, because testing shows it to be slower than SSE double division, and the corner cases are pretty complicated / lengthy on top of that. Also, don't try to canonicalize division of known tiny numerators into ints, since that's a waste of time. 2009-05-26 Geoffrey Garen Reviewed by Oliver Hunt. Fixed a regression caused by my recent fix for NaN. * jit/JITArithmetic.cpp: (JSC::JIT::emitBinaryDoubleOp): Actually do the comparison in reverse order, like the ChangeLog said we would, bokay? 2009-05-26 Geoffrey Garen Reviewed by Sam Weinig and Oliver Hunt. Fixed two edge cases in %: - Don't do -2147483648 % x as a fast case, since you might do -2147483648 % -1, which will signal a hardware exception due to overflow. - In the case of a zero remainder, be sure to store negative zero if the dividend was zero. SunSpider reports no change. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_mod): (JSC::JIT::emitSlow_op_mod): 2009-05-25 Geoffrey Garen Reviewed by Maciej Stachowiak. Fixed a regression when comparing to NaN. * jit/JITArithmetic.cpp: (JSC::JIT::emitBinaryDoubleOp): For op_jnless and op_jnless_eq, do the comparison in reverse order, and jump if the result is below or below-or-equal. This ensures that we do jump in the case of NaN. 2009-05-25 Geoffrey Garen Reviewed by Oliver Hunt. SunSpider says no change. Fixed regressions in fast/js/var-declarations-shadowing.html and fast/js/equality.html, caused by recent == and != optimizations. * jit/JITStubs.cpp: (JSC::JITStubs::cti_op_eq): Don't treat "compare to string" as always numeric or string comparison. If the second operand is an object, you need to ToPrimitive it, and start all over again. Also, I wrote out each of the possible cases explicitly, to cut down on redundant branching. 2009-05-25 Sam Weinig Reviewed by Mark Rowe. Fix bug in fast/js/constant-folding.html where we were not negating -0 properly. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_negate): 2009-05-23 Geoffrey Garen Reviewed by Oliver Hunt. Refactored new slow case codegen for == and !=. SunSpider reports no change, maybe a tiny speedup. * jit/JITOpcodes.cpp: (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emitSlow_op_neq): Made a vptr comparison a *Ptr operation, instead of *32, to make it portable to 64bit. Reorganized the string and generic cases to make their control flow a little clearer. 2009-05-23 Geoffrey Garen Reviewed by Maciej Stachowiak. Optimized == and != for our new value representation -- especially for strings. 14% speedup on date-format-tofte. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_eq): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emit_op_neq): (JSC::JIT::emitSlow_op_neq): * jit/JITStubCall.h: (JSC::JITStubCall::JITStubCall): * jit/JITStubs.cpp: (JSC::JITStubs::cti_op_eq): (JSC::JITStubs::cti_op_eq_strings): (JSC::JITStubs::cti_op_call_eval): * jit/JITStubs.h: (JSC::): * runtime/JSValue.h: 2009-05-22 Sam Weinig Reviewed by Gavin Barraclough. Fix non-SSE enabled builds. * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_add): Don't early return here, we still need to call the JIT stub. (JSC::JIT::emitSlow_op_sub): Ditto. 2009-05-22 Geoffrey Garen Reviewed by Sam Weinig. Here's a thought: let's not take a jit stub call just to multiply by 1, bokay? imul doesn't set the zero flag, so to test for a zero result, we need an explicit instruction. (Luckily, it does set the overflow flag, so we can still use that.) * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): (JSC::JIT::emitMul32InPlace): 2009-05-22 Sam Weinig Reviewed by Geoffrey "Premature Commit" Garen. Add back constant integer cases for op_add. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_add): (JSC::JIT::emitAdd32Constant): (JSC::JIT::emitSlow_op_add): (JSC::JIT::emitSlowAdd32Constant): * jit/JITInlineMethods.h: (JSC::JIT::getConstantOperandImmediateDouble): (JSC::JIT::isOperandConstantImmediateDouble): 2009-05-22 Geoffrey Garen Reviewed by Sam Weinig. Added fast double cases for op_jnless and op_jnlesseq. * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::JumpList::jumps): New accesor, used by addSlowCase. * assembler/X86Assembler.h: (JSC::X86Assembler::ucomisd_rm): New method for comparing register to memory. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emitSlow_op_jnlesseq): (JSC::JIT::emit_op_add): (JSC::JIT::emit_op_sub): (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_mul): (JSC::JIT::emit_op_div): Modified emitBinaryDoubleOp to accept comparison/jump operations in addition to operations with explicit result registers. * jit/JITInlineMethods.h: (JSC::JIT::addSlowCase): Added an "addSlowCase" for JumpLists, so clients can track multiple jumps to the same slow case condition together. 2009-05-21 Sam Weinig Reviewed by Gavin Barraclough. Implement op_negate inline fast cases. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::neg32): * assembler/X86Assembler.h: (JSC::X86Assembler::): (JSC::X86Assembler::negl_m): (JSC::X86Assembler::xorpd_rr): * jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompileSlowCases): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_negate): (JSC::JIT::emitSlow_op_negate): 2009-05-20 Sam Weinig Reviewed by Gavin Barraclough. Update the patchOffsetGetByIdSlowCaseCall constant for the case that OPCODE_SAMPLING is enabled. * jit/JIT.h: 2009-05-20 Geoffrey Garen Reviewed by Sam Weinig. Added support for inline subtraction of doubles. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_sub): (JSC::JIT::emitSlow_op_sub): (JSC::JIT::emitSlowSub32InPlaceLeft): (JSC::JIT::emitBinaryDoubleOp): 2009-05-20 Sam Weinig Reviewed by Geoffrey Garen. Added support for inline division. * assembler/X86Assembler.h: (JSC::X86Assembler::): (JSC::X86Assembler::divsd_rr): (JSC::X86Assembler::divsd_mr): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dump): * bytecode/Opcode.h: * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitBinaryOp): * interpreter/Interpreter.cpp: (JSC::Interpreter::privateExecute): * jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompileSlowCases): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_div): (JSC::JIT::emitSlow_op_div): 2009-05-20 Geoffrey Garen Reviewed by Sam Weinig. Added support for inline addition of doubles. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_add): (JSC::JIT::emitSlow_op_add): (JSC::JIT::emitSlowAdd32InPlace): (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): 2009-05-20 Geoffrey Garen Reviewed by Sam Weinig. Factored inline double operations into a helper function, so that we can reuse this code for other math operations. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emitBinaryDoubleOp): (JSC::JIT::emit_op_mul): * jit/JITCall.cpp: (JSC::JIT::compileOpCallInitializeCallFrame): 2009-05-20 Geoffrey Garen Reviewed by Sam Weinig. Added support for inline multiplication of doubles. * assembler/X86Assembler.h: (JSC::X86Assembler::cvtsi2sd_mr): New function, useful for loading an int32 into a double register. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): Filled out these cases for double arithmetic. * jit/JIT.h: * jit/JITInlineMethods.h: (JSC::JIT::addressFor): New function, useful for addressing a JSValue's full 64bits as a double. 2009-05-19 Sam Weinig Reviewed by Geoffrey Garen. Implement and enable optimized calls. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): Add ENABLE(JIT_OPTIMIZE_CALL) guards around the the optimize call only trampolines (virtualCallPreLink and virtualCallLink). Update the trampolines to account for the new JSValue representation. (JSC::JIT::unlinkCall): Use NULL instead of JSValue noValue. * jit/JITCall.cpp: (JSC::JIT::compileOpCall): Update to account for the new JSValue representation (JSC::JIT::compileOpCallSlowCase): Ditto. * jit/JITStubs.h: Remove incorrect !ENABLE(JIT_OPTIMIZE_CALL) guard. * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_CALL. 2009-05-19 Sam Weinig Reviewed by Geoffrey Garen. Implement and enable optimized property access. * assembler/AbstractMacroAssembler.h: Fix comment. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): Remove array length trampoline and implement the string length trampoline. * jit/JIT.h: Add new constants for patch offsets. * jit/JITInlineMethods.h: Remove FIELD_OFFSET which is now in StdLibExtras.h. * jit/JITPropertyAccess.cpp: (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::compilePutDirectOffset): (JSC::JIT::compileGetDirectOffset): (JSC::JIT::privateCompilePutByIdTransition): (JSC::JIT::patchGetByIdSelf): (JSC::JIT::patchPutByIdReplace): (JSC::JIT::privateCompilePatchGetArrayLength): (JSC::JIT::privateCompileGetByIdProto): (JSC::JIT::privateCompileGetByIdSelfList): (JSC::JIT::privateCompileGetByIdProtoList): (JSC::JIT::privateCompileGetByIdChainList): (JSC::JIT::privateCompileGetByIdChain): * jit/JITStubCall.h: (JSC::JITStubCall::addArgument): Add version of addArgument that takes two registers for the tag and payload. * jit/JITStubs.cpp: (JSC::JITStubs::JITStubs): Remove array length trampoline pointer. (JSC::JITStubs::cti_op_get_by_id_self_fail): * jit/JITStubs.h: * runtime/JSObject.h: (JSC::JSObject::JSObject): Move m_inheritorID below the property storage to align it to a 16 byte boundary. * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS * wtf/StdLibExtras.h: Move FIELD_OFFSET here. 2009-05-17 Sam Weinig Reviewed by Geoffrey Garen. Remove unneeded ExecState parameter from the number JSValue constructors. * runtime/JSValue.h: (JSC::jsNumber): (JSC::jsNaN): (JSC::JSValue::JSValue): 2009-05-15 Sam Weinig Reviewed by Geoffrey Garen. Implemented fast path for op_put_by_val when putting to arrays. * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitSlow_op_put_by_val): 2009-05-15 Geoffrey Garen (Mostly by Sam) Reviewed by Sam Weinig. Implemented fast path for op_get_by_val when accessing array. * jit/JIT.cpp: * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): 2009-05-14 Geoffrey Garen Reviewed by Sam Weinig. Fixed a failure in fast/js/math-transforms.html caused by failing to preserve -0 in multiplication. * assembler/X86Assembler.h: (JSC::X86Assembler::jz): * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): (JSC::JIT::emitMul32Constant): (JSC::JIT::emitMul32InPlace): Check both for overflow and for zero when doing multiplication. Use a slow case to get these right. 2009-05-14 Geoffrey Garen Reviewed by Sam Weinig. Fixed a bug in the varargs calling convention. * jit/JITCall.cpp: (JSC::JIT::compileOpCallVarargs): Move the argument count into regT1, since that's where ctiVirtualCall expects it to be. 2009-05-14 Geoffrey Garen Reviewed by Sam Weinig. Fixed a small bug in instanceof's looping code. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): NULL means the object has no prototype, so only loop when *not* equal to NULL. 2009-05-14 Geoffrey Garen Reviewed by Sam Weinig. Fixed a small bug in instanceof's result writing code. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): Make sure to fill out the payload bits in all cases. 2009-05-14 Sam Weinig Reviewed by Geoffrey Garen. Removed an invalid assertion in cti_op_urshift which depended on a fast path for op_urshift which has never existed. * jit/JITStubs.cpp: (JSC::JITStubs::cti_op_urshift): 2009-05-14 Geoffrey Garen Reviewed by Sam Weinig. Fixed loop_if_true, which had the same reversed test that jtrue had. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_true): 2009-05-14 Sam Weinig Reviewed by Geoffrey Garen. In op_neq, we apparently want to check that one value does *not* equal another. Go figure. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_neq): 2009-05-14 Sam Weinig Reviewed by Geoffrey Garen. The slow case of op_mod should call op_mod's jit stub, not op_mul. That would be dumb. * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_mod): 2009-05-14 Geoffrey Garen Reviewed by Sam Weinig. Fixed problems when using 'arguments' due to a half-initialized register. * interpreter/CallFrame.h: (JSC::ExecState::setCalleeArguments): (JSC::ExecState::init): Require a full JSValue when setting up the 'arguments' virtual register, since this register is accessible from JIT code and bytecode, and needs to be a true JSValue. * interpreter/CallFrameClosure.h: (JSC::CallFrameClosure::resetCallFrame): ditto * interpreter/Interpreter.cpp: (JSC::Interpreter::privateExecute): ditto * interpreter/Register.h: Removed the constructor that allowed assignment of a JSArguments* to a register. That is not safe. See above. * jit/JITStubs.cpp: (JSC::JITStubs::cti_op_create_arguments): (JSC::JITStubs::cti_op_create_arguments_no_params): ditto 2009-05-14 Sam Weinig Reviewed by Geoffrey Garen. We really want to go to the slow case in op_jfalse and op_jtrue if the value is *not* boolean. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): 2009-05-14 Sam Weinig Reviewed by Geoffrey Garen. Flipped the condition when emitting a an op_loop_if_less or op_loop_if_lesseq if the first operand is a constant. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): 2009-05-14 Sam Weinig Reviewed by Geoffrey Garen. Added missing return in op_jnless and op_jnlesseq. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emit_op_jnlesseq): 2009-05-14 Sam Weinig Reviewed by Geoffrey Garen. Load constants into the the register file as a temporary measure to aid bring up. This allows us to use to treat constants like any other virtual register. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_enter): (JSC::JIT::emit_op_enter_with_activation): 2009-05-14 Geoffrey Garen Reviewed by Sam Weinig. Implemented op_strict_eq. Original patch by Snowy, by way of Sam and Gavin. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::set8): Added set8, since it's slightly faster than set32, and the new value representation usually doesn't need set32. * jit/JIT.cpp: * jit/JIT.h: * jit/JITInlineMethods.h: (JSC::JIT::emitLoadTag): (JSC::JIT::emitLoadPayload): Added helper functions for dealing with constants. Eventually, we should write special cases for all constants, but these are helpful in the short term. * jit/JITOpcodes.cpp: (JSC::JIT::compileOpStrictEq): (JSC::JIT::emitSlow_op_stricteq): (JSC::JIT::emitSlow_op_nstricteq): teh opcodez. * runtime/JSValue.h: (JSC::JSValue::): (JSC::JSValue::isDouble): Added a LowestTag for clarity. 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Fixed some bugs in host function calls. testapi now passes! * jit/JIT.cpp: Changed some registers around to avoid overwriting edx:eax, which is how JSValues are now returned. Also changed the code that passes thisValue to pass the full 64bits of the value. Also added an #error compiler directive to other platform builds, since the JSValue return signature probably won't return in edx:eax on those platforms, and we'll have to investigate a solution. 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Removed parameters from functions that are intended never to use their parameters. * jit/JITPropertyAccess.cpp: (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Ported op_instance_of from TOT. It's basically the same, but some register stuff changed to memory stuff. * jit/JITInlineMethods.h: (JSC::JIT::emitPutJITStubArgFromVirtualRegister): (JSC::JIT::emitStore): Changed to use helper functions. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): Ported from TOT. 2009-05-13 Geoffrey Garen Reviewed by Gavin Barraclough. Added a comment to explain an exception-handling subtelty that we found hard to remember when reviewing my last patch. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_catch): 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Implemented try/catch. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_throw): Updated to use JITStackFrame abstraction. (JSC::JIT::emit_op_catch): Filled out. 2009-05-13 Sam Weinig Reviewed by Geoffrey Garen. Implemented op_loop_if_true, op_jfalse, op_jtrue, op_jeq_null and op_jneq_null * jit/JITOpcodes.cpp: (JSC::JIT::emitSlow_op_instanceof): Moved from below to be next to its fast brother. (JSC::JIT::emit_op_loop_if_true): Similar to the old version in that it tries to do the integer case first and reduce the number of jumps you might need to take. (JSC::JIT::emitSlow_op_loop_if_true): (JSC::JIT::emit_op_jfalse): Very similar to op_loop_if_true, only the inverse and without a timeout check. (JSC::JIT::emitSlow_op_jfalse): (JSC::JIT::emit_op_jtrue): Very similar to op_loop_if_true except without the timeout check. (JSC::JIT::emitSlow_op_jtrue): (JSC::JIT::emit_op_jeq_null): Very similar to the implementation of op_eq, except it takes jumps instead of copying the condition to a dst. (JSC::JIT::emit_op_jneq_null): Ditto but for op_neq. 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Implemented op_call_varargs. * jit/JITCall.cpp: (JSC::JIT::compileOpCallVarargsSetupArgs): (JSC::JIT::compileOpCallVarargs): (JSC::JIT::emit_op_call): (JSC::JIT::emit_op_call_eval): (JSC::JIT::emit_op_load_varargs): (JSC::JIT::emit_op_call_varargs): (JSC::JIT::emit_op_construct): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_jneq_ptr): 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Implemented op_call_eval. * jit/JITCall.cpp: (JSC::JIT::compileOpCallVarargsSetupArgs): (JSC::JIT::compileOpCall): * jit/JITStubCall.h: (JSC::CallEvalJITStub::CallEvalJITStub): 2009-05-13 Sam Weinig Reviewed by Gavin Barraclough. Implemented op_not. (Gavin did most of the work!) * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_not): (JSC::JIT::emitSlow_op_not): 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Implemented op_global_resolve. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): Added back accidentally removed early returns. (JSC::JIT::emit_op_resolve_global): * jit/JITStubs.cpp: (JSC::JITStubs::cti_op_resolve_global): Pretty similar to the old code, but we need two reads and a TimesEight step in order to account for the 64bit value size. * jit/JITStubs.h: (JSC::): Slightly tweaked this code to specialize for a JSGlobalObject*, to avoid having to pass an irrelevant tag pointer to the stub. 2009-05-13 Sam Weinig Reviewed by Geoffrey Garen. Implemented op_to_jsnumber. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_to_jsnumber): (JSC::JIT::emitSlow_op_to_jsnumber): 2009-05-13 Sam Weinig Reviewed by Geoffrey Garen. Implemented op_convert_this. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_convert_this): (JSC::JIT::emitSlow_op_convert_this): 2009-05-13 Geoffrey Garen Reviewed by Sam Weinig. Got basic JS function and constructor calls working. * jit/JIT.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): * jit/JIT.h: * jit/JITCall.cpp: (JSC::JIT::compileOpCallSetupArgs): (JSC::JIT::compileOpCallVarargsSetupArgs): (JSC::JIT::compileOpConstructSetupArgs): (JSC::JIT::emit_op_ret): (JSC::JIT::emit_op_construct_verify): (JSC::JIT::emitSlow_op_construct_verify): (JSC::JIT::emitSlow_op_call): (JSC::JIT::emitSlow_op_call_eval): (JSC::JIT::emitSlow_op_call_varargs): (JSC::JIT::emitSlow_op_construct): (JSC::JIT::compileOpCall): Filled out these cases, with call_eval #if'd out. * jit/JITInlineMethods.h: (JSC::JIT::emitPutJITStubArgFromVirtualRegister): (JSC::JIT::emitLoad): Restored some legacy "*CTIArg*" functions, since I wanted to avoid the complexity of revamping the API here while trying to bring it up. Eventually, we should re-remove all of these functions. (JSC::JIT::recordJumpTarget): Removed unnecessary macro cruft. You will not silence me, Sam Weinig! The world will know that you are a crufty, crufty, crufty programmer!!! * jit/JITOpcodes.cpp: * jit/JITStubs.cpp: (JSC::): * jit/JITStubs.h: Changed up some offsets in the JITStackFrame class, since and off-by-one error was causing stack misalignment. 2009-05-13 Sam Weinig Reviewed by Geoffrey Garen. Implement op_eq_null and op_neq_null. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::set8): (JSC::MacroAssemblerX86Common::setTest8): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_stricteq): (JSC::JIT::emitSlow_op_stricteq): (JSC::JIT::emit_op_nstricteq): (JSC::JIT::emitSlow_op_nstricteq): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): * jsc.cpp: 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Implement op_new_error. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_new_error): * jit/JITStubCall.h: (JSC::JITStubCall::addArgument): Add a version of addArgument that takes a constant JSValue. 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Remove now unused emitGetVariableObjectRegister and emitPutVariableObjectRegister. * jit/JIT.cpp: * jit/JIT.h: 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Implement op_to_primitive and op_next_pname. * jit/JITOpcodes.cpp: (JSC::JIT::emitSlow_op_construct_verify): (JSC::JIT::emit_op_to_primitive): (JSC::JIT::emitSlow_op_to_primitive): (JSC::JIT::emitSlow_op_loop_if_true): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_next_pname): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Add op_get_global_var, op_put_global_var, emit_op_get_scoped_var, emit_op_put_scoped_var and op_unexpected_load. * jit/JIT.h: * jit/JITInlineMethods.h: (JSC::JIT::tagFor): (JSC::JIT::payloadFor): (JSC::JIT::emitLoad): (JSC::JIT::emitStore): (JSC::JIT::emitLoadReturnValue): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_get_global_var): (JSC::JIT::emit_op_put_global_var): (JSC::JIT::emit_op_get_scoped_var): (JSC::JIT::emit_op_put_scoped_var): (JSC::JIT::emit_op_unexpected_load): 2009-05-12 Geoffrey Garen Reviewed by Sam Weinig. Added overflow handling to op_sub. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_sub): (JSC::JIT::emitSlowSub32InPlaceLeft): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Remove a function call by folding op_get_by_id and op_put_by_id into their respective compile functions. * jit/JIT.h: * jit/JITPropertyAccess.cpp: (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): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Make JITStubCall work in 64bit by making the stack index step dependent on the size of void*. * jit/JITStubCall.h: (JSC::JITStubCall::JITStubCall): (JSC::JITStubCall::addArgument): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Implement simple version of property access opcodes which just call a stub functions. * jit/JITOpcodes.cpp: * jit/JITPropertyAccess.cpp: (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emit_op_put_by_index): (JSC::JIT::emit_op_put_getter): (JSC::JIT::emit_op_put_setter): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::compileGetByIdHotPath): (JSC::JIT::compilePutByIdHotPath): * jit/JITStubCall.h: (JSC::JITStubCall::addArgument): * jsc.cpp: 2009-05-12 Geoffrey Garen Reviewed by Sam Weinig. Added work-around for XCode debugging echo problem. * jsc.cpp: (runInteractive): 2009-05-12 Geoffrey Garen Reviewed by Sam Weinig. Added overflow handling to op_add. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_add): (JSC::JIT::emitSlowAdd32InPlace): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Add slow cases for op_jnless or emit_op_jnlesseq. * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emitSlow_op_jnlesseq): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Add implementations for op_jnless, emit_op_jnlesseq, op_loop_if_less and op_loop_if_lesseq. No slow cases for op_jnless or emit_op_jnlesseq yet. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emitSlow_op_jnlesseq): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emitSlow_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): (JSC::JIT::emitSlow_op_loop_if_lesseq): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Turn the RECORD_JUMP_TARGET macro into an inline function. * jit/JIT.h: * jit/JITInlineMethods.h: (JSC::JIT::recordJumpTarget): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_jmp): (JSC::JIT::emit_op_jsr): (JSC::JIT::emit_op_jmp_scopes): 2009-05-12 Sam Weinig Add MacroAssemblerX86Common::set8 to fix the build. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::set8): 2009-05-12 Geoffrey Garen Reviewed by Sam Weinig. Added overflow recovery for pre_inc and pre_dec. Turned some short-circuit code into early returns, as is the WebKit style. * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_post_inc): (JSC::JIT::emitSlow_op_post_inc): (JSC::JIT::emit_op_post_dec): (JSC::JIT::emitSlow_op_post_dec): (JSC::JIT::emitSlow_op_pre_inc): (JSC::JIT::emitSlow_op_pre_dec): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Implement op_jmp, op_loop, op_eq and op_neq. * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_jmp): (JSC::JIT::emit_op_loop): (JSC::JIT::emit_op_eq): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emit_op_neq): (JSC::JIT::emitSlow_op_neq): (JSC::JIT::emit_op_enter): (JSC::JIT::emit_op_enter_with_activation): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Implement the slow cases for arithmetic opcodes. * jit/JITArithmetic.cpp: (JSC::JIT::emitSlow_op_lshift): (JSC::JIT::emitSlow_op_rshift): (JSC::JIT::emitSlow_op_bitand): (JSC::JIT::emitSlow_op_bitor): (JSC::JIT::emitSlow_op_bitxor): (JSC::JIT::emitSlow_op_bitnot): (JSC::JIT::emitSlow_op_sub): (JSC::JIT::emitSlow_op_mul): (JSC::JIT::emitSlow_op_mod): (JSC::JIT::emit_op_mod): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Implement op_bitnot. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::not32): * assembler/X86Assembler.h: (JSC::X86Assembler::notl_m): * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_bitnot): 2009-05-12 Sam Weinig Reviewed by Geoffrey Garen. Add arithmetic opcode implementations from the old nitro-extreme branch. * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_jnless): (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emitSlow_op_jnlesseq): (JSC::JIT::emit_op_lshift): (JSC::JIT::emitSlow_op_lshift): (JSC::JIT::emit_op_rshift): (JSC::JIT::emitSlow_op_rshift): (JSC::JIT::emit_op_bitand): (JSC::JIT::emitBitAnd32Constant): (JSC::JIT::emitBitAnd32InPlace): (JSC::JIT::emit_op_bitor): (JSC::JIT::emitSlow_op_bitor): (JSC::JIT::emitBitOr32Constant): (JSC::JIT::emitBitOr32InPlace): (JSC::JIT::emit_op_bitxor): (JSC::JIT::emitSlow_op_bitxor): (JSC::JIT::emitBitXor32Constant): (JSC::JIT::emitBitXor32InPlace): (JSC::JIT::emit_op_bitnot): (JSC::JIT::emitSlow_op_bitnot): (JSC::JIT::emit_op_post_inc): (JSC::JIT::emitSlow_op_post_inc): (JSC::JIT::emit_op_post_dec): (JSC::JIT::emitSlow_op_post_dec): (JSC::JIT::emit_op_pre_inc): (JSC::JIT::emitSlow_op_pre_inc): (JSC::JIT::emit_op_pre_dec): (JSC::JIT::emitSlow_op_pre_dec): (JSC::JIT::emit_op_add): (JSC::JIT::emitAdd32Constant): (JSC::JIT::emitAdd32InPlace): (JSC::JIT::emitSlow_op_add): (JSC::JIT::emit_op_sub): (JSC::JIT::emitSlow_op_sub): (JSC::JIT::emitSub32ConstantLeft): (JSC::JIT::emitSub32ConstantRight): (JSC::JIT::emitSub32InPlaceLeft): (JSC::JIT::emitSub32InPlaceRight): (JSC::JIT::emit_op_mul): (JSC::JIT::emitSlow_op_mul): (JSC::JIT::emitMul32Constant): (JSC::JIT::emitMul32InPlace): (JSC::JIT::emit_op_mod): (JSC::JIT::emitSlow_op_mod): * jit/JITOpcodes.cpp: 2009-05-12 Geoffrey Garen Removed JIT_OPTIMIZE_ARITHMETIC setting, since it was all about 32bit value representations. Added JSAPIValueWrapper to the repository. * jit/JIT.h: * jit/JITArithmetic.cpp: * runtime/JSAPIValueWrapper.cpp: Added. (JSC::JSAPIValueWrapper::toPrimitive): (JSC::JSAPIValueWrapper::getPrimitiveNumber): (JSC::JSAPIValueWrapper::toBoolean): (JSC::JSAPIValueWrapper::toNumber): (JSC::JSAPIValueWrapper::toString): (JSC::JSAPIValueWrapper::toObject): * runtime/JSAPIValueWrapper.h: Added. (JSC::JSAPIValueWrapper::value): (JSC::JSAPIValueWrapper::isAPIValueWrapper): (JSC::JSAPIValueWrapper::JSAPIValueWrapper): (JSC::jsAPIValueWrapper): * wtf/Platform.h: 2009-05-12 Geoffrey Garen Turned on the JIT and got it building and running the most trivial of programs. All configurable optimizations are turned off, and a few opcodes are ad hoc #if'd out. So far, I've only merged op_mov and op_end, but some stub-reliant opcodes work as-is from TOT. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::~CodeBlock): * bytecode/CodeBlock.h: * jit/JIT.cpp: (JSC::JIT::compileOpStrictEq): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_lshift): (JSC::JIT::emitSlow_op_lshift): (JSC::JIT::emit_op_rshift): (JSC::JIT::emitSlow_op_rshift): (JSC::JIT::emit_op_jnless): (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emit_op_jnlesseq): (JSC::JIT::emitSlow_op_jnlesseq): (JSC::JIT::emit_op_bitand): (JSC::JIT::emitSlow_op_bitand): (JSC::JIT::emit_op_post_inc): (JSC::JIT::emitSlow_op_post_inc): (JSC::JIT::emit_op_post_dec): (JSC::JIT::emitSlow_op_post_dec): (JSC::JIT::emit_op_pre_inc): (JSC::JIT::emitSlow_op_pre_inc): (JSC::JIT::emit_op_pre_dec): (JSC::JIT::emitSlow_op_pre_dec): (JSC::JIT::emit_op_mod): (JSC::JIT::emitSlow_op_mod): (JSC::JIT::emit_op_add): (JSC::JIT::emit_op_mul): (JSC::JIT::emit_op_sub): (JSC::JIT::compileBinaryArithOpSlowCase): (JSC::JIT::emitSlow_op_add): (JSC::JIT::emitSlow_op_mul): * jit/JITCall.cpp: (JSC::JIT::compileOpCallInitializeCallFrame): (JSC::JIT::compileOpConstructSetupArgs): (JSC::JIT::compileOpCallVarargs): (JSC::JIT::compileOpCall): (JSC::JIT::compileOpCallSlowCase): * jit/JITInlineMethods.h: (JSC::JIT::getConstantOperandImmediateInt): (JSC::JIT::isOperandConstantImmediateInt): (JSC::JIT::emitInitRegister): (JSC::JIT::addSlowCase): (JSC::JIT::addJump): (JSC::JIT::emitJumpSlowToHot): (JSC::JIT::tagFor): (JSC::JIT::payloadFor): (JSC::JIT::emitLoad): (JSC::JIT::emitLoadReturnValue): (JSC::JIT::emitStore): (JSC::JIT::emitStoreReturnValue): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_mov): (JSC::JIT::emit_op_end): (JSC::JIT::emit_op_jmp): (JSC::JIT::emit_op_loop): (JSC::JIT::emit_op_loop_if_less): (JSC::JIT::emit_op_loop_if_lesseq): (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_get_global_var): (JSC::JIT::emit_op_put_global_var): (JSC::JIT::emit_op_get_scoped_var): (JSC::JIT::emit_op_put_scoped_var): (JSC::JIT::emit_op_tear_off_activation): (JSC::JIT::emit_op_ret): (JSC::JIT::emit_op_construct_verify): (JSC::JIT::emit_op_to_primitive): (JSC::JIT::emit_op_loop_if_true): (JSC::JIT::emit_op_resolve_global): (JSC::JIT::emit_op_not): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jneq_ptr): (JSC::JIT::emit_op_unexpected_load): (JSC::JIT::emit_op_eq): (JSC::JIT::emit_op_bitnot): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_neq): (JSC::JIT::emit_op_bitxor): (JSC::JIT::emit_op_bitor): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_next_pname): (JSC::JIT::emit_op_push_scope): (JSC::JIT::emit_op_to_jsnumber): (JSC::JIT::emit_op_push_new_scope): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::emit_op_new_error): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emit_op_convert_this): (JSC::JIT::emit_op_profile_will_call): (JSC::JIT::emit_op_profile_did_call): (JSC::JIT::emitSlow_op_construct_verify): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_loop_if_less): (JSC::JIT::emitSlow_op_loop_if_lesseq): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emitSlow_op_not): (JSC::JIT::emitSlow_op_instanceof): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emit_op_put_by_index): (JSC::JIT::emit_op_put_getter): (JSC::JIT::emit_op_put_setter): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::compileGetByIdHotPath): (JSC::JIT::compilePutByIdHotPath): * jit/JITStubCall.h: (JSC::JITStubCall::JITStubCall): (JSC::JITStubCall::addArgument): (JSC::JITStubCall::call): (JSC::JITStubCall::): (JSC::CallEvalJITStub::CallEvalJITStub): * jit/JITStubs.cpp: (JSC::): (JSC::JITStubs::cti_op_add): (JSC::JITStubs::cti_op_pre_inc): (JSC::JITStubs::cti_op_mul): (JSC::JITStubs::cti_op_get_by_val): (JSC::JITStubs::cti_op_get_by_val_string): (JSC::JITStubs::cti_op_get_by_val_byte_array): (JSC::JITStubs::cti_op_sub): (JSC::JITStubs::cti_op_put_by_val): (JSC::JITStubs::cti_op_put_by_val_array): (JSC::JITStubs::cti_op_put_by_val_byte_array): (JSC::JITStubs::cti_op_negate): (JSC::JITStubs::cti_op_div): (JSC::JITStubs::cti_op_pre_dec): (JSC::JITStubs::cti_op_post_inc): (JSC::JITStubs::cti_op_eq): (JSC::JITStubs::cti_op_lshift): (JSC::JITStubs::cti_op_bitand): (JSC::JITStubs::cti_op_rshift): (JSC::JITStubs::cti_op_bitnot): (JSC::JITStubs::cti_op_mod): (JSC::JITStubs::cti_op_neq): (JSC::JITStubs::cti_op_post_dec): (JSC::JITStubs::cti_op_urshift): (JSC::JITStubs::cti_op_bitxor): (JSC::JITStubs::cti_op_bitor): (JSC::JITStubs::cti_op_switch_imm): * jit/JITStubs.h: * runtime/JSArray.cpp: (JSC::JSArray::JSArray): * runtime/JSFunction.cpp: (JSC::JSFunction::~JSFunction): * runtime/JSValue.h: (JSC::JSValue::payload): * wtf/Platform.h: 2009-05-07 Sam Weinig Reviewed by Geoffrey Garen. Add some new MacroAssembler and assembler functions that will be needed shortly. * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::add32): (JSC::MacroAssemblerX86Common::and32): (JSC::MacroAssemblerX86Common::mul32): (JSC::MacroAssemblerX86Common::neg32): (JSC::MacroAssemblerX86Common::or32): (JSC::MacroAssemblerX86Common::sub32): (JSC::MacroAssemblerX86Common::xor32): (JSC::MacroAssemblerX86Common::branchAdd32): (JSC::MacroAssemblerX86Common::branchMul32): (JSC::MacroAssemblerX86Common::branchSub32): * assembler/X86Assembler.h: (JSC::X86Assembler::): (JSC::X86Assembler::addl_rm): (JSC::X86Assembler::andl_mr): (JSC::X86Assembler::andl_rm): (JSC::X86Assembler::andl_im): (JSC::X86Assembler::negl_r): (JSC::X86Assembler::notl_r): (JSC::X86Assembler::orl_rm): (JSC::X86Assembler::orl_im): (JSC::X86Assembler::subl_rm): (JSC::X86Assembler::xorl_mr): (JSC::X86Assembler::xorl_rm): (JSC::X86Assembler::xorl_im): (JSC::X86Assembler::imull_mr): 2009-05-11 Sam Weinig Reviewed by Cameron Zwarich. Remove the NumberHeap. * JavaScriptCore.exp: * runtime/Collector.cpp: (JSC::Heap::Heap): (JSC::Heap::destroy): (JSC::Heap::recordExtraCost): (JSC::Heap::heapAllocate): (JSC::Heap::markConservatively): (JSC::Heap::sweep): (JSC::Heap::collect): (JSC::Heap::objectCount): (JSC::Heap::statistics): (JSC::typeName): (JSC::Heap::isBusy): * runtime/Collector.h: (JSC::Heap::globalData): * runtime/JSCell.h: 2009-05-11 Geoffrey Garen Reviewed by Sam Weinig. Land initial commit of new number representation for 32 bit platforms, with JIT disabled. * API/APICast.h: (toJS): (toRef): * API/JSCallbackObjectFunctions.h: (JSC::::hasInstance): (JSC::::toNumber): (JSC::::toString): * API/tests/testapi.c: (EvilExceptionObject_convertToType): * AllInOneFile.cpp: * JavaScriptCore.exp: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/CodeBlock.cpp: (JSC::valueToSourceString): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitLoad): (JSC::BytecodeGenerator::emitUnexpectedLoad): (JSC::keyForImmediateSwitch): * bytecompiler/BytecodeGenerator.h: * interpreter/Interpreter.cpp: (JSC::Interpreter::dumpRegisters): (JSC::Interpreter::privateExecute): * parser/Nodes.cpp: (JSC::ArrayNode::emitBytecode): (JSC::processClauseList): * runtime/ArgList.h: * runtime/Collector.h: (JSC::sizeof): * runtime/DateMath.cpp: * runtime/ExceptionHelpers.h: * runtime/InitializeThreading.cpp: * runtime/JSArray.cpp: (JSC::JSArray::JSArray): * runtime/JSCell.cpp: * runtime/JSCell.h: (JSC::JSCell::isAPIValueWrapper): (JSC::JSValue::isString): (JSC::JSValue::isGetterSetter): (JSC::JSValue::isObject): (JSC::JSValue::getString): (JSC::JSValue::getObject): (JSC::JSValue::getCallData): (JSC::JSValue::getConstructData): (JSC::JSValue::getUInt32): (JSC::JSValue::marked): (JSC::JSValue::toPrimitive): (JSC::JSValue::getPrimitiveNumber): (JSC::JSValue::toBoolean): (JSC::JSValue::toNumber): (JSC::JSValue::toString): (JSC::JSValue::needsThisConversion): (JSC::JSValue::toThisString): (JSC::JSValue::getJSNumber): (JSC::JSValue::toObject): (JSC::JSValue::toThisObject): * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData): * runtime/JSGlobalData.h: * runtime/JSGlobalObject.h: (JSC::Structure::prototypeForLookup): * runtime/JSGlobalObjectFunctions.cpp: (JSC::globalFuncParseInt): * runtime/JSImmediate.h: * runtime/JSNumberCell.cpp: Removed. * runtime/JSNumberCell.h: Removed. * runtime/JSObject.h: (JSC::JSValue::get): (JSC::JSValue::put): * runtime/JSString.h: (JSC::JSValue::toThisJSString): * runtime/JSValue.cpp: (JSC::JSValue::toInteger): (JSC::JSValue::toIntegerPreserveNaN): (JSC::JSValue::toObjectSlowCase): (JSC::JSValue::toThisObjectSlowCase): (JSC::JSValue::synthesizeObject): (JSC::JSValue::synthesizePrototype): (JSC::JSValue::description): (JSC::nonInlineNaN): * runtime/JSValue.h: (JSC::JSValue::): (JSC::EncodedJSValueHashTraits::emptyValue): (JSC::jsNaN): (JSC::operator==): (JSC::operator!=): (JSC::toInt32): (JSC::toUInt32): (JSC::JSValue::encode): (JSC::JSValue::decode): (JSC::JSValue::JSValue): (JSC::JSValue::operator bool): (JSC::JSValue::operator==): (JSC::JSValue::operator!=): (JSC::JSValue::isUndefined): (JSC::JSValue::isNull): (JSC::JSValue::isUndefinedOrNull): (JSC::JSValue::isCell): (JSC::JSValue::isInt32): (JSC::JSValue::isUInt32): (JSC::JSValue::isDouble): (JSC::JSValue::isTrue): (JSC::JSValue::isFalse): (JSC::JSValue::tag): (JSC::JSValue::asInt32): (JSC::JSValue::asUInt32): (JSC::JSValue::asDouble): (JSC::JSValue::asCell): (JSC::JSValue::isNumber): (JSC::JSValue::isBoolean): (JSC::JSValue::getBoolean): (JSC::JSValue::uncheckedGetNumber): (JSC::JSValue::toJSNumber): (JSC::JSValue::getNumber): (JSC::JSValue::toInt32): (JSC::JSValue::toUInt32): * runtime/Operations.h: (JSC::JSValue::equal): (JSC::JSValue::equalSlowCaseInline): (JSC::JSValue::strictEqual): (JSC::JSValue::strictEqualSlowCaseInline): (JSC::jsLess): (JSC::jsLessEq): (JSC::jsAdd): * runtime/PropertySlot.h: * runtime/StringPrototype.cpp: (JSC::stringProtoFuncCharAt): (JSC::stringProtoFuncCharCodeAt): (JSC::stringProtoFuncIndexOf): * wtf/Platform.h: === Start merge of nitro-extreme branch 2009-07-30 === 2009-07-29 Laszlo Gombos Reviewed by George Staikos. Resolve class/struct mixup in forward declarations https://bugs.webkit.org/show_bug.cgi?id=27708 * API/JSClassRef.h: * bytecode/SamplingTool.h: * interpreter/Interpreter.h: * jit/JIT.h: * profiler/ProfileGenerator.h: * profiler/Profiler.h: * runtime/ClassInfo.h: * runtime/ExceptionHelpers.h: * runtime/JSByteArray.h: * runtime/JSCell.h: * runtime/JSFunction.h: * runtime/JSGlobalData.h: * runtime/JSObject.h: * runtime/JSString.h: 2009-07-28 Ada Chan Reviewed by Darin Adler. https://bugs.webkit.org/show_bug.cgi?id=27236 - Implement TCMalloc_SystemRelease and TCMalloc_SystemCommit for Windows. - Use a background thread to periodically scavenge memory to release back to the system. * wtf/FastMalloc.cpp: (WTF::TCMalloc_PageHeap::init): (WTF::TCMalloc_PageHeap::runScavengerThread): (WTF::TCMalloc_PageHeap::scavenge): (WTF::TCMalloc_PageHeap::shouldContinueScavenging): (WTF::TCMalloc_PageHeap::New): (WTF::TCMalloc_PageHeap::AllocLarge): (WTF::TCMalloc_PageHeap::Delete): (WTF::TCMalloc_PageHeap::GrowHeap): (WTF::sleep): (WTF::TCMalloc_PageHeap::scavengerThread): * wtf/TCSystemAlloc.cpp: (TCMalloc_SystemRelease): (TCMalloc_SystemCommit): * wtf/TCSystemAlloc.h: 2009-07-28 Xan Lopez Add new files, fixes distcheck. * GNUmakefile.am: 2009-07-28 Csaba Osztrogonac Reviewed by Simon Hausmann. [Qt] Determining whether to use JIT or interpreter moved from JavaScriptCore.pri to Platform.h * JavaScriptCore.pri: * wtf/Platform.h: 2009-07-27 Brian Weinstein Fix of misuse of sort command. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-07-27 Brian Weinstein Build fix for Windows. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-07-27 Gavin Barraclough Rubber stamped by Oliver Hunt. Fix tyop in JIT, renamed preverveReturnAddressAfterCall -> preserveReturnAddressAfterCall. * jit/JIT.cpp: (JSC::JIT::privateCompile): (JSC::JIT::privateCompileCTIMachineTrampolines): * jit/JIT.h: * jit/JITInlineMethods.h: (JSC::JIT::preserveReturnAddressAfterCall): * jit/JITPropertyAccess.cpp: (JSC::JIT::privateCompilePutByIdTransition): 2009-07-27 Alexey Proskuryakov Gtk build fix. * runtime/JSLock.cpp: (JSC::JSLock::JSLock): Fix "no threading" case. 2009-07-27 Alexey Proskuryakov Release build fix. * runtime/JSLock.h: (JSC::JSLock::~JSLock): 2009-07-27 Alexey Proskuryakov Reviewed by Darin Adler. https://bugs.webkit.org/show_bug.cgi?id=27735 Give a helpful name to JSLock constructor argument * API/JSBase.cpp: (JSGarbageCollect): * API/JSContextRef.cpp: * API/JSObjectRef.cpp: (JSPropertyNameArrayRelease): (JSPropertyNameAccumulatorAddName): * JavaScriptCore.exp: * jsc.cpp: (functionGC): (cleanupGlobalData): (jscmain): * runtime/Collector.cpp: (JSC::Heap::destroy): * runtime/JSLock.cpp: (JSC::JSLock::JSLock): (JSC::JSLock::lock): (JSC::JSLock::unlock): (JSC::JSLock::DropAllLocks::DropAllLocks): (JSC::JSLock::DropAllLocks::~DropAllLocks): * runtime/JSLock.h: (JSC::): (JSC::JSLock::JSLock): (JSC::JSLock::~JSLock): 2009-07-25 Zoltan Horvath Reviewed by Eric Seidel. Allow custom memory allocation control for OpaqueJSPropertyNameArray struct https://bugs.webkit.org/show_bug.cgi?id=27342 Inherits OpaqueJSPropertyNameArray struct from FastAllocBase because it has been instantiated by 'new' JavaScriptCore/API/JSObjectRef.cpp:473. * API/JSObjectRef.cpp: 2009-07-24 Ada Chan In preparation for https://bugs.webkit.org/show_bug.cgi?id=27236: Remove TCMALLOC_TRACK_DECOMMITED_SPANS. We'll always track decommitted spans. We have tested this and show it has little impact on performance. Reviewed by Mark Rowe. * wtf/FastMalloc.cpp: (WTF::TCMalloc_PageHeap::New): (WTF::TCMalloc_PageHeap::AllocLarge): (WTF::propagateDecommittedState): (WTF::mergeDecommittedStates): (WTF::TCMalloc_PageHeap::Delete): (WTF::TCMalloc_PageHeap::IncrementalScavenge): 2009-07-24 Csaba Osztrogonac Reviewed by Darin Adler and Adam Barth. Build fix for x86 platforms. https://bugs.webkit.org/show_bug.cgi?id=27602 * jit/JIT.cpp: 2009-07-23 Kevin Ollivier wx build fix, adding missing header. * jit/JIT.cpp: 2009-07-22 Yong Li Reviewed by George Staikos. Add wince specific memory files into wtf/wince https://bugs.webkit.org/show_bug.cgi?id=27550 * wtf/wince/FastMallocWince.h: Added. * wtf/wince/MemoryManager.cpp: Added. * wtf/wince/MemoryManager.h: Added. 2009-07-23 Norbert Leser Reviewed by Simon Hausmann. Fix for missing mmap features in Symbian https://bugs.webkit.org/show_bug.cgi?id=24540 Fix, conditionally for PLATFORM(SYMBIAN), as an alternative to missing support for the MAP_ANON property flag in mmap. It utilizes Symbian specific memory allocation features. * runtime/Collector.cpp 2009-07-22 Gavin Barraclough Reviewed by Sam Weinig. With ENABLE(ASSEMBLER_WX_EXCLUSIVE), only change permissions once per repatch event. ( https://bugs.webkit.org/show_bug.cgi?id=27564 ) Currently we change permissions forwards and backwards for each instruction modified, instead we should only change permissions once per complete repatching event. 2.5% progression running with ENABLE(ASSEMBLER_WX_EXCLUSIVE) enabled, which recoups 1/3 of the penalty of running with this mode enabled. * assembler/ARMAssembler.cpp: (JSC::ARMAssembler::linkBranch): - Replace usage of MakeWritable with cacheFlush. * assembler/ARMAssembler.h: (JSC::ARMAssembler::patchPointerInternal): (JSC::ARMAssembler::repatchLoadPtrToLEA): - Replace usage of MakeWritable with cacheFlush. * assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::relinkJump): (JSC::ARMv7Assembler::relinkCall): (JSC::ARMv7Assembler::repatchInt32): (JSC::ARMv7Assembler::repatchPointer): (JSC::ARMv7Assembler::repatchLoadPtrToLEA): (JSC::ARMv7Assembler::setInt32): - Replace usage of MakeWritable with cacheFlush. * assembler/LinkBuffer.h: (JSC::LinkBuffer::performFinalization): - Make explicit call to cacheFlush. * assembler/MacroAssemblerCodeRef.h: (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): - Make size always available. * assembler/RepatchBuffer.h: (JSC::RepatchBuffer::RepatchBuffer): (JSC::RepatchBuffer::~RepatchBuffer): - Add calls to MakeWritable & makeExecutable. * assembler/X86Assembler.h: (JSC::X86Assembler::relinkJump): (JSC::X86Assembler::relinkCall): (JSC::X86Assembler::repatchInt32): (JSC::X86Assembler::repatchPointer): (JSC::X86Assembler::repatchLoadPtrToLEA): - Remove usage of MakeWritable. * bytecode/CodeBlock.h: (JSC::CodeBlock::getJITCode): - Provide access to CodeBlock's JITCode. * jit/ExecutableAllocator.h: (JSC::ExecutableAllocator::makeExecutable): (JSC::ExecutableAllocator::cacheFlush): - Remove MakeWritable, make cacheFlush public. * jit/JIT.cpp: (JSC::ctiPatchNearCallByReturnAddress): (JSC::ctiPatchCallByReturnAddress): (JSC::JIT::privateCompile): (JSC::JIT::unlinkCall): (JSC::JIT::linkCall): - Add CodeBlock argument to RepatchBuffer. * jit/JIT.h: - Pass CodeBlock argument for use by RepatchBuffer. * jit/JITCode.h: (JSC::JITCode::start): (JSC::JITCode::size): - Provide access to code start & size. * 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): - Add CodeBlock argument to RepatchBuffer. * jit/JITStubs.cpp: (JSC::JITThunks::tryCachePutByID): (JSC::JITThunks::tryCacheGetByID): (JSC::JITStubs::DEFINE_STUB_FUNCTION): - Pass CodeBlock argument for use by RepatchBuffer. 2009-07-21 Zoltan Herczeg Reviewed by Gavin Barraclough. Cache not only the structure of the method, but the structure of its prototype as well. https://bugs.webkit.org/show_bug.cgi?id=27077 * bytecode/CodeBlock.cpp: (JSC::CodeBlock::~CodeBlock): * bytecode/CodeBlock.h: (JSC::MethodCallLinkInfo::MethodCallLinkInfo): * jit/JITPropertyAccess.cpp: (JSC::JIT::patchMethodCallProto): 2009-07-21 Gavin Barraclough Reviewed by Sam Weinig. Move call linking / repatching down from AbstractMacroAssembler into MacroAssemblerARCH classes. ( https://bugs.webkit.org/show_bug.cgi?id=27527 ) This allows the implementation to be defined per architecture. Specifically this addresses the fact that x86-64 MacroAssembler implements far calls as a load to register, followed by a call to register. Patching the call actually requires the pointer load to be patched, rather than the call to be patched. This is implementation detail specific to MacroAssemblerX86_64, and as such is best handled there. * assembler/AbstractMacroAssembler.h: * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::linkCall): (JSC::MacroAssemblerARM::repatchCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::linkCall): (JSC::MacroAssemblerARMv7::repatchCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::linkCall): (JSC::MacroAssemblerX86::repatchCall): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::linkCall): (JSC::MacroAssemblerX86_64::repatchCall): 2009-07-21 Adam Treat Reviewed by George Staikos. Every wtf file includes other wtf files with <> style includes except this one. Fix the exception. * wtf/ByteArray.h: 2009-07-21 Gavin Barraclough Reviewed by Oliver Hunt. Move LinkBuffer/RepatchBuffer out of AbstractMacroAssembler. ( https://bugs.webkit.org/show_bug.cgi?id=27485 ) This change is the first step in a process to move code that should be in the architecture-specific MacroAssembler classes up out of Assmbler and AbstractMacroAssembler. * JavaScriptCore.xcodeproj/project.pbxproj: - added new files * assembler/ARMAssembler.h: (JSC::ARMAssembler::linkPointer): - rename patchPointer to bring it in line with the current link/repatch naming scheme * assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::linkCall): (JSC::ARMv7Assembler::linkPointer): (JSC::ARMv7Assembler::relinkCall): (JSC::ARMv7Assembler::repatchInt32): (JSC::ARMv7Assembler::repatchPointer): (JSC::ARMv7Assembler::setInt32): (JSC::ARMv7Assembler::setPointer): - rename patchPointer to bring it in line with the current link/repatch naming scheme * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::linkJump): (JSC::AbstractMacroAssembler::linkCall): (JSC::AbstractMacroAssembler::linkPointer): (JSC::AbstractMacroAssembler::getLinkerAddress): (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset): (JSC::AbstractMacroAssembler::repatchJump): (JSC::AbstractMacroAssembler::repatchCall): (JSC::AbstractMacroAssembler::repatchNearCall): (JSC::AbstractMacroAssembler::repatchInt32): (JSC::AbstractMacroAssembler::repatchPointer): (JSC::AbstractMacroAssembler::repatchLoadPtrToLEA): - remove the LinkBuffer/RepatchBuffer classes, but leave a set of (private, friended) methods to interface to the Assembler * assembler/LinkBuffer.h: Added. (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::~LinkBuffer): (JSC::LinkBuffer::link): (JSC::LinkBuffer::patch): (JSC::LinkBuffer::locationOf): (JSC::LinkBuffer::locationOfNearCall): (JSC::LinkBuffer::returnAddressOffset): (JSC::LinkBuffer::finalizeCode): (JSC::LinkBuffer::finalizeCodeAddendum): (JSC::LinkBuffer::code): (JSC::LinkBuffer::performFinalization): - new file containing the LinkBuffer class, previously a member of AbstractMacroAssembler * assembler/RepatchBuffer.h: Added. (JSC::RepatchBuffer::RepatchBuffer): (JSC::RepatchBuffer::relink): (JSC::RepatchBuffer::repatch): (JSC::RepatchBuffer::repatchLoadPtrToLEA): (JSC::RepatchBuffer::relinkCallerToTrampoline): (JSC::RepatchBuffer::relinkCallerToFunction): (JSC::RepatchBuffer::relinkNearCallerToTrampoline): - new file containing the RepatchBuffer class, previously a member of AbstractMacroAssembler * assembler/X86Assembler.h: (JSC::X86Assembler::linkJump): (JSC::X86Assembler::linkCall): (JSC::X86Assembler::linkPointerForCall): (JSC::X86Assembler::linkPointer): (JSC::X86Assembler::relinkJump): (JSC::X86Assembler::relinkCall): (JSC::X86Assembler::repatchInt32): (JSC::X86Assembler::repatchPointer): (JSC::X86Assembler::setPointer): (JSC::X86Assembler::setInt32): (JSC::X86Assembler::setRel32): - rename patchPointer to bring it in line with the current link/repatch naming scheme * jit/JIT.cpp: (JSC::ctiPatchNearCallByReturnAddress): (JSC::ctiPatchCallByReturnAddress): - include new headers - remove MacroAssembler:: specification from RepatchBuffer usage * jit/JITPropertyAccess.cpp: * yarr/RegexJIT.cpp: - include new headers 2009-07-21 Robert Agoston Reviewed by David Levin. Fixed #undef typo. https://bugs.webkit.org/show_bug.cgi?id=27506 * bytecode/Opcode.h: 2009-07-21 Adam Roben Roll out r46153, r46154, and r46155 These changes were causing build failures and assertion failures on Windows. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: * JavaScriptCore.xcodeproj/project.pbxproj: * runtime/JSArray.cpp: * runtime/StringPrototype.cpp: * runtime/UString.cpp: * runtime/UString.h: * wtf/FastMalloc.cpp: * wtf/FastMalloc.h: * wtf/Platform.h: * wtf/PossiblyNull.h: Removed. 2009-07-21 Roland Steiner Reviewed by David Levin. Add ENABLE_RUBY to list of build options https://bugs.webkit.org/show_bug.cgi?id=27324 * Configurations/FeatureDefines.xcconfig: Added flag ENABLE_RUBY. 2009-07-20 Oliver Hunt Reviewed by NOBODY (Build fix). Build fix attempt #2 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-07-20 Oliver Hunt Reviewed by NOBODY (Build fix). Build fix attempt #1 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2009-07-20 Oliver Hunt Reviewed by Gavin Barraclough. Make it harder to misuse try* allocation routines https://bugs.webkit.org/show_bug.cgi?id=27469 Jump through a few hoops to make it much harder to accidentally miss null-checking of values returned by the try-* allocation routines. * JavaScriptCore.xcodeproj/project.pbxproj: * runtime/JSArray.cpp: (JSC::JSArray::putSlowCase): (JSC::JSArray::increaseVectorLength): * runtime/StringPrototype.cpp: (JSC::stringProtoFuncFontsize): (JSC::stringProtoFuncLink): * runtime/UString.cpp: (JSC::allocChars): (JSC::reallocChars): (JSC::expandCapacity): (JSC::UString::Rep::reserveCapacity): (JSC::UString::expandPreCapacity): (JSC::createRep): (JSC::concatenate): (JSC::UString::spliceSubstringsWithSeparators): (JSC::UString::replaceRange): (JSC::UString::append): (JSC::UString::operator=): * runtime/UString.h: (JSC::UString::Rep::createEmptyBuffer): * wtf/FastMalloc.cpp: (WTF::tryFastZeroedMalloc): (WTF::tryFastMalloc): (WTF::tryFastCalloc): (WTF::tryFastRealloc): (WTF::TCMallocStats::tryFastMalloc): (WTF::TCMallocStats::tryFastCalloc): (WTF::TCMallocStats::tryFastRealloc): * wtf/FastMalloc.h: (WTF::TryMallocReturnValue::TryMallocReturnValue): (WTF::TryMallocReturnValue::~TryMallocReturnValue): (WTF::TryMallocReturnValue::operator Maybe): (WTF::TryMallocReturnValue::getValue): * wtf/PossiblyNull.h: (WTF::PossiblyNull::PossiblyNull): (WTF::PossiblyNull::~PossiblyNull): (WTF::PossiblyNull::getValue): * wtf/Platform.h: 2009-07-20 Gavin Barraclough RS Oliver Hunt. Add ARM assembler files to xcodeproj, for convenience editing. * JavaScriptCore.xcodeproj/project.pbxproj: 2009-07-20 Jessie Berlin Reviewed by David Levin. Fix an incorrect assertion in Vector::remove. https://bugs.webkit.org/show_bug.cgi?id=27477 * wtf/Vector.h: (WTF::::remove): Assert that the position at which to start removing elements + the length (the number of elements to remove) is less than or equal to the size of the entire Vector. 2009-07-20 Peter Kasting Reviewed by Mark Rowe. https://bugs.webkit.org/show_bug.cgi?id=27468 Back out r46060, which caused problems for some Apple developers. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: 2009-07-20 Zoltan Horvath Reviewed by Oliver Hunt. Allow custom memory allocation control in NewThreadContext https://bugs.webkit.org/show_bug.cgi?id=27338 Inherits NewThreadContext struct from FastAllocBase because it has been instantiated by 'new' JavaScriptCore/wtf/Threading.cpp:76. * wtf/Threading.cpp: 2009-07-20 Zoltan Horvath Reviewed by Oliver Hunt. Allow custom memory allocation control in JavaScriptCore's JSClassRef.h https://bugs.webkit.org/show_bug.cgi?id=27340 Inherit StaticValueEntry and StaticFunctionEntry struct from FastAllocBase because these have been instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:153 and in JavaScriptCore/API/JSClassRef.cpp:166. * API/JSClassRef.h: 2009-07-20 Zoltan Horvath Reviewed by Darin Adler. Allow custom memory allocation control in JavaScriptCore's RegexPattern.h https://bugs.webkit.org/show_bug.cgi?id=27343 Inherits RegexPattern.h's structs (which have been instantiated by operator new) from FastAllocBase: CharacterClass (new call: JavaScriptCore/yarr/RegexCompiler.cpp:144) PatternAlternative (new call: JavaScriptCore/yarr/RegexPattern.h:221) PatternDisjunction (new call: JavaScriptCore/yarr/RegexCompiler.cpp:446) * yarr/RegexPattern.h: 2009-07-20 Zoltan Horvath Reviewed by Darin Adler. Allow custom memory allocation control for JavaScriptCore's MatchFrame struct https://bugs.webkit.org/show_bug.cgi?id=27344 Inherits MatchFrame struct from FastAllocBase because it has been instantiated by 'new' JavaScriptCore/pcre/pcre_exec.cpp:359. * pcre/pcre_exec.cpp: 2009-07-20 Laszlo Gombos Reviewed by Holger Freyther. Remove some outdated S60 platform specific code https://bugs.webkit.org/show_bug.cgi?id=27423 * wtf/Platform.h: 2009-07-20 Csaba Osztrogonac Reviewed by Simon Hausmann. Qt build fix with MSVC and MinGW. * jsc.pro: Make sure jsc is a console application, and turn off exceptions and stl support to fix the build. 2009-07-20 Xan Lopez Reviewed by Gustavo Noronha. Do not use C++-style comments in preprocessor directives. GCC does not like this in some configurations, using C-style comments is safer. * wtf/Platform.h: 2009-07-17 Peter Kasting Reviewed by Steve Falkenburg. https://bugs.webkit.org/show_bug.cgi?id=27323 Only add Cygwin to the path when it isn't already there. This avoids causing problems for people who purposefully have non-Cygwin versions of executables like svn in front of the Cygwin ones in their paths. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: 2009-07-17 Gabor Loki Reviewed by Gavin Barraclough. Add YARR support for generic ARM platforms (disabled by default). https://bugs.webkit.org/show_bug.cgi?id=24986 Add generic ARM port for MacroAssembler. It supports the whole MacroAssembler functionality except floating point. The class JmpSrc is extended with a flag which enables to patch the jump destination offset during execution. This feature is required for generic ARM port. Signed off by Zoltan Herczeg Signed off by Gabor Loki * JavaScriptCore.pri: * assembler/ARMAssembler.cpp: Added. (JSC::ARMAssembler::getLdrImmAddress): (JSC::ARMAssembler::linkBranch): (JSC::ARMAssembler::patchConstantPoolLoad): (JSC::ARMAssembler::getOp2): (JSC::ARMAssembler::genInt): (JSC::ARMAssembler::getImm): (JSC::ARMAssembler::moveImm): (JSC::ARMAssembler::dataTransfer32): (JSC::ARMAssembler::baseIndexTransfer32): (JSC::ARMAssembler::executableCopy): * assembler/ARMAssembler.h: Added. (JSC::ARM::): (JSC::ARMAssembler::ARMAssembler): (JSC::ARMAssembler::): (JSC::ARMAssembler::JmpSrc::JmpSrc): (JSC::ARMAssembler::JmpSrc::enableLatePatch): (JSC::ARMAssembler::JmpDst::JmpDst): (JSC::ARMAssembler::JmpDst::isUsed): (JSC::ARMAssembler::JmpDst::used): (JSC::ARMAssembler::emitInst): (JSC::ARMAssembler::and_r): (JSC::ARMAssembler::ands_r): (JSC::ARMAssembler::eor_r): (JSC::ARMAssembler::eors_r): (JSC::ARMAssembler::sub_r): (JSC::ARMAssembler::subs_r): (JSC::ARMAssembler::rsb_r): (JSC::ARMAssembler::rsbs_r): (JSC::ARMAssembler::add_r): (JSC::ARMAssembler::adds_r): (JSC::ARMAssembler::adc_r): (JSC::ARMAssembler::adcs_r): (JSC::ARMAssembler::sbc_r): (JSC::ARMAssembler::sbcs_r): (JSC::ARMAssembler::rsc_r): (JSC::ARMAssembler::rscs_r): (JSC::ARMAssembler::tst_r): (JSC::ARMAssembler::teq_r): (JSC::ARMAssembler::cmp_r): (JSC::ARMAssembler::orr_r): (JSC::ARMAssembler::orrs_r): (JSC::ARMAssembler::mov_r): (JSC::ARMAssembler::movs_r): (JSC::ARMAssembler::bic_r): (JSC::ARMAssembler::bics_r): (JSC::ARMAssembler::mvn_r): (JSC::ARMAssembler::mvns_r): (JSC::ARMAssembler::mul_r): (JSC::ARMAssembler::muls_r): (JSC::ARMAssembler::mull_r): (JSC::ARMAssembler::ldr_imm): (JSC::ARMAssembler::ldr_un_imm): (JSC::ARMAssembler::dtr_u): (JSC::ARMAssembler::dtr_ur): (JSC::ARMAssembler::dtr_d): (JSC::ARMAssembler::dtr_dr): (JSC::ARMAssembler::ldrh_r): (JSC::ARMAssembler::ldrh_d): (JSC::ARMAssembler::ldrh_u): (JSC::ARMAssembler::strh_r): (JSC::ARMAssembler::push_r): (JSC::ARMAssembler::pop_r): (JSC::ARMAssembler::poke_r): (JSC::ARMAssembler::peek_r): (JSC::ARMAssembler::clz_r): (JSC::ARMAssembler::bkpt): (JSC::ARMAssembler::lsl): (JSC::ARMAssembler::lsr): (JSC::ARMAssembler::asr): (JSC::ARMAssembler::lsl_r): (JSC::ARMAssembler::lsr_r): (JSC::ARMAssembler::asr_r): (JSC::ARMAssembler::size): (JSC::ARMAssembler::ensureSpace): (JSC::ARMAssembler::label): (JSC::ARMAssembler::align): (JSC::ARMAssembler::jmp): (JSC::ARMAssembler::patchPointerInternal): (JSC::ARMAssembler::patchConstantPoolLoad): (JSC::ARMAssembler::patchPointer): (JSC::ARMAssembler::repatchInt32): (JSC::ARMAssembler::repatchPointer): (JSC::ARMAssembler::repatchLoadPtrToLEA): (JSC::ARMAssembler::linkJump): (JSC::ARMAssembler::relinkJump): (JSC::ARMAssembler::linkCall): (JSC::ARMAssembler::relinkCall): (JSC::ARMAssembler::getRelocatedAddress): (JSC::ARMAssembler::getDifferenceBetweenLabels): (JSC::ARMAssembler::getCallReturnOffset): (JSC::ARMAssembler::getOp2Byte): (JSC::ARMAssembler::placeConstantPoolBarrier): (JSC::ARMAssembler::RM): (JSC::ARMAssembler::RS): (JSC::ARMAssembler::RD): (JSC::ARMAssembler::RN): (JSC::ARMAssembler::getConditionalField): * assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::JmpSrc::enableLatePatch): * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::Call::enableLatePatch): (JSC::AbstractMacroAssembler::Jump::enableLatePatch): * assembler/MacroAssembler.h: * assembler/MacroAssemblerARM.h: Added. (JSC::MacroAssemblerARM::): (JSC::MacroAssemblerARM::add32): (JSC::MacroAssemblerARM::and32): (JSC::MacroAssemblerARM::lshift32): (JSC::MacroAssemblerARM::mul32): (JSC::MacroAssemblerARM::not32): (JSC::MacroAssemblerARM::or32): (JSC::MacroAssemblerARM::rshift32): (JSC::MacroAssemblerARM::sub32): (JSC::MacroAssemblerARM::xor32): (JSC::MacroAssemblerARM::load32): (JSC::MacroAssemblerARM::load32WithAddressOffsetPatch): (JSC::MacroAssemblerARM::loadPtrWithPatchToLEA): (JSC::MacroAssemblerARM::load16): (JSC::MacroAssemblerARM::store32WithAddressOffsetPatch): (JSC::MacroAssemblerARM::store32): (JSC::MacroAssemblerARM::pop): (JSC::MacroAssemblerARM::push): (JSC::MacroAssemblerARM::move): (JSC::MacroAssemblerARM::swap): (JSC::MacroAssemblerARM::signExtend32ToPtr): (JSC::MacroAssemblerARM::zeroExtend32ToPtr): (JSC::MacroAssemblerARM::branch32): (JSC::MacroAssemblerARM::branch16): (JSC::MacroAssemblerARM::branchTest32): (JSC::MacroAssemblerARM::jump): (JSC::MacroAssemblerARM::branchAdd32): (JSC::MacroAssemblerARM::mull32): (JSC::MacroAssemblerARM::branchMul32): (JSC::MacroAssemblerARM::branchSub32): (JSC::MacroAssemblerARM::breakpoint): (JSC::MacroAssemblerARM::nearCall): (JSC::MacroAssemblerARM::call): (JSC::MacroAssemblerARM::ret): (JSC::MacroAssemblerARM::set32): (JSC::MacroAssemblerARM::setTest32): (JSC::MacroAssemblerARM::tailRecursiveCall): (JSC::MacroAssemblerARM::makeTailRecursiveCall): (JSC::MacroAssemblerARM::moveWithPatch): (JSC::MacroAssemblerARM::branchPtrWithPatch): (JSC::MacroAssemblerARM::storePtrWithPatch): (JSC::MacroAssemblerARM::supportsFloatingPoint): (JSC::MacroAssemblerARM::supportsFloatingPointTruncate): (JSC::MacroAssemblerARM::loadDouble): (JSC::MacroAssemblerARM::storeDouble): (JSC::MacroAssemblerARM::addDouble): (JSC::MacroAssemblerARM::subDouble): (JSC::MacroAssemblerARM::mulDouble): (JSC::MacroAssemblerARM::convertInt32ToDouble): (JSC::MacroAssemblerARM::branchDouble): (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32): (JSC::MacroAssemblerARM::ARMCondition): (JSC::MacroAssemblerARM::prepareCall): (JSC::MacroAssemblerARM::call32): * assembler/X86Assembler.h: (JSC::X86Assembler::JmpSrc::enableLatePatch): * jit/ExecutableAllocator.h: (JSC::ExecutableAllocator::cacheFlush): * wtf/Platform.h: * yarr/RegexJIT.cpp: (JSC::Yarr::RegexGenerator::generateEnter): (JSC::Yarr::RegexGenerator::generateReturn): 2009-07-17 Gabor Loki Reviewed by Gavin Barraclough. Extend AssemblerBuffer with constant pool handling mechanism. https://bugs.webkit.org/show_bug.cgi?id=24986 Add a platform independed constant pool framework. This pool can store 32 or 64 bits values which is enough to hold any integer, pointer or double constant. * assembler/AssemblerBuffer.h: (JSC::AssemblerBuffer::putIntUnchecked): (JSC::AssemblerBuffer::putInt64Unchecked): (JSC::AssemblerBuffer::append): (JSC::AssemblerBuffer::grow): * assembler/AssemblerBufferWithConstantPool.h: Added. (JSC::): 2009-07-17 Eric Roman Reviewed by Darin Adler. Build fix for non-Darwin. Add a guard for inclusion of RetainPtr.h which includes CoreFoundation.h https://bugs.webkit.org/show_bug.cgi?id=27382 * wtf/unicode/icu/CollatorICU.cpp: 2009-07-17 Alexey Proskuryakov Reviewed by John Sullivan. Get user default collation order via a CFLocale API when available. * wtf/unicode/icu/CollatorICU.cpp: (WTF::Collator::userDefault): 2009-07-17 Laszlo Gombos Reviewed by Simon Hausmann. [Qt] Fix the include path for the Symbian port https://bugs.webkit.org/show_bug.cgi?id=27358 * JavaScriptCore.pri: 2009-07-17 Csaba Osztrogonac Reviewed by David Levin. Build fix on platforms don't have MMAP. https://bugs.webkit.org/show_bug.cgi?id=27365 * interpreter/RegisterFile.h: Including stdio.h irrespectively of HAVE(MMAP) 2009-07-16 Fumitoshi Ukai Reviewed by David Levin. Add --web-sockets flag and ENABLE_WEB_SOCKETS define. https://bugs.webkit.org/show_bug.cgi?id=27206 Add ENABLE_WEB_SOCKETS * Configurations/FeatureDefines.xcconfig: add ENABLE_WEB_SOCKETS 2009-07-16 Maxime Simon Reviewed by Eric Seidel. Added Haiku-specific files for JavaScriptCore. https://bugs.webkit.org/show_bug.cgi?id=26620 * wtf/haiku/MainThreadHaiku.cpp: Added. (WTF::initializeMainThreadPlatform): (WTF::scheduleDispatchFunctionsOnMainThread): 2009-07-16 Gavin Barraclough RS by Oliver Hunt. Revert r45969, this fix does not appear to be valid. https://bugs.webkit.org/show_bug.cgi?id=27077 * bytecode/CodeBlock.cpp: (JSC::CodeBlock::~CodeBlock): (JSC::CodeBlock::unlinkCallers): * jit/JIT.cpp: * jit/JIT.h: 2009-07-16 Zoltan Horvath Reviewed by Oliver Hunt. Allow custom memory allocation control in ExceptionInfo and RareData struct https://bugs.webkit.org/show_bug.cgi?id=27336 Inherits ExceptionInfo and RareData struct from FastAllocBase because these have been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.cpp:1289 and in JavaScriptCore/bytecode/CodeBlock.h:453. Remove unnecessary WTF:: namespace from CodeBlock inheritance. * bytecode/CodeBlock.h: 2009-07-16 Mark Rowe Rubber-stamped by Geoff Garen. Fix FeatureDefines.xcconfig to not be out of sync with the rest of the world. * Configurations/FeatureDefines.xcconfig: 2009-07-16 Yong Li Reviewed by George Staikos. https://bugs.webkit.org/show_bug.cgi?id=27320 _countof is only included in CE6; for CE5 we need to define it ourself * wtf/Platform.h: 2009-07-16 Zoltan Herczeg Reviewed by Oliver Hunt. Workers + garbage collector: weird crashes https://bugs.webkit.org/show_bug.cgi?id=27077 We need to unlink cached method call sites when a function is destroyed. * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/CodeBlock.cpp: (JSC::CodeBlock::~CodeBlock): (JSC::CodeBlock::unlinkCallers): * jit/JIT.cpp: (JSC::JIT::unlinkMethodCall): * jit/JIT.h: 2009-07-15 Steve Falkenburg Windows Build fix. Visual Studio reset our intermediate directory on us. This sets it back. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: * JavaScriptCore.vcproj/testapi/testapi.vcproj: 2009-07-15 Kwang Yul Seo Reviewed by Eric Seidel. https://bugs.webkit.org/show_bug.cgi?id=26794 Make Yacc-generated parsers to use fastMalloc/fastFree. Define YYMALLOC and YYFREE to fastMalloc and fastFree respectively. * parser/Grammar.y: 2009-07-15 Darin Adler Fix a build for a particular Apple configuration. * wtf/FastAllocBase.h: Change include to use "" style for including another wtf header. This is the style we use for including other public headers in the same directory. 2009-07-15 George Staikos Reviewed by Adam Treat. https://bugs.webkit.org/show_bug.cgi?id=27303 Implement createThreadInternal for WinCE. Contains changes by George Staikos and Joe Mason * wtf/ThreadingWin.cpp: (WTF::createThreadInternal): 2009-07-15 Joe Mason Reviewed by George Staikos. https://bugs.webkit.org/show_bug.cgi?id=27298 Platform defines for WINCE. Contains changes by Yong Li , George Staikos and Joe Mason * wtf/Platform.h: 2009-07-15 Yong Li Reviewed by Adam Treat. https://bugs.webkit.org/show_bug.cgi?id=27306 Use RegisterClass instead of RegisterClassEx on WinCE. * wtf/win/MainThreadWin.cpp: (WTF::initializeMainThreadPlatform): 2009-07-15 Yong Li Reviewed by George Staikos. https://bugs.webkit.org/show_bug.cgi?id=27301 Use OutputDebugStringW on WinCE since OutputDebugStringA is not supported Originally written by Yong Li and refactored by Joe Mason * wtf/Assertions.cpp: vprintf_stderr_common 2009-07-15 Yong Li Reviewed by George Staikos. https://bugs.webkit.org/show_bug.cgi?id=27020 msToGregorianDateTime should set utcOffset to 0 when outputIsUTC is false * wtf/DateMath.cpp: (WTF::gregorianDateTimeToMS): 2009-07-15 Laszlo Gombos Reviewed by Simon Hausmann. [Qt] Cleanup - Remove obsolete code from the make system https://bugs.webkit.org/show_bug.cgi?id=27299 * JavaScriptCore.pro: * jsc.pro: 2009-07-07 Norbert Leser Reviewed by Simon Hausmann. https://bugs.webkit.org/show_bug.cgi?id=27056 Alternate bool operator for codewarrior compiler (WINSCW). Compiler (latest b482) reports error for UnspecifiedBoolType construct: "illegal explicit conversion from 'WTF::OwnArrayPtr' to 'bool'" Same fix as in r38391. * JavaScriptCore/wtf/OwnArrayPtr.h: 2009-07-15 Norbert Leser Reviewed by Darin Adler. Qualify include path with wtf to fix compilation on Symbian. https://bugs.webkit.org/show_bug.cgi?id=27055 * interpreter/Interpreter.h: 2009-07-15 Laszlo Gombos Reviewed by Dave Kilzer. Turn off non-portable date manipulations for SYMBIAN https://bugs.webkit.org/show_bug.cgi?id=27064 Introduce HAVE(TM_GMTOFF), HAVE(TM_ZONE) and HAVE(TIMEGM) guards and place the rules for controlling the guards in Platform.h. Turn off these newly introduced guards for SYMBIAN. * wtf/DateMath.cpp: (WTF::calculateUTCOffset): * wtf/DateMath.h: (WTF::GregorianDateTime::GregorianDateTime): (WTF::GregorianDateTime::operator tm): * wtf/Platform.h: 2009-07-15 Norbert Leser Reviewed by Simon Hausmann. Undef ASSERT on Symbian, to avoid excessive warnings https://bugs.webkit.org/show_bug.cgi?id=27052 * wtf/Assertions.h: 2009-07-15 Oliver Hunt Reviewed by Simon Hausmann. REGRESSION: fast/js/postfix-syntax.html fails with interpreter https://bugs.webkit.org/show_bug.cgi?id=27294 When postfix operators operating on locals assign to the same local the order of operations has to be to store the incremented value, then store the unmodified number. Rather than implementing this subtle semantic in the interpreter I've just made the logic explicit in the bytecode generator, so x=x++ effectively becomes x=ToNumber(x) (for a local var x). * parser/Nodes.cpp: (JSC::emitPostIncOrDec): 2009-07-15 Oliver Hunt Reviewed by Simon Hausmann. REGRESSION(43559): fast/js/kde/arguments-scope.html fails with interpreter https://bugs.webkit.org/show_bug.cgi?id=27259 The interpreter was incorrectly basing its need to create the arguments object based on the presence of the callframe's argument reference rather than the local arguments reference. Based on this it then overrode the local variable reference. * interpreter/Interpreter.cpp: (JSC::Interpreter::privateExecute): 2009-07-14 Steve Falkenburg Reorganize JavaScriptCore headers into: API: include/JavaScriptCore/ Private: include/private/JavaScriptCore/ Reviewed by Darin Adler. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: * JavaScriptCore.vcproj/testapi/testapi.vcproj: * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: 2009-07-14 Zoltan Horvath Reviewed by Darin Adler. Change JSCell's superclass to NoncopyableCustomAllocated https://bugs.webkit.org/show_bug.cgi?id=27248 JSCell class customizes operator new, since Noncopyable will be inherited from FastAllocBase, NoncopyableCustomAllocated has to be used. * runtime/JSCell.h: 2009-07-14 Zoltan Horvath Reviewed by Darin Adler. Change all Noncopyable inheriting visibility to public. https://bugs.webkit.org/show_bug.cgi?id=27225 Change all Noncopyable inheriting visibility to public because it is needed to the custom allocation framework (bug #20422). * bytecode/SamplingTool.h: * bytecompiler/RegisterID.h: * interpreter/CachedCall.h: * interpreter/RegisterFile.h: * parser/Lexer.h: * parser/Parser.h: * runtime/ArgList.h: * runtime/BatchedTransitionOptimizer.h: * runtime/Collector.h: * runtime/CommonIdentifiers.h: * runtime/JSCell.h: * runtime/JSGlobalObject.h: * runtime/JSLock.h: * runtime/JSONObject.cpp: * runtime/SmallStrings.cpp: * runtime/SmallStrings.h: * wtf/CrossThreadRefCounted.h: * wtf/GOwnPtr.h: * wtf/Locker.h: * wtf/MessageQueue.h: * wtf/OwnArrayPtr.h: * wtf/OwnFastMallocPtr.h: * wtf/OwnPtr.h: * wtf/RefCounted.h: * wtf/ThreadSpecific.h: * wtf/Threading.h: * wtf/Vector.h: * wtf/unicode/Collator.h: 2009-07-14 Zoltan Horvath Reviewed by Darin Adler. Change ParserArenaRefCounted's superclass to RefCountedCustomAllocated https://bugs.webkit.org/show_bug.cgi?id=27249 ParserArenaDeletable customizes operator new, to avoid double inheritance ParserArenaDeletable's superclass has been changed to RefCountedCustomAllocated. * parser/Nodes.h: 2009-07-14 Zoltan Horvath Reviewed by Darin Adler. Add RefCountedCustomAllocated to RefCounted.h https://bugs.webkit.org/show_bug.cgi?id=27232 Some class which are inherited from RefCounted customize operator new, but RefCounted is inherited from Noncopyable which will be inherited from FastAllocBase. To avoid conflicts Noncopyable inheriting was moved down to RefCounted and to avoid double inheritance this class has been added. * wtf/RefCounted.h: (WTF::RefCountedCustomAllocated::deref): (WTF::RefCountedCustomAllocated::~RefCountedCustomAllocated): 2009-07-14 Zoltan Horvath Reviewed by Darin Adler. Add NoncopyableCustomAllocated to Noncopyable.h. https://bugs.webkit.org/show_bug.cgi?id=27228 Some classes which inherited from Noncopyable overrides operator new since Noncopyable'll be inherited from FastAllocBase, Noncopyable.h needs to be extended with this new class to support the overriding. * wtf/Noncopyable.h: (WTFNoncopyable::NoncopyableCustomAllocated::NoncopyableCustomAllocated): (WTFNoncopyable::NoncopyableCustomAllocated::~NoncopyableCustomAllocated): 2009-07-14 Zoltan Horvath Reviewed by Darin Adler. Allow custom memory allocation control for JavaScriptCore's IdentifierTable class https://bugs.webkit.org/show_bug.cgi?id=27260 Inherits IdentifierTable class from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/runtime/Identifier.cpp:70. * runtime/Identifier.cpp: 2009-07-14 Zoltan Horvath Reviewed by Darin Adler. Allow custom memory allocation control for JavaScriptCore's Profiler class https://bugs.webkit.org/show_bug.cgi?id=27253 Inherits Profiler class from FastAllocBase because it has been instantiated by 'new' in JavaScriptCore/profiler/Profiler.cpp:56. * profiler/Profiler.h: 2009-07-06 George Staikos Reviewed by Adam Treat. Authors: George Staikos , Joe Mason , Makoto Matsumoto , Takuji Nishimura https://bugs.webkit.org/show_bug.cgi?id=27030 Implement custom RNG for WinCE using Mersenne Twister * wtf/RandomNumber.cpp: (WTF::randomNumber): * wtf/RandomNumberSeed.h: (WTF::initializeRandomNumberGenerator): * wtf/wince/mt19937ar.c: Added. (init_genrand): (init_by_array): (genrand_int32): (genrand_int31): (genrand_real1): (genrand_real2): (genrand_real3): (genrand_res53): 2009-07-13 Gustavo Noronha Silva Unreviewed make dist build fix. * GNUmakefile.am: 2009-07-13 Drew Wilson Reviewed by David Levin. Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs https://bugs.webkit.org/show_bug.cgi?id=26932 Added ENABLE(SHARED_WORKERS) flag (off by default). * Configurations/FeatureDefines.xcconfig: 2009-07-07 Norbert Leser Reviewed by Maciej Stachoviak. https://bugs.webkit.org/show_bug.cgi?id=27058 Removed superfluous parenthesis around single expression. Compilers on Symbian platform fail to properly parse and compile. * JavaScriptCore/wtf/Platform.h: 2009-07-13 Norbert Leser Reviewed by Maciej Stachoviak. https://bugs.webkit.org/show_bug.cgi?id=27054 Renamed Translator to HashTranslator Codewarrior compiler (WINSCW) latest b482 cannot resolve typename mismatch between template declaration and definition (HashTranslator / Translator) * wtf/HashSet.h: 2009-07-13 Norbert Leser Reviewed by Eric Seidel. https://bugs.webkit.org/show_bug.cgi?id=27053 Ambiguity in LabelScope initialization Codewarrior compiler (WINSCW) latest b482 on Symbian cannot resolve type of "0" unambiguously. Set expression explicitly to PassRefPtr