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