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 #include "src/code-stubs.h" | 5 #include "src/code-stubs.h" |
6 | 6 |
7 #include "src/bailout-reason.h" | 7 #include "src/bailout-reason.h" |
8 #include "src/crankshaft/hydrogen.h" | 8 #include "src/crankshaft/hydrogen.h" |
9 #include "src/crankshaft/lithium.h" | 9 #include "src/crankshaft/lithium.h" |
10 #include "src/field-index.h" | 10 #include "src/field-index.h" |
(...skipping 1906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1917 | 1917 |
1918 template <> | 1918 template <> |
1919 HValue* CodeStubGraphBuilder<ToObjectStub>::BuildCodeStub() { | 1919 HValue* CodeStubGraphBuilder<ToObjectStub>::BuildCodeStub() { |
1920 HValue* receiver = GetParameter(TypeConversionDescriptor::kArgumentIndex); | 1920 HValue* receiver = GetParameter(TypeConversionDescriptor::kArgumentIndex); |
1921 return BuildToObject(receiver); | 1921 return BuildToObject(receiver); |
1922 } | 1922 } |
1923 | 1923 |
1924 | 1924 |
1925 Handle<Code> ToObjectStub::GenerateCode() { return DoGenerateCode(this); } | 1925 Handle<Code> ToObjectStub::GenerateCode() { return DoGenerateCode(this); } |
1926 | 1926 |
1927 | |
1928 template<> | |
1929 HValue* CodeStubGraphBuilder<FastNewClosureStub>::BuildCodeStub() { | |
1930 Counters* counters = isolate()->counters(); | |
1931 Factory* factory = isolate()->factory(); | |
1932 HInstruction* empty_fixed_array = | |
1933 Add<HConstant>(factory->empty_fixed_array()); | |
1934 HInstruction* empty_literals_array = | |
1935 Add<HConstant>(factory->empty_literals_array()); | |
1936 HValue* shared_info = GetParameter(0); | |
1937 | |
1938 AddIncrementCounter(counters->fast_new_closure_total()); | |
1939 | |
1940 // Create a new closure from the given function info in new space | |
1941 HValue* size = Add<HConstant>(JSFunction::kSize); | |
1942 HInstruction* js_function = | |
1943 Add<HAllocate>(size, HType::JSObject(), NOT_TENURED, JS_FUNCTION_TYPE, | |
1944 graph()->GetConstant0()); | |
1945 | |
1946 int map_index = Context::FunctionMapIndex(casted_stub()->language_mode(), | |
1947 casted_stub()->kind()); | |
1948 | |
1949 // Compute the function map in the current native context and set that | |
1950 // as the map of the allocated object. | |
1951 HInstruction* native_context = BuildGetNativeContext(); | |
1952 HInstruction* map_slot_value = Add<HLoadNamedField>( | |
1953 native_context, nullptr, HObjectAccess::ForContextSlot(map_index)); | |
1954 Add<HStoreNamedField>(js_function, HObjectAccess::ForMap(), map_slot_value); | |
1955 | |
1956 // Initialize the rest of the function. | |
1957 Add<HStoreNamedField>(js_function, HObjectAccess::ForPropertiesPointer(), | |
1958 empty_fixed_array); | |
1959 Add<HStoreNamedField>(js_function, HObjectAccess::ForElementsPointer(), | |
1960 empty_fixed_array); | |
1961 Add<HStoreNamedField>(js_function, HObjectAccess::ForLiteralsPointer(), | |
1962 empty_literals_array); | |
1963 Add<HStoreNamedField>(js_function, HObjectAccess::ForPrototypeOrInitialMap(), | |
1964 graph()->GetConstantHole()); | |
1965 Add<HStoreNamedField>( | |
1966 js_function, HObjectAccess::ForSharedFunctionInfoPointer(), shared_info); | |
1967 Add<HStoreNamedField>(js_function, HObjectAccess::ForFunctionContextPointer(), | |
1968 context()); | |
1969 | |
1970 Handle<Code> lazy_builtin( | |
1971 isolate()->builtins()->builtin(Builtins::kCompileLazy)); | |
1972 HConstant* lazy = Add<HConstant>(lazy_builtin); | |
1973 Add<HStoreCodeEntry>(js_function, lazy); | |
1974 Add<HStoreNamedField>(js_function, | |
1975 HObjectAccess::ForNextFunctionLinkPointer(), | |
1976 graph()->GetConstantUndefined()); | |
1977 | |
1978 return js_function; | |
1979 } | |
1980 | |
1981 | |
1982 Handle<Code> FastNewClosureStub::GenerateCode() { | |
1983 return DoGenerateCode(this); | |
1984 } | |
1985 | |
1986 | |
1987 template<> | 1927 template<> |
1988 HValue* CodeStubGraphBuilder<FastNewContextStub>::BuildCodeStub() { | 1928 HValue* CodeStubGraphBuilder<FastNewContextStub>::BuildCodeStub() { |
1989 int length = casted_stub()->slots() + Context::MIN_CONTEXT_SLOTS; | 1929 int length = casted_stub()->slots() + Context::MIN_CONTEXT_SLOTS; |
1990 | 1930 |
1991 // Get the function. | 1931 // Get the function. |
1992 HParameter* function = GetParameter(FastNewContextStub::kFunction); | 1932 HParameter* function = GetParameter(FastNewContextStub::kFunction); |
1993 | 1933 |
1994 // Allocate the context in new space. | 1934 // Allocate the context in new space. |
1995 HAllocate* function_context = Add<HAllocate>( | 1935 HAllocate* function_context = Add<HAllocate>( |
1996 Add<HConstant>(length * kPointerSize + FixedArray::kHeaderSize), | 1936 Add<HConstant>(length * kPointerSize + FixedArray::kHeaderSize), |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2322 return Pop(); | 2262 return Pop(); |
2323 } | 2263 } |
2324 | 2264 |
2325 | 2265 |
2326 Handle<Code> KeyedLoadGenericStub::GenerateCode() { | 2266 Handle<Code> KeyedLoadGenericStub::GenerateCode() { |
2327 return DoGenerateCode(this); | 2267 return DoGenerateCode(this); |
2328 } | 2268 } |
2329 | 2269 |
2330 } // namespace internal | 2270 } // namespace internal |
2331 } // namespace v8 | 2271 } // namespace v8 |
OLD | NEW |