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

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

Issue 1066393002: [turbofan] Add new Float32Abs and Float64Abs operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix comment. Created 5 years, 8 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
« no previous file with comments | « src/compiler/verifier.cc ('k') | src/compiler/x64/instruction-codes-x64.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/compiler/code-generator-impl.h" 7 #include "src/compiler/code-generator-impl.h"
8 #include "src/compiler/gap-resolver.h" 8 #include "src/compiler/gap-resolver.h"
9 #include "src/compiler/node-matchers.h" 9 #include "src/compiler/node-matchers.h"
10 #include "src/scopes.h" 10 #include "src/scopes.h"
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 break; 719 break;
720 case kSSEFloat32Sub: 720 case kSSEFloat32Sub:
721 ASSEMBLE_SSE_BINOP(subss); 721 ASSEMBLE_SSE_BINOP(subss);
722 break; 722 break;
723 case kSSEFloat32Mul: 723 case kSSEFloat32Mul:
724 ASSEMBLE_SSE_BINOP(mulss); 724 ASSEMBLE_SSE_BINOP(mulss);
725 break; 725 break;
726 case kSSEFloat32Div: 726 case kSSEFloat32Div:
727 ASSEMBLE_SSE_BINOP(divss); 727 ASSEMBLE_SSE_BINOP(divss);
728 break; 728 break;
729 case kSSEFloat32Abs: {
730 // TODO(bmeurer): Use RIP relative 128-bit constants.
731 // TODO(turbofan): Add AVX version with relaxed register constraints.
732 __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
733 __ psrlq(kScratchDoubleReg, 33);
734 __ andps(i.OutputDoubleRegister(), kScratchDoubleReg);
735 break;
736 }
729 case kSSEFloat32Neg: { 737 case kSSEFloat32Neg: {
730 // TODO(bmeurer): Use RIP relative 128-bit constants. 738 // TODO(bmeurer): Use RIP relative 128-bit constants.
731 // TODO(turbofan): Add AVX version with relaxed register constraints. 739 // TODO(turbofan): Add AVX version with relaxed register constraints.
732 __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); 740 __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
733 __ psllq(kScratchDoubleReg, 31); 741 __ psllq(kScratchDoubleReg, 31);
734 __ xorps(i.OutputDoubleRegister(), kScratchDoubleReg); 742 __ xorps(i.OutputDoubleRegister(), kScratchDoubleReg);
735 break; 743 break;
736 } 744 }
737 case kSSEFloat32Sqrt: 745 case kSSEFloat32Sqrt:
738 ASSEMBLE_SSE_UNOP(sqrtss); 746 ASSEMBLE_SSE_UNOP(sqrtss);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 __ movsd(i.OutputDoubleRegister(), Operand(rsp, 0)); 800 __ movsd(i.OutputDoubleRegister(), Operand(rsp, 0));
793 __ addq(rsp, Immediate(kDoubleSize)); 801 __ addq(rsp, Immediate(kDoubleSize));
794 break; 802 break;
795 } 803 }
796 case kSSEFloat64Max: 804 case kSSEFloat64Max:
797 ASSEMBLE_SSE_BINOP(maxsd); 805 ASSEMBLE_SSE_BINOP(maxsd);
798 break; 806 break;
799 case kSSEFloat64Min: 807 case kSSEFloat64Min:
800 ASSEMBLE_SSE_BINOP(minsd); 808 ASSEMBLE_SSE_BINOP(minsd);
801 break; 809 break;
810 case kSSEFloat64Abs: {
811 // TODO(bmeurer): Use RIP relative 128-bit constants.
812 // TODO(turbofan): Add AVX version with relaxed register constraints.
813 __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
814 __ psrlq(kScratchDoubleReg, 1);
815 __ andpd(i.OutputDoubleRegister(), kScratchDoubleReg);
816 break;
817 }
802 case kSSEFloat64Neg: { 818 case kSSEFloat64Neg: {
803 // TODO(bmeurer): Use RIP relative 128-bit constants. 819 // TODO(bmeurer): Use RIP relative 128-bit constants.
804 // TODO(turbofan): Add AVX version with relaxed register constraints. 820 // TODO(turbofan): Add AVX version with relaxed register constraints.
805 __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); 821 __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
806 __ psllq(kScratchDoubleReg, 63); 822 __ psllq(kScratchDoubleReg, 63);
807 __ xorpd(i.OutputDoubleRegister(), kScratchDoubleReg); 823 __ xorpd(i.OutputDoubleRegister(), kScratchDoubleReg);
808 break; 824 break;
809 } 825 }
810 case kSSEFloat64Sqrt: 826 case kSSEFloat64Sqrt:
811 ASSEMBLE_SSE_UNOP(sqrtsd); 827 ASSEMBLE_SSE_UNOP(sqrtsd);
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
1576 } 1592 }
1577 } 1593 }
1578 MarkLazyDeoptSite(); 1594 MarkLazyDeoptSite();
1579 } 1595 }
1580 1596
1581 #undef __ 1597 #undef __
1582 1598
1583 } // namespace internal 1599 } // namespace internal
1584 } // namespace compiler 1600 } // namespace compiler
1585 } // namespace v8 1601 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/verifier.cc ('k') | src/compiler/x64/instruction-codes-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698