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

Side by Side Diff: src/builtins/builtins-string.cc

Issue 2489743002: [stubs] Ensure CSA_ASSERT and CSA_SLOW_ASSERT do not produce unused instructions in release mode. (Closed)
Patch Set: ((void)0) Created 4 years, 1 month 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/builtins/builtins-regexp.cc ('k') | src/code-stub-assembler.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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/builtins/builtins.h" 5 #include "src/builtins/builtins.h"
6 #include "src/builtins/builtins-utils.h" 6 #include "src/builtins/builtins-utils.h"
7 7
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/regexp/regexp-utils.h" 9 #include "src/regexp/regexp-utils.h"
10 10
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 a->GotoUnless(a->SmiLessThanOrEqual(var_length.value(), zero), &out); 994 a->GotoUnless(a->SmiLessThanOrEqual(var_length.value(), zero), &out);
995 a->Return(a->EmptyStringConstant()); 995 a->Return(a->EmptyStringConstant());
996 } 996 }
997 997
998 a->Bind(&if_isheapnumber); 998 a->Bind(&if_isheapnumber);
999 { 999 {
1000 // If {length} is a heap number, it is definitely out of bounds. There are 1000 // If {length} is a heap number, it is definitely out of bounds. There are
1001 // two cases according to the spec: if it is negative, "" is returned; if 1001 // two cases according to the spec: if it is negative, "" is returned; if
1002 // it is positive, then length is set to {string_length} - {start}. 1002 // it is positive, then length is set to {string_length} - {start}.
1003 1003
1004 a->Assert(a->WordEqual(a->LoadMap(var_length.value()), 1004 CSA_ASSERT(a, a->WordEqual(a->LoadMap(var_length.value()),
1005 a->HeapNumberMapConstant())); 1005 a->HeapNumberMapConstant()));
1006 1006
1007 Label if_isnegative(a), if_ispositive(a); 1007 Label if_isnegative(a), if_ispositive(a);
1008 Node* const float_zero = a->Float64Constant(0.); 1008 Node* const float_zero = a->Float64Constant(0.);
1009 Node* const length_float = a->LoadHeapNumberValue(var_length.value()); 1009 Node* const length_float = a->LoadHeapNumberValue(var_length.value());
1010 a->Branch(a->Float64LessThan(length_float, float_zero), &if_isnegative, 1010 a->Branch(a->Float64LessThan(length_float, float_zero), &if_isnegative,
1011 &if_ispositive); 1011 &if_ispositive);
1012 1012
1013 a->Bind(&if_isnegative); 1013 a->Bind(&if_isnegative);
1014 a->Return(a->EmptyStringConstant()); 1014 a->Return(a->EmptyStringConstant());
1015 1015
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 { 1064 {
1065 Node* const zero = a->SmiConstant(Smi::kZero); 1065 Node* const zero = a->SmiConstant(Smi::kZero);
1066 var_result.Bind(a->Select(a->SmiLessThan(value_int, zero), zero, limit)); 1066 var_result.Bind(a->Select(a->SmiLessThan(value_int, zero), zero, limit));
1067 a->Goto(&out); 1067 a->Goto(&out);
1068 } 1068 }
1069 } 1069 }
1070 1070
1071 a->Bind(&if_isnotsmi); 1071 a->Bind(&if_isnotsmi);
1072 { 1072 {
1073 // {value} is a heap number - in this case, it is definitely out of bounds. 1073 // {value} is a heap number - in this case, it is definitely out of bounds.
1074 a->Assert(a->WordEqual(a->LoadMap(value_int), a->HeapNumberMapConstant())); 1074 CSA_ASSERT(a,
1075 a->WordEqual(a->LoadMap(value_int), a->HeapNumberMapConstant()));
1075 1076
1076 Node* const float_zero = a->Float64Constant(0.); 1077 Node* const float_zero = a->Float64Constant(0.);
1077 Node* const smi_zero = a->SmiConstant(Smi::kZero); 1078 Node* const smi_zero = a->SmiConstant(Smi::kZero);
1078 Node* const value_float = a->LoadHeapNumberValue(value_int); 1079 Node* const value_float = a->LoadHeapNumberValue(value_int);
1079 var_result.Bind(a->Select(a->Float64LessThan(value_float, float_zero), 1080 var_result.Bind(a->Select(a->Float64LessThan(value_float, float_zero),
1080 smi_zero, limit)); 1081 smi_zero, limit));
1081 a->Goto(&out); 1082 a->Goto(&out);
1082 } 1083 }
1083 1084
1084 a->Bind(&out); 1085 a->Bind(&out);
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 assembler->Branch(assembler->Word32Equal( 1295 assembler->Branch(assembler->Word32Equal(
1295 assembler->Word32And(var_trail.value(), 1296 assembler->Word32And(var_trail.value(),
1296 assembler->Int32Constant(0xFC00)), 1297 assembler->Int32Constant(0xFC00)),
1297 assembler->Int32Constant(0xDC00)), 1298 assembler->Int32Constant(0xDC00)),
1298 &handle_surrogate_pair, &return_result); 1299 &handle_surrogate_pair, &return_result);
1299 1300
1300 assembler->Bind(&handle_surrogate_pair); 1301 assembler->Bind(&handle_surrogate_pair);
1301 { 1302 {
1302 Node* lead = var_result.value(); 1303 Node* lead = var_result.value();
1303 Node* trail = var_trail.value(); 1304 Node* trail = var_trail.value();
1304 #ifdef ENABLE_SLOW_DCHECKS 1305
1305 // Check that this path is only taken if a surrogate pair is found 1306 // Check that this path is only taken if a surrogate pair is found
1306 assembler->Assert(assembler->Uint32GreaterThanOrEqual( 1307 CSA_SLOW_ASSERT(assembler, assembler->Uint32GreaterThanOrEqual(
1307 lead, assembler->Int32Constant(0xD800))); 1308 lead, assembler->Int32Constant(0xD800)));
1308 assembler->Assert( 1309 CSA_SLOW_ASSERT(assembler, assembler->Uint32LessThan(
1309 assembler->Uint32LessThan(lead, assembler->Int32Constant(0xDC00))); 1310 lead, assembler->Int32Constant(0xDC00)));
1310 assembler->Assert(assembler->Uint32GreaterThanOrEqual( 1311 CSA_SLOW_ASSERT(assembler, assembler->Uint32GreaterThanOrEqual(
1311 trail, assembler->Int32Constant(0xDC00))); 1312 trail, assembler->Int32Constant(0xDC00)));
1312 assembler->Assert( 1313 CSA_SLOW_ASSERT(assembler, assembler->Uint32LessThan(
1313 assembler->Uint32LessThan(trail, assembler->Int32Constant(0xE000))); 1314 trail, assembler->Int32Constant(0xE000)));
1314 #endif
1315 1315
1316 switch (encoding) { 1316 switch (encoding) {
1317 case UnicodeEncoding::UTF16: 1317 case UnicodeEncoding::UTF16:
1318 var_result.Bind(assembler->WordOr( 1318 var_result.Bind(assembler->WordOr(
1319 // Need to swap the order for big-endian platforms 1319 // Need to swap the order for big-endian platforms
1320 #if V8_TARGET_BIG_ENDIAN 1320 #if V8_TARGET_BIG_ENDIAN
1321 assembler->WordShl(lead, assembler->Int32Constant(16)), trail)); 1321 assembler->WordShl(lead, assembler->Int32Constant(16)), trail));
1322 #else 1322 #else
1323 assembler->WordShl(trail, assembler->Int32Constant(16)), lead)); 1323 assembler->WordShl(trail, assembler->Int32Constant(16)), lead));
1324 #endif 1324 #endif
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 Runtime::kThrowIncompatibleMethodReceiver, context, 1427 Runtime::kThrowIncompatibleMethodReceiver, context,
1428 assembler->HeapConstant(assembler->factory()->NewStringFromAsciiChecked( 1428 assembler->HeapConstant(assembler->factory()->NewStringFromAsciiChecked(
1429 "String Iterator.prototype.next", TENURED)), 1429 "String Iterator.prototype.next", TENURED)),
1430 iterator); 1430 iterator);
1431 assembler->Return(result); // Never reached. 1431 assembler->Return(result); // Never reached.
1432 } 1432 }
1433 } 1433 }
1434 1434
1435 } // namespace internal 1435 } // namespace internal
1436 } // namespace v8 1436 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins-regexp.cc ('k') | src/code-stub-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698