• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "src/v8.h"
6 
7 #include "src/ic/access-compiler.h"
8 
9 
10 namespace v8 {
11 namespace internal {
12 
13 
GetCodeWithFlags(Code::Flags flags,const char * name)14 Handle<Code> PropertyAccessCompiler::GetCodeWithFlags(Code::Flags flags,
15                                                       const char* name) {
16   // Create code object in the heap.
17   CodeDesc desc;
18   masm()->GetCode(&desc);
19   Handle<Code> code = factory()->NewCode(desc, flags, masm()->CodeObject());
20   if (code->IsCodeStubOrIC()) code->set_stub_key(CodeStub::NoCacheKey());
21 #ifdef ENABLE_DISASSEMBLER
22   if (FLAG_print_code_stubs) {
23     OFStream os(stdout);
24     code->Disassemble(name, os);
25   }
26 #endif
27   return code;
28 }
29 
30 
GetCodeWithFlags(Code::Flags flags,Handle<Name> name)31 Handle<Code> PropertyAccessCompiler::GetCodeWithFlags(Code::Flags flags,
32                                                       Handle<Name> name) {
33   return (FLAG_print_code_stubs && !name.is_null() && name->IsString())
34              ? GetCodeWithFlags(flags,
35                                 Handle<String>::cast(name)->ToCString().get())
36              : GetCodeWithFlags(flags, NULL);
37 }
38 
39 
TailCallBuiltin(MacroAssembler * masm,Builtins::Name name)40 void PropertyAccessCompiler::TailCallBuiltin(MacroAssembler* masm,
41                                              Builtins::Name name) {
42   Handle<Code> code(masm->isolate()->builtins()->builtin(name));
43   GenerateTailCall(masm, code);
44 }
45 
46 
GetCallingConvention(Code::Kind kind)47 Register* PropertyAccessCompiler::GetCallingConvention(Code::Kind kind) {
48   if (kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC) {
49     return load_calling_convention();
50   }
51   DCHECK(kind == Code::STORE_IC || kind == Code::KEYED_STORE_IC);
52   return store_calling_convention();
53 }
54 }
55 }  // namespace v8::internal
56