| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 Label number, non_number, non_string, boolean, probe, miss; | 430 Label number, non_number, non_string, boolean, probe, miss; |
| 431 | 431 |
| 432 // Get the receiver of the function from the stack; 1 ~ return address. | 432 // Get the receiver of the function from the stack; 1 ~ return address. |
| 433 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); | 433 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); |
| 434 // Get the name of the function from the stack; 2 ~ return address, receiver | 434 // Get the name of the function from the stack; 2 ~ return address, receiver |
| 435 __ mov(ecx, Operand(esp, (argc + 2) * kPointerSize)); | 435 __ mov(ecx, Operand(esp, (argc + 2) * kPointerSize)); |
| 436 | 436 |
| 437 // Probe the stub cache. | 437 // Probe the stub cache. |
| 438 Code::Flags flags = | 438 Code::Flags flags = |
| 439 Code::ComputeFlags(Code::CALL_IC, NOT_IN_LOOP, MONOMORPHIC, NORMAL, argc); | 439 Code::ComputeFlags(Code::CALL_IC, NOT_IN_LOOP, MONOMORPHIC, NORMAL, argc); |
| 440 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx); | 440 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx, eax); |
| 441 | 441 |
| 442 // If the stub cache probing failed, the receiver might be a value. | 442 // If the stub cache probing failed, the receiver might be a value. |
| 443 // For value objects, we use the map of the prototype objects for | 443 // For value objects, we use the map of the prototype objects for |
| 444 // the corresponding JSValue for the cache and that is what we need | 444 // the corresponding JSValue for the cache and that is what we need |
| 445 // to probe. | 445 // to probe. |
| 446 // | 446 // |
| 447 // Check for number. | 447 // Check for number. |
| 448 __ test(edx, Immediate(kSmiTagMask)); | 448 __ test(edx, Immediate(kSmiTagMask)); |
| 449 __ j(zero, &number, not_taken); | 449 __ j(zero, &number, not_taken); |
| 450 __ CmpObjectType(edx, HEAP_NUMBER_TYPE, ebx); | 450 __ CmpObjectType(edx, HEAP_NUMBER_TYPE, ebx); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 467 __ cmp(edx, Factory::true_value()); | 467 __ cmp(edx, Factory::true_value()); |
| 468 __ j(equal, &boolean, not_taken); | 468 __ j(equal, &boolean, not_taken); |
| 469 __ cmp(edx, Factory::false_value()); | 469 __ cmp(edx, Factory::false_value()); |
| 470 __ j(not_equal, &miss, taken); | 470 __ j(not_equal, &miss, taken); |
| 471 __ bind(&boolean); | 471 __ bind(&boolean); |
| 472 StubCompiler::GenerateLoadGlobalFunctionPrototype( | 472 StubCompiler::GenerateLoadGlobalFunctionPrototype( |
| 473 masm, Context::BOOLEAN_FUNCTION_INDEX, edx); | 473 masm, Context::BOOLEAN_FUNCTION_INDEX, edx); |
| 474 | 474 |
| 475 // Probe the stub cache for the value object. | 475 // Probe the stub cache for the value object. |
| 476 __ bind(&probe); | 476 __ bind(&probe); |
| 477 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx); | 477 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx, no_reg); |
| 478 | 478 |
| 479 // Cache miss: Jump to runtime. | 479 // Cache miss: Jump to runtime. |
| 480 __ bind(&miss); | 480 __ bind(&miss); |
| 481 Generate(masm, argc, ExternalReference(IC_Utility(kCallIC_Miss))); | 481 Generate(masm, argc, ExternalReference(IC_Utility(kCallIC_Miss))); |
| 482 } | 482 } |
| 483 | 483 |
| 484 | 484 |
| 485 static void GenerateNormalHelper(MacroAssembler* masm, | 485 static void GenerateNormalHelper(MacroAssembler* masm, |
| 486 int argc, | 486 int argc, |
| 487 bool is_global_object, | 487 bool is_global_object, |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 // -- esp[0] : return address | 641 // -- esp[0] : return address |
| 642 // -- esp[4] : receiver | 642 // -- esp[4] : receiver |
| 643 // ----------------------------------- | 643 // ----------------------------------- |
| 644 | 644 |
| 645 __ mov(eax, Operand(esp, kPointerSize)); | 645 __ mov(eax, Operand(esp, kPointerSize)); |
| 646 | 646 |
| 647 // Probe the stub cache. | 647 // Probe the stub cache. |
| 648 Code::Flags flags = Code::ComputeFlags(Code::LOAD_IC, | 648 Code::Flags flags = Code::ComputeFlags(Code::LOAD_IC, |
| 649 NOT_IN_LOOP, | 649 NOT_IN_LOOP, |
| 650 MONOMORPHIC); | 650 MONOMORPHIC); |
| 651 StubCache::GenerateProbe(masm, flags, eax, ecx, ebx); | 651 StubCache::GenerateProbe(masm, flags, eax, ecx, ebx, edx); |
| 652 | 652 |
| 653 // Cache miss: Jump to runtime. | 653 // Cache miss: Jump to runtime. |
| 654 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); | 654 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); |
| 655 } | 655 } |
| 656 | 656 |
| 657 | 657 |
| 658 void LoadIC::GenerateNormal(MacroAssembler* masm) { | 658 void LoadIC::GenerateNormal(MacroAssembler* masm) { |
| 659 // ----------- S t a t e ------------- | 659 // ----------- S t a t e ------------- |
| 660 // -- ecx : name | 660 // -- ecx : name |
| 661 // -- esp[0] : return address | 661 // -- esp[0] : return address |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 871 // -- ecx : name | 871 // -- ecx : name |
| 872 // -- esp[0] : return address | 872 // -- esp[0] : return address |
| 873 // -- esp[4] : receiver | 873 // -- esp[4] : receiver |
| 874 // ----------------------------------- | 874 // ----------------------------------- |
| 875 | 875 |
| 876 // Get the receiver from the stack and probe the stub cache. | 876 // Get the receiver from the stack and probe the stub cache. |
| 877 __ mov(edx, Operand(esp, 4)); | 877 __ mov(edx, Operand(esp, 4)); |
| 878 Code::Flags flags = Code::ComputeFlags(Code::STORE_IC, | 878 Code::Flags flags = Code::ComputeFlags(Code::STORE_IC, |
| 879 NOT_IN_LOOP, | 879 NOT_IN_LOOP, |
| 880 MONOMORPHIC); | 880 MONOMORPHIC); |
| 881 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx); | 881 StubCache::GenerateProbe(masm, flags, edx, ecx, ebx, no_reg); |
| 882 | 882 |
| 883 // Cache miss: Jump to runtime. | 883 // Cache miss: Jump to runtime. |
| 884 Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss))); | 884 Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss))); |
| 885 } | 885 } |
| 886 | 886 |
| 887 | 887 |
| 888 void StoreIC::GenerateExtendStorage(MacroAssembler* masm) { | 888 void StoreIC::GenerateExtendStorage(MacroAssembler* masm) { |
| 889 // ----------- S t a t e ------------- | 889 // ----------- S t a t e ------------- |
| 890 // -- eax : value | 890 // -- eax : value |
| 891 // -- ecx : transition map | 891 // -- ecx : transition map |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 966 | 966 |
| 967 // Do tail-call to runtime routine. | 967 // Do tail-call to runtime routine. |
| 968 __ TailCallRuntime( | 968 __ TailCallRuntime( |
| 969 ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3); | 969 ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3); |
| 970 } | 970 } |
| 971 | 971 |
| 972 #undef __ | 972 #undef __ |
| 973 | 973 |
| 974 | 974 |
| 975 } } // namespace v8::internal | 975 } } // namespace v8::internal |
| OLD | NEW |