Changeset 90060 in webkit
- Timestamp:
- Jun 29, 2011 4:11:59 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r90035 r90060 1 2011-06-29 Geoffrey Garen <ggaren@apple.com> 2 3 Reviewed by Oliver Hunt. 4 5 Added a dummy write barrier emitting function in all the right places in the old JIT 6 https://bugs.webkit.org/show_bug.cgi?id=63667 7 8 SunSpider reports no change. 9 10 * jit/JIT.h: 11 * jit/JITPropertyAccess.cpp: 12 (JSC::JIT::emit_op_put_by_id): 13 (JSC::JIT::emit_op_put_scoped_var): Do it. 14 15 (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register 16 for the sake of the write barrier. 17 18 (JSC::JIT::emitWriteBarrier): Empty for now. Not for long! 19 20 * jit/JITPropertyAccess32_64.cpp: 21 (JSC::JIT::emit_op_put_by_val): 22 (JSC::JIT::emit_op_put_by_id): 23 (JSC::JIT::emit_op_put_scoped_var): Do it. 24 25 (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register 26 for the sake of the write barrier. 27 28 (JSC::JIT::emitWriteBarrier): Empty for now. Not for long! 29 1 30 2011-06-29 Filip Pizlo <fpizlo@apple.com> 2 31 -
trunk/Source/JavaScriptCore/jit/JIT.h
r89885 r90060 299 299 300 300 void testPrototype(JSValue, JumpList& failureCases); 301 302 void emitWriteBarrier(RegisterID owner, RegisterID scratch); 301 303 302 304 #if USE(JSVALUE32_64) -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r89630 r90060 433 433 emitJumpSlowCaseIfNotJSCell(regT0, baseVReg); 434 434 435 emitWriteBarrier(regT0, regT2); 436 435 437 BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById); 436 438 … … 973 975 int skip = currentInstruction[2].u.operand; 974 976 977 emitGetVirtualRegister(currentInstruction[3].u.operand, regT0); 978 975 979 emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1); 976 emitGetVirtualRegister(currentInstruction[3].u.operand, regT0);977 980 bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain(); 978 981 ASSERT(skip || !checkTopLevel); … … 986 989 while (skip--) 987 990 loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, next)), regT1); 988 989 991 loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, object)), regT1); 992 993 emitWriteBarrier(regT1, regT2); 994 990 995 loadPtr(Address(regT1, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT1); 991 996 storePtr(regT0, Address(regT1, currentInstruction[1].u.operand * sizeof(Register))); … … 1002 1007 void JIT::emit_op_put_global_var(Instruction* currentInstruction) 1003 1008 { 1004 emitGetVirtualRegister(currentInstruction[2].u.operand, regT1); 1005 JSVariableObject* globalObject = m_codeBlock->globalObject(); 1006 loadPtr(&globalObject->m_registers, regT0); 1007 storePtr(regT1, Address(regT0, currentInstruction[1].u.operand * sizeof(Register))); 1009 JSGlobalObject* globalObject = m_codeBlock->globalObject(); 1010 1011 emitGetVirtualRegister(currentInstruction[2].u.operand, regT0); 1012 move(TrustedImmPtr(globalObject), regT1); 1013 1014 emitWriteBarrier(regT1, regT2); 1015 1016 loadPtr(Address(regT1, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT1); 1017 storePtr(regT0, Address(regT1, currentInstruction[1].u.operand * sizeof(Register))); 1018 } 1019 1020 void JIT::emitWriteBarrier(RegisterID owner, RegisterID scratch) 1021 { 1022 UNUSED_PARAM(owner); 1023 UNUSED_PARAM(scratch); 1008 1024 } 1009 1025 -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
r89985 r90060 260 260 addSlowCase(branch32(NotEqual, regT3, TrustedImm32(JSValue::Int32Tag))); 261 261 emitJumpSlowCaseIfNotJSCell(base, regT1); 262 emitWriteBarrier(regT0, regT1); 262 263 addSlowCase(branchPtr(NotEqual, Address(regT0), TrustedImmPtr(m_globalData->jsArrayVPtr))); 263 264 addSlowCase(branch32(AboveOrEqual, regT2, Address(regT0, JSArray::vectorLengthOffset()))); … … 394 395 395 396 emitJumpSlowCaseIfNotJSCell(base, regT1); 397 398 emitWriteBarrier(regT0, regT1); 396 399 397 400 BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById); … … 1029 1032 while (skip--) 1030 1033 loadPtr(Address(regT2, OBJECT_OFFSETOF(ScopeChainNode, next)), regT2); 1031 1032 1034 loadPtr(Address(regT2, OBJECT_OFFSETOF(ScopeChainNode, object)), regT2); 1035 1036 emitWriteBarrier(regT2, regT3); 1037 1033 1038 loadPtr(Address(regT2, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT2); 1034 1035 1039 emitStore(index, regT1, regT0, regT2); 1036 1040 map(m_bytecodeOffset + OPCODE_LENGTH(op_put_scoped_var), value, regT1, regT0); … … 1053 1057 void JIT::emit_op_put_global_var(Instruction* currentInstruction) 1054 1058 { 1055 JSGlobalObject* globalObject = m_codeBlock->globalObject();1056 ASSERT(globalObject->isGlobalObject());1057 1059 int index = currentInstruction[1].u.operand; 1058 1060 int value = currentInstruction[2].u.operand; 1059 1061 1062 JSGlobalObject* globalObject = m_codeBlock->globalObject(); 1063 1060 1064 emitLoad(value, regT1, regT0); 1061 1062 loadPtr(&globalObject->m_registers, regT2); 1065 move(TrustedImmPtr(globalObject), regT2); 1066 1067 emitWriteBarrier(regT2, regT3); 1068 1069 loadPtr(Address(regT2, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT2); 1063 1070 emitStore(index, regT1, regT0, regT2); 1064 1071 map(m_bytecodeOffset + OPCODE_LENGTH(op_put_global_var), value, regT1, regT0); 1065 1072 } 1066 1073 1074 void JIT::emitWriteBarrier(RegisterID owner, RegisterID scratch) 1075 { 1076 UNUSED_PARAM(owner); 1077 UNUSED_PARAM(scratch); 1078 } 1079 1067 1080 } // namespace JSC 1068 1081
Note: See TracChangeset
for help on using the changeset viewer.