函数调用的参数为什么随机选择通用寄存器

最近使用lldb调试C代码,比如
void func1(char* str, int adda){
a = a + adda;
printf("%s\n",str);
}
主函数调用的时候下断点
bl 0x1044b3dd0 ; func1
打印寄存器的值,发现X1, X8 是保存参数的;
现在的问题是: 函数调用参数为什么不按0,1,2,3…的顺序保存?