| Index: src/x64/ic-x64.cc
|
| ===================================================================
|
| --- src/x64/ic-x64.cc (revision 2476)
|
| +++ src/x64/ic-x64.cc (working copy)
|
| @@ -43,11 +43,11 @@
|
|
|
|
|
| void KeyedLoadIC::ClearInlinedVersion(Address address) {
|
| - UNIMPLEMENTED();
|
| + // TODO(X64): Implement this when LoadIC is enabled.
|
| }
|
|
|
| void KeyedStoreIC::ClearInlinedVersion(Address address) {
|
| - UNIMPLEMENTED();
|
| + // TODO(X64): Implement this when LoadIC is enabled.
|
| }
|
|
|
| void KeyedStoreIC::RestoreInlinedVersion(Address address) {
|
| @@ -78,22 +78,32 @@
|
|
|
|
|
| void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC0AB)); // Debugging aid.
|
| + // ----------- S t a t e -------------
|
| + // -- rsp[0] : return address
|
| + // -- rsp[8] : name
|
| + // -- rsp[16] : receiver
|
| + // -----------------------------------
|
| +
|
| + Generate(masm, ExternalReference(Runtime::kKeyedGetProperty));
|
| }
|
|
|
| void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC1AB)); // Debugging aid.
|
| + // ----------- S t a t e -------------
|
| + // -- rsp[0] : return address
|
| + // -- rsp[8] : name
|
| + // -- rsp[16] : receiver
|
| + // -----------------------------------
|
| +
|
| + Generate(masm, ExternalReference(Runtime::kKeyedGetProperty));
|
| }
|
|
|
| bool KeyedLoadIC::PatchInlinedLoad(Address address, Object* map) {
|
| - UNIMPLEMENTED();
|
| + // Never patch the map in the map check, so the check always fails.
|
| return false;
|
| }
|
|
|
| bool KeyedStoreIC::PatchInlinedStore(Address address, Object* map) {
|
| - UNIMPLEMENTED();
|
| + // Never patch the map in the map check, so the check always fails.
|
| return false;
|
| }
|
|
|
| @@ -163,13 +173,11 @@
|
| }
|
|
|
| void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC2AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kKeyedStoreIC_Miss)));
|
| }
|
|
|
| void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC3AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kKeyedStoreIC_Miss)));
|
| }
|
|
|
| Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
|
| @@ -228,20 +236,24 @@
|
| __ InvokeFunction(rdi, actual, JUMP_FUNCTION);
|
| }
|
|
|
| -void CallIC::GenerateMegamorphic(MacroAssembler* a, int b) {
|
| - UNIMPLEMENTED();
|
| +void CallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
| + // Cache miss: Jump to runtime.
|
| + Generate(masm, argc, ExternalReference(IC_Utility(kCallIC_Miss)));
|
| }
|
|
|
| -void CallIC::GenerateNormal(MacroAssembler* a, int b) {
|
| - UNIMPLEMENTED();
|
| +void CallIC::GenerateNormal(MacroAssembler* masm, int argc) {
|
| + // Cache miss: Jump to runtime.
|
| + Generate(masm, argc, ExternalReference(IC_Utility(kCallIC_Miss)));
|
| }
|
|
|
|
|
| +// The offset from the inlined patch site to the start of the
|
| +// inlined load instruction.
|
| const int LoadIC::kOffsetToLoadInstruction = 20;
|
|
|
|
|
| void LoadIC::ClearInlinedVersion(Address address) {
|
| - UNIMPLEMENTED();
|
| + // TODO(X64): Implement this when LoadIC is enabled.
|
| }
|
|
|
|
|
| @@ -266,33 +278,27 @@
|
|
|
|
|
| void LoadIC::GenerateArrayLength(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC4AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
| }
|
|
|
| void LoadIC::GenerateFunctionPrototype(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC5AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
| }
|
|
|
| void LoadIC::GenerateMegamorphic(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC6AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
| }
|
|
|
| void LoadIC::GenerateMiss(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC7AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
| }
|
|
|
| void LoadIC::GenerateNormal(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC8AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
| }
|
|
|
| void LoadIC::GenerateStringLength(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xC9AB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
| }
|
|
|
| bool LoadIC::PatchInlinedLoad(Address address, Object* map, int index) {
|
| @@ -319,13 +325,11 @@
|
| }
|
|
|
| void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xCAAB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
|
| }
|
|
|
| void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
| - masm->int3(); // UNIMPLEMENTED.
|
| - masm->movq(kScratchRegister, Immediate(0xCBAB)); // Debugging aid.
|
| + Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
|
| }
|
|
|
|
|
|
|