在LLVM的C语言编译器中内联纯汇编函数的注意事项
1、你的函数必须是非内联的,用__attribute__((noinline))来修饰。
2、如果你的编译选项是O2或其它优化级别,那么你纯汇编写的函数在起始处就会被编译器插入赋返回值的代码。因此,你的函数的返回值显式地写作为你第一个形参的返回值。
下面举个例子:
1 2 3 4 5 6 7 8 9 | static int __attribute__(( noinline )) fuckThumb2( const void * p) { __asm__( "ldr.w r1, [r0, #1024] \t\n" "ldr.w r2, [r0, #1028] \t\n" "add r0, r1, r2 \t\n" "bx lr" ); return ( int )p; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步