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

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

Issue 528993002: First step to cleanup the power-of-2 mess. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: clang-format 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 | « src/ia32/code-stubs-ia32.cc ('k') | src/ia32/macro-assembler-ia32.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/code-stubs.h" 10 #include "src/code-stubs.h"
10 #include "src/codegen.h" 11 #include "src/codegen.h"
11 #include "src/deoptimizer.h" 12 #include "src/deoptimizer.h"
12 #include "src/hydrogen-osr.h" 13 #include "src/hydrogen-osr.h"
13 #include "src/ia32/lithium-codegen-ia32.h" 14 #include "src/ia32/lithium-codegen-ia32.h"
14 15
15 namespace v8 { 16 namespace v8 {
16 namespace internal { 17 namespace internal {
17 18
18 // When invoking builtins, we need to record the safepoint in the middle of 19 // When invoking builtins, we need to record the safepoint in the middle of
(...skipping 1192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 } 1212 }
1212 __ idiv(right_reg); 1213 __ idiv(right_reg);
1213 __ bind(&done); 1214 __ bind(&done);
1214 } 1215 }
1215 1216
1216 1217
1217 void LCodeGen::DoDivByPowerOf2I(LDivByPowerOf2I* instr) { 1218 void LCodeGen::DoDivByPowerOf2I(LDivByPowerOf2I* instr) {
1218 Register dividend = ToRegister(instr->dividend()); 1219 Register dividend = ToRegister(instr->dividend());
1219 int32_t divisor = instr->divisor(); 1220 int32_t divisor = instr->divisor();
1220 Register result = ToRegister(instr->result()); 1221 Register result = ToRegister(instr->result());
1221 DCHECK(divisor == kMinInt || IsPowerOf2(Abs(divisor))); 1222 DCHECK(divisor == kMinInt || base::bits::IsPowerOfTwo32(Abs(divisor)));
1222 DCHECK(!result.is(dividend)); 1223 DCHECK(!result.is(dividend));
1223 1224
1224 // Check for (0 / -x) that will produce negative zero. 1225 // Check for (0 / -x) that will produce negative zero.
1225 HDiv* hdiv = instr->hydrogen(); 1226 HDiv* hdiv = instr->hydrogen();
1226 if (hdiv->CheckFlag(HValue::kBailoutOnMinusZero) && divisor < 0) { 1227 if (hdiv->CheckFlag(HValue::kBailoutOnMinusZero) && divisor < 0) {
1227 __ test(dividend, dividend); 1228 __ test(dividend, dividend);
1228 DeoptimizeIf(zero, instr->environment()); 1229 DeoptimizeIf(zero, instr->environment());
1229 } 1230 }
1230 // Check for (kMinInt / -1). 1231 // Check for (kMinInt / -1).
1231 if (hdiv->CheckFlag(HValue::kCanOverflow) && divisor == -1) { 1232 if (hdiv->CheckFlag(HValue::kCanOverflow) && divisor == -1) {
(...skipping 3664 matching lines...) Expand 10 before | Expand all | Expand 10 after
4896 __ cmpb(FieldOperand(temp, Map::kInstanceTypeOffset), 4897 __ cmpb(FieldOperand(temp, Map::kInstanceTypeOffset),
4897 static_cast<int8_t>(last)); 4898 static_cast<int8_t>(last));
4898 DeoptimizeIf(above, instr->environment()); 4899 DeoptimizeIf(above, instr->environment());
4899 } 4900 }
4900 } 4901 }
4901 } else { 4902 } else {
4902 uint8_t mask; 4903 uint8_t mask;
4903 uint8_t tag; 4904 uint8_t tag;
4904 instr->hydrogen()->GetCheckMaskAndTag(&mask, &tag); 4905 instr->hydrogen()->GetCheckMaskAndTag(&mask, &tag);
4905 4906
4906 if (IsPowerOf2(mask)) { 4907 if (base::bits::IsPowerOfTwo32(mask)) {
4907 DCHECK(tag == 0 || IsPowerOf2(tag)); 4908 DCHECK(tag == 0 || base::bits::IsPowerOfTwo32(tag));
4908 __ test_b(FieldOperand(temp, Map::kInstanceTypeOffset), mask); 4909 __ test_b(FieldOperand(temp, Map::kInstanceTypeOffset), mask);
4909 DeoptimizeIf(tag == 0 ? not_zero : zero, instr->environment()); 4910 DeoptimizeIf(tag == 0 ? not_zero : zero, instr->environment());
4910 } else { 4911 } else {
4911 __ movzx_b(temp, FieldOperand(temp, Map::kInstanceTypeOffset)); 4912 __ movzx_b(temp, FieldOperand(temp, Map::kInstanceTypeOffset));
4912 __ and_(temp, mask); 4913 __ and_(temp, mask);
4913 __ cmp(temp, tag); 4914 __ cmp(temp, tag);
4914 DeoptimizeIf(not_equal, instr->environment()); 4915 DeoptimizeIf(not_equal, instr->environment());
4915 } 4916 }
4916 } 4917 }
4917 } 4918 }
(...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after
5669 CallRuntime(Runtime::kPushBlockContext, 2, instr); 5670 CallRuntime(Runtime::kPushBlockContext, 2, instr);
5670 RecordSafepoint(Safepoint::kNoLazyDeopt); 5671 RecordSafepoint(Safepoint::kNoLazyDeopt);
5671 } 5672 }
5672 5673
5673 5674
5674 #undef __ 5675 #undef __
5675 5676
5676 } } // namespace v8::internal 5677 } } // namespace v8::internal
5677 5678
5678 #endif // V8_TARGET_ARCH_IA32 5679 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/code-stubs-ia32.cc ('k') | src/ia32/macro-assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698