gpt4 book ai didi

c - 如何使用 ARM64 执行多项式乘法?

转载 作者:行者123 更新时间:2023-12-05 06:28:49 26 4
gpt4 key购买 nike

Microsoft 最近发布了他们的 ARM64 构建工具,作为 Visual Studio 15.9 的一部分。我正在完成 ARM64 的移植。我在多项式乘法方面遇到了问题。

我遇到的问题是,Microsoft 没有提供预期的数据类型,例如 poly64_t ,或类似 vreinterpretq_u64_p128 的转换.另见 arm64_neon.h 在 GitHub 上。

编译失败:

#include <arm64_neon.h>
poly128_t VMULL_P64(const poly64_t a, const poly64_t b)
{
return vmull_p64(a, b);
}

结果:

test.cxx(2): error C4430: missing type specifier - int assumed. Note: C++ does n
ot support default-int
test.cxx(2): error C2146: syntax error: missing ';' before identifier 'VMULL_P64
'
test.cxx(3): error C2143: syntax error: missing ';' before '{'
test.cxx(3): error C2447: '{': missing function header (old-style formal list?)

这也无法编译:

#include <arm64_neon.h>
uint64x2_t VMULL_P64(const uint64_t a, const uint64_t b)
{
return vmull_p64(a, b);
}

和:

test.cxx(4): error C2664: '__n128 neon_pmull_64(__n64,__n64)': cannot convert ar
gument 1 from 'const uint64_t' to '__n64'
test.cxx(4): note: No constructor could take the source type, or constructor ove
rload resolution was ambiguous

我把它拼凑在一起,但它似乎是错误的。特别是中间体__n64 (我无法用一条语句编译它):

#include <arm64_neon.h>
uint64x2_t VMULL_P64(const uint64_t a, const uint64_t b)
{
__n64 x = {a}, y = {b};
return vmull_p64(x, y);
}

其他内容,如 CRC32、CRC32C、AES、SHA-1 和 SHA-256 正常工作。

Microsoft 打算如何让我们使用 ARM64 执行多项式乘法?

( header <arm64_neon.h> 是从哪里来的?ARM 很清楚 header 是<arm_acle.h>。)


ARM 在 ARM C Language Extensions 2.1 (ACLE) 中提供以下内容:

poly128_t vmull_p64 (poly64_t, poly64_t);

Performs widening polynomial multiplication on double-words low part. Available on ARMv8 AArch32 and AArch64.

poly128_t vmull_high_p64 (poly64x2_t, poly64x2_t);

Performs widening polynomial multiplication on double-words high part. Available on ARMv8 AArch32 and AArch64.

最佳答案

Visual C++ 2017.9 (15.9) 中的 ARM 支持仍然非常有限...2017.9 将不再获得新功能,因此如果不升级到 Visual C++ 2019 将无法编译代码。

Visual C++ 2019 添加了 poly64_t 的类型定义。我正在与 ARM 和 Visual Studio 开发人员密切合作,以解决针对 32 位或 64 位 ARM 目标进行编译时出现的问题。编译器中仍然存在一些需要解决方法的错误,因此它不是很好的生产代码,或者从 Linux 和其他类 Unix 系统移植。

关于c - 如何使用 ARM64 执行多项式乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54048837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com