Arm64 SVE 非故障加载需要掩码参数

所有 Arm64 SVE 非故障加载 API 都已更新为在第一个参数位置包含mask。 此更改会影响类LoadVector*NonFaulting中名称包含System.Runtime.Intrinsics.Arm.Sve的所有方法。

引入的版本

.NET 10

以前的行为

以前,无故障加载 API 仅输入地址参数并载入了一整个向量。

Vector<short> result = Sve.LoadVectorByteNonFaultingZeroExtendToInt16(address);

要使用掩盖掉的元素进行无故障加载,必须使用 ConditionalSelect

Vector<short> maskedResult = Sve.ConditionalSelect(
    mask,
    Sve.LoadVectorByteNonFaultingZeroExtendToInt16(address),
    zero);

新行为

从 .NET 10 开始,非自动加载 API 需要掩码参数作为第一个参数。

若要为所有元素执行无故障加载,请创建并传递全真值掩码:Sve.LoadVector*NonFaulting*(Sve.CreateTrueMask*(), addr);

破坏性变更的类型

此更改可能会影响 二进制兼容性源兼容性

更改原因

此更改是必需的,因为非故障加载会根据加载的向量信道来更新首个故障寄存器(FFR)。 无法使用 ConditionalSelect(mask, LoadVectorNonFaulting(addr), zero) 到掩码负载的标准转换,因为它无法正确处理 FFR 寄存器状态。 因此,实现屏蔽的非故障加载的唯一有效方法是将其公开为专用 API。

  • 对于现有用途 Sve.ConditionalSelect(mask, Sve.LoadVector*NonFaulting*(addr), zero),请将其替换为 Sve.LoadVector*NonFaulting*(mask, addr)
  • 更新无故障加载的其他用法以包括真正的掩码:Sve.LoadVector*NonFaulting*(Sve.CreateTrueMask*(), addr)

受影响的 API