| Index: src/ic/access-compiler.h
|
| diff --git a/src/ic/access-compiler.h b/src/ic/access-compiler.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..928b70b7499278e14b4ba4e7aa696faddb358cd2
|
| --- /dev/null
|
| +++ b/src/ic/access-compiler.h
|
| @@ -0,0 +1,83 @@
|
| +// Copyright 2014 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef V8_IC_ACCESS_COMPILER_H_
|
| +#define V8_IC_ACCESS_COMPILER_H_
|
| +
|
| +#include "src/code-stubs.h"
|
| +#include "src/macro-assembler.h"
|
| +#include "src/objects.h"
|
| +
|
| +namespace v8 {
|
| +namespace internal {
|
| +
|
| +
|
| +class PropertyAccessCompiler BASE_EMBEDDED {
|
| + public:
|
| + static Builtins::Name MissBuiltin(Code::Kind kind) {
|
| + switch (kind) {
|
| + case Code::LOAD_IC:
|
| + return Builtins::kLoadIC_Miss;
|
| + case Code::STORE_IC:
|
| + return Builtins::kStoreIC_Miss;
|
| + case Code::KEYED_LOAD_IC:
|
| + return Builtins::kKeyedLoadIC_Miss;
|
| + case Code::KEYED_STORE_IC:
|
| + return Builtins::kKeyedStoreIC_Miss;
|
| + default:
|
| + UNREACHABLE();
|
| + }
|
| + return Builtins::kLoadIC_Miss;
|
| + }
|
| +
|
| + static void TailCallBuiltin(MacroAssembler* masm, Builtins::Name name);
|
| +
|
| + protected:
|
| + PropertyAccessCompiler(Isolate* isolate, Code::Kind kind,
|
| + CacheHolderFlag cache_holder)
|
| + : registers_(GetCallingConvention(kind)),
|
| + kind_(kind),
|
| + cache_holder_(cache_holder),
|
| + isolate_(isolate),
|
| + masm_(isolate, NULL, 256) {}
|
| +
|
| + Code::Kind kind() const { return kind_; }
|
| + CacheHolderFlag cache_holder() const { return cache_holder_; }
|
| + MacroAssembler* masm() { return &masm_; }
|
| + Isolate* isolate() const { return isolate_; }
|
| + Heap* heap() const { return isolate()->heap(); }
|
| + Factory* factory() const { return isolate()->factory(); }
|
| +
|
| + Register receiver() const { return registers_[0]; }
|
| + Register name() const { return registers_[1]; }
|
| + Register scratch1() const { return registers_[2]; }
|
| + Register scratch2() const { return registers_[3]; }
|
| + Register scratch3() const { return registers_[4]; }
|
| +
|
| + // Calling convention between indexed store IC and handler.
|
| + Register transition_map() const { return scratch1(); }
|
| +
|
| + static Register* GetCallingConvention(Code::Kind);
|
| + static Register* load_calling_convention();
|
| + static Register* store_calling_convention();
|
| + static Register* keyed_store_calling_convention();
|
| +
|
| + Register* registers_;
|
| +
|
| + static void GenerateTailCall(MacroAssembler* masm, Handle<Code> code);
|
| +
|
| + Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name);
|
| + Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<Name> name);
|
| +
|
| + private:
|
| + Code::Kind kind_;
|
| + CacheHolderFlag cache_holder_;
|
| +
|
| + Isolate* isolate_;
|
| + MacroAssembler masm_;
|
| +};
|
| +}
|
| +} // namespace v8::internal
|
| +
|
| +#endif // V8_IC_ACCESS_COMPILER_H_
|
|
|