Changeset 194707 in webkit
- Timestamp:
- Jan 7, 2016, 11:42:49 AM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r194705 r194707 1 2016-01-07 Mark Lam <mark.lam@apple.com> 2 3 ARMv7 or32(TrustedImm32, AbsoluteAddress) may have a bug with its use of dataTempRegister. 4 https://bugs.webkit.org/show_bug.cgi?id=152833 5 6 Reviewed by Benjamin Poulain. 7 8 * assembler/MacroAssemblerARM.h: 9 (JSC::MacroAssemblerARM::or32): 10 - Added some assertions to make sure it is safe to use ARMRegisters::S0 as a temp. 11 * assembler/MacroAssemblerARM64.h: 12 (JSC::MacroAssemblerARM64::or32): 13 - Implement an optimization that avoids reloading the memoryTempRegister when 14 the immediate is encodable as an instruction immediate. 15 * assembler/MacroAssemblerARMv7.h: 16 (JSC::MacroAssemblerARMv7::or32): 17 - Added an assertion to make sure it is safe to use the dataTempRegister as a temp. 18 - Implement an optimization that avoids reloading the memoryTempRegister when 19 the immediate is encodable as an instruction immediate. In the event that we 20 cannot encode the immediate, we'll use the addressTempRegister as a temp, and 21 reload it later. 22 1 23 2016-01-07 Konstantin Tokarev <annulen@yandex.ru> 2 24 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
r194698 r194707 240 240 void or32(TrustedImm32 imm, RegisterID dest) 241 241 { 242 ASSERT(dest != ARMRegisters::S0); 242 243 m_assembler.orrs(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0)); 243 244 } … … 245 246 void or32(TrustedImm32 imm, RegisterID src, RegisterID dest) 246 247 { 248 ASSERT(src != ARMRegisters::S0); 247 249 m_assembler.orrs(dest, src, m_assembler.getImm(imm.m_value, ARMRegisters::S0)); 248 250 } -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
r194663 r194707 538 538 void or32(TrustedImm32 imm, AbsoluteAddress address) 539 539 { 540 load32(address.m_ptr, getCachedMemoryTempRegisterIDAndInvalidate()); 541 or32(imm, memoryTempRegister, memoryTempRegister); 542 store32(memoryTempRegister, address.m_ptr); 540 LogicalImmediate logicalImm = LogicalImmediate::create32(imm.m_value); 541 if (logicalImm.isValid()) { 542 load32(address.m_ptr, getCachedDataTempRegisterIDAndInvalidate()); 543 m_assembler.orr<32>(dataTempRegister, dataTempRegister, logicalImm); 544 store32(dataTempRegister, address.m_ptr); 545 } else { 546 load32(address.m_ptr, getCachedMemoryTempRegisterIDAndInvalidate()); 547 or32(imm, memoryTempRegister, memoryTempRegister); 548 store32(memoryTempRegister, address.m_ptr); 549 } 543 550 } 544 551 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r194613 r194707 355 355 void or32(TrustedImm32 imm, AbsoluteAddress address) 356 356 { 357 move(TrustedImmPtr(address.m_ptr), addressTempRegister); 358 load32(addressTempRegister, dataTempRegister); 359 or32(imm, dataTempRegister, dataTempRegister); 360 store32(dataTempRegister, addressTempRegister); 357 ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm.m_value); 358 if (armImm.isValid()) { 359 move(TrustedImmPtr(address.m_ptr), addressTempRegister); 360 load32(addressTempRegister, dataTempRegister); 361 m_assembler.orr(dataTempRegister, dataTempRegister, armImm); 362 store32(dataTempRegister, addressTempRegister); 363 } else { 364 move(TrustedImmPtr(address.m_ptr), addressTempRegister); 365 load32(addressTempRegister, dataTempRegister); 366 move(imm, addressTempRegister); 367 m_assembler.orr(dataTempRegister, dataTempRegister, addressTempRegister); 368 move(TrustedImmPtr(address.m_ptr), addressTempRegister); 369 store32(dataTempRegister, addressTempRegister); 370 } 361 371 } 362 372 … … 384 394 m_assembler.orr(dest, src, armImm); 385 395 else { 396 ASSERT(src != dataTempRegister); 386 397 move(imm, dataTempRegister); 387 398 m_assembler.orr(dest, src, dataTempRegister);
Note:
See TracChangeset
for help on using the changeset viewer.