16313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 26313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 36313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// found in the LICENSE file. 46313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 56313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/v8.h" 66313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 76313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/bootstrapper.h" 86313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/code-factory.h" 96313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/ic/ic.h" 106313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 116313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgnamespace v8 { 126313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgnamespace internal { 136313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 146313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 156313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::LoadIC(Isolate* isolate, ContextualMode mode) { 166313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable( 17d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org LoadIC::initialize_stub(isolate, LoadICState(mode).GetExtraICState()), 186313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org LoadDescriptor(isolate)); 196313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 206313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 216313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 226313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 236313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::KeyedLoadIC(Isolate* isolate) { 246313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(isolate->builtins()->KeyedLoadIC_Initialize(), 256313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org LoadDescriptor(isolate)); 266313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 276313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 286313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 296313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 306313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::StoreIC(Isolate* isolate, StrictMode mode) { 316313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(StoreIC::initialize_stub(isolate, mode), 326313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org StoreDescriptor(isolate)); 336313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 346313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 356313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 366313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 376313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::KeyedStoreIC(Isolate* isolate, StrictMode mode) { 386313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org Handle<Code> ic = mode == SLOPPY 396313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org ? isolate->builtins()->KeyedStoreIC_Initialize() 406313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org : isolate->builtins()->KeyedStoreIC_Initialize_Strict(); 416313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(ic, StoreDescriptor(isolate)); 426313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 436313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 446313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 456313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 466313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::CompareIC(Isolate* isolate, Token::Value op) { 476313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org Handle<Code> code = CompareIC::GetUninitialized(isolate, op); 486313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(code, BinaryOpDescriptor(isolate)); 496313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 506313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 516313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 526313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 536313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::BinaryOpIC(Isolate* isolate, Token::Value op, 546313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org OverwriteMode mode) { 556313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org BinaryOpICStub stub(isolate, op, mode); 566313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor()); 576313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 586313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 596313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 606313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 616313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::ToBoolean(Isolate* isolate, 626313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org ToBooleanStub::ResultMode mode, 636313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org ToBooleanStub::Types types) { 646313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org ToBooleanStub stub(isolate, mode, types); 656313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor()); 666313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 676313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 686313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 696313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 706313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::ToNumber(Isolate* isolate) { 716313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org ToNumberStub stub(isolate); 726313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor()); 736313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 746313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 756313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 766313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 776313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::StringAdd(Isolate* isolate, StringAddFlags flags, 786313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org PretenureFlag pretenure_flag) { 796313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org StringAddStub stub(isolate, flags, pretenure_flag); 806313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor()); 816313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 826313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 836313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 846313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// static 856313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgCallable CodeFactory::CallFunction(Isolate* isolate, int argc, 866313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallFunctionFlags flags) { 876313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallFunctionStub stub(isolate, argc, flags); 886313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor()); 896313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 906313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 916313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} // namespace internal 926313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} // namespace v8 93