Closed Bug 965229 Opened 6 years ago Closed 6 years ago

ARM simulator: scratch volatile registers across system ABI calls

Categories

(Core :: JavaScript Engine: JIT, defect)

ARM
All
defect
Not set

Tracking

()

RESOLVED FIXED
mozilla30

People

(Reporter: dougc, Assigned: dougc)

References

Details

Attachments

(1 file, 1 obsolete file)

It would help detect compiler error if the simulator scratched the volatile registers across system ABI calls.

Some of the calls assume that not all the registers are scratched.  This is an efficiency optimization.  For example calls to __aeabi_idivmod and __aeabi_uidivmod.  Need to audit all calls and decide how to manage this.
Here's that patch moved from bug 959597.  This is not adequate alone because it is still necessary to avoid scratching some registers for some calls.
Assignee: nobody → dtc-moz
Revised to avoid scratching the volatile float registers when calling __aeabi_idivmod or __aeabi_uidivmod because the ARM backend assumes that the float registers are not volatile across these calls - a performance optimization.

Requesting review again because there were substantive changes, and I am not certain about the style.
Attachment #8367273 - Attachment is obsolete: true
Attachment #8372770 - Flags: review?(nicolas.b.pierron)
Attachment #8372770 - Flags: review?(nicolas.b.pierron) → review+
(In reply to Douglas Crosher [:dougc] from comment #2)
> Requesting review again because there were substantive changes, and I am not
> certain about the style.

The style looks good.
In the previous obsolete patch, I noticed a

void Foo::bar(void)
{
}

"void" arguments are valid in C, to prevent making it a variadic function by defining a function with no arguments, but I do not think this has any meaning in C++.
Keywords: checkin-needed
https://hg.mozilla.org/mozilla-central/rev/f5590c1dcf70
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla30
You need to log in before you can comment on or make changes to this bug.