| Index: src/arm64/assembler-arm64.h
 | 
| diff --git a/src/arm64/assembler-arm64.h b/src/arm64/assembler-arm64.h
 | 
| index 1072b76caec4ddb4b1c0df4e0e22b2cdc94c0ab9..ea1d94f62817f9db2d2d2aa15ad83430cb2188fa 100644
 | 
| --- a/src/arm64/assembler-arm64.h
 | 
| +++ b/src/arm64/assembler-arm64.h
 | 
| @@ -717,7 +717,9 @@ class Assembler : public AssemblerBase {
 | 
|    // for code generation and assumes its size to be buffer_size. If the buffer
 | 
|    // is too small, a fatal error occurs. No deallocation of the buffer is done
 | 
|    // upon destruction of the assembler.
 | 
| -  Assembler(Isolate* arg_isolate, void* buffer, int buffer_size);
 | 
| +  Assembler(Isolate* isolate, void* buffer, int buffer_size)
 | 
| +      : Assembler(IsolateData(isolate), buffer, buffer_size) {}
 | 
| +  Assembler(IsolateData isolate_data, void* buffer, int buffer_size);
 | 
|  
 | 
|    virtual ~Assembler();
 | 
|  
 | 
| @@ -768,6 +770,7 @@ class Assembler : public AssemblerBase {
 | 
|    inline static Address target_pointer_address_at(Address pc);
 | 
|  
 | 
|    // Read/Modify the code target address in the branch/call instruction at pc.
 | 
| +  // The isolate argument is unused (and may be nullptr) when skipping flushing.
 | 
|    inline static Address target_address_at(Address pc, Address constant_pool);
 | 
|    inline static void set_target_address_at(
 | 
|        Isolate* isolate, Address pc, Address constant_pool, Address target,
 | 
| @@ -2045,6 +2048,7 @@ class Assembler : public AssemblerBase {
 | 
|    // Each relocation is encoded as a variable size value
 | 
|    static constexpr int kMaxRelocSize = RelocInfoWriter::kMaxSize;
 | 
|    RelocInfoWriter reloc_info_writer;
 | 
| +
 | 
|    // Internal reference positions, required for (potential) patching in
 | 
|    // GrowBuffer(); contains only those internal references whose labels
 | 
|    // are already bound.
 | 
| @@ -2156,14 +2160,18 @@ class PatchingAssembler : public Assembler {
 | 
|    // If more or fewer instructions than expected are generated or if some
 | 
|    // relocation information takes space in the buffer, the PatchingAssembler
 | 
|    // will crash trying to grow the buffer.
 | 
| -  PatchingAssembler(Isolate* isolate, Instruction* start, unsigned count)
 | 
| -      : Assembler(isolate, reinterpret_cast<byte*>(start),
 | 
| -                  count * kInstructionSize + kGap) {
 | 
| -    StartBlockPools();
 | 
| -  }
 | 
|  
 | 
| +  // This version will flush at destruction.
 | 
|    PatchingAssembler(Isolate* isolate, byte* start, unsigned count)
 | 
| -      : Assembler(isolate, start, count * kInstructionSize + kGap) {
 | 
| +      : PatchingAssembler(IsolateData(isolate), start, count) {
 | 
| +    CHECK_NOT_NULL(isolate);
 | 
| +    isolate_ = isolate;
 | 
| +  }
 | 
| +
 | 
| +  // This version will not flush.
 | 
| +  PatchingAssembler(IsolateData isolate_data, byte* start, unsigned count)
 | 
| +      : Assembler(isolate_data, start, count * kInstructionSize + kGap),
 | 
| +        isolate_(nullptr) {
 | 
|      // Block constant pool emission.
 | 
|      StartBlockPools();
 | 
|    }
 | 
| @@ -2178,13 +2186,16 @@ class PatchingAssembler : public Assembler {
 | 
|      DCHECK(IsConstPoolEmpty());
 | 
|      // Flush the Instruction cache.
 | 
|      size_t length = buffer_size_ - kGap;
 | 
| -    Assembler::FlushICache(isolate(), buffer_, length);
 | 
| +    if (isolate_ != nullptr) Assembler::FlushICache(isolate_, buffer_, length);
 | 
|    }
 | 
|  
 | 
|    // See definition of PatchAdrFar() for details.
 | 
|    static constexpr int kAdrFarPatchableNNops = 2;
 | 
|    static constexpr int kAdrFarPatchableNInstrs = kAdrFarPatchableNNops + 2;
 | 
|    void PatchAdrFar(int64_t target_offset);
 | 
| +
 | 
| + private:
 | 
| +  Isolate* isolate_;
 | 
|  };
 | 
|  
 | 
|  
 | 
| 
 |