Changeset 50981 in webkit for trunk/JavaScriptCore/assembler
- Timestamp:
- Nov 13, 2009, 4:44:42 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/assembler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/ARMAssembler.h
r50593 r50981 122 122 MULL = 0x00c00090, 123 123 FADDD = 0x0e300b00, 124 FDIVD = 0x0e800b00, 124 125 FSUBD = 0x0e300b40, 125 126 FMULD = 0x0e200b00, … … 401 402 } 402 403 404 void fdivd_r(int dd, int dn, int dm, Condition cc = AL) 405 { 406 emitInst(static_cast<ARMWord>(cc) | FDIVD, dd, dn, dm); 407 } 408 403 409 void fsubd_r(int dd, int dn, int dm, Condition cc = AL) 404 410 { -
trunk/JavaScriptCore/assembler/MacroAssemblerARM.h
r50595 r50981 121 121 void lshift32(RegisterID shift_amount, RegisterID dest) 122 122 { 123 ARMWord w = m_assembler.getImm(0x1f, ARMRegisters::S0, true);124 ASSERT( !(w & ARMAssembler::OP2_INV_IMM));125 m_assembler.and s_r(ARMRegisters::S0, shift_amount, w);123 ARMWord w = ARMAssembler::getOp2(0x1f); 124 ASSERT(w != ARMAssembler::INVALID_IMM); 125 m_assembler.and_r(ARMRegisters::S0, shift_amount, w); 126 126 127 127 m_assembler.movs_r(dest, m_assembler.lsl_r(dest, ARMRegisters::S0)); … … 148 148 } 149 149 150 void neg32(RegisterID srcDest) 151 { 152 m_assembler.rsbs_r(srcDest, srcDest, ARMAssembler::getOp2(0)); 153 } 154 150 155 void not32(RegisterID dest) 151 156 { … … 165 170 void rshift32(RegisterID shift_amount, RegisterID dest) 166 171 { 167 ARMWord w = m_assembler.getImm(0x1f, ARMRegisters::S0, true);168 ASSERT( !(w & ARMAssembler::OP2_INV_IMM));169 m_assembler.and s_r(ARMRegisters::S0, shift_amount, w);172 ARMWord w = ARMAssembler::getOp2(0x1f); 173 ASSERT(w != ARMAssembler::INVALID_IMM); 174 m_assembler.and_r(ARMRegisters::S0, shift_amount, w); 170 175 171 176 m_assembler.movs_r(dest, m_assembler.asr_r(dest, ARMRegisters::S0)); … … 526 531 } 527 532 533 Jump branchOr32(Condition cond, RegisterID src, RegisterID dest) 534 { 535 ASSERT((cond == Signed) || (cond == Zero) || (cond == NonZero)); 536 or32(src, dest); 537 return Jump(m_assembler.jmp(ARMCondition(cond))); 538 } 539 528 540 void breakpoint() 529 541 { … … 567 579 m_assembler.mov_r(dest, ARMAssembler::getOp2(0)); 568 580 m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond)); 581 } 582 583 void set8(Condition cond, RegisterID left, RegisterID right, RegisterID dest) 584 { 585 // ARM doesn't have byte registers 586 set32(cond, left, right, dest); 587 } 588 589 void set8(Condition cond, Address left, RegisterID right, RegisterID dest) 590 { 591 // ARM doesn't have byte registers 592 load32(left, ARMRegisters::S1); 593 set32(cond, ARMRegisters::S1, right, dest); 594 } 595 596 void set8(Condition cond, RegisterID left, Imm32 right, RegisterID dest) 597 { 598 // ARM doesn't have byte registers 599 set32(cond, left, right, dest); 569 600 } 570 601 … … 580 611 } 581 612 613 void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest) 614 { 615 // ARM doesn't have byte registers 616 setTest32(cond, address, mask, dest); 617 } 618 582 619 void add32(Imm32 imm, RegisterID src, RegisterID dest) 583 620 { … … 687 724 } 688 725 726 void loadDouble(void* address, FPRegisterID dest) 727 { 728 m_assembler.ldr_un_imm(ARMRegisters::S0, (ARMWord)address); 729 m_assembler.fdtr_u(true, dest, ARMRegisters::S0, 0); 730 } 731 689 732 void storeDouble(FPRegisterID src, ImplicitAddress address) 690 733 { … … 703 746 } 704 747 748 void divDouble(FPRegisterID src, FPRegisterID dest) 749 { 750 m_assembler.fdivd_r(dest, dest, src); 751 } 752 753 void divDouble(Address src, FPRegisterID dest) 754 { 755 ASSERT_NOT_REACHED(); // Untested 756 loadDouble(src, ARMRegisters::SD0); 757 divDouble(ARMRegisters::SD0, dest); 758 } 759 705 760 void subDouble(FPRegisterID src, FPRegisterID dest) 706 761 { … … 729 784 m_assembler.fmsr_r(dest, src); 730 785 m_assembler.fsitod_r(dest, dest); 786 } 787 788 void convertInt32ToDouble(Address src, FPRegisterID dest) 789 { 790 ASSERT_NOT_REACHED(); // Untested 791 // flds does not worth the effort here 792 load32(src, ARMRegisters::S1); 793 convertInt32ToDouble(ARMRegisters::S1, dest); 794 } 795 796 void convertInt32ToDouble(AbsoluteAddress src, FPRegisterID dest) 797 { 798 ASSERT_NOT_REACHED(); // Untested 799 // flds does not worth the effort here 800 m_assembler.ldr_un_imm(ARMRegisters::S1, (ARMWord)src.m_ptr); 801 m_assembler.dtr_u(true, ARMRegisters::S1, ARMRegisters::S1, 0); 802 convertInt32ToDouble(ARMRegisters::S1, dest); 731 803 } 732 804 … … 767 839 // If the result is zero, it might have been -0.0, and 0.0 equals to -0.0 768 840 failureCases.append(branchTest32(Zero, dest)); 841 } 842 843 void zeroDouble(FPRegisterID srcDest) 844 { 845 m_assembler.mov_r(ARMRegisters::S0, ARMAssembler::getOp2(0)); 846 convertInt32ToDouble(ARMRegisters::S0, srcDest); 769 847 } 770 848
Note:
See TracChangeset
for help on using the changeset viewer.