Skip to content

Commit ede3f4e

Browse files
lewurmAndrew Haley
authored andcommitted
8274795: AArch64: avoid spilling and restoring r18 in macro assembler
Reviewed-by: aph
1 parent 40d69f0 commit ede3f4e

File tree

3 files changed

+12
-17
lines changed

3 files changed

+12
-17
lines changed

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1855,15 +1855,6 @@ void MacroAssembler::increment(Address dst, int value)
18551855
str(rscratch1, dst);
18561856
}
18571857

1858-
1859-
void MacroAssembler::pusha() {
1860-
push(0x7fffffff, sp);
1861-
}
1862-
1863-
void MacroAssembler::popa() {
1864-
pop(0x7fffffff, sp);
1865-
}
1866-
18671858
// Push lots of registers in the bit set supplied. Don't push sp.
18681859
// Return the number of words pushed
18691860
int MacroAssembler::push(unsigned int bitset, Register stack) {
@@ -2505,7 +2496,7 @@ void MacroAssembler::pop_call_clobbered_registers_except(RegSet exclude) {
25052496

25062497
void MacroAssembler::push_CPU_state(bool save_vectors, bool use_sve,
25072498
int sve_vector_size_in_bytes) {
2508-
push(0x3fffffff, sp); // integer registers except lr & sp
2499+
push(RegSet::range(r0, r29), sp); // integer registers except lr & sp
25092500
if (save_vectors && use_sve && sve_vector_size_in_bytes > 16) {
25102501
sub(sp, sp, sve_vector_size_in_bytes * FloatRegisterImpl::number_of_registers);
25112502
for (int i = 0; i < FloatRegisterImpl::number_of_registers; i++) {
@@ -2543,7 +2534,14 @@ void MacroAssembler::pop_CPU_state(bool restore_vectors, bool use_sve,
25432534
reinitialize_ptrue();
25442535
}
25452536

2546-
pop(0x3fffffff, sp); // integer registers except lr & sp
2537+
// integer registers except lr & sp
2538+
pop(RegSet::range(r0, r17), sp);
2539+
#ifdef R18_RESERVED
2540+
ldp(zr, r19, Address(post(sp, 2 * wordSize)));
2541+
pop(RegSet::range(r20, r29), sp);
2542+
#else
2543+
pop(RegSet::range(r18_tls, r29), sp);
2544+
#endif
25472545
}
25482546

25492547
/**

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,10 +1106,6 @@ class MacroAssembler: public Assembler {
11061106
void push(Register src);
11071107
void pop(Register dst);
11081108

1109-
// push all registers onto the stack
1110-
void pusha();
1111-
void popa();
1112-
11131109
void repne_scan(Register addr, Register value, Register count,
11141110
Register scratch);
11151111
void repne_scanw(Register addr, Register value, Register count,

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,11 +1397,12 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
13971397
__ cmp(rscratch1, (u1)StackOverflow::stack_guard_yellow_reserved_disabled);
13981398
__ br(Assembler::NE, no_reguard);
13991399

1400-
__ pusha(); // XXX only save smashed registers
1400+
__ push_call_clobbered_registers();
14011401
__ mov(c_rarg0, rthread);
14021402
__ mov(rscratch2, CAST_FROM_FN_PTR(address, SharedRuntime::reguard_yellow_pages));
14031403
__ blr(rscratch2);
1404-
__ popa(); // XXX only restore smashed registers
1404+
__ pop_call_clobbered_registers();
1405+
14051406
__ bind(no_reguard);
14061407
}
14071408

0 commit comments

Comments
 (0)