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

Side by Side Diff: src/compiler/arm/code-generator-arm.cc

Issue 436593002: [turbofan] Add Int32AddWithOverflow machine operator. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add more tests. Created 6 years, 4 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
« no previous file with comments | « no previous file | src/compiler/arm/instruction-selector-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/arm/macro-assembler-arm.h" 7 #include "src/arm/macro-assembler-arm.h"
8 #include "src/compiler/code-generator-impl.h" 8 #include "src/compiler/code-generator-impl.h"
9 #include "src/compiler/gap-resolver.h" 9 #include "src/compiler/gap-resolver.h"
10 #include "src/compiler/node-matchers.h" 10 #include "src/compiler/node-matchers.h"
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 // Fall through. 494 // Fall through.
495 case kUnsignedLessThanOrEqual: 495 case kUnsignedLessThanOrEqual:
496 __ b(ls, tlabel); 496 __ b(ls, tlabel);
497 break; 497 break;
498 case kUnorderedGreaterThan: 498 case kUnorderedGreaterThan:
499 __ b(vs, tlabel); 499 __ b(vs, tlabel);
500 // Fall through. 500 // Fall through.
501 case kUnsignedGreaterThan: 501 case kUnsignedGreaterThan:
502 __ b(hi, tlabel); 502 __ b(hi, tlabel);
503 break; 503 break;
504 case kOverflow:
505 __ b(vs, tlabel);
506 break;
507 case kNotOverflow:
508 __ b(vc, tlabel);
509 break;
504 } 510 }
505 if (!fallthru) __ b(flabel); // no fallthru to flabel. 511 if (!fallthru) __ b(flabel); // no fallthru to flabel.
506 __ bind(&done); 512 __ bind(&done);
507 } 513 }
508 514
509 515
510 // Assembles boolean materializations after an instruction. 516 // Assembles boolean materializations after an instruction.
511 void CodeGenerator::AssembleArchBoolean(Instruction* instr, 517 void CodeGenerator::AssembleArchBoolean(Instruction* instr,
512 FlagsCondition condition) { 518 FlagsCondition condition) {
513 ArmOperandConverter i(this, instr); 519 ArmOperandConverter i(this, instr);
514 Label done; 520 Label done;
515 521
516 // Materialize a full 32-bit 1 or 0 value. 522 // Materialize a full 32-bit 1 or 0 value. The result register is always the
523 // last output of the instruction.
517 Label check; 524 Label check;
518 Register reg = i.OutputRegister(); 525 ASSERT_NE(0, instr->OutputCount());
526 Register reg = i.OutputRegister(instr->OutputCount() - 1);
519 Condition cc = kNoCondition; 527 Condition cc = kNoCondition;
520 switch (condition) { 528 switch (condition) {
521 case kUnorderedEqual: 529 case kUnorderedEqual:
522 __ b(vc, &check); 530 __ b(vc, &check);
523 __ mov(reg, Operand(0)); 531 __ mov(reg, Operand(0));
524 __ b(&done); 532 __ b(&done);
525 // Fall through. 533 // Fall through.
526 case kEqual: 534 case kEqual:
527 cc = eq; 535 cc = eq;
528 break; 536 break;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 cc = ls; 579 cc = ls;
572 break; 580 break;
573 case kUnorderedGreaterThan: 581 case kUnorderedGreaterThan:
574 __ b(vc, &check); 582 __ b(vc, &check);
575 __ mov(reg, Operand(1)); 583 __ mov(reg, Operand(1));
576 __ b(&done); 584 __ b(&done);
577 // Fall through. 585 // Fall through.
578 case kUnsignedGreaterThan: 586 case kUnsignedGreaterThan:
579 cc = hi; 587 cc = hi;
580 break; 588 break;
589 case kOverflow:
590 cc = vs;
591 break;
592 case kNotOverflow:
593 cc = vc;
594 break;
581 } 595 }
582 __ bind(&check); 596 __ bind(&check);
583 __ mov(reg, Operand(0)); 597 __ mov(reg, Operand(0));
584 __ mov(reg, Operand(1), LeaveCC, cc); 598 __ mov(reg, Operand(1), LeaveCC, cc);
585 __ bind(&done); 599 __ bind(&done);
586 } 600 }
587 601
588 602
589 void CodeGenerator::AssemblePrologue() { 603 void CodeGenerator::AssemblePrologue() {
590 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor(); 604 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor();
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 int end_pc) { 839 int end_pc) {
826 return false; 840 return false;
827 } 841 }
828 842
829 #endif // DEBUG 843 #endif // DEBUG
830 844
831 #undef __ 845 #undef __
832 } 846 }
833 } 847 }
834 } // namespace v8::internal::compiler 848 } // namespace v8::internal::compiler
OLDNEW
« no previous file with comments | « no previous file | src/compiler/arm/instruction-selector-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698