@@ -2040,11 +2040,17 @@ void MacroAssembler::increment(Address dst, int value)
20402040
20412041
20422042void MacroAssembler::pusha () {
2043- push (0x7fffffff , sp);
2043+ push (RegSet::range (r0, r30) , sp);
20442044}
20452045
20462046void MacroAssembler::popa () {
2047- pop (0x7fffffff , sp);
2047+ pop (RegSet::range (r0, r17), sp);
2048+ #ifdef R18_RESERVED
2049+ ldp (zr, r19, Address (post (sp, 2 * wordSize)));
2050+ pop (RegSet::range (r20, r30), sp);
2051+ #else
2052+ pop (RegSet::range (r18_tls, r30), sp);
2053+ #endif
20482054}
20492055
20502056// Push lots of registers in the bit set supplied. Don't push sp.
@@ -2579,7 +2585,7 @@ void MacroAssembler::pop_call_clobbered_registers() {
25792585
25802586void MacroAssembler::push_CPU_state (bool save_vectors) {
25812587 int step = (save_vectors ? 8 : 4 ) * wordSize;
2582- push (0x3fffffff , sp); // integer registers except lr & sp
2588+ push (RegSet::range (r0, r29) , sp); // integer registers except lr & sp
25832589 mov (rscratch1, -step);
25842590 sub (sp, sp, step);
25852591 for (int i = 28 ; i >= 4 ; i -= 4 ) {
@@ -2594,7 +2600,15 @@ void MacroAssembler::pop_CPU_state(bool restore_vectors) {
25942600 for (int i = 0 ; i <= 28 ; i += 4 )
25952601 ld1 (as_FloatRegister (i), as_FloatRegister (i+1 ), as_FloatRegister (i+2 ),
25962602 as_FloatRegister (i+3 ), restore_vectors ? T2D : T1D, Address (post (sp, step)));
2597- pop (0x3fffffff , sp); // integer registers except lr & sp
2603+
2604+ // integer registers except lr & sp
2605+ pop (RegSet::range (r0, r17), sp);
2606+ #ifdef R18_RESERVED
2607+ ldp (zr, r19, Address (post (sp, 2 * wordSize)));
2608+ pop (RegSet::range (r20, r29), sp);
2609+ #else
2610+ pop (RegSet::range (r18_tls, r29), sp);
2611+ #endif
25982612}
25992613
26002614/* *
0 commit comments