Closed Bug 573083 Opened 14 years ago Closed 14 years ago

JM: Don't flush the entire state for implicit calls

Categories

(Core :: JavaScript Engine, defect)

x86
Linux
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: dvander, Unassigned)

References

Details

There are two ways this affects us. On stub calls with no fast-paths, we sync the entire frame to memory. On out-of-line slow paths, we do the same, but it leads to a great deal of code bloat. For example SETELEM has six side exits, each one must independently sync all pending stores. I've seen this be more than 20 instructions for each exit. With bug 566022 fixed, this is no longer a problem but correctness, but it is for rooting. When conservative GC lands on fatval we should be able to eliminate all these stores.
http://hg.mozilla.org/users/danderson_mozilla.com/moo/rev/be62769dce74 ^-- For inline slow calls, we now only sync relevant state. http://hg.mozilla.org/users/danderson_mozilla.com/moo/rev/5ff0c0a8d4d8 ^-- For OOL slow calls, we no longer sync irrelevant copies or constants. Registers are harder and will come later. This increases code size on SS by about 1%, since with less syncs on the inline path, the OOL has to do more work. It looks like maybe a 2% win on v8 and not much on SS, so far.
http://hg.mozilla.org/users/danderson_mozilla.com/moo/rev/9852618873d9 About a 2% v8 win, noise on SS. I'm a little bothered by this patch because code inside a try block will run slower, as the world must be synced inside each stub call. Perhaps someday we can mitigate this if it really matters.
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
Depends on: 593556
Depends on: 617288
You need to log in before you can comment on or make changes to this bug.