可能不是vmadot的问题 而是其他问题 比如向量寄存器设置错误了?最简单的vmadot指令中A、B都是int8类型,C是int32类型,所以使用内联编码时 需要给C 重新设置向量寄存器 比如
asm volatile(
// 设置向量寄存器,元素 8bit,LMUL=1
"vsetvli t0, x0, e8, m1, tu, mu\n"
// 加载矩阵数据
"vle8.v v0, (%[va])\n" // 加载 A 向量
"vsetvli t0, x0, e8, m1, tu, mu\n"
"vle8.v v1, (%[vb])\n" // 加载 B 向量
// IME 扩展的 dot product
"vmadot v2, v0, v1\n" // v2 = v0 * v1 + v2(累加)
//重新设置C的寄存器
"vsetvli t0, x0, e32, m2, tu, mu\n"
// 保存结果
"vse32.v v2, (%[vc])\n" // 存储 32bit 结果
:
: [va]"r"(a), [vb]"r"(b), [vc]"r"(c)
: "t0", "v2", "v3", "memory"
);