Changeset 102389 in webkit for trunk/Source/JavaScriptCore/assembler
- Timestamp:
- Dec 8, 2011, 3:16:54 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore/assembler
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
r101473 r102389 282 282 } 283 283 #endif 284 285 void load16Unaligned(BaseIndex address, RegisterID dest) 286 { 287 load16(address, dest); 288 } 284 289 285 290 DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest) -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r102038 r102389 576 576 } 577 577 578 void load16Unaligned(BaseIndex address, RegisterID dest) 579 { 580 load16(setupArmAddress(address), dest); 581 } 582 578 583 void load32(const void* address, RegisterID dest) 579 584 { -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
r101658 r102389 575 575 m_assembler.lw(dest, addrTempRegister, address.offset); 576 576 } 577 } 578 579 void load16Unaligned(BaseIndex address, RegisterID dest) 580 { 581 load16(address, dest); 577 582 } 578 583 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
r101980 r102389 159 159 void lshift32(RegisterID shiftamount, RegisterID dest) 160 160 { 161 if (shiftamount == SH4Registers::r0) 162 m_assembler.andlImm8r(0x1f, shiftamount); 163 else { 164 RegisterID scr = claimScratch(); 165 m_assembler.loadConstant(0x1f, scr); 166 m_assembler.andlRegReg(scr, shiftamount); 167 releaseScratch(scr); 168 } 161 169 m_assembler.shllRegReg(dest, shiftamount); 162 170 } … … 172 180 void lshift32(TrustedImm32 imm, RegisterID dest) 173 181 { 182 if (!imm.m_value) 183 return; 184 174 185 if ((imm.m_value == 1) || (imm.m_value == 2) || (imm.m_value == 8) || (imm.m_value == 16)) { 175 186 m_assembler.shllImm8r(imm.m_value, dest); … … 178 189 179 190 RegisterID scr = claimScratch(); 180 m_assembler.loadConstant( imm.m_value, scr);191 m_assembler.loadConstant((imm.m_value & 0x1f) , scr); 181 192 m_assembler.shllRegReg(dest, scr); 182 193 releaseScratch(scr); … … 236 247 void rshift32(RegisterID shiftamount, RegisterID dest) 237 248 { 238 compare32(32, shiftamount, Equal); 239 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 4); 240 m_assembler.branch(BT_OPCODE, 1); 249 if (shiftamount == SH4Registers::r0) 250 m_assembler.andlImm8r(0x1f, shiftamount); 251 else { 252 RegisterID scr = claimScratch(); 253 m_assembler.loadConstant(0x1f, scr); 254 m_assembler.andlRegReg(scr, shiftamount); 255 releaseScratch(scr); 256 } 241 257 m_assembler.neg(shiftamount, shiftamount); 242 258 m_assembler.shaRegReg(dest, shiftamount); … … 583 599 if (!offset) { 584 600 m_assembler.movbMemReg(base, dest); 601 m_assembler.extub(dest, dest); 585 602 return; 586 603 } … … 588 605 if ((offset > 0) && (offset < 64) && (dest == SH4Registers::r0)) { 589 606 m_assembler.movbMemReg(offset, base, dest); 607 m_assembler.extub(dest, dest); 590 608 return; 591 609 } … … 595 613 m_assembler.addlRegReg(base, dest); 596 614 m_assembler.movbMemReg(dest, dest); 615 m_assembler.extub(dest, dest); 597 616 return; 598 617 } … … 602 621 m_assembler.addlRegReg(base, scr); 603 622 m_assembler.movbMemReg(scr, dest); 623 m_assembler.extub(dest, dest); 604 624 releaseScratch(scr); 605 625 } … … 620 640 if (!address.offset) { 621 641 m_assembler.movwMemReg(address.base, dest); 642 extuw(dest, dest); 622 643 return; 623 644 } … … 625 646 if ((address.offset > 0) && (address.offset < 64) && (dest == SH4Registers::r0)) { 626 647 m_assembler.movwMemReg(address.offset, address.base, dest); 648 extuw(dest, dest); 627 649 return; 628 650 } … … 632 654 m_assembler.addlRegReg(address.base, dest); 633 655 m_assembler.movwMemReg(dest, dest); 656 extuw(dest, dest); 634 657 return; 635 658 } … … 639 662 m_assembler.addlRegReg(address.base, scr); 640 663 m_assembler.movwMemReg(scr, dest); 641 releaseScratch(scr); 664 extuw(dest, dest); 665 releaseScratch(scr); 666 } 667 668 void load16Unaligned(BaseIndex address, RegisterID dest) 669 { 670 671 RegisterID scr = claimScratch(); 672 RegisterID scr1 = claimScratch(); 673 674 move(address.index, scr); 675 lshift32(TrustedImm32(address.scale), scr); 676 677 if (address.offset) 678 add32(TrustedImm32(address.offset), scr); 679 680 add32(address.base, scr); 681 load8(scr, scr1); 682 add32(TrustedImm32(1), scr); 683 load8(scr, dest); 684 move(TrustedImm32(8), scr); 685 m_assembler.shllRegReg(dest, scr); 686 or32(scr1, dest); 687 688 releaseScratch(scr); 689 releaseScratch(scr1); 642 690 } 643 691 … … 645 693 { 646 694 m_assembler.movwMemReg(src, dest); 695 extuw(dest, dest); 647 696 } 648 697 … … 651 700 ASSERT(r0 == SH4Registers::r0); 652 701 m_assembler.movwR0mr(src, dest); 702 extuw(dest, dest); 653 703 } 654 704 … … 662 712 if (address.offset) 663 713 add32(TrustedImm32(address.offset), scr); 664 if ( scr== SH4Registers::r0)665 m_assembler.movwR0mr(address.base, scr);714 if (address.base == SH4Registers::r0) 715 load16(address.base, scr, dest); 666 716 else { 667 717 add32(address.base, scr); 668 load16(scr, scr); 669 } 670 671 extuw(scr, dest); 718 load16(scr, dest); 719 } 720 672 721 releaseScratch(scr); 673 722 } … … 1230 1279 void move(RegisterID src, RegisterID dest) 1231 1280 { 1232 m_assembler.movlRegReg(src, dest); 1281 if (src != dest) 1282 m_assembler.movlRegReg(src, dest); 1233 1283 } 1234 1284 … … 1387 1437 add32(left.base, scr); 1388 1438 load8(scr, scr); 1389 m_assembler.extub(scr, scr);1390 1439 RegisterID scr1 = claimScratch(); 1391 1440 m_assembler.loadConstant(right.m_value, scr1); … … 1640 1689 void urshift32(RegisterID shiftamount, RegisterID dest) 1641 1690 { 1642 compare32(32, shiftamount, Equal); 1643 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 4); 1644 m_assembler.branch(BT_OPCODE, 1); 1691 if (shiftamount == SH4Registers::r0) 1692 m_assembler.andlImm8r(0x1f, shiftamount); 1693 else { 1694 RegisterID scr = claimScratch(); 1695 m_assembler.loadConstant(0x1f, scr); 1696 m_assembler.andlRegReg(scr, shiftamount); 1697 releaseScratch(scr); 1698 } 1645 1699 m_assembler.neg(shiftamount, shiftamount); 1646 1700 m_assembler.shllRegReg(dest, shiftamount); … … 1650 1704 { 1651 1705 RegisterID scr = claimScratch(); 1652 m_assembler.loadConstant(-(imm.m_value ), scr);1706 m_assembler.loadConstant(-(imm.m_value & 0x1f), scr); 1653 1707 m_assembler.shaRegReg(dest, scr); 1654 1708 releaseScratch(scr); -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r101886 r102389 445 445 { 446 446 load32(address, dest); 447 } 448 449 void load16Unaligned(BaseIndex address, RegisterID dest) 450 { 451 load16(address, dest); 447 452 } 448 453
Note:
See TracChangeset
for help on using the changeset viewer.