@ -2594,4 +2594,40 @@ cglobal pred4x4_horizontal_up_mmxext, 3,3
movd [ r1 + r2 * 1 ], m7
movd [ r1 + r2 * 2 ], m1
RET
;-----------------------------------------------------------------------------
; void pred4x4_horizontal_down_mmxext(uint8_t *src, const uint8_t *topright, int stride)
;-----------------------------------------------------------------------------
INIT_MMX
% define PALIGNR PALIGNR_MMX
cglobal pred4x4_horizontal_down_mmxext , 3 , 3
sub r0 , r2
lea r1 , [ r0 + r2 * 2 ]
movh m0 , [ r0 - 4 ] ; lt ..
punpckldq m0 , [ r0 ] ; t3 t2 t1 t0 lt .. .. ..
psllq m0 , 8 ; t2 t1 t0 lt .. .. .. ..
movq m1 , [ r1 + r2 * 2 - 8 ] ; l3
punpckhbw m1 , [ r1 + r2 * 1 - 8 ] ; l2 l3
movq m2 , [ r0 + r2 * 2 - 8 ] ; l1
punpckhbw m2 , [ r0 + r2 * 1 - 8 ] ; l0 l1
punpckhwd m1 , m2 ; l0 l1 l2 l3
punpckhdq m1 , m0 ; t2 t1 t0 lt l0 l1 l2 l3
movq m0 , m1
movq m2 , m1
movq m5 , m1
psrlq m0 , 16 ; .. .. t2 t1 t0 lt l0 l1
psrlq m2 , 8 ; .. t2 t1 t0 lt l0 l1 l2
pavgb m5 , m2
PRED4x4_LOWPASS m3 , m1 , m0 , m2 , m4
punpcklbw m5 , m3
psrlq m3 , 32
PALIGNR m3 , m5 , 6 , m4
movh [ r1 + r2 * 2 ], m5
psrlq m5 , 16
movh [ r1 + r2 * 1 ], m5
psrlq m5 , 16
movh [ r0 + r2 * 2 ], m5
movh [ r0 + r2 * 1 ], m3
RET
% endif