682 __ move(T1, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset())); |
682 __ move(T1, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset())); |
683 __ dadd(T1, T1, T8); |
683 __ dadd(T1, T1, T8); |
684 __ dadd(T1, T1, T2); |
684 __ dadd(T1, T1, T2); |
685 __ lw(T3, T1, 0); |
685 __ lw(T3, T1, 0); |
686 |
686 |
687 Label notByte, notShort, notChar, notObj; |
687 Label notByte, notBool, notShort, notChar, notObj; |
688 // const Address field_address (eax, esi, Address::times_1); |
688 // const Address field_address (eax, esi, Address::times_1); |
689 |
689 |
690 // Need to differentiate between igetfield, agetfield, bgetfield etc. |
690 // Need to differentiate between igetfield, agetfield, bgetfield etc. |
691 // because they are different sizes. |
691 // because they are different sizes. |
692 // Use the type from the constant pool cache |
692 // Use the type from the constant pool cache |
699 |
699 |
700 __ lb(V0, T0, 0); |
700 __ lb(V0, T0, 0); |
701 __ b(xreturn_path); |
701 __ b(xreturn_path); |
702 __ delayed()->nop(); |
702 __ delayed()->nop(); |
703 |
703 |
|
704 //ztos |
|
705 __ bind(notByte); |
|
706 __ daddi(T1, T3, (-1) * ztos); |
|
707 __ bne(T1, R0, notBool); |
|
708 __ delayed()->nop(); |
|
709 __ lb(V0, T0, 0); |
|
710 __ b(xreturn_path); |
|
711 __ delayed()->nop(); |
|
712 |
704 //stos |
713 //stos |
705 __ bind(notByte); |
714 __ bind(notBool); |
706 __ daddi(T1, T3, (-1) * stos); |
715 __ daddi(T1, T3, (-1) * stos); |
707 __ bne(T1, R0, notShort); |
716 __ bne(T1, R0, notShort); |
708 __ delayed()->nop(); |
717 __ delayed()->nop(); |
709 __ lh(V0, T0, 0); |
718 __ lh(V0, T0, 0); |
710 __ b(xreturn_path); |
719 __ b(xreturn_path); |