485 const int base_offset = ConstantPool::header_size() * wordSize; |
485 const int base_offset = ConstantPool::header_size() * wordSize; |
486 const int tags_offset = Array<u1>::base_offset_in_bytes(); |
486 const int tags_offset = Array<u1>::base_offset_in_bytes(); |
487 |
487 |
488 __ add(Rbase, Rcpool, AsmOperand(Rindex, lsl, LogBytesPerWord)); |
488 __ add(Rbase, Rcpool, AsmOperand(Rindex, lsl, LogBytesPerWord)); |
489 |
489 |
490 Label Condy, exit; |
|
491 #ifdef __ABI_HARD__ |
|
492 Label Long; |
|
493 // get type from tags |
490 // get type from tags |
494 __ add(Rtemp, Rtags, tags_offset); |
491 __ add(Rtemp, Rtags, tags_offset); |
495 __ ldrb(Rtemp, Address(Rtemp, Rindex)); |
492 __ ldrb(Rtemp, Address(Rtemp, Rindex)); |
|
493 |
|
494 Label Condy, exit; |
|
495 #ifdef __ABI_HARD__ |
|
496 Label NotDouble; |
496 __ cmp(Rtemp, JVM_CONSTANT_Double); |
497 __ cmp(Rtemp, JVM_CONSTANT_Double); |
497 __ b(Long, ne); |
498 __ b(NotDouble, ne); |
498 __ ldr_double(D0_tos, Address(Rbase, base_offset)); |
499 __ ldr_double(D0_tos, Address(Rbase, base_offset)); |
499 |
500 |
500 __ push(dtos); |
501 __ push(dtos); |
501 __ b(exit); |
502 __ b(exit); |
502 __ bind(Long); |
503 __ bind(NotDouble); |
503 #endif |
504 #endif |
504 |
505 |
505 __ cmp(Rtemp, JVM_CONSTANT_Long); |
506 __ cmp(Rtemp, JVM_CONSTANT_Long); |
506 __ b(Condy, ne); |
507 __ b(Condy, ne); |
507 __ ldr(R0_tos_lo, Address(Rbase, base_offset + 0 * wordSize)); |
508 __ ldr(R0_tos_lo, Address(Rbase, base_offset + 0 * wordSize)); |
4043 // initialize object header only. |
4044 // initialize object header only. |
4044 __ bind(initialize_header); |
4045 __ bind(initialize_header); |
4045 if (UseBiasedLocking) { |
4046 if (UseBiasedLocking) { |
4046 __ ldr(Rtemp, Address(Rklass, Klass::prototype_header_offset())); |
4047 __ ldr(Rtemp, Address(Rklass, Klass::prototype_header_offset())); |
4047 } else { |
4048 } else { |
4048 __ mov_slow(Rtemp, (intptr_t)markOopDesc::prototype()); |
4049 __ mov_slow(Rtemp, (intptr_t)markWord::prototype().value()); |
4049 } |
4050 } |
4050 // mark |
4051 // mark |
4051 __ str(Rtemp, Address(Robj, oopDesc::mark_offset_in_bytes())); |
4052 __ str(Rtemp, Address(Robj, oopDesc::mark_offset_in_bytes())); |
4052 |
4053 |
4053 // klass |
4054 // klass |