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

Side by Side Diff: src/assembler.cc

Issue 2951473002: Remove enum RelocInfo::CODE_TARGET_WITH_ID. (Closed)
Patch Set: Review update. Created 3 years, 6 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/assembler.h ('k') | src/disassembler.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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 // The first byte of a relocation record has a tag in its low 2 bits: 273 // The first byte of a relocation record has a tag in its low 2 bits:
274 // Here are the record schemes, depending on the low tag and optional higher 274 // Here are the record schemes, depending on the low tag and optional higher
275 // tags. 275 // tags.
276 // 276 //
277 // Low tag: 277 // Low tag:
278 // 00: embedded_object: [6-bit pc delta] 00 278 // 00: embedded_object: [6-bit pc delta] 00
279 // 279 //
280 // 01: code_target: [6-bit pc delta] 01 280 // 01: code_target: [6-bit pc delta] 01
281 // 281 //
282 // 10: short_data_record: [6-bit pc delta] 10 followed by 282 // 10: short_data_record: [6-bit pc delta] 10 followed by
283 // [6-bit data delta] [2-bit data type tag] 283 // [8-bit data delta]
284 // 284 //
285 // 11: long_record [6 bit reloc mode] 11 285 // 11: long_record [6 bit reloc mode] 11
286 // followed by pc delta 286 // followed by pc delta
287 // followed by optional data depending on type. 287 // followed by optional data depending on type.
288 // 288 //
289 // 1-bit data type tags, used in short_data_record and data_jump long_record:
290 // code_target_with_id: 0
291 // deopt_reason: 1
292 //
293 // If a pc delta exceeds 6 bits, it is split into a remainder that fits into 289 // If a pc delta exceeds 6 bits, it is split into a remainder that fits into
294 // 6 bits and a part that does not. The latter is encoded as a long record 290 // 6 bits and a part that does not. The latter is encoded as a long record
295 // with PC_JUMP as pseudo reloc info mode. The former is encoded as part of 291 // with PC_JUMP as pseudo reloc info mode. The former is encoded as part of
296 // the following record in the usual way. The long pc jump record has variable 292 // the following record in the usual way. The long pc jump record has variable
297 // length: 293 // length:
298 // pc-jump: [PC_JUMP] 11 294 // pc-jump: [PC_JUMP] 11
299 // [7 bits data] 0 295 // [7 bits data] 0
300 // ... 296 // ...
301 // [7 bits data] 1 297 // [7 bits data] 1
302 // (Bits 6..31 of pc delta, with leading zeroes 298 // (Bits 6..31 of pc delta, with leading zeroes
303 // dropped, and last non-zero chunk tagged with 1.) 299 // dropped, and last non-zero chunk tagged with 1.)
304 300
305 const int kTagBits = 2; 301 const int kTagBits = 2;
306 const int kTagMask = (1 << kTagBits) - 1; 302 const int kTagMask = (1 << kTagBits) - 1;
307 const int kLongTagBits = 6; 303 const int kLongTagBits = 6;
308 const int kShortDataTypeTagBits = 1;
309 const int kShortDataBits = kBitsPerByte - kShortDataTypeTagBits;
310 304
311 const int kEmbeddedObjectTag = 0; 305 const int kEmbeddedObjectTag = 0;
312 const int kCodeTargetTag = 1; 306 const int kCodeTargetTag = 1;
313 const int kLocatableTag = 2; 307 const int kLocatableTag = 2;
314 const int kDefaultTag = 3; 308 const int kDefaultTag = 3;
315 309
316 const int kSmallPCDeltaBits = kBitsPerByte - kTagBits; 310 const int kSmallPCDeltaBits = kBitsPerByte - kTagBits;
317 const int kSmallPCDeltaMask = (1 << kSmallPCDeltaBits) - 1; 311 const int kSmallPCDeltaMask = (1 << kSmallPCDeltaBits) - 1;
318 const int RelocInfo::kMaxSmallPCDelta = kSmallPCDeltaMask; 312 const int RelocInfo::kMaxSmallPCDelta = kSmallPCDeltaMask;
319 313
320 const int kChunkBits = 7; 314 const int kChunkBits = 7;
321 const int kChunkMask = (1 << kChunkBits) - 1; 315 const int kChunkMask = (1 << kChunkBits) - 1;
322 const int kLastChunkTagBits = 1; 316 const int kLastChunkTagBits = 1;
323 const int kLastChunkTagMask = 1; 317 const int kLastChunkTagMask = 1;
324 const int kLastChunkTag = 1; 318 const int kLastChunkTag = 1;
325 319
326 const int kCodeWithIdTag = 0;
327 const int kDeoptReasonTag = 1;
328
329 void RelocInfo::update_wasm_memory_reference( 320 void RelocInfo::update_wasm_memory_reference(
330 Isolate* isolate, Address old_base, Address new_base, 321 Isolate* isolate, Address old_base, Address new_base,
331 ICacheFlushMode icache_flush_mode) { 322 ICacheFlushMode icache_flush_mode) {
332 DCHECK(IsWasmMemoryReference(rmode_)); 323 DCHECK(IsWasmMemoryReference(rmode_));
333 Address updated_reference = new_base + (wasm_memory_reference() - old_base); 324 Address updated_reference = new_base + (wasm_memory_reference() - old_base);
334 // The reference is not checked here but at runtime. Validity of references 325 // The reference is not checked here but at runtime. Validity of references
335 // may change over time. 326 // may change over time.
336 unchecked_update_wasm_memory_reference(isolate, updated_reference, 327 unchecked_update_wasm_memory_reference(isolate, updated_reference,
337 icache_flush_mode); 328 icache_flush_mode);
338 } 329 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 return pc_delta & kSmallPCDeltaMask; 395 return pc_delta & kSmallPCDeltaMask;
405 } 396 }
406 397
407 398
408 void RelocInfoWriter::WriteShortTaggedPC(uint32_t pc_delta, int tag) { 399 void RelocInfoWriter::WriteShortTaggedPC(uint32_t pc_delta, int tag) {
409 // Write a byte of tagged pc-delta, possibly preceded by an explicit pc-jump. 400 // Write a byte of tagged pc-delta, possibly preceded by an explicit pc-jump.
410 pc_delta = WriteLongPCJump(pc_delta); 401 pc_delta = WriteLongPCJump(pc_delta);
411 *--pos_ = pc_delta << kTagBits | tag; 402 *--pos_ = pc_delta << kTagBits | tag;
412 } 403 }
413 404
414 405 void RelocInfoWriter::WriteShortData(intptr_t data_delta) {
415 void RelocInfoWriter::WriteShortTaggedData(intptr_t data_delta, int tag) { 406 *--pos_ = static_cast<byte>(data_delta);
416 *--pos_ = static_cast<byte>(data_delta << kShortDataTypeTagBits | tag);
417 } 407 }
418 408
419 409
420 void RelocInfoWriter::WriteMode(RelocInfo::Mode rmode) { 410 void RelocInfoWriter::WriteMode(RelocInfo::Mode rmode) {
421 STATIC_ASSERT(RelocInfo::NUMBER_OF_MODES <= (1 << kLongTagBits)); 411 STATIC_ASSERT(RelocInfo::NUMBER_OF_MODES <= (1 << kLongTagBits));
422 *--pos_ = static_cast<int>((rmode << kTagBits) | kDefaultTag); 412 *--pos_ = static_cast<int>((rmode << kTagBits) | kDefaultTag);
423 } 413 }
424 414
425 415
426 void RelocInfoWriter::WriteModeAndPC(uint32_t pc_delta, RelocInfo::Mode rmode) { 416 void RelocInfoWriter::WriteModeAndPC(uint32_t pc_delta, RelocInfo::Mode rmode) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 DCHECK(rinfo->pc() - last_pc_ >= 0); 448 DCHECK(rinfo->pc() - last_pc_ >= 0);
459 // Use unsigned delta-encoding for pc. 449 // Use unsigned delta-encoding for pc.
460 uint32_t pc_delta = static_cast<uint32_t>(rinfo->pc() - last_pc_); 450 uint32_t pc_delta = static_cast<uint32_t>(rinfo->pc() - last_pc_);
461 451
462 // The two most common modes are given small tags, and usually fit in a byte. 452 // The two most common modes are given small tags, and usually fit in a byte.
463 if (rmode == RelocInfo::EMBEDDED_OBJECT) { 453 if (rmode == RelocInfo::EMBEDDED_OBJECT) {
464 WriteShortTaggedPC(pc_delta, kEmbeddedObjectTag); 454 WriteShortTaggedPC(pc_delta, kEmbeddedObjectTag);
465 } else if (rmode == RelocInfo::CODE_TARGET) { 455 } else if (rmode == RelocInfo::CODE_TARGET) {
466 WriteShortTaggedPC(pc_delta, kCodeTargetTag); 456 WriteShortTaggedPC(pc_delta, kCodeTargetTag);
467 DCHECK(begin_pos - pos_ <= RelocInfo::kMaxCallSize); 457 DCHECK(begin_pos - pos_ <= RelocInfo::kMaxCallSize);
468 } else if (rmode == RelocInfo::CODE_TARGET_WITH_ID) {
469 // Use signed delta-encoding for id.
470 DCHECK_EQ(static_cast<int>(rinfo->data()), rinfo->data());
471 int id_delta = static_cast<int>(rinfo->data()) - last_id_;
472 // Check if delta is small enough to fit in a tagged byte.
473 if (is_intn(id_delta, kShortDataBits)) {
474 WriteShortTaggedPC(pc_delta, kLocatableTag);
475 WriteShortTaggedData(id_delta, kCodeWithIdTag);
476 } else {
477 // Otherwise, use costly encoding.
478 WriteModeAndPC(pc_delta, rmode);
479 WriteIntData(id_delta);
480 }
481 last_id_ = static_cast<int>(rinfo->data());
482 } else if (rmode == RelocInfo::DEOPT_REASON) { 458 } else if (rmode == RelocInfo::DEOPT_REASON) {
483 DCHECK(rinfo->data() < (1 << kShortDataBits)); 459 DCHECK(rinfo->data() < (1 << kBitsPerByte));
484 WriteShortTaggedPC(pc_delta, kLocatableTag); 460 WriteShortTaggedPC(pc_delta, kLocatableTag);
485 WriteShortTaggedData(rinfo->data(), kDeoptReasonTag); 461 WriteShortData(rinfo->data());
486 } else { 462 } else {
487 WriteModeAndPC(pc_delta, rmode); 463 WriteModeAndPC(pc_delta, rmode);
488 if (RelocInfo::IsComment(rmode)) { 464 if (RelocInfo::IsComment(rmode)) {
489 WriteData(rinfo->data()); 465 WriteData(rinfo->data());
490 } else if (RelocInfo::IsConstPool(rmode) || 466 } else if (RelocInfo::IsConstPool(rmode) ||
491 RelocInfo::IsVeneerPool(rmode) || RelocInfo::IsDeoptId(rmode) || 467 RelocInfo::IsVeneerPool(rmode) || RelocInfo::IsDeoptId(rmode) ||
492 RelocInfo::IsDeoptPosition(rmode) || 468 RelocInfo::IsDeoptPosition(rmode) ||
493 RelocInfo::IsWasmProtectedLanding(rmode)) { 469 RelocInfo::IsWasmProtectedLanding(rmode)) {
494 WriteIntData(static_cast<int>(rinfo->data())); 470 WriteIntData(static_cast<int>(rinfo->data()));
495 } 471 }
(...skipping 20 matching lines...) Expand all
516 inline void RelocIterator::ReadShortTaggedPC() { 492 inline void RelocIterator::ReadShortTaggedPC() {
517 rinfo_.pc_ += *pos_ >> kTagBits; 493 rinfo_.pc_ += *pos_ >> kTagBits;
518 } 494 }
519 495
520 496
521 inline void RelocIterator::AdvanceReadPC() { 497 inline void RelocIterator::AdvanceReadPC() {
522 rinfo_.pc_ += *--pos_; 498 rinfo_.pc_ += *--pos_;
523 } 499 }
524 500
525 501
526 void RelocIterator::AdvanceReadId() {
527 int x = 0;
528 for (int i = 0; i < kIntSize; i++) {
529 x |= static_cast<int>(*--pos_) << i * kBitsPerByte;
530 }
531 last_id_ += x;
532 rinfo_.data_ = last_id_;
533 }
534
535
536 void RelocIterator::AdvanceReadInt() { 502 void RelocIterator::AdvanceReadInt() {
537 int x = 0; 503 int x = 0;
538 for (int i = 0; i < kIntSize; i++) { 504 for (int i = 0; i < kIntSize; i++) {
539 x |= static_cast<int>(*--pos_) << i * kBitsPerByte; 505 x |= static_cast<int>(*--pos_) << i * kBitsPerByte;
540 } 506 }
541 rinfo_.data_ = x; 507 rinfo_.data_ = x;
542 } 508 }
543 509
544 510
545 void RelocIterator::AdvanceReadData() { 511 void RelocIterator::AdvanceReadData() {
(...skipping 13 matching lines...) Expand all
559 for (int i = 0; i < kIntSize; i++) { 525 for (int i = 0; i < kIntSize; i++) {
560 byte pc_jump_part = *--pos_; 526 byte pc_jump_part = *--pos_;
561 pc_jump |= (pc_jump_part >> kLastChunkTagBits) << i * kChunkBits; 527 pc_jump |= (pc_jump_part >> kLastChunkTagBits) << i * kChunkBits;
562 if ((pc_jump_part & kLastChunkTagMask) == 1) break; 528 if ((pc_jump_part & kLastChunkTagMask) == 1) break;
563 } 529 }
564 // The least significant kSmallPCDeltaBits bits will be added 530 // The least significant kSmallPCDeltaBits bits will be added
565 // later. 531 // later.
566 rinfo_.pc_ += pc_jump << kSmallPCDeltaBits; 532 rinfo_.pc_ += pc_jump << kSmallPCDeltaBits;
567 } 533 }
568 534
569 535 inline void RelocIterator::ReadShortData() {
570 inline int RelocIterator::GetShortDataTypeTag() { 536 uint8_t unsigned_b = *pos_;
571 return *pos_ & ((1 << kShortDataTypeTagBits) - 1); 537 rinfo_.data_ = unsigned_b;
572 } 538 }
573 539
574 540
575 inline void RelocIterator::ReadShortTaggedId() {
576 int8_t signed_b = *pos_;
577 // Signed right shift is arithmetic shift. Tested in test-utils.cc.
578 last_id_ += signed_b >> kShortDataTypeTagBits;
579 rinfo_.data_ = last_id_;
580 }
581
582
583 inline void RelocIterator::ReadShortTaggedData() {
584 uint8_t unsigned_b = *pos_;
585 rinfo_.data_ = unsigned_b >> kShortDataTypeTagBits;
586 }
587
588
589 void RelocIterator::next() { 541 void RelocIterator::next() {
590 DCHECK(!done()); 542 DCHECK(!done());
591 // Basically, do the opposite of RelocInfoWriter::Write. 543 // Basically, do the opposite of RelocInfoWriter::Write.
592 // Reading of data is as far as possible avoided for unwanted modes, 544 // Reading of data is as far as possible avoided for unwanted modes,
593 // but we must always update the pc. 545 // but we must always update the pc.
594 // 546 //
595 // We exit this loop by returning when we find a mode we want. 547 // We exit this loop by returning when we find a mode we want.
596 while (pos_ > end_) { 548 while (pos_ > end_) {
597 int tag = AdvanceGetTag(); 549 int tag = AdvanceGetTag();
598 if (tag == kEmbeddedObjectTag) { 550 if (tag == kEmbeddedObjectTag) {
599 ReadShortTaggedPC(); 551 ReadShortTaggedPC();
600 if (SetMode(RelocInfo::EMBEDDED_OBJECT)) return; 552 if (SetMode(RelocInfo::EMBEDDED_OBJECT)) return;
601 } else if (tag == kCodeTargetTag) { 553 } else if (tag == kCodeTargetTag) {
602 ReadShortTaggedPC(); 554 ReadShortTaggedPC();
603 if (SetMode(RelocInfo::CODE_TARGET)) return; 555 if (SetMode(RelocInfo::CODE_TARGET)) return;
604 } else if (tag == kLocatableTag) { 556 } else if (tag == kLocatableTag) {
605 ReadShortTaggedPC(); 557 ReadShortTaggedPC();
606 Advance(); 558 Advance();
607 int data_type_tag = GetShortDataTypeTag(); 559 if (SetMode(RelocInfo::DEOPT_REASON)) {
608 if (data_type_tag == kCodeWithIdTag) { 560 ReadShortData();
609 if (SetMode(RelocInfo::CODE_TARGET_WITH_ID)) { 561 return;
610 ReadShortTaggedId();
611 return;
612 }
613 } else {
614 DCHECK(data_type_tag == kDeoptReasonTag);
615 if (SetMode(RelocInfo::DEOPT_REASON)) {
616 ReadShortTaggedData();
617 return;
618 }
619 } 562 }
620 } else { 563 } else {
621 DCHECK(tag == kDefaultTag); 564 DCHECK(tag == kDefaultTag);
622 RelocInfo::Mode rmode = GetMode(); 565 RelocInfo::Mode rmode = GetMode();
623 if (rmode == RelocInfo::PC_JUMP) { 566 if (rmode == RelocInfo::PC_JUMP) {
624 AdvanceReadLongPCJump(); 567 AdvanceReadLongPCJump();
625 } else { 568 } else {
626 AdvanceReadPC(); 569 AdvanceReadPC();
627 if (rmode == RelocInfo::CODE_TARGET_WITH_ID) { 570 if (RelocInfo::IsComment(rmode)) {
628 if (SetMode(rmode)) {
629 AdvanceReadId();
630 return;
631 }
632 Advance(kIntSize);
633 } else if (RelocInfo::IsComment(rmode)) {
634 if (SetMode(rmode)) { 571 if (SetMode(rmode)) {
635 AdvanceReadData(); 572 AdvanceReadData();
636 return; 573 return;
637 } 574 }
638 Advance(kIntptrSize); 575 Advance(kIntptrSize);
639 } else if (RelocInfo::IsConstPool(rmode) || 576 } else if (RelocInfo::IsConstPool(rmode) ||
640 RelocInfo::IsVeneerPool(rmode) || 577 RelocInfo::IsVeneerPool(rmode) ||
641 RelocInfo::IsDeoptId(rmode) || 578 RelocInfo::IsDeoptId(rmode) ||
642 RelocInfo::IsDeoptPosition(rmode) || 579 RelocInfo::IsDeoptPosition(rmode) ||
643 RelocInfo::IsWasmProtectedLanding(rmode)) { 580 RelocInfo::IsWasmProtectedLanding(rmode)) {
(...skipping 22 matching lines...) Expand all
666 603
667 RelocIterator::RelocIterator(Code* code, int mode_mask) { 604 RelocIterator::RelocIterator(Code* code, int mode_mask) {
668 rinfo_.host_ = code; 605 rinfo_.host_ = code;
669 rinfo_.pc_ = code->instruction_start(); 606 rinfo_.pc_ = code->instruction_start();
670 rinfo_.data_ = 0; 607 rinfo_.data_ = 0;
671 // Relocation info is read backwards. 608 // Relocation info is read backwards.
672 pos_ = code->relocation_start() + code->relocation_size(); 609 pos_ = code->relocation_start() + code->relocation_size();
673 end_ = code->relocation_start(); 610 end_ = code->relocation_start();
674 done_ = false; 611 done_ = false;
675 mode_mask_ = mode_mask; 612 mode_mask_ = mode_mask;
676 last_id_ = 0;
677 byte* sequence = code->FindCodeAgeSequence(); 613 byte* sequence = code->FindCodeAgeSequence();
678 // We get the isolate from the map, because at serialization time 614 // We get the isolate from the map, because at serialization time
679 // the code pointer has been cloned and isn't really in heap space. 615 // the code pointer has been cloned and isn't really in heap space.
680 Isolate* isolate = code->map()->GetIsolate(); 616 Isolate* isolate = code->map()->GetIsolate();
681 if (sequence != NULL && !Code::IsYoungSequence(isolate, sequence)) { 617 if (sequence != NULL && !Code::IsYoungSequence(isolate, sequence)) {
682 code_age_sequence_ = sequence; 618 code_age_sequence_ = sequence;
683 } else { 619 } else {
684 code_age_sequence_ = NULL; 620 code_age_sequence_ = NULL;
685 } 621 }
686 if (mode_mask_ == 0) pos_ = end_; 622 if (mode_mask_ == 0) pos_ = end_;
687 next(); 623 next();
688 } 624 }
689 625
690 RelocIterator::RelocIterator(const CodeDesc& desc, int mode_mask) { 626 RelocIterator::RelocIterator(const CodeDesc& desc, int mode_mask) {
691 rinfo_.pc_ = desc.buffer; 627 rinfo_.pc_ = desc.buffer;
692 rinfo_.data_ = 0; 628 rinfo_.data_ = 0;
693 // Relocation info is read backwards. 629 // Relocation info is read backwards.
694 pos_ = desc.buffer + desc.buffer_size; 630 pos_ = desc.buffer + desc.buffer_size;
695 end_ = pos_ - desc.reloc_size; 631 end_ = pos_ - desc.reloc_size;
696 done_ = false; 632 done_ = false;
697 mode_mask_ = mode_mask; 633 mode_mask_ = mode_mask;
698 last_id_ = 0;
699 code_age_sequence_ = NULL; 634 code_age_sequence_ = NULL;
700 if (mode_mask_ == 0) pos_ = end_; 635 if (mode_mask_ == 0) pos_ = end_;
701 next(); 636 next();
702 } 637 }
703 638
704 639
705 // ----------------------------------------------------------------------------- 640 // -----------------------------------------------------------------------------
706 // Implementation of RelocInfo 641 // Implementation of RelocInfo
707 642
708 bool RelocInfo::IsPatchedDebugBreakSlotSequence() { 643 bool RelocInfo::IsPatchedDebugBreakSlotSequence() {
(...skipping 19 matching lines...) Expand all
728 const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) { 663 const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) {
729 switch (rmode) { 664 switch (rmode) {
730 case NONE32: 665 case NONE32:
731 return "no reloc 32"; 666 return "no reloc 32";
732 case NONE64: 667 case NONE64:
733 return "no reloc 64"; 668 return "no reloc 64";
734 case EMBEDDED_OBJECT: 669 case EMBEDDED_OBJECT:
735 return "embedded object"; 670 return "embedded object";
736 case CODE_TARGET: 671 case CODE_TARGET:
737 return "code target"; 672 return "code target";
738 case CODE_TARGET_WITH_ID:
739 return "code target with id";
740 case CELL: 673 case CELL:
741 return "property cell"; 674 return "property cell";
742 case RUNTIME_ENTRY: 675 case RUNTIME_ENTRY:
743 return "runtime entry"; 676 return "runtime entry";
744 case COMMENT: 677 case COMMENT:
745 return "comment"; 678 return "comment";
746 case EXTERNAL_REFERENCE: 679 case EXTERNAL_REFERENCE:
747 return "external reference"; 680 return "external reference";
748 case INTERNAL_REFERENCE: 681 case INTERNAL_REFERENCE:
749 return "internal reference"; 682 return "internal reference";
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 } else if (rmode_ == EXTERNAL_REFERENCE) { 736 } else if (rmode_ == EXTERNAL_REFERENCE) {
804 ExternalReferenceEncoder ref_encoder(isolate); 737 ExternalReferenceEncoder ref_encoder(isolate);
805 os << " (" 738 os << " ("
806 << ref_encoder.NameOfAddress(isolate, target_external_reference()) 739 << ref_encoder.NameOfAddress(isolate, target_external_reference())
807 << ") (" << static_cast<const void*>(target_external_reference()) 740 << ") (" << static_cast<const void*>(target_external_reference())
808 << ")"; 741 << ")";
809 } else if (IsCodeTarget(rmode_)) { 742 } else if (IsCodeTarget(rmode_)) {
810 Code* code = Code::GetCodeFromTargetAddress(target_address()); 743 Code* code = Code::GetCodeFromTargetAddress(target_address());
811 os << " (" << Code::Kind2String(code->kind()) << ") (" 744 os << " (" << Code::Kind2String(code->kind()) << ") ("
812 << static_cast<const void*>(target_address()) << ")"; 745 << static_cast<const void*>(target_address()) << ")";
813 if (rmode_ == CODE_TARGET_WITH_ID) {
814 os << " (id=" << static_cast<int>(data_) << ")";
815 }
816 } else if (IsRuntimeEntry(rmode_) && 746 } else if (IsRuntimeEntry(rmode_) &&
817 isolate->deoptimizer_data() != NULL) { 747 isolate->deoptimizer_data() != NULL) {
818 // Depotimization bailouts are stored as runtime entries. 748 // Depotimization bailouts are stored as runtime entries.
819 int id = Deoptimizer::GetDeoptimizationId( 749 int id = Deoptimizer::GetDeoptimizationId(
820 isolate, target_address(), Deoptimizer::EAGER); 750 isolate, target_address(), Deoptimizer::EAGER);
821 if (id != Deoptimizer::kNotDeoptimizationEntry) { 751 if (id != Deoptimizer::kNotDeoptimizationEntry) {
822 os << " (deoptimization bailout " << id << ")"; 752 os << " (deoptimization bailout " << id << ")";
823 } 753 }
824 } else if (IsConstPool(rmode_)) { 754 } else if (IsConstPool(rmode_)) {
825 os << " (size " << static_cast<int>(data_) << ")"; 755 os << " (size " << static_cast<int>(data_) << ")";
826 } 756 }
827 757
828 os << "\n"; 758 os << "\n";
829 } 759 }
830 #endif // ENABLE_DISASSEMBLER 760 #endif // ENABLE_DISASSEMBLER
831 761
832 762
833 #ifdef VERIFY_HEAP 763 #ifdef VERIFY_HEAP
834 void RelocInfo::Verify(Isolate* isolate) { 764 void RelocInfo::Verify(Isolate* isolate) {
835 switch (rmode_) { 765 switch (rmode_) {
836 case EMBEDDED_OBJECT: 766 case EMBEDDED_OBJECT:
837 Object::VerifyPointer(target_object()); 767 Object::VerifyPointer(target_object());
838 break; 768 break;
839 case CELL: 769 case CELL:
840 Object::VerifyPointer(target_cell()); 770 Object::VerifyPointer(target_cell());
841 break; 771 break;
842 case CODE_TARGET_WITH_ID:
843 case CODE_TARGET: { 772 case CODE_TARGET: {
844 // convert inline target address to code object 773 // convert inline target address to code object
845 Address addr = target_address(); 774 Address addr = target_address();
846 CHECK(addr != NULL); 775 CHECK(addr != NULL);
847 // Check that we can find the right code object. 776 // Check that we can find the right code object.
848 Code* code = Code::GetCodeFromTargetAddress(addr); 777 Code* code = Code::GetCodeFromTargetAddress(addr);
849 Object* found = isolate->FindCodeObject(addr); 778 Object* found = isolate->FindCodeObject(addr);
850 CHECK(found->IsCode()); 779 CHECK(found->IsCode());
851 CHECK(code->address() == HeapObject::cast(found)->address()); 780 CHECK(code->address() == HeapObject::cast(found)->address());
852 break; 781 break;
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2016 1945
2017 void Assembler::DataAlign(int m) { 1946 void Assembler::DataAlign(int m) {
2018 DCHECK(m >= 2 && base::bits::IsPowerOfTwo32(m)); 1947 DCHECK(m >= 2 && base::bits::IsPowerOfTwo32(m));
2019 while ((pc_offset() & (m - 1)) != 0) { 1948 while ((pc_offset() & (m - 1)) != 0) {
2020 db(0); 1949 db(0);
2021 } 1950 }
2022 } 1951 }
2023 1952
2024 } // namespace internal 1953 } // namespace internal
2025 } // namespace v8 1954 } // namespace v8
OLDNEW
« no previous file with comments | « src/assembler.h ('k') | src/disassembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698