00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "dsputil_mmx.h"
00025
00026
00027 DECLARE_ALIGNED_8(static const uint64_t, rv40_bias_reg[4][8]) = {
00028 { 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0010001000100010ULL, 0x0002000200020002ULL,
00029 0x0020002000200020ULL, 0x0004000400040004ULL, 0x0010001000100010ULL, 0x0002000200020002ULL },
00030 { 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL,
00031 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL },
00032 { 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0020002000200020ULL, 0x0004000400040004ULL,
00033 0x0010001000100010ULL, 0x0002000200020002ULL, 0x0020002000200020ULL, 0x0004000400040004ULL },
00034 { 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL,
00035 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL }
00036 };
00037
00038 static void put_rv40_chroma_mc8_mmx(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
00039 {
00040 put_h264_chroma_generic_mc8_mmx(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
00041 }
00042 static void put_rv40_chroma_mc4_mmx(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
00043 {
00044 put_h264_chroma_generic_mc4_mmx(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
00045 }
00046 static void avg_rv40_chroma_mc8_mmx2(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
00047 {
00048 avg_h264_chroma_generic_mc8_mmx2(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
00049 }
00050 static void avg_rv40_chroma_mc4_mmx2(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
00051 {
00052 avg_h264_chroma_generic_mc4_mmx2(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
00053 }
00054 static void avg_rv40_chroma_mc8_3dnow(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
00055 {
00056 avg_h264_chroma_generic_mc8_3dnow(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
00057 }
00058 static void avg_rv40_chroma_mc4_3dnow(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
00059 {
00060 avg_h264_chroma_generic_mc4_3dnow(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
00061 }