2011-02-07 53 views
3

GCC是否可以使用结构或类作为SSE指令的向量类型?在gcc中使用struct作为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]; 
}; 

会很方便,但我似乎无法使它工作。

+0

当你说你“似乎无法使它工作”,那究竟是什么问题? – 2011-02-07 09:33:37

+0

语法不起作用,gcc给了我“错误:在'{'token'之前预期的非限定id” – 2011-02-07 13:36:35

回答

2

您能否将union这样发布,但您的struct而不是float f[4];作为第二个成员?那会给你你想要的行为。

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函数。