hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
changeset 35146 9ebfec283f56
parent 35135 dd2ce9021031
child 35154 a9b3c1984a01
equal deleted inserted replaced
35145:a4ffa2fa7f4d 35146:9ebfec283f56
  2124 
  2124 
  2125       __ fld_d(Address(rsp, 4));
  2125       __ fld_d(Address(rsp, 4));
  2126       __ trigfunc('t');
  2126       __ trigfunc('t');
  2127       __ ret(0);
  2127       __ ret(0);
  2128     }
  2128     }
  2129     {
       
  2130       StubCodeMark mark(this, "StubRoutines", "pow");
       
  2131       StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc();
       
  2132 
       
  2133       __ fld_d(Address(rsp, 12));
       
  2134       __ fld_d(Address(rsp, 4));
       
  2135       __ pow_with_fallback(0);
       
  2136       __ ret(0);
       
  2137     }
       
  2138   }
  2129   }
  2139 
  2130 
  2140   // AES intrinsic stubs
  2131   // AES intrinsic stubs
  2141   enum {AESBlockSize = 16};
  2132   enum {AESBlockSize = 16};
  2142 
  2133 
  3080 
  3071 
  3081    return start;
  3072    return start;
  3082 
  3073 
  3083  }
  3074  }
  3084 
  3075 
       
  3076  address generate_libmPow() {
       
  3077    address start = __ pc();
       
  3078 
       
  3079    const XMMRegister x0 = xmm0;
       
  3080    const XMMRegister x1 = xmm1;
       
  3081    const XMMRegister x2 = xmm2;
       
  3082    const XMMRegister x3 = xmm3;
       
  3083 
       
  3084    const XMMRegister x4 = xmm4;
       
  3085    const XMMRegister x5 = xmm5;
       
  3086    const XMMRegister x6 = xmm6;
       
  3087    const XMMRegister x7 = xmm7;
       
  3088 
       
  3089    const Register tmp = rbx;
       
  3090 
       
  3091    BLOCK_COMMENT("Entry:");
       
  3092    __ enter(); // required for proper stackwalking of RuntimeStub frame
       
  3093    __ fast_pow(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp);
       
  3094    __ leave(); // required for proper stackwalking of RuntimeStub frame
       
  3095    __ ret(0);
       
  3096 
       
  3097    return start;
       
  3098 
       
  3099  }
  3085 
  3100 
  3086 
  3101 
  3087   // Safefetch stubs.
  3102   // Safefetch stubs.
  3088   void generate_safefetch(const char* name, int size, address* entry,
  3103   void generate_safefetch(const char* name, int size, address* entry,
  3089                           address* fault_pc, address* continuation_pc) {
  3104                           address* fault_pc, address* continuation_pc) {
  3308       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
  3323       StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
  3309     }
  3324     }
  3310     if (VM_Version::supports_sse2()) {
  3325     if (VM_Version::supports_sse2()) {
  3311       StubRoutines::_dexp = generate_libmExp();
  3326       StubRoutines::_dexp = generate_libmExp();
  3312       StubRoutines::_dlog = generate_libmLog();
  3327       StubRoutines::_dlog = generate_libmLog();
       
  3328       StubRoutines::_dpow = generate_libmPow();
  3313     }
  3329     }
  3314   }
  3330   }
  3315 
  3331 
  3316 
  3332 
  3317   void generate_all() {
  3333   void generate_all() {