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