< prev index next >

src/hotspot/share/c1/c1_LinearScan.cpp

Print this page




2762 #endif
2763 
2764     } else if (opr->is_double_fpu()) {
2765       // On SPARC, fpu_regnrLo/fpu_regnrHi represents the two halves of
2766       // the double as float registers in the native ordering. On X86,
2767       // fpu_regnrLo is a FPU stack slot whose VMReg represents
2768       // the low-order word of the double and fpu_regnrLo + 1 is the
2769       // name for the other half.  *first and *second must represent the
2770       // least and most significant words, respectively.
2771 
2772 #ifdef IA32
2773       // the exact location of fpu stack values is only known
2774       // during fpu stack allocation, so the stack allocator object
2775       // must be present
2776       assert(use_fpu_stack_allocation(), "should not have float stack values without fpu stack allocation (all floats must be SSE2)");
2777       assert(_fpu_stack_allocator != NULL, "must be present");
2778       opr = _fpu_stack_allocator->to_fpu_stack(opr);
2779 
2780       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrLo is used)");
2781 #endif
2782 #ifdef IA64
2783       assert(false, "FPU not used on x86-64");
2784 #endif
2785 #ifdef SPARC
2786       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)");
2787 #endif
2788 #ifdef ARM32
2789       assert(opr->fpu_regnrHi() == opr->fpu_regnrLo() + 1, "assumed in calculation (only fpu_regnrLo is used)");
2790 #endif
2791 #ifdef PPC32
2792       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
2793 #endif
2794 
2795 #ifdef VM_LITTLE_ENDIAN
2796       VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrLo());
2797 #else
2798       VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrHi());
2799 #endif
2800 
2801 #ifdef _LP64
2802       first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first));




2762 #endif
2763 
2764     } else if (opr->is_double_fpu()) {
2765       // On SPARC, fpu_regnrLo/fpu_regnrHi represents the two halves of
2766       // the double as float registers in the native ordering. On X86,
2767       // fpu_regnrLo is a FPU stack slot whose VMReg represents
2768       // the low-order word of the double and fpu_regnrLo + 1 is the
2769       // name for the other half.  *first and *second must represent the
2770       // least and most significant words, respectively.
2771 
2772 #ifdef IA32
2773       // the exact location of fpu stack values is only known
2774       // during fpu stack allocation, so the stack allocator object
2775       // must be present
2776       assert(use_fpu_stack_allocation(), "should not have float stack values without fpu stack allocation (all floats must be SSE2)");
2777       assert(_fpu_stack_allocator != NULL, "must be present");
2778       opr = _fpu_stack_allocator->to_fpu_stack(opr);
2779 
2780       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrLo is used)");
2781 #endif
2782 #ifdef AMD64
2783       assert(false, "FPU not used on x86-64");
2784 #endif
2785 #ifdef SPARC
2786       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)");
2787 #endif
2788 #ifdef ARM32
2789       assert(opr->fpu_regnrHi() == opr->fpu_regnrLo() + 1, "assumed in calculation (only fpu_regnrLo is used)");
2790 #endif
2791 #ifdef PPC32
2792       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
2793 #endif
2794 
2795 #ifdef VM_LITTLE_ENDIAN
2796       VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrLo());
2797 #else
2798       VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrHi());
2799 #endif
2800 
2801 #ifdef _LP64
2802       first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first));


< prev index next >