src/hotspot/cpu/s390/templateTable_s390.cpp
changeset 47762 9ccaa4e79030
parent 47580 96392e113a0a
child 48143 4c8451a12e79
child 55934 912c55e702d6
equal deleted inserted replaced
47761:1b0566927c7a 47762:9ccaa4e79030
  1172   transition(itos, vtos);
  1172   transition(itos, vtos);
  1173 
  1173 
  1174   __ pop_i(Z_ARG3);
  1174   __ pop_i(Z_ARG3);
  1175   __ pop_ptr(Z_tmp_2);
  1175   __ pop_ptr(Z_tmp_2);
  1176   // Z_tos   : value
  1176   // Z_tos   : value
  1177   // Z_ARG3 : index
  1177   // Z_ARG3  : index
  1178   // Z_tmp_2 : array
  1178   // Z_tmp_2 : array
       
  1179 
       
  1180   // Need to check whether array is boolean or byte
       
  1181   // since both types share the bastore bytecode.
       
  1182   __ load_klass(Z_tmp_1, Z_tmp_2);
       
  1183   __ z_llgf(Z_tmp_1, Address(Z_tmp_1, Klass::layout_helper_offset()));
       
  1184   __ z_tmll(Z_tmp_1, Klass::layout_helper_boolean_diffbit());
       
  1185   Label L_skip;
       
  1186   __ z_bfalse(L_skip);
       
  1187   // if it is a T_BOOLEAN array, mask the stored value to 0/1
       
  1188   __ z_nilf(Z_tos, 0x1);
       
  1189   __ bind(L_skip);
       
  1190 
  1179   // No index shift necessary - pass 0.
  1191   // No index shift necessary - pass 0.
  1180   index_check(Z_tmp_2, Z_ARG3, 0); // Prefer index in Z_ARG3.
  1192   index_check(Z_tmp_2, Z_ARG3, 0); // Prefer index in Z_ARG3.
  1181   __ z_stc(Z_tos,
  1193   __ z_stc(Z_tos,
  1182            Address(Z_tmp_2, Z_ARG3, arrayOopDesc::base_offset_in_bytes(T_BYTE)));
  1194            Address(Z_tmp_2, Z_ARG3, arrayOopDesc::base_offset_in_bytes(T_BYTE)));
  1183 }
  1195 }
  2319     __ z_bfalse(skip_register_finalizer);
  2331     __ z_bfalse(skip_register_finalizer);
  2320     __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), Rthis);
  2332     __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), Rthis);
  2321     __ bind(skip_register_finalizer);
  2333     __ bind(skip_register_finalizer);
  2322   }
  2334   }
  2323 
  2335 
       
  2336   if (state == itos) {
       
  2337     // Narrow result if state is itos but result type is smaller.
       
  2338     // Need to narrow in the return bytecode rather than in generate_return_entry
       
  2339     // since compiled code callers expect the result to already be narrowed.
       
  2340     __ narrow(Z_tos, Z_tmp_1); /* fall through */
       
  2341   }
       
  2342 
  2324   __ remove_activation(state, Z_R14);
  2343   __ remove_activation(state, Z_R14);
  2325   __ z_br(Z_R14);
  2344   __ z_br(Z_R14);
  2326 }
  2345 }
  2327 
  2346 
  2328 // ----------------------------------------------------------------------------
  2347 // ----------------------------------------------------------------------------