Всякие _mm256_setr_* - не const (хотя под капотом вызывают методы из std simd которые const)
Если вдруг способ через union A { data: [u64; 4], vec: __m256i, } подходит под определение нормальный, то есть ли какие-нибудь гарантии что layout будет одинаковый?
once_cell крейт в помощь
А вообще simd модуль из стандартной библиотеки имеет такие методы https://doc.rust-lang.org/std/simd/struct.Simd.html#method.from_array
Сорян, забыл упомянуть - нужен stable 🌚
Вна нем есть m256?
https://github.com/rust-lang/portable-simd
Да, https://doc.rust-lang.org/core/arch/x86_64/index.html
__m256i(0,0,0,0)
Поля этого типа - приватные
Вообще я рекомендую юзать найтли с нестабильными фичам, если не критично
Здорово они это придумали
mem::transmute из массива в помощь
Надо смотреть гарантии репра
Это же mm256i, он и в Африке mm256i
А массив он и в Африке массив)
Как раз вторая часть вопроса была про одинаковость выравнивания. Вообще конечно дурка что вроде бы нужна какая-то штука, её кто-то сделал и пропал - поэтому оно теперь несколько лет unstable
Трансмут копирует, поэтому думаю выровняет
Ну выравнивание думаю он заметить должен
Компайлтаймошибку разве что кинет, и то не факт
Ну типа блин, он же кидает ошибку на разность размеров структур, камон
он семантически два мува же?
в процессе которых выравнивание исправится, если не по указателю
> Because transmute is a by-value operation, alignment of the transmuted values themselves is not a concern да
Ну офигеть теперь (
Трансмьют слишком уж безопасный
Мы тут вчера опшн от репр транспарента боялись сделать, а тут ваще безбашенные люди пошли
Обсуждают сегодня