OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 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 30 matching lines...) Expand all Loading... |
41 ASSERT(cgen_ != NULL); | 41 ASSERT(cgen_ != NULL); |
42 ASSERT(cgen_->has_valid_frame()); | 42 ASSERT(cgen_->has_valid_frame()); |
43 // Live non-frame registers are not allowed at unconditional jumps | 43 // Live non-frame registers are not allowed at unconditional jumps |
44 // because we have no way of invalidating the corresponding results | 44 // because we have no way of invalidating the corresponding results |
45 // which are still live in the C++ code. | 45 // which are still live in the C++ code. |
46 ASSERT(cgen_->HasValidEntryRegisters()); | 46 ASSERT(cgen_->HasValidEntryRegisters()); |
47 | 47 |
48 if (is_bound()) { | 48 if (is_bound()) { |
49 // Backward jump. There is an expected frame to merge to. | 49 // Backward jump. There is an expected frame to merge to. |
50 ASSERT(direction_ == BIDIRECTIONAL); | 50 ASSERT(direction_ == BIDIRECTIONAL); |
| 51 cgen_->frame()->PrepareMergeTo(entry_frame_); |
51 cgen_->frame()->MergeTo(entry_frame_); | 52 cgen_->frame()->MergeTo(entry_frame_); |
52 cgen_->DeleteFrame(); | 53 cgen_->DeleteFrame(); |
53 __ jmp(&entry_label_); | 54 __ jmp(&entry_label_); |
54 } else if (entry_frame_ != NULL) { | 55 } else if (entry_frame_ != NULL) { |
55 // Forward jump with a preconfigured entry frame. Assert the | 56 // Forward jump with a preconfigured entry frame. Assert the |
56 // current frame matches the expected one and jump to the block. | 57 // current frame matches the expected one and jump to the block. |
57 ASSERT(cgen_->frame()->Equals(entry_frame_)); | 58 ASSERT(cgen_->frame()->Equals(entry_frame_)); |
58 cgen_->DeleteFrame(); | 59 cgen_->DeleteFrame(); |
59 __ jmp(&entry_label_); | 60 __ jmp(&entry_label_); |
60 } else { | 61 } else { |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 cgen_->frame()->MergeTo(entry_frame_); | 360 cgen_->frame()->MergeTo(entry_frame_); |
360 } | 361 } |
361 | 362 |
362 __ bind(&entry_label_); | 363 __ bind(&entry_label_); |
363 } | 364 } |
364 | 365 |
365 #undef __ | 366 #undef __ |
366 | 367 |
367 | 368 |
368 } } // namespace v8::internal | 369 } } // namespace v8::internal |
OLD | NEW |