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

Side by Side Diff: runtime/vm/intermediate_language_ia32.cc

Issue 2273943002: VM: More refactoring of recognized methods inlining. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 3 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 | « runtime/vm/intermediate_language_dbc.cc ('k') | runtime/vm/intermediate_language_mips.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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32.
6 #if defined(TARGET_ARCH_IA32) 6 #if defined(TARGET_ARCH_IA32)
7 7
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 9
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 4886 matching lines...) Expand 10 before | Expand all | Expand 10 after
4897 case Token::kSUB: 4897 case Token::kSUB:
4898 __ subpl(left, right); 4898 __ subpl(left, right);
4899 break; 4899 break;
4900 default: UNREACHABLE(); 4900 default: UNREACHABLE();
4901 } 4901 }
4902 } 4902 }
4903 4903
4904 4904
4905 LocationSummary* MathUnaryInstr::MakeLocationSummary(Zone* zone, 4905 LocationSummary* MathUnaryInstr::MakeLocationSummary(Zone* zone,
4906 bool opt) const { 4906 bool opt) const {
4907 if ((kind() == MathUnaryInstr::kSin) || (kind() == MathUnaryInstr::kCos)) {
4908 const intptr_t kNumInputs = 1;
4909 const intptr_t kNumTemps = 1;
4910 LocationSummary* summary = new(zone) LocationSummary(
4911 zone, kNumInputs, kNumTemps, LocationSummary::kCall);
4912 summary->set_in(0, Location::FpuRegisterLocation(XMM1));
4913 // EDI is chosen because it is callee saved so we do not need to back it
4914 // up before calling into the runtime.
4915 summary->set_temp(0, Location::RegisterLocation(EDI));
4916 summary->set_out(0, Location::FpuRegisterLocation(XMM1));
4917 return summary;
4918 }
4919 ASSERT((kind() == MathUnaryInstr::kSqrt) || 4907 ASSERT((kind() == MathUnaryInstr::kSqrt) ||
4920 (kind() == MathUnaryInstr::kDoubleSquare)); 4908 (kind() == MathUnaryInstr::kDoubleSquare));
4921 const intptr_t kNumInputs = 1; 4909 const intptr_t kNumInputs = 1;
4922 const intptr_t kNumTemps = 0; 4910 const intptr_t kNumTemps = 0;
4923 LocationSummary* summary = new(zone) LocationSummary( 4911 LocationSummary* summary = new(zone) LocationSummary(
4924 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 4912 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
4925 summary->set_in(0, Location::RequiresFpuRegister()); 4913 summary->set_in(0, Location::RequiresFpuRegister());
4926 if (kind() == MathUnaryInstr::kDoubleSquare) { 4914 if (kind() == MathUnaryInstr::kDoubleSquare) {
4927 summary->set_out(0, Location::SameAsFirstInput()); 4915 summary->set_out(0, Location::SameAsFirstInput());
4928 } else { 4916 } else {
4929 summary->set_out(0, Location::RequiresFpuRegister()); 4917 summary->set_out(0, Location::RequiresFpuRegister());
4930 } 4918 }
4931 return summary; 4919 return summary;
4932 } 4920 }
4933 4921
4934 4922
4935 void MathUnaryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 4923 void MathUnaryInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
4936 if (kind() == MathUnaryInstr::kSqrt) { 4924 if (kind() == MathUnaryInstr::kSqrt) {
4937 __ sqrtsd(locs()->out(0).fpu_reg(), locs()->in(0).fpu_reg()); 4925 __ sqrtsd(locs()->out(0).fpu_reg(), locs()->in(0).fpu_reg());
4938 } else if (kind() == MathUnaryInstr::kDoubleSquare) { 4926 } else if (kind() == MathUnaryInstr::kDoubleSquare) {
4939 XmmRegister value_reg = locs()->in(0).fpu_reg(); 4927 XmmRegister value_reg = locs()->in(0).fpu_reg();
4940 __ mulsd(value_reg, value_reg); 4928 __ mulsd(value_reg, value_reg);
4941 ASSERT(value_reg == locs()->out(0).fpu_reg()); 4929 ASSERT(value_reg == locs()->out(0).fpu_reg());
4942 } else { 4930 } else {
4943 ASSERT((kind() == MathUnaryInstr::kSin) || 4931 UNREACHABLE();
4944 (kind() == MathUnaryInstr::kCos));
4945 // Save ESP.
4946 __ movl(locs()->temp(0).reg(), ESP);
4947 __ ReserveAlignedFrameSpace(kDoubleSize * InputCount());
4948 __ movsd(Address(ESP, 0), locs()->in(0).fpu_reg());
4949 __ CallRuntime(TargetFunction(), InputCount());
4950 __ fstpl(Address(ESP, 0));
4951 __ movsd(locs()->out(0).fpu_reg(), Address(ESP, 0));
4952 // Restore ESP.
4953 __ movl(ESP, locs()->temp(0).reg());
4954 } 4932 }
4955 } 4933 }
4956 4934
4957 4935
4958 LocationSummary* CaseInsensitiveCompareUC16Instr::MakeLocationSummary( 4936 LocationSummary* CaseInsensitiveCompareUC16Instr::MakeLocationSummary(
4959 Zone* zone, bool opt) const { 4937 Zone* zone, bool opt) const {
4960 const intptr_t kNumTemps = 0; 4938 const intptr_t kNumTemps = 0;
4961 LocationSummary* summary = new(zone) LocationSummary( 4939 LocationSummary* summary = new(zone) LocationSummary(
4962 zone, InputCount(), kNumTemps, LocationSummary::kCall); 4940 zone, InputCount(), kNumTemps, LocationSummary::kCall);
4963 summary->set_in(0, Location::RegisterLocation(EAX)); 4941 summary->set_in(0, Location::RegisterLocation(EAX));
(...skipping 1929 matching lines...) Expand 10 before | Expand all | Expand 10 after
6893 __ Drop(1); 6871 __ Drop(1);
6894 __ popl(result); 6872 __ popl(result);
6895 } 6873 }
6896 6874
6897 6875
6898 } // namespace dart 6876 } // namespace dart
6899 6877
6900 #undef __ 6878 #undef __
6901 6879
6902 #endif // defined TARGET_ARCH_IA32 6880 #endif // defined TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_dbc.cc ('k') | runtime/vm/intermediate_language_mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698