< prev index next >
src/hotspot/cpu/aarch64/aarch64.ad
Print this page
rev 53001 : 8212043: Add floating-point Math.min/max intrinsics
Summary: Floating-point Math.min() and Math.max() intrinsics are enabled on AArch64 platform
Reviewed-by: adinn, aph
@@ -12599,10 +12599,67 @@
ins_pipe(pipe_class_default);
%}
+// Math.max(FF)F
+instruct maxF_reg_reg(vRegF dst, vRegF src1, vRegF src2) %{
+ match(Set dst (MaxF src1 src2));
+
+ format %{ "fmaxs $dst, $src1, $src2" %}
+ ins_encode %{
+ __ fmaxs(as_FloatRegister($dst$$reg),
+ as_FloatRegister($src1$$reg),
+ as_FloatRegister($src2$$reg));
+ %}
+
+ ins_pipe(fp_dop_reg_reg_s);
+%}
+
+// Math.min(FF)F
+instruct minF_reg_reg(vRegF dst, vRegF src1, vRegF src2) %{
+ match(Set dst (MinF src1 src2));
+
+ format %{ "fmins $dst, $src1, $src2" %}
+ ins_encode %{
+ __ fmins(as_FloatRegister($dst$$reg),
+ as_FloatRegister($src1$$reg),
+ as_FloatRegister($src2$$reg));
+ %}
+
+ ins_pipe(fp_dop_reg_reg_s);
+%}
+
+// Math.max(DD)D
+instruct maxD_reg_reg(vRegD dst, vRegD src1, vRegD src2) %{
+ match(Set dst (MaxD src1 src2));
+
+ format %{ "fmaxd $dst, $src1, $src2" %}
+ ins_encode %{
+ __ fmaxd(as_FloatRegister($dst$$reg),
+ as_FloatRegister($src1$$reg),
+ as_FloatRegister($src2$$reg));
+ %}
+
+ ins_pipe(fp_dop_reg_reg_d);
+%}
+
+// Math.min(DD)D
+instruct minD_reg_reg(vRegD dst, vRegD src1, vRegD src2) %{
+ match(Set dst (MinD src1 src2));
+
+ format %{ "fmind $dst, $src1, $src2" %}
+ ins_encode %{
+ __ fmind(as_FloatRegister($dst$$reg),
+ as_FloatRegister($src1$$reg),
+ as_FloatRegister($src2$$reg));
+ %}
+
+ ins_pipe(fp_dop_reg_reg_d);
+%}
+
+
instruct divF_reg_reg(vRegF dst, vRegF src1, vRegF src2) %{
match(Set dst (DivF src1 src2));
ins_cost(INSN_COST * 18);
format %{ "fdivs $dst, $src1, $src2" %}
< prev index next >