Skip to content

Commit aee4eea

Browse files
zifeihanRealFYang
authored andcommitted
8283865: riscv: Break down -XX:+UseRVB into seperate options for each bitmanip extension
Reviewed-by: fyang Backport-of: 060a1887339a366075755ad2a359ee3336ef381d
1 parent 8aa0808 commit aee4eea

File tree

8 files changed

+112
-118
lines changed

8 files changed

+112
-118
lines changed

src/hotspot/cpu/riscv/assembler_riscv.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,6 +1945,7 @@ enum Nf {
19451945

19461946
// ====================================
19471947
// RISC-V Bit-Manipulation Extension
1948+
// Currently only support Zba and Zbb.
19481949
// ====================================
19491950
#define INSN(NAME, op, funct3, funct7) \
19501951
void NAME(Register Rd, Register Rs1, Register Rs2) { \

src/hotspot/cpu/riscv/globals_riscv.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ define_pd_global(intx, InlineSmallCode, 1000);
104104
product(bool, AvoidUnalignedAccesses, true, \
105105
"Avoid generating unaligned memory accesses") \
106106
experimental(bool, UseRVV, false, "Use RVV instructions") \
107-
experimental(bool, UseRVB, false, "Use RVB instructions") \
107+
experimental(bool, UseZba, false, "Use Zba instructions") \
108+
experimental(bool, UseZbb, false, "Use Zbb instructions") \
108109
experimental(bool, UseRVC, false, "Use RVC instructions")
109110

110111
#endif // CPU_RISCV_GLOBALS_RISCV_HPP

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1426,7 +1426,7 @@ void MacroAssembler::store_sized_value(Address dst, Register src, size_t size_in
14261426
// reverse bytes in halfword in lower 16 bits and sign-extend
14271427
// Rd[15:0] = Rs[7:0] Rs[15:8] (sign-extend to 64 bits)
14281428
void MacroAssembler::revb_h_h(Register Rd, Register Rs, Register tmp) {
1429-
if (UseRVB) {
1429+
if (UseZbb) {
14301430
rev8(Rd, Rs);
14311431
srai(Rd, Rd, 48);
14321432
return;
@@ -1443,7 +1443,7 @@ void MacroAssembler::revb_h_h(Register Rd, Register Rs, Register tmp) {
14431443
// reverse bytes in lower word and sign-extend
14441444
// Rd[31:0] = Rs[7:0] Rs[15:8] Rs[23:16] Rs[31:24] (sign-extend to 64 bits)
14451445
void MacroAssembler::revb_w_w(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1446-
if (UseRVB) {
1446+
if (UseZbb) {
14471447
rev8(Rd, Rs);
14481448
srai(Rd, Rd, 32);
14491449
return;
@@ -1460,7 +1460,7 @@ void MacroAssembler::revb_w_w(Register Rd, Register Rs, Register tmp1, Register
14601460
// reverse bytes in halfword in lower 16 bits and zero-extend
14611461
// Rd[15:0] = Rs[7:0] Rs[15:8] (zero-extend to 64 bits)
14621462
void MacroAssembler::revb_h_h_u(Register Rd, Register Rs, Register tmp) {
1463-
if (UseRVB) {
1463+
if (UseZbb) {
14641464
rev8(Rd, Rs);
14651465
srli(Rd, Rd, 48);
14661466
return;
@@ -1477,11 +1477,11 @@ void MacroAssembler::revb_h_h_u(Register Rd, Register Rs, Register tmp) {
14771477
// reverse bytes in halfwords in lower 32 bits and zero-extend
14781478
// Rd[31:0] = Rs[23:16] Rs[31:24] Rs[7:0] Rs[15:8] (zero-extend to 64 bits)
14791479
void MacroAssembler::revb_h_w_u(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1480-
if (UseRVB) {
1480+
if (UseZbb) {
14811481
rev8(Rd, Rs);
14821482
rori(Rd, Rd, 32);
14831483
roriw(Rd, Rd, 16);
1484-
zext_w(Rd, Rd);
1484+
zero_extend(Rd, Rd, 32);
14851485
return;
14861486
}
14871487
assert_different_registers(Rs, tmp1, tmp2);
@@ -1510,16 +1510,16 @@ void MacroAssembler::revb_h_helper(Register Rd, Register Rs, Register tmp1, Regi
15101510
// reverse bytes in each halfword
15111511
// Rd[63:0] = Rs[55:48] Rs[63:56] Rs[39:32] Rs[47:40] Rs[23:16] Rs[31:24] Rs[7:0] Rs[15:8]
15121512
void MacroAssembler::revb_h(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1513-
if (UseRVB) {
1513+
if (UseZbb) {
15141514
assert_different_registers(Rs, tmp1);
15151515
assert_different_registers(Rd, tmp1);
15161516
rev8(Rd, Rs);
1517-
zext_w(tmp1, Rd);
1517+
zero_extend(tmp1, Rd, 32);
15181518
roriw(tmp1, tmp1, 16);
15191519
slli(tmp1, tmp1, 32);
15201520
srli(Rd, Rd, 32);
15211521
roriw(Rd, Rd, 16);
1522-
zext_w(Rd, Rd);
1522+
zero_extend(Rd, Rd, 32);
15231523
orr(Rd, Rd, tmp1);
15241524
return;
15251525
}
@@ -1534,7 +1534,7 @@ void MacroAssembler::revb_h(Register Rd, Register Rs, Register tmp1, Register tm
15341534
// reverse bytes in each word
15351535
// Rd[63:0] = Rs[39:32] Rs[47:40] Rs[55:48] Rs[63:56] Rs[7:0] Rs[15:8] Rs[23:16] Rs[31:24]
15361536
void MacroAssembler::revb_w(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1537-
if (UseRVB) {
1537+
if (UseZbb) {
15381538
rev8(Rd, Rs);
15391539
rori(Rd, Rd, 32);
15401540
return;
@@ -1548,7 +1548,7 @@ void MacroAssembler::revb_w(Register Rd, Register Rs, Register tmp1, Register tm
15481548
// reverse bytes in doubleword
15491549
// Rd[63:0] = Rs[7:0] Rs[15:8] Rs[23:16] Rs[31:24] Rs[39:32] Rs[47,40] Rs[55,48] Rs[63:56]
15501550
void MacroAssembler::revb(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1551-
if (UseRVB) {
1551+
if (UseZbb) {
15521552
rev8(Rd, Rs);
15531553
return;
15541554
}
@@ -1570,7 +1570,7 @@ void MacroAssembler::revb(Register Rd, Register Rs, Register tmp1, Register tmp2
15701570
// rotate right with shift bits
15711571
void MacroAssembler::ror_imm(Register dst, Register src, uint32_t shift, Register tmp)
15721572
{
1573-
if (UseRVB) {
1573+
if (UseZbb) {
15741574
rori(dst, src, shift);
15751575
return;
15761576
}
@@ -3708,7 +3708,7 @@ void MacroAssembler::multiply_to_len(Register x, Register xlen, Register y, Regi
37083708
// shift 16 bits once.
37093709
void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1, Register tmp2)
37103710
{
3711-
if (UseRVB) {
3711+
if (UseZbb) {
37123712
assert_different_registers(Rd, Rs, tmp1);
37133713
int step = isLL ? 8 : 16;
37143714
ctz(Rd, Rs);
@@ -4050,7 +4050,7 @@ void MacroAssembler::zero_memory(Register addr, Register len, Register tmp) {
40504050
// shift left by shamt and add
40514051
// Rd = (Rs1 << shamt) + Rs2
40524052
void MacroAssembler::shadd(Register Rd, Register Rs1, Register Rs2, Register tmp, int shamt) {
4053-
if (UseRVB) {
4053+
if (UseZba) {
40544054
if (shamt == 1) {
40554055
sh1add(Rd, Rs1, Rs2);
40564056
return;
@@ -4072,14 +4072,14 @@ void MacroAssembler::shadd(Register Rd, Register Rs1, Register Rs2, Register tmp
40724072
}
40734073

40744074
void MacroAssembler::zero_extend(Register dst, Register src, int bits) {
4075-
if (UseRVB) {
4076-
if (bits == 16) {
4077-
zext_h(dst, src);
4078-
return;
4079-
} else if (bits == 32) {
4080-
zext_w(dst, src);
4081-
return;
4082-
}
4075+
if (UseZba && bits == 32) {
4076+
zext_w(dst, src);
4077+
return;
4078+
}
4079+
4080+
if (UseZbb && bits == 16) {
4081+
zext_h(dst, src);
4082+
return;
40834083
}
40844084

40854085
if (bits == 8) {
@@ -4091,7 +4091,7 @@ void MacroAssembler::zero_extend(Register dst, Register src, int bits) {
40914091
}
40924092

40934093
void MacroAssembler::sign_extend(Register dst, Register src, int bits) {
4094-
if (UseRVB) {
4094+
if (UseZbb) {
40954095
if (bits == 8) {
40964096
sext_b(dst, src);
40974097
return;

src/hotspot/cpu/riscv/riscv.ad

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1483,7 +1483,7 @@ const bool Matcher::match_rule_supported(int opcode) {
14831483
case Op_CountLeadingZerosL:
14841484
case Op_CountTrailingZerosI:
14851485
case Op_CountTrailingZerosL:
1486-
return UseRVB;
1486+
return UseZbb;
14871487
}
14881488

14891489
return true; // Per default match rules are supported.

0 commit comments

Comments
 (0)