Changeset 93277 in webkit for trunk/Source/JavaScriptCore
- Timestamp:
- Aug 17, 2011, 7:56:13 PM (14 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r93238 r93277 1 2011-08-17 Thouraya ANDOLSI <[email protected]> 2 3 https://bugs.webkit.org/show_bug.cgi?id=66379 4 implements load32WithCompactAddressOffsetPatch function 5 and fixes store32 and moveWithPatch functions for SH4 platforms. 6 7 Reviewed by Gavin Barraclough. 8 9 * assembler/MacroAssemblerSH4.h: 10 (JSC::MacroAssemblerSH4::rshift32): 11 (JSC::MacroAssemblerSH4::store32): 12 (JSC::MacroAssemblerSH4::load32WithCompactAddressOffsetPatch): 13 (JSC::MacroAssemblerSH4::moveWithPatch): 14 * assembler/SH4Assembler.h: 15 (JSC::SH4Assembler::movlMemRegCompact): 16 (JSC::SH4Assembler::readPointer): 17 (JSC::SH4Assembler::repatchCompact): 18 * jit/JIT.h: 19 1 20 2011-08-17 Filip Pizlo <[email protected]> 2 21 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
r90237 r93277 46 46 static const RegisterID scratchReg3 = SH4Registers::r13; 47 47 48 static const int MaximumCompactPtrAlignedAddressOffset = 0x7FFFFFFF;48 static const int MaximumCompactPtrAlignedAddressOffset = 60; 49 49 50 50 enum RelationalCondition { … … 237 237 } 238 238 239 void rshift32(RegisterID src, TrustedImm32 imm, RegisterID dest) 240 { 241 if (src != dest) 242 move(src, dest); 243 rshift32(imm, dest); 244 } 245 239 246 void sub32(RegisterID src, RegisterID dest) 240 247 { … … 712 719 m_assembler.loadConstant((imm.m_value), scr); 713 720 m_assembler.loadConstant(reinterpret_cast<uint32_t>(address), scr1); 714 m_assembler.movl MemReg(scr, scr1);721 m_assembler.movlRegMem(scr, scr1); 715 722 releaseScratch(scr); 716 723 releaseScratch(scr1); … … 721 728 RegisterID scr = claimScratch(); 722 729 m_assembler.loadConstant(reinterpret_cast<uint32_t>(address), scr); 723 m_assembler.movl MemReg(src, scr);730 m_assembler.movlRegMem(src, scr); 724 731 releaseScratch(scr); 725 732 } … … 736 743 } 737 744 738 DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest)739 {740 RegisterID scr = claimScratch();741 DataLabelCompact label(this);742 m_assembler.loadConstantUnReusable(address.offset, scr);743 m_assembler.addlRegReg(address.base, scr);744 m_assembler.movlMemReg(scr, dest);745 releaseScratch(scr);746 return label;747 }748 749 745 DataLabel32 store32WithAddressOffsetPatch(RegisterID src, Address address) 750 746 { … … 756 752 releaseScratch(scr); 757 753 return label; 754 } 755 756 DataLabelCompact load32WithCompactAddressOffsetPatch(Address address, RegisterID dest) 757 { 758 DataLabelCompact dataLabel(this); 759 ASSERT(address.offset <= MaximumCompactPtrAlignedAddressOffset); 760 ASSERT(address.offset >= 0); 761 m_assembler.movlMemRegCompact(address.offset >> 2, address.base, dest); 762 return dataLabel; 758 763 } 759 764 … … 1195 1200 DataLabelPtr moveWithPatch(TrustedImmPtr initialValue, RegisterID dest) 1196 1201 { 1202 m_assembler.ensureSpace(m_assembler.maxInstructionSize, sizeof(uint32_t)); 1197 1203 DataLabelPtr dataLabel(this); 1198 m_assembler.loadConstantUnReusable(reinterpret_cast<uint32_t>(initialValue.m_value), dest , true);1204 m_assembler.loadConstantUnReusable(reinterpret_cast<uint32_t>(initialValue.m_value), dest); 1199 1205 return dataLabel; 1200 1206 } -
trunk/Source/JavaScriptCore/assembler/SH4Assembler.h
r89630 r93277 34 34 #include <stdarg.h> 35 35 #include <stdint.h> 36 #include <stdio.h> 36 37 #include <wtf/Assertions.h> 37 38 #include <wtf/Vector.h> … … 1064 1065 } 1065 1066 1067 void movlMemRegCompact(int offset, RegisterID base, RegisterID dst) 1068 { 1069 oneShortOp(getOpcodeGroup4(MOVL_READ_OFFRM_OPCODE, dst, base, offset)); 1070 } 1071 1066 1072 void movbMemReg(int offset, RegisterID base, RegisterID dst) 1067 1073 { … … 1233 1239 *reinterpret_cast<uint32_t*>(address) = newAddress; 1234 1240 } 1235 1241 1236 1242 static uint32_t readPCrelativeAddress(int offset, uint16_t* instructionPtr) 1237 1243 { … … 1355 1361 static void* readPointer(void* code) 1356 1362 { 1357 return static_cast<void*>(readInt32(code));1363 return reinterpret_cast<void*>(readInt32(code)); 1358 1364 } 1359 1365 … … 1366 1372 static void repatchCompact(void* where, int32_t value) 1367 1373 { 1368 repatchInt32(where, value); 1374 ASSERT(value >= 0); 1375 ASSERT(value <= 60); 1376 *reinterpret_cast<uint16_t*>(where) = ((*reinterpret_cast<uint16_t*>(where) & 0xfff0) | (value >> 2)); 1377 ExecutableAllocator::cacheFlush(reinterpret_cast<uint16_t*>(where), sizeof(uint16_t)); 1369 1378 } 1370 1379 -
trunk/Source/JavaScriptCore/jit/JIT.h
r92498 r93277 489 489 static const int patchOffsetGetByIdBranchToSlowCase = 10; 490 490 static const int patchOffsetGetByIdPropertyMapOffset = 24; 491 static const int patchOffsetGetByIdPutResult = 32;491 static const int patchOffsetGetByIdPutResult = 24; 492 492 493 493 // sequenceOpCall … … 508 508 509 509 static const int patchOffsetGetByIdPropertyMapOffset1 = 20; 510 static const int patchOffsetGetByIdPropertyMapOffset2 = 2 6;510 static const int patchOffsetGetByIdPropertyMapOffset2 = 22; 511 511 512 512 static const int patchOffsetPutByIdPropertyMapOffset1 = 20;
Note:
See TracChangeset
for help on using the changeset viewer.