The patch has been uploaded: http://codereview.chromium.org/6020014/
On Wed, Jan 5, 2011 at 11:54 AM, <[email protected]> wrote: > Status: New > Owner: ---- > > New issue 1019 by alexandre.rames: Missing vmrs after vcmp instructions on > ARM in LCodeGen::DoBranch > http://code.google.com/p/v8/issues/detail?id=1019 > > On ARM: > > There are 2 vmrs(pc) instructions are missing in LCodeGen::DoBranch after > vcmp instructions. > Because of this the vfp status flags are not retrieved and the following > branches evaluate a wrong condition. > > Bug discovered after implementing LCodeGen::DoStoreNamedField, which was > provoking many bailouts. > > JS code showing the bug: (with --crankshaft --always_opt) > > function test(a) { > print(a ? 1 : 0); > } > > for(var i = -5; i < 5; i++) { > test(i + 0.1); > } > > Index: src/arm/lithium-codegen-arm.cc > ======================= > --- src/arm/lithium-codegen-arm.cc (revision 6149) > +++ src/arm/lithium-codegen-arm.cc (working copy) > @@ -1031,6 +1031,7 @@ > } else if (r.IsDouble()) { > DoubleRegister reg = ToDoubleRegister(instr->input()); > __ vcmp(reg, 0.0); > + __ vmrs(pc); // Move vector status bits to normal status bits. > EmitBranch(true_block, false_block, ne); > } else { > ASSERT(r.IsTagged()); > @@ -1069,6 +1070,7 @@ > __ sub(ip, reg, Operand(kHeapObjectTag)); > __ vldr(dbl_scratch, ip, HeapNumber::kValueOffset); > __ vcmp(dbl_scratch, 0.0); > + __ vmrs(pc); // Move vector status bits to normal status bits. > __ b(eq, false_label); > __ b(true_label); > > -- > v8-dev mailing list > [email protected] > http://groups.google.com/group/v8-dev -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
