hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
changeset 33465 6063f28a6efb
parent 33089 f4e956ed8b43
child 35071 a0910b1d3e0d
child 35113 b11bd150ed8a
equal deleted inserted replaced
33464:8c06a6558874 33465:6063f28a6efb
  2093                                entry_checkcast_arraycopy);
  2093                                entry_checkcast_arraycopy);
  2094   }
  2094   }
  2095 
  2095 
  2096   void generate_math_stubs() {
  2096   void generate_math_stubs() {
  2097     {
  2097     {
  2098       StubCodeMark mark(this, "StubRoutines", "log");
       
  2099       StubRoutines::_intrinsic_log = (double (*)(double)) __ pc();
       
  2100 
       
  2101       __ fld_d(Address(rsp, 4));
       
  2102       __ flog();
       
  2103       __ ret(0);
       
  2104     }
       
  2105     {
       
  2106       StubCodeMark mark(this, "StubRoutines", "log10");
  2098       StubCodeMark mark(this, "StubRoutines", "log10");
  2107       StubRoutines::_intrinsic_log10 = (double (*)(double)) __ pc();
  2099       StubRoutines::_intrinsic_log10 = (double (*)(double)) __ pc();
  2108 
  2100 
  2109       __ fld_d(Address(rsp, 4));
  2101       __ fld_d(Address(rsp, 4));
  2110       __ flog10();
  2102       __ flog10();
  3063 
  3055 
  3064     return start;
  3056     return start;
  3065 
  3057 
  3066   }
  3058   }
  3067 
  3059 
       
  3060  address generate_libmLog() {
       
  3061    address start = __ pc();
       
  3062 
       
  3063    const XMMRegister x0 = xmm0;
       
  3064    const XMMRegister x1 = xmm1;
       
  3065    const XMMRegister x2 = xmm2;
       
  3066    const XMMRegister x3 = xmm3;
       
  3067 
       
  3068    const XMMRegister x4 = xmm4;
       
  3069    const XMMRegister x5 = xmm5;
       
  3070    const XMMRegister x6 = xmm6;
       
  3071    const XMMRegister x7 = xmm7;
       
  3072 
       
  3073    const Register tmp = rbx;
       
  3074 
       
  3075    BLOCK_COMMENT("Entry:");
       
  3076    __ enter(); // required for proper stackwalking of RuntimeStub frame
       
  3077    __ fast_log(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp);
       
  3078    __ leave(); // required for proper stackwalking of RuntimeStub frame
       
  3079    __ ret(0);
       
  3080 
       
  3081    return start;
       
  3082 
       
  3083  }
       
  3084 
       
  3085 
  3068 
  3086 
  3069   // Safefetch stubs.
  3087   // Safefetch stubs.
  3070   void generate_safefetch(const char* name, int size, address* entry,
  3088   void generate_safefetch(const char* name, int size, address* entry,
  3071                           address* fault_pc, address* continuation_pc) {
  3089                           address* fault_pc, address* continuation_pc) {
  3072     // safefetch signatures:
  3090     // safefetch signatures:
  3286       StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table;
  3304       StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table;
  3287       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
  3305       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
  3288     }
  3306     }
  3289     if (VM_Version::supports_sse2()) {
  3307     if (VM_Version::supports_sse2()) {
  3290       StubRoutines::_dexp = generate_libmExp();
  3308       StubRoutines::_dexp = generate_libmExp();
       
  3309       StubRoutines::_dlog = generate_libmLog();
  3291     }
  3310     }
  3292   }
  3311   }
  3293 
  3312 
  3294 
  3313 
  3295   void generate_all() {
  3314   void generate_all() {