gpt4 book ai didi

c++ - 在 aarch64/arm64 上通过环绕将 float 转换为 int

转载 作者:行者123 更新时间:2023-12-01 23:30:52 35 4
gpt4 key购买 nike

我正在尝试准确匹配在 x86_64 和 aarch64/arm64 上运行的应用程序之间的行为。但是,当 float 超出可能的整数范围时,它们的区别在于如何将 float 转换为整数。

考虑以下示例:

#include <stdio.h>
#include <cstdint>

void cast(float value) {
printf("uint32_t(%.2f) = %u\n", value, uint32_t(value));
}

int main() {
cast(4294967808.);
}

# output on x86_64: uint32_t(4294967808.00) = 512
# output on aarch64: uint32_t(4294967808.00) = 4294967295

x86_64 版本正在使用 cvttss2si对于转换,它包含了答案,尽管文档对此还不清楚。 Aarch64 正在使用 fcvtzu这是饱和的。

任何使两者对齐的解决方案都会很有趣,但理想情况下,我想在 clang 上设置一个编译器标志,以使 aarch64 版本的行为类似于 x86_64 版本(即使 aarch64 “更好”)

最佳答案

使用CPU指令fjcvtzs (或内在的 __builtin_arm_jcvt)在 aarch64 上获得 x86 的行为。

(感谢@EOF 在评论中提供足够的信息让我找到答案)

关于c++ - 在 aarch64/arm64 上通过环绕将 float 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66279679/

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