Changeset 36851 in webkit for trunk/JavaScriptCore
- Timestamp:
- Sep 24, 2008, 10:02:14 AM (17 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r36847 r36851 1 2008-09-24 Darin Adler <[email protected]> 2 3 Reviewed by Sam Weinig. 4 5 - https://bugs.webkit.org/show_bug.cgi?id=21047 6 speed up ret_activation with inlining 7 8 About 1% on v8-raytrace. 9 10 * JavaScriptCore.exp: Removed JSVariableObject::setRegisters. 11 12 * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline. 13 * kjs/JSActivation.h: 14 (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize 15 argument to setRegisters, since the object doesn't need to store the number of 16 registers. 17 18 * kjs/JSGlobalObject.cpp: 19 (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we 20 used this on objects that weren't brand new. These days, this function is really 21 just part of the constructor. 22 23 * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since 24 JSVariableObjectData no longer needs it. Added a setRegisters override here 25 that handles storing the size. 26 27 * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it 28 no longer exists. 29 30 * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the 31 header to make them inline. 32 * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData, 33 since it was only used for the global object. 34 (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline. 35 (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also 36 removed the code to set registerArraySize and changed an if statement into 37 an assert to save an unnnecessary branch. 38 1 39 2008-09-24 Maciej Stachowiak <[email protected]> 2 40 … … 128 166 empty call benchmark for CTI. 129 167 130 SunSpider says no change. SunSpider --v8 says 1% faster. 168 SunSpider says no change. SunSpider --v8 says 1% faster.v8 131 169 132 170 * VM/CTI.cpp: -
trunk/JavaScriptCore/JavaScriptCore.exp
r36847 r36851 153 153 __ZN3JSC16InternalFunction4infoE 154 154 __ZN3JSC16InternalFunctionC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_11StructureIDEEERKNS_10IdentifierE 155 __ZN3JSC16JSVariableObject12setRegistersEPNS_8RegisterES2_m156 155 __ZN3JSC16JSVariableObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE 157 156 __ZN3JSC16JSVariableObject16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE -
trunk/JavaScriptCore/kjs/JSActivation.cpp
r36821 r36851 31 31 32 32 #include "Arguments.h" 33 #include "CodeBlock.h"34 33 #include "Machine.h" 35 #include "Register.h"36 34 #include "JSFunction.h" 37 35 … … 84 82 r.mark(); 85 83 } 86 }87 88 void JSActivation::copyRegisters()89 {90 ASSERT(!d()->registerArray);91 ASSERT(!d()->registerArraySize);92 93 size_t numParametersMinusThis = d()->functionBody->generatedByteCode().numParameters - 1;94 size_t numVars = d()->functionBody->generatedByteCode().numVars;95 size_t numLocals = numVars + numParametersMinusThis;96 97 if (!numLocals)98 return;99 100 int registerOffset = numParametersMinusThis + RegisterFile::CallFrameHeaderSize;101 size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize;102 103 Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize);104 setRegisters(registerArray + registerOffset, registerArray, registerArraySize);105 84 } 106 85 -
trunk/JavaScriptCore/kjs/JSActivation.h
r36821 r36851 30 30 #define JSActivation_h 31 31 32 #include "CodeBlock.h" 32 33 #include "JSVariableObject.h" 34 #include "RegisterFile.h" 33 35 #include "SymbolTable.h" 34 36 #include "nodes.h" … … 99 101 }; 100 102 103 inline void JSActivation::copyRegisters() 104 { 105 ASSERT(!d()->registerArray); 106 107 size_t numParametersMinusThis = d()->functionBody->generatedByteCode().numParameters - 1; 108 size_t numVars = d()->functionBody->generatedByteCode().numVars; 109 size_t numLocals = numVars + numParametersMinusThis; 110 111 if (!numLocals) 112 return; 113 114 int registerOffset = numParametersMinusThis + RegisterFile::CallFrameHeaderSize; 115 size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize; 116 117 Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize); 118 setRegisters(registerArray + registerOffset, registerArray); 119 } 120 101 121 } // namespace JSC 102 122 -
trunk/JavaScriptCore/kjs/JSGlobalObject.cpp
r36843 r36851 196 196 void JSGlobalObject::reset(JSValue* prototype) 197 197 { 198 // Clear before inititalizing, to avoid calling mark() on stale pointers --199 // which would be wasteful -- or uninitialized pointers -- which would be200 // dangerous. (The allocations below may cause a GC.)201 202 ASSERT(!hasCustomProperties());203 symbolTable().clear();204 setRegisters(0, 0, 0);205 206 198 ExecState* exec = d()->globalExec.get(); 207 199 -
trunk/JavaScriptCore/kjs/JSGlobalObject.h
r36821 r36851 57 57 JSGlobalObjectData(JSGlobalObject* globalObject, JSObject* thisValue) 58 58 : JSVariableObjectData(&symbolTable, 0) 59 , registerArraySize(0) 59 60 , globalScopeChain(globalObject, thisValue) 60 61 , regExpConstructor(0) … … 82 83 } 83 84 85 size_t registerArraySize; 86 84 87 JSGlobalObject* next; 85 88 JSGlobalObject* prev; … … 270 273 void reset(JSValue* prototype); 271 274 275 void setRegisters(Register* registers, Register* registerArray, size_t count); 276 272 277 void* operator new(size_t); // can only be allocated with JSGlobalData 273 278 }; 279 280 inline void JSGlobalObject::setRegisters(Register* registers, Register* registerArray, size_t count) 281 { 282 JSVariableObject::setRegisters(registers, registerArray); 283 d()->registerArraySize = count; 284 } 274 285 275 286 inline void JSGlobalObject::addStaticGlobals(GlobalPropertyInfo* globals, int count) … … 324 335 } 325 336 337 326 338 } // namespace JSC 327 339 -
trunk/JavaScriptCore/kjs/JSStaticScopeObject.h
r36821 r36851 38 38 : JSVariableObjectData(&symbolTable, ®isterStore + 1) 39 39 { 40 registerArraySize = 1;41 40 } 42 41 SymbolTable symbolTable; -
trunk/JavaScriptCore/kjs/JSVariableObject.cpp
r36821 r36851 69 69 } 70 70 71 Register* JSVariableObject::copyRegisterArray(Register* src, size_t count)72 {73 Register* registerArray = new Register[count];74 memcpy(registerArray, src, count * sizeof(Register));75 76 return registerArray;77 }78 79 void JSVariableObject::setRegisters(Register* r, Register* registerArray, size_t count)80 {81 if (registerArray != d->registerArray.get())82 d->registerArray.set(registerArray);83 d->registerArraySize = count;84 d->registers = r;85 }86 87 71 } // namespace JSC -
trunk/JavaScriptCore/kjs/JSVariableObject.h
r36821 r36851 65 65 : symbolTable(symbolTable_) 66 66 , registers(registers_) 67 , registerArraySize(0)68 67 { 69 68 ASSERT(symbolTable_); … … 73 72 Register* registers; // "r" in the register file. 74 73 OwnArrayPtr<Register> registerArray; // Independent copy of registers, used when a variable object copies its registers out of the register file. 75 size_t registerArraySize;76 74 77 75 static inline ptrdiff_t offsetOf_registers() … … 92 90 93 91 Register* copyRegisterArray(Register* src, size_t count); 94 void setRegisters(Register* r, Register* registerArray , size_t count);92 void setRegisters(Register* r, Register* registerArray); 95 93 96 94 bool symbolTableGet(const Identifier&, PropertySlot&); … … 161 159 } 162 160 161 inline Register* JSVariableObject::copyRegisterArray(Register* src, size_t count) 162 { 163 Register* registerArray = new Register[count]; 164 memcpy(registerArray, src, count * sizeof(Register)); 165 166 return registerArray; 167 } 168 169 inline void JSVariableObject::setRegisters(Register* registers, Register* registerArray) 170 { 171 ASSERT(registerArray != d->registerArray.get()); 172 d->registerArray.set(registerArray); 173 d->registers = registers; 174 } 175 163 176 } // namespace JSC 164 177
Note:
See TracChangeset
for help on using the changeset viewer.