87 switch (tag) { |
87 switch (tag) { |
88 case metaDataTag : { |
88 case metaDataTag : { |
89 ClassConstant* c = type->as_ClassConstant(); |
89 ClassConstant* c = type->as_ClassConstant(); |
90 if (c != NULL && !c->value()->is_loaded()) { |
90 if (c != NULL && !c->value()->is_loaded()) { |
91 return LIR_OprFact::metadataConst(NULL); |
91 return LIR_OprFact::metadataConst(NULL); |
|
92 } else if (c != NULL) { |
|
93 return LIR_OprFact::metadataConst(c->value()->constant_encoding()); |
92 } else { |
94 } else { |
93 return LIR_OprFact::metadataConst(c->value()->constant_encoding()); |
95 MethodConstant* m = type->as_MethodConstant(); |
|
96 assert (m != NULL, "not a class or a method?"); |
|
97 return LIR_OprFact::metadataConst(m->value()->constant_encoding()); |
94 } |
98 } |
95 } |
99 } |
96 case objectTag : { |
100 case objectTag : { |
97 return LIR_OprFact::oopConst(type->as_ObjectType()->encoding()); |
101 return LIR_OprFact::oopConst(type->as_ObjectType()->encoding()); |
98 } |
102 } |
1164 buffer->finish(); |
1168 buffer->finish(); |
1165 } |
1169 } |
1166 |
1170 |
1167 |
1171 |
1168 void LIR_List::oop2reg_patch(jobject o, LIR_Opr reg, CodeEmitInfo* info) { |
1172 void LIR_List::oop2reg_patch(jobject o, LIR_Opr reg, CodeEmitInfo* info) { |
|
1173 assert(reg->type() == T_OBJECT, "bad reg"); |
1169 append(new LIR_Op1(lir_move, LIR_OprFact::oopConst(o), reg, T_OBJECT, lir_patch_normal, info)); |
1174 append(new LIR_Op1(lir_move, LIR_OprFact::oopConst(o), reg, T_OBJECT, lir_patch_normal, info)); |
1170 } |
1175 } |
1171 |
1176 |
1172 void LIR_List::klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info) { |
1177 void LIR_List::klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info) { |
|
1178 assert(reg->type() == T_METADATA, "bad reg"); |
1173 append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg, T_METADATA, lir_patch_normal, info)); |
1179 append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg, T_METADATA, lir_patch_normal, info)); |
1174 } |
1180 } |
1175 |
1181 |
1176 void LIR_List::load(LIR_Address* addr, LIR_Opr src, CodeEmitInfo* info, LIR_PatchCode patch_code) { |
1182 void LIR_List::load(LIR_Address* addr, LIR_Opr src, CodeEmitInfo* info, LIR_PatchCode patch_code) { |
1177 append(new LIR_Op1( |
1183 append(new LIR_Op1( |