Я думаю, что это межъязыковой дубликат Является ли `reinterpret_cast` между указателем аппаратного вектора и соответствующим типом неопределенным поведением? .
Как я объяснил там, Intel определила встроенный API C / C ++ таким образом, что loadu
/ storeu
может безопасно разыменовать указатель с заниженным выравниванием, и что такие указатели безопасно создавать, даже если это UB в ISO C ++ даже для создания подчеркнутых указателей. (Таким образом, реализации, которые предоставляют встроенный API, должны определять поведение).
Версия Rust должна работать идентично. Реализации, обеспечивающие его, должны обеспечивать безопасное создание подчеркнутых __m128i*
указателей, если вы не разыменовываете их «вручную».
Другой вариант разработки API должен иметь другую версию типа, которая не подразумевает 16-байтовое выравнивание, например __m128i_u
или что-то в этом роде. GNU C делает это с их собственным векторным синтаксисом, но это далеко от темы для Rust.