Index: src/x64/builtins-x64.cc |
diff --git a/src/x64/builtins-x64.cc b/src/x64/builtins-x64.cc |
index 8826906e09748bb4637961b7b164a97708bce7b4..7154098f47d98bf7c12d796c4e78a5978ed42b5a 100644 |
--- a/src/x64/builtins-x64.cc |
+++ b/src/x64/builtins-x64.cc |
@@ -207,19 +207,29 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm, |
// rax: initial map |
// rbx: JSObject |
// rdi: start of next object |
- { Label loop, entry; |
+ { Label loop, entry, load_one_pointer_filler, continue_loop; |
// To allow for truncation. |
+ __ lea(rcx, Operand(rbx, JSObject::kHeaderSize)); |
+ __ LoadRoot(rdx, Heap::kUndefinedValueRootIndex); |
if (count_constructions) { |
+ __ movzxbq(rsi, |
+ FieldOperand(rax, Map::kPreAllocatedPropertyFieldsOffset)); |
+ __ incq(rsi); |
+ __ jmp(&entry); |
+ __ bind(&load_one_pointer_filler); |
__ LoadRoot(rdx, Heap::kOnePointerFillerMapRootIndex); |
- } else { |
- __ LoadRoot(rdx, Heap::kUndefinedValueRootIndex); |
+ __ jmp(&continue_loop); |
} |
- __ lea(rcx, Operand(rbx, JSObject::kHeaderSize)); |
__ jmp(&entry); |
__ bind(&loop); |
__ movq(Operand(rcx, 0), rdx); |
__ addq(rcx, Immediate(kPointerSize)); |
__ bind(&entry); |
+ if (count_constructions) { |
+ __ decq(rsi); |
+ __ j(zero, &load_one_pointer_filler); |
+ __ bind(&continue_loop); |
+ } |
__ cmpq(rcx, rdi); |
__ j(less, &loop); |
} |