Changeset 115363 in webkit for trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h
- Timestamp:
- Apr 26, 2012, 2:21:56 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r115141 r115363 771 771 } 772 772 773 void loadDouble(BaseIndex address, FPRegisterID dest) 774 { 775 move(address.index, addressTempRegister); 776 lshift32(TrustedImm32(address.scale), addressTempRegister); 777 add32(address.base, addressTempRegister); 778 loadDouble(Address(addressTempRegister, address.offset), dest); 779 } 780 781 void loadFloat(BaseIndex address, FPRegisterID dest) 782 { 783 UNUSED_PARAM(address); 784 UNUSED_PARAM(dest); 785 unreachableForPlatform(); 786 } 787 788 void moveDouble(FPRegisterID src, FPRegisterID dest) 789 { 790 if (src != dest) 791 m_assembler.vmov(dest, src); 792 } 793 794 void loadDouble(const void* address, FPRegisterID dest) 795 { 796 move(TrustedImmPtr(address), addressTempRegister); 797 m_assembler.vldr(dest, addressTempRegister, 0); 798 } 799 800 void storeDouble(FPRegisterID src, ImplicitAddress address) 773 void loadFloat(ImplicitAddress address, FPRegisterID dest) 801 774 { 802 775 RegisterID base = address.base; … … 810 783 } 811 784 785 m_assembler.flds(ARMRegisters::asSingle(dest), base, offset); 786 } 787 788 void loadDouble(BaseIndex address, FPRegisterID dest) 789 { 790 move(address.index, addressTempRegister); 791 lshift32(TrustedImm32(address.scale), addressTempRegister); 792 add32(address.base, addressTempRegister); 793 loadDouble(Address(addressTempRegister, address.offset), dest); 794 } 795 796 void loadFloat(BaseIndex address, FPRegisterID dest) 797 { 798 move(address.index, addressTempRegister); 799 lshift32(TrustedImm32(address.scale), addressTempRegister); 800 add32(address.base, addressTempRegister); 801 loadFloat(Address(addressTempRegister, address.offset), dest); 802 } 803 804 void moveDouble(FPRegisterID src, FPRegisterID dest) 805 { 806 if (src != dest) 807 m_assembler.vmov(dest, src); 808 } 809 810 void loadDouble(const void* address, FPRegisterID dest) 811 { 812 move(TrustedImmPtr(address), addressTempRegister); 813 m_assembler.vldr(dest, addressTempRegister, 0); 814 } 815 816 void storeDouble(FPRegisterID src, ImplicitAddress address) 817 { 818 RegisterID base = address.base; 819 int32_t offset = address.offset; 820 821 // Arm vfp addresses can be offset by a 9-bit ones-comp immediate, left shifted by 2. 822 if ((offset & 3) || (offset > (255 * 4)) || (offset < -(255 * 4))) { 823 add32(TrustedImm32(offset), base, addressTempRegister); 824 base = addressTempRegister; 825 offset = 0; 826 } 827 812 828 m_assembler.vstr(src, base, offset); 829 } 830 831 void storeFloat(FPRegisterID src, ImplicitAddress address) 832 { 833 RegisterID base = address.base; 834 int32_t offset = address.offset; 835 836 // Arm vfp addresses can be offset by a 9-bit ones-comp immediate, left shifted by 2. 837 if ((offset & 3) || (offset > (255 * 4)) || (offset < -(255 * 4))) { 838 add32(TrustedImm32(offset), base, addressTempRegister); 839 base = addressTempRegister; 840 offset = 0; 841 } 842 843 m_assembler.fsts(ARMRegisters::asSingle(src), base, offset); 813 844 } 814 845 … … 830 861 { 831 862 move(address.index, addressTempRegister); 832 mul32(TrustedImm32(1 << address.scale), addressTempRegister, addressTempRegister);863 lshift32(TrustedImm32(address.scale), addressTempRegister); 833 864 add32(address.base, addressTempRegister); 834 store Double(src, Address(addressTempRegister, address.offset));835 } 836 865 storeFloat(src, Address(addressTempRegister, address.offset)); 866 } 867 837 868 void addDouble(FPRegisterID src, FPRegisterID dest) 838 869 { … … 938 969 void convertFloatToDouble(FPRegisterID src, FPRegisterID dst) 939 970 { 940 UNUSED_PARAM(src); 941 UNUSED_PARAM(dst); 942 unreachableForPlatform(); 971 m_assembler.vcvtds(dst, ARMRegisters::asSingle(src)); 943 972 } 944 973 945 974 void convertDoubleToFloat(FPRegisterID src, FPRegisterID dst) 946 975 { 947 UNUSED_PARAM(src); 948 UNUSED_PARAM(dst); 949 unreachableForPlatform(); 976 m_assembler.vcvtsd(ARMRegisters::asSingle(dst), src); 950 977 } 951 978
Note:
See TracChangeset
for help on using the changeset viewer.