[webkit-reviews] review denied: [Bug 124780] Kraken causes a lot of slow path calls when using Math.pow() : [Attachment 220051] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Jan 27 19:44:36 PST 2014


Benjamin Poulain <benjamin at webkit.org> has denied Romain Perier
<romain.perier at gmail.com>'s request for review:
Bug 124780: Kraken causes a lot of slow path calls when using Math.pow()
https://bugs.webkit.org/show_bug.cgi?id=124780

Attachment 220051: Patch
https://bugs.webkit.org/attachment.cgi?id=220051&action=review

------- Additional Comments from Benjamin Poulain <benjamin at webkit.org>
View in context: https://bugs.webkit.org/attachment.cgi?id=220051&action=review


> Source/JavaScriptCore/jit/ThunkGenerators.cpp:915
> +    jit.neg32(SpecializedThunkJIT::regT0);
> +    jit.divDouble(SpecializedThunkJIT::fpRegT0,
SpecializedThunkJIT::fpRegT1);
> +    jit.moveDouble(SpecializedThunkJIT::fpRegT1,
SpecializedThunkJIT::fpRegT0);
> +    jit.loadDouble(&oneConstant, SpecializedThunkJIT::fpRegT1);
> +    exponentIsPositive.link(&jit);

I have the feeling jit.neg32(SpecializedThunkJIT::regT0); does not work for
INT_MIN (since -INT_MIN > INT_MAX). Am I missing something here?

> Source/JavaScriptCore/jit/ThunkGenerators.cpp:947
> +    nonIntExponent.link(&jit);
> +    jit.loadDoubleArgument(1, SpecializedThunkJIT::fpRegT1,
SpecializedThunkJIT::regT0);
> +    jit.loadDouble(&negativeHalfConstant, SpecializedThunkJIT::fpRegT2);
> +    MacroAssembler::Jump exponentIsInverseSqrt =
jit.branchDouble(MacroAssembler::DoubleEqual, SpecializedThunkJIT::fpRegT1,
SpecializedThunkJIT::fpRegT2);
>  
> -	   SpecializedThunkJIT::JumpList doubleResult;
> -	   jit.branchConvertDoubleToInt32(SpecializedThunkJIT::fpRegT1,
SpecializedThunkJIT::regT0, doubleResult, SpecializedThunkJIT::fpRegT0);
> -	   jit.returnInt32(SpecializedThunkJIT::regT0);
> -	   doubleResult.link(&jit);
> -	   jit.returnDouble(SpecializedThunkJIT::fpRegT1);
> -    } else
> -	   jit.appendFailure(nonIntExponent);
> +    jit.callDoubleToDoublePreservingReturn(BinaryDoubleOpWrapper(jsPow));
> +    jit.returnDouble(SpecializedThunkJIT::fpRegT0);
>  
> +    exponentIsInverseSqrt.link(&jit);
> +    jit.loadDouble(&oneConstant, SpecializedThunkJIT::fpRegT1);
> +    jit.sqrtDouble(SpecializedThunkJIT::fpRegT0,
SpecializedThunkJIT::fpRegT0);
> +    jit.divDouble(SpecializedThunkJIT::fpRegT0,
SpecializedThunkJIT::fpRegT1);
> +    jit.returnDouble(SpecializedThunkJIT::fpRegT1);

The branch using jit.sqrtDouble should be behind test for
jit.supportsFloatingPointSqrt().


More information about the webkit-reviews mailing list