1.1 --- a/src/cpu/sparc/vm/assembler_sparc.cpp Wed Mar 11 14:16:13 2009 -0700 1.2 +++ b/src/cpu/sparc/vm/assembler_sparc.cpp Thu Mar 12 10:37:46 2009 -0700 1.3 @@ -4316,7 +4316,13 @@ 1.4 1.5 void MacroAssembler::encode_heap_oop(Register src, Register dst) { 1.6 assert (UseCompressedOops, "must be compressed"); 1.7 + assert (Universe::heap() != NULL, "java heap should be initialized"); 1.8 + assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); 1.9 verify_oop(src); 1.10 + if (Universe::narrow_oop_base() == NULL) { 1.11 + srlx(src, LogMinObjAlignmentInBytes, dst); 1.12 + return; 1.13 + } 1.14 Label done; 1.15 if (src == dst) { 1.16 // optimize for frequent case src == dst 1.17 @@ -4338,26 +4344,39 @@ 1.18 1.19 void MacroAssembler::encode_heap_oop_not_null(Register r) { 1.20 assert (UseCompressedOops, "must be compressed"); 1.21 + assert (Universe::heap() != NULL, "java heap should be initialized"); 1.22 + assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); 1.23 verify_oop(r); 1.24 - sub(r, G6_heapbase, r); 1.25 + if (Universe::narrow_oop_base() != NULL) 1.26 + sub(r, G6_heapbase, r); 1.27 srlx(r, LogMinObjAlignmentInBytes, r); 1.28 } 1.29 1.30 void MacroAssembler::encode_heap_oop_not_null(Register src, Register dst) { 1.31 assert (UseCompressedOops, "must be compressed"); 1.32 + assert (Universe::heap() != NULL, "java heap should be initialized"); 1.33 + assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); 1.34 verify_oop(src); 1.35 - sub(src, G6_heapbase, dst); 1.36 - srlx(dst, LogMinObjAlignmentInBytes, dst); 1.37 + if (Universe::narrow_oop_base() == NULL) { 1.38 + srlx(src, LogMinObjAlignmentInBytes, dst); 1.39 + } else { 1.40 + sub(src, G6_heapbase, dst); 1.41 + srlx(dst, LogMinObjAlignmentInBytes, dst); 1.42 + } 1.43 } 1.44 1.45 // Same algorithm as oops.inline.hpp decode_heap_oop. 1.46 void MacroAssembler::decode_heap_oop(Register src, Register dst) { 1.47 assert (UseCompressedOops, "must be compressed"); 1.48 - Label done; 1.49 + assert (Universe::heap() != NULL, "java heap should be initialized"); 1.50 + assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); 1.51 sllx(src, LogMinObjAlignmentInBytes, dst); 1.52 - bpr(rc_nz, true, Assembler::pt, dst, done); 1.53 - delayed() -> add(dst, G6_heapbase, dst); // annuled if not taken 1.54 - bind(done); 1.55 + if (Universe::narrow_oop_base() != NULL) { 1.56 + Label done; 1.57 + bpr(rc_nz, true, Assembler::pt, dst, done); 1.58 + delayed() -> add(dst, G6_heapbase, dst); // annuled if not taken 1.59 + bind(done); 1.60 + } 1.61 verify_oop(dst); 1.62 } 1.63 1.64 @@ -4366,8 +4385,11 @@ 1.65 // pd_code_size_limit. 1.66 // Also do not verify_oop as this is called by verify_oop. 1.67 assert (UseCompressedOops, "must be compressed"); 1.68 + assert (Universe::heap() != NULL, "java heap should be initialized"); 1.69 + assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); 1.70 sllx(r, LogMinObjAlignmentInBytes, r); 1.71 - add(r, G6_heapbase, r); 1.72 + if (Universe::narrow_oop_base() != NULL) 1.73 + add(r, G6_heapbase, r); 1.74 } 1.75 1.76 void MacroAssembler::decode_heap_oop_not_null(Register src, Register dst) { 1.77 @@ -4375,14 +4397,17 @@ 1.78 // pd_code_size_limit. 1.79 // Also do not verify_oop as this is called by verify_oop. 1.80 assert (UseCompressedOops, "must be compressed"); 1.81 + assert (Universe::heap() != NULL, "java heap should be initialized"); 1.82 + assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); 1.83 sllx(src, LogMinObjAlignmentInBytes, dst); 1.84 - add(dst, G6_heapbase, dst); 1.85 + if (Universe::narrow_oop_base() != NULL) 1.86 + add(dst, G6_heapbase, dst); 1.87 } 1.88 1.89 void MacroAssembler::reinit_heapbase() { 1.90 if (UseCompressedOops) { 1.91 // call indirectly to solve generation ordering problem 1.92 - Address base(G6_heapbase, (address)Universe::heap_base_addr()); 1.93 + Address base(G6_heapbase, (address)Universe::narrow_oop_base_addr()); 1.94 load_ptr_contents(base, G6_heapbase); 1.95 } 1.96 }