47 address entry_point, |
47 address entry_point, |
48 int number_of_arguments, |
48 int number_of_arguments, |
49 bool check_exceptions); |
49 bool check_exceptions); |
50 |
50 |
51 // base routine for all dispatches |
51 // base routine for all dispatches |
52 void dispatch_base(TosState state, address* table, bool verifyoop = true); |
52 void dispatch_base(TosState state, address* table, bool verifyoop = true, bool generate_poll = false); |
53 |
53 |
54 public: |
54 public: |
55 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), |
55 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), |
56 _locals_register(LP64_ONLY(r14) NOT_LP64(rdi)), |
56 _locals_register(LP64_ONLY(r14) NOT_LP64(rdi)), |
57 _bcp_register(LP64_ONLY(r13) NOT_LP64(rsi)) {} |
57 _bcp_register(LP64_ONLY(r13) NOT_LP64(rsi)) {} |
182 |
182 |
183 // Dispatching |
183 // Dispatching |
184 void dispatch_prolog(TosState state, int step = 0); |
184 void dispatch_prolog(TosState state, int step = 0); |
185 void dispatch_epilog(TosState state, int step = 0); |
185 void dispatch_epilog(TosState state, int step = 0); |
186 // dispatch via rbx (assume rbx is loaded already) |
186 // dispatch via rbx (assume rbx is loaded already) |
187 void dispatch_only(TosState state); |
187 void dispatch_only(TosState state, bool generate_poll = false); |
188 // dispatch normal table via rbx (assume rbx is loaded already) |
188 // dispatch normal table via rbx (assume rbx is loaded already) |
189 void dispatch_only_normal(TosState state); |
189 void dispatch_only_normal(TosState state); |
190 void dispatch_only_noverify(TosState state); |
190 void dispatch_only_noverify(TosState state); |
191 // load rbx from [_bcp_register + step] and dispatch via rbx |
191 // load rbx from [_bcp_register + step] and dispatch via rbx |
192 void dispatch_next(TosState state, int step = 0); |
192 void dispatch_next(TosState state, int step = 0, bool generate_poll = false); |
193 // load rbx from [_bcp_register] and dispatch via rbx and table |
193 // load rbx from [_bcp_register] and dispatch via rbx and table |
194 void dispatch_via (TosState state, address* table); |
194 void dispatch_via (TosState state, address* table); |
195 |
195 |
196 // jump to an invoked target |
196 // jump to an invoked target |
197 void prepare_to_jump_from_interpreted(); |
197 void prepare_to_jump_from_interpreted(); |