アセンブラ… ( ゚д゚)ウッウー
■ このスレッドは過去ログ倉庫に格納されています
0528デフォルトの名無しさん
2007/07/26(木) 16:17:49struct 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);
}
■ このスレッドは過去ログ倉庫に格納されています