ARM64 Neon - 在所有 uint8x8x4_t 上存储一个相同的 uint8x8_t

ARM64 Neon - Store one and same uint8x8_t on all uint8x8x4_t

得到一个 uint8x8_t,例如。 [100, 100, 100, 100, 200, 200, 200, 200]

如何将上面的 uint8x8_t 存储在一个 uint8x8x4_t WITH 一条指令/内在函数上?

目前,我们使用

uint8x8x4_t.val[0] = uint8x8_t;
uint8x8x4_t.val[1] = uint8x8_t;
uint8x8x4_t.val[2] = uint8x8_t;
uint8x8x4_t.val[3] = uint8x8_t;

// typedef struct uint8x8x4_t {
//   uint8x8_t val[4];
// } uint8x8x4_t;    

我认为没有一条指令可以为 NEON 执行此操作,除非您复制输入数据然后只使用一条 vld4 ().

我没有测试过,但我的直觉是复制可能不会成为整体节省,因为我怀疑许多 CPU 缓存将维持每个时钟 64 字节,并且移动在寄存器中复制副本应该是有效的。