内嵌汇编语法规则
语法规则
__asm__ __volatile__(
"mov x1, #2\n"
"add %x[x], %x[y], x1\n" // 汇编代码
: [x] "+&r" (x) // 输出部分
: [y] "r" (y) // 输入部分
: "cc", "memory", "x1" // 影响部分
);
汇编部分
每行以\n结尾
输出、输入部分
[foo] "+&r" (), 顺序声明,其中[]为别名,""内为描述,()为引用变量
-
[foo]内的别名可以在汇编中按照%x[foo]来使用,如果省略则按照%0来使用 -
=表示写,+表示读写,&表示独占寄存器; -
rq表示通用寄存器,w表示向量寄存器影响部分
-
cc表示修改了状态寄存器标志位 -
memory表示修改了内存值 -
v0x1表示修改了指定寄存器的值
示例
__asm__ __volatile__(
"sxtl v18.4s, %0.4h\n"
"sxtl2 v19.4s, %0.8h\n"
".inst 0x4f80e0d2 // sdot v18.4s, v6.16b, v0.4b[0]\n"
".inst 0x4f80e073 // sdot v19.4s, v3.16b, v0.4b[0]\n"
"sqxtn %0.4h, v18.4s\n"
"sqxtn2 %0.8h, v19.4s\n"
: "+&w" (sum)
: "w" (x), "w" (s8_0), "w" (s8_1)
: "memory", "v18", "v19"
);
Enjoy Reading This Article?
Here are some more articles you might like to read next: