src/share/vm/c1/c1_LinearScan.cpp

Print this page




2698 #ifdef X86
2699       // the exact location of fpu stack values is only known
2700       // during fpu stack allocation, so the stack allocator object
2701       // must be present
2702       assert(use_fpu_stack_allocation(), "should not have float stack values without fpu stack allocation (all floats must be SSE2)");
2703       assert(_fpu_stack_allocator != NULL, "must be present");
2704       opr = _fpu_stack_allocator->to_fpu_stack(opr);
2705 
2706       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
2707 #endif
2708 #ifdef SPARC
2709       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)");
2710 #endif
2711 #ifdef ARM
2712       assert(opr->fpu_regnrHi() == opr->fpu_regnrLo() + 1, "assumed in calculation (only fpu_regnrLo is used)");
2713 #endif
2714 #ifdef PPC
2715       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
2716 #endif
2717 



2718       VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrHi());


2719 #ifdef _LP64
2720       first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first));
2721       second = &_int_0_scope_value;
2722 #else
2723       first = new LocationValue(Location::new_reg_loc(Location::normal, rname_first));
2724       // %%% This is probably a waste but we'll keep things as they were for now
2725       if (true) {
2726         VMReg rname_second = rname_first->next();
2727         second = new LocationValue(Location::new_reg_loc(Location::normal, rname_second));
2728       }
2729 #endif
2730 
2731     } else {
2732       ShouldNotReachHere();
2733       first = NULL;
2734       second = NULL;
2735     }
2736 
2737     assert(first != NULL && second != NULL, "must be set");
2738     // The convention the interpreter uses is that the second local




2698 #ifdef X86
2699       // the exact location of fpu stack values is only known
2700       // during fpu stack allocation, so the stack allocator object
2701       // must be present
2702       assert(use_fpu_stack_allocation(), "should not have float stack values without fpu stack allocation (all floats must be SSE2)");
2703       assert(_fpu_stack_allocator != NULL, "must be present");
2704       opr = _fpu_stack_allocator->to_fpu_stack(opr);
2705 
2706       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
2707 #endif
2708 #ifdef SPARC
2709       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)");
2710 #endif
2711 #ifdef ARM
2712       assert(opr->fpu_regnrHi() == opr->fpu_regnrLo() + 1, "assumed in calculation (only fpu_regnrLo is used)");
2713 #endif
2714 #ifdef PPC
2715       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
2716 #endif
2717 
2718 #ifdef VM_LITTLE_ENDIAN
2719       VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrLo());
2720 #else
2721       VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrHi());
2722 #endif
2723 
2724 #ifdef _LP64
2725       first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first));
2726       second = &_int_0_scope_value;
2727 #else
2728       first = new LocationValue(Location::new_reg_loc(Location::normal, rname_first));
2729       // %%% This is probably a waste but we'll keep things as they were for now
2730       if (true) {
2731         VMReg rname_second = rname_first->next();
2732         second = new LocationValue(Location::new_reg_loc(Location::normal, rname_second));
2733       }
2734 #endif
2735 
2736     } else {
2737       ShouldNotReachHere();
2738       first = NULL;
2739       second = NULL;
2740     }
2741 
2742     assert(first != NULL && second != NULL, "must be set");
2743     // The convention the interpreter uses is that the second local