blob: 0eac1097d34a8796b7677336634087d8d4f2ee89 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00006
7#include "src/contexts.h"
8#include "src/frames.h"
Ben Murdoch097c5b22016-05-18 11:27:45 +01009#include "src/handles-inl.h"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000010#include "src/heap/heap.h"
11#include "src/type-cache.h"
Ben Murdochb8a8cc12014-11-26 15:28:44 +000012
13namespace v8 {
14namespace internal {
15namespace compiler {
16
17// static
18FieldAccess AccessBuilder::ForMap() {
Ben Murdochc5610432016-08-08 18:44:38 +010019 FieldAccess access = {
20 kTaggedBase, HeapObject::kMapOffset, MaybeHandle<Name>(),
21 Type::Any(), MachineType::AnyTagged(), kMapWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000022 return access;
23}
24
25
26// static
27FieldAccess AccessBuilder::ForHeapNumberValue() {
Ben Murdochc5610432016-08-08 18:44:38 +010028 FieldAccess access = {kTaggedBase,
29 HeapNumber::kValueOffset,
30 MaybeHandle<Name>(),
31 TypeCache::Get().kFloat64,
32 MachineType::Float64(),
33 kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000034 return access;
Ben Murdochb8a8cc12014-11-26 15:28:44 +000035}
36
37
38// static
39FieldAccess AccessBuilder::ForJSObjectProperties() {
Ben Murdochc5610432016-08-08 18:44:38 +010040 FieldAccess access = {
41 kTaggedBase, JSObject::kPropertiesOffset, MaybeHandle<Name>(),
42 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000043 return access;
Ben Murdochb8a8cc12014-11-26 15:28:44 +000044}
45
46
47// static
48FieldAccess AccessBuilder::ForJSObjectElements() {
Ben Murdochc5610432016-08-08 18:44:38 +010049 FieldAccess access = {
50 kTaggedBase, JSObject::kElementsOffset, MaybeHandle<Name>(),
51 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000052 return access;
53}
54
55
56// static
57FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map,
58 int index) {
59 int const offset = map->GetInObjectPropertyOffset(index);
Ben Murdochc5610432016-08-08 18:44:38 +010060 FieldAccess access = {kTaggedBase,
61 offset,
62 MaybeHandle<Name>(),
63 Type::Tagged(),
64 MachineType::AnyTagged(),
65 kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000066 return access;
Ben Murdochb8a8cc12014-11-26 15:28:44 +000067}
68
69
70// static
Ben Murdochc5610432016-08-08 18:44:38 +010071FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() {
72 FieldAccess access = {kTaggedBase,
73 JSFunction::kPrototypeOrInitialMapOffset,
74 MaybeHandle<Name>(),
75 Type::Any(),
76 MachineType::AnyTagged(),
77 kFullWriteBarrier};
78 return access;
79}
80
81// static
Ben Murdochb8a8cc12014-11-26 15:28:44 +000082FieldAccess AccessBuilder::ForJSFunctionContext() {
Ben Murdochc5610432016-08-08 18:44:38 +010083 FieldAccess access = {
84 kTaggedBase, JSFunction::kContextOffset, MaybeHandle<Name>(),
85 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000086 return access;
87}
88
89
90// static
91FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() {
Ben Murdochc5610432016-08-08 18:44:38 +010092 FieldAccess access = {kTaggedBase,
93 JSFunction::kSharedFunctionInfoOffset,
94 Handle<Name>(),
95 Type::Any(),
96 MachineType::AnyTagged(),
97 kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000098 return access;
99}
100
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000101// static
Ben Murdochc5610432016-08-08 18:44:38 +0100102FieldAccess AccessBuilder::ForJSFunctionLiterals() {
103 FieldAccess access = {
104 kTaggedBase, JSFunction::kLiteralsOffset, Handle<Name>(),
105 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier};
106 return access;
107}
108
109// static
110FieldAccess AccessBuilder::ForJSFunctionCodeEntry() {
111 FieldAccess access = {kTaggedBase,
112 JSFunction::kCodeEntryOffset,
113 Handle<Name>(),
114 Type::UntaggedPointer(),
115 MachineType::Pointer(),
116 kNoWriteBarrier};
117 return access;
118}
119
120// static
121FieldAccess AccessBuilder::ForJSFunctionNextFunctionLink() {
122 FieldAccess access = {kTaggedBase,
123 JSFunction::kNextFunctionLinkOffset,
124 Handle<Name>(),
125 Type::Any(),
126 MachineType::AnyTagged(),
127 kPointerWriteBarrier};
128 return access;
129}
130
131// static
Ben Murdoch61f157c2016-09-16 13:49:30 +0100132FieldAccess AccessBuilder::ForJSGeneratorObjectContext() {
133 FieldAccess access = {kTaggedBase,
134 JSGeneratorObject::kContextOffset,
135 Handle<Name>(),
136 Type::Internal(),
137 MachineType::AnyTagged(),
138 kPointerWriteBarrier};
139 return access;
140}
141
142// static
143FieldAccess AccessBuilder::ForJSGeneratorObjectContinuation() {
144 TypeCache const& type_cache = TypeCache::Get();
145 FieldAccess access = {kTaggedBase,
146 JSGeneratorObject::kContinuationOffset,
147 Handle<Name>(),
148 type_cache.kSmi,
149 MachineType::AnyTagged(),
150 kNoWriteBarrier};
151 return access;
152}
153
154// static
155FieldAccess AccessBuilder::ForJSGeneratorObjectInputOrDebugPos() {
156 FieldAccess access = {kTaggedBase,
157 JSGeneratorObject::kInputOrDebugPosOffset,
158 Handle<Name>(),
159 Type::Any(),
160 MachineType::AnyTagged(),
161 kFullWriteBarrier};
162 return access;
163}
164
165// static
166FieldAccess AccessBuilder::ForJSGeneratorObjectOperandStack() {
167 FieldAccess access = {kTaggedBase,
168 JSGeneratorObject::kOperandStackOffset,
169 Handle<Name>(),
170 Type::Internal(),
171 MachineType::AnyTagged(),
172 kPointerWriteBarrier};
173 return access;
174}
175
176// static
177FieldAccess AccessBuilder::ForJSGeneratorObjectResumeMode() {
178 TypeCache const& type_cache = TypeCache::Get();
179 FieldAccess access = {kTaggedBase,
180 JSGeneratorObject::kResumeModeOffset,
181 Handle<Name>(),
182 type_cache.kSmi,
183 MachineType::AnyTagged(),
184 kNoWriteBarrier};
185 return access;
186}
187
188// static
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000189FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) {
190 TypeCache const& type_cache = TypeCache::Get();
Ben Murdochc5610432016-08-08 18:44:38 +0100191 FieldAccess access = {kTaggedBase,
192 JSArray::kLengthOffset,
193 Handle<Name>(),
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000194 type_cache.kJSArrayLengthType,
Ben Murdochc5610432016-08-08 18:44:38 +0100195 MachineType::AnyTagged(),
196 kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000197 if (IsFastDoubleElementsKind(elements_kind)) {
198 access.type = type_cache.kFixedDoubleArrayLengthType;
Ben Murdochc5610432016-08-08 18:44:38 +0100199 access.write_barrier_kind = kNoWriteBarrier;
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000200 } else if (IsFastElementsKind(elements_kind)) {
201 access.type = type_cache.kFixedArrayLengthType;
Ben Murdochc5610432016-08-08 18:44:38 +0100202 access.write_barrier_kind = kNoWriteBarrier;
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000203 }
204 return access;
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000205}
206
207
208// static
209FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() {
Ben Murdochc5610432016-08-08 18:44:38 +0100210 FieldAccess access = {kTaggedBase,
211 JSArrayBuffer::kBackingStoreOffset,
212 MaybeHandle<Name>(),
213 Type::UntaggedPointer(),
214 MachineType::Pointer(),
215 kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000216 return access;
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000217}
218
219
220// static
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000221FieldAccess AccessBuilder::ForJSArrayBufferBitField() {
Ben Murdochc5610432016-08-08 18:44:38 +0100222 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset,
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000223 MaybeHandle<Name>(), TypeCache::Get().kInt8,
Ben Murdochc5610432016-08-08 18:44:38 +0100224 MachineType::Int8(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000225 return access;
226}
227
228
229// static
230FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() {
Ben Murdochc5610432016-08-08 18:44:38 +0100231 FieldAccess access = {kTaggedBase,
232 JSArrayBufferView::kBufferOffset,
233 MaybeHandle<Name>(),
234 Type::TaggedPointer(),
235 MachineType::AnyTagged(),
236 kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000237 return access;
238}
239
240
241// static
242FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) {
Ben Murdochc5610432016-08-08 18:44:38 +0100243 FieldAccess access = {kTaggedBase,
244 JSDate::kValueOffset + index * kPointerSize,
245 MaybeHandle<Name>(),
246 Type::Number(),
247 MachineType::AnyTagged(),
248 kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000249 return access;
250}
251
252
253// static
254FieldAccess AccessBuilder::ForJSIteratorResultDone() {
Ben Murdochc5610432016-08-08 18:44:38 +0100255 FieldAccess access = {
256 kTaggedBase, JSIteratorResult::kDoneOffset, MaybeHandle<Name>(),
257 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000258 return access;
259}
260
261
262// static
263FieldAccess AccessBuilder::ForJSIteratorResultValue() {
Ben Murdochc5610432016-08-08 18:44:38 +0100264 FieldAccess access = {
265 kTaggedBase, JSIteratorResult::kValueOffset, MaybeHandle<Name>(),
266 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000267 return access;
268}
269
270
271// static
272FieldAccess AccessBuilder::ForJSRegExpFlags() {
Ben Murdochc5610432016-08-08 18:44:38 +0100273 FieldAccess access = {
274 kTaggedBase, JSRegExp::kFlagsOffset, MaybeHandle<Name>(),
275 Type::Tagged(), MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000276 return access;
277}
278
279
280// static
281FieldAccess AccessBuilder::ForJSRegExpSource() {
Ben Murdochc5610432016-08-08 18:44:38 +0100282 FieldAccess access = {
283 kTaggedBase, JSRegExp::kSourceOffset, MaybeHandle<Name>(),
284 Type::Tagged(), MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000285 return access;
286}
287
288
289// static
290FieldAccess AccessBuilder::ForFixedArrayLength() {
Ben Murdochc5610432016-08-08 18:44:38 +0100291 FieldAccess access = {kTaggedBase,
292 FixedArray::kLengthOffset,
293 MaybeHandle<Name>(),
294 TypeCache::Get().kFixedArrayLengthType,
295 MachineType::AnyTagged(),
296 kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000297 return access;
298}
299
300
301// static
302FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() {
Ben Murdochc5610432016-08-08 18:44:38 +0100303 FieldAccess access = {kTaggedBase,
304 DescriptorArray::kEnumCacheOffset,
305 Handle<Name>(),
306 Type::TaggedPointer(),
307 MachineType::AnyTagged(),
308 kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000309 return access;
310}
311
312
313// static
314FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() {
Ben Murdochc5610432016-08-08 18:44:38 +0100315 FieldAccess access = {kTaggedBase,
316 DescriptorArray::kEnumCacheBridgeCacheOffset,
317 Handle<Name>(),
318 Type::TaggedPointer(),
319 MachineType::AnyTagged(),
320 kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000321 return access;
322}
323
324
325// static
326FieldAccess AccessBuilder::ForMapBitField() {
Ben Murdochc5610432016-08-08 18:44:38 +0100327 FieldAccess access = {kTaggedBase, Map::kBitFieldOffset,
328 Handle<Name>(), TypeCache::Get().kUint8,
329 MachineType::Uint8(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000330 return access;
331}
332
333
334// static
335FieldAccess AccessBuilder::ForMapBitField3() {
Ben Murdochc5610432016-08-08 18:44:38 +0100336 FieldAccess access = {kTaggedBase, Map::kBitField3Offset,
337 Handle<Name>(), TypeCache::Get().kInt32,
338 MachineType::Int32(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000339 return access;
340}
341
342
343// static
344FieldAccess AccessBuilder::ForMapDescriptors() {
Ben Murdochc5610432016-08-08 18:44:38 +0100345 FieldAccess access = {
346 kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(),
347 Type::TaggedPointer(), MachineType::AnyTagged(), kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000348 return access;
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400349}
350
351
352// static
353FieldAccess AccessBuilder::ForMapInstanceType() {
Ben Murdochc5610432016-08-08 18:44:38 +0100354 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset,
355 Handle<Name>(), TypeCache::Get().kUint8,
356 MachineType::Uint8(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000357 return access;
358}
359
360
361// static
362FieldAccess AccessBuilder::ForMapPrototype() {
Ben Murdochc5610432016-08-08 18:44:38 +0100363 FieldAccess access = {
364 kTaggedBase, Map::kPrototypeOffset, Handle<Name>(),
365 Type::TaggedPointer(), MachineType::AnyTagged(), kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000366 return access;
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400367}
368
369
370// static
Ben Murdoch61f157c2016-09-16 13:49:30 +0100371FieldAccess AccessBuilder::ForNameHashField() {
372 FieldAccess access = {kTaggedBase, Name::kHashFieldOffset,
373 Handle<Name>(), Type::Internal(),
374 MachineType::Uint32(), kNoWriteBarrier};
375 return access;
376}
377
378// static
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400379FieldAccess AccessBuilder::ForStringLength() {
Ben Murdochc5610432016-08-08 18:44:38 +0100380 FieldAccess access = {kTaggedBase,
381 String::kLengthOffset,
382 Handle<Name>(),
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000383 TypeCache::Get().kStringLengthType,
Ben Murdochc5610432016-08-08 18:44:38 +0100384 MachineType::AnyTagged(),
385 kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000386 return access;
387}
388
389
390// static
391FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() {
Ben Murdochc5610432016-08-08 18:44:38 +0100392 FieldAccess access = {kTaggedBase,
393 JSGlobalObject::kGlobalProxyOffset,
394 Handle<Name>(),
395 Type::Receiver(),
396 MachineType::AnyTagged(),
397 kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000398 return access;
399}
400
401
402// static
403FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() {
Ben Murdochc5610432016-08-08 18:44:38 +0100404 FieldAccess access = {kTaggedBase,
405 JSGlobalObject::kNativeContextOffset,
406 Handle<Name>(),
407 Type::Internal(),
408 MachineType::AnyTagged(),
409 kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000410 return access;
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400411}
412
413
414// static
415FieldAccess AccessBuilder::ForValue() {
Ben Murdochc5610432016-08-08 18:44:38 +0100416 FieldAccess access = {
417 kTaggedBase, JSValue::kValueOffset, Handle<Name>(),
418 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000419 return access;
420}
421
422
423// static
424FieldAccess AccessBuilder::ForArgumentsLength() {
Ben Murdochc5610432016-08-08 18:44:38 +0100425 FieldAccess access = {
426 kTaggedBase, JSArgumentsObject::kLengthOffset, Handle<Name>(),
427 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000428 return access;
429}
430
431
432// static
433FieldAccess AccessBuilder::ForArgumentsCallee() {
Ben Murdochc5610432016-08-08 18:44:38 +0100434 FieldAccess access = {kTaggedBase,
435 JSSloppyArgumentsObject::kCalleeOffset,
436 Handle<Name>(),
437 Type::Any(),
438 MachineType::AnyTagged(),
439 kPointerWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000440 return access;
441}
442
443
444// static
445FieldAccess AccessBuilder::ForFixedArraySlot(size_t index) {
446 int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index));
Ben Murdochc5610432016-08-08 18:44:38 +0100447 FieldAccess access = {kTaggedBase,
448 offset,
449 Handle<Name>(),
450 Type::Any(),
451 MachineType::AnyTagged(),
452 kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000453 return access;
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400454}
455
456
457// static
458FieldAccess AccessBuilder::ForContextSlot(size_t index) {
459 int offset = Context::kHeaderSize + static_cast<int>(index) * kPointerSize;
460 DCHECK_EQ(offset,
461 Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag);
Ben Murdochc5610432016-08-08 18:44:38 +0100462 FieldAccess access = {kTaggedBase,
463 offset,
464 Handle<Name>(),
465 Type::Any(),
466 MachineType::AnyTagged(),
467 kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000468 return access;
469}
470
471
472// static
473FieldAccess AccessBuilder::ForPropertyCellValue() {
474 return ForPropertyCellValue(Type::Tagged());
475}
476
477
478// static
479FieldAccess AccessBuilder::ForPropertyCellValue(Type* type) {
Ben Murdochc5610432016-08-08 18:44:38 +0100480 FieldAccess access = {
481 kTaggedBase, PropertyCell::kValueOffset, Handle<Name>(),
482 type, MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000483 return access;
484}
485
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000486// static
487ElementAccess AccessBuilder::ForFixedArrayElement() {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000488 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Tagged(),
Ben Murdochc5610432016-08-08 18:44:38 +0100489 MachineType::AnyTagged(), kFullWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000490 return access;
491}
492
493
494// static
495ElementAccess AccessBuilder::ForFixedDoubleArrayElement() {
496 ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize,
Ben Murdochc5610432016-08-08 18:44:38 +0100497 TypeCache::Get().kFloat64, MachineType::Float64(),
498 kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000499 return access;
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000500}
501
502
503// static
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000504ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type,
505 bool is_external) {
506 BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase;
507 int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset;
508 switch (type) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000509 case kExternalInt8Array: {
510 ElementAccess access = {taggedness, header_size, Type::Signed32(),
Ben Murdochc5610432016-08-08 18:44:38 +0100511 MachineType::Int8(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000512 return access;
513 }
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000514 case kExternalUint8Array:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000515 case kExternalUint8ClampedArray: {
516 ElementAccess access = {taggedness, header_size, Type::Unsigned32(),
Ben Murdochc5610432016-08-08 18:44:38 +0100517 MachineType::Uint8(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000518 return access;
519 }
520 case kExternalInt16Array: {
521 ElementAccess access = {taggedness, header_size, Type::Signed32(),
Ben Murdochc5610432016-08-08 18:44:38 +0100522 MachineType::Int16(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000523 return access;
524 }
525 case kExternalUint16Array: {
526 ElementAccess access = {taggedness, header_size, Type::Unsigned32(),
Ben Murdochc5610432016-08-08 18:44:38 +0100527 MachineType::Uint16(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000528 return access;
529 }
530 case kExternalInt32Array: {
531 ElementAccess access = {taggedness, header_size, Type::Signed32(),
Ben Murdochc5610432016-08-08 18:44:38 +0100532 MachineType::Int32(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000533 return access;
534 }
535 case kExternalUint32Array: {
536 ElementAccess access = {taggedness, header_size, Type::Unsigned32(),
Ben Murdochc5610432016-08-08 18:44:38 +0100537 MachineType::Uint32(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000538 return access;
539 }
540 case kExternalFloat32Array: {
541 ElementAccess access = {taggedness, header_size, Type::Number(),
Ben Murdochc5610432016-08-08 18:44:38 +0100542 MachineType::Float32(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000543 return access;
544 }
545 case kExternalFloat64Array: {
546 ElementAccess access = {taggedness, header_size, Type::Number(),
Ben Murdochc5610432016-08-08 18:44:38 +0100547 MachineType::Float64(), kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000548 return access;
549 }
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000550 }
551 UNREACHABLE();
Ben Murdochc5610432016-08-08 18:44:38 +0100552 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None(),
553 kNoWriteBarrier};
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000554 return access;
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000555}
556
557} // namespace compiler
558} // namespace internal
559} // namespace v8