< prev index next >

src/cpu/x86/vm/templateInterpreterGenerator_x86_32.cpp

Print this page

        

@@ -339,10 +339,31 @@
   //
   // stack: [ ret adr ] <-- rsp
   //        [ 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) {
     case Interpreter::java_lang_math_sin :
         __ subptr(rsp, 2 * wordSize);
< prev index next >