gpt4 book ai didi

使用 int64x2_t vector 将低 64 位复制到高 64 位?

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:25 25 4
gpt4 key购买 nike

我找不到我需要的 NEON 内在函数。我有一个 128 位的值作为 int64x2_t ,我需要将低 64 位复制到高 64 位。有时我还需要将高 64 位复制到低 64 位。

NEON 有一个 lane dup , 但需要 int64x1_t并返回 int64x1_t .

int64x1_t   vdup_lane_s64(int64x1_t vec, __constrange(0,0) int lane);

范围似乎也偏离了,因为我似乎应该能够选择 1 或 2。(也许这是我的误解)。

如何将低 64 位复制到 int64x2_t 中的高 64 位? ?


我没有使用 (high >> x) | (low << x)模式如下所示。首先,它的 undefined behavior in C/C++ when x is 0 .其次,值应该 位于 NEON SIMD 寄存器中,所以我不想不小心将它往返。三、GCC is not generating the code I hoped for ,所以我不想让 GCC 有机会变慢。

最佳答案

有(至少)两种方式可以编写它。

int64x2_t f(int64x1_t v)
{
return vdupq_lane_s64(v, 0);
// or
// return vcombine_s64(v, v); // poor code with GCC
}

vdupq_lane 的输入是一个 64 位 vector ,但结果是一个 128 位 vector 。

关于使用 int64x2_t vector 将低 64 位复制到高 64 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139392/

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