513 |
513 |
514 Label xreturn_path; |
514 Label xreturn_path; |
515 // Need to differentiate between igetfield, agetfield, bgetfield etc. |
515 // Need to differentiate between igetfield, agetfield, bgetfield etc. |
516 // because they are different sizes. |
516 // because they are different sizes. |
517 // Get the type from the constant pool cache |
517 // Get the type from the constant pool cache |
518 __ srl(G1_scratch, ConstantPoolCacheEntry::tosBits, G1_scratch); |
518 __ srl(G1_scratch, ConstantPoolCacheEntry::tos_state_shift, G1_scratch); |
519 // Make sure we don't need to mask G1_scratch for tosBits after the above shift |
519 // Make sure we don't need to mask G1_scratch after the above shift |
520 ConstantPoolCacheEntry::verify_tosBits(); |
520 ConstantPoolCacheEntry::verify_tos_state_shift(); |
521 __ cmp(G1_scratch, atos ); |
521 __ cmp(G1_scratch, atos ); |
522 __ br(Assembler::equal, true, Assembler::pt, xreturn_path); |
522 __ br(Assembler::equal, true, Assembler::pt, xreturn_path); |
523 __ delayed()->ld_ptr(Otos_i, G3_scratch, Otos_i); |
523 __ delayed()->ld_ptr(Otos_i, G3_scratch, Otos_i); |
524 __ cmp(G1_scratch, itos); |
524 __ cmp(G1_scratch, itos); |
525 __ br(Assembler::equal, true, Assembler::pt, xreturn_path); |
525 __ br(Assembler::equal, true, Assembler::pt, xreturn_path); |