Xem xét khai báo biến này:Có phải truy cập byte của biến __m128 thông qua nghiệp đoàn hợp pháp không?
union {
struct {
float x, y, z, padding;
} components;
__m128 sse;
} _data;
Ý tưởng của tôi là để gán giá trị thông qua x
, y
, z
lĩnh vực, thực hiện tính toán SSE2 và đọc kết quả thông qua x
, y
, z
. Tôi có chút nghi ngờ về việc liệu nó có hợp pháp hay không. Mối quan tâm của tôi là liên kết: MSDN nói rằng các biến số __m128
được tự động căn chỉnh với ranh giới 16 byte và tôi tự hỏi liệu công đoàn của tôi có thể phá vỡ hành vi này hay không. Có bất kỳ cạm bẫy nào khác để xem xét ở đây không?
Không, căn chỉnh không phải là vấn đề. Công đoàn sẽ có bất kỳ sự liên kết nào là cần thiết để tất cả các thành viên của nó hoạt động chính xác. –
Cũng lưu ý rằng, ít nhất là trên Visual Studio, bạn có thể nhận được các thành phần của '__m128 sse;' với 'sse.m128_f32 [0]', 'sse.m128_f32 [1]', 'sse.m128_f32 [2]', 'sse.m128_f32 [3]', do đó, không cần thiết cho thủ thuật này. –
@ R.MartinhoFernandes và cho gcc? –