ARM 汇编中百分号后的字母代表什么意思?

NorZ 2022-05-05 16:58:19

最近在看一些别人写的C/C++ 嵌入内联汇编代码,发现在32位和64位中有一些写法找不到文档介绍,比如下面代码

// arm32
asm volatile(
    // ...省略
    "vmla.f32   q6, q12, %q16           \n"
    // ...省略
};

// arm64
asm volatile(
    // ...省略
    "fmla  v16.4s, v22.4s, %16.s[0]     \n"
    // ...省略
};

以上两段汇编中在操作数 16 上,这个百分号后面的字母如何理解?

我看32位上有出现过 %e %f %q,64位的这个 %16.s[] 似乎是代表按4字节取?

 

已找到 ARM 官方文档

https://developer.arm.com/documentation/100067/0612/armclang-Inline-Assembler/Inline-assembly-template-modifiers/Template-modifiers-for-AArch32-state?lang=en

...全文
168 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NorZ 05-06
精选

目前没有找到文档介绍这个,在 GCC 源码中可以找到相关线索
gcc/config/arm/arm.c
可以看到 e 和 f 分别代表操作数的 低32位 和 高32位,如果是 pair-structure 也可以代表 低/高 64位寄存器。
至于 q ,表示 double 精度或者 quad 精度的 VFP/NEON 寄存器

  • 打赏
  • 举报
回复 1
@NorZ 我不信man 2 printf,然后see also下去,找不到Format specification
  • 举报
回复
@赵4老师 前两天刚看到一篇博文评论说话中文夹杂英文单词的人很low,说的就是我。
  • 举报
回复
展开其他1条回复

输入参数,vmla指令相当于x64的fma3指令,dest=dest+src1*src2,它这里的src2是可宏替换的参数,而不是直接指定寄存器

  • 打赏
  • 举报
回复
相关推荐
发帖
汇编语言
加入

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
申请成为版主
帖子事件
编辑了帖子
2022-05-06 17:25
创建了帖子 (查看)
2022-05-05 16:58
社区公告
暂无公告