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

Side by Side Diff: include/v8.h

Issue 21014003: Optionally use 31-bits SMI value for 64-bit system (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 4 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 5329 matching lines...) Expand 10 before | Expand all | Expand 10 after
5340 // CAUTION: The original code below: 5340 // CAUTION: The original code below:
5341 // bool result = ((value + 0x40000000) & 0x80000000) == 0; 5341 // bool result = ((value + 0x40000000) & 0x80000000) == 0;
5342 // may lead to incorrect results according to the C language spec, and 5342 // may lead to incorrect results according to the C language spec, and
5343 // in fact doesn't work correctly with gcc4.1.1 in some cases: The 5343 // in fact doesn't work correctly with gcc4.1.1 in some cases: The
5344 // compiler may produce undefined results in case of signed integer 5344 // compiler may produce undefined results in case of signed integer
5345 // overflow. The computation must be done w/ unsigned ints. 5345 // overflow. The computation must be done w/ unsigned ints.
5346 return static_cast<uintptr_t>(value + 0x40000000U) < 0x80000000U; 5346 return static_cast<uintptr_t>(value + 0x40000000U) < 0x80000000U;
5347 } 5347 }
5348 }; 5348 };
5349 5349
5350 #if !V8_USE_31_BITS_SMI_VALUE
danno 2013/07/29 13:02:23 I also see no reason to put the SmiTagging<8> defi
haitao.feng 2013/07/30 08:56:43 Done.
5350 // Smi constants for 64-bit systems. 5351 // Smi constants for 64-bit systems.
5351 template <> struct SmiTagging<8> { 5352 template <> struct SmiTagging<8> {
5352 static const int kSmiShiftSize = 31; 5353 static const int kSmiShiftSize = 31;
5353 static const int kSmiValueSize = 32; 5354 static const int kSmiValueSize = 32;
5354 V8_INLINE(static int SmiToInt(internal::Object* value)) { 5355 V8_INLINE(static int SmiToInt(internal::Object* value)) {
5355 int shift_bits = kSmiTagSize + kSmiShiftSize; 5356 int shift_bits = kSmiTagSize + kSmiShiftSize;
5356 // Shift down and throw away top 32 bits. 5357 // Shift down and throw away top 32 bits.
5357 return static_cast<int>(reinterpret_cast<intptr_t>(value) >> shift_bits); 5358 return static_cast<int>(reinterpret_cast<intptr_t>(value) >> shift_bits);
5358 } 5359 }
5359 V8_INLINE(static internal::Object* IntToSmi(int value)) { 5360 V8_INLINE(static internal::Object* IntToSmi(int value)) {
5360 return internal::IntToSmi<kSmiShiftSize>(value); 5361 return internal::IntToSmi<kSmiShiftSize>(value);
5361 } 5362 }
5362 V8_INLINE(static bool IsValidSmi(intptr_t value)) { 5363 V8_INLINE(static bool IsValidSmi(intptr_t value)) {
5363 // To be representable as a long smi, the value must be a 32-bit integer. 5364 // To be representable as a long smi, the value must be a 32-bit integer.
5364 return (value == static_cast<int32_t>(value)); 5365 return (value == static_cast<int32_t>(value));
5365 } 5366 }
5366 }; 5367 };
5367 5368
5368 typedef SmiTagging<kApiPointerSize> PlatformSmiTagging; 5369 typedef SmiTagging<kApiPointerSize> PlatformSmiTagging;
5370 #else
5371 typedef SmiTagging<4> PlatformSmiTagging;
5372 #endif
5373
5369 const int kSmiShiftSize = PlatformSmiTagging::kSmiShiftSize; 5374 const int kSmiShiftSize = PlatformSmiTagging::kSmiShiftSize;
5370 const int kSmiValueSize = PlatformSmiTagging::kSmiValueSize; 5375 const int kSmiValueSize = PlatformSmiTagging::kSmiValueSize;
5371 5376
5372 /** 5377 /**
5373 * This class exports constants and functionality from within v8 that 5378 * This class exports constants and functionality from within v8 that
5374 * is necessary to implement inline functions in the v8 api. Don't 5379 * is necessary to implement inline functions in the v8 api. Don't
5375 * depend on functions and constants defined here. 5380 * depend on functions and constants defined here.
5376 */ 5381 */
5377 class Internals { 5382 class Internals {
5378 public: 5383 public:
(...skipping 1102 matching lines...) Expand 10 before | Expand all | Expand 10 after
6481 6486
6482 6487
6483 } // namespace v8 6488 } // namespace v8
6484 6489
6485 6490
6486 #undef V8EXPORT 6491 #undef V8EXPORT
6487 #undef TYPE_CHECK 6492 #undef TYPE_CHECK
6488 6493
6489 6494
6490 #endif // V8_H_ 6495 #endif // V8_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698