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