8293695: Implement isInfinite intrinsic for RISC-V

Reviewed-by: yadongwang, fyang, dsamersoff
This commit is contained in:
Aleksei Voitylov 2022-09-15 09:45:03 +00:00 committed by Dmitry Samersoff
parent 8f3bbe950f
commit b31a03c60a
3 changed files with 30 additions and 4 deletions

View File

@ -7230,6 +7230,32 @@ instruct minD_reg_reg(fRegD dst, fRegD src1, fRegD src2) %{
ins_pipe(fp_dop_reg_reg_d);
%}
// Float.isInfinite
instruct isIniniteF_reg_reg(iRegINoSp dst, fRegF src)
%{
match(Set dst (IsInfiniteF src));
format %{ "isInfinite $dst, $src" %}
ins_encode %{
__ fclass_s(as_Register($dst$$reg), as_FloatRegister($src$$reg));
__ andi(as_Register($dst$$reg), as_Register($dst$$reg), 0b10000001);
__ slt(as_Register($dst$$reg), zr, as_Register($dst$$reg));
%}
ins_pipe(fp_dop_reg_reg_s);
%}
// Double.isInfinite
instruct isInfiniteD_reg_reg(iRegINoSp dst, fRegD src)
%{
match(Set dst (IsInfiniteD src));
format %{ "isInfinite $dst, $src" %}
ins_encode %{
__ fclass_d(as_Register($dst$$reg), as_FloatRegister($src$$reg));
__ andi(as_Register($dst$$reg), as_Register($dst$$reg), 0b10000001);
__ slt(as_Register($dst$$reg), zr, as_Register($dst$$reg));
%}
ins_pipe(fp_dop_reg_reg_d);
%}
instruct divF_reg_reg(fRegF dst, fRegF src1, fRegF src2) %{
match(Set dst (DivF src1 src2));

View File

@ -23,8 +23,8 @@
/**
* @test
* @summary Test x86_64 intrinsics for Double methods isNaN, isFinite, isInfinite.
* @requires vm.cpu.features ~= ".*avx512dq.*"
* @summary Test intrinsics for Double methods isNaN, isFinite, isInfinite.
* @requires vm.cpu.features ~= ".*avx512dq.*" | os.arch == "riscv64"
* @library /test/lib /
* @run driver compiler.intrinsics.TestDoubleClassCheck
*/

View File

@ -23,8 +23,8 @@
/**
* @test
* @summary Test x86_64 intrinsics for Float methods isNaN, isFinite, isInfinite.
* @requires vm.cpu.features ~= ".*avx512dq.*"
* @summary Test intrinsics for Float methods isNaN, isFinite, isInfinite.
* @requires vm.cpu.features ~= ".*avx512dq.*" | os.arch == "riscv64"
* @library /test/lib /
* @run driver compiler.intrinsics.TestFloatClassCheck
*/