191037db265ecdd914a26e056cf69207b4f50924ehkuang;
291037db265ecdd914a26e056cf69207b4f50924ehkuang;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
391037db265ecdd914a26e056cf69207b4f50924ehkuang;
491037db265ecdd914a26e056cf69207b4f50924ehkuang;  Use of this source code is governed by a BSD-style license
591037db265ecdd914a26e056cf69207b4f50924ehkuang;  that can be found in the LICENSE file in the root of the source
691037db265ecdd914a26e056cf69207b4f50924ehkuang;  tree. An additional intellectual property rights grant can be found
791037db265ecdd914a26e056cf69207b4f50924ehkuang;  in the file PATENTS.  All contributing project authors may
891037db265ecdd914a26e056cf69207b4f50924ehkuang;  be found in the AUTHORS file in the root of the source tree.
991037db265ecdd914a26e056cf69207b4f50924ehkuang;
1091037db265ecdd914a26e056cf69207b4f50924ehkuang
1191037db265ecdd914a26e056cf69207b4f50924ehkuang%include "third_party/x86inc/x86inc.asm"
1291037db265ecdd914a26e056cf69207b4f50924ehkuang
13f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangSECTION_RODATA
14f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
15f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangpb_1: times 16 db 1
165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b01234577: db 0, 1, 2, 3, 4, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0
175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b12345677: db 1, 2, 3, 4, 5, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0
18f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangsh_b23456777: db 2, 3, 4, 5, 6, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0
19f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangsh_b0123456777777777: db 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7
20f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangsh_b1234567777777777: db 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
21f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangsh_b2345677777777777: db 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
22f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangsh_b123456789abcdeff: db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15
23f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangsh_b23456789abcdefff: db 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15
245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b32104567: db 3, 2, 1, 0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0
255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b8091a2b345: db 8, 0, 9, 1, 10, 2, 11, 3, 4, 5, 0, 0, 0, 0, 0, 0
265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b76543210: db 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b65432108: db 6, 5, 4, 3, 2, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0
285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b54321089: db 5, 4, 3, 2, 1, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0
295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b89abcdef: db 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0
305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_bfedcba9876543210: db 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b1233: db 1, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangsh_b2333: db 2, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
33f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
3491037db265ecdd914a26e056cf69207b4f50924ehkuangSECTION .text
3591037db265ecdd914a26e056cf69207b4f50924ehkuang
3691037db265ecdd914a26e056cf69207b4f50924ehkuangINIT_MMX ssse3
3791037db265ecdd914a26e056cf69207b4f50924ehkuangcglobal h_predictor_4x4, 2, 4, 3, dst, stride, line, left
3891037db265ecdd914a26e056cf69207b4f50924ehkuang  movifnidn          leftq, leftmp
3991037db265ecdd914a26e056cf69207b4f50924ehkuang  add                leftq, 4
4091037db265ecdd914a26e056cf69207b4f50924ehkuang  mov                lineq, -2
4191037db265ecdd914a26e056cf69207b4f50924ehkuang  pxor                  m0, m0
4291037db265ecdd914a26e056cf69207b4f50924ehkuang.loop:
4391037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m1, [leftq+lineq*2  ]
4491037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m2, [leftq+lineq*2+1]
4591037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m1, m0
4691037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m2, m0
4791037db265ecdd914a26e056cf69207b4f50924ehkuang  movd      [dstq        ], m1
4891037db265ecdd914a26e056cf69207b4f50924ehkuang  movd      [dstq+strideq], m2
4991037db265ecdd914a26e056cf69207b4f50924ehkuang  lea                 dstq, [dstq+strideq*2]
5091037db265ecdd914a26e056cf69207b4f50924ehkuang  inc                lineq
5191037db265ecdd914a26e056cf69207b4f50924ehkuang  jnz .loop
5291037db265ecdd914a26e056cf69207b4f50924ehkuang  REP_RET
5391037db265ecdd914a26e056cf69207b4f50924ehkuang
5491037db265ecdd914a26e056cf69207b4f50924ehkuangINIT_MMX ssse3
5591037db265ecdd914a26e056cf69207b4f50924ehkuangcglobal h_predictor_8x8, 2, 4, 3, dst, stride, line, left
5691037db265ecdd914a26e056cf69207b4f50924ehkuang  movifnidn          leftq, leftmp
5791037db265ecdd914a26e056cf69207b4f50924ehkuang  add                leftq, 8
5891037db265ecdd914a26e056cf69207b4f50924ehkuang  mov                lineq, -4
5991037db265ecdd914a26e056cf69207b4f50924ehkuang  pxor                  m0, m0
6091037db265ecdd914a26e056cf69207b4f50924ehkuang.loop:
6191037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m1, [leftq+lineq*2  ]
6291037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m2, [leftq+lineq*2+1]
6391037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m1, m0
6491037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m2, m0
6591037db265ecdd914a26e056cf69207b4f50924ehkuang  movq      [dstq        ], m1
6691037db265ecdd914a26e056cf69207b4f50924ehkuang  movq      [dstq+strideq], m2
6791037db265ecdd914a26e056cf69207b4f50924ehkuang  lea                 dstq, [dstq+strideq*2]
6891037db265ecdd914a26e056cf69207b4f50924ehkuang  inc                lineq
6991037db265ecdd914a26e056cf69207b4f50924ehkuang  jnz .loop
7091037db265ecdd914a26e056cf69207b4f50924ehkuang  REP_RET
7191037db265ecdd914a26e056cf69207b4f50924ehkuang
7291037db265ecdd914a26e056cf69207b4f50924ehkuangINIT_XMM ssse3
7391037db265ecdd914a26e056cf69207b4f50924ehkuangcglobal h_predictor_16x16, 2, 4, 3, dst, stride, line, left
7491037db265ecdd914a26e056cf69207b4f50924ehkuang  movifnidn          leftq, leftmp
7591037db265ecdd914a26e056cf69207b4f50924ehkuang  add                leftq, 16
7691037db265ecdd914a26e056cf69207b4f50924ehkuang  mov                lineq, -8
7791037db265ecdd914a26e056cf69207b4f50924ehkuang  pxor                  m0, m0
7891037db265ecdd914a26e056cf69207b4f50924ehkuang.loop:
7991037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m1, [leftq+lineq*2  ]
8091037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m2, [leftq+lineq*2+1]
8191037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m1, m0
8291037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m2, m0
8391037db265ecdd914a26e056cf69207b4f50924ehkuang  mova      [dstq        ], m1
8491037db265ecdd914a26e056cf69207b4f50924ehkuang  mova      [dstq+strideq], m2
8591037db265ecdd914a26e056cf69207b4f50924ehkuang  lea                 dstq, [dstq+strideq*2]
8691037db265ecdd914a26e056cf69207b4f50924ehkuang  inc                lineq
8791037db265ecdd914a26e056cf69207b4f50924ehkuang  jnz .loop
8891037db265ecdd914a26e056cf69207b4f50924ehkuang  REP_RET
8991037db265ecdd914a26e056cf69207b4f50924ehkuang
9091037db265ecdd914a26e056cf69207b4f50924ehkuangINIT_XMM ssse3
9191037db265ecdd914a26e056cf69207b4f50924ehkuangcglobal h_predictor_32x32, 2, 4, 3, dst, stride, line, left
9291037db265ecdd914a26e056cf69207b4f50924ehkuang  movifnidn          leftq, leftmp
9391037db265ecdd914a26e056cf69207b4f50924ehkuang  add                leftq, 32
9491037db265ecdd914a26e056cf69207b4f50924ehkuang  mov                lineq, -16
9591037db265ecdd914a26e056cf69207b4f50924ehkuang  pxor                  m0, m0
9691037db265ecdd914a26e056cf69207b4f50924ehkuang.loop:
9791037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m1, [leftq+lineq*2  ]
9891037db265ecdd914a26e056cf69207b4f50924ehkuang  movd                  m2, [leftq+lineq*2+1]
9991037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m1, m0
10091037db265ecdd914a26e056cf69207b4f50924ehkuang  pshufb                m2, m0
10191037db265ecdd914a26e056cf69207b4f50924ehkuang  mova   [dstq           ], m1
10291037db265ecdd914a26e056cf69207b4f50924ehkuang  mova   [dstq        +16], m1
10391037db265ecdd914a26e056cf69207b4f50924ehkuang  mova   [dstq+strideq   ], m2
10491037db265ecdd914a26e056cf69207b4f50924ehkuang  mova   [dstq+strideq+16], m2
10591037db265ecdd914a26e056cf69207b4f50924ehkuang  lea                 dstq, [dstq+strideq*2]
10691037db265ecdd914a26e056cf69207b4f50924ehkuang  inc                lineq
10791037db265ecdd914a26e056cf69207b4f50924ehkuang  jnz .loop
10891037db265ecdd914a26e056cf69207b4f50924ehkuang  REP_RET
109f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
110f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangINIT_MMX ssse3
1115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d45_predictor_4x4, 3, 4, 4, dst, stride, above, goffset
1125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
1135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
114f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq                m0, [aboveq]
1155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m0, [GLOBAL(sh_b23456777)]
1165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m0, [GLOBAL(sh_b01234577)]
1175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, [GLOBAL(sh_b12345677)]
118f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb               m3, m2, m1
119f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pxor                m2, m1
1205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pand                m2, [GLOBAL(pb_1)]
121f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psubb               m3, m2
122f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb               m0, m3
123f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
124f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  ; store 4 lines
125f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movd    [dstq        ], m0
126f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psrlq               m0, 8
127f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movd    [dstq+strideq], m0
128f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea               dstq, [dstq+strideq*2]
129f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psrlq               m0, 8
130f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movd    [dstq        ], m0
131f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psrlq               m0, 8
132f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movd    [dstq+strideq], m0
1335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
1345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
135f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  RET
136f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
137f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangINIT_MMX ssse3
1385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d45_predictor_8x8, 3, 4, 4, dst, stride, above, goffset
1395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
1405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
141f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq                m0, [aboveq]
1425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m1, [GLOBAL(sh_b12345677)]
1435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3
144f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea           stride3q, [strideq*3]
1455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m0, [GLOBAL(sh_b23456777)]
146f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb               m3, m2, m0
147f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pxor                m2, m0
148f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
1495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pand                m2, [GLOBAL(pb_1)]
150f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psubb               m3, m2
151f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb               m0, m3
152f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
153f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  ; store 4 lines
154f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq          ], m0
155f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
156f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq+strideq  ], m0
157f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
158f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq+strideq*2], m0
159f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
160f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq+stride3q ], m0
161f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
162f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea               dstq, [dstq+strideq*4]
163f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
164f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  ; store next 4 lines
165f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq          ], m0
166f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
167f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq+strideq  ], m0
168f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
169f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq+strideq*2], m0
170f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb              m0, m1
171f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movq  [dstq+stride3q ], m0
1725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
1735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
174f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  RET
175f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
176f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangINIT_XMM ssse3
1775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d45_predictor_16x16, 3, 6, 4, dst, stride, above, dst8, line, goffset
1785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
1795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
180f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova                   m0, [aboveq]
181f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  DEFINE_ARGS dst, stride, stride3, dst8, line
182f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea              stride3q, [strideq*3]
183f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                 dst8q, [dstq+strideq*8]
1845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                   m1, [GLOBAL(sh_b123456789abcdeff)]
1855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m2, m0, [GLOBAL(sh_b23456789abcdefff)]
186f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb                  m3, m2, m0
187f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pxor                   m2, m0
188f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                 m0, m1
1895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pand                   m2, [GLOBAL(pb_1)]
190f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psubb                  m3, m2
191f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb                  m0, m3
192f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
193f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  ; first 4 lines and first half of 3rd 4 lines
194f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mov                 lined, 2
195f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang.loop:
196f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova   [dstq            ], m0
197f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dst8q           ], m0
198f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                 m0, m1
199f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova   [dstq +strideq   ], m0
200f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dst8q+strideq   ], m0
201f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                 m0, m1
202f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova   [dstq +strideq*2 ], m0
203f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dst8q+strideq*2 ], m0
204f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                 m0, m1
205f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova   [dstq +stride3q  ], m0
206f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dst8q+stride3q  ], m0
207f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                 m0, m1
208f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                  dstq, [dstq +strideq*4]
209f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                 dst8q, [dst8q+strideq*4]
210f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  dec                 lined
211f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  jnz .loop
212f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
213f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  ; bottom-right 8x8 block
214f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq          +8], m0
215f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq+strideq  +8], m0
216f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq+strideq*2+8], m0
217f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq+stride3q +8], m0
218f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                  dstq, [dstq+strideq*4]
219f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq          +8], m0
220f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq+strideq  +8], m0
221f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq+strideq*2+8], m0
222f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  movhps [dstq+stride3q +8], m0
2235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
2245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
225f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  RET
226f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
227f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangINIT_XMM ssse3
2285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d45_predictor_32x32, 3, 6, 7, dst, stride, above, dst16, line, goffset
2295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
2305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
231f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova                   m0, [aboveq]
232f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova                   m4, [aboveq+16]
233f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  DEFINE_ARGS dst, stride, stride3, dst16, line
234f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea              stride3q, [strideq*3]
235f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                dst16q, [dstq  +strideq*8]
236f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                dst16q, [dst16q+strideq*8]
2375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                   m1, [GLOBAL(sh_b123456789abcdeff)]
2385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m2, m4, [GLOBAL(sh_b23456789abcdefff)]
239f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb                  m3, m2, m4
240f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pxor                   m2, m4
241f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  palignr                m5, m4, m0, 1
242f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  palignr                m6, m4, m0, 2
243f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                 m4, m1
2445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pand                   m2, [GLOBAL(pb_1)]
245f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psubb                  m3, m2
246f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb                  m4, m3
247f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb                  m3, m0, m6
248f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pxor                   m0, m6
2495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pand                   m0, [GLOBAL(pb_1)]
250f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  psubb                  m3, m0
251f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pavgb                  m5, m3
252f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
253f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  ; write 4x4 lines (and the first half of the second 4x4 lines)
254f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mov                  lined, 4
255f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang.loop:
256f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq               ], m5
257f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq            +16], m4
258f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dst16q             ], m4
259f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  palignr                 m3, m4, m5, 1
260f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                  m4, m1
261f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq     ], m3
262f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq  +16], m4
263f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dst16q+strideq     ], m4
264f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  palignr                 m5, m4, m3, 1
265f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                  m4, m1
266f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq*2   ], m5
267f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq*2+16], m4
268f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dst16q+strideq*2   ], m4
269f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  palignr                 m3, m4, m5, 1
270f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                  m4, m1
271f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +stride3q    ], m3
272f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +stride3q +16], m4
273f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dst16q+stride3q    ], m4
274f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  palignr                 m5, m4, m3, 1
275f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  pshufb                  m4, m1
276f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                  dstq, [dstq  +strideq*4]
277f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                dst16q, [dst16q+strideq*4]
278f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  dec                 lined
279f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  jnz .loop
280f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
281f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  ; write second half of second 4x4 lines
282f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq            +16], m4
283f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq  +16], m4
284f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq*2+16], m4
285f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +stride3q +16], m4
286f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                  dstq, [dstq  +strideq*4]
287f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq            +16], m4
288f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq  +16], m4
289f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq*2+16], m4
290f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +stride3q +16], m4
291f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                  dstq, [dstq  +strideq*4]
292f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq            +16], m4
293f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq  +16], m4
294f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq*2+16], m4
295f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +stride3q +16], m4
296f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  lea                  dstq, [dstq  +strideq*4]
297f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq            +16], m4
298f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq  +16], m4
299f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +strideq*2+16], m4
300f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  mova [dstq  +stride3q +16], m4
3015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
3035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
3045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; ------------------------------------------
3065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; input: x, y, z, result
3075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang;
3085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; trick from pascal
3095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; (x+2y+z+2)>>2 can be calculated as:
3105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; result = avg(x,z)
3115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; result -= xor(x,z) & 1
3125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; result = avg(result,y)
3135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang; ------------------------------------------
3145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang%macro X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 4
3155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               %4, %1, %3
3165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pxor                %3, %1
3175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pand                %3, [GLOBAL(pb_1)]
3185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psubb               %4, %3
3195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               %4, %2
3205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang%endmacro
3215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
3235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d63_predictor_4x4, 3, 4, 5, dst, stride, above, goffset
3245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
3255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq                m3, [aboveq]
3275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m3, [GLOBAL(sh_b23456777)]
3285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m3, [GLOBAL(sh_b12345677)]
3295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m3, m2, m1, m4
3315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m3, m2
3325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; store 4 lines
3345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq        ], m3
3355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq+strideq], m4
3365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*2]
3375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m3, 1
3385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m4, 1
3395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq        ], m3
3405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq+strideq], m4
3415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
3425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
3435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
3455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d63_predictor_8x8, 3, 4, 5, dst, stride, above, goffset
3465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
3475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq                m3, [aboveq]
3495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3
3505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
3515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m3, [GLOBAL(sh_b2345677777777777)]
3525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, m3, [GLOBAL(sh_b0123456777777777)]
3535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m3, [GLOBAL(sh_b1234567777777777)]
3545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m3, [GLOBAL(sh_b0123456777777777)]
3555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m2, m1, m4
3575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m3, m2
3585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; store 4 lines
3605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq    [dstq        ], m3
3615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq    [dstq+strideq], m4
3625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m3, 1
3635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m4, 1
3645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq*2], m3
3655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+stride3q ], m4
3665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
3675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m3, 1
3685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m4, 1
3695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; store 4 lines
3715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq    [dstq        ], m3
3725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq    [dstq+strideq], m4
3735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m3, 1
3745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m4, 1
3755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq*2], m3
3765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+stride3q ], m4
3775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
3785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
3795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
3815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d63_predictor_16x16, 3, 5, 5, dst, stride, above, line, goffset
3825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
3835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m0, [aboveq]
3855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3, line
3865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
3875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m1, [GLOBAL(sh_b123456789abcdeff)]
3885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m0, [GLOBAL(sh_b23456789abcdefff)]
3895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m3, m0, m1
3905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m3, m2, m4
3925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m0, m3
3935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
3945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mov              lined, 4
3955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang.loop:
3965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m0
3975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m4
3985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, m1
3995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, m1
4005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m0
4015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m4
4025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, m1
4035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, m1
4045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
4055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  dec              lined
4065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  jnz .loop
4075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
4085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  REP_RET
4095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
4115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d63_predictor_32x32, 3, 5, 8, dst, stride, above, line, goffset
4125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
4135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                   m0, [aboveq]
4155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                   m7, [aboveq+16]
4165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3, line
4175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                   m1, [GLOBAL(sh_b123456789abcdeff)]
4185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea              stride3q, [strideq*3]
4195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m2, m7, [GLOBAL(sh_b23456789abcdefff)]
4205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m3, m7, m1
4215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m7, m3, m2, m4
4235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m6, m7, m0, 1
4245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m7, m0, 2
4255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb                  m7, m3
4265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m6, m5, m2
4285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb                  m0, m6
4295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mov                 lined, 8
4315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang.loop:
4325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m0
4335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          +16], m7
4345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m2
4355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  +16], m4
4365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m7, m0, 1
4375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m4, m2, 1
4385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m7, m1
4395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m4, m1
4405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m3
4425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m7
4435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m5
4445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q +16], m4
4455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m7, m3, 1
4465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m2, m4, m5, 1
4475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m7, m1
4485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m4, m1
4495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dstq, [dstq+strideq*4]
4505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  dec                 lined
4515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  jnz .loop
4525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
4535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  REP_RET
4545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
4565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d153_predictor_4x4, 4, 5, 4, dst, stride, above, left, goffset
4575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
4585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd                m0, [leftq]               ; l1, l2, l3, l4
4595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd                m1, [aboveq-1]            ; tl, t1, t2, t3
4605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpckldq           m0, m1                    ; l1, l2, l3, l4, tl, t1, t2, t3
4615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, [GLOBAL(sh_b32104567)]; l4, l3, l2, l1, tl, t1, t2, t3
4625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m1, m0, 1                 ; l3, l2, l1, tl, t1, t2, t3
4635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m2, m0, 2                 ; l2, l1, tl, t1, t2, t3
4645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; comments below are for a predictor like this
4655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A1 B1 C1 D1
4665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A2 B2 A1 B1
4675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A3 B3 A2 B2
4685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A4 B4 A3 B3
4695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m1, m2, m3  ; 3-tap avg B4 B3 B2 B1 C1 D1
4705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m1, m0                    ; 2-tap avg A4 A3 A2 A1
4715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklqdq          m3, m1                    ; B4 B3 B2 B1 C1 D1 x x A4 A3 A2 A1 ..
4735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3
4755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
4765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m3, [GLOBAL(sh_b8091a2b345)] ; A4 B4 A3 B3 A2 B2 A1 B1 C1 D1 ..
4775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd  [dstq+stride3q ], m3
4785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m3, 2                     ; A3 B3 A2 B2 A1 B1 C1 D1 ..
4795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd  [dstq+strideq*2], m3
4805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m3, 2                     ; A2 B2 A1 B1 C1 D1 ..
4815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd  [dstq+strideq  ], m3
4825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m3, 2                     ; A1 B1 C1 D1 ..
4835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd  [dstq          ], m3
4845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
4855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
4865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
4875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
4885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d153_predictor_8x8, 4, 5, 8, dst, stride, above, left, goffset
4895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
4905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq                m0, [leftq]                     ; [0- 7] l1-8 [byte]
4915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movhps              m0, [aboveq-1]                  ; [8-15] tl, t1-7 [byte]
4925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m0, [GLOBAL(sh_b76543210)]  ; l8-1 [word]
4935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m0, [GLOBAL(sh_b65432108)]  ; l7-1,tl [word]
4945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m3, m0, [GLOBAL(sh_b54321089)]  ; l6-1,tl,t1 [word]
4955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, [GLOBAL(sh_b89abcdef)]      ; tl,t1-7 [word]
4965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m4, m0, 1                       ; t1-7 [word]
4975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m5, m0, 2                       ; t2-7 [word]
4985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; comments below are for a predictor like this
4995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A1 B1 C1 D1 E1 F1 G1 H1
5005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A2 B2 A1 B1 C1 D1 E1 F1
5015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A3 B3 A2 B2 A1 B1 C1 D1
5025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A4 B4 A3 B3 A2 B2 A1 B1
5035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A5 B5 A4 B4 A3 B3 A2 B2
5045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A6 B6 A5 B5 A4 B4 A3 B3
5055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A7 B7 A6 B6 A5 B5 A4 B4
5065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A8 B8 A7 B7 A6 B6 A5 B5
5075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m6, m1, m2                ; 2-tap avg A8-A1
5085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m4, m5, m7  ; 3-tap avg C-H1
5105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m1, m2, m3, m0  ; 3-tap avg B8-1
5125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw           m6, m0                    ; A-B8, A-B7 ... A-B2, A-B1
5145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3
5165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
5175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movhps [dstq+stride3q], m6                    ; A-B4, A-B3, A-B2, A-B1
5195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m7, m6, 10            ; A-B3, A-B2, A-B1, C-H1
5205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq*2], m0
5215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2                     ; A-B2, A-B1, C-H1
5225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq  ], m0
5235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2                     ; A-H1
5245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq          ], m0
5255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
5265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+stride3q ], m6                    ; A-B8, A-B7, A-B6, A-B5
5275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m6, 2                     ; A-B7, A-B6, A-B5, A-B4
5285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq*2], m6
5295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m6, 2                     ; A-B6, A-B5, A-B4, A-B3
5305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq  ], m6
5315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m6, 2                     ; A-B5, A-B4, A-B3, A-B2
5325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq          ], m6
5335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
5345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
5355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
5375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d153_predictor_16x16, 4, 5, 8, dst, stride, above, left, goffset
5385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
5395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m0, [leftq]
5405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movu                m7, [aboveq-1]
5415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; comments below are for a predictor like this
5425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O1 P1
5435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A2 B2 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1
5445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A3 B3 A2 B2 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1
5455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A4 B4 A3 B3 A2 B2 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1
5465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A5 B5 A4 B4 A3 B3 A2 B2 A1 B1 C1 D1 E1 F1 G1 H1
5475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A6 B6 A5 B5 A4 B4 A3 B3 A2 B2 A1 B1 C1 D1 E1 F1
5485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A7 B7 A6 B6 A5 B5 A4 B4 A3 B3 A2 B2 A1 B1 C1 D1
5495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A8 B8 A7 B7 A6 B6 A5 B5 A4 B4 A3 B3 A2 B2 A1 B1
5505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; A9 B9 A8 B8 A7 B7 A6 B6 A5 B5 A4 B4 A3 B3 A2 B2
5515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; Aa Ba A9 B9 A8 B8 A7 B7 A6 B6 A5 B5 A4 B4 A3 B3
5525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; Ab Bb Aa Ba A9 B9 A8 B8 A7 B7 A6 B6 A5 B5 A4 B4
5535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; Ac Bc Ab Bb Aa Ba A9 B9 A8 B8 A7 B7 A6 B6 A5 B5
5545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; Ad Bd Ac Bc Ab Bb Aa Ba A9 B9 A8 B8 A7 B7 A6 B6
5555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; Ae Be Ad Bd Ac Bc Ab Bb Aa Ba A9 B9 A8 B8 A7 B7
5565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; Af Bf Ae Be Ad Bd Ac Bc Ab Bb Aa Ba A9 B9 A8 B8
5575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; Ag Bg Af Bf Ae Be Ad Bd Ac Bc Ab Bb Aa Ba A9 B9
5585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m6, m7, [GLOBAL(sh_bfedcba9876543210)]
5595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m5, m0, m6, 15
5605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m0, m6, 14
5615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m5, m3, m4          ; 3-tap avg B3-Bg
5635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m0, [GLOBAL(sh_b123456789abcdeff)]
5645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m5, m0                            ; A1 - Ag
5655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw           m0, m4, m5                        ; A-B8 ... A-B1
5675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpckhbw           m4, m5                            ; A-B9 ... A-Bg
5685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m3, m7, [GLOBAL(sh_b123456789abcdeff)]
5705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m5, m7, [GLOBAL(sh_b23456789abcdefff)]
5715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m7, m3, m5, m1          ; 3-tap avg C1-P1
5735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m6, m0, [GLOBAL(sh_bfedcba9876543210)]
5755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3
5765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
5775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m1, m6, 14
5785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m2
5795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m1, m6, 12
5805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m2
5815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m1, m6, 10
5825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m2
5835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m1, m6, 8
5845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m2
5855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
5865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m1, m6, 6
5875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m2
5885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m1, m6, 4
5895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m2
5905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m1, m6, 2
5915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m2
5925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, [GLOBAL(sh_bfedcba9876543210)]
5935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m6
5945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
5955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
5965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m6, m4, 14
5975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m2
5985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m6, m4, 12
5995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m2
6005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m6, m4, 10
6015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m2
6025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m6, m4, 8
6035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m2
6045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
6055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m6, m4, 6
6065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m2
6075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m6, m4, 4
6085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m2
6095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m2, m6, m4, 2
6105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m2
6115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m4
6125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
6135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
6145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
6165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d153_predictor_32x32, 4, 5, 8, dst, stride, above, left, goffset
6175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
6185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                  m0, [leftq]
6195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movu                  m7, [aboveq-1]
6205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movu                  m1, [aboveq+15]
6215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                m4, m1, [GLOBAL(sh_b123456789abcdeff)]
6235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                m6, m1, [GLOBAL(sh_b23456789abcdefff)]
6245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m1, m4, m6, m2          ; 3-tap avg above [high]
6265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m3, m1, m7, 1
6285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m5, m1, m7, 2
6295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m7, m3, m5, m1          ; 3-tap avg above [low]
6315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                m7, [GLOBAL(sh_bfedcba9876543210)]
6335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m5, m0, m7, 15
6345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m3, m0, m7, 14
6355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m5, m3, m4          ; 3-tap avg B3-Bg
6375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb                 m5, m0                            ; A1 - Ag
6385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw             m6, m4, m5                        ; A-B8 ... A-B1
6395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpckhbw             m4, m5                            ; A-B9 ... A-Bg
6405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                m6, [GLOBAL(sh_bfedcba9876543210)]
6415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                m4, [GLOBAL(sh_bfedcba9876543210)]
6425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3, left, line
6445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea             stride3q, [strideq*3]
6455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m5, m2, m1, 14
6475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m7, m1, m6, 14
6485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq            ], m7
6495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16         ], m5
6505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m5, m2, m1, 12
6515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr               m7, m1, m6, 12
6525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq    ], m7
6535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16 ], m5
6545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m2, m1, 10
6555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m1, m6, 10
6565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m7
6575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m5
6585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m2, m1, 8
6595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m1, m6, 8
6605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m7
6615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m5
6625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dstq, [dstq+strideq*4]
6635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m2, m1, 6
6645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m1, m6, 6
6655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m7
6665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16          ], m5
6675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m2, m1, 4
6685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m1, m6, 4
6695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m7
6705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16  ], m5
6715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m2, m1, 2
6725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m1, m6, 2
6735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m7
6745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m5
6755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m6
6765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m1
6775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dstq, [dstq+strideq*4]
6785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
6795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m1, m6, 14
6805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m6, m4, 14
6815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m3
6825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16          ], m5
6835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m1, m6, 12
6845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m6, m4, 12
6855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m3
6865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16  ], m5
6875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m1, m6, 10
6885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m6, m4, 10
6895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m3
6905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m5
6915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m1, m6, 8
6925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m6, m4, 8
6935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m3
6945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m5
6955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dstq, [dstq+strideq*4]
6965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m1, m6, 6
6975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m6, m4, 6
6985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m3
6995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16          ], m5
7005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m1, m6, 4
7015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m6, m4, 4
7025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m3
7035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16  ], m5
7045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m1, m6, 2
7055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m3, m6, m4, 2
7065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m3
7075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m5
7085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m4
7095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m6
7105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
7115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
7125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                   m7, [leftq]
7135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                   m3, [leftq+16]
7145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m5, m3, m7, 15
7155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m7, 14
7165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
7175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m3, m5, m0, m2          ; 3-tap avg Bh -
7185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb                  m5, m3                            ; Ah -
7195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw              m3, m2, m5                        ; A-B8 ... A-B1
7205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpckhbw              m2, m5                            ; A-B9 ... A-Bg
7215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m3, [GLOBAL(sh_bfedcba9876543210)]
7225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb                 m2, [GLOBAL(sh_bfedcba9876543210)]
7235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
7245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m6, m4, 14
7255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m4, m3, 14
7265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m0
7275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16          ], m7
7285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m6, m4, 12
7295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m4, m3, 12
7305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m0
7315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16  ], m7
7325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m6, m4, 10
7335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m4, m3, 10
7345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m0
7355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m7
7365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m6, m4, 8
7375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m4, m3, 8
7385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m0
7395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m7
7405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dstq, [dstq+strideq*4]
7415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m6, m4, 6
7425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m4, m3, 6
7435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m0
7445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16          ], m7
7455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m6, m4, 4
7465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m4, m3, 4
7475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m0
7485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16  ], m7
7495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m6, m4, 2
7505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m4, m3, 2
7515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m0
7525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m7
7535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m3
7545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m4
7555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dstq, [dstq+strideq*4]
7565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
7575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m4, m3, 14
7585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m2, 14
7595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m0
7605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16          ], m7
7615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m4, m3, 12
7625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m2, 12
7635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m0
7645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16  ], m7
7655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m4, m3, 10
7665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m2, 10
7675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m0
7685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m7
7695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m4, m3, 8
7705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m2, 8
7715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m0
7725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m7
7735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dstq, [dstq+strideq*4]
7745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m4, m3, 6
7755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m2, 6
7765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq             ], m0
7775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+16          ], m7
7785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m4, m3, 4
7795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m2, 4
7805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq     ], m0
7815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq+16  ], m7
7825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m7, m4, m3, 2
7835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr                m0, m3, m2, 2
7845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2   ], m0
7855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2+16], m7
7865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q    ], m2
7875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q+16 ], m3
7885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
7895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
7905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
7915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
7925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_MMX ssse3
7935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d207_predictor_4x4, 4, 5, 4, dst, stride, unused, left, goffset
7945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
7955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd                m0, [leftq]                ; abcd [byte]
7965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m0, [GLOBAL(sh_b1233)] ; bcdd [byte]
7975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m3, m0, [GLOBAL(sh_b2333)] ; cddd
7985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
7995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m1, m3, m2
8005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m1, m0             ; ab, bc, cd, d [byte]
8015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw           m1, m2             ; ab, a2bc, bc, b2cd, cd, c3d, d, d
8035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq        ], m1
8045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrlq               m1, 16             ; bc, b2cd, cd, c3d, d, d
8055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq+strideq], m1
8065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*2]
8075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrlq               m1, 16             ; cd, c3d, d, d
8085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq        ], m1
8095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufw              m1, m1, q1111      ; d, d, d, d
8105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movd    [dstq+strideq], m1
8115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
8125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
8135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
8155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d207_predictor_8x8, 4, 5, 4, dst, stride, stride3, left, goffset
8165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
8175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq                m3, [leftq]            ; abcdefgh [byte]
8185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
8195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m3, [GLOBAL(sh_b2345677777777777)]
8215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, m3, [GLOBAL(sh_b0123456777777777)]
8225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m3, [GLOBAL(sh_b1234567777777777)]
8235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m2, m1, m3
8255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m0, m2
8265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw           m0, m3        ; interleaved output
8275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq          ], m0
8295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2
8305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq  ], m0
8315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2
8325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq*2], m0
8335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2
8345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+stride3q ], m0
8355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
8365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufhw             m0, m0, q0000 ; de, d2ef, ef, e2fg, fg, f2gh, gh, g3h, 8xh
8375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2
8385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq          ], m0
8395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2
8405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq  ], m0
8415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2
8425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+strideq*2], m0
8435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  psrldq              m0, 2
8445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  movq  [dstq+stride3q ], m0
8455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
8465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RET
8475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
8495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d207_predictor_16x16, 4, 5, 5, dst, stride, stride3, left, goffset
8505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
8515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
8525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m0, [leftq]            ; abcdefghijklmnop [byte]
8535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m1, m0, [GLOBAL(sh_b123456789abcdeff)] ; bcdefghijklmnopp
8545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m2, m0, [GLOBAL(sh_b23456789abcdefff)]
8555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m0, m1, m2, m3
8575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m1, m0                 ; ab, bc, cd .. no, op, pp [byte]
8585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpckhbw           m4, m1, m3    ; interleaved input
8605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw           m1, m3        ; interleaved output
8615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m1
8625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m4, m1, 2
8635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m3
8645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m4, m1, 4
8655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m3
8665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m4, m1, 6
8675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m3
8685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
8695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m4, m1, 8
8705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m3
8715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m4, m1, 10
8725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m3
8735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m4, m1, 12
8745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m3
8755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m3, m4, m1, 14
8765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m3
8775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3, line
8785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mov              lined, 2
8795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m0, [GLOBAL(sh_b23456789abcdefff)]
8805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang.loop:
8815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
8825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq          ], m4
8835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, m0
8845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq  ], m4
8855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, m0
8865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+strideq*2], m4
8875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, m0
8885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq+stride3q ], m4
8895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, m0
8905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  dec              lined
8915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  jnz .loop
8925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
8935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  REP_RET
8945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
8955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangINIT_XMM ssse3
8965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangcglobal d207_predictor_32x32, 4, 5, 8, dst, stride, stride3, left, goffset
8975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  GET_GOT     goffsetq
8985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea           stride3q, [strideq*3]
8995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m1, [leftq]              ;  0-15 [byte]
9005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m2, [leftq+16]           ; 16-31 [byte]
9015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m0, m2, [GLOBAL(sh_b23456789abcdefff)]
9025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m4, m2, [GLOBAL(sh_b123456789abcdeff)]
9035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
9045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m2, m4, m0, m3
9055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m6, m2, m1, 1
9065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m5, m2, m1, 2
9075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb               m2, m4         ; high 16px even lines
9085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
9095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  X_PLUS_2Y_PLUS_Z_PLUS_2_RSH_2 m1, m6, m5, m0
9105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pavgb                   m1, m6         ; low 16px even lines
9115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
9125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpckhbw               m6, m1, m0               ; interleaved output 2
9135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw               m1, m0                   ; interleaved output 1
9145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
9155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpckhbw               m7, m2, m3               ; interleaved output 4
9165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  punpcklbw               m2, m3                   ; interleaved output 3
9175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
9185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; output 1st 8 lines (and half of 2nd 8 lines)
9195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  DEFINE_ARGS dst, stride, stride3, dst8
9205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea                  dst8q, [dstq+strideq*8]
9215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq              ], m1
9225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m6
9235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q             ], m6
9245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m6, m1, 2
9255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m2, m6, 2
9265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq     ], m0
9275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m4
9285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq     ], m4
9295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m6, m1, 4
9305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m2, m6, 4
9315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2   ], m0
9325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m4
9335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq*2   ], m4
9345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m6, m1, 6
9355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m2, m6, 6
9365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q    ], m0
9375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m4
9385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+stride3q    ], m4
9395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq +strideq*4]
9405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea              dst8q, [dst8q+strideq*4]
9415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m6, m1, 8
9425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m2, m6, 8
9435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq              ], m0
9445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m4
9455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q             ], m4
9465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m6, m1, 10
9475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m2, m6, 10
9485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq     ], m0
9495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m4
9505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq     ], m4
9515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m6, m1, 12
9525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m2, m6, 12
9535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2   ], m0
9545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m4
9555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq*2   ], m4
9565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m0, m6, m1, 14
9575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m2, m6, 14
9585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q    ], m0
9595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m4
9605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+stride3q    ], m4
9615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
9625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea              dst8q, [dst8q+strideq*4]
9635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
9645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; output 2nd half of 2nd 8 lines and half of 3rd 8 lines
9655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m2
9665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q             ], m2
9675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m7, m2, 2
9685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m4
9695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq     ], m4
9705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m7, m2, 4
9715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m4
9725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq*2   ], m4
9735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m7, m2, 6
9745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m4
9755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+stride3q    ], m4
9765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
9775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea              dst8q, [dst8q+strideq*4]
9785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m7, m2, 8
9795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m4
9805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q             ], m4
9815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m7, m2, 10
9825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m4
9835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq     ], m4
9845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m7, m2, 12
9855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m4
9865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq*2   ], m4
9875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  palignr             m4, m7, m2, 14
9885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m4
9895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+stride3q    ], m4
9905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
9915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea              dst8q, [dst8q+strideq*4]
9925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
9935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; output 2nd half of 3rd 8 lines and half of 4th 8 lines
9945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova                m0, [GLOBAL(sh_b23456789abcdefff)]
9955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m7
9965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q             ], m7
9975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
9985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m7
9995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq     ], m7
10005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
10015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m7
10025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq*2   ], m7
10035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
10045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m7
10055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+stride3q    ], m7
10065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
10075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
10085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea              dst8q, [dst8q+strideq*4]
10095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m7
10105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q             ], m7
10115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
10125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m7
10135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq     ], m7
10145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
10155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m7
10165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+strideq*2   ], m7
10175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
10185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m7
10195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dst8q+stride3q    ], m7
10205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pshufb              m7, m0
10215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
10225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
10235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; output last half of 4th 8 lines
10245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m7
10255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m7
10265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m7
10275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m7
10285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  lea               dstq, [dstq+strideq*4]
10295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq           +16], m7
10305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq  +16], m7
10315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +strideq*2+16], m7
10325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  mova  [dstq +stride3q +16], m7
10335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang
10345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  ; done!
10355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  RESTORE_GOT
1036f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  RET
1037