在gcc中使用struct作为SSE向量类型?

时间:2011-02-07 01:56:55

标签: c++ c gcc sse

在GCC中是否可以使用结构或类作为SSE指令的向量类型?

类似的东西:

typedef struct vfloat __attribute__((vector_size(16))) {
   float x,y,z,w;
} vfloat;

而不是规范:

typedef float v4sf __attribute__ ((vector_size(16)));

union vfloat {
    v4sf  v;
    float f[4];
};

会非常方便,但我似乎无法使其发挥作用。

2 个答案:

答案 0 :(得分:2)

您可以使用union而不是struct作为第二个成员制作float f[4];,就像您发布的那个一样吗?这会给你你想要的行为。

答案 1 :(得分:0)

您正在寻找的结构是

typedef float  v4sf __attribute__ ((vector_size(16)));
typedef struct vfloat  vfloat;

struct vfloat {
    union {
        v4sf       v;
        float      f[4];
        struct {
            float  x;
            float  y;
            float  z;
            float  w;
        };
    };
};

但是,别名规则可能会在以后引起您的注意。我建议使用访问者宏或static inline函数。