Skip to content

Commit 060a188

Browse files
feilongjiangRealFYang
authored andcommitted
8283865: riscv: Break down -XX:+UseRVB into seperate options for each bitmanip extension
Reviewed-by: fyang, shade
1 parent e5e1aab commit 060a188

File tree

8 files changed

+130
-136
lines changed

8 files changed

+130
-136
lines changed

src/hotspot/cpu/riscv/assembler_riscv.hpp

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

19451945
// ====================================
19461946
// RISC-V Bit-Manipulation Extension
1947+
// Currently only support Zba and Zbb.
19471948
// ====================================
19481949
#define INSN(NAME, op, funct3, funct7) \
19491950
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
@@ -91,8 +91,9 @@ define_pd_global(intx, InlineSmallCode, 1000);
9191
product(bool, AvoidUnalignedAccesses, true, \
9292
"Avoid generating unaligned memory accesses") \
9393
product(bool, UseRVV, false, EXPERIMENTAL, "Use RVV instructions") \
94-
product(bool, UseRVB, false, EXPERIMENTAL, "Use RVB instructions") \
9594
product(bool, UseRVC, false, EXPERIMENTAL, "Use RVC instructions") \
95+
product(bool, UseZba, false, EXPERIMENTAL, "Use Zba instructions") \
96+
product(bool, UseZbb, false, EXPERIMENTAL, "Use Zbb instructions") \
9697
product(bool, UseRVVForBigIntegerShiftIntrinsics, true, \
9798
"Use RVV instructions for left/right shift of BigInteger")
9899

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,7 +1473,7 @@ void MacroAssembler::store_sized_value(Address dst, Register src, size_t size_in
14731473
// reverse bytes in halfword in lower 16 bits and sign-extend
14741474
// Rd[15:0] = Rs[7:0] Rs[15:8] (sign-extend to 64 bits)
14751475
void MacroAssembler::revb_h_h(Register Rd, Register Rs, Register tmp) {
1476-
if (UseRVB) {
1476+
if (UseZbb) {
14771477
rev8(Rd, Rs);
14781478
srai(Rd, Rd, 48);
14791479
return;
@@ -1490,7 +1490,7 @@ void MacroAssembler::revb_h_h(Register Rd, Register Rs, Register tmp) {
14901490
// reverse bytes in lower word and sign-extend
14911491
// Rd[31:0] = Rs[7:0] Rs[15:8] Rs[23:16] Rs[31:24] (sign-extend to 64 bits)
14921492
void MacroAssembler::revb_w_w(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1493-
if (UseRVB) {
1493+
if (UseZbb) {
14941494
rev8(Rd, Rs);
14951495
srai(Rd, Rd, 32);
14961496
return;
@@ -1507,7 +1507,7 @@ void MacroAssembler::revb_w_w(Register Rd, Register Rs, Register tmp1, Register
15071507
// reverse bytes in halfword in lower 16 bits and zero-extend
15081508
// Rd[15:0] = Rs[7:0] Rs[15:8] (zero-extend to 64 bits)
15091509
void MacroAssembler::revb_h_h_u(Register Rd, Register Rs, Register tmp) {
1510-
if (UseRVB) {
1510+
if (UseZbb) {
15111511
rev8(Rd, Rs);
15121512
srli(Rd, Rd, 48);
15131513
return;
@@ -1524,11 +1524,11 @@ void MacroAssembler::revb_h_h_u(Register Rd, Register Rs, Register tmp) {
15241524
// reverse bytes in halfwords in lower 32 bits and zero-extend
15251525
// Rd[31:0] = Rs[23:16] Rs[31:24] Rs[7:0] Rs[15:8] (zero-extend to 64 bits)
15261526
void MacroAssembler::revb_h_w_u(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1527-
if (UseRVB) {
1527+
if (UseZbb) {
15281528
rev8(Rd, Rs);
15291529
rori(Rd, Rd, 32);
15301530
roriw(Rd, Rd, 16);
1531-
zext_w(Rd, Rd);
1531+
zero_extend(Rd, Rd, 32);
15321532
return;
15331533
}
15341534
assert_different_registers(Rs, tmp1, tmp2);
@@ -1557,16 +1557,16 @@ void MacroAssembler::revb_h_helper(Register Rd, Register Rs, Register tmp1, Regi
15571557
// reverse bytes in each halfword
15581558
// 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]
15591559
void MacroAssembler::revb_h(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1560-
if (UseRVB) {
1560+
if (UseZbb) {
15611561
assert_different_registers(Rs, tmp1);
15621562
assert_different_registers(Rd, tmp1);
15631563
rev8(Rd, Rs);
1564-
zext_w(tmp1, Rd);
1564+
zero_extend(tmp1, Rd, 32);
15651565
roriw(tmp1, tmp1, 16);
15661566
slli(tmp1, tmp1, 32);
15671567
srli(Rd, Rd, 32);
15681568
roriw(Rd, Rd, 16);
1569-
zext_w(Rd, Rd);
1569+
zero_extend(Rd, Rd, 32);
15701570
orr(Rd, Rd, tmp1);
15711571
return;
15721572
}
@@ -1581,7 +1581,7 @@ void MacroAssembler::revb_h(Register Rd, Register Rs, Register tmp1, Register tm
15811581
// reverse bytes in each word
15821582
// 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]
15831583
void MacroAssembler::revb_w(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1584-
if (UseRVB) {
1584+
if (UseZbb) {
15851585
rev8(Rd, Rs);
15861586
rori(Rd, Rd, 32);
15871587
return;
@@ -1595,7 +1595,7 @@ void MacroAssembler::revb_w(Register Rd, Register Rs, Register tmp1, Register tm
15951595
// reverse bytes in doubleword
15961596
// 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]
15971597
void MacroAssembler::revb(Register Rd, Register Rs, Register tmp1, Register tmp2) {
1598-
if (UseRVB) {
1598+
if (UseZbb) {
15991599
rev8(Rd, Rs);
16001600
return;
16011601
}
@@ -1617,7 +1617,7 @@ void MacroAssembler::revb(Register Rd, Register Rs, Register tmp1, Register tmp2
16171617
// rotate right with shift bits
16181618
void MacroAssembler::ror_imm(Register dst, Register src, uint32_t shift, Register tmp)
16191619
{
1620-
if (UseRVB) {
1620+
if (UseZbb) {
16211621
rori(dst, src, shift);
16221622
return;
16231623
}
@@ -3563,7 +3563,7 @@ void MacroAssembler::multiply_to_len(Register x, Register xlen, Register y, Regi
35633563
// shift 16 bits once.
35643564
void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1, Register tmp2)
35653565
{
3566-
if (UseRVB) {
3566+
if (UseZbb) {
35673567
assert_different_registers(Rd, Rs, tmp1);
35683568
int step = isLL ? 8 : 16;
35693569
ctz(Rd, Rs);
@@ -3905,7 +3905,7 @@ void MacroAssembler::zero_memory(Register addr, Register len, Register tmp) {
39053905
// shift left by shamt and add
39063906
// Rd = (Rs1 << shamt) + Rs2
39073907
void MacroAssembler::shadd(Register Rd, Register Rs1, Register Rs2, Register tmp, int shamt) {
3908-
if (UseRVB) {
3908+
if (UseZba) {
39093909
if (shamt == 1) {
39103910
sh1add(Rd, Rs1, Rs2);
39113911
return;
@@ -3927,14 +3927,14 @@ void MacroAssembler::shadd(Register Rd, Register Rs1, Register Rs2, Register tmp
39273927
}
39283928

39293929
void MacroAssembler::zero_extend(Register dst, Register src, int bits) {
3930-
if (UseRVB) {
3931-
if (bits == 16) {
3932-
zext_h(dst, src);
3933-
return;
3934-
} else if (bits == 32) {
3935-
zext_w(dst, src);
3936-
return;
3937-
}
3930+
if (UseZba && bits == 32) {
3931+
zext_w(dst, src);
3932+
return;
3933+
}
3934+
3935+
if (UseZbb && bits == 16) {
3936+
zext_h(dst, src);
3937+
return;
39383938
}
39393939

39403940
if (bits == 8) {
@@ -3946,7 +3946,7 @@ void MacroAssembler::zero_extend(Register dst, Register src, int bits) {
39463946
}
39473947

39483948
void MacroAssembler::sign_extend(Register dst, Register src, int bits) {
3949-
if (UseRVB) {
3949+
if (UseZbb) {
39503950
if (bits == 8) {
39513951
sext_b(dst, src);
39523952
return;

src/hotspot/cpu/riscv/riscv.ad

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1814,7 +1814,7 @@ const bool Matcher::match_rule_supported(int opcode) {
18141814
case Op_CountLeadingZerosL:
18151815
case Op_CountTrailingZerosI:
18161816
case Op_CountTrailingZerosL:
1817-
return UseRVB;
1817+
return UseZbb;
18181818
}
18191819

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

0 commit comments

Comments
 (0)