235 // called accidentally since the SharedRuntime entry points will 236 // not work for JDK 1.2. 237 // 238 // We no longer need to check for JDK 1.2 since it's EOL'ed. 239 // The following check existed in pre 1.6 implementation, 240 // if (Universe::is_jdk12x_version()) { 241 // __ should_not_reach_here(); 242 // } 243 // Universe::is_jdk12x_version() always returns false since 244 // the JDK version is not yet determined when this method is called. 245 // This method is called during interpreter_init() whereas 246 // JDK version is only determined when universe2_init() is called. 247 248 // Note: For JDK 1.3 StrictMath exists and Math.sin/cos/sqrt are 249 // java methods. Interpreter::method_kind(...) will select 250 // this entry point for the corresponding methods in JDK 1.3. 251 // get argument 252 253 if (kind == Interpreter::java_lang_math_sqrt) { 254 __ sqrtsd(xmm0, Address(rsp, wordSize)); 255 } else { 256 __ fld_d(Address(rsp, wordSize)); 257 switch (kind) { 258 case Interpreter::java_lang_math_sin : 259 __ trigfunc('s'); 260 break; 261 case Interpreter::java_lang_math_cos : 262 __ trigfunc('c'); 263 break; 264 case Interpreter::java_lang_math_tan : 265 __ trigfunc('t'); 266 break; 267 case Interpreter::java_lang_math_abs: 268 __ fabs(); 269 break; 270 case Interpreter::java_lang_math_log: 271 __ flog(); 272 break; 273 case Interpreter::java_lang_math_log10: 274 __ flog10(); 275 break; 276 case Interpreter::java_lang_math_pow: 277 __ fld_d(Address(rsp, 3*wordSize)); // second argument (one 278 // empty stack slot) 279 __ pow_with_fallback(0); 280 break; 281 case Interpreter::java_lang_math_exp: 282 __ exp_with_fallback(0); 283 break; 284 default : 285 ShouldNotReachHere(); 286 } 287 288 // return double result in xmm0 for interpreter and compilers. 289 __ subptr(rsp, 2*wordSize); 290 // Round to 64bit precision 291 __ fstp_d(Address(rsp, 0)); 292 __ movdbl(xmm0, Address(rsp, 0)); 293 __ addptr(rsp, 2*wordSize); 294 } 295 296 297 __ pop(rax); 298 __ mov(rsp, r13); 299 __ jmp(rax); 300 301 return entry_point; 302 } 303 | 235 // called accidentally since the SharedRuntime entry points will 236 // not work for JDK 1.2. 237 // 238 // We no longer need to check for JDK 1.2 since it's EOL'ed. 239 // The following check existed in pre 1.6 implementation, 240 // if (Universe::is_jdk12x_version()) { 241 // __ should_not_reach_here(); 242 // } 243 // Universe::is_jdk12x_version() always returns false since 244 // the JDK version is not yet determined when this method is called. 245 // This method is called during interpreter_init() whereas 246 // JDK version is only determined when universe2_init() is called. 247 248 // Note: For JDK 1.3 StrictMath exists and Math.sin/cos/sqrt are 249 // java methods. Interpreter::method_kind(...) will select 250 // this entry point for the corresponding methods in JDK 1.3. 251 // get argument 252 253 if (kind == Interpreter::java_lang_math_sqrt) { 254 __ sqrtsd(xmm0, Address(rsp, wordSize)); 255 } else if (kind == Interpreter::java_lang_math_exp) { 256 __ movdbl(xmm0, Address(rsp, wordSize)); 257 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dexp()))); 258 } else { 259 __ fld_d(Address(rsp, wordSize)); 260 switch (kind) { 261 case Interpreter::java_lang_math_sin : 262 __ trigfunc('s'); 263 break; 264 case Interpreter::java_lang_math_cos : 265 __ trigfunc('c'); 266 break; 267 case Interpreter::java_lang_math_tan : 268 __ trigfunc('t'); 269 break; 270 case Interpreter::java_lang_math_abs: 271 __ fabs(); 272 break; 273 case Interpreter::java_lang_math_log: 274 __ flog(); 275 break; 276 case Interpreter::java_lang_math_log10: 277 __ flog10(); 278 break; 279 case Interpreter::java_lang_math_pow: 280 __ fld_d(Address(rsp, 3*wordSize)); // second argument (one 281 // empty stack slot) 282 __ pow_with_fallback(0); 283 break; 284 default : 285 ShouldNotReachHere(); 286 } 287 288 // return double result in xmm0 for interpreter and compilers. 289 __ subptr(rsp, 2*wordSize); 290 // Round to 64bit precision 291 __ fstp_d(Address(rsp, 0)); 292 __ movdbl(xmm0, Address(rsp, 0)); 293 __ addptr(rsp, 2*wordSize); 294 } 295 296 297 __ pop(rax); 298 __ mov(rsp, r13); 299 __ jmp(rax); 300 301 return entry_point; 302 } 303 |