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

Side by Side Diff: src/jump-target.cc

Issue 125048: Remove branching and binding with two arguments from the JumpTarget... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 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 | Annotate | Revision Log
« src/ia32/codegen-ia32.cc ('K') | « src/jump-target.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 DECLARE_ARGCHECK_VARS(arg); 261 DECLARE_ARGCHECK_VARS(arg);
262 262
263 cgen()->frame()->Push(arg); 263 cgen()->frame()->Push(arg);
264 DoBranch(cc, hint); 264 DoBranch(cc, hint);
265 *arg = cgen()->frame()->Pop(); 265 *arg = cgen()->frame()->Pop();
266 266
267 ASSERT_ARGCHECK(arg); 267 ASSERT_ARGCHECK(arg);
268 } 268 }
269 269
270 270
271 void JumpTarget::Branch(Condition cc, Result* arg0, Result* arg1, Hint hint) {
272 ASSERT(cgen()->frame() != NULL);
273
274 // We want to check that non-frame registers at the call site stay in
275 // the same registers on the fall-through branch.
276 DECLARE_ARGCHECK_VARS(arg0);
277 DECLARE_ARGCHECK_VARS(arg1);
278
279 cgen()->frame()->Push(arg0);
280 cgen()->frame()->Push(arg1);
281 DoBranch(cc, hint);
282 *arg1 = cgen()->frame()->Pop();
283 *arg0 = cgen()->frame()->Pop();
284
285 ASSERT_ARGCHECK(arg0);
286 ASSERT_ARGCHECK(arg1);
287 }
288
289
290 void BreakTarget::Branch(Condition cc, Result* arg, Hint hint) { 271 void BreakTarget::Branch(Condition cc, Result* arg, Hint hint) {
291 ASSERT(cgen()->has_valid_frame()); 272 ASSERT(cgen()->has_valid_frame());
292 273
293 int count = cgen()->frame()->height() - expected_height_; 274 int count = cgen()->frame()->height() - expected_height_;
294 if (count > 0) { 275 if (count > 0) {
295 // We negate and branch here rather than using DoBranch's negate 276 // We negate and branch here rather than using DoBranch's negate
296 // and branch. This gives us a hook to remove statement state 277 // and branch. This gives us a hook to remove statement state
297 // from the frame. 278 // from the frame.
298 JumpTarget fall_through; 279 JumpTarget fall_through;
299 // Branch to fall through will not negate, because it is a 280 // Branch to fall through will not negate, because it is a
(...skipping 21 matching lines...) Expand all
321 302
322 void JumpTarget::Bind(Result* arg) { 303 void JumpTarget::Bind(Result* arg) {
323 if (cgen()->has_valid_frame()) { 304 if (cgen()->has_valid_frame()) {
324 cgen()->frame()->Push(arg); 305 cgen()->frame()->Push(arg);
325 } 306 }
326 DoBind(); 307 DoBind();
327 *arg = cgen()->frame()->Pop(); 308 *arg = cgen()->frame()->Pop();
328 } 309 }
329 310
330 311
331 void JumpTarget::Bind(Result* arg0, Result* arg1) {
332 if (cgen()->has_valid_frame()) {
333 cgen()->frame()->Push(arg0);
334 cgen()->frame()->Push(arg1);
335 }
336 DoBind();
337 *arg1 = cgen()->frame()->Pop();
338 *arg0 = cgen()->frame()->Pop();
339 }
340
341
342 void JumpTarget::AddReachingFrame(VirtualFrame* frame) { 312 void JumpTarget::AddReachingFrame(VirtualFrame* frame) {
343 ASSERT(reaching_frames_.length() == merge_labels_.length()); 313 ASSERT(reaching_frames_.length() == merge_labels_.length());
344 ASSERT(entry_frame_ == NULL); 314 ASSERT(entry_frame_ == NULL);
345 Label fresh; 315 Label fresh;
346 merge_labels_.Add(fresh); 316 merge_labels_.Add(fresh);
347 reaching_frames_.Add(frame); 317 reaching_frames_.Add(frame);
348 } 318 }
349 319
350 320
351 // ------------------------------------------------------------------------- 321 // -------------------------------------------------------------------------
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 temp.CopyTo(this); 453 temp.CopyTo(this);
484 temp.Unuse(); 454 temp.Unuse();
485 455
486 #ifdef DEBUG 456 #ifdef DEBUG
487 is_shadowing_ = false; 457 is_shadowing_ = false;
488 #endif 458 #endif
489 } 459 }
490 460
491 461
492 } } // namespace v8::internal 462 } } // namespace v8::internal
OLDNEW
« src/ia32/codegen-ia32.cc ('K') | « src/jump-target.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698