OLD | NEW |
---|---|
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 4352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4363 #else | 4363 #else |
4364 #error Unknown byte ordering | 4364 #error Unknown byte ordering |
4365 #endif | 4365 #endif |
4366 | 4366 |
4367 static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize); | 4367 static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize); |
4368 | 4368 |
4369 typedef FixedBodyDescriptor<kNameOffset, | 4369 typedef FixedBodyDescriptor<kNameOffset, |
4370 kThisPropertyAssignmentsOffset + kPointerSize, | 4370 kThisPropertyAssignmentsOffset + kPointerSize, |
4371 kSize> BodyDescriptor; | 4371 kSize> BodyDescriptor; |
4372 | 4372 |
4373 private: | |
4374 // Bit positions in start_position_and_type. | 4373 // Bit positions in start_position_and_type. |
4375 // The source code start position is in the 30 most significant bits of | 4374 // The source code start position is in the 30 most significant bits of |
4376 // the start_position_and_type field. | 4375 // the start_position_and_type field. |
4377 static const int kIsExpressionBit = 0; | 4376 static const int kIsExpressionBit = 0; |
4378 static const int kIsTopLevelBit = 1; | 4377 static const int kIsTopLevelBit = 1; |
4379 static const int kStartPositionShift = 2; | 4378 static const int kStartPositionShift = 2; |
4380 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); | 4379 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); |
4381 | 4380 |
4382 // Bit positions in compiler_hints. | 4381 // Bit positions in compiler_hints. |
4383 static const int kHasOnlySimpleThisPropertyAssignments = 0; | 4382 static const int kHasOnlySimpleThisPropertyAssignments = 0; |
4384 static const int kTryFullCodegen = 1; | 4383 static const int kTryFullCodegen = 1; |
4385 static const int kAllowLazyCompilation = 2; | 4384 static const int kAllowLazyCompilation = 2; |
4386 static const int kLiveObjectsMayExist = 3; | 4385 static const int kLiveObjectsMayExist = 3; |
4387 static const int kCodeAgeShift = 4; | 4386 static const int kCodeAgeShift = 4; |
4388 static const int kCodeAgeMask = 0x7; | 4387 static const int kCodeAgeMask = 0x7; |
4389 static const int kOptimizationDisabled = 7; | 4388 static const int kOptimizationDisabled = 7; |
4390 static const int kStrictModeFunction = 8; | 4389 static const int kStrictModeFunction = 8; |
4391 | 4390 |
4391 private: | |
Martin Maly
2011/02/15 19:18:43
Turns out similar trick for byte-wide operations i
| |
4392 #if V8_HOST_ARCH_32_BIT | |
4393 // On 32 bit platforms, compiler hints is a smi. | |
4394 static const int kCompilerHintsSmiTagSize = kSmiTagSize; | |
4395 static const int kCompilerHintsSize = kPointerSize; | |
4396 #else | |
4397 // On 64 bit platforms, compiler hints is not a smi, see comment above. | |
4398 static const int kCompilerHintsSmiTagSize = 0; | |
4399 static const int kCompilerHintsSize = kIntSize; | |
4400 #endif | |
4401 | |
4402 public: | |
4403 // Constants for optimizing codegen for strict mode function tests. | |
4404 // Allows to use byte-widgh instructions. | |
4405 static const int kStrictModeBitWithinByte = | |
4406 (kStrictModeFunction + kCompilerHintsSmiTagSize) % kBitsPerByte; | |
4407 | |
4408 #if __BYTE_ORDER == __LITTLE_ENDIAN | |
4409 static const int kStrictModeByteOffset = kCompilerHintsOffset + | |
4410 (kStrictModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte; | |
4411 #elif __BYTE_ORDER == __BIG_ENDIAN | |
4412 static const int kStrictModeByteOffset = kCompilerHintsOffset + | |
4413 (kCompilerHintsSize - 1) - | |
4414 ((kStrictModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte); | |
4415 #else | |
4416 #error Unknown byte ordering | |
4417 #endif | |
4418 | |
4419 private: | |
4392 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); | 4420 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); |
4393 }; | 4421 }; |
4394 | 4422 |
4395 | 4423 |
4396 // JSFunction describes JavaScript functions. | 4424 // JSFunction describes JavaScript functions. |
4397 class JSFunction: public JSObject { | 4425 class JSFunction: public JSObject { |
4398 public: | 4426 public: |
4399 // [prototype_or_initial_map]: | 4427 // [prototype_or_initial_map]: |
4400 DECL_ACCESSORS(prototype_or_initial_map, Object) | 4428 DECL_ACCESSORS(prototype_or_initial_map, Object) |
4401 | 4429 |
(...skipping 2123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6525 } else { | 6553 } else { |
6526 value &= ~(1 << bit_position); | 6554 value &= ~(1 << bit_position); |
6527 } | 6555 } |
6528 return value; | 6556 return value; |
6529 } | 6557 } |
6530 }; | 6558 }; |
6531 | 6559 |
6532 } } // namespace v8::internal | 6560 } } // namespace v8::internal |
6533 | 6561 |
6534 #endif // V8_OBJECTS_H_ | 6562 #endif // V8_OBJECTS_H_ |
OLD | NEW |