From 1ef2b9a38547b886a8faa78dce54bfdd1384aa27 Mon Sep 17 00:00:00 2001 From: "sgjesse@chromium.org" Date: Thu, 24 Feb 2011 15:26:27 +0000 Subject: [PATCH] Fix bug in r6930 and r6933 The loading the register used for the null object was to early and it could be clobbered. TBR=karlklose@chromium.org BUG=none TEST=mozilla/ecma_3/Statements/regress-131348 Review URL: http://codereview.chromium.org/6578020 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6937 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/full-codegen-arm.cc | 6 ++---- src/x64/full-codegen-x64.cc | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index 5ce47a8..0738915 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -880,10 +880,6 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { ForIn loop_statement(this, stmt); increment_loop_depth(); - // Load null value as it is used several times below. - Register null_value = r5; - __ LoadRoot(null_value, Heap::kNullValueRootIndex); - // Get the object to enumerate over. Both SpiderMonkey and JSC // ignore null and undefined in contrast to the specification; see // ECMA-262 section 12.6.4. @@ -891,6 +887,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); __ cmp(r0, ip); __ b(eq, &exit); + Register null_value = r5; + __ LoadRoot(null_value, Heap::kNullValueRootIndex); __ cmp(r0, null_value); __ b(eq, &exit); diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc index 077add9..3305ac7 100644 --- a/src/x64/full-codegen-x64.cc +++ b/src/x64/full-codegen-x64.cc @@ -854,16 +854,14 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { ForIn loop_statement(this, stmt); increment_loop_depth(); - // Load null value as it is used several times below. - Register null_value = rdi; - __ LoadRoot(null_value, Heap::kNullValueRootIndex); - // Get the object to enumerate over. Both SpiderMonkey and JSC // ignore null and undefined in contrast to the specification; see // ECMA-262 section 12.6.4. VisitForAccumulatorValue(stmt->enumerable()); __ CompareRoot(rax, Heap::kUndefinedValueRootIndex); __ j(equal, &exit); + Register null_value = rdi; + __ LoadRoot(null_value, Heap::kNullValueRootIndex); __ cmpq(rax, null_value); __ j(equal, &exit); -- 2.7.4