如何访问 NEON 指令中的完整 128 位?
How to access full 128 bits in NEON instructions?
我最近写了一个程序,用 Arm64 汇编做一些浮点计算。
由于我处理的数字可能变得非常小,我现在想优化代码,以便它使用尽可能高的精度。
我发现 NEON 引擎有 128 位浮点寄存器,而不是我目前使用的 64 位,所以我搜索了一种使用它们进行计算的方法。我看过的每个网站都告诉我这应该是可能的,但是当我尝试做类似
的事情时
fmul v0, v1, v2
我刚收到“错误:指令操作数无效”。
我正在使用应该能够使用 NEON 指令的 M1 芯片,当我将其更改为
fmul v0.2d, v1.2d, v2.2d
完全没有问题。
有人知道我做错了什么吗?还是不可能一次使用这些寄存器的所有 128 位?
你不能。
没错,NEON 寄存器是 128 位宽,但最大数据类型宽度是 64。
据我所知,没有任何消费者架构能够处理任何 128 位数据类型。
PS : 是否有 quad 数据类型开头?我很好奇。
我最近写了一个程序,用 Arm64 汇编做一些浮点计算。 由于我处理的数字可能变得非常小,我现在想优化代码,以便它使用尽可能高的精度。
我发现 NEON 引擎有 128 位浮点寄存器,而不是我目前使用的 64 位,所以我搜索了一种使用它们进行计算的方法。我看过的每个网站都告诉我这应该是可能的,但是当我尝试做类似
的事情时fmul v0, v1, v2
我刚收到“错误:指令操作数无效”。
我正在使用应该能够使用 NEON 指令的 M1 芯片,当我将其更改为
fmul v0.2d, v1.2d, v2.2d
完全没有问题。
有人知道我做错了什么吗?还是不可能一次使用这些寄存器的所有 128 位?
你不能。
没错,NEON 寄存器是 128 位宽,但最大数据类型宽度是 64。
据我所知,没有任何消费者架构能够处理任何 128 位数据类型。
PS : 是否有 quad 数据类型开头?我很好奇。