Mercurial > hg > graal-compiler
comparison src/share/vm/classfile/classFileParser.cpp @ 1108:85f13cdfbc1d
6829192: JSR 292 needs to support 64-bit x86
Summary: changes for method handles and invokedynamic
Reviewed-by: kvn
author | twisti |
---|---|
date | Wed, 16 Dec 2009 12:48:04 +0100 |
parents | 74a5db69c1fe |
children | a5a6adfca6ec dd57230ba8fe |
comparison
equal
deleted
inserted
replaced
1102:6dc5471e0f66 | 1108:85f13cdfbc1d |
---|---|
2509 // Adjust the field type from byte to an unmanaged pointer. | 2509 // Adjust the field type from byte to an unmanaged pointer. |
2510 assert(fac_ptr->nonstatic_byte_count > 0, ""); | 2510 assert(fac_ptr->nonstatic_byte_count > 0, ""); |
2511 fac_ptr->nonstatic_byte_count -= 1; | 2511 fac_ptr->nonstatic_byte_count -= 1; |
2512 (*fields_ptr)->ushort_at_put(i + instanceKlass::signature_index_offset, | 2512 (*fields_ptr)->ushort_at_put(i + instanceKlass::signature_index_offset, |
2513 word_sig_index); | 2513 word_sig_index); |
2514 if (wordSize == jintSize) { | 2514 fac_ptr->nonstatic_word_count += 1; |
2515 fac_ptr->nonstatic_word_count += 1; | 2515 |
2516 } else { | 2516 FieldAllocationType atype = (FieldAllocationType) (*fields_ptr)->ushort_at(i + instanceKlass::low_offset); |
2517 fac_ptr->nonstatic_double_count += 1; | |
2518 } | |
2519 | |
2520 FieldAllocationType atype = (FieldAllocationType) (*fields_ptr)->ushort_at(i+4); | |
2521 assert(atype == NONSTATIC_BYTE, ""); | 2517 assert(atype == NONSTATIC_BYTE, ""); |
2522 FieldAllocationType new_atype = NONSTATIC_WORD; | 2518 FieldAllocationType new_atype = NONSTATIC_WORD; |
2523 if (wordSize > jintSize) { | 2519 (*fields_ptr)->ushort_at_put(i + instanceKlass::low_offset, new_atype); |
2524 if (Universe::field_type_should_be_aligned(T_LONG)) { | |
2525 atype = NONSTATIC_ALIGNED_DOUBLE; | |
2526 } else { | |
2527 atype = NONSTATIC_DOUBLE; | |
2528 } | |
2529 } | |
2530 (*fields_ptr)->ushort_at_put(i+4, new_atype); | |
2531 | 2520 |
2532 found_vmentry = true; | 2521 found_vmentry = true; |
2533 break; | 2522 break; |
2534 } | 2523 } |
2535 } | 2524 } |
3083 // The field allocation type was temporarily stored in the offset slot. | 3072 // The field allocation type was temporarily stored in the offset slot. |
3084 // oop fields are located before non-oop fields (static and non-static). | 3073 // oop fields are located before non-oop fields (static and non-static). |
3085 int len = fields->length(); | 3074 int len = fields->length(); |
3086 for (int i = 0; i < len; i += instanceKlass::next_offset) { | 3075 for (int i = 0; i < len; i += instanceKlass::next_offset) { |
3087 int real_offset; | 3076 int real_offset; |
3088 FieldAllocationType atype = (FieldAllocationType) fields->ushort_at(i+4); | 3077 FieldAllocationType atype = (FieldAllocationType) fields->ushort_at(i + instanceKlass::low_offset); |
3089 switch (atype) { | 3078 switch (atype) { |
3090 case STATIC_OOP: | 3079 case STATIC_OOP: |
3091 real_offset = next_static_oop_offset; | 3080 real_offset = next_static_oop_offset; |
3092 next_static_oop_offset += heapOopSize; | 3081 next_static_oop_offset += heapOopSize; |
3093 break; | 3082 break; |
3171 next_nonstatic_double_offset += BytesPerLong; | 3160 next_nonstatic_double_offset += BytesPerLong; |
3172 break; | 3161 break; |
3173 default: | 3162 default: |
3174 ShouldNotReachHere(); | 3163 ShouldNotReachHere(); |
3175 } | 3164 } |
3176 fields->short_at_put(i+4, extract_low_short_from_int(real_offset) ); | 3165 fields->short_at_put(i + instanceKlass::low_offset, extract_low_short_from_int(real_offset)); |
3177 fields->short_at_put(i+5, extract_high_short_from_int(real_offset) ); | 3166 fields->short_at_put(i + instanceKlass::high_offset, extract_high_short_from_int(real_offset)); |
3178 } | 3167 } |
3179 | 3168 |
3180 // Size of instances | 3169 // Size of instances |
3181 int instance_size; | 3170 int instance_size; |
3182 | 3171 |