2011-09-28 60 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