Mercurial > hg > graal-compiler
changeset 5123:3d0556d10a2b
Merge
author | Christian Haeubl <christian.haeubl@oracle.com> |
---|---|
date | Tue, 20 Mar 2012 10:33:39 -0700 |
parents | 9b940aff6c6b (current diff) 9ec2917fd0de (diff) |
children | 837a304d0ca8 |
files | |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/graal/graalCodeInstaller.cpp Tue Mar 20 10:32:34 2012 -0700 +++ b/src/share/vm/graal/graalCodeInstaller.cpp Tue Mar 20 10:33:39 2012 -0700 @@ -179,6 +179,7 @@ oop type = CiVirtualObject::type(value); int id = CiVirtualObject::id(value); klassOop klass = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)); + bool isLongArray = klass == Universe::longArrayKlassObj(); for (jint i = 0; i < objects->length(); i++) { ObjectValue* obj = (ObjectValue*) objects->at(i); @@ -198,6 +199,17 @@ ScopeValue* cur_second = NULL; ScopeValue* value = get_hotspot_value(((oop*) values->base(T_OBJECT))[i], total_frame_size, objects, cur_second); + if (isLongArray && cur_second == NULL) { + // we're trying to put ints into a long array... this isn't really valid, but it's used for some optimizations. + // add an int 0 constant +#ifdef BIG_ENDIAN + cur_second = value; + value = new ConstantIntValue(0); +#else + cur_second = new ConstantIntValue(0); +#endif + } + if (cur_second != NULL) { sv->field_values()->append(cur_second); }