RESOLVED FIXED 88314
Improve Math.round and Math.floor intrinsic
https://bugs.webkit.org/show_bug.cgi?id=88314
Summary Improve Math.round and Math.floor intrinsic
Yuqiang Xian
Reported 2012-06-05 01:38:37 PDT
Currently we call a native function from the JIT code to complete the "round" and "floor" operations. We could inline some fast paths especially for those positive values on the platforms where floating point truncation is supported.
Attachments
patch (5.18 KB, patch)
2012-06-05 01:52 PDT, Yuqiang Xian
fpizlo: review+
Performance result (6.94 KB, text/plain)
2012-06-05 01:55 PDT, Yuqiang Xian
no flags
Yuqiang Xian
Comment 1 2012-06-05 01:52:18 PDT
Yuqiang Xian
Comment 2 2012-06-05 01:55:00 PDT
Created attachment 145730 [details] Performance result ~3% improvement on Kraken (32% on audio-oscillator), and nearly 1% on SunSpider.
Yuqiang Xian
Comment 3 2012-06-05 01:58:30 PDT
(In reply to comment #2) > Created an attachment (id=145730) [details] > Performance result > > ~3% improvement on Kraken (32% on audio-oscillator), and nearly 1% on SunSpider. o... for clarification, overall SS improvement is not obvious, but definitely 9% on one case.
Filip Pizlo
Comment 4 2012-06-05 20:47:07 PDT
Comment on attachment 145729 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=145729&action=review This looks right. I'm curious what your thoughts are about the comparing against neg zero. Maybe this code would work the same if you just used zero instead of neg zero, which would be faster, since regular zero is easier to load in SSE? Not marking cq+ just because I want to give you an opportunity to respond. But I think the code is correct so if there's nothing that needs changing then I'm fine with this being landed as-is. > Source/JavaScriptCore/jit/ThunkGenerators.cpp:197 > + doubleResult.append(jit.branchDouble(MacroAssembler::DoubleEqual, SpecializedThunkJIT::fpRegT0, SpecializedThunkJIT::fpRegT1)); Is this right? Double equality has strange handling of zero. 0 == -0 for example.
Yuqiang Xian
Comment 5 2012-06-05 21:02:17 PDT
(In reply to comment #4) > (From update of attachment 145729 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=145729&action=review > > This looks right. I'm curious what your thoughts are about the comparing against neg zero. Maybe this code would work the same if you just used zero instead of neg zero, which would be faster, since regular zero is easier to load in SSE? > > Not marking cq+ just because I want to give you an opportunity to respond. But I think the code is correct so if there's nothing that needs changing then I'm fine with this being landed as-is. > > > Source/JavaScriptCore/jit/ThunkGenerators.cpp:197 > > + doubleResult.append(jit.branchDouble(MacroAssembler::DoubleEqual, SpecializedThunkJIT::fpRegT0, SpecializedThunkJIT::fpRegT1)); > > Is this right? Double equality has strange handling of zero. 0 == -0 for example. You're right. It should be 0.
Yuqiang Xian
Comment 6 2012-06-05 22:28:24 PDT
Landed with Filip's comments addressed: http://trac.webkit.org/changeset/119558
Note You need to log in before you can comment on or make changes to this bug.