| 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 #include "src/compiler/access-builder.h" | 5 #include "src/compiler/access-builder.h" |
| 6 | 6 |
| 7 #include "src/contexts.h" | 7 #include "src/contexts.h" |
| 8 #include "src/frames.h" | 8 #include "src/frames.h" |
| 9 #include "src/heap/heap.h" | 9 #include "src/heap/heap.h" |
| 10 #include "src/type-cache.h" | 10 #include "src/type-cache.h" |
| 11 #include "src/types-inl.h" | 11 #include "src/types-inl.h" |
| 12 | 12 |
| 13 namespace v8 { | 13 namespace v8 { |
| 14 namespace internal { | 14 namespace internal { |
| 15 namespace compiler { | 15 namespace compiler { |
| 16 | 16 |
| 17 // static | 17 // static |
| 18 FieldAccess AccessBuilder::ForMap() { | 18 FieldAccess AccessBuilder::ForMap() { |
| 19 FieldAccess access = {kTaggedBase, HeapObject::kMapOffset, | 19 FieldAccess access = {kTaggedBase, HeapObject::kMapOffset, |
| 20 MaybeHandle<Name>(), Type::Any(), kMachAnyTagged}; | 20 MaybeHandle<Name>(), Type::Any(), |
| 21 MachineType::AnyTagged()}; |
| 21 return access; | 22 return access; |
| 22 } | 23 } |
| 23 | 24 |
| 24 | 25 |
| 25 // static | 26 // static |
| 26 FieldAccess AccessBuilder::ForHeapNumberValue() { | 27 FieldAccess AccessBuilder::ForHeapNumberValue() { |
| 27 FieldAccess access = {kTaggedBase, HeapNumber::kValueOffset, | 28 FieldAccess access = {kTaggedBase, HeapNumber::kValueOffset, |
| 28 MaybeHandle<Name>(), TypeCache().Get().kFloat64, | 29 MaybeHandle<Name>(), TypeCache().Get().kFloat64, |
| 29 kMachFloat64}; | 30 MachineType::Float64()}; |
| 30 return access; | 31 return access; |
| 31 } | 32 } |
| 32 | 33 |
| 33 | 34 |
| 34 // static | 35 // static |
| 35 FieldAccess AccessBuilder::ForJSObjectProperties() { | 36 FieldAccess AccessBuilder::ForJSObjectProperties() { |
| 36 FieldAccess access = {kTaggedBase, JSObject::kPropertiesOffset, | 37 FieldAccess access = {kTaggedBase, JSObject::kPropertiesOffset, |
| 37 MaybeHandle<Name>(), Type::Internal(), kMachAnyTagged}; | 38 MaybeHandle<Name>(), Type::Internal(), |
| 39 MachineType::AnyTagged()}; |
| 38 return access; | 40 return access; |
| 39 } | 41 } |
| 40 | 42 |
| 41 | 43 |
| 42 // static | 44 // static |
| 43 FieldAccess AccessBuilder::ForJSObjectElements() { | 45 FieldAccess AccessBuilder::ForJSObjectElements() { |
| 44 FieldAccess access = {kTaggedBase, JSObject::kElementsOffset, | 46 FieldAccess access = {kTaggedBase, JSObject::kElementsOffset, |
| 45 MaybeHandle<Name>(), Type::Internal(), kMachAnyTagged}; | 47 MaybeHandle<Name>(), Type::Internal(), |
| 48 MachineType::AnyTagged()}; |
| 46 return access; | 49 return access; |
| 47 } | 50 } |
| 48 | 51 |
| 49 | 52 |
| 50 // static | 53 // static |
| 51 FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map, | 54 FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map, |
| 52 int index) { | 55 int index) { |
| 53 int const offset = map->GetInObjectPropertyOffset(index); | 56 int const offset = map->GetInObjectPropertyOffset(index); |
| 54 FieldAccess access = {kTaggedBase, offset, MaybeHandle<Name>(), | 57 FieldAccess access = {kTaggedBase, offset, MaybeHandle<Name>(), |
| 55 Type::Tagged(), kMachAnyTagged}; | 58 Type::Tagged(), MachineType::AnyTagged()}; |
| 56 return access; | 59 return access; |
| 57 } | 60 } |
| 58 | 61 |
| 59 | 62 |
| 60 // static | 63 // static |
| 61 FieldAccess AccessBuilder::ForJSFunctionContext() { | 64 FieldAccess AccessBuilder::ForJSFunctionContext() { |
| 62 FieldAccess access = {kTaggedBase, JSFunction::kContextOffset, | 65 FieldAccess access = {kTaggedBase, JSFunction::kContextOffset, |
| 63 MaybeHandle<Name>(), Type::Internal(), kMachAnyTagged}; | 66 MaybeHandle<Name>(), Type::Internal(), |
| 67 MachineType::AnyTagged()}; |
| 64 return access; | 68 return access; |
| 65 } | 69 } |
| 66 | 70 |
| 67 | 71 |
| 68 // static | 72 // static |
| 69 FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() { | 73 FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() { |
| 70 FieldAccess access = {kTaggedBase, JSFunction::kSharedFunctionInfoOffset, | 74 FieldAccess access = {kTaggedBase, JSFunction::kSharedFunctionInfoOffset, |
| 71 Handle<Name>(), Type::Any(), kMachAnyTagged}; | 75 Handle<Name>(), Type::Any(), MachineType::AnyTagged()}; |
| 72 return access; | 76 return access; |
| 73 } | 77 } |
| 74 | 78 |
| 75 | 79 |
| 76 // static | 80 // static |
| 77 FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) { | 81 FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) { |
| 78 TypeCache const& type_cache = TypeCache::Get(); | 82 TypeCache const& type_cache = TypeCache::Get(); |
| 79 FieldAccess access = {kTaggedBase, JSArray::kLengthOffset, Handle<Name>(), | 83 FieldAccess access = {kTaggedBase, JSArray::kLengthOffset, Handle<Name>(), |
| 80 type_cache.kJSArrayLengthType, kMachAnyTagged}; | 84 type_cache.kJSArrayLengthType, |
| 85 MachineType::AnyTagged()}; |
| 81 if (IsFastDoubleElementsKind(elements_kind)) { | 86 if (IsFastDoubleElementsKind(elements_kind)) { |
| 82 access.type = type_cache.kFixedDoubleArrayLengthType; | 87 access.type = type_cache.kFixedDoubleArrayLengthType; |
| 83 } else if (IsFastElementsKind(elements_kind)) { | 88 } else if (IsFastElementsKind(elements_kind)) { |
| 84 access.type = type_cache.kFixedArrayLengthType; | 89 access.type = type_cache.kFixedArrayLengthType; |
| 85 } | 90 } |
| 86 return access; | 91 return access; |
| 87 } | 92 } |
| 88 | 93 |
| 89 | 94 |
| 90 // static | 95 // static |
| 91 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { | 96 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { |
| 92 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBackingStoreOffset, | 97 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBackingStoreOffset, |
| 93 MaybeHandle<Name>(), Type::UntaggedPointer(), kMachPtr}; | 98 MaybeHandle<Name>(), Type::UntaggedPointer(), |
| 99 MachineType::Pointer()}; |
| 94 return access; | 100 return access; |
| 95 } | 101 } |
| 96 | 102 |
| 97 | 103 |
| 98 // static | 104 // static |
| 99 FieldAccess AccessBuilder::ForJSArrayBufferBitField() { | 105 FieldAccess AccessBuilder::ForJSArrayBufferBitField() { |
| 100 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset, | 106 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset, |
| 101 MaybeHandle<Name>(), TypeCache::Get().kInt8, kMachInt8}; | 107 MaybeHandle<Name>(), TypeCache::Get().kInt8, |
| 108 MachineType::Int8()}; |
| 102 return access; | 109 return access; |
| 103 } | 110 } |
| 104 | 111 |
| 105 | 112 |
| 106 // static | 113 // static |
| 107 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { | 114 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { |
| 108 FieldAccess access = {kTaggedBase, JSArrayBufferView::kBufferOffset, | 115 FieldAccess access = {kTaggedBase, JSArrayBufferView::kBufferOffset, |
| 109 MaybeHandle<Name>(), Type::TaggedPointer(), | 116 MaybeHandle<Name>(), Type::TaggedPointer(), |
| 110 kMachAnyTagged}; | 117 MachineType::AnyTagged()}; |
| 111 return access; | 118 return access; |
| 112 } | 119 } |
| 113 | 120 |
| 114 | 121 |
| 115 // static | 122 // static |
| 116 FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) { | 123 FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) { |
| 117 FieldAccess access = {kTaggedBase, | 124 FieldAccess access = { |
| 118 JSDate::kValueOffset + index * kPointerSize, | 125 kTaggedBase, JSDate::kValueOffset + index * kPointerSize, |
| 119 MaybeHandle<Name>(), Type::Number(), kMachAnyTagged}; | 126 MaybeHandle<Name>(), Type::Number(), MachineType::AnyTagged()}; |
| 120 return access; | 127 return access; |
| 121 } | 128 } |
| 122 | 129 |
| 123 | 130 |
| 124 // static | 131 // static |
| 125 FieldAccess AccessBuilder::ForFixedArrayLength() { | 132 FieldAccess AccessBuilder::ForFixedArrayLength() { |
| 126 FieldAccess access = {kTaggedBase, FixedArray::kLengthOffset, | 133 FieldAccess access = { |
| 127 MaybeHandle<Name>(), | 134 kTaggedBase, FixedArray::kLengthOffset, MaybeHandle<Name>(), |
| 128 TypeCache::Get().kFixedArrayLengthType, kMachAnyTagged}; | 135 TypeCache::Get().kFixedArrayLengthType, MachineType::AnyTagged()}; |
| 129 return access; | 136 return access; |
| 130 } | 137 } |
| 131 | 138 |
| 132 | 139 |
| 133 // static | 140 // static |
| 134 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { | 141 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { |
| 135 FieldAccess access = {kTaggedBase, DescriptorArray::kEnumCacheOffset, | 142 FieldAccess access = {kTaggedBase, DescriptorArray::kEnumCacheOffset, |
| 136 Handle<Name>(), Type::TaggedPointer(), kMachAnyTagged}; | 143 Handle<Name>(), Type::TaggedPointer(), |
| 144 MachineType::AnyTagged()}; |
| 137 return access; | 145 return access; |
| 138 } | 146 } |
| 139 | 147 |
| 140 | 148 |
| 141 // static | 149 // static |
| 142 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { | 150 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { |
| 143 FieldAccess access = {kTaggedBase, | 151 FieldAccess access = { |
| 144 DescriptorArray::kEnumCacheBridgeCacheOffset, | 152 kTaggedBase, DescriptorArray::kEnumCacheBridgeCacheOffset, Handle<Name>(), |
| 145 Handle<Name>(), Type::TaggedPointer(), kMachAnyTagged}; | 153 Type::TaggedPointer(), MachineType::AnyTagged()}; |
| 146 return access; | 154 return access; |
| 147 } | 155 } |
| 148 | 156 |
| 149 | 157 |
| 150 // static | 158 // static |
| 151 FieldAccess AccessBuilder::ForMapBitField3() { | 159 FieldAccess AccessBuilder::ForMapBitField3() { |
| 152 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, Handle<Name>(), | 160 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, Handle<Name>(), |
| 153 TypeCache::Get().kInt32, kMachInt32}; | 161 TypeCache::Get().kInt32, MachineType::Int32()}; |
| 154 return access; | 162 return access; |
| 155 } | 163 } |
| 156 | 164 |
| 157 | 165 |
| 158 // static | 166 // static |
| 159 FieldAccess AccessBuilder::ForMapDescriptors() { | 167 FieldAccess AccessBuilder::ForMapDescriptors() { |
| 160 FieldAccess access = {kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(), | 168 FieldAccess access = {kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(), |
| 161 Type::TaggedPointer(), kMachAnyTagged}; | 169 Type::TaggedPointer(), MachineType::AnyTagged()}; |
| 162 return access; | 170 return access; |
| 163 } | 171 } |
| 164 | 172 |
| 165 | 173 |
| 166 // static | 174 // static |
| 167 FieldAccess AccessBuilder::ForMapInstanceType() { | 175 FieldAccess AccessBuilder::ForMapInstanceType() { |
| 168 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(), | 176 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(), |
| 169 TypeCache::Get().kUint8, kMachUint8}; | 177 TypeCache::Get().kUint8, MachineType::Uint8()}; |
| 170 return access; | 178 return access; |
| 171 } | 179 } |
| 172 | 180 |
| 173 | 181 |
| 174 // static | 182 // static |
| 175 FieldAccess AccessBuilder::ForMapPrototype() { | 183 FieldAccess AccessBuilder::ForMapPrototype() { |
| 176 FieldAccess access = {kTaggedBase, Map::kPrototypeOffset, Handle<Name>(), | 184 FieldAccess access = {kTaggedBase, Map::kPrototypeOffset, Handle<Name>(), |
| 177 Type::TaggedPointer(), kMachAnyTagged}; | 185 Type::TaggedPointer(), MachineType::AnyTagged()}; |
| 178 return access; | 186 return access; |
| 179 } | 187 } |
| 180 | 188 |
| 181 | 189 |
| 182 // static | 190 // static |
| 183 FieldAccess AccessBuilder::ForStringLength() { | 191 FieldAccess AccessBuilder::ForStringLength() { |
| 184 FieldAccess access = {kTaggedBase, String::kLengthOffset, Handle<Name>(), | 192 FieldAccess access = {kTaggedBase, String::kLengthOffset, Handle<Name>(), |
| 185 TypeCache::Get().kStringLengthType, kMachAnyTagged}; | 193 TypeCache::Get().kStringLengthType, |
| 194 MachineType::AnyTagged()}; |
| 186 return access; | 195 return access; |
| 187 } | 196 } |
| 188 | 197 |
| 189 | 198 |
| 190 // static | 199 // static |
| 191 FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() { | 200 FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() { |
| 192 FieldAccess access = {kTaggedBase, JSGlobalObject::kGlobalProxyOffset, | 201 FieldAccess access = {kTaggedBase, JSGlobalObject::kGlobalProxyOffset, |
| 193 Handle<Name>(), Type::Receiver(), kMachAnyTagged}; | 202 Handle<Name>(), Type::Receiver(), |
| 203 MachineType::AnyTagged()}; |
| 194 return access; | 204 return access; |
| 195 } | 205 } |
| 196 | 206 |
| 197 | 207 |
| 198 // static | 208 // static |
| 199 FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() { | 209 FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() { |
| 200 FieldAccess access = {kTaggedBase, JSGlobalObject::kNativeContextOffset, | 210 FieldAccess access = {kTaggedBase, JSGlobalObject::kNativeContextOffset, |
| 201 Handle<Name>(), Type::Internal(), kMachAnyTagged}; | 211 Handle<Name>(), Type::Internal(), |
| 212 MachineType::AnyTagged()}; |
| 202 return access; | 213 return access; |
| 203 } | 214 } |
| 204 | 215 |
| 205 | 216 |
| 206 // static | 217 // static |
| 207 FieldAccess AccessBuilder::ForValue() { | 218 FieldAccess AccessBuilder::ForValue() { |
| 208 FieldAccess access = {kTaggedBase, JSValue::kValueOffset, Handle<Name>(), | 219 FieldAccess access = {kTaggedBase, JSValue::kValueOffset, Handle<Name>(), |
| 209 Type::Any(), kMachAnyTagged}; | 220 Type::Any(), MachineType::AnyTagged()}; |
| 210 return access; | 221 return access; |
| 211 } | 222 } |
| 212 | 223 |
| 213 | 224 |
| 214 // static | 225 // static |
| 215 FieldAccess AccessBuilder::ForArgumentsLength() { | 226 FieldAccess AccessBuilder::ForArgumentsLength() { |
| 216 int offset = | 227 int offset = |
| 217 JSObject::kHeaderSize + Heap::kArgumentsLengthIndex * kPointerSize; | 228 JSObject::kHeaderSize + Heap::kArgumentsLengthIndex * kPointerSize; |
| 218 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), | 229 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), |
| 219 kMachAnyTagged}; | 230 MachineType::AnyTagged()}; |
| 220 return access; | 231 return access; |
| 221 } | 232 } |
| 222 | 233 |
| 223 | 234 |
| 224 // static | 235 // static |
| 225 FieldAccess AccessBuilder::ForArgumentsCallee() { | 236 FieldAccess AccessBuilder::ForArgumentsCallee() { |
| 226 int offset = | 237 int offset = |
| 227 JSObject::kHeaderSize + Heap::kArgumentsCalleeIndex * kPointerSize; | 238 JSObject::kHeaderSize + Heap::kArgumentsCalleeIndex * kPointerSize; |
| 228 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), | 239 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), |
| 229 kMachAnyTagged}; | 240 MachineType::AnyTagged()}; |
| 230 return access; | 241 return access; |
| 231 } | 242 } |
| 232 | 243 |
| 233 | 244 |
| 234 // static | 245 // static |
| 235 FieldAccess AccessBuilder::ForFixedArraySlot(size_t index) { | 246 FieldAccess AccessBuilder::ForFixedArraySlot(size_t index) { |
| 236 int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index)); | 247 int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index)); |
| 237 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), | 248 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), |
| 238 kMachAnyTagged}; | 249 MachineType::AnyTagged()}; |
| 239 return access; | 250 return access; |
| 240 } | 251 } |
| 241 | 252 |
| 242 | 253 |
| 243 // static | 254 // static |
| 244 FieldAccess AccessBuilder::ForContextSlot(size_t index) { | 255 FieldAccess AccessBuilder::ForContextSlot(size_t index) { |
| 245 int offset = Context::kHeaderSize + static_cast<int>(index) * kPointerSize; | 256 int offset = Context::kHeaderSize + static_cast<int>(index) * kPointerSize; |
| 246 DCHECK_EQ(offset, | 257 DCHECK_EQ(offset, |
| 247 Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag); | 258 Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag); |
| 248 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), | 259 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(), |
| 249 kMachAnyTagged}; | 260 MachineType::AnyTagged()}; |
| 250 return access; | 261 return access; |
| 251 } | 262 } |
| 252 | 263 |
| 253 | 264 |
| 254 // static | 265 // static |
| 255 FieldAccess AccessBuilder::ForPropertyCellValue() { | 266 FieldAccess AccessBuilder::ForPropertyCellValue() { |
| 256 return ForPropertyCellValue(Type::Tagged()); | 267 return ForPropertyCellValue(Type::Tagged()); |
| 257 } | 268 } |
| 258 | 269 |
| 259 | 270 |
| 260 // static | 271 // static |
| 261 FieldAccess AccessBuilder::ForPropertyCellValue(Type* type) { | 272 FieldAccess AccessBuilder::ForPropertyCellValue(Type* type) { |
| 262 FieldAccess access = {kTaggedBase, PropertyCell::kValueOffset, Handle<Name>(), | 273 FieldAccess access = {kTaggedBase, PropertyCell::kValueOffset, Handle<Name>(), |
| 263 type, kMachAnyTagged}; | 274 type, MachineType::AnyTagged()}; |
| 264 return access; | 275 return access; |
| 265 } | 276 } |
| 266 | 277 |
| 267 | 278 |
| 268 // static | 279 // static |
| 269 FieldAccess AccessBuilder::ForSharedFunctionInfoTypeFeedbackVector() { | 280 FieldAccess AccessBuilder::ForSharedFunctionInfoTypeFeedbackVector() { |
| 270 FieldAccess access = {kTaggedBase, SharedFunctionInfo::kFeedbackVectorOffset, | 281 FieldAccess access = {kTaggedBase, SharedFunctionInfo::kFeedbackVectorOffset, |
| 271 Handle<Name>(), Type::Any(), kMachAnyTagged}; | 282 Handle<Name>(), Type::Any(), MachineType::AnyTagged()}; |
| 272 return access; | 283 return access; |
| 273 } | 284 } |
| 274 | 285 |
| 275 | 286 |
| 276 // static | 287 // static |
| 277 ElementAccess AccessBuilder::ForFixedArrayElement() { | 288 ElementAccess AccessBuilder::ForFixedArrayElement() { |
| 278 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Tagged(), | 289 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Tagged(), |
| 279 kMachAnyTagged}; | 290 MachineType::AnyTagged()}; |
| 280 return access; | 291 return access; |
| 281 } | 292 } |
| 282 | 293 |
| 283 | 294 |
| 284 // static | 295 // static |
| 285 ElementAccess AccessBuilder::ForFixedDoubleArrayElement() { | 296 ElementAccess AccessBuilder::ForFixedDoubleArrayElement() { |
| 286 ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize, | 297 ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize, |
| 287 TypeCache::Get().kFloat64, kMachFloat64}; | 298 TypeCache::Get().kFloat64, MachineType::Float64()}; |
| 288 return access; | 299 return access; |
| 289 } | 300 } |
| 290 | 301 |
| 291 | 302 |
| 292 // static | 303 // static |
| 293 ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type, | 304 ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type, |
| 294 bool is_external) { | 305 bool is_external) { |
| 295 BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase; | 306 BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase; |
| 296 int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset; | 307 int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset; |
| 297 switch (type) { | 308 switch (type) { |
| 298 case kExternalInt8Array: { | 309 case kExternalInt8Array: { |
| 299 ElementAccess access = {taggedness, header_size, Type::Signed32(), | 310 ElementAccess access = {taggedness, header_size, Type::Signed32(), |
| 300 kMachInt8}; | 311 MachineType::Int8()}; |
| 301 return access; | 312 return access; |
| 302 } | 313 } |
| 303 case kExternalUint8Array: | 314 case kExternalUint8Array: |
| 304 case kExternalUint8ClampedArray: { | 315 case kExternalUint8ClampedArray: { |
| 305 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), | 316 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), |
| 306 kMachUint8}; | 317 MachineType::Uint8()}; |
| 307 return access; | 318 return access; |
| 308 } | 319 } |
| 309 case kExternalInt16Array: { | 320 case kExternalInt16Array: { |
| 310 ElementAccess access = {taggedness, header_size, Type::Signed32(), | 321 ElementAccess access = {taggedness, header_size, Type::Signed32(), |
| 311 kMachInt16}; | 322 MachineType::Int16()}; |
| 312 return access; | 323 return access; |
| 313 } | 324 } |
| 314 case kExternalUint16Array: { | 325 case kExternalUint16Array: { |
| 315 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), | 326 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), |
| 316 kMachUint16}; | 327 MachineType::Uint16()}; |
| 317 return access; | 328 return access; |
| 318 } | 329 } |
| 319 case kExternalInt32Array: { | 330 case kExternalInt32Array: { |
| 320 ElementAccess access = {taggedness, header_size, Type::Signed32(), | 331 ElementAccess access = {taggedness, header_size, Type::Signed32(), |
| 321 kMachInt32}; | 332 MachineType::Int32()}; |
| 322 return access; | 333 return access; |
| 323 } | 334 } |
| 324 case kExternalUint32Array: { | 335 case kExternalUint32Array: { |
| 325 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), | 336 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), |
| 326 kMachUint32}; | 337 MachineType::Uint32()}; |
| 327 return access; | 338 return access; |
| 328 } | 339 } |
| 329 case kExternalFloat32Array: { | 340 case kExternalFloat32Array: { |
| 330 ElementAccess access = {taggedness, header_size, Type::Number(), | 341 ElementAccess access = {taggedness, header_size, Type::Number(), |
| 331 kMachFloat32}; | 342 MachineType::Float32()}; |
| 332 return access; | 343 return access; |
| 333 } | 344 } |
| 334 case kExternalFloat64Array: { | 345 case kExternalFloat64Array: { |
| 335 ElementAccess access = {taggedness, header_size, Type::Number(), | 346 ElementAccess access = {taggedness, header_size, Type::Number(), |
| 336 kMachFloat64}; | 347 MachineType::Float64()}; |
| 337 return access; | 348 return access; |
| 338 } | 349 } |
| 339 } | 350 } |
| 340 UNREACHABLE(); | 351 UNREACHABLE(); |
| 341 ElementAccess access = {kUntaggedBase, 0, Type::None(), kMachNone}; | 352 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None()}; |
| 342 return access; | 353 return access; |
| 343 } | 354 } |
| 344 | 355 |
| 345 | 356 |
| 346 // static | 357 // static |
| 347 FieldAccess AccessBuilder::ForStatsCounter() { | 358 FieldAccess AccessBuilder::ForStatsCounter() { |
| 348 FieldAccess access = {kUntaggedBase, 0, MaybeHandle<Name>(), | 359 FieldAccess access = {kUntaggedBase, 0, MaybeHandle<Name>(), |
| 349 TypeCache::Get().kInt32, kMachInt32}; | 360 TypeCache::Get().kInt32, MachineType::Int32()}; |
| 350 return access; | 361 return access; |
| 351 } | 362 } |
| 352 | 363 |
| 353 | 364 |
| 354 // static | 365 // static |
| 355 FieldAccess AccessBuilder::ForFrameCallerFramePtr() { | 366 FieldAccess AccessBuilder::ForFrameCallerFramePtr() { |
| 356 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kCallerFPOffset, | 367 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kCallerFPOffset, |
| 357 MaybeHandle<Name>(), Type::Internal(), kMachPtr}; | 368 MaybeHandle<Name>(), Type::Internal(), |
| 369 MachineType::Pointer()}; |
| 358 return access; | 370 return access; |
| 359 } | 371 } |
| 360 | 372 |
| 361 | 373 |
| 362 // static | 374 // static |
| 363 FieldAccess AccessBuilder::ForFrameMarker() { | 375 FieldAccess AccessBuilder::ForFrameMarker() { |
| 364 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kMarkerOffset, | 376 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kMarkerOffset, |
| 365 MaybeHandle<Name>(), Type::Tagged(), kMachAnyTagged}; | 377 MaybeHandle<Name>(), Type::Tagged(), |
| 378 MachineType::AnyTagged()}; |
| 366 return access; | 379 return access; |
| 367 } | 380 } |
| 368 | 381 |
| 369 } // namespace compiler | 382 } // namespace compiler |
| 370 } // namespace internal | 383 } // namespace internal |
| 371 } // namespace v8 | 384 } // namespace v8 |
| OLD | NEW |