Changeset 58091 in webkit for trunk/JavaScriptCore/assembler/MacroAssemblerARM.h
- Timestamp:
- Apr 22, 2010, 6:24:56 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssemblerARM.h
r56348 r58091 1 1 /* 2 2 * Copyright (C) 2008 Apple Inc. 3 * Copyright (C) 2009 University of Szeged3 * Copyright (C) 2009, 2010 University of Szeged 4 4 * All rights reserved. 5 5 * … … 475 475 void jump(RegisterID target) 476 476 { 477 m ove(target, ARMRegisters::pc);477 m_assembler.bx(target); 478 478 } 479 479 … … 567 567 Call nearCall() 568 568 { 569 #if WTF_ARM_ARCH_AT_LEAST(5) 570 ensureSpace(2 * sizeof(ARMWord), sizeof(ARMWord)); 571 m_assembler.loadBranchTarget(ARMRegisters::S1, ARMAssembler::AL, true); 572 return Call(m_assembler.blx(ARMRegisters::S1), Call::LinkableNear); 573 #else 569 574 prepareCall(); 570 575 return Call(m_assembler.jmp(ARMAssembler::AL, true), Call::LinkableNear); 576 #endif 571 577 } 572 578 573 579 Call call(RegisterID target) 574 580 { 575 prepareCall(); 576 move(ARMRegisters::pc, target); 581 m_assembler.blx(target); 577 582 JmpSrc jmpSrc; 578 583 return Call(jmpSrc, Call::None); … … 586 591 void ret() 587 592 { 588 m_assembler. mov_r(ARMRegisters::pc,linkRegister);593 m_assembler.bx(linkRegister); 589 594 } 590 595 … … 682 687 Call call() 683 688 { 689 #if WTF_ARM_ARCH_AT_LEAST(5) 690 ensureSpace(2 * sizeof(ARMWord), sizeof(ARMWord)); 691 m_assembler.loadBranchTarget(ARMRegisters::S1, ARMAssembler::AL, true); 692 return Call(m_assembler.blx(ARMRegisters::S1), Call::Linkable); 693 #else 684 694 prepareCall(); 685 695 return Call(m_assembler.jmp(ARMAssembler::AL, true), Call::Linkable); 696 #endif 686 697 } 687 698 … … 887 898 void prepareCall() 888 899 { 900 #if WTF_ARM_ARCH_VERSION < 5 889 901 ensureSpace(2 * sizeof(ARMWord), sizeof(ARMWord)); 890 902 891 903 m_assembler.mov_r(linkRegister, ARMRegisters::pc); 904 #endif 892 905 } 893 906 894 907 void call32(RegisterID base, int32_t offset) 895 908 { 909 #if WTF_ARM_ARCH_AT_LEAST(5) 910 int targetReg = ARMRegisters::S1; 911 #else 912 int targetReg = ARMRegisters::pc; 913 #endif 914 int tmpReg = ARMRegisters::S1; 915 896 916 if (base == ARMRegisters::sp) 897 917 offset += 4; … … 900 920 if (offset <= 0xfff) { 901 921 prepareCall(); 902 m_assembler.dtr_u(true, ARMRegisters::pc, base, offset);922 m_assembler.dtr_u(true, targetReg, base, offset); 903 923 } else if (offset <= 0xfffff) { 904 m_assembler.add_r( ARMRegisters::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8));924 m_assembler.add_r(tmpReg, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8)); 905 925 prepareCall(); 906 m_assembler.dtr_u(true, ARMRegisters::pc, ARMRegisters::S0, offset & 0xfff);926 m_assembler.dtr_u(true, targetReg, tmpReg, offset & 0xfff); 907 927 } else { 908 ARMWord reg = m_assembler.getImm(offset, ARMRegisters::S0);928 ARMWord reg = m_assembler.getImm(offset, tmpReg); 909 929 prepareCall(); 910 m_assembler.dtr_ur(true, ARMRegisters::pc, base, reg);930 m_assembler.dtr_ur(true, targetReg, base, reg); 911 931 } 912 932 } else { … … 914 934 if (offset <= 0xfff) { 915 935 prepareCall(); 916 m_assembler.dtr_d(true, ARMRegisters::pc, base, offset);936 m_assembler.dtr_d(true, targetReg, base, offset); 917 937 } else if (offset <= 0xfffff) { 918 m_assembler.sub_r( ARMRegisters::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8));938 m_assembler.sub_r(tmpReg, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8)); 919 939 prepareCall(); 920 m_assembler.dtr_d(true, ARMRegisters::pc, ARMRegisters::S0, offset & 0xfff);940 m_assembler.dtr_d(true, targetReg, tmpReg, offset & 0xfff); 921 941 } else { 922 ARMWord reg = m_assembler.getImm(offset, ARMRegisters::S0);942 ARMWord reg = m_assembler.getImm(offset, tmpReg); 923 943 prepareCall(); 924 m_assembler.dtr_dr(true, ARMRegisters::pc, base, reg);944 m_assembler.dtr_dr(true, targetReg, base, reg); 925 945 } 926 946 } 947 #if WTF_ARM_ARCH_AT_LEAST(5) 948 m_assembler.blx(targetReg); 949 #endif 927 950 } 928 951
Note:
See TracChangeset
for help on using the changeset viewer.