comparison src/cpu/ppc/vm/macroAssembler_ppc.cpp @ 14413:7687c56b6693

8024379: Adapt PPC64 port to 8003424 Reviewed-by: coleenp
author goetz
date Fri, 06 Sep 2013 10:13:17 +0200
parents ec28f9c041ff
children a0d02bb625e2
comparison
equal deleted inserted replaced
14412:e2722a66aba7 14413:7687c56b6693
2380 } 2380 }
2381 2381
2382 2382
2383 void MacroAssembler::encode_klass_not_null(Register dst, Register src) { 2383 void MacroAssembler::encode_klass_not_null(Register dst, Register src) {
2384 if (src == noreg) src = dst; 2384 if (src == noreg) src = dst;
2385 if (Universe::narrow_klass_base() != NULL) { 2385 assert(Universe::narrow_klass_base() != NULL, "Base should be initialized");
2386 // heapbased 2386 load_const(R0, Universe::narrow_klass_base());
2387 assert(Universe::narrow_klass_shift() != 0, "sanity"); 2387 sub(dst, src, R0);
2388 sub(dst, src, R30); 2388 if (Universe::narrow_klass_shift() != 0) {
2389 srdi(dst, dst, Universe::narrow_klass_shift());
2390 } else if (Universe::narrow_klass_shift() != 0) {
2391 // zerobased
2392 srdi(dst, src, Universe::narrow_klass_shift()); 2389 srdi(dst, src, Universe::narrow_klass_shift());
2393 } else if (src != dst) {
2394 // unscaled
2395 mr(dst, src);
2396 } 2390 }
2397 } 2391 }
2398 2392
2399 void MacroAssembler::store_klass(Register dst_oop, Register klass, Register ck) { 2393 void MacroAssembler::store_klass(Register dst_oop, Register klass, Register ck) {
2400 if (UseCompressedKlassPointers) { 2394 if (UseCompressedKlassPointers) {
2405 } 2399 }
2406 } 2400 }
2407 2401
2408 void MacroAssembler::decode_klass_not_null(Register dst, Register src) { 2402 void MacroAssembler::decode_klass_not_null(Register dst, Register src) {
2409 if (src == noreg) src = dst; 2403 if (src == noreg) src = dst;
2410 if (Universe::narrow_klass_base() != NULL) { 2404 Register shifted_src = src;
2411 // heapbased 2405 assert(Universe::narrow_klass_base() != NULL, "Base should be initialized");
2412 assert(Universe::narrow_klass_shift() != 0, "sanity"); 2406 if (Universe::narrow_klass_shift() != 0) {
2413 sldi(dst, src, Universe::narrow_klass_shift()); 2407 shifted_src = dst;
2414 add(dst, dst, R30); 2408 sldi(shifted_src, src, Universe::narrow_klass_shift());
2415 } else if (Universe::narrow_klass_shift() != 0) { 2409 }
2416 // zerobased 2410 load_const(R0, Universe::narrow_klass_base());
2417 sldi(dst, src, Universe::narrow_klass_shift()); 2411 add(dst, shifted_src, R0);
2418 } else if (src != dst) {
2419 // unscaled
2420 mr(dst, src);
2421 }
2422 } 2412 }
2423 2413
2424 void MacroAssembler::load_klass(Register dst, Register src) { 2414 void MacroAssembler::load_klass(Register dst, Register src) {
2425 if (UseCompressedKlassPointers) { 2415 if (UseCompressedKlassPointers) {
2426 lwz(dst, oopDesc::klass_offset_in_bytes(), src); 2416 lwz(dst, oopDesc::klass_offset_in_bytes(), src);
2439 } 2429 }
2440 load_klass(dst, src); 2430 load_klass(dst, src);
2441 } 2431 }
2442 2432
2443 void MacroAssembler::reinit_heapbase(Register d, Register tmp) { 2433 void MacroAssembler::reinit_heapbase(Register d, Register tmp) {
2444 if (UseCompressedOops || UseCompressedKlassPointers) { 2434 if (Universe::heap() != NULL) {
2435 if (Universe::narrow_oop_base() == NULL) {
2436 Assembler::xorr(R30, R30, R30);
2437 } else {
2438 load_const(R30, Universe::narrow_ptrs_base(), tmp);
2439 }
2440 } else {
2445 load_const(R30, Universe::narrow_ptrs_base_addr(), tmp); 2441 load_const(R30, Universe::narrow_ptrs_base_addr(), tmp);
2446 ld(R30, 0, R30); 2442 ld(R30, 0, R30);
2447 } 2443 }
2448 } 2444 }
2449 2445