2016-10-01 11 views
1

2の合計を持つ関数を作成しようとしていますCGVectorsC/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を持つことが期待しましたか?

答えて

0

あなたは行うことができる必要があります:

CGVector v1, v2, v3; 
v1 = CGVectorMake(2, 3); 
v2 = CGVectorMake(4, 4); 
v3 = CGVectorMake(v1.dx + v2.dx, v1.dy + v2.dy); 
NSLog(@"V3 = (%f, %f)", v3.dx, v3.dy); 

出力

V3 = (6.000000, 7.000000) 
+0

しかし、全体的なアイデアは、SSE2 – ColdSteel

+0

でそれをすることですあなたはobj-以内にこれをしようとしているかどうかは不明ですcファイルまたはc。たぶん、その情報とインクルード、インクルードも含まれています。言い換えれば、残りのコードです。 :) –

+0

編集されました:ファイルは.mですが、Cの関数のみが含まれています – ColdSteel

関連する問題