| OLD | NEW |
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
| 2 // All Rights Reserved. | 2 // All Rights Reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
| 10 // | 10 // |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 class StatsCounter; | 57 class StatsCounter; |
| 58 | 58 |
| 59 // ----------------------------------------------------------------------------- | 59 // ----------------------------------------------------------------------------- |
| 60 // Platform independent assembler base class. | 60 // Platform independent assembler base class. |
| 61 | 61 |
| 62 enum class CodeObjectRequired { kNo, kYes }; | 62 enum class CodeObjectRequired { kNo, kYes }; |
| 63 | 63 |
| 64 | 64 |
| 65 class AssemblerBase: public Malloced { | 65 class AssemblerBase: public Malloced { |
| 66 public: | 66 public: |
| 67 AssemblerBase(Isolate* isolate, void* buffer, int buffer_size); | 67 struct IsolateData { |
| 68 explicit IsolateData(Isolate* isolate); |
| 69 IsolateData(const IsolateData&) = default; |
| 70 |
| 71 bool serializer_enabled_; |
| 72 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 |
| 73 size_t max_old_generation_size_; |
| 74 #endif |
| 75 #if V8_TARGET_ARCH_X64 |
| 76 Address code_range_start_; |
| 77 #endif |
| 78 }; |
| 79 |
| 80 AssemblerBase(IsolateData isolate_data, void* buffer, int buffer_size); |
| 68 virtual ~AssemblerBase(); | 81 virtual ~AssemblerBase(); |
| 69 | 82 |
| 70 Isolate* isolate() const { return isolate_; } | 83 IsolateData isolate_data() const { return isolate_data_; } |
| 71 int jit_cookie() const { return jit_cookie_; } | 84 |
| 85 bool serializer_enabled() const { return isolate_data_.serializer_enabled_; } |
| 86 void enable_serializer() { isolate_data_.serializer_enabled_ = true; } |
| 72 | 87 |
| 73 bool emit_debug_code() const { return emit_debug_code_; } | 88 bool emit_debug_code() const { return emit_debug_code_; } |
| 74 void set_emit_debug_code(bool value) { emit_debug_code_ = value; } | 89 void set_emit_debug_code(bool value) { emit_debug_code_ = value; } |
| 75 | 90 |
| 76 bool serializer_enabled() const { return serializer_enabled_; } | |
| 77 void enable_serializer() { serializer_enabled_ = true; } | |
| 78 | |
| 79 bool predictable_code_size() const { return predictable_code_size_; } | 91 bool predictable_code_size() const { return predictable_code_size_; } |
| 80 void set_predictable_code_size(bool value) { predictable_code_size_ = value; } | 92 void set_predictable_code_size(bool value) { predictable_code_size_ = value; } |
| 81 | 93 |
| 82 uint64_t enabled_cpu_features() const { return enabled_cpu_features_; } | 94 uint64_t enabled_cpu_features() const { return enabled_cpu_features_; } |
| 83 void set_enabled_cpu_features(uint64_t features) { | 95 void set_enabled_cpu_features(uint64_t features) { |
| 84 enabled_cpu_features_ = features; | 96 enabled_cpu_features_ = features; |
| 85 } | 97 } |
| 86 // Features are usually enabled by CpuFeatureScope, which also asserts that | 98 // Features are usually enabled by CpuFeatureScope, which also asserts that |
| 87 // the features are supported before they are enabled. | 99 // the features are supported before they are enabled. |
| 88 bool IsEnabled(CpuFeature f) { | 100 bool IsEnabled(CpuFeature f) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 106 // cross-snapshotting. | 118 // cross-snapshotting. |
| 107 static void QuietNaN(HeapObject* nan) { } | 119 static void QuietNaN(HeapObject* nan) { } |
| 108 | 120 |
| 109 int pc_offset() const { return static_cast<int>(pc_ - buffer_); } | 121 int pc_offset() const { return static_cast<int>(pc_ - buffer_); } |
| 110 | 122 |
| 111 // This function is called when code generation is aborted, so that | 123 // This function is called when code generation is aborted, so that |
| 112 // the assembler could clean up internal data structures. | 124 // the assembler could clean up internal data structures. |
| 113 virtual void AbortedCodeGeneration() { } | 125 virtual void AbortedCodeGeneration() { } |
| 114 | 126 |
| 115 // Debugging | 127 // Debugging |
| 116 void Print(); | 128 void Print(Isolate* isolate); |
| 117 | 129 |
| 118 static const int kMinimalBufferSize = 4*KB; | 130 static const int kMinimalBufferSize = 4*KB; |
| 119 | 131 |
| 120 static void FlushICache(Isolate* isolate, void* start, size_t size); | 132 static void FlushICache(Isolate* isolate, void* start, size_t size); |
| 121 | 133 |
| 122 protected: | 134 protected: |
| 123 // The buffer into which code and relocation info are generated. It could | 135 // The buffer into which code and relocation info are generated. It could |
| 124 // either be owned by the assembler or be provided externally. | 136 // either be owned by the assembler or be provided externally. |
| 125 byte* buffer_; | 137 byte* buffer_; |
| 126 int buffer_size_; | 138 int buffer_size_; |
| 127 bool own_buffer_; | 139 bool own_buffer_; |
| 128 | 140 |
| 129 void set_constant_pool_available(bool available) { | 141 void set_constant_pool_available(bool available) { |
| 130 if (FLAG_enable_embedded_constant_pool) { | 142 if (FLAG_enable_embedded_constant_pool) { |
| 131 constant_pool_available_ = available; | 143 constant_pool_available_ = available; |
| 132 } else { | 144 } else { |
| 133 // Embedded constant pool not supported on this architecture. | 145 // Embedded constant pool not supported on this architecture. |
| 134 UNREACHABLE(); | 146 UNREACHABLE(); |
| 135 } | 147 } |
| 136 } | 148 } |
| 137 | 149 |
| 138 // The program counter, which points into the buffer above and moves forward. | 150 // The program counter, which points into the buffer above and moves forward. |
| 139 byte* pc_; | 151 byte* pc_; |
| 140 | 152 |
| 141 private: | 153 private: |
| 142 Isolate* isolate_; | 154 IsolateData isolate_data_; |
| 143 int jit_cookie_; | |
| 144 uint64_t enabled_cpu_features_; | 155 uint64_t enabled_cpu_features_; |
| 145 bool emit_debug_code_; | 156 bool emit_debug_code_; |
| 146 bool predictable_code_size_; | 157 bool predictable_code_size_; |
| 147 bool serializer_enabled_; | |
| 148 | 158 |
| 149 // Indicates whether the constant pool can be accessed, which is only possible | 159 // Indicates whether the constant pool can be accessed, which is only possible |
| 150 // if the pp register points to the current code object's constant pool. | 160 // if the pp register points to the current code object's constant pool. |
| 151 bool constant_pool_available_; | 161 bool constant_pool_available_; |
| 152 | 162 |
| 153 // Constant pool. | 163 // Constant pool. |
| 154 friend class FrameAndConstantPoolScope; | 164 friend class FrameAndConstantPoolScope; |
| 155 friend class ConstantPoolUnavailableScope; | 165 friend class ConstantPoolUnavailableScope; |
| 156 }; | 166 }; |
| 157 | 167 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 375 |
| 366 FIRST_REAL_RELOC_MODE = CODE_TARGET, | 376 FIRST_REAL_RELOC_MODE = CODE_TARGET, |
| 367 LAST_REAL_RELOC_MODE = VENEER_POOL, | 377 LAST_REAL_RELOC_MODE = VENEER_POOL, |
| 368 LAST_CODE_ENUM = CODE_TARGET_WITH_ID, | 378 LAST_CODE_ENUM = CODE_TARGET_WITH_ID, |
| 369 LAST_GCED_ENUM = WASM_FUNCTION_TABLE_SIZE_REFERENCE, | 379 LAST_GCED_ENUM = WASM_FUNCTION_TABLE_SIZE_REFERENCE, |
| 370 FIRST_SHAREABLE_RELOC_MODE = CELL, | 380 FIRST_SHAREABLE_RELOC_MODE = CELL, |
| 371 }; | 381 }; |
| 372 | 382 |
| 373 STATIC_ASSERT(NUMBER_OF_MODES <= kBitsPerInt); | 383 STATIC_ASSERT(NUMBER_OF_MODES <= kBitsPerInt); |
| 374 | 384 |
| 375 explicit RelocInfo(Isolate* isolate) : isolate_(isolate) { | 385 RelocInfo() = default; |
| 376 DCHECK_NOT_NULL(isolate); | |
| 377 } | |
| 378 | 386 |
| 379 RelocInfo(Isolate* isolate, byte* pc, Mode rmode, intptr_t data, Code* host) | 387 RelocInfo(byte* pc, Mode rmode, intptr_t data, Code* host) |
| 380 : isolate_(isolate), pc_(pc), rmode_(rmode), data_(data), host_(host) { | 388 : pc_(pc), rmode_(rmode), data_(data), host_(host) {} |
| 381 DCHECK_NOT_NULL(isolate); | |
| 382 } | |
| 383 | 389 |
| 384 static inline bool IsRealRelocMode(Mode mode) { | 390 static inline bool IsRealRelocMode(Mode mode) { |
| 385 return mode >= FIRST_REAL_RELOC_MODE && mode <= LAST_REAL_RELOC_MODE; | 391 return mode >= FIRST_REAL_RELOC_MODE && mode <= LAST_REAL_RELOC_MODE; |
| 386 } | 392 } |
| 387 static inline bool IsCodeTarget(Mode mode) { | 393 static inline bool IsCodeTarget(Mode mode) { |
| 388 return mode <= LAST_CODE_ENUM; | 394 return mode <= LAST_CODE_ENUM; |
| 389 } | 395 } |
| 390 static inline bool IsEmbeddedObject(Mode mode) { | 396 static inline bool IsEmbeddedObject(Mode mode) { |
| 391 return mode == EMBEDDED_OBJECT; | 397 return mode == EMBEDDED_OBJECT; |
| 392 } | 398 } |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 static inline bool IsWasmPtrReference(Mode mode) { | 477 static inline bool IsWasmPtrReference(Mode mode) { |
| 472 return mode == WASM_MEMORY_REFERENCE || mode == WASM_GLOBAL_REFERENCE; | 478 return mode == WASM_MEMORY_REFERENCE || mode == WASM_GLOBAL_REFERENCE; |
| 473 } | 479 } |
| 474 static inline bool IsWasmProtectedLanding(Mode mode) { | 480 static inline bool IsWasmProtectedLanding(Mode mode) { |
| 475 return mode == WASM_PROTECTED_INSTRUCTION_LANDING; | 481 return mode == WASM_PROTECTED_INSTRUCTION_LANDING; |
| 476 } | 482 } |
| 477 | 483 |
| 478 static inline int ModeMask(Mode mode) { return 1 << mode; } | 484 static inline int ModeMask(Mode mode) { return 1 << mode; } |
| 479 | 485 |
| 480 // Accessors | 486 // Accessors |
| 481 Isolate* isolate() const { return isolate_; } | |
| 482 byte* pc() const { return pc_; } | 487 byte* pc() const { return pc_; } |
| 483 void set_pc(byte* pc) { pc_ = pc; } | 488 void set_pc(byte* pc) { pc_ = pc; } |
| 484 Mode rmode() const { return rmode_; } | 489 Mode rmode() const { return rmode_; } |
| 485 intptr_t data() const { return data_; } | 490 intptr_t data() const { return data_; } |
| 486 Code* host() const { return host_; } | 491 Code* host() const { return host_; } |
| 487 void set_host(Code* host) { host_ = host; } | 492 void set_host(Code* host) { host_ = host; } |
| 488 | 493 |
| 489 // Apply a relocation by delta bytes. When the code object is moved, PC | 494 // Apply a relocation by delta bytes. When the code object is moved, PC |
| 490 // relative addresses have to be updated as well as absolute addresses | 495 // relative addresses have to be updated as well as absolute addresses |
| 491 // inside the code (internal references). | 496 // inside the code (internal references). |
| 492 // Do not forget to flush the icache afterwards! | 497 // Do not forget to flush the icache afterwards! |
| 493 INLINE(void apply(intptr_t delta)); | 498 INLINE(void apply(intptr_t delta)); |
| 494 | 499 |
| 495 // Is the pointer this relocation info refers to coded like a plain pointer | 500 // Is the pointer this relocation info refers to coded like a plain pointer |
| 496 // or is it strange in some way (e.g. relative or patched into a series of | 501 // or is it strange in some way (e.g. relative or patched into a series of |
| 497 // instructions). | 502 // instructions). |
| 498 bool IsCodedSpecially(); | 503 bool IsCodedSpecially(); |
| 499 | 504 |
| 500 // If true, the pointer this relocation info refers to is an entry in the | 505 // If true, the pointer this relocation info refers to is an entry in the |
| 501 // constant pool, otherwise the pointer is embedded in the instruction stream. | 506 // constant pool, otherwise the pointer is embedded in the instruction stream. |
| 502 bool IsInConstantPool(); | 507 bool IsInConstantPool(); |
| 503 | 508 |
| 504 Address wasm_memory_reference(); | 509 Address wasm_memory_reference(); |
| 505 Address wasm_global_reference(); | 510 Address wasm_global_reference(); |
| 506 uint32_t wasm_function_table_size_reference(); | 511 uint32_t wasm_function_table_size_reference(); |
| 507 uint32_t wasm_memory_size_reference(); | 512 uint32_t wasm_memory_size_reference(); |
| 508 void update_wasm_memory_reference( | 513 void update_wasm_memory_reference( |
| 509 Address old_base, Address new_base, | 514 Isolate* isolate, Address old_base, Address new_base, |
| 510 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); | 515 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); |
| 511 void update_wasm_memory_size( | 516 void update_wasm_memory_size( |
| 512 uint32_t old_size, uint32_t new_size, | 517 Isolate* isolate, uint32_t old_size, uint32_t new_size, |
| 513 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); | 518 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); |
| 514 void update_wasm_global_reference( | 519 void update_wasm_global_reference( |
| 515 Address old_base, Address new_base, | 520 Isolate* isolate, Address old_base, Address new_base, |
| 516 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); | 521 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); |
| 517 void update_wasm_function_table_size_reference( | 522 void update_wasm_function_table_size_reference( |
| 518 uint32_t old_base, uint32_t new_base, | 523 Isolate* isolate, uint32_t old_base, uint32_t new_base, |
| 519 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); | 524 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); |
| 520 void set_target_address( | 525 void set_target_address( |
| 521 Address target, | 526 Isolate* isolate, Address target, |
| 522 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, | 527 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, |
| 523 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); | 528 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); |
| 524 | 529 |
| 525 // this relocation applies to; | 530 // this relocation applies to; |
| 526 // can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) | 531 // can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) |
| 527 INLINE(Address target_address()); | 532 INLINE(Address target_address()); |
| 528 INLINE(HeapObject* target_object()); | 533 INLINE(HeapObject* target_object()); |
| 529 INLINE(Handle<HeapObject> target_object_handle(Assembler* origin)); | 534 INLINE(Handle<HeapObject> target_object_handle(Assembler* origin)); |
| 530 INLINE(void set_target_object( | 535 INLINE(void set_target_object( |
| 531 HeapObject* target, | 536 HeapObject* target, |
| 532 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, | 537 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, |
| 533 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED)); | 538 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED)); |
| 534 INLINE(Address target_runtime_entry(Assembler* origin)); | 539 INLINE(Address target_runtime_entry(Assembler* origin)); |
| 535 INLINE(void set_target_runtime_entry( | 540 INLINE(void set_target_runtime_entry( |
| 536 Address target, | 541 Isolate* isolate, Address target, |
| 537 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, | 542 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, |
| 538 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED)); | 543 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED)); |
| 539 INLINE(Cell* target_cell()); | 544 INLINE(Cell* target_cell()); |
| 540 INLINE(Handle<Cell> target_cell_handle()); | 545 INLINE(Handle<Cell> target_cell_handle()); |
| 541 INLINE(void set_target_cell( | 546 INLINE(void set_target_cell( |
| 542 Cell* cell, WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, | 547 Cell* cell, WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, |
| 543 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED)); | 548 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED)); |
| 544 INLINE(Handle<Code> code_age_stub_handle(Assembler* origin)); | 549 INLINE(Handle<Code> code_age_stub_handle(Assembler* origin)); |
| 545 INLINE(Code* code_age_stub()); | 550 INLINE(Code* code_age_stub()); |
| 546 INLINE(void set_code_age_stub( | 551 INLINE(void set_code_age_stub( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 INLINE(Address target_internal_reference()); | 583 INLINE(Address target_internal_reference()); |
| 579 | 584 |
| 580 // Return the reference address this relocation applies to; | 585 // Return the reference address this relocation applies to; |
| 581 // can only be called if rmode_ is INTERNAL_REFERENCE. | 586 // can only be called if rmode_ is INTERNAL_REFERENCE. |
| 582 INLINE(Address target_internal_reference_address()); | 587 INLINE(Address target_internal_reference_address()); |
| 583 | 588 |
| 584 // Read/modify the address of a call instruction. This is used to relocate | 589 // Read/modify the address of a call instruction. This is used to relocate |
| 585 // the break points where straight-line code is patched with a call | 590 // the break points where straight-line code is patched with a call |
| 586 // instruction. | 591 // instruction. |
| 587 INLINE(Address debug_call_address()); | 592 INLINE(Address debug_call_address()); |
| 588 INLINE(void set_debug_call_address(Address target)); | 593 INLINE(void set_debug_call_address(Isolate*, Address target)); |
| 589 | 594 |
| 590 // Wipe out a relocation to a fixed value, used for making snapshots | 595 // Wipe out a relocation to a fixed value, used for making snapshots |
| 591 // reproducible. | 596 // reproducible. |
| 592 INLINE(void WipeOut()); | 597 INLINE(void WipeOut(Isolate* isolate)); |
| 593 | 598 |
| 594 template<typename StaticVisitor> inline void Visit(Heap* heap); | 599 template<typename StaticVisitor> inline void Visit(Heap* heap); |
| 595 | 600 |
| 596 template <typename ObjectVisitor> | 601 template <typename ObjectVisitor> |
| 597 inline void Visit(Isolate* isolate, ObjectVisitor* v); | 602 inline void Visit(Isolate* isolate, ObjectVisitor* v); |
| 598 | 603 |
| 599 // Check whether this debug break slot has been patched with a call to the | 604 // Check whether this debug break slot has been patched with a call to the |
| 600 // debugger. | 605 // debugger. |
| 601 bool IsPatchedDebugBreakSlotSequence(); | 606 bool IsPatchedDebugBreakSlotSequence(); |
| 602 | 607 |
| 603 #ifdef DEBUG | 608 #ifdef DEBUG |
| 604 // Check whether the given code contains relocation information that | 609 // Check whether the given code contains relocation information that |
| 605 // either is position-relative or movable by the garbage collector. | 610 // either is position-relative or movable by the garbage collector. |
| 606 static bool RequiresRelocation(const CodeDesc& desc); | 611 static bool RequiresRelocation(Isolate* isolate, const CodeDesc& desc); |
| 607 #endif | 612 #endif |
| 608 | 613 |
| 609 #ifdef ENABLE_DISASSEMBLER | 614 #ifdef ENABLE_DISASSEMBLER |
| 610 // Printing | 615 // Printing |
| 611 static const char* RelocModeName(Mode rmode); | 616 static const char* RelocModeName(Mode rmode); |
| 612 void Print(Isolate* isolate, std::ostream& os); // NOLINT | 617 void Print(Isolate* isolate, std::ostream& os); // NOLINT |
| 613 #endif // ENABLE_DISASSEMBLER | 618 #endif // ENABLE_DISASSEMBLER |
| 614 #ifdef VERIFY_HEAP | 619 #ifdef VERIFY_HEAP |
| 615 void Verify(Isolate* isolate); | 620 void Verify(Isolate* isolate); |
| 616 #endif | 621 #endif |
| 617 | 622 |
| 618 static const int kCodeTargetMask = (1 << (LAST_CODE_ENUM + 1)) - 1; | 623 static const int kCodeTargetMask = (1 << (LAST_CODE_ENUM + 1)) - 1; |
| 619 static const int kDataMask = (1 << CODE_TARGET_WITH_ID) | (1 << COMMENT); | 624 static const int kDataMask = (1 << CODE_TARGET_WITH_ID) | (1 << COMMENT); |
| 620 static const int kDebugBreakSlotMask = 1 << DEBUG_BREAK_SLOT_AT_POSITION | | 625 static const int kDebugBreakSlotMask = 1 << DEBUG_BREAK_SLOT_AT_POSITION | |
| 621 1 << DEBUG_BREAK_SLOT_AT_RETURN | | 626 1 << DEBUG_BREAK_SLOT_AT_RETURN | |
| 622 1 << DEBUG_BREAK_SLOT_AT_CALL; | 627 1 << DEBUG_BREAK_SLOT_AT_CALL; |
| 623 static const int kApplyMask; // Modes affected by apply. Depends on arch. | 628 static const int kApplyMask; // Modes affected by apply. Depends on arch. |
| 624 | 629 |
| 625 private: | 630 private: |
| 626 void unchecked_update_wasm_memory_reference(Address address, | 631 void unchecked_update_wasm_memory_reference(Isolate* isolate, Address address, |
| 627 ICacheFlushMode flush_mode); | 632 ICacheFlushMode flush_mode); |
| 628 void unchecked_update_wasm_size(uint32_t size, ICacheFlushMode flush_mode); | 633 void unchecked_update_wasm_size(Isolate* isolate, uint32_t size, |
| 634 ICacheFlushMode flush_mode); |
| 629 | 635 |
| 630 Isolate* isolate_; | |
| 631 // On ARM, note that pc_ is the address of the constant pool entry | 636 // On ARM, note that pc_ is the address of the constant pool entry |
| 632 // to be relocated and not the address of the instruction | 637 // to be relocated and not the address of the instruction |
| 633 // referencing the constant pool entry (except when rmode_ == | 638 // referencing the constant pool entry (except when rmode_ == |
| 634 // comment). | 639 // comment). |
| 635 byte* pc_; | 640 byte* pc_; |
| 636 Mode rmode_; | 641 Mode rmode_; |
| 637 intptr_t data_; | 642 intptr_t data_; |
| 638 Code* host_; | 643 Code* host_; |
| 639 friend class RelocIterator; | 644 friend class RelocIterator; |
| 640 }; | 645 }; |
| (...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1243 std::vector<ConstantPoolEntry> shared_entries; | 1248 std::vector<ConstantPoolEntry> shared_entries; |
| 1244 }; | 1249 }; |
| 1245 | 1250 |
| 1246 Label emitted_label_; // Records pc_offset of emitted pool | 1251 Label emitted_label_; // Records pc_offset of emitted pool |
| 1247 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES]; | 1252 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES]; |
| 1248 }; | 1253 }; |
| 1249 | 1254 |
| 1250 } // namespace internal | 1255 } // namespace internal |
| 1251 } // namespace v8 | 1256 } // namespace v8 |
| 1252 #endif // V8_ASSEMBLER_H_ | 1257 #endif // V8_ASSEMBLER_H_ |
| OLD | NEW |