OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 // We do not allow copies of copies, so we follow one link to | 87 // We do not allow copies of copies, so we follow one link to |
88 // the actual backing store of a copy before making a copy. | 88 // the actual backing store of a copy before making a copy. |
89 index = target.index(); | 89 index = target.index(); |
90 ASSERT(elements_[index].is_memory() || elements_[index].is_register()); | 90 ASSERT(elements_[index].is_memory() || elements_[index].is_register()); |
91 // Fall through. | 91 // Fall through. |
92 | 92 |
93 case FrameElement::MEMORY: // Fall through. | 93 case FrameElement::MEMORY: // Fall through. |
94 case FrameElement::REGISTER: | 94 case FrameElement::REGISTER: |
95 // All copies are backed by memory or register locations. | 95 // All copies are backed by memory or register locations. |
96 result.set_static_type(target.static_type()); | 96 result.set_static_type(target.static_type()); |
97 result.type_ = FrameElement::COPY; | 97 result.set_type(FrameElement::COPY); |
98 result.copied_ = false; | 98 result.clear_copied(); |
99 result.synced_ = false; | 99 result.clear_sync(); |
100 result.data_.index_ = index; | 100 result.set_index(index); |
101 elements_[index].set_copied(); | 101 elements_[index].set_copied(); |
102 break; | 102 break; |
103 | 103 |
104 case FrameElement::INVALID: | 104 case FrameElement::INVALID: |
105 // We should not try to copy invalid elements. | 105 // We should not try to copy invalid elements. |
106 UNREACHABLE(); | 106 UNREACHABLE(); |
107 break; | 107 break; |
108 } | 108 } |
109 return result; | 109 return result; |
110 } | 110 } |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 ASSERT(num_dropped >= 0); | 458 ASSERT(num_dropped >= 0); |
459 if (num_dropped == 0) return; | 459 if (num_dropped == 0) return; |
460 Result tos = Pop(); | 460 Result tos = Pop(); |
461 if (num_dropped > 1) { | 461 if (num_dropped > 1) { |
462 Drop(num_dropped - 1); | 462 Drop(num_dropped - 1); |
463 } | 463 } |
464 SetElementAt(0, &tos); | 464 SetElementAt(0, &tos); |
465 } | 465 } |
466 | 466 |
467 | 467 |
468 bool FrameElement::Equals(FrameElement other) { | |
469 if (type_ != other.type_ || | |
470 copied_ != other.copied_ || | |
471 synced_ != other.synced_) return false; | |
472 | |
473 if (is_register()) { | |
474 if (!reg().is(other.reg())) return false; | |
475 } else if (is_constant()) { | |
476 if (!handle().is_identical_to(other.handle())) return false; | |
477 } else if (is_copy()) { | |
478 if (index() != other.index()) return false; | |
479 } | |
480 | |
481 return true; | |
482 } | |
483 | |
484 | |
485 bool VirtualFrame::Equals(VirtualFrame* other) { | 468 bool VirtualFrame::Equals(VirtualFrame* other) { |
486 #ifdef DEBUG | 469 #ifdef DEBUG |
487 // These are sanity checks in debug builds, but we do not need to | 470 // These are sanity checks in debug builds, but we do not need to |
488 // use them to distinguish frames at merge points. | 471 // use them to distinguish frames at merge points. |
489 if (cgen_ != other->cgen_) return false; | 472 if (cgen_ != other->cgen_) return false; |
490 if (masm_ != other->masm_) return false; | 473 if (masm_ != other->masm_) return false; |
491 if (parameter_count_ != other->parameter_count_) return false; | 474 if (parameter_count_ != other->parameter_count_) return false; |
492 if (local_count_ != other->local_count_) return false; | 475 if (local_count_ != other->local_count_) return false; |
493 if (frame_pointer_ != other->frame_pointer_) return false; | 476 if (frame_pointer_ != other->frame_pointer_) return false; |
494 | 477 |
(...skipping 16 matching lines...) Expand all Loading... |
511 // Specialization of List::ResizeAdd to non-inlined version for FrameElements. | 494 // Specialization of List::ResizeAdd to non-inlined version for FrameElements. |
512 // The function ResizeAdd becomes a real function, whose implementation is the | 495 // The function ResizeAdd becomes a real function, whose implementation is the |
513 // inlined ResizeAddInternal. | 496 // inlined ResizeAddInternal. |
514 template <> | 497 template <> |
515 void List<FrameElement, | 498 void List<FrameElement, |
516 FreeStoreAllocationPolicy>::ResizeAdd(const FrameElement& element) { | 499 FreeStoreAllocationPolicy>::ResizeAdd(const FrameElement& element) { |
517 ResizeAddInternal(element); | 500 ResizeAddInternal(element); |
518 } | 501 } |
519 | 502 |
520 } } // namespace v8::internal | 503 } } // namespace v8::internal |
OLD | NEW |