[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/21 00:12 / Filesize : 204 KB / Number-of Response : 981
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

アセンブラ… ( ゚д゚)ウッウー



528 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 16:17:49 ]
RGBA→ARGBの変換を行いたいのですが、いったいどれが一番速いのでしょうか。

struct RGBA {unsigned char a, b, g, a; }; // rrggbbaa
struct ABGR {unsigned char r, g, b, a; }; // aabbggrr

void conv1(RGBA &x, ABGR &y) {
 x.r = y.r; x.g = y.g; x.b = y.b; x.a = y.a;
}

void conv2(RGBA &x, ABGR &y) {
 uint32_t t = *(uint32_t *)&y;
 *(uint32_t *)&x = (y.r << 24) | (y.g << 16) | (y.b << 8) | (y.a);
}

void conv3(RGBA &x, ABGR &y) {
 uint32_t t = *(uint32_t *)&y;
 *(uint32_t *)&x = ((t & 0x000000ff) << 24) | ((t & 0x0000ff00) << 8)
            | ((t & 0x00ff0000) >> 8) | ((t & 0xff000000) >> 24);
}

void conv4(RGBA &x, ABGR &y) {
 __m64 mm0 = _mm_cvtsi32_si64(*(uint32_t *)&y);
 mm0 = _mm_unpacklo_pi8(mm0, _mm_setzero_si64());
 mm0 = _mm_shuffle_pi16(mm0, _MM_SHUFFLE(0, 1, 2, 3));
 mm0 = _mm_packs_pu16(mm0, mm0);
 *(uint32_t *)&x = _mm_cvtsi64_si32(mm0);
}






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<204KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef