OLD | NEW |
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_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 2996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3007 } | 3007 } |
3008 | 3008 |
3009 | 3009 |
3010 // ------------------------------------------------------------------------- | 3010 // ------------------------------------------------------------------------- |
3011 // StringCharFromCodeGenerator | 3011 // StringCharFromCodeGenerator |
3012 | 3012 |
3013 void StringCharFromCodeGenerator::GenerateFast(MacroAssembler* masm) { | 3013 void StringCharFromCodeGenerator::GenerateFast(MacroAssembler* masm) { |
3014 // Fast case of Heap::LookupSingleCharacterStringFromCode. | 3014 // Fast case of Heap::LookupSingleCharacterStringFromCode. |
3015 STATIC_ASSERT(kSmiTag == 0); | 3015 STATIC_ASSERT(kSmiTag == 0); |
3016 STATIC_ASSERT(kSmiShiftSize == 0); | 3016 STATIC_ASSERT(kSmiShiftSize == 0); |
3017 DCHECK(base::bits::IsPowerOfTwo32(String::kMaxOneByteCharCodeU + 1)); | 3017 DCHECK(base::bits::IsPowerOfTwo32(String::kMaxOneByteCharCode + 1)); |
3018 __ tst(code_, Operand(kSmiTagMask | | 3018 __ tst(code_, |
3019 ((~String::kMaxOneByteCharCodeU) << kSmiTagSize))); | 3019 Operand(kSmiTagMask | |
| 3020 ((~String::kMaxOneByteCharCode) << kSmiTagSize))); |
3020 __ b(ne, &slow_case_); | 3021 __ b(ne, &slow_case_); |
3021 | 3022 |
3022 __ LoadRoot(result_, Heap::kSingleCharacterStringCacheRootIndex); | 3023 __ LoadRoot(result_, Heap::kSingleCharacterStringCacheRootIndex); |
3023 // At this point code register contains smi tagged one-byte char code. | 3024 // At this point code register contains smi tagged one-byte char code. |
3024 __ add(result_, result_, Operand::PointerOffsetFromSmiKey(code_)); | 3025 __ add(result_, result_, Operand::PointerOffsetFromSmiKey(code_)); |
3025 __ ldr(result_, FieldMemOperand(result_, FixedArray::kHeaderSize)); | 3026 __ ldr(result_, FieldMemOperand(result_, FixedArray::kHeaderSize)); |
3026 __ CompareRoot(result_, Heap::kUndefinedValueRootIndex); | 3027 __ CompareRoot(result_, Heap::kUndefinedValueRootIndex); |
3027 __ b(eq, &slow_case_); | 3028 __ b(eq, &slow_case_); |
3028 __ bind(&exit_); | 3029 __ bind(&exit_); |
3029 } | 3030 } |
(...skipping 2335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5365 MemOperand(fp, 6 * kPointerSize), NULL); | 5366 MemOperand(fp, 6 * kPointerSize), NULL); |
5366 } | 5367 } |
5367 | 5368 |
5368 | 5369 |
5369 #undef __ | 5370 #undef __ |
5370 | 5371 |
5371 } // namespace internal | 5372 } // namespace internal |
5372 } // namespace v8 | 5373 } // namespace v8 |
5373 | 5374 |
5374 #endif // V8_TARGET_ARCH_ARM | 5375 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |