1
我正在試着做一個函數,總結2 CGVectors
。如何在C/Objective C中使用SSE指令集?
這是我的嘗試:
包括:
@import GLKit;
@import Foundations;
// Defenition of CGVector
struct CGVector {
CGFloat dx;
CGFloat dy;
};
typedef struct CGVector CGVector;
inline CGVector CGVECADD(CGVector v1 , CGVector v2){
#ifdef GLK_SSE3_INTRINSICS
__m128d v;
v = _mm_add_sd(*(__m128d *)&v1, *(__m128d *)&v2);
return *(CGVector *)& v;
#else
return CGVectorMake(v1.dx + v2.dx, v1.dy + v2.dy);
#endif
}
然後我試圖使用它像
CGVector v1, v2 , v3;
v1 = CGVectorMake(2, 3);
v2 = CGVectorMake(4, 4);;
v3 = CGVECADD(v1, v2); //(6, 7) expected
NSLog(@"V3 = (%lf, %lf)", v3.dx , v3.dy);
沒有編譯器錯誤,但我從日誌中得到的是
V3 =(6.000000,3.000000)
我預計將有6,7 :-)
我做了什麼錯?
但整體思想是用SSE2 – ColdSteel
使其目前還不清楚,如果你正在內的obj-嘗試這種c文件或c。也許包括該信息和包括,進口太...換句話說,其餘的代碼。 :) –
編輯:該文件是.m,但它只包含C函數 – ColdSteel