OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_CODE_STUBS_H_ | 5 #ifndef V8_CODE_STUBS_H_ |
6 #define V8_CODE_STUBS_H_ | 6 #define V8_CODE_STUBS_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/assembler.h" | 9 #include "src/assembler.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 1926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1937 Major MajorKey() const { return KeyedLoadGeneric; } | 1937 Major MajorKey() const { return KeyedLoadGeneric; } |
1938 int NotMissMinorKey() const { return 0; } | 1938 int NotMissMinorKey() const { return 0; } |
1939 | 1939 |
1940 DISALLOW_COPY_AND_ASSIGN(KeyedLoadGenericStub); | 1940 DISALLOW_COPY_AND_ASSIGN(KeyedLoadGenericStub); |
1941 }; | 1941 }; |
1942 | 1942 |
1943 | 1943 |
1944 class LoadICTrampolineStub : public PlatformCodeStub { | 1944 class LoadICTrampolineStub : public PlatformCodeStub { |
1945 public: | 1945 public: |
1946 LoadICTrampolineStub(Isolate* isolate, const LoadIC::State& state) | 1946 LoadICTrampolineStub(Isolate* isolate, const LoadIC::State& state) |
1947 : PlatformCodeStub(isolate), state_(state) {} | 1947 : PlatformCodeStub(isolate) { |
| 1948 minor_key_ = state.GetExtraICState(); |
| 1949 } |
1948 | 1950 |
1949 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { return Code::LOAD_IC; } | 1951 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { return Code::LOAD_IC; } |
1950 | 1952 |
1951 virtual InlineCacheState GetICState() const V8_FINAL V8_OVERRIDE { | 1953 virtual InlineCacheState GetICState() const V8_FINAL V8_OVERRIDE { |
1952 return GENERIC; | 1954 return GENERIC; |
1953 } | 1955 } |
1954 | 1956 |
1955 virtual ExtraICState GetExtraICState() const V8_FINAL V8_OVERRIDE { | 1957 virtual ExtraICState GetExtraICState() const V8_FINAL V8_OVERRIDE { |
1956 return state_.GetExtraICState(); | 1958 return static_cast<ExtraICState>(minor_key_); |
1957 } | 1959 } |
1958 | 1960 |
| 1961 virtual Major MajorKey() const V8_OVERRIDE { return LoadICTrampoline; } |
| 1962 |
1959 private: | 1963 private: |
1960 Major MajorKey() const { return LoadICTrampoline; } | 1964 LoadIC::State state() const { |
1961 uint32_t MinorKey() const { return GetExtraICState(); } | 1965 return LoadIC::State(static_cast<ExtraICState>(minor_key_)); |
| 1966 } |
1962 | 1967 |
1963 virtual void Generate(MacroAssembler* masm); | 1968 virtual void Generate(MacroAssembler* masm); |
1964 | 1969 |
1965 const LoadIC::State state_; | |
1966 | |
1967 DISALLOW_COPY_AND_ASSIGN(LoadICTrampolineStub); | 1970 DISALLOW_COPY_AND_ASSIGN(LoadICTrampolineStub); |
1968 }; | 1971 }; |
1969 | 1972 |
1970 | 1973 |
1971 class KeyedLoadICTrampolineStub : public LoadICTrampolineStub { | 1974 class KeyedLoadICTrampolineStub : public LoadICTrampolineStub { |
1972 public: | 1975 public: |
1973 explicit KeyedLoadICTrampolineStub(Isolate* isolate) | 1976 explicit KeyedLoadICTrampolineStub(Isolate* isolate) |
1974 : LoadICTrampolineStub(isolate, LoadIC::State(0)) {} | 1977 : LoadICTrampolineStub(isolate, LoadIC::State(0)) {} |
1975 | 1978 |
1976 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { | 1979 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { |
1977 return Code::KEYED_LOAD_IC; | 1980 return Code::KEYED_LOAD_IC; |
1978 } | 1981 } |
1979 | 1982 |
| 1983 virtual Major MajorKey() const V8_OVERRIDE { return KeyedLoadICTrampoline; } |
| 1984 |
1980 private: | 1985 private: |
1981 Major MajorKey() const { return KeyedLoadICTrampoline; } | |
1982 | |
1983 virtual void Generate(MacroAssembler* masm); | 1986 virtual void Generate(MacroAssembler* masm); |
1984 | 1987 |
1985 DISALLOW_COPY_AND_ASSIGN(KeyedLoadICTrampolineStub); | 1988 DISALLOW_COPY_AND_ASSIGN(KeyedLoadICTrampolineStub); |
1986 }; | 1989 }; |
1987 | 1990 |
1988 | 1991 |
1989 class VectorLoadStub : public HydrogenCodeStub { | 1992 class VectorLoadStub : public HydrogenCodeStub { |
1990 public: | 1993 public: |
1991 explicit VectorLoadStub(Isolate* isolate, const LoadIC::State& state) | 1994 explicit VectorLoadStub(Isolate* isolate, const LoadIC::State& state) |
1992 : HydrogenCodeStub(isolate), state_(state) {} | 1995 : HydrogenCodeStub(isolate), state_(state) {} |
1993 | 1996 |
1994 virtual Handle<Code> GenerateCode() V8_OVERRIDE; | 1997 virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
1995 | 1998 |
1996 virtual void InitializeInterfaceDescriptor( | 1999 virtual void InitializeInterfaceDescriptor( |
1997 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; | 2000 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; |
1998 | 2001 |
1999 static void InstallDescriptors(Isolate* isolate); | 2002 static void InstallDescriptors(Isolate* isolate); |
2000 | 2003 |
2001 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { return Code::LOAD_IC; } | 2004 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { return Code::LOAD_IC; } |
2002 | 2005 |
2003 virtual InlineCacheState GetICState() const V8_FINAL V8_OVERRIDE { | 2006 virtual InlineCacheState GetICState() const V8_FINAL V8_OVERRIDE { |
2004 return GENERIC; | 2007 return GENERIC; |
2005 } | 2008 } |
2006 | 2009 |
2007 virtual ExtraICState GetExtraICState() const V8_FINAL V8_OVERRIDE { | 2010 virtual ExtraICState GetExtraICState() const V8_FINAL V8_OVERRIDE { |
2008 return state_.GetExtraICState(); | 2011 return state_.GetExtraICState(); |
2009 } | 2012 } |
2010 | 2013 |
| 2014 virtual Major MajorKey() const V8_OVERRIDE { return VectorLoad; } |
| 2015 |
2011 private: | 2016 private: |
2012 Major MajorKey() const { return VectorLoad; } | |
2013 int NotMissMinorKey() const { return state_.GetExtraICState(); } | 2017 int NotMissMinorKey() const { return state_.GetExtraICState(); } |
2014 | 2018 |
2015 const LoadIC::State state_; | 2019 const LoadIC::State state_; |
2016 | 2020 |
2017 DISALLOW_COPY_AND_ASSIGN(VectorLoadStub); | 2021 DISALLOW_COPY_AND_ASSIGN(VectorLoadStub); |
2018 }; | 2022 }; |
2019 | 2023 |
2020 | 2024 |
2021 class VectorKeyedLoadStub : public VectorLoadStub { | 2025 class VectorKeyedLoadStub : public VectorLoadStub { |
2022 public: | 2026 public: |
2023 explicit VectorKeyedLoadStub(Isolate* isolate) | 2027 explicit VectorKeyedLoadStub(Isolate* isolate) |
2024 : VectorLoadStub(isolate, LoadIC::State(0)) {} | 2028 : VectorLoadStub(isolate, LoadIC::State(0)) {} |
2025 | 2029 |
2026 virtual Handle<Code> GenerateCode() V8_OVERRIDE; | 2030 virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
2027 | 2031 |
2028 virtual void InitializeInterfaceDescriptor( | 2032 virtual void InitializeInterfaceDescriptor( |
2029 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; | 2033 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; |
2030 | 2034 |
2031 static void InstallDescriptors(Isolate* isolate); | 2035 static void InstallDescriptors(Isolate* isolate); |
2032 | 2036 |
2033 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { | 2037 virtual Code::Kind GetCodeKind() const V8_OVERRIDE { |
2034 return Code::KEYED_LOAD_IC; | 2038 return Code::KEYED_LOAD_IC; |
2035 } | 2039 } |
2036 | 2040 |
| 2041 virtual Major MajorKey() const V8_OVERRIDE { return VectorKeyedLoad; } |
| 2042 |
2037 private: | 2043 private: |
2038 Major MajorKey() const { return VectorKeyedLoad; } | |
2039 | |
2040 DISALLOW_COPY_AND_ASSIGN(VectorKeyedLoadStub); | 2044 DISALLOW_COPY_AND_ASSIGN(VectorKeyedLoadStub); |
2041 }; | 2045 }; |
2042 | 2046 |
2043 | 2047 |
2044 class DoubleToIStub : public PlatformCodeStub { | 2048 class DoubleToIStub : public PlatformCodeStub { |
2045 public: | 2049 public: |
2046 DoubleToIStub(Isolate* isolate, Register source, Register destination, | 2050 DoubleToIStub(Isolate* isolate, Register source, Register destination, |
2047 int offset, bool is_truncating, bool skip_fastpath = false) | 2051 int offset, bool is_truncating, bool skip_fastpath = false) |
2048 : PlatformCodeStub(isolate) { | 2052 : PlatformCodeStub(isolate) { |
2049 minor_key_ = SourceRegisterBits::encode(source.code()) | | 2053 minor_key_ = SourceRegisterBits::encode(source.code()) | |
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2657 | 2661 |
2658 | 2662 |
2659 class CallDescriptors { | 2663 class CallDescriptors { |
2660 public: | 2664 public: |
2661 static void InitializeForIsolate(Isolate* isolate); | 2665 static void InitializeForIsolate(Isolate* isolate); |
2662 }; | 2666 }; |
2663 | 2667 |
2664 } } // namespace v8::internal | 2668 } } // namespace v8::internal |
2665 | 2669 |
2666 #endif // V8_CODE_STUBS_H_ | 2670 #endif // V8_CODE_STUBS_H_ |
OLD | NEW |