【发布时间】:2021-05-22 21:22:57
【问题描述】:
字节指针能否安全地传递给vld2q_u16?
我最关心的是静态分析器投诉。
uint16x8x2_t load_interleaved_shorts (const uint8_t* const ptr) {
uint16_t* p16 = (uint16_t*)ptr; // possible undefined behavior ?
return vld2q_u16(p16);
}
在我的例子中: 指针始终与 16 字节边界对齐。 编译器不知道指针的对齐方式。 代码必须是可移植的,并且严格遵循 C90 标准。
假设:
将 vld2q_u16 替换为 vld1q_u8 / vuzpq_u8 会损害性能。
编译器将标量模式优化为vld2q_u16 的概率很小。
编辑:通过强制转换为 void 指针来抑制一些警告。
vld2q_u16((const uint16_t*)(const void*)src)
【问题讨论】:
标签: c simd intrinsics memory-alignment neon