-
Clemens Backes authored
This improves the code generated for float to int64 conversions on x64. Instead of explicitly checking the input for specific values and executing conditional jumps, just convert the integer back to a float and check if this results in the rounded input. The "success value" is then materialized via vmov + and instead of via branches. old: 7 c4e1fb2cd9 vcvttsd2siq rbx,xmm1 c ba01000000 movl rdx,0x1 11 49ba000000000000e0c3 REX.W movq r10,0xc3e0000000000000 1b c441f96efa vmovq xmm15,r10 20 c5792ef9 vucomisd xmm15,xmm1 24 7a08 jpe 0x3599421714ee <+0x2e> 26 7408 jz 0x3599421714f0 <+0x30> 28 4883fb01 REX.W cmpq rbx,0x1 2c 7102 jno 0x3599421714f0 <+0x30> 2e 33d2 xorl rdx,rdx new: 7 c463010bf90b vroundsd xmm15,xmm15,xmm1,0xb d c4e1fb2cd9 vcvttsd2siq rbx,xmm1 12 c4e1832ac3 vcvtqsi2sd xmm0,xmm15,rbx 17 c4c17bc2c700 vcmpss xmm0,xmm0,xmm15, (eq) 1d c4e1f97ec2 vmovq rdx,xmm0 22 83e201 andl rdx,0x1 A follow-up step would be to replace the explicitly materialized success value by a direct jump to the code handling the error case, but that requires more rewrite in TurboFan. R=tebbi@chromium.org Bug: v8:10005 Change-Id: Iaedc3f395fb3a8c11c936faa8c6e55c2dfe86cd9 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3560434Reviewed-by: Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/main@{#79854}
08e514a8