1086aeeaae12517475c22695a200be45495516549Ben Murdoch// Copyright 2011 the V8 project authors. All rights reserved.
2086aeeaae12517475c22695a200be45495516549Ben Murdoch// Redistribution and use in source and binary forms, with or without
3086aeeaae12517475c22695a200be45495516549Ben Murdoch// modification, are permitted provided that the following conditions are
4086aeeaae12517475c22695a200be45495516549Ben Murdoch// met:
5086aeeaae12517475c22695a200be45495516549Ben Murdoch//
6086aeeaae12517475c22695a200be45495516549Ben Murdoch//     * Redistributions of source code must retain the above copyright
7086aeeaae12517475c22695a200be45495516549Ben Murdoch//       notice, this list of conditions and the following disclaimer.
8086aeeaae12517475c22695a200be45495516549Ben Murdoch//     * Redistributions in binary form must reproduce the above
9086aeeaae12517475c22695a200be45495516549Ben Murdoch//       copyright notice, this list of conditions and the following
10086aeeaae12517475c22695a200be45495516549Ben Murdoch//       disclaimer in the documentation and/or other materials provided
11086aeeaae12517475c22695a200be45495516549Ben Murdoch//       with the distribution.
12086aeeaae12517475c22695a200be45495516549Ben Murdoch//     * Neither the name of Google Inc. nor the names of its
13086aeeaae12517475c22695a200be45495516549Ben Murdoch//       contributors may be used to endorse or promote products derived
14086aeeaae12517475c22695a200be45495516549Ben Murdoch//       from this software without specific prior written permission.
15086aeeaae12517475c22695a200be45495516549Ben Murdoch//
16086aeeaae12517475c22695a200be45495516549Ben Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17086aeeaae12517475c22695a200be45495516549Ben Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18086aeeaae12517475c22695a200be45495516549Ben Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19086aeeaae12517475c22695a200be45495516549Ben Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20086aeeaae12517475c22695a200be45495516549Ben Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21086aeeaae12517475c22695a200be45495516549Ben Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22086aeeaae12517475c22695a200be45495516549Ben Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23086aeeaae12517475c22695a200be45495516549Ben Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24086aeeaae12517475c22695a200be45495516549Ben Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25086aeeaae12517475c22695a200be45495516549Ben Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26086aeeaae12517475c22695a200be45495516549Ben Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27086aeeaae12517475c22695a200be45495516549Ben Murdoch
2844f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "v8.h"
29086aeeaae12517475c22695a200be45495516549Ben Murdoch#include "lithium.h"
30086aeeaae12517475c22695a200be45495516549Ben Murdoch
31086aeeaae12517475c22695a200be45495516549Ben Murdochnamespace v8 {
32086aeeaae12517475c22695a200be45495516549Ben Murdochnamespace internal {
33086aeeaae12517475c22695a200be45495516549Ben Murdoch
341e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
351e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockvoid LOperand::PrintTo(StringStream* stream) {
361e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  LUnallocated* unalloc = NULL;
371e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  switch (kind()) {
381e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case INVALID:
393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      stream->Add("(0)");
401e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
411e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case UNALLOCATED:
421e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      unalloc = LUnallocated::cast(this);
431e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      stream->Add("v%d", unalloc->virtual_register());
441e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      switch (unalloc->policy()) {
451e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::NONE:
461e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
471e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::FIXED_REGISTER: {
481e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          const char* register_name =
491e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block              Register::AllocationIndexToString(unalloc->fixed_index());
501e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          stream->Add("(=%s)", register_name);
511e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
521e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        }
531e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::FIXED_DOUBLE_REGISTER: {
541e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          const char* double_register_name =
551e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block              DoubleRegister::AllocationIndexToString(unalloc->fixed_index());
561e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          stream->Add("(=%s)", double_register_name);
571e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
581e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        }
591e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::FIXED_SLOT:
601e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          stream->Add("(=%dS)", unalloc->fixed_index());
611e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
621e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::MUST_HAVE_REGISTER:
631e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          stream->Add("(R)");
641e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
651e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::WRITABLE_REGISTER:
661e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          stream->Add("(WR)");
671e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
681e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::SAME_AS_FIRST_INPUT:
691e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          stream->Add("(1)");
701e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
711e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block        case LUnallocated::ANY:
721e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          stream->Add("(-)");
731e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block          break;
741e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      }
751e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
761e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case CONSTANT_OPERAND:
771e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      stream->Add("[constant:%d]", index());
781e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
791e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case STACK_SLOT:
801e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      stream->Add("[stack:%d]", index());
811e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
821e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case DOUBLE_STACK_SLOT:
831e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      stream->Add("[double_stack:%d]", index());
841e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
851e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case REGISTER:
861e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      stream->Add("[%s|R]", Register::AllocationIndexToString(index()));
871e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
881e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case DOUBLE_REGISTER:
891e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      stream->Add("[%s|R]", DoubleRegister::AllocationIndexToString(index()));
901e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
911e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case ARGUMENT:
921e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      stream->Add("[arg:%d]", index());
931e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
941e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  }
951e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block}
961e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#define DEFINE_OPERAND_CACHE(name, type)                      \
983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  name* name::cache = NULL;                                   \
993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  void name::SetUpCache() {                                   \
1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    if (cache) return;                                        \
1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    cache = new name[kNumCachedOperands];                     \
1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    for (int i = 0; i < kNumCachedOperands; i++) {            \
1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      cache[i].ConvertTo(type, i);                            \
1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }                                                         \
1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }                                                           \
1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDEFINE_OPERAND_CACHE(LConstantOperand, CONSTANT_OPERAND)
1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDEFINE_OPERAND_CACHE(LStackSlot,       STACK_SLOT)
1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDEFINE_OPERAND_CACHE(LDoubleStackSlot, DOUBLE_STACK_SLOT)
1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDEFINE_OPERAND_CACHE(LRegister,        REGISTER)
1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDEFINE_OPERAND_CACHE(LDoubleRegister,  DOUBLE_REGISTER)
1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#undef DEFINE_OPERAND_CACHE
1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid LOperand::SetUpCaches() {
1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  LConstantOperand::SetUpCache();
1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  LStackSlot::SetUpCache();
1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  LDoubleStackSlot::SetUpCache();
1193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  LRegister::SetUpCache();
1203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  LDoubleRegister::SetUpCache();
1215d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch}
1221e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
123b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochbool LParallelMove::IsRedundant() const {
124b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  for (int i = 0; i < move_operands_.length(); ++i) {
125b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    if (!move_operands_[i].IsRedundant()) return false;
126086aeeaae12517475c22695a200be45495516549Ben Murdoch  }
127b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  return true;
128086aeeaae12517475c22695a200be45495516549Ben Murdoch}
129086aeeaae12517475c22695a200be45495516549Ben Murdoch
130086aeeaae12517475c22695a200be45495516549Ben Murdoch
131b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochvoid LParallelMove::PrintDataTo(StringStream* stream) const {
132b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  bool first = true;
133b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  for (int i = 0; i < move_operands_.length(); ++i) {
134b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    if (!move_operands_[i].IsEliminated()) {
135b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      LOperand* source = move_operands_[i].source();
136b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      LOperand* destination = move_operands_[i].destination();
137b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      if (!first) stream->Add(" ");
138b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      first = false;
139b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      if (source->Equals(destination)) {
140b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch        destination->PrintTo(stream);
141b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      } else {
142b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch        destination->PrintTo(stream);
143b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch        stream->Add(" = ");
144b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch        source->PrintTo(stream);
145086aeeaae12517475c22695a200be45495516549Ben Murdoch      }
146b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      stream->Add(";");
147086aeeaae12517475c22695a200be45495516549Ben Murdoch    }
148086aeeaae12517475c22695a200be45495516549Ben Murdoch  }
149086aeeaae12517475c22695a200be45495516549Ben Murdoch}
150086aeeaae12517475c22695a200be45495516549Ben Murdoch
151086aeeaae12517475c22695a200be45495516549Ben Murdoch
152b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochvoid LEnvironment::PrintTo(StringStream* stream) {
153b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  stream->Add("[id=%d|", ast_id());
154b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  stream->Add("[parameters=%d|", parameter_count());
155b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  stream->Add("[arguments_stack_height=%d|", arguments_stack_height());
156b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  for (int i = 0; i < values_.length(); ++i) {
157b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    if (i != 0) stream->Add(";");
158b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    if (values_[i] == NULL) {
159b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      stream->Add("[hole]");
160b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    } else {
161b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch      values_[i]->PrintTo(stream);
162b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    }
163086aeeaae12517475c22695a200be45495516549Ben Murdoch  }
164b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  stream->Add("]");
165086aeeaae12517475c22695a200be45495516549Ben Murdoch}
166086aeeaae12517475c22695a200be45495516549Ben Murdoch
167086aeeaae12517475c22695a200be45495516549Ben Murdoch
168b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochvoid LPointerMap::RecordPointer(LOperand* op) {
169b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  // Do not record arguments as pointers.
170b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  if (op->IsStackSlot() && op->index() < 0) return;
171b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  ASSERT(!op->IsDoubleRegister() && !op->IsDoubleStackSlot());
172b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  pointer_operands_.Add(op);
173086aeeaae12517475c22695a200be45495516549Ben Murdoch}
174086aeeaae12517475c22695a200be45495516549Ben Murdoch
175086aeeaae12517475c22695a200be45495516549Ben Murdoch
1763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid LPointerMap::RemovePointer(LOperand* op) {
1773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  // Do not record arguments as pointers.
1783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (op->IsStackSlot() && op->index() < 0) return;
1793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ASSERT(!op->IsDoubleRegister() && !op->IsDoubleStackSlot());
1803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  for (int i = 0; i < pointer_operands_.length(); ++i) {
1813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    if (pointer_operands_[i]->Equals(op)) {
1823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      pointer_operands_.Remove(i);
1833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      --i;
1843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
1853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
1863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid LPointerMap::RecordUntagged(LOperand* op) {
1903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  // Do not record arguments as pointers.
1913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (op->IsStackSlot() && op->index() < 0) return;
1923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ASSERT(!op->IsDoubleRegister() && !op->IsDoubleStackSlot());
1933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  untagged_operands_.Add(op);
1943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
197b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdochvoid LPointerMap::PrintTo(StringStream* stream) {
198b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  stream->Add("{");
199b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  for (int i = 0; i < pointer_operands_.length(); ++i) {
200b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    if (i != 0) stream->Add(";");
201b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch    pointer_operands_[i]->PrintTo(stream);
202086aeeaae12517475c22695a200be45495516549Ben Murdoch  }
203b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch  stream->Add("} @%d", position());
204086aeeaae12517475c22695a200be45495516549Ben Murdoch}
205086aeeaae12517475c22695a200be45495516549Ben Murdoch
206086aeeaae12517475c22695a200be45495516549Ben Murdoch
207589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdochint ElementsKindToShiftSize(ElementsKind elements_kind) {
2083fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  switch (elements_kind) {
209589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_BYTE_ELEMENTS:
210589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_PIXEL_ELEMENTS:
211589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
212257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      return 0;
213589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_SHORT_ELEMENTS:
214589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
215257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      return 1;
216589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_INT_ELEMENTS:
217589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_UNSIGNED_INT_ELEMENTS:
218589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_FLOAT_ELEMENTS:
219257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      return 2;
220589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case EXTERNAL_DOUBLE_ELEMENTS:
221589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case FAST_DOUBLE_ELEMENTS:
222257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      return 3;
2233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case FAST_SMI_ONLY_ELEMENTS:
224589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case FAST_ELEMENTS:
225589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case DICTIONARY_ELEMENTS:
226589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case NON_STRICT_ARGUMENTS_ELEMENTS:
2273fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      return kPointerSizeLog2;
228257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  }
229257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  UNREACHABLE();
230257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  return 0;
231257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}
232257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch
233257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch
234086aeeaae12517475c22695a200be45495516549Ben Murdoch} }  // namespace v8::internal
235