The RISC-V Calling Convention states that registers a0 and a1 can be used for return values, rather than all eight registers a0~a7. When there are more than two values needed "returning", we can use the stack otherwise. Why? Are there any advantages to do that?
I'm learning RISC-V language as part of my study of computer architecture. I've noticed that we can pass arguments to a function using all of the eight a0~a7 registers, but only two of them, a0 and a1, can be used to return the return values, according to some RISC-V Calling Conventions, like Understanding RISC-V Calling Convention and RISC-V Calling Conventions. I'm confused about why the convention includes the rule that only a0 and a1 should be used to return. I skimmed over the two articles mentioned above, but I failed to find anything that explains this. In my opinion, the fact that these a0~a7 registers are not preserved across function calls indicates that we can freely use them in a function. Therefore, we can and we should use any of them to pass return values if needed, for easiness and efficiency. In a word, are there any reasons requiring us to limit return values to a0 and a1 registers?
P.S. I just noticed this question Why two return registers (in many procedure calling conventions/ABIs), which tells me consecutive reigisters can be used for big numbers. However, my point is, why we limit ourselves from putting more return values into a2~a7, even though there seems no apparent disadvantages? Or, is it awful if I use a2~a7 for return values, violating the convention?