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

Side by Side Diff: src/assembler.h

Issue 2627543003: [wasm] Prerequisites for WebAssembly Table.Grow (Closed)
Patch Set: Rename update function Created 3 years, 11 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 unified diff | Download patch
« no previous file with comments | « src/arm64/assembler-arm64.cc ('k') | src/assembler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 enum Mode { 388 enum Mode {
389 // Please note the order is important (see IsCodeTarget, IsGCRelocMode). 389 // Please note the order is important (see IsCodeTarget, IsGCRelocMode).
390 CODE_TARGET, // Code target which is not any of the above. 390 CODE_TARGET, // Code target which is not any of the above.
391 CODE_TARGET_WITH_ID, 391 CODE_TARGET_WITH_ID,
392 DEBUGGER_STATEMENT, // Code target for the debugger statement. 392 DEBUGGER_STATEMENT, // Code target for the debugger statement.
393 EMBEDDED_OBJECT, 393 EMBEDDED_OBJECT,
394 // To relocate pointers into the wasm memory embedded in wasm code 394 // To relocate pointers into the wasm memory embedded in wasm code
395 WASM_MEMORY_REFERENCE, 395 WASM_MEMORY_REFERENCE,
396 WASM_GLOBAL_REFERENCE, 396 WASM_GLOBAL_REFERENCE,
397 WASM_MEMORY_SIZE_REFERENCE, 397 WASM_MEMORY_SIZE_REFERENCE,
398 WASM_FUNCTION_TABLE_SIZE_REFERENCE,
398 CELL, 399 CELL,
399 400
400 // Everything after runtime_entry (inclusive) is not GC'ed. 401 // Everything after runtime_entry (inclusive) is not GC'ed.
401 RUNTIME_ENTRY, 402 RUNTIME_ENTRY,
402 COMMENT, 403 COMMENT,
403 404
404 // Additional code inserted for debug break slot. 405 // Additional code inserted for debug break slot.
405 DEBUG_BREAK_SLOT_AT_POSITION, 406 DEBUG_BREAK_SLOT_AT_POSITION,
406 DEBUG_BREAK_SLOT_AT_RETURN, 407 DEBUG_BREAK_SLOT_AT_RETURN,
407 DEBUG_BREAK_SLOT_AT_CALL, 408 DEBUG_BREAK_SLOT_AT_CALL,
(...skipping 22 matching lines...) Expand all
430 // Pseudo-types 431 // Pseudo-types
431 NUMBER_OF_MODES, 432 NUMBER_OF_MODES,
432 NONE32, // never recorded 32-bit value 433 NONE32, // never recorded 32-bit value
433 NONE64, // never recorded 64-bit value 434 NONE64, // never recorded 64-bit value
434 CODE_AGE_SEQUENCE, // Not stored in RelocInfo array, used explictly by 435 CODE_AGE_SEQUENCE, // Not stored in RelocInfo array, used explictly by
435 // code aging. 436 // code aging.
436 437
437 FIRST_REAL_RELOC_MODE = CODE_TARGET, 438 FIRST_REAL_RELOC_MODE = CODE_TARGET,
438 LAST_REAL_RELOC_MODE = VENEER_POOL, 439 LAST_REAL_RELOC_MODE = VENEER_POOL,
439 LAST_CODE_ENUM = DEBUGGER_STATEMENT, 440 LAST_CODE_ENUM = DEBUGGER_STATEMENT,
440 LAST_GCED_ENUM = WASM_MEMORY_SIZE_REFERENCE, 441 LAST_GCED_ENUM = WASM_FUNCTION_TABLE_SIZE_REFERENCE,
441 FIRST_SHAREABLE_RELOC_MODE = CELL, 442 FIRST_SHAREABLE_RELOC_MODE = CELL,
442 }; 443 };
443 444
444 STATIC_ASSERT(NUMBER_OF_MODES <= kBitsPerInt); 445 STATIC_ASSERT(NUMBER_OF_MODES <= kBitsPerInt);
445 446
446 explicit RelocInfo(Isolate* isolate) : isolate_(isolate) { 447 explicit RelocInfo(Isolate* isolate) : isolate_(isolate) {
447 DCHECK_NOT_NULL(isolate); 448 DCHECK_NOT_NULL(isolate);
448 } 449 }
449 450
450 RelocInfo(Isolate* isolate, byte* pc, Mode rmode, intptr_t data, Code* host) 451 RelocInfo(Isolate* isolate, byte* pc, Mode rmode, intptr_t data, Code* host)
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 } 524 }
524 static inline bool IsWasmMemoryReference(Mode mode) { 525 static inline bool IsWasmMemoryReference(Mode mode) {
525 return mode == WASM_MEMORY_REFERENCE; 526 return mode == WASM_MEMORY_REFERENCE;
526 } 527 }
527 static inline bool IsWasmMemorySizeReference(Mode mode) { 528 static inline bool IsWasmMemorySizeReference(Mode mode) {
528 return mode == WASM_MEMORY_SIZE_REFERENCE; 529 return mode == WASM_MEMORY_SIZE_REFERENCE;
529 } 530 }
530 static inline bool IsWasmGlobalReference(Mode mode) { 531 static inline bool IsWasmGlobalReference(Mode mode) {
531 return mode == WASM_GLOBAL_REFERENCE; 532 return mode == WASM_GLOBAL_REFERENCE;
532 } 533 }
534 static inline bool IsWasmFunctionTableSizeReference(Mode mode) {
535 return mode == WASM_FUNCTION_TABLE_SIZE_REFERENCE;
536 }
537 static inline bool IsWasmReference(Mode mode) {
538 return mode == WASM_MEMORY_REFERENCE || mode == WASM_GLOBAL_REFERENCE ||
539 mode == WASM_MEMORY_SIZE_REFERENCE ||
540 mode == WASM_FUNCTION_TABLE_SIZE_REFERENCE;
541 }
542 static inline bool IsWasmSizeReference(Mode mode) {
543 return mode == WASM_MEMORY_SIZE_REFERENCE ||
544 mode == WASM_FUNCTION_TABLE_SIZE_REFERENCE;
545 }
546 static inline bool IsWasmPtrReference(Mode mode) {
547 return mode == WASM_MEMORY_REFERENCE || mode == WASM_GLOBAL_REFERENCE;
548 }
549
533 static inline int ModeMask(Mode mode) { return 1 << mode; } 550 static inline int ModeMask(Mode mode) { return 1 << mode; }
534 551
535 // Accessors 552 // Accessors
536 Isolate* isolate() const { return isolate_; } 553 Isolate* isolate() const { return isolate_; }
537 byte* pc() const { return pc_; } 554 byte* pc() const { return pc_; }
538 void set_pc(byte* pc) { pc_ = pc; } 555 void set_pc(byte* pc) { pc_ = pc; }
539 Mode rmode() const { return rmode_; } 556 Mode rmode() const { return rmode_; }
540 intptr_t data() const { return data_; } 557 intptr_t data() const { return data_; }
541 Code* host() const { return host_; } 558 Code* host() const { return host_; }
542 void set_host(Code* host) { host_ = host; } 559 void set_host(Code* host) { host_ = host; }
543 560
544 // Apply a relocation by delta bytes. When the code object is moved, PC 561 // Apply a relocation by delta bytes. When the code object is moved, PC
545 // relative addresses have to be updated as well as absolute addresses 562 // relative addresses have to be updated as well as absolute addresses
546 // inside the code (internal references). 563 // inside the code (internal references).
547 // Do not forget to flush the icache afterwards! 564 // Do not forget to flush the icache afterwards!
548 INLINE(void apply(intptr_t delta)); 565 INLINE(void apply(intptr_t delta));
549 566
550 // Is the pointer this relocation info refers to coded like a plain pointer 567 // Is the pointer this relocation info refers to coded like a plain pointer
551 // or is it strange in some way (e.g. relative or patched into a series of 568 // or is it strange in some way (e.g. relative or patched into a series of
552 // instructions). 569 // instructions).
553 bool IsCodedSpecially(); 570 bool IsCodedSpecially();
554 571
555 // If true, the pointer this relocation info refers to is an entry in the 572 // If true, the pointer this relocation info refers to is an entry in the
556 // constant pool, otherwise the pointer is embedded in the instruction stream. 573 // constant pool, otherwise the pointer is embedded in the instruction stream.
557 bool IsInConstantPool(); 574 bool IsInConstantPool();
558 575
559 Address wasm_memory_reference(); 576 Address wasm_memory_reference();
560 Address wasm_global_reference(); 577 Address wasm_global_reference();
578 uint32_t wasm_function_table_size_reference();
561 uint32_t wasm_memory_size_reference(); 579 uint32_t wasm_memory_size_reference();
562 void update_wasm_memory_reference( 580 void update_wasm_memory_reference(
563 Address old_base, Address new_base, uint32_t old_size, uint32_t new_size, 581 Address old_base, Address new_base, uint32_t old_size, uint32_t new_size,
564 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); 582 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
565 void update_wasm_global_reference( 583 void update_wasm_global_reference(
566 Address old_base, Address new_base, 584 Address old_base, Address new_base,
567 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); 585 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
586 void update_wasm_function_table_size_reference(
587 uint32_t old_base, uint32_t new_base,
588 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
568 void set_target_address( 589 void set_target_address(
569 Address target, 590 Address target,
570 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER, 591 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER,
571 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); 592 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
572 593
573 // this relocation applies to; 594 // this relocation applies to;
574 // can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) 595 // can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)
575 INLINE(Address target_address()); 596 INLINE(Address target_address());
576 INLINE(Object* target_object()); 597 INLINE(Object* target_object());
577 INLINE(Handle<Object> target_object_handle(Assembler* origin)); 598 INLINE(Handle<Object> target_object_handle(Assembler* origin));
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 static const int kCodeTargetMask = (1 << (LAST_CODE_ENUM + 1)) - 1; 687 static const int kCodeTargetMask = (1 << (LAST_CODE_ENUM + 1)) - 1;
667 static const int kDataMask = (1 << CODE_TARGET_WITH_ID) | (1 << COMMENT); 688 static const int kDataMask = (1 << CODE_TARGET_WITH_ID) | (1 << COMMENT);
668 static const int kDebugBreakSlotMask = 1 << DEBUG_BREAK_SLOT_AT_POSITION | 689 static const int kDebugBreakSlotMask = 1 << DEBUG_BREAK_SLOT_AT_POSITION |
669 1 << DEBUG_BREAK_SLOT_AT_RETURN | 690 1 << DEBUG_BREAK_SLOT_AT_RETURN |
670 1 << DEBUG_BREAK_SLOT_AT_CALL; 691 1 << DEBUG_BREAK_SLOT_AT_CALL;
671 static const int kApplyMask; // Modes affected by apply. Depends on arch. 692 static const int kApplyMask; // Modes affected by apply. Depends on arch.
672 693
673 private: 694 private:
674 void unchecked_update_wasm_memory_reference(Address address, 695 void unchecked_update_wasm_memory_reference(Address address,
675 ICacheFlushMode flush_mode); 696 ICacheFlushMode flush_mode);
676 void unchecked_update_wasm_memory_size(uint32_t size, 697 void unchecked_update_wasm_size(uint32_t size, ICacheFlushMode flush_mode);
677 ICacheFlushMode flush_mode);
678 698
679 Isolate* isolate_; 699 Isolate* isolate_;
680 // On ARM, note that pc_ is the address of the constant pool entry 700 // On ARM, note that pc_ is the address of the constant pool entry
681 // to be relocated and not the address of the instruction 701 // to be relocated and not the address of the instruction
682 // referencing the constant pool entry (except when rmode_ == 702 // referencing the constant pool entry (except when rmode_ ==
683 // comment). 703 // comment).
684 byte* pc_; 704 byte* pc_;
685 Mode rmode_; 705 Mode rmode_;
686 intptr_t data_; 706 intptr_t data_;
687 Code* host_; 707 Code* host_;
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 std::vector<ConstantPoolEntry> shared_entries; 1305 std::vector<ConstantPoolEntry> shared_entries;
1286 }; 1306 };
1287 1307
1288 Label emitted_label_; // Records pc_offset of emitted pool 1308 Label emitted_label_; // Records pc_offset of emitted pool
1289 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES]; 1309 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES];
1290 }; 1310 };
1291 1311
1292 } // namespace internal 1312 } // namespace internal
1293 } // namespace v8 1313 } // namespace v8
1294 #endif // V8_ASSEMBLER_H_ 1314 #endif // V8_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « src/arm64/assembler-arm64.cc ('k') | src/assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698