奇怪的编译问题?
在“内核源码”板块发了这个问题后才发现似乎应该将问题发到这里?再发一次不知道算不算乱发帖啊?
编译lpc3250的工程时发现参数传送不正确,可是同样的工程在s3c44b0x下编译参数传送确实正确的,比较了一下二者汇编的差异,发现在s3c44b0x下多了一个r4的动作,可是不知道时什么原因造成二者的差异?是编译选项引起的吗?可是比较二者的编译选项,除了lpc3250打开了vfp外,其他都相同啊?不知道有没有大侠能指导一下?
以下是相对应的程序:
--- cpp example ---
...
int ClassA::func(int A, int B, double C, double *D, double E[],double F[],double &G,double &H);
...
ClassA *pClassA;
int main (char* name)
{
...
...
int n = pClassA->func(a, b, c, d, e, f, g, h);
return 0;
}
--- s3c44b0x下 arm code ---
func:
mov r12, sp ;r12(ip)设置为sp的值;保存sp
sub sp, sp, #4 ; 0x4 ;堆栈预留出保存函数跳转地址的位置
stmdb sp!, {r4, r11, r12, lr, pc} ;将上一级函数的环境及r4压栈
sub r11, r12, #8 ; 0x8
sub sp, sp, #36 ; 0x24 ;建立中间变量
mov r4, r0 ;参数r0(pClassA)传给r4
str r1, [r11, -#20] ;参数a传给A
str r2, [r11, -#24] ;参数b传给B
str r3, [r11, #4] ;参数c传给C
--- lpc3250下 arm code ---
func:
mov r12, sp ;r12(ip)设置为sp的值;保存sp
sub sp, sp, #4 ; 0x4 ;堆栈预留出保存函数跳转地址的位置
stmfd sp!, {r11, r12, lr, pc} ;将上一级函数的环境压栈
sub r11, r12, #8 ; 0x8
sub sp, sp, #40 ; 0x28 ;建立中间变量
str r0, [r11, #-20] ;参数r0(pClassA)传给A
str r1, [r11, #-24] ;参数a传给B
str r2, [r11, #-28] ;参数b传给C
str r3, [r11, #4] ;参数c传给D
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论