2011-09-28 62 views
2

我有一个函数如下存储在R0值:ARM V4返回从C函数内建立一个SWI调用

int foo() 
{ 
    asm("swi 1"); 
} 

为SWI 1的基本处理程序,正确地放置返回值到R0,我想让foo()正确地返回这个值。 ARM-ELF-GCC警告控制达到上述非void函数的末尾。

int foo() 
{ 
    asm("swi 1"); 
    return; 
} 

我,而不是诉诸于以下:

int foo() 
{ 
    int ret_val; 
    asm("swi 1"); 
    asm("mov %[v], r0" : [v]"=r"(ret_val) :: "r0", "r3") 
    return ret_val; 
} 

有越来越GCC返回的一个更优雅的方式

ARM-ELF-GCC仍然具有以下警告r0的价值而不诉诸于上述?

谢谢。

回答

1

试试这个(海合会作品):

int foo() 
{ 
    register int ret_val __asm__("r0"); 
    __asm__ __volatile__ ("swi 1" : "=r"(ret_val)); 
    return ret_val; 
} 
0

,如果你打算使用汇编......然后......用汇编。

.globl foo 
foo: 
    swi i 
    mov pc,lr