If you think a bug might affect users in the 57 release, please set the correct tracking and status flags for Release Management.

ARM simulator: scratch volatile registers across system ABI calls

RESOLVED FIXED in mozilla30

Status

()

Core
JavaScript Engine: JIT
RESOLVED FIXED
4 years ago
4 years ago

People

(Reporter: dougc, Assigned: dougc)

Tracking

unspecified
mozilla30
ARM
All
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(1 attachment, 1 obsolete attachment)

(Assignee)

Description

4 years ago
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.
(Assignee)

Comment 1

4 years ago
Created attachment 8367273 [details] [diff] [review]
Scratch volatile registers across system ABI calls

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
(Assignee)

Comment 2

4 years ago
Created attachment 8372770 [details] [diff] [review]
Scratch volatile registers across system ABI calls

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++.
(Assignee)

Updated

4 years ago
Keywords: checkin-needed
https://hg.mozilla.org/integration/mozilla-inbound/rev/f5590c1dcf70
Keywords: checkin-needed
https://hg.mozilla.org/mozilla-central/rev/f5590c1dcf70
Status: NEW → RESOLVED
Last Resolved: 4 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla30
You need to log in before you can comment on or make changes to this bug.