| OLD | NEW | 
|---|
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_COMPILER_ACCESS_BUILDER_H_ | 5 #ifndef V8_COMPILER_ACCESS_BUILDER_H_ | 
| 6 #define V8_COMPILER_ACCESS_BUILDER_H_ | 6 #define V8_COMPILER_ACCESS_BUILDER_H_ | 
| 7 | 7 | 
| 8 #include "src/compiler/simplified-operator.h" | 8 #include "src/compiler/simplified-operator.h" | 
| 9 | 9 | 
| 10 namespace v8 { | 10 namespace v8 { | 
| 11 namespace internal { | 11 namespace internal { | 
| 12 namespace compiler { | 12 namespace compiler { | 
| 13 | 13 | 
| 14 // This access builder provides a set of static methods constructing commonly | 14 // This access builder provides a set of static methods constructing commonly | 
| 15 // used FieldAccess and ElementAccess descriptors. These descriptors server as | 15 // used FieldAccess and ElementAccess descriptors. These descriptors server as | 
| 16 // parameters to simplified load/store operators. | 16 // parameters to simplified load/store operators. | 
| 17 class AccessBuilder : public AllStatic { | 17 class AccessBuilder : public AllStatic { | 
| 18  public: | 18  public: | 
|  | 19   // Provides access to HeapObject::map() field. | 
|  | 20   static FieldAccess ForMap() { | 
|  | 21     return {kTaggedBase, HeapObject::kMapOffset, Handle<Name>(), Type::Any(), | 
|  | 22             kMachAnyTagged}; | 
|  | 23   } | 
|  | 24 | 
|  | 25   // Provides access to JSObject::properties() field. | 
|  | 26   static FieldAccess ForJSObjectProperties() { | 
|  | 27     return {kTaggedBase, JSObject::kPropertiesOffset, Handle<Name>(), | 
|  | 28             Type::Any(), kMachAnyTagged}; | 
|  | 29   } | 
|  | 30 | 
| 19   // Provides access to JSObject::elements() field. | 31   // Provides access to JSObject::elements() field. | 
| 20   static FieldAccess ForJSObjectElements() { | 32   static FieldAccess ForJSObjectElements() { | 
| 21     return {kTaggedBase, JSObject::kElementsOffset, Handle<Name>(), | 33     return {kTaggedBase, JSObject::kElementsOffset, Handle<Name>(), | 
| 22             Type::Internal(), kMachAnyTagged}; | 34             Type::Internal(), kMachAnyTagged}; | 
| 23   } | 35   } | 
| 24 | 36 | 
|  | 37   // Provides access to JSArrayBuffer::backing_store() field. | 
|  | 38   static FieldAccess ForJSArrayBufferBackingStore() { | 
|  | 39     return {kTaggedBase, JSArrayBuffer::kBackingStoreOffset, Handle<Name>(), | 
|  | 40             Type::UntaggedPtr(), kMachPtr}; | 
|  | 41   } | 
|  | 42 | 
| 25   // Provides access to ExternalArray::external_pointer() field. | 43   // Provides access to ExternalArray::external_pointer() field. | 
| 26   static FieldAccess ForExternalArrayPointer() { | 44   static FieldAccess ForExternalArrayPointer() { | 
| 27     return {kTaggedBase, ExternalArray::kExternalPointerOffset, Handle<Name>(), | 45     return {kTaggedBase, ExternalArray::kExternalPointerOffset, Handle<Name>(), | 
| 28             Type::UntaggedPtr(), kMachPtr}; | 46             Type::UntaggedPtr(), kMachPtr}; | 
| 29   } | 47   } | 
| 30 | 48 | 
|  | 49   // Provides access to FixedArray elements. | 
|  | 50   static ElementAccess ForFixedArrayElement() { | 
|  | 51     return {kTaggedBase, FixedArray::kHeaderSize, Type::Any(), kMachAnyTagged}; | 
|  | 52   } | 
|  | 53 | 
|  | 54   // TODO(mstarzinger): Raw access only for testing, drop me. | 
|  | 55   static ElementAccess ForBackingStoreElement(MachineType rep) { | 
|  | 56     return {kUntaggedBase, kNonHeapObjectHeaderSize - kHeapObjectTag, | 
|  | 57             Type::Any(), rep}; | 
|  | 58   } | 
|  | 59 | 
| 31   // Provides access to Fixed{type}TypedArray and External{type}Array elements. | 60   // Provides access to Fixed{type}TypedArray and External{type}Array elements. | 
| 32   static ElementAccess ForTypedArrayElement(ExternalArrayType type, | 61   static ElementAccess ForTypedArrayElement(ExternalArrayType type, | 
| 33                                             bool is_external) { | 62                                             bool is_external) { | 
| 34     BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase; | 63     BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase; | 
| 35     int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset; | 64     int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset; | 
| 36     switch (type) { | 65     switch (type) { | 
| 37       case kExternalInt8Array: | 66       case kExternalInt8Array: | 
| 38         return {taggedness, header_size, Type::Signed32(), kMachInt8}; | 67         return {taggedness, header_size, Type::Signed32(), kMachInt8}; | 
| 39       case kExternalUint8Array: | 68       case kExternalUint8Array: | 
| 40       case kExternalUint8ClampedArray: | 69       case kExternalUint8ClampedArray: | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 58 | 87 | 
| 59  private: | 88  private: | 
| 60   DISALLOW_COPY_AND_ASSIGN(AccessBuilder); | 89   DISALLOW_COPY_AND_ASSIGN(AccessBuilder); | 
| 61 }; | 90 }; | 
| 62 | 91 | 
| 63 }  // namespace compiler | 92 }  // namespace compiler | 
| 64 }  // namespace internal | 93 }  // namespace internal | 
| 65 }  // namespace v8 | 94 }  // namespace v8 | 
| 66 | 95 | 
| 67 #endif  // V8_COMPILER_ACCESS_BUILDER_H_ | 96 #endif  // V8_COMPILER_ACCESS_BUILDER_H_ | 
| OLD | NEW | 
|---|