diff options
Diffstat (limited to 'deps/v8/src/ppc/assembler-ppc.cc')
-rw-r--r-- | deps/v8/src/ppc/assembler-ppc.cc | 59 |
1 files changed, 45 insertions, 14 deletions
diff --git a/deps/v8/src/ppc/assembler-ppc.cc b/deps/v8/src/ppc/assembler-ppc.cc index 507eec11af..08a8005ee1 100644 --- a/deps/v8/src/ppc/assembler-ppc.cc +++ b/deps/v8/src/ppc/assembler-ppc.cc @@ -155,6 +155,33 @@ bool RelocInfo::IsInConstantPool() { return false; } +Address RelocInfo::wasm_memory_reference() { + DCHECK(IsWasmMemoryReference(rmode_)); + return Assembler::target_address_at(pc_, host_); +} + +uint32_t RelocInfo::wasm_memory_size_reference() { + DCHECK(IsWasmMemorySizeReference(rmode_)); + return static_cast<uint32_t>( + reinterpret_cast<intptr_t>(Assembler::target_address_at(pc_, host_))); +} + +Address RelocInfo::wasm_global_reference() { + DCHECK(IsWasmGlobalReference(rmode_)); + return Assembler::target_address_at(pc_, host_); +} + + +void RelocInfo::unchecked_update_wasm_memory_reference( + Address address, ICacheFlushMode flush_mode) { + Assembler::set_target_address_at(isolate_, pc_, host_, address, flush_mode); +} + +void RelocInfo::unchecked_update_wasm_memory_size(uint32_t size, + ICacheFlushMode flush_mode) { + Assembler::set_target_address_at(isolate_, pc_, host_, + reinterpret_cast<Address>(size), flush_mode); +} // ----------------------------------------------------------------------------- // Implementation of Operand and MemOperand @@ -166,7 +193,6 @@ Operand::Operand(Handle<Object> handle) { // Verify all Objects referred by code are NOT in new space. Object* obj = *handle; if (obj->IsHeapObject()) { - DCHECK(!HeapObject::cast(obj)->GetHeap()->InNewSpace(obj)); imm_ = reinterpret_cast<intptr_t>(handle.location()); rmode_ = RelocInfo::EMBEDDED_OBJECT; } else { @@ -194,12 +220,10 @@ MemOperand::MemOperand(Register ra, Register rb) { // ----------------------------------------------------------------------------- // Specific instructions, constants, and masks. - Assembler::Assembler(Isolate* isolate, void* buffer, int buffer_size) : AssemblerBase(isolate, buffer, buffer_size), recorded_ast_id_(TypeFeedbackId::None()), - constant_pool_builder_(kLoadPtrMaxReachBits, kLoadDoubleMaxReachBits), - positions_recorder_(this) { + constant_pool_builder_(kLoadPtrMaxReachBits, kLoadDoubleMaxReachBits) { reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_); no_trampoline_pool_before_ = 0; @@ -230,6 +254,8 @@ void Assembler::GetCode(CodeDesc* desc) { desc->constant_pool_size = (constant_pool_offset ? desc->instr_size - constant_pool_offset : 0); desc->origin = this; + desc->unwinding_info_size = 0; + desc->unwinding_info = nullptr; } @@ -678,13 +704,11 @@ int Assembler::link(Label* L) { void Assembler::bclr(BOfield bo, int condition_bit, LKBit lk) { - positions_recorder()->WriteRecordedPositions(); emit(EXT1 | bo | condition_bit * B16 | BCLRX | lk); } void Assembler::bcctr(BOfield bo, int condition_bit, LKBit lk) { - positions_recorder()->WriteRecordedPositions(); emit(EXT1 | bo | condition_bit * B16 | BCCTRX | lk); } @@ -701,9 +725,6 @@ void Assembler::bctrl() { bcctr(BA, 0, SetLK); } void Assembler::bc(int branch_offset, BOfield bo, int condition_bit, LKBit lk) { - if (lk == SetLK) { - positions_recorder()->WriteRecordedPositions(); - } int imm16 = branch_offset; CHECK(is_int16(imm16) && (imm16 & (kAAMask | kLKMask)) == 0); emit(BCX | bo | condition_bit * B16 | (imm16 & kImm16Mask) | lk); @@ -711,9 +732,6 @@ void Assembler::bc(int branch_offset, BOfield bo, int condition_bit, LKBit lk) { void Assembler::b(int branch_offset, LKBit lk) { - if (lk == SetLK) { - positions_recorder()->WriteRecordedPositions(); - } int imm26 = branch_offset; CHECK(is_int26(imm26) && (imm26 & (kAAMask | kLKMask)) == 0); emit(BX | (imm26 & kImm26Mask) | lk); @@ -1213,6 +1231,21 @@ void Assembler::lwax(Register rt, const MemOperand& src) { } +void Assembler::ldbrx(Register dst, const MemOperand& src) { + x_form(EXT2 | LDBRX, src.ra(), dst, src.rb(), LeaveRC); +} + + +void Assembler::lwbrx(Register dst, const MemOperand& src) { + x_form(EXT2 | LWBRX, src.ra(), dst, src.rb(), LeaveRC); +} + + +void Assembler::lhbrx(Register dst, const MemOperand& src) { + x_form(EXT2 | LHBRX, src.ra(), dst, src.rb(), LeaveRC); +} + + void Assembler::stb(Register dst, const MemOperand& src) { DCHECK(!src.ra_.is(r0)); d_form(STB, dst, src.ra(), src.offset(), true); @@ -2445,8 +2478,6 @@ void Assembler::EmitRelocations() { reloc_info_writer.Write(&rinfo); } - - reloc_info_writer.Finish(); } |