< prev index next >

src/hotspot/cpu/riscv/c1_Runtime1_riscv.cpp

Print this page

 170 
 171 // Implementation of StubFrame
 172 
 173 class StubFrame: public StackObj {
 174  private:
 175   StubAssembler* _sasm;
 176   bool _return_state;
 177 
 178  public:
 179   StubFrame(StubAssembler* sasm, const char* name, bool must_gc_arguments, return_state_t return_state=requires_return);
 180   void load_argument(int offset_in_words, Register reg);
 181 
 182   ~StubFrame();
 183 };;
 184 
 185 void StubAssembler::prologue(const char* name, bool must_gc_arguments) {
 186   set_info(name, must_gc_arguments);
 187   enter();
 188 }
 189 
 190 void StubAssembler::epilogue() {
 191   leave();
 192   ret();
 193 }
 194 
 195 #define __ _sasm->
 196 
 197 StubFrame::StubFrame(StubAssembler* sasm, const char* name, bool must_gc_arguments, return_state_t return_state) {
 198   _sasm = sasm;
 199   _return_state = return_state;
 200   __ prologue(name, must_gc_arguments);
 201 }
 202 
 203 // load parameters that were stored with LIR_Assembler::store_parameter
 204 // Note: offsets for store_parameter and load_argument must match
 205 void StubFrame::load_argument(int offset_in_words, Register reg) {
 206   __ load_parameter(offset_in_words, reg);
 207 }
 208 
 209 
 210 StubFrame::~StubFrame() {

 339 void Runtime1::initialize_pd() {
 340   int i = 0;
 341   int sp_offset = 0;
 342   const int step = 2; // SP offsets are in halfwords
 343 
 344   // all float registers are saved explicitly
 345   for (i = 0; i < FrameMap::nof_fpu_regs; i++) {
 346     fpu_reg_save_offsets[i] = sp_offset;
 347     sp_offset += step;
 348   }
 349 
 350   // a slot reserved for stack 16-byte alignment, see MacroAssembler::push_reg
 351   sp_offset += step;
 352   // we save x5 ~ x31, except x0 ~ x4: loop starts from x5
 353   for (i = 5; i < FrameMap::nof_cpu_regs; i++) {
 354     cpu_reg_save_offsets[i] = sp_offset;
 355     sp_offset += step;
 356   }
 357 }
 358 





 359 // target: the entry point of the method that creates and posts the exception oop
 360 // has_argument: true if the exception needs arguments (passed in t0 and t1)
 361 
 362 OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
 363   // make a frame and preserve the caller's caller-save registers
 364   OopMap* oop_map = save_live_registers(sasm);
 365   assert_cond(oop_map != nullptr);
 366   int call_offset = 0;
 367   if (!has_argument) {
 368     call_offset = __ call_RT(noreg, noreg, target);
 369   } else {
 370     __ mv(c_rarg1, t0);
 371     __ mv(c_rarg2, t1);
 372     call_offset = __ call_RT(noreg, noreg, target);
 373   }
 374   OopMapSet* oop_maps = new OopMapSet();
 375   assert_cond(oop_maps != nullptr);
 376   oop_maps->add_gc_map(call_offset, oop_map);
 377 
 378   return oop_maps;

 170 
 171 // Implementation of StubFrame
 172 
 173 class StubFrame: public StackObj {
 174  private:
 175   StubAssembler* _sasm;
 176   bool _return_state;
 177 
 178  public:
 179   StubFrame(StubAssembler* sasm, const char* name, bool must_gc_arguments, return_state_t return_state=requires_return);
 180   void load_argument(int offset_in_words, Register reg);
 181 
 182   ~StubFrame();
 183 };;
 184 
 185 void StubAssembler::prologue(const char* name, bool must_gc_arguments) {
 186   set_info(name, must_gc_arguments);
 187   enter();
 188 }
 189 
 190 void StubAssembler::epilogue(bool use_pop) {
 191   leave();
 192   ret();
 193 }
 194 
 195 #define __ _sasm->
 196 
 197 StubFrame::StubFrame(StubAssembler* sasm, const char* name, bool must_gc_arguments, return_state_t return_state) {
 198   _sasm = sasm;
 199   _return_state = return_state;
 200   __ prologue(name, must_gc_arguments);
 201 }
 202 
 203 // load parameters that were stored with LIR_Assembler::store_parameter
 204 // Note: offsets for store_parameter and load_argument must match
 205 void StubFrame::load_argument(int offset_in_words, Register reg) {
 206   __ load_parameter(offset_in_words, reg);
 207 }
 208 
 209 
 210 StubFrame::~StubFrame() {

 339 void Runtime1::initialize_pd() {
 340   int i = 0;
 341   int sp_offset = 0;
 342   const int step = 2; // SP offsets are in halfwords
 343 
 344   // all float registers are saved explicitly
 345   for (i = 0; i < FrameMap::nof_fpu_regs; i++) {
 346     fpu_reg_save_offsets[i] = sp_offset;
 347     sp_offset += step;
 348   }
 349 
 350   // a slot reserved for stack 16-byte alignment, see MacroAssembler::push_reg
 351   sp_offset += step;
 352   // we save x5 ~ x31, except x0 ~ x4: loop starts from x5
 353   for (i = 5; i < FrameMap::nof_cpu_regs; i++) {
 354     cpu_reg_save_offsets[i] = sp_offset;
 355     sp_offset += step;
 356   }
 357 }
 358 
 359 uint Runtime1::runtime_blob_current_thread_offset(frame f) {
 360   Unimplemented();
 361   return 0;
 362 }
 363 
 364 // target: the entry point of the method that creates and posts the exception oop
 365 // has_argument: true if the exception needs arguments (passed in t0 and t1)
 366 
 367 OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
 368   // make a frame and preserve the caller's caller-save registers
 369   OopMap* oop_map = save_live_registers(sasm);
 370   assert_cond(oop_map != nullptr);
 371   int call_offset = 0;
 372   if (!has_argument) {
 373     call_offset = __ call_RT(noreg, noreg, target);
 374   } else {
 375     __ mv(c_rarg1, t0);
 376     __ mv(c_rarg2, t1);
 377     call_offset = __ call_RT(noreg, noreg, target);
 378   }
 379   OopMapSet* oop_maps = new OopMapSet();
 380   assert_cond(oop_maps != nullptr);
 381   oop_maps->add_gc_map(call_offset, oop_map);
 382 
 383   return oop_maps;
< prev index next >