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

Side by Side Diff: src/ia32/lithium-codegen-ia32.cc

Issue 598573002: Fixed branch distances. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/x64/lithium-codegen-x64.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_IA32 7 #if V8_TARGET_ARCH_IA32
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 4825 matching lines...) Expand 10 before | Expand all | Expand 10 after
4836 DCHECK(result->IsRegister()); 4836 DCHECK(result->IsRegister());
4837 Register result_reg = ToRegister(result); 4837 Register result_reg = ToRegister(result);
4838 4838
4839 if (instr->truncating()) { 4839 if (instr->truncating()) {
4840 XMMRegister input_reg = ToDoubleRegister(input); 4840 XMMRegister input_reg = ToDoubleRegister(input);
4841 __ TruncateDoubleToI(result_reg, input_reg); 4841 __ TruncateDoubleToI(result_reg, input_reg);
4842 } else { 4842 } else {
4843 Label lost_precision, is_nan, minus_zero, done; 4843 Label lost_precision, is_nan, minus_zero, done;
4844 XMMRegister input_reg = ToDoubleRegister(input); 4844 XMMRegister input_reg = ToDoubleRegister(input);
4845 XMMRegister xmm_scratch = double_scratch0(); 4845 XMMRegister xmm_scratch = double_scratch0();
4846 Label::Distance dist = DeoptEveryNTimes() ? Label::kFar : Label::kNear;
4846 __ DoubleToI(result_reg, input_reg, xmm_scratch, 4847 __ DoubleToI(result_reg, input_reg, xmm_scratch,
4847 instr->hydrogen()->GetMinusZeroMode(), &lost_precision, 4848 instr->hydrogen()->GetMinusZeroMode(), &lost_precision,
4848 &is_nan, &minus_zero, 4849 &is_nan, &minus_zero, dist);
4849 DeoptEveryNTimes() ? Label::kFar : Label::kNear); 4850 __ jmp(&done, dist);
4850 __ jmp(&done, Label::kNear);
4851 __ bind(&lost_precision); 4851 __ bind(&lost_precision);
4852 DeoptimizeIf(no_condition, instr, "lost precision"); 4852 DeoptimizeIf(no_condition, instr, "lost precision");
4853 __ bind(&is_nan); 4853 __ bind(&is_nan);
4854 DeoptimizeIf(no_condition, instr, "NaN"); 4854 DeoptimizeIf(no_condition, instr, "NaN");
4855 __ bind(&minus_zero); 4855 __ bind(&minus_zero);
4856 DeoptimizeIf(no_condition, instr, "minus zero"); 4856 DeoptimizeIf(no_condition, instr, "minus zero");
4857 __ bind(&done); 4857 __ bind(&done);
4858 } 4858 }
4859 } 4859 }
4860 4860
4861 4861
4862 void LCodeGen::DoDoubleToSmi(LDoubleToSmi* instr) { 4862 void LCodeGen::DoDoubleToSmi(LDoubleToSmi* instr) {
4863 LOperand* input = instr->value(); 4863 LOperand* input = instr->value();
4864 DCHECK(input->IsDoubleRegister()); 4864 DCHECK(input->IsDoubleRegister());
4865 LOperand* result = instr->result(); 4865 LOperand* result = instr->result();
4866 DCHECK(result->IsRegister()); 4866 DCHECK(result->IsRegister());
4867 Register result_reg = ToRegister(result); 4867 Register result_reg = ToRegister(result);
4868 4868
4869 Label lost_precision, is_nan, minus_zero, done; 4869 Label lost_precision, is_nan, minus_zero, done;
4870 XMMRegister input_reg = ToDoubleRegister(input); 4870 XMMRegister input_reg = ToDoubleRegister(input);
4871 XMMRegister xmm_scratch = double_scratch0(); 4871 XMMRegister xmm_scratch = double_scratch0();
4872 Label::Distance dist = DeoptEveryNTimes() ? Label::kFar : Label::kNear;
4872 __ DoubleToI(result_reg, input_reg, xmm_scratch, 4873 __ DoubleToI(result_reg, input_reg, xmm_scratch,
4873 instr->hydrogen()->GetMinusZeroMode(), &lost_precision, &is_nan, 4874 instr->hydrogen()->GetMinusZeroMode(), &lost_precision, &is_nan,
4874 &minus_zero, DeoptEveryNTimes() ? Label::kFar : Label::kNear); 4875 &minus_zero, dist);
4875 __ jmp(&done, Label::kNear); 4876 __ jmp(&done, dist);
4876 __ bind(&lost_precision); 4877 __ bind(&lost_precision);
4877 DeoptimizeIf(no_condition, instr, "lost precision"); 4878 DeoptimizeIf(no_condition, instr, "lost precision");
4878 __ bind(&is_nan); 4879 __ bind(&is_nan);
4879 DeoptimizeIf(no_condition, instr, "NaN"); 4880 DeoptimizeIf(no_condition, instr, "NaN");
4880 __ bind(&minus_zero); 4881 __ bind(&minus_zero);
4881 DeoptimizeIf(no_condition, instr, "minus zero"); 4882 DeoptimizeIf(no_condition, instr, "minus zero");
4882 __ bind(&done); 4883 __ bind(&done);
4883 __ SmiTag(result_reg); 4884 __ SmiTag(result_reg);
4884 DeoptimizeIf(overflow, instr, "overflow"); 4885 DeoptimizeIf(overflow, instr, "overflow");
4885 } 4886 }
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after
5696 CallRuntime(Runtime::kPushBlockContext, 2, instr); 5697 CallRuntime(Runtime::kPushBlockContext, 2, instr);
5697 RecordSafepoint(Safepoint::kNoLazyDeopt); 5698 RecordSafepoint(Safepoint::kNoLazyDeopt);
5698 } 5699 }
5699 5700
5700 5701
5701 #undef __ 5702 #undef __
5702 5703
5703 } } // namespace v8::internal 5704 } } // namespace v8::internal
5704 5705
5705 #endif // V8_TARGET_ARCH_IA32 5706 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « no previous file | src/x64/lithium-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698