Skip to content

Commit c3b285a

Browse files
committed
8296916: RISC-V: Move some small macro-assembler functions to header file
Reviewed-by: fjiang, yadongwang, shade
1 parent 720c3d0 commit c3b285a

File tree

3 files changed

+146
-186
lines changed

3 files changed

+146
-186
lines changed

src/hotspot/cpu/riscv/assembler_riscv.hpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,7 +1670,7 @@ enum Nf {
16701670

16711671
// ====================================
16721672
// RISC-V Bit-Manipulation Extension
1673-
// Currently only support Zba and Zbb.
1673+
// Currently only support Zba and Zbb bitmanip extensions.
16741674
// ====================================
16751675
#define INSN(NAME, op, funct3, funct7) \
16761676
void NAME(Register Rd, Register Rs1, Register Rs2) { \
@@ -2752,12 +2752,6 @@ enum Nf {
27522752

27532753
#undef INSN
27542754

2755-
// RVB pseudo instructions
2756-
// zero extend word
2757-
void zext_w(Register Rd, Register Rs) {
2758-
add_uw(Rd, Rs, zr);
2759-
}
2760-
27612755
// Stack overflow checking
27622756
virtual void bang_stack_with_offset(int offset) { Unimplemented(); }
27632757

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 23 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -670,96 +670,6 @@ void MacroAssembler::super_call_VM_leaf(address entry_point, Register arg_0, Reg
670670
MacroAssembler::call_VM_leaf_base(entry_point, 4);
671671
}
672672

673-
void MacroAssembler::nop() {
674-
addi(x0, x0, 0);
675-
}
676-
677-
void MacroAssembler::mv(Register Rd, Register Rs) {
678-
if (Rd != Rs) {
679-
addi(Rd, Rs, 0);
680-
}
681-
}
682-
683-
void MacroAssembler::notr(Register Rd, Register Rs) {
684-
xori(Rd, Rs, -1);
685-
}
686-
687-
void MacroAssembler::neg(Register Rd, Register Rs) {
688-
sub(Rd, x0, Rs);
689-
}
690-
691-
void MacroAssembler::negw(Register Rd, Register Rs) {
692-
subw(Rd, x0, Rs);
693-
}
694-
695-
void MacroAssembler::sext_w(Register Rd, Register Rs) {
696-
addiw(Rd, Rs, 0);
697-
}
698-
699-
void MacroAssembler::zext_b(Register Rd, Register Rs) {
700-
andi(Rd, Rs, 0xFF);
701-
}
702-
703-
void MacroAssembler::seqz(Register Rd, Register Rs) {
704-
sltiu(Rd, Rs, 1);
705-
}
706-
707-
void MacroAssembler::snez(Register Rd, Register Rs) {
708-
sltu(Rd, x0, Rs);
709-
}
710-
711-
void MacroAssembler::sltz(Register Rd, Register Rs) {
712-
slt(Rd, Rs, x0);
713-
}
714-
715-
void MacroAssembler::sgtz(Register Rd, Register Rs) {
716-
slt(Rd, x0, Rs);
717-
}
718-
719-
void MacroAssembler::fmv_s(FloatRegister Rd, FloatRegister Rs) {
720-
if (Rd != Rs) {
721-
fsgnj_s(Rd, Rs, Rs);
722-
}
723-
}
724-
725-
void MacroAssembler::fabs_s(FloatRegister Rd, FloatRegister Rs) {
726-
fsgnjx_s(Rd, Rs, Rs);
727-
}
728-
729-
void MacroAssembler::fneg_s(FloatRegister Rd, FloatRegister Rs) {
730-
fsgnjn_s(Rd, Rs, Rs);
731-
}
732-
733-
void MacroAssembler::fmv_d(FloatRegister Rd, FloatRegister Rs) {
734-
if (Rd != Rs) {
735-
fsgnj_d(Rd, Rs, Rs);
736-
}
737-
}
738-
739-
void MacroAssembler::fabs_d(FloatRegister Rd, FloatRegister Rs) {
740-
fsgnjx_d(Rd, Rs, Rs);
741-
}
742-
743-
void MacroAssembler::fneg_d(FloatRegister Rd, FloatRegister Rs) {
744-
fsgnjn_d(Rd, Rs, Rs);
745-
}
746-
747-
void MacroAssembler::vmnot_m(VectorRegister vd, VectorRegister vs) {
748-
vmnand_mm(vd, vs, vs);
749-
}
750-
751-
void MacroAssembler::vncvt_x_x_w(VectorRegister vd, VectorRegister vs, VectorMask vm) {
752-
vnsrl_wx(vd, vs, x0, vm);
753-
}
754-
755-
void MacroAssembler::vneg_v(VectorRegister vd, VectorRegister vs) {
756-
vrsub_vx(vd, vs, x0);
757-
}
758-
759-
void MacroAssembler::vfneg_v(VectorRegister vd, VectorRegister vs) {
760-
vfsgnjn_vv(vd, vs, vs);
761-
}
762-
763673
void MacroAssembler::baseOffset32(Register Rd, const Address &adr, int32_t &offset) {
764674
assert(Rd != noreg, "Rd must not be empty register!");
765675
guarantee(Rd != adr.base(), "should use different registers!");
@@ -1625,21 +1535,6 @@ void MacroAssembler::reinit_heapbase() {
16251535
}
16261536
}
16271537

1628-
void MacroAssembler::mv(Register Rd, Address dest) {
1629-
assert(dest.getMode() == Address::literal, "Address mode should be Address::literal");
1630-
relocate(dest.rspec(), [&] {
1631-
movptr(Rd, dest.target());
1632-
});
1633-
}
1634-
1635-
void MacroAssembler::mv(Register Rd, RegisterOrConstant src) {
1636-
if (src.is_register()) {
1637-
mv(Rd, src.as_register());
1638-
} else {
1639-
mv(Rd, src.as_constant());
1640-
}
1641-
}
1642-
16431538
void MacroAssembler::movptr(Register Rd, address addr, int32_t &offset) {
16441539
int64_t imm64 = (int64_t)addr;
16451540
#ifndef PRODUCT
@@ -1669,16 +1564,6 @@ void MacroAssembler::movptr(Register Rd, address addr, int32_t &offset) {
16691564
offset = imm64 & 0x3f;
16701565
}
16711566

1672-
void MacroAssembler::movptr(Register Rd, uintptr_t imm64) {
1673-
movptr(Rd, (address)imm64);
1674-
}
1675-
1676-
void MacroAssembler::movptr(Register Rd, address addr) {
1677-
int offset = 0;
1678-
movptr(Rd, addr, offset);
1679-
addi(Rd, Rd, offset);
1680-
}
1681-
16821567
void MacroAssembler::add(Register Rd, Register Rn, int64_t increment, Register temp) {
16831568
if (is_imm_in_range(increment, 12, 0)) {
16841569
addi(Rd, Rn, increment);
@@ -3357,8 +3242,7 @@ void MacroAssembler::load_method_holder(Register holder, Register method) {
33573242
void MacroAssembler::compute_index(Register haystack, Register trailing_zeros,
33583243
Register match_mask, Register result,
33593244
Register ch2, Register tmp,
3360-
bool haystack_isL)
3361-
{
3245+
bool haystack_isL) {
33623246
int haystack_chr_shift = haystack_isL ? 0 : 1;
33633247
srl(match_mask, match_mask, trailing_zeros);
33643248
srli(match_mask, match_mask, 1);
@@ -3379,8 +3263,7 @@ void MacroAssembler::compute_index(Register haystack, Register trailing_zeros,
33793263
// - 0x8000800080008000 (UTF16)
33803264
// - 3 2 1 0 (match index)
33813265
void MacroAssembler::compute_match_mask(Register src, Register pattern, Register match_mask,
3382-
Register mask1, Register mask2)
3383-
{
3266+
Register mask1, Register mask2) {
33843267
xorr(src, pattern, src);
33853268
sub(match_mask, src, mask1);
33863269
orr(src, src, mask2);
@@ -3464,24 +3347,21 @@ void MacroAssembler::cad(Register dst, Register src1, Register src2, Register ca
34643347
}
34653348

34663349
// add two input with carry
3467-
void MacroAssembler::adc(Register dst, Register src1, Register src2, Register carry)
3468-
{
3350+
void MacroAssembler::adc(Register dst, Register src1, Register src2, Register carry) {
34693351
assert_different_registers(dst, carry);
34703352
add(dst, src1, src2);
34713353
add(dst, dst, carry);
34723354
}
34733355

34743356
// add two unsigned input with carry and output carry
3475-
void MacroAssembler::cadc(Register dst, Register src1, Register src2, Register carry)
3476-
{
3357+
void MacroAssembler::cadc(Register dst, Register src1, Register src2, Register carry) {
34773358
assert_different_registers(dst, src2);
34783359
adc(dst, src1, src2, carry);
34793360
sltu(carry, dst, src2);
34803361
}
34813362

34823363
void MacroAssembler::add2_with_carry(Register final_dest_hi, Register dest_hi, Register dest_lo,
3483-
Register src1, Register src2, Register carry)
3484-
{
3364+
Register src1, Register src2, Register carry) {
34853365
cad(dest_lo, dest_lo, src1, carry);
34863366
add(dest_hi, dest_hi, carry);
34873367
cad(dest_lo, dest_lo, src2, carry);
@@ -3494,8 +3374,7 @@ void MacroAssembler::add2_with_carry(Register final_dest_hi, Register dest_hi, R
34943374
void MacroAssembler::multiply_32_x_32_loop(Register x, Register xstart, Register x_xstart,
34953375
Register y, Register y_idx, Register z,
34963376
Register carry, Register product,
3497-
Register idx, Register kdx)
3498-
{
3377+
Register idx, Register kdx) {
34993378
// jlong carry, x[], y[], z[];
35003379
// for (int idx=ystart, kdx=ystart+1+xstart; idx >= 0; idx--, kdx--) {
35013380
// long product = y[idx] * x[xstart] + carry;
@@ -3531,8 +3410,7 @@ void MacroAssembler::multiply_32_x_32_loop(Register x, Register xstart, Register
35313410
void MacroAssembler::multiply_64_x_64_loop(Register x, Register xstart, Register x_xstart,
35323411
Register y, Register y_idx, Register z,
35333412
Register carry, Register product,
3534-
Register idx, Register kdx)
3535-
{
3413+
Register idx, Register kdx) {
35363414
//
35373415
// jlong carry, x[], y[], z[];
35383416
// for (int idx=ystart, kdx=ystart+1+xstart; idx >= 0; idx--, kdx--) {
@@ -3596,8 +3474,7 @@ void MacroAssembler::multiply_128_x_128_loop(Register y, Register z,
35963474
Register idx, Register jdx,
35973475
Register yz_idx1, Register yz_idx2,
35983476
Register tmp, Register tmp3, Register tmp4,
3599-
Register tmp6, Register product_hi)
3600-
{
3477+
Register tmp6, Register product_hi) {
36013478
// jlong carry, x[], y[], z[];
36023479
// int kdx = xstart+1;
36033480
// for (int idx=ystart-2; idx >= 0; idx -= 2) { // Third loop
@@ -3732,8 +3609,7 @@ void MacroAssembler::multiply_128_x_128_loop(Register y, Register z,
37323609
void MacroAssembler::multiply_to_len(Register x, Register xlen, Register y, Register ylen,
37333610
Register z, Register zlen,
37343611
Register tmp1, Register tmp2, Register tmp3, Register tmp4,
3735-
Register tmp5, Register tmp6, Register product_hi)
3736-
{
3612+
Register tmp5, Register tmp6, Register product_hi) {
37373613
assert_different_registers(x, xlen, y, ylen, z, zlen, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6);
37383614

37393615
const Register idx = tmp1;
@@ -3897,8 +3773,7 @@ void MacroAssembler::multiply_to_len(Register x, Register xlen, Register y, Regi
38973773
// Count bits of trailing zero chars from lsb to msb until first non-zero element.
38983774
// For LL case, one byte for one element, so shift 8 bits once, and for other case,
38993775
// shift 16 bits once.
3900-
void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1, Register tmp2)
3901-
{
3776+
void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1, Register tmp2) {
39023777
if (UseZbb) {
39033778
assert_different_registers(Rd, Rs, tmp1);
39043779
int step = isLL ? 8 : 16;
@@ -3907,6 +3782,7 @@ void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1
39073782
sub(Rd, Rd, tmp1);
39083783
return;
39093784
}
3785+
39103786
assert_different_registers(Rd, Rs, tmp1, tmp2);
39113787
Label Loop;
39123788
int step = isLL ? 8 : 16;
@@ -3924,13 +3800,12 @@ void MacroAssembler::ctzc_bit(Register Rd, Register Rs, bool isLL, Register tmp1
39243800
// inflate into a register, for example:
39253801
// Rs: A7A6A5A4A3A2A1A0
39263802
// Rd: 00A300A200A100A0
3927-
void MacroAssembler::inflate_lo32(Register Rd, Register Rs, Register tmp1, Register tmp2)
3928-
{
3803+
void MacroAssembler::inflate_lo32(Register Rd, Register Rs, Register tmp1, Register tmp2) {
39293804
assert_different_registers(Rd, Rs, tmp1, tmp2);
3805+
39303806
mv(tmp1, 0xFF);
39313807
mv(Rd, zr);
3932-
for (int i = 0; i <= 3; i++)
3933-
{
3808+
for (int i = 0; i <= 3; i++) {
39343809
andr(tmp2, Rs, tmp1);
39353810
if (i) {
39363811
slli(tmp2, tmp2, i * 8);
@@ -3946,13 +3821,12 @@ void MacroAssembler::inflate_lo32(Register Rd, Register Rs, Register tmp1, Regis
39463821
// inflate into a register, for example:
39473822
// Rs: A7A6A5A4A3A2A1A0
39483823
// Rd: 00A700A600A500A4
3949-
void MacroAssembler::inflate_hi32(Register Rd, Register Rs, Register tmp1, Register tmp2)
3950-
{
3824+
void MacroAssembler::inflate_hi32(Register Rd, Register Rs, Register tmp1, Register tmp2) {
39513825
assert_different_registers(Rd, Rs, tmp1, tmp2);
3826+
39523827
mv(tmp1, 0xFF00000000);
39533828
mv(Rd, zr);
3954-
for (int i = 0; i <= 3; i++)
3955-
{
3829+
for (int i = 0; i <= 3; i++) {
39563830
andr(tmp2, Rs, tmp1);
39573831
orr(Rd, Rd, tmp2);
39583832
srli(Rd, Rd, 8);
@@ -3975,13 +3849,13 @@ const int MacroAssembler::zero_words_block_size = 8;
39753849
// cnt: Count in HeapWords.
39763850
//
39773851
// ptr, cnt, and t0 are clobbered.
3978-
address MacroAssembler::zero_words(Register ptr, Register cnt)
3979-
{
3852+
address MacroAssembler::zero_words(Register ptr, Register cnt) {
39803853
assert(is_power_of_2(zero_words_block_size), "adjust this");
39813854
assert(ptr == x28 && cnt == x29, "mismatch in register usage");
39823855
assert_different_registers(cnt, t0);
39833856

39843857
BLOCK_COMMENT("zero_words {");
3858+
39853859
mv(t0, zero_words_block_size);
39863860
Label around, done, done16;
39873861
bltu(cnt, t0, around);
@@ -4017,6 +3891,7 @@ address MacroAssembler::zero_words(Register ptr, Register cnt)
40173891
sd(zr, Address(ptr, 0));
40183892
bind(l);
40193893
}
3894+
40203895
BLOCK_COMMENT("} zero_words");
40213896
postcond(pc() != badAddress);
40223897
return pc();
@@ -4026,8 +3901,7 @@ address MacroAssembler::zero_words(Register ptr, Register cnt)
40263901

40273902
// base: Address of a buffer to be zeroed, 8 bytes aligned.
40283903
// cnt: Immediate count in HeapWords.
4029-
void MacroAssembler::zero_words(Register base, uint64_t cnt)
4030-
{
3904+
void MacroAssembler::zero_words(Register base, uint64_t cnt) {
40313905
assert_different_registers(base, t0, t1);
40323906

40333907
BLOCK_COMMENT("zero_words {");
@@ -4065,8 +3939,7 @@ void MacroAssembler::zero_words(Register base, uint64_t cnt)
40653939
// cnt: Count in 8-byte unit.
40663940
// value: Value to be filled with.
40673941
// base will point to the end of the buffer after filling.
4068-
void MacroAssembler::fill_words(Register base, Register cnt, Register value)
4069-
{
3942+
void MacroAssembler::fill_words(Register base, Register cnt, Register value) {
40703943
// Algorithm:
40713944
//
40723945
// t0 = cnt & 7
@@ -4413,6 +4286,7 @@ void MacroAssembler::object_move(OopMap* map,
44134286
bool is_receiver,
44144287
int* receiver_offset) {
44154288
assert_cond(map != NULL && receiver_offset != NULL);
4289+
44164290
// must pass a handle. First figure out the location we use as a handle
44174291
Register rHandle = dst.first()->is_stack() ? t1 : dst.first()->as_Register();
44184292

0 commit comments

Comments
 (0)