| Index: src/x64/jump-target-x64.cc
|
| ===================================================================
|
| --- src/x64/jump-target-x64.cc (revision 2654)
|
| +++ src/x64/jump-target-x64.cc (working copy)
|
| @@ -362,6 +362,70 @@
|
| __ bind(&entry_label_);
|
| }
|
|
|
| +
|
| +void BreakTarget::Jump() {
|
| + // Drop leftover statement state from the frame before merging, without
|
| + // emitting code.
|
| + ASSERT(cgen()->has_valid_frame());
|
| + int count = cgen()->frame()->height() - expected_height_;
|
| + cgen()->frame()->ForgetElements(count);
|
| + DoJump();
|
| +}
|
| +
|
| +
|
| +void BreakTarget::Jump(Result* arg) {
|
| + // Drop leftover statement state from the frame before merging, without
|
| + // emitting code.
|
| + ASSERT(cgen()->has_valid_frame());
|
| + int count = cgen()->frame()->height() - expected_height_;
|
| + cgen()->frame()->ForgetElements(count);
|
| + cgen()->frame()->Push(arg);
|
| + DoJump();
|
| +}
|
| +
|
| +
|
| +void BreakTarget::Bind() {
|
| +#ifdef DEBUG
|
| + // All the forward-reaching frames should have been adjusted at the
|
| + // jumps to this target.
|
| + for (int i = 0; i < reaching_frames_.length(); i++) {
|
| + ASSERT(reaching_frames_[i] == NULL ||
|
| + reaching_frames_[i]->height() == expected_height_);
|
| + }
|
| +#endif
|
| + // Drop leftover statement state from the frame before merging, even on
|
| + // the fall through. This is so we can bind the return target with state
|
| + // on the frame.
|
| + if (cgen()->has_valid_frame()) {
|
| + int count = cgen()->frame()->height() - expected_height_;
|
| + cgen()->frame()->ForgetElements(count);
|
| + }
|
| + DoBind();
|
| +}
|
| +
|
| +
|
| +void BreakTarget::Bind(Result* arg) {
|
| +#ifdef DEBUG
|
| + // All the forward-reaching frames should have been adjusted at the
|
| + // jumps to this target.
|
| + for (int i = 0; i < reaching_frames_.length(); i++) {
|
| + ASSERT(reaching_frames_[i] == NULL ||
|
| + reaching_frames_[i]->height() == expected_height_ + 1);
|
| + }
|
| +#endif
|
| + // Drop leftover statement state from the frame before merging, even on
|
| + // the fall through. This is so we can bind the return target with state
|
| + // on the frame.
|
| + if (cgen()->has_valid_frame()) {
|
| + int count = cgen()->frame()->height() - expected_height_;
|
| + cgen()->frame()->ForgetElements(count);
|
| + cgen()->frame()->Push(arg);
|
| + }
|
| + DoBind();
|
| + *arg = cgen()->frame()->Pop();
|
| +}
|
| +
|
| +
|
| #undef __
|
|
|
|
|
|
|