1 /*
2 * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
760 }
761
762 // ------------------------------------------------------------------
763 // ciTypeFlow::StateVector::do_new
764 void ciTypeFlow::StateVector::do_new(ciBytecodeStream* str) {
765 bool will_link;
766 ciKlass* klass = str->get_klass(will_link);
767 if (!will_link || str->is_unresolved_klass()) {
768 trap(str, klass, str->get_klass_index());
769 } else {
770 push_object(klass);
771 }
772 }
773
774 // ------------------------------------------------------------------
775 // ciTypeFlow::StateVector::do_vdefault
776 void ciTypeFlow::StateVector::do_vdefault(ciBytecodeStream* str) {
777 bool will_link;
778 ciKlass* klass = str->get_klass(will_link);
779 assert(klass->is_valuetype(), "should be value type");
780 if (!will_link || str->is_unresolved_value_type()) {
781 trap(str, klass, str->get_klass_index());
782 } else {
783 push_object(klass);
784 }
785 }
786
787 // ------------------------------------------------------------------
788 // ciTypeFlow::StateVector::do_vwithfield
789 void ciTypeFlow::StateVector::do_vwithfield(ciBytecodeStream* str) {
790 bool will_link;
791 ciField* field = str->get_field(will_link);
792 ciKlass* klass = field->holder();
793 assert(klass->is_valuetype(), "should be value type");
794 if (!will_link) {
795 trap(str, klass, str->get_field_holder_index());
796 } else {
797 ciType* type = pop_value();
798 ciType* field_type = field->type();
799 assert(field_type->is_loaded(), "field type must be loaded");
800 if (field_type->is_two_word()) {
|
1 /*
2 * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
760 }
761
762 // ------------------------------------------------------------------
763 // ciTypeFlow::StateVector::do_new
764 void ciTypeFlow::StateVector::do_new(ciBytecodeStream* str) {
765 bool will_link;
766 ciKlass* klass = str->get_klass(will_link);
767 if (!will_link || str->is_unresolved_klass()) {
768 trap(str, klass, str->get_klass_index());
769 } else {
770 push_object(klass);
771 }
772 }
773
774 // ------------------------------------------------------------------
775 // ciTypeFlow::StateVector::do_vdefault
776 void ciTypeFlow::StateVector::do_vdefault(ciBytecodeStream* str) {
777 bool will_link;
778 ciKlass* klass = str->get_klass(will_link);
779 assert(klass->is_valuetype(), "should be value type");
780 if (!will_link) {
781 trap(str, klass, str->get_klass_index());
782 } else {
783 push_object(klass);
784 }
785 }
786
787 // ------------------------------------------------------------------
788 // ciTypeFlow::StateVector::do_vwithfield
789 void ciTypeFlow::StateVector::do_vwithfield(ciBytecodeStream* str) {
790 bool will_link;
791 ciField* field = str->get_field(will_link);
792 ciKlass* klass = field->holder();
793 assert(klass->is_valuetype(), "should be value type");
794 if (!will_link) {
795 trap(str, klass, str->get_field_holder_index());
796 } else {
797 ciType* type = pop_value();
798 ciType* field_type = field->type();
799 assert(field_type->is_loaded(), "field type must be loaded");
800 if (field_type->is_two_word()) {
|