92 return;
93 }
94
95 if (!is_field && !field_holder->is_initialized()) {
96 if (!static_field_ok_in_clinit(field, method())) {
97 uncommon_trap(Deoptimization::Reason_uninitialized,
98 Deoptimization::Action_reinterpret,
99 NULL, "!static_field_ok_in_clinit");
100 return;
101 }
102 }
103
104 // Deoptimize on putfield writes to call site target field.
105 if (!is_get && field->is_call_site_target()) {
106 uncommon_trap(Deoptimization::Reason_unhandled,
107 Deoptimization::Action_reinterpret,
108 NULL, "put to call site target field");
109 return;
110 }
111
112 assert(field->will_link(method()->holder(), bc()), "getfield: typeflow responsibility");
113
114 // Note: We do not check for an unloaded field type here any more.
115
116 // Generate code for the object pointer.
117 Node* obj;
118 if (is_field) {
119 int obj_depth = is_get ? 0 : field->type()->size();
120 obj = null_check(peek(obj_depth));
121 // Compile-time detect of null-exception?
122 if (stopped()) return;
123
124 #ifdef ASSERT
125 const TypeInstPtr *tjp = TypeInstPtr::make(TypePtr::NotNull, iter().get_declared_field_holder());
126 assert(_gvn.type(obj)->higher_equal(tjp), "cast_up is no longer needed");
127 #endif
128
129 if (is_get) {
130 (void) pop(); // pop receiver before getting
131 do_get_xxx(obj, field, is_field);
132 } else {
|
92 return;
93 }
94
95 if (!is_field && !field_holder->is_initialized()) {
96 if (!static_field_ok_in_clinit(field, method())) {
97 uncommon_trap(Deoptimization::Reason_uninitialized,
98 Deoptimization::Action_reinterpret,
99 NULL, "!static_field_ok_in_clinit");
100 return;
101 }
102 }
103
104 // Deoptimize on putfield writes to call site target field.
105 if (!is_get && field->is_call_site_target()) {
106 uncommon_trap(Deoptimization::Reason_unhandled,
107 Deoptimization::Action_reinterpret,
108 NULL, "put to call site target field");
109 return;
110 }
111
112 assert(field->will_link(method(), bc()), "getfield: typeflow responsibility");
113
114 // Note: We do not check for an unloaded field type here any more.
115
116 // Generate code for the object pointer.
117 Node* obj;
118 if (is_field) {
119 int obj_depth = is_get ? 0 : field->type()->size();
120 obj = null_check(peek(obj_depth));
121 // Compile-time detect of null-exception?
122 if (stopped()) return;
123
124 #ifdef ASSERT
125 const TypeInstPtr *tjp = TypeInstPtr::make(TypePtr::NotNull, iter().get_declared_field_holder());
126 assert(_gvn.type(obj)->higher_equal(tjp), "cast_up is no longer needed");
127 #endif
128
129 if (is_get) {
130 (void) pop(); // pop receiver before getting
131 do_get_xxx(obj, field, is_field);
132 } else {
|