3113 ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent");
3114
3115 // Already unknown. Nothing to do anymore.
3116 __ andi_(R0, tmp, TypeEntries::type_unknown);
3117 __ bne(CR0, Lnext);
3118
3119 // Different than before. Cannot keep accurate profile.
3120 __ ori(R0, tmp, TypeEntries::type_unknown);
3121 }
3122 }
3123
3124 __ bind(Ldo_update);
3125 __ std(R0, index_or_disp(mdo_addr), mdo_addr->base()->as_pointer_register());
3126
3127 __ bind(Lnext);
3128 if (klass_reg_used) { __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R0); } // reinit
3129 }
3130 __ bind(Ldone);
3131 }
3132
3133
3134 void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) {
3135 assert(op->crc()->is_single_cpu(), "crc must be register");
3136 assert(op->val()->is_single_cpu(), "byte value must be register");
3137 assert(op->result_opr()->is_single_cpu(), "result must be register");
3138 Register crc = op->crc()->as_register();
3139 Register val = op->val()->as_register();
3140 Register res = op->result_opr()->as_register();
3141
3142 assert_different_registers(val, crc, res);
3143
3144 __ load_const_optimized(res, StubRoutines::crc_table_addr(), R0);
3145 __ kernel_crc32_singleByteReg(crc, val, res, true);
3146 __ mr(res, crc);
3147 }
3148
3149 #undef __
|
3113 ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent");
3114
3115 // Already unknown. Nothing to do anymore.
3116 __ andi_(R0, tmp, TypeEntries::type_unknown);
3117 __ bne(CR0, Lnext);
3118
3119 // Different than before. Cannot keep accurate profile.
3120 __ ori(R0, tmp, TypeEntries::type_unknown);
3121 }
3122 }
3123
3124 __ bind(Ldo_update);
3125 __ std(R0, index_or_disp(mdo_addr), mdo_addr->base()->as_pointer_register());
3126
3127 __ bind(Lnext);
3128 if (klass_reg_used) { __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R0); } // reinit
3129 }
3130 __ bind(Ldone);
3131 }
3132
3133 void LIR_Assembler::emit_profile_inline_type(LIR_OpProfileInlineType* op) {
3134 Unimplemented();
3135 }
3136
3137 void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) {
3138 assert(op->crc()->is_single_cpu(), "crc must be register");
3139 assert(op->val()->is_single_cpu(), "byte value must be register");
3140 assert(op->result_opr()->is_single_cpu(), "result must be register");
3141 Register crc = op->crc()->as_register();
3142 Register val = op->val()->as_register();
3143 Register res = op->result_opr()->as_register();
3144
3145 assert_different_registers(val, crc, res);
3146
3147 __ load_const_optimized(res, StubRoutines::crc_table_addr(), R0);
3148 __ kernel_crc32_singleByteReg(crc, val, res, true);
3149 __ mr(res, crc);
3150 }
3151
3152 #undef __
|