arm 组件 向量数无效
Posted
技术标签:
【中文标题】arm 组件 向量数无效【英文标题】:arm assembly Invalid number of vectors 【发布时间】:2018-10-08 03:22:52 【问题描述】:关于armv8中的asm汇编有两个问题。
首先,“向量数量无效”,我的代码如下。
"prfm pldl1keep, [%7, #64] \n"
"ld1 v0.4s, v1.4s, v2.4s, v3.4s, v4.4s, v5.4s, [%7], #48 \n"
第二,“寄存器大小后缀不匹配”。
"prfm pldl1keep, [%5, #64] \n"
"ld1 v0.4s, v1.2s, [%7], #24 \n"
我直接google了这两个问题,但得到的答案很少。
【问题讨论】:
您希望这些说明能起到什么作用?您是否在问为什么它们无效,或者如何通过多个指令完成您想要的?此外,这看起来像内联汇编。%7
来自什么约束,以防万一?编译器在 asm 模板中填写 %7
后,最后的 asm 指令是什么,然后汇编器阻塞了它?
我读的是docs 对吗?看起来 ld1 最多只支持 4 个寄存器。至于不匹配的寄存器大小,您确定可以在一条指令中混合和匹配这样的大小吗?文档表明 2 寄存器变体只能使用 #16 或 #32。
谢谢,你们所有人。你说的对。我将第一个 ld1 指令分成两个 ld1,然后它就可以工作了。而第二个问题,我也把ld1分成了两个ld1(#16和#8),然后就可以了。
请不要张贴代码图片。始终将您的代码作为文本发布,以便其他人可以编译/组装它并重现您的错误。
好主意,但我认为这不是解决此错误的正确方法。
【参考方案1】:
将我的评论(似乎已经回答了这个问题)变成了“答案”,这样这个问题就可以结束了。
根据docs,ld1
最多只支持 4 个寄存器,而您指定 6 个,这将是一个 invalid number of vectors
。
至于mismatched register size suffix
,文档表明 2 寄存器变体只能使用 #16 或 #32,而不是您提供的 #24。也许不支持不匹配的尺寸?
请注意,我对 ARM 的了解不足,无法评论 OP 解决方案的效率。可能还有其他更好的解决方案。但是,这似乎可以解释两条错误消息的原因。
【讨论】:
以上是关于arm 组件 向量数无效的主要内容,如果未能解决你的问题,请参考以下文章