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

Side by Side Diff: src/objects.h

Issue 571903002: Reland "Remove V8_HOST_CAN_READ_UNALIGNED and its uses." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comment 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/deoptimizer.h ('k') | src/objects.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 #ifndef V8_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assert-scope.h" 9 #include "src/assert-scope.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 9154 matching lines...) Expand 10 before | Expand all | Expand 10 after
9165 int from, 9165 int from,
9166 int to); 9166 int to);
9167 9167
9168 // The return value may point to the first aligned word containing the first 9168 // The return value may point to the first aligned word containing the first
9169 // non-one-byte character, rather than directly to the non-one-byte character. 9169 // non-one-byte character, rather than directly to the non-one-byte character.
9170 // If the return value is >= the passed length, the entire string was 9170 // If the return value is >= the passed length, the entire string was
9171 // one-byte. 9171 // one-byte.
9172 static inline int NonAsciiStart(const char* chars, int length) { 9172 static inline int NonAsciiStart(const char* chars, int length) {
9173 const char* start = chars; 9173 const char* start = chars;
9174 const char* limit = chars + length; 9174 const char* limit = chars + length;
9175 #ifdef V8_HOST_CAN_READ_UNALIGNED 9175
9176 DCHECK(unibrow::Utf8::kMaxOneByteChar == 0x7F); 9176 if (length >= kIntptrSize) {
9177 const uintptr_t non_one_byte_mask = kUintptrAllBitsSet / 0xFF * 0x80; 9177 // Check unaligned bytes.
9178 while (chars + sizeof(uintptr_t) <= limit) { 9178 while (!IsAligned(reinterpret_cast<intptr_t>(chars), sizeof(uintptr_t))) {
9179 if (*reinterpret_cast<const uintptr_t*>(chars) & non_one_byte_mask) { 9179 if (static_cast<uint8_t>(*chars) > unibrow::Utf8::kMaxOneByteChar) {
9180 return static_cast<int>(chars - start); 9180 return static_cast<int>(chars - start);
9181 }
9182 ++chars;
9181 } 9183 }
9182 chars += sizeof(uintptr_t); 9184 // Check aligned words.
9185 DCHECK(unibrow::Utf8::kMaxOneByteChar == 0x7F);
9186 const uintptr_t non_one_byte_mask = kUintptrAllBitsSet / 0xFF * 0x80;
9187 while (chars + sizeof(uintptr_t) <= limit) {
9188 if (*reinterpret_cast<const uintptr_t*>(chars) & non_one_byte_mask) {
9189 return static_cast<int>(chars - start);
9190 }
9191 chars += sizeof(uintptr_t);
9192 }
9183 } 9193 }
9184 #endif 9194 // Check remaining unaligned bytes.
9185 while (chars < limit) { 9195 while (chars < limit) {
9186 if (static_cast<uint8_t>(*chars) > unibrow::Utf8::kMaxOneByteChar) { 9196 if (static_cast<uint8_t>(*chars) > unibrow::Utf8::kMaxOneByteChar) {
9187 return static_cast<int>(chars - start); 9197 return static_cast<int>(chars - start);
9188 } 9198 }
9189 ++chars; 9199 ++chars;
9190 } 9200 }
9201
9191 return static_cast<int>(chars - start); 9202 return static_cast<int>(chars - start);
9192 } 9203 }
9193 9204
9194 static inline bool IsAscii(const char* chars, int length) { 9205 static inline bool IsAscii(const char* chars, int length) {
9195 return NonAsciiStart(chars, length) >= length; 9206 return NonAsciiStart(chars, length) >= length;
9196 } 9207 }
9197 9208
9198 static inline bool IsAscii(const uint8_t* chars, int length) { 9209 static inline bool IsAscii(const uint8_t* chars, int length) {
9199 return 9210 return
9200 NonAsciiStart(reinterpret_cast<const char*>(chars), length) >= length; 9211 NonAsciiStart(reinterpret_cast<const char*>(chars), length) >= length;
(...skipping 1923 matching lines...) Expand 10 before | Expand all | Expand 10 after
11124 } else { 11135 } else {
11125 value &= ~(1 << bit_position); 11136 value &= ~(1 << bit_position);
11126 } 11137 }
11127 return value; 11138 return value;
11128 } 11139 }
11129 }; 11140 };
11130 11141
11131 } } // namespace v8::internal 11142 } } // namespace v8::internal
11132 11143
11133 #endif // V8_OBJECTS_H_ 11144 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/deoptimizer.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698