1.1 --- a/src/cpu/ppc/vm/macroAssembler_ppc.cpp Thu Mar 06 10:55:28 2014 -0800 1.2 +++ b/src/cpu/ppc/vm/macroAssembler_ppc.cpp Mon Mar 10 12:58:02 2014 +0100 1.3 @@ -2412,7 +2412,8 @@ 1.4 #ifdef CC_INTERP 1.5 ld(tmp1/*pc*/, _top_ijava_frame_abi(frame_manager_lr), sp); 1.6 #else 1.7 - Unimplemented(); 1.8 + address entry = pc(); 1.9 + load_const_optimized(tmp1, entry); 1.10 #endif 1.11 1.12 set_last_Java_frame(/*sp=*/sp, /*pc=*/tmp1); 1.13 @@ -2472,6 +2473,16 @@ 1.14 } 1.15 } 1.16 1.17 +void MacroAssembler::store_klass_gap(Register dst_oop, Register val) { 1.18 + if (UseCompressedClassPointers) { 1.19 + if (val == noreg) { 1.20 + val = R0; 1.21 + li(val, 0); 1.22 + } 1.23 + stw(val, oopDesc::klass_gap_offset_in_bytes(), dst_oop); // klass gap if compressed 1.24 + } 1.25 +} 1.26 + 1.27 int MacroAssembler::instr_size_for_decode_klass_not_null() { 1.28 if (!UseCompressedClassPointers) return 0; 1.29 int num_instrs = 1; // shift or move 1.30 @@ -3143,3 +3154,15 @@ 1.31 } 1.32 1.33 #endif // !PRODUCT 1.34 + 1.35 +SkipIfEqualZero::SkipIfEqualZero(MacroAssembler* masm, Register temp, const bool* flag_addr) : _masm(masm), _label() { 1.36 + int simm16_offset = masm->load_const_optimized(temp, (address)flag_addr, R0, true); 1.37 + assert(sizeof(bool) == 1, "PowerPC ABI"); 1.38 + masm->lbz(temp, simm16_offset, temp); 1.39 + masm->cmpwi(CCR0, temp, 0); 1.40 + masm->beq(CCR0, _label); 1.41 +} 1.42 + 1.43 +SkipIfEqualZero::~SkipIfEqualZero() { 1.44 + _masm->bind(_label); 1.45 +}