3189 ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent");
3190
3191 // Already unknown. Nothing to do anymore.
3192 __ andi_(R0, tmp, TypeEntries::type_unknown);
3193 __ bne(CCR0, Lnext);
3194
3195 // Different than before. Cannot keep accurate profile.
3196 __ ori(R0, tmp, TypeEntries::type_unknown);
3197 }
3198 }
3199
3200 __ bind(Ldo_update);
3201 __ std(R0, index_or_disp(mdo_addr), mdo_addr->base()->as_pointer_register());
3202
3203 __ bind(Lnext);
3204 if (klass_reg_used) { __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R0); } // reinit
3205 }
3206 __ bind(Ldone);
3207 }
3208
3209
3210 void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) {
3211 assert(op->crc()->is_single_cpu(), "crc must be register");
3212 assert(op->val()->is_single_cpu(), "byte value must be register");
3213 assert(op->result_opr()->is_single_cpu(), "result must be register");
3214 Register crc = op->crc()->as_register();
3215 Register val = op->val()->as_register();
3216 Register res = op->result_opr()->as_register();
3217
3218 assert_different_registers(val, crc, res);
3219
3220 __ load_const_optimized(res, StubRoutines::crc_table_addr(), R0);
3221 __ kernel_crc32_singleByteReg(crc, val, res, true);
3222 __ mr(res, crc);
3223 }
3224
3225 #undef __
|
3189 ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent");
3190
3191 // Already unknown. Nothing to do anymore.
3192 __ andi_(R0, tmp, TypeEntries::type_unknown);
3193 __ bne(CCR0, Lnext);
3194
3195 // Different than before. Cannot keep accurate profile.
3196 __ ori(R0, tmp, TypeEntries::type_unknown);
3197 }
3198 }
3199
3200 __ bind(Ldo_update);
3201 __ std(R0, index_or_disp(mdo_addr), mdo_addr->base()->as_pointer_register());
3202
3203 __ bind(Lnext);
3204 if (klass_reg_used) { __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R0); } // reinit
3205 }
3206 __ bind(Ldone);
3207 }
3208
3209 void LIR_Assembler::emit_profile_inline_type(LIR_OpProfileInlineType* op) {
3210 Unimplemented();
3211 }
3212
3213 void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) {
3214 assert(op->crc()->is_single_cpu(), "crc must be register");
3215 assert(op->val()->is_single_cpu(), "byte value must be register");
3216 assert(op->result_opr()->is_single_cpu(), "result must be register");
3217 Register crc = op->crc()->as_register();
3218 Register val = op->val()->as_register();
3219 Register res = op->result_opr()->as_register();
3220
3221 assert_different_registers(val, crc, res);
3222
3223 __ load_const_optimized(res, StubRoutines::crc_table_addr(), R0);
3224 __ kernel_crc32_singleByteReg(crc, val, res, true);
3225 __ mr(res, crc);
3226 }
3227
3228 #undef __
|