From d6e54c5f58dcdaa57196d3e482e53f95541fcf5e Mon Sep 17 00:00:00 2001 From: "palfia@homejinni.com" Date: Mon, 22 Jul 2013 18:16:44 +0000 Subject: [PATCH] MIPS: Prefill pre-allocated memory of folded allocation with one pointer fillers when heap verifier is on. Port r15798 (3b92806) BUG= Review URL: https://codereview.chromium.org/19485006 Patch from Balazs Kilvady . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15809 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/lithium-codegen-mips.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index 65b4a57..53f76f1 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -5323,6 +5323,25 @@ void LCodeGen::DoAllocate(LAllocate* instr) { } __ bind(deferred->exit()); + + if (instr->hydrogen()->MustPrefillWithFiller()) { + if (instr->size()->IsConstantOperand()) { + int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); + __ li(scratch, Operand(size)); + } else { + scratch = ToRegister(instr->size()); + } + __ Subu(scratch, scratch, Operand(kPointerSize)); + __ Subu(result, result, Operand(kHeapObjectTag)); + Label loop; + __ bind(&loop); + __ li(scratch2, Operand(isolate()->factory()->one_pointer_filler_map())); + __ Addu(at, result, Operand(scratch)); + __ sw(scratch2, MemOperand(at)); + __ Subu(scratch, scratch, Operand(kPointerSize)); + __ Branch(&loop, ge, scratch, Operand(zero_reg)); + __ Addu(result, result, Operand(kHeapObjectTag)); + } } -- 2.7.4