| 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 2483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2494 | 2494 |
| 2495 | 2495 |
| 2496 MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( | 2496 MaybeObject* KeyedStoreStubCompiler::CompileStoreFastElement( |
| 2497 Map* receiver_map) { | 2497 Map* receiver_map) { |
| 2498 // ----------- S t a t e ------------- | 2498 // ----------- S t a t e ------------- |
| 2499 // -- rax : value | 2499 // -- rax : value |
| 2500 // -- rcx : key | 2500 // -- rcx : key |
| 2501 // -- rdx : receiver | 2501 // -- rdx : receiver |
| 2502 // -- rsp[0] : return address | 2502 // -- rsp[0] : return address |
| 2503 // ----------------------------------- | 2503 // ----------------------------------- |
| 2504 Label miss; | |
| 2505 __ JumpIfSmi(rdx, &miss); | |
| 2506 | |
| 2507 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; | 2504 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; |
| 2508 MaybeObject* maybe_stub = | 2505 MaybeObject* maybe_stub = |
| 2509 KeyedStoreFastElementStub(is_js_array).TryGetCode(); | 2506 KeyedStoreFastElementStub(is_js_array).TryGetCode(); |
| 2510 Code* stub; | 2507 Code* stub; |
| 2511 if (!maybe_stub->To(&stub)) return maybe_stub; | 2508 if (!maybe_stub->To(&stub)) return maybe_stub; |
| 2512 __ DispatchMap(rdx, | 2509 __ DispatchMap(rdx, |
| 2513 Handle<Map>(receiver_map), | 2510 Handle<Map>(receiver_map), |
| 2514 Handle<Code>(stub), | 2511 Handle<Code>(stub), |
| 2515 DO_SMI_CHECK); | 2512 DO_SMI_CHECK); |
| 2516 | 2513 |
| 2517 __ bind(&miss); | |
| 2518 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); | 2514 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); |
| 2519 __ jmp(ic, RelocInfo::CODE_TARGET); | 2515 __ jmp(ic, RelocInfo::CODE_TARGET); |
| 2520 | 2516 |
| 2521 // Return the generated code. | 2517 // Return the generated code. |
| 2522 return GetCode(NORMAL, NULL); | 2518 return GetCode(NORMAL, NULL); |
| 2523 } | 2519 } |
| 2524 | 2520 |
| 2525 | 2521 |
| 2526 MaybeObject* KeyedStoreStubCompiler::CompileStoreMegamorphic( | 2522 MaybeObject* KeyedStoreStubCompiler::CompileStoreMegamorphic( |
| 2527 MapList* receiver_maps, | 2523 MapList* receiver_maps, |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2956 return GetCode(CALLBACKS, name); | 2952 return GetCode(CALLBACKS, name); |
| 2957 } | 2953 } |
| 2958 | 2954 |
| 2959 | 2955 |
| 2960 MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { | 2956 MaybeObject* KeyedLoadStubCompiler::CompileLoadFastElement(Map* receiver_map) { |
| 2961 // ----------- S t a t e ------------- | 2957 // ----------- S t a t e ------------- |
| 2962 // -- rax : key | 2958 // -- rax : key |
| 2963 // -- rdx : receiver | 2959 // -- rdx : receiver |
| 2964 // -- rsp[0] : return address | 2960 // -- rsp[0] : return address |
| 2965 // ----------------------------------- | 2961 // ----------------------------------- |
| 2966 Label miss; | |
| 2967 __ JumpIfSmi(rdx, &miss); | |
| 2968 | |
| 2969 MaybeObject* maybe_stub = KeyedLoadFastElementStub().TryGetCode(); | 2962 MaybeObject* maybe_stub = KeyedLoadFastElementStub().TryGetCode(); |
| 2970 Code* stub; | 2963 Code* stub; |
| 2971 if (!maybe_stub->To(&stub)) return maybe_stub; | 2964 if (!maybe_stub->To(&stub)) return maybe_stub; |
| 2972 __ DispatchMap(rdx, | 2965 __ DispatchMap(rdx, |
| 2973 Handle<Map>(receiver_map), | 2966 Handle<Map>(receiver_map), |
| 2974 Handle<Code>(stub), | 2967 Handle<Code>(stub), |
| 2975 DO_SMI_CHECK); | 2968 DO_SMI_CHECK); |
| 2976 | 2969 |
| 2977 __ bind(&miss); | |
| 2978 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Miss(); | 2970 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Miss(); |
| 2979 __ jmp(ic, RelocInfo::CODE_TARGET); | 2971 __ jmp(ic, RelocInfo::CODE_TARGET); |
| 2980 | 2972 |
| 2981 // Return the generated code. | 2973 // Return the generated code. |
| 2982 return GetCode(NORMAL, NULL); | 2974 return GetCode(NORMAL, NULL); |
| 2983 } | 2975 } |
| 2984 | 2976 |
| 2985 | 2977 |
| 2986 MaybeObject* KeyedLoadStubCompiler::CompileLoadMegamorphic( | 2978 MaybeObject* KeyedLoadStubCompiler::CompileLoadMegamorphic( |
| 2987 MapList* receiver_maps, | 2979 MapList* receiver_maps, |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3596 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); | 3588 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); |
| 3597 __ jmp(ic_force_generic, RelocInfo::CODE_TARGET); | 3589 __ jmp(ic_force_generic, RelocInfo::CODE_TARGET); |
| 3598 } | 3590 } |
| 3599 | 3591 |
| 3600 | 3592 |
| 3601 #undef __ | 3593 #undef __ |
| 3602 | 3594 |
| 3603 } } // namespace v8::internal | 3595 } } // namespace v8::internal |
| 3604 | 3596 |
| 3605 #endif // V8_TARGET_ARCH_X64 | 3597 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |