Skip to content

Commit b891bfa

Browse files
Anjian-WenRealFYang
authored andcommittedMar 18, 2025
8352022: RISC-V: Support Zfa fminm_h/fmaxm_h for float16
Reviewed-by: fyang, mli
1 parent 20f1bca commit b891bfa

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed
 

‎src/hotspot/cpu/riscv/assembler_riscv.hpp

+10
Original file line numberDiff line numberDiff line change
@@ -1450,6 +1450,16 @@ enum operand_size { int8, int16, int32, uint32, int64 };
14501450
fp_base<D_64_dp, 0b11110>(Rd, Rs1, 0b00001, 0b000);
14511451
}
14521452

1453+
void fminm_h(FloatRegister Rd, FloatRegister Rs1, FloatRegister Rs2) {
1454+
assert_cond(UseZfa);
1455+
fp_base<H_16_hp, 0b00101>(Rd, Rs1, Rs2, 0b010);
1456+
}
1457+
1458+
void fmaxm_h(FloatRegister Rd, FloatRegister Rs1, FloatRegister Rs2) {
1459+
assert_cond(UseZfa);
1460+
fp_base<H_16_hp, 0b00101>(Rd, Rs1, Rs2, 0b011);
1461+
}
1462+
14531463
void fminm_s(FloatRegister Rd, FloatRegister Rs1, FloatRegister Rs2) {
14541464
assert_cond(UseZfa);
14551465
fp_base<S_32_sp, 0b00101>(Rd, Rs1, Rs2, 0b010);

‎src/hotspot/cpu/riscv/riscv.ad

+31
Original file line numberDiff line numberDiff line change
@@ -8386,6 +8386,7 @@ instruct binOps_HF_reg(fRegF dst, fRegF src1, fRegF src2)
83868386

83878387
instruct min_max_HF_reg(fRegF dst, fRegF src1, fRegF src2)
83888388
%{
8389+
predicate(!UseZfa);
83898390
match(Set dst (MinHF src1 src2));
83908391
match(Set dst (MaxHF src1 src2));
83918392
format %{ "min_max_hf $dst, $src1, $src2" %}
@@ -8404,6 +8405,36 @@ instruct min_max_HF_reg(fRegF dst, fRegF src1, fRegF src2)
84048405
ins_pipe(pipe_class_default);
84058406
%}
84068407

8408+
instruct minHF_reg_zfa(fRegF dst, fRegF src1, fRegF src2)
8409+
%{
8410+
predicate(UseZfa);
8411+
match(Set dst (MinHF src1 src2));
8412+
8413+
format %{ "min_hf $dst, $src1, $src2" %}
8414+
8415+
ins_encode %{
8416+
__ fminm_h(as_FloatRegister($dst$$reg),
8417+
as_FloatRegister($src1$$reg), as_FloatRegister($src2$$reg));
8418+
%}
8419+
8420+
ins_pipe(pipe_class_default);
8421+
%}
8422+
8423+
instruct maxHF_reg_zfa(fRegF dst, fRegF src1, fRegF src2)
8424+
%{
8425+
predicate(UseZfa);
8426+
match(Set dst (MaxHF src1 src2));
8427+
8428+
format %{ "max_hf $dst, $src1, $src2" %}
8429+
8430+
ins_encode %{
8431+
__ fmaxm_h(as_FloatRegister($dst$$reg),
8432+
as_FloatRegister($src1$$reg), as_FloatRegister($src2$$reg));
8433+
%}
8434+
8435+
ins_pipe(pipe_class_default);
8436+
%}
8437+
84078438
instruct fma_HF_reg(fRegF dst, fRegF src1, fRegF src2, fRegF src3)
84088439
%{
84098440
match(Set dst (FmaHF src3 (Binary src1 src2)));

0 commit comments

Comments
 (0)
Please sign in to comment.