@@ -629,13 +629,49 @@ inline unsigned encodeRlist(MCRegister EndReg, bool IsRV32E = false) {
629629inline static unsigned getStackAdjBase (unsigned RlistVal, bool IsRV64) {
630630 assert (RlistVal != RLISTENCODE::INVALID_RLIST &&
631631 " {ra, s0-s10} is not supported, s11 must be included." );
632- unsigned NumRegs = (RlistVal - RLISTENCODE::RA) + 1 ;
633- // s10 and s11 are saved together.
634- if (RlistVal == RLISTENCODE::RA_S0_S11)
635- ++NumRegs;
636-
637- unsigned RegSize = IsRV64 ? 8 : 4 ;
638- return alignTo (NumRegs * RegSize, 16 );
632+ if (!IsRV64) {
633+ switch (RlistVal) {
634+ case RLISTENCODE::RA:
635+ case RLISTENCODE::RA_S0:
636+ case RLISTENCODE::RA_S0_S1:
637+ case RLISTENCODE::RA_S0_S2:
638+ return 16 ;
639+ case RLISTENCODE::RA_S0_S3:
640+ case RLISTENCODE::RA_S0_S4:
641+ case RLISTENCODE::RA_S0_S5:
642+ case RLISTENCODE::RA_S0_S6:
643+ return 32 ;
644+ case RLISTENCODE::RA_S0_S7:
645+ case RLISTENCODE::RA_S0_S8:
646+ case RLISTENCODE::RA_S0_S9:
647+ return 48 ;
648+ case RLISTENCODE::RA_S0_S11:
649+ return 64 ;
650+ }
651+ } else {
652+ switch (RlistVal) {
653+ case RLISTENCODE::RA:
654+ case RLISTENCODE::RA_S0:
655+ return 16 ;
656+ case RLISTENCODE::RA_S0_S1:
657+ case RLISTENCODE::RA_S0_S2:
658+ return 32 ;
659+ case RLISTENCODE::RA_S0_S3:
660+ case RLISTENCODE::RA_S0_S4:
661+ return 48 ;
662+ case RLISTENCODE::RA_S0_S5:
663+ case RLISTENCODE::RA_S0_S6:
664+ return 64 ;
665+ case RLISTENCODE::RA_S0_S7:
666+ case RLISTENCODE::RA_S0_S8:
667+ return 80 ;
668+ case RLISTENCODE::RA_S0_S9:
669+ return 96 ;
670+ case RLISTENCODE::RA_S0_S11:
671+ return 112 ;
672+ }
673+ }
674+ llvm_unreachable (" Unexpected RlistVal" );
639675}
640676
641677void printRlist (unsigned SlistEncode, raw_ostream &OS);
0 commit comments