equal
deleted
inserted
replaced
1876 void GenerateOopMap::do_ldc(int bci) { |
1876 void GenerateOopMap::do_ldc(int bci) { |
1877 Bytecode_loadconstant ldc(method(), bci); |
1877 Bytecode_loadconstant ldc(method(), bci); |
1878 ConstantPool* cp = method()->constants(); |
1878 ConstantPool* cp = method()->constants(); |
1879 constantTag tag = cp->tag_at(ldc.pool_index()); // idx is index in resolved_references |
1879 constantTag tag = cp->tag_at(ldc.pool_index()); // idx is index in resolved_references |
1880 BasicType bt = ldc.result_type(); |
1880 BasicType bt = ldc.result_type(); |
|
1881 #ifdef ASSERT |
|
1882 BasicType tag_bt = tag.is_dynamic_constant() ? bt : tag.basic_type(); |
|
1883 assert(bt == tag_bt, "same result"); |
|
1884 #endif |
1881 CellTypeState cts; |
1885 CellTypeState cts; |
1882 if (tag.basic_type() == T_OBJECT) { |
1886 if (is_reference_type(bt)) { // could be T_ARRAY with condy |
1883 assert(!tag.is_string_index() && !tag.is_klass_index(), "Unexpected index tag"); |
1887 assert(!tag.is_string_index() && !tag.is_klass_index(), "Unexpected index tag"); |
1884 assert(bt == T_OBJECT, "Guard is incorrect"); |
|
1885 cts = CellTypeState::make_line_ref(bci); |
1888 cts = CellTypeState::make_line_ref(bci); |
1886 } else { |
1889 } else { |
1887 assert(bt != T_OBJECT, "Guard is incorrect"); |
|
1888 cts = valCTS; |
1890 cts = valCTS; |
1889 } |
1891 } |
1890 ppush1(cts); |
1892 ppush1(cts); |
1891 } |
1893 } |
1892 |
1894 |