Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Unified Diff: src/ppc/assembler-ppc.cc

Issue 2732273003: Disentangle assembler from isolate. (Closed)
Patch Set: Address feedback. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ppc/assembler-ppc.h ('k') | src/ppc/assembler-ppc-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ppc/assembler-ppc.cc
diff --git a/src/ppc/assembler-ppc.cc b/src/ppc/assembler-ppc.cc
index 240a7a55ea476b88ffa0a0a75f59ea2f2eaca572..a3ce434fdc61f0ef1961bcfe35b4e7dd6e24880e 100644
--- a/src/ppc/assembler-ppc.cc
+++ b/src/ppc/assembler-ppc.cc
@@ -184,13 +184,13 @@ uint32_t RelocInfo::wasm_function_table_size_reference() {
}
void RelocInfo::unchecked_update_wasm_memory_reference(
- Address address, ICacheFlushMode flush_mode) {
- Assembler::set_target_address_at(isolate_, pc_, host_, address, flush_mode);
+ Isolate* isolate, Address address, ICacheFlushMode flush_mode) {
+ Assembler::set_target_address_at(isolate, pc_, host_, address, flush_mode);
}
-void RelocInfo::unchecked_update_wasm_size(uint32_t size,
+void RelocInfo::unchecked_update_wasm_size(Isolate* isolate, uint32_t size,
ICacheFlushMode flush_mode) {
- Assembler::set_target_address_at(isolate_, pc_, host_,
+ Assembler::set_target_address_at(isolate, pc_, host_,
reinterpret_cast<Address>(size), flush_mode);
}
@@ -231,8 +231,8 @@ 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),
+Assembler::Assembler(IsolateData isolate_data, void* buffer, int buffer_size)
+ : AssemblerBase(isolate_data, buffer, buffer_size),
recorded_ast_id_(TypeFeedbackId::None()),
constant_pool_builder_(kLoadPtrMaxReachBits, kLoadDoubleMaxReachBits) {
reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_);
@@ -493,9 +493,9 @@ void Assembler::target_at_put(int pos, int target_pos, bool* is_branch) {
// pointer in a register.
Register dst = Register::from_code(instr_at(pos + kInstrSize));
int32_t offset = target_pos + (Code::kHeaderSize - kHeapObjectTag);
- CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos), 2,
- CodePatcher::DONT_FLUSH);
- patcher.masm()->bitwise_mov32(dst, offset);
+ PatchingAssembler patcher(isolate_data(),
+ reinterpret_cast<byte*>(buffer_ + pos), 2);
+ patcher.bitwise_mov32(dst, offset);
break;
}
case kUnboundAddLabelOffsetOpcode: {
@@ -504,26 +504,27 @@ void Assembler::target_at_put(int pos, int target_pos, bool* is_branch) {
Register dst = Register::from_code((operands >> 21) & 0x1f);
Register base = Register::from_code((operands >> 16) & 0x1f);
int32_t offset = target_pos + SIGN_EXT_IMM16(operands & kImm16Mask);
- CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos), 2,
- CodePatcher::DONT_FLUSH);
- patcher.masm()->bitwise_add32(dst, base, offset);
+ PatchingAssembler patcher(isolate_data(),
+ reinterpret_cast<byte*>(buffer_ + pos), 2);
+ patcher.bitwise_add32(dst, base, offset);
break;
}
case kUnboundMovLabelAddrOpcode: {
// Load the address of the label in a register.
Register dst = Register::from_code(instr_at(pos + kInstrSize));
- CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos),
- kMovInstructionsNoConstantPool,
- CodePatcher::DONT_FLUSH);
+ PatchingAssembler patcher(isolate_data(),
+ reinterpret_cast<byte*>(buffer_ + pos),
+ kMovInstructionsNoConstantPool);
// Keep internal references relative until EmitRelocations.
- patcher.masm()->bitwise_mov(dst, target_pos);
+ patcher.bitwise_mov(dst, target_pos);
break;
}
case kUnboundJumpTableEntryOpcode: {
- CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos),
- kPointerSize / kInstrSize, CodePatcher::DONT_FLUSH);
+ PatchingAssembler patcher(isolate_data(),
+ reinterpret_cast<byte*>(buffer_ + pos),
+ kPointerSize / kInstrSize);
// Keep internal references relative until EmitRelocations.
- patcher.masm()->dp(target_pos);
+ patcher.dp(target_pos);
break;
}
default:
@@ -2485,7 +2486,7 @@ void Assembler::EmitRelocations() {
RelocInfo::Mode rmode = it->rmode();
Address pc = buffer_ + it->position();
Code* code = NULL;
- RelocInfo rinfo(isolate(), pc, rmode, it->data(), code);
+ RelocInfo rinfo(pc, rmode, it->data(), code);
// Fix up internal references now that they are guaranteed to be bound.
if (RelocInfo::IsInternalReference(rmode)) {
@@ -2495,7 +2496,7 @@ void Assembler::EmitRelocations() {
} else if (RelocInfo::IsInternalReferenceEncoded(rmode)) {
// mov sequence
intptr_t pos = reinterpret_cast<intptr_t>(target_address_at(pc, code));
- set_target_address_at(isolate(), pc, code, buffer_ + pos,
+ set_target_address_at(nullptr, pc, code, buffer_ + pos,
SKIP_ICACHE_FLUSH);
}
@@ -2540,6 +2541,21 @@ void Assembler::CheckTrampolinePool() {
}
}
+PatchingAssembler::PatchingAssembler(IsolateData isolate_data, byte* address,
+ int instructions)
+ : Assembler(isolate_data, address, instructions * kInstrSize + kGap) {
+ DCHECK_EQ(reloc_info_writer.pos(), buffer_ + buffer_size_);
+}
+
+PatchingAssembler::~PatchingAssembler() {
+ // Check that the code was patched as expected.
+ DCHECK_EQ(pc_, buffer_ + buffer_size_ - kGap);
+ DCHECK_EQ(reloc_info_writer.pos(), buffer_ + buffer_size_);
+}
+
+void PatchingAssembler::FlushICache(Isolate* isolate) {
+ Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap);
+}
} // namespace internal
} // namespace v8
« no previous file with comments | « src/ppc/assembler-ppc.h ('k') | src/ppc/assembler-ppc-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698