comparison src/share/vm/runtime/deoptimization.cpp @ 7222:720925633b3a

fixes after merge
author Christian Haeubl <haeubl@ssw.jku.at>
date Tue, 11 Dec 2012 09:10:50 +0100
parents a818db37b7be
children 8a3efb8c831d
comparison
equal deleted inserted replaced
7221:2ae3e26b7e9a 7222:720925633b3a
866 assert(value->type() == T_OBJECT, "object element expected"); 866 assert(value->type() == T_OBJECT, "object element expected");
867 obj->obj_at_put(i, value->get_obj()()); 867 obj->obj_at_put(i, value->get_obj()());
868 } 868 }
869 } 869 }
870 870
871 typedef struct { 871 class ReassignedField {
872 int offset; 872 public:
873 BasicType type; 873 int _offset;
874 } ReassignedField; 874 BasicType _type;
875 public:
876 ReassignedField() {
877 _offset = 0;
878 _type = T_ILLEGAL;
879 }
880 };
875 881
876 int compare(ReassignedField* left, ReassignedField* right) { 882 int compare(ReassignedField* left, ReassignedField* right) {
877 return left->offset - right->offset; 883 return left->_offset - right->_offset;
878 } 884 }
879 885
880 // Restore fields of an eliminated instance object using the same field order 886 // Restore fields of an eliminated instance object using the same field order
881 // returned by HotSpotResolvedObjectType.getInstanceFields(true) 887 // returned by HotSpotResolvedObjectType.getInstanceFields(true)
882 static int reassign_fields_by_klass(InstanceKlass* klass, frame* fr, RegisterMap* reg_map, ObjectValue* sv, int svIndex, oop obj) { 888 static int reassign_fields_by_klass(InstanceKlass* klass, frame* fr, RegisterMap* reg_map, ObjectValue* sv, int svIndex, oop obj) {
886 892
887 GrowableArray<ReassignedField>* fields = new GrowableArray<ReassignedField>(); 893 GrowableArray<ReassignedField>* fields = new GrowableArray<ReassignedField>();
888 for (AllFieldStream fs(klass); !fs.done(); fs.next()) { 894 for (AllFieldStream fs(klass); !fs.done(); fs.next()) {
889 if (!fs.access_flags().is_static()) { 895 if (!fs.access_flags().is_static()) {
890 ReassignedField field; 896 ReassignedField field;
891 field.offset = fs.offset(); 897 field._offset = fs.offset();
892 field.type = FieldType::basic_type(fs.signature()); 898 field._type = FieldType::basic_type(fs.signature());
893 fields->append(field); 899 fields->append(field);
894 } 900 }
895 } 901 }
896 fields->sort(compare); 902 fields->sort(compare);
897 for (int i = 0; i < fields->length(); i++) { 903 for (int i = 0; i < fields->length(); i++) {
898 intptr_t val; 904 intptr_t val;
899 StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(svIndex)); 905 StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(svIndex));
900 int offset = fields->at(i).offset; 906 int offset = fields->at(i)._offset;
901 BasicType type = fields->at(i).type; 907 BasicType type = fields->at(i)._type;
902 switch (type) { 908 switch (type) {
903 case T_OBJECT: case T_ARRAY: 909 case T_OBJECT: case T_ARRAY:
904 assert(value->type() == T_OBJECT, "Agreement."); 910 assert(value->type() == T_OBJECT, "Agreement.");
905 obj->obj_field_put(offset, value->get_obj()()); 911 obj->obj_field_put(offset, value->get_obj()());
906 break; 912 break;