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 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 DECLARE_ARGCHECK_VARS(arg); | 283 DECLARE_ARGCHECK_VARS(arg); |
284 | 284 |
285 cgen()->frame()->Push(arg); | 285 cgen()->frame()->Push(arg); |
286 DoBranch(cc, hint); | 286 DoBranch(cc, hint); |
287 *arg = cgen()->frame()->Pop(); | 287 *arg = cgen()->frame()->Pop(); |
288 | 288 |
289 ASSERT_ARGCHECK(arg); | 289 ASSERT_ARGCHECK(arg); |
290 } | 290 } |
291 | 291 |
292 | 292 |
293 void JumpTarget::Branch(Condition cc, Result* arg0, Result* arg1, Hint hint) { | |
294 ASSERT(cgen()->has_valid_frame()); | |
295 | |
296 // We want to check that non-frame registers at the call site stay in | |
297 // the same registers on the fall-through branch. | |
298 DECLARE_ARGCHECK_VARS(arg0); | |
299 DECLARE_ARGCHECK_VARS(arg1); | |
300 | |
301 cgen()->frame()->Push(arg0); | |
302 cgen()->frame()->Push(arg1); | |
303 DoBranch(cc, hint); | |
304 *arg1 = cgen()->frame()->Pop(); | |
305 *arg0 = cgen()->frame()->Pop(); | |
306 | |
307 ASSERT_ARGCHECK(arg0); | |
308 ASSERT_ARGCHECK(arg1); | |
309 } | |
310 | |
311 | |
312 void BreakTarget::Branch(Condition cc, Result* arg, Hint hint) { | 293 void BreakTarget::Branch(Condition cc, Result* arg, Hint hint) { |
313 ASSERT(cgen()->has_valid_frame()); | 294 ASSERT(cgen()->has_valid_frame()); |
314 | 295 |
315 int count = cgen()->frame()->height() - expected_height_; | 296 int count = cgen()->frame()->height() - expected_height_; |
316 if (count > 0) { | 297 if (count > 0) { |
317 // We negate and branch here rather than using DoBranch's negate | 298 // We negate and branch here rather than using DoBranch's negate |
318 // and branch. This gives us a hook to remove statement state | 299 // and branch. This gives us a hook to remove statement state |
319 // from the frame. | 300 // from the frame. |
320 JumpTarget fall_through; | 301 JumpTarget fall_through; |
321 // Branch to fall through will not negate, because it is a | 302 // Branch to fall through will not negate, because it is a |
(...skipping 21 matching lines...) Expand all Loading... |
343 | 324 |
344 void JumpTarget::Bind(Result* arg) { | 325 void JumpTarget::Bind(Result* arg) { |
345 if (cgen()->has_valid_frame()) { | 326 if (cgen()->has_valid_frame()) { |
346 cgen()->frame()->Push(arg); | 327 cgen()->frame()->Push(arg); |
347 } | 328 } |
348 DoBind(); | 329 DoBind(); |
349 *arg = cgen()->frame()->Pop(); | 330 *arg = cgen()->frame()->Pop(); |
350 } | 331 } |
351 | 332 |
352 | 333 |
353 void JumpTarget::Bind(Result* arg0, Result* arg1) { | |
354 if (cgen()->has_valid_frame()) { | |
355 cgen()->frame()->Push(arg0); | |
356 cgen()->frame()->Push(arg1); | |
357 } | |
358 DoBind(); | |
359 *arg1 = cgen()->frame()->Pop(); | |
360 *arg0 = cgen()->frame()->Pop(); | |
361 } | |
362 | |
363 | |
364 void JumpTarget::AddReachingFrame(VirtualFrame* frame) { | 334 void JumpTarget::AddReachingFrame(VirtualFrame* frame) { |
365 ASSERT(reaching_frames_.length() == merge_labels_.length()); | 335 ASSERT(reaching_frames_.length() == merge_labels_.length()); |
366 ASSERT(entry_frame_ == NULL); | 336 ASSERT(entry_frame_ == NULL); |
367 Label fresh; | 337 Label fresh; |
368 merge_labels_.Add(fresh); | 338 merge_labels_.Add(fresh); |
369 reaching_frames_.Add(frame); | 339 reaching_frames_.Add(frame); |
370 } | 340 } |
371 | 341 |
372 | 342 |
373 // ------------------------------------------------------------------------- | 343 // ------------------------------------------------------------------------- |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 temp.CopyTo(this); | 414 temp.CopyTo(this); |
445 temp.Unuse(); | 415 temp.Unuse(); |
446 | 416 |
447 #ifdef DEBUG | 417 #ifdef DEBUG |
448 is_shadowing_ = false; | 418 is_shadowing_ = false; |
449 #endif | 419 #endif |
450 } | 420 } |
451 | 421 |
452 | 422 |
453 } } // namespace v8::internal | 423 } } // namespace v8::internal |
OLD | NEW |