Mercurial > hg > truffle
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; |