@@ -1526,21 +1526,24 @@ void MacroAssembler::li(Register rd, Operand j, LiFlags mode) {
15261526}
15271527
15281528void MacroAssembler::MultiPush (RegList regs) {
1529- int16_t stack_offset = 0 ;
1529+ int16_t num_to_push = regs.Count ();
1530+ int16_t stack_offset = num_to_push * kSystemPointerSize ;
15301531
1532+ Sub_d (sp, sp, Operand (stack_offset));
15311533 for (int16_t i = kNumRegisters - 1 ; i >= 0 ; i--) {
15321534 if ((regs.bits () & (1 << i)) != 0 ) {
15331535 stack_offset -= kSystemPointerSize ;
15341536 St_d (ToRegister (i), MemOperand (sp, stack_offset));
15351537 }
15361538 }
1537- addi_d (sp, sp, stack_offset);
15381539}
15391540
15401541void MacroAssembler::MultiPush (RegList regs1, RegList regs2) {
15411542 DCHECK ((regs1 & regs2).is_empty ());
1542- int16_t stack_offset = 0 ;
1543+ int16_t num_to_push = regs1.Count () + regs2.Count ();
1544+ int16_t stack_offset = num_to_push * kSystemPointerSize ;
15431545
1546+ Sub_d (sp, sp, Operand (stack_offset));
15441547 for (int16_t i = kNumRegisters - 1 ; i >= 0 ; i--) {
15451548 if ((regs1.bits () & (1 << i)) != 0 ) {
15461549 stack_offset -= kSystemPointerSize ;
@@ -1553,15 +1556,16 @@ void MacroAssembler::MultiPush(RegList regs1, RegList regs2) {
15531556 St_d (ToRegister (i), MemOperand (sp, stack_offset));
15541557 }
15551558 }
1556- addi_d (sp, sp, stack_offset);
15571559}
15581560
15591561void MacroAssembler::MultiPush (RegList regs1, RegList regs2, RegList regs3) {
15601562 DCHECK ((regs1 & regs2).is_empty ());
15611563 DCHECK ((regs1 & regs3).is_empty ());
15621564 DCHECK ((regs2 & regs3).is_empty ());
1563- int16_t stack_offset = 0 ;
1565+ int16_t num_to_push = regs1.Count () + regs2.Count () + regs3.Count ();
1566+ int16_t stack_offset = num_to_push * kSystemPointerSize ;
15641567
1568+ Sub_d (sp, sp, Operand (stack_offset));
15651569 for (int16_t i = kNumRegisters - 1 ; i >= 0 ; i--) {
15661570 if ((regs1.bits () & (1 << i)) != 0 ) {
15671571 stack_offset -= kSystemPointerSize ;
@@ -1580,7 +1584,6 @@ void MacroAssembler::MultiPush(RegList regs1, RegList regs2, RegList regs3) {
15801584 St_d (ToRegister (i), MemOperand (sp, stack_offset));
15811585 }
15821586 }
1583- addi_d (sp, sp, stack_offset);
15841587}
15851588
15861589void MacroAssembler::MultiPop (RegList regs) {
@@ -3898,9 +3901,8 @@ void MacroAssembler::EnterFrame(StackFrame::Type type) {
38983901
38993902void MacroAssembler::LeaveFrame (StackFrame::Type type) {
39003903 ASM_CODE_COMMENT (this );
3901- addi_d (sp, fp, 2 * kSystemPointerSize );
3902- Ld_d (ra, MemOperand (fp, 1 * kSystemPointerSize ));
3903- Ld_d (fp, MemOperand (fp, 0 * kSystemPointerSize ));
3904+ Move (sp, fp);
3905+ Pop (ra, fp);
39043906}
39053907
39063908void MacroAssembler::EnterExitFrame (int stack_space,
0 commit comments