Skip to content

Commit 9b88e8e

Browse files
DingliZhangRealFYang
authored andcommitted
8296916: RISC-V: Move some small macro-assembler functions to header file
Reviewed-by: fyang Backport-of: c3b285a8acaf4a6771e80b0a19bf21d6873f1a38
1 parent 0bdef91 commit 9b88e8e

File tree

3 files changed

+141
-180
lines changed

3 files changed

+141
-180
lines changed

src/hotspot/cpu/riscv/assembler_riscv.hpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2729,12 +2729,6 @@ enum Nf {
27292729

27302730
#undef INSN
27312731

2732-
// RVB pseudo instructions
2733-
// zero extend word
2734-
void zext_w(Register Rd, Register Rs) {
2735-
add_uw(Rd, Rs, zr);
2736-
}
2737-
27382732
// Stack overflow checking
27392733
virtual void bang_stack_with_offset(int offset) { Unimplemented(); }
27402734

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 22 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -648,92 +648,6 @@ void MacroAssembler::super_call_VM_leaf(address entry_point, Register arg_0, Reg
648648
MacroAssembler::call_VM_leaf_base(entry_point, 4);
649649
}
650650

651-
void MacroAssembler::nop() {
652-
addi(x0, x0, 0);
653-
}
654-
655-
void MacroAssembler::mv(Register Rd, Register Rs) {
656-
if (Rd != Rs) {
657-
addi(Rd, Rs, 0);
658-
}
659-
}
660-
661-
void MacroAssembler::notr(Register Rd, Register Rs) {
662-
xori(Rd, Rs, -1);
663-
}
664-
665-
void MacroAssembler::neg(Register Rd, Register Rs) {
666-
sub(Rd, x0, Rs);
667-
}
668-
669-
void MacroAssembler::negw(Register Rd, Register Rs) {
670-
subw(Rd, x0, Rs);
671-
}
672-
673-
void MacroAssembler::sext_w(Register Rd, Register Rs) {
674-
addiw(Rd, Rs, 0);
675-
}
676-
677-
void MacroAssembler::zext_b(Register Rd, Register Rs) {
678-
andi(Rd, Rs, 0xFF);
679-
}
680-
681-
void MacroAssembler::seqz(Register Rd, Register Rs) {
682-
sltiu(Rd, Rs, 1);
683-
}
684-
685-
void MacroAssembler::snez(Register Rd, Register Rs) {
686-
sltu(Rd, x0, Rs);
687-
}
688-
689-
void MacroAssembler::sltz(Register Rd, Register Rs) {
690-
slt(Rd, Rs, x0);
691-
}
692-
693-
void MacroAssembler::sgtz(Register Rd, Register Rs) {
694-
slt(Rd, x0, Rs);
695-
}
696-
697-
void MacroAssembler::fmv_s(FloatRegister Rd, FloatRegister Rs) {
698-
if (Rd != Rs) {
699-
fsgnj_s(Rd, Rs, Rs);
700-
}
701-
}
702-
703-
void MacroAssembler::fabs_s(FloatRegister Rd, FloatRegister Rs) {
704-
fsgnjx_s(Rd, Rs, Rs);
705-
}
706-
707-
void MacroAssembler::fneg_s(FloatRegister Rd, FloatRegister Rs) {
708-
fsgnjn_s(Rd, Rs, Rs);
709-
}
710-
711-
void MacroAssembler::fmv_d(FloatRegister Rd, FloatRegister Rs) {
712-
if (Rd != Rs) {
713-
fsgnj_d(Rd, Rs, Rs);
714-
}
715-
}
716-
717-
void MacroAssembler::fabs_d(FloatRegister Rd, FloatRegister Rs) {
718-
fsgnjx_d(Rd, Rs, Rs);
719-
}
720-
721-
void MacroAssembler::fneg_d(FloatRegister Rd, FloatRegister Rs) {
722-
fsgnjn_d(Rd, Rs, Rs);
723-
}
724-
725-
void MacroAssembler::vmnot_m(VectorRegister vd, VectorRegister vs) {
726-
vmnand_mm(vd, vs, vs);
727-
}
728-
729-
void MacroAssembler::vncvt_x_x_w(VectorRegister vd, VectorRegister vs, VectorMask vm) {
730-
vnsrl_wx(vd, vs, x0, vm);
731-
}
732-
733-
void MacroAssembler::vfneg_v(VectorRegister vd, VectorRegister vs) {
734-
vfsgnjn_vv(vd, vs, vs);
735-
}
736-
737651
void MacroAssembler::baseOffset32(Register Rd, const Address &adr, int32_t &offset) {
738652
assert(Rd != noreg, "Rd must not be empty register!");
739653
guarantee(Rd != adr.base(), "should use different registers!");
@@ -1598,21 +1512,6 @@ void MacroAssembler::reinit_heapbase() {
15981512
}
15991513
}
16001514

1601-
void MacroAssembler::mv(Register Rd, Address dest) {
1602-
assert(dest.getMode() == Address::literal, "Address mode should be Address::literal");
1603-
relocate(dest.rspec(), [&] {
1604-
movptr(Rd, dest.target());
1605-
});
1606-
}
1607-
1608-
void MacroAssembler::mv(Register Rd, RegisterOrConstant src) {
1609-
if (src.is_register()) {
1610-
mv(Rd, src.as_register());
1611-
} else {
1612-
mv(Rd, src.as_constant());
1613-
}
1614-
}
1615-
16161515
void MacroAssembler::movptr(Register Rd, address addr, int32_t &offset) {
16171516
int64_t imm64 = (int64_t)addr;
16181517
#ifndef PRODUCT
@@ -1642,16 +1541,6 @@ void MacroAssembler::movptr(Register Rd, address addr, int32_t &offset) {
16421541
offset = imm64 & 0x3f;
16431542
}
16441543

1645-
void MacroAssembler::movptr(Register Rd, uintptr_t imm64) {
1646-
movptr(Rd, (address)imm64);
1647-
}
1648-
1649-
void MacroAssembler::movptr(Register Rd, address addr) {
1650-
int offset = 0;
1651-
movptr(Rd, addr, offset);
1652-
addi(Rd, Rd, offset);
1653-
}
1654-
16551544
void MacroAssembler::add(Register Rd, Register Rn, int64_t increment, Register temp) {
16561545
if (is_imm_in_range(increment, 12, 0)) {
16571546
addi(Rd, Rn, increment);
@@ -3564,8 +3453,7 @@ void MacroAssembler::load_method_holder(Register holder, Register method) {
35643453
void MacroAssembler::compute_index(Register haystack, Register trailing_zeros,
35653454
Register match_mask, Register result,
35663455
Register ch2, Register tmp,
3567-
bool haystack_isL)
3568-
{
3456+
bool haystack_isL) {
35693457
int haystack_chr_shift = haystack_isL ? 0 : 1;
35703458
srl(match_mask, match_mask, trailing_zeros);
35713459
srli(match_mask, match_mask, 1);
@@ -3586,8 +3474,7 @@ void MacroAssembler::compute_index(Register haystack, Register trailing_zeros,
35863474
// - 0x8000800080008000 (UTF16)
35873475
// - 3 2 1 0 (match index)
35883476
void MacroAssembler::compute_match_mask(Register src, Register pattern, Register match_mask,
3589-
Register mask1, Register mask2)
3590-
{
3477+
Register mask1, Register mask2) {
35913478
xorr(src, pattern, src);
35923479
sub(match_mask, src, mask1);
35933480
orr(src, src, mask2);
@@ -3671,24 +3558,21 @@ void MacroAssembler::cad(Register dst, Register src1, Register src2, Register ca
36713558
}
36723559

36733560
// add two input with carry
3674-
void MacroAssembler::adc(Register dst, Register src1, Register src2, Register carry)
3675-
{
3561+
void MacroAssembler::adc(Register dst, Register src1, Register src2, Register carry) {
36763562
assert_different_registers(dst, carry);
36773563
add(dst, src1, src2);
36783564
add(dst, dst, carry);
36793565
}
36803566

36813567
// add two unsigned input with carry and output carry
3682-
void MacroAssembler::cadc(Register dst, Register src1, Register src2, Register carry)
3683-
{
3568+
void MacroAssembler::cadc(Register dst, Register src1, Register src2, Register carry) {
36843569
assert_different_registers(dst, src2);
36853570
adc(dst, src1, src2, carry);
36863571
sltu(carry, dst, src2);
36873572
}
36883573

36893574
void MacroAssembler::add2_with_carry(Register final_dest_hi, Register dest_hi, Register dest_lo,
3690-
Register src1, Register src2, Register carry)
3691-
{
3575+
Register src1, Register src2, Register carry) {
36923576
cad(dest_lo, dest_lo, src1, carry);
36933577
add(dest_hi, dest_hi, carry);
36943578
cad(dest_lo, dest_lo, src2, carry);
@@ -3701,8 +3585,7 @@ void MacroAssembler::add2_with_carry(Register final_dest_hi, Register dest_hi, R
37013585
void MacroAssembler::multiply_32_x_32_loop(Register x, Register xstart, Register x_xstart,
37023586
Register y, Register y_idx, Register z,
37033587
Register carry, Register product,
3704-
Register idx, Register kdx)
3705-
{
3588+
Register idx, Register kdx) {
37063589
// jlong carry, x[], y[], z[];
37073590
// for (int idx=ystart, kdx=ystart+1+xstart; idx >= 0; idx--, kdx--) {
37083591
// long product = y[idx] * x[xstart] + carry;
@@ -3738,8 +3621,7 @@ void MacroAssembler::multiply_32_x_32_loop(Register x, Register xstart, Register
37383621
void MacroAssembler::multiply_64_x_64_loop(Register x, Register xstart, Register x_xstart,
37393622
Register y, Register y_idx, Register z,
37403623
Register carry, Register product,
3741-
Register idx, Register kdx)
3742-
{
3624+
Register idx, Register kdx) {
37433625
//
37443626
// jlong carry, x[], y[], z[];
37453627
// for (int idx=ystart, kdx=ystart+1+xstart; idx >= 0; idx--, kdx--) {
@@ -3803,8 +3685,7 @@ void MacroAssembler::multiply_128_x_128_loop(Register y, Register z,
38033685
Register idx, Register jdx,
38043686
Register yz_idx1, Register yz_idx2,
38053687
Register tmp, Register tmp3, Register tmp4,
3806-
Register tmp6, Register product_hi)
3807-
{
3688+
Register tmp6, Register product_hi) {
38083689
// jlong carry, x[], y[], z[];
38093690
// int kdx = xstart+1;
38103691
// for (int idx=ystart-2; idx >= 0; idx -= 2) { // Third loop
@@ -3939,8 +3820,7 @@ void MacroAssembler::multiply_128_x_128_loop(Register y, Register z,
39393820
void MacroAssembler::multiply_to_len(Register x, Register xlen, Register y, Register ylen,
39403821
Register z, Register zlen,
39413822
Register tmp1, Register tmp2, Register tmp3, Register tmp4,
3942-
Register tmp5, Register tmp6, Register product_hi)
3943-
{
3823+
Register tmp5, Register tmp6, Register product_hi) {
39443824
assert_different_registers(x, xlen, y, ylen, z, zlen, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6);
39453825

39463826
const Register idx = tmp1;
@@ -4104,8 +3984,7 @@ void MacroAssembler::multiply_to_len(Register x, Register xlen, Register y, Regi
41043984
// Count bits of trailing zero chars from lsb to msb until first non-zero element.
41053985
// For LL case, one byte for one element, so shift 8 bits once, and for other case,
41063986
// shift 16 bits once.
4107-
void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1, Register tmp2)
4108-
{
3987+
void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1, Register tmp2) {
41093988
if (UseZbb) {
41103989
assert_different_registers(Rd, Rs, tmp1);
41113990
int step = isLL ? 8 : 16;
@@ -4114,6 +3993,7 @@ void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1
41143993
sub(Rd, Rd, tmp1);
41153994
return;
41163995
}
3996+
41173997
assert_different_registers(Rd, Rs, tmp1, tmp2);
41183998
Label Loop;
41193999
int step = isLL ? 8 : 16;
@@ -4131,13 +4011,12 @@ void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1
41314011
// inflate into a register, for example:
41324012
// Rs: A7A6A5A4A3A2A1A0
41334013
// Rd: 00A300A200A100A0
4134-
void MacroAssembler::inflate_lo32(Register Rd, Register Rs, Register tmp1, Register tmp2)
4135-
{
4014+
void MacroAssembler::inflate_lo32(Register Rd, Register Rs, Register tmp1, Register tmp2) {
41364015
assert_different_registers(Rd, Rs, tmp1, tmp2);
4016+
41374017
mv(tmp1, 0xFF);
41384018
mv(Rd, zr);
4139-
for (int i = 0; i <= 3; i++)
4140-
{
4019+
for (int i = 0; i <= 3; i++) {
41414020
andr(tmp2, Rs, tmp1);
41424021
if (i) {
41434022
slli(tmp2, tmp2, i * 8);
@@ -4153,13 +4032,12 @@ void MacroAssembler::inflate_lo32(Register Rd, Register Rs, Register tmp1, Regis
41534032
// inflate into a register, for example:
41544033
// Rs: A7A6A5A4A3A2A1A0
41554034
// Rd: 00A700A600A500A4
4156-
void MacroAssembler::inflate_hi32(Register Rd, Register Rs, Register tmp1, Register tmp2)
4157-
{
4035+
void MacroAssembler::inflate_hi32(Register Rd, Register Rs, Register tmp1, Register tmp2) {
41584036
assert_different_registers(Rd, Rs, tmp1, tmp2);
4037+
41594038
mv(tmp1, 0xFF00000000);
41604039
mv(Rd, zr);
4161-
for (int i = 0; i <= 3; i++)
4162-
{
4040+
for (int i = 0; i <= 3; i++) {
41634041
andr(tmp2, Rs, tmp1);
41644042
orr(Rd, Rd, tmp2);
41654043
srli(Rd, Rd, 8);
@@ -4182,13 +4060,13 @@ const int MacroAssembler::zero_words_block_size = 8;
41824060
// cnt: Count in HeapWords.
41834061
//
41844062
// ptr, cnt, and t0 are clobbered.
4185-
address MacroAssembler::zero_words(Register ptr, Register cnt)
4186-
{
4063+
address MacroAssembler::zero_words(Register ptr, Register cnt) {
41874064
assert(is_power_of_2(zero_words_block_size), "adjust this");
41884065
assert(ptr == x28 && cnt == x29, "mismatch in register usage");
41894066
assert_different_registers(cnt, t0);
41904067

41914068
BLOCK_COMMENT("zero_words {");
4069+
41924070
mv(t0, zero_words_block_size);
41934071
Label around, done, done16;
41944072
bltu(cnt, t0, around);
@@ -4224,6 +4102,7 @@ address MacroAssembler::zero_words(Register ptr, Register cnt)
42244102
sd(zr, Address(ptr, 0));
42254103
bind(l);
42264104
}
4105+
42274106
BLOCK_COMMENT("} zero_words");
42284107
postcond(pc() != badAddress);
42294108
return pc();
@@ -4233,8 +4112,7 @@ address MacroAssembler::zero_words(Register ptr, Register cnt)
42334112

42344113
// base: Address of a buffer to be zeroed, 8 bytes aligned.
42354114
// cnt: Immediate count in HeapWords.
4236-
void MacroAssembler::zero_words(Register base, u_int64_t cnt)
4237-
{
4115+
void MacroAssembler::zero_words(Register base, u_int64_t cnt) {
42384116
assert_different_registers(base, t0, t1);
42394117

42404118
BLOCK_COMMENT("zero_words {");
@@ -4272,8 +4150,7 @@ void MacroAssembler::zero_words(Register base, u_int64_t cnt)
42724150
// cnt: Count in 8-byte unit.
42734151
// value: Value to be filled with.
42744152
// base will point to the end of the buffer after filling.
4275-
void MacroAssembler::fill_words(Register base, Register cnt, Register value)
4276-
{
4153+
void MacroAssembler::fill_words(Register base, Register cnt, Register value) {
42774154
// Algorithm:
42784155
//
42794156
// t0 = cnt & 7

0 commit comments

Comments
 (0)