OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "src/compiler/access-builder.h" |
| 6 #include "src/types-inl.h" |
| 7 |
| 8 namespace v8 { |
| 9 namespace internal { |
| 10 namespace compiler { |
| 11 |
| 12 // static |
| 13 FieldAccess AccessBuilder::ForMap() { |
| 14 return {kTaggedBase, HeapObject::kMapOffset, Handle<Name>(), Type::Any(), |
| 15 kMachAnyTagged}; |
| 16 } |
| 17 |
| 18 |
| 19 // static |
| 20 FieldAccess AccessBuilder::ForJSObjectProperties() { |
| 21 return {kTaggedBase, JSObject::kPropertiesOffset, Handle<Name>(), Type::Any(), |
| 22 kMachAnyTagged}; |
| 23 } |
| 24 |
| 25 |
| 26 // static |
| 27 FieldAccess AccessBuilder::ForJSObjectElements() { |
| 28 return {kTaggedBase, JSObject::kElementsOffset, Handle<Name>(), |
| 29 Type::Internal(), kMachAnyTagged}; |
| 30 } |
| 31 |
| 32 |
| 33 // static |
| 34 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { |
| 35 return {kTaggedBase, JSArrayBuffer::kBackingStoreOffset, Handle<Name>(), |
| 36 Type::UntaggedPtr(), kMachPtr}; |
| 37 } |
| 38 |
| 39 |
| 40 // static |
| 41 FieldAccess AccessBuilder::ForExternalArrayPointer() { |
| 42 return {kTaggedBase, ExternalArray::kExternalPointerOffset, Handle<Name>(), |
| 43 Type::UntaggedPtr(), kMachPtr}; |
| 44 } |
| 45 |
| 46 |
| 47 // static |
| 48 ElementAccess AccessBuilder::ForFixedArrayElement() { |
| 49 return {kTaggedBase, FixedArray::kHeaderSize, Type::Any(), kMachAnyTagged}; |
| 50 } |
| 51 |
| 52 |
| 53 // static |
| 54 ElementAccess AccessBuilder::ForBackingStoreElement(MachineType rep) { |
| 55 return {kUntaggedBase, kNonHeapObjectHeaderSize - kHeapObjectTag, Type::Any(), |
| 56 rep}; |
| 57 } |
| 58 |
| 59 |
| 60 // static |
| 61 ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type, |
| 62 bool is_external) { |
| 63 BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase; |
| 64 int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset; |
| 65 switch (type) { |
| 66 case kExternalInt8Array: |
| 67 return {taggedness, header_size, Type::Signed32(), kMachInt8}; |
| 68 case kExternalUint8Array: |
| 69 case kExternalUint8ClampedArray: |
| 70 return {taggedness, header_size, Type::Unsigned32(), kMachUint8}; |
| 71 case kExternalInt16Array: |
| 72 return {taggedness, header_size, Type::Signed32(), kMachInt16}; |
| 73 case kExternalUint16Array: |
| 74 return {taggedness, header_size, Type::Unsigned32(), kMachUint16}; |
| 75 case kExternalInt32Array: |
| 76 return {taggedness, header_size, Type::Signed32(), kMachInt32}; |
| 77 case kExternalUint32Array: |
| 78 return {taggedness, header_size, Type::Unsigned32(), kMachUint32}; |
| 79 case kExternalFloat32Array: |
| 80 return {taggedness, header_size, Type::Number(), kRepFloat32}; |
| 81 case kExternalFloat64Array: |
| 82 return {taggedness, header_size, Type::Number(), kRepFloat64}; |
| 83 } |
| 84 UNREACHABLE(); |
| 85 return {kUntaggedBase, 0, Type::None(), kMachNone}; |
| 86 } |
| 87 |
| 88 } // namespace compiler |
| 89 } // namespace internal |
| 90 } // namespace v8 |
OLD | NEW |