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