在C代码中对于需要调用函数的寄存器进行手动保存并在函数结束后重新加载。示例代码如下:
void callee_func(int arg1, int arg2){
// do something
}
void caller_func(){
// save callee-saved registers
__asm__ __volatile__(
"push {lr}\n\t"
"push {r4-r7}\n\t"
// save other callee-saved registers as needed
);
// call callee_func
__asm__ __volatile__(
"mov r0, #0\n\t"
"mov r1, #1\n\t"
"bl callee_func\n\t"
);
// restore callee-saved registers
__asm__ __volatile__(
// restore other callee-saved registers as needed
"pop {r4-r7}\n\t"
"pop {lr}\n\t"
);
}
在上述示例代码中,首先保存了callee-saved寄存器(在callee_func中需要保留的寄存器),然后调用callee_func,最后还原已经保存的callee-saved寄存器。这样可以避免代码出现性能问题和错误。