Ответ 1
Правило объединения должно быть прекрасным, но в случае Windows вы можете напрямую обращаться к 32-битным компонентам. От xmmintrin.h
(DirectXMath
):
typedef union __declspec(intrin_type) _CRT_ALIGN(16) __m128 {
float m128_f32[4];
unsigned __int64 m128_u64[2];
__int8 m128_i8[16];
__int16 m128_i16[8];
__int32 m128_i32[4];
__int64 m128_i64[2];
unsigned __int8 m128_u8[16];
unsigned __int16 m128_u16[8];
unsigned __int32 m128_u32[4];
} __m128;
Как вы можете видеть, там 4 плавает. Если вы хотите быть uber paranoid, вы, вероятно, можете определить все те же самые особенности выравнивания и такие, чтобы убедиться, что ничто не сломается. Однако, насколько я могу судить, и учитывая, что вы упомянули MSDN в своем ответе, вам должно быть все хорошо. И объединение, и доступ к нему напрямую должны работать, если вы знаете, что у вас SSE-совместимый материал. Вы можете также поддразнивать заголовки DirectXMath, чтобы понять, как Windows выполняет определения и споры: они также определяют несколько макросов, в зависимости от того, какие объекты и возможности присутствуют во время компиляции.
РЕДАКТИРОВАТЬ: Как говорит Р.Мартинхо Фернандес в комментариях, доступ к нему напрямую, скорее всего, является скорее головной болью, чем переопределением ее в объединении.