From: balazs.kilvady Date: Wed, 3 Dec 2014 17:37:01 +0000 (-0800) Subject: MIPS: CheckPrototypes uses weak cells to embed maps. X-Git-Tag: upstream/4.7.83~5395 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e7efc885d406094b0c5e81d1ca601fff9ed240d0;p=platform%2Fupstream%2Fv8.git MIPS: CheckPrototypes uses weak cells to embed maps. Port 062a032f50291ce181462226ff41b4ef9b11deba BUG=v8:3629 LOG=N Review URL: https://codereview.chromium.org/777673002 Cr-Commit-Position: refs/heads/master@{#25645} --- diff --git a/src/ic/mips/handler-compiler-mips.cc b/src/ic/mips/handler-compiler-mips.cc index 8a7b6aa..2a8d3b8 100644 --- a/src/ic/mips/handler-compiler-mips.cc +++ b/src/ic/mips/handler-compiler-mips.cc @@ -412,11 +412,11 @@ Register PropertyHandlerCompiler::CheckPrototypes( __ lw(reg, FieldMemOperand(scratch1, Map::kPrototypeOffset)); } else { Register map_reg = scratch1; + __ lw(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); if (depth != 1 || check == CHECK_ALL_MAPS) { - // CheckMap implicitly loads the map of |reg| into |map_reg|. - __ CheckMap(reg, map_reg, current_map, miss, DONT_DO_SMI_CHECK); - } else { - __ lw(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); + Handle cell = Map::WeakCellForMap(current_map); + __ CmpWeakValue(scratch2, map_reg, cell); + __ Branch(miss, ne, scratch2, Operand(zero_reg)); } // Check access rights to the global object. This has to happen after @@ -447,7 +447,10 @@ Register PropertyHandlerCompiler::CheckPrototypes( if (depth != 0 || check == CHECK_ALL_MAPS) { // Check the holder map. - __ CheckMap(reg, scratch1, current_map, miss, DONT_DO_SMI_CHECK); + __ lw(scratch1, FieldMemOperand(reg, HeapObject::kMapOffset)); + Handle cell = Map::WeakCellForMap(current_map); + __ CmpWeakValue(scratch2, scratch1, cell); + __ Branch(miss, ne, scratch2, Operand(zero_reg)); } // Perform security check for access to the global object. diff --git a/src/ic/mips64/handler-compiler-mips64.cc b/src/ic/mips64/handler-compiler-mips64.cc index d659db2..5e626c3 100644 --- a/src/ic/mips64/handler-compiler-mips64.cc +++ b/src/ic/mips64/handler-compiler-mips64.cc @@ -412,11 +412,11 @@ Register PropertyHandlerCompiler::CheckPrototypes( __ ld(reg, FieldMemOperand(scratch1, Map::kPrototypeOffset)); } else { Register map_reg = scratch1; + __ ld(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); if (depth != 1 || check == CHECK_ALL_MAPS) { - // CheckMap implicitly loads the map of |reg| into |map_reg|. - __ CheckMap(reg, map_reg, current_map, miss, DONT_DO_SMI_CHECK); - } else { - __ ld(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); + Handle cell = Map::WeakCellForMap(current_map); + __ CmpWeakValue(scratch2, map_reg, cell); + __ Branch(miss, ne, scratch2, Operand(zero_reg)); } // Check access rights to the global object. This has to happen after @@ -447,7 +447,10 @@ Register PropertyHandlerCompiler::CheckPrototypes( if (depth != 0 || check == CHECK_ALL_MAPS) { // Check the holder map. - __ CheckMap(reg, scratch1, current_map, miss, DONT_DO_SMI_CHECK); + __ ld(scratch1, FieldMemOperand(reg, HeapObject::kMapOffset)); + Handle cell = Map::WeakCellForMap(current_map); + __ CmpWeakValue(scratch2, scratch1, cell); + __ Branch(miss, ne, scratch2, Operand(zero_reg)); } // Perform security check for access to the global object.