@@ -629,13 +629,49 @@ inline unsigned encodeRlist(MCRegister EndReg, bool IsRV32E = false) {
629
629
inline static unsigned getStackAdjBase (unsigned RlistVal, bool IsRV64) {
630
630
assert (RlistVal != RLISTENCODE::INVALID_RLIST &&
631
631
" {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" );
639
675
}
640
676
641
677
void printRlist (unsigned SlistEncode, raw_ostream &OS);
0 commit comments