Skip to content

Commit 8271870

Browse files
RealFYangpull[bot]
authored andcommitted
8339248: RISC-V: Remove li64 macro assembler routine and related code
Reviewed-by: rehn, fjiang, luhenry
1 parent 6cfae94 commit 8271870

File tree

2 files changed

+0
-111
lines changed

2 files changed

+0
-111
lines changed

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -146,18 +146,6 @@ bool MacroAssembler::is_li32_at(address instr) {
146146
check_li32_data_dependency(instr);
147147
}
148148

149-
bool MacroAssembler::is_li64_at(address instr) {
150-
return is_lui_at(instr) && // lui
151-
is_addi_at(instr + instruction_size) && // addi
152-
is_slli_shift_at(instr + instruction_size * 2, 12) && // Slli Rd, Rs, 12
153-
is_addi_at(instr + instruction_size * 3) && // addi
154-
is_slli_shift_at(instr + instruction_size * 4, 12) && // Slli Rd, Rs, 12
155-
is_addi_at(instr + instruction_size * 5) && // addi
156-
is_slli_shift_at(instr + instruction_size * 6, 8) && // Slli Rd, Rs, 8
157-
is_addi_at(instr + instruction_size * 7) && // addi
158-
check_li64_data_dependency(instr);
159-
}
160-
161149
bool MacroAssembler::is_lwu_to_zr(address instr) {
162150
assert_cond(instr != nullptr);
163151
return (extract_opcode(instr) == 0b0000011 &&
@@ -909,37 +897,9 @@ void MacroAssembler::li32(Register Rd, int32_t imm) {
909897
upper = (int32_t)upper;
910898
// lui Rd, imm[31:12] + imm[11]
911899
lui(Rd, upper);
912-
// use addiw to distinguish li32 to li64
913900
addiw(Rd, Rd, lower);
914901
}
915902

916-
void MacroAssembler::li64(Register Rd, int64_t imm) {
917-
// Load upper 32 bits. upper = imm[63:32], but if imm[31] == 1 or
918-
// (imm[31:20] == 0x7ff && imm[19] == 1), upper = imm[63:32] + 1.
919-
int64_t lower = imm & 0xffffffff;
920-
lower -= ((lower << 44) >> 44);
921-
int64_t tmp_imm = ((uint64_t)(imm & 0xffffffff00000000)) + (uint64_t)lower;
922-
int32_t upper = (tmp_imm - (int32_t)lower) >> 32;
923-
924-
// Load upper 32 bits
925-
int64_t up = upper, lo = upper;
926-
lo = (lo << 52) >> 52;
927-
up -= lo;
928-
up = (int32_t)up;
929-
lui(Rd, up);
930-
addi(Rd, Rd, lo);
931-
932-
// Load the rest 32 bits.
933-
slli(Rd, Rd, 12);
934-
addi(Rd, Rd, (int32_t)lower >> 20);
935-
slli(Rd, Rd, 12);
936-
lower = ((int32_t)imm << 12) >> 20;
937-
addi(Rd, Rd, lower);
938-
slli(Rd, Rd, 8);
939-
lower = imm & 0xff;
940-
addi(Rd, Rd, lower);
941-
}
942-
943903
void MacroAssembler::li(Register Rd, int64_t imm) {
944904
// int64_t is in range 0x8000 0000 0000 0000 ~ 0x7fff ffff ffff ffff
945905
// li -> c.li
@@ -1741,27 +1701,6 @@ static int patch_addr_in_movptr2(address instruction_address, address target) {
17411701
return MacroAssembler::movptr2_instruction_size;
17421702
}
17431703

1744-
static int patch_imm_in_li64(address branch, address target) {
1745-
const int LI64_INSTRUCTIONS_NUM = 8; // lui + addi + slli + addi + slli + addi + slli + addi
1746-
int64_t lower = (intptr_t)target & 0xffffffff;
1747-
lower = lower - ((lower << 44) >> 44);
1748-
int64_t tmp_imm = ((uint64_t)((intptr_t)target & 0xffffffff00000000)) + (uint64_t)lower;
1749-
int32_t upper = (tmp_imm - (int32_t)lower) >> 32;
1750-
int64_t tmp_upper = upper, tmp_lower = upper;
1751-
tmp_lower = (tmp_lower << 52) >> 52;
1752-
tmp_upper -= tmp_lower;
1753-
tmp_upper >>= 12;
1754-
// Load upper 32 bits. Upper = target[63:32], but if target[31] = 1 or (target[31:20] == 0x7ff && target[19] == 1),
1755-
// upper = target[63:32] + 1.
1756-
Assembler::patch(branch + 0, 31, 12, tmp_upper & 0xfffff); // Lui.
1757-
Assembler::patch(branch + 4, 31, 20, tmp_lower & 0xfff); // Addi.
1758-
// Load the rest 32 bits.
1759-
Assembler::patch(branch + 12, 31, 20, ((int32_t)lower >> 20) & 0xfff); // Addi.
1760-
Assembler::patch(branch + 20, 31, 20, (((intptr_t)target << 44) >> 52) & 0xfff); // Addi.
1761-
Assembler::patch(branch + 28, 31, 20, (intptr_t)target & 0xff); // Addi.
1762-
return LI64_INSTRUCTIONS_NUM * MacroAssembler::instruction_size;
1763-
}
1764-
17651704
static int patch_imm_in_li16u(address branch, uint16_t target) {
17661705
Assembler::patch(branch, 31, 12, target); // patch lui only
17671706
return MacroAssembler::instruction_size;
@@ -1832,16 +1771,6 @@ static address get_target_of_movptr2(address insn_addr) {
18321771
return ret;
18331772
}
18341773

1835-
static address get_target_of_li64(address insn_addr) {
1836-
assert_cond(insn_addr != nullptr);
1837-
intptr_t target_address = (((int64_t)Assembler::sextract(Assembler::ld_instr(insn_addr), 31, 12)) & 0xfffff) << 44; // Lui.
1838-
target_address += ((int64_t)Assembler::sextract(Assembler::ld_instr(insn_addr + 4), 31, 20)) << 32; // Addi.
1839-
target_address += ((int64_t)Assembler::sextract(Assembler::ld_instr(insn_addr + 12), 31, 20)) << 20; // Addi.
1840-
target_address += ((int64_t)Assembler::sextract(Assembler::ld_instr(insn_addr + 20), 31, 20)) << 8; // Addi.
1841-
target_address += ((int64_t)Assembler::sextract(Assembler::ld_instr(insn_addr + 28), 31, 20)); // Addi.
1842-
return (address)target_address;
1843-
}
1844-
18451774
address MacroAssembler::get_target_of_li32(address insn_addr) {
18461775
assert_cond(insn_addr != nullptr);
18471776
intptr_t target_address = (((int64_t)Assembler::sextract(Assembler::ld_instr(insn_addr), 31, 12)) & 0xfffff) << 12; // Lui.
@@ -1864,8 +1793,6 @@ int MacroAssembler::pd_patch_instruction_size(address instruction_address, addre
18641793
return patch_addr_in_movptr1(instruction_address, target);
18651794
} else if (MacroAssembler::is_movptr2_at(instruction_address)) { // movptr2
18661795
return patch_addr_in_movptr2(instruction_address, target);
1867-
} else if (MacroAssembler::is_li64_at(instruction_address)) { // li64
1868-
return patch_imm_in_li64(instruction_address, target);
18691796
} else if (MacroAssembler::is_li32_at(instruction_address)) { // li32
18701797
int64_t imm = (intptr_t)target;
18711798
return patch_imm_in_li32(instruction_address, (int32_t)imm);
@@ -1896,8 +1823,6 @@ address MacroAssembler::target_addr_for_insn(address insn_addr) {
18961823
return get_target_of_movptr1(insn_addr);
18971824
} else if (MacroAssembler::is_movptr2_at(insn_addr)) { // movptr2
18981825
return get_target_of_movptr2(insn_addr);
1899-
} else if (MacroAssembler::is_li64_at(insn_addr)) { // li64
1900-
return get_target_of_li64(insn_addr);
19011826
} else if (MacroAssembler::is_li32_at(insn_addr)) { // li32
19021827
return get_target_of_li32(insn_addr);
19031828
} else {

src/hotspot/cpu/riscv/macroAssembler_riscv.hpp

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -813,7 +813,6 @@ class MacroAssembler: public Assembler {
813813

814814
void li16u(Register Rd, uint16_t imm);
815815
void li32(Register Rd, int32_t imm);
816-
void li64(Register Rd, int64_t imm);
817816
void li (Register Rd, int64_t imm); // optimized load immediate
818817

819818
// mv
@@ -1706,40 +1705,6 @@ class MacroAssembler: public Assembler {
17061705
extract_rs1(last_instr) == extract_rd(add);
17071706
}
17081707

1709-
// the instruction sequence of li64 is as below:
1710-
// lui
1711-
// addi
1712-
// slli
1713-
// addi
1714-
// slli
1715-
// addi
1716-
// slli
1717-
// addi
1718-
static bool check_li64_data_dependency(address instr) {
1719-
address lui = instr;
1720-
address addi1 = lui + instruction_size;
1721-
address slli1 = addi1 + instruction_size;
1722-
address addi2 = slli1 + instruction_size;
1723-
address slli2 = addi2 + instruction_size;
1724-
address addi3 = slli2 + instruction_size;
1725-
address slli3 = addi3 + instruction_size;
1726-
address addi4 = slli3 + instruction_size;
1727-
return extract_rs1(addi1) == extract_rd(lui) &&
1728-
extract_rs1(addi1) == extract_rd(addi1) &&
1729-
extract_rs1(slli1) == extract_rd(addi1) &&
1730-
extract_rs1(slli1) == extract_rd(slli1) &&
1731-
extract_rs1(addi2) == extract_rd(slli1) &&
1732-
extract_rs1(addi2) == extract_rd(addi2) &&
1733-
extract_rs1(slli2) == extract_rd(addi2) &&
1734-
extract_rs1(slli2) == extract_rd(slli2) &&
1735-
extract_rs1(addi3) == extract_rd(slli2) &&
1736-
extract_rs1(addi3) == extract_rd(addi3) &&
1737-
extract_rs1(slli3) == extract_rd(addi3) &&
1738-
extract_rs1(slli3) == extract_rd(slli3) &&
1739-
extract_rs1(addi4) == extract_rd(slli3) &&
1740-
extract_rs1(addi4) == extract_rd(addi4);
1741-
}
1742-
17431708
// the instruction sequence of li16u is as below:
17441709
// lui
17451710
// srli
@@ -1784,7 +1749,6 @@ class MacroAssembler: public Assembler {
17841749
}
17851750

17861751
static bool is_li32_at(address instr);
1787-
static bool is_li64_at(address instr);
17881752
static bool is_pc_relative_at(address branch);
17891753

17901754
static bool is_membar(address addr) {

0 commit comments

Comments
 (0)