xref: /aosp_15_r20/external/libvpx/vpx_dsp/x86/intrapred_sse2.asm (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker;
2*fb1b10abSAndroid Build Coastguard Worker;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker;
4*fb1b10abSAndroid Build Coastguard Worker;  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker;  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker;  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker;  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker;  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker;
10*fb1b10abSAndroid Build Coastguard Worker
11*fb1b10abSAndroid Build Coastguard Worker%include "third_party/x86inc/x86inc.asm"
12*fb1b10abSAndroid Build Coastguard Worker
13*fb1b10abSAndroid Build Coastguard WorkerSECTION_RODATA
14*fb1b10abSAndroid Build Coastguard Workerpb_1: times 16 db 1
15*fb1b10abSAndroid Build Coastguard Workerpw_4:  times 8 dw 4
16*fb1b10abSAndroid Build Coastguard Workerpw_8:  times 8 dw 8
17*fb1b10abSAndroid Build Coastguard Workerpw_16: times 8 dw 16
18*fb1b10abSAndroid Build Coastguard Workerpw_32: times 8 dw 32
19*fb1b10abSAndroid Build Coastguard Workerdc_128: times 16 db 128
20*fb1b10abSAndroid Build Coastguard Workerpw2_4:  times 8 dw 2
21*fb1b10abSAndroid Build Coastguard Workerpw2_8:  times 8 dw 4
22*fb1b10abSAndroid Build Coastguard Workerpw2_16:  times 8 dw 8
23*fb1b10abSAndroid Build Coastguard Workerpw2_32:  times 8 dw 16
24*fb1b10abSAndroid Build Coastguard Worker
25*fb1b10abSAndroid Build Coastguard WorkerSECTION .text
26*fb1b10abSAndroid Build Coastguard Worker
27*fb1b10abSAndroid Build Coastguard Worker; ------------------------------------------
28*fb1b10abSAndroid Build Coastguard Worker; input: x, y, z, result
29*fb1b10abSAndroid Build Coastguard Worker;
30*fb1b10abSAndroid Build Coastguard Worker; trick from pascal
31*fb1b10abSAndroid Build Coastguard Worker; (x+2y+z+2)>>2 can be calculated as:
32*fb1b10abSAndroid Build Coastguard Worker; result = avg(x,z)
33*fb1b10abSAndroid Build Coastguard Worker; result -= xor(x,z) & 1
34*fb1b10abSAndroid Build Coastguard Worker; result = avg(result,y)
35*fb1b10abSAndroid Build Coastguard Worker; ------------------------------------------
36*fb1b10abSAndroid Build Coastguard Worker%macro X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 4
37*fb1b10abSAndroid Build Coastguard Worker  pavgb               %4, %1, %3
38*fb1b10abSAndroid Build Coastguard Worker  pxor                %3, %1
39*fb1b10abSAndroid Build Coastguard Worker  pand                %3, [GLOBAL(pb_1)]
40*fb1b10abSAndroid Build Coastguard Worker  psubb               %4, %3
41*fb1b10abSAndroid Build Coastguard Worker  pavgb               %4, %2
42*fb1b10abSAndroid Build Coastguard Worker%endmacro
43*fb1b10abSAndroid Build Coastguard Worker
44*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
45*fb1b10abSAndroid Build Coastguard Workercglobal d45_predictor_4x4, 3, 4, 4, dst, stride, above, goffset
46*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
47*fb1b10abSAndroid Build Coastguard Worker
48*fb1b10abSAndroid Build Coastguard Worker  movq                 m0, [aboveq]
49*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, temp
50*fb1b10abSAndroid Build Coastguard Worker  psrldq               m1, m0, 1
51*fb1b10abSAndroid Build Coastguard Worker  psrldq               m2, m0, 2
52*fb1b10abSAndroid Build Coastguard Worker  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m1, m2, m3
53*fb1b10abSAndroid Build Coastguard Worker
54*fb1b10abSAndroid Build Coastguard Worker  ; store 4 lines
55*fb1b10abSAndroid Build Coastguard Worker  movd   [dstq          ], m3
56*fb1b10abSAndroid Build Coastguard Worker  psrlq                m3, 8
57*fb1b10abSAndroid Build Coastguard Worker  movd   [dstq+strideq  ], m3
58*fb1b10abSAndroid Build Coastguard Worker  lea                dstq, [dstq+strideq*2]
59*fb1b10abSAndroid Build Coastguard Worker  psrlq                m3, 8
60*fb1b10abSAndroid Build Coastguard Worker  movd   [dstq          ], m3
61*fb1b10abSAndroid Build Coastguard Worker  psrlq                m3, 8
62*fb1b10abSAndroid Build Coastguard Worker  movd   [dstq+strideq  ], m3
63*fb1b10abSAndroid Build Coastguard Worker  psrlq                m0, 56
64*fb1b10abSAndroid Build Coastguard Worker  movd              tempd, m0
65*fb1b10abSAndroid Build Coastguard Worker  mov    [dstq+strideq+3], tempb
66*fb1b10abSAndroid Build Coastguard Worker
67*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
68*fb1b10abSAndroid Build Coastguard Worker  RET
69*fb1b10abSAndroid Build Coastguard Worker
70*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
71*fb1b10abSAndroid Build Coastguard Workercglobal d45_predictor_8x8, 3, 4, 4, dst, stride, above, goffset
72*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
73*fb1b10abSAndroid Build Coastguard Worker
74*fb1b10abSAndroid Build Coastguard Worker  movu                m1, [aboveq]
75*fb1b10abSAndroid Build Coastguard Worker  pslldq              m0, m1, 1
76*fb1b10abSAndroid Build Coastguard Worker  psrldq              m2, m1, 1
77*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3
78*fb1b10abSAndroid Build Coastguard Worker  lea           stride3q, [strideq*3]
79*fb1b10abSAndroid Build Coastguard Worker  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m1, m2, m3
80*fb1b10abSAndroid Build Coastguard Worker  punpckhbw           m0, m0 ; 7 7
81*fb1b10abSAndroid Build Coastguard Worker  punpcklwd           m0, m0 ; 7 7 7 7
82*fb1b10abSAndroid Build Coastguard Worker  punpckldq           m0, m0 ; 7 7 7 7 7 7 7 7
83*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq          m3, m0 ; -1 0 1 2 3 4 5 6 7 7 7 7 7 7 7 7
84*fb1b10abSAndroid Build Coastguard Worker
85*fb1b10abSAndroid Build Coastguard Worker ; store 4 lines
86*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
87*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m3
88*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
89*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m3
90*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
91*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m3
92*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
93*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m3
94*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
95*fb1b10abSAndroid Build Coastguard Worker
96*fb1b10abSAndroid Build Coastguard Worker  ; store next 4 lines
97*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
98*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m3
99*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
100*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m3
101*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
102*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m3
103*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 1
104*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m3
105*fb1b10abSAndroid Build Coastguard Worker
106*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
107*fb1b10abSAndroid Build Coastguard Worker  RET
108*fb1b10abSAndroid Build Coastguard Worker
109*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
110*fb1b10abSAndroid Build Coastguard Workercglobal d207_predictor_4x4, 4, 4, 5, dst, stride, unused, left, goffset
111*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
112*fb1b10abSAndroid Build Coastguard Worker
113*fb1b10abSAndroid Build Coastguard Worker  movd                m0, [leftq]                ; abcd [byte]
114*fb1b10abSAndroid Build Coastguard Worker  punpcklbw           m4, m0, m0                 ; aabb ccdd
115*fb1b10abSAndroid Build Coastguard Worker  punpcklwd           m4, m4                     ; aaaa bbbb cccc dddd
116*fb1b10abSAndroid Build Coastguard Worker  psrldq              m4, 12                     ; dddd
117*fb1b10abSAndroid Build Coastguard Worker  punpckldq           m0, m4                     ; abcd dddd
118*fb1b10abSAndroid Build Coastguard Worker  psrldq              m1, m0, 1                  ; bcdd
119*fb1b10abSAndroid Build Coastguard Worker  psrldq              m2, m0, 2                  ; cddd
120*fb1b10abSAndroid Build Coastguard Worker
121*fb1b10abSAndroid Build Coastguard Worker  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m1, m2, m3   ; a2bc b2cd c3d d
122*fb1b10abSAndroid Build Coastguard Worker  pavgb               m1, m0                     ; ab, bc, cd, d [byte]
123*fb1b10abSAndroid Build Coastguard Worker
124*fb1b10abSAndroid Build Coastguard Worker  punpcklbw           m1, m3             ; ab, a2bc, bc, b2cd, cd, c3d, d, d
125*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq        ], m1
126*fb1b10abSAndroid Build Coastguard Worker  psrlq               m1, 16             ; bc, b2cd, cd, c3d, d, d
127*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq+strideq], m1
128*fb1b10abSAndroid Build Coastguard Worker
129*fb1b10abSAndroid Build Coastguard Worker  lea               dstq, [dstq+strideq*2]
130*fb1b10abSAndroid Build Coastguard Worker  psrlq               m1, 16             ; cd, c3d, d, d
131*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq        ], m1
132*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq+strideq], m4             ; d, d, d, d
133*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
134*fb1b10abSAndroid Build Coastguard Worker  RET
135*fb1b10abSAndroid Build Coastguard Worker
136*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
137*fb1b10abSAndroid Build Coastguard Workercglobal dc_predictor_4x4, 4, 5, 3, dst, stride, above, left, goffset
138*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
139*fb1b10abSAndroid Build Coastguard Worker
140*fb1b10abSAndroid Build Coastguard Worker  movd                  m2, [leftq]
141*fb1b10abSAndroid Build Coastguard Worker  movd                  m0, [aboveq]
142*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
143*fb1b10abSAndroid Build Coastguard Worker  punpckldq             m0, m2
144*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
145*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw_4)]
146*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 3
147*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
148*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
149*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
150*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
151*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
152*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
153*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
154*fb1b10abSAndroid Build Coastguard Worker
155*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
156*fb1b10abSAndroid Build Coastguard Worker  RET
157*fb1b10abSAndroid Build Coastguard Worker
158*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
159*fb1b10abSAndroid Build Coastguard Workercglobal dc_left_predictor_4x4, 2, 5, 2, dst, stride, above, left, goffset
160*fb1b10abSAndroid Build Coastguard Worker  movifnidn          leftq, leftmp
161*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
162*fb1b10abSAndroid Build Coastguard Worker
163*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
164*fb1b10abSAndroid Build Coastguard Worker  movd                  m0, [leftq]
165*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
166*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_4)]
167*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 2
168*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
169*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
170*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
171*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
172*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
173*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
174*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
175*fb1b10abSAndroid Build Coastguard Worker
176*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
177*fb1b10abSAndroid Build Coastguard Worker  RET
178*fb1b10abSAndroid Build Coastguard Worker
179*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
180*fb1b10abSAndroid Build Coastguard Workercglobal dc_top_predictor_4x4, 3, 5, 2, dst, stride, above, left, goffset
181*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
182*fb1b10abSAndroid Build Coastguard Worker
183*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
184*fb1b10abSAndroid Build Coastguard Worker  movd                  m0, [aboveq]
185*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
186*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_4)]
187*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 2
188*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
189*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
190*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
191*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
192*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
193*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
194*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
195*fb1b10abSAndroid Build Coastguard Worker
196*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
197*fb1b10abSAndroid Build Coastguard Worker  RET
198*fb1b10abSAndroid Build Coastguard Worker
199*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
200*fb1b10abSAndroid Build Coastguard Workercglobal dc_predictor_8x8, 4, 5, 3, dst, stride, above, left, goffset
201*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
202*fb1b10abSAndroid Build Coastguard Worker
203*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
204*fb1b10abSAndroid Build Coastguard Worker  movq                  m0, [aboveq]
205*fb1b10abSAndroid Build Coastguard Worker  movq                  m2, [leftq]
206*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3
207*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
208*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
209*fb1b10abSAndroid Build Coastguard Worker  psadbw                m2, m1
210*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
211*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw_8)]
212*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 4
213*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0
214*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
215*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
216*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
217*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
218*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
219*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
220*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
221*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
222*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
223*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
224*fb1b10abSAndroid Build Coastguard Worker
225*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
226*fb1b10abSAndroid Build Coastguard Worker  RET
227*fb1b10abSAndroid Build Coastguard Worker
228*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
229*fb1b10abSAndroid Build Coastguard Workercglobal dc_top_predictor_8x8, 3, 5, 2, dst, stride, above, left, goffset
230*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
231*fb1b10abSAndroid Build Coastguard Worker
232*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
233*fb1b10abSAndroid Build Coastguard Worker  movq                  m0, [aboveq]
234*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3
235*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
236*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
237*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_8)]
238*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 3
239*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0
240*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
241*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
242*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
243*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
244*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
245*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
246*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
247*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
248*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
249*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
250*fb1b10abSAndroid Build Coastguard Worker
251*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
252*fb1b10abSAndroid Build Coastguard Worker  RET
253*fb1b10abSAndroid Build Coastguard Worker
254*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
255*fb1b10abSAndroid Build Coastguard Workercglobal dc_left_predictor_8x8, 2, 5, 2, dst, stride, above, left, goffset
256*fb1b10abSAndroid Build Coastguard Worker  movifnidn          leftq, leftmp
257*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
258*fb1b10abSAndroid Build Coastguard Worker
259*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
260*fb1b10abSAndroid Build Coastguard Worker  movq                  m0, [leftq]
261*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3
262*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
263*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
264*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_8)]
265*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 3
266*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0
267*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
268*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
269*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
270*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
271*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
272*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
273*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
274*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
275*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
276*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
277*fb1b10abSAndroid Build Coastguard Worker
278*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
279*fb1b10abSAndroid Build Coastguard Worker  RET
280*fb1b10abSAndroid Build Coastguard Worker
281*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
282*fb1b10abSAndroid Build Coastguard Workercglobal dc_128_predictor_4x4, 2, 5, 1, dst, stride, above, left, goffset
283*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
284*fb1b10abSAndroid Build Coastguard Worker
285*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3
286*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
287*fb1b10abSAndroid Build Coastguard Worker  movd     m0,        [GLOBAL(dc_128)]
288*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq          ], m0
289*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq+strideq  ], m0
290*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq+strideq*2], m0
291*fb1b10abSAndroid Build Coastguard Worker  movd    [dstq+stride3q ], m0
292*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
293*fb1b10abSAndroid Build Coastguard Worker  RET
294*fb1b10abSAndroid Build Coastguard Worker
295*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
296*fb1b10abSAndroid Build Coastguard Workercglobal dc_128_predictor_8x8, 2, 5, 1, dst, stride, above, left, goffset
297*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
298*fb1b10abSAndroid Build Coastguard Worker
299*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3
300*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
301*fb1b10abSAndroid Build Coastguard Worker  movq    m0,        [GLOBAL(dc_128)]
302*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
303*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
304*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
305*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
306*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
307*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
308*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
309*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
310*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
311*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
312*fb1b10abSAndroid Build Coastguard Worker  RET
313*fb1b10abSAndroid Build Coastguard Worker
314*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
315*fb1b10abSAndroid Build Coastguard Workercglobal dc_predictor_16x16, 4, 5, 3, dst, stride, above, left, goffset
316*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
317*fb1b10abSAndroid Build Coastguard Worker
318*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
319*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]
320*fb1b10abSAndroid Build Coastguard Worker  mova                  m2, [leftq]
321*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
322*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
323*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 4
324*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
325*fb1b10abSAndroid Build Coastguard Worker  psadbw                m2, m1
326*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
327*fb1b10abSAndroid Build Coastguard Worker  movhlps               m2, m0
328*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
329*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw_16)]
330*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 5
331*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
332*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m0, m0
333*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
334*fb1b10abSAndroid Build Coastguard Worker.loop:
335*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq          ], m0
336*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq  ], m0
337*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq*2], m0
338*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+stride3q ], m0
339*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
340*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
341*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
342*fb1b10abSAndroid Build Coastguard Worker
343*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
344*fb1b10abSAndroid Build Coastguard Worker  REP_RET
345*fb1b10abSAndroid Build Coastguard Worker
346*fb1b10abSAndroid Build Coastguard Worker
347*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
348*fb1b10abSAndroid Build Coastguard Workercglobal dc_top_predictor_16x16, 4, 5, 3, dst, stride, above, left, goffset
349*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
350*fb1b10abSAndroid Build Coastguard Worker
351*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
352*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]
353*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
354*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
355*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 4
356*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
357*fb1b10abSAndroid Build Coastguard Worker  movhlps               m2, m0
358*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
359*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_16)]
360*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 4
361*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
362*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m0, m0
363*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
364*fb1b10abSAndroid Build Coastguard Worker.loop:
365*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq          ], m0
366*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq  ], m0
367*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq*2], m0
368*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+stride3q ], m0
369*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
370*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
371*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
372*fb1b10abSAndroid Build Coastguard Worker
373*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
374*fb1b10abSAndroid Build Coastguard Worker  REP_RET
375*fb1b10abSAndroid Build Coastguard Worker
376*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
377*fb1b10abSAndroid Build Coastguard Workercglobal dc_left_predictor_16x16, 4, 5, 3, dst, stride, above, left, goffset
378*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
379*fb1b10abSAndroid Build Coastguard Worker
380*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
381*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [leftq]
382*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
383*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
384*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 4
385*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
386*fb1b10abSAndroid Build Coastguard Worker  movhlps               m2, m0
387*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
388*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_16)]
389*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 4
390*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
391*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m0, m0
392*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
393*fb1b10abSAndroid Build Coastguard Worker.loop:
394*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq          ], m0
395*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq  ], m0
396*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq*2], m0
397*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+stride3q ], m0
398*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
399*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
400*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
401*fb1b10abSAndroid Build Coastguard Worker
402*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
403*fb1b10abSAndroid Build Coastguard Worker  REP_RET
404*fb1b10abSAndroid Build Coastguard Worker
405*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
406*fb1b10abSAndroid Build Coastguard Workercglobal dc_128_predictor_16x16, 4, 5, 3, dst, stride, above, left, goffset
407*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
408*fb1b10abSAndroid Build Coastguard Worker
409*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
410*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
411*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 4
412*fb1b10abSAndroid Build Coastguard Worker  mova    m0,        [GLOBAL(dc_128)]
413*fb1b10abSAndroid Build Coastguard Worker.loop:
414*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq          ], m0
415*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq  ], m0
416*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq*2], m0
417*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+stride3q ], m0
418*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
419*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
420*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
421*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
422*fb1b10abSAndroid Build Coastguard Worker  RET
423*fb1b10abSAndroid Build Coastguard Worker
424*fb1b10abSAndroid Build Coastguard Worker
425*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
426*fb1b10abSAndroid Build Coastguard Workercglobal dc_predictor_32x32, 4, 5, 5, dst, stride, above, left, goffset
427*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
428*fb1b10abSAndroid Build Coastguard Worker
429*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
430*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]
431*fb1b10abSAndroid Build Coastguard Worker  mova                  m2, [aboveq+16]
432*fb1b10abSAndroid Build Coastguard Worker  mova                  m3, [leftq]
433*fb1b10abSAndroid Build Coastguard Worker  mova                  m4, [leftq+16]
434*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
435*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
436*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 8
437*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
438*fb1b10abSAndroid Build Coastguard Worker  psadbw                m2, m1
439*fb1b10abSAndroid Build Coastguard Worker  psadbw                m3, m1
440*fb1b10abSAndroid Build Coastguard Worker  psadbw                m4, m1
441*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
442*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m3
443*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m4
444*fb1b10abSAndroid Build Coastguard Worker  movhlps               m2, m0
445*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
446*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw_32)]
447*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 6
448*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
449*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m0, m0
450*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
451*fb1b10abSAndroid Build Coastguard Worker.loop:
452*fb1b10abSAndroid Build Coastguard Worker  mova [dstq             ], m0
453*fb1b10abSAndroid Build Coastguard Worker  mova [dstq          +16], m0
454*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq     ], m0
455*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq  +16], m0
456*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2   ], m0
457*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2+16], m0
458*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q    ], m0
459*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q +16], m0
460*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
461*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
462*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
463*fb1b10abSAndroid Build Coastguard Worker
464*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
465*fb1b10abSAndroid Build Coastguard Worker  REP_RET
466*fb1b10abSAndroid Build Coastguard Worker
467*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
468*fb1b10abSAndroid Build Coastguard Workercglobal dc_top_predictor_32x32, 4, 5, 5, dst, stride, above, left, goffset
469*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
470*fb1b10abSAndroid Build Coastguard Worker
471*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
472*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]
473*fb1b10abSAndroid Build Coastguard Worker  mova                  m2, [aboveq+16]
474*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
475*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
476*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 8
477*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
478*fb1b10abSAndroid Build Coastguard Worker  psadbw                m2, m1
479*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
480*fb1b10abSAndroid Build Coastguard Worker  movhlps               m2, m0
481*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
482*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_32)]
483*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 5
484*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
485*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m0, m0
486*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
487*fb1b10abSAndroid Build Coastguard Worker.loop:
488*fb1b10abSAndroid Build Coastguard Worker  mova [dstq             ], m0
489*fb1b10abSAndroid Build Coastguard Worker  mova [dstq          +16], m0
490*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq     ], m0
491*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq  +16], m0
492*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2   ], m0
493*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2+16], m0
494*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q    ], m0
495*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q +16], m0
496*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
497*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
498*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
499*fb1b10abSAndroid Build Coastguard Worker
500*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
501*fb1b10abSAndroid Build Coastguard Worker  REP_RET
502*fb1b10abSAndroid Build Coastguard Worker
503*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
504*fb1b10abSAndroid Build Coastguard Workercglobal dc_left_predictor_32x32, 4, 5, 5, dst, stride, above, left, goffset
505*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
506*fb1b10abSAndroid Build Coastguard Worker
507*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
508*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [leftq]
509*fb1b10abSAndroid Build Coastguard Worker  mova                  m2, [leftq+16]
510*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
511*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
512*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 8
513*fb1b10abSAndroid Build Coastguard Worker  psadbw                m0, m1
514*fb1b10abSAndroid Build Coastguard Worker  psadbw                m2, m1
515*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
516*fb1b10abSAndroid Build Coastguard Worker  movhlps               m2, m0
517*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, m2
518*fb1b10abSAndroid Build Coastguard Worker  paddw                 m0, [GLOBAL(pw2_32)]
519*fb1b10abSAndroid Build Coastguard Worker  psraw                 m0, 5
520*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m0, m0, 0x0
521*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m0, m0
522*fb1b10abSAndroid Build Coastguard Worker  packuswb              m0, m0
523*fb1b10abSAndroid Build Coastguard Worker.loop:
524*fb1b10abSAndroid Build Coastguard Worker  mova [dstq             ], m0
525*fb1b10abSAndroid Build Coastguard Worker  mova [dstq          +16], m0
526*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq     ], m0
527*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq  +16], m0
528*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2   ], m0
529*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2+16], m0
530*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q    ], m0
531*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q +16], m0
532*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
533*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
534*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
535*fb1b10abSAndroid Build Coastguard Worker
536*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
537*fb1b10abSAndroid Build Coastguard Worker  REP_RET
538*fb1b10abSAndroid Build Coastguard Worker
539*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
540*fb1b10abSAndroid Build Coastguard Workercglobal dc_128_predictor_32x32, 4, 5, 3, dst, stride, above, left, goffset
541*fb1b10abSAndroid Build Coastguard Worker  GET_GOT     goffsetq
542*fb1b10abSAndroid Build Coastguard Worker
543*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, lines4
544*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
545*fb1b10abSAndroid Build Coastguard Worker  mov              lines4d, 8
546*fb1b10abSAndroid Build Coastguard Worker  mova    m0,        [GLOBAL(dc_128)]
547*fb1b10abSAndroid Build Coastguard Worker.loop:
548*fb1b10abSAndroid Build Coastguard Worker  mova [dstq             ], m0
549*fb1b10abSAndroid Build Coastguard Worker  mova [dstq          +16], m0
550*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq     ], m0
551*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq  +16], m0
552*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2   ], m0
553*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2+16], m0
554*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q    ], m0
555*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q +16], m0
556*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
557*fb1b10abSAndroid Build Coastguard Worker  dec              lines4d
558*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
559*fb1b10abSAndroid Build Coastguard Worker  RESTORE_GOT
560*fb1b10abSAndroid Build Coastguard Worker  RET
561*fb1b10abSAndroid Build Coastguard Worker
562*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
563*fb1b10abSAndroid Build Coastguard Workercglobal v_predictor_4x4, 3, 3, 1, dst, stride, above
564*fb1b10abSAndroid Build Coastguard Worker  movd                  m0, [aboveq]
565*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
566*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
567*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
568*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
569*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m0
570*fb1b10abSAndroid Build Coastguard Worker  RET
571*fb1b10abSAndroid Build Coastguard Worker
572*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
573*fb1b10abSAndroid Build Coastguard Workercglobal v_predictor_8x8, 3, 3, 1, dst, stride, above
574*fb1b10abSAndroid Build Coastguard Worker  movq                  m0, [aboveq]
575*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3
576*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
577*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
578*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
579*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
580*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
581*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
582*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq          ], m0
583*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq  ], m0
584*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m0
585*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m0
586*fb1b10abSAndroid Build Coastguard Worker  RET
587*fb1b10abSAndroid Build Coastguard Worker
588*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
589*fb1b10abSAndroid Build Coastguard Workercglobal v_predictor_16x16, 3, 4, 1, dst, stride, above
590*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]
591*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, nlines4
592*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
593*fb1b10abSAndroid Build Coastguard Worker  mov              nlines4d, 4
594*fb1b10abSAndroid Build Coastguard Worker.loop:
595*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq          ], m0
596*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq  ], m0
597*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq*2], m0
598*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+stride3q ], m0
599*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
600*fb1b10abSAndroid Build Coastguard Worker  dec             nlines4d
601*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
602*fb1b10abSAndroid Build Coastguard Worker  REP_RET
603*fb1b10abSAndroid Build Coastguard Worker
604*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
605*fb1b10abSAndroid Build Coastguard Workercglobal v_predictor_32x32, 3, 4, 2, dst, stride, above
606*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]
607*fb1b10abSAndroid Build Coastguard Worker  mova                  m1, [aboveq+16]
608*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, stride3, nlines4
609*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
610*fb1b10abSAndroid Build Coastguard Worker  mov              nlines4d, 8
611*fb1b10abSAndroid Build Coastguard Worker.loop:
612*fb1b10abSAndroid Build Coastguard Worker  mova [dstq             ], m0
613*fb1b10abSAndroid Build Coastguard Worker  mova [dstq          +16], m1
614*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq     ], m0
615*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq  +16], m1
616*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2   ], m0
617*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+strideq*2+16], m1
618*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q    ], m0
619*fb1b10abSAndroid Build Coastguard Worker  mova [dstq+stride3q +16], m1
620*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
621*fb1b10abSAndroid Build Coastguard Worker  dec             nlines4d
622*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
623*fb1b10abSAndroid Build Coastguard Worker  REP_RET
624*fb1b10abSAndroid Build Coastguard Worker
625*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
626*fb1b10abSAndroid Build Coastguard Workercglobal h_predictor_4x4, 2, 4, 4, dst, stride, line, left
627*fb1b10abSAndroid Build Coastguard Worker  movifnidn          leftq, leftmp
628*fb1b10abSAndroid Build Coastguard Worker  movd                  m0, [leftq]
629*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0
630*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0
631*fb1b10abSAndroid Build Coastguard Worker  pshufd                m1, m0, 0x1
632*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m0
633*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m1
634*fb1b10abSAndroid Build Coastguard Worker  pshufd                m2, m0, 0x2
635*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
636*fb1b10abSAndroid Build Coastguard Worker  pshufd                m3, m0, 0x3
637*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m2
638*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m3
639*fb1b10abSAndroid Build Coastguard Worker  RET
640*fb1b10abSAndroid Build Coastguard Worker
641*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
642*fb1b10abSAndroid Build Coastguard Workercglobal h_predictor_8x8, 2, 5, 3, dst, stride, line, left
643*fb1b10abSAndroid Build Coastguard Worker  movifnidn          leftq, leftmp
644*fb1b10abSAndroid Build Coastguard Worker  mov                lineq, -2
645*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS  dst, stride, line, left, stride3
646*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
647*fb1b10abSAndroid Build Coastguard Worker  movq                  m0, [leftq    ]
648*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0              ; l1 l1 l2 l2 ... l8 l8
649*fb1b10abSAndroid Build Coastguard Worker.loop:
650*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m1, m0, 0x0         ; l1 l1 l1 l1 l1 l1 l1 l1
651*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m2, m0, 0x55        ; l2 l2 l2 l2 l2 l2 l2 l2
652*fb1b10abSAndroid Build Coastguard Worker  movq      [dstq        ], m1
653*fb1b10abSAndroid Build Coastguard Worker  movq      [dstq+strideq], m2
654*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m1, m0, 0xaa
655*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m2, m0, 0xff
656*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+strideq*2], m1
657*fb1b10abSAndroid Build Coastguard Worker  movq    [dstq+stride3q ], m2
658*fb1b10abSAndroid Build Coastguard Worker  pshufd                m0, m0, 0xe         ; [63:0] l5 l5 l6 l6 l7 l7 l8 l8
659*fb1b10abSAndroid Build Coastguard Worker  inc                lineq
660*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
661*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
662*fb1b10abSAndroid Build Coastguard Worker  REP_RET
663*fb1b10abSAndroid Build Coastguard Worker
664*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
665*fb1b10abSAndroid Build Coastguard Workercglobal h_predictor_16x16, 2, 5, 3, dst, stride, line, left
666*fb1b10abSAndroid Build Coastguard Worker  movifnidn          leftq, leftmp
667*fb1b10abSAndroid Build Coastguard Worker  mov                lineq, -4
668*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, line, left, stride3
669*fb1b10abSAndroid Build Coastguard Worker  lea             stride3q, [strideq*3]
670*fb1b10abSAndroid Build Coastguard Worker.loop:
671*fb1b10abSAndroid Build Coastguard Worker  movd                  m0, [leftq]
672*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0
673*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m0              ; l1 to l4 each repeated 4 times
674*fb1b10abSAndroid Build Coastguard Worker  pshufd            m1, m0, 0x0             ; l1 repeated 16 times
675*fb1b10abSAndroid Build Coastguard Worker  pshufd            m2, m0, 0x55            ; l2 repeated 16 times
676*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq          ], m1
677*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq  ], m2
678*fb1b10abSAndroid Build Coastguard Worker  pshufd            m1, m0, 0xaa
679*fb1b10abSAndroid Build Coastguard Worker  pshufd            m2, m0, 0xff
680*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+strideq*2], m1
681*fb1b10abSAndroid Build Coastguard Worker  mova    [dstq+stride3q ], m2
682*fb1b10abSAndroid Build Coastguard Worker  inc                lineq
683*fb1b10abSAndroid Build Coastguard Worker  lea                leftq, [leftq+4       ]
684*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*4]
685*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
686*fb1b10abSAndroid Build Coastguard Worker  REP_RET
687*fb1b10abSAndroid Build Coastguard Worker
688*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
689*fb1b10abSAndroid Build Coastguard Workercglobal h_predictor_32x32, 2, 5, 3, dst, stride, line, left
690*fb1b10abSAndroid Build Coastguard Worker  movifnidn              leftq, leftmp
691*fb1b10abSAndroid Build Coastguard Worker  mov                    lineq, -8
692*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, line, left, stride3
693*fb1b10abSAndroid Build Coastguard Worker  lea                 stride3q, [strideq*3]
694*fb1b10abSAndroid Build Coastguard Worker.loop:
695*fb1b10abSAndroid Build Coastguard Worker  movd                      m0, [leftq]
696*fb1b10abSAndroid Build Coastguard Worker  punpcklbw                 m0, m0
697*fb1b10abSAndroid Build Coastguard Worker  punpcklbw                 m0, m0              ; l1 to l4 each repeated 4 times
698*fb1b10abSAndroid Build Coastguard Worker  pshufd                m1, m0, 0x0             ; l1 repeated 16 times
699*fb1b10abSAndroid Build Coastguard Worker  pshufd                m2, m0, 0x55            ; l2 repeated 16 times
700*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq             ], m1
701*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+16          ], m1
702*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+strideq     ], m2
703*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+strideq+16  ], m2
704*fb1b10abSAndroid Build Coastguard Worker  pshufd                m1, m0, 0xaa
705*fb1b10abSAndroid Build Coastguard Worker  pshufd                m2, m0, 0xff
706*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+strideq*2   ], m1
707*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+strideq*2+16], m1
708*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+stride3q    ], m2
709*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+stride3q+16 ], m2
710*fb1b10abSAndroid Build Coastguard Worker  inc                    lineq
711*fb1b10abSAndroid Build Coastguard Worker  lea                    leftq, [leftq+4       ]
712*fb1b10abSAndroid Build Coastguard Worker  lea                     dstq, [dstq+strideq*4]
713*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
714*fb1b10abSAndroid Build Coastguard Worker  REP_RET
715*fb1b10abSAndroid Build Coastguard Worker
716*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
717*fb1b10abSAndroid Build Coastguard Workercglobal tm_predictor_4x4, 4, 4, 5, dst, stride, above, left
718*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
719*fb1b10abSAndroid Build Coastguard Worker  movq                  m0, [aboveq-1]; [63:0] tl t1 t2 t3 t4 x x x
720*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m1
721*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m2, m0, 0x0   ; [63:0] tl tl tl tl [word]
722*fb1b10abSAndroid Build Coastguard Worker  psrldq                m0, 2
723*fb1b10abSAndroid Build Coastguard Worker  psubw                 m0, m2        ; [63:0] t1-tl t2-tl t3-tl t4-tl [word]
724*fb1b10abSAndroid Build Coastguard Worker  movd                  m2, [leftq]
725*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m2, m1
726*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m4, m2, 0x0   ; [63:0] l1 l1 l1 l1 [word]
727*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m3, m2, 0x55  ; [63:0] l2 l2 l2 l2 [word]
728*fb1b10abSAndroid Build Coastguard Worker  paddw                 m4, m0
729*fb1b10abSAndroid Build Coastguard Worker  paddw                 m3, m0
730*fb1b10abSAndroid Build Coastguard Worker  packuswb              m4, m4
731*fb1b10abSAndroid Build Coastguard Worker  packuswb              m3, m3
732*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m4
733*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m3
734*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
735*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m4, m2, 0xaa
736*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m3, m2, 0xff
737*fb1b10abSAndroid Build Coastguard Worker  paddw                 m4, m0
738*fb1b10abSAndroid Build Coastguard Worker  paddw                 m3, m0
739*fb1b10abSAndroid Build Coastguard Worker  packuswb              m4, m4
740*fb1b10abSAndroid Build Coastguard Worker  packuswb              m3, m3
741*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq        ], m4
742*fb1b10abSAndroid Build Coastguard Worker  movd      [dstq+strideq], m3
743*fb1b10abSAndroid Build Coastguard Worker  RET
744*fb1b10abSAndroid Build Coastguard Worker
745*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
746*fb1b10abSAndroid Build Coastguard Workercglobal tm_predictor_8x8, 4, 4, 5, dst, stride, above, left
747*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
748*fb1b10abSAndroid Build Coastguard Worker  movd                  m2, [aboveq-1]
749*fb1b10abSAndroid Build Coastguard Worker  movq                  m0, [aboveq]
750*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m2, m1
751*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m1        ; t1 t2 t3 t4 t5 t6 t7 t8 [word]
752*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m2, m2, 0x0   ; [63:0] tl tl tl tl [word]
753*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, line, left
754*fb1b10abSAndroid Build Coastguard Worker  mov                lineq, -4
755*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m2, m2        ; tl tl tl tl tl tl tl tl [word]
756*fb1b10abSAndroid Build Coastguard Worker  psubw                 m0, m2        ; t1-tl t2-tl ... t8-tl [word]
757*fb1b10abSAndroid Build Coastguard Worker  movq                  m2, [leftq]
758*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m2, m1        ; l1 l2 l3 l4 l5 l6 l7 l8 [word]
759*fb1b10abSAndroid Build Coastguard Worker.loop:
760*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m4, m2, 0x0   ; [63:0] l1 l1 l1 l1 [word]
761*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m3, m2, 0x55  ; [63:0] l2 l2 l2 l2 [word]
762*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m4, m4        ; l1 l1 l1 l1 l1 l1 l1 l1 [word]
763*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m3, m3        ; l2 l2 l2 l2 l2 l2 l2 l2 [word]
764*fb1b10abSAndroid Build Coastguard Worker  paddw                 m4, m0
765*fb1b10abSAndroid Build Coastguard Worker  paddw                 m3, m0
766*fb1b10abSAndroid Build Coastguard Worker  packuswb              m4, m3
767*fb1b10abSAndroid Build Coastguard Worker  movq      [dstq        ], m4
768*fb1b10abSAndroid Build Coastguard Worker  movhps    [dstq+strideq], m4
769*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
770*fb1b10abSAndroid Build Coastguard Worker  psrldq                m2, 4
771*fb1b10abSAndroid Build Coastguard Worker  inc                lineq
772*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
773*fb1b10abSAndroid Build Coastguard Worker  REP_RET
774*fb1b10abSAndroid Build Coastguard Worker
775*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
776*fb1b10abSAndroid Build Coastguard Workercglobal tm_predictor_16x16, 4, 5, 8, dst, stride, above, left
777*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
778*fb1b10abSAndroid Build Coastguard Worker  mova                  m2, [aboveq-16];
779*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]   ; t1 t2 ... t16 [byte]
780*fb1b10abSAndroid Build Coastguard Worker  punpckhbw             m2, m1         ; [127:112] tl [word]
781*fb1b10abSAndroid Build Coastguard Worker  punpckhbw             m4, m0, m1
782*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m1         ; m0:m4 t1 t2 ... t16 [word]
783*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, line, left, stride8
784*fb1b10abSAndroid Build Coastguard Worker  mov                lineq, -8
785*fb1b10abSAndroid Build Coastguard Worker  pshufhw               m2, m2, 0xff
786*fb1b10abSAndroid Build Coastguard Worker  mova                  m3, [leftq]    ; l1 l2 ... l16 [byte]
787*fb1b10abSAndroid Build Coastguard Worker  punpckhqdq            m2, m2         ; tl repeated 8 times [word]
788*fb1b10abSAndroid Build Coastguard Worker  psubw                 m0, m2
789*fb1b10abSAndroid Build Coastguard Worker  psubw                 m4, m2         ; m0:m4 t1-tl t2-tl ... t16-tl [word]
790*fb1b10abSAndroid Build Coastguard Worker  punpckhbw             m5, m3, m1
791*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m3, m1         ; m3:m5 l1 l2 ... l16 [word]
792*fb1b10abSAndroid Build Coastguard Worker  lea             stride8q, [strideq*8]
793*fb1b10abSAndroid Build Coastguard Worker.loop:
794*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m6, m3, 0x0
795*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m7, m5, 0x0
796*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m6, m6         ; l1 repeated 8 times [word]
797*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m7, m7         ; l8 repeated 8 times [word]
798*fb1b10abSAndroid Build Coastguard Worker  paddw                 m1, m6, m0
799*fb1b10abSAndroid Build Coastguard Worker  paddw                 m6, m4         ; m1:m6 ti-tl+l1 [i=1,15] [word]
800*fb1b10abSAndroid Build Coastguard Worker  psrldq                m5, 2
801*fb1b10abSAndroid Build Coastguard Worker  packuswb              m1, m6
802*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq         ], m1
803*fb1b10abSAndroid Build Coastguard Worker  paddw                 m1, m7, m0
804*fb1b10abSAndroid Build Coastguard Worker  paddw                 m7, m4         ; m1:m7 ti-tl+l8 [i=1,15] [word]
805*fb1b10abSAndroid Build Coastguard Worker  psrldq                m3, 2
806*fb1b10abSAndroid Build Coastguard Worker  packuswb              m1, m7
807*fb1b10abSAndroid Build Coastguard Worker  mova     [dstq+stride8q], m1
808*fb1b10abSAndroid Build Coastguard Worker  inc                lineq
809*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq]
810*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
811*fb1b10abSAndroid Build Coastguard Worker  REP_RET
812*fb1b10abSAndroid Build Coastguard Worker
813*fb1b10abSAndroid Build Coastguard WorkerINIT_XMM sse2
814*fb1b10abSAndroid Build Coastguard Workercglobal tm_predictor_32x32, 4, 4, 8, dst, stride, above, left
815*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
816*fb1b10abSAndroid Build Coastguard Worker  movd                  m2, [aboveq-1]
817*fb1b10abSAndroid Build Coastguard Worker  mova                  m0, [aboveq]
818*fb1b10abSAndroid Build Coastguard Worker  mova                  m4, [aboveq+16]
819*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m2, m1
820*fb1b10abSAndroid Build Coastguard Worker  punpckhbw             m3, m0, m1
821*fb1b10abSAndroid Build Coastguard Worker  punpckhbw             m5, m4, m1
822*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m0, m1
823*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m4, m1
824*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m2, m2, 0x0
825*fb1b10abSAndroid Build Coastguard Worker  DEFINE_ARGS dst, stride, line, left
826*fb1b10abSAndroid Build Coastguard Worker  mov                lineq, -16
827*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m2, m2
828*fb1b10abSAndroid Build Coastguard Worker  add                leftq, 32
829*fb1b10abSAndroid Build Coastguard Worker  psubw                 m0, m2
830*fb1b10abSAndroid Build Coastguard Worker  psubw                 m3, m2
831*fb1b10abSAndroid Build Coastguard Worker  psubw                 m4, m2
832*fb1b10abSAndroid Build Coastguard Worker  psubw                 m5, m2
833*fb1b10abSAndroid Build Coastguard Worker.loop:
834*fb1b10abSAndroid Build Coastguard Worker  movd                  m2, [leftq+lineq*2]
835*fb1b10abSAndroid Build Coastguard Worker  pxor                  m1, m1
836*fb1b10abSAndroid Build Coastguard Worker  punpcklbw             m2, m1
837*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m7, m2, 0x55
838*fb1b10abSAndroid Build Coastguard Worker  pshuflw               m2, m2, 0x0
839*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m2, m2
840*fb1b10abSAndroid Build Coastguard Worker  punpcklqdq            m7, m7
841*fb1b10abSAndroid Build Coastguard Worker  paddw                 m6, m2, m3
842*fb1b10abSAndroid Build Coastguard Worker  paddw                 m1, m2, m0
843*fb1b10abSAndroid Build Coastguard Worker  packuswb              m1, m6
844*fb1b10abSAndroid Build Coastguard Worker  mova   [dstq           ], m1
845*fb1b10abSAndroid Build Coastguard Worker  paddw                 m6, m2, m5
846*fb1b10abSAndroid Build Coastguard Worker  paddw                 m1, m2, m4
847*fb1b10abSAndroid Build Coastguard Worker  packuswb              m1, m6
848*fb1b10abSAndroid Build Coastguard Worker  mova   [dstq+16        ], m1
849*fb1b10abSAndroid Build Coastguard Worker  paddw                 m6, m7, m3
850*fb1b10abSAndroid Build Coastguard Worker  paddw                 m1, m7, m0
851*fb1b10abSAndroid Build Coastguard Worker  packuswb              m1, m6
852*fb1b10abSAndroid Build Coastguard Worker  mova   [dstq+strideq   ], m1
853*fb1b10abSAndroid Build Coastguard Worker  paddw                 m6, m7, m5
854*fb1b10abSAndroid Build Coastguard Worker  paddw                 m1, m7, m4
855*fb1b10abSAndroid Build Coastguard Worker  packuswb              m1, m6
856*fb1b10abSAndroid Build Coastguard Worker  mova   [dstq+strideq+16], m1
857*fb1b10abSAndroid Build Coastguard Worker  lea                 dstq, [dstq+strideq*2]
858*fb1b10abSAndroid Build Coastguard Worker  inc                lineq
859*fb1b10abSAndroid Build Coastguard Worker  jnz .loop
860*fb1b10abSAndroid Build Coastguard Worker  REP_RET
861