OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 optimization, | 842 optimization, |
843 argc, | 843 argc, |
844 receiver, | 844 receiver, |
845 true); | 845 true); |
846 } | 846 } |
847 | 847 |
848 | 848 |
849 class CallInterceptorCompiler BASE_EMBEDDED { | 849 class CallInterceptorCompiler BASE_EMBEDDED { |
850 public: | 850 public: |
851 CallInterceptorCompiler(CallStubCompiler* stub_compiler, | 851 CallInterceptorCompiler(CallStubCompiler* stub_compiler, |
852 const ParameterCount& arguments, | |
853 Register name) | 852 Register name) |
854 : stub_compiler_(stub_compiler), | 853 : stub_compiler_(stub_compiler), |
855 arguments_(arguments), | |
856 name_(name) {} | 854 name_(name) {} |
857 | 855 |
858 void Compile(MacroAssembler* masm, | 856 void Compile(MacroAssembler* masm, |
859 Handle<JSObject> object, | 857 Handle<JSObject> object, |
860 Handle<JSObject> holder, | 858 Handle<JSObject> holder, |
861 Handle<Name> name, | 859 Handle<Name> name, |
862 LookupResult* lookup, | 860 LookupResult* lookup, |
863 Register receiver, | 861 Register receiver, |
864 Register scratch1, | 862 Register scratch1, |
865 Register scratch2, | 863 Register scratch2, |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 __ pop(name_); | 975 __ pop(name_); |
978 __ pop(holder); | 976 __ pop(holder); |
979 __ pop(receiver); | 977 __ pop(receiver); |
980 } | 978 } |
981 // If interceptor returns no-result sentinel, call the constant function. | 979 // If interceptor returns no-result sentinel, call the constant function. |
982 __ LoadRoot(scratch, Heap::kNoInterceptorResultSentinelRootIndex); | 980 __ LoadRoot(scratch, Heap::kNoInterceptorResultSentinelRootIndex); |
983 __ Branch(interceptor_succeeded, ne, v0, Operand(scratch)); | 981 __ Branch(interceptor_succeeded, ne, v0, Operand(scratch)); |
984 } | 982 } |
985 | 983 |
986 CallStubCompiler* stub_compiler_; | 984 CallStubCompiler* stub_compiler_; |
987 const ParameterCount& arguments_; | |
988 Register name_; | 985 Register name_; |
989 }; | 986 }; |
990 | 987 |
991 | 988 |
992 void StubCompiler::GenerateTailCall(MacroAssembler* masm, Handle<Code> code) { | 989 void StubCompiler::GenerateTailCall(MacroAssembler* masm, Handle<Code> code) { |
993 __ Jump(code, RelocInfo::CODE_TARGET); | 990 __ Jump(code, RelocInfo::CODE_TARGET); |
994 } | 991 } |
995 | 992 |
996 | 993 |
997 #undef __ | 994 #undef __ |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1546 GenerateNameCheck(name, &miss); | 1543 GenerateNameCheck(name, &miss); |
1547 | 1544 |
1548 // Get the number of arguments. | 1545 // Get the number of arguments. |
1549 const int argc = arguments().immediate(); | 1546 const int argc = arguments().immediate(); |
1550 LookupResult lookup(isolate()); | 1547 LookupResult lookup(isolate()); |
1551 LookupPostInterceptor(holder, name, &lookup); | 1548 LookupPostInterceptor(holder, name, &lookup); |
1552 | 1549 |
1553 // Get the receiver from the stack. | 1550 // Get the receiver from the stack. |
1554 __ lw(a1, MemOperand(sp, argc * kPointerSize)); | 1551 __ lw(a1, MemOperand(sp, argc * kPointerSize)); |
1555 | 1552 |
1556 CallInterceptorCompiler compiler(this, arguments(), a2); | 1553 CallInterceptorCompiler compiler(this, a2); |
1557 compiler.Compile(masm(), object, holder, name, &lookup, a1, a3, t0, a0, | 1554 compiler.Compile(masm(), object, holder, name, &lookup, a1, a3, t0, a0, |
1558 &miss); | 1555 &miss); |
1559 | 1556 |
1560 // Move returned value, the function to call, to a1. | 1557 // Move returned value, the function to call, to a1. |
1561 __ mov(a1, v0); | 1558 __ mov(a1, v0); |
1562 // Restore receiver. | 1559 // Restore receiver. |
1563 __ lw(a0, MemOperand(sp, argc * kPointerSize)); | 1560 __ lw(a0, MemOperand(sp, argc * kPointerSize)); |
1564 | 1561 |
1565 GenerateJumpFunction(object, a1, &miss); | 1562 GenerateJumpFunction(object, a1, &miss); |
1566 | 1563 |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1955 // ----------------------------------- | 1952 // ----------------------------------- |
1956 TailCallBuiltin(masm, Builtins::kKeyedLoadIC_Miss); | 1953 TailCallBuiltin(masm, Builtins::kKeyedLoadIC_Miss); |
1957 } | 1954 } |
1958 | 1955 |
1959 | 1956 |
1960 #undef __ | 1957 #undef __ |
1961 | 1958 |
1962 } } // namespace v8::internal | 1959 } } // namespace v8::internal |
1963 | 1960 |
1964 #endif // V8_TARGET_ARCH_MIPS | 1961 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |