41 // base routine for all dispatches 42 void dispatch_base(TosState state, address* table, bool verifyoop = true); 43 #endif // CC_INTERP 44 45 public: 46 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), _locals_register(r14), _bcp_register(r13) {} 47 48 void load_earlyret_value(TosState state); 49 50 #ifdef CC_INTERP 51 void save_bcp() { /* not needed in c++ interpreter and harmless */ } 52 void restore_bcp() { /* not needed in c++ interpreter and harmless */ } 53 54 // Helpers for runtime call arguments/results 55 void get_method(Register reg); 56 57 #else 58 59 // Interpreter-specific registers 60 void save_bcp() { 61 movptr(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), r13); 62 } 63 64 void restore_bcp() { 65 movptr(r13, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); 66 } 67 68 void restore_locals() { 69 movptr(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); 70 } 71 72 // Helpers for runtime call arguments/results 73 void get_method(Register reg) { 74 movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); 75 } 76 77 void get_const(Register reg) { 78 get_method(reg); 79 movptr(reg, Address(reg, Method::const_offset())); 80 } 81 82 void get_constant_pool(Register reg) { 83 get_const(reg); 84 movptr(reg, Address(reg, ConstMethod::constants_offset())); 85 } | 41 // base routine for all dispatches 42 void dispatch_base(TosState state, address* table, bool verifyoop = true); 43 #endif // CC_INTERP 44 45 public: 46 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), _locals_register(r14), _bcp_register(r13) {} 47 48 void load_earlyret_value(TosState state); 49 50 #ifdef CC_INTERP 51 void save_bcp() { /* not needed in c++ interpreter and harmless */ } 52 void restore_bcp() { /* not needed in c++ interpreter and harmless */ } 53 54 // Helpers for runtime call arguments/results 55 void get_method(Register reg); 56 57 #else 58 59 // Interpreter-specific registers 60 void save_bcp() { 61 movptr(Address(rbp, frame::interpreter_frame_bcp_offset * wordSize), r13); 62 } 63 64 void restore_bcp() { 65 movptr(r13, Address(rbp, frame::interpreter_frame_bcp_offset * wordSize)); 66 } 67 68 void restore_locals() { 69 movptr(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); 70 } 71 72 // Helpers for runtime call arguments/results 73 void get_method(Register reg) { 74 movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); 75 } 76 77 void get_const(Register reg) { 78 get_method(reg); 79 movptr(reg, Address(reg, Method::const_offset())); 80 } 81 82 void get_constant_pool(Register reg) { 83 get_const(reg); 84 movptr(reg, Address(reg, ConstMethod::constants_offset())); 85 } |