src/cpu/x86/vm/sharedRuntime_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** 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

*** 308,317 **** --- 308,329 ---- static int reg2offset_out(VMReg r) { return (r->reg2stack() + SharedRuntime::out_preserve_stack_slots()) * VMRegImpl::stack_slot_size; } // --------------------------------------------------------------------------- + // 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 // refer to 4-byte stack slots. All stack slots are based off of the stack pointer // as framesizes are fixed.

src/cpu/x86/vm/sharedRuntime_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File