From d834db864f694f550c0a5a9cbfea691e097b9ef0 Mon Sep 17 00:00:00 2001 From: "balazs.kilvady" Date: Mon, 2 Feb 2015 11:44:58 -0800 Subject: [PATCH] MIPS: Use weak cell to embed known map in CompareIC Port 246a749a6f7e7e3a025bb032bc0c643656c9b08f BUG=v8:3663 LOG=N Review URL: https://codereview.chromium.org/881533004 Cr-Commit-Position: refs/heads/master@{#26388} --- src/mips/code-stubs-mips.cc | 6 ++++-- src/mips64/code-stubs-mips64.cc | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index 00d9c3c..b0b3272 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -3856,12 +3856,14 @@ void CompareICStub::GenerateObjects(MacroAssembler* masm) { void CompareICStub::GenerateKnownObjects(MacroAssembler* masm) { Label miss; + Handle cell = Map::WeakCellForMap(known_map_); __ And(a2, a1, a0); __ JumpIfSmi(a2, &miss); + __ GetWeakValue(t0, cell); __ lw(a2, FieldMemOperand(a0, HeapObject::kMapOffset)); __ lw(a3, FieldMemOperand(a1, HeapObject::kMapOffset)); - __ Branch(&miss, ne, a2, Operand(known_map_)); - __ Branch(&miss, ne, a3, Operand(known_map_)); + __ Branch(&miss, ne, a2, Operand(t0)); + __ Branch(&miss, ne, a3, Operand(t0)); __ Ret(USE_DELAY_SLOT); __ subu(v0, a0, a1); diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc index 05bf5f1..efb1fd1 100644 --- a/src/mips64/code-stubs-mips64.cc +++ b/src/mips64/code-stubs-mips64.cc @@ -3895,12 +3895,14 @@ void CompareICStub::GenerateObjects(MacroAssembler* masm) { void CompareICStub::GenerateKnownObjects(MacroAssembler* masm) { Label miss; + Handle cell = Map::WeakCellForMap(known_map_); __ And(a2, a1, a0); __ JumpIfSmi(a2, &miss); + __ GetWeakValue(a4, cell); __ ld(a2, FieldMemOperand(a0, HeapObject::kMapOffset)); __ ld(a3, FieldMemOperand(a1, HeapObject::kMapOffset)); - __ Branch(&miss, ne, a2, Operand(known_map_)); - __ Branch(&miss, ne, a3, Operand(known_map_)); + __ Branch(&miss, ne, a2, Operand(a4)); + __ Branch(&miss, ne, a3, Operand(a4)); __ Ret(USE_DELAY_SLOT); __ dsubu(v0, a0, a1); -- 2.7.4