| OLD | NEW | 
|---|
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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 | 
| OLD | NEW | 
|---|