我一直在考虑使用SSE指令集让我的3D软件光栅化器更快,但我以前从未使用它们,觉得我完全错了。
我希望从更有经验的人那里听到这是否值得一试,如果这段代码写得不好:
typedef union _declspec(align(16)) {
struct {
float x;
float y;
float z;
float w;
};
__m128 m128;
} Vec4_t;
Vec4_t AddVec(Vec4_t* a, Vec4_t *b) {
__m128 value = _mm_add_ps(a->m128, b->m128);
return *(Vec4_t*)&value;
}
这就是我测试它的方式:
Vec4_t a = { 2.0f, 4.0f, 10.0f, 123.1f };
Vec4_t b = { 6.0f, 12.0f, 16.0f, 64.0f };
Vec4_t c = AddVec(&a, &b);
printf("%f, %f, %f, %f\n", c.x, c.y, c.z, c.w);
输出:
8.000000, 16.000000, 26.000000, 187.100006
老实说,我不知道我在做什么。我对我写的代码甚至工作感到惊讶。