内联汇编优化
- 我们为什么需要内联汇编? 因为当我们观察编译器优化后的代码,发现仍然存在可以优化的点,就可以通过内联汇编来提高我们代码的性能。通常来说,这经常会运用在实时性较强的代码中,并且与编写纯汇编的
.S
文件相比,内联汇编更容易维护。
- 1-0是gcc内联汇编的模板。编写内联汇编,需要在
asm()
内定义你所需要的汇编代码AssemblerTemplate
,输入输出操作数(InputOperands
,OutputOperands
),以及可能修改了值的寄存器Clobbers
asm [Qualifiers] (
``AssemblerTemplate``
: ``OutputOperands``
: ``InputOperands``
: ``Clobbers``
)
asm [Qualifiers] goto (
``AssemblerTemplate``
:
: ``InputOperands``
: ``Clobbers``
: ``GotoLabels``
)
1-0
- 浮点操作数 在使用时,constraint (约束) 需要定义为"f"(浮点寄存器),整型单元一般都是"r"(通用寄存器)
- + 表示该操作数既可以读也可以写;通常使用在内联汇编含多个指令的情况,需要复用该输出操作数的值
- = 表示该操作数可写,通常用在输出操作数
- 若操作数前面不加符号,表示操作数只读,通常用在输入操作数
float32_t multAcc_32x32_float32(float32_t a, float32_t x, float32_t y