1.VMLAL.I16 这条指令I16是的意思是可能是S16或者是U16吗? 如果有个数是S16,有个数是U16,这两个数相乘可以使用I16吗??
2.
Vopn{cond}.datatype list, [Rn{@align}]{!}
Q1:文档中说到 “Align 可省略。 在这种情况下,将应用标准对齐规则”。 这里的标准对齐规则是什么样的?
Q2:如果Rn地址没有按照Q1中提到的标准对齐规则, 那么load数据的时候是否会出错还是说效率降低?
Q3:如果已经确定Rn是按照256bit对齐,那么指令vld1.32 {d0}, [r0:256] 是否会比vld1.32 {d0}, [r0] 效率高?
1 不好意思,刚才第一个问题应该说的是VMLA,不小心多加了个L, 那对于I8, I16, I32, F32 for VMUL, VMLA, or VMLS 这些指令来说,对于16位的数据操作,不确定操作数是有符号还是无符号的时候用I16 类型吗? 如果VMLA执行S16 与U16相乘,U16是该范围的最大值时,能用VMLA.I16操作吗?
I16仅仅表示两个16位整数相乘,自己在选取操作数类型最好确定自己的操作数是什么类型的,在intrinsics接口中,整数类型只有U或S类型,没有I类型。如果U16是最大值,S16xU16的结果一定会溢出16位,这种结果是你想要的的吗?
2. 按照你提到的文档中的说法,如果SCTLR bit[1]为0, VLD 可以操作非对齐地址,为1 则仅仅需要按照元素大小地址对齐即可,不知道理解对不对。如何确认SCTLR bit[1]为的值是0还是1?一般情况下,系统默认应该是设置SCTLR bit[1]为0的?
ARM® Cortex®-A15 MPCore™ Processor
Revision: r4p0
Technical Reference Manual
4.3.27 System Control Register SCTLR
[1] A Banked Alignment check enable. This is the enable bit for Alignment fault checking:
0 Alignment fault checking disabled. This is the reset value.
1 Alignment fault checking enabled.
See the ARM® Architecture Reference Manual ARMv7-A and ARMv7-R edition for more
information.
如果你不确定你的板子的设置,可以在特定模式下,用MRS指令来读取该寄存器来确认。