367 // stack: [ ret adr ] <-- rsp |
367 // stack: [ ret adr ] <-- rsp |
368 // [ lo(arg) ] |
368 // [ lo(arg) ] |
369 // [ hi(arg) ] |
369 // [ hi(arg) ] |
370 // |
370 // |
371 |
371 |
372 |
372 if (kind == Interpreter::java_lang_math_fmaD) { |
373 if (kind == Interpreter::java_lang_math_sqrt) { |
373 __ movdbl(xmm0, Address(rsp, wordSize)); |
|
374 __ movdbl(xmm1, Address(rsp, 3 * wordSize)); |
|
375 __ movdbl(xmm2, Address(rsp, 5 * wordSize)); |
|
376 __ fmad(xmm0, xmm1, xmm2, xmm0); |
|
377 } else if (kind == Interpreter::java_lang_math_fmaF) { |
|
378 __ movflt(xmm0, Address(rsp, wordSize)); |
|
379 __ movflt(xmm1, Address(rsp, 2 * wordSize)); |
|
380 __ movflt(xmm2, Address(rsp, 3 * wordSize)); |
|
381 __ fmaf(xmm0, xmm1, xmm2, xmm0); |
|
382 } else if (kind == Interpreter::java_lang_math_sqrt) { |
374 __ sqrtsd(xmm0, Address(rsp, wordSize)); |
383 __ sqrtsd(xmm0, Address(rsp, wordSize)); |
375 } else if (kind == Interpreter::java_lang_math_exp) { |
384 } else if (kind == Interpreter::java_lang_math_exp) { |
376 __ movdbl(xmm0, Address(rsp, wordSize)); |
385 __ movdbl(xmm0, Address(rsp, wordSize)); |
377 if (StubRoutines::dexp() != NULL) { |
386 if (StubRoutines::dexp() != NULL) { |
378 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dexp()))); |
387 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dexp()))); |