1920 beq(CCR0, *L_success); |
1920 beq(CCR0, *L_success); |
1921 |
1921 |
1922 // Check the supertype display: |
1922 // Check the supertype display: |
1923 if (must_load_sco) { |
1923 if (must_load_sco) { |
1924 // The super check offset is always positive... |
1924 // The super check offset is always positive... |
1925 lwz(check_cache_offset, sco_offset, super_klass); |
1925 lwz(check_cache_offset, sco_offset, super_klass); |
1926 super_check_offset = RegisterOrConstant(check_cache_offset); |
1926 super_check_offset = RegisterOrConstant(check_cache_offset); |
1927 // super_check_offset is register. |
1927 // super_check_offset is register. |
1928 assert_different_registers(sub_klass, super_klass, cached_super, super_check_offset.as_register()); |
1928 assert_different_registers(sub_klass, super_klass, cached_super, super_check_offset.as_register()); |
1929 } |
1929 } |
1930 // The loaded value is the offset from KlassOopDesc. |
1930 // The loaded value is the offset from KlassOopDesc. |
3323 } else { |
3323 } else { |
3324 ld(dst, oopDesc::klass_offset_in_bytes(), src); |
3324 ld(dst, oopDesc::klass_offset_in_bytes(), src); |
3325 } |
3325 } |
3326 } |
3326 } |
3327 |
3327 |
3328 void MacroAssembler::load_mirror(Register mirror, Register method) { |
3328 void MacroAssembler::load_mirror_from_const_method(Register mirror, Register const_method) { |
3329 const int mirror_offset = in_bytes(Klass::java_mirror_offset()); |
3329 ld(mirror, in_bytes(ConstMethod::constants_offset()), const_method); |
3330 ld(mirror, in_bytes(Method::const_offset()), method); |
|
3331 ld(mirror, in_bytes(ConstMethod::constants_offset()), mirror); |
|
3332 ld(mirror, ConstantPool::pool_holder_offset_in_bytes(), mirror); |
3330 ld(mirror, ConstantPool::pool_holder_offset_in_bytes(), mirror); |
3333 ld(mirror, mirror_offset, mirror); |
3331 ld(mirror, in_bytes(Klass::java_mirror_offset()), mirror); |
3334 } |
3332 } |
3335 |
3333 |
3336 // Clear Array |
3334 // Clear Array |
3337 // Kills both input registers. tmp == R0 is allowed. |
3335 // Kills both input registers. tmp == R0 is allowed. |
3338 void MacroAssembler::clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp) { |
3336 void MacroAssembler::clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp) { |
4343 * @param t1 volatile register |
4341 * @param t1 volatile register |
4344 * @param t2 volatile register |
4342 * @param t2 volatile register |
4345 * @param t3 volatile register |
4343 * @param t3 volatile register |
4346 */ |
4344 */ |
4347 void MacroAssembler::kernel_crc32_1word_vpmsumd(Register crc, Register buf, Register len, Register table, |
4345 void MacroAssembler::kernel_crc32_1word_vpmsumd(Register crc, Register buf, Register len, Register table, |
4348 Register constants, Register barretConstants, |
4346 Register constants, Register barretConstants, |
4349 Register t0, Register t1, Register t2, Register t3, Register t4) { |
4347 Register t0, Register t1, Register t2, Register t3, Register t4) { |
4350 assert_different_registers(crc, buf, len, table); |
4348 assert_different_registers(crc, buf, len, table); |
4351 |
4349 |
4352 Label L_alignedHead, L_tail, L_alignTail, L_start, L_end; |
4350 Label L_alignedHead, L_tail, L_alignTail, L_start, L_end; |
4353 |
4351 |
4354 Register prealign = t0; |
4352 Register prealign = t0; |