--- old/src/cpu/x86/vm/templateInterpreterGenerator_x86_32.cpp 2016-07-13 16:44:59.603461500 -0700 +++ new/src/cpu/x86/vm/templateInterpreterGenerator_x86_32.cpp 2016-07-13 16:44:59.275461500 -0700 @@ -341,6 +341,27 @@ // [ lo(arg) ] // [ hi(arg) ] // + if (kind == Interpreter::java_lang_math_fmaD) { + __ movdbl(xmm2, Address(rsp, 5 * wordSize)); + __ movdbl(xmm1, Address(rsp, 3 * wordSize)); + __ movdbl(xmm0, Address(rsp, 1 * wordSize)); + __ vfmadd231sd(xmm0, xmm1, xmm2); + __ pop(rdi); // get return address + __ mov(rsp, rsi); // set sp to sender sp + __ jmp(rdi); + + return entry_point; + } else if (kind == Interpreter::java_lang_math_fmaF) { + __ movdbl(xmm2, Address(rsp, 3 * wordSize)); + __ movdbl(xmm1, Address(rsp, 2 * wordSize)); + __ movdbl(xmm0, Address(rsp, 1 * wordSize)); + __ vfmadd231ss(xmm0, xmm1, xmm2); + __ pop(rdi); // get return address + __ mov(rsp, rsi); // set sp to sender sp + __ jmp(rdi); + + return entry_point; + } __ fld_d(Address(rsp, 1*wordSize)); switch (kind) {