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

Side by Side Diff: src/arm/code-stubs-arm.cc

Issue 9231017: Recursion limit for one-char string replace and retire String::kMinNonFlatLength. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 11 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/heap.cc » ('j') | src/runtime.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 6250 matching lines...) Expand 10 before | Expand all | Expand 10 after
6261 // in a little endian mode) 6261 // in a little endian mode)
6262 __ mov(r6, Operand(2)); 6262 __ mov(r6, Operand(2));
6263 __ AllocateAsciiString(r0, r6, r4, r5, r9, &call_runtime); 6263 __ AllocateAsciiString(r0, r6, r4, r5, r9, &call_runtime);
6264 __ strh(r2, FieldMemOperand(r0, SeqAsciiString::kHeaderSize)); 6264 __ strh(r2, FieldMemOperand(r0, SeqAsciiString::kHeaderSize));
6265 __ IncrementCounter(counters->string_add_native(), 1, r2, r3); 6265 __ IncrementCounter(counters->string_add_native(), 1, r2, r3);
6266 __ add(sp, sp, Operand(2 * kPointerSize)); 6266 __ add(sp, sp, Operand(2 * kPointerSize));
6267 __ Ret(); 6267 __ Ret();
6268 6268
6269 __ bind(&longer_than_two); 6269 __ bind(&longer_than_two);
6270 // Check if resulting string will be flat. 6270 // Check if resulting string will be flat.
6271 __ cmp(r6, Operand(String::kMinNonFlatLength)); 6271 __ cmp(r6, Operand(ConsString::kMinLength));
6272 __ b(lt, &string_add_flat_result); 6272 __ b(lt, &string_add_flat_result);
6273 // Handle exceptionally long strings in the runtime system. 6273 // Handle exceptionally long strings in the runtime system.
6274 STATIC_ASSERT((String::kMaxLength & 0x80000000) == 0); 6274 STATIC_ASSERT((String::kMaxLength & 0x80000000) == 0);
6275 ASSERT(IsPowerOf2(String::kMaxLength + 1)); 6275 ASSERT(IsPowerOf2(String::kMaxLength + 1));
6276 // kMaxLength + 1 is representable as shifted literal, kMaxLength is not. 6276 // kMaxLength + 1 is representable as shifted literal, kMaxLength is not.
6277 __ cmp(r6, Operand(String::kMaxLength + 1)); 6277 __ cmp(r6, Operand(String::kMaxLength + 1));
6278 __ b(hs, &call_runtime); 6278 __ b(hs, &call_runtime);
6279 6279
6280 // If result is not supposed to be flat, allocate a cons string object. 6280 // If result is not supposed to be flat, allocate a cons string object.
6281 // If both strings are ASCII the result is an ASCII cons string. 6281 // If both strings are ASCII the result is an ASCII cons string.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6315 STATIC_ASSERT(kAsciiStringTag != 0 && kAsciiDataHintTag != 0); 6315 STATIC_ASSERT(kAsciiStringTag != 0 && kAsciiDataHintTag != 0);
6316 __ and_(r4, r4, Operand(kAsciiStringTag | kAsciiDataHintTag)); 6316 __ and_(r4, r4, Operand(kAsciiStringTag | kAsciiDataHintTag));
6317 __ cmp(r4, Operand(kAsciiStringTag | kAsciiDataHintTag)); 6317 __ cmp(r4, Operand(kAsciiStringTag | kAsciiDataHintTag));
6318 __ b(eq, &ascii_data); 6318 __ b(eq, &ascii_data);
6319 6319
6320 // Allocate a two byte cons string. 6320 // Allocate a two byte cons string.
6321 __ AllocateTwoByteConsString(r7, r6, r4, r5, &call_runtime); 6321 __ AllocateTwoByteConsString(r7, r6, r4, r5, &call_runtime);
6322 __ jmp(&allocated); 6322 __ jmp(&allocated);
6323 6323
6324 // We cannot encounter sliced strings or cons strings here since: 6324 // We cannot encounter sliced strings or cons strings here since:
6325 STATIC_ASSERT(SlicedString::kMinLength >= String::kMinNonFlatLength); 6325 STATIC_ASSERT(SlicedString::kMinLength >= ConsString::kMinLength);
6326 // Handle creating a flat result from either external or sequential strings. 6326 // Handle creating a flat result from either external or sequential strings.
6327 // Locate the first characters' locations. 6327 // Locate the first characters' locations.
6328 // r0: first string 6328 // r0: first string
6329 // r1: second string 6329 // r1: second string
6330 // r2: length of first string 6330 // r2: length of first string
6331 // r3: length of second string 6331 // r3: length of second string
6332 // r4: first string instance type (if flags_ == NO_STRING_ADD_FLAGS) 6332 // r4: first string instance type (if flags_ == NO_STRING_ADD_FLAGS)
6333 // r5: second string instance type (if flags_ == NO_STRING_ADD_FLAGS) 6333 // r5: second string instance type (if flags_ == NO_STRING_ADD_FLAGS)
6334 // r6: sum of lengths. 6334 // r6: sum of lengths.
6335 Label first_prepared, second_prepared; 6335 Label first_prepared, second_prepared;
(...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after
7314 __ StoreNumberToDoubleElements(r0, r3, r1, r5, r6, r7, r9, r10, 7314 __ StoreNumberToDoubleElements(r0, r3, r1, r5, r6, r7, r9, r10,
7315 &slow_elements); 7315 &slow_elements);
7316 __ Ret(); 7316 __ Ret();
7317 } 7317 }
7318 7318
7319 #undef __ 7319 #undef __
7320 7320
7321 } } // namespace v8::internal 7321 } } // namespace v8::internal
7322 7322
7323 #endif // V8_TARGET_ARCH_ARM 7323 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/heap.cc » ('j') | src/runtime.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698