10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "src/v8.h" 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "src/ic/access-compiler.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace v8 { 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace internal { 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 140529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochHandle<Code> PropertyAccessCompiler::GetCodeWithFlags(Code::Flags flags, 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const char* name) { 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Create code object in the heap. 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch CodeDesc desc; 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch masm()->GetCode(&desc); 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Handle<Code> code = factory()->NewCode(desc, flags, masm()->CodeObject()); 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (code->IsCodeStubOrIC()) code->set_stub_key(CodeStub::NoCacheKey()); 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifdef ENABLE_DISASSEMBLER 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (FLAG_print_code_stubs) { 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OFStream os(stdout); 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch code->Disassemble(name, os); 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return code; 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 310529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochHandle<Code> PropertyAccessCompiler::GetCodeWithFlags(Code::Flags flags, 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Handle<Name> name) { 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return (FLAG_print_code_stubs && !name.is_null() && name->IsString()) 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ? GetCodeWithFlags(flags, 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Handle<String>::cast(name)->ToCString().get()) 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch : GetCodeWithFlags(flags, NULL); 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid PropertyAccessCompiler::TailCallBuiltin(MacroAssembler* masm, 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Builtins::Name name) { 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Handle<Code> code(masm->isolate()->builtins()->builtin(name)); 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GenerateTailCall(masm, code); 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 470529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochRegister* PropertyAccessCompiler::GetCallingConvention(Code::Kind kind) { 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC) { 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return load_calling_convention(); 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK(kind == Code::STORE_IC || kind == Code::KEYED_STORE_IC); 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return store_calling_convention(); 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace v8::internal 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch