3208 ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent");
3209
3210 // Already unknown. Nothing to do anymore.
3211 __ andi_(R0, tmp, TypeEntries::type_unknown);
3212 __ bne(CCR0, Lnext);
3213
3214 // Different than before. Cannot keep accurate profile.
3215 __ ori(R0, tmp, TypeEntries::type_unknown);
3216 }
3217 }
3218
3219 __ bind(Ldo_update);
3220 __ std(R0, index_or_disp(mdo_addr), mdo_addr->base()->as_pointer_register());
3221
3222 __ bind(Lnext);
3223 if (klass_reg_used) { __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R0); } // reinit
3224 }
3225 __ bind(Ldone);
3226 }
3227
3228
3229 void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) {
3230 assert(op->crc()->is_single_cpu(), "crc must be register");
3231 assert(op->val()->is_single_cpu(), "byte value must be register");
3232 assert(op->result_opr()->is_single_cpu(), "result must be register");
3233 Register crc = op->crc()->as_register();
3234 Register val = op->val()->as_register();
3235 Register res = op->result_opr()->as_register();
3236
3237 assert_different_registers(val, crc, res);
3238
3239 __ load_const_optimized(res, StubRoutines::crc_table_addr(), R0);
3240 __ kernel_crc32_singleByteReg(crc, val, res, true);
3241 __ mr(res, crc);
3242 }
3243
3244 #undef __
|
3208 ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent");
3209
3210 // Already unknown. Nothing to do anymore.
3211 __ andi_(R0, tmp, TypeEntries::type_unknown);
3212 __ bne(CCR0, Lnext);
3213
3214 // Different than before. Cannot keep accurate profile.
3215 __ ori(R0, tmp, TypeEntries::type_unknown);
3216 }
3217 }
3218
3219 __ bind(Ldo_update);
3220 __ std(R0, index_or_disp(mdo_addr), mdo_addr->base()->as_pointer_register());
3221
3222 __ bind(Lnext);
3223 if (klass_reg_used) { __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R0); } // reinit
3224 }
3225 __ bind(Ldone);
3226 }
3227
3228 void LIR_Assembler::emit_profile_inline_type(LIR_OpProfileInlineType* op) {
3229 Unimplemented();
3230 }
3231
3232 void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) {
3233 assert(op->crc()->is_single_cpu(), "crc must be register");
3234 assert(op->val()->is_single_cpu(), "byte value must be register");
3235 assert(op->result_opr()->is_single_cpu(), "result must be register");
3236 Register crc = op->crc()->as_register();
3237 Register val = op->val()->as_register();
3238 Register res = op->result_opr()->as_register();
3239
3240 assert_different_registers(val, crc, res);
3241
3242 __ load_const_optimized(res, StubRoutines::crc_table_addr(), R0);
3243 __ kernel_crc32_singleByteReg(crc, val, res, true);
3244 __ mr(res, crc);
3245 }
3246
3247 #undef __
|