mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
8294492: RISC-V: Use li instead of patchable movptr at non-patchable callsites
Reviewed-by: fyang
This commit is contained in:
parent
8491fd5c12
commit
1decdcee71
8 changed files with 51 additions and 82 deletions
|
@ -527,12 +527,18 @@ public:
|
|||
}
|
||||
|
||||
// mv
|
||||
void mv(Register Rd, address addr) { li(Rd, (int64_t)addr); }
|
||||
void mv(Register Rd, address addr) { li(Rd, (int64_t)addr); }
|
||||
void mv(Register Rd, address addr, int32_t &offset) {
|
||||
// Split address into a lower 12-bit sign-extended offset and the remainder,
|
||||
// so that the offset could be encoded in jalr or load/store instruction.
|
||||
offset = ((int32_t)(int64_t)addr << 20) >> 20;
|
||||
li(Rd, (int64_t)addr - offset);
|
||||
}
|
||||
|
||||
template<typename T, ENABLE_IF(std::is_integral<T>::value)>
|
||||
inline void mv(Register Rd, T o) { li(Rd, (int64_t)o); }
|
||||
inline void mv(Register Rd, T o) { li(Rd, (int64_t)o); }
|
||||
|
||||
inline void mvw(Register Rd, int32_t imm32) { mv(Rd, imm32); }
|
||||
inline void mvw(Register Rd, int32_t imm32) { mv(Rd, imm32); }
|
||||
|
||||
void mv(Register Rd, Address dest);
|
||||
void mv(Register Rd, RegisterOrConstant src);
|
||||
|
@ -890,6 +896,18 @@ public:
|
|||
|
||||
void rt_call(address dest, Register tmp = t0);
|
||||
|
||||
void call(const address dest, Register temp = t0) {
|
||||
assert_cond(dest != NULL);
|
||||
assert(temp != noreg, "temp must not be empty register!");
|
||||
int32_t offset = 0;
|
||||
mv(temp, dest, offset);
|
||||
jalr(x1, temp, offset);
|
||||
}
|
||||
|
||||
void ret() {
|
||||
jalr(x0, x1, 0);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
#ifdef ASSERT
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue