diff src/cpu/ppc/vm/interpreter_ppc.cpp @ 23460:e9e252c83b2b

8139258: PPC64LE: argument passing problem when passing 15 floats in native call Reviewed-by: mdoerr, goetz Contributed-by: asmundak@google.com
author goetz
date Tue, 17 Nov 2015 08:59:21 +0100
parents 231481a06214
children 7d1074c74d60
line wrap: on
line diff
--- a/src/cpu/ppc/vm/interpreter_ppc.cpp	Mon Oct 12 12:20:38 2015 +0200
+++ b/src/cpu/ppc/vm/interpreter_ppc.cpp	Tue Nov 17 08:59:21 2015 +0100
@@ -296,8 +296,16 @@
   __ bind(do_float);
   __ lfs(floatSlot, 0, arg_java);
 #if defined(LINUX)
+  // Linux uses ELF ABI. Both original ELF and ELFv2 ABIs have float
+  // in the least significant word of an argument slot.
+#if defined(VM_LITTLE_ENDIAN)
+  __ stfs(floatSlot, 0, arg_c);
+#else
   __ stfs(floatSlot, 4, arg_c);
+#endif
 #elif defined(AIX)
+  // Although AIX runs on big endian CPU, float is in most significant
+  // word of an argument slot.
   __ stfs(floatSlot, 0, arg_c);
 #else
 #error "unknown OS"