521 retnode = _gvn.transform( new (C, 3) RShiftINode(retnode, intcon(24)) ); |
521 retnode = _gvn.transform( new (C, 3) RShiftINode(retnode, intcon(24)) ); |
522 } else if (ct == T_SHORT) { |
522 } else if (ct == T_SHORT) { |
523 retnode = _gvn.transform( new (C, 3) LShiftINode(retnode, intcon(16)) ); |
523 retnode = _gvn.transform( new (C, 3) LShiftINode(retnode, intcon(16)) ); |
524 retnode = _gvn.transform( new (C, 3) RShiftINode(retnode, intcon(16)) ); |
524 retnode = _gvn.transform( new (C, 3) RShiftINode(retnode, intcon(16)) ); |
525 } else { |
525 } else { |
526 assert(ct == T_INT, err_msg("rt=%d, ct=%d", rt, ct)); |
526 assert(ct == T_INT, err_msg_res("rt=%d, ct=%d", rt, ct)); |
527 } |
527 } |
528 } else if (rt == T_OBJECT) { |
528 } else if (rt == T_OBJECT) { |
529 assert(ct == T_OBJECT, err_msg("rt=T_OBJECT, ct=%d", ct)); |
529 assert(ct == T_OBJECT, err_msg_res("rt=T_OBJECT, ct=%d", ct)); |
530 if (ctype->is_loaded()) { |
530 if (ctype->is_loaded()) { |
531 Node* if_fail = top(); |
531 Node* if_fail = top(); |
532 retnode = gen_checkcast(retnode, makecon(TypeKlassPtr::make(ctype->as_klass())), &if_fail); |
532 retnode = gen_checkcast(retnode, makecon(TypeKlassPtr::make(ctype->as_klass())), &if_fail); |
533 if (if_fail != top()) { |
533 if (if_fail != top()) { |
534 PreserveJVMState pjvms(this); |
534 PreserveJVMState pjvms(this); |
537 } |
537 } |
538 pop(); |
538 pop(); |
539 push(retnode); |
539 push(retnode); |
540 } |
540 } |
541 } else { |
541 } else { |
542 assert(ct == rt, err_msg("unexpected mismatch rt=%d, ct=%d", rt, ct)); |
542 assert(ct == rt, err_msg_res("unexpected mismatch rt=%d, ct=%d", rt, ct)); |
543 // push a zero; it's better than getting an oop/int mismatch |
543 // push a zero; it's better than getting an oop/int mismatch |
544 retnode = pop_node(rt); |
544 retnode = pop_node(rt); |
545 retnode = zerocon(ct); |
545 retnode = zerocon(ct); |
546 push_node(ct, retnode); |
546 push_node(ct, retnode); |
547 } |
547 } |