V8 Project
access-builder.cc
Go to the documentation of this file.
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 
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(),
16 }
17 
18 
19 // static
20 FieldAccess AccessBuilder::ForJSObjectProperties() {
21  return {kTaggedBase, JSObject::kPropertiesOffset, Handle<Name>(), Type::Any(),
23 }
24 
25 
26 // static
27 FieldAccess AccessBuilder::ForJSObjectElements() {
29  Type::Internal(), kMachAnyTagged};
30 }
31 
32 
33 // static
34 FieldAccess AccessBuilder::ForJSFunctionContext() {
36  Type::Internal(), kMachAnyTagged};
37 }
38 
39 
40 // static
41 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() {
43  Type::UntaggedPtr(), kMachPtr};
44 }
45 
46 
47 // static
48 FieldAccess AccessBuilder::ForExternalArrayPointer() {
50  Type::UntaggedPtr(), kMachPtr};
51 }
52 
53 
54 // static
55 ElementAccess AccessBuilder::ForFixedArrayElement() {
56  return {kTaggedBase, FixedArray::kHeaderSize, Type::Any(), kMachAnyTagged};
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};
70  return {taggedness, header_size, Type::Unsigned32(), kMachUint8};
72  return {taggedness, header_size, Type::Signed32(), kMachInt16};
74  return {taggedness, header_size, Type::Unsigned32(), kMachUint16};
76  return {taggedness, header_size, Type::Signed32(), kMachInt32};
78  return {taggedness, header_size, Type::Unsigned32(), kMachUint32};
80  return {taggedness, header_size, Type::Number(), kRepFloat32};
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
static const int kExternalPointerOffset
Definition: objects.h:4471
static const int kHeaderSize
Definition: objects.h:2393
static const int kDataOffset
Definition: objects.h:4716
static const int kMapOffset
Definition: objects.h:1427
static const int kBackingStoreOffset
Definition: objects.h:9876
static const int kContextOffset
Definition: objects.h:7381
static const int kPropertiesOffset
Definition: objects.h:2193
static const int kElementsOffset
Definition: objects.h:2194
#define UNREACHABLE()
Definition: logging.h:30
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20
@ None
Definition: v8.h:2211
ExternalArrayType
Definition: v8.h:2217
@ kExternalFloat32Array
Definition: v8.h:2224
@ kExternalInt32Array
Definition: v8.h:2222
@ kExternalUint32Array
Definition: v8.h:2223
@ kExternalUint16Array
Definition: v8.h:2221
@ kExternalInt8Array
Definition: v8.h:2218
@ kExternalUint8Array
Definition: v8.h:2219
@ kExternalInt16Array
Definition: v8.h:2220
@ kExternalUint8ClampedArray
Definition: v8.h:2226
@ kExternalFloat64Array
Definition: v8.h:2225