893 894 void fld_d(Address src) { Assembler::fld_d(src); } 895 void fld_d(AddressLiteral src); 896 897 void fld_x(Address src) { Assembler::fld_x(src); } 898 void fld_x(AddressLiteral src); 899 900 void fmul_s(Address src) { Assembler::fmul_s(src); } 901 void fmul_s(AddressLiteral src) { Assembler::fmul_s(as_Address(src)); } 902 903 void ldmxcsr(Address src) { Assembler::ldmxcsr(src); } 904 void ldmxcsr(AddressLiteral src); 905 906 // compute pow(x,y) and exp(x) with x86 instructions. Don't cover 907 // all corner cases and may result in NaN and require fallback to a 908 // runtime call. 909 void fast_pow(); 910 void fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 911 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 912 Register rax, Register rcx, Register rdx, Register tmp); 913 void increase_precision(); 914 void restore_precision(); 915 916 // computes pow(x,y). Fallback to runtime call included. 917 void pow_with_fallback(int num_fpu_regs_in_use) { pow_or_exp(num_fpu_regs_in_use); } 918 919 private: 920 921 // call runtime as a fallback for trig functions and pow/exp. 922 void fp_runtime_fallback(address runtime_entry, int nb_args, int num_fpu_regs_in_use); 923 924 // computes 2^(Ylog2X); Ylog2X in ST(0) 925 void pow_exp_core_encoding(); 926 927 // computes pow(x,y) or exp(x). Fallback to runtime call included. 928 void pow_or_exp(int num_fpu_regs_in_use); 929 930 // these are private because users should be doing movflt/movdbl 931 932 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } | 893 894 void fld_d(Address src) { Assembler::fld_d(src); } 895 void fld_d(AddressLiteral src); 896 897 void fld_x(Address src) { Assembler::fld_x(src); } 898 void fld_x(AddressLiteral src); 899 900 void fmul_s(Address src) { Assembler::fmul_s(src); } 901 void fmul_s(AddressLiteral src) { Assembler::fmul_s(as_Address(src)); } 902 903 void ldmxcsr(Address src) { Assembler::ldmxcsr(src); } 904 void ldmxcsr(AddressLiteral src); 905 906 // compute pow(x,y) and exp(x) with x86 instructions. Don't cover 907 // all corner cases and may result in NaN and require fallback to a 908 // runtime call. 909 void fast_pow(); 910 void fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 911 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 912 Register rax, Register rcx, Register rdx, Register tmp); 913 #ifdef _LP64 914 void fast_log(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 tmp1, Register tmp2); 917 #endif 918 #ifndef _LP64 919 void fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, 920 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, 921 Register rax, Register rcx, Register rdx, Register tmp); 922 #endif 923 924 void increase_precision(); 925 void restore_precision(); 926 927 // computes pow(x,y). Fallback to runtime call included. 928 void pow_with_fallback(int num_fpu_regs_in_use) { pow_or_exp(num_fpu_regs_in_use); } 929 930 private: 931 932 // call runtime as a fallback for trig functions and pow/exp. 933 void fp_runtime_fallback(address runtime_entry, int nb_args, int num_fpu_regs_in_use); 934 935 // computes 2^(Ylog2X); Ylog2X in ST(0) 936 void pow_exp_core_encoding(); 937 938 // computes pow(x,y) or exp(x). Fallback to runtime call included. 939 void pow_or_exp(int num_fpu_regs_in_use); 940 941 // these are private because users should be doing movflt/movdbl 942 943 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } |