基于RISC-V的GCC内联汇编

内联汇编优化

  • 我们为什么需要内联汇编? 因为当我们观察编译器优化后的代码,发现仍然存在可以优化的点,就可以通过内联汇编来提高我们代码的性能。通常来说,这经常会运用在实时性较强的代码中,并且与编写纯汇编的.S文件相比,内联汇编更容易维护。

  • 1-0是gcc内联汇编的模板。编写内联汇编,需要在asm()内定义你所需要的汇编代码AssemblerTemplate,输入输出操作数(InputOperands,OutputOperands),以及可能修改了值的寄存器Clobbers
asm [Qualifiers] ( 
                  ``AssemblerTemplate``
                  : ``OutputOperands``
                  : ``InputOperands``
                  : ``Clobbers``  
                )

asm [Qualifiers] goto ( 
                      ``AssemblerTemplate``
                      : /* No outputs. */
                      : ``InputOperands``
                      : ``Clobbers``
                      : ``GotoLabels``
                    )

1-0

  • 浮点操作数 在使用时,constraint (约束) 需要定义为"f"(浮点寄存器),整型单元一般都是"r"(通用寄存器)
  • + 表示该操作数既可以读也可以写;通常使用在内联汇编含多个指令的情况,需要复用该输出操作数的值
  • = 表示该操作数可写,通常用在输出操作数
  • 若操作数前面不加符号,表示操作数只读,通常用在输入操作数
    float32_t multAcc_32x32_float32(float32_t a, float32_t x, float32_t y

你可能感兴趣的:(risc-v,数字信号处理,dsp)