2083 if (is_static) { |
2083 if (is_static) { |
2084 __ clr(Otos_i); |
2084 __ clr(Otos_i); |
2085 } else { |
2085 } else { |
2086 if (has_tos) { |
2086 if (has_tos) { |
2087 // save object pointer before call_VM() clobbers it |
2087 // save object pointer before call_VM() clobbers it |
2088 __ mov(Otos_i, Lscratch); |
2088 __ push_ptr(Otos_i); // put object on tos where GC wants it. |
2089 } else { |
2089 } else { |
2090 // Load top of stack (do not pop the value off the stack); |
2090 // Load top of stack (do not pop the value off the stack); |
2091 __ ld_ptr(Lesp, Interpreter::expr_offset_in_bytes(0), Otos_i); |
2091 __ ld_ptr(Lesp, Interpreter::expr_offset_in_bytes(0), Otos_i); |
2092 } |
2092 } |
2093 __ verify_oop(Otos_i); |
2093 __ verify_oop(Otos_i); |
2095 // Otos_i: object pointer or NULL if static |
2095 // Otos_i: object pointer or NULL if static |
2096 // Rcache: cache entry pointer |
2096 // Rcache: cache entry pointer |
2097 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_access), |
2097 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_access), |
2098 Otos_i, Rcache); |
2098 Otos_i, Rcache); |
2099 if (!is_static && has_tos) { |
2099 if (!is_static && has_tos) { |
2100 __ mov(Lscratch, Otos_i); // restore object pointer |
2100 __ pop_ptr(Otos_i); // restore object pointer |
2101 __ verify_oop(Otos_i); |
2101 __ verify_oop(Otos_i); |
2102 } |
2102 } |
2103 __ get_cache_and_index_at_bcp(Rcache, index, 1); |
2103 __ get_cache_and_index_at_bcp(Rcache, index, 1); |
2104 __ bind(Label1); |
2104 __ bind(Label1); |
2105 } |
2105 } |