Closed Bug 722688 Opened 8 years ago Closed 8 years ago

asm_store64 LIR_std2f cannot have scratch rt == value rv

Categories

(Tamarin Graveyard :: Baseline JIT (CodegenLIR), defect, P1)

x86
All
defect

Tracking

(Not tracked)

RESOLVED FIXED
Q1 12 - Brannan

People

(Reporter: pnkfelix, Assigned: wmaddox)

References

Details

(Whiteboard: WE:3097935)

Attachments

(1 file)

if (rmask(rv) & XmmRegs) {
                 // need a scratch reg
-                Register rt = registerAllocTmp(XmmRegs);
+                Register rt = registerAllocTmp(XmmRegs & ~rmask(rv));
Whiteboard: WE:3097935
This bug impacts the LIR_std2f instruction which is used to implement the ABC opcode OP_sf32 (truncate double to float then store).   In code sequences with heavy register pressure, the scratch register used could be the same as the one holding the value, which wrongly sets the stored value to zero.
See Also: → 722694
Attachment #593080 - Flags: review+
changeset: 7175:65e07c19b309
user:      Felix S Klock II <fklockii>
summary:   Bug 722688 - asm_store64 LIR_std2f cannot have scratch rt == value rv (r=edwsmith+)

http://hg.mozilla.org/tamarin-redux/rev/65e07c19b309
targetting Brannan, leaving open until it lands in all the right places.  mainline is done.
Priority: -- → P1
Target Milestone: --- → Q1 12 - Brannan
Assignee: nobody → wmaddox
I confirmed the bug is fixed by building FRR and running the dungeon testcase.
FRMain CL 1027760
Brannan CL 1027757
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.