On Fri, 8 Apr 2022 16:39:31 GMT, Vladimir Kozlov <[email protected]> wrote:
>> Hi Vladimir (@vnkozlov),
>>
>> Incorporated all the suggestions you made in the previous review and pushed
>> a new commit.
>> Please let me know if anything else is needed.
>>
>> Thanks,
>> Vamsi
>
> @vamsi-parasa I got failures in new tests when run with `-XX:UseAVX=3
> -XX:+UnlockDiagnosticVMOptions -XX:+UseKNLSetting ` flags:
>
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGFPE (0x8) at pc=0x00007f2fa8c674ea, pid=3334, tid=3335
> #
> # JRE version: Java(TM) SE Runtime Environment (19.0) (fastdebug build
> 19-internal-2022-04-08-0157190.vladimir.kozlov.jdkgit)
> # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug
> 19-internal-2022-04-08-0157190.vladimir.kozlov.jdkgit, mixed mode, sharing,
> tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
> # Problematic frame:
> # J 504% c2 compiler.intrinsics.TestLongUnsignedDivMod.testDivideUnsigned()V
> (48 bytes) @ 0x00007f2fa8c674ea [0x00007f2fa8c672a0+0x000000000000024a]
> #
>
>
>
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGFPE (0x8) at pc=0x00007fb8c0c4fb18, pid=3309, tid=3310
> #
> # JRE version: Java(TM) SE Runtime Environment (19.0) (fastdebug build
> 19-internal-2022-04-08-0157190.vladimir.kozlov.jdkgit)
> # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug
> 19-internal-2022-04-08-0157190.vladimir.kozlov.jdkgit, mixed mode, sharing,
> tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
> # Problematic frame:
> # J 445 c2 compiler.intrinsics.TestIntegerUnsignedDivMod.divmod(III)V (23
> bytes) @ 0x00007fb8c0c4fb18 [0x00007fb8c0c4fae0+0x0000000000000038]
> #
@vnkozlov The `uDivI_rRegNode` currently emits machine code equivalent to the
following Java pseudocode:
if (div < 0) {
// fast path, if div < 0, then (unsigned)div > MAX_UINT / 2U
// I don't know why this is so complicated, basically this is rax u>=
div ? 1 : 0
return (rax & ~(rax - div)) >>> (Integer.SIZE - 1);
} else {
// slow path, just do the division normally
return rax u/ div;
}
What I am suggesting is to leave the negative-divisor fast part to be
implemented in the IR and the macro assembler should only concern emitting the
division instruction and not worry about optimisation here.
Thanks.
-------------
PR: https://git.openjdk.java.net/jdk/pull/7572