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