| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 } | 740 } |
| 741 | 741 |
| 742 // Invoke function. | 742 // Invoke function. |
| 743 if (can_do_fast_api_call) { | 743 if (can_do_fast_api_call) { |
| 744 GenerateFastApiDirectCall(masm, optimization, arguments_.immediate()); | 744 GenerateFastApiDirectCall(masm, optimization, arguments_.immediate()); |
| 745 } else { | 745 } else { |
| 746 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_) | 746 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_) |
| 747 ? CALL_AS_FUNCTION | 747 ? CALL_AS_FUNCTION |
| 748 : CALL_AS_METHOD; | 748 : CALL_AS_METHOD; |
| 749 __ InvokeFunction(optimization.constant_function(), arguments_, | 749 __ InvokeFunction(optimization.constant_function(), arguments_, |
| 750 JUMP_FUNCTION, call_kind); | 750 JUMP_FUNCTION, NullCallWrapper(), call_kind); |
| 751 } | 751 } |
| 752 | 752 |
| 753 // Deferred code for fast API call case---clean preallocated space. | 753 // Deferred code for fast API call case---clean preallocated space. |
| 754 if (can_do_fast_api_call) { | 754 if (can_do_fast_api_call) { |
| 755 __ bind(&miss_cleanup); | 755 __ bind(&miss_cleanup); |
| 756 FreeSpaceForFastApiCall(masm); | 756 FreeSpaceForFastApiCall(masm); |
| 757 __ Branch(miss_label); | 757 __ Branch(miss_label); |
| 758 } | 758 } |
| 759 | 759 |
| 760 // Invoke a regular function. | 760 // Invoke a regular function. |
| (...skipping 1166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1927 generator.GenerateFast(masm()); | 1927 generator.GenerateFast(masm()); |
| 1928 __ Drop(argc + 1); | 1928 __ Drop(argc + 1); |
| 1929 __ Ret(); | 1929 __ Ret(); |
| 1930 | 1930 |
| 1931 StubRuntimeCallHelper call_helper; | 1931 StubRuntimeCallHelper call_helper; |
| 1932 generator.GenerateSlow(masm(), call_helper); | 1932 generator.GenerateSlow(masm(), call_helper); |
| 1933 | 1933 |
| 1934 // Tail call the full function. We do not have to patch the receiver | 1934 // Tail call the full function. We do not have to patch the receiver |
| 1935 // because the function makes no use of it. | 1935 // because the function makes no use of it. |
| 1936 __ bind(&slow); | 1936 __ bind(&slow); |
| 1937 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD); | 1937 __ InvokeFunction( |
| 1938 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 1938 | 1939 |
| 1939 __ bind(&miss); | 1940 __ bind(&miss); |
| 1940 // a2: function name. | 1941 // a2: function name. |
| 1941 GenerateMissBranch(); | 1942 GenerateMissBranch(); |
| 1942 | 1943 |
| 1943 // Return the generated code. | 1944 // Return the generated code. |
| 1944 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); | 1945 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); |
| 1945 } | 1946 } |
| 1946 | 1947 |
| 1947 | 1948 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2060 __ Drop(argc + 1); | 2061 __ Drop(argc + 1); |
| 2061 __ Ret(); | 2062 __ Ret(); |
| 2062 | 2063 |
| 2063 __ bind(&wont_fit_smi); | 2064 __ bind(&wont_fit_smi); |
| 2064 // Restore FCSR and fall to slow case. | 2065 // Restore FCSR and fall to slow case. |
| 2065 __ ctc1(a3, FCSR); | 2066 __ ctc1(a3, FCSR); |
| 2066 | 2067 |
| 2067 __ bind(&slow); | 2068 __ bind(&slow); |
| 2068 // Tail call the full function. We do not have to patch the receiver | 2069 // Tail call the full function. We do not have to patch the receiver |
| 2069 // because the function makes no use of it. | 2070 // because the function makes no use of it. |
| 2070 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD); | 2071 __ InvokeFunction( |
| 2072 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2071 | 2073 |
| 2072 __ bind(&miss); | 2074 __ bind(&miss); |
| 2073 // a2: function name. | 2075 // a2: function name. |
| 2074 GenerateMissBranch(); | 2076 GenerateMissBranch(); |
| 2075 | 2077 |
| 2076 // Return the generated code. | 2078 // Return the generated code. |
| 2077 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); | 2079 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); |
| 2078 } | 2080 } |
| 2079 | 2081 |
| 2080 | 2082 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2160 __ LoadRoot(t2, Heap::kHeapNumberMapRootIndex); | 2162 __ LoadRoot(t2, Heap::kHeapNumberMapRootIndex); |
| 2161 __ AllocateHeapNumber(v0, t0, t1, t2, &slow); | 2163 __ AllocateHeapNumber(v0, t0, t1, t2, &slow); |
| 2162 __ sw(a1, FieldMemOperand(v0, HeapNumber::kExponentOffset)); | 2164 __ sw(a1, FieldMemOperand(v0, HeapNumber::kExponentOffset)); |
| 2163 __ sw(a3, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); | 2165 __ sw(a3, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); |
| 2164 __ Drop(argc + 1); | 2166 __ Drop(argc + 1); |
| 2165 __ Ret(); | 2167 __ Ret(); |
| 2166 | 2168 |
| 2167 // Tail call the full function. We do not have to patch the receiver | 2169 // Tail call the full function. We do not have to patch the receiver |
| 2168 // because the function makes no use of it. | 2170 // because the function makes no use of it. |
| 2169 __ bind(&slow); | 2171 __ bind(&slow); |
| 2170 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD); | 2172 __ InvokeFunction( |
| 2173 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2171 | 2174 |
| 2172 __ bind(&miss); | 2175 __ bind(&miss); |
| 2173 // a2: function name. | 2176 // a2: function name. |
| 2174 GenerateMissBranch(); | 2177 GenerateMissBranch(); |
| 2175 | 2178 |
| 2176 // Return the generated code. | 2179 // Return the generated code. |
| 2177 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); | 2180 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); |
| 2178 } | 2181 } |
| 2179 | 2182 |
| 2180 | 2183 |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2339 // Calling non-strict non-builtins with a value as the receiver | 2342 // Calling non-strict non-builtins with a value as the receiver |
| 2340 // requires boxing. | 2343 // requires boxing. |
| 2341 __ jmp(&miss); | 2344 __ jmp(&miss); |
| 2342 } | 2345 } |
| 2343 break; | 2346 break; |
| 2344 } | 2347 } |
| 2345 | 2348 |
| 2346 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) | 2349 CallKind call_kind = CallICBase::Contextual::decode(extra_state_) |
| 2347 ? CALL_AS_FUNCTION | 2350 ? CALL_AS_FUNCTION |
| 2348 : CALL_AS_METHOD; | 2351 : CALL_AS_METHOD; |
| 2349 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, call_kind); | 2352 __ InvokeFunction( |
| 2353 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), call_kind); |
| 2350 | 2354 |
| 2351 // Handle call cache miss. | 2355 // Handle call cache miss. |
| 2352 __ bind(&miss); | 2356 __ bind(&miss); |
| 2353 | 2357 |
| 2354 GenerateMissBranch(); | 2358 GenerateMissBranch(); |
| 2355 | 2359 |
| 2356 // Return the generated code. | 2360 // Return the generated code. |
| 2357 return GetCode(function); | 2361 return GetCode(function); |
| 2358 } | 2362 } |
| 2359 | 2363 |
| (...skipping 1945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4305 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); | 4309 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); |
| 4306 __ Jump(ic_miss, RelocInfo::CODE_TARGET); | 4310 __ Jump(ic_miss, RelocInfo::CODE_TARGET); |
| 4307 } | 4311 } |
| 4308 | 4312 |
| 4309 | 4313 |
| 4310 #undef __ | 4314 #undef __ |
| 4311 | 4315 |
| 4312 } } // namespace v8::internal | 4316 } } // namespace v8::internal |
| 4313 | 4317 |
| 4314 #endif // V8_TARGET_ARCH_MIPS | 4318 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |