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 2569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2580 // Handle store cache miss. | 2580 // Handle store cache miss. |
2581 __ bind(&miss); | 2581 __ bind(&miss); |
2582 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); | 2582 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); |
2583 __ jmp(ic, RelocInfo::CODE_TARGET); | 2583 __ jmp(ic, RelocInfo::CODE_TARGET); |
2584 | 2584 |
2585 // Return the generated code. | 2585 // Return the generated code. |
2586 return GetCode(CALLBACKS, name); | 2586 return GetCode(CALLBACKS, name); |
2587 } | 2587 } |
2588 | 2588 |
2589 | 2589 |
2590 Handle<Code> StoreStubCompiler::CompileStoreViaSetter( | |
2591 Handle<JSObject> receiver, | |
2592 Handle<JSFunction> setter, | |
2593 Handle<String> name) { | |
2594 // ----------- S t a t e ------------- | |
2595 // -- eax : value | |
2596 // -- ecx : name | |
2597 // -- edx : receiver | |
2598 // -- esp[0] : return address | |
2599 // ----------------------------------- | |
2600 Label miss; | |
2601 | |
2602 // Check that the map of the object hasn't changed. | |
2603 __ CheckMap(edx, Handle<Map>(receiver->map()), &miss, DO_SMI_CHECK, | |
Vyacheslav Egorov (Google)
2012/06/17 10:17:09
Is there any reason why we are not giving benefits
| |
2604 ALLOW_ELEMENT_TRANSITION_MAPS); | |
2605 | |
2606 { | |
2607 FrameScope scope(masm(), StackFrame::INTERNAL); | |
2608 | |
2609 // Save value register, so we can restore it later. | |
2610 __ push(eax); | |
2611 | |
2612 // Call the JavaScript getter with the receiver and the value on the stack. | |
Vyacheslav Egorov (Google)
2012/06/17 10:17:09
s/getter/setter/
| |
2613 __ push(edx); | |
2614 __ push(eax); | |
2615 ParameterCount actual(1); | |
2616 __ InvokeFunction(setter, actual, CALL_FUNCTION, NullCallWrapper(), | |
2617 CALL_AS_METHOD); | |
2618 | |
2619 // We have to return the passed value, not the return value of the setter. | |
2620 __ pop(eax); | |
2621 | |
2622 // Restore context register. | |
2623 __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); | |
2624 } | |
2625 __ ret(0); | |
2626 | |
2627 __ bind(&miss); | |
2628 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); | |
2629 __ jmp(ic, RelocInfo::CODE_TARGET); | |
2630 | |
2631 // Return the generated code. | |
2632 return GetCode(CALLBACKS, name); | |
2633 } | |
2634 | |
2635 | |
2590 Handle<Code> StoreStubCompiler::CompileStoreInterceptor( | 2636 Handle<Code> StoreStubCompiler::CompileStoreInterceptor( |
2591 Handle<JSObject> receiver, | 2637 Handle<JSObject> receiver, |
2592 Handle<String> name) { | 2638 Handle<String> name) { |
2593 // ----------- S t a t e ------------- | 2639 // ----------- S t a t e ------------- |
2594 // -- eax : value | 2640 // -- eax : value |
2595 // -- ecx : name | 2641 // -- ecx : name |
2596 // -- edx : receiver | 2642 // -- edx : receiver |
2597 // -- esp[0] : return address | 2643 // -- esp[0] : return address |
2598 // ----------------------------------- | 2644 // ----------------------------------- |
2599 Label miss; | 2645 Label miss; |
(...skipping 1592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4192 __ jmp(ic_slow, RelocInfo::CODE_TARGET); | 4238 __ jmp(ic_slow, RelocInfo::CODE_TARGET); |
4193 } | 4239 } |
4194 } | 4240 } |
4195 | 4241 |
4196 | 4242 |
4197 #undef __ | 4243 #undef __ |
4198 | 4244 |
4199 } } // namespace v8::internal | 4245 } } // namespace v8::internal |
4200 | 4246 |
4201 #endif // V8_TARGET_ARCH_IA32 | 4247 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |