< prev index next >

src/share/vm/ci/ciTypeFlow.hpp

Print this page




 324       push(long2_type());
 325     }
 326     void      pop_long() {
 327       assert(type_at_tos() == long2_type(), "must be 2nd half");
 328       pop();
 329       assert(is_long(type_at_tos()), "must be long");
 330       pop();
 331     }
 332     void      push_object(ciKlass* klass) {
 333       push(klass);
 334     }
 335     void      pop_object() {
 336       assert(is_reference(type_at_tos()), "must be reference type");
 337       pop();
 338     }
 339     void      pop_array() {
 340       assert(type_at_tos() == null_type() ||
 341              type_at_tos()->is_array_klass(), "must be array type");
 342       pop();
 343     }
 344     // pop_objArray and pop_typeArray narrow the tos to ciObjArrayKlass
 345     // or ciTypeArrayKlass (resp.).  In the rare case that an explicit
 346     // null is popped from the stack, we return NULL.  Caller beware.
 347     ciObjArrayKlass* pop_objArray() {
 348       ciType* array = pop_value();
 349       if (array == null_type())  return NULL;
 350       assert(array->is_obj_array_klass(), "must be object array type");
 351       return array->as_obj_array_klass();


 352     }
 353     ciTypeArrayKlass* pop_typeArray() {
 354       ciType* array = pop_value();
 355       if (array == null_type())  return NULL;
 356       assert(array->is_type_array_klass(), "must be prim array type");
 357       return array->as_type_array_klass();
 358     }
 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;




 324       push(long2_type());
 325     }
 326     void      pop_long() {
 327       assert(type_at_tos() == long2_type(), "must be 2nd half");
 328       pop();
 329       assert(is_long(type_at_tos()), "must be long");
 330       pop();
 331     }
 332     void      push_object(ciKlass* klass) {
 333       push(klass);
 334     }
 335     void      pop_object() {
 336       assert(is_reference(type_at_tos()), "must be reference type");
 337       pop();
 338     }
 339     void      pop_array() {
 340       assert(type_at_tos() == null_type() ||
 341              type_at_tos()->is_array_klass(), "must be array type");
 342       pop();
 343     }
 344     // pop_valueOrobjArray and pop_typeArray narrow the tos to ciObjArrayKlass,
 345     // ciValueArrayKlass or ciTypeArrayKlass (resp.). In the rare case that an explicit
 346     // null is popped from the stack, we return NULL.  Caller beware.
 347     ciArrayKlass* pop_objOrValueArray() {
 348       ciType* array = pop_value();
 349       if (array == null_type())  return NULL;
 350       // Value type arrays may contain oop or flattened representation
 351       assert(array->is_obj_array_klass() || (ValueArrayFlatten && array->is_value_array_klass()),
 352              "must be value or object array type");
 353       return array->as_array_klass();
 354     }
 355     ciTypeArrayKlass* pop_typeArray() {
 356       ciType* array = pop_value();
 357       if (array == null_type())  return NULL;
 358       assert(array->is_type_array_klass(), "must be prim array type");
 359       return array->as_type_array_klass();
 360     }
 361     void      push_null() {
 362       push(null_type());
 363     }
 364     void      do_null_assert(ciKlass* unloaded_klass);
 365 
 366     // Helper convenience routines.
 367     void do_aload(ciBytecodeStream* str);
 368     void do_checkcast(ciBytecodeStream* str);
 369     void do_getfield(ciBytecodeStream* str);
 370     void do_getstatic(ciBytecodeStream* str);
 371     void do_invoke(ciBytecodeStream* str, bool has_receiver);
 372     void do_jsr(ciBytecodeStream* str);
 373     void do_ldc(ciBytecodeStream* str);
 374     void do_multianewarray(ciBytecodeStream* str);
 375     void do_new(ciBytecodeStream* str);
 376     void do_vnew(ciBytecodeStream* str);
 377     void do_newarray(ciBytecodeStream* str);
 378     void do_putfield(ciBytecodeStream* str);
 379     void do_putstatic(ciBytecodeStream* str);
 380     void do_ret(ciBytecodeStream* str);
 381     void do_vunbox(ciBytecodeStream* str);
 382     void do_vbox(ciBytecodeStream* str);
 383 
 384     void overwrite_local_double_long(int index) {
 385       // Invalidate the previous local if it contains first half of
 386       // a double or long value since it's seconf half is being overwritten.
 387       int prev_index = index - 1;


< prev index next >