yhyuhang 发表于 2009-11-26 14:56

奇怪的编译问题?

在“内核源码”板块发了这个问题后才发现似乎应该将问题发到这里?再发一次不知道算不算乱发帖啊?

编译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               ;堆栈预留出保存函数跳转地址的位置
    stmdbsp!, {r4, r11, r12, lr, pc}   ;将上一级函数的环境及r4压栈
    sub      r11, r12, #8    ; 0x8
      sub      sp, sp, #36 ; 0x24            ;建立中间变量
    mov      r4, r0                              ;参数r0(pClassA)传给r4
      str      r1,                   ;参数a传给A
      str      r2,                   ;参数b传给B
      str      r3,                      ;参数c传给C
      
      
--- lpc3250下 arm code ---         
func:
      mov   r12, sp                            ;r12(ip)设置为sp的值;保存sp
      sub   sp, sp, #4 ; 0x4               ;堆栈预留出保存函数跳转地址的位置
    stmfdsp!, {r11, r12, lr, pc}       ;将上一级函数的环境压栈
    sub   r11, r12, #8 ; 0x8
      sub   sp, sp, #40    ; 0x28      ;建立中间变量
    str       r0,                ;参数r0(pClassA)传给A
      str       r1,                ;参数a传给B
      str       r2,                ;参数b传给C
      str       r3,                   ;参数c传给D
页: [1]
查看完整版本: 奇怪的编译问题?