359 void push_null() { 360 push(null_type()); 361 } 362 void do_null_assert(ciKlass* unloaded_klass); 363 364 // Helper convenience routines. 365 void do_aaload(ciBytecodeStream* str); 366 void do_checkcast(ciBytecodeStream* str); 367 void do_getfield(ciBytecodeStream* str); 368 void do_getstatic(ciBytecodeStream* str); 369 void do_invoke(ciBytecodeStream* str, bool has_receiver); 370 void do_jsr(ciBytecodeStream* str); 371 void do_ldc(ciBytecodeStream* str); 372 void do_multianewarray(ciBytecodeStream* str); 373 void do_new(ciBytecodeStream* str); 374 void do_vnew(ciBytecodeStream* str); 375 void do_newarray(ciBytecodeStream* str); 376 void do_putfield(ciBytecodeStream* str); 377 void do_putstatic(ciBytecodeStream* str); 378 void do_ret(ciBytecodeStream* str); 379 380 void overwrite_local_double_long(int index) { 381 // Invalidate the previous local if it contains first half of 382 // a double or long value since it's seconf half is being overwritten. 383 int prev_index = index - 1; 384 if (prev_index >= 0 && 385 (is_double(type_at(local(prev_index))) || 386 is_long(type_at(local(prev_index))))) { 387 set_type_at(local(prev_index), bottom_type()); 388 } 389 } 390 391 void load_local_object(int index) { 392 ciType* type = type_at(local(index)); 393 assert(is_reference(type), "must be reference type"); 394 push(type); 395 } 396 void store_local_object(int index) { 397 ciType* type = pop_value(); 398 assert(is_reference(type) || type->is_return_address(), | 359 void push_null() { 360 push(null_type()); 361 } 362 void do_null_assert(ciKlass* unloaded_klass); 363 364 // Helper convenience routines. 365 void do_aaload(ciBytecodeStream* str); 366 void do_checkcast(ciBytecodeStream* str); 367 void do_getfield(ciBytecodeStream* str); 368 void do_getstatic(ciBytecodeStream* str); 369 void do_invoke(ciBytecodeStream* str, bool has_receiver); 370 void do_jsr(ciBytecodeStream* str); 371 void do_ldc(ciBytecodeStream* str); 372 void do_multianewarray(ciBytecodeStream* str); 373 void do_new(ciBytecodeStream* str); 374 void do_vnew(ciBytecodeStream* str); 375 void do_newarray(ciBytecodeStream* str); 376 void do_putfield(ciBytecodeStream* str); 377 void do_putstatic(ciBytecodeStream* str); 378 void do_ret(ciBytecodeStream* str); 379 void do_vunbox(ciBytecodeStream* str); 380 void do_vbox(ciBytecodeStream* str); 381 382 void overwrite_local_double_long(int index) { 383 // Invalidate the previous local if it contains first half of 384 // a double or long value since it's seconf half is being overwritten. 385 int prev_index = index - 1; 386 if (prev_index >= 0 && 387 (is_double(type_at(local(prev_index))) || 388 is_long(type_at(local(prev_index))))) { 389 set_type_at(local(prev_index), bottom_type()); 390 } 391 } 392 393 void load_local_object(int index) { 394 ciType* type = type_at(local(index)); 395 assert(is_reference(type), "must be reference type"); 396 push(type); 397 } 398 void store_local_object(int index) { 399 ciType* type = pop_value(); 400 assert(is_reference(type) || type->is_return_address(), |