SuperAPI AI 工具集

assembly-arm

写作与研究

查看项目

更新于 10-15 17:20

技能介绍

该技能用于指导智能体处理 AArch64(64 位)与 ARM(32 位 Thumb)汇编,覆盖寄存器、调用约定、内联汇编以及 NEON/SVE SIMD 模式。

用途:阅读编译器生成的 ARM 汇编、理解 AArch64 寄存器与调用约定、编写内联汇编、区分 AArch64 与 ARM Thumb、使用 NEON intrinsics。

生成汇编的方式包括交叉编译:aarch64-linux-gnu-gcc -S -O2 foo.c -o foo.s;32 位 Thumb 用 arm-linux-gnueabihf-gcc -S -O2 -mthumb foo.c -o foo.s;也可用 aarch64-linux-gnu-objdump -d -S prog 或在 GDB 中 disassemble /s main。

内容要点:AArch64 寄存器(x0–x7 传参/返回值、x8 间接结果、x9–x15 调用者保存临时、x16–x17 链接器临时、x18 平台保留、x19–x28 被调用者保存、x29 帧指针、x30 返回地址、sp 需 16 字节对齐、xzr 零寄存器,以及 v0–v7 浮点/SIMD 参数、v8–v15 被调用者保存 SIMD 等);AAPCS64 调用约定(整数/指针参数 x0–x7,浮点/SIMD 参数 v0–v7,返回 x0 或 x0+x1 或 v0,bl/blr 时栈须 16 字节对齐);常用指令(mov、movz、movk、ldr、str、ldp、stp、add、sub、mul、sdiv、udiv、cmp、cbz、cbnz、bl、blr、ret、adrp 配合 :lo12: 等);典型函数序言/尾声(stp x29, x30、mov x29, sp、恢复并 ret,叶子函数可 sub sp 分配局部空间);GCC/Clang 内联汇编示例(dmb ish 屏障、ldar/stlr 的 acquire/release、mrs 读取 cntvct_el0),以及 "Q"、"r"、"w" 约束;NEON intrinsics(arm_neon.h,vld1q_f32、vaddq_f32、vst1q_f32、vpaddq_f32 等,命名 v<op><q>_<type>);Linux 与 Darwin AArch64 ABI 差异(栈对齐、红区、x18 用途、objc_msgSend 约定);Apple Silicon 的 AMX 无公开 intrinsics,建议用 Accelerate/vecLib、Metal Performance Shaders;M 系列 16KB 页大小(sysconf(_SC_PAGESIZE) 返回 16384);NEON 向 SVE2 迁移提示(svcnt 步长、svwhilelt 谓词、__ARM_FEATURE_SVE 条件编译,M1–M3 无 SVE)。

限制:AMX 的底层 opcode 属社区记录、不可移植,不建议用于生产;Apple 平台避免使用 x18;产品收费、价格与具体效果暂未提供。