45 Register last_java_sp,
46 address entry_point,
47 int number_of_arguments,
48 bool check_exceptions);
49
50 // base routine for all dispatches
51 void dispatch_base(TosState state, address* table, bool verifyoop = true, bool generate_poll = false);
52
53 public:
54 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code),
55 _locals_register(r14),
56 _bcp_register(r13) {}
57
58 void jump_to_entry(address entry);
59
60 virtual void check_and_handle_popframe();
61 virtual void check_and_handle_earlyret();
62
63 void load_earlyret_value(TosState state);
64
65 void call_VM_preemptable(Register oop_result,
66 address entry_point,
67 Register arg_1);
68 void restore_after_resume(bool is_native);
69
70 // Interpreter-specific registers
71 void save_bcp() {
72 movptr(Address(rbp, frame::interpreter_frame_bcp_offset * wordSize), _bcp_register);
73 }
74
75 void restore_bcp() {
76 movptr(_bcp_register, Address(rbp, frame::interpreter_frame_bcp_offset * wordSize));
77 }
78
79 void restore_locals() {
80 movptr(_locals_register, Address(rbp, frame::interpreter_frame_locals_offset * wordSize));
81 lea(_locals_register, Address(rbp, _locals_register, Address::times_ptr));
82 }
83
84 // Helpers for runtime call arguments/results
85 void get_method(Register reg) {
86 movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize));
87 }
|
45 Register last_java_sp,
46 address entry_point,
47 int number_of_arguments,
48 bool check_exceptions);
49
50 // base routine for all dispatches
51 void dispatch_base(TosState state, address* table, bool verifyoop = true, bool generate_poll = false);
52
53 public:
54 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code),
55 _locals_register(r14),
56 _bcp_register(r13) {}
57
58 void jump_to_entry(address entry);
59
60 virtual void check_and_handle_popframe();
61 virtual void check_and_handle_earlyret();
62
63 void load_earlyret_value(TosState state);
64
65 // Use for vthread preemption
66 void call_VM_preemptable(Register oop_result,
67 address entry_point,
68 Register arg_1,
69 bool check_exceptions = true);
70 void call_VM_preemptable(Register oop_result,
71 address entry_point,
72 Register arg_1,
73 Register arg_2,
74 bool check_exceptions = true);
75
76 void call_VM_preemptable_helper(Register oop_result,
77 address entry_point,
78 int number_of_arguments,
79 bool check_exceptions);
80 void restore_after_resume(bool is_native);
81
82 // Interpreter-specific registers
83 void save_bcp() {
84 movptr(Address(rbp, frame::interpreter_frame_bcp_offset * wordSize), _bcp_register);
85 }
86
87 void restore_bcp() {
88 movptr(_bcp_register, Address(rbp, frame::interpreter_frame_bcp_offset * wordSize));
89 }
90
91 void restore_locals() {
92 movptr(_locals_register, Address(rbp, frame::interpreter_frame_locals_offset * wordSize));
93 lea(_locals_register, Address(rbp, _locals_register, Address::times_ptr));
94 }
95
96 // Helpers for runtime call arguments/results
97 void get_method(Register reg) {
98 movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize));
99 }
|