855 // Emit the CompiledIC call idiom 856 void ic_call(address entry, jint method_index = 0); 857 858 // Jumps 859 860 // NOTE: these jumps tranfer to the effective address of dst NOT 861 // the address contained by dst. This is because this is more natural 862 // for jumps/calls. 863 void jump(AddressLiteral dst); 864 void jump_cc(Condition cc, AddressLiteral dst); 865 866 // 32bit can do a case table jump in one instruction but we no longer allow the base 867 // to be installed in the Address class. This jump will tranfers to the address 868 // contained in the location described by entry (not the address of entry) 869 void jump(ArrayAddress entry); 870 871 // Floating 872 873 void andpd(XMMRegister dst, Address src) { Assembler::andpd(dst, src); } 874 void andpd(XMMRegister dst, AddressLiteral src); 875 876 void andps(XMMRegister dst, XMMRegister src) { Assembler::andps(dst, src); } 877 void andps(XMMRegister dst, Address src) { Assembler::andps(dst, src); } 878 void andps(XMMRegister dst, AddressLiteral src); 879 880 void comiss(XMMRegister dst, XMMRegister src) { Assembler::comiss(dst, src); } 881 void comiss(XMMRegister dst, Address src) { Assembler::comiss(dst, src); } 882 void comiss(XMMRegister dst, AddressLiteral src); 883 884 void comisd(XMMRegister dst, XMMRegister src) { Assembler::comisd(dst, src); } 885 void comisd(XMMRegister dst, Address src) { Assembler::comisd(dst, src); } 886 void comisd(XMMRegister dst, AddressLiteral src); 887 888 void fadd_s(Address src) { Assembler::fadd_s(src); } 889 void fadd_s(AddressLiteral src) { Assembler::fadd_s(as_Address(src)); } 890 891 void fldcw(Address src) { Assembler::fldcw(src); } 892 void fldcw(AddressLiteral src); 893 894 void fld_s(int index) { Assembler::fld_s(index); } 895 void fld_s(Address src) { Assembler::fld_s(src); } 896 void fld_s(AddressLiteral src); 897 898 void fld_d(Address src) { Assembler::fld_d(src); } 899 void fld_d(AddressLiteral src); 900 901 void fld_x(Address src) { Assembler::fld_x(src); } 902 void fld_x(AddressLiteral src); 903 904 void fmul_s(Address src) { Assembler::fmul_s(src); } 905 void fmul_s(AddressLiteral src) { Assembler::fmul_s(as_Address(src)); } 906 907 void ldmxcsr(Address src) { Assembler::ldmxcsr(src); } 908 void ldmxcsr(AddressLiteral src); 909 910 // compute pow(x,y) and exp(x) with x86 instructions. Don't cover 911 // all corner cases and may result in NaN and require fallback to a 912 // runtime call. 913 void fast_pow(); 914 void fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 915 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 916 Register rax, Register rcx, Register rdx, Register tmp); 917 918 void fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 919 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 920 Register rax, Register rcx, Register rdx, Register tmp1 LP64_ONLY(COMMA Register tmp2)); 921 void fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, 922 XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register rax, Register rcx, 923 Register rdx NOT_LP64(COMMA Register tmp) LP64_ONLY(COMMA Register tmp1) 924 LP64_ONLY(COMMA Register tmp2) LP64_ONLY(COMMA Register tmp3) LP64_ONLY(COMMA Register tmp4)); 925 926 void increase_precision(); 927 void restore_precision(); 928 929 private: 930 931 // call runtime as a fallback for trig functions and pow/exp. 932 void fp_runtime_fallback(address runtime_entry, int nb_args, int num_fpu_regs_in_use); 933 934 // these are private because users should be doing movflt/movdbl 935 936 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } 937 void movss(XMMRegister dst, XMMRegister src) { Assembler::movss(dst, src); } 938 void movss(XMMRegister dst, Address src) { Assembler::movss(dst, src); } 939 void movss(XMMRegister dst, AddressLiteral src); 940 941 void movlpd(XMMRegister dst, Address src) {Assembler::movlpd(dst, src); } 942 void movlpd(XMMRegister dst, AddressLiteral src); 943 944 public: 945 946 void addsd(XMMRegister dst, XMMRegister src) { Assembler::addsd(dst, src); } 947 void addsd(XMMRegister dst, Address src) { Assembler::addsd(dst, src); } 948 void addsd(XMMRegister dst, AddressLiteral src); 949 950 void addss(XMMRegister dst, XMMRegister src) { Assembler::addss(dst, src); } 951 void addss(XMMRegister dst, Address src) { Assembler::addss(dst, src); } 952 void addss(XMMRegister dst, AddressLiteral src); 953 954 void divsd(XMMRegister dst, XMMRegister src) { Assembler::divsd(dst, src); } 955 void divsd(XMMRegister dst, Address src) { Assembler::divsd(dst, src); } 956 void divsd(XMMRegister dst, AddressLiteral src); 957 958 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } 959 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } 960 void divss(XMMRegister dst, AddressLiteral src); 961 962 // Move Unaligned Double Quadword 963 void movdqu(Address dst, XMMRegister src); 964 void movdqu(XMMRegister dst, Address src); 965 void movdqu(XMMRegister dst, XMMRegister src); 966 void movdqu(XMMRegister dst, AddressLiteral src); 967 // AVX Unaligned forms 968 void vmovdqu(Address dst, XMMRegister src); 969 void vmovdqu(XMMRegister dst, Address src); 970 void vmovdqu(XMMRegister dst, XMMRegister src); 971 void vmovdqu(XMMRegister dst, AddressLiteral src); 972 | 855 // Emit the CompiledIC call idiom 856 void ic_call(address entry, jint method_index = 0); 857 858 // Jumps 859 860 // NOTE: these jumps tranfer to the effective address of dst NOT 861 // the address contained by dst. This is because this is more natural 862 // for jumps/calls. 863 void jump(AddressLiteral dst); 864 void jump_cc(Condition cc, AddressLiteral dst); 865 866 // 32bit can do a case table jump in one instruction but we no longer allow the base 867 // to be installed in the Address class. This jump will tranfers to the address 868 // contained in the location described by entry (not the address of entry) 869 void jump(ArrayAddress entry); 870 871 // Floating 872 873 void andpd(XMMRegister dst, Address src) { Assembler::andpd(dst, src); } 874 void andpd(XMMRegister dst, AddressLiteral src); 875 void andpd(XMMRegister dst, XMMRegister src) { Assembler::andpd(dst, src); } 876 877 void andps(XMMRegister dst, XMMRegister src) { Assembler::andps(dst, src); } 878 void andps(XMMRegister dst, Address src) { Assembler::andps(dst, src); } 879 void andps(XMMRegister dst, AddressLiteral src); 880 881 void comiss(XMMRegister dst, XMMRegister src) { Assembler::comiss(dst, src); } 882 void comiss(XMMRegister dst, Address src) { Assembler::comiss(dst, src); } 883 void comiss(XMMRegister dst, AddressLiteral src); 884 885 void comisd(XMMRegister dst, XMMRegister src) { Assembler::comisd(dst, src); } 886 void comisd(XMMRegister dst, Address src) { Assembler::comisd(dst, src); } 887 void comisd(XMMRegister dst, AddressLiteral src); 888 889 void fadd_s(Address src) { Assembler::fadd_s(src); } 890 void fadd_s(AddressLiteral src) { Assembler::fadd_s(as_Address(src)); } 891 892 void fldcw(Address src) { Assembler::fldcw(src); } 893 void fldcw(AddressLiteral src); 894 895 void fld_s(int index) { Assembler::fld_s(index); } 896 void fld_s(Address src) { Assembler::fld_s(src); } 897 void fld_s(AddressLiteral src); 898 899 void fld_d(Address src) { Assembler::fld_d(src); } 900 void fld_d(AddressLiteral src); 901 902 void fld_x(Address src) { Assembler::fld_x(src); } 903 void fld_x(AddressLiteral src); 904 905 void fmul_s(Address src) { Assembler::fmul_s(src); } 906 void fmul_s(AddressLiteral src) { Assembler::fmul_s(as_Address(src)); } 907 908 void ldmxcsr(Address src) { Assembler::ldmxcsr(src); } 909 void ldmxcsr(AddressLiteral src); 910 911 void fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 912 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 913 Register rax, Register rcx, Register rdx, Register tmp); 914 915 void fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 916 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 917 Register rax, Register rcx, Register rdx, Register tmp1 LP64_ONLY(COMMA Register tmp2)); 918 919 void fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, 920 XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register rax, Register rcx, 921 Register rdx NOT_LP64(COMMA Register tmp) LP64_ONLY(COMMA Register tmp1) 922 LP64_ONLY(COMMA Register tmp2) LP64_ONLY(COMMA Register tmp3) LP64_ONLY(COMMA Register tmp4)); 923 924 void fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 925 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 926 Register rax, Register rbx LP64_ONLY(COMMA Register rcx), Register rdx 927 LP64_ONLY(COMMA Register tmp1) LP64_ONLY(COMMA Register tmp2) 928 LP64_ONLY(COMMA Register tmp3) LP64_ONLY(COMMA Register tmp4)); 929 930 void fast_cos(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 931 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 932 Register rax, Register rcx, Register rdx NOT_LP64(COMMA Register tmp) 933 LP64_ONLY(COMMA Register r8) LP64_ONLY(COMMA Register r9) 934 LP64_ONLY(COMMA Register r10) LP64_ONLY(COMMA Register r11)); 935 936 #ifndef _LP64 937 void libm_sincos_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, 938 Register edx, Register ebx, Register esi, Register edi, 939 Register ebp, Register esp); 940 void libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, 941 Register esi, Register edi, Register ebp, Register esp); 942 #endif 943 944 void increase_precision(); 945 void restore_precision(); 946 947 private: 948 949 // call runtime as a fallback for trig functions and pow/exp. 950 void fp_runtime_fallback(address runtime_entry, int nb_args, int num_fpu_regs_in_use); 951 952 // these are private because users should be doing movflt/movdbl 953 954 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } 955 void movss(XMMRegister dst, XMMRegister src) { Assembler::movss(dst, src); } 956 void movss(XMMRegister dst, Address src) { Assembler::movss(dst, src); } 957 void movss(XMMRegister dst, AddressLiteral src); 958 959 void movlpd(XMMRegister dst, Address src) {Assembler::movlpd(dst, src); } 960 void movlpd(XMMRegister dst, AddressLiteral src); 961 962 public: 963 964 void addsd(XMMRegister dst, XMMRegister src) { Assembler::addsd(dst, src); } 965 void addsd(XMMRegister dst, Address src) { Assembler::addsd(dst, src); } 966 void addsd(XMMRegister dst, AddressLiteral src); 967 968 void addss(XMMRegister dst, XMMRegister src) { Assembler::addss(dst, src); } 969 void addss(XMMRegister dst, Address src) { Assembler::addss(dst, src); } 970 void addss(XMMRegister dst, AddressLiteral src); 971 972 void addpd(XMMRegister dst, XMMRegister src) { Assembler::addpd(dst, src); } 973 void addpd(XMMRegister dst, Address src) { Assembler::addpd(dst, src); } 974 void addpd(XMMRegister dst, AddressLiteral src); 975 976 void divsd(XMMRegister dst, XMMRegister src) { Assembler::divsd(dst, src); } 977 void divsd(XMMRegister dst, Address src) { Assembler::divsd(dst, src); } 978 void divsd(XMMRegister dst, AddressLiteral src); 979 980 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } 981 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } 982 void divss(XMMRegister dst, AddressLiteral src); 983 984 // Move Unaligned Double Quadword 985 void movdqu(Address dst, XMMRegister src); 986 void movdqu(XMMRegister dst, Address src); 987 void movdqu(XMMRegister dst, XMMRegister src); 988 void movdqu(XMMRegister dst, AddressLiteral src); 989 // AVX Unaligned forms 990 void vmovdqu(Address dst, XMMRegister src); 991 void vmovdqu(XMMRegister dst, Address src); 992 void vmovdqu(XMMRegister dst, XMMRegister src); 993 void vmovdqu(XMMRegister dst, AddressLiteral src); 994 |