Changeset 48782 in webkit for trunk/JavaScriptCore/assembler
- Timestamp:
- Sep 25, 2009, 7:27:02 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/assembler
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssemblerARM.cpp
r48525 r48782 63 63 const bool MacroAssemblerARM::s_isVFPPresent = isVFPPresent(); 64 64 65 #if defined(ARM_REQUIRE_NATURAL_ALIGNMENT) && ARM_REQUIRE_NATURAL_ALIGNMENT 66 void MacroAssemblerARM::load32WithUnalignedHalfWords(BaseIndex address, RegisterID dest) 67 { 68 ARMWord op2; 69 70 ASSERT(address.scale >= 0 && address.scale <= 3); 71 op2 = m_assembler.lsl(address.index, static_cast<int>(address.scale)); 72 73 if (address.offset >= 0 && address.offset + 0x2 <= 0xff) { 74 m_assembler.add_r(ARMRegisters::S0, address.base, op2); 75 m_assembler.ldrh_u(dest, ARMRegisters::S0, ARMAssembler::getOp2Byte(address.offset)); 76 m_assembler.ldrh_u(ARMRegisters::S0, ARMRegisters::S0, ARMAssembler::getOp2Byte(address.offset + 0x2)); 77 } else if (address.offset < 0 && address.offset >= -0xff) { 78 m_assembler.add_r(ARMRegisters::S0, address.base, op2); 79 m_assembler.ldrh_d(dest, ARMRegisters::S0, ARMAssembler::getOp2Byte(-address.offset)); 80 m_assembler.ldrh_d(ARMRegisters::S0, ARMRegisters::S0, ARMAssembler::getOp2Byte(-address.offset - 0x2)); 81 } else { 82 m_assembler.ldr_un_imm(ARMRegisters::S0, address.offset); 83 m_assembler.add_r(ARMRegisters::S0, ARMRegisters::S0, op2); 84 m_assembler.ldrh_r(dest, address.base, ARMRegisters::S0); 85 m_assembler.add_r(ARMRegisters::S0, ARMRegisters::S0, ARMAssembler::OP2_IMM | 0x2); 86 m_assembler.ldrh_r(ARMRegisters::S0, address.base, ARMRegisters::S0); 87 } 88 m_assembler.orr_r(dest, dest, m_assembler.lsl(ARMRegisters::S0, 16)); 89 } 90 #endif 91 65 92 } 66 93 -
trunk/JavaScriptCore/assembler/MacroAssemblerARM.h
r48525 r48782 199 199 } 200 200 201 #if defined(ARM_REQUIRE_NATURAL_ALIGNMENT) && ARM_REQUIRE_NATURAL_ALIGNMENT 202 void load32WithUnalignedHalfWords(BaseIndex address, RegisterID dest); 203 #else 204 void load32WithUnalignedHalfWords(BaseIndex address, RegisterID dest) 205 { 206 load32(address, dest); 207 } 208 #endif 209 201 210 DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest) 202 211 { … … 362 371 { 363 372 load32(left, ARMRegisters::S1); 373 return branch32(cond, ARMRegisters::S1, right); 374 } 375 376 Jump branch32WithUnalignedHalfWords(Condition cond, BaseIndex left, Imm32 right) 377 { 378 load32WithUnalignedHalfWords(left, ARMRegisters::S1); 364 379 return branch32(cond, ARMRegisters::S1, right); 365 380 } -
trunk/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r48445 r48782 376 376 } 377 377 378 void load32WithUnalignedHalfWords(BaseIndex address, RegisterID dest) 379 { 380 load32(setupArmAddress(address), dest); 381 } 382 378 383 void load32(void* address, RegisterID dest) 379 384 { … … 718 723 } 719 724 725 Jump branch32WithUnalignedHalfWords(Condition cond, BaseIndex left, Imm32 right) 726 { 727 // use addressTempRegister incase the branch32 we call uses dataTempRegister. :-/ 728 load32WithUnalignedHalfWords(left, addressTempRegister); 729 return branch32(cond, addressTempRegister, right); 730 } 731 720 732 Jump branch32(Condition cond, AbsoluteAddress left, RegisterID right) 721 733 { -
trunk/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r47834 r48782 307 307 } 308 308 309 void load32WithUnalignedHalfWords(BaseIndex address, RegisterID dest) 310 { 311 load32(address, dest); 312 } 313 309 314 DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest) 310 315 { … … 603 608 m_assembler.cmpl_im(right.m_value, left.offset, left.base, left.index, left.scale); 604 609 return Jump(m_assembler.jCC(x86Condition(cond))); 610 } 611 612 Jump branch32WithUnalignedHalfWords(Condition cond, BaseIndex left, Imm32 right) 613 { 614 return branch32(cond, left, right); 605 615 } 606 616
Note:
See TracChangeset
for help on using the changeset viewer.