summaryrefslogtreecommitdiff
path: root/deps/v8/src/ppc/assembler-ppc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/ppc/assembler-ppc.cc')
-rw-r--r--deps/v8/src/ppc/assembler-ppc.cc59
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();
}