hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
changeset 33089 f4e956ed8b43
parent 33066 d98eab8215c4
child 33465 6063f28a6efb
equal deleted inserted replaced
33088:34fe49ecee13 33089:f4e956ed8b43
  2133       __ fld_d(Address(rsp, 4));
  2133       __ fld_d(Address(rsp, 4));
  2134       __ trigfunc('t');
  2134       __ trigfunc('t');
  2135       __ ret(0);
  2135       __ ret(0);
  2136     }
  2136     }
  2137     {
  2137     {
  2138       StubCodeMark mark(this, "StubRoutines", "exp");
       
  2139       StubRoutines::_intrinsic_exp = (double (*)(double)) __ pc();
       
  2140 
       
  2141       __ fld_d(Address(rsp, 4));
       
  2142       __ exp_with_fallback(0);
       
  2143       __ ret(0);
       
  2144     }
       
  2145     {
       
  2146       StubCodeMark mark(this, "StubRoutines", "pow");
  2138       StubCodeMark mark(this, "StubRoutines", "pow");
  2147       StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc();
  2139       StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc();
  2148 
  2140 
  2149       __ fld_d(Address(rsp, 12));
  2141       __ fld_d(Address(rsp, 12));
  2150       __ fld_d(Address(rsp, 4));
  2142       __ fld_d(Address(rsp, 4));
  3046     __ ret(0);
  3038     __ ret(0);
  3047 
  3039 
  3048     return start;
  3040     return start;
  3049   }
  3041   }
  3050 
  3042 
       
  3043  address generate_libmExp() {
       
  3044     address start = __ pc();
       
  3045 
       
  3046     const XMMRegister x0  = xmm0;
       
  3047     const XMMRegister x1  = xmm1;
       
  3048     const XMMRegister x2  = xmm2;
       
  3049     const XMMRegister x3  = xmm3;
       
  3050 
       
  3051     const XMMRegister x4  = xmm4;
       
  3052     const XMMRegister x5  = xmm5;
       
  3053     const XMMRegister x6  = xmm6;
       
  3054     const XMMRegister x7  = xmm7;
       
  3055 
       
  3056     const Register tmp   = rbx;
       
  3057 
       
  3058     BLOCK_COMMENT("Entry:");
       
  3059     __ enter(); // required for proper stackwalking of RuntimeStub frame
       
  3060     __ fast_exp(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp);
       
  3061     __ leave(); // required for proper stackwalking of RuntimeStub frame
       
  3062     __ ret(0);
       
  3063 
       
  3064     return start;
       
  3065 
       
  3066   }
       
  3067 
       
  3068 
  3051   // Safefetch stubs.
  3069   // Safefetch stubs.
  3052   void generate_safefetch(const char* name, int size, address* entry,
  3070   void generate_safefetch(const char* name, int size, address* entry,
  3053                           address* fault_pc, address* continuation_pc) {
  3071                           address* fault_pc, address* continuation_pc) {
  3054     // safefetch signatures:
  3072     // safefetch signatures:
  3055     //   int      SafeFetch32(int*      adr, int      errValue);
  3073     //   int      SafeFetch32(int*      adr, int      errValue);
  3266       bool supports_clmul = VM_Version::supports_clmul();
  3284       bool supports_clmul = VM_Version::supports_clmul();
  3267       StubRoutines::x86::generate_CRC32C_table(supports_clmul);
  3285       StubRoutines::x86::generate_CRC32C_table(supports_clmul);
  3268       StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table;
  3286       StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table;
  3269       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
  3287       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
  3270     }
  3288     }
       
  3289     if (VM_Version::supports_sse2()) {
       
  3290       StubRoutines::_dexp = generate_libmExp();
       
  3291     }
  3271   }
  3292   }
  3272 
  3293 
  3273 
  3294 
  3274   void generate_all() {
  3295   void generate_all() {
  3275     // Generates all stubs and initializes the entry points
  3296     // Generates all stubs and initializes the entry points