| Index: src/assembler.h
|
| diff --git a/src/assembler.h b/src/assembler.h
|
| index df8c8a9cac32cc6243b9b0167ab7aab345e22399..357bac6e37333a5f7a8d2636365e001d7ec09b41 100644
|
| --- a/src/assembler.h
|
| +++ b/src/assembler.h
|
| @@ -276,6 +276,15 @@ class Label BASE_EMBEDDED {
|
|
|
| enum SaveFPRegsMode { kDontSaveFPRegs, kSaveFPRegs };
|
|
|
| +// Specifies whether to perform icache flush operations on RelocInfo updates.
|
| +// If FLUSH_ICACHE_IF_NEEDED, the icache will always be flushed if an
|
| +// instruction was modifed. If SKIP_ICACHE_FLUSH_IF_ATOMIC, the icache flush
|
| +// will be skipped if the update can be made atomically such that the CPU will
|
| +// execute either the complete old instruction sequence, or the complete new
|
| +// sequence. If SKIP_ICACHE_FLUSH the flush will always be skipped.
|
| +enum ICacheFlushMode { FLUSH_ICACHE_IF_NEEDED,
|
| + SKIP_ICACHE_FLUSH_IF_ATOMIC,
|
| + SKIP_ICACHE_FLUSH };
|
|
|
| // -----------------------------------------------------------------------------
|
| // Relocation information
|
| @@ -360,7 +369,6 @@ class RelocInfo {
|
| LAST_STANDARD_NONCOMPACT_ENUM = INTERNAL_REFERENCE
|
| };
|
|
|
| -
|
| RelocInfo() {}
|
|
|
| RelocInfo(byte* pc, Mode rmode, intptr_t data, Code* host)
|
| @@ -468,19 +476,30 @@ class RelocInfo {
|
| // can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)
|
| INLINE(Address target_address());
|
| INLINE(void set_target_address(Address target,
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER));
|
| + WriteBarrierMode write_barrier_mode =
|
| + UPDATE_WRITE_BARRIER,
|
| + ICacheFlushMode icache_flush_mode =
|
| + FLUSH_ICACHE_IF_NEEDED));
|
| INLINE(Object* target_object());
|
| INLINE(Handle<Object> target_object_handle(Assembler* origin));
|
| INLINE(void set_target_object(Object* target,
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER));
|
| + WriteBarrierMode write_barrier_mode =
|
| + UPDATE_WRITE_BARRIER,
|
| + ICacheFlushMode icache_flush_mode =
|
| + FLUSH_ICACHE_IF_NEEDED));
|
| INLINE(Address target_runtime_entry(Assembler* origin));
|
| INLINE(void set_target_runtime_entry(Address target,
|
| - WriteBarrierMode mode =
|
| - UPDATE_WRITE_BARRIER));
|
| + WriteBarrierMode write_barrier_mode =
|
| + UPDATE_WRITE_BARRIER,
|
| + ICacheFlushMode icache_flush_mode =
|
| + FLUSH_ICACHE_IF_NEEDED));
|
| INLINE(Cell* target_cell());
|
| INLINE(Handle<Cell> target_cell_handle());
|
| INLINE(void set_target_cell(Cell* cell,
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER));
|
| + WriteBarrierMode write_barrier_mode =
|
| + UPDATE_WRITE_BARRIER,
|
| + ICacheFlushMode icache_flush_mode =
|
| + FLUSH_ICACHE_IF_NEEDED));
|
| INLINE(Handle<Object> code_age_stub_handle(Assembler* origin));
|
| INLINE(Code* code_age_stub());
|
| INLINE(void set_code_age_stub(Code* stub));
|
|
|