206 void narrow(Register result); 207 208 // Returning from interpreted functions 209 // 210 // Removes the current activation (incl. unlocking of monitors) 211 // and sets up the return address. This code is also used for 212 // exception unwindwing. In that case, we do not want to throw 213 // IllegalMonitorStateExceptions, since that might get us into an 214 // infinite rethrow exception loop. 215 // Additionally this code is used for popFrame and earlyReturn. 216 // In popFrame case we want to skip throwing an exception, 217 // installing an exception, and notifying jvmdi. 218 // In earlyReturn case we only want to skip throwing an exception 219 // and installing an exception. 220 void remove_activation(TosState state, Register ret_addr, 221 bool throw_monitor_exception = true, 222 bool install_monitor_exception = true, 223 bool notify_jvmdi = true); 224 void get_method_counters(Register method, Register mcs, Label& skip); 225 226 // Object locking 227 void lock_object (Register lock_reg); 228 void unlock_object(Register lock_reg); 229 230 // Interpreter profiling operations 231 void set_method_data_pointer_for_bcp(); 232 void test_method_data_pointer(Register mdp, Label& zero_continue); 233 void verify_method_data_pointer(); 234 235 void set_mdp_data_at(Register mdp_in, int constant, Register value); 236 void increment_mdp_data_at(Address data, bool decrement = false); 237 void increment_mdp_data_at(Register mdp_in, int constant, 238 bool decrement = false); 239 void increment_mdp_data_at(Register mdp_in, Register reg, int constant, 240 bool decrement = false); 241 void increment_mask_and_jump(Address counter_addr, 242 int increment, Address mask, 243 Register scratch, bool preloaded, 244 Condition cond, Label* where); 245 void set_mdp_flag_at(Register mdp_in, int flag_constant); | 206 void narrow(Register result); 207 208 // Returning from interpreted functions 209 // 210 // Removes the current activation (incl. unlocking of monitors) 211 // and sets up the return address. This code is also used for 212 // exception unwindwing. In that case, we do not want to throw 213 // IllegalMonitorStateExceptions, since that might get us into an 214 // infinite rethrow exception loop. 215 // Additionally this code is used for popFrame and earlyReturn. 216 // In popFrame case we want to skip throwing an exception, 217 // installing an exception, and notifying jvmdi. 218 // In earlyReturn case we only want to skip throwing an exception 219 // and installing an exception. 220 void remove_activation(TosState state, Register ret_addr, 221 bool throw_monitor_exception = true, 222 bool install_monitor_exception = true, 223 bool notify_jvmdi = true); 224 void get_method_counters(Register method, Register mcs, Label& skip); 225 226 // Kills t1 and t2, perserves klass, return allocation in new_obj 227 void allocate_instance(Register klass, Register new_obj, 228 Register t1, Register t2, 229 bool clear_fields, Label& alloc_failed); 230 // Allocate value buffer in new_obj and read in flattened field 231 // NOTES: 232 // - input holder object via "obj", which must be rax, 233 // will return new value buffer obj via the same reg 234 // - assumes holder_klass and valueKlass field klass have both been resolved 235 // - 32 bits: kills rdi and rsi 236 void read_flattened_field(Register holder_klass, 237 Register field_index, Register field_offset, 238 Register obj = rax); 239 240 // Object locking 241 void lock_object (Register lock_reg); 242 void unlock_object(Register lock_reg); 243 244 // Interpreter profiling operations 245 void set_method_data_pointer_for_bcp(); 246 void test_method_data_pointer(Register mdp, Label& zero_continue); 247 void verify_method_data_pointer(); 248 249 void set_mdp_data_at(Register mdp_in, int constant, Register value); 250 void increment_mdp_data_at(Address data, bool decrement = false); 251 void increment_mdp_data_at(Register mdp_in, int constant, 252 bool decrement = false); 253 void increment_mdp_data_at(Register mdp_in, Register reg, int constant, 254 bool decrement = false); 255 void increment_mask_and_jump(Address counter_addr, 256 int increment, Address mask, 257 Register scratch, bool preloaded, 258 Condition cond, Label* where); 259 void set_mdp_flag_at(Register mdp_in, int flag_constant); |