--- old/src/share/vm/runtime/stackValue.cpp Thu Feb 18 19:05:39 2010 +++ new/src/share/vm/runtime/stackValue.cpp Thu Feb 18 19:05:39 2010 @@ -58,15 +58,9 @@ // switch( loc.type() ) { case Location::float_in_dbl: { // Holds a float in a double register? - // The callee has no clue whether the register holds a float, - // double or is unused. He always saves a double. Here we know - // a double was saved, but we only want a float back. Narrow the - // saved double to the float that the JVM wants. assert( loc.is_register(), "floats always saved to stack in 1 word" ); - union { intptr_t p; jfloat jf; } value; - value.p = (intptr_t) CONST64(0xDEADDEAFDEADDEAF); - value.jf = (jfloat) *(jdouble*) value_addr; - return new StackValue(value.p); // 64-bit high half is stack junk + // Call platform specific function defined in sharedRuntime_.cpp. + return create_float_stack_value(value_addr); } case Location::int_in_long: { // Holds an int in a long register? // The callee has no clue whether the register holds an int,