comparison src/share/vm/ci/ciExceptionHandler.cpp @ 1138:dd57230ba8fe

6893268: additional dynamic language related optimizations in C2 Summary: C2 needs some additional optimizations to be able to handle MethodHandle invokes and invokedynamic instructions at the best performance. Reviewed-by: kvn, never
author twisti
date Tue, 05 Jan 2010 15:21:25 +0100
parents a61af66fc99e
children c18cbe5936b8
comparison
equal deleted inserted replaced
1137:97125851f396 1138:dd57230ba8fe
1 /* 1 /*
2 * Copyright 1999-2003 Sun Microsystems, Inc. All Rights Reserved. 2 * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
32 // ------------------------------------------------------------------ 32 // ------------------------------------------------------------------
33 // ciExceptionHandler::catch_klass 33 // ciExceptionHandler::catch_klass
34 // 34 //
35 // Get the exception klass that this handler catches. 35 // Get the exception klass that this handler catches.
36 ciInstanceKlass* ciExceptionHandler::catch_klass() { 36 ciInstanceKlass* ciExceptionHandler::catch_klass() {
37 VM_ENTRY_MARK;
37 assert(!is_catch_all(), "bad index"); 38 assert(!is_catch_all(), "bad index");
38 if (_catch_klass == NULL) { 39 if (_catch_klass == NULL) {
39 bool will_link; 40 bool will_link;
40 ciKlass* k = CURRENT_ENV->get_klass_by_index(_loading_klass, 41 assert(_loading_klass->get_instanceKlass()->is_linked(), "must be linked before accessing constant pool");
42 constantPoolHandle cpool(_loading_klass->get_instanceKlass()->constants());
43 ciKlass* k = CURRENT_ENV->get_klass_by_index(cpool,
41 _catch_klass_index, 44 _catch_klass_index,
42 will_link); 45 will_link,
46 _loading_klass);
43 if (!will_link && k->is_loaded()) { 47 if (!will_link && k->is_loaded()) {
44 GUARDED_VM_ENTRY( 48 GUARDED_VM_ENTRY(
45 k = CURRENT_ENV->get_unloaded_klass(_loading_klass, k->name()); 49 k = CURRENT_ENV->get_unloaded_klass(_loading_klass, k->name());
46 ) 50 )
47 } 51 }