< prev index next >

src/cpu/x86/vm/macroAssembler_x86.hpp

Print this page




 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 


< prev index next >