--- openjdk/hotspot/src/cpu/aarch32/vm/frame_aarch32.cpp 2016-11-11 13:43:39.000000000 +0300
+++ openjdk/hotspot/src/cpu/aarch32/vm/frame_aarch32.cpp 2016-11-11 13:43:39.000000000 +0300
@@ -653,15 +653,13 @@
intptr_t* tos_addr;
if (method->is_native()) {
- // TODO : ensure AARCH64 does the same as Intel here i.e. push d0 then r0
- // Prior to calling into the runtime to report the method_exit the possible
- // return value is pushed to the native stack. If the result is a jfloat/jdouble
- // then ST0 is saved before EAX/EDX. See the note in generate_native_result
tos_addr = (intptr_t*)sp();
if (type == T_FLOAT || type == T_DOUBLE) {
- // This is times two because we do a push(ltos) after pushing XMM0
+ // This is times two because we do a push(ltos) after pushing D0
// and that takes two interpreter stack slots.
+#ifdef HARD_FLOAT_CC
tos_addr += 2 * Interpreter::stackElementWords;
+#endif
}
} else {
tos_addr = (intptr_t*)interpreter_frame_tos_address();