--- old/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Thu Feb 18 19:05:38 2010 +++ new/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Thu Feb 18 19:05:38 2010 @@ -310,6 +310,18 @@ } // --------------------------------------------------------------------------- +// This method is used to read a float value which is saved on stack as double +// (see RegisterSaver::save_live_registers() above). +StackValue* StackValue::create_float_stack_value(address value_addr) { + union { intptr_t p; jfloat jf; } value; + value.p = (intptr_t) CONST64(0xDEADDEAFDEADDEAF); + // XMM registers are used for float values and they are saved as double + // without conversion. Read lowest 32 bit to get float value. + value.jf = *(jfloat*) value_addr; + return new StackValue(value.p); // 64-bit high half is stack junk +} + +// --------------------------------------------------------------------------- // Read the array of BasicTypes from a signature, and compute where the // arguments should go. Values in the VMRegPair regs array refer to 4-byte // quantities. Values less than VMRegImpl::stack0 are registers, those above