4. 例:RGBからYへの変換
このセクションでは、E2でプログラムをベクトル化 ry 例 ry 。
図2は、カラー画像をグレースケールに変換するために一般的に使用されるRGBからYへの輝度変換のためのCコードおよび対応するベクトル化されたアセンブリを示す。
1 // numVectors > 0
2 // y = r * .299 + g * .587 + b * .114;
3 void rgb2y(int numVectors,
4 __vector float *r, __vector float *g,
5 __vector float *b, __vector float *y)
6 {
7 __vector float yr = { 0.299f, 0.299f,
8 0.299f, 0.299f };
9 __vector float yg = { 0.587f, 0.587f,
10 0.587f, 0.587f } ;
11 __vector float yb = { 0.114f, 0.114f,
12 0.114f, 0.114f };
13
14 for (int i = 0; i < numVectors; i++)
15 y[i] = r[i] * yr + g[i] * yg + b[i] * yb;
16 }
17
18 _rgb2y:
19 read t30, r3 // numVectors
20 read t20, r4 // next rのアドレス
21 read t21, r5 // 次のgのアドレス
22 read t22, r6 // 次のアドレスb
23 read t32, r7 // yのアドレス
24 read t31, r8 // i
25 read t1, v0 // vector yr
26 read t3, v1 // ベクトルyg
27 read t5, v2 // vector yb
28