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

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

Issue 2916093002: [ia32][wasm] Support AVX instructions for I32x4Splat/ReplaceLane/ExtractLane (Closed)
Patch Set: Created 3 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
« no previous file with comments | « no previous file | src/compiler/ia32/instruction-codes-ia32.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/compilation-info.h" 7 #include "src/compilation-info.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 1874 matching lines...) Expand 10 before | Expand all | Expand 10 after
1885 int const slot = MiscField::decode(instr->opcode()); 1885 int const slot = MiscField::decode(instr->opcode());
1886 if (HasImmediateInput(instr, 0)) { 1886 if (HasImmediateInput(instr, 0)) {
1887 __ mov(Operand(esp, slot * kPointerSize), i.InputImmediate(0)); 1887 __ mov(Operand(esp, slot * kPointerSize), i.InputImmediate(0));
1888 } else { 1888 } else {
1889 __ mov(Operand(esp, slot * kPointerSize), i.InputRegister(0)); 1889 __ mov(Operand(esp, slot * kPointerSize), i.InputRegister(0));
1890 } 1890 }
1891 break; 1891 break;
1892 } 1892 }
1893 case kIA32I32x4Splat: { 1893 case kIA32I32x4Splat: {
1894 XMMRegister dst = i.OutputSimd128Register(); 1894 XMMRegister dst = i.OutputSimd128Register();
1895 __ movd(dst, i.InputOperand(0)); 1895 __ Movd(dst, i.InputOperand(0));
1896 __ pshufd(dst, dst, 0x0); 1896 __ Pshufd(dst, dst, 0x0);
1897 break; 1897 break;
1898 } 1898 }
1899 case kIA32I32x4ExtractLane: { 1899 case kIA32I32x4ExtractLane: {
1900 __ Pextrd(i.OutputRegister(), i.InputSimd128Register(0), i.InputInt8(1)); 1900 __ Pextrd(i.OutputRegister(), i.InputSimd128Register(0), i.InputInt8(1));
1901 break; 1901 break;
1902 } 1902 }
1903 case kIA32I32x4ReplaceLane: { 1903 case kSSEI32x4ReplaceLane: {
1904 __ Pinsrd(i.OutputSimd128Register(), i.InputOperand(2), i.InputInt8(1)); 1904 CpuFeatureScope sse_scope(masm(), SSE4_1);
1905 __ pinsrd(i.OutputSimd128Register(), i.InputOperand(2), i.InputInt8(1));
1905 break; 1906 break;
1906 } 1907 }
1907 case kSSEI32x4Add: { 1908 case kSSEI32x4Add: {
1908 __ paddd(i.OutputSimd128Register(), i.InputOperand(1)); 1909 __ paddd(i.OutputSimd128Register(), i.InputOperand(1));
1909 break; 1910 break;
1910 } 1911 }
1911 case kSSEI32x4Sub: { 1912 case kSSEI32x4Sub: {
1912 __ psubd(i.OutputSimd128Register(), i.InputOperand(1)); 1913 __ psubd(i.OutputSimd128Register(), i.InputOperand(1));
1913 break; 1914 break;
1914 } 1915 }
1916 case kAVXI32x4ReplaceLane: {
1917 CpuFeatureScope avx_scope(masm(), AVX);
1918 __ vpinsrd(i.OutputSimd128Register(), i.InputSimd128Register(0),
1919 i.InputOperand(2), i.InputInt8(1));
1920 break;
1921 }
1915 case kAVXI32x4Add: { 1922 case kAVXI32x4Add: {
1916 CpuFeatureScope avx_scope(masm(), AVX); 1923 CpuFeatureScope avx_scope(masm(), AVX);
1917 __ vpaddd(i.OutputSimd128Register(), i.InputSimd128Register(0), 1924 __ vpaddd(i.OutputSimd128Register(), i.InputSimd128Register(0),
1918 i.InputOperand(1)); 1925 i.InputOperand(1));
1919 break; 1926 break;
1920 } 1927 }
1921 case kAVXI32x4Sub: { 1928 case kAVXI32x4Sub: {
1922 CpuFeatureScope avx_scope(masm(), AVX); 1929 CpuFeatureScope avx_scope(masm(), AVX);
1923 __ vpsubd(i.OutputSimd128Register(), i.InputSimd128Register(0), 1930 __ vpsubd(i.OutputSimd128Register(), i.InputSimd128Register(0),
1924 i.InputOperand(1)); 1931 i.InputOperand(1));
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after
2764 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; 2771 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc;
2765 __ Nop(padding_size); 2772 __ Nop(padding_size);
2766 } 2773 }
2767 } 2774 }
2768 2775
2769 #undef __ 2776 #undef __
2770 2777
2771 } // namespace compiler 2778 } // namespace compiler
2772 } // namespace internal 2779 } // namespace internal
2773 } // namespace v8 2780 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/ia32/instruction-codes-ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698