1;*****************************************************************************
2;* Copyright (C) 2013-2020 MulticoreWare, Inc
3;*
4;* Authors: Min Chen <chenm003@163.com> <min.chen@multicorewareinc.com>
5;*          Praveen Tiwari <praveen@multicorewareinc.com>
6;*
7;* This program is free software; you can redistribute it and/or modify
8;* it under the terms of the GNU General Public License as published by
9;* the Free Software Foundation; either version 2 of the License, or
10;* (at your option) any later version.
11;*
12;* This program is distributed in the hope that it will be useful,
13;* but WITHOUT ANY WARRANTY; without even the implied warranty of
14;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15;* GNU General Public License for more details.
16;*
17;* You should have received a copy of the GNU General Public License
18;* along with this program; if not, write to the Free Software
19;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
20;*
21;* This program is also available under a commercial proprietary license.
22;* For more information, contact us at license @ x265.com.
23;*****************************************************************************/
24
25%include "x86inc.asm"
26%include "x86util.asm"
27
28SECTION_RODATA 32
29
30const allAng4_shuf_mode2,       db  1,  2,  3,  4,  2,  3,  4,  5,  3,  4,  5,  6,  4,  5,  6,  7,  1,  2,  3,  4,  2,  3,  4,  5,  3,  4,  5,  6,  4,  5,  6,  7
31const allAng4_shuf_mode3_4,     db  0,  1,  1,  2,  2,  3,  3,  4,  1,  2,  2,  3,  3,  4,  4,  5,  0,  1,  1,  2,  2,  3,  3,  4,  1,  2,  2,  3,  3,  4,  4,  5
32                                db  2,  3,  3,  4,  4,  5,  5,  6,  3,  4,  4,  5,  5,  6,  6,  7,  1,  2,  2,  3,  3,  4,  4,  5,  2,  3,  3,  4,  4,  5,  5,  6
33const allAng4_shuf_mode5_6,     db  0,  1,  1,  2,  2,  3,  3,  4,  1,  2,  2,  3,  3,  4,  4,  5,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4
34                                db  1,  2,  2,  3,  3,  4,  4,  5,  2,  3,  3,  4,  4,  5,  5,  6,  1,  2,  2,  3,  3,  4,  4,  5,  1,  2,  2,  3,  3,  4,  4,  5
35const allAng4_shuf_mode7_8,     db  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4
36                                db  0,  1,  1,  2,  2,  3,  3,  4,  1,  2,  2,  3,  3,  4,  4,  5,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4
37const allAng4_shuf_mode10,      db  0,  1,  2,  3,  0,  1,  2,  3,  0,  1,  2,  3,  0,  1,  2,  3,  0,  1,  2,  3,  0,  1,  2,  3,  0,  1,  2,  3,  0,  1,  2,  3
38const allAng4_shuf_mode11_12,   db  0,  9,  9, 10, 10, 11, 11, 12,  0,  9,  9, 10, 10, 11, 11, 12,  0,  9,  9, 10, 10, 11, 11, 12,  0,  9,  9, 10, 10, 11, 11, 12
39const allAng4_shuf_mode13_14,   db  0,  9,  9, 10, 10, 11, 11, 12,  4,  0,  0,  9,  9, 10, 10, 11,  2,  0,  0,  9,  9, 10, 10, 11,  2,  0,  0,  9,  9, 10, 10, 11
40const allAng4_shuf_mode15_16,   db  0,  9,  9, 10, 10, 11, 11, 12,  2,  0,  0,  9,  9, 10, 10, 11,  0,  9,  9, 10, 10, 11, 11, 12,  2,  0,  0,  9,  9, 10, 10, 11
41                                db  2,  0,  0,  9,  9, 10, 10, 11,  4,  2,  2,  0,  0,  9,  9, 10,  2,  0,  0,  9,  9, 10, 10, 11,  3,  2,  2,  0,  0,  9,  9, 10
42const allAng4_shuf_mode17,      db  0,  9,  9, 10, 10, 11, 11, 12,  1,  0,  0,  9,  9, 10, 10, 11,  2,  1,  1,  0,  0,  9,  9, 10,  4,  2,  2,  1,  1,  0,  0,  9
43                                db  0,  1,  2,  3,  9,  0,  1,  2, 10,  9,  0,  1, 11, 10,  9,  0,  0,  1,  2,  3,  9,  0,  1,  2, 10,  9,  0,  1, 11, 10,  9,  0
44const allAng4_shuf_mode18,      db  0,  1,  2,  3,  9,  0,  1,  2, 10,  9,  0,  1, 11, 10,  9,  0,  0,  1,  2,  3,  9,  0,  1,  2, 10,  9,  0,  1, 11, 10,  9,  0
45const allAng4_shuf_mode19_20,   db  0,  1,  1,  2,  2,  3,  3,  4,  9,  0,  0,  1,  1,  2,  2,  3,  0,  1,  1,  2,  2,  3,  3,  4, 10,  0,  0,  1,  1,  2,  2,  3
46                                db 10,  9,  9,  0,  0,  1,  1,  2, 12, 10, 10,  9,  9,  0,  0,  1, 10,  0,  0,  1,  1,  2,  2,  3, 11, 10, 10,  0,  0,  1,  1,  2
47const allAng4_shuf_mode21_22,   db  0,  1,  1,  2,  2,  3,  3,  4, 10,  0,  0,  1,  1,  2,  2,  3,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4
48                                db 10,  0,  0,  1,  1,  2,  2,  3, 12, 10, 10,  0,  0,  1,  1,  2, 10,  0,  0,  1,  1,  2,  2,  3, 10,  0,  0,  1,  1,  2,  2,  3
49const allAng4_shuf_mode23_24,   db  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4
50                                db  0,  1,  1,  2,  2,  3,  3,  4, 12,  0,  0,  1,  1,  2,  2,  3,  0,  1,  1,  2,  2,  3,  3,  4,  0,  1,  1,  2,  2,  3,  3,  4
51const allAng4_shuf_mode26,      db  1,  2,  3,  4,  1,  2,  3,  4,  1,  2,  3,  4,  1,  2,  3,  4,  1,  2,  3,  4,  1,  2,  3,  4,  1,  2,  3,  4,  1,  2,  3,  4
52const allAng4_shuf_mode27_28,   db  1,  2,  2,  3,  3,  4,  4,  5,  1,  2,  2,  3,  3,  4,  4,  5,  1,  2,  2,  3,  3,  4,  4,  5,  1,  2,  2,  3,  3,  4,  4,  5
53const allAng4_shuf_mode29_30,   db  1,  2,  2,  3,  3,  4,  4,  5,  2,  3,  3,  4,  4,  5,  5,  6,  2,  3,  3,  4,  4,  5,  5,  6,  2,  3,  3,  4,  4,  5,  5,  6
54const allAng4_shuf_mode31_32,   db  1,  2,  2,  3,  3,  4,  4,  5,  2,  3,  3,  4,  4,  5,  5,  6,  1,  2,  2,  3,  3,  4,  4,  5,  2,  3,  3,  4,  4,  5,  5,  6
55                                db  2,  3,  3,  4,  4,  5,  5,  6,  3,  4,  4,  5,  5,  6,  6,  7,  2,  3,  3,  4,  4,  5,  5,  6,  3,  4,  4,  5,  5,  6,  6,  7
56const allAng4_shuf_mode33,      db  1,  2,  2,  3,  3,  4,  4,  5,  2,  3,  3,  4,  4,  5,  5,  6,  3,  4,  4,  5,  5,  6,  6,  7,  4,  5,  5,  6,  6,  7,  7,  8
57const allAng4_shuf_mode34,      db  2,  3,  4,  5,  3,  4,  5,  6,  4,  5,  6,  7,  5,  6,  7,  8,  2,  3,  4,  5,  3,  4,  5,  6,  4,  5,  6,  7,  5,  6,  7,  8
58
59const allAng4_fact_mode3_4,     db  6, 26,  6, 26,  6, 26,  6, 26, 12, 20, 12, 20, 12, 20, 12, 20, 11, 21, 11, 21, 11, 21, 11, 21, 22, 10, 22, 10, 22, 10, 22, 10
60                                db 18, 14, 18, 14, 18, 14, 18, 14, 24,  8, 24,  8, 24,  8, 24,  8,  1, 31,  1, 31,  1, 31,  1, 31, 12, 20, 12, 20, 12, 20, 12, 20
61const allAng4_fact_mode5_6,     db 15, 17, 15, 17, 15, 17, 15, 17, 30,  2, 30,  2, 30,  2, 30,  2, 19, 13, 19, 13, 19, 13, 19, 13,  6, 26,  6, 26,  6, 26,  6, 26
62                                db 13, 19, 13, 19, 13, 19, 13, 19, 28,  4, 28,  4, 28,  4, 28,  4, 25,  7, 25,  7, 25,  7, 25,  7, 12, 20, 12, 20, 12, 20, 12, 20
63const allAng4_fact_mode7_8,     db 23,  9, 23,  9, 23,  9, 23,  9, 14, 18, 14, 18, 14, 18, 14, 18, 27,  5, 27,  5, 27,  5, 27,  5, 22, 10, 22, 10, 22, 10, 22, 10
64                                db  5, 27,  5, 27,  5, 27,  5, 27, 28,  4, 28,  4, 28,  4, 28,  4, 17, 15, 17, 15, 17, 15, 17, 15, 12, 20, 12, 20, 12, 20, 12, 20
65const allAng4_fact_mode9,       db 30,  2, 30,  2, 30,  2, 30,  2, 28,  4, 28,  4, 28,  4, 28,  4, 26,  6, 26,  6, 26,  6, 26,  6, 24,  8, 24,  8, 24,  8, 24,  8
66const allAng4_fact_mode11_12,   db  2, 30,  2, 30,  2, 30,  2, 30,  4, 28,  4, 28,  4, 28,  4, 28,  5, 27,  5, 27,  5, 27,  5, 27, 10, 22, 10, 22, 10, 22, 10, 22
67                                db  6, 26,  6, 26,  6, 26,  6, 26,  8, 24,  8, 24,  8, 24,  8, 24, 15, 17, 15, 17, 15, 17, 15, 17, 20, 12, 20, 12, 20, 12, 20, 12
68const allAng4_fact_mode13_14,   db  9, 23,  9, 23,  9, 23,  9, 23, 18, 14, 18, 14, 18, 14, 18, 14, 13, 19, 13, 19, 13, 19, 13, 19, 26,  6, 26,  6, 26,  6, 26,  6
69                                db 27,  5, 27,  5, 27,  5, 27,  5,  4, 28,  4, 28,  4, 28,  4, 28,  7, 25,  7, 25,  7, 25,  7, 25, 20, 12, 20, 12, 20, 12, 20, 12
70const allAng4_fact_mode15_16,   db 17, 15, 17, 15, 17, 15, 17, 15,  2, 30,  2, 30,  2, 30,  2, 30, 21, 11, 21, 11, 21, 11, 21, 11, 10, 22, 10, 22, 10, 22, 10, 22
71                                db 19, 13, 19, 13, 19, 13, 19, 13,  4, 28,  4, 28,  4, 28,  4, 28, 31,  1, 31,  1, 31,  1, 31,  1, 20, 12, 20, 12, 20, 12, 20, 12
72const allAng4_fact_mode17,      db 26,  6, 26,  6, 26,  6, 26,  6, 20, 12, 20, 12, 20, 12, 20, 12, 14, 18, 14, 18, 14, 18, 14, 18,  8, 24,  8, 24,  8, 24,  8, 24
73const allAng4_fact_mode19_20,   db 26,  6, 26,  6, 26,  6, 26,  6, 20, 12, 20, 12, 20, 12, 20, 12, 21, 11, 21, 11, 21, 11, 21, 11, 10, 22, 10, 22, 10, 22, 10, 22
74                                db 14, 18, 14, 18, 14, 18, 14, 18,  8, 24,  8, 24,  8, 24,  8, 24, 31,  1, 31,  1, 31,  1, 31,  1, 20, 12, 20, 12, 20, 12, 20, 12
75const allAng4_fact_mode21_22,   db 17, 15, 17, 15, 17, 15, 17, 15,  2, 30,  2, 30,  2, 30,  2, 30, 13, 19, 13, 19, 13, 19, 13, 19, 26,  6, 26,  6, 26,  6, 26,  6
76                                db 19, 13, 19, 13, 19, 13, 19, 13,  4, 28,  4, 28,  4, 28,  4, 28,  7, 25,  7, 25,  7, 25,  7, 25, 20, 12, 20, 12, 20, 12, 20, 12
77const allAng4_fact_mode23_24,   db  9, 23,  9, 23,  9, 23,  9, 23, 18, 14, 18, 14, 18, 14, 18, 14,  5, 27,  5, 27,  5, 27,  5, 27, 10, 22, 10, 22, 10, 22, 10, 22
78                                db 27,  5, 27,  5, 27,  5, 27,  5,  4, 28,  4, 28,  4, 28,  4, 28, 15, 17, 15, 17, 15, 17, 15, 17, 20, 12, 20, 12, 20, 12, 20, 12
79const allAng4_fact_mode25,      db  2, 30,  2, 30,  2, 30,  2, 30,  4, 28,  4, 28,  4, 28,  4, 28,  6, 26,  6, 26,  6, 26,  6, 26,  8, 24,  8, 24,  8, 24,  8, 24
80const allAng4_fact_mode27_28,   db 30,  2, 30,  2, 30,  2, 30,  2, 28,  4, 28,  4, 28,  4, 28,  4, 27,  5, 27,  5, 27,  5, 27,  5, 22, 10, 22, 10, 22, 10, 22, 10
81                                db 26,  6, 26,  6, 26,  6, 26,  6, 24,  8, 24,  8, 24,  8, 24,  8, 17, 15, 17, 15, 17, 15, 17, 15, 12, 20, 12, 20, 12, 20, 12, 20
82const allAng4_fact_mode29_30,   db 23,  9, 23,  9, 23,  9, 23,  9, 14, 18, 14, 18, 14, 18, 14, 18, 19, 13, 19, 13, 19, 13, 19, 13,  6, 26,  6, 26,  6, 26,  6, 26
83                                db  5, 27,  5, 27,  5, 27,  5, 27, 28,  4, 28,  4, 28,  4, 28,  4, 25,  7, 25,  7, 25,  7, 25,  7, 12, 20, 12, 20, 12, 20, 12, 20
84const allAng4_fact_mode31_32,   db 15, 17, 15, 17, 15, 17, 15, 17, 30,  2, 30,  2, 30,  2, 30,  2, 11, 21, 11, 21, 11, 21, 11, 21, 22, 10, 22, 10, 22, 10, 22, 10
85                                db 13, 19, 13, 19, 13, 19, 13, 19, 28,  4, 28,  4, 28,  4, 28,  4,  1, 31,  1, 31,  1, 31,  1, 31, 12, 20, 12, 20, 12, 20, 12, 20
86const allAng4_fact_mode33,      db  6, 26,  6, 26,  6, 26,  6, 26, 12, 20, 12, 20, 12, 20, 12, 20, 18, 14, 18, 14, 18, 14, 18, 14, 24,  8, 24,  8, 24,  8, 24,  8
87
88
89SECTION .text
90
91; global constant
92cextern pw_1024
93
94; common constant with intrapred8.asm
95cextern ang_table
96cextern pw_ang_table
97cextern tab_S1
98cextern tab_S2
99cextern tab_Si
100cextern pw_16
101cextern pb_000000000000000F
102cextern pb_0000000000000F0F
103cextern pw_FFFFFFFFFFFFFFF0
104
105
106;-----------------------------------------------------------------------------
107; void all_angs_pred_4x4(pixel *dest, pixel *refPix, pixel *filtPix, int bLuma)
108;-----------------------------------------------------------------------------
109INIT_XMM sse4
110cglobal all_angs_pred_4x4, 4, 4, 8
111
112; mode 2
113
114movh      m0,         [r1 + 10]
115movd      [r0],       m0
116
117palignr   m1,         m0,      1
118movd      [r0 + 4],   m1
119
120palignr   m1,         m0,      2
121movd      [r0 + 8],   m1
122
123palignr   m1,         m0,      3
124movd      [r0 + 12],  m1
125
126; mode 3
127
128mova          m2,        [pw_1024]
129
130pslldq        m1,        m0,         1
131pinsrb        m1,        [r1 + 9],   0
132punpcklbw     m1,        m0
133
134lea           r3,        [ang_table]
135
136pmaddubsw     m6,        m1,        [r3 + 26 * 16]
137pmulhrsw      m6,        m2
138packuswb      m6,        m6
139movd          [r0 + 16], m6
140
141palignr       m0,        m1,        2
142
143mova          m7,        [r3 + 20 * 16]
144
145pmaddubsw     m3,        m0,        m7
146pmulhrsw      m3,        m2
147packuswb      m3,        m3
148movd          [r0 + 20], m3
149
150; mode 6 [row 3]
151movd          [r0 + 76], m3
152
153palignr       m3,        m1,       4
154
155pmaddubsw     m4,        m3,        [r3 + 14 * 16]
156pmulhrsw      m4,        m2
157packuswb      m4,        m4
158movd          [r0 + 24], m4
159
160palignr       m4,        m1,        6
161
162pmaddubsw     m4,        [r3 + 8 * 16]
163pmulhrsw      m4,        m2
164packuswb      m4,        m4
165movd          [r0 + 28], m4
166
167; mode 4
168
169pmaddubsw     m5,        m1,        [r3 + 21 * 16]
170pmulhrsw      m5,        m2
171packuswb      m5,        m5
172movd          [r0 + 32], m5
173
174pmaddubsw     m5,        m0,        [r3 + 10 * 16]
175pmulhrsw      m5,        m2
176packuswb      m5,        m5
177movd          [r0 + 36], m5
178
179pmaddubsw     m5,        m0,        [r3 + 31 * 16]
180pmulhrsw      m5,        m2
181packuswb      m5,        m5
182movd          [r0 + 40], m5
183
184pmaddubsw     m4,        m3,        m7
185pmulhrsw      m4,        m2
186packuswb      m4,        m4
187movd          [r0 + 44], m4
188
189; mode 5
190
191pmaddubsw     m5,        m1,        [r3 + 17 * 16]
192pmulhrsw      m5,        m2
193packuswb      m5,        m5
194movd          [r0 + 48], m5
195
196pmaddubsw     m5,        m0,        [r3 + 2 * 16]
197pmulhrsw      m5,        m2
198packuswb      m5,        m5
199movd          [r0 + 52], m5
200
201pmaddubsw     m5,        m0,        [r3 + 19 * 16]
202pmulhrsw      m5,        m2
203packuswb      m5,        m5
204movd          [r0 + 56], m5
205
206pmaddubsw     m4,        m3,        [r3 + 4 * 16]
207pmulhrsw      m4,        m2
208packuswb      m4,        m4
209movd          [r0 + 60], m4
210
211; mode 6
212
213pmaddubsw     m5,        m1,        [r3 + 13 * 16]
214pmulhrsw      m5,        m2
215packuswb      m5,        m5
216movd          [r0 + 64], m5
217
218movd          [r0 + 68], m6
219
220pmaddubsw     m5,        m0,        [r3 + 7 * 16]
221pmulhrsw      m5,        m2
222packuswb      m5,        m5
223movd          [r0 + 72], m5
224
225; mode 7
226
227pmaddubsw     m5,        m1,        [r3 + 9 * 16]
228pmulhrsw      m5,        m2
229packuswb      m5,        m5
230movd          [r0 + 80], m5
231
232pmaddubsw     m5,        m1,        [r3 + 18 * 16]
233pmulhrsw      m5,        m2
234packuswb      m5,        m5
235movd          [r0 + 84], m5
236
237pmaddubsw     m5,        m1,        [r3 + 27 * 16]
238pmulhrsw      m5,        m2
239packuswb      m5,        m5
240movd          [r0 + 88], m5
241
242pmaddubsw     m5,        m0,        [r3 + 4 * 16]
243pmulhrsw      m5,        m2
244packuswb      m5,        m5
245movd          [r0 + 92], m5
246
247; mode 8
248
249pmaddubsw     m5,        m1,        [r3 + 5 * 16]
250pmulhrsw      m5,        m2
251packuswb      m5,        m5
252movd          [r0 + 96], m5
253
254pmaddubsw     m5,         m1,       [r3 + 10 * 16]
255pmulhrsw      m5,         m2
256packuswb      m5,         m5
257movd          [r0 + 100], m5
258
259pmaddubsw     m5,         m1,        [r3 + 15 * 16]
260pmulhrsw      m5,         m2
261packuswb      m5,         m5
262movd          [r0 + 104], m5
263
264pmaddubsw     m5,         m1,        [r3 + 20 * 16]
265pmulhrsw      m5,         m2
266packuswb      m5,         m5
267movd          [r0 + 108], m5
268
269; mode 9
270
271pmaddubsw     m5,         m1,        [r3 + 2 * 16]
272pmulhrsw      m5,         m2
273packuswb      m5,         m5
274movd          [r0 + 112], m5
275
276pmaddubsw     m5,         m1,        [r3 + 4 * 16]
277pmulhrsw      m5,         m2
278packuswb      m5,         m5
279movd          [r0 + 116], m5
280
281pmaddubsw     m5,         m1,        [r3 + 6 * 16]
282pmulhrsw      m5,         m2
283packuswb      m5,         m5
284movd          [r0 + 120], m5
285
286pmaddubsw     m5,         m1,        [r3 + 8 * 16]
287pmulhrsw      m5,         m2
288packuswb      m5,         m5
289movd          [r0 + 124], m5
290
291; mode 10
292
293movd         m3,         [r1 + 9]
294pshufd       m4,         m3,        0
295movu         [r0 + 128], m4
296
297pxor         m5,         m5
298movd         m7,         [r1 + 1]
299pshufd       m4,         m7,        0
300punpcklbw    m4,         m5
301
302pinsrb       m7,         [r1],      0
303pshufb       m6,         m7,        m5
304punpcklbw    m6,         m5
305
306psubw        m4,         m6
307psraw        m4,         1
308
309pshufb       m6,         m3,       m5
310punpcklbw    m6,         m5
311
312paddw        m4,         m6
313packuswb     m4,         m5
314
315pextrb       [r0 + 128],  m4,    0
316pextrb       [r0 + 132],  m4,    1
317pextrb       [r0 + 136],  m4,    2
318pextrb       [r0 + 140],  m4,    3
319
320; mode 11
321
322pslldq        m1,        m1,         2
323pinsrb        m1,        [r1],       0
324pinsrb        m1,        [r1 + 9],   1
325
326pmaddubsw     m3,         m1,        [r3 + 30 * 16]
327pmulhrsw      m3,         m2
328packuswb      m3,         m3
329movd          [r0 + 144], m3
330
331pmaddubsw     m3,         m1,        [r3 + 28 * 16]
332pmulhrsw      m3,         m2
333packuswb      m3,         m3
334movd          [r0 + 148], m3
335
336pmaddubsw     m3,         m1,        [r3 + 26 * 16]
337pmulhrsw      m3,         m2
338packuswb      m3,         m3
339movd          [r0 + 152], m3
340
341pmaddubsw     m3,         m1,        [r3 + 24 * 16]
342pmulhrsw      m3,         m2
343packuswb      m3,         m3
344movd          [r0 + 156], m3
345
346; mode 12
347
348pmaddubsw     m3,         m1,        [r3 + 27 * 16]
349pmulhrsw      m3,         m2
350packuswb      m3,         m3
351movd          [r0 + 160], m3
352
353pmaddubsw     m3,         m1,        [r3 + 22 * 16]
354pmulhrsw      m3,         m2
355packuswb      m3,         m3
356movd          [r0 + 164], m3
357
358pmaddubsw     m3,         m1,        [r3 + 17 * 16]
359pmulhrsw      m3,         m2
360packuswb      m3,         m3
361movd          [r0 + 168], m3
362
363pmaddubsw     m3,         m1,        [r3 + 12 * 16]
364pmulhrsw      m3,         m2
365packuswb      m3,         m3
366movd          [r0 + 172], m3
367
368; mode 13
369
370pmaddubsw     m3,         m1,        [r3 + 23 * 16]
371pmulhrsw      m3,         m2
372packuswb      m3,         m3
373movd          [r0 + 176], m3
374
375pmaddubsw     m3,         m1,        [r3 + 14 * 16]
376pmulhrsw      m3,         m2
377packuswb      m3,         m3
378movd          [r0 + 180], m3
379
380pmaddubsw     m3,         m1,        [r3 + 5 * 16]
381pmulhrsw      m3,         m2
382packuswb      m3,         m3
383movd          [r0 + 184], m3
384
385pslldq        m5,         m1,        2
386pinsrb        m5,         [r1 + 0],  1
387pinsrb        m5,         [r1 + 4],  0
388
389pmaddubsw     m4,         m5,        [r3 + 28 * 16]
390pmulhrsw      m4,         m2
391packuswb      m4,         m4
392movd          [r0 + 188], m4
393
394; mode 14
395
396pmaddubsw     m4,         m1,        [r3 + 19 * 16]
397pmulhrsw      m4,         m2
398packuswb      m4,         m4
399movd          [r0 + 192], m4
400
401pmaddubsw     m7,         m1,        [r3 + 6 * 16]
402pmulhrsw      m7,         m2
403packuswb      m7,         m7
404movd          [r0 + 196], m7
405
406pinsrb        m5,         [r1 + 2],  0
407
408pmaddubsw     m4,         m5,        [r3 + 25 * 16]
409pmulhrsw      m4,         m2
410packuswb      m4,         m4
411movd          [r0 + 200], m4
412
413pmaddubsw     m4,         m5,        [r3 + 12 * 16]
414pmulhrsw      m4,         m2
415packuswb      m4,         m4
416movd          [r0 + 204], m4
417
418; mode 15
419
420pmaddubsw     m4,         m1,        [r3 + 15 * 16]
421pmulhrsw      m4,         m2
422packuswb      m4,         m4
423movd          [r0 + 208], m4
424
425pmaddubsw     m4,         m5,        [r3 + 30 * 16]
426pmulhrsw      m4,         m2
427packuswb      m4,         m4
428movd          [r0 + 212], m4
429
430pmaddubsw     m4,         m5,        [r3 + 13 * 16]
431pmulhrsw      m4,         m2
432packuswb      m4,         m4
433movd          [r0 + 216], m4
434
435pslldq        m4,         m5,         2
436pinsrb        m4,         [r1 + 2],   1
437pinsrb        m4,         [r1 + 4],   0
438
439pmaddubsw     m6,         m4,         [r3 + 28 * 16]
440pmulhrsw      m6,         m2
441packuswb      m6,         m6
442movd          [r0 + 220], m6
443
444; mode 16
445
446pmaddubsw     m6,         m1,        [r3 + 11 * 16]
447pmulhrsw      m6,         m2
448packuswb      m6,         m6
449movd          [r0 + 224], m6
450
451pmaddubsw     m6,         m5,        [r3 + 22 * 16]
452pmulhrsw      m6,         m2
453packuswb      m6,         m6
454movd          [r0 + 228], m6
455
456pmaddubsw     m6,         m5,        [r3 + 1 * 16]
457pmulhrsw      m6,         m2
458packuswb      m6,         m6
459movd          [r0 + 232], m6
460
461pinsrb        m4,         [r1 + 3],  0
462
463pmaddubsw     m4,         [r3 + 12 * 16]
464pmulhrsw      m4,         m2
465packuswb      m4,         m4
466movd          [r0 + 236], m4
467
468; mode 17
469
470movd          [r0 + 240],  m7
471
472pslldq        m1,         2
473pinsrb        m1,         [r1 + 1],  0
474pinsrb        m1,         [r1 + 0],  1
475
476pmaddubsw     m3,         m1,        [r3 + 12 * 16]
477pmulhrsw      m3,         m2
478packuswb      m3,         m3
479movd          [r0 + 244], m3
480
481pslldq        m1,         2
482pinsrb        m1,         [r1 + 1],  1
483pinsrb        m1,         [r1 + 2],  0
484
485pmaddubsw     m3,         m1,        [r3 + 18 * 16]
486pmulhrsw      m3,         m2
487packuswb      m3,         m3
488movd          [r0 + 248], m3
489
490pslldq        m1,         2
491pinsrb        m1,         [r1 + 2],  1
492pinsrb        m1,         [r1 + 4],  0
493
494pmaddubsw     m1,         [r3 + 24 * 16]
495pmulhrsw      m1,         m2
496packuswb      m1,         m1
497movd          [r0 + 252], m1
498
499; mode 18
500
501movh          m1,         [r1]
502movd          [r0 + 256], m1
503
504pslldq        m3,         m1,         1
505pinsrb        m3,         [r1 + 9],   0
506movd          [r0 + 260], m3
507
508pslldq        m4,         m3,         1
509pinsrb        m4,         [r1 + 10],  0
510movd          [r0 + 264], m4
511
512pslldq        m4,         1
513pinsrb        m4,         [r1 + 11],  0
514movd          [r0 + 268], m4
515
516; mode 19
517
518palignr       m3,         m1,        1
519punpcklbw     m1,         m3
520
521pmaddubsw     m7,         m1,        [r3 + 6 * 16]
522pmulhrsw      m7,         m2
523packuswb      m7,         m7
524movd          [r0 + 272], m7
525
526pslldq        m3,         m1,         2
527pinsrb        m3,         [r1],       1
528pinsrb        m3,         [r1 + 9],   0
529
530pmaddubsw     m4,         m3,         [r3 + 12 * 16]
531pmulhrsw      m4,         m2
532packuswb      m4,         m4
533movd          [r0 + 276], m4
534
535pslldq        m4,         m3,         2
536pinsrb        m4,         [r1 + 9],   1
537pinsrb        m4,         [r1 + 10],  0
538
539pmaddubsw     m5,         m4,         [r3 + 18 * 16]
540pmulhrsw      m5,         m2
541packuswb      m5,         m5
542movd          [r0 + 280], m5
543
544pslldq        m4,         2
545pinsrb        m4,         [r1 + 10],  1
546pinsrb        m4,         [r1 + 12],  0
547
548pmaddubsw     m4,         [r3 + 24 * 16]
549pmulhrsw      m4,         m2
550packuswb      m4,         m4
551movd          [r0 + 284], m4
552
553; mode 20
554
555pmaddubsw     m4,         m1,        [r3 + 11 * 16]
556pmulhrsw      m4,         m2
557packuswb      m4,         m4
558movd          [r0 + 288], m4
559
560pinsrb        m3,         [r1 + 10],  0
561
562pmaddubsw     m4,         m3,        [r3 + 22 * 16]
563pmulhrsw      m4,         m2
564packuswb      m4,         m4
565movd          [r0 + 292], m4
566
567pmaddubsw     m4,         m3,        [r3 + 1 * 16]
568pmulhrsw      m4,         m2
569packuswb      m4,         m4
570movd          [r0 + 296], m4
571
572pslldq        m6,         m3,        2
573pinsrb        m6,         [r1 + 10], 1
574pinsrb        m6,         [r1 + 11], 0
575
576pmaddubsw     m5,         m6,        [r3 + 12 * 16]
577pmulhrsw      m5,         m2
578packuswb      m5,         m5
579movd          [r0 + 300], m5
580
581; mode 21
582
583pmaddubsw     m4,         m1,        [r3 + 15 * 16]
584pmulhrsw      m4,         m2
585packuswb      m4,         m4
586movd          [r0 + 304], m4
587
588pmaddubsw     m4,         m3,        [r3 + 30 * 16]
589pmulhrsw      m4,         m2
590packuswb      m4,         m4
591movd          [r0 + 308], m4
592
593pmaddubsw     m4,         m3,        [r3 + 13 * 16]
594pmulhrsw      m4,         m2
595packuswb      m4,         m4
596movd          [r0 + 312], m4
597
598pinsrb        m6,         [r1 + 12],   0
599
600pmaddubsw     m6,         [r3 + 28 * 16]
601pmulhrsw      m6,         m2
602packuswb      m6,         m6
603movd          [r0 + 316], m6
604
605; mode 22
606
607pmaddubsw     m4,         m1,         [r3 + 19 * 16]
608pmulhrsw      m4,         m2
609packuswb      m4,         m4
610movd          [r0 + 320], m4
611
612movd          [r0 + 324], m7
613
614pmaddubsw     m4,         m3,        [r3 + 25 * 16]
615pmulhrsw      m4,         m2
616packuswb      m4,         m4
617movd          [r0 + 328], m4
618
619pmaddubsw     m4,         m3,         [r3 + 12 * 16]
620pmulhrsw      m4,         m2
621packuswb      m4,         m4
622movd          [r0 + 332], m4
623
624; mode 23
625
626pmaddubsw     m4,         m1,         [r3 + 23 * 16]
627pmulhrsw      m4,         m2
628packuswb      m4,         m4
629movd          [r0 + 336], m4
630
631pmaddubsw     m4,         m1,         [r3 + 14 * 16]
632pmulhrsw      m4,         m2
633packuswb      m4,         m4
634movd          [r0 + 340], m4
635
636pmaddubsw     m4,         m1,         [r3 + 5 * 16]
637pmulhrsw      m4,         m2
638packuswb      m4,         m4
639movd          [r0 + 344], m4
640
641pinsrb         m3,        [r1 + 12],   0
642
643pmaddubsw     m3,         [r3 + 28 * 16]
644pmulhrsw      m3,         m2
645packuswb      m3,         m3
646movd          [r0 + 348], m3
647
648; mode 24
649
650pmaddubsw     m3,         m1,         [r3 + 27 * 16]
651pmulhrsw      m3,         m2
652packuswb      m3,         m3
653movd          [r0 + 352], m3
654
655pmaddubsw     m3,         m1,         [r3 + 22 * 16]
656pmulhrsw      m3,         m2
657packuswb      m3,         m3
658movd          [r0 + 356], m3
659
660pmaddubsw     m3,         m1,         [r3 + 17 * 16]
661pmulhrsw      m3,         m2
662packuswb      m3,         m3
663movd          [r0 + 360], m3
664
665pmaddubsw     m3,         m1,         [r3 + 12 * 16]
666pmulhrsw      m3,         m2
667packuswb      m3,         m3
668movd          [r0 + 364], m3
669
670; mode 25
671
672pmaddubsw     m3,         m1,         [r3 + 30 * 16]
673pmulhrsw      m3,         m2
674packuswb      m3,         m3
675movd          [r0 + 368], m3
676
677pmaddubsw     m3,         m1,         [r3 + 28 * 16]
678pmulhrsw      m3,         m2
679packuswb      m3,         m3
680movd          [r0 + 372], m3
681
682pmaddubsw     m3,         m1,         [r3 + 26 * 16]
683pmulhrsw      m3,         m2
684packuswb      m3,         m3
685movd          [r0 + 376], m3
686
687pmaddubsw     m1,         [r3 + 24 * 16]
688pmulhrsw      m1,         m2
689packuswb      m1,         m1
690movd          [r0 + 380], m1
691
692; mode 26
693
694movh         m1,         [r1 + 1]
695pshufd       m3,         m1,        0
696movu         [r0 + 384], m3
697
698pxor         m4,         m4
699movd         m5,         [r1 + 9]
700pshufd       m5,         m5,        0
701punpcklbw    m5,         m4
702
703pinsrb       m6,         [r1],      0
704pshufb       m6,         m4
705punpcklbw    m6,         m4
706
707psubw        m5,         m6
708psraw        m5,         1
709
710pshufb       m6,         m1,        m4
711punpcklbw    m6,         m4
712
713paddw        m5,         m6
714packuswb     m5,         m4
715
716pextrb       [r0 + 384], m5,    0
717pextrb       [r0 + 388], m5,    1
718pextrb       [r0 + 392], m5,    2
719pextrb       [r0 + 396], m5,    3
720
721; mode 27
722
723palignr       m3,         m1,     1
724punpcklbw     m1,         m3
725
726pmaddubsw     m3,         m1,     [r3 + 2 * 16]
727pmulhrsw      m3,         m2
728packuswb      m3,         m3
729movd          [r0 + 400], m3
730
731pmaddubsw     m3,         m1,     [r3 + 4 * 16]
732pmulhrsw      m3,         m2
733packuswb      m3,         m3
734movd          [r0 + 404], m3
735
736pmaddubsw     m3,         m1,     [r3 + 6 * 16]
737pmulhrsw      m3,         m2
738packuswb      m3,         m3
739movd          [r0 + 408], m3
740
741pmaddubsw     m3,         m1,     [r3 + 8 * 16]
742pmulhrsw      m3,         m2
743packuswb      m3,         m3
744movd          [r0 + 412], m3
745
746; mode 28
747
748pmaddubsw     m3,         m1,     [r3 + 5 * 16]
749pmulhrsw      m3,         m2
750packuswb      m3,         m3
751movd          [r0 + 416], m3
752
753pmaddubsw     m3,         m1,     [r3 + 10 * 16]
754pmulhrsw      m3,         m2
755packuswb      m3,         m3
756movd          [r0 + 420], m3
757
758pmaddubsw     m3,         m1,     [r3 + 15 * 16]
759pmulhrsw      m3,         m2
760packuswb      m3,         m3
761movd          [r0 + 424], m3
762
763pmaddubsw     m3,         m1,     [r3 + 20 * 16]
764pmulhrsw      m3,         m2
765packuswb      m3,         m3
766movd          [r0 + 428], m3
767
768; mode 29
769
770pmaddubsw     m3,         m1,     [r3 + 9 * 16]
771pmulhrsw      m3,         m2
772packuswb      m3,         m3
773movd          [r0 + 432], m3
774
775pmaddubsw     m3,         m1,     [r3 + 18 * 16]
776pmulhrsw      m3,         m2
777packuswb      m3,         m3
778movd          [r0 + 436], m3
779
780pmaddubsw     m3,         m1,     [r3 + 27 * 16]
781pmulhrsw      m3,         m2
782packuswb      m3,         m3
783movd          [r0 + 440], m3
784
785palignr       m3,         m1,     2
786
787pmaddubsw     m4,         m3,     [r3 + 4 * 16]
788pmulhrsw      m4,         m2
789packuswb      m4,         m4
790movd          [r0 + 444], m4
791
792; mode 30
793
794pmaddubsw     m4,         m1,     [r3 + 13 * 16]
795pmulhrsw      m4,         m2
796packuswb      m4,         m4
797movd          [r0 + 448], m4
798
799pmaddubsw     m7,         m1,     [r3 + 26 * 16]
800pmulhrsw      m7,         m2
801packuswb      m7,         m7
802movd          [r0 + 452], m7
803
804pmaddubsw     m5,         m3,     [r3 + 7 * 16]
805pmulhrsw      m5,         m2
806packuswb      m5,         m5
807movd          [r0 + 456], m5
808
809pmaddubsw     m6,         m3,     [r3 + 20 * 16]
810pmulhrsw      m6,         m2
811packuswb      m6,         m6
812movd          [r0 + 460], m6
813
814; mode 31
815
816pmaddubsw     m4,         m1,     [r3 + 17 * 16]
817pmulhrsw      m4,         m2
818packuswb      m4,         m4
819movd          [r0 + 464], m4
820
821pmaddubsw     m5,         m3,     [r3 + 2 * 16]
822pmulhrsw      m5,         m2
823packuswb      m5,         m5
824movd          [r0 + 468], m5
825
826pmaddubsw     m5,         m3,     [r3 + 19 * 16]
827pmulhrsw      m5,         m2
828packuswb      m5,         m5
829movd          [r0 + 472], m5
830
831palignr       m4,         m3,     2
832
833pmaddubsw     m5,         m4,     [r3 + 4 * 16]
834pmulhrsw      m5,         m2
835packuswb      m5,         m5
836movd          [r0 + 476], m5
837
838; mode 32
839
840pmaddubsw     m5,         m1,     [r3 + 21 * 16]
841pmulhrsw      m5,         m2
842packuswb      m5,         m5
843movd          [r0 + 480], m5
844
845pmaddubsw     m5,         m3,     [r3 + 10 * 16]
846pmulhrsw      m5,         m2
847packuswb      m5,         m5
848movd          [r0 + 484], m5
849
850pmaddubsw     m5,         m3,     [r3 + 31 * 16]
851pmulhrsw      m5,         m2
852packuswb      m5,         m5
853movd          [r0 + 488], m5
854
855pmaddubsw     m5,         m4,     [r3 + 20 * 16]
856pmulhrsw      m5,         m2
857packuswb      m5,         m5
858movd          [r0 + 492], m5
859
860; mode 33
861
862movd          [r0 + 496], m7
863
864movd          [r0 + 500], m6
865
866pmaddubsw     m5,         m4,         [r3 + 14 * 16]
867pmulhrsw      m5,         m2
868packuswb      m5,         m5
869movd          [r0 + 504], m5
870
871psrldq        m4,         2
872
873pmaddubsw     m4,         [r3 + 8 * 16]
874pmulhrsw      m4,         m2
875packuswb      m4,         m4
876movd          [r0 + 508], m4
877
878; mode 34
879
880movh      m7,             [r1 + 2]
881movd      [r0 + 512],     m7
882
883psrldq    m7,      1
884movd      [r0 + 516],     m7
885
886psrldq    m7,      1
887movd      [r0 + 520],     m7
888
889psrldq    m7,      1
890movd      [r0 + 524],     m7
891
892RET
893
894;------------------------------------------------------------------------------
895; void all_angs_pred_8x8(pixel *dest, pixel *refPix, pixel *filtPix, int bLuma)
896;------------------------------------------------------------------------------
897INIT_XMM sse4
898cglobal all_angs_pred_8x8, 3,4,8
899    ; mode 2
900
901    movu         m0,          [r2 + 18]
902    palignr      m1,          m0,          1
903    punpcklqdq   m2,          m0,          m1
904    movu         [r0],        m2
905
906    palignr      m1,          m0,          2
907    palignr      m2,          m0,          3
908    punpcklqdq   m1,          m2
909    movu         [r0 + 16],   m1
910
911    palignr      m1,          m0,          4
912    palignr      m2,          m0,          5
913    punpcklqdq   m1,          m2
914    movu         [r0 + 32],   m1
915
916    palignr      m1,          m0,          6
917    palignr      m2,          m0,          7
918    punpcklqdq   m1,          m2
919    movu         [r0 + 48],   m1
920
921    ; mode 3 [row 0, 1]
922
923    mova          m7,         [pw_1024]
924    lea           r3,         [ang_table]
925
926    movu          m0,         [r1 + 17]
927
928    palignr       m1,         m0,               1
929    palignr       m2,         m0,               2
930
931    punpcklbw     m3,         m0,               m1
932    pmaddubsw     m4,         m3,               [r3 + 26 * 16]
933    pmulhrsw      m4,         m7
934
935    punpcklbw     m1,         m2
936    pmaddubsw     m5,         m1,               [r3 + 20 * 16]
937    pmulhrsw      m5,         m7
938
939    packuswb      m4,         m5
940
941    movu          [r0 + 64],  m4
942
943    ; mode 6 [row 1]
944
945    movh          [r0 + 264], m4
946
947    ; mode 6 [row 3]
948
949    movhps        [r0 + 280], m4
950
951    ; mode 4 [row 0, 1]
952
953    pmaddubsw     m4,         m3,               [r3 + 21 * 16]
954    pmulhrsw      m4,         m7
955
956    pmaddubsw     m5,         m1,               [r3 + 10 * 16]
957    pmulhrsw      m5,         m7
958
959    packuswb      m4,         m5
960    movu          [r0 + 128], m4
961
962    ; mode 5 [row 0, 1]
963
964    pmaddubsw     m4,         m3,               [r3 + 17 * 16]
965    pmulhrsw      m4,         m7
966
967    pmaddubsw     m5,         m1,               [r3 + 2 * 16]
968    pmulhrsw      m5,         m7
969
970    packuswb      m4,         m5
971    movu          [r0 + 192], m4
972
973    ; mode 6 [row 0]
974
975    pmaddubsw     m4,         m3,               [r3 + 13 * 16]
976    pmulhrsw      m4,         m7
977
978    pxor          m5,         m5
979
980    packuswb      m4,         m5
981    movh          [r0 + 256], m4
982
983    ; mode 7 [row 0, 1]
984
985    pmaddubsw     m4,         m3,               [r3 + 9 * 16]
986    pmulhrsw      m4,         m7
987
988    pmaddubsw     m5,         m3,               [r3 + 18 * 16]
989    pmulhrsw      m5,         m7
990
991    packuswb      m4,         m5
992    movu          [r0 + 320], m4
993
994    ; mode 8 [row 0, 1]
995
996    pmaddubsw     m4,         m3,               [r3 + 5 * 16]
997    pmulhrsw      m4,         m7
998
999    pmaddubsw     m5,         m3,               [r3 + 10 * 16]
1000    pmulhrsw      m5,         m7
1001
1002    packuswb      m4,         m5
1003    movu          [r0 + 384], m4
1004
1005    ; mode 8 [row 2, 3]
1006
1007    pmaddubsw     m4,         m3,               [r3 + 15 * 16]
1008    pmulhrsw      m4,         m7
1009
1010    pmaddubsw     m5,         m3,               [r3 + 20 * 16]
1011    pmulhrsw      m5,         m7
1012
1013    packuswb      m4,         m5
1014    movu          [r0 + 400], m4
1015
1016    ; mode 8 [row 4, 5]
1017
1018    pmaddubsw     m4,         m3,               [r3 + 25 * 16]
1019    pmulhrsw      m4,         m7
1020
1021    pmaddubsw     m5,         m3,               [r3 + 30 * 16]
1022    pmulhrsw      m5,         m7
1023
1024    packuswb      m4,         m5
1025    movu          [r0 + 416], m4
1026
1027    ; mode 8 [row 6, 7]
1028
1029    pmaddubsw     m4,         m1,               [r3 + 3 * 16]
1030    pmulhrsw      m4,         m7
1031
1032    pmaddubsw     m5,         m1,               [r3 + 8 * 16]
1033    pmulhrsw      m5,         m7
1034
1035    packuswb      m4,         m5
1036    movu          [r0 + 432], m4
1037
1038    ; mode 9 [row 0, 1]
1039
1040    pmaddubsw     m4,         m3,               [r3 + 2 * 16]
1041    pmulhrsw      m4,         m7
1042
1043    pmaddubsw     m5,         m3,               [r3 + 4 * 16]
1044    pmulhrsw      m5,         m7
1045
1046    packuswb      m4,         m5
1047    movu          [r0 + 448], m4
1048
1049    ; mode 9 [row 2, 3]
1050
1051    pmaddubsw     m4,         m3,               [r3 + 6 * 16]
1052    pmulhrsw      m4,         m7
1053
1054    pmaddubsw     m5,         m3,               [r3 + 8 * 16]
1055    pmulhrsw      m5,         m7
1056
1057    packuswb      m4,         m5
1058    movu          [r0 + 464], m4
1059
1060    ; mode 9 [row 4, 5]
1061
1062    pmaddubsw     m4,         m3,               [r3 + 10 * 16]
1063    pmulhrsw      m4,         m7
1064
1065    pmaddubsw     m5,         m3,               [r3 + 12 * 16]
1066    pmulhrsw      m5,         m7
1067
1068    packuswb      m4,         m5
1069    movu          [r0 + 480], m4
1070
1071    ; mode 9 [row 6, 7]
1072
1073    pmaddubsw     m4,         m3,               [r3 + 14 * 16]
1074    pmulhrsw      m4,         m7
1075
1076    pmaddubsw     m5,         m3,               [r3 + 16 * 16]
1077    pmulhrsw      m5,         m7
1078
1079    packuswb      m4,         m5
1080    movu          [r0 + 496], m4
1081
1082    ; mode 7 [row 2, 3]
1083
1084    pmaddubsw     m4,         m3,               [r3 + 27 * 16]
1085    pmulhrsw      m4,         m7
1086
1087    pmaddubsw     m5,         m1,               [r3 + 4 * 16]
1088    pmulhrsw      m5,         m7
1089
1090    packuswb      m4,         m5
1091    movu          [r0 + 336], m4
1092
1093    ; mode 7 [row 4, 5]
1094
1095    pmaddubsw     m4,         m1,               [r3 + 13 * 16]
1096    pmulhrsw      m4,         m7
1097
1098    pmaddubsw     m5,         m1,               [r3 + 22 * 16]
1099    pmulhrsw      m5,         m7
1100
1101    packuswb      m4,         m5
1102    movu          [r0 + 352], m4
1103
1104    ; mode 6 [row 2]
1105
1106    pmaddubsw     m4,         m1,               [r3 + 7 * 16]
1107    pmulhrsw      m4,         m7
1108
1109    pxor           m5,         m5
1110
1111    packuswb      m4,         m5
1112    movh          [r0 + 272], m4
1113
1114    ; mode 3 [row 2, 3]
1115
1116    palignr       m1,         m0,               3
1117    palignr       m3,         m0,               4
1118
1119    punpcklbw     m2,         m1
1120    pmaddubsw     m5,         m2,               [r3 + 14 * 16]
1121    pmulhrsw      m5,         m7
1122
1123    punpcklbw     m1,         m3
1124    pmaddubsw     m6,         m1,               [r3 + 8 * 16]
1125    pmulhrsw      m6,         m7
1126
1127    packuswb      m5,         m6
1128    movu          [r0 + 80],  m5
1129
1130    ; mode 6 [row 7]
1131
1132    movhps        [r0 + 312], m5
1133
1134    ; mode 6 [row 5]
1135
1136    movh          [r0 + 296], m5
1137
1138    ; mode 4 [calculate and store row 4, 5]
1139
1140    pmaddubsw     m4,         m1,               [r3 + 9 * 16]
1141    pmulhrsw      m4,         m7
1142
1143    pmaddubsw     m5,         m1,               [r3 + 30 * 16]
1144    pmulhrsw      m5,         m7
1145
1146    packuswb      m4,         m5
1147    movu          [r0 + 160], m4
1148
1149    ; mode 5 [row 4, 5]
1150
1151    pmaddubsw     m4,         m2,               [r3 + 21 * 16]
1152    pmulhrsw      m4,         m7
1153
1154    pmaddubsw     m5,         m1,               [r3 + 6 * 16]
1155    pmulhrsw      m5,         m7
1156
1157    packuswb      m4,         m5
1158    movu          [r0 + 224], m4
1159
1160    ; mode 6 [row 4, 5]
1161
1162    pmaddubsw     m5,         m2,               [r3 + 1 * 16]
1163    pmulhrsw      m5,         m7
1164
1165    pxor           m6,        m6
1166
1167    packuswb      m5,         m6
1168    movh          [r0 + 288], m5
1169
1170    ; mode 6 [row 6, 7]
1171
1172    pmaddubsw     m5,         m2,               [r3 + 27 * 16]
1173    pmulhrsw      m5,         m7
1174
1175    pxor          m6,         m6
1176
1177    packuswb      m5,         m6
1178    movh          [r0 + 304], m5
1179
1180    ; mode 5 [calculate row 6]
1181
1182    pmaddubsw     m6,         m1,               [r3 + 23 * 16]
1183    pmulhrsw      m6,         m7
1184
1185    ; mode 3 [row 4, 5]
1186
1187    palignr       m1,         m0,               5
1188
1189    punpcklbw     m3,         m1
1190    pmaddubsw     m4,         m3,               [r3 + 2 * 16]
1191    pmulhrsw      m4,         m7
1192
1193    pmaddubsw     m5,         m3,               [r3 + 28 * 16]
1194    pmulhrsw      m5,         m7
1195
1196    packuswb      m4,         m5
1197    movu          [r0 + 96],  m4
1198
1199    ; mode 4 [calculate row 7]
1200
1201    pmaddubsw     m5,         m3,               [r3 + 19 * 16]
1202    pmulhrsw      m5,         m7
1203
1204    ; mode 5 [calculate row 6]
1205
1206    pmaddubsw     m4,         m3,               [r3 + 8 * 16]
1207    pmulhrsw      m4,         m7
1208
1209    packuswb      m6,         m4
1210    movu          [r0 + 240], m6
1211
1212    ; mode 3 [row 6, 7]
1213
1214    palignr       m2,         m0,               6
1215    palignr       m3,         m0,               7
1216
1217    punpcklbw     m1,         m2
1218    pmaddubsw     m4,         m1,               [r3 + 22 * 16]
1219    pmulhrsw      m4,         m7
1220
1221    punpcklbw     m2,         m3
1222    pmaddubsw     m2,         [r3 + 16 * 16]
1223    pmulhrsw      m2,         m7
1224
1225    packuswb      m4,         m2
1226    movu          [r0 + 112], m4
1227
1228    ; mode 4 [calculate row 7]
1229
1230    pmaddubsw     m2,         m1,               [r3 + 8 * 16]
1231    pmulhrsw      m2,         m7
1232
1233    ; mode 4 [store row 6 and 7]
1234
1235    packuswb      m5,         m2
1236    movu          [r0 + 176], m5
1237
1238    ; mode 4 [row 2, 3]
1239
1240    palignr       m1,         m0,               1
1241    palignr       m2,         m0,               2
1242    palignr       m3,         m0,               3
1243
1244    punpcklbw     m1,         m2
1245    pmaddubsw     m4,         m1,               [r3 + 31 * 16]
1246    pmulhrsw      m4,         m7
1247
1248    punpcklbw     m2,         m3
1249    pmaddubsw     m5,         m2,               [r3 + 20 * 16]
1250    pmulhrsw      m5,         m7
1251
1252    packuswb      m4,         m5
1253    movu          [r0 + 144], m4
1254
1255    ; mode 5 [row 2, 3]
1256
1257    pmaddubsw     m4,         m1,               [r3 + 19 * 16]
1258    pmulhrsw      m4,         m7
1259
1260    pmaddubsw     m5,         m2,               [r3 + 4 * 16]
1261    pmulhrsw      m5,         m7
1262
1263    packuswb      m4,         m5
1264    movu          [r0 + 208], m4
1265
1266    ; mode 7 [row 6, 7]
1267
1268    pmaddubsw     m4,         m1,               [r3 + 31 * 16]
1269    pmulhrsw      m4,         m7
1270
1271    pmaddubsw     m5,         m2,               [r3 + 8 * 16]
1272    pmulhrsw      m5,         m7
1273
1274    packuswb      m4,         m5
1275    movu          [r0 + 368], m4
1276
1277    ; mode 10
1278
1279    pshufb       m1,          m0,          [tab_Si]
1280    movu         [r0 + 512],  m1
1281    movu         [r0 + 528],  m1
1282    movu         [r0 + 544],  m1
1283    movu         [r0 + 560],  m1
1284
1285    pxor         m0,          m0
1286
1287    pshufb       m1,          m1,          m0
1288    punpcklbw    m1,          m0
1289
1290    movu         m2,          [r1]
1291
1292    pshufb       m3,          m2,          m0
1293    punpcklbw    m3,          m0
1294
1295    psrldq       m4,          m2,          1
1296    punpcklbw    m4,          m0
1297
1298    movu         m2,          [r1 + 9]
1299    punpcklbw    m2,          m0
1300
1301    psubw        m4,          m3
1302    psubw        m2,          m3
1303
1304    psraw        m4,          1
1305    psraw        m2,          1
1306
1307    paddw        m4,          m1
1308    paddw        m2,          m1
1309
1310    packuswb     m4,          m2
1311
1312    pextrb       [r0 + 512],  m4,          0
1313    pextrb       [r0 + 520],  m4,          1
1314    pextrb       [r0 + 528],  m4,          2
1315    pextrb       [r0 + 536],  m4,          3
1316    pextrb       [r0 + 544],  m4,          4
1317    pextrb       [r0 + 552],  m4,          5
1318    pextrb       [r0 + 560],  m4,          6
1319    pextrb       [r0 + 568],  m4,          7
1320
1321    ; mode 11 [row 0, 1]
1322
1323    movu         m0,         [r1 + 16]
1324    pinsrb       m0,         [r1], 0
1325    palignr      m1,         m0,          1
1326    punpcklbw    m2,         m0,          m1
1327
1328    pmaddubsw    m3,         m2,          [r3 + 30 * 16]
1329    pmulhrsw     m3,         m7
1330
1331    pmaddubsw    m4,         m2,          [r3 + 28 * 16]
1332    pmulhrsw     m4,         m7
1333
1334    packuswb     m3,         m4
1335    movu         [r0 + 576], m3
1336
1337    ; mode 11 [row 2, 3]
1338
1339    pmaddubsw    m3,         m2,          [r3 + 26 * 16]
1340    pmulhrsw     m3,         m7
1341
1342    pmaddubsw    m4,         m2,          [r3 + 24 * 16]
1343    pmulhrsw     m4,         m7
1344
1345    packuswb     m3,         m4
1346    movu         [r0 + 592], m3
1347
1348    ; mode 11 [row 4, 5]
1349
1350    pmaddubsw    m3,         m2,          [r3 + 22 * 16]
1351    pmulhrsw     m3,         m7
1352
1353    pmaddubsw    m4,         m2,          [r3 + 20 * 16]
1354    pmulhrsw     m4,         m7
1355
1356    packuswb     m5,         m3,         m4
1357    movu         [r0 + 608], m5
1358
1359    ; mode 12 [row 0, 1]
1360
1361    pmaddubsw    m4,         m2,          [r3 + 27 * 16]
1362    pmulhrsw     m4,         m7
1363
1364    packuswb     m4,         m3
1365    movu         [r0 + 640], m4
1366
1367    ; mode 11 [row 6, 7]
1368
1369    pmaddubsw    m3,         m2,          [r3 + 18 * 16]
1370    pmulhrsw     m3,         m7
1371
1372    pmaddubsw    m4,         m2,          [r3 + 16 * 16]
1373    pmulhrsw     m4,         m7
1374
1375    packuswb     m3,         m4
1376    movu         [r0 + 624], m3
1377
1378    ; mode 12 [row 2, 3]
1379
1380    pmaddubsw    m3,         m2,          [r3 + 17 * 16]
1381    pmulhrsw     m3,         m7
1382
1383    pmaddubsw    m4,         m2,          [r3 + 12 * 16]
1384    pmulhrsw     m4,         m7
1385
1386    packuswb     m3,         m4
1387    movu         [r0 + 656], m3
1388
1389    ; mode 12 [row 4, 5]
1390
1391    pmaddubsw    m3,         m2,          [r3 + 7 * 16]
1392    pmulhrsw     m3,         m7
1393
1394    pmaddubsw    m4,         m2,          [r3 + 2 * 16]
1395    pmulhrsw     m4,         m7
1396
1397    packuswb     m3,         m4
1398    movu         [r0 + 672], m3
1399
1400    ; mode 12 [row 6, 7]
1401
1402    pslldq       m3,         m2,          2
1403    pinsrb       m3,         [r1 + 0],    1
1404    pinsrb       m3,         [r1 + 6],    0
1405
1406    pmaddubsw    m4,         m3,          [r3 + 29 * 16]
1407    pmulhrsw     m4,         m7
1408
1409    pmaddubsw    m5,         m3,          [r3 + 24 * 16]
1410    pmulhrsw     m5,         m7
1411
1412    packuswb     m4,         m5
1413    movu         [r0 + 688], m4
1414
1415    ; mode 13 [row 0, 1]
1416
1417    pmaddubsw    m4,         m2,          [r3 + 23 * 16]
1418    pmulhrsw     m4,         m7
1419
1420    pmaddubsw    m5,         m2,          [r3 + 14 * 16]
1421    pmulhrsw     m5,         m7
1422
1423    packuswb     m4,         m5
1424    movu         [r0 + 704], m4
1425
1426    ; mode 13 [row 2, 3]
1427
1428    pmaddubsw    m4,         m2,          [r3 + 5 * 16]
1429    pmulhrsw     m4,         m7
1430
1431    pinsrb       m3,         [r1 + 4],    0
1432    pmaddubsw    m5,         m3,          [r3 + 28 * 16]
1433    pmulhrsw     m5,         m7
1434
1435    packuswb     m4,         m5
1436    movu         [r0 + 720], m4
1437
1438    ; mode 13 [row 4, 5]
1439
1440    pmaddubsw    m4,         m3,          [r3 + 19 * 16]
1441    pmulhrsw     m4,         m7
1442
1443    pmaddubsw    m5,         m3,          [r3 + 10 * 16]
1444    pmulhrsw     m5,         m7
1445
1446    packuswb     m4,         m5
1447    movu         [r0 + 736], m4
1448
1449    ; mode 13 [row 6, 7]
1450
1451    pmaddubsw    m4,         m3,          [r3 + 1 * 16]
1452    pmulhrsw     m4,         m7
1453
1454    pslldq       m5,         m3,          2
1455    pinsrb       m5,         [r1 + 4],    1
1456    pinsrb       m5,         [r1 + 7],    0
1457
1458    pmaddubsw    m5,         [r3 + 24 * 16]
1459    pmulhrsw     m5,         m7
1460
1461    packuswb     m4,         m5
1462    movu         [r0 + 752], m4
1463
1464    ; mode 14 [row 0, 1]
1465
1466    pmaddubsw    m4,         m2,          [r3 + 19 * 16]
1467    pmulhrsw     m4,         m7
1468
1469    pmaddubsw    m5,         m2,          [r3 + 6 * 16]
1470    pmulhrsw     m5,         m7
1471
1472    packuswb     m4,         m5
1473    movu         [r0 + 768], m4
1474
1475    ; mode 14 [row 2, 3]
1476
1477    pinsrb       m3,         [r1 + 2],    0
1478
1479    pmaddubsw    m4,         m3,          [r3 + 25 * 16]
1480    pmulhrsw     m4,         m7
1481
1482    pmaddubsw    m5,         m3,          [r3 + 12 * 16]
1483    pmulhrsw     m5,         m7
1484
1485    packuswb     m4,         m5
1486    movu         [r0 + 784], m4
1487
1488    ; mode 14 [row 4, 5]
1489
1490    pslldq       m1,         m3,          2
1491    pinsrb       m1,         [r1 + 2],    1
1492    pinsrb       m1,         [r1 + 5],    0
1493
1494    pmaddubsw    m4,         m1,          [r3 + 31 * 16]
1495    pmulhrsw     m4,         m7
1496
1497    pmaddubsw    m5,         m1,          [r3 + 18 * 16]
1498    pmulhrsw     m5,         m7
1499
1500    packuswb     m4,         m5
1501    movu         [r0 + 800], m4
1502
1503    ; mode 14 [row 6, 7]
1504
1505    pmaddubsw    m4,         m1,          [r3 + 5 * 16]
1506    pmulhrsw     m4,         m7
1507
1508    pslldq       m1,         2
1509    pinsrb       m1,         [r1 + 5],    1
1510    pinsrb       m1,         [r1 + 7],    0
1511
1512    pmaddubsw    m5,         m1,          [r3 + 24 * 16]
1513    pmulhrsw     m5,         m7
1514
1515    packuswb     m4,         m5
1516    movu         [r0 + 816], m4
1517
1518    ; mode 15 [row 0, 1]
1519
1520    pmaddubsw    m4,         m2,          [r3 + 15 * 16]
1521    pmulhrsw     m4,         m7
1522
1523    pmaddubsw    m5,         m3,          [r3 + 30 * 16]
1524    pmulhrsw     m5,         m7
1525
1526    packuswb     m4,         m5
1527    movu         [r0 + 832], m4
1528
1529    ; mode 15 [row 2, 3]
1530
1531    pmaddubsw    m4,         m3,          [r3 + 13 * 16]
1532    pmulhrsw     m4,         m7
1533
1534    pslldq       m1,         m3,          2
1535    pinsrb       m1,         [r1 + 2],    1
1536    pinsrb       m1,         [r1 + 4],    0
1537
1538    pmaddubsw    m5,         m1,          [r3 + 28 * 16]
1539    pmulhrsw     m5,         m7
1540
1541    packuswb     m4,         m5
1542    movu         [r0 + 848], m4
1543
1544    ; mode 15 [row 4, 5]
1545
1546    pmaddubsw    m4,         m1,          [r3 + 11 * 16]
1547    pmulhrsw     m4,         m7
1548
1549    pslldq       m1,         2
1550    pinsrb       m1,         [r1 + 4],    1
1551    pinsrb       m1,         [r1 + 6],    0
1552
1553    pmaddubsw    m5,         m1,          [r3 + 26 * 16]
1554    pmulhrsw     m5,         m7
1555
1556    packuswb     m4,         m5
1557    movu         [r0 + 864], m4
1558
1559    ; mode 15 [row 6, 7]
1560
1561    pmaddubsw    m4,         m1,          [r3 + 9 * 16]
1562    pmulhrsw     m4,         m7
1563
1564    pslldq       m1,         2
1565    pinsrb       m1,         [r1 + 6],    1
1566    pinsrb       m1,         [r1 + 8],    0
1567
1568    pmaddubsw    m1,          [r3 + 24 * 16]
1569    pmulhrsw     m1,         m7
1570
1571    packuswb     m4,         m1
1572    movu         [r0 + 880], m4
1573
1574    ; mode 16 [row 0, 1]
1575
1576    pmaddubsw    m4,         m2,          [r3 + 11 * 16]
1577    pmulhrsw     m4,         m7
1578
1579    pmaddubsw    m5,         m3,          [r3 + 22 * 16]
1580    pmulhrsw     m5,         m7
1581
1582    packuswb     m4,         m5
1583    movu         [r0 + 896], m4
1584
1585    ; mode 16 [row 2, 3]
1586
1587    pmaddubsw    m4,         m3,          [r3 + 1 * 16]
1588    pmulhrsw     m4,         m7
1589
1590    pslldq       m3,         2
1591    pinsrb       m3,         [r1 + 2],    1
1592    pinsrb       m3,         [r1 + 3],    0
1593
1594    pmaddubsw    m5,         m3,          [r3 + 12 * 16]
1595    pmulhrsw     m5,         m7
1596
1597    packuswb     m4,         m5
1598    movu         [r0 + 912], m4
1599
1600    ; mode 16 [row 4, 5]
1601
1602    pslldq       m3,         2
1603    pinsrb       m3,         [r1 + 3],    1
1604    pinsrb       m3,         [r1 + 5],    0
1605
1606    pmaddubsw    m4,         m3,          [r3 + 23 * 16]
1607    pmulhrsw     m4,         m7
1608
1609    pmaddubsw    m5,         m3,          [r3 + 2 * 16]
1610    pmulhrsw     m5,         m7
1611
1612    packuswb     m4,         m5
1613    movu         [r0 + 928], m4
1614
1615    ; mode 16 [row 6, 7]
1616
1617    pslldq       m3,         2
1618    pinsrb       m3,         [r1 + 5],    1
1619    pinsrb       m3,         [r1 + 6],    0
1620
1621    pmaddubsw    m4,         m3,          [r3 + 13 * 16]
1622    pmulhrsw     m4,         m7
1623
1624    pslldq       m3,         2
1625    pinsrb       m3,         [r1 + 6],    1
1626    pinsrb       m3,         [r1 + 8],    0
1627
1628    pmaddubsw    m3,         [r3 + 24 * 16]
1629    pmulhrsw     m3,         m7
1630
1631    packuswb     m4,         m3
1632    movu         [r0 + 944], m4
1633
1634    ; mode 17 [row 0, 1]
1635
1636    pmaddubsw    m4,         m2,          [r3 + 6 * 16]
1637    pmulhrsw     m4,         m7
1638
1639    pslldq       m2,         2
1640    pinsrb       m2,         [r1 + 0],    1
1641    pinsrb       m2,         [r1 + 1],    0
1642
1643    pmaddubsw    m3,         m2,          [r3 + 12 * 16]
1644    pmulhrsw     m3,         m7
1645
1646    packuswb     m4,         m3
1647    movu         [r0 + 960], m4
1648
1649    ; mode 17 [row 2, 3]
1650
1651    pslldq       m2,         2
1652    pinsrb       m2,         [r1 + 1],    1
1653    pinsrb       m2,         [r1 + 2],    0
1654
1655    pmaddubsw    m4,         m2,          [r3 + 18 * 16]
1656    pmulhrsw     m4,         m7
1657
1658    pslldq       m2,         2
1659    pinsrb       m2,         [r1 + 2],    1
1660    pinsrb       m2,         [r1 + 4],    0
1661
1662    pmaddubsw    m3,         m2,          [r3 + 24 * 16]
1663    pmulhrsw     m3,         m7
1664
1665    packuswb     m4,         m3
1666    movu         [r0 + 976], m4
1667
1668    ; mode 17 [row 4, 5]
1669
1670    pslldq       m2,         2
1671    pinsrb       m2,         [r1 + 4],    1
1672    pinsrb       m2,         [r1 + 5],    0
1673
1674    pmaddubsw    m4,         m2,          [r3 + 30 * 16]
1675    pmulhrsw     m4,         m7
1676
1677    pmaddubsw    m3,         m2,          [r3 + 4 * 16]
1678    pmulhrsw     m3,         m7
1679
1680    packuswb     m4,         m3
1681    movu         [r0 + 992], m4
1682
1683    ; mode 17 [row 6, 7]
1684
1685    pslldq       m2,          2
1686    pinsrb       m2,          [r1 + 5],    1
1687    pinsrb       m2,          [r1 + 6],    0
1688
1689    pmaddubsw    m4,          m2,          [r3 + 10 * 16]
1690    pmulhrsw     m4,          m7
1691
1692    pslldq       m2,          2
1693    pinsrb       m2,          [r1 + 6],    1
1694    pinsrb       m2,          [r1 + 7],    0
1695
1696    pmaddubsw    m3,          m2,          [r3 + 16 * 16]
1697    pmulhrsw     m3,          m7
1698
1699    packuswb     m4,          m3
1700    movu         [r0 + 1008], m4
1701
1702    ; mode 18 [row 0, 1, 2, 3, 4, 5, 6, 7]
1703
1704    movh          m1,          [r2]
1705
1706    pslldq        m2,          m1,         1
1707    pinsrb        m2,          [r2 + 1 + 16],   0
1708    punpcklqdq    m1,          m2
1709    movu          [r0 + 1024], m1
1710
1711    pslldq        m2,          1
1712    pinsrb        m2,          [r2 + 2 + 16],   0
1713
1714    pslldq        m0,          m2,          1
1715    pinsrb        m0,          [r2 + 3 + 16],   0
1716    punpcklqdq    m2,          m0
1717    movu          [r0 + 1040], m2
1718
1719    pslldq        m0,          1
1720    pinsrb        m0,          [r2 + 4 + 16],   0
1721
1722    pslldq        m2,          m0,              1
1723    pinsrb        m2,          [r2 + 5 + 16],   0
1724    punpcklqdq    m0,          m2
1725    movu          [r0 + 1056], m0
1726
1727    pslldq        m2,          1
1728    pinsrb        m2,          [r2 + 6 + 16],   0
1729
1730    pslldq        m0,           m2,             1
1731    pinsrb        m0,          [r2 + 7 + 16],   0
1732    punpcklqdq    m2,          m0
1733    movu          [r0 + 1072], m2
1734
1735    ; mode 19 [row 0, 1]
1736
1737    movu         m0,          [r1]
1738    palignr      m1,          m0,          1
1739    punpcklbw    m0,          m1
1740
1741    pmaddubsw    m1,          m0,          [r3 + 6 * 16]
1742    pmulhrsw     m1,          m7
1743
1744    pslldq       m2,          m0,          2
1745    pinsrb       m2,          [r1],        1
1746    pinsrb       m2,          [r1 + 1 + 16], 0
1747
1748    pmaddubsw    m3,          m2,          [r3 + 12 * 16]
1749    pmulhrsw     m3,          m7
1750
1751    packuswb     m1,          m3
1752    movu         [r0 + 1088], m1
1753
1754    ; mode 19 [row 2, 3]
1755
1756    pslldq       m2,          2
1757    pinsrb       m2,          [r1 + 1 + 16], 1
1758    pinsrb       m2,          [r1 + 2 + 16], 0
1759
1760    pmaddubsw    m4,          m2,          [r3 + 18 * 16]
1761    pmulhrsw     m4,          m7
1762
1763    pslldq       m2,          2
1764    pinsrb       m2,          [r1 + 2 + 16],    1
1765    pinsrb       m2,          [r1 + 4 + 16],    0
1766
1767    pmaddubsw    m5,          m2,          [r3 + 24 * 16]
1768    pmulhrsw     m5,          m7
1769
1770    packuswb     m4,          m5
1771    movu         [r0 + 1104], m4
1772
1773    ; mode 19 [row 4, 5]
1774
1775    pslldq       m2,          2
1776    pinsrb       m2,          [r1 + 4 + 16], 1
1777    pinsrb       m2,          [r1 + 5 + 16], 0
1778
1779    pmaddubsw    m4,          m2,          [r3 + 30 * 16]
1780    pmulhrsw     m4,          m7
1781
1782    pmaddubsw    m5,          m2,          [r3 + 4 * 16]
1783    pmulhrsw     m5,          m7
1784
1785    packuswb     m4,          m5
1786    movu         [r0 + 1120], m4
1787
1788    ; mode 19 [row 6, 7]
1789
1790    pslldq       m2,          2
1791    pinsrb       m2,          [r1 + 5 + 16], 1
1792    pinsrb       m2,          [r1 + 6 + 16], 0
1793
1794    pmaddubsw    m4,          m2,          [r3 + 10 * 16]
1795    pmulhrsw     m4,          m7
1796
1797    pslldq       m2,          2
1798    pinsrb       m2,          [r1 + 6 + 16], 1
1799    pinsrb       m2,          [r1 + 7 + 16], 0
1800
1801    pmaddubsw    m2,          [r3 + 16 * 16]
1802    pmulhrsw     m2,          m7
1803
1804    packuswb     m4,          m2
1805    movu         [r0 + 1136], m4
1806
1807    ; mode 20 [row 0, 1]
1808
1809    pmaddubsw    m3,          m0,          [r3 + 11 * 16]
1810    pmulhrsw     m3,          m7
1811
1812    pslldq       m1,          m0,          2
1813    pinsrb       m1,          [r1 + 0],    1
1814    pinsrb       m1,          [r1 + 2 + 16], 0
1815
1816    pmaddubsw    m4,          m1,          [r3 + 22 * 16]
1817    pmulhrsw     m4,          m7
1818
1819    packuswb     m3,          m4
1820    movu         [r0 + 1152], m3
1821
1822    ; mode 20 [row 2, 3]
1823
1824    pmaddubsw    m3,          m1,          [r3 + 1 * 16]
1825    pmulhrsw     m3,          m7
1826
1827    pslldq       m2,          m1,          2
1828    pinsrb       m2,          [r1 + 2 + 16], 1
1829    pinsrb       m2,          [r1 + 3 + 16], 0
1830
1831    pmaddubsw    m4,          m2,          [r3 + 12 * 16]
1832    pmulhrsw     m4,          m7
1833
1834    packuswb     m3,          m4
1835    movu         [r0 + 1168], m3
1836
1837    ; mode 20 [row 4, 5]
1838
1839    pslldq       m2,          2
1840    pinsrb       m2,          [r1 + 3 + 16], 1
1841    pinsrb       m2,          [r1 + 5 + 16], 0
1842
1843    pmaddubsw    m3,          m2,          [r3 + 23 * 16]
1844    pmulhrsw     m3,          m7
1845
1846    pmaddubsw    m4,          m2,          [r3 + 2 * 16]
1847    pmulhrsw     m4,          m7
1848
1849    packuswb     m3,          m4
1850    movu         [r0 + 1184], m3
1851
1852    ; mode 20 [row 6, 7]
1853
1854    pslldq       m2,          2
1855    pinsrb       m2,          [r1 + 5 + 16], 1
1856    pinsrb       m2,          [r1 + 6 + 16], 0
1857
1858    pmaddubsw    m3,          m2,          [r3 + 13 * 16]
1859    pmulhrsw     m3,          m7
1860
1861    pslldq       m2,          2
1862    pinsrb       m2,          [r1 + 6 + 16], 1
1863    pinsrb       m2,          [r1 + 8 + 16], 0
1864
1865    pmaddubsw    m4,          m2,          [r3 + 24 * 16]
1866    pmulhrsw     m4,          m7
1867
1868    packuswb     m3,          m4
1869    movu         [r0 + 1200], m3
1870
1871    ; mode 21 [row 0, 1]
1872
1873    pmaddubsw    m2,          m0,          [r3 + 15 * 16]
1874    pmulhrsw     m2,          m7
1875
1876    pmaddubsw    m3,          m1,          [r3 + 30 * 16]
1877    pmulhrsw     m3,          m7
1878
1879    packuswb     m2,          m3
1880    movu         [r0 + 1216], m2
1881
1882    ; mode 21 [row 2, 3]
1883
1884    pmaddubsw    m2,          m1,          [r3 + 13 * 16]
1885    pmulhrsw     m2,          m7
1886
1887    pslldq       m3,          m1,          2
1888    pinsrb       m3,          [r1 + 2 + 16], 1
1889    pinsrb       m3,          [r1 + 4 + 16], 0
1890
1891    pmaddubsw    m4,          m3,          [r3 + 28 * 16]
1892    pmulhrsw     m4,          m7
1893
1894    packuswb     m2,          m4
1895    movu         [r0 + 1232], m2
1896
1897    ; mode 21 [row 4, 5]
1898
1899    pmaddubsw    m2,          m3,          [r3 + 11 * 16]
1900    pmulhrsw     m2,          m7
1901
1902    pslldq       m3,          2
1903    pinsrb       m3,          [r1 + 4 + 16], 1
1904    pinsrb       m3,          [r1 + 6 + 16], 0
1905
1906    pmaddubsw    m4,          m3,          [r3 + 26 * 16]
1907    pmulhrsw     m4,          m7
1908
1909    packuswb     m2,          m4
1910    movu         [r0 + 1248], m2
1911
1912    ; mode 21 [row 6, 7]
1913
1914    pmaddubsw    m2,          m3,          [r3 + 9 * 16]
1915    pmulhrsw     m2,          m7
1916
1917    pslldq       m3,          2
1918    pinsrb       m3,          [r1 + 6 + 16], 1
1919    pinsrb       m3,          [r1 + 8 + 16], 0
1920
1921    pmaddubsw    m4,          m3,          [r3 + 24 * 16]
1922    pmulhrsw     m4,          m7
1923
1924    packuswb     m2,          m4
1925    movu         [r0 + 1264], m2
1926
1927    ; mode 22 [row 0, 1]
1928
1929    pmaddubsw    m2,          m0,          [r3 + 19 * 16]
1930    pmulhrsw     m2,          m7
1931
1932    pmaddubsw    m4,          m0,          [r3 + 6 * 16]
1933    pmulhrsw     m4,          m7
1934
1935    packuswb     m2,          m4
1936    movu         [r0 + 1280], m2
1937
1938    ; mode 22 [row 2, 3]
1939
1940    pmaddubsw    m2,          m1,          [r3 + 25 * 16]
1941    pmulhrsw     m2,          m7
1942
1943    pmaddubsw    m3,          m1,          [r3 + 12 * 16]
1944    pmulhrsw     m3,          m7
1945
1946    packuswb     m2,          m3
1947    movu         [r0 + 1296], m2
1948
1949    ; mode 22 [row 4, 5]
1950
1951    pslldq       m1,          2
1952    pinsrb       m1,          [r1 + 5 + 16], 0
1953    pinsrb       m1,          [r1 + 2 + 16], 1
1954
1955    pmaddubsw    m2,          m1,          [r3 + 31 * 16]
1956    pmulhrsw     m2,          m7
1957
1958    pmaddubsw    m3,          m1,          [r3 + 18 * 16]
1959    pmulhrsw     m3,          m7
1960
1961    packuswb     m2,          m3
1962    movu         [r0 + 1312], m2
1963
1964    ; mode 22 [row 6, 7]
1965
1966    pmaddubsw    m2,          m1,          [r3 + 5 * 16]
1967    pmulhrsw     m2,          m7
1968
1969    pslldq       m1,          2
1970    pinsrb       m1,          [r1 + 5 + 16], 1
1971    pinsrb       m1,          [r1 + 7 + 16], 0
1972
1973    pmaddubsw    m1,          [r3 + 24 * 16]
1974    pmulhrsw     m1,          m7
1975
1976    packuswb     m2,          m1
1977    movu         [r0 + 1328], m2
1978
1979    ; mode 23 [row 0, 1]
1980
1981    pmaddubsw    m2,          m0,          [r3 + 23 * 16]
1982    pmulhrsw     m2,          m7
1983
1984    pmaddubsw    m3,          m0,          [r3 + 14 * 16]
1985    pmulhrsw     m3,          m7
1986
1987    packuswb     m2,          m3
1988    movu         [r0 + 1344], m2
1989
1990    ; mode 23 [row 2, 3]
1991
1992    pmaddubsw    m2,          m0,          [r3 + 5 * 16]
1993    pmulhrsw     m2,          m7
1994
1995    pslldq       m1,          m0,          2
1996    pinsrb       m1,          [r1], 1
1997    pinsrb       m1,          [r1 + 4 + 16], 0
1998
1999    pmaddubsw    m3,          m1,          [r3 + 28 * 16]
2000    pmulhrsw     m3,          m7
2001
2002    packuswb     m2,          m3
2003    movu         [r0 + 1360], m2
2004
2005    ; mode 23 [row 4, 5]
2006
2007    pmaddubsw    m2,          m1,          [r3 + 19 * 16]
2008    pmulhrsw     m2,          m7
2009
2010    pmaddubsw    m3,          m1,          [r3 + 10 * 16]
2011    pmulhrsw     m3,          m7
2012
2013    packuswb     m2,          m3
2014    movu         [r0 + 1376], m2
2015
2016    ; mode 23 [row 6, 7]
2017
2018    pmaddubsw    m2,          m1,          [r3 + 1 * 16]
2019    pmulhrsw     m2,          m7
2020
2021    pslldq       m3,          m1,          2
2022    pinsrb       m3,          [r1 + 4 + 16], 1
2023    pinsrb       m3,          [r1 + 7 + 16], 0
2024
2025    pmaddubsw    m3,          [r3 + 24 * 16]
2026    pmulhrsw     m3,          m7
2027
2028    packuswb     m2,          m3
2029    movu         [r0 + 1392], m2
2030
2031    ; mode 24 [row 0, 1]
2032
2033    pmaddubsw    m2,          m0,          [r3 + 27 * 16]
2034    pmulhrsw     m2,          m7
2035
2036    pmaddubsw    m5,          m0,          [r3 + 22 * 16]
2037    pmulhrsw     m5,          m7
2038
2039    packuswb     m2,          m5
2040    movu         [r0 + 1408], m2
2041
2042    ; mode 24 [row 2, 3]
2043
2044    pmaddubsw    m2,          m0,          [r3 + 17 * 16]
2045    pmulhrsw     m2,          m7
2046
2047    pmaddubsw    m3,          m0,          [r3 + 12 * 16]
2048    pmulhrsw     m3,          m7
2049
2050    packuswb     m2,          m3
2051    movu         [r0 + 1424], m2
2052
2053    ; mode 24 [row 4, 5]
2054
2055    pmaddubsw    m2,          m0,          [r3 + 7 * 16]
2056    pmulhrsw     m2,          m7
2057
2058    pmaddubsw    m3,          m0,          [r3 + 2 * 16]
2059    pmulhrsw     m3,          m7
2060
2061    packuswb     m2,          m3
2062    movu         [r0 + 1440], m2
2063
2064    ; mode 24 [row 6, 7]
2065
2066    pinsrb       m1,          [r1 + 6 + 16], 0
2067
2068    pmaddubsw    m2,          m1,          [r3 + 29 * 16]
2069    pmulhrsw     m2,          m7
2070
2071    pmaddubsw    m1,          [r3 + 24 * 16]
2072    pmulhrsw     m1,          m7
2073
2074    packuswb     m2,          m1
2075    movu         [r0 + 1456], m2
2076
2077    ; mode 25 [row 0, 1]
2078
2079    pmaddubsw    m2,          m0,          [r3 + 30 * 16]
2080    pmulhrsw     m2,          m7
2081
2082    pmaddubsw    m1,          m0,          [r3 + 28 * 16]
2083    pmulhrsw     m1,          m7
2084
2085    packuswb     m2,          m1
2086    movu         [r0 + 1472], m2
2087
2088    ; mode 25 [row 2, 3]
2089
2090    pmaddubsw    m2,          m0,          [r3 + 26 * 16]
2091    pmulhrsw     m2,          m7
2092
2093    pmaddubsw    m1,          m0,          [r3 + 24 * 16]
2094    pmulhrsw     m1,          m7
2095
2096    packuswb     m2,          m1
2097    movu         [r0 + 1488], m2
2098
2099    ; mode 25 [row 4, 5]
2100
2101    pmaddubsw    m1,          m0,          [r3 + 20 * 16]
2102    pmulhrsw     m1,          m7
2103
2104    packuswb     m5,          m1
2105    movu         [r0 + 1504], m5
2106
2107    ; mode 25 [row 6, 7]
2108
2109    pmaddubsw    m2,          m0,          [r3 + 18 * 16]
2110    pmulhrsw     m2,          m7
2111
2112    pmaddubsw    m1,          m0,          [r3 + 16 * 16]
2113    pmulhrsw     m1,          m7
2114
2115    packuswb     m2,          m1
2116    movu         [r0 + 1520], m2
2117
2118    ; mode 26
2119
2120    movu         m0,          [r1 + 1]
2121
2122    pshufb       m1,          m0,          [tab_Si]
2123    movu         [r0 + 1536], m1
2124    movu         [r0 + 1552], m1
2125    movu         [r0 + 1568], m1
2126    movu         [r0 + 1584], m1
2127
2128    pxor         m5,          m5
2129
2130    pshufb       m1,          m1,          m5
2131    punpcklbw    m1,          m5
2132
2133    movu         m2,          [r1 + 16]
2134    pinsrb       m2,          [r1], 0
2135
2136    pshufb       m3,          m2,          m5
2137    punpcklbw    m3,          m5
2138
2139    psrldq       m4,          m2,          1
2140    punpcklbw    m4,          m5
2141
2142    movu         m2,          [r1 + 9 + 16]
2143    punpcklbw    m2,          m5
2144
2145    psubw        m4,          m3
2146    psubw        m2,          m3
2147
2148    psraw        m4,          1
2149    psraw        m2,          1
2150
2151    paddw        m4,          m1
2152    paddw        m2,          m1
2153
2154    packuswb     m4,          m2
2155
2156    pextrb       [r0 + 1536], m4,          0
2157    pextrb       [r0 + 1544], m4,          1
2158    pextrb       [r0 + 1552], m4,          2
2159    pextrb       [r0 + 1560], m4,          3
2160    pextrb       [r0 + 1568], m4,          4
2161    pextrb       [r0 + 1576], m4,          5
2162    pextrb       [r0 + 1584], m4,          6
2163    pextrb       [r0 + 1592], m4,          7
2164
2165    ; mode 27 [row 0, 1]
2166
2167    palignr      m6,          m0,          1
2168    punpcklbw    m4,          m0,          m6
2169
2170    pmaddubsw    m1,          m4,          [r3 + 2 * 16]
2171    pmulhrsw     m1,          m7
2172
2173    pmaddubsw    m2,          m4,          [r3 + 4 * 16]
2174    pmulhrsw     m2,          m7
2175
2176    packuswb     m1,          m2
2177    movu         [r0 + 1600], m1
2178
2179    ; mode 27 [row 2, 3]
2180
2181    pmaddubsw    m1,          m4,          [r3 + 6 * 16]
2182    pmulhrsw     m1,          m7
2183
2184    pmaddubsw    m2,          m4,          [r3 + 8 * 16]
2185    pmulhrsw     m2,          m7
2186
2187    packuswb     m1,          m2
2188    movu         [r0 + 1616], m1
2189
2190    ; mode 27 [row 4, 5]
2191
2192    pmaddubsw    m3,          m4,          [r3 + 10 * 16]
2193    pmulhrsw     m3,          m7
2194
2195    pmaddubsw    m2,          m4,          [r3 + 12 * 16]
2196    pmulhrsw     m2,          m7
2197
2198    packuswb     m1,          m3,          m2
2199    movu         [r0 + 1632], m1
2200
2201    ; mode 27 [row 6, 7]
2202
2203    pmaddubsw    m1,          m4,          [r3 + 14 * 16]
2204    pmulhrsw     m1,          m7
2205
2206    pmaddubsw    m2,          m4,          [r3 + 16 * 16]
2207    pmulhrsw     m2,          m7
2208
2209    packuswb     m1,          m2
2210    movu         [r0 + 1648], m1
2211
2212    ; mode 28 [row 0, 1]
2213
2214    pmaddubsw    m1,          m4,          [r3 + 5 * 16]
2215    pmulhrsw     m1,          m7
2216
2217    packuswb     m1,          m3
2218    movu         [r0 + 1664], m1
2219
2220    ; mode 28 [row 2, 3]
2221
2222    pmaddubsw    m1,          m4,          [r3 + 15 * 16]
2223    pmulhrsw     m1,          m7
2224
2225    pmaddubsw    m2,          m4,          [r3 + 20 * 16]
2226    pmulhrsw     m2,          m7
2227
2228    packuswb     m1,          m2
2229    movu         [r0 + 1680], m1
2230
2231    ; mode 28 [row 4, 5]
2232
2233    pmaddubsw    m1,          m4,          [r3 + 25 * 16]
2234    pmulhrsw     m1,          m7
2235
2236    pmaddubsw    m2,          m4,          [r3 + 30 * 16]
2237    pmulhrsw     m2,          m7
2238
2239    packuswb     m1,          m2
2240    movu         [r0 + 1696], m1
2241
2242    ; mode 28 [row 6, 7]
2243
2244    palignr      m1,          m0,          2
2245    punpcklbw    m5,          m6,          m1
2246
2247    pmaddubsw    m2,          m5,          [r3 + 3 * 16]
2248    pmulhrsw     m2,          m7
2249
2250    pmaddubsw    m3,          m5,          [r3 + 8 * 16]
2251    pmulhrsw     m3,          m7
2252
2253    packuswb     m2,          m3
2254    movu         [r0 + 1712], m2
2255
2256    ; mode 29 [row 0, 1]
2257
2258    pmaddubsw    m2,          m4,          [r3 + 9 * 16]
2259    pmulhrsw     m2,          m7
2260
2261    pmaddubsw    m3,          m4,          [r3 + 18 * 16]
2262    pmulhrsw     m3,          m7
2263
2264    packuswb     m2,          m3
2265    movu         [r0 + 1728], m2
2266
2267    ; mode 29 [row 2, 3]
2268
2269    pmaddubsw    m2,          m4,          [r3 + 27 * 16]
2270    pmulhrsw     m2,          m7
2271
2272    pmaddubsw    m3,          m5,          [r3 + 4 * 16]
2273    pmulhrsw     m3,          m7
2274
2275    packuswb     m2,          m3
2276    movu         [r0 + 1744], m2
2277
2278    ; mode 29 [row 4, 5]
2279
2280    pmaddubsw    m2,          m5,          [r3 + 13 * 16]
2281    pmulhrsw     m2,          m7
2282
2283    pmaddubsw    m3,          m5,          [r3 + 22 * 16]
2284    pmulhrsw     m3,          m7
2285
2286    packuswb     m2,          m3
2287    movu         [r0 + 1760], m2
2288
2289    ; mode 29 [row 6, 7]
2290
2291    pmaddubsw    m2,          m5,          [r3 + 31 * 16]
2292    pmulhrsw     m2,          m7
2293
2294    palignr      m6,          m0,          3
2295    punpcklbw    m1,          m6
2296
2297    pmaddubsw    m3,          m1,          [r3 + 8 * 16]
2298    pmulhrsw     m3,          m7
2299
2300    packuswb     m2,          m3
2301    movu         [r0 + 1776], m2
2302
2303    ; mode 32 [row 2]
2304
2305    movh         [r0 + 1936], m2
2306
2307    ; mode 30 [row 0, 1]
2308
2309    pmaddubsw    m2,          m4,          [r3 + 13 * 16]
2310    pmulhrsw     m2,          m7
2311
2312    pmaddubsw    m3,          m4,          [r3 + 26 * 16]
2313    pmulhrsw     m3,          m7
2314
2315    packuswb     m2,          m3
2316    movu         [r0 + 1792], m2
2317
2318    ; mode 30 [row 2, 3]
2319
2320    pmaddubsw    m2,          m5,          [r3 + 7 * 16]
2321    pmulhrsw     m2,          m7
2322
2323    pmaddubsw    m3,          m5,          [r3 + 20 * 16]
2324    pmulhrsw     m3,          m7
2325
2326    packuswb     m2,          m3
2327    movu         [r0 + 1808], m2
2328
2329    ; mode 33 [row 1]
2330
2331    movhps       [r0 + 1992], m2
2332
2333    ; mode 30 [row 4, 5]
2334
2335    pmaddubsw    m2,          m1,          [r3 + 1 * 16]
2336    pmulhrsw     m2,          m7
2337
2338    pmaddubsw    m3,          m1,          [r3 + 14 * 16]
2339    pmulhrsw     m3,          m7
2340
2341    packuswb     m2,          m3
2342    movu         [r0 + 1824], m2
2343
2344    ; mode 33 [row 2]
2345
2346    movhps       [r0 + 2000], m2
2347
2348    ; mode 30 [row 6, 7]
2349
2350    pmaddubsw    m2,          m1,          [r3 + 27 * 16]
2351    pmulhrsw     m2,          m7
2352
2353    psrldq       m0,          4
2354    punpcklbw    m6,          m0
2355
2356    pmaddubsw    m3,          m6,          [r3 + 8 * 16]
2357    pmulhrsw     m3,          m7
2358
2359    packuswb     m2,          m3
2360    movu         [r0 + 1840], m2
2361
2362    ; mode 33 [row 3]
2363
2364    movhps       [r0 + 2008], m2
2365
2366    ; mode 31 [row 0, 1]
2367
2368    pmaddubsw    m2,          m4,          [r3 + 17 * 16]
2369    pmulhrsw     m2,          m7
2370
2371    pmaddubsw    m3,          m5,          [r3 + 2 * 16]
2372    pmulhrsw     m3,          m7
2373
2374    packuswb     m2,          m3
2375    movu         [r0 + 1856], m2
2376
2377    ; mode 31 [row 2, 3]
2378
2379    pmaddubsw    m2,          m5,          [r3 + 19 * 16]
2380    pmulhrsw     m2,          m7
2381
2382    pmaddubsw    m3,          m1,          [r3 + 4 * 16]
2383    pmulhrsw     m3,          m7
2384
2385    packuswb     m2,          m3
2386    movu         [r0 + 1872], m2
2387
2388    ; mode 31 [row 4, 5]
2389
2390    pmaddubsw    m2,          m1,          [r3 + 21 * 16]
2391    pmulhrsw     m2,          m7
2392
2393    pmaddubsw    m3,          m6,          [r3 + 6 * 16]
2394    pmulhrsw     m3,          m7
2395
2396    packuswb     m2,          m3
2397    movu         [r0 + 1888], m2
2398
2399    ; mode 31 [row 6, 7]
2400
2401    pmaddubsw    m2,          m6,          [r3 + 23 * 16]
2402    pmulhrsw     m2,          m7
2403
2404    movu         m3,          [r1 + 6]
2405    punpcklbw    m0,          m3
2406
2407    pmaddubsw    m3,          m0,          [r3 + 8 * 16]
2408    pmulhrsw     m3,          m7
2409
2410    packuswb     m2,          m3
2411    movu         [r0 + 1904], m2
2412
2413    ; mode 32 [row 0, 1]
2414
2415    pmaddubsw    m2,          m4,          [r3 + 21 * 16]
2416    pmulhrsw     m2,          m7
2417
2418    pmaddubsw    m3,          m5,          [r3 + 10 * 16]
2419    pmulhrsw     m3,          m7
2420
2421    packuswb     m2,          m3
2422    movu         [r0 + 1920], m2
2423
2424    ; mode 32 [row 3]
2425
2426    pmaddubsw    m2,          m1,          [r3 + 20 * 16]
2427    pmulhrsw     m2,          m7
2428
2429    pxor         m3,          m3
2430
2431    packuswb     m2,          m3
2432    movh         [r0 + 1944], m2
2433
2434    ; mode 32 [row 4, 5]
2435
2436    pmaddubsw    m2,          m6,          [r3 + 9 * 16]
2437    pmulhrsw     m2,          m7
2438
2439    pmaddubsw    m3,          m6,          [r3 + 30 * 16]
2440    pmulhrsw     m3,          m7
2441
2442    packuswb     m2,          m3
2443    movu         [r0 + 1952], m2
2444
2445    ; mode 33 [row 4, 5]
2446
2447    pmaddubsw    m2,          m0,          [r3 + 2 * 16]
2448    pmulhrsw     m2,          m7
2449
2450    pmaddubsw    m3,          m0,          [r3 + 28 * 16]
2451    pmulhrsw     m3,          m7
2452
2453    packuswb     m2,          m3
2454    movu         [r0 + 2016], m2
2455
2456    ; mode 32 [row 6]
2457
2458    pmaddubsw    m2,          m0,          [r3 + 19 * 16]
2459    pmulhrsw     m2,          m7
2460
2461    ; mode 32 [row 7]
2462
2463    movu         m0,          [r1 + 6]
2464    palignr      m3,          m0,          1
2465    punpcklbw    m0,          m3
2466
2467    pmaddubsw    m3,          m0,          [r3 + 8 * 16]
2468    pmulhrsw     m3,          m7
2469
2470    packuswb     m2,          m3
2471    movu         [r0 + 1968], m2
2472
2473    ; mode 33 [row 6, 7]
2474
2475    pmaddubsw    m2,          m0,          [r3 + 22 * 16]
2476    pmulhrsw     m2,          m7
2477
2478    movu         m0,          [r1 + 7]
2479    palignr      m3,          m0,          1
2480    punpcklbw    m0,          m3
2481
2482    pmaddubsw    m3,          m0,          [r3 + 16 * 16]
2483    pmulhrsw     m3,          m7
2484
2485    packuswb     m2,          m3
2486    movu         [r0 + 2032], m2
2487
2488    ; mode 33 [row 0]
2489
2490    pmaddubsw    m2,          m4,          [r3 + 26 * 16]
2491    pmulhrsw     m2,          m7
2492
2493    pxor         m3,          m3
2494
2495    packuswb     m2,          m3
2496    movh         [r0 + 1984], m2
2497
2498    ; mode 34 [row 0, 1, 2, 3, 4, 5, 6, 7]
2499
2500    movu         m0,          [r2 + 2]
2501    palignr      m1,          m0,          1
2502    punpcklqdq   m2,          m0,          m1
2503    movu         [r0 + 2048], m2
2504
2505    palignr      m1,          m0,          2
2506    palignr      m2,          m0,          3
2507    punpcklqdq   m1,          m2
2508    movu         [r0 + 2064], m1
2509
2510    palignr      m1,          m0,          4
2511    palignr      m2,          m0,          5
2512    punpcklqdq   m1,          m2
2513    movu         [r0 + 2080], m1
2514
2515    palignr      m1,          m0,          6
2516    palignr      m2,          m0,          7
2517    punpcklqdq   m1,          m2
2518    movu         [r0 + 2096], m1
2519RET
2520
2521;--------------------------------------------------------------------------------
2522; void all_angs_pred_16x16(pixel *dest, pixel *refPix, pixel *filtPix, int bLuma)
2523;--------------------------------------------------------------------------------
2524INIT_XMM sse4
2525cglobal all_angs_pred_16x16, 3,4,8
2526    ; mode 2
2527
2528    movu      m0,               [r2 + 2 + 32]
2529    movu      [r0 + 0 * 16],    m0
2530
2531    movu      m1,               m0
2532
2533    movu      m6,              [r2 + 18 + 32]
2534    palignr   m5,              m6,             m0,    1
2535    movu     [r0 + 1 * 16],    m5
2536
2537    movu      m4,               m5
2538
2539    palignr   m5,              m6,             m0,    2
2540    movu      [r0 + 2 * 16],   m5
2541    palignr   m5,              m6,             m0,    3
2542    movu      [r0 + 3 * 16],   m5
2543    palignr   m5,              m6,             m0,    4
2544    movu      [r0 + 4 * 16],   m5
2545    palignr   m5,              m6,             m0,    5
2546    movu      [r0 + 5 * 16],   m5
2547    palignr   m5,              m6,             m0,    6
2548    movu      [r0 + 6 * 16],   m5
2549    palignr   m5,              m6,             m0,    7
2550    movu      [r0 + 7 * 16],   m5
2551
2552    movu      m7,               m5
2553
2554    palignr   m5,              m6,             m0,    8
2555    movu      [r0 + 8 * 16],   m5
2556
2557    movu      m2,              m5
2558
2559    palignr   m5,              m6,             m0,    9
2560    movu      [r0 + 9 * 16],   m5
2561
2562    palignr   m3,              m6,             m0,    10
2563    movu      [r0 + 10 * 16],  m3
2564    palignr   m3,              m6,             m0,    11
2565    movu      [r0 + 11 * 16],  m3
2566    palignr   m3,              m6,             m0,    12
2567    movu      [r0 + 12 * 16],  m3
2568
2569    ; mode 3  [row 15]
2570    movu      [r0 + (3-2)*16*16 + 15 * 16], m3
2571
2572    palignr   m3,              m6,             m0,    13
2573    movu      [r0 + 13 * 16],   m3
2574    palignr   m3,              m6,             m0,    14
2575    movu      [r0 + 14 * 16],   m3
2576    palignr   m3,              m6,             m0,    15
2577    movu      [r0 + 15 * 16],   m3
2578
2579    ; mode 3 [row 0]
2580    lea           r3,    [ang_table]
2581    movu          m3,    [pw_1024]
2582    movu          m0,    [r2 + 1 + 32]
2583    punpcklbw     m0,    m1
2584
2585    ; mode 17 [row 8 - second half]
2586    pmaddubsw     m1,                   m0,    [r3 + 22 * 16]
2587    pmulhrsw      m1,                   m3
2588    packuswb      m1,                   m1
2589    movh          [r0 + 248 * 16 + 8],  m1
2590    ; mode 17 [row 8 - second half] end
2591
2592    pmaddubsw     m1,    m0,        [r3 + 26 * 16]
2593    pmulhrsw      m1,    m3
2594    punpcklbw     m7,    m2
2595    pmaddubsw     m2,    m7,        [r3 + 26 * 16]
2596    pmulhrsw      m2,    m3
2597    packuswb      m1,               m2
2598    movu          [r0 + 16 * 16],   m1
2599
2600    ;mode 6 [row 1]
2601    movu          [r0 + 65 * 16],   m1
2602
2603    ; mode 4 [row 0]
2604    pmaddubsw     m1,             m0,         [r3 + 21 * 16]
2605    pmulhrsw      m1,             m3
2606    pmaddubsw     m2,             m7,         [r3 + 21 * 16]
2607    pmulhrsw      m2,             m3
2608    packuswb      m1,             m2
2609    movu          [r0 + 32 * 16], m1
2610
2611    ; mode 5 [row 0]
2612    pmaddubsw     m1,             m0,         [r3 + 17 * 16]
2613    pmulhrsw      m1,             m3
2614    pmaddubsw     m2,             m7,         [r3 + 17 * 16]
2615    pmulhrsw      m2,             m3
2616    packuswb      m1,             m2
2617    movu          [r0 + 48 * 16], m1
2618
2619    ; mode 6 [row 0]
2620    pmaddubsw     m1,             m0,         [r3 + 13 * 16]
2621    pmulhrsw      m1,             m3
2622    pmaddubsw     m2,             m7,         [r3 + 13 * 16]
2623    pmulhrsw      m2,             m3
2624    packuswb      m1,             m2
2625    movu          [r0 + 64 * 16], m1
2626
2627    ; mode 7 [row 0]
2628    pmaddubsw     m1,             m0,        [r3 + 9 * 16]
2629    pmulhrsw      m1,             m3
2630    pmaddubsw     m2,             m7,        [r3 + 9 * 16]
2631    pmulhrsw      m2,             m3
2632    packuswb      m1,             m2
2633    movu          [r0 + 80 * 16], m1
2634
2635    ; mode 7 [row 1]
2636    pmaddubsw     m1,             m0,         [r3 + 18 * 16]
2637    pmulhrsw      m1,             m3
2638    pmaddubsw     m2,             m7,         [r3 + 18 * 16]
2639    pmulhrsw      m2,             m3
2640    packuswb      m1,             m2
2641    movu          [r0 + 81 * 16], m1
2642
2643    ; mode 7 [row 2]
2644    pmaddubsw     m1,             m0,         [r3 + 27 * 16]
2645    pmulhrsw      m1,             m3
2646    pmaddubsw     m2,             m7,         [r3 + 27 * 16]
2647    pmulhrsw      m2,             m3
2648    packuswb      m1,             m2
2649    movu          [r0 + 82 * 16], m1
2650
2651    ; mode 8 [row 0]
2652    pmaddubsw     m1,             m0,        [r3 + 5 * 16]
2653    pmulhrsw      m1,             m3
2654    pmaddubsw     m2,             m7,        [r3 + 5 * 16]
2655    pmulhrsw      m2,             m3
2656    packuswb      m1,             m2
2657    movu          [r0 + 96 * 16], m1
2658
2659    ; mode 8 [row 1]
2660    pmaddubsw     m1,             m0,         [r3 + 10 * 16]
2661    pmulhrsw      m1,             m3
2662    pmaddubsw     m2,             m7,         [r3 + 10 * 16]
2663    pmulhrsw      m2,             m3
2664    packuswb      m1,             m2
2665    movu          [r0 + 97 * 16], m1
2666
2667    ; mode 8 [row 2]
2668    pmaddubsw     m1,             m0,         [r3 + 15 * 16]
2669    pmulhrsw      m1,             m3
2670    pmaddubsw     m2,             m7,         [r3 + 15 * 16]
2671    pmulhrsw      m2,             m3
2672    packuswb      m1,             m2
2673    movu          [r0 + 98 * 16], m1
2674
2675    ; mode 8 [row 3]
2676    pmaddubsw     m1,             m0,         [r3 + 20 * 16]
2677    pmulhrsw      m1,             m3
2678    pmaddubsw     m2,             m7,         [r3 + 20 * 16]
2679    pmulhrsw      m2,             m3
2680    packuswb      m1,             m2
2681    movu          [r0 + 99 * 16], m1
2682
2683    ; mode 8 [row 4]
2684    pmaddubsw     m1,              m0,         [r3 + 25 * 16]
2685    pmulhrsw      m1,              m3
2686    pmaddubsw     m2,              m7,         [r3 + 25 * 16]
2687    pmulhrsw      m2,              m3
2688    packuswb      m1,              m2
2689    movu          [r0 + 100 * 16], m1
2690
2691    ; mode 8 [row 5]
2692    pmaddubsw     m1,              m0,         [r3 + 30 * 16]
2693    pmulhrsw      m1,              m3
2694    pmaddubsw     m2,              m7,         [r3 + 30 * 16]
2695    pmulhrsw      m2,              m3
2696    packuswb      m1,              m2
2697    movu          [r0 + 101 * 16], m1
2698
2699    ; mode 15 [row 13 - second half]
2700    pmaddubsw     m1,                  m0,     [r3 + 18 * 16]
2701    pmulhrsw      m1,                  m3
2702    packuswb      m1,                  m1
2703    movh          [r0 + 221 * 16 + 8], m1
2704    ; mode 15 [row 13 - second half] end
2705
2706    ; mode 15 [row 14 - second half]
2707    pmaddubsw     m1,                  m0,     [r3 + 1 * 16]
2708    pmulhrsw      m1,                  m3
2709    packuswb      m1,                  m1
2710    movh          [r0 + 222 * 16 + 8], m1
2711    ; mode 15 [row 14 - second half] end
2712
2713    ; mode 16 [row 10 - second half]
2714    pmaddubsw     m1,                  m0,    [r3 + 25 * 16]
2715    pmulhrsw      m1,                  m3
2716    packuswb      m1,                  m1
2717    movh          [r0 + 234 * 16 + 8], m1
2718    ; mode 16 [row 10 - second half] end
2719
2720    ; mode 16 [row 11 - second half]
2721    pmaddubsw     m1,                  m0,    [r3 + 4 * 16]
2722    pmulhrsw      m1,                  m3
2723    packuswb      m1,                  m1
2724    movh          [r0 + 235 * 16 + 8], m1
2725    ; mode 16 [row 11 - second half] end
2726
2727    ; mode 3 [row 1]
2728    movu          m6,    [r3 + 20 * 16]
2729    movu          m0,    [r2 + 2 + 32]
2730    punpcklbw     m0,    m4
2731
2732    ; mode 17 [row 7 - second half]
2733    pmaddubsw     m1,     m0,          [r3 + 16 * 16]
2734    pmulhrsw      m1,     m3
2735    packuswb      m1,                  m1
2736    movh          [r0 + 247 * 16 + 8], m1
2737
2738    ; mode 17 [row 7 - second half] end
2739    pmaddubsw     m1,             m0,          m6
2740    pmulhrsw      m1,             m3
2741    movu          m2,             [r2 + 10 + 32]
2742    punpcklbw     m2,             m5
2743    pmaddubsw     m4,             m2,          m6
2744    pmulhrsw      m4,             m3
2745    packuswb      m1,             m4
2746    movu          [r0 + 17 * 16], m1
2747
2748    ;mode 6 [row 3]
2749    movu          [r0 + 67 * 16], m1
2750
2751    ; mode 4 row [row 1]
2752    pmaddubsw     m1,             m0,         [r3 + 10 * 16]
2753    pmulhrsw      m1,             m3
2754    pmaddubsw     m4,             m2,         [r3 + 10 * 16]
2755    pmulhrsw      m4,             m3
2756    packuswb      m1,             m4
2757    movu          [r0 + 33 * 16], m1
2758
2759    ; mode 4 row [row 2]
2760    pmaddubsw     m1,             m0,         [r3 + 31 * 16]
2761    pmulhrsw      m1,             m3
2762    pmaddubsw     m4,             m2,         [r3 + 31 * 16]
2763    pmulhrsw      m4,             m3
2764    packuswb      m1,             m4
2765    movu          [r0 + 34 * 16], m1
2766
2767    ; mode 7 [row 6]
2768    movu          [r0 + 86 * 16], m1
2769
2770    ; mode 5 row [row 1]
2771    pmaddubsw     m1,             m0,        [r3 + 2 * 16]
2772    pmulhrsw      m1,             m3
2773    pmaddubsw     m4,             m2,        [r3 + 2 * 16]
2774    pmulhrsw      m4,             m3
2775    packuswb      m1,             m4
2776    movu          [r0 + 49 * 16], m1
2777
2778    ; mode 5 row [row 2]
2779    pmaddubsw     m1,             m0,         [r3 + 19 * 16]
2780    pmulhrsw      m1,             m3
2781    pmaddubsw     m4,             m2,         [r3 + 19 * 16]
2782    pmulhrsw      m4,             m3
2783    packuswb      m1,             m4
2784    movu          [r0 + 50 * 16], m1
2785
2786    ; mode 6 [row 2]
2787    pmaddubsw     m1,             m0,        [r3 + 7 * 16]
2788    pmulhrsw      m1,             m3
2789    pmaddubsw     m4,             m2,        [r3 + 7 * 16]
2790    pmulhrsw      m4,             m3
2791    packuswb      m1,             m4
2792    movu          [r0 + 66 * 16], m1
2793
2794    ; mode 7 [row 3]
2795    pmaddubsw     m1,             m0,        [r3 + 4 * 16]
2796    pmulhrsw      m1,             m3
2797    pmaddubsw     m4,             m2,        [r3 + 4 * 16]
2798    pmulhrsw      m4,             m3
2799    packuswb      m1,             m4
2800    movu          [r0 + 83 * 16], m1
2801
2802    ; mode 7 [row 4]
2803    pmaddubsw     m1,             m0,         [r3 + 13 * 16]
2804    pmulhrsw      m1,             m3
2805    pmaddubsw     m4,             m2,         [r3 + 13 * 16]
2806    pmulhrsw      m4,             m3
2807    packuswb      m1,             m4
2808    movu          [r0 + 84 * 16], m1
2809
2810    ; mode 8 [row 8]
2811    movu          [r0 + 104 * 16], m1
2812
2813    ; mode 7 [row 5]
2814    pmaddubsw     m1,             m0,         [r3 + 22 * 16]
2815    pmulhrsw      m1,             m3
2816    pmaddubsw     m4,             m2,         [r3 + 22 * 16]
2817    pmulhrsw      m4,             m3
2818    packuswb      m1,             m4
2819    movu          [r0 + 85 * 16], m1
2820
2821    ; mode 8 [row 6]
2822    pmaddubsw     m1,              m0,      [r3 + 3 * 16]
2823    pmulhrsw      m1,              m3
2824    pmaddubsw     m4,              m2,      [r3 + 3 * 16]
2825    pmulhrsw      m4,              m3
2826    packuswb      m1,              m4
2827    movu          [r0 + 102 * 16], m1
2828
2829    ; mode 8 [row 7]
2830    pmaddubsw     m1,              m0,        [r3 + 8 * 16]
2831    pmulhrsw      m1,              m3
2832    pmaddubsw     m4,              m2,        [r3 + 8 * 16]
2833    pmulhrsw      m4,              m3
2834    packuswb      m1,              m4
2835    movu          [r0 + 103 * 16], m1
2836
2837    ; mode 8 [row 9]
2838    pmaddubsw     m1,              m0,         [r3 + 18 * 16]
2839    pmulhrsw      m1,              m3
2840    pmaddubsw     m4,              m2,         [r3 + 18 * 16]
2841    pmulhrsw      m4,              m3
2842    packuswb      m1,              m4
2843    movu          [r0 + 105 * 16], m1
2844
2845    ; mode 8 [row 10]
2846    pmaddubsw     m1,              m0,         [r3 + 23 * 16]
2847    pmulhrsw      m1,              m3
2848    pmaddubsw     m4,              m2,         [r3 + 23 * 16]
2849    pmulhrsw      m4,              m3
2850    packuswb      m1,              m4
2851    movu          [r0 + 106 * 16], m1
2852
2853    ; mode 8 [row 11]
2854    pmaddubsw     m1,              m0,         [r3 + 28 * 16]
2855    pmulhrsw      m1,              m3
2856    pmaddubsw     m4,              m2,         [r3 + 28 * 16]
2857    pmulhrsw      m4,              m3
2858    packuswb      m1,              m4
2859    movu          [r0 + 107 * 16], m1
2860
2861    ; mode 3 [row 2]
2862    movu          m0,    [r2 + 3 + 32]
2863    movd          m1,    [r2 + 19 + 32]
2864    palignr       m1,    m0,          1
2865    punpcklbw     m0,    m1
2866
2867    ; mode 17 [row 6 - second half]
2868    pmaddubsw     m1,                  m0,     [r3 + 10 * 16]
2869    pmulhrsw      m1,                  m3
2870    packuswb      m1,                  m1
2871    movh          [r0 + 246 * 16 + 8], m1
2872    ; mode 17 [row 6 - second half] end
2873
2874    pmaddubsw     m1,             m0,          [r3 + 14 * 16]
2875    pmulhrsw      m1,             m3
2876    movu          m2,             [r2 + 11 + 32]
2877    movd          m4,             [r2 + 27 + 32]
2878    palignr       m4,             m2,          1
2879    punpcklbw     m2,             m4
2880    pmaddubsw     m4,             m2,          [r3 + 14 * 16]
2881    pmulhrsw      m4,             m3
2882    packuswb      m1,             m4
2883    movu          [r0 + 18 * 16], m1
2884
2885    ; mode 6 [row 5]
2886    movu          [r0 + 69 * 16], m1
2887
2888    ; mode 4 row [row 3]
2889    pmaddubsw     m1,             m0,         [r3 + 20 * 16]
2890    pmulhrsw      m1,             m3
2891    pmaddubsw     m4,             m2,         [r3 + 20 * 16]
2892    pmulhrsw      m4,             m3
2893    packuswb      m1,             m4
2894    movu          [r0 + 35 * 16], m1
2895
2896    ; mode 5 row [row 3]
2897    pmaddubsw     m1,             m0,        [r3 + 4 * 16]
2898    pmulhrsw      m1,             m3
2899    pmaddubsw     m4,             m2,        [r3 + 4 * 16]
2900    pmulhrsw      m4,             m3
2901    packuswb      m1,             m4
2902    movu          [r0 + 51 * 16], m1
2903
2904    ; mode 5 row [row 4]
2905    pmaddubsw     m1,             m0,         [r3 + 21 * 16]
2906    pmulhrsw      m1,             m3
2907    pmaddubsw     m4,             m2,         [r3 + 21 * 16]
2908    pmulhrsw      m4,             m3
2909    packuswb      m1,             m4
2910    movu          [r0 + 52 * 16], m1
2911
2912    ; mode 6 [row 4]
2913    pmaddubsw     m1,             m0,        [r3 + 1 * 16]
2914    pmulhrsw      m1,             m3
2915    pmaddubsw     m4,             m2,        [r3 + 1 * 16]
2916    pmulhrsw      m4,             m3
2917    packuswb      m1,             m4
2918    movu          [r0 + 68 * 16], m1
2919
2920    ; mode 6 [row 6]
2921    pmaddubsw     m1,             m0,      [r3 + 27 * 16]
2922    pmulhrsw      m1,             m3
2923    pmaddubsw     m4,             m2,      [r3 + 27 * 16]
2924    pmulhrsw      m4,             m3
2925    packuswb      m1,             m4
2926    movu          [r0 + 70 * 16], m1
2927
2928    ; mode 7 [row 7]
2929    pmaddubsw     m1,             m0,        [r3 + 8 * 16]
2930    pmulhrsw      m1,             m3
2931    pmaddubsw     m4,             m2,        [r3 + 8 * 16]
2932    pmulhrsw      m4,             m3
2933    packuswb      m1,             m4
2934    movu          [r0 + 87 * 16], m1
2935
2936    ; mode 7 [row 8]
2937    pmaddubsw     m1,             m0,         [r3 + 17 * 16]
2938    pmulhrsw      m1,             m3
2939    pmaddubsw     m4,             m2,         [r3 + 17 * 16]
2940    pmulhrsw      m4,             m3
2941    packuswb      m1,             m4
2942    movu          [r0 + 88 * 16], m1
2943
2944    ; mode 7 [row 9]
2945    pmaddubsw     m1,             m0,       [r3 + 26 * 16]
2946    pmulhrsw      m1,             m3
2947    pmaddubsw     m4,             m2,       [r3 + 26 * 16]
2948    pmulhrsw      m4,             m3
2949    packuswb      m1,             m4
2950    movu          [r0 + 89 * 16], m1
2951
2952    ; mode 8 [row 12]
2953    pmaddubsw     m1,              m0,        [r3 + 1 * 16]
2954    pmulhrsw      m1,              m3
2955    pmaddubsw     m4,              m2,        [r3 + 1 * 16]
2956    pmulhrsw      m4,              m3
2957    packuswb      m1,              m4
2958    movu          [r0 + 108 * 16], m1
2959
2960    ; mode 8 [row 13]
2961    pmaddubsw     m1,              m0,      [r3 + 6 * 16]
2962    pmulhrsw      m1,              m3
2963    pmaddubsw     m4,              m2,      [r3 + 6 * 16]
2964    pmulhrsw      m4,              m3
2965    packuswb      m1,              m4
2966    movu          [r0 + 109 * 16], m1
2967
2968    ; mode 8 [row 14]
2969    pmaddubsw     m1,              m0,         [r3 + 11 * 16]
2970    pmulhrsw      m1,              m3
2971    pmaddubsw     m4,              m2,         [r3 + 11 * 16]
2972    pmulhrsw      m4,              m3
2973    packuswb      m1,              m4
2974    movu          [r0 + 110 * 16], m1
2975
2976    ; mode 8 [row 15]
2977    pmaddubsw     m1,              m0,         [r3 + 16 * 16]
2978    pmulhrsw      m1,              m3
2979    pmaddubsw     m4,              m2,         [r3 + 16 * 16]
2980    pmulhrsw      m4,              m3
2981    packuswb      m1,              m4
2982    movu          [r0 + 111 * 16], m1
2983
2984    ; mode 3 [row 3]
2985    movu          m0,              [r2 + 4 + 32]
2986    movd          m1,              [r2 + 20 + 32]
2987    palignr       m1,              m0,          1
2988    punpcklbw     m0,              m1
2989
2990    ; mode 17 [row 4 - second half]
2991    pmaddubsw     m1,                  m0,    [r3 + 30 * 16]
2992    pmulhrsw      m1,                  m3
2993    packuswb      m1,                  m1
2994    movh          [r0 + 244 * 16 + 8], m1
2995    ; mode 17 [row 4 - second half] end
2996
2997    ; mode 17 [row 5 - second half]
2998    pmaddubsw     m1,                  m0,    [r3 + 4 * 16]
2999    pmulhrsw      m1,                  m3
3000    packuswb      m1,                  m1
3001    movh          [r0 + 245 * 16 + 8], m1
3002    ; mode 17 [row 5 - second half] end
3003
3004    pmaddubsw     m1,             m0,          [r3 + 8 * 16]
3005    pmulhrsw      m1,             m3
3006    movu          m2,             [r2 + 12 + 32]
3007    movd          m4,             [r2 + 28 + 32]
3008    palignr       m4,             m2,          1
3009    punpcklbw     m2,             m4
3010    pmaddubsw     m4,             m2,          [r3 + 8 * 16]
3011    pmulhrsw      m4,             m3
3012    packuswb      m1,             m4
3013    movu          [r0 + 19 * 16], m1
3014
3015    ; mode 6 [row 7]
3016    movu          [r0 + 71 * 16], m1
3017
3018    ; mode 4 row [row 4]
3019    pmaddubsw     m1,             m0,        [r3 + 9 * 16]
3020    pmulhrsw      m1,             m3
3021    pmaddubsw     m4,             m2,        [r3 + 9 * 16]
3022    pmulhrsw      m4,             m3
3023    packuswb      m1,             m4
3024    movu          [r0 + 36 * 16], m1
3025
3026    ; mode 4 row [row 5]
3027    pmaddubsw     m1,             m0,        [r3 + 30 * 16]
3028    pmulhrsw      m1,             m3
3029    pmaddubsw     m4,             m2,         [r3 + 30 * 16]
3030    pmulhrsw      m4,             m3
3031    packuswb      m1,             m4
3032    movu          [r0 + 37 * 16], m1
3033
3034    ; mode 7 row [row 13]
3035    movu          [r0 + 93 * 16], m1
3036
3037    ; mode 5 row [row 5]
3038    pmaddubsw     m1,             m0,        [r3 + 6 * 16]
3039    pmulhrsw      m1,             m3
3040    pmaddubsw     m4,             m2,        [r3 + 6 * 16]
3041    pmulhrsw      m4,             m3
3042    packuswb      m1,             m4
3043    movu          [r0 + 53 * 16], m1
3044
3045    ; mode 5 row [row 6]
3046    pmaddubsw     m1,             m0,         [r3 + 23 * 16]
3047    pmulhrsw      m1,             m3
3048    pmaddubsw     m4,             m2,         [r3 + 23 * 16]
3049    pmulhrsw      m4,             m3
3050    packuswb      m1,             m4
3051    movu          [r0 + 54 * 16], m1
3052
3053    ; mode 6 [row 8]
3054    pmaddubsw     m1,             m0,         [r3 + 21 * 16]
3055    pmulhrsw      m1,             m3
3056    pmaddubsw     m4,             m2,         [r3 + 21 * 16]
3057    pmulhrsw      m4,             m3
3058    packuswb      m1,             m4
3059    movu          [r0 + 72 * 16], m1
3060
3061    ; mode 7 [row 12]
3062    movu          [r0 + 92 * 16], m1
3063
3064    ; mode 7 [row 10]
3065    pmaddubsw     m1,    m0,      [r3 + 3 * 16]
3066    pmulhrsw      m1,    m3
3067    pmaddubsw     m4,    m2,      [r3 + 3 * 16]
3068    pmulhrsw      m4,    m3
3069    packuswb      m1,             m4
3070    movu          [r0 + 90 * 16], m1
3071
3072    ; mode 7 [row 11]
3073    pmaddubsw     m1,    m0,      [r3 + 12 * 16]
3074    pmulhrsw      m1,    m3
3075    pmaddubsw     m4,    m2,      [r3 + 12 * 16]
3076    pmulhrsw      m4,    m3
3077    packuswb      m1,             m4
3078    movu          [r0 + 91 * 16], m1
3079
3080    ; mode 3 [row 4]
3081    movu          m0,    [r2 + 5 + 32]
3082    movd          m1,    [r2 + 20 + 32]
3083    palignr       m1,    m0,         1
3084    punpcklbw     m0,    m1
3085
3086    ; mode 17 [row 3 - second half]
3087    pmaddubsw     m1,     m0,           [r3 + 24 * 16]
3088    pmulhrsw      m1,     m3
3089    packuswb      m1,                   m1
3090    movh          [r0 + 243 * 16 + 8],  m1
3091
3092    ; mode 17 [row 3 - second half] end
3093    pmaddubsw     m1,    m0,          [r3 + 2 * 16]
3094    pmulhrsw      m1,    m3
3095    movu          m2,    [r2 + 13 + 32]
3096    movd          m4,    [r2 + 29 + 32]
3097    palignr       m4,    m2,          1
3098    punpcklbw     m2,    m4
3099    pmaddubsw     m4,    m2,          [r3 + 2 * 16]
3100    pmulhrsw      m4,    m3
3101    packuswb      m1,             m4
3102    movu          [r0 + 20 * 16], m1
3103
3104    ;mode 6 [row 9]
3105    movu          [r0 + 73 * 16], m1
3106
3107    ; mode 4 row [row 6]
3108    movu          m6,    [r3 + 19 * 16]
3109    pmaddubsw     m1,    m0,      m6
3110    pmulhrsw      m1,    m3
3111    pmaddubsw     m4,    m2,      m6
3112    pmulhrsw      m4,    m3
3113    packuswb      m1,             m4
3114    movu          [r0 + 38 * 16], m1
3115
3116    ; mode 3 [row 5]
3117    pmaddubsw     m1,    m0,      [r3 + 28 * 16]
3118    pmulhrsw      m1,    m3
3119    pmaddubsw     m4,    m2,      [r3 + 28 * 16]
3120    pmulhrsw      m4,    m3
3121    packuswb      m1,             m4
3122    movu          [r0 + 21 * 16], m1
3123
3124    ;mode 6 [row 11]
3125    movu          [r0 + 75 * 16], m1
3126
3127    ; mode 5 row [row 7]
3128    pmaddubsw     m1,    m0,      [r3 + 8 * 16]
3129    pmulhrsw      m1,    m3
3130    pmaddubsw     m4,    m2,      [r3 + 8 * 16]
3131    pmulhrsw      m4,    m3
3132    packuswb      m1,             m4
3133    movu          [r0 + 55 * 16], m1
3134
3135    ; mode 5 row [row 8]
3136    pmaddubsw     m1,    m0,      [r3 + 25 * 16]
3137    pmulhrsw      m1,    m3
3138    pmaddubsw     m4,    m2,      [r3 + 25 * 16]
3139    pmulhrsw      m4,    m3
3140    packuswb      m1,             m4
3141    movu          [r0 + 56 * 16], m1
3142
3143    ; mode 6 [row 10]
3144    pmaddubsw     m1,    m0,      [r3 + 15 * 16]
3145    pmulhrsw      m1,    m3
3146    pmaddubsw     m4,    m2,      [r3 + 15 * 16]
3147    pmulhrsw      m4,    m3
3148    packuswb      m1,             m4
3149    movu          [r0 + 74 * 16], m1
3150
3151    ; mode 7 [row 14]
3152    pmaddubsw     m1,    m0,      [r3 + 7 * 16]
3153    pmulhrsw      m1,    m3
3154    pmaddubsw     m4,    m2,      [r3 + 7 * 16]
3155    pmulhrsw      m4,    m3
3156    packuswb      m1,             m4
3157    movu          [r0 + 94 * 16], m1
3158
3159    ; mode 7 [row 15]
3160    pmaddubsw     m1,    m0,      [r3 + 16 * 16]
3161    pmulhrsw      m1,    m3
3162    pmaddubsw     m4,    m2,      [r3 + 16 * 16]
3163    pmulhrsw      m4,    m3
3164    packuswb      m1,             m4
3165    movu          [r0 + 95 * 16], m1
3166
3167    ; mode 3 [row 6]
3168    movu          m0,    [r2 + 6 + 32]
3169    movd          m1,    [r2 + 22 + 32]
3170    palignr       m1,    m0,          1
3171    punpcklbw     m0,    m1
3172
3173    ; mode 17 [row 2 - second half]
3174    pmaddubsw     m1,     m0,          [r3 + 18 * 16]
3175    pmulhrsw      m1,     m3
3176    packuswb      m1,                   m1
3177    movh          [r0 + 242 * 16 + 8],  m1
3178    ; mode 17 [row 2 - second half] end
3179
3180    pmaddubsw     m1,    m0,          [r3 + 22 * 16]
3181    pmulhrsw      m1,    m3
3182    movu          m2,    [r2 + 14 + 32]
3183    movd          m4,    [r2 + 30 + 32]
3184    palignr       m4,    m2,          1
3185    punpcklbw     m2,    m4
3186    pmaddubsw     m4,    m2,          [r3 + 22 * 16]
3187    pmulhrsw      m4,    m3
3188    packuswb      m1,             m4
3189    movu          [r0 + 22 * 16], m1
3190
3191    ; mode 6 [row 13]
3192    movu          [r0 + 77 * 16], m1
3193
3194    ; mode 4 row [row 7]
3195    pmaddubsw     m1,    m0,      [r3 + 8 * 16]
3196    pmulhrsw      m1,    m3
3197    pmaddubsw     m4,    m2,      [r3 + 8 * 16]
3198    pmulhrsw      m4,    m3
3199    packuswb      m1,             m4
3200    movu          [r0 + 39 * 16], m1
3201
3202    ; mode 4 row [row 8]
3203    pmaddubsw     m1,    m0,       [r3 + 29 * 16]
3204    pmulhrsw      m1,    m3
3205    pmaddubsw     m4,    m2,       [r3 + 29 * 16]
3206    pmulhrsw      m4,    m3
3207    packuswb      m1,             m4
3208    movu          [r0 + 40 * 16], m1
3209
3210    ; mode 5 row [row 9]
3211    pmaddubsw     m1,    m0,      [r3 + 10 * 16]
3212    pmulhrsw      m1,    m3
3213    pmaddubsw     m4,    m2,      [r3 + 10 * 16]
3214    pmulhrsw      m4,    m3
3215    packuswb      m1,             m4
3216    movu          [r0 + 57 * 16], m1
3217
3218    ; mode 5 row [row 10]
3219    pmaddubsw     m1,    m0,      [r3 + 27 * 16]
3220    pmulhrsw      m1,    m3
3221    pmaddubsw     m4,    m2,      [r3 + 27 * 16]
3222    pmulhrsw      m4,    m3
3223    packuswb      m1,             m4
3224    movu          [r0 + 58 * 16], m1
3225
3226    ; mode 6 [row 12]
3227    pmaddubsw     m1,    m0,      [r3 + 9 * 16]
3228    pmulhrsw      m1,    m3
3229    pmaddubsw     m4,    m2,      [r3 + 9 * 16]
3230    pmulhrsw      m4,    m3
3231    packuswb      m1,             m4
3232    movu          [r0 + 76 * 16], m1
3233
3234    ; mode 3 [row 7]
3235    movu          m0,    [r2 + 7 + 32]
3236    movd          m1,    [r2 + 27 + 32]
3237    palignr       m1,    m0,          1
3238    punpcklbw     m0,    m1
3239
3240    ; mode 17 [row 1 - second half]
3241    pmaddubsw     m1,     m0,           [r3 + 12 * 16]
3242    pmulhrsw      m1,     m3
3243    packuswb      m1,                   m1
3244    movh          [r0 + 241 * 16 + 8],  m1
3245    ; mode 17 [row 1 - second half] end
3246
3247    pmaddubsw     m1,    m0,          [r3 + 16 * 16]
3248    pmulhrsw      m1,    m3
3249    movu          m2,    [r2 + 15 + 32]
3250    movd          m4,    [r2 + 25 + 32]
3251    palignr       m4,    m2,          1
3252    punpcklbw     m2,    m4
3253    pmaddubsw     m4,    m2,          [r3 + 16 * 16]
3254    pmulhrsw      m4,    m3
3255    packuswb      m1,             m4
3256    movu          [r0 + 23 * 16], m1
3257
3258    ; mode 6 [row 15]
3259    movu          [r0 + 79 * 16], m1
3260
3261    ; mode 4 row [row 9]
3262    pmaddubsw     m1,    m0,      [r3 + 18 * 16]
3263    pmulhrsw      m1,    m3
3264    pmaddubsw     m4,    m2,      [r3 + 18 * 16]
3265    pmulhrsw      m4,    m3
3266    packuswb      m1,             m4
3267    movu          [r0 + 41 * 16], m1
3268
3269    ; mode 5 row [row 11]
3270    pmaddubsw     m1,    m0,      [r3 + 12 * 16]
3271    pmulhrsw      m1,    m3
3272    pmaddubsw     m4,    m2,      [r3 + 12 * 16]
3273    pmulhrsw      m4,    m3
3274    packuswb      m1,             m4
3275    movu          [r0 + 59 * 16], m1
3276
3277    ; mode 5 row [row 12]
3278    pmaddubsw     m1,    m0,      [r3 + 29 * 16]
3279    pmulhrsw      m1,    m3
3280    pmaddubsw     m4,    m2,      [r3 + 29 * 16]
3281    pmulhrsw      m4,    m3
3282    packuswb      m1,             m4
3283    movu          [r0 + 60 * 16], m1
3284
3285    ; mode 6 [row 14]
3286    pmaddubsw     m1,    m0,      [r3 + 3 * 16]
3287    pmulhrsw      m1,    m3
3288    pmaddubsw     m4,    m2,      [r3 + 3 * 16]
3289    pmulhrsw      m4,    m3
3290    packuswb      m1,             m4
3291    movu          [r0 + 78 * 16], m1
3292
3293    ; mode 3 [row 8]
3294    movu          m0,    [r2 + 8 + 32]
3295    movd          m1,    [r2 + 24 + 32]
3296    palignr       m1,    m0,          1
3297    punpcklbw     m0,    m1
3298    pmaddubsw     m1,    m0,          [r3 + 10 * 16]
3299    pmulhrsw      m1,    m3
3300    movu          m2,    [r2 + 16 + 32]
3301    psrldq        m4,    m2,         1
3302    pinsrb        m4,    [r2 + 32],  15
3303    punpcklbw     m2,    m4
3304    pmaddubsw     m4,    m2,          [r3 + 10 * 16]
3305    pmulhrsw      m4,    m3
3306    packuswb      m1,             m4
3307    movu          [r0 + 24 * 16], m1
3308
3309    ; mode 4 row [row 10]
3310    pmaddubsw     m1,    m0,      [r3 + 7 * 16]
3311    pmulhrsw      m1,    m3
3312    pmaddubsw     m4,    m2,      [r3 + 7 * 16]
3313    pmulhrsw      m4,    m3
3314    packuswb      m1,             m4
3315    movu          [r0 + 42 * 16], m1
3316
3317    ; mode 4 row [row 11]
3318    pmaddubsw     m1,    m0,      [r3 + 28 * 16]
3319    pmulhrsw      m1,    m3
3320    pmaddubsw     m4,    m2,      [r3 + 28 * 16]
3321    pmulhrsw      m4,    m3
3322    packuswb      m1,             m4
3323    movu          [r0 + 43 * 16], m1
3324
3325    ; mode 5 row [row 13]
3326    pmaddubsw     m1,    m0,      [r3 + 14 * 16]
3327    pmulhrsw      m1,    m3
3328    pmaddubsw     m4,    m2,      [r3 + 14 * 16]
3329    pmulhrsw      m4,    m3
3330    packuswb      m1,             m4
3331    movu          [r0 + 61 * 16], m1
3332
3333    ; mode 5 row [row 14]
3334    pmaddubsw     m1,    m0,      [r3 + 31 * 16]
3335    pmulhrsw      m1,    m3
3336    pmaddubsw     m4,    m2,      [r3 + 31 * 16]
3337    pmulhrsw      m4,    m3
3338    packuswb      m1,             m4
3339    movu          [r0 + 62 * 16], m1
3340
3341    ; mode 3 [row 9]
3342    movu          m0,    [r2 +  9 + 32]
3343    movd          m1,    [r2 + 16 + 32]
3344    palignr       m1,    m0,         1
3345    punpcklbw     m0,    m1
3346    pmaddubsw     m1,    m0,         [r3 + 4 * 16]
3347    pmulhrsw      m1,    m3
3348    movu          m2,    [r2 + 17 + 32]
3349    movd          m4,    [r2 + 33 + 32]
3350    palignr       m4,    m2,         1
3351    punpcklbw     m2,    m4
3352    pmaddubsw     m4,    m2,         [r3 + 4 * 16]
3353    pmulhrsw      m4,    m3
3354    packuswb      m1,             m4
3355    movu          [r0 + 25 * 16], m1
3356
3357    ; mode 4 row [row 12]
3358    pmaddubsw     m1,    m0,      [r3 + 17 * 16]
3359    pmulhrsw      m1,    m3
3360    pmaddubsw     m4,    m2,      [r3 + 17 * 16]
3361    pmulhrsw      m4,    m3
3362    packuswb      m1,             m4
3363    movu          [r0 + 44 * 16], m1
3364
3365    ; mode 3 [row 10]
3366    pmaddubsw     m1,    m0,          [r3 + 30 * 16]
3367    pmulhrsw      m1,    m3
3368    pmaddubsw     m4,    m2,          [r3 + 30 * 16]
3369    pmulhrsw      m4,    m3
3370    packuswb      m1,             m4
3371    movu          [r0 + 26 * 16], m1
3372
3373    ; mode 5 row [row 15]
3374    pmaddubsw     m1,    m0,      [r3 + 16 * 16]
3375    pmulhrsw      m1,    m3
3376    pmaddubsw     m4,    m2,      [r3 + 16 * 16]
3377    pmulhrsw      m4,    m3
3378    packuswb      m1,             m4
3379    movu          [r0 + 63 * 16], m1
3380
3381    ; mode 3 [row 11]
3382    movu          m0,    [r2 + 10 + 32]
3383    movd          m1,    [r2 + 26 + 32]
3384    palignr       m1,    m0,          1
3385    punpcklbw     m0,    m1
3386    pmaddubsw     m1,    m0,          [r3 + 24 * 16]
3387    pmulhrsw      m1,    m3
3388    movu          m2,    [r2 + 18 + 32]
3389    movd          m4,    [r2 + 34 + 32]
3390    palignr       m4,    m2,         1
3391    punpcklbw     m2,    m4
3392    pmaddubsw     m4,    m2,         [r3 + 24 * 16]
3393    pmulhrsw      m4,    m3
3394    packuswb      m1,                 m4
3395    movu          [r0 + 27 * 16],     m1
3396
3397    ; mode 4 row [row 13]
3398    pmaddubsw     m1,    m0,      [r3 + 6 * 16]
3399    pmulhrsw      m1,    m3
3400    pmaddubsw     m4,    m2,      [r3 + 6 * 16]
3401    pmulhrsw      m4,    m3
3402    packuswb      m1,             m4
3403    movu          [r0 + 45 * 16], m1
3404
3405    ; mode 4 row [row 14]
3406    pmaddubsw     m1,    m0,      [r3 + 27 * 16]
3407    pmulhrsw      m1,    m3
3408    pmaddubsw     m4,    m2,      [r3 + 27 * 16]
3409    pmulhrsw      m4,    m3
3410    packuswb      m1,             m4
3411    movu          [r0 + 46 * 16], m1
3412
3413    ; mode 3 [row 12]
3414    movu          m0,    [r2 + 11 + 32]
3415    movd          m1,    [r2 + 27 + 32]
3416    palignr       m1,    m0,          1
3417    punpcklbw     m0,    m1
3418    pmaddubsw     m1,    m0,          [r3 + 18 * 16]
3419    pmulhrsw      m1,    m3
3420    movu          m2,    [r2 + 19 + 32]
3421    movd          m4,    [r2 + 35 + 32]
3422    palignr       m4,    m2,          1
3423    punpcklbw     m2,    m4
3424    pmaddubsw     m4,    m2,          [r3 + 18 * 16]
3425    pmulhrsw      m4,    m3
3426    packuswb      m1,             m4
3427    movu          [r0 + 28 * 16], m1
3428
3429    ; mode 4 row [row 15]
3430    pmaddubsw     m1,    m0,      [r3 + 16 * 16]
3431    pmulhrsw      m1,    m3
3432    pmaddubsw     m4,    m2,      [r3 + 16 * 16]
3433    pmulhrsw      m4,    m3
3434    packuswb      m1,             m4
3435    movu          [r0 + 47 * 16], m1
3436
3437    ; mode 3 [row 13]
3438    movu          m0,    [r2 + 12 + 32]
3439    movd          m1,    [r2 + 28 + 32]
3440    palignr       m1,    m0,          1
3441    punpcklbw     m0,    m1
3442    pmaddubsw     m1,    m0,          [r3 + 12 * 16]
3443    pmulhrsw      m1,    m3
3444    movu          m2,    [r2 + 20 + 32]
3445    movd          m4,    [r2 + 36 + 32]
3446    palignr       m4,    m2,          1
3447    punpcklbw     m2,    m4
3448    pmaddubsw     m4,    m2,          [r3 + 12 * 16]
3449    pmulhrsw      m4,    m3
3450    packuswb      m1,             m4
3451    movu          [r0 + 29 * 16], m1
3452
3453    ; mode 3 [row 14]
3454    movu          m0,    [r2 + 13 + 32]
3455    movd          m1,    [r2 + 29 + 32]
3456    palignr       m1,    m0,         1
3457    punpcklbw     m0,    m1
3458    pmaddubsw     m1,    m0,         [r3 + 6 * 16]
3459    pmulhrsw      m1,    m3
3460    movu          m2,    [r2 + 21 + 32]
3461    movd          m4,    [r2 + 37 + 32]
3462    palignr       m4,    m2,         1
3463    punpcklbw     m2,    m4
3464    pmaddubsw     m4,    m2,         [r3 + 6 * 16]
3465    pmulhrsw      m4,    m3
3466    packuswb      m1,                m4
3467    movu          [r0 + 30 * 16],    m1
3468
3469    ; mode 9
3470    movu          m0,    [r1 + 1 + 32]
3471    movd          m1,    [r1 + 17 + 32]
3472    palignr       m1,    m0,         1
3473
3474    ; mode 9 [row 15]
3475    movu          [r0 + 127 * 16],  m1
3476
3477    ; mode 9 [row 0]
3478    punpcklbw     m0,    m1
3479    pmaddubsw     m1,    m0,        [r3 + 2 * 16]
3480    pmulhrsw      m1,    m3
3481    movu          m7,    [r1 +  9 + 32]
3482    movd          m4,    [r2 + 25 + 32]
3483    palignr       m2,    m7,        1
3484    punpcklbw     m7,    m2
3485    pmaddubsw     m2,    m7,        [r3 + 2 * 16]
3486    pmulhrsw      m2,    m3
3487    packuswb      m1,               m2
3488    movu          [r0 + 112 * 16],  m1
3489
3490    ; mode 9 [row 1]
3491    pmaddubsw     m1,    m0,        [r3 + 4 * 16]
3492    pmulhrsw      m1,    m3
3493    pmaddubsw     m2,    m7,        [r3 + 4 * 16]
3494    pmulhrsw      m2,    m3
3495    packuswb      m1,               m2
3496    movu          [r0 + 113 * 16],  m1
3497
3498    ; mode 9 [row 2]
3499    pmaddubsw     m1,    m0,        [r3 + 6 * 16]
3500    pmulhrsw      m1,    m3
3501    pmaddubsw     m2,    m7,        [r3 + 6 * 16]
3502    pmulhrsw      m2,    m3
3503    packuswb      m1,               m2
3504    movu          [r0 + 114 * 16],  m1
3505
3506    ; mode 9 [row 3]
3507    pmaddubsw     m1,    m0,        [r3 + 8 * 16]
3508    pmulhrsw      m1,    m3
3509    pmaddubsw     m2,    m7,        [r3 + 8 * 16]
3510    pmulhrsw      m2,    m3
3511    packuswb      m1,               m2
3512    movu          [r0 + 115 * 16],  m1
3513
3514    ; mode 9 [row 4]
3515    pmaddubsw     m1,    m0,        [r3 + 10 * 16]
3516    pmulhrsw      m1,    m3
3517    pmaddubsw     m2,    m7,        [r3 + 10 * 16]
3518    pmulhrsw      m2,    m3
3519    packuswb      m1,               m2
3520    movu          [r0 + 116 * 16],  m1
3521
3522    ; mode 9 [row 5]
3523    pmaddubsw     m1,    m0,        [r3 + 12 * 16]
3524    pmulhrsw      m1,    m3
3525    pmaddubsw     m2,    m7,        [r3 + 12 * 16]
3526    pmulhrsw      m2,    m3
3527    packuswb      m1,               m2
3528    movu          [r0 + 117 * 16],  m1
3529
3530    ; mode 9 [row 6]
3531    pmaddubsw     m1,    m0,        [r3 + 14 * 16]
3532    pmulhrsw      m1,    m3
3533    pmaddubsw     m2,    m7,        [r3 + 14 * 16]
3534    pmulhrsw      m2,    m3
3535    packuswb      m1,               m2
3536    movu          [r0 + 118 * 16],  m1
3537
3538    ; mode 9 [row 7]
3539    pmaddubsw     m1,    m0,        [r3 + 16 * 16]
3540    pmulhrsw      m1,    m3
3541    pmaddubsw     m2,    m7,        [r3 + 16 * 16]
3542    pmulhrsw      m2,    m3
3543    packuswb      m1,               m2
3544    movu          [r0 + 119 * 16],  m1
3545
3546    ; mode 9 [row 8]
3547    pmaddubsw     m1,    m0,        [r3 + 18 * 16]
3548    pmulhrsw      m1,    m3
3549    pmaddubsw     m2,    m7,        [r3 + 18 * 16]
3550    pmulhrsw      m2,    m3
3551    packuswb      m1,               m2
3552    movu          [r0 + 120 * 16],  m1
3553
3554    ; mode 9 [row 9]
3555    pmaddubsw     m1,    m0,        [r3 + 20 * 16]
3556    pmulhrsw      m1,    m3
3557    pmaddubsw     m2,    m7,        [r3 + 20 * 16]
3558    pmulhrsw      m2,    m3
3559    packuswb      m1,               m2
3560    movu          [r0 + 121 * 16],  m1
3561
3562    ; mode 9 [row 10]
3563    pmaddubsw     m1,    m0,        [r3 + 22 * 16]
3564    pmulhrsw      m1,    m3
3565    pmaddubsw     m2,    m7,        [r3 + 22 * 16]
3566    pmulhrsw      m2,    m3
3567    packuswb      m1,               m2
3568    movu          [r0 + 122 * 16],  m1
3569
3570    ; mode 9 [row 11]
3571    pmaddubsw     m1,    m0,        [r3 + 24 * 16]
3572    pmulhrsw      m1,    m3
3573    pmaddubsw     m2,    m7,        [r3 + 24 * 16]
3574    pmulhrsw      m2,    m3
3575    packuswb      m1,               m2
3576    movu          [r0 + 123 * 16],  m1
3577
3578    ; mode 9 [row 12]
3579    pmaddubsw     m1,    m0,        [r3 + 26 * 16]
3580    pmulhrsw      m1,    m3
3581    pmaddubsw     m2,    m7,        [r3 + 26 * 16]
3582    pmulhrsw      m2,    m3
3583    packuswb      m1,               m2
3584    movu          [r0 + 124 * 16],  m1
3585
3586    ; mode 9 [row 13]
3587    pmaddubsw     m1,    m0,         [r3 + 28 * 16]
3588    pmulhrsw      m1,    m3
3589    pmaddubsw     m2,    m7,         [r3 + 28 * 16]
3590    pmulhrsw      m2,    m3
3591    packuswb      m1,               m2
3592    movu          [r0 + 125 * 16],  m1
3593
3594    ; mode 9 [row 14]
3595    pmaddubsw     m1,    m0,        [r3 + 30 * 16]
3596    pmulhrsw      m1,    m3
3597    pmaddubsw     m2,    m7,        [r3 + 30 * 16]
3598    pmulhrsw      m2,    m3
3599    packuswb      m1,               m2
3600    movu          [r0 + 126 * 16],  m1
3601
3602    ; mode 10
3603    movu         m1,               [r1 + 1 + 32]
3604    movu         [r0 + 128 * 16],  m1
3605    movu         [r0 + 129 * 16],  m1
3606    movu         [r0 + 130 * 16],  m1
3607    movu         [r0 + 131 * 16],  m1
3608    movu         [r0 + 132 * 16],  m1
3609    movu         [r0 + 133 * 16],  m1
3610    movu         [r0 + 134 * 16],  m1
3611    movu         [r0 + 135 * 16],  m1
3612    movu         [r0 + 136 * 16],  m1
3613    movu         [r0 + 137 * 16],  m1
3614    movu         [r0 + 138 * 16],  m1
3615    movu         [r0 + 139 * 16],  m1
3616    movu         [r0 + 140 * 16],  m1
3617    movu         [r0 + 141 * 16],  m1
3618    movu         [r0 + 142 * 16],  m1
3619    movu         [r0 + 143 * 16],  m1
3620
3621    pxor         m0,          m0
3622    pshufb       m1,          m1,         m0
3623    punpcklbw    m1,          m0
3624    pinsrb       m2,          [r1], 0
3625    pshufb       m2,          m2,         m0
3626    punpcklbw    m2,          m0
3627    movu         m4,          [r1 + 1]
3628    punpcklbw    m5,          m4,         m0
3629    punpckhbw    m4,          m0
3630    psubw        m5,          m2
3631    psubw        m4,          m2
3632    psraw        m5,          1
3633    psraw        m4,          1
3634    paddw        m5,          m1
3635    paddw        m4,          m1
3636    packuswb     m5,          m4
3637
3638    pextrb       [r0 + 128 * 16],  m5,          0
3639    pextrb       [r0 + 129 * 16],  m5,          1
3640    pextrb       [r0 + 130 * 16],  m5,          2
3641    pextrb       [r0 + 131 * 16],  m5,          3
3642    pextrb       [r0 + 132 * 16],  m5,          4
3643    pextrb       [r0 + 133 * 16],  m5,          5
3644    pextrb       [r0 + 134 * 16],  m5,          6
3645    pextrb       [r0 + 135 * 16],  m5,          7
3646    pextrb       [r0 + 136 * 16],  m5,          8
3647    pextrb       [r0 + 137 * 16],  m5,          9
3648    pextrb       [r0 + 138 * 16],  m5,          10
3649    pextrb       [r0 + 139 * 16],  m5,          11
3650    pextrb       [r0 + 140 * 16],  m5,          12
3651    pextrb       [r0 + 141 * 16],  m5,          13
3652    pextrb       [r0 + 142 * 16],  m5,          14
3653    pextrb       [r0 + 143 * 16],  m5,          15
3654
3655    ; mode 11
3656    movu          m0,               [r1 + 32]
3657    pinsrb        m0,               [r1], 0
3658
3659    ; mode 11 [row 15]
3660    movu          [r0 + 159 * 16],  m0
3661
3662    ; mode 11 [row 0]
3663    movu          m1,    [r1 + 1 + 32]
3664    punpcklbw     m0,    m1
3665    pmaddubsw     m1,    m0,        [r3 + 30 * 16]
3666    pmulhrsw      m1,    m3
3667    movu          m7,    [r1 + 8 + 32]
3668    movu          m2,    [r1 + 9 + 32]
3669    punpcklbw     m7,    m2
3670    pmaddubsw     m2,    m7,        [r3 + 30 * 16]
3671    pmulhrsw      m2,    m3
3672    packuswb      m1,               m2
3673    movu          [r0 + 144 * 16],  m1
3674
3675    ; mode 11 [row 1]
3676    pmaddubsw     m1,    m0,        [r3 + 28 * 16]
3677    pmulhrsw      m1,    m3
3678    pmaddubsw     m2,    m7,        [r3 + 28 * 16]
3679    pmulhrsw      m2,    m3
3680    packuswb      m1,               m2
3681    movu          [r0 + 145 * 16],  m1
3682
3683    ; mode 11 [row 2]
3684    pmaddubsw     m1,    m0,        [r3 + 26 * 16]
3685    pmulhrsw      m1,    m3
3686    pmaddubsw     m2,    m7,        [r3 + 26 * 16]
3687    pmulhrsw      m2,    m3
3688    packuswb      m1,               m2
3689    movu          [r0 + 146 * 16],  m1
3690
3691    ; mode 11 [row 3]
3692    pmaddubsw     m1,    m0,         [r3 + 24 * 16]
3693    pmulhrsw      m1,    m3
3694    pmaddubsw     m2,    m7,        [r3 + 24 * 16]
3695    pmulhrsw      m2,    m3
3696    packuswb      m1,               m2
3697    movu          [r0 + 147 * 16],  m1
3698
3699    ; mode 11 [row 4]
3700    pmaddubsw     m1,    m0,        [r3 + 22 * 16]
3701    pmulhrsw      m1,    m3
3702    pmaddubsw     m2,    m7,        [r3 + 22 * 16]
3703    pmulhrsw      m2,    m3
3704    packuswb      m1,               m2
3705    movu          [r0 + 148 * 16],  m1
3706
3707    ; mode 11 [row 5]
3708    pmaddubsw     m1,    m0,        [r3 + 20 * 16]
3709    pmulhrsw      m1,    m3
3710    pmaddubsw     m2,    m7,        [r3 + 20 * 16]
3711    pmulhrsw      m2,    m3
3712    packuswb      m1,               m2
3713    movu          [r0 + 149 * 16],  m1
3714
3715    ; mode 11 [row 6]
3716    pmaddubsw     m1,    m0,        [r3 + 18 * 16]
3717    pmulhrsw      m1,    m3
3718    pmaddubsw     m2,    m7,        [r3 + 18 * 16]
3719    pmulhrsw      m2,    m3
3720    packuswb      m1,               m2
3721    movu          [r0 + 150 * 16],  m1
3722
3723    ; mode 11 [row 7]
3724    pmaddubsw     m1,    m0,        [r3 + 16 * 16]
3725    pmulhrsw      m1,    m3
3726    pmaddubsw     m2,    m7,        [r3 + 16 * 16]
3727    pmulhrsw      m2,    m3
3728    packuswb      m1,               m2
3729    movu          [r0 + 151 * 16],  m1
3730
3731    ; mode 11 [row 8]
3732    pmaddubsw     m1,    m0,        [r3 + 14 * 16]
3733    pmulhrsw      m1,    m3
3734    pmaddubsw     m2,    m7,        [r3 + 14 * 16]
3735    pmulhrsw      m2,    m3
3736    packuswb      m1,               m2
3737    movu          [r0 + 152 * 16],  m1
3738
3739    ; mode 11 [row 9]
3740    pmaddubsw     m1,    m0,        [r3 + 12 * 16]
3741    pmulhrsw      m1,    m3
3742    pmaddubsw     m2,    m7,        [r3 + 12 * 16]
3743    pmulhrsw      m2,    m3
3744    packuswb      m1,               m2
3745    movu          [r0 + 153 * 16],  m1
3746
3747    ; mode 11 [row 10]
3748    pmaddubsw     m1,    m0,        [r3 + 10 * 16]
3749    pmulhrsw      m1,    m3
3750    pmaddubsw     m2,    m7,        [r3 + 10 * 16]
3751    pmulhrsw      m2,    m3
3752    packuswb      m1,               m2
3753    movu          [r0 + 154 * 16],  m1
3754
3755    ; mode 11 [row 11]
3756    pmaddubsw     m1,    m0,        [r3 + 8 * 16]
3757    pmulhrsw      m1,    m3
3758    pmaddubsw     m2,    m7,        [r3 + 8 * 16]
3759    pmulhrsw      m2,    m3
3760    packuswb      m1,               m2
3761    movu          [r0 + 155 * 16],  m1
3762
3763    ; mode 11 [row 12]
3764    pmaddubsw     m1,    m0,        [r3 + 6 * 16]
3765    pmulhrsw      m1,    m3
3766    pmaddubsw     m2,    m7,        [r3 + 6 * 16]
3767    pmulhrsw      m2,    m3
3768    packuswb      m1,               m2
3769    movu          [r0 + 156 * 16],  m1
3770
3771    ; mode 11 [row 13]
3772    pmaddubsw     m1,    m0,        [r3 + 4 * 16]
3773    pmulhrsw      m1,    m3
3774    pmaddubsw     m2,    m7,        [r3 + 4 * 16]
3775    pmulhrsw      m2,    m3
3776    packuswb      m1,               m2
3777    movu          [r0 + 157 * 16],  m1
3778
3779    ; mode 11 [row 14]
3780    pmaddubsw     m1,    m0,        [r3 + 2 * 16]
3781    pmulhrsw      m1,    m3
3782    pmaddubsw     m2,    m7,        [r3 + 2 * 16]
3783    pmulhrsw      m2,    m3
3784    packuswb      m1,               m2
3785    movu          [r0 + 158 * 16],  m1
3786
3787    ; mode 12 [row 0]
3788    movu          m0,    [r2 + 32]
3789    pinsrb        m0,    [r2], 0
3790    movu          m1,    [r2 + 1 + 32]
3791    punpcklbw     m0,    m1
3792    pmaddubsw     m1,    m0,        [r3 + 27 * 16]
3793    pmulhrsw      m1,    m3
3794    movu          m7,    [r2 + 8 + 32]
3795    movd          m2,    [r2 + 24 + 32]
3796    palignr       m2,    m7,        1
3797    punpcklbw     m7,    m2
3798    pmaddubsw     m2,    m7,        [r3 + 27 * 16]
3799    pmulhrsw      m2,    m3
3800    packuswb      m1,               m2
3801    movu          [r0 + 160 * 16],  m1
3802
3803    ; mode 12 [row 1]
3804    pmaddubsw     m1,    m0,        [r3 + 22 * 16]
3805    pmulhrsw      m1,    m3
3806    pmaddubsw     m2,    m7,        [r3 + 22 * 16]
3807    pmulhrsw      m2,    m3
3808    packuswb      m1,               m2
3809    movu          [r0 + 161 * 16],  m1
3810
3811    ; mode 12 [row 2]
3812    pmaddubsw     m1,    m0,        [r3 + 17 * 16]
3813    pmulhrsw      m1,    m3
3814    pmaddubsw     m2,    m7,        [r3 + 17 * 16]
3815    pmulhrsw      m2,    m3
3816    packuswb      m1,               m2
3817    movu          [r0 + 162 * 16],  m1
3818
3819    ; mode 12 [row 3]
3820    pmaddubsw     m1,    m0,        [r3 + 12 * 16]
3821    pmulhrsw      m1,    m3
3822    pmaddubsw     m2,    m7,        [r3 + 12 * 16]
3823    pmulhrsw      m2,    m3
3824    packuswb      m1,               m2
3825    movu          [r0 + 163 * 16],  m1
3826
3827    ; mode 12 [row 4]
3828    pmaddubsw     m1,    m0,        [r3 + 7 * 16]
3829    pmulhrsw      m1,    m3
3830    pmaddubsw     m2,    m7,        [r3 + 7 * 16]
3831    pmulhrsw      m2,    m3
3832    packuswb      m1,               m2
3833    movu          [r0 + 164 * 16],  m1
3834
3835    ; mode 12 [row 5]
3836    pmaddubsw     m1,    m0,        [r3 + 2 * 16]
3837    pmulhrsw      m1,    m3
3838    pmaddubsw     m2,    m7,        [r3 + 2 * 16]
3839    pmulhrsw      m2,    m3
3840    packuswb      m1,               m2
3841    movu          [r0 + 165 * 16],  m1
3842
3843    ; mode 13 [row 0]
3844    pmaddubsw     m1,    m0,        [r3 + 23 * 16]
3845    pmulhrsw      m1,    m3
3846    pmaddubsw     m2,    m7,        [r3 + 23 * 16]
3847    pmulhrsw      m2,    m3
3848    packuswb      m1,               m2
3849    movu          [r0 + 176 * 16],  m1
3850
3851    ; mode 13 [row 1]
3852    pmaddubsw     m1,    m0,        [r3 + 14 * 16]
3853    pmulhrsw      m1,    m3
3854    pmaddubsw     m2,    m7,        [r3 + 14 * 16]
3855    pmulhrsw      m2,    m3
3856    packuswb      m1,               m2
3857    movu          [r0 + 177 * 16],  m1
3858
3859    ; mode 13 [row 2]
3860    pmaddubsw     m1,    m0,        [r3 + 5 * 16]
3861    pmulhrsw      m1,    m3
3862    pmaddubsw     m2,    m7,        [r3 + 5 * 16]
3863    pmulhrsw      m2,    m3
3864    packuswb      m1,               m2
3865    movu          [r0 + 178 * 16],  m1
3866
3867    ; mode 14 [row 0]
3868    pmaddubsw     m1,    m0,        [r3 + 19 * 16]
3869    pmulhrsw      m1,    m3
3870    pmaddubsw     m2,    m7,        [r3 + 19 * 16]
3871    pmulhrsw      m2,    m3
3872    packuswb      m1,               m2
3873    movu          [r0 + 192 * 16],  m1
3874
3875    ; mode 14 [row 1]
3876    pmaddubsw     m1,    m0,        [r3 + 6 * 16]
3877    pmulhrsw      m1,    m3
3878    pmaddubsw     m2,    m7,        [r3 + 6 * 16]
3879    pmulhrsw      m2,    m3
3880    packuswb      m1,               m2
3881    movu          [r0 + 193 * 16],  m1
3882
3883    ; mode 17 [row 0]
3884    movu          [r0 + 240 * 16],  m1
3885
3886    ; mode 15 [row 0]
3887    pmaddubsw     m1,    m0,        [r3 + 15 * 16]
3888    pmulhrsw      m1,    m3
3889    pmaddubsw     m2,    m7,        [r3 + 15 * 16]
3890    pmulhrsw      m2,    m3
3891    packuswb      m1,               m2
3892    movu          [r0 + 208 * 16],  m1
3893
3894    ; mode 15 [row 15 - second half]
3895    pmaddubsw     m1,    m0,           [r3 + 16 * 16]
3896    pmulhrsw      m1,    m3
3897    packuswb      m1,                  m1
3898    movh          [r0 + 223 * 16 + 8], m1
3899    ; mode 15 [row 15 - second half] end
3900
3901    ; mode 16 [row 0]
3902    pmaddubsw     m1,    m0,        [r3 + 11 * 16]
3903    pmulhrsw      m1,    m3
3904    pmaddubsw     m2,    m7,        [r3 + 11 * 16]
3905    pmulhrsw      m2,    m3
3906    packuswb      m1,               m2
3907    movu          [r0 + 224 * 16],  m1
3908
3909    ; mode 17 [row 9 - second half]
3910    pmaddubsw     m1,     m0,          [r3 + 28 * 16]
3911    pmulhrsw      m1,     m3
3912    packuswb      m1,                   m1
3913    movh          [r0 + 249 * 16 + 8],  m1
3914    ; mode 17 [row 9 - second half] end
3915
3916    ; mode 17 [row 10 - second half]
3917    pmaddubsw     m1,     m0,          [r3 + 2 * 16]
3918    pmulhrsw      m1,     m3
3919    packuswb      m1,                   m1
3920    movh          [r0 + 250 * 16 + 8],  m1
3921    ; mode 17 [row 10 - second half] end
3922
3923    ; mode 17 [row 1 - first half]
3924    pslldq        m6,     m0,          2
3925    pinsrb        m6,     [r2],        1
3926    pinsrb        m6,     [r2 + 1],    0
3927    pmaddubsw     m1,     m6,          [r3 + 12 * 16]
3928    pmulhrsw      m1,     m3
3929    packuswb      m1,               m1
3930    movh          [r0 + 241 * 16],  m1
3931
3932    ; mode 17 [row 11 - second half]
3933    pmaddubsw     m1,     m6,          [r3 + 8 * 16]
3934    pmulhrsw      m1,     m3
3935    packuswb      m1,                   m1
3936    movh          [r0 + 251 * 16 + 8],  m1
3937    ; mode 17 [row 11 - second half] end
3938
3939    ; mode 17 [row 2 - first half]
3940    pslldq        m6,     2
3941    pinsrb        m6,     [r2 + 1],    1
3942    pinsrb        m6,     [r2 + 2],    0
3943    pmaddubsw     m1,     m6,          [r3 + 18 * 16]
3944    pmulhrsw      m1,     m3
3945    packuswb      m1,                  m1
3946    movh          [r0 + 242 * 16],     m1
3947
3948    ; mode 17 [row 12 - second half]
3949    pmaddubsw     m1,     m6,           [r3 + 14 * 16]
3950    pmulhrsw      m1,     m3
3951    packuswb      m1,                   m1
3952    movh          [r0 + 252 * 16 + 8],  m1
3953    ; mode 17 [row 12 - second half] end
3954
3955    ; mode 17 [row 3 - first half]
3956    pslldq        m6,     2
3957    pinsrb        m6,     [r2 + 2],    1
3958    pinsrb        m6,     [r2 + 4],    0
3959    pmaddubsw     m1,     m6,          [r3 + 24 * 16]
3960    pmulhrsw      m1,     m3
3961    packuswb      m1,               m1
3962    movh          [r0 + 243 * 16],  m1
3963
3964    ; mode 17 [row 13 - first half]
3965    pmaddubsw     m1,     m6,           [r3 + 20 * 16]
3966    pmulhrsw      m1,     m3
3967    packuswb      m1,                   m1
3968    movh          [r0 + 253 * 16 + 8],  m1
3969
3970    ; mode 17 [row 4 - first half]
3971    pslldq        m6,     2
3972    pinsrb        m6,     [r2 + 4],    1
3973    pinsrb        m6,     [r2 + 5],    0
3974    pmaddubsw     m1,     m6,          [r3 + 30 * 16]
3975    pmulhrsw      m1,     m3
3976    packuswb      m1,                  m1
3977    movh          [r0 + 244 * 16],     m1
3978
3979    ; mode 17 [row 5 - first half]
3980    pmaddubsw     m1,     m6,          [r3 + 4 * 16]
3981    pmulhrsw      m1,     m3
3982    packuswb      m1,               m1
3983    movh          [r0 + 245 * 16],  m1
3984
3985    ; mode 17 [row 14 - second half]
3986    pmaddubsw     m1,     m6,          [r3 + 26 * 16]
3987    pmulhrsw      m1,     m3
3988    packuswb      m1,                  m1
3989    movh          [r0 + 254 * 16 + 8], m1
3990    ; mode 17 [row 14 - second half] end
3991
3992    ; mode 17 [row 6 - first half]
3993    pslldq        m6,     2
3994    pinsrb        m6,     [r2 + 5],    1
3995    pinsrb        m6,     [r2 + 6],    0
3996    pmaddubsw     m1,     m6,          [r3 + 10 * 16]
3997    pmulhrsw      m1,     m3
3998    packuswb      m1,                  m1
3999    movh          [r0 + 246 * 16],     m1
4000
4001    ; mode 17 [row 7 - first half]
4002    pslldq        m6,     2
4003    pinsrb        m6,     [r2 + 6],    1
4004    pinsrb        m6,     [r2 + 7],    0
4005    pmaddubsw     m1,     m6,          [r3 + 16 * 16]
4006    pmulhrsw      m1,     m3
4007    packuswb      m1,                  m1
4008    movh          [r0 + 247 * 16],     m1
4009
4010    ; mode 17 [row 8 - first half]
4011    pslldq        m6,     2
4012    pinsrb        m6,     [r2 + 7],    1
4013    pinsrb        m6,     [r2 + 9],    0
4014    pmaddubsw     m1,     m6,          [r3 + 22 * 16]
4015    pmulhrsw      m1,     m3
4016    packuswb      m1,                  m1
4017    movh          [r0 + 248 * 16],     m1
4018
4019    ; mode 17 [row 9 - first half]
4020    pslldq        m6,     2
4021    pinsrb        m6,     [r2 +  9],    1
4022    pinsrb        m6,     [r2 + 10],    0
4023    pmaddubsw     m1,     m6,           [r3 + 28 * 16]
4024    pmulhrsw      m1,     m3
4025    packuswb      m1,                   m1
4026    movh          [r0 + 249 * 16],      m1
4027
4028    ; mode 17 [row 10 - first half]
4029    pmaddubsw     m1,     m6,          [r3 + 2 * 16]
4030    pmulhrsw      m1,     m3
4031    packuswb      m1,                  m1
4032    movh          [r0 + 250 * 16],     m1
4033
4034    ; mode 17 [row 11 - first half]
4035    pslldq        m6,     2
4036    pinsrb        m6,     [r2 + 10],    1
4037    pinsrb        m6,     [r2 + 11],    0
4038    pmaddubsw     m1,     m6,           [r3 + 8 * 16]
4039    pmulhrsw      m1,     m3
4040    packuswb      m1,                   m1
4041    movh          [r0 + 251 * 16],      m1
4042
4043    ; mode 17 [row 12 - first half]
4044    pslldq        m6,     2
4045    pinsrb        m6,     [r2 + 11],    1
4046    pinsrb        m6,     [r2 + 12],    0
4047    pmaddubsw     m1,     m6,           [r3 + 14 * 16]
4048    pmulhrsw      m1,     m3
4049    packuswb      m1,                   m1
4050    movh          [r0 + 252 * 16],      m1
4051
4052    ; mode 17 [row 13 - first half]
4053    pslldq        m6,     2
4054    pinsrb        m6,     [r2 + 12],    1
4055    pinsrb        m6,     [r2 + 14],    0
4056    pmaddubsw     m1,     m6,           [r3 + 20 * 16]
4057    pmulhrsw      m1,     m3
4058    packuswb      m1,                   m1
4059    movh          [r0 + 253 * 16],      m1
4060
4061    ; mode 17 [row 14 - first half]
4062    pslldq        m6,     2
4063    pinsrb        m6,     [r2 + 14],    1
4064    pinsrb        m6,     [r2 + 15],    0
4065    pmaddubsw     m1,     m6,           [r3 + 26 * 16]
4066    pmulhrsw      m1,     m3
4067    packuswb      m1,                   m1
4068    movh          [r0 + 254 * 16],      m1
4069
4070    ; mode 16 [row 12 -  second half]
4071    pmaddubsw     m1,    m0,            [r3 + 15 * 16]
4072    pmulhrsw      m1,    m3
4073    packuswb      m1,                   m1
4074    movh          [r0 + 236 * 16 + 8],  m1
4075    ; mode 16 [row 12 -  second half]
4076
4077    ; mode 12 [row 6]
4078    pslldq        m2,    m0,            2
4079    pinsrb        m2,    [r2], 1
4080    pinsrb        m2,    [r2 + 6],      0
4081    pmaddubsw     m1,    m2,            [r3 + 29 * 16]
4082    pmulhrsw      m1,    m3
4083    movu          m0,    [r2 + 7 + 32]
4084    psrldq        m4,    m0,            1
4085    punpcklbw     m0,    m4
4086    pmaddubsw     m4,    m0,            [r3 + 29 * 16]
4087    pmulhrsw      m4,    m3
4088    packuswb      m1,                   m4
4089    movu          [r0 + 166 * 16],      m1
4090
4091    ; mode 12 [row 7]
4092    pmaddubsw     m1,    m2,        [r3 + 24 * 16]
4093    pmulhrsw      m1,    m3
4094    pmaddubsw     m4,    m0,        [r3 + 24 * 16]
4095    pmulhrsw      m4,    m3
4096    packuswb      m1,               m4
4097    movu          [r0 + 167 * 16],  m1
4098
4099    ; mode 12 [row 8]
4100    pmaddubsw     m1,    m2,        [r3 + 19 * 16]
4101    pmulhrsw      m1,    m3
4102    pmaddubsw     m4,    m0,        [r3 + 19 * 16]
4103    pmulhrsw      m4,    m3
4104    packuswb      m1,               m4
4105    movu          [r0 + 168 * 16],  m1
4106
4107    ; mode 12 [row 9]
4108    pmaddubsw     m1,    m2,        [r3 + 14 * 16]
4109    pmulhrsw      m1,    m3
4110    pmaddubsw     m4,    m0,        [r3 + 14 * 16]
4111    pmulhrsw      m4,    m3
4112    packuswb      m1,               m4
4113    movu          [r0 + 169 * 16],  m1
4114
4115    ; mode 12 [row 10]
4116    pmaddubsw     m1,    m2,        [r3 + 9 * 16]
4117    pmulhrsw      m1,    m3
4118    pmaddubsw     m4,    m0,        [r3 + 9 * 16]
4119    pmulhrsw      m4,    m3
4120    packuswb      m1,               m4
4121    movu          [r0 + 170 * 16],  m1
4122
4123    ; mode 12 [row 11]
4124    pmaddubsw     m1,    m2,        [r3 + 4 * 16]
4125    pmulhrsw      m1,    m3
4126    pmaddubsw     m4,    m0,        [r3 + 4 * 16]
4127    pmulhrsw      m4,    m3
4128    packuswb      m1,    m4
4129    movu          [r0 + 171 * 16],  m1
4130
4131    ; mode 13 [row 3]
4132    pinsrb        m7,    m2,        [r2 +  4],   0
4133    pmaddubsw     m1,    m7,        [r3 + 28 * 16]
4134    pmulhrsw      m1,    m3
4135    pmaddubsw     m4,    m0,        [r3 + 28 * 16]
4136    pmulhrsw      m4,    m3
4137    packuswb      m1,               m4
4138    movu          [r0 + 179 * 16],  m1
4139
4140    ; mode 13 [row 4]
4141    pmaddubsw     m1,    m7,        [r3 + 19 * 16]
4142    pmulhrsw      m1,    m3
4143    pmaddubsw     m4,    m0,        [r3 + 19 * 16]
4144    pmulhrsw      m4,    m3
4145    packuswb      m1,               m4
4146    movu          [r0 + 180 * 16],  m1
4147
4148    ; mode 13 [row 5]
4149    pmaddubsw     m1,    m7,        [r3 + 10 * 16]
4150    pmulhrsw      m1,    m3
4151    pmaddubsw     m4,    m0,        [r3 + 10 * 16]
4152    pmulhrsw      m4,    m3
4153    packuswb      m1,               m4
4154    movu          [r0 + 181 * 16],  m1
4155
4156    ; mode 13 [row 6]
4157    pmaddubsw     m1,    m7,        [r3 + 1 * 16]
4158    pmulhrsw      m1,    m3
4159    pmaddubsw     m4,    m0,        [r3 + 1 * 16]
4160    pmulhrsw      m4,    m3
4161    packuswb      m1,               m4
4162    movu          [r0 + 182 * 16],  m1
4163
4164    ; mode 14 [row 2]
4165    pinsrb        m5,    m7,        [r2 +  2],   0
4166    pmaddubsw     m1,    m5,        [r3 + 25 * 16]
4167    pmulhrsw      m1,    m3
4168    pmaddubsw     m4,    m0,        [r3 + 25 * 16]
4169    pmulhrsw      m4,    m3
4170    packuswb      m1,               m4
4171    movu          [r0 + 194 * 16],  m1
4172
4173    ; mode 14 [row 3]
4174    pmaddubsw     m1,    m5,        [r3 + 12 * 16]
4175    pmulhrsw      m1,    m3
4176    pmaddubsw     m4,    m0,        [r3 + 12 * 16]
4177    pmulhrsw      m4,    m3
4178    packuswb      m1,               m4
4179    movu          [r0 + 195 * 16],  m1
4180
4181    ; mode 15 [row 1]
4182    pmaddubsw     m1,    m5,        [r3 + 30 * 16]
4183    pmulhrsw      m1,    m3
4184    pmaddubsw     m4,    m0,        [r3 + 30 * 16]
4185    pmulhrsw      m4,    m3
4186    packuswb      m1,               m4
4187    movu          [r0 + 209 * 16],  m1
4188
4189    ; mode 15 [row 2]
4190    pmaddubsw     m1,    m5,        [r3 + 13 * 16]
4191    pmulhrsw      m1,    m3
4192    pmaddubsw     m4,    m0,        [r3 + 13 * 16]
4193    pmulhrsw      m4,    m3
4194    packuswb      m1,               m4
4195    movu          [r0 + 210 * 16],  m1
4196
4197    ; mode 16 [row 1]
4198    pmaddubsw     m1,    m5,        [r3 + 22 * 16]
4199    pmulhrsw      m1,    m3
4200    pmaddubsw     m4,    m0,        [r3 + 22 * 16]
4201    pmulhrsw      m4,    m3
4202    packuswb      m1,               m4
4203    movu          [r0 + 225 * 16],  m1
4204
4205    ; mode 16 [row 2]
4206    pmaddubsw     m1,    m5,        [r3 + 1 * 16]
4207    pmulhrsw      m1,    m3
4208    pmaddubsw     m4,    m0,        [r3 + 1 * 16]
4209    pmulhrsw      m4,    m3
4210    packuswb      m1,               m4
4211    movu          [r0 + 226 * 16],  m1
4212
4213    ; mode 16 [row 13 - second half]
4214    pmaddubsw     m1,    m5,           [r3 + 26 * 16]
4215    pmulhrsw      m1,    m3
4216    packuswb      m1,                  m1
4217    movh          [r0 + 237 * 16 + 8], m1
4218    ; mode 16 [row 13 - second half]
4219
4220    ; mode 16 [row 14 - second half]
4221    pmaddubsw     m1,    m5,           [r3 + 5 * 16]
4222    pmulhrsw      m1,    m3
4223    packuswb      m1,                  m1
4224    movh          [r0 + 238 * 16 + 8], m1
4225    ; mode 16 [row 14 - second half]
4226
4227    ; mode 16 [row 3]
4228    pslldq        m6,    m5,         2
4229    pinsrb        m6,    [r2 + 2],   1
4230    pinsrb        m6,    [r2 + 3],   0
4231    pmaddubsw     m1,    m6,         [r3 + 12 * 16]
4232    pmulhrsw      m1,    m3
4233    packuswb      m1,                m1
4234    movh          [r0 + 227 * 16],   m1
4235
4236    ; mode 16 [row 15 - second half]
4237    pmaddubsw     m1,    m6,          [r3 + 16 * 16]
4238    pmulhrsw      m1,    m3
4239    packuswb      m1,                  m1
4240    movh          [r0 + 239 * 16 + 8], m1
4241    ; mode 16 [row 15 - second half] end
4242
4243    ; mode 16 [row 4- first half]
4244    pslldq        m6,    2
4245    pinsrb        m6,    [r2 + 3],   1
4246    pinsrb        m6,    [r2 + 5],   0
4247    pmaddubsw     m1,    m6,         [r3 + 23 * 16]
4248    pmulhrsw      m1,    m3
4249    packuswb      m1,                m1
4250    movh          [r0 + 228 * 16],   m1
4251
4252    ; mode 16 [row 5- first half]
4253    pmaddubsw     m1,    m6,        [r3 + 2 * 16]
4254    pmulhrsw      m1,    m3
4255    packuswb      m1,               m1
4256    movh          [r0 + 229 * 16],  m1
4257
4258    ; mode 16 [row 6- first half]
4259    pslldq        m6,    2
4260    pinsrb        m6,    [r2 + 5],   1
4261    pinsrb        m6,    [r2 + 6],   0
4262    pmaddubsw     m1,    m6,         [r3 + 13 * 16]
4263    pmulhrsw      m1,    m3
4264    packuswb      m1,                m1
4265    movh          [r0 + 230 * 16],   m1
4266
4267    ; mode 16 [row 7- first half]
4268    pslldq        m6,    2
4269    pinsrb        m6,    [r2 + 6],   1
4270    pinsrb        m6,    [r2 + 8],   0
4271    pmaddubsw     m1,    m6,         [r3 + 24 * 16]
4272    pmulhrsw      m1,    m3
4273    packuswb      m1,                m1
4274    movh          [r0 + 231 * 16],   m1
4275
4276    ; mode 16 [row 8- first half]
4277    pmaddubsw     m1,    m6,        [r3 + 3 * 16]
4278    pmulhrsw      m1,    m3
4279    packuswb      m1,               m1
4280    movh          [r0 + 232 * 16],  m1
4281    ; mode 19 [row 0 - second half] end
4282
4283    ; mode 16 [row 9- first half]
4284    pslldq        m6,    2
4285    pinsrb        m6,    [r2 + 8],   1
4286    pinsrb        m6,    [r2 + 9],   0
4287    pmaddubsw     m1,    m6,        [r3 + 14 * 16]
4288    pmulhrsw      m1,    m3
4289    packuswb      m1,               m1
4290    movh          [r0 + 233 * 16],  m1
4291
4292    ; mode 16 [row 10 - first half]
4293    pslldq        m6,    2
4294    pinsrb        m6,    [r2 +  9], 1
4295    pinsrb        m6,    [r2 + 11], 0
4296    pmaddubsw     m1,    m6,        [r3 + 25 * 16]
4297    pmulhrsw      m1,    m3
4298    packuswb      m1,               m1
4299    movh          [r0 + 234 * 16],  m1
4300
4301    ; mode 16 [row 11 - first half]
4302    pmaddubsw     m1,    m6,        [r3 + 4 * 16]
4303    pmulhrsw      m1,    m3
4304    packuswb      m1,               m1
4305    movh          [r0 + 235 * 16],  m1
4306
4307    ; mode 16 [row 12 - first half]
4308    pslldq        m6,    2
4309    pinsrb        m6,    [r2 + 11], 1
4310    pinsrb        m6,    [r2 + 12], 0
4311    pmaddubsw     m1,    m6,        [r3 + 15 * 16]
4312    pmulhrsw      m1,    m3
4313    packuswb      m1,               m1
4314    movh          [r0 + 236 * 16],  m1
4315
4316    ; mode 16 [row 13 - first half]
4317    pslldq        m6,    2
4318    pinsrb        m6,    [r2 + 12],   1
4319    pinsrb        m6,    [r2 + 14],   0
4320    pmaddubsw     m1,    m6,        [r3 + 26 * 16]
4321    pmulhrsw      m1,    m3
4322    packuswb      m1,               m1
4323    movh          [r0 + 237 * 16],  m1
4324
4325    ; mode 16 [row 14 - first half]
4326    pmaddubsw     m1,    m6,        [r3 + 5 * 16]
4327    pmulhrsw      m1,    m3
4328    packuswb      m1,               m1
4329    movh          [r0 + 238 * 16],  m1
4330
4331    ; mode 16 [row 15 - first half]
4332    pslldq        m6,    2
4333    pinsrb        m6,    [r2 + 14],   1
4334    pinsrb        m6,    [r2 + 15],   0
4335    pmaddubsw     m1,    m6,          [r3 + 16 * 16]
4336    pmulhrsw      m1,    m3
4337    packuswb      m1,               m1
4338    movh          [r0 + 239 * 16],  m1
4339
4340    ; mode 14 [row 4]
4341    pslldq        m5,    2
4342    pinsrb        m5,    [r2 + 2],   1
4343    pinsrb        m5,    [r2 + 5],   0
4344    movu          m4,    [r2 + 6 + 32]
4345    psrldq        m0,    m4,         1
4346    punpcklbw     m4,    m0
4347
4348    ; mode 16 [row 3 - second half]
4349    pmaddubsw     m1,    m4,        [r3 + 12 * 16]
4350    pmulhrsw      m1,    m3
4351    packuswb      m1,                  m1
4352    movh          [r0 + 227 * 16 + 8], m1
4353
4354    ; mode 16 [row 3 - second half] end
4355    pmaddubsw     m1,    m5,        [r3 + 31 * 16]
4356    pmulhrsw      m1,    m3
4357    pmaddubsw     m0,    m4,        [r3 + 31 * 16]
4358    pmulhrsw      m0,    m3
4359    packuswb      m1,               m0
4360    movu          [r0 + 196 * 16],  m1
4361
4362    ; mode 14 [row 5]
4363    pmaddubsw     m1,    m5,        [r3 + 18 * 16]
4364    pmulhrsw      m1,    m3
4365    pmaddubsw     m0,    m4,        [r3 + 18 * 16]
4366    pmulhrsw      m0,    m3
4367    packuswb      m1,               m0
4368    movu          [r0 + 197 * 16],  m1
4369
4370    ; mode 14 [row 6]
4371    pmaddubsw     m1,    m5,         [r3 + 5 * 16]
4372    pmulhrsw      m1,    m3
4373    pmaddubsw     m0,    m4,         [r3 + 5 * 16]
4374    pmulhrsw      m0,    m3
4375    packuswb      m1,               m0
4376    movu          [r0 + 198 * 16],  m1
4377
4378    ; mode 15 [row 3]
4379    movu          m6,    m5
4380    pinsrb        m6,    [r2 + 4],   0
4381    pmaddubsw     m1,    m6,         [r3 + 28 * 16]
4382    pmulhrsw      m1,    m3
4383    pmaddubsw     m0,    m4,         [r3 + 28 * 16]
4384    pmulhrsw      m0,    m3
4385    packuswb      m1,                m0
4386    movu          [r0 + 211 * 16],   m1
4387
4388    ; mode 15 [row 4]
4389    pmaddubsw     m1,    m6,         [r3 + 11 * 16]
4390    pmulhrsw      m1,    m3
4391    pmaddubsw     m0,    m4,         [r3 + 11 * 16]
4392    pmulhrsw      m0,    m3
4393    packuswb      m1,                m0
4394    movu          [r0 + 212 * 16],   m1
4395
4396    ; mode 15 [row 5 - first half]
4397    pslldq        m6,    2
4398    pinsrb        m6,    [r2 + 4],   1
4399    pinsrb        m6,    [r2 + 6],   0
4400    pmaddubsw     m1,    m6,         [r3 + 26 * 16]
4401    pmulhrsw      m1,    m3
4402    packuswb      m1,                m1
4403    movh          [r0 + 213 * 16],   m1
4404
4405    ; mode 15 [row 6 - first half]
4406    pmaddubsw     m1,    m6,         [r3 + 9 * 16]
4407    pmulhrsw      m1,    m3
4408    packuswb      m1,                m1
4409    movh          [r0 + 214 * 16],   m1
4410
4411    ; mode 15 [row 7 - first half]
4412    pslldq        m6,    2
4413    pinsrb        m6,    [r2 + 6],   1
4414    pinsrb        m6,    [r2 + 8],   0
4415    pmaddubsw     m1,    m6,         [r3 + 24 * 16]
4416    pmulhrsw      m1,    m3
4417    packuswb      m1,                m1
4418    movh          [r0 + 215 * 16],   m1
4419
4420    ; mode 15 [row 8 - first half]
4421    pmaddubsw     m1,    m6,         [r3 + 7 * 16]
4422    pmulhrsw      m1,    m3
4423    packuswb      m1,                m1
4424    movh          [r0 + 216 * 16],   m1
4425
4426    ; mode 15 [row 9 - first half]
4427    pslldq        m6,    2
4428    pinsrb        m6,    [r2 + 8],   1
4429    pinsrb        m6,    [r2 + 9],   0
4430    pmaddubsw     m1,    m6,         [r3 + 22 * 16]
4431    pmulhrsw      m1,    m3
4432    packuswb      m1,                m1
4433    movh          [r0 + 217 * 16],   m1
4434
4435    ; mode 15 [row 10 - first half]
4436    pmaddubsw     m1,    m6,         [r3 + 5 * 16]
4437    pmulhrsw      m1,    m3
4438    packuswb      m1,                m1
4439    movh          [r0 + 218 * 16],   m1
4440
4441    ; mode 15 [row 11 - first half]
4442    pslldq        m6,    2
4443    pinsrb        m6,    [r2 +  9],   1
4444    pinsrb        m6,    [r2 + 11],   0
4445    pmaddubsw     m1,    m6,         [r3 + 20 * 16]
4446    pmulhrsw      m1,    m3
4447    packuswb      m1,                m1
4448    movh          [r0 + 219 * 16],   m1
4449
4450    ; mode 15 [row 12 - first half]
4451    pmaddubsw     m1,    m6,         [r3 + 3 * 16]
4452    pmulhrsw      m1,    m3
4453    packuswb      m1,                m1
4454    movh          [r0 + 220 * 16],   m1
4455
4456    ; mode 15 [row 13 - first half]
4457    pslldq        m6,    2
4458    pinsrb        m6,    [r2 + 11],   1
4459    pinsrb        m6,    [r2 + 13],   0
4460    pmaddubsw     m1,    m6,         [r3 + 18 * 16]
4461    pmulhrsw      m1,    m3
4462    packuswb      m1,                m1
4463    movh          [r0 + 221 * 16],   m1
4464
4465    ; mode 15 [row 14 - first half]
4466    pmaddubsw     m1,    m6,         [r3 + 1 * 16]
4467    pmulhrsw      m1,    m3
4468    packuswb      m1,                m1
4469    movh          [r0 + 222 * 16],   m1
4470
4471    ; mode 15 [row 15 - first half]
4472    pslldq        m6,    2
4473    pinsrb        m6,    [r2 + 13],   1
4474    pinsrb        m6,    [r2 + 15],   0
4475    pmaddubsw     m1,    m6,         [r3 + 16 * 16]
4476    pmulhrsw      m1,    m3
4477    packuswb      m1,                m1
4478    movh          [r0 + 223 * 16],   m1
4479
4480    ; mode 14 [row 7]
4481    pslldq        m5,    2
4482    pinsrb        m5,    [r2 + 5],   1
4483    pinsrb        m5,    [r2 + 7],   0
4484    movu          m0,    [r2 + 5 + 32]
4485    psrldq        m6,    m0,          1
4486    punpcklbw     m0,    m6
4487
4488    ; mode 15 [row 5 - second half]
4489    pmaddubsw     m1,    m0,           [r3 + 26 * 16]
4490    pmulhrsw      m1,    m3
4491    packuswb      m1,                  m1
4492    movh          [r0 + 213 * 16 + 8], m1
4493    ; mode 15 [row 5 - second half] end
4494
4495    ; mode 15 [row 6 - second half]
4496    pmaddubsw     m1,    m0,           [r3 + 9 * 16]
4497    pmulhrsw      m1,    m3
4498    packuswb      m1,                  m1
4499    movh          [r0 + 214 * 16 + 8], m1
4500    ; mode 15 [row 6 - second half] end
4501
4502    ; mode 16 [row 4 - second half]
4503    pmaddubsw     m1,    m0,        [r3 + 23 * 16]
4504    pmulhrsw      m1,    m3
4505    packuswb      m1,                  m1
4506    movh          [r0 + 228 * 16 + 8], m1
4507    ; mode 16 [row 4 - second half] end
4508
4509    ; mode 16 [row 5 - second half]
4510    pmaddubsw     m1,    m0,        [r3 + 2 * 16]
4511    pmulhrsw      m1,    m3
4512    packuswb      m1,                  m1
4513    movh          [r0 + 229 * 16 + 8], m1
4514
4515    ; mode 16 [row 5 - second half] end
4516    pmaddubsw     m1,    m5,        [r3 + 24 * 16]
4517    pmulhrsw      m1,    m3
4518    pmaddubsw     m6,    m0,        [r3 + 24 * 16]
4519    pmulhrsw      m6,    m3
4520    packuswb      m1,               m6
4521    movu          [r0 + 199 * 16],  m1
4522
4523    ; mode 14 [row 8]
4524    pmaddubsw     m1,    m5,        [r3 + 11 * 16]
4525    pmulhrsw      m1,    m3
4526    pmaddubsw     m6,    m0,        [r3 + 11 * 16]
4527    pmulhrsw      m6,    m3
4528    packuswb      m1,               m6
4529    movu          [r0 + 200 * 16],  m1
4530
4531    ; mode 14 [row 9]
4532    pslldq        m5,    2
4533    pinsrb        m5,    [r2 + 7],    1
4534    pinsrb        m5,    [r2 + 10],   0
4535    movu          m0,    [r2 + 4 + 32]
4536    psrldq        m6,    m0,          1
4537    punpcklbw     m0,    m6
4538
4539    ; mode 15 [row 7 - second half]
4540    pmaddubsw     m1,    m0,             [r3 + 24 * 16]
4541    pmulhrsw      m1,    m3
4542    packuswb      m1,                    m1
4543    movh          [r0 + 215 * 16 + 8],   m1
4544    ; mode 15 [row 7 - second half] end
4545
4546    ; mode 15 [row 8 - second half]
4547    pmaddubsw     m1,    m0,             [r3 + 7 * 16]
4548    pmulhrsw      m1,    m3
4549    packuswb      m1,                    m1
4550    movh          [r0 + 216 * 16 + 8],   m1
4551    ; mode 15 [row 8 - second half] end
4552
4553    ; mode 16 [row 6 - second half]
4554    pmaddubsw     m1,    m0,             [r3 + 13 * 16]
4555    pmulhrsw      m1,    m3
4556    packuswb      m1,                    m1
4557    movh          [r0 + 230 * 16 + 8],   m1
4558    ; mode 16 [row 6 - second half] end
4559
4560    ; mode 15 [row 6 - second half] end
4561    pmaddubsw     m1,    m5,        [r3 + 30 * 16]
4562    pmulhrsw      m1,    m3
4563    pmaddubsw     m6,    m0,        [r3 + 30 * 16]
4564    pmulhrsw      m6,    m3
4565    packuswb      m1,               m6
4566    movu          [r0 + 201 * 16],  m1
4567
4568    ; mode 14 [row 10]
4569    pmaddubsw     m1,    m5,        [r3 + 17 * 16]
4570    pmulhrsw      m1,    m3
4571    pmaddubsw     m6,    m0,        [r3 + 17 * 16]
4572    pmulhrsw      m6,    m3
4573    packuswb      m1,               m6
4574    movu          [r0 + 202 * 16],  m1
4575
4576    ; mode 14 [row 11]
4577    pmaddubsw     m1,    m5,        [r3 + 4 * 16]
4578    pmulhrsw      m1,    m3
4579    pmaddubsw     m6,    m0,        [r3 + 4 * 16]
4580    pmulhrsw      m6,    m3
4581    packuswb      m1,               m6
4582    movu          [r0 + 203 * 16],  m1
4583
4584    ; mode 14 [row 12]
4585    pslldq        m5,    2
4586    pinsrb        m5,    [r2 + 10],   1
4587    pinsrb        m5,    [r2 + 12],   0
4588    movu          m0,    [r2 + 3 + 32]
4589    psrldq        m6,    m0,          1
4590    punpcklbw     m0,    m6
4591
4592    ; mode 15 [row 9 - second half]
4593    pmaddubsw     m1,    m0,             [r3 + 22 * 16]
4594    pmulhrsw      m1,    m3
4595    packuswb      m1,                    m1
4596    movh          [r0 + 217 * 16 + 8],   m1
4597    ; mode 15 [row 9 - second half] end
4598
4599    ; mode 15 [row 10 - second half]
4600    pmaddubsw     m1,    m0,             [r3 + 5 * 16]
4601    pmulhrsw      m1,    m3
4602    packuswb      m1,                    m1
4603    movh          [r0 + 218 * 16 + 8],   m1
4604    ; mode 15 [row 10 - second half] end
4605
4606    ; mode 16 [row 7 - second half]
4607    pmaddubsw     m1,    m0,             [r3 + 24 * 16]
4608    pmulhrsw      m1,    m3
4609    packuswb      m1,                    m1
4610    movh          [r0 + 231 * 16 + 8],   m1
4611    ; mode 16 [row 7 - second half] end
4612
4613    ; mode 16 [row 8 - second half]
4614    pmaddubsw     m1,    m0,             [r3 + 3 * 16]
4615    pmulhrsw      m1,    m3
4616    packuswb      m1,                    m1
4617    movh          [r0 + 232 * 16 + 8],   m1
4618    ; mode 16 [row 8 - second half] end
4619
4620    pmaddubsw     m1,    m5,          [r3 + 23 * 16]
4621    pmulhrsw      m1,    m3
4622    pmaddubsw     m6,    m0,          [r3 + 23 * 16]
4623    pmulhrsw      m6,    m3
4624    packuswb      m1,                 m6
4625    movu          [r0 + 204 * 16],    m1
4626
4627    ; mode 14 [row 13]
4628    pmaddubsw     m1,    m5,          [r3 + 10 * 16]
4629    pmulhrsw      m1,    m3
4630    pmaddubsw     m6,    m0,          [r3 + 10 * 16]
4631    pmulhrsw      m6,    m3
4632    packuswb      m1,                 m6
4633    movu          [r0 + 205 * 16],    m1
4634
4635    ; mode 14 [row 14]
4636    pslldq        m5,    2
4637    pinsrb        m5,    [r2 + 12],   1
4638    pinsrb        m5,    [r2 + 15],   0
4639    movu          m0,    [r2 + 2 + 32]
4640    psrldq        m6,    m0,          1
4641    punpcklbw     m0,    m6
4642
4643    ; mode 15 [row 11 - second half]
4644    pmaddubsw     m1,    m0,             [r3 + 20 * 16]
4645    pmulhrsw      m1,    m3
4646    packuswb      m1,                    m1
4647    movh          [r0 + 219 * 16 + 8],   m1
4648    ; mode 15 [row 11 - second half] end
4649
4650    ; mode 15 [row 12 - second half]
4651    pmaddubsw     m1,    m0,             [r3 + 3 * 16]
4652    pmulhrsw      m1,    m3
4653    packuswb      m1,                    m1
4654    movh          [r0 + 220 * 16 + 8],   m1
4655    ; mode 15 [row 12 - second half] end
4656
4657    ; mode 16 [row 9 - second half]
4658    pmaddubsw     m1,    m0,             [r3 + 14 * 16]
4659    pmulhrsw      m1,    m3
4660    packuswb      m1,                    m1
4661    movh          [r0 + 233 * 16 + 8],   m1
4662
4663    ; mode 16 [row 9 - second half] end
4664    pmaddubsw     m1,    m5,          [r3 + 29 * 16]
4665    pmulhrsw      m1,    m3
4666    pmaddubsw     m6,    m0,          [r3 + 29 * 16]
4667    pmulhrsw      m6,    m3
4668    packuswb      m1,                 m6
4669    movu          [r0 + 206 * 16],    m1
4670
4671    ; mode 14 [row 15]
4672    pmaddubsw     m1,    m5,          [r3 + 16 * 16]
4673    pmulhrsw      m1,    m3
4674    pmaddubsw     m6,    m0,          [r3 + 16 * 16]
4675    pmulhrsw      m6,    m3
4676    packuswb      m1,                 m6
4677    movu          [r0 + 207 * 16],    m1
4678
4679    ; mode 12 [row 12]
4680    pslldq        m0,    m2,          2
4681    pinsrb        m0,    [r2 +  6],   1
4682    pinsrb        m0,    [r2 + 13],   0
4683    pmaddubsw     m1,    m0,          [r3 + 31 * 16]
4684    pmulhrsw      m1,    m3
4685    pmaddubsw     m5,    m4,          [r3 + 31 * 16]
4686    pmulhrsw      m5,    m3
4687    packuswb      m1,                 m5
4688    movu          [r0 + 172 * 16],    m1
4689
4690    ; mode 12 [row 13]
4691    pmaddubsw     m1,    m0,          [r3 + 26 * 16]
4692    pmulhrsw      m1,    m3
4693    pmaddubsw     m5,    m4,          [r3 + 26 * 16]
4694    pmulhrsw      m5,    m3
4695    packuswb      m1,                 m5
4696    movu          [r0 + 173 * 16],    m1
4697
4698    ; mode 12 [row 14]
4699    pmaddubsw     m1,    m0,          [r3 + 21 * 16]
4700    pmulhrsw      m1,    m3
4701    pmaddubsw     m5,    m4,          [r3 + 21 * 16]
4702    pmulhrsw      m5,    m3
4703    packuswb      m1,                 m5
4704    movu          [r0 + 174 * 16],    m1
4705
4706    ; mode 12 [row 15]
4707    pmaddubsw     m1,    m0,          [r3 + 16 * 16]
4708    pmulhrsw      m1,    m3
4709    pmaddubsw     m5,    m4,          [r3 + 16 * 16]
4710    pmulhrsw      m5,    m3
4711    packuswb      m1,                 m5
4712    movu          [r0 + 175 * 16],    m1
4713
4714    ; mode 13 [row 7]
4715    pslldq        m7,    2
4716    pinsrb        m7,    [r2 +  4],   1
4717    pinsrb        m7,    [r2 +  7],   0
4718    pmaddubsw     m1,    m7,          [r3 + 24 * 16]
4719    pmulhrsw      m1,    m3
4720    pmaddubsw     m5,    m4,          [r3 + 24 * 16]
4721    pmulhrsw      m5,    m3
4722    packuswb      m1,                 m5
4723    movu          [r0 + 183 * 16],    m1
4724
4725    ; mode 13 [row 8]
4726    pmaddubsw     m1,    m7,          [r3 + 15 * 16]
4727    pmulhrsw      m1,    m3
4728    pmaddubsw     m5,    m4,          [r3 + 15 * 16]
4729    pmulhrsw      m5,    m3
4730    packuswb      m1,                 m5
4731    movu          [r0 + 184 * 16],    m1
4732
4733    ; mode 13 [row 9]
4734    pmaddubsw     m1,    m7,          [r3 + 6 * 16]
4735    pmulhrsw      m1,    m3
4736    pmaddubsw     m5,    m4,          [r3 + 6 * 16]
4737    pmulhrsw      m5,    m3
4738    packuswb      m1,                 m5
4739    movu          [r0 + 185 * 16],    m1
4740
4741    ; mode 13 [row 10]
4742    pslldq        m7,    2
4743    pinsrb        m7,    [r2 +  7],   1
4744    pinsrb        m7,    [r2 + 11],   0
4745    pmaddubsw     m1,    m7,          [r3 + 29 * 16]
4746    pmulhrsw      m1,    m3
4747    movu          m4,    [r2 + 5 + 32]
4748    psrldq        m5,    m4,         1
4749    punpcklbw     m4,    m5
4750    pmaddubsw     m5,    m4,          [r3 + 29 * 16]
4751    pmulhrsw      m5,    m3
4752    packuswb      m1,    m5
4753    movu          [r0 + 186 * 16],    m1
4754
4755    ; mode 13 [row 11]
4756    pmaddubsw     m1,    m7,          [r3 + 20 * 16]
4757    pmulhrsw      m1,    m3
4758    pmaddubsw     m5,    m4,          [r3 + 20 * 16]
4759    pmulhrsw      m5,    m3
4760    packuswb      m1,                 m5
4761    movu          [r0 + 187 * 16],    m1
4762
4763    ; mode 13 [row 12]
4764    pmaddubsw     m1,    m7,          [r3 + 11 * 16]
4765    pmulhrsw      m1,    m3
4766    pmaddubsw     m5,    m4,          [r3 + 11 * 16]
4767    pmulhrsw      m5,    m3
4768    packuswb      m1,                 m5
4769    movu          [r0 + 188 * 16],    m1
4770
4771    ; mode 13 [row 13]
4772    pmaddubsw     m1,    m7,          [r3 + 2 * 16]
4773    pmulhrsw      m1,    m3
4774    pmaddubsw     m5,    m4,          [r3 + 2 * 16]
4775    pmulhrsw      m5,    m3
4776    packuswb      m1,                 m5
4777    movu          [r0 + 189 * 16],    m1
4778
4779    ; mode 13 [row 14]
4780    pslldq        m7,    2
4781    pinsrb        m7,    [r2 + 11],   1
4782    pinsrb        m7,    [r2 + 14],   0
4783    pmaddubsw     m1,    m7,          [r3 + 25 * 16]
4784    pmulhrsw      m1,    m3
4785    movu          m4,    [r2 + 4 + 32]
4786    psrldq        m5,    m4,          1
4787    punpcklbw     m4,    m5
4788    pmaddubsw     m5,    m4,          [r3 + 25 * 16]
4789    pmulhrsw      m5,    m3
4790    packuswb      m1,                 m5
4791    movu          [r0 + 190 * 16],    m1
4792
4793    ; mode 13 [row 15]
4794    pmaddubsw     m1,    m7,          [r3 + 16 * 16]
4795    pmulhrsw      m1,    m3
4796    pmaddubsw     m5,    m4,          [r3 + 16 * 16]
4797    pmulhrsw      m5,    m3
4798    packuswb      m1,                 m5
4799    movu          [r0 + 191 * 16],    m1
4800
4801    ; mode 17 [row 15]
4802    movu         m0,                   [r2]
4803    pshufb       m1,                   m0,       [tab_S1]
4804    movu         [r0 + 255 * 16],      m1
4805    movu         m2,                   [r2 + 32]
4806    pinsrb       m2,                   [r2], 0
4807    movd         [r0 + 255 * 16 + 12], m2
4808
4809    ; mode 18 [row 0]
4810    movu         [r0 + 256 * 16],      m0
4811
4812    ; mode 18 [row 1]
4813    pslldq        m4,              m0,         1
4814    pinsrb        m4,              [r2 + 1 + 32],   0
4815    movu          [r0 + 257 * 16], m4
4816    pslldq        m4,              1
4817    pinsrb        m4,              [r2 + 2 + 32],   0
4818    movu          [r0 + 258 * 16], m4
4819    pslldq        m4,              1
4820    pinsrb        m4,              [r2 + 3 + 32],   0
4821    movu          [r0 + 259 * 16], m4
4822    pslldq        m4,              1
4823    pinsrb        m4,              [r2 + 4 + 32],   0
4824    movu          [r0 + 260 * 16], m4
4825    pslldq        m4,              1
4826    pinsrb        m4,              [r2 + 5 + 32],   0
4827    movu          [r0 + 261 * 16], m4
4828    pslldq        m4,              1
4829    pinsrb        m4,              [r2 + 6 + 32],   0
4830    movu          [r0 + 262 * 16], m4
4831    pslldq        m4,              1
4832    pinsrb        m4,              [r2 + 7 + 32],   0
4833    movu          [r0 + 263 * 16], m4
4834    pslldq        m4,              1
4835    pinsrb        m4,              [r2 + 8 + 32],   0
4836    movu          [r0 + 264 * 16], m4
4837    pslldq        m4,              1
4838    pinsrb        m4,              [r2 + 9 + 32],   0
4839    movu          [r0 + 265 * 16], m4
4840    pslldq        m4,              1
4841    pinsrb        m4,              [r2 + 10 + 32],   0
4842    movu          [r0 + 266 * 16], m4
4843    pslldq        m4,              1
4844    pinsrb        m4,              [r2 + 11 + 32],   0
4845    movu          [r0 + 267 * 16], m4
4846    pslldq        m4,              1
4847    pinsrb        m4,              [r2 + 12 + 32],   0
4848    movu          [r0 + 268 * 16], m4
4849    pslldq        m4,              1
4850    pinsrb        m4,              [r2 + 13 + 32],   0
4851    movu          [r0 + 269 * 16], m4
4852    pslldq        m4,              1
4853    pinsrb        m4,              [r2 + 14 + 32],   0
4854    movu          [r0 + 270 * 16], m4
4855    pslldq        m4,              1
4856    pinsrb        m4,              [r2 + 15 + 32],   0
4857    movu          [r0 + 271 * 16], m4
4858
4859    ; mode 19 [row 0]
4860    psrldq        m2,    m0,           1
4861    punpcklbw     m0,    m2
4862    movu          m5,    [r2 + 8]
4863    psrldq        m6,    m5,           1
4864    punpcklbw     m5,    m6
4865    pmaddubsw     m4,    m0,           [r3 + 6 * 16]
4866    pmulhrsw      m4,    m3
4867    pmaddubsw     m6,    m5,           [r3 + 6 * 16]
4868    pmulhrsw      m6,    m3
4869    packuswb      m4,                  m6
4870    movu          [r0 + 272 * 16],     m4
4871
4872    ; mode 20 [row 0]
4873    pmaddubsw     m4,    m0,           [r3 + 11 * 16]
4874    pmulhrsw      m4,    m3
4875    pmaddubsw     m6,    m5,           [r3 + 11 * 16]
4876    pmulhrsw      m6,    m3
4877    packuswb      m4,                  m6
4878    movu          [r0 + 288 * 16],     m4
4879
4880    ; mode 21 [row 0]
4881    pmaddubsw     m4,    m0,            [r3 + 15 * 16]
4882    pmulhrsw      m4,    m3
4883    pmaddubsw     m6,    m5,            [r3 + 15 * 16]
4884    pmulhrsw      m6,    m3
4885    packuswb      m4,                  m6
4886    movu          [r0 + 304 * 16],     m4
4887
4888    ; mode 22 [row 0]
4889    pmaddubsw     m4,    m0,           [r3 + 19 * 16]
4890    pmulhrsw      m4,    m3
4891    pmaddubsw     m6,    m5,           [r3 + 19 * 16]
4892    pmulhrsw      m6,    m3
4893    packuswb      m4,                  m6
4894    movu          [r0 + 320 * 16],     m4
4895
4896    ; mode 22 [row 1]
4897    pmaddubsw     m4,    m0,           [r3 + 6 * 16]
4898    pmulhrsw      m4,    m3
4899    pmaddubsw     m6,    m5,           [r3 + 6 * 16]
4900    pmulhrsw      m6,    m3
4901    packuswb      m4,                  m6
4902    movu          [r0 + 321 * 16],     m4
4903
4904    ; mode 23 [row 0]
4905    pmaddubsw     m4,    m0,           [r3 + 23 * 16]
4906    pmulhrsw      m4,    m3
4907    pmaddubsw     m6,    m5,           [r3 + 23 * 16]
4908    pmulhrsw      m6,    m3
4909    packuswb      m4,                  m6
4910    movu          [r0 + 336 * 16],     m4
4911
4912    ; mode 23 [row 1]
4913    pmaddubsw     m4,    m0,           [r3 + 14 * 16]
4914    pmulhrsw      m4,    m3
4915    pmaddubsw     m6,    m5,           [r3 + 14 * 16]
4916    pmulhrsw      m6,    m3
4917    packuswb      m4,                  m6
4918    movu          [r0 + 337 * 16],     m4
4919
4920    ; mode 23 [row 2]
4921    pmaddubsw     m4,    m0,           [r3 + 5 * 16]
4922    pmulhrsw      m4,    m3
4923    pmaddubsw     m6,    m5,           [r3 + 5 * 16]
4924    pmulhrsw      m6,    m3
4925    packuswb      m4,                  m6
4926    movu          [r0 + 338 * 16],     m4
4927
4928    ; mode 24 [row 0]
4929    pmaddubsw     m4,    m0,           [r3 + 27 * 16]
4930    pmulhrsw      m4,    m3
4931    pmaddubsw     m6,    m5,           [r3 + 27 * 16]
4932    pmulhrsw      m6,    m3
4933    packuswb      m4,                  m6
4934    movu          [r0 + 352 * 16],     m4
4935
4936    ; mode 24 [row 1]
4937    pmaddubsw     m4,    m0,            [r3 + 22 * 16]
4938    pmulhrsw      m4,    m3
4939    pmaddubsw     m6,    m5,            [r3 + 22 * 16]
4940    pmulhrsw      m6,    m3
4941    packuswb      m4,                  m6
4942    movu          [r0 + 353 * 16],     m4
4943
4944    ; mode 24 [row 2]
4945    pmaddubsw     m4,    m0,           [r3 + 17 * 16]
4946    pmulhrsw      m4,    m3
4947    pmaddubsw     m6,    m5,           [r3 + 17 * 16]
4948    pmulhrsw      m6,    m3
4949    packuswb      m4,                  m6
4950    movu          [r0 + 354 * 16],     m4
4951
4952    ; mode 24 [row 3]
4953    pmaddubsw     m4,    m0,           [r3 + 12 * 16]
4954    pmulhrsw      m4,    m3
4955    pmaddubsw     m6,    m5,           [r3 + 12 * 16]
4956    pmulhrsw      m6,    m3
4957    packuswb      m4,                  m6
4958    movu          [r0 + 355 * 16],     m4
4959
4960    ; mode 24 [row 4]
4961    pmaddubsw     m4,    m0,            [r3 + 7 * 16]
4962    pmulhrsw      m4,    m3
4963    pmaddubsw     m6,    m5,            [r3 + 7 * 16]
4964    pmulhrsw      m6,    m3
4965    packuswb      m4,                  m6
4966    movu          [r0 + 356 * 16],     m4
4967
4968    ; mode 24 [row 5]
4969    pmaddubsw     m4,    m0,           [r3 + 2 * 16]
4970    pmulhrsw      m4,    m3
4971    pmaddubsw     m6,    m5,           [r3 + 2 * 16]
4972    pmulhrsw      m6,    m3
4973    packuswb      m4,                  m6
4974    movu          [r0 + 357 * 16],     m4
4975
4976    ; mode 24 [row 6 - first half]
4977    pslldq        m7,    m0,    2
4978    pinsrb        m7,    [r2 + 0],     1
4979    pinsrb        m7,    [r2 + 6 + 32],     0
4980    pmaddubsw     m4,    m7,           [r3 + 29 * 16]
4981    pmulhrsw      m4,    m3
4982    packuswb      m4,                  m4
4983    movh          [r0 + 358 * 16],     m4
4984
4985    ; mode 24 [row 7 - first half]
4986    pmaddubsw     m4,    m7,           [r3 + 24 * 16]
4987    pmulhrsw      m4,    m3
4988    packuswb      m4,                  m4
4989    movh          [r0 + 359 * 16],     m4
4990
4991    ; mode 24 [row 8 - first half]
4992    pmaddubsw     m4,    m7,           [r3 + 19 * 16]
4993    pmulhrsw      m4,    m3
4994    packuswb      m4,                  m4
4995    movh          [r0 + 360 * 16],     m4
4996
4997    ; mode 24 [row 9 - first half]
4998    pmaddubsw     m4,    m7,           [r3 + 14 * 16]
4999    pmulhrsw      m4,    m3
5000    packuswb      m4,                  m4
5001    movh          [r0 + 361 * 16],     m4
5002
5003    ; mode 24 [row 10 - first half]
5004    pmaddubsw     m4,    m7,           [r3 + 9 * 16]
5005    pmulhrsw      m4,    m3
5006    packuswb      m4,                  m4
5007    movh          [r0 + 362 * 16],     m4
5008
5009    ; mode 24 [row 11 - first half]
5010    pmaddubsw     m4,    m7,           [r3 + 4 * 16]
5011    pmulhrsw      m4,    m3
5012    packuswb      m4,                  m4
5013    movh          [r0 + 363 * 16],     m4
5014
5015    ; mode 24 [row 12 - first half]
5016    pslldq        m7,    2
5017    pinsrb        m7,    [r2 +  6 + 32],    1
5018    pinsrb        m7,    [r2 + 13 + 32],    0
5019    pmaddubsw     m4,    m7,           [r3 + 31 * 16]
5020    pmulhrsw      m4,    m3
5021    packuswb      m4,                  m4
5022    movh          [r0 + 364 * 16],     m4
5023
5024    ; mode 24 [row 13 - first half]
5025    pmaddubsw     m4,    m7,           [r3 + 26 * 16]
5026    pmulhrsw      m4,    m3
5027    packuswb      m4,                  m4
5028    movh          [r0 + 365 * 16],     m4
5029
5030    ; mode 24 [row 14 - first half]
5031    pmaddubsw     m4,    m7,           [r3 + 21 * 16]
5032    pmulhrsw      m4,    m3
5033    packuswb      m4,                  m4
5034    movh          [r0 + 366 * 16],     m4
5035
5036    ; mode 24 [row 15 - first half]
5037    pmaddubsw     m4,    m7,           [r3 + 16 * 16]
5038    pmulhrsw      m4,    m3
5039    packuswb      m4,                  m4
5040    movh          [r0 + 367 * 16],     m4
5041
5042    ; mode 23 [row 3 - first half]
5043    pslldq        m7,    m0,    2
5044    pinsrb        m7,    [r2 + 0],     1
5045    pinsrb        m7,    [r2 + 4 + 32],     0
5046    pmaddubsw     m4,    m7,           [r3 + 28 * 16]
5047    pmulhrsw      m4,    m3
5048    packuswb      m4,                  m4
5049    movh          [r0 + 339 * 16],     m4
5050
5051    ; mode 23 [row 4 - first half]
5052    pmaddubsw     m4,    m7,           [r3 + 19 * 16]
5053    pmulhrsw      m4,    m3
5054    packuswb      m4,                  m4
5055    movh          [r0 + 340 * 16],     m4
5056
5057    ; mode 23 [row 5 - first half]
5058    pmaddubsw     m4,    m7,           [r3 + 10 * 16]
5059    pmulhrsw      m4,    m3
5060    packuswb      m4,                  m4
5061    movh          [r0 + 341 * 16],     m4
5062
5063    ; mode 23 [row 6 - first half]
5064    pmaddubsw     m4,    m7,           [r3 + 1 * 16]
5065    pmulhrsw      m4,    m3
5066    packuswb      m4,                  m4
5067    movh          [r0 + 342 * 16],     m4
5068
5069    ; mode 23 [row 7 - first half]
5070    pslldq        m7,    2
5071    pinsrb        m7,    [r2 + 4 + 32],     1
5072    pinsrb        m7,    [r2 + 7 + 32],     0
5073    pmaddubsw     m4,    m7,            [r3 + 24 * 16]
5074    pmulhrsw      m4,    m3
5075    packuswb      m4,                  m4
5076    movh          [r0 + 343 * 16],     m4
5077
5078    ; mode 23 [row 8 - first half]
5079    pmaddubsw     m4,    m7,           [r3 + 15 * 16]
5080    pmulhrsw      m4,    m3
5081    packuswb      m4,                  m4
5082    movh          [r0 + 344 * 16],     m4
5083
5084    ; mode 23 [row 9 - first half]
5085    pmaddubsw     m4,    m7,           [r3 + 6 * 16]
5086    pmulhrsw      m4,    m3
5087    packuswb      m4,                  m4
5088    movh          [r0 + 345 * 16],     m4
5089
5090    ; mode 23 [row 10 - first half]
5091    pslldq        m7,    2
5092    pinsrb        m7,    [r2 +  7 + 32],    1
5093    pinsrb        m7,    [r2 + 11 + 32],    0
5094    pmaddubsw     m4,    m7,           [r3 + 29 * 16]
5095    pmulhrsw      m4,    m3
5096    packuswb      m4,                  m4
5097    movh          [r0 + 346 * 16],     m4
5098
5099    ; mode 23 [row 11 - first half]
5100    pmaddubsw     m4,    m7,           [r3 + 20 * 16]
5101    pmulhrsw      m4,    m3
5102    packuswb      m4,                  m4
5103    movh          [r0 + 347 * 16],     m4
5104
5105    ; mode 23 [row 12 - first half]
5106    pmaddubsw     m4,    m7,           [r3 + 11 * 16]
5107    pmulhrsw      m4,    m3
5108    packuswb      m4,                  m4
5109    movh          [r0 + 348 * 16],     m4
5110
5111    ; mode 23 [row 13 - first half]
5112    pmaddubsw     m4,    m7,           [r3 + 2 * 16]
5113    pmulhrsw      m4,    m3
5114    packuswb      m4,                  m4
5115    movh          [r0 + 349 * 16],     m4
5116
5117    ; mode 23 [row 14 - first half]
5118    pslldq        m7,    2
5119    pinsrb        m7,    [r2 + 11 + 32],   1
5120    pinsrb        m7,    [r2 + 14 + 32],   0
5121    pmaddubsw     m4,    m7,           [r3 + 25 * 16]
5122    pmulhrsw      m4,    m3
5123    packuswb      m4,                  m4
5124    movh          [r0 + 350 * 16],     m4
5125
5126    ; mode 23 [row 15 - first half]
5127    pmaddubsw     m4,    m7,           [r3 + 16 * 16]
5128    pmulhrsw      m4,    m3
5129    packuswb      m4,                  m4
5130    movh          [r0 + 351 * 16],     m4
5131
5132    ; mode 21 [row 15 - first half]
5133    pmaddubsw     m4,    m0,         [r3 + 16 * 16]
5134    pmulhrsw      m4,    m3
5135    packuswb      m4,                  m4
5136    movh          [r0 + 319 * 16 + 8], m4
5137    ; mode 21 [row 15 - second half] end
5138
5139    ; mode 20 [row 1 - first half]
5140    pslldq        m7,    m0,    2
5141    pinsrb        m7,    [r2 + 0],   1
5142    pinsrb        m7,    [r2 + 2 + 32],   0
5143    pmaddubsw     m4,    m7,           [r3 + 22 * 16]
5144    pmulhrsw      m4,    m3
5145    packuswb      m4,                  m4
5146    movh          [r0 + 289 * 16],     m4
5147
5148    ; mode 20 [row 2 - first half]
5149    pmaddubsw     m4,    m7,           [r3 + 1 * 16]
5150    pmulhrsw      m4,    m3
5151    packuswb      m4,                  m4
5152    movh          [r0 + 290 * 16],     m4
5153
5154    ; mode 21 [row 1 - first half]
5155    pmaddubsw     m4,    m7,           [r3 + 30 * 16]
5156    pmulhrsw      m4,    m3
5157    packuswb      m4,                  m4
5158    movh          [r0 + 305 * 16],     m4
5159
5160    ; mode 21 [row 2 - first half]
5161    pmaddubsw     m4,    m7,           [r3 + 13 * 16]
5162    pmulhrsw      m4,    m3
5163    packuswb      m4,                  m4
5164    movh          [r0 + 306 * 16],     m4
5165
5166    ; mode 22 [row 2 - first half]
5167    pmaddubsw     m4,    m7,           [r3 + 25 * 16]
5168    pmulhrsw      m4,    m3
5169    packuswb      m4,                  m4
5170    movh          [r0 + 322 * 16],     m4
5171
5172    ; mode 22 [row 3 - first half]
5173    pmaddubsw     m4,    m7,           [r3 + 12 * 16]
5174    pmulhrsw      m4,    m3
5175    packuswb      m4,                  m4
5176    movh          [r0 + 323 * 16],     m4
5177
5178    ; mode 22 [row 4 - first half]
5179    pslldq        m1,    m7,    2
5180    pinsrb        m1,    [r2 + 2 + 32],     1
5181    pinsrb        m1,    [r2 + 5 + 32],     0
5182    pmaddubsw     m4,    m1,           [r3 + 31 * 16]
5183    pmulhrsw      m4,    m3
5184    packuswb      m4,                  m4
5185    movh          [r0 + 324 * 16],     m4
5186
5187    ; mode 22 [row 5 - first half]
5188    pmaddubsw     m4,    m1,           [r3 + 18 * 16]
5189    pmulhrsw      m4,    m3
5190    packuswb      m4,                  m4
5191    movh          [r0 + 325 * 16],     m4
5192
5193    ; mode 22 [row 6 - first half]
5194    pmaddubsw     m4,    m1,           [r3 + 5 * 16]
5195    pmulhrsw      m4,    m3
5196    packuswb      m4,                  m4
5197    movh          [r0 + 326 * 16],     m4
5198
5199    ; mode 22 [row 7 - first half]
5200    pslldq        m1,    2
5201    pinsrb        m1,    [r2 + 5 + 32],     1
5202    pinsrb        m1,    [r2 + 7 + 32],     0
5203    pmaddubsw     m4,    m1,           [r3 + 24 * 16]
5204    pmulhrsw      m4,    m3
5205    packuswb      m4,                  m4
5206    movh          [r0 + 327 * 16],     m4
5207
5208    ; mode 22 [row 8 - first half]
5209    pmaddubsw     m4,    m1,           [r3 + 11 * 16]
5210    pmulhrsw      m4,    m3
5211    packuswb      m4,                  m4
5212    movh          [r0 + 328 * 16],     m4
5213
5214    ; mode 22 [row 9 - first half]
5215    pslldq        m1,    2
5216    pinsrb        m1,    [r2 +  7 + 32],    1
5217    pinsrb        m1,    [r2 + 10 + 32],    0
5218    pmaddubsw     m4,    m1,           [r3 + 30 * 16]
5219    pmulhrsw      m4,    m3
5220    packuswb      m4,                  m4
5221    movh          [r0 + 329 * 16],     m4
5222
5223    ; mode 22 [row 10 - first half]
5224    pmaddubsw     m4,    m1,           [r3 + 17 * 16]
5225    pmulhrsw      m4,    m3
5226    packuswb      m4,                  m4
5227    movh          [r0 + 330 * 16],     m4
5228
5229    ; mode 22 [row 11 - first half]
5230    pmaddubsw     m4,    m1,           [r3 + 4 * 16]
5231    pmulhrsw      m4,    m3
5232    packuswb      m4,                  m4
5233    movh          [r0 + 331 * 16],     m4
5234
5235    ; mode 22 [row 12 - first half]
5236    pslldq        m1,    2
5237    pinsrb        m1,    [r2 + 10 + 32],    1
5238    pinsrb        m1,    [r2 + 12 + 32],    0
5239    pmaddubsw     m4,    m1,           [r3 + 23 * 16]
5240    pmulhrsw      m4,    m3
5241    packuswb      m4,                  m4
5242    movh          [r0 + 332 * 16],     m4
5243
5244    ; mode 22 [row 13 - first half]
5245    pmaddubsw     m4,    m1,           [r3 + 10 * 16]
5246    pmulhrsw      m4,    m3
5247    packuswb      m4,                  m4
5248    movh          [r0 + 333 * 16],     m4
5249
5250    ; mode 22 [row 14 - first half]
5251    pslldq        m1,    2
5252    pinsrb        m1,    [r2 + 12 + 32],   1
5253    pinsrb        m1,    [r2 + 15 + 32],   0
5254    pmaddubsw     m4,    m1,          [r3 + 29 * 16]
5255    pmulhrsw      m4,    m3
5256    packuswb      m4,                  m4
5257    movh          [r0 + 334 * 16],     m4
5258
5259    ; mode 22 [row 15 - first half]
5260    pmaddubsw     m4,    m1,           [r3 + 16 * 16]
5261    pmulhrsw      m4,    m3
5262    packuswb      m4,                  m4
5263    movh          [r0 + 335 * 16],     m4
5264
5265    ; mode 21 [row 3 - first half]
5266    pslldq        m6,    m7,    2
5267    pinsrb        m6,    [r2 + 2 + 32],     1
5268    pinsrb        m6,    [r2 + 4 + 32],     0
5269    pmaddubsw     m4,    m6,           [r3 + 28 * 16]
5270    pmulhrsw      m4,    m3
5271    packuswb      m4,                  m4
5272    movh          [r0 + 307 * 16],     m4
5273
5274    ; mode 21 [row 4 - first half]
5275    pmaddubsw     m4,    m6,            [r3 + 11 * 16]
5276    pmulhrsw      m4,    m3
5277    packuswb      m4,                  m4
5278    movh          [r0 + 308 * 16],     m4
5279
5280    ; mode 21 [row 5 - first half]
5281    pslldq        m6,    2
5282    pinsrb        m6,    [r2 + 4 + 32],     1
5283    pinsrb        m6,    [r2 + 6 + 32],     0
5284    pmaddubsw     m4,    m6,           [r3 + 26 * 16]
5285    pmulhrsw      m4,    m3
5286    packuswb      m4,                  m4
5287    movh          [r0 + 309 * 16],     m4
5288
5289    ; mode 21 [row 6 - first half]
5290    pmaddubsw     m4,    m6,           [r3 + 9 * 16]
5291    pmulhrsw      m4,    m3
5292    packuswb      m4,                  m4
5293    movh          [r0 + 310 * 16],     m4
5294
5295    ; mode 21 [row 7 - first half]
5296    pslldq        m6,    2
5297    pinsrb        m6,    [r2 + 6 + 32],     1
5298    pinsrb        m6,    [r2 + 8 + 32],     0
5299    pmaddubsw     m4,    m6,           [r3 + 24 * 16]
5300    pmulhrsw      m4,    m3
5301    packuswb      m4,                  m4
5302    movh          [r0 + 311 * 16],     m4
5303
5304    ; mode 21 [row 8 - first half]
5305    pmaddubsw     m4,    m6,           [r3 + 7 * 16]
5306    pmulhrsw      m4,    m3
5307    packuswb      m4,                  m4
5308    movh          [r0 + 312 * 16],     m4
5309
5310    ; mode 21 [row 9 - first half]
5311    pslldq        m6,    2
5312    pinsrb        m6,    [r2 + 8 + 32],     1
5313    pinsrb        m6,    [r2 + 9 + 32],     0
5314    pmaddubsw     m4,    m6,            [r3 + 22 * 16]
5315    pmulhrsw      m4,    m3
5316    packuswb      m4,                  m4
5317    movh          [r0 + 313 * 16],     m4
5318
5319    ; mode 21 [row 10 - first half]
5320    pmaddubsw     m4,    m6,            [r3 + 5 * 16]
5321    pmulhrsw      m4,    m3
5322    packuswb      m4,                  m4
5323    movh          [r0 + 314 * 16],     m4
5324
5325    ; mode 21 [row 11 - first half]
5326    pslldq        m6,    2
5327    pinsrb        m6,    [r2 +  9 + 32],    1
5328    pinsrb        m6,    [r2 + 11 + 32],    0
5329    pmaddubsw     m4,    m6,           [r3 + 20 * 16]
5330    pmulhrsw      m4,    m3
5331    packuswb      m4,                  m4
5332    movh          [r0 + 315 * 16],     m4
5333
5334    ; mode 21 [row 12 - first half]
5335    pmaddubsw     m4,    m6,           [r3 + 3 * 16]
5336    pmulhrsw      m4,    m3
5337    packuswb      m4,                  m4
5338    movh          [r0 + 316 * 16],     m4
5339
5340    ; mode 21 [row 13 - first half]
5341    pslldq        m6,    2
5342    pinsrb        m6,    [r2 + 11 + 32],    1
5343    pinsrb        m6,    [r2 + 13 + 32],    0
5344    pmaddubsw     m4,    m6,           [r3 + 18 * 16]
5345    pmulhrsw      m4,    m3
5346    packuswb      m4,                  m4
5347    movh          [r0 + 317 * 16],     m4
5348
5349    ; mode 21 [row 14 - first half]
5350    pmaddubsw     m4,    m6,           [r3 + 1 * 16]
5351    pmulhrsw      m4,    m3
5352    packuswb      m4,                  m4
5353    movh          [r0 + 318 * 16],     m4
5354
5355    ; mode 21 [row 15 - first half]
5356    pslldq        m6,    2
5357    pinsrb        m6,    [r2 + 32 + 13],    1
5358    pinsrb        m6,    [r2 + 32 + 15],    0
5359    pmaddubsw     m4,    m6,           [r3 + 16 * 16]
5360    pmulhrsw      m4,    m3
5361    packuswb      m4,                  m4
5362    movh          [r0 + 319 * 16],     m4
5363
5364    ; mode 20 [row 13 - second half]
5365    pmaddubsw     m4,    m7,           [r3 + 26 * 16]
5366    pmulhrsw      m4,    m3
5367    packuswb      m4,                  m4
5368    movh          [r0 + 301 * 16 + 8], m4
5369    ; mode 20 [row 13 - second half]
5370
5371    ; mode 20 [row 14 - second half]
5372    pmaddubsw     m4,    m7,           [r3 + 5 * 16]
5373    pmulhrsw      m4,    m3
5374    packuswb      m4,                  m4
5375    movh          [r0 + 302 * 16 + 8], m4
5376    ; mode 20 [row 14 - second half]
5377
5378    ; mode 20 [row 3 - first half]
5379    pslldq        m7,    2
5380    pinsrb        m7,    [r2 + 32 + 2],    1
5381    pinsrb        m7,    [r2 + 32 + 3],    0
5382    pmaddubsw     m4,    m7,           [r3 + 12 * 16]
5383    pmulhrsw      m4,    m3
5384    packuswb      m4,                  m4
5385    movh          [r0 + 291 * 16],     m4
5386
5387    ; mode 20 [row 15 - second half]
5388    pmaddubsw     m4,    m7,           [r3 + 16 * 16]
5389    pmulhrsw      m4,    m3
5390    packuswb      m4,                  m4
5391    movh          [r0 + 303 * 16 + 8], m4
5392    ; mode 20 [row 15 - second half]
5393
5394    ; mode 20 [row 4 - first half]
5395    pslldq        m7,    2
5396    pinsrb        m7,    [r2 + 32 + 3],     1
5397    pinsrb        m7,    [r2 + 32 + 5],     0
5398    pmaddubsw     m4,    m7,           [r3 + 23 * 16]
5399    pmulhrsw      m4,    m3
5400    packuswb      m4,                  m4
5401    movh          [r0 + 292 * 16],     m4
5402
5403    ; mode 20 [row 5 - first half]
5404    pmaddubsw     m4,    m7,           [r3 + 2 * 16]
5405    pmulhrsw      m4,    m3
5406    packuswb      m4,                  m4
5407    movh          [r0 + 293 * 16],     m4
5408
5409    ; mode 20 [row 6 - first half]
5410    pslldq        m7,    2
5411    pinsrb        m7,    [r2 + 32 + 5],     1
5412    pinsrb        m7,    [r2 + 32 + 6],     0
5413    pmaddubsw     m4,    m7,           [r3 + 13 * 16]
5414    pmulhrsw      m4,    m3
5415    packuswb      m4,                  m4
5416    movh          [r0 + 294 * 16],     m4
5417
5418    ; mode 20 [row 7 - first half]
5419    pslldq        m7,    2
5420    pinsrb        m7,    [r2 + 32 + 6],   1
5421    pinsrb        m7,    [r2 + 32 + 8],   0
5422    pmaddubsw     m4,    m7,           [r3 + 24 * 16]
5423    pmulhrsw      m4,    m3
5424    packuswb      m4,                  m4
5425    movh          [r0 + 295 * 16],     m4
5426
5427    ; mode 20 [row 8 - first half]
5428    pmaddubsw     m4,    m7,           [r3 + 3 * 16]
5429    pmulhrsw      m4,    m3
5430    packuswb      m4,                  m4
5431    movh          [r0 + 296 * 16],     m4
5432
5433    ; mode 20 [row 9 - first half]
5434    pslldq        m7,    2
5435    pinsrb        m7,    [r2 + 32 + 8],   1
5436    pinsrb        m7,    [r2 + 32 + 9],   0
5437    pmaddubsw     m4,    m7,           [r3 + 14 * 16]
5438    pmulhrsw      m4,    m3
5439    packuswb      m4,                  m4
5440    movh          [r0 + 297 * 16],     m4
5441
5442    ; mode 20 [row 10 - first half]
5443    pslldq        m7,    2
5444    pinsrb        m7,    [r2 + 32 +  9],   1
5445    pinsrb        m7,    [r2 + 32 + 11],   0
5446    pmaddubsw     m4,    m7,           [r3 + 25 * 16]
5447    pmulhrsw      m4,    m3
5448    packuswb      m4,                  m4
5449    movh          [r0 + 298 * 16],     m4
5450
5451    ; mode 20 [row 11 - first half]
5452    pmaddubsw     m4,    m7,           [r3 + 4 * 16]
5453    pmulhrsw      m4,    m3
5454    packuswb      m4,                  m4
5455    movh          [r0 + 299 * 16],     m4
5456
5457    ; mode 20 [row 12 - first half]
5458    movu          m1,    [r3 + 15 * 16]
5459    pslldq        m7,    2
5460    pinsrb        m7,    [r2 + 32 + 11],   1
5461    pinsrb        m7,    [r2 + 32 + 12],   0
5462    pmaddubsw     m4,    m7,           [r3 + 15 * 16]
5463    pmulhrsw      m4,    m3
5464    packuswb      m4,                  m4
5465    movh          [r0 + 300 * 16],     m4
5466
5467    ; mode 20 [row 13 - first half]
5468    pslldq        m7,    2
5469    pinsrb        m7,    [r2 + 32 + 12],   1
5470    pinsrb        m7,    [r2 + 32 + 14],   0
5471    pmaddubsw     m4,    m7,           [r3 + 26 * 16]
5472    pmulhrsw      m4,    m3
5473    packuswb      m4,                  m4
5474    movh          [r0 + 301 * 16],     m4
5475
5476    ; mode 20 [row 14 - first half]
5477    pmaddubsw     m4,    m7,           [r3 + 5 * 16]
5478    pmulhrsw      m4,    m3
5479    packuswb      m4,                  m4
5480    movh          [r0 + 302 * 16],     m4
5481
5482    ; mode 20 [row 15 - first half]
5483    pslldq        m7,    2
5484    pinsrb        m7,    [r2 + 32 + 14],    1
5485    pinsrb        m7,    [r2 + 32 + 15],    0
5486    pmaddubsw     m4,    m7,           [r3 + 16 * 16]
5487    pmulhrsw      m4,    m3
5488    packuswb      m4,                  m4
5489    movh          [r0 + 303 * 16],     m4
5490
5491    ; mode 19 [row 1]
5492    pslldq        m0,    2
5493    pinsrb        m0,    [r2],            1
5494    pinsrb        m0,    [r2 + 32 + 1],   0
5495    pslldq        m5,    2
5496    pinsrb        m5,    [r2 + 8],   1
5497    pinsrb        m5,    [r2 + 7],   0
5498
5499    ; mode 20 [row 1 - second half]
5500    pmaddubsw     m4,    m5,           [r3 + 22 * 16]
5501    pmulhrsw      m4,    m3
5502    packuswb      m4,                  m4
5503    movh          [r0 + 289 * 16 + 8], m4
5504    ; mode 20 [row 1 - second half] end
5505
5506    ; mode 20 [row 2 - second half]
5507    pmaddubsw     m4,    m5,           [r3 + 1 * 16]
5508    pmulhrsw      m4,    m3
5509    packuswb      m4,                  m4
5510    movh          [r0 + 290 * 16 + 8], m4
5511    ; mode 20 [row 2 - second half] end
5512
5513    ; mode 21 [row 2 - second half]
5514    pmaddubsw     m4,    m5,           [r3 + 30 * 16]
5515    pmulhrsw      m4,    m3
5516    packuswb      m4,                  m4
5517    movh          [r0 + 305 * 16 + 8], m4
5518    ; mode 21 [row 2 - second half] end
5519
5520    ; mode 21 [row 3 - second half]
5521    pmaddubsw     m4,    m5,           [r3 + 13 * 16]
5522    pmulhrsw      m4,    m3
5523    packuswb      m4,                  m4
5524    movh          [r0 + 306 * 16 + 8], m4
5525    ; mode 21 [row 3 - second half] end
5526
5527    ; mode 21 [row 4 - second half]
5528    pmaddubsw     m4,    m5,           [r3 + 11 * 16]
5529    pmulhrsw      m4,    m3
5530    packuswb      m4,                  m4
5531    movh          [r0 + 307 * 16 + 8], m4
5532    ; mode 21 [row 4 - second half] end
5533
5534    ; mode 22 [row 2 - second half]
5535    pmaddubsw     m4,    m5,           [r3 + 25 * 16]
5536    pmulhrsw      m4,    m3
5537    packuswb      m4,                  m4
5538    movh          [r0 + 322 * 16 + 8], m4
5539    ; mode 22 [row 2 - second half] end
5540
5541    ; mode 22 [row 3 - second half]
5542    pmaddubsw     m4,    m5,           [r3 + 12 * 16]
5543    pmulhrsw      m4,    m3
5544    packuswb      m4,                  m4
5545    movh          [r0 + 323 * 16 + 8], m4
5546    ; mode 22 [row 3 - second half] end
5547
5548    ; mode 23 [row 3 - second half]
5549    pmaddubsw     m4,    m5,          [r3 + 28 * 16]
5550    pmulhrsw      m4,    m3
5551    packuswb      m4,                  m4
5552    movh          [r0 + 339 * 16 + 8], m4
5553    ; mode 23 [row 3 - second half] end
5554
5555    ; mode 23 [row 4 - second half]
5556    pmaddubsw     m4,    m5,          [r3 + 19 * 16]
5557    pmulhrsw      m4,    m3
5558    packuswb      m4,                  m4
5559    movh          [r0 + 340 * 16 + 8], m4
5560    ; mode 23 [row 4 - second half] end
5561
5562    ; mode 23 [row 5 - second half]
5563    pmaddubsw     m4,    m5,          [r3 + 10 * 16]
5564    pmulhrsw      m4,    m3
5565    packuswb      m4,                  m4
5566    movh          [r0 + 341 * 16 + 8], m4
5567    ; mode 23 [row 5 - second half] end
5568
5569    ; mode 23 [row 6 - second half]
5570    pmaddubsw     m4,    m5,          [r3 + 1 * 16]
5571    pmulhrsw      m4,    m3
5572    packuswb      m4,                  m4
5573    movh          [r0 + 342 * 16 + 8], m4
5574    ; mode 23 [row 6 - second half] end
5575
5576    ; mode 24 [row 6 - second half]
5577    pmaddubsw     m4,    m5,           [r3 + 29 * 16]
5578    pmulhrsw      m4,    m3
5579    packuswb      m4,                  m4
5580    movh          [r0 + 358 * 16 + 8], m4
5581    ; mode 24 [row 6 - second half] end
5582
5583    ; mode 24 [row 7 - second half]
5584    pmaddubsw     m4,    m5,           [r3 + 24 * 16]
5585    pmulhrsw      m4,    m3
5586    packuswb      m4,                  m4
5587    movh          [r0 + 359 * 16 + 8], m4
5588    ; mode 24 [row 7 - second half] end
5589
5590    ; mode 24 [row 8 - second half]
5591    pmaddubsw     m4,    m5,           [r3 + 19 * 16]
5592    pmulhrsw      m4,    m3
5593    packuswb      m4,                  m4
5594    movh          [r0 + 360 * 16 + 8], m4
5595    ; mode 24 [row 8 - second half] end
5596
5597    ; mode 24 [row 9 - second half]
5598    pmaddubsw     m4,    m5,           [r3 + 14 * 16]
5599    pmulhrsw      m4,    m3
5600    packuswb      m4,                  m4
5601    movh          [r0 + 361 * 16 + 8], m4
5602    ; mode 24 [row 9 - second half] end
5603
5604    ; mode 24 [row 10 - second half]
5605    pmaddubsw     m4,    m5,           [r3 + 9 * 16]
5606    pmulhrsw      m4,    m3
5607    packuswb      m4,                  m4
5608    movh          [r0 + 362 * 16 + 8], m4
5609    ; mode 24 [row 10 - second half] end
5610
5611    ; mode 24 [row 11 - second half]
5612    pmaddubsw     m4,    m5,           [r3 + 4 * 16]
5613    pmulhrsw      m4,    m3
5614    packuswb      m4,                  m4
5615    movh          [r0 + 363 * 16 + 8], m4
5616    ; mode 24 [row 11 - second half] end
5617
5618    pmaddubsw     m4,    m0,         [r3 + 12 * 16]
5619    pmulhrsw      m4,    m3
5620    pmaddubsw     m6,    m5,         [r3 + 12 * 16]
5621    pmulhrsw      m6,    m3
5622    packuswb      m4,                m6
5623    movu          [r0 + 273 * 16],   m4
5624
5625    ; mode 19 [row 2]
5626    pslldq        m0,    2
5627    pinsrb        m0,    [r2 + 32 + 1],   1
5628    pinsrb        m0,    [r2 + 32 + 2],   0
5629    pslldq        m5,    2
5630    pinsrb        m5,    [r2 + 7],   1
5631    pinsrb        m5,    [r2 + 6],   0
5632
5633    ; mode 20 [row 3 - second half]
5634    pmaddubsw     m4,    m5,            [r3 + 12 * 16]
5635    pmulhrsw      m4,    m3
5636    packuswb      m4,                   m4
5637    movh          [r0 + 291 * 16 + 8], m4
5638    ; mode 20 [row 3 - second half] end
5639
5640    ; mode 21 [row 3 - second half]
5641    pmaddubsw     m4,    m5,           [r3 + 28 * 16]
5642    pmulhrsw      m4,    m3
5643    packuswb      m4,                  m4
5644    movh          [r0 + 307 * 16 + 8], m4
5645    ; mode 21 [row 3 - second half] end
5646
5647    ; mode 21 [row 4 - second half]
5648    pmaddubsw     m4,    m5,           [r3 + 11 * 16]
5649    pmulhrsw      m4,    m3
5650    packuswb      m4,                  m4
5651    movh          [r0 + 308 * 16 + 8], m4
5652    ; mode 21 [row 4 - second half] end
5653
5654    ; mode 22 [row 4 - second half]
5655    pmaddubsw     m4,    m5,           [r3 + 31 * 16]
5656    pmulhrsw      m4,    m3
5657    packuswb      m4,                  m4
5658    movh          [r0 + 324 * 16 + 8], m4
5659    ; mode 22 [row 4 - second half] end
5660
5661    ; mode 22 [row 5 - second half]
5662    pmaddubsw     m4,    m5,           [r3 + 18 * 16]
5663    pmulhrsw      m4,    m3
5664    packuswb      m4,                  m4
5665    movh          [r0 + 325 * 16 + 8], m4
5666    ; mode 22 [row 5 - second half] end
5667
5668    ; mode 22 [row 6 - second half]
5669    pmaddubsw     m4,    m5,           [r3 + 5 * 16]
5670    pmulhrsw      m4,    m3
5671    packuswb      m4,                  m4
5672    movh          [r0 + 326 * 16 + 8], m4
5673    ; mode 22 [row 6 - second half] end
5674
5675    ; mode 23 [row 7 - second half]
5676    pmaddubsw     m4,    m5,           [r3 + 24 * 16]
5677    pmulhrsw      m4,    m3
5678    packuswb      m4,                  m4
5679    movh          [r0 + 343 * 16 + 8], m4
5680    ; mode 23 [row 7 - second half] end
5681
5682    ; mode 23 [row 8 - second half]
5683    pmaddubsw     m4,    m5,           [r3 + 15 * 16]
5684    pmulhrsw      m4,    m3
5685    packuswb      m4,                  m4
5686    movh          [r0 + 344 * 16 + 8], m4
5687    ; mode 23 [row 8 - second half] end
5688
5689    ; mode 23 [row 9 - second half]
5690    pmaddubsw     m4,    m5,           [r3 + 6 * 16]
5691    pmulhrsw      m4,    m3
5692    packuswb      m4,                  m4
5693    movh          [r0 + 345 * 16 + 8], m4
5694    ; mode 23 [row 9 - second half] end
5695
5696    ; mode 24 [row 12 - second half]
5697    pmaddubsw     m4,    m5,          [r3 + 31 * 16]
5698    pmulhrsw      m4,    m3
5699    packuswb      m4,                  m4
5700    movh          [r0 + 364 * 16 + 8], m4
5701    ; mode 24 [row 12 - second half] end
5702
5703    ; mode 24 [row 13 - second half]
5704    pmaddubsw     m4,    m5,          [r3 + 26 * 16]
5705    pmulhrsw      m4,    m3
5706    packuswb      m4,                  m4
5707    movh          [r0 + 365 * 16 + 8], m4
5708    ; mode 24 [row 13 - second half] end
5709
5710    ; mode 24 [row 14 - second half]
5711    pmaddubsw     m4,    m5,          [r3 + 21 * 16]
5712    pmulhrsw      m4,    m3
5713    packuswb      m4,                  m4
5714    movh          [r0 + 366 * 16 + 8], m4
5715    ; mode 24 [row 14 - second half] end
5716
5717    ; mode 24 [row 15 - second half]
5718    pmaddubsw     m4,    m5,          [r3 + 16 * 16]
5719    pmulhrsw      m4,    m3
5720    packuswb      m4,                  m4
5721    movh          [r0 + 367 * 16 + 8], m4
5722    ; mode 24 [row 15 - second half] end
5723
5724    pmaddubsw     m4,    m0,         [r3 + 18 * 16]
5725    pmulhrsw      m4,    m3
5726    pmaddubsw     m6,    m5,         [r3 + 18 * 16]
5727    pmulhrsw      m6,    m3
5728    packuswb      m4,                m6
5729    movu          [r0 + 274 * 16],   m4
5730
5731    ; mode 19 [row 3]
5732    pslldq        m0,    2
5733    pinsrb        m0,    [r2 + 32 + 2],   1
5734    pinsrb        m0,    [r2 + 32 + 4],   0
5735    pslldq        m5,    2
5736    pinsrb        m5,    [r2 + 6],   1
5737    pinsrb        m5,    [r2 + 5],   0
5738
5739    ; mode 20 [row 4 - second half]
5740    pmaddubsw     m4,    m5,           [r3 + 23 * 16]
5741    pmulhrsw      m4,    m3
5742    packuswb      m4,                  m4
5743    movh          [r0 + 292 * 16 + 8], m4
5744    ; mode 20 [row 4 - second half] end
5745
5746    ; mode 20 [row 5 - second half]
5747    pmaddubsw     m4,    m5,           [r3 + 2 * 16]
5748    pmulhrsw      m4,    m3
5749    packuswb      m4,                  m4
5750    movh          [r0 + 293 * 16 + 8], m4
5751    ; mode 20 [row 5 - second half] end
5752
5753    ; mode 21 [row 5 - second half]
5754    pmaddubsw     m4,    m5,          [r3 + 26 * 16]
5755    pmulhrsw      m4,    m3
5756    packuswb      m4,                  m4
5757    movh          [r0 + 309 * 16 + 8], m4
5758    ; mode 21 [row 5 - second half] end
5759
5760    ; mode 21 [row 6 - second half]
5761    pmaddubsw     m4,    m5,          [r3 + 9 * 16]
5762    pmulhrsw      m4,    m3
5763    packuswb      m4,                  m4
5764    movh          [r0 + 310 * 16 + 8], m4
5765    ; mode 21 [row 6 - second half] end
5766
5767    ; mode 22 [row 7 - second half]
5768    pmaddubsw     m4,    m5,           [r3 + 24 * 16]
5769    pmulhrsw      m4,    m3
5770    packuswb      m4,                  m4
5771    movh          [r0 + 327 * 16 + 8], m4
5772    ; mode 22 [row 7 - second half] end
5773
5774    ; mode 22 [row 8 - second half]
5775    pmaddubsw     m4,    m5,           [r3 + 11 * 16]
5776    pmulhrsw      m4,    m3
5777    packuswb      m4,                  m4
5778    movh          [r0 + 328 * 16 + 8], m4
5779    ; mode 22 [row 7 - second half] end
5780
5781    ; mode 23 [row 10 - second half]
5782    pmaddubsw     m4,    m5,           [r3 + 29 * 16]
5783    pmulhrsw      m4,    m3
5784    packuswb      m4,                  m4
5785    movh          [r0 + 346 * 16 + 8], m4
5786    ; mode 23 [row 10 - second half] end
5787
5788    ; mode 23 [row 11 - second half]
5789    pmaddubsw     m4,    m5,           [r3 + 20 * 16]
5790    pmulhrsw      m4,    m3
5791    packuswb      m4,                  m4
5792    movh          [r0 + 347 * 16 + 8], m4
5793    ; mode 23 [row 11 - second half] end
5794
5795    ; mode 23 [row 12 - second half]
5796    pmaddubsw     m4,    m5,           [r3 + 11 * 16]
5797    pmulhrsw      m4,    m3
5798    packuswb      m4,                  m4
5799    movh          [r0 + 348 * 16 + 8], m4
5800    ; mode 23 [row 12 - second half] end
5801
5802    ; mode 23 [row 13 - second half]
5803    pmaddubsw     m4,    m5,           [r3 + 2 * 16]
5804    pmulhrsw      m4,    m3
5805    packuswb      m4,                  m4
5806    movh          [r0 + 349 * 16 + 8], m4
5807    ; mode 23 [row 13 - second half] end
5808
5809    pmaddubsw     m4,    m0,         [r3 + 24 * 16]
5810    pmulhrsw      m4,    m3
5811    pmaddubsw     m6,    m5,         [r3 + 24 * 16]
5812    pmulhrsw      m6,    m3
5813    packuswb      m4,                m6
5814    movu          [r0 + 275 * 16],   m4
5815
5816    ; mode 19 [row 4]
5817    pslldq        m0,    2
5818    pinsrb        m0,    [r2 + 32 + 4],   1
5819    pinsrb        m0,    [r2 + 32 + 5],   0
5820    pslldq        m5,    2
5821    pinsrb        m5,    [r2 + 5],   1
5822    pinsrb        m5,    [r2 + 4],   0
5823
5824    ; mode 20 [row 6 - second half]
5825    pmaddubsw     m4,    m5,           [r3 + 13 * 16]
5826    pmulhrsw      m4,    m3
5827    packuswb      m4,                  m4
5828    movh          [r0 + 294 * 16 + 8], m4
5829    ; mode 20 [row 6 - second half] end
5830
5831    ; mode 21 [row 7 - second half]
5832    pmaddubsw     m4,    m5,          [r3 + 24 * 16]
5833    pmulhrsw      m4,    m3
5834    packuswb      m4,                  m4
5835    movh          [r0 + 311 * 16 + 8], m4
5836    ; mode 21 [row 7 - second half] end
5837
5838    ; mode 21 [row 8 - second half]
5839    pmaddubsw     m4,    m5,          [r3 + 7 * 16]
5840    pmulhrsw      m4,    m3
5841    packuswb      m4,                  m4
5842    movh          [r0 + 312 * 16 + 8], m4
5843    ; mode 21 [row 8 - second half] end
5844
5845    ; mode 22 [row 9 - second half]
5846    pmaddubsw     m4,    m5,           [r3 + 30 * 16]
5847    pmulhrsw      m4,    m3
5848    packuswb      m4,                  m4
5849    movh          [r0 + 329 * 16 + 8], m4
5850    ; mode 22 [row 9 - second half] end
5851
5852    ; mode 22 [row 10 - second half]
5853    pmaddubsw     m4,    m5,           [r3 + 17 * 16]
5854    pmulhrsw      m4,    m3
5855    packuswb      m4,                  m4
5856    movh          [r0 + 330 * 16 + 8], m4
5857    ; mode 22 [row 10 - second half] end
5858
5859    ; mode 22 [row 11 - second half]
5860    pmaddubsw     m4,    m5,           [r3 + 4 * 16]
5861    pmulhrsw      m4,    m3
5862    packuswb      m4,                  m4
5863    movh          [r0 + 331 * 16 + 8], m4
5864    ; mode 22 [row 11 - second half] end
5865
5866    ; mode 23 [row 14 - second half]
5867    pmaddubsw     m4,    m5,           [r3 + 25 * 16]
5868    pmulhrsw      m4,    m3
5869    packuswb      m4,                  m4
5870    movh          [r0 + 350 * 16 + 8], m4
5871    ; mode 23 [row 14 - second half] end
5872
5873    ; mode 23 [row 15 - second half]
5874    pmaddubsw     m4,    m5,           [r3 + 16 * 16]
5875    pmulhrsw      m4,    m3
5876    packuswb      m4,                  m4
5877    movh          [r0 + 351 * 16 + 8], m4
5878
5879    ; mode 23 [row 15 - second half] end
5880    pmaddubsw     m4,    m0,         [r3 + 30 * 16]
5881    pmulhrsw      m4,    m3
5882    pmaddubsw     m6,    m5,         [r3 + 30 * 16]
5883    pmulhrsw      m6,    m3
5884    packuswb      m4,                m6
5885    movu          [r0 + 276 * 16],   m4
5886
5887    ; mode 19 [row 5]
5888    pmaddubsw     m4,    m0,         [r3 + 4 * 16]
5889    pmulhrsw      m4,    m3
5890    pmaddubsw     m6,    m5,         [r3 + 4 * 16]
5891    pmulhrsw      m6,    m3
5892    packuswb      m4,                m6
5893    movu          [r0 + 277 * 16],   m4
5894
5895    ; mode 19 [row 6]
5896    pslldq        m0,    2
5897    pinsrb        m0,    [r2 + 32 + 5],   1
5898    pinsrb        m0,    [r2 + 32 + 6],   0
5899    pslldq        m5,    2
5900    pinsrb        m5,    [r2 + 4],   1
5901    pinsrb        m5,    [r2 + 3],   0
5902
5903    ; mode 20 [row 7 - second half]
5904    pmaddubsw     m4,    m5,           [r3 + 24 * 16]
5905    pmulhrsw      m4,    m3
5906    packuswb      m4,                  m4
5907    movh          [r0 + 295 * 16 + 8], m4
5908    ; mode 20 [row 7 - second half] end
5909
5910    ; mode 20 [row 8 - second half]
5911    pmaddubsw     m4,    m5,           [r3 + 3 * 16]
5912    pmulhrsw      m4,    m3
5913    packuswb      m4,                  m4
5914    movh          [r0 + 296 * 16 + 8], m4
5915    ; mode 20 [row 8 - second half] end
5916
5917    ; mode 21 [row 9 - second half]
5918    pmaddubsw     m4,    m5,           [r3 + 22 * 16]
5919    pmulhrsw      m4,    m3
5920    packuswb      m4,                  m4
5921    movh          [r0 + 313 * 16 + 8], m4
5922    ; mode 21 [row 9 - second half] end
5923
5924    ; mode 21 [row 10 - second half]
5925    pmaddubsw     m4,    m5,           [r3 + 5 * 16]
5926    pmulhrsw      m4,    m3
5927    packuswb      m4,                  m4
5928    movh          [r0 + 314 * 16 + 8], m4
5929    ; mode 21 [row 10 - second half] end
5930
5931    ; mode 22 [row 12 - second half]
5932    pmaddubsw     m4,    m5,           [r3 + 23 * 16]
5933    pmulhrsw      m4,    m3
5934    packuswb      m4,                  m4
5935    movh          [r0 + 332 * 16 + 8], m4
5936    ; mode 22 [row 12 - second half] end
5937
5938    ; mode 22 [row 12 - second half]
5939    pmaddubsw     m4,    m5,           [r3 + 10 * 16]
5940    pmulhrsw      m4,    m3
5941    packuswb      m4,                  m4
5942    movh          [r0 + 333 * 16 + 8], m4
5943    ; mode 22 [row 12 - second half] end
5944
5945    pmaddubsw     m4,    m0,          [r3 + 10 * 16]
5946    pmulhrsw      m4,    m3
5947    pmaddubsw     m6,    m5,          [r3 + 10 * 16]
5948    pmulhrsw      m6,    m3
5949    packuswb      m4,                m6
5950    movu          [r0 + 278 * 16],   m4
5951
5952    ; mode 19 [row 7]
5953    pslldq        m0,    2
5954    pinsrb        m0,    [r2 + 32 + 6],   1
5955    pinsrb        m0,    [r2 + 32 + 7],   0
5956    pslldq        m5,    2
5957    pinsrb        m5,    [r2 + 3],   1
5958    pinsrb        m5,    [r2 + 2],   0
5959
5960    ; mode 20 [row 9 - second half]
5961    pmaddubsw     m4,    m5,           [r3 + 14 * 16]
5962    pmulhrsw      m4,    m3
5963    packuswb      m4,                  m4
5964    movh          [r0 + 297 * 16 + 8], m4
5965    ; mode 20 [row 9 - second half]
5966
5967    ; mode 21 [row 11 - second half]
5968    pmaddubsw     m4,    m5,           [r3 + 20 * 16]
5969    pmulhrsw      m4,    m3
5970    packuswb      m4,                  m4
5971    movh          [r0 + 315 * 16 + 8], m4
5972    ; mode 21 [row 11 - second half] end
5973
5974    ; mode 21 [row 12 - second half]
5975    pmaddubsw     m4,    m5,           [r3 + 3 * 16]
5976    pmulhrsw      m4,    m3
5977    packuswb      m4,                  m4
5978    movh          [r0 + 316 * 16 + 8], m4
5979    ; mode 21 [row 12 - second half] end
5980
5981    ; mode 22 [row 14 - second half]
5982    pmaddubsw     m4,    m5,           [r3 + 29 * 16]
5983    pmulhrsw      m4,    m3
5984    packuswb      m4,                  m4
5985    movh          [r0 + 334 * 16 + 8], m4
5986    ; mode 22 [row 14 - second half] end
5987
5988    ; mode 22 [row 15 - second half]
5989    pmaddubsw     m4,    m5,           [r3 + 16 * 16]
5990    pmulhrsw      m4,    m3
5991    packuswb      m4,                  m4
5992    movh          [r0 + 335 * 16 + 8], m4
5993    ; mode 22 [row 15 - second half] end
5994
5995    pmaddubsw     m4,    m0,         [r3 + 16 * 16]
5996    pmulhrsw      m4,    m3
5997    pmaddubsw     m6,    m5,         [r3 + 16 * 16]
5998    pmulhrsw      m6,    m3
5999    packuswb      m4,                m6
6000    movu          [r0 + 279 * 16],   m4
6001
6002    ; mode 19 [row 8]
6003    pslldq        m0,    2
6004    pinsrb        m0,    [r2 + 32 + 7],   1
6005    pinsrb        m0,    [r2 + 32 + 9],   0
6006    pslldq        m5,    2
6007    pinsrb        m5,    [r2 + 2],   1
6008    pinsrb        m5,    [r2 + 1],   0
6009
6010    ; mode 20 [row 10 - second half]
6011    pmaddubsw     m4,    m5,           [r3 + 25 * 16]
6012    pmulhrsw      m4,    m3
6013    packuswb      m4,                  m4
6014    movh          [r0 + 298 * 16 + 8], m4
6015    ; mode 20 [row 10 - second half] end
6016
6017    ; mode 20 [row 11 - second half]
6018    pmaddubsw     m4,    m5,           [r3 + 4 * 16]
6019    pmulhrsw      m4,    m3
6020    packuswb      m4,                  m4
6021    movh          [r0 + 299 * 16 + 8], m4
6022    ; mode 20 [row 11 - second half] end
6023
6024    ; mode 21 [row 13 - second half]
6025    pmaddubsw     m4,    m5,           [r3 + 18 * 16]
6026    pmulhrsw      m4,    m3
6027    packuswb      m4,                  m4
6028    movh          [r0 + 317 * 16 + 8], m4
6029    ; mode 21 [row 13 - second half] end
6030
6031    ; mode 21 [row 14 - second half]
6032    pmaddubsw     m4,    m5,           [r3 + 1 * 16]
6033    pmulhrsw      m4,    m3
6034    packuswb      m4,                  m4
6035    movh          [r0 + 318 * 16 + 8], m4
6036    ; mode 21 [row 14 - second half] end
6037
6038    pmaddubsw     m4,    m0,         [r3 + 22 * 16]
6039    pmulhrsw      m4,    m3
6040    pmaddubsw     m6,    m5,         [r3 + 22 * 16]
6041    pmulhrsw      m6,    m3
6042    packuswb      m4,                m6
6043    movu          [r0 + 280 * 16],   m4
6044
6045    ; mode 19 [row 9]
6046    pslldq        m0,    2
6047    pinsrb        m0,    [r2 + 32 + 9],   1
6048    pinsrb        m0,    [r2 + 32 + 10],   0
6049    pslldq        m5,    2
6050    pinsrb        m5,    [r2 + 1],   1
6051    pinsrb        m5,    [r2 + 0],   0
6052
6053    ; mode 20 [row 12 - second half]
6054    pmaddubsw     m4,    m5,           [r3 + 15 * 16]
6055    pmulhrsw      m4,    m3
6056    packuswb      m4,                  m4
6057    movh          [r0 + 300 * 16 + 8], m4
6058
6059    ; mode 20 [row 12 - second half] end
6060    pmaddubsw     m4,    m0,          [r3 + 28 * 16]
6061    pmulhrsw      m4,    m3
6062    pmaddubsw     m6,    m5,          [r3 + 28 * 16]
6063    pmulhrsw      m6,    m3
6064    packuswb      m4,                m6
6065    movu          [r0 + 281 * 16],   m4
6066
6067    ; mode 19 [row 10]
6068    pmaddubsw     m4,    m0,         [r3 + 2 * 16]
6069    pmulhrsw      m4,    m3
6070    pmaddubsw     m6,    m5,         [r3 + 2 * 16]
6071    pmulhrsw      m6,    m3
6072    packuswb      m4,                m6
6073    movu          [r0 + 282 * 16],   m4
6074
6075    ; mode 19 [row 11]
6076    pslldq        m0,    2
6077    pinsrb        m0,    [r2 + 32 + 10],   1
6078    pinsrb        m0,    [r2 + 32 + 11],   0
6079    pmaddubsw     m4,    m0,         [r3 + 8 * 16]
6080    pmulhrsw      m4,    m3
6081    pslldq        m5,    2
6082    pinsrb        m5,    [r2],            1
6083    pinsrb        m5,    [r2 + 32 + 1],   0
6084    pmaddubsw     m6,    m5,         [r3 + 8 * 16]
6085    pmulhrsw      m6,    m3
6086    packuswb      m4,                m6
6087    movu          [r0 + 283 * 16],   m4
6088
6089    ; mode 19 [row 12]
6090    pslldq        m0,    2
6091    pinsrb        m0,    [r2 + 32 + 11],   1
6092    pinsrb        m0,    [r2 + 32 + 12],   0
6093    pslldq        m5,    2
6094    pinsrb        m5,    [r2 + 32 + 1],   1
6095    pinsrb        m5,    [r2 + 32 + 2],   0
6096    pmaddubsw     m4,    m0,         [r3 + 14 * 16]
6097    pmulhrsw      m4,    m3
6098    pmaddubsw     m6,    m5,         [r3 + 14 * 16]
6099    pmulhrsw      m6,    m3
6100    packuswb      m4,                m6
6101    movu          [r0 + 284 * 16],   m4
6102
6103    ; mode 19 [row 13]
6104    pslldq        m0,    2
6105    pinsrb        m0,    [r2 + 32 + 12],   1
6106    pinsrb        m0,    [r2 + 32 + 14],   0
6107    pmaddubsw     m4,    m0,         [r3 + 20 * 16]
6108    pmulhrsw      m4,    m3
6109    pslldq        m5,    2
6110    pinsrb        m5,    [r2 + 32 + 2],   1
6111    pinsrb        m5,    [r2 + 32 + 4],   0
6112    pmaddubsw     m6,    m5,         [r3 + 20 * 16]
6113    pmulhrsw      m6,    m3
6114    packuswb      m4,                m6
6115    movu          [r0 + 285 * 16],   m4
6116
6117    ; mode 19 [row 14]
6118    pslldq        m0,    2
6119    pinsrb        m0,    [r2 + 32 + 14],   1
6120    pinsrb        m0,    [r2 + 32 + 15],   0
6121    pmaddubsw     m4,    m0,         [r3 + 26 * 16]
6122    pmulhrsw      m4,    m3
6123    pslldq        m5,    2
6124    pinsrb        m5,    [r2 + 32 + 4],   1
6125    pinsrb        m5,    [r2 + 32 + 5],   0
6126    pmaddubsw     m6,    m5,         [r3 + 26 * 16]
6127    pmulhrsw      m6,    m3
6128    packuswb      m4,                m6
6129    movu          [r0 + 286 * 16],   m4
6130
6131    ; mode 19 [row 15]
6132    movu         m0,                   [r2 + 32]
6133    pshufb       m0,                   [tab_S1]
6134    movu         [r0 + 287 * 16],      m0
6135    movd         m1,                   [r2]
6136    movd         [r0 + 287 * 16 + 12], m1
6137
6138    ; mode 25
6139    movu          m1,    [r1]
6140
6141    ; mode 26 [all rows]
6142    psrldq        m6,    m1,         1
6143    pinsrb        m6,    [r1 + 16], 15
6144    movu          m7,    m6
6145    movu         [r0 + 384 * 16],   m6
6146    movu         [r0 + 385 * 16],   m6
6147    movu         [r0 + 386 * 16],   m6
6148    movu         [r0 + 387 * 16],   m6
6149    movu         [r0 + 388 * 16],   m6
6150    movu         [r0 + 389 * 16],   m6
6151    movu         [r0 + 390 * 16],   m6
6152    movu         [r0 + 391 * 16],   m6
6153    movu         [r0 + 392 * 16],   m6
6154    movu         [r0 + 393 * 16],   m6
6155    movu         [r0 + 394 * 16],   m6
6156    movu         [r0 + 395 * 16],   m6
6157    movu         [r0 + 396 * 16],   m6
6158    movu         [r0 + 397 * 16],   m6
6159    movu         [r0 + 398 * 16],   m6
6160    movu         [r0 + 399 * 16],   m6
6161
6162    pxor         m0,          m0
6163    pshufb       m6,          m6,         m0
6164    punpcklbw    m6,          m0
6165    pinsrb       m2,          [r1], 0
6166    pshufb       m2,          m2,         m0
6167    punpcklbw    m2,          m0
6168    movu         m4,          [r1 + 1 + 32]
6169    punpcklbw    m5,          m4,         m0
6170    punpckhbw    m4,          m0
6171    psubw        m5,          m2
6172    psubw        m4,          m2
6173    psraw        m5,          1
6174    psraw        m4,          1
6175    paddw        m5,          m6
6176    paddw        m4,          m6
6177    packuswb     m5,          m4
6178
6179    pextrb       [r0 + 384 * 16],  m5,          0
6180    pextrb       [r0 + 385 * 16],  m5,          1
6181    pextrb       [r0 + 386 * 16],  m5,          2
6182    pextrb       [r0 + 387 * 16],  m5,          3
6183    pextrb       [r0 + 388 * 16],  m5,          4
6184    pextrb       [r0 + 389 * 16],  m5,          5
6185    pextrb       [r0 + 390 * 16],  m5,          6
6186    pextrb       [r0 + 391 * 16],  m5,          7
6187    pextrb       [r0 + 392 * 16],  m5,          8
6188    pextrb       [r0 + 393 * 16],  m5,          9
6189    pextrb       [r0 + 394 * 16],  m5,          10
6190    pextrb       [r0 + 395 * 16],  m5,          11
6191    pextrb       [r0 + 396 * 16],  m5,          12
6192    pextrb       [r0 + 397 * 16],  m5,          13
6193    pextrb       [r0 + 398 * 16],  m5,          14
6194    pextrb       [r0 + 399 * 16],  m5,          15
6195
6196    ; mode 25 [row 15]
6197    movu          [r0 + 383 * 16],     m1
6198
6199    ; mode 25 [row 0]
6200    psrldq        m2,    m1,           1
6201    punpcklbw     m1,    m2
6202    movu          m2,    [r1 + 8]
6203    psrldq        m4,    m2,           1
6204    punpcklbw     m2,    m4
6205    pmaddubsw     m4,    m1,           [r3 + 30 * 16]
6206    pmulhrsw      m4,    m3
6207    pmaddubsw     m5,    m2,           [r3 + 30 * 16]
6208    pmulhrsw      m5,    m3
6209    packuswb      m4,                  m5
6210    movu          [r0 + 368 * 16],     m4
6211
6212    ; mode 25 [row 1]
6213    pmaddubsw     m4,    m1,            [r3 + 28 * 16]
6214    pmulhrsw      m4,    m3
6215    pmaddubsw     m5,    m2,            [r3 + 28 * 16]
6216    pmulhrsw      m5,    m3
6217    packuswb      m4,                  m5
6218    movu          [r0 + 369 * 16],     m4
6219
6220    ; mode 25 [row 2]
6221    pmaddubsw     m4,    m1,            [r3 + 26 * 16]
6222    pmulhrsw      m4,    m3
6223    pmaddubsw     m5,    m2,            [r3 + 26 * 16]
6224    pmulhrsw      m5,    m3
6225    packuswb      m4,                  m5
6226    movu          [r0 + 370 * 16],     m4
6227
6228    ; mode 25 [row 3]
6229    pmaddubsw     m4,    m1,            [r3 + 24 * 16]
6230    pmulhrsw      m4,    m3
6231    pmaddubsw     m5,    m2,            [r3 + 24 * 16]
6232    pmulhrsw      m5,    m3
6233    packuswb      m4,                  m5
6234    movu          [r0 + 371 * 16],     m4
6235
6236    ; mode 25 [row 4]
6237    pmaddubsw     m4,    m1,           [r3 + 22 * 16]
6238    pmulhrsw      m4,    m3
6239    pmaddubsw     m5,    m2,           [r3 + 22 * 16]
6240    pmulhrsw      m5,    m3
6241    packuswb      m4,                  m5
6242    movu          [r0 + 372 * 16],     m4
6243
6244    ; mode 25 [row 5]
6245    pmaddubsw     m4,    m1,           [r3 + 20 * 16]
6246    pmulhrsw      m4,    m3
6247    pmaddubsw     m5,    m2,           [r3 + 20 * 16]
6248    pmulhrsw      m5,    m3
6249    packuswb      m4,                  m5
6250    movu          [r0 + 373 * 16],     m4
6251
6252    ; mode 25 [row 6]
6253    pmaddubsw     m4,    m1,            [r3 + 18 * 16]
6254    pmulhrsw      m4,    m3
6255    pmaddubsw     m5,    m2,            [r3 + 18 * 16]
6256    pmulhrsw      m5,    m3
6257    packuswb      m4,                  m5
6258    movu          [r0 + 374 * 16],     m4
6259
6260    ; mode 25 [row 7]
6261    pmaddubsw     m4,    m1,            [r3 + 16 * 16]
6262    pmulhrsw      m4,    m3
6263    pmaddubsw     m5,    m2,            [r3 + 16 * 16]
6264    pmulhrsw      m5,    m3
6265    packuswb      m4,                  m5
6266    movu          [r0 + 375 * 16],     m4
6267
6268    ; mode 25 [row 8]
6269    pmaddubsw     m4,    m1,           [r3 + 14 * 16]
6270    pmulhrsw      m4,    m3
6271    pmaddubsw     m5,    m2,           [r3 + 14 * 16]
6272    pmulhrsw      m5,    m3
6273    packuswb      m4,                  m5
6274    movu          [r0 + 376 * 16],     m4
6275
6276    ; mode 25 [row 9]
6277    pmaddubsw     m4,    m1,            [r3 + 12 * 16]
6278    pmulhrsw      m4,    m3
6279    pmaddubsw     m5,    m2,            [r3 + 12 * 16]
6280    pmulhrsw      m5,    m3
6281    packuswb      m4,                  m5
6282    movu          [r0 + 377 * 16],     m4
6283
6284    ; mode 25 [row 10]
6285    pmaddubsw     m4,    m1,           [r3 + 10 * 16]
6286    pmulhrsw      m4,    m3
6287    pmaddubsw     m5,    m2,           [r3 + 10 * 16]
6288    pmulhrsw      m5,    m3
6289    packuswb      m4,                  m5
6290    movu          [r0 + 378 * 16],     m4
6291
6292    ; mode 25 [row 11]
6293    pmaddubsw     m4,    m1,             [r3 + 8 * 16]
6294    pmulhrsw      m4,    m3
6295    pmaddubsw     m5,    m2,             [r3 + 8 * 16]
6296    pmulhrsw      m5,    m3
6297    packuswb      m4,                  m5
6298    movu          [r0 + 379 * 16],     m4
6299
6300    ; mode 25 [row 12]
6301    pmaddubsw     m4,    m1,            [r3 + 6 * 16]
6302    pmulhrsw      m4,    m3
6303    pmaddubsw     m5,    m2,            [r3 + 6 * 16]
6304    pmulhrsw      m5,    m3
6305    packuswb      m4,                  m5
6306    movu          [r0 + 380 * 16],     m4
6307
6308    ; mode 25 [row 13]
6309    pmaddubsw     m4,    m1,           [r3 + 4 * 16]
6310    pmulhrsw      m4,    m3
6311    pmaddubsw     m5,    m2,           [r3 + 4 * 16]
6312    pmulhrsw      m5,    m3
6313    packuswb      m4,                  m5
6314    movu          [r0 + 381 * 16],     m4
6315
6316    ; mode 25 [row 14]
6317    pmaddubsw     m4,    m1,           [r3 + 2 * 16]
6318    pmulhrsw      m4,    m3
6319    pmaddubsw     m5,    m2,           [r3 + 2 * 16]
6320    pmulhrsw      m5,    m3
6321    packuswb      m4,                  m5
6322    movu          [r0 + 382 * 16],     m4
6323
6324    ; mode 27 [row 15]
6325    psrldq        m6,    m7,           1
6326    punpcklbw     m7,    m6
6327    pinsrb        m6,    [r1 + 17],    15
6328    movu          [r0 + 415 * 16],     m6
6329
6330    ; mode 27 [row 0]
6331    movu          m4,    [r1 + 9]
6332    psrldq        m5,    m4,           1
6333    punpcklbw     m4,    m5
6334    pmaddubsw     m6,    m7,           [r3 + 2 * 16]
6335    pmulhrsw      m6,    m3
6336    pmaddubsw     m5,    m4,           [r3 + 2 * 16]
6337    pmulhrsw      m5,    m3
6338    packuswb      m6,                  m5
6339    movu          [r0 + 400 * 16],     m6
6340
6341    ; mode 27 [row 1]
6342    pmaddubsw     m6,    m7,           [r3 + 4 * 16]
6343    pmulhrsw      m6,    m3
6344    pmaddubsw     m5,    m4,           [r3 + 4 * 16]
6345    pmulhrsw      m5,    m3
6346    packuswb      m6,                  m5
6347    movu          [r0 + 401 * 16],     m6
6348
6349    ; mode 27 [row 2]
6350    pmaddubsw     m6,    m7,           [r3 + 6 * 16]
6351    pmulhrsw      m6,    m3
6352    pmaddubsw     m5,    m4,           [r3 + 6 * 16]
6353    pmulhrsw      m5,    m3
6354    packuswb      m6,                  m5
6355    movu          [r0 + 402 * 16],     m6
6356
6357    ; mode 27 [row 3]
6358    pmaddubsw     m6,    m7,           [r3 + 8 * 16]
6359    pmulhrsw      m6,    m3
6360    pmaddubsw     m5,    m4,           [r3 + 8 * 16]
6361    pmulhrsw      m5,    m3
6362    packuswb      m6,                  m5
6363    movu          [r0 + 403 * 16],     m6
6364
6365    ; mode 27 [row 4]
6366    pmaddubsw     m6,    m7,           [r3 + 10 * 16]
6367    pmulhrsw      m6,    m3
6368    pmaddubsw     m5,    m4,           [r3 + 10 * 16]
6369    pmulhrsw      m5,    m3
6370    packuswb      m6,                  m5
6371    movu          [r0 + 404 * 16],     m6
6372
6373    ; mode 27 [row 5]
6374    pmaddubsw     m6,    m7,           [r3 + 12 * 16]
6375    pmulhrsw      m6,    m3
6376    pmaddubsw     m5,    m4,           [r3 + 12 * 16]
6377    pmulhrsw      m5,    m3
6378    packuswb      m6,                  m5
6379    movu          [r0 + 405 * 16],     m6
6380
6381    ; mode 27 [row 6]
6382    pmaddubsw     m6,    m7,           [r3 + 14 * 16]
6383    pmulhrsw      m6,    m3
6384    pmaddubsw     m5,    m4,           [r3 + 14 * 16]
6385    pmulhrsw      m5,    m3
6386    packuswb      m6,                  m5
6387    movu          [r0 + 406 * 16],     m6
6388
6389    ; mode 27 [row 7]
6390    pmaddubsw     m6,    m7,           [r3 + 16 * 16]
6391    pmulhrsw      m6,    m3
6392    pmaddubsw     m5,    m4,           [r3 + 16 * 16]
6393    pmulhrsw      m5,    m3
6394    packuswb      m6,                  m5
6395    movu          [r0 + 407 * 16],     m6
6396
6397    ; mode 27 [row 8]
6398    pmaddubsw     m6,    m7,            [r3 + 18 * 16]
6399    pmulhrsw      m6,    m3
6400    pmaddubsw     m5,    m4,            [r3 + 18 * 16]
6401    pmulhrsw      m5,    m3
6402    packuswb      m6,                  m5
6403    movu          [r0 + 408 * 16],     m6
6404
6405    ; mode 27 [row 9]
6406    pmaddubsw     m6,    m7,           [r3 + 20 * 16]
6407    pmulhrsw      m6,    m3
6408    pmaddubsw     m5,    m4,           [r3 + 20 * 16]
6409    pmulhrsw      m5,    m3
6410    packuswb      m6,                  m5
6411    movu          [r0 + 409 * 16],     m6
6412
6413    ; mode 27 [row 10]
6414    pmaddubsw     m6,    m7,           [r3 + 22 * 16]
6415    pmulhrsw      m6,    m3
6416    pmaddubsw     m5,    m4,           [r3 + 22 * 16]
6417    pmulhrsw      m5,    m3
6418    packuswb      m6,                  m5
6419    movu          [r0 + 410 * 16],     m6
6420
6421    ; mode 27 [row 11]
6422    pmaddubsw     m6,    m7,           [r3 + 24 * 16]
6423    pmulhrsw      m6,    m3
6424    pmaddubsw     m5,    m4,           [r3 + 24 * 16]
6425    pmulhrsw      m5,    m3
6426    packuswb      m6,                  m5
6427    movu          [r0 + 411 * 16],     m6
6428
6429    ; mode 27 [row 12]
6430    pmaddubsw     m6,    m7,           [r3 + 26 * 16]
6431    pmulhrsw      m6,    m3
6432    pmaddubsw     m5,    m4,           [r3 + 26 * 16]
6433    pmulhrsw      m5,    m3
6434    packuswb      m6,                  m5
6435    movu          [r0 + 412 * 16],     m6
6436
6437    ; mode 27 [row 13]
6438    pmaddubsw     m6,    m7,           [r3 + 28 * 16]
6439    pmulhrsw      m6,    m3
6440    pmaddubsw     m5,    m4,           [r3 + 28 * 16]
6441    pmulhrsw      m5,    m3
6442    packuswb      m6,                  m5
6443    movu          [r0 + 413 * 16],     m6
6444
6445    ; mode 27 [row 14]
6446    pmaddubsw     m6,    m7,           [r3 + 30 * 16]
6447    pmulhrsw      m6,    m3
6448    pmaddubsw     m5,    m4,           [r3 + 30 * 16]
6449    pmulhrsw      m5,    m3
6450    packuswb      m6,                  m5
6451    movu          [r0 + 414 * 16],     m6
6452
6453    ; mode 28 [row 0]
6454    movu          m1,    [r2 + 1]
6455    psrldq        m2,    m1,           1
6456    punpcklbw     m1,    m2
6457    movu          m4,    [r2 + 9]
6458    psrldq        m5,    m4,           1
6459    punpcklbw     m4,    m5
6460    pmaddubsw     m2,    m1,           [r3 + 5 * 16]
6461    pmulhrsw      m2,    m3
6462    pmaddubsw     m5,    m4,           [r3 + 5 * 16]
6463    pmulhrsw      m5,    m3
6464    packuswb      m2,                  m5
6465    movu          [r0 + 416 * 16],     m2
6466
6467    ; mode 28 [row 0]
6468    pmaddubsw     m2,    m1,            [r3 + 5 * 16]
6469    pmulhrsw      m2,    m3
6470    pmaddubsw     m5,    m4,            [r3 + 5 * 16]
6471    pmulhrsw      m5,    m3
6472    packuswb      m2,                  m5
6473    movu          [r0 + 416 * 16],     m2
6474
6475    ; mode 28 [row 1]
6476    pmaddubsw     m2,    m1,           [r3 + 10 * 16]
6477    pmulhrsw      m2,    m3
6478    pmaddubsw     m5,    m4,           [r3 + 10 * 16]
6479    pmulhrsw      m5,    m3
6480    packuswb      m2,                  m5
6481    movu          [r0 + 417 * 16],     m2
6482
6483    ; mode 28 [row 2]
6484    pmaddubsw     m2,    m1,            [r3 + 15 * 16]
6485    pmulhrsw      m2,    m3
6486    pmaddubsw     m5,    m4,            [r3 + 15 * 16]
6487    pmulhrsw      m5,    m3
6488    packuswb      m2,                  m5
6489    movu          [r0 + 418 * 16],     m2
6490
6491    ; mode 28 [row 3]
6492    pmaddubsw     m2,    m1,           [r3 + 20 * 16]
6493    pmulhrsw      m2,    m3
6494    pmaddubsw     m5,    m4,           [r3 + 20 * 16]
6495    pmulhrsw      m5,    m3
6496    packuswb      m2,                  m5
6497    movu          [r0 + 419 * 16],     m2
6498
6499    ; mode 28 [row 4]
6500    pmaddubsw     m2,    m1,           [r3 + 25 * 16]
6501    pmulhrsw      m2,    m3
6502    pmaddubsw     m5,    m4,           [r3 + 25 * 16]
6503    pmulhrsw      m5,    m3
6504    packuswb      m2,                  m5
6505    movu          [r0 + 420 * 16],     m2
6506
6507    ; mode 28 [row 5]
6508    pmaddubsw     m2,    m1,           [r3 + 30 * 16]
6509    pmulhrsw      m2,    m3
6510    pmaddubsw     m5,    m4,           [r3 + 30 * 16]
6511    pmulhrsw      m5,    m3
6512    packuswb      m2,                  m5
6513    movu          [r0 + 421 * 16],     m2
6514
6515    ; mode 29 [row 0]
6516    pmaddubsw     m2,    m1,           [r3 + 9 * 16]
6517    pmulhrsw      m2,    m3
6518    pmaddubsw     m5,    m4,           [r3 + 9 * 16]
6519    pmulhrsw      m5,    m3
6520    packuswb      m2,                  m5
6521    movu          [r0 + 432 * 16],     m2
6522
6523    ; mode 29 [row 1]
6524    pmaddubsw     m2,    m1,           [r3 + 18 * 16]
6525    pmulhrsw      m2,    m3
6526    pmaddubsw     m5,    m4,           [r3 + 18 * 16]
6527    pmulhrsw      m5,    m3
6528    packuswb      m2,                  m5
6529    movu          [r0 + 433 * 16],     m2
6530
6531    ; mode 29 [row 2]
6532    pmaddubsw     m2,    m1,           [r3 + 27 * 16]
6533    pmulhrsw      m2,    m3
6534    pmaddubsw     m5,    m4,           [r3 + 27 * 16]
6535    pmulhrsw      m5,    m3
6536    packuswb      m2,                  m5
6537    movu          [r0 + 434 * 16],     m2
6538
6539    ; mode 30 [row 0]
6540    pmaddubsw     m2,    m1,           [r3 + 13 * 16]
6541    pmulhrsw      m2,    m3
6542    pmaddubsw     m5,    m4,           [r3 + 13 * 16]
6543    pmulhrsw      m5,    m3
6544    packuswb      m2,                  m5
6545    movu          [r0 + 448 * 16],     m2
6546
6547    ; mode 30 [row 1]
6548    pmaddubsw     m2,    m1,           [r3 + 26 * 16]
6549    pmulhrsw      m2,    m3
6550    pmaddubsw     m5,    m4,           [r3 + 26 * 16]
6551    pmulhrsw      m5,    m3
6552    packuswb      m2,                  m5
6553    movu          [r0 + 449 * 16],     m2
6554
6555    ; mode 33 [row 0]
6556    movu     [r0 + 496 * 16],     m2
6557
6558    ; mode 31 [row 0]
6559    pmaddubsw     m2,    m1,           [r3 + 17 * 16]
6560    pmulhrsw      m2,    m3
6561    pmaddubsw     m5,    m4,           [r3 + 17 * 16]
6562    pmulhrsw      m5,    m3
6563    packuswb      m2,                  m5
6564    movu          [r0 + 464 * 16],     m2
6565
6566    ; mode 32 [row 0]
6567    pmaddubsw     m2,    m1,           [r3 + 21 * 16]
6568    pmulhrsw      m2,    m3
6569    pmaddubsw     m5,    m4,           [r3 + 21 * 16]
6570    pmulhrsw      m5,    m3
6571    packuswb      m2,                  m5
6572    movu          [r0 + 480 * 16],     m2
6573
6574    ; mode 28 [row 6]
6575    movd          m7,    [r2 + 9]
6576    palignr       m7,    m1,          2
6577    pmaddubsw     m2,    m7,          [r3 + 3 * 16]
6578    pmulhrsw      m2,    m3
6579    movd          m6,    [r2 + 17]
6580    palignr       m6,    m4,         2
6581    pmaddubsw     m5,    m6,          [r3 + 3 * 16]
6582    pmulhrsw      m5,    m3
6583    packuswb      m2,    m5
6584    movu          [r0 + 422 * 16],   m2
6585
6586    ; mode 28 [row 7]
6587    pmaddubsw     m2,    m7,         [r3 + 8 * 16]
6588    pmulhrsw      m2,    m3
6589    pmaddubsw     m5,    m6,         [r3 + 8 * 16]
6590    pmulhrsw      m5,    m3
6591    packuswb      m2,                m5
6592    movu          [r0 + 423 * 16],   m2
6593
6594    ; mode 28 [row 8]
6595    pmaddubsw     m2,    m7,         [r3 + 13 * 16]
6596    pmulhrsw      m2,    m3
6597    pmaddubsw     m5,    m6,         [r3 + 13 * 16]
6598    pmulhrsw      m5,    m3
6599    packuswb      m2,                m5
6600    movu          [r0 + 424 * 16],   m2
6601
6602    ; mode 28 [row 9]
6603    pmaddubsw     m2,    m7,         [r3 + 18 * 16]
6604    pmulhrsw      m2,    m3
6605    pmaddubsw     m5,    m6,         [r3 + 18 * 16]
6606    pmulhrsw      m5,    m3
6607    packuswb      m2,                m5
6608    movu          [r0 + 425 * 16],   m2
6609
6610    ; mode 28 [row 10]
6611    pmaddubsw     m2,    m7,         [r3 + 23 * 16]
6612    pmulhrsw      m2,    m3
6613    pmaddubsw     m5,    m6,         [r3 + 23 * 16]
6614    pmulhrsw      m5,    m3
6615    packuswb      m2,                m5
6616    movu          [r0 + 426 * 16],   m2
6617
6618    ; mode 29 [row 3]
6619    pmaddubsw     m2,    m7,         [r3 + 4 * 16]
6620    pmulhrsw      m2,    m3
6621    pmaddubsw     m5,    m6,         [r3 + 4 * 16]
6622    pmulhrsw      m5,    m3
6623    packuswb      m2,                m5
6624    movu          [r0 + 435 * 16],   m2
6625
6626    ; mode 29 [row 4]
6627    pmaddubsw     m2,    m7,         [r3 + 13 * 16]
6628    pmulhrsw      m2,    m3
6629    pmaddubsw     m5,    m6,         [r3 + 13 * 16]
6630    pmulhrsw      m5,    m3
6631    packuswb      m2,                m5
6632    movu          [r0 + 436 * 16],   m2
6633
6634    ; mode 29 [row 5]
6635    pmaddubsw     m2,    m7,         [r3 + 22 * 16]
6636    pmulhrsw      m2,    m3
6637    pmaddubsw     m5,    m6,         [r3 + 22 * 16]
6638    pmulhrsw      m5,    m3
6639    packuswb      m2,                m5
6640    movu          [r0 + 437 * 16],   m2
6641
6642    ; mode 29 [row 6]
6643    pmaddubsw     m2,    m7,         [r3 + 31 * 16]
6644    pmulhrsw      m2,    m3
6645    pmaddubsw     m5,    m6,         [r3 + 31 * 16]
6646    pmulhrsw      m5,    m3
6647    packuswb      m2,                m5
6648    movu          [r0 + 438 * 16],   m2
6649
6650    ; mode 32 [row 2]
6651    movu          [r0 + 482 * 16],   m2
6652
6653    ; mode 30 [row 2]
6654    pmaddubsw     m2,    m7,         [r3 + 7 * 16]
6655    pmulhrsw      m2,    m3
6656    pmaddubsw     m5,    m6,         [r3 + 7 * 16]
6657    pmulhrsw      m5,    m3
6658    packuswb      m2,                m5
6659    movu          [r0 + 450 * 16],   m2
6660
6661    ; mode 30 [row 3]
6662    pmaddubsw     m2,    m7,         [r3 + 20 * 16]
6663    pmulhrsw      m2,    m3
6664    pmaddubsw     m5,    m6,         [r3 + 20 * 16]
6665    pmulhrsw      m5,    m3
6666    packuswb      m2,                m5
6667    movu          [r0 + 451 * 16],   m2
6668
6669    ; mode 33 [row 1]
6670    movu          [r0 + 497 * 16],   m2
6671
6672    ; mode 31 [row 1]
6673    pmaddubsw     m2,    m7,         [r3 + 2 * 16]
6674    pmulhrsw      m2,    m3
6675    pmaddubsw     m5,    m6,         [r3 + 2 * 16]
6676    pmulhrsw      m5,    m3
6677    packuswb      m2,                m5
6678    movu          [r0 + 465 * 16],   m2
6679
6680    ; mode 31 [row 2]
6681    pmaddubsw     m2,    m7,         [r3 + 19 * 16]
6682    pmulhrsw      m2,    m3
6683    pmaddubsw     m5,    m6,         [r3 + 19 * 16]
6684    pmulhrsw      m5,    m3
6685    packuswb      m2,                m5
6686    movu          [r0 + 466 * 16],   m2
6687
6688    ; mode 32 [row 1]
6689    pmaddubsw     m2,    m7,         [r3 + 10 * 16]
6690    pmulhrsw      m2,    m3
6691    pmaddubsw     m5,    m6,         [r3 + 10 * 16]
6692    pmulhrsw      m5,    m3
6693    packuswb      m2,                m5
6694    movu          [r0 + 481 * 16],   m2
6695
6696    ; mode 28 [row 11]
6697    pmaddubsw     m2,    m7,         [r3 + 28 * 16]
6698    pmulhrsw      m2,    m3
6699    pmaddubsw     m5,    m6,         [r3 + 28 * 16]
6700    pmulhrsw      m5,    m3
6701    packuswb      m2,                m5
6702    movu          [r0 + 427 * 16],   m2
6703
6704    ; mode 28 [row 12]
6705    movd          m1,    [r2 + 10]
6706    palignr       m1,    m7,        2
6707    pmaddubsw     m2,    m1,         [r3 + 1 * 16]
6708    pmulhrsw      m2,    m3
6709    movd          m4,    [r2 + 18]
6710    palignr       m4,    m6,        2
6711    pmaddubsw     m5,    m4,         [r3 + 1 * 16]
6712    pmulhrsw      m5,    m3
6713    packuswb      m2,                m5
6714    movu          [r0 + 428 * 16],   m2
6715
6716    ; mode 30 [row 4]
6717    movu          [r0 + 452 * 16],   m2
6718
6719    ; mode 28 [row 13]
6720    pmaddubsw     m2,    m1,         [r3 + 6 * 16]
6721    pmulhrsw      m2,    m3
6722    pmaddubsw     m5,    m4,         [r3 + 6 * 16]
6723    pmulhrsw      m5,    m3
6724    packuswb      m2,                m5
6725    movu          [r0 + 429 * 16],   m2
6726
6727    ; mode 28 [row 14]
6728    pmaddubsw     m2,    m1,         [r3 + 11 * 16]
6729    pmulhrsw      m2,    m3
6730    pmaddubsw     m5,    m4,         [r3 + 11 * 16]
6731    pmulhrsw      m5,    m3
6732    packuswb      m2,                m5
6733    movu          [r0 + 430 * 16],   m2
6734
6735    ; mode 28 [row 15]
6736    pmaddubsw     m2,    m1,           [r3 + 16 * 16]
6737    pmulhrsw      m2,    m3
6738    pmaddubsw     m5,    m4,           [r3 + 16 * 16]
6739    pmulhrsw      m5,    m3
6740    packuswb      m2,                m5
6741    movu          [r0 + 431 * 16],   m2
6742
6743    ; mode 29 [row 7]
6744    pmaddubsw     m2,    m1,         [r3 + 8 * 16]
6745    pmulhrsw      m2,    m3
6746    pmaddubsw     m5,    m4,         [r3 + 8 * 16]
6747    pmulhrsw      m5,    m3
6748    packuswb      m2,                m5
6749    movu          [r0 + 439 * 16],   m2
6750
6751    ; mode 29 [row 8]
6752    pmaddubsw     m2,    m1,         [r3 + 17 * 16]
6753    pmulhrsw      m2,    m3
6754    pmaddubsw     m5,    m4,         [r3 + 17 * 16]
6755    pmulhrsw      m5,    m3
6756    packuswb      m2,                m5
6757    movu          [r0 + 440 * 16],   m2
6758
6759    ; mode 29 [row 9]
6760    pmaddubsw     m2,    m1,          [r3 + 26 * 16]
6761    pmulhrsw      m2,    m3
6762    pmaddubsw     m5,    m4,          [r3 + 26 * 16]
6763    pmulhrsw      m5,    m3
6764    packuswb      m2,                m5
6765    movu          [r0 + 441 * 16],   m2
6766
6767    ; mode 30 [row 5]
6768    pmaddubsw     m2,    m1,         [r3 + 14 * 16]
6769    pmulhrsw      m2,    m3
6770    pmaddubsw     m5,    m4,         [r3 + 14 * 16]
6771    pmulhrsw      m5,    m3
6772    packuswb      m2,                m5
6773    movu          [r0 + 453 * 16],   m2
6774
6775    ; mode 33 [row 2]
6776    movu          [r0 + 498 * 16],   m2
6777
6778    ; mode 30 [row 6]
6779    pmaddubsw     m2,    m1,         [r3 + 27 * 16]
6780    pmulhrsw      m2,    m3
6781    pmaddubsw     m5,    m4,         [r3 + 27 * 16]
6782    pmulhrsw      m5,    m3
6783    packuswb      m2,                m5
6784    movu          [r0 + 454 * 16],   m2
6785
6786    ; mode 31 [row 3]
6787    pmaddubsw     m2,    m1,         [r3 + 4 * 16]
6788    pmulhrsw      m2,    m3
6789    pmaddubsw     m5,    m4,         [r3 + 4 * 16]
6790    pmulhrsw      m5,    m3
6791    packuswb      m2,                m5
6792    movu          [r0 + 467 * 16],   m2
6793
6794    ; mode 31 [row 4]
6795    pmaddubsw     m2,    m1,         [r3 + 21 * 16]
6796    pmulhrsw      m2,    m3
6797    pmaddubsw     m5,    m4,         [r3 + 21 * 16]
6798    pmulhrsw      m5,    m3
6799    packuswb      m2,                m5
6800    movu          [r0 + 468 * 16],   m2
6801
6802    ; mode 32 [row 3]
6803    pmaddubsw     m2,    m1,         [r3 + 20 * 16]
6804    pmulhrsw      m2,    m3
6805    pmaddubsw     m5,    m4,         [r3 + 20 * 16]
6806    pmulhrsw      m5,    m3
6807    packuswb      m2,                m5
6808    movu          [r0 + 483 * 16],   m2
6809
6810    ; mode 29 [row 10]
6811    movd          m7,     [r2 + 11]
6812    palignr       m7,     m1,        2
6813    pmaddubsw     m2,    m7,         [r3 + 3 * 16]
6814    pmulhrsw      m2,    m3
6815    movd          m6,     [r2 + 19]
6816    palignr       m6,     m4,        2
6817    pmaddubsw     m5,    m6,         [r3 + 3 * 16]
6818    pmulhrsw      m5,    m3
6819    packuswb      m2,                m5
6820    movu          [r0 + 442 * 16],   m2
6821
6822    ; mode 29 [row 11]
6823    pmaddubsw     m2,    m7,         [r3 + 12 * 16]
6824    pmulhrsw      m2,    m3
6825    pmaddubsw     m5,    m6,         [r3 + 12 * 16]
6826    pmulhrsw      m5,    m3
6827    packuswb      m2,                m5
6828    movu          [r0 + 443 * 16],   m2
6829
6830    ; mode 29 [row 12]
6831    pmaddubsw     m2,    m7,         [r3 + 21 * 16]
6832    pmulhrsw      m2,    m3
6833    pmaddubsw     m5,    m6,         [r3 + 21 * 16]
6834    pmulhrsw      m5,    m3
6835    packuswb      m2,                m5
6836    movu          [r0 + 444 * 16],   m2
6837
6838    ; mode 30 [row 8]
6839    movu          [r0 + 456 * 16],   m2
6840
6841    ; mode 29 [row 13]
6842    pmaddubsw     m2,    m7,         [r3 + 30 * 16]
6843    pmulhrsw      m2,    m3
6844    pmaddubsw     m5,    m6,         [r3 + 30 * 16]
6845    pmulhrsw      m5,    m3
6846    packuswb      m2,                m5
6847    movu          [r0 + 445 * 16],   m2
6848
6849    ; mode 32 [row 5]
6850    movu          [r0 + 485 * 16],   m2
6851
6852    ; mode 30 [row 7]
6853    pmaddubsw     m2,    m7,         [r3 + 8 * 16]
6854    pmulhrsw      m2,    m3
6855    pmaddubsw     m5,    m6,         [r3 + 8 * 16]
6856    pmulhrsw      m5,    m3
6857    packuswb      m2,                m5
6858    movu          [r0 + 455 * 16],   m2
6859
6860    ; mode 33 [row 3]
6861    movu          [r0 + 499 * 16],   m2
6862
6863    ; mode 31 [row 5]
6864    pmaddubsw     m2,    m7,         [r3 + 6 * 16]
6865    pmulhrsw      m2,    m3
6866    pmaddubsw     m5,    m6,         [r3 + 6 * 16]
6867    pmulhrsw      m5,    m3
6868    packuswb      m2,                m5
6869    movu          [r0 + 469 * 16],   m2
6870
6871    ; mode 31 [row 6]
6872    pmaddubsw     m2,    m7,         [r3 + 23 * 16]
6873    pmulhrsw      m2,    m3
6874    pmaddubsw     m5,    m6,         [r3 + 23 * 16]
6875    pmulhrsw      m5,    m3
6876    packuswb      m2,                m5
6877    movu          [r0 + 470 * 16],   m2
6878
6879    ; mode 32 [row 4]
6880    pmaddubsw     m2,    m7,          [r3 + 9 * 16]
6881    pmulhrsw      m2,    m3
6882    pmaddubsw     m5,    m6,          [r3 + 9 * 16]
6883    pmulhrsw      m5,    m3
6884    packuswb      m2,                m5
6885    movu          [r0 + 484 * 16],   m2
6886
6887    movu          m1,        m7
6888    movu          m4,        m6
6889
6890    ; mode 29 [row 14]
6891    movu          m1,    [r2 + 12]
6892    palignr       m1,    m7,         2
6893    pmaddubsw     m2,    m1,         [r3 + 7 * 16]
6894    pmulhrsw      m2,    m3
6895    movd          m4,     [r2 + 20]
6896    palignr       m4,     m6,        2
6897    pmaddubsw     m5,    m4,         [r3 + 7 * 16]
6898    pmulhrsw      m5,    m3
6899    packuswb      m2,                m5
6900    movu          [r0 + 446 * 16],   m2
6901
6902    ; mode 29 [row 15]
6903    pmaddubsw     m2,    m1,         [r3 + 16 * 16]
6904    pmulhrsw      m2,    m3
6905    pmaddubsw     m5,    m4,         [r3 + 16 * 16]
6906    pmulhrsw      m5,    m3
6907    packuswb      m2,                m5
6908    movu          [r0 + 447 * 16],   m2
6909
6910    ; mode 30 [row 9]
6911    pmaddubsw     m2,    m1,         [r3 + 2 * 16]
6912    pmulhrsw      m2,    m3
6913    pmaddubsw     m5,    m4,         [r3 + 2 * 16]
6914    pmulhrsw      m5,    m3
6915    packuswb      m2,                m5
6916    movu          [r0 + 457 * 16],   m2
6917
6918    ; mode 33 [row 4]
6919    movu          [r0 + 500 * 16],   m2
6920
6921    ; mode 30 [row 10]
6922    pmaddubsw     m2,    m1,         [r3 + 15 * 16]
6923    pmulhrsw      m2,    m3
6924    pmaddubsw     m5,    m4,         [r3 + 15 * 16]
6925    pmulhrsw      m5,    m3
6926    packuswb      m2,                m5
6927    movu          [r0 + 458 * 16],   m2
6928
6929    ; mode 30 [row 11]
6930    pmaddubsw     m2,    m1,          [r3 + 28 * 16]
6931    pmulhrsw      m2,    m3
6932    pmaddubsw     m5,    m4,          [r3 + 28 * 16]
6933    pmulhrsw      m5,    m3
6934    packuswb      m2,                m5
6935    movu          [r0 + 459 * 16],   m2
6936
6937    ; mode 33 [row 5]
6938    movu          [r0 + 501 * 16],   m2
6939
6940    ; mode 31 [row 7]
6941    pmaddubsw     m2,    m1,         [r3 + 8 * 16]
6942    pmulhrsw      m2,    m3
6943    pmaddubsw     m5,    m4,         [r3 + 8 * 16]
6944    pmulhrsw      m5,    m3
6945    packuswb      m2,                m5
6946    movu          [r0 + 471 * 16],   m2
6947
6948    ; mode 31 [row 8]
6949    pmaddubsw     m2,    m1,         [r3 + 25 * 16]
6950    pmulhrsw      m2,    m3
6951    pmaddubsw     m5,    m4,         [r3 + 25 * 16]
6952    pmulhrsw      m5,    m3
6953    packuswb      m2,                m5
6954    movu          [r0 + 472 * 16],   m2
6955
6956    ; mode 32 [row 6]
6957    pmaddubsw     m2,    m1,         [r3 + 19 * 16]
6958    pmulhrsw      m2,    m3
6959    pmaddubsw     m5,    m4,         [r3 + 19 * 16]
6960    pmulhrsw      m5,    m3
6961    packuswb      m2,                m5
6962    movu          [r0 + 486 * 16],   m2
6963
6964    ; mode 30 [row 12]
6965    movd          m7,    [r2 + 13]
6966    palignr       m7,    m1,         2
6967    pmaddubsw     m2,    m7,         [r3 + 9 * 16]
6968    pmulhrsw      m2,    m3
6969    movd          m6,    [r2 + 21]
6970    palignr       m6,    m4,         2
6971    pmaddubsw     m5,    m6,         [r3 + 9 * 16]
6972    pmulhrsw      m5,    m3
6973    packuswb      m2,                m5
6974    movu          [r0 + 460 * 16],   m2
6975
6976    ; mode 30 [row 13]
6977    pmaddubsw     m2,    m7,          [r3 + 22 * 16]
6978    pmulhrsw      m2,    m3
6979    pmaddubsw     m5,    m6,          [r3 + 22 * 16]
6980    pmulhrsw      m5,    m3
6981    packuswb      m2,                m5
6982    movu          [r0 + 461 * 16],   m2
6983
6984    ; mode 33 [row 6]
6985    movu          [r0 + 502 * 16],   m2
6986
6987    ; mode 31 [row 9]
6988    pmaddubsw     m2,    m7,          [r3 + 10 * 16]
6989    pmulhrsw      m2,    m3
6990    pmaddubsw     m5,    m6,          [r3 + 10 * 16]
6991    pmulhrsw      m5,    m3
6992    packuswb      m2,                m5
6993    movu          [r0 + 473 * 16],   m2
6994
6995    ; mode 31 [row 10]
6996    pmaddubsw     m2,    m7,         [r3 + 27 * 16]
6997    pmulhrsw      m2,    m3
6998    pmaddubsw     m5,    m6,         [r3 + 27 * 16]
6999    pmulhrsw      m5,    m3
7000    packuswb      m2,                m5
7001    movu          [r0 + 474 * 16],   m2
7002
7003    ; mode 32 [row 7]
7004    pmaddubsw     m2,    m7,         [r3 + 8 * 16]
7005    pmulhrsw      m2,    m3
7006    pmaddubsw     m5,    m6,         [r3 + 8 * 16]
7007    pmulhrsw      m5,    m3
7008    packuswb      m2,                m5
7009    movu          [r0 + 487 * 16],   m2
7010
7011    ; mode 32 [row 8]
7012    pmaddubsw     m2,    m7,         [r3 + 29 * 16]
7013    pmulhrsw      m2,    m3
7014    pmaddubsw     m5,    m6,         [r3 + 29 * 16]
7015    pmulhrsw      m5,    m3
7016    packuswb      m2,                m5
7017    movu          [r0 + 488 * 16],   m2
7018
7019
7020    movu          m1,                m7
7021    movu          m4,                m6
7022
7023    ; mode 30 [row 14]
7024    movd          m1,    [r2 + 14]
7025    palignr       m1,    m7,        2
7026    pmaddubsw     m2,    m1,        [r3 + 3 * 16]
7027    pmulhrsw      m2,    m3
7028    movd          m4,    [r2 + 22]
7029    palignr       m4,    m6,        2
7030    pmaddubsw     m5,    m4,        [r3 + 3 * 16]
7031    pmulhrsw      m5,    m3
7032    packuswb      m2,               m5
7033    movu          [r0 + 462 * 16],  m2
7034
7035    ; mode 30 [row 15]
7036    pmaddubsw     m2,    m1,         [r3 + 16 * 16]
7037    pmulhrsw      m2,    m3
7038    pmaddubsw     m5,    m4,         [r3 + 16 * 16]
7039    pmulhrsw      m5,    m3
7040    packuswb      m2,                m5
7041    movu          [r0 + 463 * 16],   m2
7042
7043    ; mode 33 [row 7]
7044    movu          [r0 + 503 * 16],   m2
7045
7046    ; mode 31 [row 11]
7047    pmaddubsw     m2,    m1,          [r3 + 12 * 16]
7048    pmulhrsw      m2,    m3
7049    pmaddubsw     m5,    m4,          [r3 + 12 * 16]
7050    pmulhrsw      m5,    m3
7051    packuswb      m2,                m5
7052    movu          [r0 + 475 * 16],   m2
7053
7054    ; mode 31 [row 12]
7055    pmaddubsw     m2,    m1,         [r3 + 29 * 16]
7056    pmulhrsw      m2,    m3
7057    pmaddubsw     m5,    m4,         [r3 + 29 * 16]
7058    pmulhrsw      m5,    m3
7059    packuswb      m2,                m5
7060    movu          [r0 + 476 * 16],   m2
7061
7062    ; mode 32 [row 9]
7063    pmaddubsw     m2,    m1,         [r3 + 18 * 16]
7064    pmulhrsw      m2,    m3
7065    pmaddubsw     m5,    m4,         [r3 + 18 * 16]
7066    pmulhrsw      m5,    m3
7067    packuswb      m2,                m5
7068    movu          [r0 + 489 * 16],   m2
7069
7070    ; mode 31 [row 13]
7071    movd          m7,    [r2 + 15]
7072    palignr       m7,    m1,         2
7073    pmaddubsw     m2,    m7,         [r3 + 14 * 16]
7074    pmulhrsw      m2,    m3
7075    movd          m6,    [r2 + 23]
7076    palignr       m6,    m4,         2
7077    pmaddubsw     m5,    m6,         [r3 + 14 * 16]
7078    pmulhrsw      m5,    m3
7079    packuswb      m2,                m5
7080    movu          [r0 + 477 * 16],   m2
7081
7082    ; mode 31 [row 14]
7083    pmaddubsw     m2,    m7,         [r3 + 31 * 16]
7084    pmulhrsw      m2,    m3
7085    pmaddubsw     m5,    m6,         [r3 + 31 * 16]
7086    pmulhrsw      m5,    m3
7087    packuswb      m2,                m5
7088    movu          [r0 + 478 * 16],   m2
7089
7090    ; mode 32 [row 10]
7091    pmaddubsw     m2,    m7,         [r3 + 7 * 16]
7092    pmulhrsw      m2,    m3
7093    pmaddubsw     m5,    m6,         [r3 + 7 * 16]
7094    pmulhrsw      m5,    m3
7095    packuswb      m2,                m5
7096    movu          [r0 + 490 * 16],   m2
7097
7098    ; mode 32 [row 11]
7099    pmaddubsw     m2,    m7,         [r3 + 28 * 16]
7100    pmulhrsw      m2,    m3
7101    pmaddubsw     m5,    m6,         [r3 + 28 * 16]
7102    pmulhrsw      m5,    m3
7103    packuswb      m2,                m5
7104    movu          [r0 + 491 * 16],   m2
7105
7106    ; mode 33 [row 8]
7107    pmaddubsw     m2,    m7,         [r3 + 10 * 16]
7108    pmulhrsw      m2,    m3
7109    pmaddubsw     m5,    m6,         [r3 + 10 * 16]
7110    pmulhrsw      m5,    m3
7111    packuswb      m2,                m5
7112    movu          [r0 + 504 * 16],   m2
7113
7114    ; mode 31 [row 15]
7115    movd          m1,    [r2 + 16]
7116    palignr       m1,    m7,         2
7117    pmaddubsw     m2,    m1,          [r3 + 16 * 16]
7118    pmulhrsw      m2,    m3
7119    movd          m4,    [r2 + 24]
7120    palignr       m4,    m6,         2
7121    pmaddubsw     m5,    m4,          [r3 + 16 * 16]
7122    pmulhrsw      m5,    m3
7123    packuswb      m2,                m5
7124    movu          [r0 + 479 * 16],   m2
7125
7126    ; mode 32 [row 12]
7127    pmaddubsw     m2,    m1,          [r3 + 17 * 16]
7128    pmulhrsw      m2,    m3
7129    pmaddubsw     m5,    m4,          [r3 + 17 * 16]
7130    pmulhrsw      m5,    m3
7131    packuswb      m2,                m5
7132    movu          [r0 + 492 * 16],   m2
7133
7134    ; mode 33 [row 9]
7135    pmaddubsw     m2,    m1,         [r3 + 4 * 16]
7136    pmulhrsw      m2,    m3
7137    pmaddubsw     m5,    m4,         [r3 + 4 * 16]
7138    pmulhrsw      m5,    m3
7139    packuswb      m2,                m5
7140    movu          [r0 + 505 * 16],   m2
7141
7142    ; mode 33 [row 10]
7143    pmaddubsw     m2,    m1,          [r3 + 30 * 16]
7144    pmulhrsw      m2,    m3
7145    pmaddubsw     m5,    m4,          [r3 + 30 * 16]
7146    pmulhrsw      m5,    m3
7147    packuswb      m2,                m5
7148    movu          [r0 + 506 * 16],   m2
7149
7150    ; mode 33 [row 10]
7151    pmaddubsw     m2,    m1,          [r3 + 4 * 16]
7152    pmulhrsw      m2,    m3
7153    pmaddubsw     m5,    m4,          [r3 + 4 * 16]
7154    pmulhrsw      m5,    m3
7155    packuswb      m2,                m5
7156    movu          [r0 + 505 * 16],   m2
7157
7158    ; mode 32 [row 13]
7159    movd          m7,    [r2 + 17]
7160    palignr       m7,    m1,         2
7161    pmaddubsw     m2,    m7,         [r3 + 6 * 16]
7162    pmulhrsw      m2,    m3
7163
7164    movd          m6,    [r2 + 25]
7165    palignr       m6,    m4,         2
7166    pmaddubsw     m5,    m6,         [r3 + 6 * 16]
7167    pmulhrsw      m5,    m3
7168    packuswb      m2,                m5
7169    movu          [r0 + 493 * 16],   m2
7170
7171    ; mode 32 [row 14]
7172    pmaddubsw     m2,    m7,         [r3 + 27 * 16]
7173    pmulhrsw      m2,    m3
7174    pmaddubsw     m5,    m6,         [r3 + 27 * 16]
7175    pmulhrsw      m5,    m3
7176    packuswb      m2,                m5
7177    movu          [r0 + 494 * 16],   m2
7178
7179    ; mode 33 [row 11]
7180    pmaddubsw     m2,    m7,         [r3 + 24 * 16]
7181    pmulhrsw      m2,    m3
7182    pmaddubsw     m5,    m6,         [r3 + 24 * 16]
7183    pmulhrsw      m5,    m3
7184    packuswb      m2,                m5
7185    movu          [r0 + 507 * 16],   m2
7186
7187    ; mode 32 [row 15]
7188    movd          m1,    [r2 + 18]
7189    palignr       m1,    m7,         2
7190    pmaddubsw     m2,    m1,         [r3 + 16 * 16]
7191    pmulhrsw      m2,    m3
7192    psrldq        m4,    2
7193    pinsrb        m4,    [r2 + 26],  14
7194    pinsrb        m4,    [r2 + 27],  15
7195    movd          m4,    [r2 + 26]
7196    palignr       m4,    m6,         2
7197    pmaddubsw     m5,    m4,         [r3 + 16 * 16]
7198    pmulhrsw      m5,    m3
7199    packuswb      m2,                m5
7200    movu          [r0 + 495 * 16],   m2
7201
7202    ; mode 33 [row 12]
7203    pmaddubsw     m2,    m1,         [r3 + 18 * 16]
7204    pmulhrsw      m2,    m3
7205    pmaddubsw     m5,    m4,         [r3 + 18 * 16]
7206    pmulhrsw      m5,    m3
7207    packuswb      m2,                m5
7208    movu          [r0 + 508 * 16],   m2
7209
7210    ; mode 33 [row 13]
7211    movd          m7,    [r2 + 19]
7212    palignr       m7,    m1,         2
7213    pmaddubsw     m2,    m7,         [r3 + 12 * 16]
7214    pmulhrsw      m2,    m3
7215    movd          m6,    [r2 + 27]
7216    palignr       m6,    m4,         2
7217    pmaddubsw     m5,    m6,         [r3 + 12 * 16]
7218    pmulhrsw      m5,    m3
7219    packuswb      m2,                m5
7220    movu          [r0 + 509 * 16],   m2
7221
7222    ; mode 33 [row 14]
7223    movd          m1,    [r2 + 20]
7224    palignr       m1,    m7,         2
7225    pmaddubsw     m2,    m1,         [r3 + 6 * 16]
7226    pmulhrsw      m2,    m3
7227    movd          m4,    [r2 + 28]
7228    palignr       m4,    m6,         2
7229    pmaddubsw     m5,    m4,         [r3 + 6 * 16]
7230    pmulhrsw      m5,    m3
7231    packuswb      m2,                m5
7232    movu          [r0 + 510 * 16],   m2
7233
7234    ; mode 34 [row 0]
7235    movu          m1,                [r2 + 2]
7236    movu          [r0 + 512 * 16],   m1
7237    movu          m2,                [r2 + 18]
7238    palignr       m3,                m2,     m1,    1
7239    movu          [r0 + 513 * 16],   m3
7240    palignr       m3,                m2,     m1,    2
7241    movu          [r0 + 514 * 16],   m3
7242    palignr       m3,                m2,     m1,    3
7243    movu          [r0 + 515 * 16],   m3
7244    palignr       m3,                m2,     m1,    4
7245    movu          [r0 + 516 * 16],   m3
7246    palignr       m3,                m2,     m1,    5
7247    movu          [r0 + 517 * 16],   m3
7248    palignr       m3,                m2,     m1,    6
7249    movu          [r0 + 518 * 16],   m3
7250    palignr       m3,                m2,     m1,    7
7251    movu          [r0 + 519 * 16],   m3
7252    palignr       m3,                m2,     m1,    8
7253    movu          [r0 + 520 * 16],   m3
7254    palignr       m3,                m2,     m1,    9
7255    movu          [r0 + 521 * 16],   m3
7256    palignr       m3,                m2,     m1,   10
7257    movu          [r0 + 522 * 16],   m3
7258    palignr       m3,                m2,     m1,   11
7259    movu          [r0 + 523 * 16],   m3
7260    palignr       m3,                m2,     m1,   12
7261    movu          [r0 + 524 * 16],   m3
7262
7263    ; mode 33 [row 15]
7264    movu          [r0 + 511 * 16],   m3
7265
7266    ; mode 34
7267    palignr       m3,                m2,     m1,   13
7268    movu          [r0 + 525 * 16],   m3
7269    palignr       m3,                m2,     m1,   14
7270    movu          [r0 + 526 * 16],   m3
7271    palignr       m3,                m2,     m1,   15
7272    movu          [r0 + 527 * 16],   m3
7273    RET
7274
7275;--------------------------------------------------------------------------------
7276; void all_angs_pred_32x32(pixel *dest, pixel *refPix, pixel *filtPix, int bLuma)
7277;--------------------------------------------------------------------------------
7278INIT_XMM sse4
7279cglobal all_angs_pred_32x32, 3,7,8, 0-4
7280    mov        r6d, [r1 + 64]
7281    mov        r3d, [r1]
7282    mov        [rsp], r6d
7283    mov        [r1 + 64], r3b
7284    mov        r3d, [r2]
7285    mov        r6d, [r2 + 64]
7286    mov        [r2 + 64], r3b
7287
7288    lea        r3, [r2]
7289    lea        r4, [r2 + 64]
7290    lea        r2, [r1 + 64]
7291
7292    ;mode 2[row 0]
7293    movu       m0,              [r4 + 2]
7294    movu       [r0 + 0 * 16],   m0
7295    movu       m1,              [r4 + 18]
7296    movu       [r0 + 1 * 16],   m1
7297
7298    ;mode 9 [row 15]
7299    movu       [r0 + 478 * 16],   m0
7300    movu       [r0 + 479 * 16],   m1
7301
7302    ;mode 2[row 1]
7303    movu       m2,              [r4 + 34]
7304    palignr    m3,              m1,       m0,    1
7305    movu       [r0 + 2 * 16],   m3
7306    palignr    m4,              m2,       m1,    1
7307    movu       [r0 + 3 * 16],   m4
7308
7309    ; mode 9 [row 31]
7310    movu       [r0 + 510 * 16], m3
7311    movu       [r0 + 511 * 16], m4
7312
7313    ;mode 2[row 17]
7314    movu       [r0 + 34 * 16],  m4
7315    movu       m5,              [r4 + 35]
7316    movu       [r0 + 35 * 16],  m5
7317
7318    ;mode 2[row 2]
7319    palignr    m3,              m1,       m0,    2
7320    movu       [r0 + 4 * 16],   m3
7321    palignr    m4,              m2,       m1,    2
7322    movu       [r0 + 5 * 16],   m4
7323
7324    ;mode 2[row 18]
7325    movu       [r0 + 36 * 16],  m4
7326    movu       m6,              [r4 + 51]
7327    palignr    m7,              m6,       m5,    1
7328    movu       [r0 + 37 * 16],  m7
7329
7330    ;mode 2[row 3]
7331    palignr    m3,              m1,       m0,    3
7332    movu       [r0 + 6 * 16],   m3
7333    palignr    m4,              m2,       m1,    3
7334    movu       [r0 + 7 * 16],   m4
7335
7336    ;mode 2[row 19]
7337    movu       [r0 + 38 * 16],  m4
7338    palignr    m7,              m6,       m5,    2
7339    movu       [r0 + 39 * 16],  m7
7340
7341    ;mode 2[row 4]
7342    palignr    m3,              m1,       m0,    4
7343    movu       [r0 + 8 * 16],   m3
7344    palignr    m4,              m2,       m1,    4
7345    movu       [r0 + 9 * 16],   m4
7346
7347    ; mode 8 [row 31]
7348    movu       [r0 + 446 * 16],   m3
7349    movu       [r0 + 447 * 16],   m4
7350
7351    ;mode 2[row 20]
7352    movu       [r0 + 40 * 16],  m4
7353    palignr    m7,              m6,       m5,    3
7354    movu       [r0 + 41 * 16],  m7
7355
7356    ; mode 4 [row 31]
7357    movu       [r0 + 190 * 16],  m4
7358    movu       [r0 + 191 * 16],  m7
7359
7360    ;mode 2[row 5]
7361    palignr    m3,              m1,       m0,    5
7362    movu       [r0 + 10 * 16],  m3
7363    palignr    m4,              m2,       m1,    5
7364    movu       [r0 + 11 * 16],  m4
7365
7366    ;mode 2[row 21]
7367    movu       [r0 + 42 * 16],  m4
7368    palignr    m7,              m6,       m5,    4
7369    movu       [r0 + 43 * 16],  m7
7370
7371    ;mode 2[row 6]
7372    palignr    m3,              m1,       m0,    6
7373    movu       [r0 + 12 * 16],  m3
7374    palignr    m4,              m2,       m1,    6
7375    movu       [r0 + 13 * 16],  m4
7376
7377    ;mode 2[row 22]
7378    movu       [r0 + 44 * 16],  m4
7379    palignr    m7,              m6,       m5,    5
7380    movu       [r0 + 45 * 16],  m7
7381
7382    ;mode 2[row 7]
7383    palignr    m3,              m1,       m0,    7
7384    movu       [r0 + 14 * 16],  m3
7385    palignr    m4,              m2,       m1,    7
7386    movu       [r0 + 15 * 16],  m4
7387
7388    ;mode 2[row 23]
7389    movu       [r0 + 46 * 16],  m4
7390    palignr    m7,              m6,       m5,    6
7391    movu       [r0 + 47 * 16],  m7
7392
7393    ;mode 2[row 8]
7394    palignr    m3,              m1,       m0,    8
7395    movu       [r0 + 16 * 16],  m3
7396    palignr    m4,              m2,       m1,    8
7397    movu       [r0 + 17 * 16],  m4
7398
7399    ;mode 7[row 31]
7400    movu       [r0 + 382 * 16],  m3
7401    movu       [r0 + 383 * 16],  m4
7402
7403    ;mode 2[row 24]
7404    movu       [r0 + 48 * 16],  m4
7405    palignr    m7,              m6,       m5,    7
7406    movu       [r0 + 49 * 16],  m7
7407
7408    ;mode 2[row 9]
7409    palignr    m3,              m1,       m0,    9
7410    movu       [r0 + 18 * 16],  m3
7411    palignr    m4,              m2,       m1,    9
7412    movu       [r0 + 19 * 16],  m4
7413
7414    ;mode 2[row 25]
7415    movu       [r0 + 50 * 16],  m4
7416    palignr    m7,              m6,       m5,    8
7417    movu       [r0 + 51 * 16],  m7
7418
7419    ; mode 3 [row 31]
7420    movu       [r0 + 126 * 16],  m4
7421    movu       [r0 + 127 * 16],  m7
7422
7423    ;mode 2[row 10]
7424    palignr    m3,              m1,       m0,   10
7425    movu       [r0 + 20 * 16],  m3
7426    palignr    m4,              m2,       m1,   10
7427    movu       [r0 + 21 * 16],  m4
7428
7429    ;mode 2[row 26]
7430    movu       [r0 + 52 * 16],  m4
7431    palignr    m7,              m6,       m5,    9
7432    movu       [r0 + 53 * 16],  m7
7433
7434    ;mode 2[row 11]
7435    palignr    m3,              m1,       m0,   11
7436    movu       [r0 + 22 * 16],  m3
7437    palignr    m4,              m2,       m1,   11
7438    movu       [r0 + 23 * 16],  m4
7439
7440    ;mode 2[row 27]
7441    movu       [r0 + 54 * 16],  m4
7442    palignr    m7,              m6,       m5,   10
7443    movu       [r0 + 55 * 16],  m7
7444
7445    ;mode 2[row 12]
7446    palignr    m3,              m1,       m0,   12
7447    movu       [r0 + 24 * 16],  m3
7448    palignr    m4,              m2,       m1,   12
7449    movu       [r0 + 25 * 16],  m4
7450
7451    ; mode 6 [row 31]
7452    movu       [r0 + 318 * 16],  m3
7453    movu       [r0 + 319 * 16],  m4
7454
7455    ; mode 3 [row 15]
7456    movu       [r0 + 94 * 16],  m3
7457    movu       [r0 + 95 * 16],  m4
7458
7459    ;mode 2[row 28]
7460    movu       [r0 + 56 * 16],  m4
7461    palignr    m7,              m6,       m5,   11
7462    movu       [r0 + 57 * 16],  m7
7463
7464    ;mode 2[row 13]
7465    palignr    m3,              m1,       m0,   13
7466    movu       [r0 + 26 * 16],  m3
7467    palignr    m4,              m2,       m1,   13
7468    movu       [r0 + 27 * 16],  m4
7469
7470    ;mode 2[row 29]
7471    movu       [r0 + 58 * 16],  m4
7472    palignr    m7,              m6,       m5,   12
7473    movu       [r0 + 59 * 16],  m7
7474
7475    ;mode 2[row 14]
7476    palignr    m3,              m1,       m0,   14
7477    movu       [r0 + 28 * 16],  m3
7478    palignr    m4,              m2,       m1,   14
7479    movu       [r0 + 29 * 16],  m4
7480
7481    ;mode 2[row 30]
7482    movu       [r0 + 60 * 16],  m4
7483    palignr    m7,              m6,       m5,   13
7484    movu       [r0 + 61 * 16],  m7
7485
7486    ;mode 2[row 15]
7487    palignr    m3,              m1,       m0,   15
7488    movu       [r0 + 30 * 16],  m3
7489    palignr    m4,              m2,       m1,   15
7490    movu       [r0 + 31 * 16],  m4
7491
7492    ;mode 2[row 31]
7493    movu       [r0 + 62 * 16],  m4
7494    palignr    m7,              m6,       m5,   14
7495    movu       [r0 + 63 * 16],  m7
7496
7497    ;mode 2[row 16]
7498    movu       [r0 + 32 * 16],  m1
7499    movu       [r0 + 33 * 16],  m2
7500
7501    ; mode 5[row 31]
7502    movu       [r0 + 254 * 16],  m1
7503    movu       [r0 + 255 * 16],  m2
7504
7505    ; mode 3 [row 0]
7506    lea           r5,    [ang_table]
7507    movu          m6,    [r5 + 26 * 16]
7508    movu          m7,    [pw_1024  ]
7509    movu          m1,    [r4 + 1   ]
7510    punpcklbw     m1,    m0
7511    pmaddubsw     m0,    m1,        m6
7512    pmulhrsw      m0,    m7
7513    movu          m2,    [r4 +  9]
7514    movd          m3,    [r4 + 10]
7515    palignr       m3,    m2,        1
7516    punpcklbw     m2,    m3
7517    pmaddubsw     m3,    m2,        m6
7518    pmulhrsw      m3,    m7
7519    packuswb      m0,    m3
7520    movu          [r0 + 64 * 16],   m0
7521
7522    ; mode 6 [row 1 - first half]
7523    movu          [r0 + 258 * 16],  m0
7524
7525    ; mode 9 [row 12 - first half]
7526    movu          [r0 + 472 * 16],  m0
7527
7528    movu          m0,    [r4 + 17]
7529    movd          m3,    [r4 + 18]
7530    palignr       m3,    m0,        1
7531    punpcklbw     m0,    m3
7532    pmaddubsw     m3,    m0,        m6
7533    pmulhrsw      m3,    m7
7534    movu          m4,    [r4 + 25]
7535    movd          m5,    [r4 + 26]
7536    palignr       m5,    m4,        1
7537    punpcklbw     m4,    m5
7538    pmaddubsw     m5,    m4,        m6
7539    pmulhrsw      m5,    m7
7540    packuswb      m3,    m5
7541    movu          [r0 + 65 * 16],   m3
7542
7543    ; mode 6 [row 1 - second half]
7544    movu          [r0 + 259 * 16],  m3
7545
7546    ; mode 9 [row 12 - second half]
7547    movu          [r0 + 473 * 16],  m3
7548
7549    ; mode 4 [row 0]
7550    movu          m6,    [r5 + 21 * 16]
7551    pmaddubsw     m3,    m1,        m6
7552    pmulhrsw      m3,    m7
7553    pmaddubsw     m5,    m2,        m6
7554    pmulhrsw      m5,    m7
7555    packuswb      m3,    m5
7556    movu          [r0 + 128 * 16],  m3
7557    pmaddubsw     m3,    m0,        m6
7558    pmulhrsw      m3,    m7
7559    pmaddubsw     m5,    m4,        m6
7560    pmulhrsw      m5,    m7
7561    packuswb      m3,    m5
7562    movu          [r0 + 129 * 16],  m3
7563
7564    ; mode 5 [row 0]
7565    movu          m6,    [r5 + 17 * 16]
7566    pmaddubsw     m3,    m1,        m6
7567    pmulhrsw      m3,    m7
7568    pmaddubsw     m5,    m2,        m6
7569    pmulhrsw      m5,    m7
7570    packuswb      m3,    m5
7571    movu          [r0 + 192 * 16],  m3
7572    pmaddubsw     m3,    m0,        m6
7573    pmulhrsw      m3,    m7
7574    pmaddubsw     m5,    m4,        m6
7575    pmulhrsw      m5,    m7
7576    packuswb      m3,    m5
7577    movu          [r0 + 193 * 16],  m3
7578
7579    ; mode 6 [row 0]
7580    movu          m6,    [r5 + 13 * 16]
7581    pmaddubsw     m3,    m1,        m6
7582    pmulhrsw      m3,    m7
7583    pmaddubsw     m5,    m2,        m6
7584    pmulhrsw      m5,    m7
7585    packuswb      m3,    m5
7586    movu          [r0 + 256 * 16],  m3
7587    pmaddubsw     m3,    m0,        m6
7588    pmulhrsw      m3,    m7
7589    pmaddubsw     m5,    m4,        m6
7590    pmulhrsw      m5,    m7
7591    packuswb      m3,    m5
7592    movu          [r0 + 257 * 16],  m3
7593
7594    ; mode 7 [row 0]
7595    movu          m6,    [r5 + 9 * 16]
7596    pmaddubsw     m3,    m1,        m6
7597    pmulhrsw      m3,    m7
7598    pmaddubsw     m5,    m2,        m6
7599    pmulhrsw      m5,    m7
7600    packuswb      m3,    m5
7601    movu          [r0 + 320 * 16],  m3
7602    pmaddubsw     m3,    m0,        m6
7603    pmulhrsw      m3,    m7
7604    pmaddubsw     m5,    m4,        m6
7605    pmulhrsw      m5,    m7
7606    packuswb      m3,    m5
7607    movu          [r0 + 321 * 16],  m3
7608
7609    ; mode 7 [row 1]
7610    movu          m6,    [r5 + 18 * 16]
7611    pmaddubsw     m3,    m1,        m6
7612    pmulhrsw      m3,    m7
7613    pmaddubsw     m5,    m2,        m6
7614    pmulhrsw      m5,    m7
7615    packuswb      m3,    m5
7616    movu          [r0 + 322 * 16],  m3
7617
7618    ; mode 9 [row 8 - first half]
7619    movu          [r0 + 464 * 16],  m3
7620
7621    pmaddubsw     m3,    m0,        m6
7622    pmulhrsw      m3,    m7
7623    pmaddubsw     m5,    m4,        m6
7624    pmulhrsw      m5,    m7
7625    packuswb      m3,    m5
7626    movu          [r0 + 323 * 16],  m3
7627
7628    ; mode 9 [row 8 - second half]
7629    movu          [r0 + 465 * 16],  m3
7630
7631    ; mode 7 [row 2]
7632    movu          m6,    [r5 + 27 * 16]
7633    pmaddubsw     m3,    m1,        m6
7634    pmulhrsw      m3,    m7
7635    pmaddubsw     m5,    m2,        m6
7636    pmulhrsw      m5,    m7
7637    packuswb      m3,    m5
7638    movu          [r0 + 324 * 16],  m3
7639    pmaddubsw     m3,    m0,        m6
7640    pmulhrsw      m3,    m7
7641    pmaddubsw     m5,    m4,        m6
7642    pmulhrsw      m5,    m7
7643    packuswb      m3,    m5
7644    movu          [r0 + 325 * 16],  m3
7645
7646    ; mode 8 [row 0]
7647    movu          m6,    [r5 + 5 * 16]
7648    pmaddubsw     m3,    m1,        m6
7649    pmulhrsw      m3,    m7
7650    pmaddubsw     m5,    m2,        m6
7651    pmulhrsw      m5,    m7
7652    packuswb      m3,    m5
7653    movu          [r0 + 384 * 16],  m3
7654    pmaddubsw     m3,    m0,        m6
7655    pmulhrsw      m3,    m7
7656    pmaddubsw     m5,    m4,        m6
7657    pmulhrsw      m5,    m7
7658    packuswb      m3,    m5
7659    movu          [r0 + 385 * 16],  m3
7660
7661    ; mode 8 [row 1]
7662    movu          m6,    [r5 + 10 * 16]
7663    pmaddubsw     m3,    m1,        m6
7664    pmulhrsw      m3,    m7
7665    pmaddubsw     m5,    m2,        m6
7666    pmulhrsw      m5,    m7
7667    packuswb      m3,    m5
7668    movu          [r0 + 386 * 16],  m3
7669
7670    ; mode 9 [row 4 - first half]
7671    movu          [r0 + 456 * 16],  m3
7672
7673    pmaddubsw     m3,    m0,        m6
7674    pmulhrsw      m3,    m7
7675    pmaddubsw     m5,    m4,        m6
7676    pmulhrsw      m5,    m7
7677    packuswb      m3,    m5
7678    movu          [r0 + 387 * 16],  m3
7679
7680    ; mode 9 [row 4 - second half]
7681    movu          [r0 + 457 * 16],  m3
7682
7683    ; mode 8 [row 2]
7684    movu          m6,    [r5 + 15 * 16]
7685    pmaddubsw     m3,    m1,        m6
7686    pmulhrsw      m3,    m7
7687    pmaddubsw     m5,    m2,        m6
7688    pmulhrsw      m5,    m7
7689    packuswb      m3,    m5
7690    movu          [r0 + 388 * 16],  m3
7691    pmaddubsw     m3,    m0,        m6
7692    pmulhrsw      m3,    m7
7693    pmaddubsw     m5,    m4,        m6
7694    pmulhrsw      m5,    m7
7695    packuswb      m3,    m5
7696    movu          [r0 + 389 * 16],  m3
7697
7698    ; mode 8 [row 3]
7699    movu          m6,    [r5 + 20 * 16]
7700    pmaddubsw     m3,    m1,        m6
7701    pmulhrsw      m3,    m7
7702    pmaddubsw     m5,    m2,        m6
7703    pmulhrsw      m5,    m7
7704    packuswb      m3,    m5
7705    movu          [r0 + 390 * 16],  m3
7706
7707    ; mode 9 [row 9 - first half]
7708    movu          [r0 + 466 * 16],  m3
7709
7710    pmaddubsw     m3,    m0,        m6
7711    pmulhrsw      m3,    m7
7712    pmaddubsw     m5,    m4,        m6
7713    pmulhrsw      m5,    m7
7714    packuswb      m3,    m5
7715    movu          [r0 + 391 * 16],  m3
7716
7717    ; mode 9 [row 9 - second half]
7718    movu          [r0 + 467 * 16],  m3
7719
7720    ; mode 8 [row 4]
7721    movu          m6,    [r5 + 25 * 16]
7722    pmaddubsw     m3,    m1,        m6
7723    pmulhrsw      m3,    m7
7724    pmaddubsw     m5,    m2,        m6
7725    pmulhrsw      m5,    m7
7726    packuswb      m3,    m5
7727    movu          [r0 + 392 * 16],  m3
7728    pmaddubsw     m3,    m0,        m6
7729    pmulhrsw      m3,    m7
7730    pmaddubsw     m5,    m4,        m6
7731    pmulhrsw      m5,    m7
7732    packuswb      m3,    m5
7733    movu          [r0 + 393 * 16],  m3
7734
7735    ; mode 8 [row 5]
7736    movu          m6,    [r5 + 30 * 16]
7737    pmaddubsw     m3,    m1,        m6
7738    pmulhrsw      m3,    m7
7739    pmaddubsw     m5,    m2,        m6
7740    pmulhrsw      m5,    m7
7741    packuswb      m3,    m5
7742    movu          [r0 + 394 * 16],  m3
7743
7744    ; mode 9 [row 14 - first half]
7745    movu          [r0 + 476 * 16],  m3
7746
7747    pmaddubsw     m3,    m0,        m6
7748    pmulhrsw      m3,    m7
7749    pmaddubsw     m5,    m4,        m6
7750    pmulhrsw      m5,    m7
7751    packuswb      m3,    m5
7752    movu          [r0 + 395 * 16],  m3
7753
7754    ; mode 9 [row 14 - second half]
7755    movu          [r0 + 477 * 16],  m3
7756
7757    ; mode 9 [row 0]
7758    movu          m6,    [r5 + 2 * 16]
7759    pmaddubsw     m3,    m1,        m6
7760    pmulhrsw      m3,    m7
7761    pmaddubsw     m5,    m2,        m6
7762    pmulhrsw      m5,    m7
7763    packuswb      m3,    m5
7764    movu          [r0 + 448 * 16],  m3
7765    pmaddubsw     m3,    m0,        m6
7766    pmulhrsw      m3,    m7
7767    pmaddubsw     m5,    m4,        m6
7768    pmulhrsw      m5,    m7
7769    packuswb      m3,    m5
7770    movu          [r0 + 449 * 16],  m3
7771
7772    ; mode 9 [row 1]
7773    movu          m6,    [r5 + 4 * 16]
7774    pmaddubsw     m3,    m1,        m6
7775    pmulhrsw      m3,    m7
7776    pmaddubsw     m5,    m2,        m6
7777    pmulhrsw      m5,    m7
7778    packuswb      m3,    m5
7779    movu          [r0 + 450 * 16],  m3
7780    pmaddubsw     m3,    m0,        m6
7781    pmulhrsw      m3,    m7
7782    pmaddubsw     m5,    m4,        m6
7783    pmulhrsw      m5,    m7
7784    packuswb      m3,    m5
7785    movu          [r0 + 451 * 16],  m3
7786
7787    ; mode 9 [row 2]
7788    movu          m6,    [r5 + 6 * 16]
7789    pmaddubsw     m3,    m1,        m6
7790    pmulhrsw      m3,    m7
7791    pmaddubsw     m5,    m2,        m6
7792    pmulhrsw      m5,    m7
7793    packuswb      m3,    m5
7794    movu          [r0 + 452 * 16],  m3
7795    pmaddubsw     m3,    m0,        m6
7796    pmulhrsw      m3,    m7
7797    pmaddubsw     m5,    m4,        m6
7798    pmulhrsw      m5,    m7
7799    packuswb      m3,    m5
7800    movu          [r0 + 453 * 16],  m3
7801
7802    ; mode 9 [row 3]
7803    movu          m6,    [r5 + 8 * 16]
7804    pmaddubsw     m3,    m1,        m6
7805    pmulhrsw      m3,    m7
7806    pmaddubsw     m5,    m2,        m6
7807    pmulhrsw      m5,    m7
7808    packuswb      m3,    m5
7809    movu          [r0 + 454 * 16],  m3
7810    pmaddubsw     m3,    m0,        m6
7811    pmulhrsw      m3,    m7
7812    pmaddubsw     m5,    m4,        m6
7813    pmulhrsw      m5,    m7
7814    packuswb      m3,    m5
7815    movu          [r0 + 455 * 16],  m3
7816
7817    ; mode 9 [row 5]
7818    movu          m6,    [r5 + 12 * 16]
7819    pmaddubsw     m3,    m1,        m6
7820    pmulhrsw      m3,    m7
7821    pmaddubsw     m5,    m2,        m6
7822    pmulhrsw      m5,    m7
7823    packuswb      m3,    m5
7824    movu          [r0 + 458 * 16],  m3
7825    pmaddubsw     m3,    m0,        m6
7826    pmulhrsw      m3,    m7
7827    pmaddubsw     m5,    m4,        m6
7828    pmulhrsw      m5,    m7
7829    packuswb      m3,    m5
7830    movu          [r0 + 459 * 16],  m3
7831
7832    ; mode 9 [row 6]
7833    movu          m6,    [r5 + 14 * 16]
7834    pmaddubsw     m3,    m1,        m6
7835    pmulhrsw      m3,    m7
7836    pmaddubsw     m5,    m2,        m6
7837    pmulhrsw      m5,    m7
7838    packuswb      m3,    m5
7839    movu          [r0 + 460 * 16],  m3
7840    pmaddubsw     m3,    m0,        m6
7841    pmulhrsw      m3,    m7
7842    pmaddubsw     m5,    m4,        m6
7843    pmulhrsw      m5,    m7
7844    packuswb      m3,    m5
7845    movu          [r0 + 461 * 16],  m3
7846
7847    ; mode 9 [row 7]
7848    movu          m6,    [r5 + 16 * 16]
7849    pmaddubsw     m3,    m1,        m6
7850    pmulhrsw      m3,    m7
7851    pmaddubsw     m5,    m2,        m6
7852    pmulhrsw      m5,    m7
7853    packuswb      m3,    m5
7854    movu          [r0 + 462 * 16],  m3
7855    pmaddubsw     m3,    m0,        m6
7856    pmulhrsw      m3,    m7
7857    pmaddubsw     m5,    m4,        m6
7858    pmulhrsw      m5,    m7
7859    packuswb      m3,    m5
7860    movu          [r0 + 463 * 16],  m3
7861
7862    ; mode 9 [row 10]
7863    movu          m6,    [r5 + 22 * 16]
7864    pmaddubsw     m3,    m1,        m6
7865    pmulhrsw      m3,    m7
7866    pmaddubsw     m5,    m2,        m6
7867    pmulhrsw      m5,    m7
7868    packuswb      m3,    m5
7869    movu          [r0 + 468 * 16],  m3
7870    pmaddubsw     m3,    m0,        m6
7871    pmulhrsw      m3,    m7
7872    pmaddubsw     m5,    m4,        m6
7873    pmulhrsw      m5,    m7
7874    packuswb      m3,    m5
7875    movu          [r0 + 469 * 16],  m3
7876
7877    ; mode 9 [row 11]
7878    movu          m6,    [r5 + 24 * 16]
7879    pmaddubsw     m3,    m1,        m6
7880    pmulhrsw      m3,    m7
7881    pmaddubsw     m5,    m2,        m6
7882    pmulhrsw      m5,    m7
7883    packuswb      m3,    m5
7884    movu          [r0 + 470 * 16],  m3
7885    pmaddubsw     m3,    m0,        m6
7886    pmulhrsw      m3,    m7
7887    pmaddubsw     m5,    m4,        m6
7888    pmulhrsw      m5,    m7
7889    packuswb      m3,    m5
7890    movu          [r0 + 471 * 16],  m3
7891
7892    ; mode 9 [row 13]
7893    movu          m6,    [r5 + 28 * 16]
7894    pmaddubsw     m3,    m1,        m6
7895    pmulhrsw      m3,    m7
7896    pmaddubsw     m5,    m2,        m6
7897    pmulhrsw      m5,    m7
7898    packuswb      m3,    m5
7899    movu          [r0 + 474 * 16],  m3
7900    pmaddubsw     m3,    m0,        m6
7901    pmulhrsw      m3,    m7
7902    pmaddubsw     m5,    m4,        m6
7903    pmulhrsw      m5,    m7
7904    packuswb      m3,    m5
7905    movu          [r0 + 475 * 16],  m3
7906
7907    ; mode 3 [row 1]
7908    movu          m6,    [r5 + 20 * 16]
7909    movu          m0,    [r4 + 2]
7910    movd          m1,    [r4 + 3]
7911    palignr       m1,    m0,        1
7912    punpcklbw     m0,    m1
7913    pmaddubsw     m1,    m0,        m6
7914    pmulhrsw      m1,    m7
7915    movu          m2,    [r4 + 10]
7916    movd          m3,    [r4 + 11]
7917    palignr       m3,    m2,        1
7918    punpcklbw     m2,    m3
7919    pmaddubsw     m3,    m2,        m6
7920    pmulhrsw      m3,    m7
7921    packuswb      m1,               m3
7922    movu          [r0 + 66 * 16],   m1
7923
7924    ; mode 6 [row 3 - first half]
7925    movu          [r0 + 262 * 16],  m1
7926
7927    ; mode 9 [row 25 - first half]
7928    movu          [r0 + 498 * 16],  m1
7929
7930    movu          m1,    [r4 + 18]
7931    movd          m3,    [r4 + 19]
7932    palignr       m3,    m1,        1
7933    punpcklbw     m1,    m3
7934    pmaddubsw     m3,    m1,        m6
7935    pmulhrsw      m3,    m7
7936    movu          m4,    [r4 + 26]
7937    movd          m5,    [r4 + 27]
7938    palignr       m5,    m4,        1
7939    punpcklbw     m4,    m5
7940    pmaddubsw     m5,    m4,        m6
7941    pmulhrsw      m5,    m7
7942    packuswb      m3,               m5
7943    movu          [r0 + 67 * 16],   m3
7944
7945    ; mode 6 [row 3 - second half]
7946    movu          [r0 + 263 * 16],  m3
7947
7948    ; mode 9 [row 25 - second half]
7949    movu          [r0 + 499 * 16],  m3
7950
7951    ; mode 4 [row 1]
7952    movu          m6,    [r5 + 10 * 16]
7953    pmaddubsw     m3,    m0,        m6
7954    pmulhrsw      m3,    m7
7955    pmaddubsw     m5,    m2,        m6
7956    pmulhrsw      m5,    m7
7957    packuswb      m3,    m5
7958    movu          [r0 + 130 * 16],  m3
7959
7960    ; mode 9 [row 20 - first half]
7961    movu          [r0 + 488 * 16],  m3
7962
7963    pmaddubsw     m3,    m1,        m6
7964    pmulhrsw      m3,    m7
7965    pmaddubsw     m5,    m4,        m6
7966    pmulhrsw      m5,    m7
7967    packuswb      m3,    m5
7968    movu          [r0 + 131 * 16],  m3
7969
7970    ; mode 9 [row 20 - second half]
7971    movu          [r0 + 489 * 16],  m3
7972
7973    ; mode 4 [row 2]
7974    movu          m6,    [r5 + 31 * 16]
7975    pmaddubsw     m3,    m0,        m6
7976    pmulhrsw      m3,    m7
7977    pmaddubsw     m5,    m2,        m6
7978    pmulhrsw      m5,    m7
7979    packuswb      m3,    m5
7980    movu          [r0 + 132 * 16],  m3
7981
7982    ; mode 7 [row 6 - first half]
7983    movu          [r0 + 332 * 16],  m3
7984
7985    pmaddubsw     m3,    m1,        m6
7986    pmulhrsw      m3,    m7
7987    pmaddubsw     m5,    m4,        m6
7988    pmulhrsw      m5,    m7
7989    packuswb      m3,    m5
7990    movu          [r0 + 133 * 16],  m3
7991
7992    ; mode 7 [row 6 - second half]
7993    movu          [r0 + 333 * 16],  m3
7994
7995    ; mode 5 [row 1]
7996    movu          m6,    [r5 + 2 * 16]
7997    pmaddubsw     m3,    m0,        m6
7998    pmulhrsw      m3,    m7
7999    pmaddubsw     m5,    m2,        m6
8000    pmulhrsw      m5,    m7
8001    packuswb      m3,    m5
8002    movu          [r0 + 194 * 16],  m3
8003
8004    ; mode 5 [row 1 - first half]
8005    movu          [r0 + 480 * 16],  m3
8006
8007    pmaddubsw     m3,    m1,        m6
8008    pmulhrsw      m3,    m7
8009    pmaddubsw     m5,    m4,        m6
8010    pmulhrsw      m5,    m7
8011    packuswb      m3,    m5
8012    movu          [r0 + 195 * 16],  m3
8013
8014    ; mode 5 [row 1 - second half]
8015    movu          [r0 + 481 * 16],  m3
8016
8017    ; mode 5 [row 2]
8018    movu          m6,    [r5 + 19 * 16]
8019    pmaddubsw     m3,    m0,        m6
8020    pmulhrsw      m3,    m7
8021    pmaddubsw     m5,    m2,        m6
8022    pmulhrsw      m5,    m7
8023    packuswb      m3,    m5
8024    movu          [r0 + 196 * 16],  m3
8025    pmaddubsw     m3,    m1,        m6
8026    pmulhrsw      m3,    m7
8027    pmaddubsw     m5,    m4,        m6
8028    pmulhrsw      m5,    m7
8029    packuswb      m3,    m5
8030    movu          [r0 + 197 * 16],  m3
8031
8032    ; mode 6 [row 2]
8033    movu          m6,    [r5 + 7 * 16]
8034    pmaddubsw     m3,    m0,        m6
8035    pmulhrsw      m3,    m7
8036    pmaddubsw     m5,    m2,        m6
8037    pmulhrsw      m5,    m7
8038    packuswb      m3,    m5
8039    movu          [r0 + 260 * 16],  m3
8040    pmaddubsw     m3,    m1,        m6
8041    pmulhrsw      m3,    m7
8042    pmaddubsw     m5,    m4,        m6
8043    pmulhrsw      m5,    m7
8044    packuswb      m3,    m5
8045    movu          [r0 + 261 * 16],  m3
8046
8047    ; mode 7 [row 3]
8048    movu          m6,    [r5 + 4 * 16]
8049    pmaddubsw     m3,    m0,        m6
8050    pmulhrsw      m3,    m7
8051    pmaddubsw     m5,    m2,        m6
8052    pmulhrsw      m5,    m7
8053    packuswb      m3,    m5
8054    movu          [r0 + 326 * 16],  m3
8055
8056    ; mode 9 [row 17 - first half]
8057    movu          [r0 + 482 * 16],  m3
8058
8059    pmaddubsw     m3,    m1,        m6
8060    pmulhrsw      m3,    m7
8061    pmaddubsw     m5,    m4,        m6
8062    pmulhrsw      m5,    m7
8063    packuswb      m3,    m5
8064    movu          [r0 + 327 * 16],  m3
8065
8066    ; mode 9 [row 17 - second half]
8067    movu          [r0 + 483 * 16],  m3
8068
8069    ; mode 7 [row 4]
8070    movu          m6,    [r5 + 13 * 16]
8071    pmaddubsw     m3,    m0,        m6
8072    pmulhrsw      m3,    m7
8073    pmaddubsw     m5,    m2,        m6
8074    pmulhrsw      m5,    m7
8075    packuswb      m3,    m5
8076    movu          [r0 + 328 * 16],  m3
8077
8078    ; mode 8 [row 8 - first half]
8079    movu          [r0 + 400 * 16],  m3
8080
8081    pmaddubsw     m3,    m1,        m6
8082    pmulhrsw      m3,    m7
8083    pmaddubsw     m5,    m4,        m6
8084    pmulhrsw      m5,    m7
8085    packuswb      m3,    m5
8086    movu          [r0 + 329 * 16],  m3
8087
8088    ; mode 8 [row 8 - second half]
8089    movu          [r0 + 401 * 16],  m3
8090
8091    ; mode 7 [row 5]
8092    movu          m6,    [r5 + 22 * 16]
8093    pmaddubsw     m3,    m0,        m6
8094    pmulhrsw      m3,    m7
8095    pmaddubsw     m5,    m2,        m6
8096    pmulhrsw      m5,    m7
8097    packuswb      m3,    m5
8098    movu          [r0 + 330 * 16],  m3
8099
8100    ; mode 9 [row 26 - first half]
8101    movu          [r0 + 500 * 16],  m3
8102
8103    pmaddubsw     m3,    m1,        m6
8104    pmulhrsw      m3,    m7
8105    pmaddubsw     m5,    m4,        m6
8106    pmulhrsw      m5,    m7
8107    packuswb      m3,    m5
8108    movu          [r0 + 331 * 16],  m3
8109
8110    ; mode 9 [row 26 - second half]
8111    movu          [r0 + 501 * 16],  m3
8112
8113    ; mode 8 [row 6]
8114    movu          m6,    [r5 + 3 * 16]
8115    pmaddubsw     m3,    m0,        m6
8116    pmulhrsw      m3,    m7
8117    pmaddubsw     m5,    m2,        m6
8118    pmulhrsw      m5,    m7
8119    packuswb      m3,    m5
8120    movu          [r0 + 396 * 16],  m3
8121    pmaddubsw     m3,    m1,        m6
8122    pmulhrsw      m3,    m7
8123    pmaddubsw     m5,    m4,        m6
8124    pmulhrsw      m5,    m7
8125    packuswb      m3,    m5
8126    movu          [r0 + 397 * 16],  m3
8127
8128    ; mode 9 [row 18]
8129    movu          m6,    [r5 + 6 * 16]
8130    pmaddubsw     m3,    m0,        m6
8131    pmulhrsw      m3,    m7
8132    pmaddubsw     m5,    m2,        m6
8133    pmulhrsw      m5,    m7
8134    packuswb      m3,    m5
8135    movu          [r0 + 484 * 16],  m3
8136    pmaddubsw     m3,    m1,        m6
8137    pmulhrsw      m3,    m7
8138    pmaddubsw     m5,    m4,        m6
8139    pmulhrsw      m5,    m7
8140    packuswb      m3,    m5
8141    movu          [r0 + 485 * 16],  m3
8142
8143    ; mode 9 [row 21]
8144    movu          m6,    [r5 + 12 * 16]
8145    pmaddubsw     m3,    m0,        m6
8146    pmulhrsw      m3,    m7
8147    pmaddubsw     m5,    m2,        m6
8148    pmulhrsw      m5,    m7
8149    packuswb      m3,    m5
8150    movu          [r0 + 490 * 16],  m3
8151    pmaddubsw     m3,    m1,        m6
8152    pmulhrsw      m3,    m7
8153    pmaddubsw     m5,    m4,        m6
8154    pmulhrsw      m5,    m7
8155    packuswb      m3,    m5
8156    movu          [r0 + 491 * 16],  m3
8157
8158    ; mode 9 [row 22]
8159    movu          m6,    [r5 + 14 * 16]
8160    pmaddubsw     m3,    m0,        m6
8161    pmulhrsw      m3,    m7
8162    pmaddubsw     m5,    m2,        m6
8163    pmulhrsw      m5,    m7
8164    packuswb      m3,    m5
8165    movu          [r0 + 492 * 16],  m3
8166    pmaddubsw     m3,    m1,        m6
8167    pmulhrsw      m3,    m7
8168    pmaddubsw     m5,    m4,        m6
8169    pmulhrsw      m5,    m7
8170    packuswb      m3,    m5
8171    movu          [r0 + 493 * 16],  m3
8172
8173    ; mode 9 [row 23]
8174    movu          m6,    [r5 + 16 * 16]
8175    pmaddubsw     m3,    m0,        m6
8176    pmulhrsw      m3,    m7
8177    pmaddubsw     m5,    m2,        m6
8178    pmulhrsw      m5,    m7
8179    packuswb      m3,    m5
8180    movu          [r0 + 494 * 16],  m3
8181    pmaddubsw     m3,    m1,        m6
8182    pmulhrsw      m3,    m7
8183    pmaddubsw     m5,    m4,        m6
8184    pmulhrsw      m5,    m7
8185    packuswb      m3,    m5
8186    movu          [r0 + 495 * 16],  m3
8187
8188    ; mode 9 [row 27]
8189    movu          m6,    [r5 + 24 * 16]
8190    pmaddubsw     m3,    m0,        m6
8191    pmulhrsw      m3,    m7
8192    pmaddubsw     m5,    m2,        m6
8193    pmulhrsw      m5,    m7
8194    packuswb      m3,    m5
8195    movu          [r0 + 502 * 16],  m3
8196    pmaddubsw     m3,    m1,        m6
8197    pmulhrsw      m3,    m7
8198    pmaddubsw     m5,    m4,        m6
8199    pmulhrsw      m5,    m7
8200    packuswb      m3,    m5
8201    movu          [r0 + 503 * 16],  m3
8202
8203    ; mode 9 [row 28]
8204    movu          m6,    [r5 + 26 * 16]
8205    pmaddubsw     m3,    m0,        m6
8206    pmulhrsw      m3,    m7
8207    pmaddubsw     m5,    m2,        m6
8208    pmulhrsw      m5,    m7
8209    packuswb      m3,    m5
8210    movu          [r0 + 504 * 16],  m3
8211    pmaddubsw     m3,    m1,        m6
8212    pmulhrsw      m3,    m7
8213    pmaddubsw     m5,    m4,        m6
8214    pmulhrsw      m5,    m7
8215    packuswb      m3,    m5
8216    movu          [r0 + 505 * 16],  m3
8217
8218    ; mode 9 [row 30]
8219    movu          m6,    [r5 + 30 * 16]
8220    pmaddubsw     m3,    m0,        m6
8221    pmulhrsw      m3,    m7
8222    pmaddubsw     m5,    m2,        m6
8223    pmulhrsw      m5,    m7
8224    packuswb      m3,    m5
8225    movu          [r0 + 508 * 16],  m3
8226    pmaddubsw     m3,    m1,        m6
8227    pmulhrsw      m3,    m7
8228    pmaddubsw     m5,    m4,        m6
8229    pmulhrsw      m5,    m7
8230    packuswb      m3,    m5
8231    movu          [r0 + 509 * 16],  m3
8232
8233    ; mode 8 [row 7]
8234    movu          m6,    [r5 + 8 * 16]
8235    pmaddubsw     m3,    m0,        m6
8236    pmulhrsw      m3,    m7
8237    pmaddubsw     m5,    m2,        m6
8238    pmulhrsw      m5,    m7
8239    packuswb      m3,    m5
8240    movu          [r0 + 398 * 16],  m3
8241
8242    ; mode 9 [row 19 - first half]
8243    movu          [r0 + 486 * 16],  m3
8244
8245    pmaddubsw     m3,    m1,        m6
8246    pmulhrsw      m3,    m7
8247    pmaddubsw     m5,    m4,        m6
8248    pmulhrsw      m5,    m7
8249    packuswb      m3,    m5
8250    movu          [r0 + 399 * 16],  m3
8251
8252    ; mode 9 [row 19 - second half]
8253    movu          [r0 + 487 * 16],  m3
8254
8255    ; mode 8 [row 9]
8256    movu          m6,    [r5 + 18 * 16]
8257    pmaddubsw     m3,    m0,        m6
8258    pmulhrsw      m3,    m7
8259    pmaddubsw     m5,    m2,        m6
8260    pmulhrsw      m5,    m7
8261    packuswb      m3,    m5
8262    movu          [r0 + 402 * 16],  m3
8263
8264    ; mode 9 [row 24 - first half]
8265    movu          [r0 + 496 * 16],  m3
8266
8267    pmaddubsw     m3,    m1,        m6
8268    pmulhrsw      m3,    m7
8269    pmaddubsw     m5,    m4,        m6
8270    pmulhrsw      m5,    m7
8271    packuswb      m3,    m5
8272    movu          [r0 + 403 * 16],  m3
8273
8274    ; mode 9 [row 24 - second half]
8275    movu          [r0 + 497 * 16],  m3
8276
8277    ; mode 8 [row 10]
8278    movu          m6,    [r5 + 23 * 16]
8279    pmaddubsw     m3,    m0,        m6
8280    pmulhrsw      m3,    m7
8281    pmaddubsw     m5,    m2,        m6
8282    pmulhrsw      m5,    m7
8283    packuswb      m3,    m5
8284    movu          [r0 + 404 * 16],  m3
8285    pmaddubsw     m3,    m1,        m6
8286    pmulhrsw      m3,    m7
8287    pmaddubsw     m5,    m4,        m6
8288    pmulhrsw      m5,    m7
8289    packuswb      m3,    m5
8290    movu          [r0 + 405 * 16],  m3
8291
8292    ; mode 8 [row 11]
8293    movu          m6,    [r5 + 28 * 16]
8294    pmaddubsw     m3,    m0,        m6
8295    pmulhrsw      m3,    m7
8296    pmaddubsw     m5,    m2,        m6
8297    pmulhrsw      m5,    m7
8298    packuswb      m3,    m5
8299    movu          [r0 + 406 * 16],  m3
8300
8301    ; mode 9 [row 29 - first half]
8302    movu          [r0 + 506 * 16],  m3
8303
8304    pmaddubsw     m3,    m1,        m6
8305    pmulhrsw      m3,    m7
8306    pmaddubsw     m5,    m4,        m6
8307    pmulhrsw      m5,    m7
8308    packuswb      m3,    m5
8309    movu          [r0 + 407 * 16],  m3
8310
8311    ; mode 9 [row 29 - second half]
8312    movu          [r0 + 507 * 16],  m3
8313
8314    ; mode 3 [row 2]
8315    movu          m6,    [r5 + 14 * 16]
8316    movu          m0,    [r4 + 3]
8317    movd          m1,    [r4 + 4]
8318    palignr       m1,    m0,        1
8319    punpcklbw     m0,    m1
8320    pmaddubsw     m1,    m0,        m6
8321    pmulhrsw      m1,    m7
8322    movu          m2,    [r4 + 11]
8323    movd          m3,    [r4 + 12]
8324    palignr       m3,    m2,        1
8325    punpcklbw     m2,    m3
8326    pmaddubsw     m3,    m2,        m6
8327    pmulhrsw      m3,    m7
8328    packuswb      m1,               m3
8329    movu          [r0 + 68 * 16],   m1
8330
8331    ; mode 3 [row 2 - first half]
8332    movu          [r0 + 266 * 16],  m1
8333
8334    movu          m1,    [r4 + 19]
8335    movd          m3,    [r4 + 20]
8336    palignr       m3,    m1,        1
8337    punpcklbw     m1,    m3
8338    pmaddubsw     m3,    m1,        m6
8339    pmulhrsw      m3,    m7
8340    movu          m4,    [r4 + 27]
8341    movd          m5,    [r4 + 28]
8342    palignr       m5,    m4,        1
8343    punpcklbw     m4,    m5
8344    pmaddubsw     m5,    m4,        m6
8345    pmulhrsw      m5,    m7
8346    packuswb      m3,               m5
8347    movu          [r0 + 69 * 16],   m3
8348
8349    ; mode 3 [row 2 - second half]
8350    movu          [r0 + 267 * 16],  m3
8351
8352    ; mode 4 [row 3]
8353    movu          m6,    [r5 + 20 * 16]
8354    pmaddubsw     m3,    m0,        m6
8355    pmulhrsw      m3,    m7
8356    pmaddubsw     m5,    m2,        m6
8357    pmulhrsw      m5,    m7
8358    packuswb      m3,    m5
8359    movu          [r0 + 134 * 16],  m3
8360    pmaddubsw     m3,    m1,        m6
8361    pmulhrsw      m3,    m7
8362    pmaddubsw     m5,    m4,        m6
8363    pmulhrsw      m5,    m7
8364    packuswb      m3,    m5
8365    movu          [r0 + 135 * 16],  m3
8366
8367    ; mode 5 [row 3]
8368    movu          m6,    [r5 + 4 * 16]
8369    pmaddubsw     m3,    m0,        m6
8370    pmulhrsw      m3,    m7
8371    pmaddubsw     m5,    m2,        m6
8372    pmulhrsw      m5,    m7
8373    packuswb      m3,    m5
8374    movu          [r0 + 198 * 16],  m3
8375    pmaddubsw     m3,    m1,        m6
8376    pmulhrsw      m3,    m7
8377    pmaddubsw     m5,    m4,        m6
8378    pmulhrsw      m5,    m7
8379    packuswb      m3,    m5
8380    movu          [r0 + 199 * 16],  m3
8381
8382    ; mode 5 [row 4]
8383    movu          m6,    [r5 + 21 * 16]
8384    pmaddubsw     m3,    m0,        m6
8385    pmulhrsw      m3,    m7
8386    pmaddubsw     m5,    m2,        m6
8387    pmulhrsw      m5,    m7
8388    packuswb      m3,    m5
8389    movu          [r0 + 200 * 16],  m3
8390
8391    ; mode 8 [row 16 - first half]
8392    movu          [r0 + 416 * 16],  m3
8393
8394    pmaddubsw     m3,    m1,        m6
8395    pmulhrsw      m3,    m7
8396    pmaddubsw     m5,    m4,        m6
8397    pmulhrsw      m5,    m7
8398    packuswb      m3,    m5
8399    movu          [r0 + 201 * 16],  m3
8400
8401    ; mode 8 [row 16 - second half]
8402    movu          [r0 + 417 * 16],  m3
8403
8404    ; mode 6 [row 4]
8405    movu          m6,    [r5 + 1 * 16]
8406    pmaddubsw     m3,    m0,        m6
8407    pmulhrsw      m3,    m7
8408    pmaddubsw     m5,    m2,        m6
8409    pmulhrsw      m5,    m7
8410    packuswb      m3,    m5
8411    movu          [r0 + 264 * 16],  m3
8412
8413    ; mode 6 [row 4 - first half]
8414    movu          [r0 + 408 * 16],  m3
8415
8416    pmaddubsw     m3,    m1,        m6
8417    pmulhrsw      m3,    m7
8418    pmaddubsw     m5,    m4,        m6
8419    pmulhrsw      m5,    m7
8420    packuswb      m3,    m5
8421    movu          [r0 + 265 * 16],  m3
8422
8423    ; mode 6 [row 4 - second half]
8424    movu          [r0 + 409 * 16],  m3
8425
8426    ; mode 6 [row 6]
8427    movu          m6,    [r5 + 27 * 16]
8428    pmaddubsw     m3,    m0,        m6
8429    pmulhrsw      m3,    m7
8430    pmaddubsw     m5,    m2,        m6
8431    pmulhrsw      m5,    m7
8432    packuswb      m3,    m5
8433    movu          [r0 + 268 * 16],  m3
8434    pmaddubsw     m3,    m1,        m6
8435    pmulhrsw      m3,    m7
8436    pmaddubsw     m5,    m4,        m6
8437    pmulhrsw      m5,    m7
8438    packuswb      m3,    m5
8439    movu          [r0 + 269 * 16],  m3
8440
8441    ; mode 7 [row 7]
8442    movu          m6,    [r5 + 8 * 16]
8443    pmaddubsw     m3,    m0,        m6
8444    pmulhrsw      m3,    m7
8445    pmaddubsw     m5,    m2,        m6
8446    pmulhrsw      m5,    m7
8447    packuswb      m3,    m5
8448    movu          [r0 + 334 * 16],  m3
8449    pmaddubsw     m3,    m1,        m6
8450    pmulhrsw      m3,    m7
8451    pmaddubsw     m5,    m4,        m6
8452    pmulhrsw      m5,    m7
8453    packuswb      m3,    m5
8454    movu          [r0 + 335 * 16],  m3
8455
8456    ; mode 7 [row 8]
8457    movu          m6,    [r5 + 17 * 16]
8458    pmaddubsw     m3,    m0,        m6
8459    pmulhrsw      m3,    m7
8460    pmaddubsw     m5,    m2,        m6
8461    pmulhrsw      m5,    m7
8462    packuswb      m3,    m5
8463    movu          [r0 + 336 * 16],  m3
8464    pmaddubsw     m3,    m1,        m6
8465    pmulhrsw      m3,    m7
8466    pmaddubsw     m5,    m4,        m6
8467    pmulhrsw      m5,    m7
8468    packuswb      m3,    m5
8469    movu          [r0 + 337 * 16],  m3
8470
8471    ; mode 7 [row 9]
8472    movu          m6,    [r5 + 26 * 16]
8473    pmaddubsw     m3,    m0,        m6
8474    pmulhrsw      m3,    m7
8475    pmaddubsw     m5,    m2,        m6
8476    pmulhrsw      m5,    m7
8477    packuswb      m3,    m5
8478    movu          [r0 + 338 * 16],  m3
8479
8480    ; mode 8 [row 17 - first half]
8481    movu          [r0 + 418 * 16],  m3
8482
8483    pmaddubsw     m3,    m1,        m6
8484    pmulhrsw      m3,    m7
8485    pmaddubsw     m5,    m4,        m6
8486    pmulhrsw      m5,    m7
8487    packuswb      m3,    m5
8488    movu          [r0 + 339 * 16],  m3
8489
8490    ; mode 8 [row 17 - second half]
8491    movu          [r0 + 419 * 16],  m3
8492
8493    ; mode 8 [row 13]
8494    movu          m6,    [r5 + 6 * 16]
8495    pmaddubsw     m3,    m0,        m6
8496    pmulhrsw      m3,    m7
8497    pmaddubsw     m5,    m2,        m6
8498    pmulhrsw      m5,    m7
8499    packuswb      m3,    m5
8500    movu          [r0 + 410 * 16],  m3
8501    pmaddubsw     m3,    m1,        m6
8502    pmulhrsw      m3,    m7
8503    pmaddubsw     m5,    m4,        m6
8504    pmulhrsw      m5,    m7
8505    packuswb      m3,    m5
8506    movu          [r0 + 411 * 16],  m3
8507
8508    ; mode 8 [row 14]
8509    movu          m6,    [r5 + 11 * 16]
8510    pmaddubsw     m3,    m0,        m6
8511    pmulhrsw      m3,    m7
8512    pmaddubsw     m5,    m2,        m6
8513    pmulhrsw      m5,    m7
8514    packuswb      m3,    m5
8515    movu          [r0 + 412 * 16],  m3
8516    pmaddubsw     m3,    m1,        m6
8517    pmulhrsw      m3,    m7
8518    pmaddubsw     m5,    m4,        m6
8519    pmulhrsw      m5,    m7
8520    packuswb      m3,    m5
8521    movu          [r0 + 413 * 16],  m3
8522
8523    ; mode 8 [row 15]
8524    movu          m6,    [r5 + 16 * 16]
8525    pmaddubsw     m3,    m0,        m6
8526    pmulhrsw      m3,    m7
8527    pmaddubsw     m5,    m2,        m6
8528    pmulhrsw      m5,    m7
8529    packuswb      m3,    m5
8530    movu          [r0 + 414 * 16],  m3
8531    pmaddubsw     m3,    m1,        m6
8532    pmulhrsw      m3,    m7
8533    pmaddubsw     m5,    m4,        m6
8534    pmulhrsw      m5,    m7
8535    packuswb      m3,    m5
8536    movu          [r0 + 415 * 16],  m3
8537
8538    ; mode 8 [row 18]
8539    movu          m6,    [r5 + 31 * 16]
8540    pmaddubsw     m3,    m0,        m6
8541    pmulhrsw      m3,    m7
8542    pmaddubsw     m5,    m2,        m6
8543    pmulhrsw      m5,    m7
8544    packuswb      m3,    m5
8545    movu          [r0 + 420 * 16],  m3
8546    pmaddubsw     m3,    m1,        m6
8547    pmulhrsw      m3,    m7
8548    pmaddubsw     m5,    m4,        m6
8549    pmulhrsw      m5,    m7
8550    packuswb      m3,    m5
8551    movu          [r0 + 421 * 16],  m3
8552
8553    ; mode 3 [row 3]
8554    movu          m6,    [r5 + 8 * 16]
8555    movu          m0,    [r4 + 4]
8556    movd          m1,    [r4 + 5]
8557    palignr       m1,    m0,        1
8558    punpcklbw     m0,    m1
8559    pmaddubsw     m1,    m0,        m6
8560    pmulhrsw      m1,    m7
8561    movu          m2,    [r4 + 12]
8562    movd          m3,    [r4 + 13]
8563    palignr       m3,    m2,        1
8564    punpcklbw     m2,    m3
8565    pmaddubsw     m3,    m2,        m6
8566    pmulhrsw      m3,    m7
8567    packuswb      m1,               m3
8568    movu          [r0 + 70 * 16],   m1
8569
8570    ; mode 6 [row 7 - first half]
8571    movu          [r0 + 270 * 16],  m1
8572
8573    movu          m1,    [r4 + 20]
8574    movd          m3,    [r4 + 21]
8575    palignr       m3,    m1,        1
8576    punpcklbw     m1,    m3
8577    pmaddubsw     m3,    m1,        m6
8578    pmulhrsw      m3,    m7
8579    movu          m4,    [r4 + 28]
8580    movd          m5,    [r4 + 29]
8581    palignr       m5,    m4,        1
8582    punpcklbw     m4,    m5
8583    pmaddubsw     m5,    m4,        m6
8584    pmulhrsw      m5,    m7
8585    packuswb      m3,               m5
8586    movu          [r0 + 71 * 16],   m3
8587
8588    ; mode 6 [row 7 - second half]
8589    movu          [r0 + 271 * 16],  m3
8590
8591    ; mode 4 [row 4]
8592    movu          m6,    [r5 + 9 * 16]
8593    pmaddubsw     m3,    m0,        m6
8594    pmulhrsw      m3,    m7
8595    pmaddubsw     m5,    m2,        m6
8596    pmulhrsw      m5,    m7
8597    packuswb      m3,    m5
8598    movu          [r0 + 136 * 16],  m3
8599
8600    ; mode 4 [row 4 - first half]
8601    movu          [r0 + 424 * 16],  m3
8602
8603    pmaddubsw     m3,    m1,        m6
8604    pmulhrsw      m3,    m7
8605    pmaddubsw     m5,    m4,        m6
8606    pmulhrsw      m5,    m7
8607    packuswb      m3,    m5
8608    movu          [r0 + 137 * 16],  m3
8609
8610    ; mode 4 [row 4 - second half]
8611    movu          [r0 + 425 * 16],  m3
8612
8613    ; mode 4 [row 5]
8614    movu          m6,    [r5 + 30 * 16]
8615    pmaddubsw     m3,    m0,        m6
8616    pmulhrsw      m3,    m7
8617    pmaddubsw     m5,    m2,        m6
8618    pmulhrsw      m5,    m7
8619    packuswb      m3,    m5
8620    movu          [r0 + 138 * 16],  m3
8621
8622    ; mode 7 [row 13 - first half]
8623    movu          [r0 + 346 * 16],  m3
8624
8625    pmaddubsw     m3,    m1,        m6
8626    pmulhrsw      m3,    m7
8627    pmaddubsw     m5,    m4,        m6
8628    pmulhrsw      m5,    m7
8629    packuswb      m3,    m5
8630    movu          [r0 + 139 * 16],  m3
8631
8632    ; mode 7 [row 13 - second half]
8633    movu          [r0 + 347 * 16],  m3
8634
8635    ; mode 5 [row 5]
8636    movu          m6,    [r5 + 6 * 16]
8637    pmaddubsw     m3,    m0,        m6
8638    pmulhrsw      m3,    m7
8639    pmaddubsw     m5,    m2,        m6
8640    pmulhrsw      m5,    m7
8641    packuswb      m3,    m5
8642    movu          [r0 + 202 * 16],  m3
8643    pmaddubsw     m3,    m1,        m6
8644    pmulhrsw      m3,    m7
8645    pmaddubsw     m5,    m4,        m6
8646    pmulhrsw      m5,    m7
8647    packuswb      m3,    m5
8648    movu          [r0 + 203 * 16],  m3
8649
8650    ; mode 5 [row 6]
8651    movu          m6,    [r5 + 23 * 16]
8652    pmaddubsw     m3,    m0,        m6
8653    pmulhrsw      m3,    m7
8654    pmaddubsw     m5,    m2,        m6
8655    pmulhrsw      m5,    m7
8656    packuswb      m3,    m5
8657    movu          [r0 + 204 * 16],  m3
8658    pmaddubsw     m3,    m1,        m6
8659    pmulhrsw      m3,    m7
8660    pmaddubsw     m5,    m4,        m6
8661    pmulhrsw      m5,    m7
8662    packuswb      m3,    m5
8663    movu          [r0 + 205 * 16],  m3
8664
8665    ; mode 6 [row 8]
8666    movu          m6,    [r5 + 21 * 16]
8667    pmaddubsw     m3,    m0,        m6
8668    pmulhrsw      m3,    m7
8669    pmaddubsw     m5,    m2,        m6
8670    pmulhrsw      m5,    m7
8671    packuswb      m3,    m5
8672    movu          [r0 + 272 * 16],  m3
8673
8674    ; mode 7 [row 12 - first half]
8675    movu          [r0 + 344 * 16],  m3
8676
8677    pmaddubsw     m3,    m1,        m6
8678    pmulhrsw      m3,    m7
8679    pmaddubsw     m5,    m4,        m6
8680    pmulhrsw      m5,    m7
8681    packuswb      m3,    m5
8682    movu          [r0 + 273 * 16],  m3
8683
8684    ; mode 7 [row 12 - second half]
8685    movu          [r0 + 345 * 16],  m3
8686
8687    ; mode 7 [row 10]
8688    movu          m6,    [r5 + 3 * 16]
8689    pmaddubsw     m3,    m0,        m6
8690    pmulhrsw      m3,    m7
8691    pmaddubsw     m5,    m2,        m6
8692    pmulhrsw      m5,    m7
8693    packuswb      m3,    m5
8694    movu          [r0 + 340 * 16],  m3
8695    pmaddubsw     m3,    m1,        m6
8696    pmulhrsw      m3,    m7
8697    pmaddubsw     m5,    m4,        m6
8698    pmulhrsw      m5,    m7
8699    packuswb      m3,    m5
8700    movu          [r0 + 341 * 16],  m3
8701
8702    ; mode 7 [row 11]
8703    movu          m6,    [r5 + 12 * 16]
8704    pmaddubsw     m3,    m0,        m6
8705    pmulhrsw      m3,    m7
8706    pmaddubsw     m5,    m2,        m6
8707    pmulhrsw      m5,    m7
8708    packuswb      m3,    m5
8709    movu          [r0 + 342 * 16],  m3
8710    pmaddubsw     m3,    m1,        m6
8711    pmulhrsw      m3,    m7
8712    pmaddubsw     m5,    m4,        m6
8713    pmulhrsw      m5,    m7
8714    packuswb      m3,    m5
8715    movu          [r0 + 343 * 16],  m3
8716
8717    ; mode 8 [row 19]
8718    movu          m6,    [r5 + 4 * 16]
8719    pmaddubsw     m3,    m0,        m6
8720    pmulhrsw      m3,    m7
8721    pmaddubsw     m5,    m2,        m6
8722    pmulhrsw      m5,    m7
8723    packuswb      m3,    m5
8724    movu          [r0 + 422 * 16],  m3
8725    pmaddubsw     m3,    m1,        m6
8726    pmulhrsw      m3,    m7
8727    pmaddubsw     m5,    m4,        m6
8728    pmulhrsw      m5,    m7
8729    packuswb      m3,    m5
8730    movu          [r0 + 423 * 16],  m3
8731
8732    ; mode 8 [row 21]
8733    movu          m6,    [r5 + 14 * 16]
8734    pmaddubsw     m3,    m0,        m6
8735    pmulhrsw      m3,    m7
8736    pmaddubsw     m5,    m2,        m6
8737    pmulhrsw      m5,    m7
8738    packuswb      m3,    m5
8739    movu          [r0 + 426 * 16],  m3
8740    pmaddubsw     m3,    m1,        m6
8741    pmulhrsw      m3,    m7
8742    pmaddubsw     m5,    m4,        m6
8743    pmulhrsw      m5,    m7
8744    packuswb      m3,    m5
8745    movu          [r0 + 427 * 16],  m3
8746
8747    ; mode 8 [row 22]
8748    movu          m6,    [r5 + 19 * 16]
8749    pmaddubsw     m3,    m0,        m6
8750    pmulhrsw      m3,    m7
8751    pmaddubsw     m5,    m2,        m6
8752    pmulhrsw      m5,    m7
8753    packuswb      m3,    m5
8754    movu          [r0 + 428 * 16],  m3
8755    pmaddubsw     m3,    m1,        m6
8756    pmulhrsw      m3,    m7
8757    pmaddubsw     m5,    m4,        m6
8758    pmulhrsw      m5,    m7
8759    packuswb      m3,    m5
8760    movu          [r0 + 429 * 16],  m3
8761
8762    ; mode 8 [row 23]
8763    movu          m6,    [r5 + 24 * 16]
8764    pmaddubsw     m3,    m0,        m6
8765    pmulhrsw      m3,    m7
8766    pmaddubsw     m5,    m2,        m6
8767    pmulhrsw      m5,    m7
8768    packuswb      m3,    m5
8769    movu          [r0 + 430 * 16],  m3
8770    pmaddubsw     m3,    m1,        m6
8771    pmulhrsw      m3,    m7
8772    pmaddubsw     m5,    m4,        m6
8773    pmulhrsw      m5,    m7
8774    packuswb      m3,    m5
8775    movu          [r0 + 431 * 16],  m3
8776
8777    ; mode 8 [row 24]
8778    movu          m6,    [r5 + 29 * 16]
8779    pmaddubsw     m3,    m0,        m6
8780    pmulhrsw      m3,    m7
8781    pmaddubsw     m5,    m2,        m6
8782    pmulhrsw      m5,    m7
8783    packuswb      m3,    m5
8784    movu          [r0 + 432 * 16],  m3
8785    pmaddubsw     m3,    m1,        m6
8786    pmulhrsw      m3,    m7
8787    pmaddubsw     m5,    m4,        m6
8788    pmulhrsw      m5,    m7
8789    packuswb      m3,    m5
8790    movu          [r0 + 433 * 16],  m3
8791
8792    ; mode 3 [row 4]
8793    movu          m6,    [r5 + 2 * 16]
8794    movu          m0,    [r4 + 5]
8795    movd          m1,    [r4 + 6]
8796    palignr       m1,    m0,        1
8797    punpcklbw     m0,    m1
8798    pmaddubsw     m1,    m0,        m6
8799    pmulhrsw      m1,    m7
8800    movu          m2,    [r4 + 13]
8801    movd          m3,    [r4 + 14]
8802    palignr       m3,    m2,        1
8803    punpcklbw     m2,    m3
8804    pmaddubsw     m3,    m2,        m6
8805    pmulhrsw      m3,    m7
8806    packuswb      m1,               m3
8807    movu          [r0 + 72 * 16],   m1
8808
8809    ; mode 3 [row 4 - first half]
8810    movu          [r0 + 274 * 16],  m1
8811
8812    ; mode 8 [row 25 - first half]
8813    movu          [r0 + 434 * 16],  m1
8814
8815    movu          m1,    [r4 + 21]
8816    movd          m3,    [r4 + 22]
8817    palignr       m3,    m1,        1
8818    punpcklbw     m1,    m3
8819    pmaddubsw     m3,    m1,        m6
8820    pmulhrsw      m3,    m7
8821    movu          m4,    [r4 + 29]
8822    movd          m5,    [r4 + 30]
8823    palignr       m5,    m4,        1
8824    punpcklbw     m4,    m5
8825    pmaddubsw     m5,    m4,        m6
8826    pmulhrsw      m5,    m7
8827    packuswb      m3,               m5
8828    movu          [r0 + 73 * 16],   m3
8829
8830    ; mode 3 [row 4 - second half]
8831    movu          [r0 + 275 * 16],  m3
8832
8833    ; mode 8 [row 25 - second half]
8834    movu          [r0 + 435 * 16],  m3
8835
8836    ; mode 3 [row 5]
8837    movu          m6,    [r5 + 28 * 16]
8838    pmaddubsw     m3,    m0,        m6
8839    pmulhrsw      m3,    m7
8840    pmaddubsw     m5,    m2,        m6
8841    pmulhrsw      m5,    m7
8842    packuswb      m3,               m5
8843    movu          [r0 + 74 * 16],   m3
8844
8845    ; mode 3 [row 5 - first half]
8846    movu          [r0 + 278 * 16],  m3
8847
8848    pmaddubsw     m3,    m1,        m6
8849    pmulhrsw      m3,    m7
8850    pmaddubsw     m5,    m4,        m6
8851    pmulhrsw      m5,    m7
8852    packuswb      m3,               m5
8853    movu          [r0 + 75 * 16],   m3
8854
8855    ; mode 3 [row 5 - second half]
8856    movu          [r0 + 279 * 16],  m3
8857
8858    ; mode 4 [row 6]
8859    movu          m6,    [r5 + 19 * 16]
8860    pmaddubsw     m3,    m0,        m6
8861    pmulhrsw      m3,    m7
8862    pmaddubsw     m5,    m2,        m6
8863    pmulhrsw      m5,    m7
8864    packuswb      m3,    m5
8865    movu          [r0 + 140 * 16],  m3
8866    pmaddubsw     m3,    m1,        m6
8867    pmulhrsw      m3,    m7
8868    pmaddubsw     m5,    m4,        m6
8869    pmulhrsw      m5,    m7
8870    packuswb      m3,    m5
8871    movu          [r0 + 141 * 16],  m3
8872
8873    ; mode 5 [row 7]
8874    movu          m6,    [r5 + 8 * 16]
8875    pmaddubsw     m3,    m0,        m6
8876    pmulhrsw      m3,    m7
8877    pmaddubsw     m5,    m2,        m6
8878    pmulhrsw      m5,    m7
8879    packuswb      m3,    m5
8880    movu          [r0 + 206 * 16],  m3
8881    pmaddubsw     m3,    m1,        m6
8882    pmulhrsw      m3,    m7
8883    pmaddubsw     m5,    m4,        m6
8884    pmulhrsw      m5,    m7
8885    packuswb      m3,    m5
8886    movu          [r0 + 207 * 16],  m3
8887
8888    ; mode 5 [row 8]
8889    movu          m6,    [r5 + 25 * 16]
8890    pmaddubsw     m3,    m0,        m6
8891    pmulhrsw      m3,    m7
8892    pmaddubsw     m5,    m2,        m6
8893    pmulhrsw      m5,    m7
8894    packuswb      m3,    m5
8895    movu          [r0 + 208 * 16],  m3
8896
8897    ; mode 7 [row 16 - first half]
8898    movu          [r0 + 352 * 16],  m3
8899
8900    pmaddubsw     m3,    m1,        m6
8901    pmulhrsw      m3,    m7
8902    pmaddubsw     m5,    m4,        m6
8903    pmulhrsw      m5,    m7
8904    packuswb      m3,    m5
8905    movu          [r0 + 209 * 16],  m3
8906
8907    ; mode 7 [row 16 - second half]
8908    movu          [r0 + 353 * 16],  m3
8909
8910    ; mode 6 [row 10]
8911    movu          m6,    [r5 + 15 * 16]
8912    pmaddubsw     m3,    m0,        m6
8913    pmulhrsw      m3,    m7
8914    pmaddubsw     m5,    m2,        m6
8915    pmulhrsw      m5,    m7
8916    packuswb      m3,    m5
8917    movu          [r0 + 276 * 16],  m3
8918    pmaddubsw     m3,    m1,        m6
8919    pmulhrsw      m3,    m7
8920    pmaddubsw     m5,    m4,        m6
8921    pmulhrsw      m5,    m7
8922    packuswb      m3,    m5
8923    movu          [r0 + 277 * 16],  m3
8924
8925    ; mode 7 [row 14]
8926    movu          m6,    [r5 + 7 * 16]
8927    pmaddubsw     m3,    m0,        m6
8928    pmulhrsw      m3,    m7
8929    pmaddubsw     m5,    m2,        m6
8930    pmulhrsw      m5,    m7
8931    packuswb      m3,    m5
8932    movu          [r0 + 348 * 16],  m3
8933
8934    ; mode 8 [row 26 - first half]
8935    movu          [r0 + 436 * 16],  m3
8936
8937    pmaddubsw     m3,    m1,        m6
8938    pmulhrsw      m3,    m7
8939    pmaddubsw     m5,    m4,        m6
8940    pmulhrsw      m5,    m7
8941    packuswb      m3,    m5
8942    movu          [r0 + 349 * 16],  m3
8943
8944    ; mode 8 [row 26 - second half]
8945    movu          [r0 + 437 * 16],  m3
8946
8947    ; mode 7 [row 15]
8948    movu          m6,    [r5 + 16 * 16]
8949    pmaddubsw     m3,    m0,        m6
8950    pmulhrsw      m3,    m7
8951    pmaddubsw     m5,    m2,        m6
8952    pmulhrsw      m5,    m7
8953    packuswb      m3,    m5
8954    movu          [r0 + 350 * 16],  m3
8955    pmaddubsw     m3,    m1,        m6
8956    pmulhrsw      m3,    m7
8957    pmaddubsw     m5,    m4,        m6
8958    pmulhrsw      m5,    m7
8959    packuswb      m3,    m5
8960    movu          [r0 + 351 * 16],  m3
8961
8962    ; mode 8 [row 27]
8963    movu          m6,    [r5 + 12 * 16]
8964    pmaddubsw     m3,    m0,        m6
8965    pmulhrsw      m3,    m7
8966    pmaddubsw     m5,    m2,        m6
8967    pmulhrsw      m5,    m7
8968    packuswb      m3,    m5
8969    movu          [r0 + 438 * 16],  m3
8970    pmaddubsw     m3,    m1,        m6
8971    pmulhrsw      m3,    m7
8972    pmaddubsw     m5,    m4,        m6
8973    pmulhrsw      m5,    m7
8974    packuswb      m3,    m5
8975    movu          [r0 + 439 * 16],  m3
8976
8977    ; mode 8 [row 28]
8978    movu          m6,    [r5 + 17 * 16]
8979    pmaddubsw     m3,    m0,        m6
8980    pmulhrsw      m3,    m7
8981    pmaddubsw     m5,    m2,        m6
8982    pmulhrsw      m5,    m7
8983    packuswb      m3,    m5
8984    movu          [r0 + 440 * 16],  m3
8985    pmaddubsw     m3,    m1,        m6
8986    pmulhrsw      m3,    m7
8987    pmaddubsw     m5,    m4,        m6
8988    pmulhrsw      m5,    m7
8989    packuswb      m3,    m5
8990    movu          [r0 + 441 * 16],  m3
8991
8992    ; mode 8 [row 29]
8993    movu          m6,    [r5 + 22 * 16]
8994    pmaddubsw     m3,    m0,        m6
8995    pmulhrsw      m3,    m7
8996    pmaddubsw     m5,    m2,        m6
8997    pmulhrsw      m5,    m7
8998    packuswb      m3,    m5
8999    movu          [r0 + 442 * 16],  m3
9000    pmaddubsw     m3,    m1,        m6
9001    pmulhrsw      m3,    m7
9002    pmaddubsw     m5,    m4,        m6
9003    pmulhrsw      m5,    m7
9004    packuswb      m3,    m5
9005    movu          [r0 + 443 * 16],  m3
9006
9007    ; mode 8 [row 30]
9008    movu          m6,    [r5 + 27 * 16]
9009    pmaddubsw     m3,    m0,        m6
9010    pmulhrsw      m3,    m7
9011    pmaddubsw     m5,    m2,        m6
9012    pmulhrsw      m5,    m7
9013    packuswb      m3,    m5
9014    movu          [r0 + 444 * 16],  m3
9015    pmaddubsw     m3,    m1,        m6
9016    pmulhrsw      m3,    m7
9017    pmaddubsw     m5,    m4,        m6
9018    pmulhrsw      m5,    m7
9019    packuswb      m3,    m5
9020    movu          [r0 + 445 * 16],  m3
9021
9022    ; mode 3 [row 6]
9023    movu          m6,    [r5 + 22 * 16]
9024    movu          m0,    [r4 + 6]
9025    movd          m1,    [r4 + 7]
9026    palignr       m1,    m0,        1
9027    punpcklbw     m0,    m1
9028    pmaddubsw     m1,    m0,        m6
9029    pmulhrsw      m1,    m7
9030    movu          m2,    [r4 + 14]
9031    movd          m3,    [r4 + 15]
9032    palignr       m3,    m2,        1
9033    punpcklbw     m2,    m3
9034    pmaddubsw     m3,    m2,        m6
9035    pmulhrsw      m3,    m7
9036    packuswb      m1,               m3
9037    movu          [r0 + 76 * 16],   m1
9038
9039    ; mode 6 [row 13 - first half]
9040    movu          [r0 + 282 * 16],  m1
9041
9042    movu          m1,    [r4 + 22]
9043    movd          m3,    [r4 + 23]
9044    palignr       m3,    m1,        1
9045    punpcklbw     m1,    m3
9046    pmaddubsw     m3,    m1,        m6
9047    pmulhrsw      m3,    m7
9048    movu          m4,    [r4 + 30]
9049    movd          m5,    [r4 + 31]
9050    palignr       m5,    m4,        1
9051    punpcklbw     m4,    m5
9052    pmaddubsw     m5,    m4,        m6
9053    pmulhrsw      m5,    m7
9054    packuswb      m3,               m5
9055    movu          [r0 + 77 * 16],   m3
9056
9057    ; mode 6 [row 13 - second half]
9058    movu          [r0 + 283 * 16],  m3
9059
9060    ; mode 4 [row 7]
9061    movu          m6,    [r5 + 8 * 16]
9062    pmaddubsw     m3,    m0,        m6
9063    pmulhrsw      m3,    m7
9064    pmaddubsw     m5,    m2,        m6
9065    pmulhrsw      m5,    m7
9066    packuswb      m3,    m5
9067    movu          [r0 + 142 * 16],  m3
9068    pmaddubsw     m3,    m1,        m6
9069    pmulhrsw      m3,    m7
9070    pmaddubsw     m5,    m4,        m6
9071    pmulhrsw      m5,    m7
9072    packuswb      m3,    m5
9073    movu          [r0 + 143 * 16],  m3
9074
9075    ; mode 4 [row 8]
9076    movu          m6,    [r5 + 29 * 16]
9077    pmaddubsw     m3,    m0,        m6
9078    pmulhrsw      m3,    m7
9079    pmaddubsw     m5,    m2,        m6
9080    pmulhrsw      m5,    m7
9081    packuswb      m3,    m5
9082    movu          [r0 + 144 * 16],  m3
9083
9084    ; mode 4 [row 8 - first half]
9085    movu          [r0 + 360 * 16],  m3
9086
9087    pmaddubsw     m3,    m1,        m6
9088    pmulhrsw      m3,    m7
9089    pmaddubsw     m5,    m4,        m6
9090    pmulhrsw      m5,    m7
9091    packuswb      m3,    m5
9092    movu          [r0 + 145 * 16],  m3
9093
9094    ; mode 4 [row 8 - second half]
9095    movu          [r0 + 361 * 16],  m3
9096
9097    ; mode 5 [row 9]
9098    movu          m6,    [r5 + 10 * 16]
9099    pmaddubsw     m3,    m0,        m6
9100    pmulhrsw      m3,    m7
9101    pmaddubsw     m5,    m2,        m6
9102    pmulhrsw      m5,    m7
9103    packuswb      m3,    m5
9104    movu          [r0 + 210 * 16],  m3
9105    pmaddubsw     m3,    m1,        m6
9106    pmulhrsw      m3,    m7
9107    pmaddubsw     m5,    m4,        m6
9108    pmulhrsw      m5,    m7
9109    packuswb      m3,    m5
9110    movu          [r0 + 211 * 16],  m3
9111
9112    ; mode 5 [row 10]
9113    movu          m6,    [r5 + 27 * 16]
9114    pmaddubsw     m3,    m0,        m6
9115    pmulhrsw      m3,    m7
9116    pmaddubsw     m5,    m2,        m6
9117    pmulhrsw      m5,    m7
9118    packuswb      m3,    m5
9119    movu          [r0 + 212 * 16],  m3
9120    pmaddubsw     m3,    m1,        m6
9121    pmulhrsw      m3,    m7
9122    pmaddubsw     m5,    m4,        m6
9123    pmulhrsw      m5,    m7
9124    packuswb      m3,    m5
9125    movu          [r0 + 213 * 16],  m3
9126
9127    ; mode 7 [row 17]
9128    movu          m6,    [r5 + 2 * 16]
9129    pmaddubsw     m3,    m0,        m6
9130    pmulhrsw      m3,    m7
9131    pmaddubsw     m5,    m2,        m6
9132    pmulhrsw      m5,    m7
9133    packuswb      m3,    m5
9134    movu          [r0 + 354 * 16],  m3
9135    pmaddubsw     m3,    m1,        m6
9136    pmulhrsw      m3,    m7
9137    pmaddubsw     m5,    m4,        m6
9138    pmulhrsw      m5,    m7
9139    packuswb      m3,    m5
9140    movu          [r0 + 355 * 16],  m3
9141
9142    ; mode 7 [row 18]
9143    movu          m6,    [r5 + 11 * 16]
9144    pmaddubsw     m3,    m0,        m6
9145    pmulhrsw      m3,    m7
9146    pmaddubsw     m5,    m2,        m6
9147    pmulhrsw      m5,    m7
9148    packuswb      m3,    m5
9149    movu          [r0 + 356 * 16],  m3
9150    pmaddubsw     m3,    m1,        m6
9151    pmulhrsw      m3,    m7
9152    pmaddubsw     m5,    m4,        m6
9153    pmulhrsw      m5,    m7
9154    packuswb      m3,    m5
9155    movu          [r0 + 357 * 16],  m3
9156
9157    ; mode 7 [row 19]
9158    movu          m6,    [r5 + 20 * 16]
9159    pmaddubsw     m3,    m0,        m6
9160    pmulhrsw      m3,    m7
9161    pmaddubsw     m5,    m2,        m6
9162    pmulhrsw      m5,    m7
9163    packuswb      m3,    m5
9164    movu          [r0 + 358 * 16],  m3
9165    pmaddubsw     m3,    m1,        m6
9166    pmulhrsw      m3,    m7
9167    pmaddubsw     m5,    m4,        m6
9168    pmulhrsw      m5,    m7
9169    packuswb      m3,    m5
9170    movu          [r0 + 359 * 16],  m3
9171
9172    ; mode 6 [row 12]
9173    movu          m6,    [r5 + 9 * 16]
9174    pmaddubsw     m3,    m0,        m6
9175    pmulhrsw      m3,    m7
9176    pmaddubsw     m5,    m2,        m6
9177    pmulhrsw      m5,    m7
9178    packuswb      m3,    m5
9179    movu          [r0 + 280 * 16],  m3
9180    pmaddubsw     m3,    m1,        m6
9181    pmulhrsw      m3,    m7
9182    pmaddubsw     m5,    m4,        m6
9183    pmulhrsw      m5,    m7
9184    packuswb      m3,    m5
9185    movu          [r0 + 281 * 16],  m3
9186
9187    ; mode 3 [row 7]
9188    movu          m6,    [r5 + 16 * 16]
9189    movu          m0,    [r4 + 7]
9190    movd          m1,    [r4 + 8]
9191    palignr       m1,    m0,        1
9192    punpcklbw     m0,    m1
9193    pmaddubsw     m1,    m0,        m6
9194    pmulhrsw      m1,    m7
9195    movu          m2,    [r4 + 15]
9196    movd          m3,    [r4 + 16]
9197    palignr       m3,    m2,        1
9198    punpcklbw     m2,    m3
9199    pmaddubsw     m3,    m2,        m6
9200    pmulhrsw      m3,    m7
9201    packuswb      m1,               m3
9202    movu          [r0 + 78 * 16],   m1
9203
9204    ; mode 6 [row 15 - first half]
9205    movu          [r0 + 286 * 16],  m1
9206
9207    movu          m1,    [r4 + 23]
9208    movd          m3,    [r4 + 24]
9209    palignr       m3,    m1,        1
9210    punpcklbw     m1,    m3
9211    pmaddubsw     m3,    m1,        m6
9212    pmulhrsw      m3,    m7
9213    movu          m4,    [r4 + 31]
9214    movd          m5,    [r4 + 32]
9215    palignr       m5,    m4,        1
9216    punpcklbw     m4,    m5
9217    pmaddubsw     m5,    m4,        m6
9218    pmulhrsw      m5,    m7
9219    packuswb      m3,    m5
9220    movu          [r0 + 79 * 16],   m3
9221
9222    ; mode 6 [row 15 - second half]
9223    movu          [r0 + 287 * 16],  m3
9224
9225    ; mode 4 [row 9]
9226    movu          m6,    [r5 + 18 * 16]
9227    pmaddubsw     m3,    m0,        m6
9228    pmulhrsw      m3,    m7
9229    pmaddubsw     m5,    m2,        m6
9230    pmulhrsw      m5,    m7
9231    packuswb      m3,    m5
9232    movu          [r0 + 146 * 16],  m3
9233    pmaddubsw     m3,    m1,        m6
9234    pmulhrsw      m3,    m7
9235    pmaddubsw     m5,    m4,        m6
9236    pmulhrsw      m5,    m7
9237    packuswb      m3,    m5
9238    movu          [r0 + 147 * 16],  m3
9239
9240    ; mode 5 [row 11]
9241    movu          m6,    [r5 + 12 * 16]
9242    pmaddubsw     m3,    m0,        m6
9243    pmulhrsw      m3,    m7
9244    pmaddubsw     m5,    m2,        m6
9245    pmulhrsw      m5,    m7
9246    packuswb      m3,    m5
9247    movu          [r0 + 214 * 16],  m3
9248    pmaddubsw     m3,    m1,        m6
9249    pmulhrsw      m3,    m7
9250    pmaddubsw     m5,    m4,        m6
9251    pmulhrsw      m5,    m7
9252    packuswb      m3,    m5
9253    movu          [r0 + 215 * 16],  m3
9254
9255    ; mode 5 [row 12]
9256    movu          m6,    [r5 + 29 * 16]
9257    pmaddubsw     m3,    m0,        m6
9258    pmulhrsw      m3,    m7
9259    pmaddubsw     m5,    m2,        m6
9260    pmulhrsw      m5,    m7
9261    packuswb      m3,    m5
9262    movu          [r0 + 216 * 16],  m3
9263
9264    ; mode 6 [row 16 - first half]
9265    movu          [r0 + 288 * 16],  m3
9266
9267    pmaddubsw     m3,    m1,        m6
9268    pmulhrsw      m3,    m7
9269    pmaddubsw     m5,    m4,        m6
9270    pmulhrsw      m5,    m7
9271    packuswb      m3,    m5
9272    movu          [r0 + 217 * 16],  m3
9273
9274    ; mode 6 [row 16 - second half]
9275    movu          [r0 + 289 * 16],  m3
9276
9277    ; mode 6 [row 14]
9278    movu          m6,    [r5 + 3 * 16]
9279    pmaddubsw     m3,    m0,        m6
9280    pmulhrsw      m3,    m7
9281    pmaddubsw     m5,    m2,        m6
9282    pmulhrsw      m5,    m7
9283    packuswb      m3,    m5
9284    movu          [r0 + 284 * 16],  m3
9285    pmaddubsw     m3,    m1,        m6
9286    pmulhrsw      m3,    m7
9287    pmaddubsw     m5,    m4,        m6
9288    pmulhrsw      m5,    m7
9289    packuswb      m3,    m5
9290    movu          [r0 + 285 * 16],  m3
9291
9292    ; mode 7 [row 21]
9293    movu          m6,    [r5 + 6 * 16]
9294    pmaddubsw     m3,    m0,        m6
9295    pmulhrsw      m3,    m7
9296    pmaddubsw     m5,    m2,        m6
9297    pmulhrsw      m5,    m7
9298    packuswb      m3,    m5
9299    movu          [r0 + 362 * 16],  m3
9300    pmaddubsw     m3,    m1,        m6
9301    pmulhrsw      m3,    m7
9302    pmaddubsw     m5,    m4,        m6
9303    pmulhrsw      m5,    m7
9304    packuswb      m3,    m5
9305    movu          [r0 + 363 * 16],  m3
9306
9307    ; mode 7 [row 22]
9308    movu          m6,    [r5 + 15 * 16]
9309    pmaddubsw     m3,    m0,        m6
9310    pmulhrsw      m3,    m7
9311    pmaddubsw     m5,    m2,        m6
9312    pmulhrsw      m5,    m7
9313    packuswb      m3,    m5
9314    movu          [r0 + 364 * 16],  m3
9315    pmaddubsw     m3,    m1,        m6
9316    pmulhrsw      m3,    m7
9317    pmaddubsw     m5,    m4,        m6
9318    pmulhrsw      m5,    m7
9319    packuswb      m3,    m5
9320    movu          [r0 + 365 * 16],  m3
9321
9322    ; mode 7 [row 23]
9323    movu          m6,    [r5 + 24 * 16]
9324    pmaddubsw     m3,    m0,        m6
9325    pmulhrsw      m3,    m7
9326    pmaddubsw     m5,    m2,        m6
9327    pmulhrsw      m5,    m7
9328    packuswb      m3,    m5
9329    movu          [r0 + 366 * 16],  m3
9330    pmaddubsw     m3,    m1,        m6
9331    pmulhrsw      m3,    m7
9332    pmaddubsw     m5,    m4,        m6
9333    pmulhrsw      m5,    m7
9334    packuswb      m3,    m5
9335    movu          [r0 + 367 * 16],  m3
9336
9337    ; mode 3 [row 8]
9338    movu          m6,    [r5 + 10 * 16]
9339    movu          m0,    [r4 + 8]
9340    movd          m1,    [r4 + 9]
9341    palignr       m1,    m0,        1
9342    punpcklbw     m0,    m1
9343    pmaddubsw     m1,    m0,        m6
9344    pmulhrsw      m1,    m7
9345    movu          m2,    [r4 + 16]
9346    movd          m3,    [r4 + 17]
9347    palignr       m3,    m2,        1
9348    punpcklbw     m2,    m3
9349    pmaddubsw     m3,    m2,        m6
9350    pmulhrsw      m3,    m7
9351    packuswb      m1,               m3
9352    movu          [r0 + 80 * 16],   m1
9353
9354    ; mode 7 [row 25 - first half]
9355    movu          [r0 + 290 * 16],  m1
9356
9357    ; mode 6 [row 17 - first half]
9358    movu          [r0 + 370 * 16],  m1
9359
9360    movu          m1,    [r4 + 24]
9361    movd          m3,    [r4 + 25]
9362    palignr       m3,    m1,        1
9363    punpcklbw     m1,    m3
9364    pmaddubsw     m3,    m1,        m6
9365    pmulhrsw      m3,    m7
9366    movu          m4,    [r4 + 32]
9367    movd          m5,    [r4 + 33]
9368    palignr       m5,    m4,        1
9369    punpcklbw     m4,    m5
9370    pmaddubsw     m5,    m4,        m6
9371    pmulhrsw      m5,    m7
9372    packuswb      m3,               m5
9373    movu          [r0 + 81 * 16],   m3
9374
9375    ; mode 7 [row 25 - second half]
9376    movu          [r0 + 291 * 16],  m3
9377
9378    ; mode 6 [row 17 - second half]
9379    movu          [r0 + 371 * 16],  m3
9380
9381    ; mode 4 [row 10]
9382    movu          m6,    [r5 + 7 * 16]
9383    pmaddubsw     m3,    m0,        m6
9384    pmulhrsw      m3,    m7
9385    pmaddubsw     m5,    m2,        m6
9386    pmulhrsw      m5,    m7
9387    packuswb      m3,    m5
9388    movu          [r0 + 148 * 16],  m3
9389    pmaddubsw     m3,    m1,        m6
9390    pmulhrsw      m3,    m7
9391    pmaddubsw     m5,    m4,        m6
9392    pmulhrsw      m5,    m7
9393    packuswb      m3,    m5
9394    movu          [r0 + 149 * 16],  m3
9395
9396    ; mode 4 [row 11]
9397    movu          m6,    [r5 + 28 * 16]
9398    pmaddubsw     m3,    m0,        m6
9399    pmulhrsw      m3,    m7
9400    pmaddubsw     m5,    m2,        m6
9401    pmulhrsw      m5,    m7
9402    packuswb      m3,    m5
9403    movu          [r0 + 150 * 16],  m3
9404
9405    ; mode 7 [row 27 - first half]
9406    movu          [r0 + 374 * 16],  m3
9407
9408    pmaddubsw     m3,    m1,        m6
9409    pmulhrsw      m3,    m7
9410    pmaddubsw     m5,    m4,        m6
9411    pmulhrsw      m5,    m7
9412    packuswb      m3,    m5
9413    movu          [r0 + 151 * 16],  m3
9414
9415    ; mode 7 [row 27 - second half]
9416    movu          [r0 + 375 * 16],  m3
9417
9418    ; mode 5 [row 13]
9419    movu          m6,    [r5 + 14 * 16]
9420    pmaddubsw     m3,    m0,        m6
9421    pmulhrsw      m3,    m7
9422    pmaddubsw     m5,    m2,        m6
9423    pmulhrsw      m5,    m7
9424    packuswb      m3,    m5
9425    movu          [r0 + 218 * 16],  m3
9426    pmaddubsw     m3,    m1,        m6
9427    pmulhrsw      m3,    m7
9428    pmaddubsw     m5,    m4,        m6
9429    pmulhrsw      m5,    m7
9430    packuswb      m3,    m5
9431    movu          [r0 + 219 * 16],  m3
9432
9433    ; mode 5 [row 14]
9434    movu          m6,    [r5 + 31 * 16]
9435    pmaddubsw     m3,    m0,        m6
9436    pmulhrsw      m3,    m7
9437    pmaddubsw     m5,    m2,        m6
9438    pmulhrsw      m5,    m7
9439    packuswb      m3,    m5
9440    movu          [r0 + 220 * 16],  m3
9441    pmaddubsw     m3,    m1,        m6
9442    pmulhrsw      m3,    m7
9443    pmaddubsw     m5,    m4,        m6
9444    pmulhrsw      m5,    m7
9445    packuswb      m3,    m5
9446    movu          [r0 + 221 * 16],  m3
9447
9448    ; mode 6 [row 18]
9449    movu          m6,    [r5 + 23 * 16]
9450    pmaddubsw     m3,    m0,        m6
9451    pmulhrsw      m3,    m7
9452    pmaddubsw     m5,    m2,        m6
9453    pmulhrsw      m5,    m7
9454    packuswb      m3,    m5
9455    movu          [r0 + 292 * 16],  m3
9456    pmaddubsw     m3,    m1,        m6
9457    pmulhrsw      m3,    m7
9458    pmaddubsw     m5,    m4,        m6
9459    pmulhrsw      m5,    m7
9460    packuswb      m3,    m5
9461    movu          [r0 + 293 * 16],  m3
9462
9463    ; mode 7 [row 24]
9464    movu          m6,    [r5 + 1 * 16]
9465    pmaddubsw     m3,    m0,        m6
9466    pmulhrsw      m3,    m7
9467    pmaddubsw     m5,    m2,        m6
9468    pmulhrsw      m5,    m7
9469    packuswb      m3,    m5
9470    movu          [r0 + 368 * 16],  m3
9471    pmaddubsw     m3,    m1,        m6
9472    pmulhrsw      m3,    m7
9473    pmaddubsw     m5,    m4,        m6
9474    pmulhrsw      m5,    m7
9475    packuswb      m3,    m5
9476    movu          [r0 + 369 * 16],  m3
9477
9478    ; mode 7 [row 26]
9479    movu          m6,    [r5 + 19 * 16]
9480    pmaddubsw     m3,    m0,        m6
9481    pmulhrsw      m3,    m7
9482    pmaddubsw     m5,    m2,        m6
9483    pmulhrsw      m5,    m7
9484    packuswb      m3,    m5
9485    movu          [r0 + 372 * 16],  m3
9486    pmaddubsw     m3,    m1,        m6
9487    pmulhrsw      m3,    m7
9488    pmaddubsw     m5,    m4,        m6
9489    pmulhrsw      m5,    m7
9490    packuswb      m3,    m5
9491    movu          [r0 + 373 * 16],  m3
9492
9493    ; mode 3 [row 9]
9494    movu          m6,    [r5 + 4 * 16]
9495    movu          m0,    [r4 + 9]
9496    movd          m1,    [r4 + 10]
9497    palignr       m1,    m0,        1
9498    punpcklbw     m0,    m1
9499    pmaddubsw     m1,    m0,        m6
9500    pmulhrsw      m1,    m7
9501    movu          m2,    [r4 + 17]
9502    movd          m3,    [r4 + 18]
9503    palignr       m3,    m2,        1
9504    punpcklbw     m2,    m3
9505    pmaddubsw     m3,    m2,        m6
9506    pmulhrsw      m3,    m7
9507    packuswb      m1,               m3
9508    movu          [r0 + 82 * 16],   m1
9509
9510    ; mode 6 [row 19 - first half]
9511    movu          [r0 + 294 * 16],  m1
9512
9513    movu          m1,    [r4 + 25]
9514    movd          m3,    [r4 + 26]
9515    palignr       m3,    m1,        1
9516    punpcklbw     m1,    m3
9517    pmaddubsw     m3,    m1,        m6
9518    pmulhrsw      m3,    m7
9519    movu          m4,    [r4 + 33]
9520    movd          m5,    [r4 + 34]
9521    palignr       m5,    m4,        1
9522    punpcklbw     m4,    m5
9523    pmaddubsw     m5,    m4,        m6
9524    pmulhrsw      m5,    m7
9525    packuswb      m3,               m5
9526    movu          [r0 + 83 * 16],   m3
9527
9528    ; mode 6 [row 19 - second half]
9529    movu          [r0 + 295 * 16],  m3
9530
9531    ; mode 4 [row 12]
9532    movu          m6,    [r5 + 17 * 16]
9533    pmaddubsw     m3,    m0,        m6
9534    pmulhrsw      m3,    m7
9535    pmaddubsw     m5,    m2,        m6
9536    pmulhrsw      m5,    m7
9537    packuswb      m3,    m5
9538    movu          [r0 + 152 * 16],  m3
9539
9540    ; mode 4 [row 12 - first half]
9541    movu          [r0 + 296 * 16],  m3
9542
9543    pmaddubsw     m3,    m1,        m6
9544    pmulhrsw      m3,    m7
9545    pmaddubsw     m5,    m4,        m6
9546    pmulhrsw      m5,    m7
9547    packuswb      m3,    m5
9548    movu          [r0 + 153 * 16],  m3
9549
9550    ; mode 4 [row 12 - second half]
9551    movu          [r0 + 297 * 16],  m3
9552
9553    ; mode 3 [row 10]
9554    movu          m6,    [r5 + 30 * 16]
9555    pmaddubsw     m3,    m0,        m6
9556    pmulhrsw      m3,    m7
9557    pmaddubsw     m5,    m2,        m6
9558    pmulhrsw      m5,    m7
9559    packuswb      m3,    m5
9560    movu          [r0 + 84 * 16],   m3
9561
9562    ; mode 6 [row 21 - first half]
9563    movu          [r0 + 298 * 16],  m3
9564
9565    pmaddubsw     m3,    m1,        m6
9566    pmulhrsw      m3,    m7
9567    pmaddubsw     m5,    m4,        m6
9568    pmulhrsw      m5,    m7
9569    packuswb      m3,               m5
9570    movu          [r0 + 85 * 16],   m3
9571
9572    ; mode 6 [row 21 - second half]
9573    movu          [r0 + 299 * 16],  m3
9574
9575    ; mode 5 [row 15]
9576    movu          m6,    [r5 + 16 * 16]
9577    pmaddubsw     m3,    m0,        m6
9578    pmulhrsw      m3,    m7
9579    pmaddubsw     m5,    m2,        m6
9580    pmulhrsw      m5,    m7
9581    packuswb      m3,    m5
9582    movu          [r0 + 222 * 16],  m3
9583    pmaddubsw     m3,    m1,        m6
9584    pmulhrsw      m3,    m7
9585    pmaddubsw     m5,    m4,        m6
9586    pmulhrsw      m5,    m7
9587    packuswb      m3,    m5
9588    movu          [r0 + 223 * 16],  m3
9589
9590    ; mode 7 [row 28]
9591    movu          m6,    [r5 + 5 * 16]
9592    pmaddubsw     m3,    m0,        m6
9593    pmulhrsw      m3,    m7
9594    pmaddubsw     m5,    m2,        m6
9595    pmulhrsw      m5,    m7
9596    packuswb      m3,    m5
9597    movu          [r0 + 376 * 16],  m3
9598    pmaddubsw     m3,    m1,        m6
9599    pmulhrsw      m3,    m7
9600    pmaddubsw     m5,    m4,        m6
9601    pmulhrsw      m5,    m7
9602    packuswb      m3,    m5
9603    movu          [r0 + 377 * 16],  m3
9604
9605    ; mode 7 [row 29]
9606    movu          m6,    [r5 + 14 * 16]
9607    pmaddubsw     m3,    m0,        m6
9608    pmulhrsw      m3,    m7
9609    pmaddubsw     m5,    m2,        m6
9610    pmulhrsw      m5,    m7
9611    packuswb      m3,    m5
9612    movu          [r0 + 378 * 16],  m3
9613    pmaddubsw     m3,    m1,        m6
9614    pmulhrsw      m3,    m7
9615    pmaddubsw     m5,    m4,        m6
9616    pmulhrsw      m5,    m7
9617    packuswb      m3,    m5
9618    movu          [r0 + 379 * 16],  m3
9619
9620    ; mode 7 [row 30]
9621    movu          m6,    [r5 + 23 * 16]
9622    pmaddubsw     m3,    m0,        m6
9623    pmulhrsw      m3,    m7
9624    pmaddubsw     m5,    m2,        m6
9625    pmulhrsw      m5,    m7
9626    packuswb      m3,    m5
9627    movu          [r0 + 380 * 16],  m3
9628    pmaddubsw     m3,    m1,        m6
9629    pmulhrsw      m3,    m7
9630    pmaddubsw     m5,    m4,        m6
9631    pmulhrsw      m5,    m7
9632    packuswb      m3,    m5
9633    movu          [r0 + 381 * 16],  m3
9634
9635    ; mode 3 [row 11]
9636    movu          m6,    [r5 + 24 * 16]
9637    movu          m0,    [r4 + 10]
9638    movd          m1,    [r4 + 11]
9639    palignr       m1,    m0,        1
9640    punpcklbw     m0,    m1
9641    pmaddubsw     m1,    m0,        m6
9642    pmulhrsw      m1,    m7
9643    movu          m2,    [r4 + 18]
9644    movd          m3,    [r4 + 19]
9645    palignr       m3,    m2,        1
9646    punpcklbw     m2,    m3
9647    pmaddubsw     m3,    m2,        m6
9648    pmulhrsw      m3,    m7
9649    packuswb      m1,               m3
9650    movu          [r0 + 86 * 16],   m1
9651
9652    ; mode 6 [row 23 - first half]
9653    movu          [r0 + 302 * 16],  m1
9654
9655    movu          m1,    [r4 + 26]
9656    movd          m3,    [r4 + 27]
9657    palignr       m3,    m1,        1
9658    punpcklbw     m1,    m3
9659    pmaddubsw     m3,    m1,        m6
9660    pmulhrsw      m3,    m7
9661    movu          m4,    [r4 + 34]
9662    movd          m5,    [r4 + 35]
9663    palignr       m5,    m4,        1
9664    punpcklbw     m4,    m5
9665    pmaddubsw     m5,    m4,        m6
9666    pmulhrsw      m5,    m7
9667    packuswb      m3,               m5
9668    movu          [r0 + 87 * 16],   m3
9669
9670    ; mode 6 [row 23 - second half]
9671    movu          [r0 + 303 * 16],  m3
9672
9673    ; mode 4 [row 13]
9674    movu          m6,    [r5 + 6 * 16]
9675    pmaddubsw     m3,    m0,        m6
9676    pmulhrsw      m3,    m7
9677    pmaddubsw     m5,    m2,        m6
9678    pmulhrsw      m5,    m7
9679    packuswb      m3,    m5
9680    movu          [r0 + 154 * 16],  m3
9681    pmaddubsw     m3,    m1,        m6
9682    pmulhrsw      m3,    m7
9683    pmaddubsw     m5,    m4,        m6
9684    pmulhrsw      m5,    m7
9685    packuswb      m3,    m5
9686    movu          [r0 + 155 * 16],  m3
9687
9688    ; mode 4 [row 14]
9689    movu          m6,    [r5 + 27 * 16]
9690    pmaddubsw     m3,    m0,        m6
9691    pmulhrsw      m3,    m7
9692    pmaddubsw     m5,    m2,        m6
9693    pmulhrsw      m5,    m7
9694    packuswb      m3,    m5
9695    movu          [r0 + 156 * 16],  m3
9696    pmaddubsw     m3,    m1,        m6
9697    pmulhrsw      m3,    m7
9698    pmaddubsw     m5,    m4,        m6
9699    pmulhrsw      m5,    m7
9700    packuswb      m3,    m5
9701    movu          [r0 + 157 * 16],  m3
9702
9703    ; mode 5 [row 16]
9704    movu          m6,    [r5 + 1 * 16]
9705    pmaddubsw     m3,    m0,        m6
9706    pmulhrsw      m3,    m7
9707    pmaddubsw     m5,    m2,        m6
9708    pmulhrsw      m5,    m7
9709    packuswb      m3,    m5
9710    movu          [r0 + 224 * 16],  m3
9711    pmaddubsw     m3,    m1,        m6
9712    pmulhrsw      m3,    m7
9713    pmaddubsw     m5,    m4,        m6
9714    pmulhrsw      m5,    m7
9715    packuswb      m3,    m5
9716    movu          [r0 + 225 * 16],  m3
9717
9718    ; mode 5 [row 17]
9719    movu          m6,    [r5 + 18 * 16]
9720    pmaddubsw     m3,    m0,        m6
9721    pmulhrsw      m3,    m7
9722    pmaddubsw     m5,    m2,        m6
9723    pmulhrsw      m5,    m7
9724    packuswb      m3,    m5
9725    movu          [r0 + 226 * 16],  m3
9726    pmaddubsw     m3,    m1,        m6
9727    pmulhrsw      m3,    m7
9728    pmaddubsw     m5,    m4,        m6
9729    pmulhrsw      m5,    m7
9730    packuswb      m3,    m5
9731    movu          [r0 + 227 * 16],  m3
9732
9733    ; mode 6 [row 22]
9734    movu          m6,    [r5 + 11 * 16]
9735    pmaddubsw     m3,    m0,        m6
9736    pmulhrsw      m3,    m7
9737    pmaddubsw     m5,    m2,        m6
9738    pmulhrsw      m5,    m7
9739    packuswb      m3,    m5
9740    movu          [r0 + 300 * 16],  m3
9741    pmaddubsw     m3,    m1,        m6
9742    pmulhrsw      m3,    m7
9743    pmaddubsw     m5,    m4,        m6
9744    pmulhrsw      m5,    m7
9745    packuswb      m3,    m5
9746    movu          [r0 + 301 * 16],  m3
9747
9748    ; mode 3 [row 12]
9749    movu          m6,    [r5 + 18 * 16]
9750    movu          m0,    [r4 + 11]
9751    movd          m1,    [r4 + 12]
9752    palignr       m1,    m0,        1
9753    punpcklbw     m0,    m1
9754    pmaddubsw     m1,    m0,        m6
9755    pmulhrsw      m1,    m7
9756    movu          m2,    [r4 + 19]
9757    movd          m3,    [r4 + 20]
9758    palignr       m3,    m2,        1
9759    punpcklbw     m2,    m3
9760    pmaddubsw     m3,    m2,        m6
9761    pmulhrsw      m3,    m7
9762    packuswb      m1,               m3
9763    movu          [r0 + 88 * 16],   m1
9764
9765    ; mode 6 [row 25 - first half]
9766    movu          [r0 + 306 * 16],  m1
9767
9768    movu          m1,    [r4 + 27]
9769    movd          m3,    [r4 + 28]
9770    palignr       m3,    m1,        1
9771    punpcklbw     m1,    m3
9772    pmaddubsw     m3,    m1,        m6
9773    pmulhrsw      m3,    m7
9774    movu          m4,    [r4 + 35]
9775    movd          m5,    [r4 + 36]
9776    palignr       m5,    m4,        1
9777    punpcklbw     m4,    m5
9778    pmaddubsw     m5,    m4,        m6
9779    pmulhrsw      m5,    m7
9780    packuswb      m3,               m5
9781    movu          [r0 + 89 * 16],   m3
9782
9783    ; mode 6 [row 25 - second half]
9784    movu          [r0 + 307 * 16],  m3
9785
9786    ; mode 4 [row 15]
9787    movu          m6,    [r5 + 16 * 16]
9788    pmaddubsw     m3,    m0,        m6
9789    pmulhrsw      m3,    m7
9790    pmaddubsw     m5,    m2,        m6
9791    pmulhrsw      m5,    m7
9792    packuswb      m3,    m5
9793    movu          [r0 + 158 * 16],  m3
9794    pmaddubsw     m3,    m1,        m6
9795    pmulhrsw      m3,    m7
9796    pmaddubsw     m5,    m4,        m6
9797    pmulhrsw      m5,    m7
9798    packuswb      m3,    m5
9799    movu          [r0 + 159 * 16],   m3
9800
9801    ; mode 5 [row 18]
9802    movu          m6,    [r5 + 3 * 16]
9803    pmaddubsw     m3,    m0,        m6
9804    pmulhrsw      m3,    m7
9805    pmaddubsw     m5,    m2,        m6
9806    pmulhrsw      m5,    m7
9807    packuswb      m3,    m5
9808    movu          [r0 + 228 * 16],  m3
9809    pmaddubsw     m3,    m1,        m6
9810    pmulhrsw      m3,    m7
9811    pmaddubsw     m5,    m4,        m6
9812    pmulhrsw      m5,    m7
9813    packuswb      m3,    m5
9814    movu          [r0 + 229 * 16],  m3
9815
9816    ; mode 5 [row 19]
9817    movu          m6,    [r5 + 20 * 16]
9818    pmaddubsw     m3,    m0,        m6
9819    pmulhrsw      m3,    m7
9820    pmaddubsw     m5,    m2,        m6
9821    pmulhrsw      m5,    m7
9822    packuswb      m3,    m5
9823    movu          [r0 + 230 * 16],  m3
9824    pmaddubsw     m3,    m1,        m6
9825    pmulhrsw      m3,    m7
9826    pmaddubsw     m5,    m4,        m6
9827    pmulhrsw      m5,    m7
9828    packuswb      m3,    m5
9829    movu          [r0 + 231 * 16],  m3
9830
9831    ; mode 6 [row 24]
9832    movu          m6,    [r5 + 5 * 16]
9833    pmaddubsw     m3,    m0,        m6
9834    pmulhrsw      m3,    m7
9835    pmaddubsw     m5,    m2,        m6
9836    pmulhrsw      m5,    m7
9837    packuswb      m3,    m5
9838    movu          [r0 + 304 * 16],  m3
9839    pmaddubsw     m3,    m1,        m6
9840    pmulhrsw      m3,    m7
9841    pmaddubsw     m5,    m4,        m6
9842    pmulhrsw      m5,    m7
9843    packuswb      m3,    m5
9844    movu          [r0 + 305 * 16],  m3
9845
9846    ; mode 6 [row 26]
9847    movu          m6,    [r5 + 31 * 16]
9848    pmaddubsw     m3,    m0,        m6
9849    pmulhrsw      m3,    m7
9850    pmaddubsw     m5,    m2,        m6
9851    pmulhrsw      m5,    m7
9852    packuswb      m3,    m5
9853    movu          [r0 + 308 * 16],  m3
9854    pmaddubsw     m3,    m1,        m6
9855    pmulhrsw      m3,    m7
9856    pmaddubsw     m5,    m4,        m6
9857    pmulhrsw      m5,    m7
9858    packuswb      m3,    m5
9859    movu          [r0 + 309 * 16],  m3
9860
9861    ; mode 3 [row 13]
9862    movu          m6,    [r5 + 12 * 16]
9863    movu          m0,    [r4 + 12]
9864    movd          m1,    [r4 + 13]
9865    palignr       m1,    m0,        1
9866    punpcklbw     m0,    m1
9867    pmaddubsw     m1,    m0,        m6
9868    pmulhrsw      m1,    m7
9869    movu          m2,    [r4 + 20]
9870    movd          m3,    [r4 + 21]
9871    palignr       m3,    m2,        1
9872    punpcklbw     m2,    m3
9873    pmaddubsw     m3,    m2,        m6
9874    pmulhrsw      m3,    m7
9875    packuswb      m1,               m3
9876    movu          [r0 + 90 * 16],   m1
9877
9878    movu          m1,    [r4 + 28]
9879    movd          m3,    [r4 + 29]
9880    palignr       m3,    m1,        1
9881    punpcklbw     m1,    m3
9882    pmaddubsw     m3,    m1,        m6
9883    pmulhrsw      m3,    m7
9884    movu          m4,    [r4 + 36]
9885    movd          m5,    [r4 + 37]
9886    palignr       m5,    m4,        1
9887    punpcklbw     m4,    m5
9888    pmaddubsw     m5,    m4,        m6
9889    pmulhrsw      m5,    m7
9890    packuswb      m3,               m5
9891    movu          [r0 + 91 * 16],   m3
9892
9893    ; mode 4 [row 16]
9894    movu          m6,    [r5 + 5 * 16]
9895    pmaddubsw     m3,    m0,        m6
9896    pmulhrsw      m3,    m7
9897    pmaddubsw     m5,    m2,        m6
9898    pmulhrsw      m5,    m7
9899    packuswb      m3,    m5
9900    movu          [r0 + 160 * 16],  m3
9901
9902    ; mode 5 [row 20 - first half]
9903    movu          [r0 + 232 * 16],  m3
9904
9905    pmaddubsw     m3,    m1,        m6
9906    pmulhrsw      m3,    m7
9907    pmaddubsw     m5,    m4,        m6
9908    pmulhrsw      m5,    m7
9909    packuswb      m3,    m5
9910    movu          [r0 + 161 * 16],  m3
9911
9912    ; mode 5 [row 20 - second half]
9913    movu          [r0 + 233 * 16],  m3
9914
9915    ; mode 4 [row 17]
9916    movu          m6,    [r5 + 26 * 16]
9917    pmaddubsw     m3,    m0,        m6
9918    pmulhrsw      m3,    m7
9919    pmaddubsw     m5,    m2,        m6
9920    pmulhrsw      m5,    m7
9921    packuswb      m3,    m5
9922    movu          [r0 + 162 * 16],  m3
9923    pmaddubsw     m3,    m1,        m6
9924    pmulhrsw      m3,    m7
9925    pmaddubsw     m5,    m4,        m6
9926    pmulhrsw      m5,    m7
9927    packuswb      m3,    m5
9928    movu          [r0 + 163 * 16],  m3
9929
9930    ; mode 5 [row 21]
9931    movu          m6,    [r5 + 22 * 16]
9932    pmaddubsw     m3,    m0,        m6
9933    pmulhrsw      m3,    m7
9934    pmaddubsw     m5,    m2,        m6
9935    pmulhrsw      m5,    m7
9936    packuswb      m3,    m5
9937    movu          [r0 + 234 * 16],  m3
9938    pmaddubsw     m3,    m1,        m6
9939    pmulhrsw      m3,    m7
9940    pmaddubsw     m5,    m4,        m6
9941    pmulhrsw      m5,    m7
9942    packuswb      m3,    m5
9943    movu          [r0 + 235 * 16],  m3
9944
9945    ; mode 6 [row 27]
9946    movu          m6,    [r5 + 12 * 16]
9947    pmaddubsw     m3,    m0,        m6
9948    pmulhrsw      m3,    m7
9949    pmaddubsw     m5,    m2,        m6
9950    pmulhrsw      m5,    m7
9951    packuswb      m3,    m5
9952    movu          [r0 + 310 * 16],  m3
9953    pmaddubsw     m3,    m1,        m6
9954    pmulhrsw      m3,    m7
9955    pmaddubsw     m5,    m4,        m6
9956    pmulhrsw      m5,    m7
9957    packuswb      m3,    m5
9958    movu          [r0 + 311 * 16],  m3
9959
9960    ; mode 6 [row 28]
9961    movu          m6,    [r5 + 25 * 16]
9962    pmaddubsw     m3,    m0,        m6
9963    pmulhrsw      m3,    m7
9964    pmaddubsw     m5,    m2,        m6
9965    pmulhrsw      m5,    m7
9966    packuswb      m3,    m5
9967    movu          [r0 + 312 * 16],  m3
9968    pmaddubsw     m3,    m1,        m6
9969    pmulhrsw      m3,    m7
9970    pmaddubsw     m5,    m4,        m6
9971    pmulhrsw      m5,    m7
9972    packuswb      m3,    m5
9973    movu          [r0 + 313 * 16],  m3
9974
9975    ; mode 3 [row 14]
9976    movu          m6,    [r5 + 6 * 16]
9977    movu          m0,    [r4 + 13]
9978    movd          m1,    [r4 + 14]
9979    palignr       m1,    m0,        1
9980    punpcklbw     m0,    m1
9981    pmaddubsw     m1,    m0,        m6
9982    pmulhrsw      m1,    m7
9983    movu          m2,    [r4 + 21]
9984    movd          m3,    [r4 + 22]
9985    palignr       m3,    m2,        1
9986    punpcklbw     m2,    m3
9987    pmaddubsw     m3,    m2,        m6
9988    pmulhrsw      m3,    m7
9989    packuswb      m1,               m3
9990    movu          [r0 + 92 * 16],   m1
9991
9992    ; mode 6 [row 29 - first half]
9993    movu          [r0 + 314 * 16],  m1
9994
9995    movu          m1,    [r4 + 29]
9996    movd          m3,    [r4 + 30]
9997    palignr       m3,    m1,        1
9998    punpcklbw     m1,    m3
9999    pmaddubsw     m3,    m1,        m6
10000    pmulhrsw      m3,    m7
10001    movu          m4,    [r4 + 37]
10002    movd          m5,    [r4 + 38]
10003    palignr       m5,    m4,        1
10004    punpcklbw     m4,    m5
10005    pmaddubsw     m5,    m4,        m6
10006    pmulhrsw      m5,    m7
10007    packuswb      m3,               m5
10008    movu          [r0 + 93 * 16],   m3
10009
10010    ; mode 6 [row 29 - second half]
10011    movu          [r0 + 315 * 16],  m3
10012
10013    ; mode 4 [row 18]
10014    movu          m6,    [r5 + 15 * 16]
10015    pmaddubsw     m3,    m0,        m6
10016    pmulhrsw      m3,    m7
10017    pmaddubsw     m5,    m2,        m6
10018    pmulhrsw      m5,    m7
10019    packuswb      m3,    m5
10020    movu          [r0 + 164 * 16],  m3
10021    pmaddubsw     m3,    m1,        m6
10022    pmulhrsw      m3,    m7
10023    pmaddubsw     m5,    m4,        m6
10024    pmulhrsw      m5,    m7
10025    packuswb      m3,    m5
10026    movu          [r0 + 165 * 16],  m3
10027
10028    ; mode 5 [row 22]
10029    movu          m6,    [r5 + 7 * 16]
10030    pmaddubsw     m3,    m0,        m6
10031    pmulhrsw      m3,    m7
10032    pmaddubsw     m5,    m2,        m6
10033    pmulhrsw      m5,    m7
10034    packuswb      m3,    m5
10035    movu          [r0 + 236 * 16],  m3
10036    pmaddubsw     m3,    m1,        m6
10037    pmulhrsw      m3,    m7
10038    pmaddubsw     m5,    m4,        m6
10039    pmulhrsw      m5,    m7
10040    packuswb      m3,    m5
10041    movu          [r0 + 237 * 16],  m3
10042
10043    ; mode 5 [row 23]
10044    movu          m6,    [r5 + 24 * 16]
10045    pmaddubsw     m3,    m0,        m6
10046    pmulhrsw      m3,    m7
10047    pmaddubsw     m5,    m2,        m6
10048    pmulhrsw      m5,    m7
10049    packuswb      m3,    m5
10050    movu          [r0 + 238 * 16],  m3
10051    pmaddubsw     m3,    m1,        m6
10052    pmulhrsw      m3,    m7
10053    pmaddubsw     m5,    m4,        m6
10054    pmulhrsw      m5,    m7
10055    packuswb      m3,    m5
10056    movu          [r0 + 239 * 16],  m3
10057
10058    ; mode 6 [row 30]
10059    movu          m6,    [r5 + 19 * 16]
10060    pmaddubsw     m3,    m0,        m6
10061    pmulhrsw      m3,    m7
10062    pmaddubsw     m5,    m2,        m6
10063    pmulhrsw      m5,    m7
10064    packuswb      m3,    m5
10065    movu          [r0 + 316 * 16],  m3
10066    pmaddubsw     m3,    m1,        m6
10067    pmulhrsw      m3,    m7
10068    pmaddubsw     m5,    m4,        m6
10069    pmulhrsw      m5,    m7
10070    packuswb      m3,    m5
10071    movu          [r0 + 317 * 16],  m3
10072
10073    ; mode 3 [row 16]
10074    movu          m6,    [r5 + 26 * 16]
10075    movu          m0,    [r4 + 14]
10076    movd          m1,    [r4 + 15]
10077    palignr       m1,    m0,        1
10078    punpcklbw     m0,    m1
10079    pmaddubsw     m1,    m0,        m6
10080    pmulhrsw      m1,    m7
10081    movu          m2,    [r4 + 22]
10082    movd          m3,    [r4 + 23]
10083    palignr       m3,    m2,        1
10084    punpcklbw     m2,    m3
10085    pmaddubsw     m3,    m2,        m6
10086    pmulhrsw      m3,    m7
10087    packuswb      m1,               m3
10088    movu          [r0 + 96 * 16],   m1
10089
10090    ; mode 5 [row 25 - first half]
10091    movu          [r0 + 242 * 16],  m1
10092
10093    movu          m1,    [r4 + 30]
10094    movd          m3,    [r4 + 31]
10095    palignr       m3,    m1,        1
10096    punpcklbw     m1,    m3
10097    pmaddubsw     m3,    m1,        m6
10098    pmulhrsw      m3,    m7
10099    movu          m4,    [r4 + 38]
10100    movd          m5,    [r4 + 39]
10101    palignr       m5,    m4,        1
10102    punpcklbw     m4,    m5
10103    pmaddubsw     m5,    m4,        m6
10104    pmulhrsw      m5,    m7
10105    packuswb      m3,               m5
10106    movu          [r0 + 97 * 16],   m3
10107
10108    ; mode 5 [row 25 - second half]
10109    movu          [r0 + 243 * 16],  m3
10110
10111    ; mode 4 [row 19]
10112    movu          m6,    [r5 + 4 * 16]
10113    pmaddubsw     m3,    m0,        m6
10114    pmulhrsw      m3,    m7
10115    pmaddubsw     m5,    m2,        m6
10116    pmulhrsw      m5,    m7
10117    packuswb      m3,    m5
10118    movu          [r0 + 166 * 16],  m3
10119    pmaddubsw     m3,    m1,        m6
10120    pmulhrsw      m3,    m7
10121    pmaddubsw     m5,    m4,        m6
10122    pmulhrsw      m5,    m7
10123    packuswb      m3,    m5
10124    movu          [r0 + 167 * 16],  m3
10125
10126    ; mode 4 [row 20]
10127    movu          m6,    [r5 + 25 * 16]
10128    pmaddubsw     m3,    m0,        m6
10129    pmulhrsw      m3,    m7
10130    pmaddubsw     m5,    m2,        m6
10131    pmulhrsw      m5,    m7
10132    packuswb      m3,    m5
10133    movu          [r0 + 168 * 16],  m3
10134    pmaddubsw     m3,    m1,        m6
10135    pmulhrsw      m3,    m7
10136    pmaddubsw     m5,    m4,        m6
10137    pmulhrsw      m5,    m7
10138    packuswb      m3,    m5
10139    movu          [r0 + 169 * 16],  m3
10140
10141    ; mode 5 [row 24]
10142    movu          m6,    [r5 + 9 * 16]
10143    pmaddubsw     m3,    m0,        m6
10144    pmulhrsw      m3,    m7
10145    pmaddubsw     m5,    m2,        m6
10146    pmulhrsw      m5,    m7
10147    packuswb      m3,    m5
10148    movu          [r0 + 240 * 16],  m3
10149    pmaddubsw     m3,    m1,        m6
10150    pmulhrsw      m3,    m7
10151    pmaddubsw     m5,    m4,        m6
10152    pmulhrsw      m5,    m7
10153    packuswb      m3,    m5
10154    movu          [r0 + 241 * 16],  m3
10155
10156    ; mode 3 [row 17]
10157    movu          m6,    [r5 + 20 * 16]
10158    movu          m0,    [r4 + 15]
10159    movd          m1,    [r4 + 16]
10160    palignr       m1,    m0,        1
10161    punpcklbw     m0,    m1
10162    pmaddubsw     m1,    m0,        m6
10163    pmulhrsw      m1,    m7
10164    movu          m2,    [r4 + 23]
10165    movd          m3,    [r4 + 24]
10166    palignr       m3,    m2,        1
10167    punpcklbw     m2,    m3
10168    pmaddubsw     m3,    m2,        m6
10169    pmulhrsw      m3,    m7
10170    packuswb      m1,               m3
10171    movu          [r0 + 98 * 16],   m1
10172
10173    movu          m1,    [r4 + 31]
10174    movd          m3,    [r4 + 32]
10175    palignr       m3,    m1,        1
10176    punpcklbw     m1,    m3
10177    pmaddubsw     m3,    m1,        m6
10178    pmulhrsw      m3,    m7
10179    movu          m4,    [r4 + 39]
10180    movd          m5,    [r4 + 40]
10181    palignr       m5,    m4,        1
10182    punpcklbw     m4,    m5
10183    pmaddubsw     m5,    m4,        m6
10184    pmulhrsw      m5,    m7
10185    packuswb      m3,               m5
10186    movu          [r0 + 99 * 16],   m3
10187
10188    ; mode 4 [row 21]
10189    movu          m6,    [r5 + 14 * 16]
10190    pmaddubsw     m3,    m0,        m6
10191    pmulhrsw      m3,    m7
10192    pmaddubsw     m5,    m2,        m6
10193    pmulhrsw      m5,    m7
10194    packuswb      m3,    m5
10195    movu          [r0 + 170 * 16],  m3
10196    pmaddubsw     m3,    m1,        m6
10197    pmulhrsw      m3,    m7
10198    pmaddubsw     m5,    m4,        m6
10199    pmulhrsw      m5,    m7
10200    packuswb      m3,    m5
10201    movu          [r0 + 171 * 16],  m3
10202
10203    ; mode 5 [row 26]
10204    movu          m6,    [r5 + 11 * 16]
10205    pmaddubsw     m3,    m0,        m6
10206    pmulhrsw      m3,    m7
10207    pmaddubsw     m5,    m2,        m6
10208    pmulhrsw      m5,    m7
10209    packuswb      m3,    m5
10210    movu          [r0 + 244 * 16],  m3
10211    pmaddubsw     m3,    m1,        m6
10212    pmulhrsw      m3,    m7
10213    pmaddubsw     m5,    m4,        m6
10214    pmulhrsw      m5,    m7
10215    packuswb      m3,    m5
10216    movu          [r0 + 245 * 16],  m3
10217
10218    ; mode 5 [row 27]
10219    movu          m6,    [r5 + 28 * 16]
10220    pmaddubsw     m3,    m0,        m6
10221    pmulhrsw      m3,    m7
10222    pmaddubsw     m5,    m2,        m6
10223    pmulhrsw      m5,    m7
10224    packuswb      m3,    m5
10225    movu          [r0 + 246 * 16],  m3
10226    pmaddubsw     m3,    m1,        m6
10227    pmulhrsw      m3,    m7
10228    pmaddubsw     m5,    m4,        m6
10229    pmulhrsw      m5,    m7
10230    packuswb      m3,    m5
10231    movu          [r0 + 247 * 16],  m3
10232
10233    ; mode 3 [row 18]
10234    movu          m6,    [r5 + 14 * 16]
10235    movu          m0,    [r4 + 16]
10236    movd          m1,    [r4 + 17]
10237    palignr       m1,    m0,        1
10238    punpcklbw     m0,    m1
10239    pmaddubsw     m1,    m0,        m6
10240    pmulhrsw      m1,    m7
10241    movu          m2,    [r4 + 24]
10242    movd          m3,    [r4 + 25]
10243    palignr       m3,    m2,        1
10244    punpcklbw     m2,    m3
10245    pmaddubsw     m3,    m2,        m6
10246    pmulhrsw      m3,    m7
10247    packuswb      m1,               m3
10248    movu          [r0 + 100 * 16],  m1
10249
10250    movu          m1,    [r4 + 32]
10251    movd          m3,    [r4 + 33]
10252    palignr       m3,    m1,        1
10253    punpcklbw     m1,    m3
10254    pmaddubsw     m3,    m1,        m6
10255    pmulhrsw      m3,    m7
10256    movu          m4,    [r4 + 40]
10257    movd          m5,    [r4 + 41]
10258    palignr       m5,    m4,        1
10259    punpcklbw     m4,    m5
10260    pmaddubsw     m5,    m4,        m6
10261    pmulhrsw      m5,    m7
10262    packuswb      m3,               m5
10263    movu          [r0 + 101 * 16],  m3
10264
10265    ; mode 4 [row 22]
10266    movu          m6,    [r5 + 3 * 16]
10267    pmaddubsw     m3,    m0,        m6
10268    pmulhrsw      m3,    m7
10269    pmaddubsw     m5,    m2,        m6
10270    pmulhrsw      m5,    m7
10271    packuswb      m3,    m5
10272    movu          [r0 + 172 * 16],  m3
10273    pmaddubsw     m3,    m1,        m6
10274    pmulhrsw      m3,    m7
10275    pmaddubsw     m5,    m4,        m6
10276    pmulhrsw      m5,    m7
10277    packuswb      m3,    m5
10278    movu          [r0 + 173 * 16],  m3
10279
10280    ; mode 4 [row 23]
10281    movu          m6,    [r5 + 24 * 16]
10282    pmaddubsw     m3,    m0,        m6
10283    pmulhrsw      m3,    m7
10284    pmaddubsw     m5,    m2,        m6
10285    pmulhrsw      m5,    m7
10286    packuswb      m3,    m5
10287    movu          [r0 + 174 * 16],  m3
10288    pmaddubsw     m3,    m1,        m6
10289    pmulhrsw      m3,    m7
10290    pmaddubsw     m5,    m4,        m6
10291    pmulhrsw      m5,    m7
10292    packuswb      m3,    m5
10293    movu          [r0 + 175 * 16],  m3
10294
10295    ; mode 5 [row 28]
10296    movu          m6,    [r5 + 13 * 16]
10297    pmaddubsw     m3,    m0,        m6
10298    pmulhrsw      m3,    m7
10299    pmaddubsw     m5,    m2,        m6
10300    pmulhrsw      m5,    m7
10301    packuswb      m3,    m5
10302    movu          [r0 + 248 * 16],  m3
10303    pmaddubsw     m3,    m1,        m6
10304    pmulhrsw      m3,    m7
10305    pmaddubsw     m5,    m4,        m6
10306    pmulhrsw      m5,    m7
10307    packuswb      m3,    m5
10308    movu          [r0 + 249 * 16],  m3
10309
10310    ; mode 5 [row 29]
10311    movu          m6,    [r5 + 30 * 16]
10312    pmaddubsw     m3,    m0,        m6
10313    pmulhrsw      m3,    m7
10314    pmaddubsw     m5,    m2,        m6
10315    pmulhrsw      m5,    m7
10316    packuswb      m3,    m5
10317    movu          [r0 + 250 * 16],  m3
10318    pmaddubsw     m3,    m1,        m6
10319    pmulhrsw      m3,    m7
10320    pmaddubsw     m5,    m4,        m6
10321    pmulhrsw      m5,    m7
10322    packuswb      m3,    m5
10323    movu          [r0 + 251 * 16],  m3
10324
10325    ; mode 3 [row 19]
10326    movu          m6,    [r5 + 8 * 16]
10327    movu          m0,    [r4 + 17]
10328    movd          m1,    [r4 + 18]
10329    palignr       m1,    m0,        1
10330    punpcklbw     m0,    m1
10331    pmaddubsw     m1,    m0,        m6
10332    pmulhrsw      m1,    m7
10333    movu          m2,    [r4 + 25]
10334    movd          m3,    [r4 + 26]
10335    palignr       m3,    m2,        1
10336    punpcklbw     m2,    m3
10337    pmaddubsw     m3,    m2,        m6
10338    pmulhrsw      m3,    m7
10339    packuswb      m1,               m3
10340    movu          [r0 + 102 * 16],  m1
10341
10342    movu          m1,    [r4 + 33]
10343    movd          m3,    [r4 + 34]
10344    palignr       m3,    m1,        1
10345    punpcklbw     m1,    m3
10346    pmaddubsw     m3,    m1,        m6
10347    pmulhrsw      m3,    m7
10348    movu          m4,    [r4 + 41]
10349    movd          m5,    [r4 + 42]
10350    palignr       m5,    m4,        1
10351    punpcklbw     m4,    m5
10352    pmaddubsw     m5,    m4,        m6
10353    pmulhrsw      m5,    m7
10354    packuswb      m3,               m5
10355    movu          [r0 + 103 * 16],  m3
10356
10357    ; mode 4 [row 24]
10358    movu          m6,    [r5 + 13 * 16]
10359    pmaddubsw     m3,    m0,        m6
10360    pmulhrsw      m3,    m7
10361    pmaddubsw     m5,    m2,        m6
10362    pmulhrsw      m5,    m7
10363    packuswb      m3,    m5
10364    movu          [r0 + 176 * 16],  m3
10365    pmaddubsw     m3,    m1,        m6
10366    pmulhrsw      m3,    m7
10367    pmaddubsw     m5,    m4,        m6
10368    pmulhrsw      m5,    m7
10369    packuswb      m3,    m5
10370    movu          [r0 + 177 * 16],  m3
10371
10372    ; mode 5 [row 30]
10373    movu          m6,    [r5 + 15 * 16]
10374    pmaddubsw     m3,    m0,        m6
10375    pmulhrsw      m3,    m7
10376    pmaddubsw     m5,    m2,        m6
10377    pmulhrsw      m5,    m7
10378    packuswb      m3,    m5
10379    movu          [r0 + 252 * 16],  m3
10380    pmaddubsw     m3,    m1,        m6
10381    pmulhrsw      m3,    m7
10382    pmaddubsw     m5,    m4,        m6
10383    pmulhrsw      m5,    m7
10384    packuswb      m3,    m5
10385    movu          [r0 + 253 * 16],  m3
10386
10387    ; mode 3 [row 20]
10388    movu          m6,    [r5 + 2 * 16]
10389    movu          m0,    [r4 + 18]
10390    movd          m1,    [r4 + 19]
10391    palignr       m1,    m0,        1
10392    punpcklbw     m0,    m1
10393    pmaddubsw     m1,    m0,        m6
10394    pmulhrsw      m1,    m7
10395    movu          m2,    [r4 + 26]
10396    movd          m3,    [r4 + 27]
10397    palignr       m3,    m2,        1
10398    punpcklbw     m2,    m3
10399    pmaddubsw     m3,    m2,        m6
10400    pmulhrsw      m3,    m7
10401    packuswb      m1,               m3
10402    movu          [r0 + 104 * 16],  m1
10403
10404    movu          m1,    [r4 + 34]
10405    movd          m3,    [r4 + 35]
10406    palignr       m3,    m1,        1
10407    punpcklbw     m1,    m3
10408    pmaddubsw     m3,    m1,        m6
10409    pmulhrsw      m3,    m7
10410    movu          m4,    [r4 + 42]
10411    movd          m5,    [r4 + 43]
10412    palignr       m5,    m4,        1
10413    punpcklbw     m4,    m5
10414    pmaddubsw     m5,    m4,        m6
10415    pmulhrsw      m5,    m7
10416    packuswb      m3,               m5
10417    movu          [r0 + 105 * 16],  m3
10418
10419    ; mode 4 [row 25]
10420    pmaddubsw     m3,    m0,        m6
10421    pmulhrsw      m3,    m7
10422    pmaddubsw     m5,    m2,        m6
10423    pmulhrsw      m5,    m7
10424    packuswb      m3,    m5
10425    movu          [r0 + 178 * 16],  m3
10426    pmaddubsw     m3,    m1,        m6
10427    pmulhrsw      m3,    m7
10428    pmaddubsw     m5,    m4,        m6
10429    pmulhrsw      m5,    m7
10430    packuswb      m3,    m5
10431    movu          [r0 + 179 * 16],   m3
10432
10433    ; mode 4 [row 26]
10434    movu          m6,    [r5 + 23 * 16]
10435    pmaddubsw     m3,    m0,        m6
10436    pmulhrsw      m3,    m7
10437    pmaddubsw     m5,    m2,        m6
10438    pmulhrsw      m5,    m7
10439    packuswb      m3,    m5
10440    movu          [r0 + 180 * 16],  m3
10441    pmaddubsw     m3,    m1,        m6
10442    pmulhrsw      m3,    m7
10443    pmaddubsw     m5,    m4,        m6
10444    pmulhrsw      m5,    m7
10445    packuswb      m3,    m5
10446    movu          [r0 + 181 * 16],  m3
10447
10448    ; mode 3 [row 21]
10449    movu          m6,    [r5 + 28 * 16]
10450    pmaddubsw     m3,    m0,        m6
10451    pmulhrsw      m3,    m7
10452    pmaddubsw     m5,    m2,        m6
10453    pmulhrsw      m5,    m7
10454    packuswb      m3,               m5
10455    movu          [r0 + 106 * 16],  m3
10456    pmaddubsw     m3,    m1,        m6
10457    pmulhrsw      m3,    m7
10458    pmaddubsw     m5,    m4,        m6
10459    pmulhrsw      m5,    m7
10460    packuswb      m3,               m5
10461    movu          [r0 + 107 * 16],  m3
10462
10463    ; mode 3 [row 22]
10464    movu          m6,    [r5 + 22 * 16]
10465    movu          m0,    [r4 + 19]
10466    movd          m1,    [r4 + 20]
10467    palignr       m1,    m0,        1
10468    punpcklbw     m0,    m1
10469    pmaddubsw     m1,    m0,        m6
10470    pmulhrsw      m1,    m7
10471    movu          m2,    [r4 + 27]
10472    movd          m3,    [r4 + 28]
10473    palignr       m3,    m2,        1
10474    punpcklbw     m2,    m3
10475    pmaddubsw     m3,    m2,        m6
10476    pmulhrsw      m3,    m7
10477    packuswb      m1,               m3
10478    movu          [r0 + 108 * 16],  m1
10479
10480    movu          m1,    [r4 + 35]
10481    movd          m3,    [r4 + 36]
10482    palignr       m3,    m1,        1
10483    punpcklbw     m1,    m3
10484    pmaddubsw     m3,    m1,        m6
10485    pmulhrsw      m3,    m7
10486    movu          m4,    [r4 + 43]
10487    movd          m5,    [r4 + 44]
10488    palignr       m5,    m4,        1
10489    punpcklbw     m4,    m5
10490    pmaddubsw     m5,    m4,        m6
10491    pmulhrsw      m5,    m7
10492    packuswb      m3,               m5
10493    movu          [r0 + 109 * 16],  m3
10494
10495    ; mode 4 [row 27]
10496    movu          m6,    [r5 + 12 * 16]
10497    pmaddubsw     m3,    m0,        m6
10498    pmulhrsw      m3,    m7
10499    pmaddubsw     m5,    m2,        m6
10500    pmulhrsw      m5,    m7
10501    packuswb      m3,    m5
10502    movu          [r0 + 182 * 16],  m3
10503    pmaddubsw     m3,    m1,        m6
10504    pmulhrsw      m3,    m7
10505    pmaddubsw     m5,    m4,        m6
10506    pmulhrsw      m5,    m7
10507    packuswb      m3,    m5
10508    movu          [r0 + 183 * 16],  m3
10509
10510    ; mode 3 [row 23]
10511    movu          m6,    [r5 + 16 * 16]
10512    movu          m0,    [r4 + 20]
10513    movd          m1,    [r4 + 21]
10514    palignr       m1,    m0,        1
10515    punpcklbw     m0,    m1
10516    pmaddubsw     m1,    m0,        m6
10517    pmulhrsw      m1,    m7
10518    movu          m2,    [r4 + 28]
10519    movd          m3,    [r4 + 29]
10520    palignr       m3,    m2,        1
10521    punpcklbw     m2,    m3
10522    pmaddubsw     m3,    m2,        m6
10523    pmulhrsw      m3,    m7
10524    packuswb      m1,               m3
10525    movu          [r0 + 110 * 16],  m1
10526
10527    movu          m1,    [r4 + 36]
10528    movd          m3,    [r4 + 37]
10529    palignr       m3,    m1,        1
10530    punpcklbw     m1,    m3
10531    pmaddubsw     m3,    m1,        m6
10532    pmulhrsw      m3,    m7
10533    movu          m4,    [r4 + 44]
10534    movd          m5,    [r4 + 45]
10535    palignr       m5,    m4,        1
10536    punpcklbw     m4,    m5
10537    pmaddubsw     m5,    m4,        m6
10538    pmulhrsw      m5,    m7
10539    packuswb      m3,               m5
10540    movu          [r0 + 111 * 16],  m3
10541
10542    ; mode 4 [row 28]
10543    movu          m6,    [r5 + 1 * 16]
10544    pmaddubsw     m3,    m0,        m6
10545    pmulhrsw      m3,    m7
10546    pmaddubsw     m5,    m2,        m6
10547    pmulhrsw      m5,    m7
10548    packuswb      m3,    m5
10549    movu          [r0 + 184 * 16],  m3
10550    pmaddubsw     m3,    m1,        m6
10551    pmulhrsw      m3,    m7
10552    pmaddubsw     m5,    m4,        m6
10553    pmulhrsw      m5,    m7
10554    packuswb      m3,    m5
10555    movu          [r0 + 185 * 16],  m3
10556
10557    ; mode 4 [row 29]
10558    movu          m6,    [r5 + 22 * 16]
10559    pmaddubsw     m3,    m0,        m6
10560    pmulhrsw      m3,    m7
10561    pmaddubsw     m5,    m2,        m6
10562    pmulhrsw      m5,    m7
10563    packuswb      m3,    m5
10564    movu          [r0 + 186 * 16],  m3
10565    pmaddubsw     m3,    m1,        m6
10566    pmulhrsw      m3,    m7
10567    pmaddubsw     m5,    m4,        m6
10568    pmulhrsw      m5,    m7
10569    packuswb      m3,    m5
10570    movu          [r0 + 187 * 16],  m3
10571
10572    ; mode 3 [row 24]
10573    movu          m6,    [r5 + 10 * 16]
10574    movu          m0,    [r4 + 21]
10575    movd          m1,    [r4 + 22]
10576    palignr       m1,    m0,        1
10577    punpcklbw     m0,    m1
10578    pmaddubsw     m1,    m0,        m6
10579    pmulhrsw      m1,    m7
10580    movu          m2,    [r4 + 29]
10581    movd          m3,    [r4 + 30]
10582    palignr       m3,    m2,        1
10583    punpcklbw     m2,    m3
10584    pmaddubsw     m3,    m2,        m6
10585    pmulhrsw      m3,    m7
10586    packuswb      m1,               m3
10587    movu          [r0 + 112 * 16],  m1
10588
10589    movu          m1,    [r4 + 37]
10590    movd          m3,    [r4 + 38]
10591    palignr       m3,    m1,        1
10592    punpcklbw     m1,    m3
10593    pmaddubsw     m3,    m1,        m6
10594    pmulhrsw      m3,    m7
10595    movu          m4,    [r4 + 45]
10596    movd          m5,    [r4 + 46]
10597    palignr       m5,    m4,        1
10598    punpcklbw     m4,    m5
10599    pmaddubsw     m5,    m4,        m6
10600    pmulhrsw      m5,    m7
10601    packuswb      m3,               m5
10602    movu          [r0 + 113 * 16],  m3
10603
10604    ; mode 4 [row 30]
10605    movu          m6,    [r5 + 11 * 16]
10606    pmaddubsw     m3,    m0,        m6
10607    pmulhrsw      m3,    m7
10608    pmaddubsw     m5,    m2,        m6
10609    pmulhrsw      m5,    m7
10610    packuswb      m3,    m5
10611    movu          [r0 + 188 * 16],  m3
10612    pmaddubsw     m3,    m1,        m6
10613    pmulhrsw      m3,    m7
10614    pmaddubsw     m5,    m4,        m6
10615    pmulhrsw      m5,    m7
10616    packuswb      m3,    m5
10617    movu          [r0 + 189 * 16],  m3
10618
10619    ; mode 3 [row 25]
10620    movu          m6,    [r5 + 4 * 16]
10621    movu          m0,    [r4 + 22]
10622    movd          m1,    [r4 + 23]
10623    palignr       m1,    m0,        1
10624    punpcklbw     m0,    m1
10625    pmaddubsw     m1,    m0,        m6
10626    pmulhrsw      m1,    m7
10627    movu          m2,    [r4 + 30]
10628    movd          m3,    [r4 + 31]
10629    palignr       m3,    m2,        1
10630    punpcklbw     m2,    m3
10631    pmaddubsw     m3,    m2,        m6
10632    pmulhrsw      m3,    m7
10633    packuswb      m1,               m3
10634    movu          [r0 + 114 * 16],  m1
10635
10636    movu          m1,    [r4 + 38]
10637    movd          m3,    [r4 + 39]
10638    palignr       m3,    m1,        1
10639    punpcklbw     m1,    m3
10640    pmaddubsw     m3,    m1,        m6
10641    pmulhrsw      m3,    m7
10642    movu          m4,    [r4 + 46]
10643    movd          m5,    [r4 + 47]
10644    palignr       m5,    m4,        1
10645    punpcklbw     m4,    m5
10646    pmaddubsw     m5,    m4,        m6
10647    pmulhrsw      m5,    m7
10648    packuswb      m3,               m5
10649    movu          [r0 + 115 * 16],  m3
10650
10651    ; mode 3 [row 26]
10652    movu          m6,    [r5 + 30 * 16]
10653    pmaddubsw     m3,    m0,        m6
10654    pmulhrsw      m3,    m7
10655    pmaddubsw     m5,    m2,        m6
10656    pmulhrsw      m5,    m7
10657    packuswb      m3,               m5
10658    movu          [r0 + 116 * 16],  m3
10659    pmaddubsw     m3,    m1,        m6
10660    pmulhrsw      m3,    m7
10661    pmaddubsw     m5,    m4,        m6
10662    pmulhrsw      m5,    m7
10663    packuswb      m3,               m5
10664    movu          [r0 + 117 * 16],  m3
10665
10666    ; mode 3 [row 27]
10667    movu          m6,    [r5 + 24 * 16]
10668    movu          m0,    [r4 + 23]
10669    movd          m1,    [r4 + 24]
10670    palignr       m1,    m0,        1
10671    punpcklbw     m0,    m1
10672    pmaddubsw     m1,    m0,        m6
10673    pmulhrsw      m1,    m7
10674    movu          m2,    [r4 + 31]
10675    movd          m3,    [r4 + 32]
10676    palignr       m3,    m2,        1
10677    punpcklbw     m2,    m3
10678    pmaddubsw     m3,    m2,        m6
10679    pmulhrsw      m3,    m7
10680    packuswb      m1,               m3
10681    movu          [r0 + 118 * 16],  m1
10682
10683    movu          m1,    [r4 + 39]
10684    movd          m3,    [r4 + 40]
10685    palignr       m3,    m1,        1
10686    punpcklbw     m1,    m3
10687    pmaddubsw     m3,    m1,        m6
10688    pmulhrsw      m3,    m7
10689    movu          m4,    [r4 + 47]
10690    movd          m5,    [r4 + 48]
10691    palignr       m5,    m4,        1
10692    punpcklbw     m4,    m5
10693    pmaddubsw     m5,    m4,        m6
10694    pmulhrsw      m5,    m7
10695    packuswb      m3,               m5
10696    movu          [r0 + 119 * 16],  m3
10697
10698    ; mode 3 [row 28]
10699    movu          m6,    [r5 + 18 * 16]
10700    movu          m0,    [r4 + 24]
10701    movd          m1,    [r4 + 25]
10702    palignr       m1,    m0,        1
10703    punpcklbw     m0,    m1
10704    pmaddubsw     m1,    m0,        m6
10705    pmulhrsw      m1,    m7
10706    movu          m2,    [r4 + 32]
10707    movd          m3,    [r4 + 33]
10708    palignr       m3,    m2,        1
10709    punpcklbw     m2,    m3
10710    pmaddubsw     m3,    m2,        m6
10711    pmulhrsw      m3,    m7
10712    packuswb      m1,               m3
10713    movu          [r0 + 120 * 16],  m1
10714
10715    movu          m1,    [r4 + 40]
10716    movd          m3,    [r4 + 41]
10717    palignr       m3,    m1,        1
10718    punpcklbw     m1,    m3
10719    pmaddubsw     m3,    m1,        m6
10720    pmulhrsw      m3,    m7
10721    movu          m4,    [r4 + 48]
10722    movd          m5,    [r4 + 49]
10723    palignr       m5,    m4,        1
10724    punpcklbw     m4,    m5
10725    pmaddubsw     m5,    m4,        m6
10726    pmulhrsw      m5,    m7
10727    packuswb      m3,               m5
10728    movu          [r0 + 121 * 16],  m3
10729
10730    ; mode 3 [row 29]
10731    movu          m6,    [r5 + 12 * 16]
10732    movu          m0,    [r4 + 25]
10733    movd          m1,    [r4 + 26]
10734    palignr       m1,    m0,        1
10735    punpcklbw     m0,    m1
10736    pmaddubsw     m1,    m0,        m6
10737    pmulhrsw      m1,    m7
10738    movu          m2,    [r4 + 33]
10739    movd          m3,    [r4 + 34]
10740    palignr       m3,    m2,        1
10741    punpcklbw     m2,    m3
10742    pmaddubsw     m3,    m2,        m6
10743    pmulhrsw      m3,    m7
10744    packuswb      m1,               m3
10745    movu          [r0 + 122 * 16],  m1
10746
10747    movu          m1,    [r4 + 41]
10748    movd          m3,    [r4 + 42]
10749    palignr       m3,    m1,        1
10750    punpcklbw     m1,    m3
10751    pmaddubsw     m3,    m1,        m6
10752    pmulhrsw      m3,    m7
10753    movu          m4,    [r4 + 49]
10754    movd          m5,    [r4 + 50]
10755    palignr       m5,    m4,        1
10756    punpcklbw     m4,    m5
10757    pmaddubsw     m5,    m4,        m6
10758    pmulhrsw      m5,    m7
10759    packuswb      m3,               m5
10760    movu          [r0 + 123 * 16],  m3
10761
10762    ; mode 3 [row 30]
10763    movu          m6,    [r5 + 6 * 16]
10764    movu          m0,    [r4 + 26]
10765    movd          m1,    [r4 + 27]
10766    palignr       m1,    m0,        1
10767    punpcklbw     m0,    m1
10768    pmaddubsw     m1,    m0,        m6
10769    pmulhrsw      m1,    m7
10770    movu          m2,    [r4 + 34]
10771    movd          m3,    [r4 + 35]
10772    palignr       m3,    m2,        1
10773    punpcklbw     m2,    m3
10774    pmaddubsw     m3,    m2,        m6
10775    pmulhrsw      m3,    m7
10776    packuswb      m1,               m3
10777    movu          [r0 + 124 * 16],  m1
10778
10779    movu          m1,    [r4 + 42]
10780    movd          m3,    [r4 + 43]
10781    palignr       m3,    m1,        1
10782    punpcklbw     m1,    m3
10783    pmaddubsw     m3,    m1,        m6
10784    pmulhrsw      m3,    m7
10785    movu          m4,    [r4 + 50]
10786    movd          m5,    [r4 + 51]
10787    palignr       m5,    m4,        1
10788    punpcklbw     m4,    m5
10789    pmaddubsw     m5,    m4,        m6
10790    pmulhrsw      m5,    m7
10791    packuswb      m3,               m5
10792    movu          [r0 + 125 * 16],  m3
10793
10794    ; mode 10
10795    movu                      m1,  [r2 +  1]
10796    movu                      m2,  [r2 + 17]
10797    movu         [r0 + 512 * 16],  m1
10798    movu         [r0 + 513 * 16],  m2
10799    movu         [r0 + 514 * 16],  m1
10800    movu         [r0 + 515 * 16],  m2
10801    movu         [r0 + 516 * 16],  m1
10802    movu         [r0 + 517 * 16],  m2
10803    movu         [r0 + 518 * 16],  m1
10804    movu         [r0 + 519 * 16],  m2
10805    movu         [r0 + 520 * 16],  m1
10806    movu         [r0 + 521 * 16],  m2
10807    movu         [r0 + 522 * 16],  m1
10808    movu         [r0 + 523 * 16],  m2
10809    movu         [r0 + 524 * 16],  m1
10810    movu         [r0 + 525 * 16],  m2
10811    movu         [r0 + 526 * 16],  m1
10812    movu         [r0 + 527 * 16],  m2
10813
10814    movu         [r0 + 528 * 16],  m1
10815    movu         [r0 + 529 * 16],  m2
10816    movu         [r0 + 530 * 16],  m1
10817    movu         [r0 + 531 * 16],  m2
10818    movu         [r0 + 532 * 16],  m1
10819    movu         [r0 + 533 * 16],  m2
10820    movu         [r0 + 534 * 16],  m1
10821    movu         [r0 + 535 * 16],  m2
10822    movu         [r0 + 536 * 16],  m1
10823    movu         [r0 + 537 * 16],  m2
10824    movu         [r0 + 538 * 16],  m1
10825    movu         [r0 + 539 * 16],  m2
10826    movu         [r0 + 540 * 16],  m1
10827    movu         [r0 + 541 * 16],  m2
10828    movu         [r0 + 542 * 16],  m1
10829    movu         [r0 + 543 * 16],  m2
10830
10831    movu         [r0 + 544 * 16],  m1
10832    movu         [r0 + 545 * 16],  m2
10833    movu         [r0 + 546 * 16],  m1
10834    movu         [r0 + 547 * 16],  m2
10835    movu         [r0 + 548 * 16],  m1
10836    movu         [r0 + 549 * 16],  m2
10837    movu         [r0 + 550 * 16],  m1
10838    movu         [r0 + 551 * 16],  m2
10839    movu         [r0 + 552 * 16],  m1
10840    movu         [r0 + 553 * 16],  m2
10841    movu         [r0 + 554 * 16],  m1
10842    movu         [r0 + 555 * 16],  m2
10843    movu         [r0 + 556 * 16],  m1
10844    movu         [r0 + 557 * 16],  m2
10845    movu         [r0 + 558 * 16],  m1
10846    movu         [r0 + 559 * 16],  m2
10847
10848    movu         [r0 + 560 * 16],  m1
10849    movu         [r0 + 561 * 16],  m2
10850    movu         [r0 + 562 * 16],  m1
10851    movu         [r0 + 563 * 16],  m2
10852    movu         [r0 + 564 * 16],  m1
10853    movu         [r0 + 565 * 16],  m2
10854    movu         [r0 + 566 * 16],  m1
10855    movu         [r0 + 567 * 16],  m2
10856    movu         [r0 + 568 * 16],  m1
10857    movu         [r0 + 569 * 16],  m2
10858    movu         [r0 + 570 * 16],  m1
10859    movu         [r0 + 571 * 16],  m2
10860    movu         [r0 + 572 * 16],  m1
10861    movu         [r0 + 573 * 16],  m2
10862    movu         [r0 + 574 * 16],  m1
10863    movu         [r0 + 575 * 16],  m2
10864
10865    ; mode 11 [row 0]
10866    movu          m0,    [r4]
10867
10868    ; mode 11 [row 15 - first half]
10869    movu          [r0 + 606 * 16],  m0
10870
10871    movu          [r0 + 606 * 16],  m0
10872
10873    ; mode 12 [row 31]
10874    pslldq        m6,    m0,          4
10875    pinsrb        m6,    [r3 + 26],   0
10876    pinsrb        m6,    [r3 + 19],   1
10877    pinsrb        m6,    [r3 + 13],   2
10878    pinsrb        m6,    [r3 +  6],   3
10879    movu          [r0 + 702 * 16],    m6
10880    movu          m6,                 [r4 + 12]
10881    movu          [r0 + 703 * 16],    m6
10882
10883    ; mode 11 [row 31]
10884    pslldq        m6,               m0,           1
10885    pinsrb        m6,               [r3 + 16],    0
10886    movu          [r0 + 638 * 16],  m6
10887    movu          m6,               [r4 + 15]
10888    movu          [r0 + 639 * 16],  m6
10889
10890    movd          m1,               [r4 + 1]
10891    palignr       m1,    m0,        1
10892    punpcklbw     m0,    m1
10893    pmaddubsw     m1,    m0,        [r5 + 30 * 16]
10894    pmulhrsw      m1,    m7
10895    movu          m2,    [r4 + 8]
10896    movd          m3,    [r4 + 9]
10897    palignr       m3,    m2,        1
10898    punpcklbw     m2,    m3
10899    pmaddubsw     m3,    m2,        [r5 + 30 * 16]
10900    pmulhrsw      m3,    m7
10901    packuswb      m1,               m3
10902    movu          [r0 + 576 * 16],  m1
10903
10904    movu          m1,    [r4 + 16]
10905
10906    ; mode 11 [row 15 - second half]
10907    movu          [r0 + 607 * 16],  m1
10908
10909    movd          m3,    [r4 + 17]
10910    palignr       m3,    m1,        1
10911    punpcklbw     m1,    m3
10912    pmaddubsw     m3,    m1,        [r5 + 30 * 16]
10913    pmulhrsw      m3,    m7
10914    movu          m4,    [r4 + 24]
10915    movd          m5,    [r4 + 25]
10916    palignr       m5,    m4,        1
10917    punpcklbw     m4,    m5
10918    pmaddubsw     m5,    m4,        [r5 + 30 * 16]
10919    pmulhrsw      m5,    m7
10920    packuswb      m3,               m5
10921    movu          [r0 + 577 * 16],  m3
10922
10923    ; mode 11 [row 1]
10924    pmaddubsw     m3,    m0,        [r5 + 28 * 16]
10925    pmulhrsw      m3,    m7
10926    pmaddubsw     m5,    m2,        [r5 + 28 * 16]
10927    pmulhrsw      m5,    m7
10928    packuswb      m3,               m5
10929    movu          [r0 + 578 * 16],  m3
10930    pmaddubsw     m3,    m1,        [r5 + 28 * 16]
10931    pmulhrsw      m3,    m7
10932    pmaddubsw     m5,    m4,        [r5 + 28 * 16]
10933    pmulhrsw      m5,    m7
10934    packuswb      m3,               m5
10935    movu          [r0 + 579 * 16],  m3
10936
10937    ; mode 11 [row 2]
10938    pmaddubsw     m3,    m0,        [r5 + 26 * 16]
10939    pmulhrsw      m3,    m7
10940    pmaddubsw     m5,    m2,        [r5 + 26 * 16]
10941    pmulhrsw      m5,    m7
10942    packuswb      m3,               m5
10943    movu          [r0 + 580 * 16],  m3
10944    pmaddubsw     m3,    m1,        [r5 + 26 * 16]
10945    pmulhrsw      m3,    m7
10946    pmaddubsw     m5,    m4,        [r5 + 26 * 16]
10947    pmulhrsw      m5,    m7
10948    packuswb      m3,               m5
10949    movu          [r0 + 581 * 16],  m3
10950
10951    ; mode 11 [row 3]
10952    pmaddubsw     m3,    m0,        [r5 + 24 * 16]
10953    pmulhrsw      m3,    m7
10954    pmaddubsw     m5,    m2,        [r5 + 24 * 16]
10955    pmulhrsw      m5,    m7
10956    packuswb      m3,               m5
10957    movu          [r0 + 582 * 16],  m3
10958    pmaddubsw     m3,    m1,        [r5 + 24 * 16]
10959    pmulhrsw      m3,    m7
10960    pmaddubsw     m5,    m4,        [r5 + 24 * 16]
10961    pmulhrsw      m5,    m7
10962    packuswb      m3,               m5
10963    movu          [r0 + 583 * 16],  m3
10964
10965    ; mode 11 [row 4]
10966    pmaddubsw     m3,    m0,        [r5 + 22 * 16]
10967    pmulhrsw      m3,    m7
10968    pmaddubsw     m5,    m2,        [r5 + 22 * 16]
10969    pmulhrsw      m5,    m7
10970    packuswb      m3,               m5
10971    movu          [r0 + 584 * 16],  m3
10972
10973    ; mode 12 [row 1 - first half]
10974    movu          [r0 + 642 * 16],  m3
10975
10976    pmaddubsw     m3,    m1,        [r5 + 22 * 16]
10977    pmulhrsw      m3,    m7
10978    pmaddubsw     m5,    m4,        [r5 + 22 * 16]
10979    pmulhrsw      m5,    m7
10980    packuswb      m3,               m5
10981    movu          [r0 + 585 * 16],  m3
10982
10983    ; mode 12 [row 1 - second half]
10984    movu          [r0 + 643 * 16],  m3
10985
10986    ; mode 11 [row 5]
10987    pmaddubsw     m3,    m0,        [r5 + 20 * 16]
10988    pmulhrsw      m3,    m7
10989    pmaddubsw     m5,    m2,        [r5 + 20 * 16]
10990    pmulhrsw      m5,    m7
10991    packuswb      m3,               m5
10992    movu          [r0 + 586 * 16],  m3
10993    pmaddubsw     m3,    m1,        [r5 + 20 * 16]
10994    pmulhrsw      m3,    m7
10995    pmaddubsw     m5,    m4,        [r5 + 20 * 16]
10996    pmulhrsw      m5,    m7
10997    packuswb      m3,               m5
10998    movu          [r0 + 587 * 16],  m3
10999
11000    ; mode 11 [row 6]
11001    pmaddubsw     m3,    m0,        [r5 + 18 * 16]
11002    pmulhrsw      m3,    m7
11003    pmaddubsw     m5,    m2,        [r5 + 18 * 16]
11004    pmulhrsw      m5,    m7
11005    packuswb      m3,               m5
11006    movu          [r0 + 588 * 16],  m3
11007    pmaddubsw     m3,    m1,        [r5 + 18 * 16]
11008    pmulhrsw      m3,    m7
11009    pmaddubsw     m5,    m4,        [r5 + 18 * 16]
11010    pmulhrsw      m5,    m7
11011    packuswb      m3,               m5
11012    movu          [r0 + 589 * 16],  m3
11013
11014    ; mode 11 [row 7]
11015    pmaddubsw     m3,    m0,        [r5 + 16 * 16]
11016    pmulhrsw      m3,    m7
11017    pmaddubsw     m5,    m2,        [r5 + 16 * 16]
11018    pmulhrsw      m5,    m7
11019    packuswb      m3,               m5
11020    movu          [r0 + 590 * 16],  m3
11021    pmaddubsw     m3,    m1,        [r5 + 16 * 16]
11022    pmulhrsw      m3,    m7
11023    pmaddubsw     m5,    m4,        [r5 + 16 * 16]
11024    pmulhrsw      m5,    m7
11025    packuswb      m3,               m5
11026    movu          [r0 + 591 * 16],  m3
11027
11028    ; mode 11 [row 8]
11029    pmaddubsw     m3,    m0,        [r5 + 14 * 16]
11030    pmulhrsw      m3,    m7
11031    pmaddubsw     m5,    m2,        [r5 + 14 * 16]
11032    pmulhrsw      m5,    m7
11033    packuswb      m3,               m5
11034    movu          [r0 + 592 * 16],  m3
11035
11036    ; mode 13 [row 1 - first half]
11037    movu          [r0 + 706 * 16],  m3
11038
11039    pmaddubsw     m3,    m1,        [r5 + 14 * 16]
11040    pmulhrsw      m3,    m7
11041    pmaddubsw     m5,    m4,        [r5 + 14 * 16]
11042    pmulhrsw      m5,    m7
11043    packuswb      m3,               m5
11044    movu          [r0 + 593 * 16],  m3
11045
11046    ; mode 13 [row 1 - second half]
11047    movu          [r0 + 707 * 16],  m3
11048
11049    ; mode 11 [row 9]
11050    pmaddubsw     m3,    m0,        [r5 + 12 * 16]
11051    pmulhrsw      m3,    m7
11052    pmaddubsw     m5,    m2,        [r5 + 12 * 16]
11053    pmulhrsw      m5,    m7
11054    packuswb      m3,               m5
11055    movu          [r0 + 594 * 16],  m3
11056
11057    ; mode 12 [row 3 - first half]
11058    movu          [r0 + 646 * 16],  m3
11059
11060    pmaddubsw     m3,    m1,        [r5 + 12 * 16]
11061    pmulhrsw      m3,    m7
11062    pmaddubsw     m5,    m4,        [r5 + 12 * 16]
11063    pmulhrsw      m5,    m7
11064    packuswb      m3,               m5
11065    movu          [r0 + 595 * 16],  m3
11066
11067    ; mode 12 [row 3 - second half]
11068    movu          [r0 + 647 * 16],  m3
11069
11070    ; mode 11 [row 10]
11071    pmaddubsw     m3,    m0,        [r5 + 10 * 16]
11072    pmulhrsw      m3,    m7
11073    pmaddubsw     m5,    m2,        [r5 + 10 * 16]
11074    pmulhrsw      m5,    m7
11075    packuswb      m3,               m5
11076    movu          [r0 + 596 * 16],  m3
11077    pmaddubsw     m3,    m1,        [r5 + 10 * 16]
11078    pmulhrsw      m3,    m7
11079    pmaddubsw     m5,    m4,        [r5 + 10 * 16]
11080    pmulhrsw      m5,    m7
11081    packuswb      m3,               m5
11082    movu          [r0 + 597 * 16],  m3
11083
11084    ; mode 11 [row 11]
11085    pmaddubsw     m3,    m0,        [r5 + 8 * 16]
11086    pmulhrsw      m3,    m7
11087    pmaddubsw     m5,    m2,        [r5 + 8 * 16]
11088    pmulhrsw      m5,    m7
11089    packuswb      m3,               m5
11090    movu          [r0 + 598 * 16],  m3
11091    pmaddubsw     m3,    m1,        [r5 + 8 * 16]
11092    pmulhrsw      m3,    m7
11093    pmaddubsw     m5,    m4,        [r5 + 8 * 16]
11094    pmulhrsw      m5,    m7
11095    packuswb      m3,               m5
11096    movu          [r0 + 599 * 16],  m3
11097
11098    ; mode 11 [row 12]
11099    pmaddubsw     m3,    m0,        [r5 + 6 * 16]
11100    pmulhrsw      m3,    m7
11101    pmaddubsw     m5,    m2,        [r5 + 6 * 16]
11102    pmulhrsw      m5,    m7
11103    packuswb      m3,               m5
11104    movu          [r0 + 600 * 16],  m3
11105
11106    ; mode 14 [row 1 - first half]
11107    movu          [r0 + 770 * 16],  m3
11108
11109    pmaddubsw     m3,    m1,        [r5 + 6 * 16]
11110    pmulhrsw      m3,    m7
11111    pmaddubsw     m5,    m4,        [r5 + 6 * 16]
11112    pmulhrsw      m5,    m7
11113    packuswb      m3,               m5
11114    movu          [r0 + 601 * 16],  m3
11115
11116    ; mode 14 [row 1 - second half]
11117    movu          [r0 + 771 * 16],  m3
11118
11119    ; mode 11 [row 13]
11120    pmaddubsw     m3,    m0,        [r5 + 4 * 16]
11121    pmulhrsw      m3,    m7
11122    pmaddubsw     m5,    m2,        [r5 + 4 * 16]
11123    pmulhrsw      m5,    m7
11124    packuswb      m3,               m5
11125    movu          [r0 + 602 * 16],  m3
11126    pmaddubsw     m3,    m1,        [r5 + 4 * 16]
11127    pmulhrsw      m3,    m7
11128    pmaddubsw     m5,    m4,        [r5 + 4 * 16]
11129    pmulhrsw      m5,    m7
11130    packuswb      m3,               m5
11131    movu          [r0 + 603 * 16],  m3
11132
11133    ; mode 11 [row 14]
11134    pmaddubsw     m3,    m0,        [r5 + 2 * 16]
11135    pmulhrsw      m3,    m7
11136    pmaddubsw     m5,    m2,        [r5 + 2 * 16]
11137    pmulhrsw      m5,    m7
11138    packuswb      m3,               m5
11139    movu          [r0 + 604 * 16],  m3
11140
11141    ; mode 13 [row 5 - first half]
11142    movu          [r0 + 650 * 16],  m3
11143
11144    pmaddubsw     m3,    m1,        [r5 + 2 * 16]
11145    pmulhrsw      m3,    m7
11146    pmaddubsw     m5,    m4,        [r5 + 2 * 16]
11147    pmulhrsw      m5,    m7
11148    packuswb      m3,               m5
11149    movu          [r0 + 605 * 16],  m3
11150
11151    ; mode 13 [row 5 - second half]
11152    movu          [r0 + 651 * 16],  m3
11153
11154    ; mode 12 [row 0]
11155    pmaddubsw     m3,    m0,        [r5 + 27 * 16]
11156    pmulhrsw      m3,    m7
11157    pmaddubsw     m5,    m2,        [r5 + 27 * 16]
11158    pmulhrsw      m5,    m7
11159    packuswb      m3,               m5
11160    movu          [r0 + 640 * 16],  m3
11161    pmaddubsw     m3,    m1,        [r5 + 27 * 16]
11162    pmulhrsw      m3,    m7
11163    pmaddubsw     m5,    m4,        [r5 + 27 * 16]
11164    pmulhrsw      m5,    m7
11165    packuswb      m3,               m5
11166    movu          [r0 + 641 * 16],  m3
11167
11168    ; mode 12 [row 2]
11169    pmaddubsw     m3,    m0,        [r5 + 17 * 16]
11170    pmulhrsw      m3,    m7
11171    pmaddubsw     m5,    m2,        [r5 + 17 * 16]
11172    pmulhrsw      m5,    m7
11173    packuswb      m3,               m5
11174    movu          [r0 + 644 * 16],  m3
11175    pmaddubsw     m3,    m1,        [r5 + 17 * 16]
11176    pmulhrsw      m3,    m7
11177    pmaddubsw     m5,    m4,        [r5 + 17 * 16]
11178    pmulhrsw      m5,    m7
11179    packuswb      m3,               m5
11180    movu          [r0 + 645 * 16],  m3
11181
11182    ; mode 12 [row 4]
11183    pmaddubsw     m3,    m0,        [r5 + 7 * 16]
11184    pmulhrsw      m3,    m7
11185    pmaddubsw     m5,    m2,        [r5 + 7 * 16]
11186    pmulhrsw      m5,    m7
11187    packuswb      m3,               m5
11188    movu          [r0 + 648 * 16],  m3
11189    pmaddubsw     m3,    m1,        [r5 + 7 * 16]
11190    pmulhrsw      m3,    m7
11191    pmaddubsw     m5,    m4,        [r5 + 7 * 16]
11192    pmulhrsw      m5,    m7
11193    packuswb      m3,               m5
11194    movu          [r0 + 649 * 16],  m3
11195
11196    ; mode 13 [row 0]
11197    pmaddubsw     m3,    m0,        [r5 + 23 * 16]
11198    pmulhrsw      m3,    m7
11199    pmaddubsw     m5,    m2,        [r5 + 23 * 16]
11200    pmulhrsw      m5,    m7
11201    packuswb      m3,    m5
11202    movu          [r0 + 704 * 16],  m3
11203    pmaddubsw     m3,    m1,        [r5 + 23 * 16]
11204    pmulhrsw      m3,    m7
11205    pmaddubsw     m5,    m4,        [r5 + 23 * 16]
11206    pmulhrsw      m5,    m7
11207    packuswb      m3,    m5
11208    movu          [r0 + 705 * 16],  m3
11209
11210    ; mode 13 [row 2]
11211    pmaddubsw     m3,    m0,        [r5 + 5 * 16]
11212    pmulhrsw      m3,    m7
11213    pmaddubsw     m5,    m2,        [r5 + 5 * 16]
11214    pmulhrsw      m5,    m7
11215    packuswb      m3,    m5
11216    movu          [r0 + 708 * 16],  m3
11217    pmaddubsw     m3,    m1,        [r5 + 5 * 16]
11218    pmulhrsw      m3,    m7
11219    pmaddubsw     m5,    m4,        [r5 + 5 * 16]
11220    pmulhrsw      m5,    m7
11221    packuswb      m3,    m5
11222    movu          [r0 + 709 * 16],  m3
11223
11224    ; mode 14 [row 0]
11225    pmaddubsw     m3,    m0,        [r5 + 19 * 16]
11226    pmulhrsw      m3,    m7
11227    pmaddubsw     m5,    m2,        [r5 + 19 * 16]
11228    pmulhrsw      m5,    m7
11229    packuswb      m3,    m5
11230    movu          [r0 + 768 * 16],  m3
11231    pmaddubsw     m3,    m1,        [r5 + 19 * 16]
11232    pmulhrsw      m3,    m7
11233    pmaddubsw     m5,    m4,        [r5 + 19 * 16]
11234    pmulhrsw      m5,    m7
11235    packuswb      m3,    m5
11236    movu          [r0 + 769 * 16],  m3
11237
11238    ; mode 15 [row 0]
11239    pmaddubsw     m3,    m0,        [r5 + 15 * 16]
11240    pmulhrsw      m3,    m7
11241    pmaddubsw     m5,    m2,        [r5 + 15 * 16]
11242    pmulhrsw      m5,    m7
11243    packuswb      m3,    m5
11244    movu          [r0 + 832 * 16],  m3
11245    pmaddubsw     m3,    m1,        [r5 + 15 * 16]
11246    pmulhrsw      m3,    m7
11247    pmaddubsw     m5,    m4,        [r5 + 15 * 16]
11248    pmulhrsw      m5,    m7
11249    packuswb      m3,    m5
11250    movu          [r0 + 833 * 16],  m3
11251
11252    ; mode 11 [row 16]
11253    pslldq        m0,    2
11254    pinsrb        m0,    [r4 +  0],   1
11255    pinsrb        m0,    [r3 + 16],   0
11256    pmaddubsw     m3,    m0,        [r5 + 30 * 16]
11257    pmulhrsw      m3,    m7
11258    pslldq        m2,    2
11259    pinsrb        m2,    [r4 + 8],   1
11260    pinsrb        m2,    [r4 + 7],   0
11261    pmaddubsw     m5,    m2,        [r5 + 30 * 16]
11262    pmulhrsw      m5,    m7
11263    packuswb      m3,               m5
11264    movu          [r0 + 608 * 16],  m3
11265    pslldq        m1,    2
11266    pinsrb        m1,    [r4 + 16],   1
11267    pinsrb        m1,    [r4 + 15],   0
11268    pmaddubsw     m3,    m1,        [r5 + 30 * 16]
11269    pmulhrsw      m3,    m7
11270    pslldq        m4,    2
11271    pinsrb        m4,    [r4 + 24],   1
11272    pinsrb        m4,    [r4 + 23],   0
11273    pmaddubsw     m5,    m4,        [r5 + 30 * 16]
11274    pmulhrsw      m5,    m7
11275    packuswb      m3,               m5
11276    movu          [r0 + 609 * 16],  m3
11277
11278    ; mode 11 [row 17]
11279    pmaddubsw     m3,    m0,        [r5 + 28 * 16]
11280    pmulhrsw      m3,    m7
11281    pmaddubsw     m5,    m2,        [r5 + 28 * 16]
11282    pmulhrsw      m5,    m7
11283    packuswb      m3,               m5
11284    movu          [r0 + 610 * 16],  m3
11285    pmaddubsw     m3,    m1,        [r5 + 28 * 16]
11286    pmulhrsw      m3,    m7
11287    pmaddubsw     m5,    m4,        [r5 + 28 * 16]
11288    pmulhrsw      m5,    m7
11289    packuswb      m3,               m5
11290    movu          [r0 + 611 * 16],  m3
11291
11292    ; mode 11 [row 18]
11293    pmaddubsw     m3,    m0,        [r5 + 26 * 16]
11294    pmulhrsw      m3,    m7
11295    pmaddubsw     m5,    m2,        [r5 + 26 * 16]
11296    pmulhrsw      m5,    m7
11297    packuswb      m3,               m5
11298    movu          [r0 + 612 * 16],  m3
11299    pmaddubsw     m3,    m1,        [r5 + 26 * 16]
11300    pmulhrsw      m3,    m7
11301    pmaddubsw     m5,    m4,        [r5 + 26 * 16]
11302    pmulhrsw      m5,    m7
11303    packuswb      m3,               m5
11304    movu          [r0 + 613 * 16],  m3
11305
11306    ; mode 11 [row 19]
11307    pmaddubsw     m3,    m0,        [r5 + 24 * 16]
11308    pmulhrsw      m3,    m7
11309    pmaddubsw     m5,    m2,        [r5 + 24 * 16]
11310    pmulhrsw      m5,    m7
11311    packuswb      m3,               m5
11312    movu          [r0 + 614 * 16],  m3
11313    pmaddubsw     m3,    m1,        [r5 + 24 * 16]
11314    pmulhrsw      m3,    m7
11315    pmaddubsw     m5,    m4,        [r5 + 24 * 16]
11316    pmulhrsw      m5,    m7
11317    packuswb      m3,               m5
11318    movu          [r0 + 615 * 16],  m3
11319
11320    ; mode 11 [row 20]
11321    pmaddubsw     m3,    m0,        [r5 + 22 * 16]
11322    pmulhrsw      m3,    m7
11323    pmaddubsw     m5,    m2,        [r5 + 22 * 16]
11324    pmulhrsw      m5,    m7
11325    packuswb      m3,               m5
11326    movu          [r0 + 616 * 16],  m3
11327    pmaddubsw     m3,    m1,        [r5 + 22 * 16]
11328    pmulhrsw      m3,    m7
11329    pmaddubsw     m5,    m4,        [r5 + 22 * 16]
11330    pmulhrsw      m5,    m7
11331    packuswb      m3,               m5
11332    movu          [r0 + 617 * 16],  m3
11333
11334    ; mode 11 [row 21]
11335    pmaddubsw     m3,    m0,        [r5 + 20 * 16]
11336    pmulhrsw      m3,    m7
11337    pmaddubsw     m5,    m2,        [r5 + 20 * 16]
11338    pmulhrsw      m5,    m7
11339    packuswb      m3,               m5
11340    movu          [r0 + 618 * 16],  m3
11341    pmaddubsw     m3,    m1,        [r5 + 20 * 16]
11342    pmulhrsw      m3,    m7
11343    pmaddubsw     m5,    m4,        [r5 + 20 * 16]
11344    pmulhrsw      m5,    m7
11345    packuswb      m3,               m5
11346    movu          [r0 + 619 * 16],  m3
11347
11348    ; mode 11 [row 22]
11349    pmaddubsw     m3,    m0,        [r5 + 18 * 16]
11350    pmulhrsw      m3,    m7
11351    pmaddubsw     m5,    m2,        [r5 + 18 * 16]
11352    pmulhrsw      m5,    m7
11353    packuswb      m3,               m5
11354    movu          [r0 + 620 * 16],  m3
11355    pmaddubsw     m3,    m1,        [r5 + 18 * 16]
11356    pmulhrsw      m3,    m7
11357    pmaddubsw     m5,    m4,        [r5 + 18 * 16]
11358    pmulhrsw      m5,    m7
11359    packuswb      m3,               m5
11360    movu          [r0 + 621 * 16],  m3
11361
11362    ; mode 11 [row 23]
11363    pmaddubsw     m3,    m0,        [r5 + 16 * 16]
11364    pmulhrsw      m3,    m7
11365    pmaddubsw     m5,    m2,        [r5 + 16 * 16]
11366    pmulhrsw      m5,    m7
11367    packuswb      m3,               m5
11368    movu          [r0 + 622 * 16],  m3
11369    pmaddubsw     m3,    m1,        [r5 + 16 * 16]
11370    pmulhrsw      m3,    m7
11371    pmaddubsw     m5,    m4,        [r5 + 16 * 16]
11372    pmulhrsw      m5,    m7
11373    packuswb      m3,               m5
11374    movu          [r0 + 623 * 16],  m3
11375
11376    ; mode 11 [row 24]
11377    pmaddubsw     m3,    m0,        [r5 + 14 * 16]
11378    pmulhrsw      m3,    m7
11379    pmaddubsw     m5,    m2,        [r5 + 14 * 16]
11380    pmulhrsw      m5,    m7
11381    packuswb      m3,               m5
11382    movu          [r0 + 624 * 16],  m3
11383    pmaddubsw     m3,    m1,        [r5 + 14 * 16]
11384    pmulhrsw      m3,    m7
11385    pmaddubsw     m5,    m4,        [r5 + 14 * 16]
11386    pmulhrsw      m5,    m7
11387    packuswb      m3,               m5
11388    movu          [r0 + 625 * 16],  m3
11389
11390    ; mode 11 [row 25]
11391    pmaddubsw     m3,    m0,        [r5 + 12 * 16]
11392    pmulhrsw      m3,    m7
11393    pmaddubsw     m5,    m2,        [r5 + 12 * 16]
11394    pmulhrsw      m5,    m7
11395    packuswb      m3,               m5
11396    movu          [r0 + 626 * 16],  m3
11397    pmaddubsw     m3,    m1,        [r5 + 12 * 16]
11398    pmulhrsw      m3,    m7
11399    pmaddubsw     m5,    m4,        [r5 + 12 * 16]
11400    pmulhrsw      m5,    m7
11401    packuswb      m3,               m5
11402    movu          [r0 + 627 * 16],  m3
11403
11404    ; mode 11 [row 26]
11405    pmaddubsw     m3,    m0,        [r5 + 10 * 16]
11406    pmulhrsw      m3,    m7
11407    pmaddubsw     m5,    m2,        [r5 + 10 * 16]
11408    pmulhrsw      m5,    m7
11409    packuswb      m3,               m5
11410    movu          [r0 + 628 * 16],  m3
11411    pmaddubsw     m3,    m1,        [r5 + 10 * 16]
11412    pmulhrsw      m3,    m7
11413    pmaddubsw     m5,    m4,        [r5 + 10 * 16]
11414    pmulhrsw      m5,    m7
11415    packuswb      m3,               m5
11416    movu          [r0 + 629 * 16],  m3
11417
11418    ; mode 11 [row 27]
11419    pmaddubsw     m3,    m0,        [r5 + 8 * 16]
11420    pmulhrsw      m3,    m7
11421    pmaddubsw     m5,    m2,        [r5 + 8 * 16]
11422    pmulhrsw      m5,    m7
11423    packuswb      m3,               m5
11424    movu          [r0 + 630 * 16],  m3
11425    pmaddubsw     m3,    m1,        [r5 + 8 * 16]
11426    pmulhrsw      m3,    m7
11427    pmaddubsw     m5,    m4,        [r5 + 8 * 16]
11428    pmulhrsw      m5,    m7
11429    packuswb      m3,               m5
11430    movu          [r0 + 631 * 16],  m3
11431
11432    ; mode 11 [row 28]
11433    pmaddubsw     m3,    m0,        [r5 + 6 * 16]
11434    pmulhrsw      m3,    m7
11435    pmaddubsw     m5,    m2,        [r5 + 6 * 16]
11436    pmulhrsw      m5,    m7
11437    packuswb      m3,               m5
11438    movu          [r0 + 632 * 16],  m3
11439    pmaddubsw     m3,    m1,        [r5 + 6 * 16]
11440    pmulhrsw      m3,    m7
11441    pmaddubsw     m5,    m4,        [r5 + 6 * 16]
11442    pmulhrsw      m5,    m7
11443    packuswb      m3,               m5
11444    movu          [r0 + 633 * 16],  m3
11445
11446    ; mode 11 [row 29]
11447    pmaddubsw     m3,    m0,        [r5 + 4 * 16]
11448    pmulhrsw      m3,    m7
11449    pmaddubsw     m5,    m2,        [r5 + 4 * 16]
11450    pmulhrsw      m5,    m7
11451    packuswb      m3,               m5
11452    movu          [r0 + 634 * 16],  m3
11453    pmaddubsw     m3,    m1,        [r5 + 4 * 16]
11454    pmulhrsw      m3,    m7
11455    pmaddubsw     m5,    m4,        [r5 + 4 * 16]
11456    pmulhrsw      m5,    m7
11457    packuswb      m3,               m5
11458    movu          [r0 + 635 * 16],  m3
11459
11460    ; mode 11 [row 30]
11461    pmaddubsw     m3,    m0,        [r5 + 2 * 16]
11462    pmulhrsw      m3,    m7
11463    pmaddubsw     m5,    m2,        [r5 + 2 * 16]
11464    pmulhrsw      m5,    m7
11465    packuswb      m3,               m5
11466    movu          [r0 + 636 * 16],  m3
11467    pmaddubsw     m3,    m1,        [r5 + 2 * 16]
11468    pmulhrsw      m3,    m7
11469    pmaddubsw     m5,    m4,        [r5 + 2 * 16]
11470    pmulhrsw      m5,    m7
11471    packuswb      m3,               m5
11472    movu          [r0 + 637 * 16],  m3
11473
11474    ; mode 12 [row 6]
11475    pinsrb        m0,    [r3 + 6],  0
11476    pmaddubsw     m3,    m0,        [r5 + 29 * 16]
11477    pmulhrsw      m3,    m7
11478    pmaddubsw     m5,    m2,        [r5 + 29 * 16]
11479    pmulhrsw      m5,    m7
11480    packuswb      m3,    m5
11481    movu          [r0 + 652 * 16],  m3
11482    pmaddubsw     m3,    m1,        [r5 + 29 * 16]
11483    pmulhrsw      m3,    m7
11484    pmaddubsw     m5,    m4,        [r5 + 29 * 16]
11485    pmulhrsw      m5,    m7
11486    packuswb      m3,    m5
11487    movu          [r0 + 653 * 16],  m3
11488
11489    ; mode 12 [row 7]
11490    pmaddubsw     m3,    m0,        [r5 + 24 * 16]
11491    pmulhrsw      m3,    m7
11492    pmaddubsw     m5,    m2,        [r5 + 24 * 16]
11493    pmulhrsw      m5,    m7
11494    packuswb      m3,    m5
11495    movu          [r0 + 654 * 16],  m3
11496    pmaddubsw     m3,    m1,        [r5 + 24 * 16]
11497    pmulhrsw      m3,    m7
11498    pmaddubsw     m5,    m4,        [r5 + 24 * 16]
11499    pmulhrsw      m5,    m7
11500    packuswb      m3,    m5
11501    movu          [r0 + 655 * 16],  m3
11502
11503    ; mode 12 [row 8]
11504    pmaddubsw     m3,    m0,        [r5 + 19 * 16]
11505    pmulhrsw      m3,    m7
11506    pmaddubsw     m5,    m2,        [r5 + 19 * 16]
11507    pmulhrsw      m5,    m7
11508    packuswb      m3,    m5
11509    movu          [r0 + 656 * 16],  m3
11510    pmaddubsw     m3,    m1,        [r5 + 19 * 16]
11511    pmulhrsw      m3,    m7
11512    pmaddubsw     m5,    m4,        [r5 + 19 * 16]
11513    pmulhrsw      m5,    m7
11514    packuswb      m3,    m5
11515    movu          [r0 + 657 * 16],  m3
11516
11517    ; mode 12 [row 9]
11518    pmaddubsw     m3,    m0,        [r5 + 14 * 16]
11519    pmulhrsw      m3,    m7
11520    pmaddubsw     m5,    m2,        [r5 + 14 * 16]
11521    pmulhrsw      m5,    m7
11522    packuswb      m3,    m5
11523    movu          [r0 + 658 * 16],  m3
11524    pmaddubsw     m3,    m1,        [r5 + 14 * 16]
11525    pmulhrsw      m3,    m7
11526    pmaddubsw     m5,    m4,        [r5 + 14 * 16]
11527    pmulhrsw      m5,    m7
11528    packuswb      m3,    m5
11529    movu          [r0 + 659 * 16],  m3
11530
11531    ; mode 12 [row 10]
11532    pmaddubsw     m3,    m0,        [r5 + 9 * 16]
11533    pmulhrsw      m3,    m7
11534    pmaddubsw     m5,    m2,        [r5 + 9 * 16]
11535    pmulhrsw      m5,    m7
11536    packuswb      m3,    m5
11537    movu          [r0 + 660 * 16],  m3
11538    pmaddubsw     m3,    m1,        [r5 + 9 * 16]
11539    pmulhrsw      m3,    m7
11540    pmaddubsw     m5,    m4,        [r5 + 9 * 16]
11541    pmulhrsw      m5,    m7
11542    packuswb      m3,    m5
11543    movu          [r0 + 661 * 16],  m3
11544
11545    ; mode 12 [row 11]
11546    pmaddubsw     m3,    m0,        [r5 + 4 * 16]
11547    pmulhrsw      m3,    m7
11548    pmaddubsw     m5,    m2,        [r5 + 4 * 16]
11549    pmulhrsw      m5,    m7
11550    packuswb      m3,    m5
11551    movu          [r0 + 662 * 16],  m3
11552    pmaddubsw     m3,    m1,        [r5 + 4 * 16]
11553    pmulhrsw      m3,    m7
11554    pmaddubsw     m5,    m4,        [r5 + 4 * 16]
11555    pmulhrsw      m5,    m7
11556    packuswb      m3,    m5
11557    movu          [r0 + 663 * 16],  m3
11558
11559    ; mode 13 [row 3]
11560    movu          m6,    m0
11561    pinsrb        m6,    [r3 + 4],  0
11562    pmaddubsw     m3,    m6,        [r5 + 28 * 16]
11563    pmulhrsw      m3,    m7
11564    pmaddubsw     m5,    m2,        [r5 + 28 * 16]
11565    pmulhrsw      m5,    m7
11566    packuswb      m3,    m5
11567    movu          [r0 + 710 * 16],  m3
11568    pmaddubsw     m3,    m1,        [r5 + 28 * 16]
11569    pmulhrsw      m3,    m7
11570    pmaddubsw     m5,    m4,        [r5 + 28 * 16]
11571    pmulhrsw      m5,    m7
11572    packuswb      m3,    m5
11573    movu          [r0 + 711 * 16],  m3
11574
11575    ; mode 13 [row 4]
11576    pmaddubsw     m3,    m6,        [r5 + 19 * 16]
11577    pmulhrsw      m3,    m7
11578    pmaddubsw     m5,    m2,        [r5 + 19 * 16]
11579    pmulhrsw      m5,    m7
11580    packuswb      m3,    m5
11581    movu          [r0 + 712 * 16],  m3
11582    pmaddubsw     m3,    m1,        [r5 + 19 * 16]
11583    pmulhrsw      m3,    m7
11584    pmaddubsw     m5,    m4,        [r5 + 19 * 16]
11585    pmulhrsw      m5,    m7
11586    packuswb      m3,    m5
11587    movu          [r0 + 713 * 16],  m3
11588
11589    ; mode 13 [row 5]
11590    pmaddubsw     m3,    m6,        [r5 + 10 * 16]
11591    pmulhrsw      m3,    m7
11592    pmaddubsw     m5,    m2,        [r5 + 10 * 16]
11593    pmulhrsw      m5,    m7
11594    packuswb      m3,    m5
11595    movu          [r0 + 714 * 16],  m3
11596    pmaddubsw     m3,    m1,        [r5 + 10 * 16]
11597    pmulhrsw      m3,    m7
11598    pmaddubsw     m5,    m4,        [r5 + 10 * 16]
11599    pmulhrsw      m5,    m7
11600    packuswb      m3,    m5
11601    movu          [r0 + 715 * 16],  m3
11602
11603    ; mode 13 [row 6]
11604    pmaddubsw     m3,    m6,        [r5 + 1 * 16]
11605    pmulhrsw      m3,    m7
11606    pmaddubsw     m5,    m2,        [r5 + 1 * 16]
11607    pmulhrsw      m5,    m7
11608    packuswb      m3,    m5
11609    movu          [r0 + 716 * 16],  m3
11610    pmaddubsw     m3,    m1,        [r5 + 1 * 16]
11611    pmulhrsw      m3,    m7
11612    pmaddubsw     m5,    m4,        [r5 + 1 * 16]
11613    pmulhrsw      m5,    m7
11614    packuswb      m3,    m5
11615    movu          [r0 + 717 * 16],  m3
11616
11617    ; mode 14 [row 2]
11618    movu          m6,    m0
11619    pinsrb        m6,    [r4 +  0],  1
11620    pinsrb        m6,    [r3 +  2],  0
11621    pmaddubsw     m3,    m6,         [r5 + 25 * 16]
11622    pmulhrsw      m3,    m7
11623    pmaddubsw     m5,    m2,         [r5 + 25 * 16]
11624    pmulhrsw      m5,    m7
11625    packuswb      m3,    m5
11626    movu          [r0 + 772 * 16],   m3
11627    pmaddubsw     m3,    m1,         [r5 + 25 * 16]
11628    pmulhrsw      m3,    m7
11629    pmaddubsw     m5,    m4,         [r5 + 25 * 16]
11630    pmulhrsw      m5,    m7
11631    packuswb      m3,    m5
11632    movu          [r0 + 773 * 16],   m3
11633
11634    ; mode 14 [row 3]
11635    pmaddubsw     m3,    m6,         [r5 + 12 * 16]
11636    pmulhrsw      m3,    m7
11637    pmaddubsw     m5,    m2,         [r5 + 12 * 16]
11638    pmulhrsw      m5,    m7
11639    packuswb      m3,    m5
11640    movu          [r0 + 774 * 16],   m3
11641    pmaddubsw     m3,    m1,         [r5 + 12 * 16]
11642    pmulhrsw      m3,    m7
11643    pmaddubsw     m5,    m4,         [r5 + 12 * 16]
11644    pmulhrsw      m5,    m7
11645    packuswb      m3,    m5
11646    movu          [r0 + 775 * 16],   m3
11647
11648    ; mode 15 [row 1]
11649    pmaddubsw     m3,    m6,        [r5 + 30 * 16]
11650    pmulhrsw      m3,    m7
11651    pmaddubsw     m5,    m2,        [r5 + 30 * 16]
11652    pmulhrsw      m5,    m7
11653    packuswb      m3,    m5
11654    movu          [r0 + 834 * 16],  m3
11655    pmaddubsw     m3,    m1,        [r5 + 30 * 16]
11656    pmulhrsw      m3,    m7
11657    pmaddubsw     m5,    m4,        [r5 + 30 * 16]
11658    pmulhrsw      m5,    m7
11659    packuswb      m3,    m5
11660    movu          [r0 + 835 * 16],  m3
11661
11662    ; mode 15 [row 2]
11663    pmaddubsw     m3,    m6,        [r5 + 13 * 16]
11664    pmulhrsw      m3,    m7
11665    pmaddubsw     m5,    m2,        [r5 + 13 * 16]
11666    pmulhrsw      m5,    m7
11667    packuswb      m3,    m5
11668    movu          [r0 + 836 * 16],  m3
11669    pmaddubsw     m3,    m1,        [r5 + 13 * 16]
11670    pmulhrsw      m3,    m7
11671    pmaddubsw     m5,    m4,        [r5 + 13 * 16]
11672    pmulhrsw      m5,    m7
11673    packuswb      m3,    m5
11674    movu          [r0 + 837 * 16],  m3
11675
11676    ; mode 15 [row 3]
11677    pslldq        m6,    2
11678    pinsrb        m6,    [r3 +  2], 1
11679    pinsrb        m6,    [r3 +  4], 0
11680    pmaddubsw     m3,    m6,        [r5 + 28 * 16]
11681    pmulhrsw      m3,    m7
11682    pslldq        m2,    2
11683    pinsrb        m2,    [r4 + 7],  1
11684    pinsrb        m2,    [r4 + 6],  0
11685    pmaddubsw     m5,    m2,        [r5 + 28 * 16]
11686    pmulhrsw      m5,    m7
11687    packuswb      m3,    m5
11688    movu          [r0 + 838 * 16],  m3
11689    pslldq        m1,    2
11690    pinsrb        m1,    [r4 + 15], 1
11691    pinsrb        m1,    [r4 + 14], 0
11692    pmaddubsw     m3,    m1,        [r5 + 28 * 16]
11693    pmulhrsw      m3,    m7
11694    pslldq        m4,    2
11695    pinsrb        m4,    [r4 + 23], 1
11696    pinsrb        m4,    [r4 + 22], 0
11697    pmaddubsw     m5,    m4,        [r5 + 28 * 16]
11698    pmulhrsw      m5,    m7
11699    packuswb      m3,    m5
11700    movu          [r0 + 839 * 16],  m3
11701
11702    ; mode 15 [row 4]
11703    pmaddubsw     m3,    m6,        [r5 + 11 * 16]
11704    pmulhrsw      m3,    m7
11705    pmaddubsw     m5,    m2,        [r5 + 11 * 16]
11706    pmulhrsw      m5,    m7
11707    packuswb      m3,    m5
11708    movu          [r0 + 840 * 16],  m3
11709    pmaddubsw     m3,    m1,        [r5 + 11 * 16]
11710    pmulhrsw      m3,    m7
11711    pmaddubsw     m5,    m4,        [r5 + 11 * 16]
11712    pmulhrsw      m5,    m7
11713    packuswb      m3,    m5
11714    movu          [r0 + 841 * 16],  m3
11715
11716    ; mode 15 [row 5, 0-7]
11717    pslldq        m6,    2
11718    pinsrb        m6,    [r3 +  4], 1
11719    pinsrb        m6,    [r3 +  6], 0
11720    pmaddubsw     m3,    m6,        [r5 + 26 * 16]
11721    pmulhrsw      m3,    m7
11722    packuswb      m3,    m3
11723    movh          [r0 + 842 * 16],  m3
11724
11725    ; mode 15 [row 6, 0-7]
11726    pmaddubsw     m3,    m6,        [r5 + 9 * 16]
11727    pmulhrsw      m3,    m7
11728    packuswb      m3,    m3
11729    movh          [r0 + 844 * 16],  m3
11730
11731    ; mode 15 [row 7, 0-7]
11732    pslldq        m6,    2
11733    pinsrb        m6,    [r3 +  6], 1
11734    pinsrb        m6,    [r3 +  8], 0
11735    pmaddubsw     m3,    m6,        [r5 + 24 * 16]
11736    pmulhrsw      m3,    m7
11737    packuswb      m3,    m3
11738    movh          [r0 + 846 * 16],  m3
11739
11740    ; mode 15 [row 8, 0-7]
11741    pmaddubsw     m3,    m6,        [r5 + 7 * 16]
11742    pmulhrsw      m3,    m7
11743    packuswb      m3,    m3
11744    movh          [r0 + 848 * 16],  m3
11745
11746    ; mode 15 [row 9, 0-7]
11747    pslldq        m6,    2
11748    pinsrb        m6,    [r3 +  8], 1
11749    pinsrb        m6,    [r3 +  9], 0
11750    pmaddubsw     m3,    m6,        [r5 + 22 * 16]
11751    pmulhrsw      m3,    m7
11752    packuswb      m3,    m3
11753    movh          [r0 + 850 * 16],  m3
11754
11755    ; mode 15 [row 10, 0-7]
11756    pmaddubsw     m3,    m6,        [r5 + 5 * 16]
11757    pmulhrsw      m3,    m7
11758    packuswb      m3,    m3
11759    movh          [r0 + 852 * 16],  m3
11760
11761    ; mode 15 [row 11, 0-7]
11762    pslldq        m6,    2
11763    pinsrb        m6,    [r3 +  9], 1
11764    pinsrb        m6,    [r3 + 11], 0
11765    pmaddubsw     m3,    m6,        [r5 + 20 * 16]
11766    pmulhrsw      m3,    m7
11767    packuswb      m3,    m3
11768    movh          [r0 + 854 * 16],  m3
11769
11770    ; mode 15 [row 12, 0-7]
11771    pmaddubsw     m3,    m6,        [r5 + 3 * 16]
11772    pmulhrsw      m3,    m7
11773    packuswb      m3,    m3
11774    movh          [r0 + 856 * 16],  m3
11775
11776    ; mode 15 [row 13, 0-7]
11777    pslldq        m6,    2
11778    pinsrb        m6,    [r3 + 11], 1
11779    pinsrb        m6,    [r3 + 13], 0
11780    pmaddubsw     m3,    m6,        [r5 + 18 * 16]
11781    pmulhrsw      m3,    m7
11782    packuswb      m3,    m3
11783    movh          [r0 + 858 * 16],  m3
11784
11785    ; mode 15 [row 14, 0-7]
11786    pmaddubsw     m3,    m6,        [r5 + 1 * 16]
11787    pmulhrsw      m3,    m7
11788    packuswb      m3,    m3
11789    movh          [r0 + 860 * 16],  m3
11790
11791    ; mode 15 [row 15, 0-7]
11792    pslldq        m6,    2
11793    pinsrb        m6,    [r3 + 13], 1
11794    pinsrb        m6,    [r3 + 15], 0
11795    pmaddubsw     m3,    m6,        [r5 + 16 * 16]
11796    pmulhrsw      m3,    m7
11797    packuswb      m3,    m3
11798    movh          [r0 + 862 * 16],  m3
11799
11800    ; mode 15 [row 16, 0-7]
11801    pslldq        m6,    2
11802    pinsrb        m6,    [r3 + 15], 1
11803    pinsrb        m6,    [r3 + 17], 0
11804    pmaddubsw     m3,    m6,        [r5 + 31 * 16]
11805    pmulhrsw      m3,    m7
11806    packuswb      m3,    m3
11807    movh          [r0 + 864 * 16],  m3
11808
11809    ; mode 15 [row 17, 0-7]
11810    pmaddubsw     m3,    m6,        [r5 + 14 * 16]
11811    pmulhrsw      m3,    m7
11812    packuswb      m3,    m3
11813    movh          [r0 + 866 * 16],  m3
11814
11815    ; mode 15 [row 18, 0-7]
11816    pslldq        m6,    2
11817    pinsrb        m6,    [r3 + 17], 1
11818    pinsrb        m6,    [r3 + 19], 0
11819    pmaddubsw     m3,    m6,        [r5 + 29 * 16]
11820    pmulhrsw      m3,    m7
11821    packuswb      m3,    m3
11822    movh          [r0 + 868 * 16],  m3
11823
11824    ; mode 15 [row 19, 0-7]
11825    pmaddubsw     m3,    m6,        [r5 + 12 * 16]
11826    pmulhrsw      m3,    m7
11827    packuswb      m3,    m3
11828    movh          [r0 + 870 * 16],  m3
11829
11830    ; mode 15 [row 20, 0-7]
11831    pslldq        m6,    2
11832    pinsrb        m6,    [r3 + 19], 1
11833    pinsrb        m6,    [r3 + 21], 0
11834    pmaddubsw     m3,    m6,        [r5 + 27 * 16]
11835    pmulhrsw      m3,    m7
11836    packuswb      m3,    m3
11837    movh          [r0 + 872 * 16],  m3
11838
11839    ; mode 15 [row 21, 0-7]
11840    pmaddubsw     m3,    m6,        [r5 + 10 * 16]
11841    pmulhrsw      m3,    m7
11842    packuswb      m3,    m3
11843    movh          [r0 + 874 * 16],  m3
11844
11845    ; mode 15 [row 22, 0-7]
11846    pslldq        m6,    2
11847    pinsrb        m6,    [r3 + 21], 1
11848    pinsrb        m6,    [r3 + 23], 0
11849    pmaddubsw     m3,    m6,        [r5 + 25 * 16]
11850    pmulhrsw      m3,    m7
11851    packuswb      m3,    m3
11852    movh          [r0 + 876 * 16],  m3
11853
11854    ; mode 15 [row 23, 0-7]
11855    pmaddubsw     m3,    m6,        [r5 + 8 * 16]
11856    pmulhrsw      m3,    m7
11857    packuswb      m3,    m3
11858    movh          [r0 + 878 * 16],  m3
11859
11860    ; mode 15 [row 24, 0-7]
11861    pslldq        m6,    2
11862    pinsrb        m6,    [r3 + 23], 1
11863    pinsrb        m6,    [r3 + 24], 0
11864    pmaddubsw     m3,    m6,        [r5 + 23 * 16]
11865    pmulhrsw      m3,    m7
11866    packuswb      m3,    m3
11867    movh          [r0 + 880 * 16],  m3
11868
11869    ; mode 15 [row 25, 0-7]
11870    pmaddubsw     m3,    m6,        [r5 + 6 * 16]
11871    pmulhrsw      m3,    m7
11872    packuswb      m3,    m3
11873    movh          [r0 + 882 * 16],  m3
11874
11875    ; mode 15 [row 26, 0-7]
11876    pslldq        m6,    2
11877    pinsrb        m6,    [r3 + 24], 1
11878    pinsrb        m6,    [r3 + 26], 0
11879    pmaddubsw     m3,    m6,        [r5 + 21 * 16]
11880    pmulhrsw      m3,    m7
11881    packuswb      m3,    m3
11882    movh          [r0 + 884 * 16],  m3
11883
11884    ; mode 15 [row 27, 0-7]
11885    pmaddubsw     m3,    m6,        [r5 + 4 * 16]
11886    pmulhrsw      m3,    m7
11887    packuswb      m3,    m3
11888    movh          [r0 + 886 * 16],  m3
11889
11890    ; mode 15 [row 28, 0-7]
11891    pslldq        m6,    2
11892    pinsrb        m6,    [r3 + 26], 1
11893    pinsrb        m6,    [r3 + 28], 0
11894    pmaddubsw     m3,    m6,        [r5 + 19 * 16]
11895    pmulhrsw      m3,    m7
11896    packuswb      m3,    m3
11897    movh          [r0 + 888 * 16],  m3
11898
11899    ; mode 15 [row 29, 0-7]
11900    pmaddubsw     m3,    m6,        [r5 + 2 * 16]
11901    pmulhrsw      m3,    m7
11902    packuswb      m3,    m3
11903    movh          [r0 + 890 * 16],  m3
11904
11905    ; mode 15 [row 30, 0-7]
11906    pslldq        m6,    2
11907    pinsrb        m6,    [r3 + 28], 1
11908    pinsrb        m6,    [r3 + 30], 0
11909    pmaddubsw     m3,    m6,        [r5 + 17 * 16]
11910    pmulhrsw      m3,    m7
11911    packuswb      m3,    m3
11912    movh          [r0 + 892 * 16],  m3
11913
11914    ; mode 15 [row 31, 0-7]
11915    pshufb        m3,    m6,           [tab_S2]
11916    movh          [r0 + 894 * 16],     m3
11917
11918    ; mode 12 [row 12]
11919    pslldq        m0,    2
11920    pinsrb        m0,    [r3 +  6], 1
11921    pinsrb        m0,    [r3 + 13], 0
11922    pmaddubsw     m3,    m0,        [r5 + 31 * 16]
11923    pmulhrsw      m3,    m7
11924    pmaddubsw     m5,    m2,        [r5 + 31 * 16]
11925    pmulhrsw      m5,    m7
11926    packuswb      m3,    m5
11927    movu          [r0 + 664 * 16],  m3
11928    pmaddubsw     m3,    m1,        [r5 + 31 * 16]
11929    pmulhrsw      m3,    m7
11930    pmaddubsw     m5,    m4,        [r5 + 31 * 16]
11931    pmulhrsw      m5,    m7
11932    packuswb      m3,    m5
11933    movu          [r0 + 665 * 16],  m3
11934
11935    ; mode 12 [row 13]
11936    pmaddubsw     m3,    m0,        [r5 + 26 * 16]
11937    pmulhrsw      m3,    m7
11938    pmaddubsw     m5,    m2,        [r5 + 26 * 16]
11939    pmulhrsw      m5,    m7
11940    packuswb      m3,    m5
11941    movu          [r0 + 666 * 16],  m3
11942    pmaddubsw     m3,    m1,        [r5 + 26 * 16]
11943    pmulhrsw      m3,    m7
11944    pmaddubsw     m5,    m4,        [r5 + 26 * 16]
11945    pmulhrsw      m5,    m7
11946    packuswb      m3,    m5
11947    movu          [r0 + 667 * 16],  m3
11948
11949    ; mode 12 [row 14]
11950    pmaddubsw     m3,    m0,        [r5 + 21 * 16]
11951    pmulhrsw      m3,    m7
11952    pmaddubsw     m5,    m2,        [r5 + 21 * 16]
11953    pmulhrsw      m5,    m7
11954    packuswb      m3,    m5
11955    movu          [r0 + 668 * 16],  m3
11956    pmaddubsw     m3,    m1,        [r5 + 21 * 16]
11957    pmulhrsw      m3,    m7
11958    pmaddubsw     m5,    m4,        [r5 + 21 * 16]
11959    pmulhrsw      m5,    m7
11960    packuswb      m3,    m5
11961    movu          [r0 + 669 * 16],  m3
11962
11963    ; mode 12 [row 15]
11964    pmaddubsw     m3,    m0,        [r5 + 16 * 16]
11965    pmulhrsw      m3,    m7
11966    pmaddubsw     m5,    m2,        [r5 + 16 * 16]
11967    pmulhrsw      m5,    m7
11968    packuswb      m3,    m5
11969    movu          [r0 + 670 * 16],  m3
11970    pmaddubsw     m3,    m1,        [r5 + 16 * 16]
11971    pmulhrsw      m3,    m7
11972    pmaddubsw     m5,    m4,        [r5 + 16 * 16]
11973    pmulhrsw      m5,    m7
11974    packuswb      m3,    m5
11975    movu          [r0 + 671 * 16],  m3
11976
11977    ; mode 12 [row 16]
11978    pmaddubsw     m3,    m0,        [r5 + 11 * 16]
11979    pmulhrsw      m3,    m7
11980    pmaddubsw     m5,    m2,        [r5 + 11 * 16]
11981    pmulhrsw      m5,    m7
11982    packuswb      m3,    m5
11983    movu          [r0 + 672 * 16],  m3
11984    pmaddubsw     m3,    m1,        [r5 + 11 * 16]
11985    pmulhrsw      m3,    m7
11986    pmaddubsw     m5,    m4,        [r5 + 11 * 16]
11987    pmulhrsw      m5,    m7
11988    packuswb      m3,    m5
11989    movu          [r0 + 673 * 16],  m3
11990
11991    ; mode 12 [row 17]
11992    pmaddubsw     m3,    m0,        [r5 + 6 * 16]
11993    pmulhrsw      m3,    m7
11994    pmaddubsw     m5,    m2,        [r5 + 6 * 16]
11995    pmulhrsw      m5,    m7
11996    packuswb      m3,    m5
11997    movu          [r0 + 674 * 16],  m3
11998    pmaddubsw     m3,    m1,        [r5 + 6 * 16]
11999    pmulhrsw      m3,    m7
12000    pmaddubsw     m5,    m4,        [r5 + 6 * 16]
12001    pmulhrsw      m5,    m7
12002    packuswb      m3,    m5
12003    movu          [r0 + 675 * 16],  m3
12004
12005    ; mode 12 [row 18]
12006    pmaddubsw     m3,    m0,        [r5 + 1 * 16]
12007    pmulhrsw      m3,    m7
12008    pmaddubsw     m5,    m2,        [r5 + 1 * 16]
12009    pmulhrsw      m5,    m7
12010    packuswb      m3,    m5
12011    movu          [r0 + 676 * 16],  m3
12012    pmaddubsw     m3,    m1,        [r5 + 1 * 16]
12013    pmulhrsw      m3,    m7
12014    pmaddubsw     m5,    m4,        [r5 + 1 * 16]
12015    pmulhrsw      m5,    m7
12016    packuswb      m3,    m5
12017    movu          [r0 + 677 * 16],  m3
12018
12019    ; mode 13 [row 7]
12020    movu          m6,    m0
12021    pinsrb        m6,    [r3 + 4],  2
12022    pinsrb        m6,    [r3 + 4],  1
12023    pinsrb        m6,    [r3 + 7],  0
12024    pmaddubsw     m3,    m6,        [r5 + 24 * 16]
12025    pmulhrsw      m3,    m7
12026    pmaddubsw     m5,    m2,        [r5 + 24 * 16]
12027    pmulhrsw      m5,    m7
12028    packuswb      m3,    m5
12029    movu          [r0 + 718 * 16],  m3
12030    pmaddubsw     m3,    m1,        [r5 + 24 * 16]
12031    pmulhrsw      m3,    m7
12032    pmaddubsw     m5,    m4,        [r5 + 24 * 16]
12033    pmulhrsw      m5,    m7
12034    packuswb      m3,    m5
12035    movu          [r0 + 719 * 16],  m3
12036
12037    ; mode 13 [row 8]
12038    pmaddubsw     m3,    m6,        [r5 + 15 * 16]
12039    pmulhrsw      m3,    m7
12040    pmaddubsw     m5,    m2,        [r5 + 15 * 16]
12041    pmulhrsw      m5,    m7
12042    packuswb      m3,    m5
12043    movu          [r0 + 720 * 16],  m3
12044    pmaddubsw     m3,    m1,        [r5 + 15 * 16]
12045    pmulhrsw      m3,    m7
12046    pmaddubsw     m5,    m4,        [r5 + 15 * 16]
12047    pmulhrsw      m5,    m7
12048    packuswb      m3,    m5
12049    movu          [r0 + 721 * 16],  m3
12050
12051    ; mode 13 [row 9]
12052    pmaddubsw     m3,    m6,        [r5 + 6 * 16]
12053    pmulhrsw      m3,    m7
12054    pmaddubsw     m5,    m2,        [r5 + 6 * 16]
12055    pmulhrsw      m5,    m7
12056    packuswb      m3,    m5
12057    movu          [r0 + 722 * 16],  m3
12058    pmaddubsw     m3,    m1,        [r5 + 6 * 16]
12059    pmulhrsw      m3,    m7
12060    pmaddubsw     m5,    m4,        [r5 + 6 * 16]
12061    pmulhrsw      m5,    m7
12062    packuswb      m3,    m5
12063    movu          [r0 + 723 * 16],  m3
12064
12065    ; mode 14 [row 4]
12066    pinsrb        m6,    [r3 + 2],  2
12067    pinsrb        m6,    [r3 + 2],  1
12068    pinsrb        m6,    [r3 + 5],  0
12069    pmaddubsw     m3,    m6,        [r5 + 31 * 16]
12070    pmulhrsw      m3,    m7
12071    pmaddubsw     m5,    m2,        [r5 + 31 * 16]
12072    pmulhrsw      m5,    m7
12073    packuswb      m3,    m5
12074    movu          [r0 + 776 * 16],  m3
12075    pmaddubsw     m3,    m1,        [r5 + 31 * 16]
12076    pmulhrsw      m3,    m7
12077    pmaddubsw     m5,    m4,        [r5 + 31 * 16]
12078    pmulhrsw      m5,    m7
12079    packuswb      m3,    m5
12080    movu          [r0 + 777 * 16],  m3
12081
12082    ; mode 14 [row 5]
12083    pmaddubsw     m3,    m6,        [r5 + 18 * 16]
12084    pmulhrsw      m3,    m7
12085    pmaddubsw     m5,    m2,        [r5 + 18 * 16]
12086    pmulhrsw      m5,    m7
12087    packuswb      m3,    m5
12088    movu          [r0 + 778 * 16],  m3
12089    pmaddubsw     m3,    m1,        [r5 + 18 * 16]
12090    pmulhrsw      m3,    m7
12091    pmaddubsw     m5,    m4,        [r5 + 18 * 16]
12092    pmulhrsw      m5,    m7
12093    packuswb      m3,    m5
12094    movu          [r0 + 779 * 16],  m3
12095
12096    ; mode 14 [row 6]
12097    pmaddubsw     m3,    m6,        [r5 + 5 * 16]
12098    pmulhrsw      m3,    m7
12099    pmaddubsw     m5,    m2,        [r5 + 5 * 16]
12100    pmulhrsw      m5,    m7
12101    packuswb      m3,    m5
12102    movu          [r0 + 780 * 16],  m3
12103    pmaddubsw     m3,    m1,        [r5 + 5 * 16]
12104    pmulhrsw      m3,    m7
12105    pmaddubsw     m5,    m4,        [r5 + 5 * 16]
12106    pmulhrsw      m5,    m7
12107    packuswb      m3,    m5
12108    movu          [r0 + 781 * 16],  m3
12109
12110    ; mode 14 [row 7]
12111    pslldq        m6,    2
12112    pinsrb        m6,    [r3 + 5], 1
12113    pinsrb        m6,    [r3 + 7], 0
12114    pmaddubsw     m3,    m6,        [r5 + 24 * 16]
12115    pmulhrsw      m3,    m7
12116    pslldq        m2,    2
12117    pinsrw         m2,    [r4 + 5], 0
12118    pmaddubsw     m5,    m2,        [r5 + 24 * 16]
12119    pmulhrsw      m5,    m7
12120    packuswb      m3,    m5
12121    movu          [r0 + 782 * 16],  m3
12122    pslldq        m1,    2
12123    pinsrw        m1,    [r4 + 13], 0
12124    pmaddubsw     m3,    m1,        [r5 + 24 * 16]
12125    pmulhrsw      m3,    m7
12126    pslldq        m4,    2
12127    pinsrw        m4,    [r4 + 21], 0
12128    pmaddubsw     m5,    m4,        [r5 + 24 * 16]
12129    pmulhrsw      m5,    m7
12130    packuswb      m3,    m5
12131    movu          [r0 + 783 * 16],  m3
12132
12133    ; mode 14 [row 8]
12134    pmaddubsw     m3,    m6,        [r5 + 11 * 16]
12135    pmulhrsw      m3,    m7
12136    pmaddubsw     m5,    m2,        [r5 + 11 * 16]
12137    pmulhrsw      m5,    m7
12138    packuswb      m3,    m5
12139    movu          [r0 + 784 * 16],  m3
12140    pmaddubsw     m3,    m1,        [r5 + 11 * 16]
12141    pmulhrsw      m3,    m7
12142    pmaddubsw     m5,    m4,        [r5 + 11 * 16]
12143    pmulhrsw      m5,    m7
12144    packuswb      m3,    m5
12145    movu          [r0 + 785 * 16],  m3
12146
12147    ; mode 15 [row 5, 8-31]
12148    pmaddubsw     m5,    m2,            [r5 + 26 * 16]
12149    pmulhrsw      m5,    m7
12150    packuswb      m5,    m5
12151    movh          [r0 + 842 * 16 + 8],  m5
12152    pmaddubsw     m3,    m1,            [r5 + 26 * 16]
12153    pmulhrsw      m3,    m7
12154    pmaddubsw     m5,    m4,            [r5 + 26 * 16]
12155    pmulhrsw      m5,    m7
12156    packuswb      m3,    m5
12157    movu          [r0 + 843 * 16],      m3
12158
12159    ; mode 15 [row 6, 8-31]
12160    pmaddubsw     m5,    m2,            [r5 + 9 * 16]
12161    pmulhrsw      m5,    m7
12162    packuswb      m5,    m5
12163    movh          [r0 + 844 * 16 + 8],  m5
12164    pmaddubsw     m3,    m1,            [r5 + 9 * 16]
12165    pmulhrsw      m3,    m7
12166    pmaddubsw     m5,    m4,            [r5 + 9 * 16]
12167    pmulhrsw      m5,    m7
12168    packuswb      m3,    m5
12169    movu          [r0 + 845 * 16],      m3
12170
12171    ; mode 12 [row 19]
12172    pslldq        m0,    2
12173    pinsrb        m0,    [r3 + 13], 1
12174    pinsrb        m0,    [r3 + 19], 0
12175    pmaddubsw     m3,    m0,        [r5 + 28 * 16]
12176    pmulhrsw      m3,    m7
12177    pmaddubsw     m5,    m2,        [r5 + 28 * 16]
12178    pmulhrsw      m5,    m7
12179    packuswb      m3,    m5
12180    movu          [r0 + 678 * 16],  m3
12181    pmaddubsw     m3,    m1,        [r5 + 28 * 16]
12182    pmulhrsw      m3,    m7
12183    pmaddubsw     m5,    m4,        [r5 + 28 * 16]
12184    pmulhrsw      m5,    m7
12185    packuswb      m3,    m5
12186    movu          [r0 + 679 * 16],  m3
12187
12188    ; mode 12 [row 20]
12189    pmaddubsw     m3,    m0,        [r5 + 23 * 16]
12190    pmulhrsw      m3,    m7
12191    pmaddubsw     m5,    m2,        [r5 + 23 * 16]
12192    pmulhrsw      m5,    m7
12193    packuswb      m3,    m5
12194    movu          [r0 + 680 * 16],  m3
12195    pmaddubsw     m3,    m1,        [r5 + 23 * 16]
12196    pmulhrsw      m3,    m7
12197    pmaddubsw     m5,    m4,        [r5 + 23 * 16]
12198    pmulhrsw      m5,    m7
12199    packuswb      m3,    m5
12200    movu          [r0 + 681 * 16],  m3
12201
12202    ; mode 12 [row 21]
12203    pmaddubsw     m3,    m0,        [r5 + 18 * 16]
12204    pmulhrsw      m3,    m7
12205    pmaddubsw     m5,    m2,        [r5 + 18 * 16]
12206    pmulhrsw      m5,    m7
12207    packuswb      m3,    m5
12208    movu          [r0 + 682 * 16],  m3
12209    pmaddubsw     m3,    m1,        [r5 + 18 * 16]
12210    pmulhrsw      m3,    m7
12211    pmaddubsw     m5,    m4,        [r5 + 18 * 16]
12212    pmulhrsw      m5,    m7
12213    packuswb      m3,    m5
12214    movu          [r0 + 683 * 16],  m3
12215
12216    ; mode 12 [row 22]
12217    pmaddubsw     m3,    m0,        [r5 + 13 * 16]
12218    pmulhrsw      m3,    m7
12219    pmaddubsw     m5,    m2,        [r5 + 13 * 16]
12220    pmulhrsw      m5,    m7
12221    packuswb      m3,    m5
12222    movu          [r0 + 684 * 16],  m3
12223    pmaddubsw     m3,    m1,        [r5 + 13 * 16]
12224    pmulhrsw      m3,    m7
12225    pmaddubsw     m5,    m4,        [r5 + 13 * 16]
12226    pmulhrsw      m5,    m7
12227    packuswb      m3,    m5
12228    movu          [r0 + 685 * 16],  m3
12229
12230    ; mode 12 [row 23]
12231    pmaddubsw     m3,    m0,        [r5 + 8 * 16]
12232    pmulhrsw      m3,    m7
12233    pmaddubsw     m5,    m2,        [r5 + 8 * 16]
12234    pmulhrsw      m5,    m7
12235    packuswb      m3,    m5
12236    movu          [r0 + 686 * 16],  m3
12237    pmaddubsw     m3,    m1,        [r5 + 8 * 16]
12238    pmulhrsw      m3,    m7
12239    pmaddubsw     m5,    m4,        [r5 + 8 * 16]
12240    pmulhrsw      m5,    m7
12241    packuswb      m3,    m5
12242    movu          [r0 + 687 * 16],  m3
12243
12244    ; mode 12 [row 24]
12245    pmaddubsw     m3,    m0,        [r5 + 3 * 16]
12246    pmulhrsw      m3,    m7
12247    pmaddubsw     m5,    m2,        [r5 + 3 * 16]
12248    pmulhrsw      m5,    m7
12249    packuswb      m3,    m5
12250    movu          [r0 + 688 * 16],  m3
12251    pmaddubsw     m3,    m1,        [r5 + 3 * 16]
12252    pmulhrsw      m3,    m7
12253    pmaddubsw     m5,    m4,        [r5 + 3 * 16]
12254    pmulhrsw      m5,    m7
12255    packuswb      m3,    m5
12256    movu          [r0 + 689 * 16],  m3
12257
12258    ; mode 13 [row 10]
12259    movu          m7,    m6
12260    movu          m6,    m0
12261    pinsrb        m6,    [r3 + 4],  4
12262    pinsrb        m6,    [r3 + 4],  3
12263    pinsrb        m6,    [r3 + 7],  2
12264    pinsrb        m6,    [r3 + 7],  1
12265    pinsrb        m6,    [r3 + 11], 0
12266    pmaddubsw     m3,    m6,        [r5 + 29 * 16]
12267    pmulhrsw      m3,    [pw_1024]
12268    pmaddubsw     m5,    m2,        [r5 + 29 * 16]
12269    pmulhrsw      m5,    [pw_1024]
12270    packuswb      m3,    m5
12271    movu          [r0 + 724 * 16],  m3
12272    pmaddubsw     m3,    m1,        [r5 + 29 * 16]
12273    pmulhrsw      m3,    [pw_1024]
12274    pmaddubsw     m5,    m4,        [r5 + 29 * 16]
12275    pmulhrsw      m5,    [pw_1024]
12276    packuswb      m3,    m5
12277    movu          [r0 + 725 * 16],  m3
12278
12279    ; mode 13 [row 11]
12280    pmaddubsw     m3,    m6,        [r5 + 20 * 16]
12281    pmulhrsw      m3,    [pw_1024]
12282    pmaddubsw     m5,    m2,        [r5 + 20 * 16]
12283    pmulhrsw      m5,    [pw_1024]
12284    packuswb      m3,    m5
12285    movu          [r0 + 726 * 16],  m3
12286    pmaddubsw     m3,    m1,        [r5 + 20 * 16]
12287    pmulhrsw      m3,    [pw_1024]
12288    pmaddubsw     m5,    m4,        [r5 + 20 * 16]
12289    pmulhrsw      m5,    [pw_1024]
12290    packuswb      m3,    m5
12291    movu          [r0 + 727 * 16],  m3
12292
12293    ; mode 13 [row 12]
12294    pmaddubsw     m3,    m6,        [r5 + 11 * 16]
12295    pmulhrsw      m3,    [pw_1024]
12296    pmaddubsw     m5,    m2,        [r5 + 11 * 16]
12297    pmulhrsw      m5,    [pw_1024]
12298    packuswb      m3,    m5
12299    movu          [r0 + 728 * 16],  m3
12300    pmaddubsw     m3,    m1,        [r5 + 11 * 16]
12301    pmulhrsw      m3,    [pw_1024]
12302    pmaddubsw     m5,    m4,        [r5 + 11 * 16]
12303    pmulhrsw      m5,    [pw_1024]
12304    packuswb      m3,    m5
12305    movu          [r0 + 729 * 16],  m3
12306
12307    ; mode 13 [row 13]
12308    pmaddubsw     m3,    m6,        [r5 + 2 * 16]
12309    pmulhrsw      m3,    [pw_1024]
12310    pmaddubsw     m5,    m2,        [r5 + 2 * 16]
12311    pmulhrsw      m5,    [pw_1024]
12312    packuswb      m3,    m5
12313    movu          [r0 + 730 * 16],  m3
12314    pmaddubsw     m3,    m1,        [r5 + 2 * 16]
12315    pmulhrsw      m3,    [pw_1024]
12316    pmaddubsw     m5,    m4,        [r5 + 2 * 16]
12317    pmulhrsw      m5,    [pw_1024]
12318    packuswb      m3,    m5
12319    movu          [r0 + 731 * 16],  m3
12320
12321    ; mode 14 [row 9]
12322    pslldq        m7,    2
12323    pinsrb        m7,    [r3 +  7], 1
12324    pinsrb        m7,    [r3 + 10], 0
12325    pmaddubsw     m3,    m7,        [r5 + 30 * 16]
12326    pmulhrsw      m3,    [pw_1024]
12327    pslldq        m2,    2
12328    pinsrw        m2,     [r4 + 4],  0
12329    pmaddubsw     m5,    m2,        [r5 + 30 * 16]
12330    pmulhrsw      m5,    [pw_1024]
12331    packuswb      m3,    m5
12332    movu          [r0 + 786 * 16],  m3
12333    pslldq        m1,    2
12334    pinsrw        m1,    [r4 + 12], 0
12335    pmaddubsw     m3,    m1,        [r5 + 30 * 16]
12336    pmulhrsw      m3,    [pw_1024]
12337    pslldq        m4,    2
12338    pinsrb        m4,    [r4 + 21], 1
12339    pinsrb        m4,    [r4 + 20], 0
12340    pmaddubsw     m5,    m4,        [r5 + 30 * 16]
12341    pmulhrsw      m5,    [pw_1024]
12342    packuswb      m3,    m5
12343    movu          [r0 + 787 * 16],  m3
12344
12345    ; mode 14 [row 10]
12346    pmaddubsw     m3,    m7,        [r5 + 17 * 16]
12347    pmulhrsw      m3,    [pw_1024]
12348    pmaddubsw     m5,    m2,        [r5 + 17 * 16]
12349    pmulhrsw      m5,    [pw_1024]
12350    packuswb      m3,    m5
12351    movu          [r0 + 788 * 16],  m3
12352    pmaddubsw     m3,    m1,        [r5 + 17 * 16]
12353    pmulhrsw      m3,    [pw_1024]
12354    pmaddubsw     m5,    m4,        [r5 + 17 * 16]
12355    pmulhrsw      m5,    [pw_1024]
12356    packuswb      m3,    m5
12357    movu          [r0 + 789 * 16],  m3
12358
12359    ; mode 14 [row 11]
12360    pmaddubsw     m3,    m7,        [r5 + 4 * 16]
12361    pmulhrsw      m3,    [pw_1024]
12362    pmaddubsw     m5,    m2,        [r5 + 4 * 16]
12363    pmulhrsw      m5,    [pw_1024]
12364    packuswb      m3,    m5
12365    movu          [r0 + 790 * 16],  m3
12366    pmaddubsw     m3,    m1,        [r5 + 4 * 16]
12367    pmulhrsw      m3,    [pw_1024]
12368    pmaddubsw     m5,    m4,        [r5 + 4 * 16]
12369    pmulhrsw      m5,    [pw_1024]
12370    packuswb      m3,    m5
12371    movu          [r0 + 791 * 16],  m3
12372
12373    movu          m6,    [pw_1024]
12374
12375    ; mode 15 [row 7, 8-31]
12376    pmaddubsw     m5,    m2,            [r5 + 24 * 16]
12377    pmulhrsw      m5,    m6
12378    packuswb      m5,    m5
12379    movh          [r0 + 846 * 16 + 8],  m5
12380    pmaddubsw     m3,    m1,            [r5 + 24 * 16]
12381    pmulhrsw      m3,    m6
12382    pmaddubsw     m5,    m4,            [r5 + 24 * 16]
12383    pmulhrsw      m5,    m6
12384    packuswb      m3,    m5
12385    movu          [r0 + 847 * 16],      m3
12386
12387    ; mode 15 [row 8, 8-31]
12388    pmaddubsw     m5,    m2,            [r5 + 7 * 16]
12389    pmulhrsw      m5,    m6
12390    packuswb      m5,    m5
12391    movh          [r0 + 848 * 16 + 8],  m5
12392    pmaddubsw     m3,    m1,            [r5 + 7 * 16]
12393    pmulhrsw      m3,    m6
12394    pmaddubsw     m5,    m4,            [r5 + 7 * 16]
12395    pmulhrsw      m5,    m6
12396    packuswb      m3,    m5
12397    movu          [r0 + 849 * 16],      m3
12398
12399    ; mode 12 [row 25]
12400    pslldq        m0,    2
12401    pinsrb        m0,    [r3 + 19], 1
12402    pinsrb        m0,    [r3 + 26], 0
12403    pmaddubsw     m3,    m0,        [r5 + 30 * 16]
12404    pmulhrsw      m3,    [pw_1024]
12405    pmaddubsw     m5,    m2,        [r5 + 30 * 16]
12406    pmulhrsw      m5,    [pw_1024]
12407    packuswb      m3,    m5
12408    movu          [r0 + 690 * 16],  m3
12409    pmaddubsw     m3,    m1,        [r5 + 30 * 16]
12410    pmulhrsw      m3,    [pw_1024]
12411    pmaddubsw     m5,    m4,        [r5 + 30 * 16]
12412    pmulhrsw      m5,    [pw_1024]
12413    packuswb      m3,    m5
12414    movu          [r0 + 691 * 16],  m3
12415
12416    ; mode 12 [row 26]
12417    pmaddubsw     m3,    m0,        [r5 + 25 * 16]
12418    pmulhrsw      m3,    [pw_1024]
12419    pmaddubsw     m5,    m2,        [r5 + 25 * 16]
12420    pmulhrsw      m5,    [pw_1024]
12421    packuswb      m3,    m5
12422    movu          [r0 + 692 * 16],  m3
12423    pmaddubsw     m3,    m1,        [r5 + 25 * 16]
12424    pmulhrsw      m3,    [pw_1024]
12425    pmaddubsw     m5,    m4,        [r5 + 25 * 16]
12426    pmulhrsw      m5,    [pw_1024]
12427    packuswb      m3,    m5
12428    movu          [r0 + 693 * 16],  m3
12429
12430    ; mode 12 [row 27]
12431    pmaddubsw     m3,    m0,        [r5 + 20 * 16]
12432    pmulhrsw      m3,    [pw_1024]
12433    pmaddubsw     m5,    m2,        [r5 + 20 * 16]
12434    pmulhrsw      m5,    [pw_1024]
12435    packuswb      m3,    m5
12436    movu          [r0 + 694 * 16],  m3
12437    pmaddubsw     m3,    m1,        [r5 + 20 * 16]
12438    pmulhrsw      m3,    [pw_1024]
12439    pmaddubsw     m5,    m4,        [r5 + 20 * 16]
12440    pmulhrsw      m5,    [pw_1024]
12441    packuswb      m3,    m5
12442    movu          [r0 + 695 * 16],  m3
12443
12444    ; mode 12 [row 28]
12445    pmaddubsw     m3,    m0,        [r5 + 15 * 16]
12446    pmulhrsw      m3,    [pw_1024]
12447    pmaddubsw     m5,    m2,        [r5 + 15 * 16]
12448    pmulhrsw      m5,    [pw_1024]
12449    packuswb      m3,    m5
12450    movu          [r0 + 696 * 16],  m3
12451    pmaddubsw     m3,    m1,        [r5 + 15 * 16]
12452    pmulhrsw      m3,    [pw_1024]
12453    pmaddubsw     m5,    m4,        [r5 + 15 * 16]
12454    pmulhrsw      m5,    [pw_1024]
12455    packuswb      m3,    m5
12456    movu          [r0 + 697 * 16],  m3
12457
12458    ; mode 12 [row 29]
12459    pmaddubsw     m3,    m0,        [r5 + 10 * 16]
12460    pmulhrsw      m3,    [pw_1024]
12461    pmaddubsw     m5,    m2,        [r5 + 10 * 16]
12462    pmulhrsw      m5,    [pw_1024]
12463    packuswb      m3,    m5
12464    movu          [r0 + 698 * 16],  m3
12465    pmaddubsw     m3,    m1,        [r5 + 10 * 16]
12466    pmulhrsw      m3,    [pw_1024]
12467    pmaddubsw     m5,    m4,        [r5 + 10 * 16]
12468    pmulhrsw      m5,    [pw_1024]
12469    packuswb      m3,    m5
12470    movu          [r0 + 699 * 16],  m3
12471
12472    ; mode 12 [row 30]
12473    pmaddubsw     m3,    m0,        [r5 + 5 * 16]
12474    pmulhrsw      m3,    [pw_1024]
12475    pmaddubsw     m5,    m2,        [r5 + 5 * 16]
12476    pmulhrsw      m5,    [pw_1024]
12477    packuswb      m3,    m5
12478    movu          [r0 + 700 * 16],  m3
12479    pmaddubsw     m3,    m1,        [r5 + 5 * 16]
12480    pmulhrsw      m3,    [pw_1024]
12481    pmaddubsw     m5,    m4,        [r5 + 5 * 16]
12482    pmulhrsw      m5,    [pw_1024]
12483    packuswb      m3,    m5
12484    movu          [r0 + 701 * 16],  m3
12485
12486    ; mode 13 [row 14]
12487    movu          m6,    m0
12488    pinsrb        m6,    [r3 +  4], 6
12489    pinsrb        m6,    [r3 +  4], 5
12490    pinsrb        m6,    [r3 +  7], 4
12491    pinsrb        m6,    [r3 +  7], 3
12492    pinsrb        m6,    [r3 + 11], 2
12493    pinsrb        m6,    [r3 + 11], 1
12494    pinsrb        m6,    [r3 + 14], 0
12495    pmaddubsw     m3,    m6,        [r5 + 25 * 16]
12496    pmulhrsw      m3,    [pw_1024]
12497    pmaddubsw     m5,    m2,        [r5 + 25 * 16]
12498    pmulhrsw      m5,    [pw_1024]
12499    packuswb      m3,    m5
12500    movu          [r0 + 732 * 16],  m3
12501    pmaddubsw     m3,    m1,        [r5 + 25 * 16]
12502    pmulhrsw      m3,    [pw_1024]
12503    pmaddubsw     m5,    m4,        [r5 + 25 * 16]
12504    pmulhrsw      m5,    [pw_1024]
12505    packuswb      m3,    m5
12506    movu          [r0 + 733 * 16],  m3
12507
12508    ; mode 13 [row 15]
12509    pmaddubsw     m3,    m6,        [r5 + 16 * 16]
12510    pmulhrsw      m3,    [pw_1024]
12511    pmaddubsw     m5,    m2,        [r5 + 16 * 16]
12512    pmulhrsw      m5,    [pw_1024]
12513    packuswb      m3,    m5
12514    movu          [r0 + 734 * 16],  m3
12515    pmaddubsw     m3,    m1,        [r5 + 16 * 16]
12516    pmulhrsw      m3,    [pw_1024]
12517    pmaddubsw     m5,    m4,        [r5 + 16 * 16]
12518    pmulhrsw      m5,    [pw_1024]
12519    packuswb      m3,    m5
12520    movu          [r0 + 735 * 16],  m3
12521
12522    ; mode 13 [row 16]
12523    pmaddubsw     m3,    m6,        [r5 + 7 * 16]
12524    pmulhrsw      m3,    [pw_1024]
12525    pmaddubsw     m5,    m2,        [r5 + 7 * 16]
12526    pmulhrsw      m5,    [pw_1024]
12527    packuswb      m3,    m5
12528    movu          [r0 + 736 * 16],  m3
12529    pmaddubsw     m3,    m1,        [r5 + 7 * 16]
12530    pmulhrsw      m3,    [pw_1024]
12531    pmaddubsw     m5,    m4,        [r5 + 7 * 16]
12532    pmulhrsw      m5,    [pw_1024]
12533    packuswb      m3,    m5
12534    movu          [r0 + 737 * 16],  m3
12535
12536    ; mode 13 [row 17]
12537    pslldq        m6,    2
12538    pinsrb        m6,    [r3 + 14],  1
12539    pinsrb        m6,    [r3 + 18],  0
12540    pmaddubsw     m3,    m6,         [r5 + 30 * 16]
12541    pmulhrsw      m3,    [pw_1024]
12542    pslldq        m2,    2
12543    pinsrw        m2,     [r4 + 3],  0
12544    pmaddubsw     m5,    m2,        [r5 + 30 * 16]
12545    pmulhrsw      m5,    [pw_1024]
12546    packuswb      m3,    m5
12547    movu          [r0 + 738 * 16],  m3
12548    pslldq        m1,    2
12549    pinsrw        m1,    [r4 + 11], 0
12550    pmaddubsw     m3,    m1,        [r5 + 30 * 16]
12551    pmulhrsw      m3,    [pw_1024]
12552    pslldq        m4,    2
12553    pinsrw        m4,    [r4 + 19], 0
12554    pmaddubsw     m5,    m4,        [r5 + 30 * 16]
12555    pmulhrsw      m5,    [pw_1024]
12556    packuswb      m3,               m5
12557    movu          [r0 + 739 * 16],  m3
12558
12559    ; mode 13 [row 18]
12560    pmaddubsw     m3,    m6,        [r5 + 21 * 16]
12561    pmulhrsw      m3,    [pw_1024]
12562    pmaddubsw     m5,    m2,        [r5 + 21 * 16]
12563    pmulhrsw      m5,    [pw_1024]
12564    packuswb      m3,    m5
12565    movu          [r0 + 740 * 16],  m3
12566    pmaddubsw     m3,    m1,        [r5 + 21 * 16]
12567    pmulhrsw      m3,    [pw_1024]
12568    pmaddubsw     m5,    m4,        [r5 + 21 * 16]
12569    pmulhrsw      m5,    [pw_1024]
12570    packuswb      m3,    m5
12571    movu          [r0 + 741 * 16],  m3
12572
12573    ; mode 13 [row 19]
12574    pmaddubsw     m3,    m6,        [r5 + 12 * 16]
12575    pmulhrsw      m3,    [pw_1024]
12576    pmaddubsw     m5,    m2,        [r5 + 12 * 16]
12577    pmulhrsw      m5,    [pw_1024]
12578    packuswb      m3,    m5
12579    movu          [r0 + 742 * 16],  m3
12580    pmaddubsw     m3,    m1,        [r5 + 12 * 16]
12581    pmulhrsw      m3,    [pw_1024]
12582    pmaddubsw     m5,    m4,        [r5 + 12 * 16]
12583    pmulhrsw      m5,    [pw_1024]
12584    packuswb      m3,    m5
12585    movu          [r0 + 743 * 16],  m3
12586
12587    ; mode 13 [row 20]
12588    pmaddubsw     m3,    m6,        [r5 + 3 * 16]
12589    pmulhrsw      m3,    [pw_1024]
12590    pmaddubsw     m5,    m2,        [r5 + 3 * 16]
12591    pmulhrsw      m5,    [pw_1024]
12592    packuswb      m3,    m5
12593    movu          [r0 + 744 * 16],  m3
12594    pmaddubsw     m3,    m1,        [r5 + 3 * 16]
12595    pmulhrsw      m3,    [pw_1024]
12596    pmaddubsw     m5,    m4,        [r5 + 3 * 16]
12597    pmulhrsw      m5,    [pw_1024]
12598    packuswb      m3,    m5
12599    movu          [r0 + 745 * 16],  m3
12600
12601    ; mode 14 [row 12]
12602    pslldq        m7,    2
12603    pinsrb        m7,    [r3 + 10], 1
12604    pinsrb        m7,    [r3 + 12], 0
12605    pmaddubsw     m3,    m7,        [r5 + 23 * 16]
12606    pmulhrsw      m3,    [pw_1024]
12607    pmaddubsw     m5,    m2,        [r5 + 23 * 16]
12608    pmulhrsw      m5,    [pw_1024]
12609    packuswb      m3,    m5
12610    movu          [r0 + 792 * 16],  m3
12611    pmaddubsw     m3,    m1,        [r5 + 23 * 16]
12612    pmulhrsw      m3,    [pw_1024]
12613    pmaddubsw     m5,    m4,        [r5 + 23 * 16]
12614    pmulhrsw      m5,    [pw_1024]
12615    packuswb      m3,    m5
12616    movu          [r0 + 793 * 16],  m3
12617
12618    ; mode 14 [row 13]
12619    pmaddubsw     m3,    m7,        [r5 + 10 * 16]
12620    pmulhrsw      m3,    [pw_1024]
12621    pmaddubsw     m5,    m2,        [r5 + 10 * 16]
12622    pmulhrsw      m5,    [pw_1024]
12623    packuswb      m3,    m5
12624    movu          [r0 + 794 * 16],  m3
12625    pmaddubsw     m3,    m1,        [r5 + 10 * 16]
12626    pmulhrsw      m3,    [pw_1024]
12627    pmaddubsw     m5,    m4,        [r5 + 10 * 16]
12628    pmulhrsw      m5,    [pw_1024]
12629    packuswb      m3,    m5
12630    movu          [r0 + 795 * 16],  m3
12631
12632    ; mode 15 [row 9]
12633    pmaddubsw     m5,    m2,            [r5 + 22 * 16]
12634    pmulhrsw      m5,    [pw_1024]
12635    packuswb      m5,    m5
12636    movu          [r0 + 850 * 16 + 8],  m5
12637    pmaddubsw     m3,    m1,            [r5 + 22 * 16]
12638    pmulhrsw      m3,    [pw_1024]
12639    pmaddubsw     m5,    m4,            [r5 + 22 * 16]
12640    pmulhrsw      m5,    [pw_1024]
12641    packuswb      m3,    m5
12642    movu          [r0 + 851 * 16],      m3
12643
12644    ; mode 15 [row 10]
12645    pmaddubsw     m5,    m2,            [r5 + 5 * 16]
12646    pmulhrsw      m5,    [pw_1024]
12647    packuswb      m5,    m5
12648    movu          [r0 + 852 * 16 + 8],  m5
12649    pmaddubsw     m3,    m1,            [r5 + 5 * 16]
12650    pmulhrsw      m3,    [pw_1024]
12651    pmaddubsw     m5,    m4,            [r5 + 5 * 16]
12652    pmulhrsw      m5,    [pw_1024]
12653    packuswb      m3,    m5
12654    movu          [r0 + 853 * 16],      m3
12655
12656    ; mode 13 [row 21]
12657    pslldq        m6,    2
12658    pinsrb        m6,    [r3 + 18],  1
12659    pinsrb        m6,    [r3 + 21],  0
12660    pmaddubsw     m3,    m6,         [r5 + 26 * 16]
12661    pmulhrsw      m3,    [pw_1024]
12662    pslldq        m2,    2
12663    pinsrw        m2,    [r4 + 2],  0
12664    pmaddubsw     m5,    m2,        [r5 + 26 * 16]
12665    pmulhrsw      m5,    [pw_1024]
12666    packuswb      m3,    m5
12667    movu          [r0 + 746 * 16],  m3
12668    pslldq        m1,    2
12669    pinsrw        m1,    [r4 + 10], 0
12670    pmaddubsw     m3,    m1,        [r5 + 26 * 16]
12671    pmulhrsw      m3,    [pw_1024]
12672    pslldq        m4,    2
12673    pinsrw        m4,    [r4 + 18], 0
12674    pmaddubsw     m5,    m4,        [r5 + 26 * 16]
12675    pmulhrsw      m5,    [pw_1024]
12676    packuswb      m3,    m5
12677    movu          [r0 + 747 * 16],  m3
12678
12679    ; mode 13 [row 22]
12680    pmaddubsw     m3,    m6,        [r5 + 17 * 16]
12681    pmulhrsw      m3,    [pw_1024]
12682    pmaddubsw     m5,    m2,        [r5 + 17 * 16]
12683    pmulhrsw      m5,    [pw_1024]
12684    packuswb      m3,    m5
12685    movu          [r0 + 748 * 16],  m3
12686    pmaddubsw     m3,    m1,        [r5 + 17 * 16]
12687    pmulhrsw      m3,    [pw_1024]
12688    pmaddubsw     m5,    m4,        [r5 + 17 * 16]
12689    pmulhrsw      m5,    [pw_1024]
12690    packuswb      m3,    m5
12691    movu          [r0 + 749 * 16],  m3
12692
12693    ; mode 13 [row 23]
12694    pmaddubsw     m3,    m6,        [r5 + 8 * 16]
12695    pmulhrsw      m3,    [pw_1024]
12696    pmaddubsw     m5,    m2,        [r5 + 8 * 16]
12697    pmulhrsw      m5,    [pw_1024]
12698    packuswb      m3,    m5
12699    movu          [r0 + 750 * 16],  m3
12700    pmaddubsw     m3,    m1,        [r5 + 8 * 16]
12701    pmulhrsw      m3,    [pw_1024]
12702    pmaddubsw     m5,    m4,        [r5 + 8 * 16]
12703    pmulhrsw      m5,    [pw_1024]
12704    packuswb      m3,    m5
12705    movu          [r0 + 751 * 16],  m3
12706
12707    ; mode 14 [row 14]
12708    pslldq        m7,    2
12709    pinsrb        m7,    [r3 + 12], 1
12710    pinsrb        m7,    [r3 + 15], 0
12711    pmaddubsw     m3,    m7,        [r5 + 29 * 16]
12712    pmulhrsw      m3,    [pw_1024]
12713    pmaddubsw     m5,    m2,        [r5 + 29 * 16]
12714    pmulhrsw      m5,    [pw_1024]
12715    packuswb      m3,    m5
12716    movu          [r0 + 796 * 16],  m3
12717    pmaddubsw     m3,    m1,        [r5 + 29 * 16]
12718    pmulhrsw      m3,    [pw_1024]
12719    pmaddubsw     m5,    m4,        [r5 + 29 * 16]
12720    pmulhrsw      m5,    [pw_1024]
12721    packuswb      m3,    m5
12722    movu          [r0 + 797 * 16],  m3
12723
12724    ; mode 14 [row 15]
12725    pmaddubsw     m3,    m7,        [r5 + 16 * 16]
12726    pmulhrsw      m3,    [pw_1024]
12727    pmaddubsw     m5,    m2,        [r5 + 16 * 16]
12728    pmulhrsw      m5,    [pw_1024]
12729    packuswb      m3,    m5
12730    movu          [r0 + 798 * 16],  m3
12731    pmaddubsw     m3,    m1,        [r5 + 16 * 16]
12732    pmulhrsw      m3,    [pw_1024]
12733    pmaddubsw     m5,    m4,        [r5 + 16 * 16]
12734    pmulhrsw      m5,    [pw_1024]
12735    packuswb      m3,    m5
12736    movu          [r0 + 799 * 16],  m3
12737
12738    ; mode 14 [row 16]
12739    pmaddubsw     m3,    m7,        [r5 + 3 * 16]
12740    pmulhrsw      m3,    [pw_1024]
12741    pmaddubsw     m5,    m2,        [r5 + 3 * 16]
12742    pmulhrsw      m5,    [pw_1024]
12743    packuswb      m3,    m5
12744    movu          [r0 + 800 * 16],  m3
12745    pmaddubsw     m3,    m1,        [r5 + 3 * 16]
12746    pmulhrsw      m3,    [pw_1024]
12747    pmaddubsw     m5,    m4,        [r5 + 3 * 16]
12748    pmulhrsw      m5,    [pw_1024]
12749    packuswb      m3,    m5
12750    movu          [r0 + 801 * 16],  m3
12751
12752    ; mode 15 [row 11]
12753    pmaddubsw     m5,    m2,            [r5 + 20 * 16]
12754    pmulhrsw      m5,    [pw_1024]
12755    packuswb      m5,    m5
12756    movh          [r0 + 854 * 16 + 8],  m5
12757    pmaddubsw     m3,    m1,            [r5 + 20 * 16]
12758    pmulhrsw      m3,    [pw_1024]
12759    pmaddubsw     m5,    m4,            [r5 + 20 * 16]
12760    pmulhrsw      m5,    [pw_1024]
12761    packuswb      m3,    m5
12762    movu          [r0 + 855 * 16],      m3
12763
12764    ; mode 15 [row 12]
12765    pmaddubsw     m5,    m2,            [r5 + 3 * 16]
12766    pmulhrsw      m5,    [pw_1024]
12767    packuswb      m5,    m5
12768    movh          [r0 + 856 * 16 + 8],  m5
12769    pmaddubsw     m3,    m1,            [r5 + 3 * 16]
12770    pmulhrsw      m3,    [pw_1024]
12771    pmaddubsw     m5,    m4,            [r5 + 3 * 16]
12772    pmulhrsw      m5,    [pw_1024]
12773    packuswb      m3,    m5
12774    movu          [r0 + 857 * 16],      m3
12775
12776    ; mode 13 [row 24]
12777    pslldq        m6,    2
12778    pinsrb        m6,    [r3 + 21],  1
12779    pinsrb        m6,    [r3 + 25],  0
12780    pmaddubsw     m3,    m6,         [r5 + 31 * 16]
12781    pmulhrsw      m3,    [pw_1024]
12782    pslldq        m2,    2
12783    pinsrw        m2,    [r4 + 1],  0
12784    pmaddubsw     m5,    m2,        [r5 + 31 * 16]
12785    pmulhrsw      m5,    [pw_1024]
12786    packuswb      m3,    m5
12787    movu          [r0 + 752 * 16],  m3
12788    pslldq        m1,    2
12789    pinsrw        m1,    [r4 + 9],  0
12790    pmaddubsw     m3,    m1,        [r5 + 31 * 16]
12791    pmulhrsw      m3,    [pw_1024]
12792    pslldq        m4,    2
12793    pinsrw        m4,    [r4 + 17], 0
12794    pmaddubsw     m5,    m4,        [r5 + 31 * 16]
12795    pmulhrsw      m5,    [pw_1024]
12796    packuswb      m3,    m5
12797    movu          [r0 + 753 * 16],  m3
12798
12799    ; mode 13 [row 25]
12800    pmaddubsw     m3,    m6,        [r5 + 22 * 16]
12801    pmulhrsw      m3,    [pw_1024]
12802    pmaddubsw     m5,    m2,        [r5 + 22 * 16]
12803    pmulhrsw      m5,    [pw_1024]
12804    packuswb      m3,    m5
12805    movu          [r0 + 754 * 16],  m3
12806    pmaddubsw     m3,    m1,        [r5 + 22 * 16]
12807    pmulhrsw      m3,    [pw_1024]
12808    pmaddubsw     m5,    m4,        [r5 + 22 * 16]
12809    pmulhrsw      m5,    [pw_1024]
12810    packuswb      m3,    m5
12811    movu          [r0 + 755 * 16],  m3
12812
12813    ; mode 13 [row 26]
12814    pmaddubsw     m3,    m6,        [r5 + 13 * 16]
12815    pmulhrsw      m3,    [pw_1024]
12816    pmaddubsw     m5,    m2,        [r5 + 13 * 16]
12817    pmulhrsw      m5,    [pw_1024]
12818    packuswb      m3,    m5
12819    movu          [r0 + 756 * 16],  m3
12820    pmaddubsw     m3,    m1,        [r5 + 13 * 16]
12821    pmulhrsw      m3,    [pw_1024]
12822    pmaddubsw     m5,    m4,        [r5 + 13 * 16]
12823    pmulhrsw      m5,    [pw_1024]
12824    packuswb      m3,    m5
12825    movu          [r0 + 757 * 16],  m3
12826
12827    ; mode 13 [row 27]
12828    pmaddubsw     m3,    m6,        [r5 + 4 * 16]
12829    pmulhrsw      m3,    [pw_1024]
12830    pmaddubsw     m5,    m2,        [r5 + 4 * 16]
12831    pmulhrsw      m5,    [pw_1024]
12832    packuswb      m3,    m5
12833    movu          [r0 + 758 * 16],  m3
12834    pmaddubsw     m3,    m1,        [r5 + 4 * 16]
12835    pmulhrsw      m3,    [pw_1024]
12836    pmaddubsw     m5,    m4,        [r5 + 4 * 16]
12837    pmulhrsw      m5,    [pw_1024]
12838    packuswb      m3,    m5
12839    movu          [r0 + 759 * 16],  m3
12840
12841    ; mode 14 [row 17]
12842    pslldq        m7,    2
12843    pinsrb        m7,    [r3 + 15], 1
12844    pinsrb        m7,    [r3 + 17], 0
12845    pmaddubsw     m3,    m7,        [r5 + 22 * 16]
12846    pmulhrsw      m3,    [pw_1024]
12847    pmaddubsw     m5,    m2,        [r5 + 22 * 16]
12848    pmulhrsw      m5,    [pw_1024]
12849    packuswb      m3,    m5
12850    movu          [r0 + 802 * 16],  m3
12851    pmaddubsw     m3,    m1,        [r5 + 22 * 16]
12852    pmulhrsw      m3,    [pw_1024]
12853    pmaddubsw     m5,    m4,        [r5 + 22 * 16]
12854    pmulhrsw      m5,    [pw_1024]
12855    packuswb      m3,    m5
12856    movu          [r0 + 803 * 16],  m3
12857
12858    ; mode 14 [row 18]
12859    pmaddubsw     m3,    m7,        [r5 + 9 * 16]
12860    pmulhrsw      m3,    [pw_1024]
12861    pmaddubsw     m5,    m2,        [r5 + 9 * 16]
12862    pmulhrsw      m5,    [pw_1024]
12863    packuswb      m3,    m5
12864    movu          [r0 + 804 * 16],  m3
12865    pmaddubsw     m3,    m1,        [r5 + 9 * 16]
12866    pmulhrsw      m3,    [pw_1024]
12867    pmaddubsw     m5,    m4,        [r5 + 9 * 16]
12868    pmulhrsw      m5,    [pw_1024]
12869    packuswb      m3,    m5
12870    movu          [r0 + 805 * 16],  m3
12871
12872    ; mode 15 [row 13]
12873    pmaddubsw     m5,    m2,           [r5 + 18 * 16]
12874    pmulhrsw      m5,    [pw_1024]
12875    packuswb      m5,    m5
12876    movh          [r0 + 858 * 16 + 8], m5
12877    pmaddubsw     m3,    m1,           [r5 + 18 * 16]
12878    pmulhrsw      m3,    [pw_1024]
12879    pmaddubsw     m5,    m4,           [r5 + 18 * 16]
12880    pmulhrsw      m5,    [pw_1024]
12881    packuswb      m3,    m5
12882    movu          [r0 + 859 * 16],     m3
12883
12884    ; mode 15 [row 14]
12885    pmaddubsw     m5,    m2,           [r5 + 1 * 16]
12886    pmulhrsw      m5,    [pw_1024]
12887    packuswb      m5,    m5
12888    movh          [r0 + 860 * 16 + 8], m5
12889    pmaddubsw     m3,    m1,           [r5 + 1 * 16]
12890    pmulhrsw      m3,    [pw_1024]
12891    pmaddubsw     m5,    m4,           [r5 + 1 * 16]
12892    pmulhrsw      m5,    [pw_1024]
12893    packuswb      m3,    m5
12894    movu          [r0 + 861 * 16],     m3
12895
12896    ; mode 13 [row 28]
12897    pslldq        m6,    2
12898    pinsrb        m6,    [r3 + 25],  1
12899    pinsrb        m6,    [r3 + 28],  0
12900    pmaddubsw     m3,    m6,         [r5 + 27 * 16]
12901    pmulhrsw      m3,    [pw_1024]
12902    pslldq        m2,    2
12903    pinsrw        m2,    [r4 + 0],  0
12904    pmaddubsw     m5,    m2,         [r5 + 27 * 16]
12905    pmulhrsw      m5,    [pw_1024]
12906    packuswb      m3,    m5
12907    movu          [r0 + 760 * 16],   m3
12908    pslldq        m1,    2
12909    pinsrw        m1,    [r4 + 8],  0
12910    pmaddubsw     m3,    m1,         [r5 + 27 * 16]
12911    pmulhrsw      m3,    [pw_1024]
12912    pslldq        m4,    2
12913    pinsrw        m4,    [r4 + 16],  0
12914    pmaddubsw     m5,    m4,         [r5 + 27 * 16]
12915    pmulhrsw      m5,    [pw_1024]
12916    packuswb      m3,    m5
12917    movu          [r0 + 761 * 16],   m3
12918
12919    ; mode 13 [row 29]
12920    pmaddubsw     m3,    m6,         [r5 + 18 * 16]
12921    pmulhrsw      m3,    [pw_1024]
12922    pmaddubsw     m5,    m2,         [r5 + 18 * 16]
12923    pmulhrsw      m5,    [pw_1024]
12924    packuswb      m3,    m5
12925    movu          [r0 + 762 * 16],   m3
12926    pmaddubsw     m3,    m1,         [r5 + 18 * 16]
12927    pmulhrsw      m3,    [pw_1024]
12928    pmaddubsw     m5,    m4,         [r5 + 18 * 16]
12929    pmulhrsw      m5,    [pw_1024]
12930    packuswb      m3,    m5
12931    movu          [r0 + 763 * 16],   m3
12932
12933    ; mode 13 [row 30]
12934    pmaddubsw     m3,    m6,         [r5 + 9 * 16]
12935    pmulhrsw      m3,    [pw_1024]
12936    pmaddubsw     m5,    m2,         [r5 + 9 * 16]
12937    pmulhrsw      m5,    [pw_1024]
12938    packuswb      m3,    m5
12939    movu          [r0 + 764 * 16],   m3
12940    pmaddubsw     m3,    m1,         [r5 + 9 * 16]
12941    pmulhrsw      m3,    [pw_1024]
12942    pmaddubsw     m5,    m4,         [r5 + 9 * 16]
12943    pmulhrsw      m5,    [pw_1024]
12944    packuswb      m3,    m5
12945    movu          [r0 + 765 * 16],   m3
12946
12947    ; mode 14 [row 19]
12948    pslldq        m7,    2
12949    pinsrb        m7,    [r3 + 17], 1
12950    pinsrb        m7,    [r3 + 20], 0
12951    pmaddubsw     m3,    m7,        [r5 + 28 * 16]
12952    pmulhrsw      m3,    [pw_1024]
12953    pmaddubsw     m5,    m2,        [r5 + 28 * 16]
12954    pmulhrsw      m5,    [pw_1024]
12955    packuswb      m3,    m5
12956    movu          [r0 + 806 * 16],  m3
12957    pmaddubsw     m3,    m1,        [r5 + 28 * 16]
12958    pmulhrsw      m3,    [pw_1024]
12959    pmaddubsw     m5,    m4,        [r5 + 28 * 16]
12960    pmulhrsw      m5,    [pw_1024]
12961    packuswb      m3,    m5
12962    movu          [r0 + 807 * 16],  m3
12963
12964    ; mode 14 [row 20]
12965    pmaddubsw     m3,    m7,        [r5 + 15 * 16]
12966    pmulhrsw      m3,    [pw_1024]
12967    pmaddubsw     m5,    m2,        [r5 + 15 * 16]
12968    pmulhrsw      m5,    [pw_1024]
12969    packuswb      m3,    m5
12970    movu          [r0 + 808 * 16],  m3
12971    pmaddubsw     m3,    m1,        [r5 + 15 * 16]
12972    pmulhrsw      m3,    [pw_1024]
12973    pmaddubsw     m5,    m4,        [r5 + 15 * 16]
12974    pmulhrsw      m5,    [pw_1024]
12975    packuswb      m3,    m5
12976    movu          [r0 + 809 * 16],  m3
12977
12978    ; mode 14 [row 21]
12979    pmaddubsw     m3,    m7,        [r5 + 2 * 16]
12980    pmulhrsw      m3,    [pw_1024]
12981    pmaddubsw     m5,    m2,        [r5 + 2 * 16]
12982    pmulhrsw      m5,    [pw_1024]
12983    packuswb      m3,    m5
12984    movu          [r0 + 810 * 16],  m3
12985    pmaddubsw     m3,    m1,        [r5 + 2 * 16]
12986    pmulhrsw      m3,    [pw_1024]
12987    pmaddubsw     m5,    m4,        [r5 + 2 * 16]
12988    pmulhrsw      m5,    [pw_1024]
12989    packuswb      m3,    m5
12990    movu          [r0 + 811 * 16],  m3
12991
12992    ; mode 15 [row 15]
12993    pmaddubsw     m5,    m2,            [r5 + 16 * 16]
12994    pmulhrsw      m5,    [pw_1024]
12995    packuswb      m5,    m5
12996    movh          [r0 + 862 * 16 + 8],  m5
12997    pmaddubsw     m3,    m1,            [r5 + 16 * 16]
12998    pmulhrsw      m3,    [pw_1024]
12999    pmaddubsw     m5,    m4,            [r5 + 16 * 16]
13000    pmulhrsw      m5,    [pw_1024]
13001    packuswb      m3,    m5
13002    movu          [r0 + 863 * 16],      m3
13003
13004    ; mode 14 [row 22]
13005    pslldq        m7,    2
13006    pinsrb        m7,    [r3 + 20],  1
13007    pinsrb        m7,    [r3 + 22],  0
13008    pmaddubsw     m3,    m7,         [r5 + 21 * 16]
13009    pmulhrsw      m3,    [pw_1024]
13010    pslldq        m2,    2
13011    pinsrb        m2,    [r4 + 0],  1
13012    pinsrb        m2,    [r3 + 2],  0
13013    pmaddubsw     m5,    m2,        [r5 + 21 * 16]
13014    pmulhrsw      m5,    [pw_1024]
13015    packuswb      m3,    m5
13016    movu          [r0 + 812 * 16],  m3
13017    pslldq        m1,    2
13018    pinsrw        m1,    [r4 + 7],  0
13019    pmaddubsw     m3,    m1,        [r5 + 21 * 16]
13020    pmulhrsw      m3,    [pw_1024]
13021    pslldq        m4,    2
13022    pinsrw        m4,    [r4 + 15],  0
13023    pmaddubsw     m5,    m4,        [r5 + 21 * 16]
13024    pmulhrsw      m5,    [pw_1024]
13025    packuswb      m3,    m5
13026    movu          [r0 + 813 * 16],  m3
13027
13028    ; mode 14 [row 23]
13029    pmaddubsw     m3,    m7,        [r5 + 8 * 16]
13030    pmulhrsw      m3,    [pw_1024]
13031    pmaddubsw     m5,    m2,        [r5 + 8 * 16]
13032    pmulhrsw      m5,    [pw_1024]
13033    packuswb      m3,    m5
13034    movu          [r0 + 814 * 16],  m3
13035    pmaddubsw     m3,    m1,        [r5 + 8 * 16]
13036    pmulhrsw      m3,    [pw_1024]
13037    pmaddubsw     m5,    m4,        [r5 + 8 * 16]
13038    pmulhrsw      m5,    [pw_1024]
13039    packuswb      m3,    m5
13040    movu          [r0 + 815 * 16],  m3
13041
13042    ; mode 15 [row 16]
13043    pmaddubsw     m5,    m2,            [r5 + 31 * 16]
13044    pmulhrsw      m5,    [pw_1024]
13045    packuswb      m5,    m5
13046    movh          [r0 + 864 * 16 + 8],  m5
13047    pmaddubsw     m3,    m1,            [r5 + 31 * 16]
13048    pmulhrsw      m3,    [pw_1024]
13049    pmaddubsw     m5,    m4,            [r5 + 31 * 16]
13050    pmulhrsw      m5,    [pw_1024]
13051    packuswb      m3,    m5
13052    movu          [r0 + 865 * 16],  m3
13053
13054    ; mode 15 [row 17]
13055    pmaddubsw     m5,    m2,            [r5 + 14 * 16]
13056    pmulhrsw      m5,    [pw_1024]
13057    packuswb      m5,    m5
13058    movh          [r0 + 866 * 16 + 8],  m5
13059    pmaddubsw     m3,    m1,            [r5 + 14 * 16]
13060    pmulhrsw      m3,    [pw_1024]
13061    pmaddubsw     m5,    m4,            [r5 + 14 * 16]
13062    pmulhrsw      m5,    [pw_1024]
13063    packuswb      m3,    m5
13064    movu          [r0 + 867 * 16],      m3
13065
13066    ; mode 14 [row 24]
13067    pslldq        m7,    2
13068    pinsrb        m7,    [r3 + 22],  1
13069    pinsrb        m7,    [r3 + 25],  0
13070    pmaddubsw     m3,    m7,         [r5 + 27 * 16]
13071    pmulhrsw      m3,    [pw_1024]
13072    pslldq        m2,    2
13073    pinsrb        m2,    [r3 + 2],  1
13074    pinsrb        m2,    [r3 + 5],  0
13075    pmaddubsw     m5,    m2,        [r5 + 27 * 16]
13076    pmulhrsw      m5,    [pw_1024]
13077    packuswb      m3,    m5
13078    movu          [r0 + 816 * 16],  m3
13079    pslldq        m1,    2
13080    pinsrw        m1,     [r4 + 6],  0
13081    pmaddubsw     m3,    m1,        [r5 + 27 * 16]
13082    pmulhrsw      m3,    [pw_1024]
13083    pslldq        m4,    2
13084    pinsrw        m4,    [r4 + 14],  0
13085    pmaddubsw     m5,    m4,        [r5 + 27 * 16]
13086    pmulhrsw      m5,    [pw_1024]
13087    packuswb      m3,    m5
13088    movu          [r0 + 817 * 16],  m3
13089
13090    ; mode 14 [row 25]
13091    pmaddubsw     m3,    m7,        [r5 + 14 * 16]
13092    pmulhrsw      m3,    [pw_1024]
13093    pmaddubsw     m5,    m2,        [r5 + 14 * 16]
13094    pmulhrsw      m5,    [pw_1024]
13095    packuswb      m3,    m5
13096    movu          [r0 + 818 * 16],  m3
13097    pmaddubsw     m3,    m1,        [r5 + 14 * 16]
13098    pmulhrsw      m3,    [pw_1024]
13099    pmaddubsw     m5,    m4,        [r5 + 14 * 16]
13100    pmulhrsw      m5,    [pw_1024]
13101    packuswb      m3,    m5
13102    movu          [r0 + 819 * 16],  m3
13103
13104    ; mode 14 [row 26]
13105    pmaddubsw     m3,    m7,        [r5 + 1 * 16]
13106    pmulhrsw      m3,    [pw_1024]
13107    pmaddubsw     m5,    m2,        [r5 + 1 * 16]
13108    pmulhrsw      m5,    [pw_1024]
13109    packuswb      m3,    m5
13110    movu          [r0 + 820 * 16],  m3
13111    pmaddubsw     m3,    m1,        [r5 + 1 * 16]
13112    pmulhrsw      m3,    [pw_1024]
13113    pmaddubsw     m5,    m4,        [r5 + 1 * 16]
13114    pmulhrsw      m5,    [pw_1024]
13115    packuswb      m3,    m5
13116    movu          [r0 + 821 * 16],  m3
13117
13118    ; mode 15 [row 18]
13119    pinsrb        m2,    [r3 + 4],      0
13120    pmaddubsw     m5,    m2,            [r5 + 29 * 16]
13121    pmulhrsw      m5,    [pw_1024]
13122    packuswb      m5,    m5
13123    movh          [r0 + 868 * 16 + 8],  m5
13124    pmaddubsw     m3,    m1,            [r5 + 29 * 16]
13125    pmulhrsw      m3,    [pw_1024]
13126    pmaddubsw     m5,    m4,            [r5 + 29 * 16]
13127    pmulhrsw      m5,    [pw_1024]
13128    packuswb      m3,    m5
13129    movu          [r0 + 869 * 16],      m3
13130
13131    ; mode 15 [row 19]
13132    pmaddubsw     m5,    m2,            [r5 + 12 * 16]
13133    pmulhrsw      m5,    [pw_1024]
13134    packuswb      m5,    m5
13135    movh          [r0 + 870 * 16 + 8],  m5
13136    pmaddubsw     m3,    m1,            [r5 + 12 * 16]
13137    pmulhrsw      m3,    [pw_1024]
13138    pmaddubsw     m5,    m4,            [r5 + 12 * 16]
13139    pmulhrsw      m5,    [pw_1024]
13140    packuswb      m3,    m5
13141    movu          [r0 + 871 * 16],      m3
13142
13143    ; mode 15 [row 20 - 8 to 15]
13144    pslldq        m3,     m2,           2
13145    pinsrb        m3,    [r3 + 4],      1
13146    pinsrb        m3,    [r3 + 6],      0
13147    pmaddubsw     m5,    m3,            [r5 + 27 * 16]
13148    pmulhrsw      m5,    [pw_1024]
13149    packuswb      m5,    m5
13150    movh          [r0 + 872 * 16 + 8],  m5
13151
13152    ; mode 15 [row 21 - 8 to 15]
13153    pmaddubsw     m5,    m3,            [r5 + 10 * 16]
13154    pmulhrsw      m5,    [pw_1024]
13155    packuswb      m5,    m5
13156    movh          [r0 + 874 * 16 + 8],  m5
13157
13158    ; mode 15 [row 22 - 8 to 15]
13159    pslldq        m3,    2
13160    pinsrb        m3,    [r3 + 6],      1
13161    pinsrb        m3,    [r3 + 8],      0
13162    pmaddubsw     m5,    m3,            [r5 + 25 * 16]
13163    pmulhrsw      m5,    [pw_1024]
13164    packuswb      m5,    m5
13165    movh          [r0 + 876 * 16 + 8],  m5
13166
13167    ; mode 15 [row 23 - 8 to 15]
13168    pmaddubsw     m5,    m3,            [r5 + 8 * 16]
13169    pmulhrsw      m5,    [pw_1024]
13170    packuswb      m5,    m5
13171    movh          [r0 + 878 * 16 + 8],  m5
13172
13173    ; mode 15 [row 24 - 8 to 15]
13174    pslldq        m3,    2
13175    pinsrb        m3,    [r3 + 8],      1
13176    pinsrb        m3,    [r3 + 9],      0
13177    pmaddubsw     m5,    m3,            [r5 + 23 * 16]
13178    pmulhrsw      m5,    [pw_1024]
13179    packuswb      m5,    m5
13180    movh          [r0 + 880 * 16 + 8],  m5
13181
13182    ; mode 15 [row 25 - 8 to 15]
13183    pmaddubsw     m5,    m3,            [r5 + 6 * 16]
13184    pmulhrsw      m5,    [pw_1024]
13185    packuswb      m5,    m5
13186    movh          [r0 + 882 * 16 + 8],  m5
13187
13188    ; mode 15 [row 26 - 8 to 15]
13189    pslldq        m3,    2
13190    pinsrb        m3,    [r3 +  9],      1
13191    pinsrb        m3,    [r3 + 11],      0
13192    pmaddubsw     m5,    m3,             [r5 + 21 * 16]
13193    pmulhrsw      m5,    [pw_1024]
13194    packuswb      m5,    m5
13195    movh          [r0 + 884 * 16 + 8],   m5
13196
13197    ; mode 15 [row 27 - 8 to 15]
13198    pmaddubsw     m5,    m3,             [r5 + 4 * 16]
13199    pmulhrsw      m5,    [pw_1024]
13200    packuswb      m5,    m5
13201    movh          [r0 + 886 * 16 + 8],   m5
13202
13203    ; mode 15 [row 28 - 8 to 15]
13204    pslldq        m3,    2
13205    pinsrb        m3,    [r3 + 11],      1
13206    pinsrb        m3,    [r3 + 13],      0
13207    pmaddubsw     m5,    m3,             [r5 + 19 * 16]
13208    pmulhrsw      m5,    [pw_1024]
13209    packuswb      m5,    m5
13210    movh          [r0 + 888 * 16 + 8],   m5
13211
13212    ; mode 15 [row 29 - 8 to 15]
13213    pmaddubsw     m5,    m3,             [r5 + 2 * 16]
13214    pmulhrsw      m5,    [pw_1024]
13215    packuswb      m5,    m5
13216    movh          [r0 + 890 * 16 + 8],   m5
13217
13218    ; mode 15 [row 30 - 8 to 15]
13219    pslldq        m3,    2
13220    pinsrb        m3,    [r3 + 13],      1
13221    pinsrb        m3,    [r3 + 15],      0
13222    pmaddubsw     m5,    m3,             [r5 + 17 * 16]
13223    pmulhrsw      m5,    [pw_1024]
13224    packuswb      m5,    m5
13225    movh          [r0 + 892 * 16 + 8],   m5
13226
13227    ; mode 15 [row 31, 8 to 15]
13228    pshufb        m5,    m3,           [tab_S2]
13229    movh          [r0 + 894 * 16 + 8],     m5
13230
13231    ; mode 14 [row 27]
13232    pinsrb        m2,    [r3 + 5],      0
13233    pslldq        m7,    2
13234    pinsrb        m7,    [r3 + 25],  1
13235    pinsrb        m7,    [r3 + 27],  0
13236    pmaddubsw     m3,    m7,         [r5 + 20 * 16]
13237    pmulhrsw      m3,    [pw_1024]
13238    pslldq        m2,    2
13239    pinsrb        m2,    [r3 + 5],  1
13240    pinsrb        m2,    [r3 + 7],  0
13241    pmaddubsw     m5,    m2,        [r5 + 20 * 16]
13242    pmulhrsw      m5,    [pw_1024]
13243    packuswb      m3,    m5
13244    movu          [r0 + 822 * 16],  m3
13245    pslldq        m1,    2
13246    pinsrw        m1,    [r4 + 5],  0
13247    pmaddubsw     m3,    m1,        [r5 + 20 * 16]
13248    pmulhrsw      m3,    [pw_1024]
13249    pslldq        m4,    2
13250    pinsrw        m4,    [r4 + 13],  0
13251    pmaddubsw     m5,    m4,        [r5 + 20 * 16]
13252    pmulhrsw      m5,    [pw_1024]
13253    packuswb      m3,    m5
13254    movu          [r0 + 823 * 16],  m3
13255
13256    ; mode 15 [row 20 - 16 to 31]
13257    pmaddubsw     m3,    m1,        [r5 + 27 * 16]
13258    pmulhrsw      m3,    [pw_1024]
13259    pmaddubsw     m5,    m4,        [r5 + 27 * 16]
13260    pmulhrsw      m5,    [pw_1024]
13261    packuswb      m3,    m5
13262    movu          [r0 + 873 * 16],  m3
13263
13264    ; mode 15 [row 21 - 16 to 31]
13265    pmaddubsw     m3,    m1,        [r5 + 10 * 16]
13266    pmulhrsw      m3,    [pw_1024]
13267    pmaddubsw     m5,    m4,        [r5 + 10 * 16]
13268    pmulhrsw      m5,    [pw_1024]
13269    packuswb      m3,    m5
13270    movu          [r0 + 875 * 16],  m3
13271
13272    ; mode 14 [row 28]
13273    pmaddubsw     m3,    m7,        [r5 + 7 * 16]
13274    pmulhrsw      m3,    [pw_1024]
13275    pmaddubsw     m5,    m2,        [r5 + 7 * 16]
13276    pmulhrsw      m5,    [pw_1024]
13277    packuswb      m3,    m5
13278    movu          [r0 + 824 * 16],  m3
13279    pmaddubsw     m3,    m1,        [r5 + 7 * 16]
13280    pmulhrsw      m3,    [pw_1024]
13281    pmaddubsw     m5,    m4,        [r5 + 7 * 16]
13282    pmulhrsw      m5,    [pw_1024]
13283    packuswb      m3,    m5
13284    movu          [r0 + 825 * 16],  m3
13285
13286    ; mode 14 [row 29]
13287    pslldq        m7,    2
13288    pinsrb        m7,    [r3 + 27],  1
13289    pinsrb        m7,    [r3 + 30],  0
13290    pmaddubsw     m3,    m7,         [r5 + 26 * 16]
13291    pmulhrsw      m3,    [pw_1024]
13292    pslldq        m2,    2
13293    pinsrb        m2,    [r3 +  7],  1
13294    pinsrb        m2,    [r3 + 10],  0
13295    pmaddubsw     m5,    m2,         [r5 + 26 * 16]
13296    pmulhrsw      m5,    [pw_1024]
13297    packuswb      m3,    m5
13298    movu          [r0 + 826 * 16],  m3
13299    pslldq        m1,    2
13300    pinsrw        m1,    [r4 + 4],  0
13301    pmaddubsw     m3,    m1,        [r5 + 26 * 16]
13302    pmulhrsw      m3,    [pw_1024]
13303    pslldq        m4,    2
13304    pinsrw        m4,    [r4 + 12], 0
13305    pmaddubsw     m5,    m4,        [r5 + 26 * 16]
13306    pmulhrsw      m5,    [pw_1024]
13307    packuswb      m3,    m5
13308    movu          [r0 + 827 * 16],  m3
13309
13310    ; mode 14 [row 30]
13311    pmaddubsw     m3,    m7,         [r5 + 13 * 16]
13312    pmulhrsw      m3,    [pw_1024]
13313    pmaddubsw     m5,    m2,         [r5 + 13 * 16]
13314    pmulhrsw      m5,    [pw_1024]
13315    packuswb      m3,    m5
13316    movu          [r0 + 828 * 16],  m3
13317    pmaddubsw     m3,    m1,        [r5 + 13 * 16]
13318    pmulhrsw      m3,    [pw_1024]
13319    pmaddubsw     m5,    m4,        [r5 + 13 * 16]
13320    pmulhrsw      m5,    [pw_1024]
13321    packuswb      m3,    m5
13322    movu          [r0 + 829 * 16],  m3
13323
13324    ; mode 15 [row 22]
13325    pmaddubsw     m3,    m1,        [r5 + 25 * 16]
13326    pmulhrsw      m3,    [pw_1024]
13327    pmaddubsw     m5,    m4,        [r5 + 25 * 16]
13328    pmulhrsw      m5,    [pw_1024]
13329    packuswb      m3,    m5
13330    movu          [r0 + 877 * 16],  m3
13331
13332    ; mode 15 [row 23]
13333    pmaddubsw     m3,    m1,        [r5 + 8 * 16]
13334    pmulhrsw      m3,    [pw_1024]
13335    pmaddubsw     m5,    m4,        [r5 + 8 * 16]
13336    pmulhrsw      m5,    [pw_1024]
13337    packuswb      m3,    m5
13338    movu          [r0 + 879 * 16],  m3
13339
13340    ; mode 14 [row 31]
13341    pshufb        m3,    m7,           [tab_S2]
13342    movh          [r0 + 830 * 16],     m3
13343    pshufb        m3,    m2,           [tab_S2]
13344    movh          [r0 + 830 * 16 + 8], m3
13345    pshufb        m3,    m1,           [tab_S2]
13346    movh          [r0 + 831 * 16],     m3
13347    pshufb        m3,    m4,           [tab_S2]
13348    movh          [r0 + 831 * 16 + 8], m3
13349
13350    ; mode 13 [row 31]
13351    pshufb        m0,    m6,           [tab_S2]
13352    movh          [r0 + 766 * 16],     m0
13353    movh          m0,                  [r4]
13354    movh          [r0 + 766 * 16 + 8], m0
13355    movu          m0,                  [r4 + 8]
13356    movu          [r0 + 767 * 16],     m0
13357
13358    ; mode 15 [row 24]
13359    pslldq        m1,    2
13360    pinsrw        m1,    [r4 + 3], 0
13361    pmaddubsw     m3,    m1,        [r5 + 23 * 16]
13362    pmulhrsw      m3,    [pw_1024]
13363    pslldq        m4,    2
13364    pinsrw        m4,    [r4 + 11], 0
13365    pmaddubsw     m5,    m4,        [r5 + 23 * 16]
13366    pmulhrsw      m5,    [pw_1024]
13367    packuswb      m3,    m5
13368    movu          [r0 + 881 * 16],  m3
13369
13370    ; mode 15 [row 25]
13371    pmaddubsw     m3,    m1,        [r5 + 6 * 16]
13372    pmulhrsw      m3,    [pw_1024]
13373    pmaddubsw     m5,    m4,        [r5 + 6 * 16]
13374    pmulhrsw      m5,    [pw_1024]
13375    packuswb      m3,    m5
13376    movu          [r0 + 883 * 16],  m3
13377
13378    ; mode 15 [row 26]
13379    pslldq        m1,    2
13380    pinsrw        m1,     [r4 + 2], 0
13381    pmaddubsw     m3,    m1,        [r5 + 21 * 16]
13382    pmulhrsw      m3,    [pw_1024]
13383    pslldq        m4,    2
13384    pinsrw        m4,    [r4 + 10], 0
13385    pmaddubsw     m5,    m4,        [r5 + 21 * 16]
13386    pmulhrsw      m5,    [pw_1024]
13387    packuswb      m3,    m5
13388    movu          [r0 + 885 * 16],  m3
13389
13390    ; mode 15 [row 27]
13391    pmaddubsw     m3,    m1,        [r5 + 4 * 16]
13392    pmulhrsw      m3,    [pw_1024]
13393    pmaddubsw     m5,    m4,        [r5 + 4 * 16]
13394    pmulhrsw      m5,    [pw_1024]
13395    packuswb      m3,    m5
13396    movu          [r0 + 887 * 16],  m3
13397
13398    ; mode 15 [row 28]
13399    pslldq        m1,    2
13400    pinsrw        m1,    [r4 + 1],  0
13401    pmaddubsw     m3,    m1,        [r5 + 19 * 16]
13402    pmulhrsw      m3,    [pw_1024]
13403    pslldq        m4,    2
13404    pinsrw        m4,    [r4 + 9],  0
13405    pmaddubsw     m5,    m4,        [r5 + 19 * 16]
13406    pmulhrsw      m5,    [pw_1024]
13407    packuswb      m3,    m5
13408    movu          [r0 + 889 * 16],  m3
13409
13410    ; mode 15 [row 29]
13411    pmaddubsw     m3,    m1,        [r5 + 2 * 16]
13412    pmulhrsw      m3,    [pw_1024]
13413    pmaddubsw     m5,    m4,        [r5 + 2 * 16]
13414    pmulhrsw      m5,    [pw_1024]
13415    packuswb      m3,    m5
13416    movu          [r0 + 891 * 16],  m3
13417
13418    ; mode 15 [row 30]
13419    pslldq        m1,    2
13420    pinsrw        m1,    [r4 + 0],  0
13421    pmaddubsw     m3,    m1,        [r5 + 17 * 16]
13422    pmulhrsw      m3,    [pw_1024]
13423    pslldq        m4,    2
13424    pinsrw        m4,    [r4 + 8], 0
13425    pmaddubsw     m5,    m4,        [r5 + 17 * 16]
13426    pmulhrsw      m5,    [pw_1024]
13427    packuswb      m3,    m5
13428    movu          [r0 + 893 * 16],  m3
13429
13430    ; mode 15 [row 31]
13431    pshufb        m5,    m1,            [tab_S2]
13432    movh          [r0 + 895 * 16],      m5
13433    pshufb        m5,    m4,            [tab_S2]
13434    movh          [r0 + 895 * 16 + 8],  m5
13435
13436    ; mode 16 [row 0]
13437    movu          m6,    [r5 + 11 * 16]
13438    movu          m7,    [pw_1024]
13439    movh          m0,    [r4     ]
13440    movh          m1,    [r4 + 1 ]
13441    punpcklbw     m0,    m1
13442    pmaddubsw     m1,    m0,            m6
13443    pmulhrsw      m1,    m7
13444    movh          m2,    [r4 +  8]
13445    movh          m3,    [r4 +  9]
13446    punpcklbw     m2,    m3
13447    pmaddubsw     m3,    m2,            m6
13448    pmulhrsw      m3,    m7
13449    packuswb      m1,    m3
13450    movu          [r0 + 896 * 16],      m1
13451
13452    movh          m1,    [r4 + 16]
13453    movh          m3,    [r4 + 17]
13454    punpcklbw     m1,    m3
13455    pmaddubsw     m3,    m1,            m6
13456    pmulhrsw      m3,    m7
13457    movh          m4,    [r4 + 24]
13458    movh          m5,    [r4 + 25]
13459    punpcklbw     m4,    m5
13460    pmaddubsw     m5,    m4,            m6
13461    pmulhrsw      m5,    m7
13462    packuswb      m3,    m5
13463    movu          [r0 + 897 * 16],      m3
13464
13465    ; mode16 [row 1]
13466    movu          m6,    [r5 + 22 * 16]
13467    pslldq        m0,    2
13468    pinsrb        m0,    [r4],          1
13469    pinsrb        m0,    [r3 + 2],      0
13470    pmaddubsw     m3,    m0,            m6
13471    pmulhrsw      m3,    m7
13472    pslldq        m2,    2
13473    pinsrw        m2,    [r4 + 7],  0
13474    pmaddubsw     m5,    m2,            m6
13475    pmulhrsw      m5,    m7
13476    packuswb      m3,    m5
13477    movu          [r0 + 898 * 16],      m3
13478
13479    pslldq        m1,    2
13480    pinsrw        m1,     [r4 + 15],    0
13481    pmaddubsw     m3,    m1,            m6
13482    pmulhrsw      m3,    m7
13483    pslldq        m4,    2
13484    pinsrw        m4,    [r4 + 23],     0
13485    pmaddubsw     m5,    m4,            m6
13486    pmulhrsw      m5,    m7
13487    packuswb      m3,    m5
13488    movu          [r0 + 899 * 16],      m3
13489
13490    ; mode16 [row 2]
13491    movu          m6,    [r5 + 1 * 16]
13492    pmaddubsw     m3,    m0,            m6
13493    pmulhrsw      m3,    m7
13494    pmaddubsw     m5,    m2,            m6
13495    pmulhrsw      m5,    m7
13496    packuswb      m3,    m5
13497    movu          [r0 + 900 * 16],      m3
13498
13499    pmaddubsw     m3,    m1,            m6
13500    pmulhrsw      m3,    m7
13501    pmaddubsw     m5,    m4,            m6
13502    pmulhrsw      m5,    m7
13503    packuswb      m3,    m5
13504    movu          [r0 + 901 * 16],      m3
13505
13506    ; mode16 [row 3]
13507    movu          m6,    [r5 + 12 * 16]
13508    pslldq        m0,    2
13509    pinsrb        m0,    [r3 + 2],      1
13510    pinsrb        m0,    [r3 + 3],      0
13511    pmaddubsw     m3,    m0,            m6
13512    pmulhrsw      m3,    m7
13513    pslldq        m2,    2
13514    pinsrw        m2,     [r4 + 6],     0
13515    pmaddubsw     m5,    m2,            m6
13516    pmulhrsw      m5,    m7
13517    packuswb      m3,    m5
13518    movu          [r0 + 902 * 16],      m3
13519
13520    pslldq        m1,    2
13521    pinsrw        m1,     [r4 + 14],    0
13522    pmaddubsw     m3,    m1,            m6
13523    pmulhrsw      m3,    m7
13524    pslldq        m4,    2
13525    pinsrw        m4,    [r4 + 22],     0
13526    pmaddubsw     m5,    m4,            m6
13527    pmulhrsw      m5,    m7
13528    packuswb      m3,    m5
13529    movu          [r0 + 903 * 16],      m3
13530
13531    ; mode16 [row 4]
13532    movu          m6,    [r5 + 23 * 16]
13533    pslldq        m0,    2
13534    pinsrb        m0,    [r3 + 3],      1
13535    pinsrb        m0,    [r3 + 5],      0
13536    pmaddubsw     m3,    m0,            m6
13537    pmulhrsw      m3,    m7
13538    pslldq        m2,    2
13539    pinsrw        m2,    [r4 + 5],      0
13540    pmaddubsw     m5,    m2,            m6
13541    pmulhrsw      m5,    m7
13542    packuswb      m3,    m5
13543    movu          [r0 + 904 * 16],      m3
13544
13545    pslldq        m1,    2
13546    pinsrw        m1,    [r4 + 13],     0
13547    pmaddubsw     m3,    m1,            m6
13548    pmulhrsw      m3,    m7
13549    pslldq        m4,    2
13550    pinsrw        m4,    [r4 + 21],     0
13551    pmaddubsw     m5,    m4,            m6
13552    pmulhrsw      m5,    m7
13553    packuswb      m3,    m5
13554    movu          [r0 + 905 * 16],      m3
13555
13556    ; mode16 [row 5]
13557    movu          m6,    [r5 + 2 * 16]
13558    pmaddubsw     m3,    m0,            m6
13559    pmulhrsw      m3,    m7
13560    pmaddubsw     m5,    m2,            m6
13561    pmulhrsw      m5,    m7
13562    packuswb      m3,    m5
13563    movu          [r0 + 906 * 16],      m3
13564
13565    pmaddubsw     m3,    m1,            m6
13566    pmulhrsw      m3,    m7
13567    pmaddubsw     m5,    m4,            m6
13568    pmulhrsw      m5,    m7
13569    packuswb      m3,    m5
13570    movu          [r0 + 907 * 16],      m3
13571
13572    ; mode16 [row 6]
13573    movu          m6,    [r5 + 13 * 16]
13574    pslldq        m0,    2
13575    pinsrb        m0,    [r3 + 5],      1
13576    pinsrb        m0,    [r3 + 6],      0
13577    pmaddubsw     m3,    m0,            m6
13578    pmulhrsw      m3,    m7
13579    pslldq        m2,    2
13580    pinsrb        m2,    [r4 + 5],      1
13581    pinsrb        m2,    [r4 + 4],      0
13582    pmaddubsw     m5,    m2,            m6
13583    pmulhrsw      m5,    m7
13584    packuswb      m3,    m5
13585    movu          [r0 + 908 * 16],      m3
13586    pslldq        m1,    2
13587    pinsrw        m1,     [r4 + 12],    0
13588    pmaddubsw     m3,    m1,            m6
13589    pmulhrsw      m3,    m7
13590    pslldq        m4,    2
13591    pinsrw        m4,     [r4 + 20],    0
13592    pmaddubsw     m5,    m4,            m6
13593    pmulhrsw      m5,    m7
13594    packuswb      m3,    m5
13595    movu          [r0 + 909 * 16],      m3
13596
13597    ; mode16 [row 7]
13598    movu          m6,    [r5 + 24 * 16]
13599    pslldq        m0,    2
13600    pinsrb        m0,    [r3 + 6],      1
13601    pinsrb        m0,    [r3 + 8],      0
13602    pmaddubsw     m3,    m0,            m6
13603    pmulhrsw      m3,    m7
13604    pslldq        m2,    2
13605    pinsrw        m2,     [r4 + 3],     0
13606    pmaddubsw     m5,    m2,            m6
13607    pmulhrsw      m5,    m7
13608    packuswb      m3,    m5
13609    movu          [r0 + 910 * 16],      m3
13610
13611    pslldq        m1,    2
13612    pinsrw        m1,     [r4 + 11],    0
13613    pmaddubsw     m3,    m1,            m6
13614    pmulhrsw      m3,    m7
13615    pslldq        m4,    2
13616    pinsrw        m4,     [r4 + 19],    0
13617    pmaddubsw     m5,    m4,            m6
13618    pmulhrsw      m5,    m7
13619    packuswb      m3,    m5
13620    movu          [r0 + 911 * 16],      m3
13621
13622    ; mode16 [row 8]
13623    movu          m6,    [r5 + 3 * 16]
13624    pmaddubsw     m3,    m0,            m6
13625    pmulhrsw      m3,    m7
13626    pmaddubsw     m5,    m2,            m6
13627    pmulhrsw      m5,    m7
13628    packuswb      m3,    m5
13629    movu          [r0 + 912 * 16],      m3
13630
13631    pmaddubsw     m3,    m1,            m6
13632    pmulhrsw      m3,    m7
13633    pmaddubsw     m5,    m4,            m6
13634    pmulhrsw      m5,    m7
13635    packuswb      m3,    m5
13636    movu          [r0 + 913 * 16],      m3
13637
13638    ; mode16 [row 9]
13639    movu          m6,    [r5 + 14 * 16]
13640    pslldq        m0,    2
13641    pinsrb        m0,    [r3 + 8],      1
13642    pinsrb        m0,    [r3 + 9],      0
13643    pmaddubsw     m3,    m0,            m6
13644    pmulhrsw      m3,    m7
13645    pslldq        m2,    2
13646    pinsrw        m2,     [r4 + 2],     0
13647    pmaddubsw     m5,    m2,            m6
13648    pmulhrsw      m5,    m7
13649    packuswb      m3,    m5
13650    movu          [r0 + 914 * 16],      m3
13651
13652    pslldq        m1,    2
13653    pinsrw        m1,    [r4 + 10],     0
13654    pmaddubsw     m3,    m1,            m6
13655    pmulhrsw      m3,    m7
13656    pslldq        m4,    2
13657    pinsrw        m4,    [r4 + 18],     0
13658    pmaddubsw     m5,    m4,            m6
13659    pmulhrsw      m5,    m7
13660    packuswb      m3,    m5
13661    movu          [r0 + 915 * 16],      m3
13662
13663    ; mode16 [row 10]
13664    movu          m6,    [r5 + 25 * 16]
13665    pslldq        m0,    2
13666    pinsrb        m0,    [r3 +  9],      1
13667    pinsrb        m0,    [r3 + 11],      0
13668    pmaddubsw     m3,    m0,            m6
13669    pmulhrsw      m3,    m7
13670    pslldq        m2,    2
13671    pinsrw        m2,     [r4 + 1],     0
13672    pmaddubsw     m5,    m2,            m6
13673    pmulhrsw      m5,    m7
13674    packuswb      m3,    m5
13675    movu          [r0 + 916 * 16],      m3
13676
13677    pslldq        m1,    2
13678    pinsrw        m1,    [r4 + 9],      0
13679    pmaddubsw     m3,    m1,            m6
13680    pmulhrsw      m3,    m7
13681    pslldq        m4,    2
13682    pinsrb        m4,    [r4 + 18],     1
13683    pinsrb        m4,    [r4 + 17],     0
13684    pmaddubsw     m5,    m4,            m6
13685    pmulhrsw      m5,    m7
13686    packuswb      m3,    m5
13687    movu          [r0 + 917 * 16],      m3
13688
13689    ; mode16 [row 11]
13690    movu          m6,    [r5 + 4 * 16]
13691    pmaddubsw     m3,    m0,            m6
13692    pmulhrsw      m3,    m7
13693    pmaddubsw     m5,    m2,            m6
13694    pmulhrsw      m5,    m7
13695    packuswb      m3,    m5
13696    movu          [r0 + 918 * 16],      m3
13697
13698    pmaddubsw     m3,    m1,            m6
13699    pmulhrsw      m3,    m7
13700    pmaddubsw     m5,    m4,            m6
13701    pmulhrsw      m5,    m7
13702    packuswb      m3,    m5
13703    movu          [r0 + 919 * 16],      m3
13704
13705    ; mode16 [row 12]
13706    movu          m6,    [r5 + 15 * 16]
13707    pslldq        m0,    2
13708    pinsrb        m0,    [r3 + 11],     1
13709    pinsrb        m0,    [r3 + 12],     0
13710    pmaddubsw     m3,    m0,            m6
13711    pmulhrsw      m3,    m7
13712    pslldq        m2,    2
13713    pinsrw        m2,    [r4 + 0],     0
13714    pmaddubsw     m5,    m2,            m6
13715    pmulhrsw      m5,    m7
13716    packuswb      m3,    m5
13717    movu          [r0 + 920 * 16],      m3
13718
13719    pslldq        m1,    2
13720    pinsrw        m1,    [r4 + 8],    0
13721    pmaddubsw     m3,    m1,           m6
13722    pmulhrsw      m3,    m7
13723    pslldq        m4,    2
13724    pinsrw        m4,    [r4 + 16],   0
13725    pmaddubsw     m5,    m4,           m6
13726    pmulhrsw      m5,    m7
13727    packuswb      m3,    m5
13728    movu          [r0 + 921 * 16],     m3
13729
13730    ; mode16 [row 13]
13731    movu          m6,    [r5 + 26 * 16]
13732    pslldq        m0,    2
13733    pinsrb        m0,    [r3 + 12],     1
13734    pinsrb        m0,    [r3 + 14],     0
13735    pmaddubsw     m3,    m0,            m6
13736    pmulhrsw      m3,    m7
13737    pslldq        m2,    2
13738    pinsrb        m2,    [r4 + 0],      1
13739    pinsrb        m2,    [r3 + 2],      0
13740    pmaddubsw     m5,    m2,            m6
13741    pmulhrsw      m5,    m7
13742    packuswb      m3,    m5
13743    movu          [r0 + 922 * 16],      m3
13744
13745    pslldq        m1,    2
13746    pinsrw        m1,     [r4 + 7],    0
13747    pmaddubsw     m3,    m1,           m6
13748    pmulhrsw      m3,    m7
13749    pslldq        m4,    2
13750    pinsrw        m4,     [r4 + 15],   0
13751    pmaddubsw     m5,    m4,           m6
13752    pmulhrsw      m5,    m7
13753    packuswb      m3,    m5
13754    movu          [r0 + 923 * 16],     m3
13755
13756    ; mode16 [row 14]
13757    movu          m6,    [r5 + 5 * 16]
13758    pmaddubsw     m3,    m0,            m6
13759    pmulhrsw      m3,    m7
13760    pmaddubsw     m5,    m2,            m6
13761    pmulhrsw      m5,    m7
13762    packuswb      m3,    m5
13763    movu          [r0 + 924 * 16],      m3
13764
13765    pmaddubsw     m3,    m1,            m6
13766    pmulhrsw      m3,    m7
13767    pmaddubsw     m5,    m4,            m6
13768    pmulhrsw      m5,    m7
13769    packuswb      m3,    m5
13770    movu          [r0 + 925 * 16],      m3
13771
13772    ; mode16 [row 15]
13773    movu          m6,    [r5 + 16 * 16]
13774    pslldq        m0,    2
13775    pinsrb        m0,    [r3 + 14],     1
13776    pinsrb        m0,    [r3 + 15],     0
13777    pmaddubsw     m3,    m0,            m6
13778    pmulhrsw      m3,    m7
13779    pslldq        m2,    2
13780    pinsrb        m2,    [r3 + 2],      1
13781    pinsrb        m2,    [r3 + 3],      0
13782    pmaddubsw     m5,    m2,            m6
13783    pmulhrsw      m5,    m7
13784    packuswb      m3,    m5
13785    movu          [r0 + 926 * 16],      m3
13786
13787    pslldq        m1,    2
13788    pinsrw        m1,    [r4 + 6],      0
13789    pmaddubsw     m3,    m1,            m6
13790    pmulhrsw      m3,    m7
13791    pslldq        m4,    2
13792    pinsrw        m4,    [r4 + 14],     0
13793    pmaddubsw     m5,    m4,            m6
13794    pmulhrsw      m5,    m7
13795    packuswb      m3,    m5
13796    movu          [r0 + 927 * 16],      m3
13797
13798    ; mode16 [row 16]
13799    movu          m6,    [r5 + 27 * 16]
13800    pslldq        m0,    2
13801    pinsrb        m0,    [r3 + 15],     1
13802    pinsrb        m0,    [r3 + 17],     0
13803    pmaddubsw     m3,    m0,            m6
13804    pmulhrsw      m3,    m7
13805    pslldq        m2,    2
13806    pinsrb        m2,    [r3 + 3],      1
13807    pinsrb        m2,    [r3 + 5],      0
13808    pmaddubsw     m5,    m2,            m6
13809    pmulhrsw      m5,    m7
13810    packuswb      m3,    m5
13811    movu          [r0 + 928 * 16],      m3
13812
13813    pslldq        m1,    2
13814    pinsrw        m1,    [r4 + 5],      0
13815    pmaddubsw     m3,    m1,            m6
13816    pmulhrsw      m3,    m7
13817    pslldq        m4,    2
13818    pinsrw        m4,    [r4 + 13],     0
13819    pmaddubsw     m5,    m4,            m6
13820    pmulhrsw      m5,    m7
13821    packuswb      m3,    m5
13822    movu          [r0 + 929 * 16],      m3
13823
13824    ; mode16 [row 17]
13825    movu          m6,    [r5 + 6 * 16]
13826    pmaddubsw     m3,    m0,            m6
13827    pmulhrsw      m3,    m7
13828    pmaddubsw     m5,    m2,            m6
13829    pmulhrsw      m5,    m7
13830    packuswb      m3,    m5
13831    movu          [r0 + 930 * 16],      m3
13832
13833    pmaddubsw     m3,    m1,            m6
13834    pmulhrsw      m3,    m7
13835    pmaddubsw     m5,    m4,            m6
13836    pmulhrsw      m5,    m7
13837    packuswb      m3,    m5
13838    movu          [r0 + 931 * 16],      m3
13839
13840    ; mode16 [row 18]
13841    movu          m6,    [r5 + 17 * 16]
13842    pslldq        m0,    2
13843    pinsrb        m0,    [r3 + 17],     1
13844    pinsrb        m0,    [r3 + 18],     0
13845    pmaddubsw     m3,    m0,            m6
13846    pmulhrsw      m3,    m7
13847    pslldq        m2,    2
13848    pinsrb        m2,    [r3 + 5],      1
13849    pinsrb        m2,    [r3 + 6],      0
13850    pmaddubsw     m5,    m2,            m6
13851    pmulhrsw      m5,    m7
13852    packuswb      m3,    m5
13853    movu          [r0 + 932 * 16],      m3
13854
13855    pslldq        m1,    2
13856    pinsrw        m1,    [r4 + 4],      0
13857    pmaddubsw     m3,    m1,            m6
13858    pmulhrsw      m3,    m7
13859    pslldq        m4,    2
13860    pinsrw        m4,    [r4 + 12],     0
13861    pmaddubsw     m5,    m4,            m6
13862    pmulhrsw      m5,    m7
13863    packuswb      m3,    m5
13864    movu          [r0 + 933 * 16],      m3
13865
13866    ; mode16 [row 19]
13867    movu          m6,    [r5 + 28 * 16]
13868    pslldq        m0,    2
13869    pinsrb        m0,    [r3 + 18],     1
13870    pinsrb        m0,    [r3 + 20],     0
13871    pmaddubsw     m3,    m0,            m6
13872    pmulhrsw      m3,    m7
13873    pslldq        m2,    2
13874    pinsrb        m2,    [r3 + 6],      1
13875    pinsrb        m2,    [r3 + 8],      0
13876    pmaddubsw     m5,    m2,            m6
13877    pmulhrsw      m5,    m7
13878    packuswb      m3,    m5
13879    movu          [r0 + 934 * 16],      m3
13880
13881    pslldq        m1,    2
13882    pinsrw        m1,    [r4 + 3],      0
13883    pmaddubsw     m3,    m1,            m6
13884    pmulhrsw      m3,    m7
13885    pslldq        m4,    2
13886    pinsrw        m4,    [r4 + 11],     0
13887    pmaddubsw     m5,    m4,            m6
13888    pmulhrsw      m5,    m7
13889    packuswb      m3,    m5
13890    movu          [r0 + 935 * 16],      m3
13891
13892    ; mode16 [row 20]
13893    movu          m6,    [r5 + 7 * 16]
13894    pmaddubsw     m3,    m0,            m6
13895    pmulhrsw      m3,    m7
13896    pmaddubsw     m5,    m2,            m6
13897    pmulhrsw      m5,    m7
13898    packuswb      m3,    m5
13899    movu          [r0 + 936 * 16],      m3
13900
13901    pmaddubsw     m3,    m1,            m6
13902    pmulhrsw      m3,    m7
13903    pmaddubsw     m5,    m4,            m6
13904    pmulhrsw      m5,    m7
13905    packuswb      m3,    m5
13906    movu          [r0 + 937 * 16],      m3
13907
13908    ; mode16 [row 21]
13909    movu          m6,    [r5 + 18 * 16]
13910    pslldq        m0,    2
13911    pinsrb        m0,    [r3 + 20],     1
13912    pinsrb        m0,    [r3 + 21],     0
13913    pmaddubsw     m3,    m0,            m6
13914    pmulhrsw      m3,    m7
13915    pslldq        m2,    2
13916    pinsrb        m2,    [r3 + 8],      1
13917    pinsrb        m2,    [r3 + 9],      0
13918    pmaddubsw     m5,    m2,            m6
13919    pmulhrsw      m5,    m7
13920    packuswb      m3,    m5
13921    movu          [r0 + 938 * 16],      m3
13922
13923    pslldq        m1,    2
13924    pinsrw        m1,    [r4 + 2],      0
13925    pmaddubsw     m3,    m1,            m6
13926    pmulhrsw      m3,    m7
13927    pslldq        m4,    2
13928    pinsrw        m4,    [r4 + 10],     0
13929    pmaddubsw     m5,    m4,            m6
13930    pmulhrsw      m5,    m7
13931    packuswb      m3,    m5
13932    movu          [r0 + 939 * 16],      m3
13933
13934    ; mode16 [row 22]
13935    movu          m6,    [r5 + 29 * 16]
13936    pslldq        m0,    2
13937    pinsrb        m0,    [r3 + 21],     1
13938    pinsrb        m0,    [r3 + 23],     0
13939    pmaddubsw     m3,    m0,            m6
13940    pmulhrsw      m3,    m7
13941    pslldq        m2,    2
13942    pinsrb        m2,    [r3 +  9],     1
13943    pinsrb        m2,    [r3 + 11],     0
13944    pmaddubsw     m5,    m2,            m6
13945    pmulhrsw      m5,    m7
13946    packuswb      m3,    m5
13947    movu          [r0 + 940 * 16],      m3
13948
13949    pslldq        m1,    2
13950    pinsrw        m1,    [r4 + 1],      0
13951    pmaddubsw     m3,    m1,            m6
13952    pmulhrsw      m3,    m7
13953    pslldq        m4,    2
13954    pinsrw        m4,    [r4 + 9],      0
13955    pmaddubsw     m5,    m4,            m6
13956    pmulhrsw      m5,    m7
13957    packuswb      m3,    m5
13958    movu          [r0 + 941 * 16],      m3
13959
13960    ; mode16 [row 23]
13961    movu          m6,    [r5 + 8 * 16]
13962    pmaddubsw     m3,    m0,            m6
13963    pmulhrsw      m3,    m7
13964    pmaddubsw     m5,    m2,            m6
13965    pmulhrsw      m5,    m7
13966    packuswb      m3,    m5
13967    movu          [r0 + 942 * 16],      m3
13968
13969    pmaddubsw     m3,    m1,            m6
13970    pmulhrsw      m3,    m7
13971    pmaddubsw     m5,    m4,            m6
13972    pmulhrsw      m5,    m7
13973    packuswb      m3,    m5
13974    movu          [r0 + 943 * 16],      m3
13975
13976    ; mode16 [row 24]
13977    movu          m6,    [r5 + 19 * 16]
13978    pslldq        m0,    2
13979    pinsrb        m0,    [r3 + 23],     1
13980    pinsrb        m0,    [r3 + 24],     0
13981    pmaddubsw     m3,    m0,            m6
13982    pmulhrsw      m3,    m7
13983    pslldq        m2,    2
13984    pinsrb        m2,    [r3 + 11],     1
13985    pinsrb        m2,    [r3 + 12],     0
13986    pmaddubsw     m5,    m2,            m6
13987    pmulhrsw      m5,    m7
13988    packuswb      m3,    m5
13989    movu          [r0 + 944 * 16],      m3
13990
13991    pslldq        m1,    2
13992    pinsrw        m1,    [r4 + 0],      0
13993    pmaddubsw     m3,    m1,            m6
13994    pmulhrsw      m3,    m7
13995    pslldq        m4,    2
13996    pinsrw        m4,    [r4 + 8],     0
13997    pmaddubsw     m5,    m4,           m6
13998    pmulhrsw      m5,    m7
13999    packuswb      m3,    m5
14000    movu          [r0 + 945 * 16],     m3
14001
14002    ; mode16 [row 25]
14003    movu          m6,    [r5 + 30 * 16]
14004    pslldq        m0,    2
14005    pinsrb        m0,    [r3 + 24],    1
14006    pinsrb        m0,    [r3 + 26],    0
14007    pmaddubsw     m3,    m0,           m6
14008    pmulhrsw      m3,    m7
14009    pslldq        m2,    2
14010    pinsrb        m2,    [r3 + 12],    1
14011    pinsrb        m2,    [r3 + 14],    0
14012    pmaddubsw     m5,    m2,           m6
14013    pmulhrsw      m5,    m7
14014    packuswb      m3,    m5
14015    movu          [r0 + 946 * 16],     m3
14016
14017    pslldq        m1,    2
14018    pinsrb        m1,    [r4 + 0],     1
14019    pinsrb        m1,    [r3 + 2],     0
14020    pmaddubsw     m3,    m1,           m6
14021    pmulhrsw      m3,    m7
14022    pslldq        m4,    2
14023    pinsrw        m4,    [r4 + 7],     0
14024    pmaddubsw     m5,    m4,           m6
14025    pmulhrsw      m5,    m7
14026    packuswb      m3,    m5
14027    movu          [r0 + 947 * 16],     m3
14028
14029    ; mode16 [row 26]
14030    movu          m6,    [r5 + 9 * 16]
14031    pmaddubsw     m3,    m0,           m6
14032    pmulhrsw      m3,    m7
14033    pmaddubsw     m5,    m2,           m6
14034    pmulhrsw      m5,    m7
14035    packuswb      m3,    m5
14036    movu          [r0 + 948 * 16],     m3
14037
14038    pmaddubsw     m3,    m1,           m6
14039    pmulhrsw      m3,    m7
14040    pmaddubsw     m5,    m4,           m6
14041    pmulhrsw      m5,    m7
14042    packuswb      m3,    m5
14043    movu          [r0 + 949 * 16],     m3
14044
14045    ; mode16 [row 27]
14046    movu          m6,    [r5 + 20 * 16]
14047    pslldq        m0,    2
14048    pinsrb        m0,    [r3 + 26],    1
14049    pinsrb        m0,    [r3 + 27],    0
14050    pmaddubsw     m3,    m0,           m6
14051    pmulhrsw      m3,    m7
14052    pslldq        m2,    2
14053    pinsrb        m2,    [r3 + 14],    1
14054    pinsrb        m2,    [r3 + 15],    0
14055    pmaddubsw     m5,    m2,           m6
14056    pmulhrsw      m5,    m7
14057    packuswb      m3,    m5
14058    movu          [r0 + 950 * 16],     m3
14059
14060    pslldq        m1,    2
14061    pinsrb        m1,    [r3 + 2],     1
14062    pinsrb        m1,    [r3 + 3],     0
14063    pmaddubsw     m3,    m1,           m6
14064    pmulhrsw      m3,    m7
14065    pslldq        m4,    2
14066    pinsrw        m4,    [r4 + 6],     0
14067    pmaddubsw     m5,    m4,           m6
14068    pmulhrsw      m5,    m7
14069    packuswb      m3,    m5
14070    movu          [r0 + 951 * 16],     m3
14071
14072    ; mode16 [row 28]
14073    movu          m6,    [r5 + 31 * 16]
14074    pslldq        m0,    2
14075    pinsrb        m0,    [r3 + 27],    1
14076    pinsrb        m0,    [r3 + 29],    0
14077    pmaddubsw     m3,    m0,           m6
14078    pmulhrsw      m3,    m7
14079    pslldq        m2,    2
14080    pinsrb        m2,    [r3 + 15],    1
14081    pinsrb        m2,    [r3 + 17],    0
14082    pmaddubsw     m5,    m2,           m6
14083    pmulhrsw      m5,    m7
14084    packuswb      m3,    m5
14085    movu          [r0 + 952 * 16],     m3
14086
14087    pslldq        m1,    2
14088    pinsrb        m1,    [r3 + 3],     1
14089    pinsrb        m1,    [r3 + 5],     0
14090    pmaddubsw     m3,    m1,           m6
14091    pmulhrsw      m3,    m7
14092    pslldq        m4,    2
14093    pinsrw        m4,    [r4 + 5],     0
14094    pmaddubsw     m5,    m4,           m6
14095    pmulhrsw      m5,    m7
14096    packuswb      m3,    m5
14097    movu          [r0 + 953 * 16],     m3
14098
14099    ; mode16 [row 29]
14100    movu          m6,    [r5 + 10 * 16]
14101    pmaddubsw     m3,    m0,           m6
14102    pmulhrsw      m3,    m7
14103    pmaddubsw     m5,    m2,           m6
14104    pmulhrsw      m5,    m7
14105    packuswb      m3,    m5
14106    movu          [r0 + 954 * 16],     m3
14107
14108    pmaddubsw     m3,    m1,           m6
14109    pmulhrsw      m3,    m7
14110    pmaddubsw     m5,    m4,           m6
14111    pmulhrsw      m5,    m7
14112    packuswb      m3,    m5
14113    movu          [r0 + 955 * 16],     m3
14114
14115    ; mode16 [row 30]
14116    movu          m6,    [r5 + 21 * 16]
14117    pslldq        m0,    2
14118    pinsrb        m0,    [r3 + 29],    1
14119    pinsrb        m0,    [r3 + 30],    0
14120    pmaddubsw     m3,    m0,           m6
14121    pmulhrsw      m3,    m7
14122    pslldq        m2,    2
14123    pinsrb        m2,    [r3 + 17],    1
14124    pinsrb        m2,    [r3 + 18],    0
14125    pmaddubsw     m5,    m2,           m6
14126    pmulhrsw      m5,    m7
14127    packuswb      m3,    m5
14128    movu          [r0 + 956 * 16],     m3
14129
14130    pslldq        m1,    2
14131    pinsrb        m1,    [r3 + 5],     1
14132    pinsrb        m1,    [r3 + 6],     0
14133    pmaddubsw     m3,    m1,           m6
14134    pmulhrsw      m3,    m7
14135    pslldq        m4,    2
14136    pinsrw        m4,    [r4 + 4],     0
14137    pmaddubsw     m5,    m4,           m6
14138    pmulhrsw      m5,    m7
14139    packuswb      m3,    m5
14140    movu          [r0 + 957 * 16],     m3
14141
14142    ; mode16 [row 31]
14143    pshufb        m5,    m0,            [tab_S2]
14144    movh          [r0 + 958 * 16],      m5
14145    pshufb        m5,    m2,            [tab_S2]
14146    movh          [r0 + 958 * 16 + 8],  m5
14147    pshufb        m5,    m1,            [tab_S2]
14148    movh          [r0 + 959 * 16],      m5
14149    pshufb        m5,    m4,            [tab_S2]
14150    movh          [r0 + 959 * 16 + 8],  m5
14151
14152    ; mode 17 [row 0]
14153    movu          m6,    [r5 + 6 * 16]
14154    movu          m7,    [pw_1024]
14155    movh          m0,    [r4     ]
14156    movh          m1,    [r4 + 1 ]
14157    punpcklbw     m0,    m1
14158    pmaddubsw     m1,    m0,            m6
14159    pmulhrsw      m1,    m7
14160    movh          m2,    [r4 +  8]
14161    movh          m3,    [r4 +  9]
14162    punpcklbw     m2,    m3
14163    pmaddubsw     m3,    m2,            m6
14164    pmulhrsw      m3,    m7
14165    packuswb      m1,    m3
14166    movu          [r0 + 960 * 16],      m1
14167
14168    movh          m1,    [r4 + 16]
14169    movh          m3,    [r4 + 17]
14170    punpcklbw     m1,    m3
14171    pmaddubsw     m3,    m1,            m6
14172    pmulhrsw      m3,    m7
14173    movh          m4,    [r4 + 24]
14174    movh          m5,    [r4 + 25]
14175    punpcklbw     m4,    m5
14176    pmaddubsw     m5,    m4,            m6
14177    pmulhrsw      m5,    m7
14178    packuswb      m3,    m5
14179    movu          [r0 + 961 * 16],      m3
14180
14181    ; mode17 [row 1]
14182    movu          m6,    [r5 + 12 * 16]
14183    pslldq        m0,    2
14184    pinsrb        m0,    [r3 + 0],    1
14185    pinsrb        m0,    [r3 + 1],    0
14186    pmaddubsw     m3,    m0,          m6
14187    pmulhrsw      m3,    m7
14188    pslldq        m2,    2
14189    pinsrw        m2,    [r4 + 7],    0
14190    pmaddubsw     m5,    m2,          m6
14191    pmulhrsw      m5,    m7
14192    packuswb      m3,    m5
14193    movu          [r0 + 962 * 16],    m3
14194
14195    pslldq        m1,    2
14196    pinsrw        m1,    [r4 + 15],   0
14197    pmaddubsw     m3,    m1,          m6
14198    pmulhrsw      m3,    m7
14199    pslldq        m4,    2
14200    pinsrw        m4,    [r4 + 23],   0
14201    pmaddubsw     m5,    m4,          m6
14202    pmulhrsw      m5,    m7
14203    packuswb      m3,    m5
14204    movu          [r0 + 963 * 16],    m3
14205
14206    ; mode17 [row 2]
14207    movu          m6,    [r5 + 18 * 16]
14208    pslldq        m0,    2
14209    pinsrb        m0,    [r3 + 1],    1
14210    pinsrb        m0,    [r3 + 2],    0
14211    pmaddubsw     m3,    m0,          m6
14212    pmulhrsw      m3,    m7
14213    pslldq        m2,    2
14214    pinsrw        m2,    [r4 + 6],    0
14215    pmaddubsw     m5,    m2,          m6
14216    pmulhrsw      m5,    m7
14217    packuswb      m3,    m5
14218    movu          [r0 + 964 * 16],    m3
14219
14220    pslldq        m1,    2
14221    pinsrw        m1,    [r4 + 14],   0
14222    pmaddubsw     m3,    m1,          m6
14223    pmulhrsw      m3,    m7
14224    pslldq        m4,    2
14225    pinsrw        m4,    [r4 + 22],   0
14226    pmaddubsw     m5,    m4,          m6
14227    pmulhrsw      m5,    m7
14228    packuswb      m3,    m5
14229    movu          [r0 + 965 * 16],    m3
14230
14231    ; mode17 [row 3]
14232    movu          m6,    [r5 + 24 * 16]
14233    pslldq        m0,    2
14234    pinsrb        m0,    [r3 + 2],    1
14235    pinsrb        m0,    [r3 + 4],    0
14236    pmaddubsw     m3,    m0,          m6
14237    pmulhrsw      m3,    m7
14238    pslldq        m2,    2
14239    pinsrw        m2,    [r4 + 5],    0
14240    pmaddubsw     m5,    m2,          m6
14241    pmulhrsw      m5,    m7
14242    packuswb      m3,    m5
14243    movu          [r0 + 966 * 16],    m3
14244
14245    pslldq        m1,    2
14246    pinsrw        m1,    [r4 + 13],   0
14247    pmaddubsw     m3,    m1,          m6
14248    pmulhrsw      m3,    m7
14249    pslldq        m4,    2
14250    pinsrw        m4,    [r4 + 21],   0
14251    pmaddubsw     m5,    m4,          m6
14252    pmulhrsw      m5,    m7
14253    packuswb      m3,    m5
14254    movu          [r0 + 967 * 16],    m3
14255
14256    ; mode17 [row 4]
14257    movu          m6,    [r5 + 30 * 16]
14258    pslldq        m0,    2
14259    pinsrb        m0,    [r3 + 4],    1
14260    pinsrb        m0,    [r3 + 5],    0
14261    pmaddubsw     m3,    m0,          m6
14262    pmulhrsw      m3,    m7
14263    pslldq        m2,    2
14264    pinsrw        m2,    [r4 + 4],    0
14265    pmaddubsw     m5,    m2,          m6
14266    pmulhrsw      m5,    m7
14267    packuswb      m3,    m5
14268    movu          [r0 + 968 * 16],    m3
14269
14270    pslldq        m1,    2
14271    pinsrw        m1,    [r4 + 12],   0
14272    pmaddubsw     m3,    m1,          m6
14273    pmulhrsw      m3,    m7
14274    pslldq        m4,    2
14275    pinsrw        m4,    [r4 + 20],  0
14276    pmaddubsw     m5,    m4,          m6
14277    pmulhrsw      m5,    m7
14278    packuswb      m3,    m5
14279    movu          [r0 + 969 * 16],    m3
14280
14281    ; mode17 [row 5]
14282    movu          m6,    [r5 + 4 * 16]
14283    pmaddubsw     m3,    m0,          m6
14284    pmulhrsw      m3,    m7
14285    pmaddubsw     m5,    m2,          m6
14286    pmulhrsw      m5,    m7
14287    packuswb      m3,    m5
14288    movu          [r0 + 970 * 16],    m3
14289
14290    pmaddubsw     m3,    m1,          m6
14291    pmulhrsw      m3,    m7
14292    pmaddubsw     m5,    m4,          m6
14293    pmulhrsw      m5,    m7
14294    packuswb      m3,    m5
14295    movu          [r0 + 971 * 16],    m3
14296
14297    ; mode17 [row 6]
14298    movu          m6,    [r5 + 10 * 16]
14299    pslldq        m0,    2
14300    pinsrb        m0,    [r3 + 5],    1
14301    pinsrb        m0,    [r3 + 6],    0
14302    pmaddubsw     m3,    m0,          m6
14303    pmulhrsw      m3,    m7
14304    pslldq        m2,    2
14305    pinsrw        m2,    [r4 + 3],    0
14306    pmaddubsw     m5,    m2,          m6
14307    pmulhrsw      m5,    m7
14308    packuswb      m3,    m5
14309    movu          [r0 + 972 * 16],    m3
14310
14311    pslldq        m1,    2
14312    pinsrw        m1,    [r4 + 11],   0
14313    pmaddubsw     m3,    m1,          m6
14314    pmulhrsw      m3,    m7
14315    pslldq        m4,    2
14316    pinsrw        m4,    [r4 + 19],   0
14317    pmaddubsw     m5,    m4,          m6
14318    pmulhrsw      m5,    m7
14319    packuswb      m3,    m5
14320    movu          [r0 + 973 * 16],    m3
14321
14322    ; mode17 [row 7]
14323    movu          m6,    [r5 + 16 * 16]
14324    pslldq        m0,    2
14325    pinsrb        m0,    [r3 + 6],    1
14326    pinsrb        m0,    [r3 + 7],    0
14327    pmaddubsw     m3,    m0,          m6
14328    pmulhrsw      m3,    m7
14329    pslldq        m2,    2
14330    pinsrw        m2,    [r4 + 2],    0
14331    pmaddubsw     m5,    m2,          m6
14332    pmulhrsw      m5,    m7
14333    packuswb      m3,    m5
14334    movu          [r0 + 974 * 16],    m3
14335
14336    pslldq        m1,    2
14337    pinsrw        m1,    [r4 + 10],   0
14338    pmaddubsw     m3,    m1,          m6
14339    pmulhrsw      m3,    m7
14340    pslldq        m4,    2
14341    pinsrw        m4,    [r4 + 18],   0
14342    pmaddubsw     m5,    m4,          m6
14343    pmulhrsw      m5,    m7
14344    packuswb      m3,    m5
14345    movu          [r0 + 975 * 16],    m3
14346
14347    ; mode17 [row 8]
14348    movu          m6,    [r5 + 22 * 16]
14349    pslldq        m0,    2
14350    pinsrb        m0,    [r3 + 7],    1
14351    pinsrb        m0,    [r3 + 9],    0
14352    pmaddubsw     m3,    m0,          m6
14353    pmulhrsw      m3,    m7
14354    pslldq        m2,    2
14355    pinsrw        m2,    [r4 + 1],    0
14356    pmaddubsw     m5,    m2,          m6
14357    pmulhrsw      m5,    m7
14358    packuswb      m3,    m5
14359    movu          [r0 + 976 * 16],    m3
14360
14361    pslldq        m1,    2
14362    pinsrw        m1,    [r4 + 9],    0
14363    pmaddubsw     m3,    m1,          m6
14364    pmulhrsw      m3,    m7
14365    pslldq        m4,    2
14366    pinsrw        m4,    [r4 + 17],   0
14367    pmaddubsw     m5,    m4,          m6
14368    pmulhrsw      m5,    m7
14369    packuswb      m3,    m5
14370    movu          [r0 + 977 * 16],    m3
14371
14372    ; mode17 [row 9]
14373    movu          m6,    [r5 + 28 * 16]
14374    pslldq        m0,    2
14375    pinsrb        m0,    [r3 +  9],    1
14376    pinsrb        m0,    [r3 + 10],    0
14377    pmaddubsw     m3,    m0,          m6
14378    pmulhrsw      m3,    m7
14379    pslldq        m2,    2
14380    pinsrw        m2,    [r4 + 0],     0
14381    pmaddubsw     m5,    m2,          m6
14382    pmulhrsw      m5,    m7
14383    packuswb      m3,    m5
14384    movu          [r0 + 978 * 16],    m3
14385
14386    pslldq        m1,    2
14387    pinsrw        m1,    [r4 + 8],    0
14388    pmaddubsw     m3,    m1,          m6
14389    pmulhrsw      m3,    m7
14390    pslldq        m4,    2
14391    pinsrw        m4,    [r4 + 16],   0
14392    pmaddubsw     m5,    m4,          m6
14393    pmulhrsw      m5,    m7
14394    packuswb      m3,    m5
14395    movu          [r0 + 979 * 16],    m3
14396
14397    ; mode17 [row 10]
14398    movu          m6,    [r5 + 2 * 16]
14399    pmaddubsw     m3,    m0,          m6
14400    pmulhrsw      m3,    m7
14401    pmaddubsw     m5,    m2,          m6
14402    pmulhrsw      m5,    m7
14403    packuswb      m3,    m5
14404    movu          [r0 + 980 * 16],    m3
14405
14406    pmaddubsw     m3,    m1,          m6
14407    pmulhrsw      m3,    m7
14408    pmaddubsw     m5,    m4,          m6
14409    pmulhrsw      m5,    m7
14410    packuswb      m3,    m5
14411    movu          [r0 + 981 * 16],    m3
14412
14413    ; mode17 [row 11]
14414    movu          m6,    [r5 + 8 * 16]
14415    pslldq        m0,    2
14416    pinsrb        m0,    [r3 + 10],   1
14417    pinsrb        m0,    [r3 + 11],   0
14418    pmaddubsw     m3,    m0,          m6
14419    pmulhrsw      m3,    m7
14420    pslldq        m2,    2
14421    pinsrb        m2,    [r4 + 0],    1
14422    pinsrb        m2,    [r3 + 1],    0
14423    pmaddubsw     m5,    m2,          m6
14424    pmulhrsw      m5,    m7
14425    packuswb      m3,    m5
14426    movu          [r0 + 982 * 16],    m3
14427
14428    pslldq        m1,    2
14429    pinsrw        m1,    [r4 + 7],     0
14430    pmaddubsw     m3,    m1,          m6
14431    pmulhrsw      m3,    m7
14432    pslldq        m4,    2
14433    pinsrw        m4,    [r4 + 15],    0
14434    pmaddubsw     m5,    m4,          m6
14435    pmulhrsw      m5,    m7
14436    packuswb      m3,    m5
14437    movu          [r0 + 983 * 16],    m3
14438
14439    ; mode17 [row 12]
14440    movu          m6,    [r5 + 14 * 16]
14441    pslldq        m0,    2
14442    pinsrb        m0,    [r3 + 11],   1
14443    pinsrb        m0,    [r3 + 12],   0
14444    pmaddubsw     m3,    m0,          m6
14445    pmulhrsw      m3,    m7
14446    pslldq        m2,    2
14447    pinsrb        m2,    [r3 + 1],    1
14448    pinsrb        m2,    [r3 + 2],    0
14449    pmaddubsw     m5,    m2,          m6
14450    pmulhrsw      m5,    m7
14451    packuswb      m3,    m5
14452    movu          [r0 + 984 * 16],    m3
14453
14454    pslldq        m1,    2
14455    pinsrw        m1,    [r4 + 6],    0
14456    pmaddubsw     m3,    m1,          m6
14457    pmulhrsw      m3,    m7
14458    pslldq        m4,    2
14459    pinsrw        m4,    [r4 + 14],   0
14460    pmaddubsw     m5,    m4,          m6
14461    pmulhrsw      m5,    m7
14462    packuswb      m3,    m5
14463    movu          [r0 + 985 * 16],    m3
14464
14465    ; mode17 [row 13]
14466    movu          m6,    [r5 + 20 * 16]
14467    pslldq        m0,    2
14468    pinsrb        m0,    [r3 + 12],   1
14469    pinsrb        m0,    [r3 + 14],   0
14470    pmaddubsw     m3,    m0,          m6
14471    pmulhrsw      m3,    m7
14472    pslldq        m2,    2
14473    pinsrb        m2,    [r3 + 2],    1
14474    pinsrb        m2,    [r3 + 4],    0
14475    pmaddubsw     m5,    m2,          m6
14476    pmulhrsw      m5,    m7
14477    packuswb      m3,    m5
14478    movu          [r0 + 986 * 16],    m3
14479
14480    pslldq        m1,    2
14481    pinsrw        m1,    [r4 + 5],   0
14482    pmaddubsw     m3,    m1,          m6
14483    pmulhrsw      m3,    m7
14484    pslldq        m4,    2
14485    pinsrw        m4,    [r4 + 13],   0
14486    pmaddubsw     m5,    m4,          m6
14487    pmulhrsw      m5,    m7
14488    packuswb      m3,    m5
14489    movu          [r0 + 987 * 16],    m3
14490
14491    ; mode17 [row 14]
14492    movu          m6,    [r5 + 26 * 16]
14493    pslldq        m0,    2
14494    pinsrb        m0,    [r3 + 14],   1
14495    pinsrb        m0,    [r3 + 15],   0
14496    pmaddubsw     m3,    m0,          m6
14497    pmulhrsw      m3,    m7
14498    pslldq        m2,    2
14499    pinsrb        m2,    [r3 + 4],    1
14500    pinsrb        m2,    [r3 + 5],    0
14501    pmaddubsw     m5,    m2,          m6
14502    pmulhrsw      m5,    m7
14503    packuswb      m3,    m5
14504    movu          [r0 + 988 * 16],    m3
14505
14506    pslldq        m1,    2
14507    pinsrw        m1,    [r4 + 4],   0
14508    pmaddubsw     m3,    m1,          m6
14509    pmulhrsw      m3,    m7
14510    pslldq        m4,    2
14511    pinsrw        m4,    [r4 + 12],   0
14512    pmaddubsw     m5,    m4,          m6
14513    pmulhrsw      m5,    m7
14514    packuswb      m3,    m5
14515    movu          [r0 + 989 * 16],    m3
14516
14517    ; mode17 [row 15]
14518    pshufb        m5,    m0,            [tab_S2]
14519    movh          [r0 + 990 * 16],      m5
14520    pshufb        m5,    m2,            [tab_S2]
14521    movh          [r0 + 990 * 16 + 8],  m5
14522    pshufb        m5,    m1,            [tab_S2]
14523    movh          [r0 + 991 * 16],      m5
14524    pshufb        m5,    m4,            [tab_S2]
14525    movh          [r0 + 991 * 16 + 8],  m5
14526
14527    ; mode17 [row 16]
14528    movu          m6,    [r5 + 6 * 16]
14529    pslldq        m0,    2
14530    pinsrb        m0,    [r3 + 15],   1
14531    pinsrb        m0,    [r3 + 16],   0
14532    pmaddubsw     m3,    m0,          m6
14533    pmulhrsw      m3,    m7
14534    pslldq        m2,    2
14535    pinsrb        m2,    [r3 + 5],    1
14536    pinsrb        m2,    [r3 + 6],    0
14537    pmaddubsw     m5,    m2,          m6
14538    pmulhrsw      m5,    m7
14539    packuswb      m3,    m5
14540    movu          [r0 + 992 * 16],    m3
14541
14542    pslldq        m1,    2
14543    pinsrw        m1,    [r4 + 3],     0
14544    pmaddubsw     m3,    m1,          m6
14545    pmulhrsw      m3,    m7
14546    pslldq        m4,    2
14547    pinsrw        m4,    [r4 + 11],   0
14548    pmaddubsw     m5,    m4,          m6
14549    pmulhrsw      m5,    m7
14550    packuswb      m3,    m5
14551    movu          [r0 + 993 * 16],    m3
14552
14553    ; mode17 [row 17]
14554    movu          m6,    [r5 + 12 * 16]
14555    pslldq        m0,    2
14556    pinsrb        m0,    [r3 + 16],   1
14557    pinsrb        m0,    [r3 + 17],   0
14558    pmaddubsw     m3,    m0,          m6
14559    pmulhrsw      m3,    m7
14560    pslldq        m2,    2
14561    pinsrb        m2,    [r3 + 6],    1
14562    pinsrb        m2,    [r3 + 7],    0
14563    pmaddubsw     m5,    m2,          m6
14564    pmulhrsw      m5,    m7
14565    packuswb      m3,    m5
14566    movu          [r0 + 994 * 16],    m3
14567
14568    pslldq        m1,    2
14569    pinsrw        m1,     [r4 + 2],   0
14570    pmaddubsw     m3,    m1,          m6
14571    pmulhrsw      m3,    m7
14572    pslldq        m4,    2
14573    pinsrw        m4,    [r4 + 10],   0
14574    pmaddubsw     m5,    m4,          m6
14575    pmulhrsw      m5,    m7
14576    packuswb      m3,    m5
14577    movu          [r0 + 995 * 16],    m3
14578
14579    ; mode17 [row 18]
14580    movu          m6,    [r5 + 18 * 16]
14581    pslldq        m0,    2
14582    pinsrb        m0,    [r3 + 17],   1
14583    pinsrb        m0,    [r3 + 18],   0
14584    pmaddubsw     m3,    m0,          m6
14585    pmulhrsw      m3,    m7
14586    pslldq        m2,    2
14587    pinsrb        m2,    [r3 + 7],    1
14588    pinsrb        m2,    [r3 + 9],    0
14589    pmaddubsw     m5,    m2,          m6
14590    pmulhrsw      m5,    m7
14591    packuswb      m3,    m5
14592    movu          [r0 + 996 * 16],    m3
14593
14594    pslldq        m1,    2
14595    pinsrw        m1,    [r4 + 1],    0
14596    pmaddubsw     m3,    m1,          m6
14597    pmulhrsw      m3,    m7
14598    pslldq        m4,    2
14599    pinsrw        m4,    [r4 + 9],    0
14600    pmaddubsw     m5,    m4,          m6
14601    pmulhrsw      m5,    m7
14602    packuswb      m3,    m5
14603    movu          [r0 + 997 * 16],    m3
14604
14605    ; mode17 [row 19]
14606    movu          m6,    [r5 + 24 * 16]
14607    pslldq        m0,    2
14608    pinsrb        m0,    [r3 + 18],   1
14609    pinsrb        m0,    [r3 + 20],   0
14610    pmaddubsw     m3,    m0,          m6
14611    pmulhrsw      m3,    m7
14612    pslldq        m2,    2
14613    pinsrb        m2,    [r3 +  9],   1
14614    pinsrb        m2,    [r3 + 10],   0
14615    pmaddubsw     m5,    m2,          m6
14616    pmulhrsw      m5,    m7
14617    packuswb      m3,    m5
14618    movu          [r0 + 998 * 16],    m3
14619
14620    pslldq        m1,    2
14621    pinsrw        m1,    [r4 + 0],    0
14622    pmaddubsw     m3,    m1,          m6
14623    pmulhrsw      m3,    m7
14624    pslldq        m4,    2
14625    pinsrw        m4,    [r4 + 8],    0
14626    pmaddubsw     m5,    m4,          m6
14627    pmulhrsw      m5,    m7
14628    packuswb      m3,    m5
14629    movu          [r0 + 999 * 16],    m3
14630
14631    ; mode17 [row 20]
14632    movu          m6,    [r5 + 30 * 16]
14633    pslldq        m0,    2
14634    pinsrb        m0,    [r3 + 20],   1
14635    pinsrb        m0,    [r3 + 21],   0
14636    pmaddubsw     m3,    m0,          m6
14637    pmulhrsw      m3,    m7
14638    pslldq        m2,    2
14639    pinsrb        m2,    [r3 + 10],   1
14640    pinsrb        m2,    [r3 + 11],   0
14641    pmaddubsw     m5,    m2,          m6
14642    pmulhrsw      m5,    m7
14643    packuswb      m3,    m5
14644    movu          [r0 + 1000 * 16],   m3
14645
14646    pslldq        m1,    2
14647    pinsrb        m1,    [r4 + 0],    1
14648    pinsrb        m1,    [r3 + 1],    0
14649    pmaddubsw     m3,    m1,          m6
14650    pmulhrsw      m3,    m7
14651    pslldq        m4,    2
14652    ;pinsrb        m4,    [r4 + 8],   1
14653    ;pinsrb        m4,    [r4 + 7],   0
14654    pinsrw        m4,     [r4 + 7],  0
14655    pmaddubsw     m5,    m4,         m6
14656    pmulhrsw      m5,    m7
14657    packuswb      m3,    m5
14658    movu          [r0 + 1001 * 16],  m3
14659
14660    ; mode17 [row 21]
14661    movu          m6,    [r5 + 4 * 16]
14662    pmaddubsw     m3,    m0,          m6
14663    pmulhrsw      m3,    m7
14664    pmaddubsw     m5,    m2,          m6
14665    pmulhrsw      m5,    m7
14666    packuswb      m3,    m5
14667    movu          [r0 + 1002 * 16],   m3
14668
14669    pmaddubsw     m3,    m1,          m6
14670    pmulhrsw      m3,    m7
14671    pmaddubsw     m5,    m4,         m6
14672    pmulhrsw      m5,    m7
14673    packuswb      m3,    m5
14674    movu          [r0 + 1003 * 16],  m3
14675
14676    ; mode17 [row 22]
14677    movu          m6,    [r5 + 10 * 16]
14678    pslldq        m0,    2
14679    pinsrb        m0,    [r3 + 21],   1
14680    pinsrb        m0,    [r3 + 22],   0
14681    pmaddubsw     m3,    m0,          m6
14682    pmulhrsw      m3,    m7
14683    pslldq        m2,    2
14684    pinsrb        m2,    [r3 + 11],   1
14685    pinsrb        m2,    [r3 + 12],   0
14686    pmaddubsw     m5,    m2,          m6
14687    pmulhrsw      m5,    m7
14688    packuswb      m3,    m5
14689    movu          [r0 + 1004 * 16],   m3
14690
14691    pslldq        m1,    2
14692    pinsrb        m1,    [r3 + 1],    1
14693    pinsrb        m1,    [r3 + 2],    0
14694    pmaddubsw     m3,    m1,          m6
14695    pmulhrsw      m3,    m7
14696    pslldq        m4,    2
14697    pinsrw        m4,    [r4 + 6],   0
14698    pmaddubsw     m5,    m4,         m6
14699    pmulhrsw      m5,    m7
14700    packuswb      m3,    m5
14701    movu          [r0 + 1005 * 16],  m3
14702
14703    ; mode17 [row 23]
14704    movu          m6,    [r5 + 16 * 16]
14705    pslldq        m0,    2
14706    pinsrb        m0,    [r3 + 22],   1
14707    pinsrb        m0,    [r3 + 23],   0
14708    pmaddubsw     m3,    m0,          m6
14709    pmulhrsw      m3,    m7
14710    pslldq        m2,    2
14711    pinsrb        m2,    [r3 + 12],   1
14712    pinsrb        m2,    [r3 + 14],   0
14713    pmaddubsw     m5,    m2,          m6
14714    pmulhrsw      m5,    m7
14715    packuswb      m3,    m5
14716    movu          [r0 + 1006 * 16],   m3
14717
14718    pslldq        m1,    2
14719    pinsrb        m1,    [r3 + 2],    1
14720    pinsrb        m1,    [r3 + 4],    0
14721    pmaddubsw     m3,    m1,          m6
14722    pmulhrsw      m3,    m7
14723    pslldq        m4,    2
14724    pinsrw        m4,    [r4 + 5],   0
14725    pmaddubsw     m5,    m4,         m6
14726    pmulhrsw      m5,    m7
14727    packuswb      m3,    m5
14728    movu          [r0 + 1007 * 16],  m3
14729
14730    ; mode17 [row 24]
14731    movu          m6,    [r5 + 22 * 16]
14732    pslldq        m0,    2
14733    pinsrb        m0,    [r3 + 23],   1
14734    pinsrb        m0,    [r3 + 25],   0
14735    pmaddubsw     m3,    m0,          m6
14736    pmulhrsw      m3,    m7
14737    pslldq        m2,    2
14738    pinsrb        m2,    [r3 + 14],   1
14739    pinsrb        m2,    [r3 + 15],   0
14740    pmaddubsw     m5,    m2,          m6
14741    pmulhrsw      m5,    m7
14742    packuswb      m3,    m5
14743    movu          [r0 + 1008 * 16],   m3
14744
14745    pslldq        m1,    2
14746    pinsrb        m1,    [r3 + 4],    1
14747    pinsrb        m1,    [r3 + 5],    0
14748    pmaddubsw     m3,    m1,          m6
14749    pmulhrsw      m3,    m7
14750    pslldq        m4,    2
14751    pinsrw        m4,    [r4 + 4],   0
14752    pmaddubsw     m5,    m4,         m6
14753    pmulhrsw      m5,    m7
14754    packuswb      m3,    m5
14755    movu          [r0 + 1009 * 16],  m3
14756
14757    ; mode17 [row 25]
14758    movu          m6,    [r5 + 28 * 16]
14759    pslldq        m0,    2
14760    pinsrb        m0,    [r3 + 25],   1
14761    pinsrb        m0,    [r3 + 26],   0
14762    pmaddubsw     m3,    m0,          m6
14763    pmulhrsw      m3,    m7
14764    pslldq        m2,    2
14765    pinsrb        m2,    [r3 + 15],   1
14766    pinsrb        m2,    [r3 + 16],   0
14767    pmaddubsw     m5,    m2,          m6
14768    pmulhrsw      m5,    m7
14769    packuswb      m3,    m5
14770    movu          [r0 + 1010 * 16],   m3
14771
14772    pslldq        m1,    2
14773    pinsrb        m1,    [r3 + 5],    1
14774    pinsrb        m1,    [r3 + 6],    0
14775    pmaddubsw     m3,    m1,          m6
14776    pmulhrsw      m3,    m7
14777    pslldq        m4,    2
14778    pinsrw        m4,     [r4 + 3],   0
14779    pmaddubsw     m5,    m4,          m6
14780    pmulhrsw      m5,    m7
14781    packuswb      m3,    m5
14782    movu          [r0 + 1011 * 16],   m3
14783
14784    ; mode17 [row 26]
14785    movu          m6,    [r5 + 2 * 16]
14786    pmaddubsw     m3,    m0,          m6
14787    pmulhrsw      m3,    m7
14788    pmaddubsw     m5,    m2,          m6
14789    pmulhrsw      m5,    m7
14790    packuswb      m3,    m5
14791    movu          [r0 + 1012 * 16],   m3
14792
14793    pmaddubsw     m3,    m1,          m6
14794    pmulhrsw      m3,    m7
14795    pmaddubsw     m5,    m4,          m6
14796    pmulhrsw      m5,    m7
14797    packuswb      m3,    m5
14798    movu          [r0 + 1013 * 16],   m3
14799
14800    ; mode17 [row 27]
14801    movu          m6,    [r5 + 8 * 16]
14802    pslldq        m0,    2
14803    pinsrb        m0,    [r3 + 26],   1
14804    pinsrb        m0,    [r3 + 27],   0
14805    pmaddubsw     m3,    m0,          m6
14806    pmulhrsw      m3,    m7
14807    pslldq        m2,    2
14808    pinsrb        m2,    [r3 + 16],   1
14809    pinsrb        m2,    [r3 + 17],   0
14810    pmaddubsw     m5,    m2,          m6
14811    pmulhrsw      m5,    m7
14812    packuswb      m3,    m5
14813    movu          [r0 + 1014 * 16],   m3
14814
14815    pslldq        m1,    2
14816    pinsrb        m1,    [r3 + 6],    1
14817    pinsrb        m1,    [r3 + 7],    0
14818    pmaddubsw     m3,    m1,          m6
14819    pmulhrsw      m3,    m7
14820    pslldq        m4,    2
14821    pinsrw        m4,    [r4 + 2],    0
14822    pmaddubsw     m5,    m4,          m6
14823    pmulhrsw      m5,    m7
14824    packuswb      m3,    m5
14825    movu          [r0 + 1015 * 16],   m3
14826
14827    ; mode17 [row 28]
14828    movu          m6,    [r5 + 14 * 16]
14829    pslldq        m0,    2
14830    pinsrb        m0,    [r3 + 27],   1
14831    pinsrb        m0,    [r3 + 28],   0
14832    pmaddubsw     m3,    m0,          m6
14833    pmulhrsw      m3,    m7
14834    pslldq        m2,    2
14835    pinsrb        m2,    [r3 + 17],   1
14836    pinsrb        m2,    [r3 + 18],   0
14837    pmaddubsw     m5,    m2,          m6
14838    pmulhrsw      m5,    m7
14839    packuswb      m3,    m5
14840    movu          [r0 + 1016 * 16],   m3
14841
14842    pslldq        m1,    2
14843    pinsrb        m1,    [r3 + 7],    1
14844    pinsrb        m1,    [r3 + 9],    0
14845    pmaddubsw     m3,    m1,          m6
14846    pmulhrsw      m3,    m7
14847    pslldq        m4,    2
14848    pinsrw        m4,    [r4 + 1],    0
14849    pmaddubsw     m5,    m4,          m6
14850    pmulhrsw      m5,    m7
14851    packuswb      m3,    m5
14852    movu          [r0 + 1017 * 16],   m3
14853
14854    ; mode17 [row 29]
14855    movu          m6,    [r5 + 20 * 16]
14856    pslldq        m0,    2
14857    pinsrb        m0,    [r3 + 28],   1
14858    pinsrb        m0,    [r3 + 30],   0
14859    pmaddubsw     m3,    m0,          m6
14860    pmulhrsw      m3,    m7
14861    pslldq        m2,    2
14862    pinsrb        m2,    [r3 + 18],   1
14863    pinsrb        m2,    [r3 + 20],   0
14864    pmaddubsw     m5,    m2,          m6
14865    pmulhrsw      m5,    m7
14866    packuswb      m3,    m5
14867    movu          [r0 + 1018 * 16],   m3
14868
14869    pslldq        m1,    2
14870    pinsrb        m1,    [r3 +  9],    1
14871    pinsrb        m1,    [r3 + 10],    0
14872    pmaddubsw     m3,    m1,          m6
14873    pmulhrsw      m3,    m7
14874    pslldq        m4,    2
14875    pinsrw        m4,    [r4 + 0],    0
14876    pmaddubsw     m5,    m4,          m6
14877    pmulhrsw      m5,    m7
14878    packuswb      m3,    m5
14879    movu          [r0 + 1019 * 16],   m3
14880
14881    ; mode17 [row 30]
14882    movu          m6,    [r5 + 26 * 16]
14883    pslldq        m0,    2
14884    pinsrb        m0,    [r3 + 30],   1
14885    pinsrb        m0,    [r3 + 31],   0
14886    pmaddubsw     m3,    m0,          m6
14887    pmulhrsw      m3,    m7
14888    pslldq        m2,    2
14889    pinsrb        m2,    [r3 + 20],   1
14890    pinsrb        m2,    [r3 + 21],   0
14891    pmaddubsw     m5,    m2,          m6
14892    pmulhrsw      m5,    m7
14893    packuswb      m3,    m5
14894    movu          [r0 + 1020 * 16],   m3
14895
14896    pslldq        m1,    2
14897    pinsrb        m1,    [r3 + 10],    1
14898    pinsrb        m1,    [r3 + 11],    0
14899    pmaddubsw     m3,    m1,          m6
14900    pmulhrsw      m3,    m7
14901    pslldq        m4,    2
14902    pinsrb        m4,    [r4 + 0],    1
14903    pinsrb        m4,    [r3 + 1],    0
14904    pmaddubsw     m5,    m4,          m6
14905    pmulhrsw      m5,    m7
14906    packuswb      m3,    m5
14907    movu          [r0 + 1021 * 16],   m3
14908
14909    ; mode17 [row 31]
14910    pshufb        m5,    m0,            [tab_S2]
14911    movh          [r0 + 1022 * 16],     m5
14912    pshufb        m5,    m2,            [tab_S2]
14913    movh          [r0 + 1022 * 16 + 8], m5
14914    pshufb        m5,    m1,            [tab_S2]
14915    movh          [r0 + 1023 * 16],     m5
14916    pshufb        m5,    m4,            [tab_S2]
14917    movh          [r0 + 1023 * 16 + 8], m5
14918
14919    ;mode 18[row 0]
14920    movu          m0,                   [r3]
14921    movu          [r0 + 1024 * 16],     m0
14922    movu          m1,                   [r3 + 16]
14923    movu          [r0 + 1025 * 16],     m1
14924
14925    ;mode 18[row 1]
14926    pslldq        m0,                   1
14927    pinsrb        m0,                   [r4 + 1],     0
14928    movu          [r0 + 1026 * 16],     m0
14929    pslldq        m1,                   1
14930    pinsrb        m1,                   [r3 + 15],    0
14931    movu          [r0 + 1027 * 16],     m1
14932
14933    ;mode 18[row 2]
14934    pslldq        m0,                   1
14935    pinsrb        m0,                   [r4 + 2],     0
14936    movu          [r0 + 1028 * 16],     m0
14937    pslldq        m1,                   1
14938    pinsrb        m1,                   [r3 + 14],    0
14939    movu          [r0 + 1029 * 16],     m1
14940
14941    ;mode 18[row 3]
14942    pslldq        m0,                   1
14943    pinsrb        m0,                   [r4 + 3],     0
14944    movu          [r0 + 1030 * 16],     m0
14945    pslldq        m1,                   1
14946    pinsrb        m1,                   [r3 + 13],    0
14947    movu          [r0 + 1031 * 16],     m1
14948
14949    ;mode 18[row 4]
14950    pslldq        m0,                   1
14951    pinsrb        m0,                   [r4 + 4],     0
14952    movu          [r0 + 1032 * 16],     m0
14953    pslldq        m1,                   1
14954    pinsrb        m1,                   [r3 + 12],    0
14955    movu          [r0 + 1033 * 16],     m1
14956
14957    ;mode 18[row 5]
14958    pslldq        m0,                   1
14959    pinsrb        m0,                   [r4 + 5],     0
14960    movu          [r0 + 1034 * 16],     m0
14961    pslldq        m1,                   1
14962    pinsrb        m1,                   [r3 + 11],    0
14963    movu          [r0 + 1035 * 16],     m1
14964
14965    ;mode 18[row 6]
14966    pslldq        m0,                   1
14967    pinsrb        m0,                   [r4 + 6],     0
14968    movu          [r0 + 1036 * 16],     m0
14969    pslldq        m1,                   1
14970    pinsrb        m1,                   [r3 + 10],    0
14971    movu          [r0 + 1037 * 16],     m1
14972
14973    ;mode 18[row 7]
14974    pslldq        m0,                   1
14975    pinsrb        m0,                   [r4 + 7],     0
14976    movu          [r0 + 1038 * 16],     m0
14977    pslldq        m1,                   1
14978    pinsrb        m1,                   [r3 + 9],     0
14979    movu          [r0 + 1039 * 16],     m1
14980
14981    ;mode 18[row 8]
14982    pslldq        m0,                   1
14983    pinsrb        m0,                   [r4 + 8],     0
14984    movu          [r0 + 1040 * 16],     m0
14985    pslldq        m1,                   1
14986    pinsrb        m1,                   [r3 + 8],     0
14987    movu          [r0 + 1041 * 16],     m1
14988
14989    ;mode 18[row 9]
14990    pslldq        m0,                   1
14991    pinsrb        m0,                   [r4 +  9],    0
14992    movu          [r0 + 1042 * 16],     m0
14993    pslldq        m1,                   1
14994    pinsrb        m1,                   [r3 + 7],     0
14995    movu          [r0 + 1043 * 16],     m1
14996
14997    ;mode 18[row 10]
14998    pslldq        m0,                   1
14999    pinsrb        m0,                   [r4 + 10],    0
15000    movu          [r0 + 1044 * 16],     m0
15001    pslldq        m1,                   1
15002    pinsrb        m1,                   [r3 + 6],     0
15003    movu          [r0 + 1045 * 16],     m1
15004
15005    ;mode 18[row 11]
15006    pslldq        m0,                   1
15007    pinsrb        m0,                   [r4 + 11],    0
15008    movu          [r0 + 1046 * 16],     m0
15009    pslldq        m1,                   1
15010    pinsrb        m1,                   [r3 + 5],     0
15011    movu          [r0 + 1047 * 16],     m1
15012
15013    ;mode 18[row 12]
15014    pslldq        m0,                   1
15015    pinsrb        m0,                   [r4 + 12],    0
15016    movu          [r0 + 1048 * 16],     m0
15017    pslldq        m1,                   1
15018    pinsrb        m1,                   [r3 + 4],     0
15019    movu          [r0 + 1049 * 16],     m1
15020
15021    ;mode 18[row 13]
15022    pslldq        m0,                   1
15023    pinsrb        m0,                   [r4 + 13],    0
15024    movu          [r0 + 1050 * 16],     m0
15025    pslldq        m1,                   1
15026    pinsrb        m1,                   [r3 + 3],     0
15027    movu          [r0 + 1051 * 16],     m1
15028
15029    ;mode 18[row 14]
15030    pslldq        m0,                   1
15031    pinsrb        m0,                   [r4 + 14],    0
15032    movu          [r0 + 1052 * 16],     m0
15033    pslldq        m1,                   1
15034    pinsrb        m1,                   [r3 + 2],     0
15035    movu          [r0 + 1053 * 16],     m1
15036
15037    ;mode 18[row 15]
15038    pslldq        m0,                   1
15039    pinsrb        m0,                   [r4 + 15],    0
15040    movu          [r0 + 1054 * 16],     m0
15041    pslldq        m1,                   1
15042    pinsrb        m1,                   [r3 + 1],     0
15043    movu          [r0 + 1055 * 16],     m1
15044
15045    ;mode 18[row 16]
15046    pslldq        m0,                   1
15047    pinsrb        m0,                   [r4 + 16],    0
15048    movu          [r0 + 1056 * 16],     m0
15049    pslldq        m1,                   1
15050    pinsrb        m1,                   [r3 + 0],     0
15051    movu          [r0 + 1057 * 16],     m1
15052
15053    ;mode 18[row 17]
15054    pslldq        m0,                   1
15055    pinsrb        m0,                   [r4 + 17],    0
15056    movu          [r0 + 1058 * 16],     m0
15057    pslldq        m1,                   1
15058    pinsrb        m1,                   [r4 + 1],     0
15059    movu          [r0 + 1059 * 16],     m1
15060
15061    ;mode 18[row 18]
15062    pslldq        m0,                   1
15063    pinsrb        m0,                   [r4 + 18],    0
15064    movu          [r0 + 1060 * 16],     m0
15065    pslldq        m1,                   1
15066    pinsrb        m1,                   [r4 + 2],     0
15067    movu          [r0 + 1061 * 16],     m1
15068
15069    ;mode 18[row 19]
15070    pslldq        m0,                   1
15071    pinsrb        m0,                   [r4 + 19],    0
15072    movu          [r0 + 1062 * 16],     m0
15073    pslldq        m1,                   1
15074    pinsrb        m1,                   [r4 + 3],     0
15075    movu          [r0 + 1063 * 16],     m1
15076
15077    ;mode 18[row 20]
15078    pslldq        m0,                   1
15079    pinsrb        m0,                   [r4 + 20],    0
15080    movu          [r0 + 1064 * 16],     m0
15081    pslldq        m1,                   1
15082    pinsrb        m1,                   [r4 + 4],     0
15083    movu          [r0 + 1065 * 16],     m1
15084
15085    ;mode 18[row 21]
15086    pslldq        m0,                   1
15087    pinsrb        m0,                   [r4 + 21],    0
15088    movu          [r0 + 1066 * 16],     m0
15089    pslldq        m1,                   1
15090    pinsrb        m1,                   [r4 + 5],     0
15091    movu          [r0 + 1067 * 16],     m1
15092
15093    ;mode 18[row 22]
15094    pslldq        m0,                   1
15095    pinsrb        m0,                   [r4 + 22],    0
15096    movu          [r0 + 1068 * 16],     m0
15097    pslldq        m1,                   1
15098    pinsrb        m1,                   [r4 + 6],     0
15099    movu          [r0 + 1069 * 16],     m1
15100
15101    ;mode 18[row 23]
15102    pslldq        m0,                   1
15103    pinsrb        m0,                   [r4 + 23],    0
15104    movu          [r0 + 1070 * 16],     m0
15105    pslldq        m1,                   1
15106    pinsrb        m1,                   [r4 + 7],     0
15107    movu          [r0 + 1071 * 16],     m1
15108
15109    ;mode 18[row 24]
15110    pslldq        m0,                   1
15111    pinsrb        m0,                   [r4 + 24],    0
15112    movu          [r0 + 1072 * 16],     m0
15113    pslldq        m1,                   1
15114    pinsrb        m1,                   [r4 + 8],     0
15115    movu          [r0 + 1073 * 16],     m1
15116
15117    ;mode 18[row 25]
15118    pslldq        m0,                   1
15119    pinsrb        m0,                   [r4 + 25],    0
15120    movu          [r0 + 1074 * 16],     m0
15121    pslldq        m1,                   1
15122    pinsrb        m1,                   [r4 + 9],     0
15123    movu          [r0 + 1075 * 16],     m1
15124
15125    ;mode 18[row 26]
15126    pslldq        m0,                   1
15127    pinsrb        m0,                   [r4 + 26],    0
15128    movu          [r0 + 1076 * 16],     m0
15129    pslldq        m1,                   1
15130    pinsrb        m1,                   [r4 + 10],    0
15131    movu          [r0 + 1077 * 16],     m1
15132
15133    ;mode 18[row 27]
15134    pslldq        m0,                   1
15135    pinsrb        m0,                   [r4 + 27],    0
15136    movu          [r0 + 1078 * 16],     m0
15137    pslldq        m1,                   1
15138    pinsrb        m1,                   [r4 + 11],    0
15139    movu          [r0 + 1079 * 16],     m1
15140
15141    ;mode 18[row 28]
15142    pslldq        m0,                   1
15143    pinsrb        m0,                   [r4 + 28],    0
15144    movu          [r0 + 1080 * 16],     m0
15145    pslldq        m1,                   1
15146    pinsrb        m1,                   [r4 + 12],    0
15147    movu          [r0 + 1081 * 16],     m1
15148
15149    ;mode 18[row 29]
15150    pslldq        m0,                   1
15151    pinsrb        m0,                   [r4 + 29],    0
15152    movu          [r0 + 1082 * 16],     m0
15153    pslldq        m1,                   1
15154    pinsrb        m1,                   [r4 + 13],    0
15155    movu          [r0 + 1083 * 16],     m1
15156
15157    ;mode 18[row 30]
15158    pslldq        m0,                   1
15159    pinsrb        m0,                   [r4 + 30],    0
15160    movu          [r0 + 1084 * 16],     m0
15161    pslldq        m1,                   1
15162    pinsrb        m1,                   [r4 + 14],    0
15163    movu          [r0 + 1085 * 16],     m1
15164
15165    ;mode 18[row 31]
15166    pslldq        m0,                   1
15167    pinsrb        m0,                   [r4 + 31],    0
15168    movu          [r0 + 1086 * 16],     m0
15169    pslldq        m1,                   1
15170    pinsrb        m1,                   [r4 + 15],    0
15171    movu          [r0 + 1087 * 16],     m1
15172
15173    ; mode 19 [row 0]
15174    movu          m6,    [r5 + 6 * 16]
15175    movu          m0,    [r3         ]
15176    movu          m1,    [r3 + 1     ]
15177    punpcklbw     m0,    m1
15178    pmaddubsw     m1,    m0,            m6
15179    pmulhrsw      m1,    m7
15180    movu          m2,    [r3 + 8]
15181    movu          m3,    [r3 + 9]
15182    punpcklbw     m2,    m3
15183    pmaddubsw     m3,    m2,            m6
15184    pmulhrsw      m3,    m7
15185    packuswb      m1,    m3
15186    movu          [r0 + 1088 * 16],     m1
15187
15188    movu          m1,    [r3 + 16]
15189    movu          m3,    [r3 + 17]
15190    punpcklbw     m1,    m3
15191    pmaddubsw     m4,    m1,            m6
15192    pmulhrsw      m4,    m7
15193    movu          m3,    [r3 + 24]
15194    movu          m5,    [r3 + 25]
15195    punpcklbw     m3,    m5
15196    pmaddubsw     m5,    m3,            m6
15197    pmulhrsw      m5,    m7
15198    packuswb      m4,    m5
15199    movu          [r0 + 1089 * 16],     m4
15200
15201    ; mode 19 [row 1]
15202    movu          m6,    [r5 + 12 * 16]
15203    pslldq        m0,    2
15204    pinsrb        m0,    [r4 + 0],      1
15205    pinsrb        m0,    [r4 + 1],      0
15206    pmaddubsw     m4,    m0,            m6
15207    pmulhrsw      m4,    m7
15208    pslldq        m2,    2
15209    pinsrw        m2,    [r3 + 7],      0
15210    pmaddubsw     m5,    m2,            m6
15211    pmulhrsw      m5,    m7
15212    packuswb      m4,    m5
15213    movu          [r0 + 1090 * 16],     m4
15214    pslldq        m1,    2
15215    pinsrw        m1,    [r3 + 15],     0
15216    pmaddubsw     m4,    m1,            m6
15217    pmulhrsw      m4,    m7
15218    pslldq        m3,    2
15219    pinsrw        m3,    [r3 + 23],     0
15220    pmaddubsw     m5,    m3,            m6
15221    pmulhrsw      m5,    m7
15222    packuswb      m4,    m5
15223    movu          [r0 + 1091 * 16],     m4
15224
15225    ; mode 19 [row 2]
15226    movu          m6,    [r5 + 18 * 16]
15227    pslldq        m0,    2
15228    pinsrb        m0,    [r4 + 1],      1
15229    pinsrb        m0,    [r4 + 2],      0
15230    pmaddubsw     m4,    m0,            m6
15231    pmulhrsw      m4,    m7
15232    pslldq        m2,    2
15233    pinsrw        m2,    [r3 + 6],      0
15234    pmaddubsw     m5,    m2,            m6
15235    pmulhrsw      m5,    m7
15236    packuswb      m4,    m5
15237    movu          [r0 + 1092 * 16],     m4
15238    pslldq        m1,    2
15239    pinsrw        m1,    [r3 + 14],     0
15240    pmaddubsw     m4,    m1,            m6
15241    pmulhrsw      m4,    m7
15242    pslldq        m3,    2
15243    pinsrw        m3,    [r3 + 22],     0
15244    pmaddubsw     m5,    m3,            m6
15245    pmulhrsw      m5,    m7
15246    packuswb      m4,    m5
15247    movu          [r0 + 1093 * 16],     m4
15248
15249    ; mode 19 [row 3]
15250    movu          m6,    [r5 + 24 * 16]
15251    pslldq        m0,    2
15252    pinsrb        m0,    [r4 + 2],      1
15253    pinsrb        m0,    [r4 + 4],      0
15254    pmaddubsw     m4,    m0,            m6
15255    pmulhrsw      m4,    m7
15256    pslldq        m2,    2
15257    pinsrw        m2,    [r3 + 5],      0
15258    pmaddubsw     m5,    m2,            m6
15259    pmulhrsw      m5,    m7
15260    packuswb      m4,    m5
15261    movu          [r0 + 1094 * 16],     m4
15262    pslldq        m1,    2
15263    pinsrw        m1,    [r3 + 13],     0
15264    pmaddubsw     m4,    m1,            m6
15265    pmulhrsw      m4,    m7
15266    pslldq        m3,    2
15267    pinsrw        m3,    [r3 + 21],     0
15268    pmaddubsw     m5,    m3,            m6
15269    pmulhrsw      m5,    m7
15270    packuswb      m4,    m5
15271    movu          [r0 + 1095 * 16],     m4
15272
15273    ; mode 19 [row 4]
15274    movu          m6,    [r5 + 30 * 16]
15275    pslldq        m0,    2
15276    pinsrb        m0,    [r4 + 4],      1
15277    pinsrb        m0,    [r4 + 5],      0
15278    pmaddubsw     m4,    m0,            m6
15279    pmulhrsw      m4,    m7
15280    pslldq        m2,    2
15281    pinsrw        m2,    [r3 + 4],      0
15282    pmaddubsw     m5,    m2,            m6
15283    pmulhrsw      m5,    m7
15284    packuswb      m4,    m5
15285    movu          [r0 + 1096 * 16],     m4
15286    pslldq        m1,    2
15287    pinsrw        m1,    [r3 + 12],     0
15288    pmaddubsw     m4,    m1,            m6
15289    pmulhrsw      m4,    m7
15290    pslldq        m3,    2
15291    pinsrw        m3,    [r3 + 20],     0
15292    pmaddubsw     m5,    m3,            m6
15293    pmulhrsw      m5,    m7
15294    packuswb      m4,    m5
15295    movu          [r0 + 1097 * 16],     m4
15296
15297    ; mode 19 [row 5]
15298    movu          m6,    [r5 + 4 * 16]
15299    pmaddubsw     m4,    m0,            m6
15300    pmulhrsw      m4,    m7
15301    pmaddubsw     m5,    m2,            m6
15302    pmulhrsw      m5,    m7
15303    packuswb      m4,    m5
15304    movu          [r0 + 1098 * 16],     m4
15305    pmaddubsw     m4,    m1,            m6
15306    pmulhrsw      m4,    m7
15307    pmaddubsw     m5,    m3,            m6
15308    pmulhrsw      m5,    m7
15309    packuswb      m4,    m5
15310    movu          [r0 + 1099 * 16],     m4
15311
15312    ; mode 19 [row 6]
15313    movu          m6,    [r5 + 10 * 16]
15314    pslldq        m0,    2
15315    pinsrb        m0,    [r4 + 5],      1
15316    pinsrb        m0,    [r4 + 6],      0
15317    pmaddubsw     m4,    m0,            m6
15318    pmulhrsw      m4,    m7
15319    pslldq        m2,    2
15320    pinsrw        m2,    [r3 + 3],     0
15321    pmaddubsw     m5,    m2,            m6
15322    pmulhrsw      m5,    m7
15323    packuswb      m4,    m5
15324    movu          [r0 +  1100 * 16],    m4
15325    pslldq        m1,    2
15326    pinsrw        m1,    [r3 + 11],     0
15327    pmaddubsw     m4,    m1,            m6
15328    pmulhrsw      m4,    m7
15329    pslldq        m3,    2
15330    pinsrw        m3,    [r3 + 19],     0
15331    pmaddubsw     m5,    m3,            m6
15332    pmulhrsw      m5,    m7
15333    packuswb      m4,    m5
15334    movu          [r0 +  1101 * 16],    m4
15335
15336    ; mode 19 [row 7]
15337    movu          m6,    [r5 + 16 * 16]
15338    pslldq        m0,    2
15339    pinsrb        m0,    [r4 + 6],      1
15340    pinsrb        m0,    [r4 + 7],      0
15341    pmaddubsw     m4,    m0,            m6
15342    pmulhrsw      m4,    m7
15343    pslldq        m2,    2
15344    pinsrw        m2,    [r3 + 2],     0
15345    pmaddubsw     m5,    m2,            m6
15346    pmulhrsw      m5,    m7
15347    packuswb      m4,    m5
15348    movu          [r0 +  1102 * 16],    m4
15349    pslldq        m1,    2
15350    pinsrw        m1,    [r3 + 10],     0
15351    pmaddubsw     m4,    m1,            m6
15352    pmulhrsw      m4,    m7
15353    pslldq        m3,    2
15354    pinsrw        m3,    [r3 + 18],     0
15355    pmaddubsw     m5,    m3,            m6
15356    pmulhrsw      m5,    m7
15357    packuswb      m4,    m5
15358    movu          [r0 +  1103 * 16],    m4
15359
15360    ; mode 19 [row 8]
15361    movu          m6,    [r5 + 22 * 16]
15362    pslldq        m0,    2
15363    pinsrb        m0,    [r4 + 7],      1
15364    pinsrb        m0,    [r4 + 9],      0
15365    pmaddubsw     m4,    m0,            m6
15366    pmulhrsw      m4,    m7
15367    pslldq        m2,    2
15368    pinsrw        m2,    [r3 + 1],     0
15369    pmaddubsw     m5,    m2,            m6
15370    pmulhrsw      m5,    m7
15371    packuswb      m4,    m5
15372    movu          [r0 +  1104 * 16],    m4
15373    pslldq        m1,    2
15374    pinsrw        m1,    [r3 + 9],     0
15375    pmaddubsw     m4,    m1,            m6
15376    pmulhrsw      m4,    m7
15377    pslldq        m3,    2
15378    pinsrw        m3,    [r3 + 17],     0
15379    pmaddubsw     m5,    m3,            m6
15380    pmulhrsw      m5,    m7
15381    packuswb      m4,    m5
15382    movu          [r0 +  1105 * 16],    m4
15383
15384    ; mode 19 [row 9]
15385    movu          m6,    [r5 + 28 * 16]
15386    pslldq        m0,    2
15387    pinsrb        m0,    [r4 +  9],     1
15388    pinsrb        m0,    [r4 + 10],     0
15389    pmaddubsw     m4,    m0,            m6
15390    pmulhrsw      m4,    m7
15391    pslldq        m2,    2
15392    pinsrw        m2,    [r3 + 0],      0
15393    pmaddubsw     m5,    m2,            m6
15394    pmulhrsw      m5,    m7
15395    packuswb      m4,    m5
15396    movu          [r0 +  1106 * 16],    m4
15397    pslldq        m1,    2
15398    pinsrw        m1,    [r3 + 8],      0
15399    pmaddubsw     m4,    m1,            m6
15400    pmulhrsw      m4,    m7
15401    pslldq        m3,    2
15402    pinsrw        m3,    [r3 + 16],     0
15403    pmaddubsw     m5,    m3,            m6
15404    pmulhrsw      m5,    m7
15405    packuswb      m4,    m5
15406    movu          [r0 +  1107 * 16],    m4
15407
15408    ; mode 19 [row 10]
15409    movu          m6,    [r5 + 2 * 16]
15410    pmaddubsw     m4,    m0,            m6
15411    pmulhrsw      m4,    m7
15412    pmaddubsw     m5,    m2,            m6
15413    pmulhrsw      m5,    m7
15414    packuswb      m4,    m5
15415    movu          [r0 +  1108 * 16],    m4
15416    pmaddubsw     m4,    m1,            m6
15417    pmulhrsw      m4,    m7
15418    pmaddubsw     m5,    m3,            m6
15419    pmulhrsw      m5,    m7
15420    packuswb      m4,    m5
15421    movu          [r0 +  1109 * 16],    m4
15422
15423    ; mode 19 [row 11]
15424    movu          m6,    [r5 + 8 * 16]
15425    pslldq        m0,    2
15426    pinsrb        m0,    [r4 + 10],     1
15427    pinsrb        m0,    [r4 + 11],     0
15428    pmaddubsw     m4,    m0,            m6
15429    pmulhrsw      m4,    m7
15430    pslldq        m2,    2
15431    pinsrb        m2,    [r3 + 0],      1
15432    pinsrb        m2,    [r4 + 1],      0
15433    pmaddubsw     m5,    m2,            m6
15434    pmulhrsw      m5,    m7
15435    packuswb      m4,    m5
15436    movu          [r0 +  1110 * 16],    m4
15437    pslldq        m1,    2
15438    pinsrw        m1,    [r3 + 7],      0
15439    pmaddubsw     m4,    m1,            m6
15440    pmulhrsw      m4,    m7
15441    pslldq        m3,    2
15442    pinsrw        m3,    [r3 + 15],     0
15443    pmaddubsw     m5,    m3,            m6
15444    pmulhrsw      m5,    m7
15445    packuswb      m4,    m5
15446    movu          [r0 +  1111 * 16],    m4
15447
15448    ; mode 19 [row 12]
15449    movu          m6,    [r5 + 14 * 16]
15450    pslldq        m0,    2
15451    pinsrb        m0,    [r4 + 11],     1
15452    pinsrb        m0,    [r4 + 12],     0
15453    pmaddubsw     m4,    m0,            m6
15454    pmulhrsw      m4,    m7
15455    pslldq        m2,    2
15456    pinsrb        m2,    [r4 + 1],      1
15457    pinsrb        m2,    [r4 + 2],      0
15458    pmaddubsw     m5,    m2,            m6
15459    pmulhrsw      m5,    m7
15460    packuswb      m4,    m5
15461    movu          [r0 +  1112 * 16],    m4
15462    pslldq        m1,    2
15463    pinsrw        m1,    [r3 + 6],      0
15464    pmaddubsw     m4,    m1,            m6
15465    pmulhrsw      m4,    m7
15466    pslldq        m3,    2
15467    pinsrw        m3,    [r3 + 14],     0
15468    pmaddubsw     m5,    m3,            m6
15469    pmulhrsw      m5,    m7
15470    packuswb      m4,    m5
15471    movu          [r0 +  1113 * 16],    m4
15472
15473    ; mode 19 [row 13]
15474    movu          m6,    [r5 + 20 * 16]
15475    pslldq        m0,    2
15476    pinsrb        m0,    [r4 + 12],     1
15477    pinsrb        m0,    [r4 + 14],     0
15478    pmaddubsw     m4,    m0,            m6
15479    pmulhrsw      m4,    m7
15480    pslldq        m2,    2
15481    pinsrb        m2,    [r4 + 2],      1
15482    pinsrb        m2,    [r4 + 4],      0
15483    pmaddubsw     m5,    m2,            m6
15484    pmulhrsw      m5,    m7
15485    packuswb      m4,    m5
15486    movu          [r0 +  1114 * 16],    m4
15487    pslldq        m1,    2
15488    pinsrw        m1,    [r3 + 5],      0
15489    pmaddubsw     m4,    m1,            m6
15490    pmulhrsw      m4,    m7
15491    pslldq        m3,    2
15492    pinsrw        m3,    [r3 + 13],     0
15493    pmaddubsw     m5,    m3,            m6
15494    pmulhrsw      m5,    m7
15495    packuswb      m4,    m5
15496    movu          [r0 +  1115 * 16],    m4
15497
15498    ; mode 19 [row 14]
15499    movu          m6,    [r5 + 26 * 16]
15500    pslldq        m0,    2
15501    pinsrb        m0,    [r4 + 14],     1
15502    pinsrb        m0,    [r4 + 15],     0
15503    pmaddubsw     m4,    m0,            m6
15504    pmulhrsw      m4,    m7
15505    pslldq        m2,    2
15506    pinsrb        m2,    [r4 + 4],      1
15507    pinsrb        m2,    [r4 + 5],      0
15508    pmaddubsw     m5,    m2,            m6
15509    pmulhrsw      m5,    m7
15510    packuswb      m4,    m5
15511    movu          [r0 +  1116 * 16],    m4
15512    pslldq        m1,    2
15513    pinsrw        m1,    [r3 + 4],      0
15514    pmaddubsw     m4,    m1,            m6
15515    pmulhrsw      m4,    m7
15516    pslldq        m3,    2
15517    pinsrw        m3,    [r3 + 12],     0
15518    pmaddubsw     m5,    m3,            m6
15519    pmulhrsw      m5,    m7
15520    packuswb      m4,    m5
15521    movu          [r0 +  1117 * 16],    m4
15522
15523    ; mode19 [row 15]
15524    pshufb        m5,    m0,            [tab_S2]
15525    movh          [r0 + 1118 * 16],     m5
15526    pshufb        m5,    m2,            [tab_S2]
15527    movh          [r0 + 1118 * 16 + 8], m5
15528    pshufb        m5,    m1,            [tab_S2]
15529    movh          [r0 + 1119 * 16],     m5
15530    pshufb        m5,    m3,            [tab_S2]
15531    movh          [r0 + 1119 * 16 + 8], m5
15532
15533    ; mode 19 [row 16]
15534    movu          m6,    [r5 + 6 * 16]
15535    pslldq        m0,    2
15536    pinsrb        m0,    [r4 + 15],     1
15537    pinsrb        m0,    [r4 + 16],     0
15538    pmaddubsw     m4,    m0,            m6
15539    pmulhrsw      m4,    m7
15540    pslldq        m2,    2
15541    pinsrb        m2,    [r4 + 5],      1
15542    pinsrb        m2,    [r4 + 6],      0
15543    pmaddubsw     m5,    m2,            m6
15544    pmulhrsw      m5,    m7
15545    packuswb      m4,    m5
15546    movu          [r0 +  1120 * 16],    m4
15547    pslldq        m1,    2
15548    pinsrw        m1,    [r3 + 3],      0
15549    pmaddubsw     m4,    m1,            m6
15550    pmulhrsw      m4,    m7
15551    pslldq        m3,    2
15552    pinsrw        m3,    [r3 + 11],      0
15553    pmaddubsw     m5,    m3,            m6
15554    pmulhrsw      m5,    m7
15555    packuswb      m4,    m5
15556    movu          [r0 +  1121 * 16],    m4
15557
15558    ; mode 19 [row 17]
15559    movu          m6,    [r5 + 12 * 16]
15560    pslldq        m0,    2
15561    pinsrb        m0,    [r4 + 16],     1
15562    pinsrb        m0,    [r4 + 17],     0
15563    pmaddubsw     m4,    m0,            m6
15564    pmulhrsw      m4,    m7
15565    pslldq        m2,    2
15566    pinsrb        m2,    [r4 + 6],      1
15567    pinsrb        m2,    [r4 + 7],      0
15568    pmaddubsw     m5,    m2,            m6
15569    pmulhrsw      m5,    m7
15570    packuswb      m4,    m5
15571    movu          [r0 +  1122 * 16],    m4
15572    pslldq        m1,    2
15573    pinsrw        m1,    [r3 + 2],      0
15574    pmaddubsw     m4,    m1,            m6
15575    pmulhrsw      m4,    m7
15576    pslldq        m3,    2
15577    pinsrw        m3,    [r3 + 10],      0
15578    pmaddubsw     m5,    m3,            m6
15579    pmulhrsw      m5,    m7
15580    packuswb      m4,    m5
15581    movu          [r0 +  1123 * 16],    m4
15582
15583    ; mode 19 [row 18]
15584    movu          m6,    [r5 + 18 * 16]
15585    pslldq        m0,    2
15586    pinsrb        m0,    [r4 + 17],     1
15587    pinsrb        m0,    [r4 + 18],     0
15588    pmaddubsw     m4,    m0,            m6
15589    pmulhrsw      m4,    m7
15590    pslldq        m2,    2
15591    pinsrb        m2,    [r4 + 7],      1
15592    pinsrb        m2,    [r4 + 9],      0
15593    pmaddubsw     m5,    m2,            m6
15594    pmulhrsw      m5,    m7
15595    packuswb      m4,    m5
15596    movu          [r0 +  1124 * 16],    m4
15597    pslldq        m1,    2
15598    pinsrw        m1,    [r3 + 1],      0
15599    pmaddubsw     m4,    m1,            m6
15600    pmulhrsw      m4,    m7
15601    pslldq        m3,    2
15602    pinsrw        m3,    [r3 +  9],      0
15603    pmaddubsw     m5,    m3,            m6
15604    pmulhrsw      m5,    m7
15605    packuswb      m4,    m5
15606    movu          [r0 +  1125 * 16],    m4
15607
15608    ; mode 19 [row 19]
15609    movu          m6,    [r5 + 24 * 16]
15610    pslldq        m0,    2
15611    pinsrb        m0,    [r4 + 18],     1
15612    pinsrb        m0,    [r4 + 20],     0
15613    pmaddubsw     m4,    m0,            m6
15614    pmulhrsw      m4,    m7
15615    pslldq        m2,    2
15616    pinsrb        m2,    [r4 +  9],     1
15617    pinsrb        m2,    [r4 + 10],     0
15618    pmaddubsw     m5,    m2,            m6
15619    pmulhrsw      m5,    m7
15620    packuswb      m4,    m5
15621    movu          [r0 +  1126 * 16],    m4
15622    pslldq        m1,    2
15623    pinsrw        m1,    [r3 + 0],      0
15624    pmaddubsw     m4,    m1,            m6
15625    pmulhrsw      m4,    m7
15626    pslldq        m3,    2
15627    pinsrw        m3,    [r3 + 8],      0
15628    pmaddubsw     m5,    m3,            m6
15629    pmulhrsw      m5,    m7
15630    packuswb      m4,    m5
15631    movu          [r0 +  1127 * 16],    m4
15632
15633    ; mode 19 [row 20]
15634    movu          m6,    [r5 + 30 * 16]
15635    pslldq        m0,    2
15636    pinsrb        m0,    [r4 + 20],     1
15637    pinsrb        m0,    [r4 + 21],     0
15638    pmaddubsw     m4,    m0,            m6
15639    pmulhrsw      m4,    m7
15640    pslldq        m2,    2
15641    pinsrb        m2,    [r4 + 10],     1
15642    pinsrb        m2,    [r4 + 11],     0
15643    pmaddubsw     m5,    m2,            m6
15644    pmulhrsw      m5,    m7
15645    packuswb      m4,    m5
15646    movu          [r0 +  1128 * 16],    m4
15647    pslldq        m1,    2
15648    pinsrb        m1,    [r4 + 0],      1
15649    pinsrb        m1,    [r4 + 1],      0
15650    pmaddubsw     m4,    m1,            m6
15651    pmulhrsw      m4,    m7
15652    pslldq        m3,    2
15653    pinsrb        m3,    [r3 + 8],     1
15654    pinsrb        m3,    [r3 + 7],     0
15655    pmaddubsw     m5,    m3,           m6
15656    pmulhrsw      m5,    m7
15657    packuswb      m4,    m5
15658    movu          [r0 +  1129 * 16],   m4
15659
15660    ; mode 19 [row 21]
15661    movu          m6,    [r5 + 4 * 16]
15662    pmaddubsw     m4,    m0,           m6
15663    pmulhrsw      m4,    m7
15664    pmaddubsw     m5,    m2,           m6
15665    pmulhrsw      m5,    m7
15666    packuswb      m4,    m5
15667    movu          [r0 +  1130 * 16],   m4
15668    pmaddubsw     m4,    m1,           m6
15669    pmulhrsw      m4,    m7
15670    pmaddubsw     m5,    m3,           m6
15671    pmulhrsw      m5,    m7
15672    packuswb      m4,    m5
15673    movu          [r0 +  1131 * 16],   m4
15674
15675    ; mode 19 [row 22]
15676    movu          m6,    [r5 + 10 * 16]
15677    pslldq        m0,    2
15678    pinsrb        m0,    [r4 + 21],    1
15679    pinsrb        m0,    [r4 + 22],    0
15680    pmaddubsw     m4,    m0,           m6
15681    pmulhrsw      m4,    m7
15682    pslldq        m2,    2
15683    pinsrb        m2,    [r4 + 11],    1
15684    pinsrb        m2,    [r4 + 12],    0
15685    pmaddubsw     m5,    m2,           m6
15686    pmulhrsw      m5,    m7
15687    packuswb      m4,    m5
15688    movu          [r0 +  1132 * 16],   m4
15689    pslldq        m1,    2
15690    pinsrb        m1,    [r4 + 1],     1
15691    pinsrb        m1,    [r4 + 2],     0
15692    pmaddubsw     m4,    m1,           m6
15693    pmulhrsw      m4,    m7
15694    pslldq        m3,    2
15695    pinsrw        m3,    [r3 + 6],      0
15696    pmaddubsw     m5,    m3,           m6
15697    pmulhrsw      m5,    m7
15698    packuswb      m4,    m5
15699    movu          [r0 +  1133 * 16],   m4
15700
15701    ; mode 19 [row 23]
15702    movu          m6,    [r5 + 16 * 16]
15703    pslldq        m0,    2
15704    pinsrb        m0,    [r4 + 22],    1
15705    pinsrb        m0,    [r4 + 23],    0
15706    pmaddubsw     m4,    m0,           m6
15707    pmulhrsw      m4,    m7
15708    pslldq        m2,    2
15709    pinsrb        m2,    [r4 + 12],    1
15710    pinsrb        m2,    [r4 + 14],    0
15711    pmaddubsw     m5,    m2,           m6
15712    pmulhrsw      m5,    m7
15713    packuswb      m4,    m5
15714    movu          [r0 +  1134 * 16],   m4
15715    pslldq        m1,    2
15716    pinsrb        m1,    [r4 + 2],     1
15717    pinsrb        m1,    [r4 + 4],     0
15718    pmaddubsw     m4,    m1,           m6
15719    pmulhrsw      m4,    m7
15720    pslldq        m3,    2
15721    pinsrw        m3,    [r3 + 5],      0
15722    pmaddubsw     m5,    m3,           m6
15723    pmulhrsw      m5,    m7
15724    packuswb      m4,    m5
15725    movu          [r0 +  1135 * 16],   m4
15726
15727    ; mode 19 [row 24]
15728    movu          m6,    [r5 + 22 * 16]
15729    pslldq        m0,    2
15730    pinsrb        m0,    [r4 + 23],    1
15731    pinsrb        m0,    [r4 + 25],    0
15732    pmaddubsw     m4,    m0,           m6
15733    pmulhrsw      m4,    m7
15734    pslldq        m2,    2
15735    pinsrb        m2,    [r4 + 14],    1
15736    pinsrb        m2,    [r4 + 15],    0
15737    pmaddubsw     m5,    m2,           m6
15738    pmulhrsw      m5,    m7
15739    packuswb      m4,    m5
15740    movu          [r0 +  1136 * 16],   m4
15741    pslldq        m1,    2
15742    pinsrb        m1,    [r4 + 4],     1
15743    pinsrb        m1,    [r4 + 5],     0
15744    pmaddubsw     m4,    m1,           m6
15745    pmulhrsw      m4,    m7
15746    pslldq        m3,    2
15747    pinsrw        m3,    [r3 + 4],      0
15748    pmaddubsw     m5,    m3,           m6
15749    pmulhrsw      m5,    m7
15750    packuswb      m4,    m5
15751    movu          [r0 +  1137 * 16],   m4
15752
15753    ; mode 19 [row 25]
15754    movu          m6,    [r5 + 28 * 16]
15755    pslldq        m0,    2
15756    pinsrb        m0,    [r4 + 25],    1
15757    pinsrb        m0,    [r4 + 26],    0
15758    pmaddubsw     m4,    m0,           m6
15759    pmulhrsw      m4,    m7
15760    pslldq        m2,    2
15761    pinsrb        m2,    [r4 + 15],    1
15762    pinsrb        m2,    [r4 + 16],    0
15763    pmaddubsw     m5,    m2,           m6
15764    pmulhrsw      m5,    m7
15765    packuswb      m4,    m5
15766    movu          [r0 +  1138 * 16],   m4
15767    pslldq        m1,    2
15768    pinsrb        m1,    [r4 + 5],     1
15769    pinsrb        m1,    [r4 + 6],     0
15770    pmaddubsw     m4,    m1,           m6
15771    pmulhrsw      m4,    m7
15772    pslldq        m3,    2
15773    pinsrw        m3,    [r3 + 3],      0
15774    pmaddubsw     m5,    m3,           m6
15775    pmulhrsw      m5,    m7
15776    packuswb      m4,    m5
15777    movu          [r0 +  1139 * 16],   m4
15778
15779    ; mode 19 [row 26]
15780    movu          m6,    [r5 + 2 * 16]
15781    pmaddubsw     m4,    m0,           m6
15782    pmulhrsw      m4,    m7
15783    pmaddubsw     m5,    m2,           m6
15784    pmulhrsw      m5,    m7
15785    packuswb      m4,    m5
15786    movu          [r0 +  1140 * 16],   m4
15787    pmaddubsw     m4,    m1,           m6
15788    pmulhrsw      m4,    m7
15789    pmaddubsw     m5,    m3,           m6
15790    pmulhrsw      m5,    m7
15791    packuswb      m4,    m5
15792    movu          [r0 +  1141 * 16],   m4
15793
15794    ; mode 19 [row 27]
15795    movu          m6,    [r5 + 8 * 16]
15796    pslldq        m0,    2
15797    pinsrb        m0,    [r4 + 26],    1
15798    pinsrb        m0,    [r4 + 27],    0
15799    pmaddubsw     m4,    m0,           m6
15800    pmulhrsw      m4,    m7
15801    pslldq        m2,    2
15802    pinsrb        m2,    [r4 + 16],    1
15803    pinsrb        m2,    [r4 + 17],    0
15804    pmaddubsw     m5,    m2,           m6
15805    pmulhrsw      m5,    m7
15806    packuswb      m4,    m5
15807    movu          [r0 +  1142 * 16],   m4
15808    pslldq        m1,    2
15809    pinsrb        m1,    [r4 + 6],     1
15810    pinsrb        m1,    [r4 + 7],     0
15811    pmaddubsw     m4,    m1,           m6
15812    pmulhrsw      m4,    m7
15813    pslldq        m3,    2
15814    pinsrw        m3,    [r3 + 2],      0
15815    pmaddubsw     m5,    m3,           m6
15816    pmulhrsw      m5,    m7
15817    packuswb      m4,    m5
15818    movu          [r0 +  1143 * 16],   m4
15819
15820    ; mode 19 [row 28]
15821    movu          m6,    [r5 + 14 * 16]
15822    pslldq        m0,    2
15823    pinsrb        m0,    [r4 + 27],    1
15824    pinsrb        m0,    [r4 + 28],    0
15825    pmaddubsw     m4,    m0,           m6
15826    pmulhrsw      m4,    m7
15827    pslldq        m2,    2
15828    pinsrb        m2,    [r4 + 17],    1
15829    pinsrb        m2,    [r4 + 18],    0
15830    pmaddubsw     m5,    m2,           m6
15831    pmulhrsw      m5,    m7
15832    packuswb      m4,    m5
15833    movu          [r0 +  1144 * 16],   m4
15834    pslldq        m1,    2
15835    pinsrb        m1,    [r4 + 7],     1
15836    pinsrb        m1,    [r4 + 9],     0
15837    pmaddubsw     m4,    m1,           m6
15838    pmulhrsw      m4,    m7
15839    pslldq        m3,    2
15840    pinsrw        m3,    [r3 + 1],      0
15841    pmaddubsw     m5,    m3,           m6
15842    pmulhrsw      m5,    m7
15843    packuswb      m4,    m5
15844    movu          [r0 +  1145 * 16],   m4
15845
15846    ; mode 19 [row 29]
15847    movu          m6,    [r5 + 20 * 16]
15848    pslldq        m0,    2
15849    pinsrb        m0,    [r4 + 28],    1
15850    pinsrb        m0,    [r4 + 30],    0
15851    pmaddubsw     m4,    m0,           m6
15852    pmulhrsw      m4,    m7
15853    pslldq        m2,    2
15854    pinsrb        m2,    [r4 + 18],    1
15855    pinsrb        m2,    [r4 + 20],    0
15856    pmaddubsw     m5,    m2,           m6
15857    pmulhrsw      m5,    m7
15858    packuswb      m4,    m5
15859    movu          [r0 +  1146 * 16],   m4
15860    pslldq        m1,    2
15861    pinsrb        m1,    [r4 +  9],    1
15862    pinsrb        m1,    [r4 + 10],    0
15863    pmaddubsw     m4,    m1,           m6
15864    pmulhrsw      m4,    m7
15865    pslldq        m3,    2
15866    pinsrw        m3,    [r3 + 0],      0
15867    pmaddubsw     m5,    m3,           m6
15868    pmulhrsw      m5,    m7
15869    packuswb      m4,    m5
15870    movu          [r0 +  1147 * 16],   m4
15871
15872    ; mode 19 [row 30]
15873    movu          m6,    [r5 + 26 * 16]
15874    pslldq        m0,    2
15875    pinsrb        m0,    [r4 + 30],    1
15876    pinsrb        m0,    [r4 + 31],    0
15877    pmaddubsw     m4,    m0,           m6
15878    pmulhrsw      m4,    m7
15879    pslldq        m2,    2
15880    pinsrb        m2,    [r4 + 20],    1
15881    pinsrb        m2,    [r4 + 21],    0
15882    pmaddubsw     m5,    m2,           m6
15883    pmulhrsw      m5,    m7
15884    packuswb      m4,    m5
15885    movu          [r0 +  1148 * 16],   m4
15886    pslldq        m1,    2
15887    pinsrb        m1,    [r4 + 10],    1
15888    pinsrb        m1,    [r4 + 11],    0
15889    pmaddubsw     m4,    m1,           m6
15890    pmulhrsw      m4,    m7
15891    pslldq        m3,    2
15892    pinsrb        m3,    [r4 + 0],     1
15893    pinsrb        m3,    [r4 + 1],     0
15894    pmaddubsw     m5,    m3,           m6
15895    pmulhrsw      m5,    m7
15896    packuswb      m4,    m5
15897    movu          [r0 +  1149 * 16],   m4
15898
15899    ; mode19 [row 31]
15900    pshufb        m5,    m0,            [tab_S2]
15901    movh          [r0 + 1150 * 16],     m5
15902    pshufb        m5,    m2,            [tab_S2]
15903    movh          [r0 + 1150 * 16 + 8], m5
15904    pshufb        m5,    m1,            [tab_S2]
15905    movh          [r0 + 1151 * 16],     m5
15906    pshufb        m5,    m3,            [tab_S2]
15907    movh          [r0 + 1151 * 16 + 8], m5
15908
15909    ; mode 20 [row 0]
15910    movu          m6,    [r5 + 11 * 16]
15911    movu          m0,    [r3         ]
15912    movu          m1,    [r3 + 1     ]
15913    punpcklbw     m0,    m1
15914    pmaddubsw     m1,    m0,            m6
15915    pmulhrsw      m1,    m7
15916    movu          m2,    [r3 + 8]
15917    movu          m3,    [r3 + 9]
15918    punpcklbw     m2,    m3
15919    pmaddubsw     m3,    m2,            m6
15920    pmulhrsw      m3,    m7
15921    packuswb      m1,    m3
15922    movu          [r0 + 1152 * 16],     m1
15923
15924    movu          m1,    [r3 + 16]
15925    movu          m3,    [r3 + 17]
15926    punpcklbw     m1,    m3
15927    pmaddubsw     m4,    m1,            m6
15928    pmulhrsw      m4,    m7
15929    movu          m3,    [r3 + 24]
15930    movu          m5,    [r3 + 25]
15931    punpcklbw     m3,    m5
15932    pmaddubsw     m5,    m3,            m6
15933    pmulhrsw      m5,    m7
15934    packuswb      m4,    m5
15935    movu          [r0 + 1153 * 16],     m4
15936
15937    ; mode 20 [row 1]
15938    movu          m6,    [r5 + 22 * 16]
15939    pslldq        m0,    2
15940    pinsrb        m0,    [r4 + 0],      1
15941    pinsrb        m0,    [r4 + 2],      0
15942    pmaddubsw     m4,    m0,            m6
15943    pmulhrsw      m4,    m7
15944    pslldq        m2,    2
15945    pinsrw        m2,    [r3 + 7],      0
15946    pmaddubsw     m5,    m2,            m6
15947    pmulhrsw      m5,    m7
15948    packuswb      m4,    m5
15949    movu          [r0 + 1154 * 16],     m4
15950    pslldq        m1,    2
15951    pinsrw        m1,    [r3 + 15],      0
15952    pmaddubsw     m4,    m1,            m6
15953    pmulhrsw      m4,    m7
15954    pslldq        m3,    2
15955    pinsrw        m3,    [r3 + 23],      0
15956    pmaddubsw     m5,    m3,            m6
15957    pmulhrsw      m5,    m7
15958    packuswb      m4,    m5
15959    movu          [r0 + 1155 * 16],     m4
15960
15961    ; mode 20 [row 2]
15962    movu          m6,    [r5 + 1 * 16]
15963    pmaddubsw     m4,    m0,            m6
15964    pmulhrsw      m4,    m7
15965    pmaddubsw     m5,    m2,            m6
15966    pmulhrsw      m5,    m7
15967    packuswb      m4,    m5
15968    movu          [r0 + 1156 * 16],     m4
15969    pmaddubsw     m4,    m1,            m6
15970    pmulhrsw      m4,    m7
15971    pmaddubsw     m5,    m3,            m6
15972    pmulhrsw      m5,    m7
15973    packuswb      m4,    m5
15974    movu          [r0 + 1157 * 16],     m4
15975
15976    ; mode 20 [row 3]
15977    movu          m6,    [r5 + 12 * 16]
15978    pslldq        m0,    2
15979    pinsrb        m0,    [r4 + 2],      1
15980    pinsrb        m0,    [r4 + 3],      0
15981    pmaddubsw     m4,    m0,            m6
15982    pmulhrsw      m4,    m7
15983    pslldq        m2,    2
15984    pinsrw        m2,    [r3 + 6],      0
15985    pmaddubsw     m5,    m2,            m6
15986    pmulhrsw      m5,    m7
15987    packuswb      m4,    m5
15988    movu          [r0 + 1158 * 16],     m4
15989    pslldq        m1,    2
15990    pinsrw        m1,    [r3 + 14],      0
15991    pmaddubsw     m4,    m1,            m6
15992    pmulhrsw      m4,    m7
15993    pslldq        m3,    2
15994    pinsrw        m3,    [r3 + 22],      0
15995    pmaddubsw     m5,    m3,            m6
15996    pmulhrsw      m5,    m7
15997    packuswb      m4,    m5
15998    movu          [r0 + 1159 * 16],     m4
15999
16000    ; mode 20 [row 4]
16001    movu          m6,    [r5 + 23 * 16]
16002    pslldq        m0,    2
16003    pinsrb        m0,    [r4 + 3],      1
16004    pinsrb        m0,    [r4 + 5],      0
16005    pmaddubsw     m4,    m0,            m6
16006    pmulhrsw      m4,    m7
16007    pslldq        m2,    2
16008    pinsrw        m2,    [r3 + 5],      0
16009    pmaddubsw     m5,    m2,            m6
16010    pmulhrsw      m5,    m7
16011    packuswb      m4,    m5
16012    movu          [r0 + 1160 * 16],     m4
16013    pslldq        m1,    2
16014    pinsrw        m1,    [r3 + 13],      0
16015    pmaddubsw     m4,    m1,            m6
16016    pmulhrsw      m4,    m7
16017    pslldq        m3,    2
16018    pinsrw        m3,    [r3 + 21],      0
16019    pmaddubsw     m5,    m3,            m6
16020    pmulhrsw      m5,    m7
16021    packuswb      m4,    m5
16022    movu          [r0 + 1161 * 16],     m4
16023
16024    ; mode 20 [row 5]
16025    movu          m6,    [r5 + 2 * 16]
16026    pmaddubsw     m4,    m0,            m6
16027    pmulhrsw      m4,    m7
16028    pmaddubsw     m5,    m2,            m6
16029    pmulhrsw      m5,    m7
16030    packuswb      m4,    m5
16031    movu          [r0 + 1162 * 16],     m4
16032    pmaddubsw     m4,    m1,            m6
16033    pmulhrsw      m4,    m7
16034    pmaddubsw     m5,    m3,            m6
16035    pmulhrsw      m5,    m7
16036    packuswb      m4,    m5
16037    movu          [r0 + 1163 * 16],     m4
16038
16039    ; mode 20 [row 6]
16040    movu          m6,    [r5 + 13 * 16]
16041    pslldq        m0,    2
16042    pinsrb        m0,    [r4 + 5],      1
16043    pinsrb        m0,    [r4 + 6],      0
16044    pmaddubsw     m4,    m0,            m6
16045    pmulhrsw      m4,    m7
16046    pslldq        m2,    2
16047    pinsrw        m2,    [r3 + 4],      0
16048    pmaddubsw     m5,    m2,            m6
16049    pmulhrsw      m5,    m7
16050    packuswb      m4,    m5
16051    movu          [r0 + 1164 * 16],     m4
16052    pslldq        m1,    2
16053    pinsrw        m1,    [r3 + 12],      0
16054    pmaddubsw     m4,    m1,            m6
16055    pmulhrsw      m4,    m7
16056    pslldq        m3,    2
16057    pinsrw        m3,    [r3 + 20],      0
16058    pmaddubsw     m5,    m3,            m6
16059    pmulhrsw      m5,    m7
16060    packuswb      m4,    m5
16061    movu          [r0 + 1165 * 16],     m4
16062
16063    ; mode 20 [row 7]
16064    movu          m6,    [r5 + 24 * 16]
16065    pslldq        m0,    2
16066    pinsrb        m0,    [r4 + 6],      1
16067    pinsrb        m0,    [r4 + 8],      0
16068    pmaddubsw     m4,    m0,            m6
16069    pmulhrsw      m4,    m7
16070    pslldq        m2,    2
16071    pinsrw        m2,    [r3 + 3],      0
16072    pmaddubsw     m5,    m2,            m6
16073    pmulhrsw      m5,    m7
16074    packuswb      m4,    m5
16075    movu          [r0 + 1166 * 16],     m4
16076    pslldq        m1,    2
16077    pinsrw        m1,    [r3 + 11],      0
16078    pmaddubsw     m4,    m1,            m6
16079    pmulhrsw      m4,    m7
16080    pslldq        m3,    2
16081    pinsrw        m3,    [r3 + 19],      0
16082    pmaddubsw     m5,    m3,            m6
16083    pmulhrsw      m5,    m7
16084    packuswb      m4,    m5
16085    movu          [r0 + 1167 * 16],     m4
16086
16087    ; mode 20 [row 8]
16088    movu          m6,    [r5 + 3 * 16]
16089    pmaddubsw     m4,    m0,            m6
16090    pmulhrsw      m4,    m7
16091    pmaddubsw     m5,    m2,            m6
16092    pmulhrsw      m5,    m7
16093    packuswb      m4,    m5
16094    movu          [r0 + 1168 * 16],     m4
16095    pmaddubsw     m4,    m1,            m6
16096    pmulhrsw      m4,    m7
16097    pmaddubsw     m5,    m3,            m6
16098    pmulhrsw      m5,    m7
16099    packuswb      m4,    m5
16100    movu          [r0 + 1169 * 16],     m4
16101
16102    ; mode 20 [row 9]
16103    movu          m6,    [r5 + 14 * 16]
16104    pslldq        m0,    2
16105    pinsrb        m0,    [r4 + 8],      1
16106    pinsrb        m0,    [r4 + 9],      0
16107    pmaddubsw     m4,    m0,            m6
16108    pmulhrsw      m4,    m7
16109    pslldq        m2,    2
16110    pinsrb        m2,    [r3 + 3],      1
16111    pinsrb        m2,    [r3 + 2],      0
16112    pmaddubsw     m5,    m2,            m6
16113    pmulhrsw      m5,    m7
16114    packuswb      m4,    m5
16115    movu          [r0 + 1170 * 16],     m4
16116    pslldq        m1,    2
16117    pinsrw        m1,    [r3 + 10],      0
16118    pmaddubsw     m4,    m1,            m6
16119    pmulhrsw      m4,    m7
16120    pslldq        m3,    2
16121    pinsrw        m3,    [r3 + 18],      0
16122    pmaddubsw     m5,    m3,            m6
16123    pmulhrsw      m5,    m7
16124    packuswb      m4,    m5
16125    movu          [r0 + 1171 * 16],     m4
16126
16127    ; mode 20 [row 10]
16128    movu          m6,    [r5 + 25 * 16]
16129    pslldq        m0,    2
16130    pinsrb        m0,    [r4 +  9],      1
16131    pinsrb        m0,    [r4 + 11],      0
16132    pmaddubsw     m4,    m0,            m6
16133    pmulhrsw      m4,    m7
16134    pslldq        m2,    2
16135    pinsrw        m2,    [r3 + 1],      0
16136    pmaddubsw     m5,    m2,            m6
16137    pmulhrsw      m5,    m7
16138    packuswb      m4,    m5
16139    movu          [r0 + 1172 * 16],     m4
16140    pslldq        m1,    2
16141    pinsrw        m1,    [r3 + 9],      0
16142    pmaddubsw     m4,    m1,            m6
16143    pmulhrsw      m4,    m7
16144    pslldq        m3,    2
16145    pinsrw        m3,    [r3 + 17],      0
16146    pmaddubsw     m5,    m3,            m6
16147    pmulhrsw      m5,    m7
16148    packuswb      m4,    m5
16149    movu          [r0 + 1173 * 16],     m4
16150
16151    ; mode 20 [row 11]
16152    movu          m6,    [r5 + 4 * 16]
16153    pmaddubsw     m4,    m0,            m6
16154    pmulhrsw      m4,    m7
16155    pmaddubsw     m5,    m2,            m6
16156    pmulhrsw      m5,    m7
16157    packuswb      m4,    m5
16158    movu          [r0 + 1174 * 16],     m4
16159    pmaddubsw     m4,    m1,            m6
16160    pmulhrsw      m4,    m7
16161    pmaddubsw     m5,    m3,            m6
16162    pmulhrsw      m5,    m7
16163    packuswb      m4,    m5
16164    movu          [r0 + 1175 * 16],     m4
16165
16166    ; mode 20 [row 12]
16167    movu          m6,    [r5 + 15 * 16]
16168    pslldq        m0,    2
16169    pinsrb        m0,    [r4 + 11],     1
16170    pinsrb        m0,    [r4 + 12],     0
16171    pmaddubsw     m4,    m0,            m6
16172    pmulhrsw      m4,    m7
16173    pslldq        m2,    2
16174    pinsrb        m2,    [r3 + 1],      1
16175    pinsrb        m2,    [r3 + 0],      0
16176    pmaddubsw     m5,    m2,            m6
16177    pmulhrsw      m5,    m7
16178    packuswb      m4,    m5
16179    movu          [r0 + 1176 * 16],     m4
16180    pslldq        m1,    2
16181    pinsrw        m1,    [r3 + 8],      0
16182    pmaddubsw     m4,    m1,            m6
16183    pmulhrsw      m4,    m7
16184    pslldq        m3,    2
16185    pinsrw        m3,    [r3 + 16],      0
16186    pmaddubsw     m5,    m3,            m6
16187    pmulhrsw      m5,    m7
16188    packuswb      m4,    m5
16189    movu          [r0 + 1177 * 16],     m4
16190
16191    ; mode 20 [row 13]
16192    movu          m6,    [r5 + 26 * 16]
16193    pslldq        m0,    2
16194    pinsrb        m0,    [r4 + 12],     1
16195    pinsrb        m0,    [r4 + 14],     0
16196    pmaddubsw     m4,    m0,            m6
16197    pmulhrsw      m4,    m7
16198    pslldq        m2,    2
16199    pinsrb        m2,    [r4 + 0],      1
16200    pinsrb        m2,    [r4 + 2],      0
16201    pmaddubsw     m5,    m2,            m6
16202    pmulhrsw      m5,    m7
16203    packuswb      m4,    m5
16204    movu          [r0 + 1178 * 16],     m4
16205    pslldq        m1,    2
16206    pinsrw        m1,    [r3 + 7],      0
16207    pmaddubsw     m4,    m1,            m6
16208    pmulhrsw      m4,    m7
16209    pslldq        m3,    2
16210    pinsrw        m3,    [r3 + 15],      0
16211    pmaddubsw     m5,    m3,            m6
16212    pmulhrsw      m5,    m7
16213    packuswb      m4,    m5
16214    movu          [r0 + 1179 * 16],     m4
16215
16216    ; mode 20 [row 14]
16217    movu          m6,    [r5 + 5 * 16]
16218    pmaddubsw     m4,    m0,            m6
16219    pmulhrsw      m4,    m7
16220    pmaddubsw     m5,    m2,            m6
16221    pmulhrsw      m5,    m7
16222    packuswb      m4,    m5
16223    movu          [r0 + 1180 * 16],     m4
16224    pmaddubsw     m4,    m1,            m6
16225    pmulhrsw      m4,    m7
16226    pmaddubsw     m5,    m3,            m6
16227    pmulhrsw      m5,    m7
16228    packuswb      m4,    m5
16229    movu          [r0 + 1181 * 16],     m4
16230
16231    ; mode 20 [row 15]
16232    movu          m6,    [r5 + 16 * 16]
16233    pslldq        m0,    2
16234    pinsrb        m0,    [r4 + 14],     1
16235    pinsrb        m0,    [r4 + 15],     0
16236    pmaddubsw     m4,    m0,            m6
16237    pmulhrsw      m4,    m7
16238    pslldq        m2,    2
16239    pinsrb        m2,    [r4 + 2],      1
16240    pinsrb        m2,    [r4 + 3],      0
16241    pmaddubsw     m5,    m2,            m6
16242    pmulhrsw      m5,    m7
16243    packuswb      m4,    m5
16244    movu          [r0 + 1182 * 16],     m4
16245    pslldq        m1,    2
16246    pinsrw        m1,    [r3 + 6],      0
16247    pmaddubsw     m4,    m1,            m6
16248    pmulhrsw      m4,    m7
16249    pslldq        m3,    2
16250    pinsrw        m3,    [r3 + 14],      0
16251    pmaddubsw     m5,    m3,            m6
16252    pmulhrsw      m5,    m7
16253    packuswb      m4,    m5
16254    movu          [r0 + 1183 * 16],     m4
16255
16256    ; mode 20 [row 16]
16257    movu          m6,    [r5 + 27 * 16]
16258    pslldq        m0,    2
16259    pinsrb        m0,    [r4 + 15],     1
16260    pinsrb        m0,    [r4 + 17],     0
16261    pmaddubsw     m4,    m0,            m6
16262    pmulhrsw      m4,    m7
16263    pslldq        m2,    2
16264    pinsrb        m2,    [r4 + 3],      1
16265    pinsrb        m2,    [r4 + 5],      0
16266    pmaddubsw     m5,    m2,            m6
16267    pmulhrsw      m5,    m7
16268    packuswb      m4,    m5
16269    movu          [r0 + 1184 * 16],     m4
16270    pslldq        m1,    2
16271    pinsrw        m1,    [r3 + 5],      0
16272    pmaddubsw     m4,    m1,            m6
16273    pmulhrsw      m4,    m7
16274    pslldq        m3,    2
16275    pinsrw        m3,    [r3 + 13],      0
16276    pmaddubsw     m5,    m3,            m6
16277    pmulhrsw      m5,    m7
16278    packuswb      m4,    m5
16279    movu          [r0 + 1185 * 16],     m4
16280
16281    ; mode 20 [row 17]
16282    movu          m6,    [r5 + 6 * 16]
16283    pmaddubsw     m4,    m0,            m6
16284    pmulhrsw      m4,    m7
16285    pmaddubsw     m5,    m2,            m6
16286    pmulhrsw      m5,    m7
16287    packuswb      m4,    m5
16288    movu          [r0 + 1186 * 16],     m4
16289    pmaddubsw     m4,    m1,            m6
16290    pmulhrsw      m4,    m7
16291    pmaddubsw     m5,    m3,            m6
16292    pmulhrsw      m5,    m7
16293    packuswb      m4,    m5
16294    movu          [r0 + 1187 * 16],     m4
16295
16296    ; mode 20 [row 18]
16297    movu          m6,    [r5 + 17 * 16]
16298    pslldq        m0,    2
16299    pinsrb        m0,    [r4 + 17],     1
16300    pinsrb        m0,    [r4 + 18],     0
16301    pmaddubsw     m4,    m0,            m6
16302    pmulhrsw      m4,    m7
16303    pslldq        m2,    2
16304    pinsrb        m2,    [r4 + 5],      1
16305    pinsrb        m2,    [r4 + 6],      0
16306    pmaddubsw     m5,    m2,            m6
16307    pmulhrsw      m5,    m7
16308    packuswb      m4,    m5
16309    movu          [r0 + 1188 * 16],     m4
16310    pslldq        m1,    2
16311    pinsrw        m1,    [r3 + 4],      0
16312    pmaddubsw     m4,    m1,            m6
16313    pmulhrsw      m4,    m7
16314    pslldq        m3,    2
16315    pinsrw        m3,    [r3 + 12],      0
16316    pmaddubsw     m5,    m3,            m6
16317    pmulhrsw      m5,    m7
16318    packuswb      m4,    m5
16319    movu          [r0 + 1189 * 16],     m4
16320
16321    ; mode 20 [row 19]
16322    movu          m6,    [r5 + 28 * 16]
16323    pslldq        m0,    2
16324    pinsrb        m0,    [r4 + 18],     1
16325    pinsrb        m0,    [r4 + 20],     0
16326    pmaddubsw     m4,    m0,            m6
16327    pmulhrsw      m4,    m7
16328    pslldq        m2,    2
16329    pinsrb        m2,    [r4 + 6],      1
16330    pinsrb        m2,    [r4 + 8],      0
16331    pmaddubsw     m5,    m2,            m6
16332    pmulhrsw      m5,    m7
16333    packuswb      m4,    m5
16334    movu          [r0 + 1190 * 16],     m4
16335    pslldq        m1,    2
16336    pinsrw        m1,    [r3 + 3],      0
16337    pmaddubsw     m4,    m1,            m6
16338    pmulhrsw      m4,    m7
16339    pslldq        m3,    2
16340    pinsrw        m3,    [r3 + 11],      0
16341    pmaddubsw     m5,    m3,            m6
16342    pmulhrsw      m5,    m7
16343    packuswb      m4,    m5
16344    movu          [r0 + 1191 * 16],     m4
16345
16346    ; mode 20 [row 20]
16347    movu          m6,    [r5 + 7 * 16]
16348    pmaddubsw     m4,    m0,            m6
16349    pmulhrsw      m4,    m7
16350    pmaddubsw     m5,    m2,            m6
16351    pmulhrsw      m5,    m7
16352    packuswb      m4,    m5
16353    movu          [r0 + 1192 * 16],     m4
16354    pmaddubsw     m4,    m1,            m6
16355    pmulhrsw      m4,    m7
16356    pmaddubsw     m5,    m3,            m6
16357    pmulhrsw      m5,    m7
16358    packuswb      m4,    m5
16359    movu          [r0 + 1193 * 16],     m4
16360
16361    ; mode 20 [row 21]
16362    movu          m6,    [r5 + 18 * 16]
16363    pslldq        m0,    2
16364    pinsrb        m0,    [r4 + 20],     1
16365    pinsrb        m0,    [r4 + 21],     0
16366    pmaddubsw     m4,    m0,            m6
16367    pmulhrsw      m4,    m7
16368    pslldq        m2,    2
16369    pinsrb        m2,    [r4 + 8],      1
16370    pinsrb        m2,    [r4 + 9],      0
16371    pmaddubsw     m5,    m2,            m6
16372    pmulhrsw      m5,    m7
16373    packuswb      m4,    m5
16374    movu          [r0 + 1194 * 16],     m4
16375    pslldq        m1,    2
16376    pinsrw        m1,    [r3 + 2],      0
16377    pmaddubsw     m4,    m1,            m6
16378    pmulhrsw      m4,    m7
16379    pslldq        m3,    2
16380    pinsrw        m3,    [r3 + 10],      0
16381    pmaddubsw     m5,    m3,            m6
16382    pmulhrsw      m5,    m7
16383    packuswb      m4,    m5
16384    movu          [r0 + 1195 * 16],     m4
16385
16386    ; mode 20 [row 22]
16387    movu          m6,    [r5 + 29 * 16]
16388    pslldq        m0,    2
16389    pinsrb        m0,    [r4 + 21],     1
16390    pinsrb        m0,    [r4 + 23],     0
16391    pmaddubsw     m4,    m0,            m6
16392    pmulhrsw      m4,    m7
16393    pslldq        m2,    2
16394    pinsrb        m2,    [r4 +  9],      1
16395    pinsrb        m2,    [r4 + 11],      0
16396    pmaddubsw     m5,    m2,            m6
16397    pmulhrsw      m5,    m7
16398    packuswb      m4,    m5
16399    movu          [r0 + 1196 * 16],     m4
16400    pslldq        m1,    2
16401    pinsrw        m1,    [r3 + 1],      0
16402    pmaddubsw     m4,    m1,            m6
16403    pmulhrsw      m4,    m7
16404    pslldq        m3,    2
16405    pinsrw        m3,    [r3 + 9],      0
16406    pmaddubsw     m5,    m3,            m6
16407    pmulhrsw      m5,    m7
16408    packuswb      m4,    m5
16409    movu          [r0 + 1197 * 16],     m4
16410
16411    ; mode 20 [row 23]
16412    movu          m6,    [r5 + 8 * 16]
16413    pmaddubsw     m4,    m0,            m6
16414    pmulhrsw      m4,    m7
16415    pmaddubsw     m5,    m2,            m6
16416    pmulhrsw      m5,    m7
16417    packuswb      m4,    m5
16418    movu          [r0 + 1198 * 16],     m4
16419    pmaddubsw     m4,    m1,            m6
16420    pmulhrsw      m4,    m7
16421    pmaddubsw     m5,    m3,            m6
16422    pmulhrsw      m5,    m7
16423    packuswb      m4,    m5
16424    movu          [r0 + 1199 * 16],     m4
16425
16426    ; mode 20 [row 24]
16427    movu          m6,    [r5 + 19 * 16]
16428    pslldq        m0,    2
16429    pinsrb        m0,    [r4 + 23],     1
16430    pinsrb        m0,    [r4 + 24],     0
16431    pmaddubsw     m4,    m0,            m6
16432    pmulhrsw      m4,    m7
16433    pslldq        m2,    2
16434    pinsrb        m2,    [r4 + 11],      1
16435    pinsrb        m2,    [r4 + 12],      0
16436    pmaddubsw     m5,    m2,             m6
16437    pmulhrsw      m5,    m7
16438    packuswb      m4,    m5
16439    movu          [r0 + 1200 * 16],      m4
16440    pslldq        m1,    2
16441    pinsrw        m1,    [r3 + 0],      0
16442    pmaddubsw     m4,    m1,             m6
16443    pmulhrsw      m4,    m7
16444    pslldq        m3,    2
16445    pinsrw        m3,    [r3 + 8],       0
16446    pmaddubsw     m5,    m3,             m6
16447    pmulhrsw      m5,    m7
16448    packuswb      m4,    m5
16449    movu          [r0 + 1201 * 16],      m4
16450
16451    ; mode 20 [row 25]
16452    movu          m6,    [r5 + 30 * 16]
16453    pslldq        m0,    2
16454    pinsrb        m0,    [r4 + 24],      1
16455    pinsrb        m0,    [r4 + 26],      0
16456    pmaddubsw     m4,    m0,             m6
16457    pmulhrsw      m4,    m7
16458    pslldq        m2,    2
16459    pinsrb        m2,    [r4 + 12],      1
16460    pinsrb        m2,    [r4 + 14],      0
16461    pmaddubsw     m5,    m2,             m6
16462    pmulhrsw      m5,    m7
16463    packuswb      m4,    m5
16464    movu          [r0 + 1202 * 16],      m4
16465    pslldq        m1,    2
16466    pinsrb        m1,    [r4 + 0],       1
16467    pinsrb        m1,    [r4 + 2],       0
16468    pmaddubsw     m4,    m1,             m6
16469    pmulhrsw      m4,    m7
16470    pslldq        m3,    2
16471    pinsrw        m3,    [r3 + 7],      0
16472    pmaddubsw     m5,    m3,             m6
16473    pmulhrsw      m5,    m7
16474    packuswb      m4,    m5
16475    movu          [r0 + 1203 * 16],      m4
16476
16477    ; mode 20 [row 26]
16478    movu          m6,    [r5 + 9 * 16]
16479    pmaddubsw     m4,    m0,             m6
16480    pmulhrsw      m4,    m7
16481    pmaddubsw     m5,    m2,             m6
16482    pmulhrsw      m5,    m7
16483    packuswb      m4,    m5
16484    movu          [r0 + 1204 * 16],      m4
16485    pmaddubsw     m4,    m1,             m6
16486    pmulhrsw      m4,    m7
16487    pmaddubsw     m5,    m3,             m6
16488    pmulhrsw      m5,    m7
16489    packuswb      m4,    m5
16490    movu          [r0 + 1205 * 16],      m4
16491
16492    ; mode 20 [row 27]
16493    movu          m6,    [r5 + 20 * 16]
16494    pslldq        m0,    2
16495    pinsrb        m0,    [r4 + 26],      1
16496    pinsrb        m0,    [r4 + 27],      0
16497    pmaddubsw     m4,    m0,             m6
16498    pmulhrsw      m4,    m7
16499    pslldq        m2,    2
16500    pinsrb        m2,    [r4 + 14],      1
16501    pinsrb        m2,    [r4 + 15],      0
16502    pmaddubsw     m5,    m2,             m6
16503    pmulhrsw      m5,    m7
16504    packuswb      m4,    m5
16505    movu          [r0 + 1206 * 16],      m4
16506    pslldq        m1,    2
16507    pinsrb        m1,    [r4 + 2],       1
16508    pinsrb        m1,    [r4 + 3],       0
16509    pmaddubsw     m4,    m1,             m6
16510    pmulhrsw      m4,    m7
16511    pslldq        m3,    2
16512    pinsrw        m3,    [r3 + 6],      0
16513    pmaddubsw     m5,    m3,             m6
16514    pmulhrsw      m5,    m7
16515    packuswb      m4,    m5
16516    movu          [r0 + 1207 * 16],      m4
16517
16518    ; mode 20 [row 28]
16519    movu          m6,    [r5 + 31 * 16]
16520    pslldq        m0,    2
16521    pinsrb        m0,    [r4 + 27],      1
16522    pinsrb        m0,    [r4 + 29],      0
16523    pmaddubsw     m4,    m0,             m6
16524    pmulhrsw      m4,    m7
16525    pslldq        m2,    2
16526    pinsrb        m2,    [r4 + 15],      1
16527    pinsrb        m2,    [r4 + 17],      0
16528    pmaddubsw     m5,    m2,             m6
16529    pmulhrsw      m5,    m7
16530    packuswb      m4,    m5
16531    movu          [r0 + 1208 * 16],      m4
16532    pslldq        m1,    2
16533    pinsrb        m1,    [r4 + 3],       1
16534    pinsrb        m1,    [r4 + 5],       0
16535    pmaddubsw     m4,    m1,             m6
16536    pmulhrsw      m4,    m7
16537    pslldq        m3,    2
16538    pinsrw        m3,    [r3 + 5],      0
16539    pmaddubsw     m5,    m3,             m6
16540    pmulhrsw      m5,    m7
16541    packuswb      m4,    m5
16542    movu          [r0 + 1209 * 16],      m4
16543
16544    ; mode 20 [row 29]
16545    movu          m6,    [r5 + 10 * 16]
16546    pmaddubsw     m4,    m0,             m6
16547    pmulhrsw      m4,    m7
16548    pmaddubsw     m5,    m2,             m6
16549    pmulhrsw      m5,    m7
16550    packuswb      m4,    m5
16551    movu          [r0 + 1210 * 16],      m4
16552    pmaddubsw     m4,    m1,             m6
16553    pmulhrsw      m4,    m7
16554    pmaddubsw     m5,    m3,             m6
16555    pmulhrsw      m5,    m7
16556    packuswb      m4,    m5
16557    movu          [r0 + 1211 * 16],      m4
16558
16559    ; mode 20 [row 30]
16560    movu          m6,    [r5 + 21 * 16]
16561    pslldq        m0,    2
16562    pinsrb        m0,    [r4 + 29],      1
16563    pinsrb        m0,    [r4 + 30],      0
16564    pmaddubsw     m4,    m0,             m6
16565    pmulhrsw      m4,    m7
16566    pslldq        m2,    2
16567    pinsrb        m2,    [r4 + 17],      1
16568    pinsrb        m2,    [r4 + 18],      0
16569    pmaddubsw     m5,    m2,             m6
16570    pmulhrsw      m5,    m7
16571    packuswb      m4,    m5
16572    movu          [r0 + 1212 * 16],      m4
16573    pslldq        m1,    2
16574    pinsrb        m1,    [r4 + 5],       1
16575    pinsrb        m1,    [r4 + 6],       0
16576    pmaddubsw     m4,    m1,             m6
16577    pmulhrsw      m4,    m7
16578    pslldq        m3,    2
16579    pinsrw        m3,    [r3 + 4],      0
16580    pmaddubsw     m5,    m3,             m6
16581    pmulhrsw      m5,    m7
16582    packuswb      m4,    m5
16583    movu          [r0 + 1213 * 16],      m4
16584
16585    ; mode20 [row 31]
16586    pshufb        m5,    m0,            [tab_S2]
16587    movh          [r0 + 1214 * 16],     m5
16588    pshufb        m5,    m2,            [tab_S2]
16589    movh          [r0 + 1214 * 16 + 8], m5
16590    pshufb        m5,    m1,            [tab_S2]
16591    movh          [r0 + 1215 * 16],     m5
16592    pshufb        m5,    m3,            [tab_S2]
16593    movh          [r0 + 1215 * 16 + 8], m5
16594
16595    ; mode 21 [row 0]
16596    movu          m6,    [r5 + 15 * 16]
16597    movu          m0,    [r3         ]
16598    movu          m1,    [r3 + 1     ]
16599    punpcklbw     m0,    m1
16600    pmaddubsw     m1,    m0,            m6
16601    pmulhrsw      m1,    m7
16602    movu          m2,    [r3 + 8]
16603    movu          m3,    [r3 + 9]
16604    punpcklbw     m2,    m3
16605    pmaddubsw     m3,    m2,            m6
16606    pmulhrsw      m3,    m7
16607    packuswb      m1,    m3
16608    movu          [r0 + 1216 * 16],     m1
16609
16610    movu          m1,    [r3 + 16]
16611    movu          m3,    [r3 + 17]
16612    punpcklbw     m1,    m3
16613    pmaddubsw     m4,    m1,            m6
16614    pmulhrsw      m4,    m7
16615    movu          m3,    [r3 + 24]
16616    movu          m5,    [r3 + 25]
16617    punpcklbw     m3,    m5
16618    pmaddubsw     m5,    m3,            m6
16619    pmulhrsw      m5,    m7
16620    packuswb      m4,    m5
16621    movu          [r0 + 1217 * 16],     m4
16622
16623    ; mode 21 [row 1]
16624    movu          m6,    [r5 + 30 * 16]
16625    pslldq        m0,    2
16626    pinsrb        m0,    [r4 + 0],      1
16627    pinsrb        m0,    [r4 + 2],      0
16628    pmaddubsw     m4,    m0,            m6
16629    pmulhrsw      m4,    m7
16630    pslldq        m2,    2
16631    pinsrw        m2,    [r3 + 7],      0
16632    pmaddubsw     m5,    m2,            m6
16633    pmulhrsw      m5,    m7
16634    packuswb      m4,    m5
16635    movu          [r0 + 1218 * 16],     m4
16636    pslldq        m1,    2
16637    pinsrw        m1,    [r3 + 15],      0
16638    pmaddubsw     m4,    m1,            m6
16639    pmulhrsw      m4,    m7
16640    pslldq        m3,    2
16641    pinsrw        m3,    [r3 + 23],      0
16642    pmaddubsw     m5,    m3,            m6
16643    pmulhrsw      m5,    m7
16644    packuswb      m4,    m5
16645    movu          [r0 + 1219 * 16],     m4
16646
16647    ; mode 21 [row 2]
16648    movu          m6,    [r5 + 13 * 16]
16649    pmaddubsw     m4,    m0,            m6
16650    pmulhrsw      m4,    m7
16651    pmaddubsw     m5,    m2,            m6
16652    pmulhrsw      m5,    m7
16653    packuswb      m4,    m5
16654    movu          [r0 + 1220 * 16],     m4
16655    pmaddubsw     m4,    m1,            m6
16656    pmulhrsw      m4,    m7
16657    pmaddubsw     m5,    m3,            m6
16658    pmulhrsw      m5,    m7
16659    packuswb      m4,    m5
16660    movu          [r0 + 1221 * 16],     m4
16661
16662    ; mode 21 [row 3]
16663    movu          m6,    [r5 + 28 * 16]
16664    pslldq        m0,    2
16665    pinsrb        m0,    [r4 + 2],      1
16666    pinsrb        m0,    [r4 + 4],      0
16667    pmaddubsw     m4,    m0,            m6
16668    pmulhrsw      m4,    m7
16669    pslldq        m2,    2
16670    pinsrw        m2,    [r3 + 6],      0
16671    pmaddubsw     m5,    m2,            m6
16672    pmulhrsw      m5,    m7
16673    packuswb      m4,    m5
16674    movu          [r0 + 1222 * 16],     m4
16675    pslldq        m1,    2
16676    pinsrw        m1,    [r3 + 14],      0
16677    pmaddubsw     m4,    m1,            m6
16678    pmulhrsw      m4,    m7
16679    pslldq        m3,    2
16680    pinsrw        m3,    [r3 + 22],      0
16681    pmaddubsw     m5,    m3,            m6
16682    pmulhrsw      m5,    m7
16683    packuswb      m4,    m5
16684    movu          [r0 + 1223 * 16],     m4
16685
16686    ; mode 21 [row 4]
16687    movu          m6,    [r5 + 11 * 16]
16688    pmaddubsw     m4,    m0,            m6
16689    pmulhrsw      m4,    m7
16690    pmaddubsw     m5,    m2,            m6
16691    pmulhrsw      m5,    m7
16692    packuswb      m4,    m5
16693    movu          [r0 + 1224 * 16],     m4
16694    pmaddubsw     m4,    m1,            m6
16695    pmulhrsw      m4,    m7
16696    pmaddubsw     m5,    m3,            m6
16697    pmulhrsw      m5,    m7
16698    packuswb      m4,    m5
16699    movu          [r0 + 1225 * 16],     m4
16700
16701    ; mode 21 [row 5]
16702    movu          m6,    [r5 + 26 * 16]
16703    pslldq        m0,    2
16704    pinsrb        m0,    [r4 + 4],      1
16705    pinsrb        m0,    [r4 + 6],      0
16706    pmaddubsw     m4,    m0,            m6
16707    pmulhrsw      m4,    m7
16708    pslldq        m2,    2
16709    pinsrw        m2,    [r3 + 5],      0
16710    pmaddubsw     m5,    m2,            m6
16711    pmulhrsw      m5,    m7
16712    packuswb      m4,    m5
16713    movu          [r0 + 1226 * 16],     m4
16714    pslldq        m1,    2
16715    pinsrw        m1,    [r3 + 13],      0
16716    pmaddubsw     m4,    m1,            m6
16717    pmulhrsw      m4,    m7
16718    pslldq        m3,    2
16719    pinsrw        m3,    [r3 + 21],      0
16720    pmaddubsw     m5,    m3,            m6
16721    pmulhrsw      m5,    m7
16722    packuswb      m4,    m5
16723    movu          [r0 + 1227 * 16],     m4
16724
16725    ; mode 21 [row 6]
16726    movu          m6,    [r5 + 9 * 16]
16727    pmaddubsw     m4,    m0,            m6
16728    pmulhrsw      m4,    m7
16729    pmaddubsw     m5,    m2,            m6
16730    pmulhrsw      m5,    m7
16731    packuswb      m4,    m5
16732    movu          [r0 + 1228 * 16],     m4
16733    pmaddubsw     m4,    m1,            m6
16734    pmulhrsw      m4,    m7
16735    pmaddubsw     m5,    m3,            m6
16736    pmulhrsw      m5,    m7
16737    packuswb      m4,    m5
16738    movu          [r0 + 1229 * 16],     m4
16739
16740    ; mode 21 [row 7]
16741    movu          m6,    [r5 + 24 * 16]
16742    pslldq        m0,    2
16743    pinsrb        m0,    [r4 + 6],      1
16744    pinsrb        m0,    [r4 + 8],      0
16745    pmaddubsw     m4,    m0,            m6
16746    pmulhrsw      m4,    m7
16747    pslldq        m2,    2
16748    pinsrw        m2,    [r3 + 4],      0
16749    pmaddubsw     m5,    m2,            m6
16750    pmulhrsw      m5,    m7
16751    packuswb      m4,    m5
16752    movu          [r0 + 1230 * 16],     m4
16753    pslldq        m1,    2
16754    pinsrw        m1,    [r3 + 12],      0
16755    pmaddubsw     m4,    m1,            m6
16756    pmulhrsw      m4,    m7
16757    pslldq        m3,    2
16758    pinsrw        m3,    [r3 + 20],      0
16759    pmaddubsw     m5,    m3,            m6
16760    pmulhrsw      m5,    m7
16761    packuswb      m4,    m5
16762    movu          [r0 + 1231 * 16],     m4
16763
16764    ; mode 21 [row 8]
16765    movu          m6,    [r5 + 7 * 16]
16766    pmaddubsw     m4,    m0,            m6
16767    pmulhrsw      m4,    m7
16768    pmaddubsw     m5,    m2,            m6
16769    pmulhrsw      m5,    m7
16770    packuswb      m4,    m5
16771    movu          [r0 + 1232 * 16],     m4
16772    pmaddubsw     m4,    m1,            m6
16773    pmulhrsw      m4,    m7
16774    pmaddubsw     m5,    m3,            m6
16775    pmulhrsw      m5,    m7
16776    packuswb      m4,    m5
16777    movu          [r0 + 1233 * 16],     m4
16778
16779    ; mode 21 [row 9]
16780    movu          m6,    [r5 + 22 * 16]
16781    pslldq        m0,    2
16782    pinsrb        m0,    [r4 + 8],      1
16783    pinsrb        m0,    [r4 + 9],      0
16784    pmaddubsw     m4,    m0,            m6
16785    pmulhrsw      m4,    m7
16786    pslldq        m2,    2
16787    pinsrw        m2,    [r3 + 3],      0
16788    pmaddubsw     m5,    m2,            m6
16789    pmulhrsw      m5,    m7
16790    packuswb      m4,    m5
16791    movu          [r0 + 1234 * 16],     m4
16792    pslldq        m1,    2
16793    pinsrw        m1,    [r3 + 11],      0
16794    pmaddubsw     m4,    m1,            m6
16795    pmulhrsw      m4,    m7
16796    pslldq        m3,    2
16797    pinsrw        m3,    [r3 + 19],      0
16798    pmaddubsw     m5,    m3,            m6
16799    pmulhrsw      m5,    m7
16800    packuswb      m4,    m5
16801    movu          [r0 + 1235 * 16],     m4
16802
16803    ; mode 21 [row 10]
16804    movu          m6,    [r5 + 5 * 16]
16805    pmaddubsw     m4,    m0,            m6
16806    pmulhrsw      m4,    m7
16807    pmaddubsw     m5,    m2,            m6
16808    pmulhrsw      m5,    m7
16809    packuswb      m4,    m5
16810    movu          [r0 + 1236 * 16],     m4
16811    pmaddubsw     m4,    m1,            m6
16812    pmulhrsw      m4,    m7
16813    pmaddubsw     m5,    m3,            m6
16814    pmulhrsw      m5,    m7
16815    packuswb      m4,    m5
16816    movu          [r0 + 1237 * 16],     m4
16817
16818    ; mode 21 [row 11]
16819    movu          m6,    [r5 + 20 * 16]
16820    pslldq        m0,    2
16821    pinsrb        m0,    [r4 +  9],     1
16822    pinsrb        m0,    [r4 + 11],     0
16823    pmaddubsw     m4,    m0,            m6
16824    pmulhrsw      m4,    m7
16825    pslldq        m2,    2
16826    pinsrw        m2,    [r3 + 2],      0
16827    pmaddubsw     m5,    m2,            m6
16828    pmulhrsw      m5,    m7
16829    packuswb      m4,    m5
16830    movu          [r0 + 1238 * 16],     m4
16831    pslldq        m1,    2
16832    pinsrw        m1,    [r3 + 10],      0
16833    pmaddubsw     m4,    m1,            m6
16834    pmulhrsw      m4,    m7
16835    pslldq        m3,    2
16836    pinsrw        m3,    [r3 + 18],      0
16837    pmaddubsw     m5,    m3,            m6
16838    pmulhrsw      m5,    m7
16839    packuswb      m4,    m5
16840    movu          [r0 + 1239 * 16],     m4
16841
16842    ; mode 21 [row 12]
16843    movu          m6,    [r5 + 3 * 16]
16844    pmaddubsw     m4,    m0,            m6
16845    pmulhrsw      m4,    m7
16846    pmaddubsw     m5,    m2,            m6
16847    pmulhrsw      m5,    m7
16848    packuswb      m4,    m5
16849    movu          [r0 + 1240 * 16],     m4
16850    pmaddubsw     m4,    m1,            m6
16851    pmulhrsw      m4,    m7
16852    pmaddubsw     m5,    m3,            m6
16853    pmulhrsw      m5,    m7
16854    packuswb      m4,    m5
16855    movu          [r0 + 1241 * 16],     m4
16856
16857    ; mode 21 [row 13]
16858    movu          m6,    [r5 + 18 * 16]
16859    pslldq        m0,    2
16860    pinsrb        m0,    [r4 + 11],     1
16861    pinsrb        m0,    [r4 + 13],     0
16862    pmaddubsw     m4,    m0,            m6
16863    pmulhrsw      m4,    m7
16864    pslldq        m2,    2
16865    pinsrw        m2,    [r3 + 1],      0
16866    pmaddubsw     m5,    m2,            m6
16867    pmulhrsw      m5,    m7
16868    packuswb      m4,    m5
16869    movu          [r0 + 1242 * 16],     m4
16870    pslldq        m1,    2
16871    pinsrw        m1,    [r3 + 9],      0
16872    pmaddubsw     m4,    m1,            m6
16873    pmulhrsw      m4,    m7
16874    pslldq        m3,    2
16875    pinsrw        m3,    [r3 + 17],      0
16876    pmaddubsw     m5,    m3,            m6
16877    pmulhrsw      m5,    m7
16878    packuswb      m4,    m5
16879    movu          [r0 + 1243 * 16],     m4
16880
16881    ; mode 21 [row 14]
16882    movu          m6,    [r5 + 1 * 16]
16883    pmaddubsw     m4,    m0,            m6
16884    pmulhrsw      m4,    m7
16885    pmaddubsw     m5,    m2,            m6
16886    pmulhrsw      m5,    m7
16887    packuswb      m4,    m5
16888    movu          [r0 + 1244 * 16],     m4
16889    pmaddubsw     m4,    m1,            m6
16890    pmulhrsw      m4,    m7
16891    pmaddubsw     m5,    m3,            m6
16892    pmulhrsw      m5,    m7
16893    packuswb      m4,    m5
16894    movu          [r0 + 1245 * 16],     m4
16895
16896    ; mode 21 [row 15]
16897    movu          m6,    [r5 + 16 * 16]
16898    pslldq        m0,    2
16899    pinsrb        m0,    [r4 + 13],     1
16900    pinsrb        m0,    [r4 + 15],     0
16901    pmaddubsw     m4,    m0,            m6
16902    pmulhrsw      m4,    m7
16903    pslldq        m2,    2
16904    pinsrw        m2,    [r3 + 0],      0
16905    pmaddubsw     m5,    m2,            m6
16906    pmulhrsw      m5,    m7
16907    packuswb      m4,    m5
16908    movu          [r0 + 1246 * 16],     m4
16909    pslldq        m1,    2
16910    pinsrw        m1,    [r3 + 8],      0
16911    pmaddubsw     m4,    m1,            m6
16912    pmulhrsw      m4,    m7
16913    pslldq        m3,    2
16914    pinsrw        m3,    [r3 + 16],      0
16915    pmaddubsw     m5,    m3,            m6
16916    pmulhrsw      m5,    m7
16917    packuswb      m4,    m5
16918    movu          [r0 + 1247 * 16],     m4
16919
16920    ; mode 21 [row 16]
16921    movu          m6,    [r5 + 31 * 16]
16922    pslldq        m0,    2
16923    pinsrb        m0,    [r4 + 15],     1
16924    pinsrb        m0,    [r4 + 17],     0
16925    pmaddubsw     m4,    m0,            m6
16926    pmulhrsw      m4,    m7
16927    pslldq        m2,    2
16928    pinsrb        m2,    [r4 + 0],      1
16929    pinsrb        m2,    [r4 + 2],      0
16930    pmaddubsw     m5,    m2,            m6
16931    pmulhrsw      m5,    m7
16932    packuswb      m4,    m5
16933    movu          [r0 + 1248 * 16],     m4
16934    pslldq        m1,    2
16935    pinsrw        m1,    [r3 + 7],      0
16936    pmaddubsw     m4,    m1,            m6
16937    pmulhrsw      m4,    m7
16938    pslldq        m3,    2
16939    pinsrw        m3,    [r3 + 15],      0
16940    pmaddubsw     m5,    m3,            m6
16941    pmulhrsw      m5,    m7
16942    packuswb      m4,    m5
16943    movu          [r0 + 1249 * 16],     m4
16944
16945    ; mode 21 [row 17]
16946    movu          m6,    [r5 + 14 * 16]
16947    pmaddubsw     m4,    m0,            m6
16948    pmulhrsw      m4,    m7
16949    pmaddubsw     m5,    m2,            m6
16950    pmulhrsw      m5,    m7
16951    packuswb      m4,    m5
16952    movu          [r0 + 1250 * 16],     m4
16953    pmaddubsw     m4,    m1,            m6
16954    pmulhrsw      m4,    m7
16955    pmaddubsw     m5,    m3,            m6
16956    pmulhrsw      m5,    m7
16957    packuswb      m4,    m5
16958    movu          [r0 + 1251 * 16],     m4
16959
16960    ; mode 21 [row 18]
16961    movu          m6,    [r5 + 29 * 16]
16962    pslldq        m0,    2
16963    pinsrb        m0,    [r4 + 17],     1
16964    pinsrb        m0,    [r4 + 19],     0
16965    pmaddubsw     m4,    m0,            m6
16966    pmulhrsw      m4,    m7
16967    pslldq        m2,    2
16968    pinsrb        m2,    [r4 + 2],      1
16969    pinsrb        m2,    [r4 + 4],      0
16970    pmaddubsw     m5,    m2,            m6
16971    pmulhrsw      m5,    m7
16972    packuswb      m4,    m5
16973    movu          [r0 + 1252 * 16],     m4
16974    pslldq        m1,    2
16975    pinsrb        m1,    [r3 + 7],      1
16976    pinsrb        m1,    [r3 + 6],      0
16977    pmaddubsw     m4,    m1,            m6
16978    pmulhrsw      m4,    m7
16979    pslldq        m3,    2
16980    pinsrb        m3,    [r3 + 15],     1
16981    pinsrb        m3,    [r3 + 14],     0
16982    pmaddubsw     m5,    m3,            m6
16983    pmulhrsw      m5,    m7
16984    packuswb      m4,    m5
16985    movu          [r0 + 1253 * 16],     m4
16986
16987    ; mode 21 [row 19]
16988    movu          m6,    [r5 + 12 * 16]
16989    pmaddubsw     m4,    m0,            m6
16990    pmulhrsw      m4,    m7
16991    pmaddubsw     m5,    m2,            m6
16992    pmulhrsw      m5,    m7
16993    packuswb      m4,    m5
16994    movu          [r0 + 1254 * 16],     m4
16995    pmaddubsw     m4,    m1,            m6
16996    pmulhrsw      m4,    m7
16997    pmaddubsw     m5,    m3,            m6
16998    pmulhrsw      m5,    m7
16999    packuswb      m4,    m5
17000    movu          [r0 + 1255 * 16],     m4
17001
17002    ; mode 21 [row 20]
17003    movu          m6,    [r5 + 27 * 16]
17004    pslldq        m0,    2
17005    pinsrb        m0,    [r4 + 19],     1
17006    pinsrb        m0,    [r4 + 21],     0
17007    pmaddubsw     m4,    m0,            m6
17008    pmulhrsw      m4,    m7
17009    pslldq        m2,    2
17010    pinsrb        m2,    [r4 + 4],      1
17011    pinsrb        m2,    [r4 + 6],      0
17012    pmaddubsw     m5,    m2,            m6
17013    pmulhrsw      m5,    m7
17014    packuswb      m4,    m5
17015    movu          [r0 + 1256 * 16],     m4
17016    pslldq        m1,    2
17017    pinsrw        m1,    [r3 + 5],      0
17018    pmaddubsw     m4,    m1,            m6
17019    pmulhrsw      m4,    m7
17020    pslldq        m3,    2
17021    pinsrw        m3,    [r3 + 13],      0
17022    pmaddubsw     m5,    m3,            m6
17023    pmulhrsw      m5,    m7
17024    packuswb      m4,    m5
17025    movu          [r0 + 1257 * 16],     m4
17026
17027    ; mode 21 [row 21]
17028    movu          m6,    [r5 + 10 * 16]
17029    pmaddubsw     m4,    m0,            m6
17030    pmulhrsw      m4,    m7
17031    pmaddubsw     m5,    m2,            m6
17032    pmulhrsw      m5,    m7
17033    packuswb      m4,    m5
17034    movu          [r0 + 1258 * 16],     m4
17035    pmaddubsw     m4,    m1,            m6
17036    pmulhrsw      m4,    m7
17037    pmaddubsw     m5,    m3,            m6
17038    pmulhrsw      m5,    m7
17039    packuswb      m4,    m5
17040    movu          [r0 + 1259 * 16],     m4
17041
17042    ; mode 21 [row 22]
17043    movu          m6,    [r5 + 25 * 16]
17044    pslldq        m0,    2
17045    pinsrb        m0,    [r4 + 21],     1
17046    pinsrb        m0,    [r4 + 23],     0
17047    pmaddubsw     m4,    m0,            m6
17048    pmulhrsw      m4,    m7
17049    pslldq        m2,    2
17050    pinsrb        m2,    [r4 + 6],      1
17051    pinsrb        m2,    [r4 + 8],      0
17052    pmaddubsw     m5,    m2,            m6
17053    pmulhrsw      m5,    m7
17054    packuswb      m4,    m5
17055    movu          [r0 + 1260 * 16],     m4
17056    pslldq        m1,    2
17057    pinsrw        m1,    [r3 + 4],      0
17058    pmaddubsw     m4,    m1,            m6
17059    pmulhrsw      m4,    m7
17060    pslldq        m3,    2
17061    pinsrw        m3,    [r3 + 12],      0
17062    pmaddubsw     m5,    m3,            m6
17063    pmulhrsw      m5,    m7
17064    packuswb      m4,    m5
17065    movu          [r0 + 1261 * 16],     m4
17066
17067    ; mode 21 [row 23]
17068    movu          m6,    [r5 + 8 * 16]
17069    pmaddubsw     m4,    m0,            m6
17070    pmulhrsw      m4,    m7
17071    pmaddubsw     m5,    m2,            m6
17072    pmulhrsw      m5,    m7
17073    packuswb      m4,    m5
17074    movu          [r0 + 1262 * 16],     m4
17075    pmaddubsw     m4,    m1,            m6
17076    pmulhrsw      m4,    m7
17077    pmaddubsw     m5,    m3,            m6
17078    pmulhrsw      m5,    m7
17079    packuswb      m4,    m5
17080    movu          [r0 + 1263 * 16],     m4
17081
17082    ; mode 21 [row 24]
17083    movu          m6,    [r5 + 23 * 16]
17084    pslldq        m0,    2
17085    pinsrb        m0,    [r4 + 23],     1
17086    pinsrb        m0,    [r4 + 24],     0
17087    pmaddubsw     m4,    m0,            m6
17088    pmulhrsw      m4,    m7
17089    pslldq        m2,    2
17090    pinsrb        m2,    [r4 + 8],      1
17091    pinsrb        m2,    [r4 + 9],      0
17092    pmaddubsw     m5,    m2,            m6
17093    pmulhrsw      m5,    m7
17094    packuswb      m4,    m5
17095    movu          [r0 + 1264 * 16],     m4
17096    pslldq        m1,    2
17097    pinsrw        m1,    [r3 + 3],      0
17098    pmaddubsw     m4,    m1,            m6
17099    pmulhrsw      m4,    m7
17100    pslldq        m3,    2
17101    pinsrw        m3,    [r3 + 11],      0
17102    pmaddubsw     m5,    m3,            m6
17103    pmulhrsw      m5,    m7
17104    packuswb      m4,    m5
17105    movu          [r0 + 1265 * 16],     m4
17106
17107    ; mode 21 [row 25]
17108    movu          m6,    [r5 + 6 * 16]
17109    pmaddubsw     m4,    m0,            m6
17110    pmulhrsw      m4,    m7
17111    pmaddubsw     m5,    m2,            m6
17112    pmulhrsw      m5,    m7
17113    packuswb      m4,    m5
17114    movu          [r0 + 1266 * 16],     m4
17115    pmaddubsw     m4,    m1,            m6
17116    pmulhrsw      m4,    m7
17117    pmaddubsw     m5,    m3,            m6
17118    pmulhrsw      m5,    m7
17119    packuswb      m4,    m5
17120    movu          [r0 + 1267 * 16],     m4
17121
17122    ; mode 21 [row 26]
17123    movu          m6,    [r5 + 21 * 16]
17124    pslldq        m0,    2
17125    pinsrb        m0,    [r4 + 24],     1
17126    pinsrb        m0,    [r4 + 26],     0
17127    pmaddubsw     m4,    m0,            m6
17128    pmulhrsw      m4,    m7
17129    pslldq        m2,    2
17130    pinsrb        m2,    [r4 +  9],      1
17131    pinsrb        m2,    [r4 + 11],      0
17132    pmaddubsw     m5,    m2,            m6
17133    pmulhrsw      m5,    m7
17134    packuswb      m4,    m5
17135    movu          [r0 + 1268 * 16],     m4
17136    pslldq        m1,    2
17137    pinsrw        m1,    [r3 + 2],      0
17138    pmaddubsw     m4,    m1,            m6
17139    pmulhrsw      m4,    m7
17140    pslldq        m3,    2
17141    pinsrw        m3,    [r3 + 10],      0
17142    pmaddubsw     m5,    m3,            m6
17143    pmulhrsw      m5,    m7
17144    packuswb      m4,    m5
17145    movu          [r0 + 1269 * 16],     m4
17146
17147    ; mode 21 [row 27]
17148    movu          m6,    [r5 + 4 * 16]
17149    pmaddubsw     m4,    m0,            m6
17150    pmulhrsw      m4,    m7
17151    pmaddubsw     m5,    m2,            m6
17152    pmulhrsw      m5,    m7
17153    packuswb      m4,    m5
17154    movu          [r0 + 1270 * 16],     m4
17155    pmaddubsw     m4,    m1,            m6
17156    pmulhrsw      m4,    m7
17157    pmaddubsw     m5,    m3,            m6
17158    pmulhrsw      m5,    m7
17159    packuswb      m4,    m5
17160    movu          [r0 + 1271 * 16],     m4
17161
17162    ; mode 21 [row 28]
17163    movu          m6,    [r5 + 19 * 16]
17164    pslldq        m0,    2
17165    pinsrb        m0,    [r4 + 26],     1
17166    pinsrb        m0,    [r4 + 28],     0
17167    pmaddubsw     m4,    m0,            m6
17168    pmulhrsw      m4,    m7
17169    pslldq        m2,    2
17170    pinsrb        m2,    [r4 + 11],      1
17171    pinsrb        m2,    [r4 + 13],      0
17172    pmaddubsw     m5,    m2,            m6
17173    pmulhrsw      m5,    m7
17174    packuswb      m4,    m5
17175    movu          [r0 + 1272 * 16],     m4
17176    pslldq        m1,    2
17177    pinsrw        m1,    [r3 + 1],      0
17178    pmaddubsw     m4,    m1,            m6
17179    pmulhrsw      m4,    m7
17180    pslldq        m3,    2
17181    pinsrw        m3,    [r3 + 9],      0
17182    pmaddubsw     m5,    m3,            m6
17183    pmulhrsw      m5,    m7
17184    packuswb      m4,    m5
17185    movu          [r0 + 1273 * 16],     m4
17186
17187    ; mode 21 [row 29]
17188    movu          m6,    [r5 + 2 * 16]
17189    pmaddubsw     m4,    m0,            m6
17190    pmulhrsw      m4,    m7
17191    pmaddubsw     m5,    m2,            m6
17192    pmulhrsw      m5,    m7
17193    packuswb      m4,    m5
17194    movu          [r0 + 1274 * 16],     m4
17195    pmaddubsw     m4,    m1,            m6
17196    pmulhrsw      m4,    m7
17197    pmaddubsw     m5,    m3,            m6
17198    pmulhrsw      m5,    m7
17199    packuswb      m4,    m5
17200    movu          [r0 + 1275 * 16],     m4
17201
17202    ; mode 21 [row 30]
17203    movu          m6,    [r5 + 17 * 16]
17204    pslldq        m0,    2
17205    pinsrb        m0,    [r4 + 28],     1
17206    pinsrb        m0,    [r4 + 30],     0
17207    pmaddubsw     m4,    m0,            m6
17208    pmulhrsw      m4,    m7
17209    pslldq        m2,    2
17210    pinsrb        m2,    [r4 + 13],     1
17211    pinsrb        m2,    [r4 + 15],     0
17212    pmaddubsw     m5,    m2,            m6
17213    pmulhrsw      m5,    m7
17214    packuswb      m4,    m5
17215    movu          [r0 + 1276 * 16],     m4
17216    pslldq        m1,    2
17217    pinsrw        m1,    [r3 + 0],      0
17218    pmaddubsw     m4,    m1,            m6
17219    pmulhrsw      m4,    m7
17220    pslldq        m3,    2
17221    pinsrw        m3,    [r3 + 8],      0
17222    pmaddubsw     m5,    m3,            m6
17223    pmulhrsw      m5,    m7
17224    packuswb      m4,    m5
17225    movu          [r0 + 1277 * 16],     m4
17226
17227    ; mode21 [row 31]
17228    pshufb        m5,    m0,            [tab_S2]
17229    movh          [r0 + 1278 * 16],     m5
17230    pshufb        m5,    m2,            [tab_S2]
17231    movh          [r0 + 1278 * 16 + 8], m5
17232    pshufb        m5,    m1,            [tab_S2]
17233    movh          [r0 + 1279 * 16],     m5
17234    pshufb        m5,    m3,            [tab_S2]
17235    movh          [r0 + 1279 * 16 + 8], m5
17236
17237    ; mode 22 [row 0]
17238    movu          m6,    [r5 + 19 * 16]
17239    movu          m0,    [r3          ]
17240    movu          m1,    [r3 + 1      ]
17241    punpcklbw     m0,    m1
17242    pmaddubsw     m1,    m0,            m6
17243    pmulhrsw      m1,    m7
17244    movu          m2,    [r3 + 8]
17245    movu          m3,    [r3 + 9]
17246    punpcklbw     m2,    m3
17247    pmaddubsw     m3,    m2,            m6
17248    pmulhrsw      m3,    m7
17249    packuswb      m1,    m3
17250    movu          [r0 + 1280 * 16],     m1
17251
17252    movu          m1,    [r3 + 16]
17253    movu          m3,    [r3 + 17]
17254    punpcklbw     m1,    m3
17255    pmaddubsw     m4,    m1,            m6
17256    pmulhrsw      m4,    m7
17257    movu          m3,    [r3 + 24]
17258    movu          m5,    [r3 + 25]
17259    punpcklbw     m3,    m5
17260    pmaddubsw     m5,    m3,            m6
17261    pmulhrsw      m5,    m7
17262    packuswb      m4,    m5
17263    movu          [r0 + 1281 * 16],     m4
17264
17265    ; mode 22 [row 1]
17266    movu          m6,    [r5 + 6 * 16]
17267    pmaddubsw     m4,    m0,            m6
17268    pmulhrsw      m4,    m7
17269    pmaddubsw     m5,    m2,            m6
17270    pmulhrsw      m5,    m7
17271    packuswb      m4,    m5
17272    movu          [r0 + 1282 * 16],     m4
17273    pmaddubsw     m4,    m1,            m6
17274    pmulhrsw      m4,    m7
17275    pmaddubsw     m5,    m3,            m6
17276    pmulhrsw      m5,    m7
17277    packuswb      m4,    m5
17278    movu          [r0 + 1283 * 16],     m4
17279
17280    ; mode 22 [row 2]
17281    movu          m6,    [r5 + 25 * 16]
17282    pslldq        m0,    2
17283    pinsrb        m0,    [r4 + 0],      1
17284    pinsrb        m0,    [r4 + 2],      0
17285    pmaddubsw     m4,    m0,            m6
17286    pmulhrsw      m4,    m7
17287    pslldq        m2,    2
17288    pinsrw        m2,    [r3 + 7],      0
17289    pmaddubsw     m5,    m2,            m6
17290    pmulhrsw      m5,    m7
17291    packuswb      m4,    m5
17292    movu          [r0 + 1284 * 16],     m4
17293    pslldq        m1,    2
17294    pinsrw        m1,    [r3 + 15],      0
17295    pmaddubsw     m4,    m1,            m6
17296    pmulhrsw      m4,    m7
17297    pslldq        m3,    2
17298    pinsrw        m3,    [r3 + 23],      0
17299    pmaddubsw     m5,    m3,            m6
17300    pmulhrsw      m5,    m7
17301    packuswb      m4,    m5
17302    movu          [r0 + 1285 * 16],     m4
17303
17304    ; mode 22 [row 3]
17305    movu          m6,    [r5 + 12 * 16]
17306    pmaddubsw     m4,    m0,            m6
17307    pmulhrsw      m4,    m7
17308    pmaddubsw     m5,    m2,            m6
17309    pmulhrsw      m5,    m7
17310    packuswb      m4,    m5
17311    movu          [r0 + 1286 * 16],     m4
17312    pmaddubsw     m4,    m1,            m6
17313    pmulhrsw      m4,    m7
17314    pmaddubsw     m5,    m3,            m6
17315    pmulhrsw      m5,    m7
17316    packuswb      m4,    m5
17317    movu          [r0 + 1287 * 16],     m4
17318
17319    ; mode 22 [row 4]
17320    movu          m6,    [r5 + 31 * 16]
17321    pslldq        m0,    2
17322    pinsrb        m0,    [r4 + 2],      1
17323    pinsrb        m0,    [r4 + 5],      0
17324    pmaddubsw     m4,    m0,            m6
17325    pmulhrsw      m4,    m7
17326    pslldq        m2,    2
17327    pinsrw        m2,    [r3 + 6],      0
17328    pmaddubsw     m5,    m2,            m6
17329    pmulhrsw      m5,    m7
17330    packuswb      m4,    m5
17331    movu          [r0 + 1288 * 16],     m4
17332    pslldq        m1,    2
17333    pinsrw        m1,    [r3 + 14],      0
17334    pmaddubsw     m4,    m1,            m6
17335    pmulhrsw      m4,    m7
17336    pslldq        m3,    2
17337    pinsrw        m3,    [r3 + 22],      0
17338    pmaddubsw     m5,    m3,            m6
17339    pmulhrsw      m5,    m7
17340    packuswb      m4,    m5
17341    movu          [r0 + 1289 * 16],     m4
17342
17343    ; mode 22 [row 5]
17344    movu          m6,    [r5 + 18 * 16]
17345    pmaddubsw     m4,    m0,            m6
17346    pmulhrsw      m4,    m7
17347    pmaddubsw     m5,    m2,            m6
17348    pmulhrsw      m5,    m7
17349    packuswb      m4,    m5
17350    movu          [r0 + 1290 * 16],     m4
17351    pmaddubsw     m4,    m1,            m6
17352    pmulhrsw      m4,    m7
17353    pmaddubsw     m5,    m3,            m6
17354    pmulhrsw      m5,    m7
17355    packuswb      m4,    m5
17356    movu          [r0 + 1291 * 16],     m4
17357
17358    ; mode 22 [row 6]
17359    movu          m6,    [r5 + 5 * 16]
17360    pmaddubsw     m4,    m0,            m6
17361    pmulhrsw      m4,    m7
17362    pmaddubsw     m5,    m2,            m6
17363    pmulhrsw      m5,    m7
17364    packuswb      m4,    m5
17365    movu          [r0 + 1292 * 16],     m4
17366    pmaddubsw     m4,    m1,            m6
17367    pmulhrsw      m4,    m7
17368    pmaddubsw     m5,    m3,            m6
17369    pmulhrsw      m5,    m7
17370    packuswb      m4,    m5
17371    movu          [r0 + 1293 * 16],     m4
17372
17373    ; mode 22 [row 7]
17374    movu          m6,    [r5 + 24 * 16]
17375    pslldq        m0,    2
17376    pinsrb        m0,    [r4 + 5],      1
17377    pinsrb        m0,    [r4 + 7],      0
17378    pmaddubsw     m4,    m0,            m6
17379    pmulhrsw      m4,    m7
17380    pslldq        m2,    2
17381    pinsrw        m2,    [r3 + 5],      0
17382    pmaddubsw     m5,    m2,            m6
17383    pmulhrsw      m5,    m7
17384    packuswb      m4,    m5
17385    movu          [r0 + 1294 * 16],     m4
17386    pslldq        m1,    2
17387    pinsrw        m1,    [r3 + 13],      0
17388    pmaddubsw     m4,    m1,            m6
17389    pmulhrsw      m4,    m7
17390    pslldq        m3,    2
17391    pinsrw        m3,    [r3 + 21],      0
17392    pmaddubsw     m5,    m3,            m6
17393    pmulhrsw      m5,    m7
17394    packuswb      m4,    m5
17395    movu          [r0 + 1295 * 16],     m4
17396
17397    ; mode 22 [row 8]
17398    movu          m6,    [r5 + 11 * 16]
17399    pmaddubsw     m4,    m0,            m6
17400    pmulhrsw      m4,    m7
17401    pmaddubsw     m5,    m2,            m6
17402    pmulhrsw      m5,    m7
17403    packuswb      m4,    m5
17404    movu          [r0 + 1296 * 16],     m4
17405    pmaddubsw     m4,    m1,            m6
17406    pmulhrsw      m4,    m7
17407    pmaddubsw     m5,    m3,            m6
17408    pmulhrsw      m5,    m7
17409    packuswb      m4,    m5
17410    movu          [r0 + 1297 * 16],     m4
17411
17412    ; mode 22 [row 9]
17413    movu          m6,    [r5 + 30 * 16]
17414    pslldq        m0,    2
17415    pinsrb        m0,    [r4 +  7],      1
17416    pinsrb        m0,    [r4 + 10],      0
17417    pmaddubsw     m4,    m0,            m6
17418    pmulhrsw      m4,    m7
17419    pslldq        m2,    2
17420    pinsrw        m2,    [r3 + 4],      0
17421    pmaddubsw     m5,    m2,            m6
17422    pmulhrsw      m5,    m7
17423    packuswb      m4,    m5
17424    movu          [r0 + 1298 * 16],     m4
17425    pslldq        m1,    2
17426    pinsrw        m1,    [r3 + 12],      0
17427    pmaddubsw     m4,    m1,            m6
17428    pmulhrsw      m4,    m7
17429    pslldq        m3,    2
17430    pinsrw        m3,    [r3 + 20],      0
17431    pmaddubsw     m5,    m3,            m6
17432    pmulhrsw      m5,    m7
17433    packuswb      m4,    m5
17434    movu          [r0 + 1299 * 16],     m4
17435
17436    ; mode 22 [row 10]
17437    movu          m6,    [r5 + 17 * 16]
17438    pmaddubsw     m4,    m0,            m6
17439    pmulhrsw      m4,    m7
17440    pmaddubsw     m5,    m2,            m6
17441    pmulhrsw      m5,    m7
17442    packuswb      m4,    m5
17443    movu          [r0 + 1300 * 16],     m4
17444    pmaddubsw     m4,    m1,            m6
17445    pmulhrsw      m4,    m7
17446    pmaddubsw     m5,    m3,            m6
17447    pmulhrsw      m5,    m7
17448    packuswb      m4,    m5
17449    movu          [r0 + 1301 * 16],     m4
17450
17451    ; mode 22 [row 11]
17452    movu          m6,    [r5 + 4 * 16]
17453    pmaddubsw     m4,    m0,            m6
17454    pmulhrsw      m4,    m7
17455    pmaddubsw     m5,    m2,            m6
17456    pmulhrsw      m5,    m7
17457    packuswb      m4,    m5
17458    movu          [r0 + 1302 * 16],     m4
17459    pmaddubsw     m4,    m1,            m6
17460    pmulhrsw      m4,    m7
17461    pmaddubsw     m5,    m3,            m6
17462    pmulhrsw      m5,    m7
17463    packuswb      m4,    m5
17464    movu          [r0 + 1303 * 16],     m4
17465
17466    ; mode 22 [row 12]
17467    movu          m6,    [r5 + 23 * 16]
17468    pslldq        m0,    2
17469    pinsrb        m0,    [r4 + 10],     1
17470    pinsrb        m0,    [r4 + 12],     0
17471    pmaddubsw     m4,    m0,            m6
17472    pmulhrsw      m4,    m7
17473    pslldq        m2,    2
17474    pinsrw        m2,    [r3 + 3],      0
17475    pmaddubsw     m5,    m2,            m6
17476    pmulhrsw      m5,    m7
17477    packuswb      m4,    m5
17478    movu          [r0 + 1304 * 16],     m4
17479    pslldq        m1,    2
17480    pinsrw        m1,    [r3 + 11],      0
17481    pmaddubsw     m4,    m1,            m6
17482    pmulhrsw      m4,    m7
17483    pslldq        m3,    2
17484    pinsrw        m3,    [r3 + 19],      0
17485    pmaddubsw     m5,    m3,            m6
17486    pmulhrsw      m5,    m7
17487    packuswb      m4,    m5
17488    movu          [r0 + 1305 * 16],     m4
17489
17490    ; mode 22 [row 13]
17491    movu          m6,    [r5 + 10 * 16]
17492    pmaddubsw     m4,    m0,            m6
17493    pmulhrsw      m4,    m7
17494    pmaddubsw     m5,    m2,            m6
17495    pmulhrsw      m5,    m7
17496    packuswb      m4,    m5
17497    movu          [r0 + 1306 * 16],     m4
17498    pmaddubsw     m4,    m1,            m6
17499    pmulhrsw      m4,    m7
17500    pmaddubsw     m5,    m3,            m6
17501    pmulhrsw      m5,    m7
17502    packuswb      m4,    m5
17503    movu          [r0 + 1307 * 16],     m4
17504
17505    ; mode 22 [row 14]
17506    movu          m6,    [r5 + 29 * 16]
17507    pslldq        m0,    2
17508    pinsrb        m0,    [r4 + 12],     1
17509    pinsrb        m0,    [r4 + 15],     0
17510    pmaddubsw     m4,    m0,            m6
17511    pmulhrsw      m4,    m7
17512    pslldq        m2,    2
17513    pinsrw        m2,    [r3 + 2],      0
17514    pmaddubsw     m5,    m2,            m6
17515    pmulhrsw      m5,    m7
17516    packuswb      m4,    m5
17517    movu          [r0 + 1308 * 16],     m4
17518    pslldq        m1,    2
17519    pinsrw        m1,    [r3 + 10],      0
17520    pmaddubsw     m4,    m1,            m6
17521    pmulhrsw      m4,    m7
17522    pslldq        m3,    2
17523    pinsrw        m3,    [r3 + 18],      0
17524    pmaddubsw     m5,    m3,            m6
17525    pmulhrsw      m5,    m7
17526    packuswb      m4,    m5
17527    movu          [r0 + 1309 * 16],     m4
17528
17529    ; mode 22 [row 15]
17530    movu          m6,    [r5 + 16 * 16]
17531    pmaddubsw     m4,    m0,            m6
17532    pmulhrsw      m4,    m7
17533    pmaddubsw     m5,    m2,            m6
17534    pmulhrsw      m5,    m7
17535    packuswb      m4,    m5
17536    movu          [r0 + 1310 * 16],     m4
17537    pmaddubsw     m4,    m1,            m6
17538    pmulhrsw      m4,    m7
17539    pmaddubsw     m5,    m3,            m6
17540    pmulhrsw      m5,    m7
17541    packuswb      m4,    m5
17542    movu          [r0 + 1311 * 16],     m4
17543
17544    ; mode 22 [row 16]
17545    movu          m6,    [r5 + 3 * 16]
17546    pmaddubsw     m4,    m0,            m6
17547    pmulhrsw      m4,    m7
17548    pmaddubsw     m5,    m2,            m6
17549    pmulhrsw      m5,    m7
17550    packuswb      m4,    m5
17551    movu          [r0 + 1312 * 16],     m4
17552    pmaddubsw     m4,    m1,            m6
17553    pmulhrsw      m4,    m7
17554    pmaddubsw     m5,    m3,            m6
17555    pmulhrsw      m5,    m7
17556    packuswb      m4,    m5
17557    movu          [r0 + 1313 * 16],     m4
17558
17559    ; mode 22 [row 17]
17560    movu          m6,    [r5 + 22 * 16]
17561    pslldq        m0,    2
17562    pinsrb        m0,    [r4 + 15],     1
17563    pinsrb        m0,    [r4 + 17],     0
17564    pmaddubsw     m4,    m0,            m6
17565    pmulhrsw      m4,    m7
17566    pslldq        m2,    2
17567    pinsrw        m2,    [r3 + 1],      0
17568    pmaddubsw     m5,    m2,            m6
17569    pmulhrsw      m5,    m7
17570    packuswb      m4,    m5
17571    movu          [r0 + 1314 * 16],     m4
17572    pslldq        m1,    2
17573    pinsrw        m1,    [r3 + 9],      0
17574    pmaddubsw     m4,    m1,            m6
17575    pmulhrsw      m4,    m7
17576    pslldq        m3,    2
17577    pinsrw        m3,    [r3 + 17],      0
17578    pmaddubsw     m5,    m3,            m6
17579    pmulhrsw      m5,    m7
17580    packuswb      m4,    m5
17581    movu          [r0 + 1315 * 16],     m4
17582
17583    ; mode 22 [row 18]
17584    movu          m6,    [r5 + 9 * 16]
17585    pmaddubsw     m4,    m0,            m6
17586    pmulhrsw      m4,    m7
17587    pmaddubsw     m5,    m2,            m6
17588    pmulhrsw      m5,    m7
17589    packuswb      m4,    m5
17590    movu          [r0 + 1316 * 16],     m4
17591    pmaddubsw     m4,    m1,            m6
17592    pmulhrsw      m4,    m7
17593    pmaddubsw     m5,    m3,            m6
17594    pmulhrsw      m5,    m7
17595    packuswb      m4,    m5
17596    movu          [r0 + 1317 * 16],     m4
17597
17598    ; mode 22 [row 19]
17599    movu          m6,    [r5 + 28 * 16]
17600    pslldq        m0,    2
17601    pinsrb        m0,    [r4 + 17],     1
17602    pinsrb        m0,    [r4 + 20],     0
17603    pmaddubsw     m4,    m0,            m6
17604    pmulhrsw      m4,    m7
17605    pslldq        m2,    2
17606    pinsrw        m2,    [r3 + 0],      0
17607    pmaddubsw     m5,    m2,            m6
17608    pmulhrsw      m5,    m7
17609    packuswb      m4,    m5
17610    movu          [r0 + 1318 * 16],     m4
17611    pslldq        m1,    2
17612    pinsrw        m1,    [r3 + 8],      0
17613    pmaddubsw     m4,    m1,            m6
17614    pmulhrsw      m4,    m7
17615    pslldq        m3,    2
17616    pinsrw        m3,    [r3 + 16],      0
17617    pmaddubsw     m5,    m3,            m6
17618    pmulhrsw      m5,    m7
17619    packuswb      m4,    m5
17620    movu          [r0 + 1319 * 16],     m4
17621
17622    ; mode 22 [row 20]
17623    movu          m6,    [r5 + 15 * 16]
17624    pmaddubsw     m4,    m0,            m6
17625    pmulhrsw      m4,    m7
17626    pmaddubsw     m5,    m2,            m6
17627    pmulhrsw      m5,    m7
17628    packuswb      m4,    m5
17629    movu          [r0 + 1320 * 16],     m4
17630    pmaddubsw     m4,    m1,            m6
17631    pmulhrsw      m4,    m7
17632    pmaddubsw     m5,    m3,            m6
17633    pmulhrsw      m5,    m7
17634    packuswb      m4,    m5
17635    movu          [r0 + 1321 * 16],     m4
17636
17637    ; mode 22 [row 21]
17638    movu          m6,    [r5 + 2 * 16]
17639    pmaddubsw     m4,    m0,            m6
17640    pmulhrsw      m4,    m7
17641    pmaddubsw     m5,    m2,            m6
17642    pmulhrsw      m5,    m7
17643    packuswb      m4,    m5
17644    movu          [r0 + 1322 * 16],     m4
17645    pmaddubsw     m4,    m1,            m6
17646    pmulhrsw      m4,    m7
17647    pmaddubsw     m5,    m3,            m6
17648    pmulhrsw      m5,    m7
17649    packuswb      m4,    m5
17650    movu          [r0 + 1323 * 16],     m4
17651
17652    ; mode 22 [row 22]
17653    movu          m6,    [r5 + 21 * 16]
17654    pslldq        m0,    2
17655    pinsrb        m0,    [r4 + 20],     1
17656    pinsrb        m0,    [r4 + 22],     0
17657    pmaddubsw     m4,    m0,            m6
17658    pmulhrsw      m4,    m7
17659    pslldq        m2,    2
17660    pinsrb        m2,    [r4 + 0],      1
17661    pinsrb        m2,    [r4 + 2],      0
17662    pmaddubsw     m5,    m2,            m6
17663    pmulhrsw      m5,    m7
17664    packuswb      m4,    m5
17665    movu          [r0 + 1324 * 16],     m4
17666    pslldq        m1,    2
17667    pinsrw        m1,    [r3 + 7],      0
17668    pmaddubsw     m4,    m1,            m6
17669    pmulhrsw      m4,    m7
17670    pslldq        m3,    2
17671    pinsrw        m3,    [r3 + 15],      0
17672    pmaddubsw     m5,    m3,            m6
17673    pmulhrsw      m5,    m7
17674    packuswb      m4,    m5
17675    movu          [r0 + 1325 * 16],     m4
17676
17677    ; mode 22 [row 23]
17678    movu          m6,    [r5 + 8 * 16]
17679    pmaddubsw     m4,    m0,            m6
17680    pmulhrsw      m4,    m7
17681    pmaddubsw     m5,    m2,            m6
17682    pmulhrsw      m5,    m7
17683    packuswb      m4,    m5
17684    movu          [r0 + 1326 * 16],     m4
17685    pmaddubsw     m4,    m1,            m6
17686    pmulhrsw      m4,    m7
17687    pmaddubsw     m5,    m3,            m6
17688    pmulhrsw      m5,    m7
17689    packuswb      m4,    m5
17690    movu          [r0 + 1327 * 16],     m4
17691
17692    ; mode 22 [row 24]
17693    movu          m6,    [r5 + 27 * 16]
17694    pslldq        m0,    2
17695    pinsrb        m0,    [r4 + 22],     1
17696    pinsrb        m0,    [r4 + 25],     0
17697    pmaddubsw     m4,    m0,            m6
17698    pmulhrsw      m4,    m7
17699    pslldq        m2,    2
17700    pinsrb        m2,    [r4 + 2],      1
17701    pinsrb        m2,    [r4 + 5],      0
17702    pmaddubsw     m5,    m2,            m6
17703    pmulhrsw      m5,    m7
17704    packuswb      m4,    m5
17705    movu          [r0 + 1328 * 16],     m4
17706    pslldq        m1,    2
17707    pinsrw        m1,    [r3 + 6],      0
17708    pmaddubsw     m4,    m1,            m6
17709    pmulhrsw      m4,    m7
17710    pslldq        m3,    2
17711    pinsrw        m3,    [r3 + 14],      0
17712    pmaddubsw     m5,    m3,            m6
17713    pmulhrsw      m5,    m7
17714    packuswb      m4,    m5
17715    movu          [r0 + 1329 * 16],     m4
17716
17717    ; mode 22 [row 25]
17718    movu          m6,    [r5 + 14 * 16]
17719    pmaddubsw     m4,    m0,            m6
17720    pmulhrsw      m4,    m7
17721    pmaddubsw     m5,    m2,            m6
17722    pmulhrsw      m5,    m7
17723    packuswb      m4,    m5
17724    movu          [r0 + 1330 * 16],     m4
17725    pmaddubsw     m4,    m1,            m6
17726    pmulhrsw      m4,    m7
17727    pmaddubsw     m5,    m3,            m6
17728    pmulhrsw      m5,    m7
17729    packuswb      m4,    m5
17730    movu          [r0 + 1331 * 16],     m4
17731
17732    ; mode 22 [row 26]
17733    movu          m6,    [r5 + 1 * 16]
17734    pmaddubsw     m4,    m0,            m6
17735    pmulhrsw      m4,    m7
17736    pmaddubsw     m5,    m2,            m6
17737    pmulhrsw      m5,    m7
17738    packuswb      m4,    m5
17739    movu          [r0 + 1332 * 16],     m4
17740    pmaddubsw     m4,    m1,            m6
17741    pmulhrsw      m4,    m7
17742    pmaddubsw     m5,    m3,            m6
17743    pmulhrsw      m5,    m7
17744    packuswb      m4,    m5
17745    movu          [r0 + 1333 * 16],     m4
17746
17747    ; mode 22 [row 27]
17748    movu          m6,    [r5 + 20 * 16]
17749    pslldq        m0,    2
17750    pinsrb        m0,    [r4 + 25],     1
17751    pinsrb        m0,    [r4 + 27],     0
17752    pmaddubsw     m4,    m0,            m6
17753    pmulhrsw      m4,    m7
17754    pslldq        m2,    2
17755    pinsrb        m2,    [r4 + 5],      1
17756    pinsrb        m2,    [r4 + 7],      0
17757    pmaddubsw     m5,    m2,            m6
17758    pmulhrsw      m5,    m7
17759    packuswb      m4,    m5
17760    movu          [r0 + 1334 * 16],     m4
17761    pslldq        m1,    2
17762    pinsrw        m1,    [r3 +  5],     0
17763    pmaddubsw     m4,    m1,            m6
17764    pmulhrsw      m4,    m7
17765    pslldq        m3,    2
17766    pinsrw        m3,    [r3 + 13],     0
17767    pmaddubsw     m5,    m3,            m6
17768    pmulhrsw      m5,    m7
17769    packuswb      m4,    m5
17770    movu          [r0 + 1335 * 16],     m4
17771
17772    ; mode 22 [row 28]
17773    movu          m6,    [r5 + 7 * 16]
17774    pmaddubsw     m4,    m0,            m6
17775    pmulhrsw      m4,    m7
17776    pmaddubsw     m5,    m2,            m6
17777    pmulhrsw      m5,    m7
17778    packuswb      m4,    m5
17779    movu          [r0 + 1336 * 16],     m4
17780    pmaddubsw     m4,    m1,            m6
17781    pmulhrsw      m4,    m7
17782    pmaddubsw     m5,    m3,            m6
17783    pmulhrsw      m5,    m7
17784    packuswb      m4,    m5
17785    movu          [r0 + 1337 * 16],     m4
17786
17787    ; mode 22 [row 29]
17788    movu          m6,    [r5 + 26 * 16]
17789    pslldq        m0,    2
17790    pinsrb        m0,    [r4 + 27],     1
17791    pinsrb        m0,    [r4 + 30],     0
17792    pmaddubsw     m4,    m0,            m6
17793    pmulhrsw      m4,    m7
17794    pslldq        m2,    2
17795    pinsrb        m2,    [r4 +  7],     1
17796    pinsrb        m2,    [r4 + 10],     0
17797    pmaddubsw     m5,    m2,            m6
17798    pmulhrsw      m5,    m7
17799    packuswb      m4,    m5
17800    movu          [r0 + 1338 * 16],     m4
17801    pslldq        m1,    2
17802    pinsrw        m1,    [r3 +  4],     0
17803    pmaddubsw     m4,    m1,            m6
17804    pmulhrsw      m4,    m7
17805    pslldq        m3,    2
17806    pinsrw        m3,    [r3 + 12],     0
17807    pmaddubsw     m5,    m3,            m6
17808    pmulhrsw      m5,    m7
17809    packuswb      m4,    m5
17810    movu          [r0 + 1339 * 16],     m4
17811
17812    ; mode 22 [row 30]
17813    movu          m6,    [r5 + 13 * 16]
17814    pmaddubsw     m4,    m0,            m6
17815    pmulhrsw      m4,    m7
17816    pmaddubsw     m5,    m2,            m6
17817    pmulhrsw      m5,    m7
17818    packuswb      m4,    m5
17819    movu          [r0 + 1340 * 16],     m4
17820    pmaddubsw     m4,    m1,            m6
17821    pmulhrsw      m4,    m7
17822    pmaddubsw     m5,    m3,            m6
17823    pmulhrsw      m5,    m7
17824    packuswb      m4,    m5
17825    movu          [r0 + 1341 * 16],     m4
17826
17827    ; mode22 [row 31]
17828    pshufb        m5,    m0,            [tab_S2]
17829    movh          [r0 + 1342 * 16],     m5
17830    pshufb        m5,    m2,            [tab_S2]
17831    movh          [r0 + 1342 * 16 + 8], m5
17832    pshufb        m5,    m1,            [tab_S2]
17833    movh          [r0 + 1343 * 16],     m5
17834    pshufb        m5,    m3,            [tab_S2]
17835    movh          [r0 + 1343 * 16 + 8], m5
17836
17837    ; mode 23 [row 0]
17838    movu          m6,    [r5 + 23 * 16]
17839    movu          m0,    [r3          ]
17840    movu          m1,    [r3 + 1      ]
17841    punpcklbw     m0,    m1
17842    pmaddubsw     m1,    m0,            m6
17843    pmulhrsw      m1,    m7
17844    movu          m2,    [r3 + 8]
17845    movu          m3,    [r3 + 9]
17846    punpcklbw     m2,    m3
17847    pmaddubsw     m3,    m2,            m6
17848    pmulhrsw      m3,    m7
17849    packuswb      m1,    m3
17850    movu          [r0 + 1344 * 16],     m1
17851
17852    movu          m1,    [r3 + 16]
17853    movu          m3,    [r3 + 17]
17854    punpcklbw     m1,    m3
17855    pmaddubsw     m4,    m1,            m6
17856    pmulhrsw      m4,    m7
17857    movu          m3,    [r3 + 24]
17858    movu          m5,    [r3 + 25]
17859    punpcklbw     m3,    m5
17860    pmaddubsw     m5,    m3,            m6
17861    pmulhrsw      m5,    m7
17862    packuswb      m4,    m5
17863    movu          [r0 + 1345 * 16],     m4
17864
17865    ; mode 23 [row 1]
17866    movu          m6,    [r5 + 14 * 16]
17867    pmaddubsw     m4,    m0,            m6
17868    pmulhrsw      m4,    m7
17869    pmaddubsw     m5,    m2,            m6
17870    pmulhrsw      m5,    m7
17871    packuswb      m4,    m5
17872    movu          [r0 + 1346 * 16],     m4
17873    pmaddubsw     m4,    m1,            m6
17874    pmulhrsw      m4,    m7
17875    pmaddubsw     m5,    m3,            m6
17876    pmulhrsw      m5,    m7
17877    packuswb      m4,    m5
17878    movu          [r0 + 1347 * 16],     m4
17879
17880    ; mode 23 [row 2]
17881    movu          m6,    [r5 + 5 * 16]
17882    pmaddubsw     m4,    m0,            m6
17883    pmulhrsw      m4,    m7
17884    pmaddubsw     m5,    m2,            m6
17885    pmulhrsw      m5,    m7
17886    packuswb      m4,    m5
17887    movu          [r0 + 1348 * 16],     m4
17888    pmaddubsw     m4,    m1,            m6
17889    pmulhrsw      m4,    m7
17890    pmaddubsw     m5,    m3,            m6
17891    pmulhrsw      m5,    m7
17892    packuswb      m4,    m5
17893    movu          [r0 + 1349 * 16],     m4
17894
17895    ; mode 23 [row 3]
17896    movu          m6,    [r5 + 28 * 16]
17897    pslldq        m0,    2
17898    pinsrb        m0,    [r4 + 0],      1
17899    pinsrb        m0,    [r4 + 4],      0
17900    pmaddubsw     m4,    m0,            m6
17901    pmulhrsw      m4,    m7
17902    pslldq        m2,    2
17903    pinsrw        m2,    [r3 + 7],     0
17904    pmaddubsw     m5,    m2,            m6
17905    pmulhrsw      m5,    m7
17906    packuswb      m4,    m5
17907    movu          [r0 + 1350 * 16],     m4
17908    pslldq        m1,    2
17909    pinsrw        m1,    [r3 + 15],     0
17910    pmaddubsw     m4,    m1,            m6
17911    pmulhrsw      m4,    m7
17912    pslldq        m3,    2
17913    pinsrw        m3,    [r3 + 23],     0
17914    pmaddubsw     m5,    m3,            m6
17915    pmulhrsw      m5,    m7
17916    packuswb      m4,    m5
17917    movu          [r0 + 1351 * 16],     m4
17918
17919    ; mode 23 [row 4]
17920    movu          m6,    [r5 + 19 * 16]
17921    pmaddubsw     m4,    m0,            m6
17922    pmulhrsw      m4,    m7
17923    pmaddubsw     m5,    m2,            m6
17924    pmulhrsw      m5,    m7
17925    packuswb      m4,    m5
17926    movu          [r0 + 1352 * 16],     m4
17927    pmaddubsw     m4,    m1,            m6
17928    pmulhrsw      m4,    m7
17929    pmaddubsw     m5,    m3,            m6
17930    pmulhrsw      m5,    m7
17931    packuswb      m4,    m5
17932    movu          [r0 + 1353 * 16],     m4
17933
17934    ; mode 23 [row 5]
17935    movu          m6,    [r5 + 10 * 16]
17936    pmaddubsw     m4,    m0,            m6
17937    pmulhrsw      m4,    m7
17938    pmaddubsw     m5,    m2,            m6
17939    pmulhrsw      m5,    m7
17940    packuswb      m4,    m5
17941    movu          [r0 + 1354 * 16],     m4
17942    pmaddubsw     m4,    m1,            m6
17943    pmulhrsw      m4,    m7
17944    pmaddubsw     m5,    m3,            m6
17945    pmulhrsw      m5,    m7
17946    packuswb      m4,    m5
17947    movu          [r0 + 1355 * 16],     m4
17948
17949    ; mode 23 [row 6]
17950    movu          m6,    [r5 + 1 * 16]
17951    pmaddubsw     m4,    m0,            m6
17952    pmulhrsw      m4,    m7
17953    pmaddubsw     m5,    m2,            m6
17954    pmulhrsw      m5,    m7
17955    packuswb      m4,    m5
17956    movu          [r0 + 1356 * 16],     m4
17957    pmaddubsw     m4,    m1,            m6
17958    pmulhrsw      m4,    m7
17959    pmaddubsw     m5,    m3,            m6
17960    pmulhrsw      m5,    m7
17961    packuswb      m4,    m5
17962    movu          [r0 + 1357 * 16],     m4
17963
17964    ; mode 23 [row 7]
17965    movu          m6,    [r5 + 24 * 16]
17966    pslldq        m0,    2
17967    pinsrb        m0,    [r4 + 4],      1
17968    pinsrb        m0,    [r4 + 7],      0
17969    pmaddubsw     m4,    m0,            m6
17970    pmulhrsw      m4,    m7
17971    pslldq        m2,    2
17972    pinsrw        m2,    [r3 + 6],      0
17973    pmaddubsw     m5,    m2,            m6
17974    pmulhrsw      m5,    m7
17975    packuswb      m4,    m5
17976    movu          [r0 + 1358 * 16],     m4
17977    pslldq        m1,    2
17978    pinsrw        m1,    [r3 + 14],     0
17979    pmaddubsw     m4,    m1,            m6
17980    pmulhrsw      m4,    m7
17981    pslldq        m3,    2
17982    pinsrw        m3,    [r3 + 22],     0
17983    pmaddubsw     m5,    m3,            m6
17984    pmulhrsw      m5,    m7
17985    packuswb      m4,    m5
17986    movu          [r0 + 1359 * 16],     m4
17987
17988    ; mode 23 [row 8]
17989    movu          m6,    [r5 + 15 * 16]
17990    pmaddubsw     m4,    m0,            m6
17991    pmulhrsw      m4,    m7
17992    pmaddubsw     m5,    m2,            m6
17993    pmulhrsw      m5,    m7
17994    packuswb      m4,    m5
17995    movu          [r0 + 1360 * 16],     m4
17996    pmaddubsw     m4,    m1,            m6
17997    pmulhrsw      m4,    m7
17998    pmaddubsw     m5,    m3,            m6
17999    pmulhrsw      m5,    m7
18000    packuswb      m4,    m5
18001    movu          [r0 + 1361 * 16],     m4
18002
18003    ; mode 23 [row 9]
18004    movu          m6,    [r5 + 6 * 16]
18005    pmaddubsw     m4,    m0,            m6
18006    pmulhrsw      m4,    m7
18007    pmaddubsw     m5,    m2,            m6
18008    pmulhrsw      m5,    m7
18009    packuswb      m4,    m5
18010    movu          [r0 + 1362 * 16],     m4
18011    pmaddubsw     m4,    m1,            m6
18012    pmulhrsw      m4,    m7
18013    pmaddubsw     m5,    m3,            m6
18014    pmulhrsw      m5,    m7
18015    packuswb      m4,    m5
18016    movu          [r0 + 1363 * 16],     m4
18017
18018    ; mode 23 [row 10]
18019    movu          m6,    [r5 + 29 * 16]
18020    pslldq        m0,    2
18021    pinsrb        m0,    [r4 +  7],      1
18022    pinsrb        m0,    [r4 + 11],      0
18023    pmaddubsw     m4,    m0,            m6
18024    pmulhrsw      m4,    m7
18025    pslldq        m2,    2
18026    pinsrw        m2,    [r3 + 5],      0
18027    pmaddubsw     m5,    m2,            m6
18028    pmulhrsw      m5,    m7
18029    packuswb      m4,    m5
18030    movu          [r0 + 1364 * 16],     m4
18031    pslldq        m1,    2
18032    pinsrw        m1,    [r3 + 13],      0
18033    pmaddubsw     m4,    m1,            m6
18034    pmulhrsw      m4,    m7
18035    pslldq        m3,    2
18036    pinsrw        m3,    [r3 + 21],      0
18037    pmaddubsw     m5,    m3,            m6
18038    pmulhrsw      m5,    m7
18039    packuswb      m4,    m5
18040    movu          [r0 + 1365 * 16],     m4
18041
18042    ; mode 23 [row 11]
18043    movu          m6,    [r5 + 20 * 16]
18044    pmaddubsw     m4,    m0,            m6
18045    pmulhrsw      m4,    m7
18046    pmaddubsw     m5,    m2,            m6
18047    pmulhrsw      m5,    m7
18048    packuswb      m4,    m5
18049    movu          [r0 + 1366 * 16],     m4
18050    pmaddubsw     m4,    m1,            m6
18051    pmulhrsw      m4,    m7
18052    pmaddubsw     m5,    m3,            m6
18053    pmulhrsw      m5,    m7
18054    packuswb      m4,    m5
18055    movu          [r0 + 1367 * 16],     m4
18056
18057    ; mode 23 [row 12]
18058    movu          m6,    [r5 + 11 * 16]
18059    pmaddubsw     m4,    m0,            m6
18060    pmulhrsw      m4,    m7
18061    pmaddubsw     m5,    m2,            m6
18062    pmulhrsw      m5,    m7
18063    packuswb      m4,    m5
18064    movu          [r0 + 1368 * 16],     m4
18065    pmaddubsw     m4,    m1,            m6
18066    pmulhrsw      m4,    m7
18067    pmaddubsw     m5,    m3,            m6
18068    pmulhrsw      m5,    m7
18069    packuswb      m4,    m5
18070    movu          [r0 + 1369 * 16],     m4
18071
18072    ; mode 23 [row 13]
18073    movu          m6,    [r5 + 2 * 16]
18074    pmaddubsw     m4,    m0,            m6
18075    pmulhrsw      m4,    m7
18076    pmaddubsw     m5,    m2,            m6
18077    pmulhrsw      m5,    m7
18078    packuswb      m4,    m5
18079    movu          [r0 + 1370 * 16],     m4
18080    pmaddubsw     m4,    m1,            m6
18081    pmulhrsw      m4,    m7
18082    pmaddubsw     m5,    m3,            m6
18083    pmulhrsw      m5,    m7
18084    packuswb      m4,    m5
18085    movu          [r0 + 1371 * 16],     m4
18086
18087    ; mode 23 [row 14]
18088    movu          m6,    [r5 + 25 * 16]
18089    pslldq        m0,    2
18090    pinsrb        m0,    [r4 + 11],      1
18091    pinsrb        m0,    [r4 + 14],      0
18092    pmaddubsw     m4,    m0,            m6
18093    pmulhrsw      m4,    m7
18094    pslldq        m2,    2
18095    pinsrw        m2,    [r3 + 4],      0
18096    pmaddubsw     m5,    m2,            m6
18097    pmulhrsw      m5,    m7
18098    packuswb      m4,    m5
18099    movu          [r0 + 1372 * 16],     m4
18100    pslldq        m1,    2
18101    pinsrw        m1,    [r3 + 12],      0
18102    pmaddubsw     m4,    m1,            m6
18103    pmulhrsw      m4,    m7
18104    pslldq        m3,    2
18105    pinsrw        m3,    [r3 + 20],      0
18106    pmaddubsw     m5,    m3,            m6
18107    pmulhrsw      m5,    m7
18108    packuswb      m4,    m5
18109    movu          [r0 + 1373 * 16],     m4
18110
18111    ; mode 23 [row 15]
18112    movu          m6,    [r5 + 16 * 16]
18113    pmaddubsw     m4,    m0,            m6
18114    pmulhrsw      m4,    m7
18115    pmaddubsw     m5,    m2,            m6
18116    pmulhrsw      m5,    m7
18117    packuswb      m4,    m5
18118    movu          [r0 + 1374 * 16],     m4
18119    pmaddubsw     m4,    m1,            m6
18120    pmulhrsw      m4,    m7
18121    pmaddubsw     m5,    m3,            m6
18122    pmulhrsw      m5,    m7
18123    packuswb      m4,    m5
18124    movu          [r0 + 1375 * 16],     m4
18125
18126    ; mode 23 [row 16]
18127    movu          m6,    [r5 + 7 * 16]
18128    pmaddubsw     m4,    m0,            m6
18129    pmulhrsw      m4,    m7
18130    pmaddubsw     m5,    m2,            m6
18131    pmulhrsw      m5,    m7
18132    packuswb      m4,    m5
18133    movu          [r0 + 1376 * 16],     m4
18134    pmaddubsw     m4,    m1,            m6
18135    pmulhrsw      m4,    m7
18136    pmaddubsw     m5,    m3,            m6
18137    pmulhrsw      m5,    m7
18138    packuswb      m4,    m5
18139    movu          [r0 + 1377 * 16],     m4
18140
18141    ; mode 23 [row 17]
18142    movu          m6,    [r5 + 30 * 16]
18143    pslldq        m0,    2
18144    pinsrb        m0,    [r4 + 14],      1
18145    pinsrb        m0,    [r4 + 18],      0
18146    pmaddubsw     m4,    m0,            m6
18147    pmulhrsw      m4,    m7
18148    pslldq        m2,    2
18149    pinsrw        m2,    [r3 + 3],      0
18150    pmaddubsw     m5,    m2,            m6
18151    pmulhrsw      m5,    m7
18152    packuswb      m4,    m5
18153    movu          [r0 + 1378 * 16],     m4
18154    pslldq        m1,    2
18155    pinsrw        m1,    [r3 + 11],      0
18156    pmaddubsw     m4,    m1,            m6
18157    pmulhrsw      m4,    m7
18158    pslldq        m3,    2
18159    pinsrw        m3,    [r3 + 19],      0
18160    pmaddubsw     m5,    m3,            m6
18161    pmulhrsw      m5,    m7
18162    packuswb      m4,    m5
18163    movu          [r0 + 1379 * 16],     m4
18164
18165    ; mode 23 [row 18]
18166    movu          m6,    [r5 + 21 * 16]
18167    pmaddubsw     m4,    m0,            m6
18168    pmulhrsw      m4,    m7
18169    pmaddubsw     m5,    m2,            m6
18170    pmulhrsw      m5,    m7
18171    packuswb      m4,    m5
18172    movu          [r0 + 1380 * 16],     m4
18173    pmaddubsw     m4,    m1,            m6
18174    pmulhrsw      m4,    m7
18175    pmaddubsw     m5,    m3,            m6
18176    pmulhrsw      m5,    m7
18177    packuswb      m4,    m5
18178    movu          [r0 + 1381 * 16],     m4
18179
18180    ; mode 23 [row 19]
18181    movu          m6,    [r5 + 12 * 16]
18182    pmaddubsw     m4,    m0,            m6
18183    pmulhrsw      m4,    m7
18184    pmaddubsw     m5,    m2,            m6
18185    pmulhrsw      m5,    m7
18186    packuswb      m4,    m5
18187    movu          [r0 + 1382 * 16],     m4
18188    pmaddubsw     m4,    m1,            m6
18189    pmulhrsw      m4,    m7
18190    pmaddubsw     m5,    m3,            m6
18191    pmulhrsw      m5,    m7
18192    packuswb      m4,    m5
18193    movu          [r0 + 1383 * 16],     m4
18194
18195    ; mode 23 [row 20]
18196    movu          m6,    [r5 + 3 * 16]
18197    pmaddubsw     m4,    m0,            m6
18198    pmulhrsw      m4,    m7
18199    pmaddubsw     m5,    m2,            m6
18200    pmulhrsw      m5,    m7
18201    packuswb      m4,    m5
18202    movu          [r0 + 1384 * 16],     m4
18203    pmaddubsw     m4,    m1,            m6
18204    pmulhrsw      m4,    m7
18205    pmaddubsw     m5,    m3,            m6
18206    pmulhrsw      m5,    m7
18207    packuswb      m4,    m5
18208    movu          [r0 + 1385 * 16],     m4
18209
18210    ; mode 23 [row 21]
18211    movu          m6,    [r5 + 26 * 16]
18212    pslldq        m0,    2
18213    pinsrb        m0,    [r4 + 18],      1
18214    pinsrb        m0,    [r4 + 21],      0
18215    pmaddubsw     m4,    m0,            m6
18216    pmulhrsw      m4,    m7
18217    pslldq        m2,    2
18218    pinsrw        m2,    [r3 + 2],      0
18219    pmaddubsw     m5,    m2,            m6
18220    pmulhrsw      m5,    m7
18221    packuswb      m4,    m5
18222    movu          [r0 + 1386 * 16],     m4
18223    pslldq        m1,    2
18224    pinsrw        m1,    [r3 + 10],      0
18225    pmaddubsw     m4,    m1,            m6
18226    pmulhrsw      m4,    m7
18227    pslldq        m3,    2
18228    pinsrw        m3,    [r3 + 18],      0
18229    pmaddubsw     m5,    m3,            m6
18230    pmulhrsw      m5,    m7
18231    packuswb      m4,    m5
18232    movu          [r0 + 1387 * 16],     m4
18233
18234    ; mode 23 [row 22]
18235    movu          m6,    [r5 + 17 * 16]
18236    pmaddubsw     m4,    m0,            m6
18237    pmulhrsw      m4,    m7
18238    pmaddubsw     m5,    m2,            m6
18239    pmulhrsw      m5,    m7
18240    packuswb      m4,    m5
18241    movu          [r0 + 1388 * 16],     m4
18242    pmaddubsw     m4,    m1,            m6
18243    pmulhrsw      m4,    m7
18244    pmaddubsw     m5,    m3,            m6
18245    pmulhrsw      m5,    m7
18246    packuswb      m4,    m5
18247    movu          [r0 + 1389 * 16],     m4
18248
18249    ; mode 23 [row 23]
18250    movu          m6,    [r5 + 8 * 16]
18251    pmaddubsw     m4,    m0,            m6
18252    pmulhrsw      m4,    m7
18253    pmaddubsw     m5,    m2,            m6
18254    pmulhrsw      m5,    m7
18255    packuswb      m4,    m5
18256    movu          [r0 + 1390 * 16],     m4
18257    pmaddubsw     m4,    m1,            m6
18258    pmulhrsw      m4,    m7
18259    pmaddubsw     m5,    m3,            m6
18260    pmulhrsw      m5,    m7
18261    packuswb      m4,    m5
18262    movu          [r0 + 1391 * 16],     m4
18263
18264    ; mode 23 [row 24]
18265    movu          m6,    [r5 + 31 * 16]
18266    pslldq        m0,    2
18267    pinsrb        m0,    [r4 + 21],      1
18268    pinsrb        m0,    [r4 + 25],      0
18269    pmaddubsw     m4,    m0,            m6
18270    pmulhrsw      m4,    m7
18271    pslldq        m2,    2
18272    pinsrw        m2,    [r3 + 1],      0
18273    pmaddubsw     m5,    m2,            m6
18274    pmulhrsw      m5,    m7
18275    packuswb      m4,    m5
18276    movu          [r0 + 1392 * 16],     m4
18277    pslldq        m1,    2
18278    pinsrw        m1,    [r3 + 9],      0
18279    pmaddubsw     m4,    m1,            m6
18280    pmulhrsw      m4,    m7
18281    pslldq        m3,    2
18282    pinsrw        m3,    [r3 + 17],      0
18283    pmaddubsw     m5,    m3,            m6
18284    pmulhrsw      m5,    m7
18285    packuswb      m4,    m5
18286    movu          [r0 + 1393 * 16],     m4
18287
18288    ; mode 23 [row 25]
18289    movu          m6,    [r5 + 22 * 16]
18290    pmaddubsw     m4,    m0,            m6
18291    pmulhrsw      m4,    m7
18292    pmaddubsw     m5,    m2,            m6
18293    pmulhrsw      m5,    m7
18294    packuswb      m4,    m5
18295    movu          [r0 + 1394 * 16],     m4
18296    pmaddubsw     m4,    m1,            m6
18297    pmulhrsw      m4,    m7
18298    pmaddubsw     m5,    m3,            m6
18299    pmulhrsw      m5,    m7
18300    packuswb      m4,    m5
18301    movu          [r0 + 1395 * 16],     m4
18302
18303    ; mode 23 [row 26]
18304    movu          m6,    [r5 + 13 * 16]
18305    pmaddubsw     m4,    m0,            m6
18306    pmulhrsw      m4,    m7
18307    pmaddubsw     m5,    m2,            m6
18308    pmulhrsw      m5,    m7
18309    packuswb      m4,    m5
18310    movu          [r0 + 1396 * 16],     m4
18311    pmaddubsw     m4,    m1,            m6
18312    pmulhrsw      m4,    m7
18313    pmaddubsw     m5,    m3,            m6
18314    pmulhrsw      m5,    m7
18315    packuswb      m4,    m5
18316    movu          [r0 + 1397 * 16],     m4
18317
18318    ; mode 23 [row 27]
18319    movu          m6,    [r5 + 4 * 16]
18320    pmaddubsw     m4,    m0,            m6
18321    pmulhrsw      m4,    m7
18322    pmaddubsw     m5,    m2,            m6
18323    pmulhrsw      m5,    m7
18324    packuswb      m4,    m5
18325    movu          [r0 + 1398 * 16],     m4
18326    pmaddubsw     m4,    m1,            m6
18327    pmulhrsw      m4,    m7
18328    pmaddubsw     m5,    m3,            m6
18329    pmulhrsw      m5,    m7
18330    packuswb      m4,    m5
18331    movu          [r0 + 1399 * 16],     m4
18332
18333    ; mode 23 [row 28]
18334    movu          m6,    [r5 + 27 * 16]
18335    pslldq        m0,    2
18336    pinsrb        m0,    [r4 + 25],      1
18337    pinsrb        m0,    [r4 + 28],      0
18338    pmaddubsw     m4,    m0,            m6
18339    pmulhrsw      m4,    m7
18340    pslldq        m2,    2
18341    pinsrw        m2,    [r3 + 0],      0
18342    pmaddubsw     m5,    m2,            m6
18343    pmulhrsw      m5,    m7
18344    packuswb      m4,    m5
18345    movu          [r0 + 1400 * 16],     m4
18346    pslldq        m1,    2
18347    pinsrw        m1,    [r3 + 8],      0
18348    pmaddubsw     m4,    m1,            m6
18349    pmulhrsw      m4,    m7
18350    pslldq        m3,    2
18351    pinsrw        m3,    [r3 + 16],      0
18352    pmaddubsw     m5,    m3,            m6
18353    pmulhrsw      m5,    m7
18354    packuswb      m4,    m5
18355    movu          [r0 + 1401 * 16],     m4
18356
18357    ; mode 23 [row 29]
18358    movu          m6,    [r5 + 18 * 16]
18359    pmaddubsw     m4,    m0,            m6
18360    pmulhrsw      m4,    m7
18361    pmaddubsw     m5,    m2,            m6
18362    pmulhrsw      m5,    m7
18363    packuswb      m4,    m5
18364    movu          [r0 + 1402 * 16],     m4
18365    pmaddubsw     m4,    m1,            m6
18366    pmulhrsw      m4,    m7
18367    pmaddubsw     m5,    m3,            m6
18368    pmulhrsw      m5,    m7
18369    packuswb      m4,    m5
18370    movu          [r0 + 1403 * 16],     m4
18371
18372    ; mode 23 [row 30]
18373    movu          m6,    [r5 + 9 * 16]
18374    pmaddubsw     m4,    m0,            m6
18375    pmulhrsw      m4,    m7
18376    pmaddubsw     m5,    m2,            m6
18377    pmulhrsw      m5,    m7
18378    packuswb      m4,    m5
18379    movu          [r0 + 1404 * 16],     m4
18380    pmaddubsw     m4,    m1,            m6
18381    pmulhrsw      m4,    m7
18382    pmaddubsw     m5,    m3,            m6
18383    pmulhrsw      m5,    m7
18384    packuswb      m4,    m5
18385    movu          [r0 + 1405 * 16],     m4
18386
18387    ; mode23 [row 31]
18388    pshufb        m5,    m0,            [tab_S2]
18389    movh          [r0 + 1406 * 16],     m5
18390    pshufb        m5,    m2,            [tab_S2]
18391    movh          [r0 + 1406 * 16 + 8], m5
18392    pshufb        m5,    m1,            [tab_S2]
18393    movh          [r0 + 1407 * 16],     m5
18394    pshufb        m5,    m3,            [tab_S2]
18395    movh          [r0 + 1407 * 16 + 8], m5
18396
18397    ; mode 24 [row 0]
18398    movu          m6,    [r5 + 27 * 16]
18399    movu          m0,    [r3          ]
18400    movu          m1,    [r3 + 1      ]
18401    punpcklbw     m0,    m1
18402    pmaddubsw     m4,    m0,            m6
18403    pmulhrsw      m4,    m7
18404    movu          m2,    [r3 + 8]
18405    movu          m3,    [r3 + 9]
18406    punpcklbw     m2,    m3
18407    pmaddubsw     m5,    m2,            m6
18408    pmulhrsw      m5,    m7
18409    packuswb      m4,    m5
18410    movu          [r0 + 1408 * 16],     m4
18411
18412    movu          m1,    [r3 + 16]
18413    movu          m3,    [r3 + 17]
18414    punpcklbw     m1,    m3
18415    pmaddubsw     m4,    m1,            m6
18416    pmulhrsw      m4,    m7
18417    movu          m3,    [r3 + 24]
18418    movu          m5,    [r3 + 25]
18419    punpcklbw     m3,    m5
18420    pmaddubsw     m5,    m3,            m6
18421    pmulhrsw      m5,    m7
18422    packuswb      m4,    m5
18423    movu          [r0 + 1409 * 16],     m4
18424
18425    ; mode 24 [row 1]
18426    movu          m6,    [r5 + 22 * 16]
18427    pmaddubsw     m4,    m0,            m6
18428    pmulhrsw      m4,    m7
18429    pmaddubsw     m5,    m2,            m6
18430    pmulhrsw      m5,    m7
18431    packuswb      m4,    m5
18432    movu          [r0 + 1410 * 16],     m4
18433    pmaddubsw     m4,    m1,            m6
18434    pmulhrsw      m4,    m7
18435    pmaddubsw     m5,    m3,            m6
18436    pmulhrsw      m5,    m7
18437    packuswb      m4,    m5
18438    movu          [r0 + 1411 * 16],     m4
18439
18440    ; mode 24 [row 2]
18441    movu          m6,    [r5 + 17 * 16]
18442    pmaddubsw     m4,    m0,            m6
18443    pmulhrsw      m4,    m7
18444    pmaddubsw     m5,    m2,            m6
18445    pmulhrsw      m5,    m7
18446    packuswb      m4,    m5
18447    movu          [r0 + 1412 * 16],     m4
18448    pmaddubsw     m4,    m1,            m6
18449    pmulhrsw      m4,    m7
18450    pmaddubsw     m5,    m3,            m6
18451    pmulhrsw      m5,    m7
18452    packuswb      m4,    m5
18453    movu          [r0 + 1413 * 16],     m4
18454
18455    ; mode 24 [row 3]
18456    movu          m6,    [r5 + 12 * 16]
18457    pmaddubsw     m4,    m0,            m6
18458    pmulhrsw      m4,    m7
18459    pmaddubsw     m5,    m2,            m6
18460    pmulhrsw      m5,    m7
18461    packuswb      m4,    m5
18462    movu          [r0 + 1414 * 16],     m4
18463    pmaddubsw     m4,    m1,            m6
18464    pmulhrsw      m4,    m7
18465    pmaddubsw     m5,    m3,            m6
18466    pmulhrsw      m5,    m7
18467    packuswb      m4,    m5
18468    movu          [r0 + 1415 * 16],     m4
18469
18470    ; mode 24 [row 4]
18471    movu          m6,    [r5 + 7 * 16]
18472    pmaddubsw     m4,    m0,            m6
18473    pmulhrsw      m4,    m7
18474    pmaddubsw     m5,    m2,            m6
18475    pmulhrsw      m5,    m7
18476    packuswb      m4,    m5
18477    movu          [r0 + 1416 * 16],     m4
18478    pmaddubsw     m4,    m1,            m6
18479    pmulhrsw      m4,    m7
18480    pmaddubsw     m5,    m3,            m6
18481    pmulhrsw      m5,    m7
18482    packuswb      m4,    m5
18483    movu          [r0 + 1417 * 16],     m4
18484
18485    ; mode 24 [row 5]
18486    movu          m6,    [r5 + 2 * 16]
18487    pmaddubsw     m4,    m0,            m6
18488    pmulhrsw      m4,    m7
18489    pmaddubsw     m5,    m2,            m6
18490    pmulhrsw      m5,    m7
18491    packuswb      m4,    m5
18492    movu          [r0 + 1418 * 16],     m4
18493    pmaddubsw     m4,    m1,            m6
18494    pmulhrsw      m4,    m7
18495    pmaddubsw     m5,    m3,            m6
18496    pmulhrsw      m5,    m7
18497    packuswb      m4,    m5
18498    movu          [r0 + 1419 * 16],     m4
18499
18500    ; mode 24 [row 6]
18501    movu          m6,    [r5 + 29 * 16]
18502    pslldq        m0,    2
18503    pinsrb        m0,    [r4 + 0],      1
18504    pinsrb        m0,    [r4 + 6],      0
18505    pmaddubsw     m4,    m0,            m6
18506    pmulhrsw      m4,    m7
18507    pslldq        m2,    2
18508    pinsrw        m2,    [r3 + 7],      0
18509    pmaddubsw     m5,    m2,            m6
18510    pmulhrsw      m5,    m7
18511    packuswb      m4,    m5
18512    movu          [r0 + 1420 * 16],     m4
18513    pslldq        m1,    2
18514    pinsrw        m1,    [r3 + 15],      0
18515    pmaddubsw     m4,    m1,            m6
18516    pmulhrsw      m4,    m7
18517    pslldq        m3,    2
18518    pinsrw        m3,    [r3 + 23],      0
18519    pmaddubsw     m5,    m3,            m6
18520    pmulhrsw      m5,    m7
18521    packuswb      m4,    m5
18522    movu          [r0 + 1421 * 16],     m4
18523
18524    ; mode 24 [row 7]
18525    movu          m6,    [r5 + 24 * 16]
18526    pmaddubsw     m4,    m0,            m6
18527    pmulhrsw      m4,    m7
18528    pmaddubsw     m5,    m2,            m6
18529    pmulhrsw      m5,    m7
18530    packuswb      m4,    m5
18531    movu          [r0 + 1422 * 16],     m4
18532    pmaddubsw     m4,    m1,            m6
18533    pmulhrsw      m4,    m7
18534    pmaddubsw     m5,    m3,            m6
18535    pmulhrsw      m5,    m7
18536    packuswb      m4,    m5
18537    movu          [r0 + 1423 * 16],     m4
18538
18539    ; mode 24 [row 8]
18540    movu          m6,    [r5 + 19 * 16]
18541    pmaddubsw     m4,    m0,            m6
18542    pmulhrsw      m4,    m7
18543    pmaddubsw     m5,    m2,            m6
18544    pmulhrsw      m5,    m7
18545    packuswb      m4,    m5
18546    movu          [r0 + 1424 * 16],     m4
18547    pmaddubsw     m4,    m1,            m6
18548    pmulhrsw      m4,    m7
18549    pmaddubsw     m5,    m3,            m6
18550    pmulhrsw      m5,    m7
18551    packuswb      m4,    m5
18552    movu          [r0 + 1425 * 16],     m4
18553
18554    ; mode 24 [row 9]
18555    movu          m6,    [r5 + 14 * 16]
18556    pmaddubsw     m4,    m0,            m6
18557    pmulhrsw      m4,    m7
18558    pmaddubsw     m5,    m2,            m6
18559    pmulhrsw      m5,    m7
18560    packuswb      m4,    m5
18561    movu          [r0 + 1426 * 16],     m4
18562    pmaddubsw     m4,    m1,            m6
18563    pmulhrsw      m4,    m7
18564    pmaddubsw     m5,    m3,            m6
18565    pmulhrsw      m5,    m7
18566    packuswb      m4,    m5
18567    movu          [r0 + 1427 * 16],     m4
18568
18569    ; mode 24 [row 10]
18570    movu          m6,    [r5 + 9 * 16]
18571    pmaddubsw     m4,    m0,            m6
18572    pmulhrsw      m4,    m7
18573    pmaddubsw     m5,    m2,            m6
18574    pmulhrsw      m5,    m7
18575    packuswb      m4,    m5
18576    movu          [r0 + 1428 * 16],     m4
18577    pmaddubsw     m4,    m1,            m6
18578    pmulhrsw      m4,    m7
18579    pmaddubsw     m5,    m3,            m6
18580    pmulhrsw      m5,    m7
18581    packuswb      m4,    m5
18582    movu          [r0 + 1429 * 16],     m4
18583
18584    ; mode 24 [row 11]
18585    movu          m6,    [r5 + 4 * 16]
18586    pmaddubsw     m4,    m0,            m6
18587    pmulhrsw      m4,    m7
18588    pmaddubsw     m5,    m2,            m6
18589    pmulhrsw      m5,    m7
18590    packuswb      m4,    m5
18591    movu          [r0 + 1430 * 16],     m4
18592    pmaddubsw     m4,    m1,            m6
18593    pmulhrsw      m4,    m7
18594    pmaddubsw     m5,    m3,            m6
18595    pmulhrsw      m5,    m7
18596    packuswb      m4,    m5
18597    movu          [r0 + 1431 * 16],     m4
18598
18599    ; mode 24 [row 12]
18600    movu          m6,    [r5 + 31 * 16]
18601    pslldq        m0,    2
18602    pinsrb        m0,    [r4 +  6],      1
18603    pinsrb        m0,    [r4 + 13],      0
18604    pmaddubsw     m4,    m0,            m6
18605    pmulhrsw      m4,    m7
18606    pslldq        m2,    2
18607    pinsrw        m2,    [r3 + 6],      0
18608    pmaddubsw     m5,    m2,            m6
18609    pmulhrsw      m5,    m7
18610    packuswb      m4,    m5
18611    movu          [r0 + 1432 * 16],     m4
18612    pslldq        m1,    2
18613    pinsrw        m1,    [r3 + 14],      0
18614    pmaddubsw     m4,    m1,            m6
18615    pmulhrsw      m4,    m7
18616    pslldq        m3,    2
18617    pinsrw        m3,    [r3 + 22],      0
18618    pmaddubsw     m5,    m3,            m6
18619    pmulhrsw      m5,    m7
18620    packuswb      m4,    m5
18621    movu          [r0 + 1433 * 16],     m4
18622
18623    ; mode 24 [row 13]
18624    movu          m6,    [r5 + 26 * 16]
18625    pmaddubsw     m4,    m0,            m6
18626    pmulhrsw      m4,    m7
18627    pmaddubsw     m5,    m2,            m6
18628    pmulhrsw      m5,    m7
18629    packuswb      m4,    m5
18630    movu          [r0 + 1434 * 16],     m4
18631    pmaddubsw     m4,    m1,            m6
18632    pmulhrsw      m4,    m7
18633    pmaddubsw     m5,    m3,            m6
18634    pmulhrsw      m5,    m7
18635    packuswb      m4,    m5
18636    movu          [r0 + 1435 * 16],     m4
18637
18638    ; mode 24 [row 14]
18639    movu          m6,    [r5 + 21 * 16]
18640    pmaddubsw     m4,    m0,            m6
18641    pmulhrsw      m4,    m7
18642    pmaddubsw     m5,    m2,            m6
18643    pmulhrsw      m5,    m7
18644    packuswb      m4,    m5
18645    movu          [r0 + 1436 * 16],     m4
18646    pmaddubsw     m4,    m1,            m6
18647    pmulhrsw      m4,    m7
18648    pmaddubsw     m5,    m3,            m6
18649    pmulhrsw      m5,    m7
18650    packuswb      m4,    m5
18651    movu          [r0 + 1437 * 16],     m4
18652
18653    ; mode 24 [row 15]
18654    movu          m6,    [r5 + 16 * 16]
18655    pmaddubsw     m4,    m0,            m6
18656    pmulhrsw      m4,    m7
18657    pmaddubsw     m5,    m2,            m6
18658    pmulhrsw      m5,    m7
18659    packuswb      m4,    m5
18660    movu          [r0 + 1438 * 16],     m4
18661    pmaddubsw     m4,    m1,            m6
18662    pmulhrsw      m4,    m7
18663    pmaddubsw     m5,    m3,            m6
18664    pmulhrsw      m5,    m7
18665    packuswb      m4,    m5
18666    movu          [r0 + 1439 * 16],     m4
18667
18668    ; mode 24 [row 16]
18669    movu          m6,    [r5 + 11 * 16]
18670    pmaddubsw     m4,    m0,            m6
18671    pmulhrsw      m4,    m7
18672    pmaddubsw     m5,    m2,            m6
18673    pmulhrsw      m5,    m7
18674    packuswb      m4,    m5
18675    movu          [r0 + 1440 * 16],     m4
18676    pmaddubsw     m4,    m1,            m6
18677    pmulhrsw      m4,    m7
18678    pmaddubsw     m5,    m3,            m6
18679    pmulhrsw      m5,    m7
18680    packuswb      m4,    m5
18681    movu          [r0 + 1441 * 16],     m4
18682
18683    ; mode 24 [row 17]
18684    movu          m6,    [r5 + 6 * 16]
18685    pmaddubsw     m4,    m0,            m6
18686    pmulhrsw      m4,    m7
18687    pmaddubsw     m5,    m2,            m6
18688    pmulhrsw      m5,    m7
18689    packuswb      m4,    m5
18690    movu          [r0 + 1442 * 16],     m4
18691    pmaddubsw     m4,    m1,            m6
18692    pmulhrsw      m4,    m7
18693    pmaddubsw     m5,    m3,            m6
18694    pmulhrsw      m5,    m7
18695    packuswb      m4,    m5
18696    movu          [r0 + 1443 * 16],     m4
18697
18698    ; mode 24 [row 18]
18699    movu          m6,    [r5 + 1 * 16]
18700    pmaddubsw     m4,    m0,            m6
18701    pmulhrsw      m4,    m7
18702    pmaddubsw     m5,    m2,            m6
18703    pmulhrsw      m5,    m7
18704    packuswb      m4,    m5
18705    movu          [r0 + 1444 * 16],     m4
18706    pmaddubsw     m4,    m1,            m6
18707    pmulhrsw      m4,    m7
18708    pmaddubsw     m5,    m3,            m6
18709    pmulhrsw      m5,    m7
18710    packuswb      m4,    m5
18711    movu          [r0 + 1445 * 16],     m4
18712
18713    ; mode 24 [row 19]
18714    movu          m6,    [r5 + 28 * 16]
18715    pslldq        m0,    2
18716    pinsrb        m0,    [r4 + 13],      1
18717    pinsrb        m0,    [r4 + 19],      0
18718    pmaddubsw     m4,    m0,            m6
18719    pmulhrsw      m4,    m7
18720    pslldq        m2,    2
18721    pinsrw        m2,    [r3 + 5],      0
18722    pmaddubsw     m5,    m2,            m6
18723    pmulhrsw      m5,    m7
18724    packuswb      m4,    m5
18725    movu          [r0 + 1446 * 16],     m4
18726    pslldq        m1,    2
18727    pinsrw        m1,    [r3 + 13],      0
18728    pmaddubsw     m4,    m1,            m6
18729    pmulhrsw      m4,    m7
18730    pslldq        m3,    2
18731    pinsrw        m3,    [r3 + 21],      0
18732    pmaddubsw     m5,    m3,            m6
18733    pmulhrsw      m5,    m7
18734    packuswb      m4,    m5
18735    movu          [r0 + 1447 * 16],     m4
18736
18737    ; mode 24 [row 20]
18738    movu          m6,    [r5 + 23 * 16]
18739    pmaddubsw     m4,    m0,            m6
18740    pmulhrsw      m4,    m7
18741    pmaddubsw     m5,    m2,            m6
18742    pmulhrsw      m5,    m7
18743    packuswb      m4,    m5
18744    movu          [r0 + 1448 * 16],     m4
18745    pmaddubsw     m4,    m1,            m6
18746    pmulhrsw      m4,    m7
18747    pmaddubsw     m5,    m3,            m6
18748    pmulhrsw      m5,    m7
18749    packuswb      m4,    m5
18750    movu          [r0 + 1449 * 16],     m4
18751
18752    ; mode 24 [row 21]
18753    movu          m6,    [r5 + 18 * 16]
18754    pmaddubsw     m4,    m0,            m6
18755    pmulhrsw      m4,    m7
18756    pmaddubsw     m5,    m2,            m6
18757    pmulhrsw      m5,    m7
18758    packuswb      m4,    m5
18759    movu          [r0 + 1450 * 16],     m4
18760    pmaddubsw     m4,    m1,            m6
18761    pmulhrsw      m4,    m7
18762    pmaddubsw     m5,    m3,            m6
18763    pmulhrsw      m5,    m7
18764    packuswb      m4,    m5
18765    movu          [r0 + 1451 * 16],     m4
18766
18767    ; mode 24 [row 22]
18768    movu          m6,    [r5 + 13 * 16]
18769    pmaddubsw     m4,    m0,            m6
18770    pmulhrsw      m4,    m7
18771    pmaddubsw     m5,    m2,            m6
18772    pmulhrsw      m5,    m7
18773    packuswb      m4,    m5
18774    movu          [r0 + 1452 * 16],     m4
18775    pmaddubsw     m4,    m1,            m6
18776    pmulhrsw      m4,    m7
18777    pmaddubsw     m5,    m3,            m6
18778    pmulhrsw      m5,    m7
18779    packuswb      m4,    m5
18780    movu          [r0 + 1453 * 16],     m4
18781
18782    ; mode 24 [row 23]
18783    movu          m6,    [r5 + 8 * 16]
18784    pmaddubsw     m4,    m0,            m6
18785    pmulhrsw      m4,    m7
18786    pmaddubsw     m5,    m2,            m6
18787    pmulhrsw      m5,    m7
18788    packuswb      m4,    m5
18789    movu          [r0 + 1454 * 16],     m4
18790    pmaddubsw     m4,    m1,            m6
18791    pmulhrsw      m4,    m7
18792    pmaddubsw     m5,    m3,            m6
18793    pmulhrsw      m5,    m7
18794    packuswb      m4,    m5
18795    movu          [r0 + 1455 * 16],     m4
18796
18797    ; mode 24 [row 24]
18798    movu          m6,    [r5 + 3 * 16]
18799    pmaddubsw     m4,    m0,            m6
18800    pmulhrsw      m4,    m7
18801    pmaddubsw     m5,    m2,            m6
18802    pmulhrsw      m5,    m7
18803    packuswb      m4,    m5
18804    movu          [r0 + 1456 * 16],     m4
18805    pmaddubsw     m4,    m1,            m6
18806    pmulhrsw      m4,    m7
18807    pmaddubsw     m5,    m3,            m6
18808    pmulhrsw      m5,    m7
18809    packuswb      m4,    m5
18810    movu          [r0 + 1457 * 16],     m4
18811
18812    ; mode 24 [row 25]
18813    movu          m6,    [r5 + 30 * 16]
18814    pslldq        m0,    2
18815    pinsrb        m0,    [r4 + 19],     1
18816    pinsrb        m0,    [r4 + 26],     0
18817    pmaddubsw     m4,    m0,            m6
18818    pmulhrsw      m4,    m7
18819    pslldq        m2,    2
18820    pinsrw        m2,    [r3 + 4],      0
18821    pmaddubsw     m5,    m2,            m6
18822    pmulhrsw      m5,    m7
18823    packuswb      m4,    m5
18824    movu          [r0 + 1458 * 16],     m4
18825    pslldq        m1,    2
18826    pinsrw        m1,    [r3 + 12],      0
18827    pmaddubsw     m4,    m1,            m6
18828    pmulhrsw      m4,    m7
18829    pslldq        m3,    2
18830    pinsrw        m3,    [r3 + 20],      0
18831    pmaddubsw     m5,    m3,            m6
18832    pmulhrsw      m5,    m7
18833    packuswb      m4,    m5
18834    movu          [r0 + 1459 * 16],     m4
18835
18836    ; mode 24 [row 26]
18837    movu          m6,    [r5 + 25 * 16]
18838    pmaddubsw     m4,    m0,            m6
18839    pmulhrsw      m4,    m7
18840    pmaddubsw     m5,    m2,            m6
18841    pmulhrsw      m5,    m7
18842    packuswb      m4,    m5
18843    movu          [r0 + 1460 * 16],     m4
18844    pmaddubsw     m4,    m1,            m6
18845    pmulhrsw      m4,    m7
18846    pmaddubsw     m5,    m3,            m6
18847    pmulhrsw      m5,    m7
18848    packuswb      m4,    m5
18849    movu          [r0 + 1461 * 16],     m4
18850
18851    ; mode 24 [row 27]
18852    movu          m6,    [r5 + 20 * 16]
18853    pmaddubsw     m4,    m0,            m6
18854    pmulhrsw      m4,    m7
18855    pmaddubsw     m5,    m2,            m6
18856    pmulhrsw      m5,    m7
18857    packuswb      m4,    m5
18858    movu          [r0 + 1462 * 16],     m4
18859    pmaddubsw     m4,    m1,            m6
18860    pmulhrsw      m4,    m7
18861    pmaddubsw     m5,    m3,            m6
18862    pmulhrsw      m5,    m7
18863    packuswb      m4,    m5
18864    movu          [r0 + 1463 * 16],     m4
18865
18866    ; mode 24 [row 28]
18867    movu          m6,    [r5 + 15 * 16]
18868    pmaddubsw     m4,    m0,            m6
18869    pmulhrsw      m4,    m7
18870    pmaddubsw     m5,    m2,            m6
18871    pmulhrsw      m5,    m7
18872    packuswb      m4,    m5
18873    movu          [r0 + 1464 * 16],     m4
18874    pmaddubsw     m4,    m1,            m6
18875    pmulhrsw      m4,    m7
18876    pmaddubsw     m5,    m3,            m6
18877    pmulhrsw      m5,    m7
18878    packuswb      m4,    m5
18879    movu          [r0 + 1465 * 16],     m4
18880
18881    ; mode 24 [row 29]
18882    movu          m6,    [r5 + 10 * 16]
18883    pmaddubsw     m4,    m0,            m6
18884    pmulhrsw      m4,    m7
18885    pmaddubsw     m5,    m2,            m6
18886    pmulhrsw      m5,    m7
18887    packuswb      m4,    m5
18888    movu          [r0 + 1466 * 16],     m4
18889    pmaddubsw     m4,    m1,            m6
18890    pmulhrsw      m4,    m7
18891    pmaddubsw     m5,    m3,            m6
18892    pmulhrsw      m5,    m7
18893    packuswb      m4,    m5
18894    movu          [r0 + 1467 * 16],     m4
18895
18896    ; mode 24 [row 30]
18897    movu          m6,    [r5 + 5 * 16]
18898    pmaddubsw     m4,    m0,            m6
18899    pmulhrsw      m4,    m7
18900    pmaddubsw     m5,    m2,            m6
18901    pmulhrsw      m5,    m7
18902    packuswb      m4,    m5
18903    movu          [r0 + 1468 * 16],     m4
18904    pmaddubsw     m4,    m1,            m6
18905    pmulhrsw      m4,    m7
18906    pmaddubsw     m5,    m3,            m6
18907    pmulhrsw      m5,    m7
18908    packuswb      m4,    m5
18909    movu          [r0 + 1469 * 16],     m4
18910
18911    ; mode 24 [row 31]
18912    pshufb        m5,    m0,            [tab_S2]
18913    movh          [r0 + 1470 * 16],     m5
18914    pshufb        m5,    m2,            [tab_S2]
18915    movh          [r0 + 1470 * 16 + 8], m5
18916    pshufb        m5,    m1,            [tab_S2]
18917    movh          [r0 + 1471 * 16],     m5
18918    pshufb        m5,    m3,            [tab_S2]
18919    movh          [r0 + 1471 * 16 + 8], m5
18920
18921    ; mode 25 [row 0]
18922    movu          m6,    [r5 + 30 * 16]
18923    movu          m0,    [r3          ]
18924    movu          m1,    [r3 + 1      ]
18925    punpcklbw     m0,    m1
18926    pmaddubsw     m4,    m0,            m6
18927    pmulhrsw      m4,    m7
18928    movu          m2,    [r3 + 8]
18929    movu          m3,    [r3 + 9]
18930    punpcklbw     m2,    m3
18931    pmaddubsw     m5,    m2,            m6
18932    pmulhrsw      m5,    m7
18933    packuswb      m4,    m5
18934    movu          [r0 + 1472 * 16],     m4
18935
18936    movu          m1,    [r3 + 16]
18937    movu          m3,    [r3 + 17]
18938    punpcklbw     m1,    m3
18939    pmaddubsw     m4,    m1,            m6
18940    pmulhrsw      m4,    m7
18941    movu          m3,    [r3 + 24]
18942    movu          m5,    [r3 + 25]
18943    punpcklbw     m3,    m5
18944    pmaddubsw     m5,    m3,            m6
18945    pmulhrsw      m5,    m7
18946    packuswb      m4,    m5
18947    movu          [r0 + 1473 * 16],     m4
18948
18949    ; mode 25 [row 1]
18950    movu          m6,    [r5 + 28 * 16]
18951    pmaddubsw     m4,    m0,            m6
18952    pmulhrsw      m4,    m7
18953    pmaddubsw     m5,    m2,            m6
18954    pmulhrsw      m5,    m7
18955    packuswb      m4,    m5
18956    movu          [r0 + 1474 * 16],     m4
18957    pmaddubsw     m4,    m1,            m6
18958    pmulhrsw      m4,    m7
18959    pmaddubsw     m5,    m3,            m6
18960    pmulhrsw      m5,    m7
18961    packuswb      m4,    m5
18962    movu          [r0 + 1475 * 16],     m4
18963
18964    ; mode 25 [row 2]
18965    movu          m6,    [r5 + 26 * 16]
18966    pmaddubsw     m4,    m0,            m6
18967    pmulhrsw      m4,    m7
18968    pmaddubsw     m5,    m2,            m6
18969    pmulhrsw      m5,    m7
18970    packuswb      m4,    m5
18971    movu          [r0 + 1476 * 16],     m4
18972    pmaddubsw     m4,    m1,            m6
18973    pmulhrsw      m4,    m7
18974    pmaddubsw     m5,    m3,            m6
18975    pmulhrsw      m5,    m7
18976    packuswb      m4,    m5
18977    movu          [r0 + 1477 * 16],     m4
18978
18979    ; mode 25 [row 3]
18980    movu          m6,    [r5 + 24 * 16]
18981    pmaddubsw     m4,    m0,            m6
18982    pmulhrsw      m4,    m7
18983    pmaddubsw     m5,    m2,            m6
18984    pmulhrsw      m5,    m7
18985    packuswb      m4,    m5
18986    movu          [r0 + 1478 * 16],     m4
18987    pmaddubsw     m4,    m1,            m6
18988    pmulhrsw      m4,    m7
18989    pmaddubsw     m5,    m3,            m6
18990    pmulhrsw      m5,    m7
18991    packuswb      m4,    m5
18992    movu          [r0 + 1479 * 16],     m4
18993
18994    ; mode 25 [row 4]
18995    movu          m6,    [r5 + 22 * 16]
18996    pmaddubsw     m4,    m0,            m6
18997    pmulhrsw      m4,    m7
18998    pmaddubsw     m5,    m2,            m6
18999    pmulhrsw      m5,    m7
19000    packuswb      m4,    m5
19001    movu          [r0 + 1480 * 16],     m4
19002    pmaddubsw     m4,    m1,            m6
19003    pmulhrsw      m4,    m7
19004    pmaddubsw     m5,    m3,            m6
19005    pmulhrsw      m5,    m7
19006    packuswb      m4,    m5
19007    movu          [r0 + 1481 * 16],     m4
19008
19009    ; mode 25 [row 5]
19010    movu          m6,    [r5 + 20 * 16]
19011    pmaddubsw     m4,    m0,            m6
19012    pmulhrsw      m4,    m7
19013    pmaddubsw     m5,    m2,            m6
19014    pmulhrsw      m5,    m7
19015    packuswb      m4,    m5
19016    movu          [r0 + 1482 * 16],     m4
19017    pmaddubsw     m4,    m1,            m6
19018    pmulhrsw      m4,    m7
19019    pmaddubsw     m5,    m3,            m6
19020    pmulhrsw      m5,    m7
19021    packuswb      m4,    m5
19022    movu          [r0 + 1483 * 16],     m4
19023
19024    ; mode 25 [row 6]
19025    movu          m6,    [r5 + 18 * 16]
19026    pmaddubsw     m4,    m0,            m6
19027    pmulhrsw      m4,    m7
19028    pmaddubsw     m5,    m2,            m6
19029    pmulhrsw      m5,    m7
19030    packuswb      m4,    m5
19031    movu          [r0 + 1484 * 16],     m4
19032    pmaddubsw     m4,    m1,            m6
19033    pmulhrsw      m4,    m7
19034    pmaddubsw     m5,    m3,            m6
19035    pmulhrsw      m5,    m7
19036    packuswb      m4,    m5
19037    movu          [r0 + 1485 * 16],     m4
19038
19039    ; mode 25 [row 7]
19040    movu          m6,    [r5 + 16 * 16]
19041    pmaddubsw     m4,    m0,            m6
19042    pmulhrsw      m4,    m7
19043    pmaddubsw     m5,    m2,            m6
19044    pmulhrsw      m5,    m7
19045    packuswb      m4,    m5
19046    movu          [r0 + 1486 * 16],     m4
19047    pmaddubsw     m4,    m1,            m6
19048    pmulhrsw      m4,    m7
19049    pmaddubsw     m5,    m3,            m6
19050    pmulhrsw      m5,    m7
19051    packuswb      m4,    m5
19052    movu          [r0 + 1487 * 16],     m4
19053
19054    ; mode 25 [row 8]
19055    movu          m6,    [r5 + 14 * 16]
19056    pmaddubsw     m4,    m0,            m6
19057    pmulhrsw      m4,    m7
19058    pmaddubsw     m5,    m2,            m6
19059    pmulhrsw      m5,    m7
19060    packuswb      m4,    m5
19061    movu          [r0 + 1488 * 16],     m4
19062    pmaddubsw     m4,    m1,            m6
19063    pmulhrsw      m4,    m7
19064    pmaddubsw     m5,    m3,            m6
19065    pmulhrsw      m5,    m7
19066    packuswb      m4,    m5
19067    movu          [r0 + 1489 * 16],     m4
19068
19069    ; mode 25 [row 9]
19070    movu          m6,    [r5 + 12 * 16]
19071    pmaddubsw     m4,    m0,            m6
19072    pmulhrsw      m4,    m7
19073    pmaddubsw     m5,    m2,            m6
19074    pmulhrsw      m5,    m7
19075    packuswb      m4,    m5
19076    movu          [r0 + 1490 * 16],     m4
19077    pmaddubsw     m4,    m1,            m6
19078    pmulhrsw      m4,    m7
19079    pmaddubsw     m5,    m3,            m6
19080    pmulhrsw      m5,    m7
19081    packuswb      m4,    m5
19082    movu          [r0 + 1491 * 16],     m4
19083
19084    ; mode 25 [row 10]
19085    movu          m6,    [r5 + 10 * 16]
19086    pmaddubsw     m4,    m0,            m6
19087    pmulhrsw      m4,    m7
19088    pmaddubsw     m5,    m2,            m6
19089    pmulhrsw      m5,    m7
19090    packuswb      m4,    m5
19091    movu          [r0 + 1492 * 16],     m4
19092    pmaddubsw     m4,    m1,            m6
19093    pmulhrsw      m4,    m7
19094    pmaddubsw     m5,    m3,            m6
19095    pmulhrsw      m5,    m7
19096    packuswb      m4,    m5
19097    movu          [r0 + 1493 * 16],     m4
19098
19099    ; mode 25 [row 11]
19100    movu          m6,    [r5 + 8 * 16]
19101    pmaddubsw     m4,    m0,            m6
19102    pmulhrsw      m4,    m7
19103    pmaddubsw     m5,    m2,            m6
19104    pmulhrsw      m5,    m7
19105    packuswb      m4,    m5
19106    movu          [r0 + 1494 * 16],     m4
19107    pmaddubsw     m4,    m1,            m6
19108    pmulhrsw      m4,    m7
19109    pmaddubsw     m5,    m3,            m6
19110    pmulhrsw      m5,    m7
19111    packuswb      m4,    m5
19112    movu          [r0 + 1495 * 16],     m4
19113
19114    ; mode 25 [row 12]
19115    movu          m6,    [r5 + 6 * 16]
19116    pmaddubsw     m4,    m0,            m6
19117    pmulhrsw      m4,    m7
19118    pmaddubsw     m5,    m2,            m6
19119    pmulhrsw      m5,    m7
19120    packuswb      m4,    m5
19121    movu          [r0 + 1496 * 16],     m4
19122    pmaddubsw     m4,    m1,            m6
19123    pmulhrsw      m4,    m7
19124    pmaddubsw     m5,    m3,            m6
19125    pmulhrsw      m5,    m7
19126    packuswb      m4,    m5
19127    movu          [r0 + 1497 * 16],     m4
19128
19129    ; mode 25 [row 13]
19130    movu          m6,    [r5 + 4 * 16]
19131    pmaddubsw     m4,    m0,            m6
19132    pmulhrsw      m4,    m7
19133    pmaddubsw     m5,    m2,            m6
19134    pmulhrsw      m5,    m7
19135    packuswb      m4,    m5
19136    movu          [r0 + 1498 * 16],     m4
19137    pmaddubsw     m4,    m1,            m6
19138    pmulhrsw      m4,    m7
19139    pmaddubsw     m5,    m3,            m6
19140    pmulhrsw      m5,    m7
19141    packuswb      m4,    m5
19142    movu          [r0 + 1499 * 16],     m4
19143
19144    ; mode 25 [row 14]
19145    movu          m6,    [r5 + 2 * 16]
19146    pmaddubsw     m4,    m0,            m6
19147    pmulhrsw      m4,    m7
19148    pmaddubsw     m5,    m2,            m6
19149    pmulhrsw      m5,    m7
19150    packuswb      m4,    m5
19151    movu          [r0 + 1500 * 16],     m4
19152    pmaddubsw     m4,    m1,            m6
19153    pmulhrsw      m4,    m7
19154    pmaddubsw     m5,    m3,            m6
19155    pmulhrsw      m5,    m7
19156    packuswb      m4,    m5
19157    movu          [r0 + 1501 * 16],     m4
19158
19159    ; mode 25 [row 15]
19160    pshufb        m5,    m0,            [tab_S2]
19161    movh          [r0 + 1502 * 16],     m5
19162    pshufb        m5,    m2,            [tab_S2]
19163    movh          [r0 + 1502 * 16 + 8], m5
19164    pshufb        m5,    m1,            [tab_S2]
19165    movh          [r0 + 1503 * 16],     m5
19166    pshufb        m5,    m3,            [tab_S2]
19167    movh          [r0 + 1503 * 16 + 8], m5
19168
19169    ; mode 25 [row 16]
19170    movu          m6,    [r5 + 30 * 16]
19171    pslldq        m0,    2
19172    pinsrb        m0,    [r4 + 0],      1
19173    pinsrb        m0,    [r4 + 16],     0
19174    pmaddubsw     m4,    m0,            m6
19175    pmulhrsw      m4,    m7
19176    pslldq        m2,    2
19177    pinsrw        m2,    [r3 + 7],      0
19178    pmaddubsw     m5,    m2,            m6
19179    pmulhrsw      m5,    m7
19180    packuswb      m4,    m5
19181    movu          [r0 + 1504 * 16],     m4
19182    pslldq        m1,    2
19183    pinsrw        m1,    [r3 + 15],     0
19184    pmaddubsw     m4,    m1,            m6
19185    pmulhrsw      m4,    m7
19186    pslldq        m3,    2
19187    pinsrw        m3,    [r3 + 23],     0
19188    pmaddubsw     m5,    m3,            m6
19189    pmulhrsw      m5,    m7
19190    packuswb      m4,    m5
19191    movu          [r0 + 1505 * 16],     m4
19192
19193    ; mode 25 [row 17]
19194    movu          m6,    [r5 + 28 * 16]
19195    pmaddubsw     m4,    m0,            m6
19196    pmulhrsw      m4,    m7
19197    pmaddubsw     m5,    m2,            m6
19198    pmulhrsw      m5,    m7
19199    packuswb      m4,    m5
19200    movu          [r0 + 1506 * 16],     m4
19201    pmaddubsw     m4,    m1,            m6
19202    pmulhrsw      m4,    m7
19203    pmaddubsw     m5,    m3,            m6
19204    pmulhrsw      m5,    m7
19205    packuswb      m4,    m5
19206    movu          [r0 + 1507 * 16],     m4
19207
19208    ; mode 25 [row 18]
19209    movu          m6,    [r5 + 26 * 16]
19210    pmaddubsw     m4,    m0,            m6
19211    pmulhrsw      m4,    m7
19212    pmaddubsw     m5,    m2,            m6
19213    pmulhrsw      m5,    m7
19214    packuswb      m4,    m5
19215    movu          [r0 + 1508 * 16],     m4
19216    pmaddubsw     m4,    m1,            m6
19217    pmulhrsw      m4,    m7
19218    pmaddubsw     m5,    m3,            m6
19219    pmulhrsw      m5,    m7
19220    packuswb      m4,    m5
19221    movu          [r0 + 1509 * 16],     m4
19222
19223    ; mode 25 [row 19]
19224    movu          m6,    [r5 + 24 * 16]
19225    pmaddubsw     m4,    m0,            m6
19226    pmulhrsw      m4,    m7
19227    pmaddubsw     m5,    m2,            m6
19228    pmulhrsw      m5,    m7
19229    packuswb      m4,    m5
19230    movu          [r0 + 1510 * 16],     m4
19231    pmaddubsw     m4,    m1,            m6
19232    pmulhrsw      m4,    m7
19233    pmaddubsw     m5,    m3,            m6
19234    pmulhrsw      m5,    m7
19235    packuswb      m4,    m5
19236    movu          [r0 + 1511 * 16],     m4
19237
19238    ; mode 25 [row 20]
19239    movu          m6,    [r5 + 22 * 16]
19240    pmaddubsw     m4,    m0,            m6
19241    pmulhrsw      m4,    m7
19242    pmaddubsw     m5,    m2,            m6
19243    pmulhrsw      m5,    m7
19244    packuswb      m4,    m5
19245    movu          [r0 + 1512 * 16],     m4
19246    pmaddubsw     m4,    m1,            m6
19247    pmulhrsw      m4,    m7
19248    pmaddubsw     m5,    m3,            m6
19249    pmulhrsw      m5,    m7
19250    packuswb      m4,    m5
19251    movu          [r0 + 1513 * 16],     m4
19252
19253    ; mode 25 [row 21]
19254    movu          m6,    [r5 + 20 * 16]
19255    pmaddubsw     m4,    m0,            m6
19256    pmulhrsw      m4,    m7
19257    pmaddubsw     m5,    m2,            m6
19258    pmulhrsw      m5,    m7
19259    packuswb      m4,    m5
19260    movu          [r0 + 1514 * 16],     m4
19261    pmaddubsw     m4,    m1,            m6
19262    pmulhrsw      m4,    m7
19263    pmaddubsw     m5,    m3,            m6
19264    pmulhrsw      m5,    m7
19265    packuswb      m4,    m5
19266    movu          [r0 + 1515 * 16],     m4
19267
19268    ; mode 25 [row 22]
19269    movu          m6,    [r5 + 18 * 16]
19270    pmaddubsw     m4,    m0,            m6
19271    pmulhrsw      m4,    m7
19272    pmaddubsw     m5,    m2,            m6
19273    pmulhrsw      m5,    m7
19274    packuswb      m4,    m5
19275    movu          [r0 + 1516 * 16],     m4
19276    pmaddubsw     m4,    m1,            m6
19277    pmulhrsw      m4,    m7
19278    pmaddubsw     m5,    m3,            m6
19279    pmulhrsw      m5,    m7
19280    packuswb      m4,    m5
19281    movu          [r0 + 1517 * 16],     m4
19282
19283    ; mode 25 [row 23]
19284    movu          m6,    [r5 + 16 * 16]
19285    pmaddubsw     m4,    m0,            m6
19286    pmulhrsw      m4,    m7
19287    pmaddubsw     m5,    m2,            m6
19288    pmulhrsw      m5,    m7
19289    packuswb      m4,    m5
19290    movu          [r0 + 1518 * 16],     m4
19291    pmaddubsw     m4,    m1,            m6
19292    pmulhrsw      m4,    m7
19293    pmaddubsw     m5,    m3,            m6
19294    pmulhrsw      m5,    m7
19295    packuswb      m4,    m5
19296    movu          [r0 + 1519 * 16],     m4
19297
19298    ; mode 25 [row 24]
19299    movu          m6,    [r5 + 14 * 16]
19300    pmaddubsw     m4,    m0,            m6
19301    pmulhrsw      m4,    m7
19302    pmaddubsw     m5,    m2,            m6
19303    pmulhrsw      m5,    m7
19304    packuswb      m4,    m5
19305    movu          [r0 + 1520 * 16],     m4
19306    pmaddubsw     m4,    m1,            m6
19307    pmulhrsw      m4,    m7
19308    pmaddubsw     m5,    m3,            m6
19309    pmulhrsw      m5,    m7
19310    packuswb      m4,    m5
19311    movu          [r0 + 1521 * 16],     m4
19312
19313    ; mode 25 [row 25]
19314    movu          m6,    [r5 + 12 * 16]
19315    pmaddubsw     m4,    m0,            m6
19316    pmulhrsw      m4,    m7
19317    pmaddubsw     m5,    m2,            m6
19318    pmulhrsw      m5,    m7
19319    packuswb      m4,    m5
19320    movu          [r0 + 1522 * 16],     m4
19321    pmaddubsw     m4,    m1,            m6
19322    pmulhrsw      m4,    m7
19323    pmaddubsw     m5,    m3,            m6
19324    pmulhrsw      m5,    m7
19325    packuswb      m4,    m5
19326    movu          [r0 + 1523 * 16],     m4
19327
19328    ; mode 25 [row 26]
19329    movu          m6,    [r5 + 10 * 16]
19330    pmaddubsw     m4,    m0,            m6
19331    pmulhrsw      m4,    m7
19332    pmaddubsw     m5,    m2,            m6
19333    pmulhrsw      m5,    m7
19334    packuswb      m4,    m5
19335    movu          [r0 + 1524 * 16],     m4
19336    pmaddubsw     m4,    m1,            m6
19337    pmulhrsw      m4,    m7
19338    pmaddubsw     m5,    m3,            m6
19339    pmulhrsw      m5,    m7
19340    packuswb      m4,    m5
19341    movu          [r0 + 1525 * 16],     m4
19342
19343    ; mode 25 [row 27]
19344    movu          m6,    [r5 + 8 * 16]
19345    pmaddubsw     m4,    m0,            m6
19346    pmulhrsw      m4,    m7
19347    pmaddubsw     m5,    m2,            m6
19348    pmulhrsw      m5,    m7
19349    packuswb      m4,    m5
19350    movu          [r0 + 1526 * 16],     m4
19351    pmaddubsw     m4,    m1,            m6
19352    pmulhrsw      m4,    m7
19353    pmaddubsw     m5,    m3,            m6
19354    pmulhrsw      m5,    m7
19355    packuswb      m4,    m5
19356    movu          [r0 + 1527 * 16],     m4
19357
19358    ; mode 25 [row 28]
19359    movu          m6,    [r5 + 6 * 16]
19360    pmaddubsw     m4,    m0,            m6
19361    pmulhrsw      m4,    m7
19362    pmaddubsw     m5,    m2,            m6
19363    pmulhrsw      m5,    m7
19364    packuswb      m4,    m5
19365    movu          [r0 + 1528 * 16],     m4
19366    pmaddubsw     m4,    m1,            m6
19367    pmulhrsw      m4,    m7
19368    pmaddubsw     m5,    m3,            m6
19369    pmulhrsw      m5,    m7
19370    packuswb      m4,    m5
19371    movu          [r0 + 1529 * 16],     m4
19372
19373    ; mode 25 [row 29]
19374    movu          m6,    [r5 + 4 * 16]
19375    pmaddubsw     m4,    m0,            m6
19376    pmulhrsw      m4,    m7
19377    pmaddubsw     m5,    m2,            m6
19378    pmulhrsw      m5,    m7
19379    packuswb      m4,    m5
19380    movu          [r0 + 1530 * 16],     m4
19381    pmaddubsw     m4,    m1,            m6
19382    pmulhrsw      m4,    m7
19383    pmaddubsw     m5,    m3,            m6
19384    pmulhrsw      m5,    m7
19385    packuswb      m4,    m5
19386    movu          [r0 + 1531 * 16],     m4
19387
19388    ; mode 25 [row 30]
19389    movu          m6,    [r5 + 2 * 16]
19390    pmaddubsw     m4,    m0,            m6
19391    pmulhrsw      m4,    m7
19392    pmaddubsw     m5,    m2,            m6
19393    pmulhrsw      m5,    m7
19394    packuswb      m4,    m5
19395    movu          [r0 + 1532 * 16],     m4
19396    pmaddubsw     m4,    m1,            m6
19397    pmulhrsw      m4,    m7
19398    pmaddubsw     m5,    m3,            m6
19399    pmulhrsw      m5,    m7
19400    packuswb      m4,    m5
19401    movu          [r0 + 1533 * 16],     m4
19402
19403    ; mode 25 [row 31]
19404    pshufb        m5,    m0,            [tab_S2]
19405    movh          [r0 + 1534 * 16],     m5
19406    pshufb        m5,    m2,            [tab_S2]
19407    movh          [r0 + 1534 * 16 + 8], m5
19408    pshufb        m5,    m1,            [tab_S2]
19409    movh          [r0 + 1535 * 16],     m5
19410    pshufb        m5,    m3,            [tab_S2]
19411    movh          [r0 + 1535 * 16 + 8], m5
19412
19413    ; mode 26
19414    movu                      m1,   [r1 +  1]
19415    movu                      m2,   [r1 + 17]
19416    movu         [r0 + 1536 * 16],  m1
19417    movu         [r0 + 1537 * 16],  m2
19418    movu         [r0 + 1538 * 16],  m1
19419    movu         [r0 + 1539 * 16],  m2
19420    movu         [r0 + 1540 * 16],  m1
19421    movu         [r0 + 1541 * 16],  m2
19422    movu         [r0 + 1542 * 16],  m1
19423    movu         [r0 + 1543 * 16],  m2
19424    movu         [r0 + 1544 * 16],  m1
19425    movu         [r0 + 1545 * 16],  m2
19426    movu         [r0 + 1546 * 16],  m1
19427    movu         [r0 + 1547 * 16],  m2
19428    movu         [r0 + 1548 * 16],  m1
19429    movu         [r0 + 1549 * 16],  m2
19430    movu         [r0 + 1550 * 16],  m1
19431    movu         [r0 + 1551 * 16],  m2
19432
19433    movu         [r0 + 1552 * 16],  m1
19434    movu         [r0 + 1553 * 16],  m2
19435    movu         [r0 + 1554 * 16],  m1
19436    movu         [r0 + 1555 * 16],  m2
19437    movu         [r0 + 1556 * 16],  m1
19438    movu         [r0 + 1557 * 16],  m2
19439    movu         [r0 + 1558 * 16],  m1
19440    movu         [r0 + 1559 * 16],  m2
19441    movu         [r0 + 1560 * 16],  m1
19442    movu         [r0 + 1561 * 16],  m2
19443    movu         [r0 + 1562 * 16],  m1
19444    movu         [r0 + 1563 * 16],  m2
19445    movu         [r0 + 1564 * 16],  m1
19446    movu         [r0 + 1565 * 16],  m2
19447    movu         [r0 + 1566 * 16],  m1
19448    movu         [r0 + 1567 * 16],  m2
19449
19450    movu         [r0 + 1568 * 16],  m1
19451    movu         [r0 + 1569 * 16],  m2
19452    movu         [r0 + 1570 * 16],  m1
19453    movu         [r0 + 1571 * 16],  m2
19454    movu         [r0 + 1572 * 16],  m1
19455    movu         [r0 + 1573 * 16],  m2
19456    movu         [r0 + 1574 * 16],  m1
19457    movu         [r0 + 1575 * 16],  m2
19458    movu         [r0 + 1576 * 16],  m1
19459    movu         [r0 + 1577 * 16],  m2
19460    movu         [r0 + 1578 * 16],  m1
19461    movu         [r0 + 1579 * 16],  m2
19462    movu         [r0 + 1580 * 16],  m1
19463    movu         [r0 + 1581 * 16],  m2
19464    movu         [r0 + 1582 * 16],  m1
19465    movu         [r0 + 1583 * 16],  m2
19466
19467    movu         [r0 + 1584 * 16],  m1
19468    movu         [r0 + 1585 * 16],  m2
19469    movu         [r0 + 1586 * 16],  m1
19470    movu         [r0 + 1587 * 16],  m2
19471    movu         [r0 + 1588 * 16],  m1
19472    movu         [r0 + 1589 * 16],  m2
19473    movu         [r0 + 1590 * 16],  m1
19474    movu         [r0 + 1591 * 16],  m2
19475    movu         [r0 + 1592 * 16],  m1
19476    movu         [r0 + 1593 * 16],  m2
19477    movu         [r0 + 1594 * 16],  m1
19478    movu         [r0 + 1595 * 16],  m2
19479    movu         [r0 + 1596 * 16],  m1
19480    movu         [r0 + 1597 * 16],  m2
19481    movu         [r0 + 1598 * 16],  m1
19482    movu         [r0 + 1599 * 16],  m2
19483
19484    ; mode 27 [row 0]
19485    movu          m6,    [r5 + 2 * 16]
19486    movu          m0,    [r3 + 1     ]
19487    movu          m1,    [r3 + 2     ]
19488    punpcklbw     m0,    m1
19489    pmaddubsw     m4,    m0,            m6
19490    pmulhrsw      m4,    m7
19491    movu          m2,    [r3 +  9]
19492    movu          m3,    [r3 + 10]
19493    punpcklbw     m2,    m3
19494    pmaddubsw     m5,    m2,            m6
19495    pmulhrsw      m5,    m7
19496    packuswb      m4,    m5
19497    movu          [r0 + 1600 * 16],     m4
19498
19499    movu          m1,    [r3 + 17]
19500    movu          m3,    [r3 + 18]
19501    punpcklbw     m1,    m3
19502    pmaddubsw     m4,    m1,            m6
19503    pmulhrsw      m4,    m7
19504    movu          m3,    [r3 + 25]
19505    movu          m5,    [r3 + 26]
19506    punpcklbw     m3,    m5
19507    pmaddubsw     m5,    m3,            m6
19508    pmulhrsw      m5,    m7
19509    packuswb      m4,    m5
19510    movu          [r0 + 1601 * 16],     m4
19511
19512    ; mode 27 [row 1]
19513    movu          m6,    [r5 + 4 * 16]
19514    pmaddubsw     m4,    m0,            m6
19515    pmulhrsw      m4,    m7
19516    pmaddubsw     m5,    m2,            m6
19517    pmulhrsw      m5,    m7
19518    packuswb      m4,    m5
19519    movu          [r0 + 1602 * 16],     m4
19520    pmaddubsw     m4,    m1,            m6
19521    pmulhrsw      m4,    m7
19522    pmaddubsw     m5,    m3,            m6
19523    pmulhrsw      m5,    m7
19524    packuswb      m4,    m5
19525    movu          [r0 + 1603 * 16],     m4
19526
19527    ; mode 27 [row 2]
19528    movu          m6,    [r5 + 6 * 16]
19529    pmaddubsw     m4,    m0,            m6
19530    pmulhrsw      m4,    m7
19531    pmaddubsw     m5,    m2,            m6
19532    pmulhrsw      m5,    m7
19533    packuswb      m4,    m5
19534    movu          [r0 + 1604 * 16],     m4
19535    pmaddubsw     m4,    m1,            m6
19536    pmulhrsw      m4,    m7
19537    pmaddubsw     m5,    m3,            m6
19538    pmulhrsw      m5,    m7
19539    packuswb      m4,    m5
19540    movu          [r0 + 1605 * 16],     m4
19541
19542    ; mode 27 [row 3]
19543    movu          m6,    [r5 + 8 * 16]
19544    pmaddubsw     m4,    m0,            m6
19545    pmulhrsw      m4,    m7
19546    pmaddubsw     m5,    m2,            m6
19547    pmulhrsw      m5,    m7
19548    packuswb      m4,    m5
19549    movu          [r0 + 1606 * 16],     m4
19550    pmaddubsw     m4,    m1,            m6
19551    pmulhrsw      m4,    m7
19552    pmaddubsw     m5,    m3,            m6
19553    pmulhrsw      m5,    m7
19554    packuswb      m4,    m5
19555    movu          [r0 + 1607 * 16],     m4
19556
19557    ; mode 27 [row 4]
19558    movu          m6,    [r5 + 10 * 16]
19559    pmaddubsw     m4,    m0,            m6
19560    pmulhrsw      m4,    m7
19561    pmaddubsw     m5,    m2,            m6
19562    pmulhrsw      m5,    m7
19563    packuswb      m4,    m5
19564    movu          [r0 + 1608 * 16],     m4
19565
19566    ; mode 28 [row 1 -first half]
19567    movu          [r0 + 1666 * 16],     m4
19568
19569    pmaddubsw     m4,    m1,            m6
19570    pmulhrsw      m4,    m7
19571    pmaddubsw     m5,    m3,            m6
19572    pmulhrsw      m5,    m7
19573    packuswb      m4,    m5
19574    movu          [r0 + 1609 * 16],     m4
19575
19576    ; mode 28 [row 1 - second half]
19577    movu          [r0 + 1667 * 16],     m4
19578
19579    ; mode 27 [row 5]
19580    movu          m6,    [r5 + 12 * 16]
19581    pmaddubsw     m4,    m0,            m6
19582    pmulhrsw      m4,    m7
19583    pmaddubsw     m5,    m2,            m6
19584    pmulhrsw      m5,    m7
19585    packuswb      m4,    m5
19586    movu          [r0 + 1610 * 16],     m4
19587
19588    pmaddubsw     m4,    m1,            m6
19589    pmulhrsw      m4,    m7
19590    pmaddubsw     m5,    m3,            m6
19591    pmulhrsw      m5,    m7
19592    packuswb      m4,    m5
19593    movu          [r0 + 1611 * 16],     m4
19594
19595    ; mode 27 [row 6]
19596    movu          m6,    [r5 + 14 * 16]
19597    pmaddubsw     m4,    m0,            m6
19598    pmulhrsw      m4,    m7
19599    pmaddubsw     m5,    m2,            m6
19600    pmulhrsw      m5,    m7
19601    packuswb      m4,    m5
19602    movu          [r0 + 1612 * 16],     m4
19603    pmaddubsw     m4,    m1,            m6
19604    pmulhrsw      m4,    m7
19605    pmaddubsw     m5,    m3,            m6
19606    pmulhrsw      m5,    m7
19607    packuswb      m4,    m5
19608    movu          [r0 + 1613 * 16],     m4
19609
19610    ; mode 27 [row 7]
19611    movu          m6,    [r5 + 16 * 16]
19612    pmaddubsw     m4,    m0,            m6
19613    pmulhrsw      m4,    m7
19614    pmaddubsw     m5,    m2,            m6
19615    pmulhrsw      m5,    m7
19616    packuswb      m4,    m5
19617    movu          [r0 + 1614 * 16],     m4
19618    pmaddubsw     m4,    m1,            m6
19619    pmulhrsw      m4,    m7
19620    pmaddubsw     m5,    m3,            m6
19621    pmulhrsw      m5,    m7
19622    packuswb      m4,    m5
19623    movu          [r0 + 1615 * 16],     m4
19624
19625    ; mode 27 [row 8]
19626    movu          m6,    [r5 + 18 * 16]
19627    pmaddubsw     m4,    m0,            m6
19628    pmulhrsw      m4,    m7
19629    pmaddubsw     m5,    m2,            m6
19630    pmulhrsw      m5,    m7
19631    packuswb      m4,    m5
19632    movu          [r0 + 1616 * 16],     m4
19633
19634    ; mode 29 [row 1 - first half]
19635    movu          [r0 + 1730 * 16],     m4
19636
19637    pmaddubsw     m4,    m1,            m6
19638    pmulhrsw      m4,    m7
19639    pmaddubsw     m5,    m3,            m6
19640    pmulhrsw      m5,    m7
19641    packuswb      m4,    m5
19642    movu          [r0 + 1617 * 16],     m4
19643
19644    ; mode 29 [row 1 - second half]
19645    movu          [r0 + 1731 * 16],     m4
19646
19647    ; mode 27 [row 9]
19648    movu          m6,    [r5 + 20 * 16]
19649    pmaddubsw     m4,    m0,            m6
19650    pmulhrsw      m4,    m7
19651    pmaddubsw     m5,    m2,            m6
19652    pmulhrsw      m5,    m7
19653    packuswb      m4,    m5
19654    movu          [r0 + 1618 * 16],     m4
19655
19656    ; mode 28 [row 3 -first half]
19657    movu          [r0 + 1670 * 16],     m4
19658
19659    pmaddubsw     m4,    m1,            m6
19660    pmulhrsw      m4,    m7
19661    pmaddubsw     m5,    m3,            m6
19662    pmulhrsw      m5,    m7
19663    packuswb      m4,    m5
19664    movu          [r0 + 1619 * 16],     m4
19665
19666    ; mode 28 [row 3 -second half]
19667    movu          [r0 + 1671 * 16],     m4
19668
19669    ; mode 27 [row 10]
19670    movu          m6,    [r5 + 22 * 16]
19671    pmaddubsw     m4,    m0,            m6
19672    pmulhrsw      m4,    m7
19673    pmaddubsw     m5,    m2,            m6
19674    pmulhrsw      m5,    m7
19675    packuswb      m4,    m5
19676    movu          [r0 + 1620 * 16],     m4
19677    pmaddubsw     m4,    m1,            m6
19678    pmulhrsw      m4,    m7
19679    pmaddubsw     m5,    m3,            m6
19680    pmulhrsw      m5,    m7
19681    packuswb      m4,    m5
19682    movu          [r0 + 1621 * 16],     m4
19683
19684    ; mode 27 [row 11]
19685    movu          m6,    [r5 + 24 * 16]
19686    pmaddubsw     m4,    m0,            m6
19687    pmulhrsw      m4,    m7
19688    pmaddubsw     m5,    m2,            m6
19689    pmulhrsw      m5,    m7
19690    packuswb      m4,    m5
19691    movu          [r0 + 1622 * 16],     m4
19692    pmaddubsw     m4,    m1,            m6
19693    pmulhrsw      m4,    m7
19694    pmaddubsw     m5,    m3,            m6
19695    pmulhrsw      m5,    m7
19696    packuswb      m4,    m5
19697    movu          [r0 + 1623 * 16],     m4
19698
19699    ; mode 27 [row 12]
19700    movu          m6,    [r5 + 26 * 16]
19701    pmaddubsw     m4,    m0,            m6
19702    pmulhrsw      m4,    m7
19703    pmaddubsw     m5,    m2,            m6
19704    pmulhrsw      m5,    m7
19705    packuswb      m4,    m5
19706    movu          [r0 + 1624 * 16],     m4
19707
19708    ; mode 30 [row 1 - first half]
19709    movu          [r0 + 1794 * 16],     m4
19710
19711    ; mode 33 [row 0 - first half]
19712    movu          [r0 + 1984 * 16],     m4
19713
19714    pmaddubsw     m4,    m1,            m6
19715    pmulhrsw      m4,    m7
19716    pmaddubsw     m5,    m3,            m6
19717    pmulhrsw      m5,    m7
19718    packuswb      m4,    m5
19719    movu          [r0 + 1625 * 16],     m4
19720
19721    ; mode 30 [row 1 - second half]
19722    movu          [r0 + 1795 * 16],     m4
19723
19724    ; mode 33 [row 0 - second half]
19725    movu          [r0 + 1985 * 16],     m4
19726
19727    ; mode 27 [row 13]
19728    movu          m6,    [r5 + 28 * 16]
19729    pmaddubsw     m4,    m0,            m6
19730    pmulhrsw      m4,    m7
19731    pmaddubsw     m5,    m2,            m6
19732    pmulhrsw      m5,    m7
19733    packuswb      m4,    m5
19734    movu          [r0 + 1626 * 16],     m4
19735    pmaddubsw     m4,    m1,            m6
19736    pmulhrsw      m4,    m7
19737    pmaddubsw     m5,    m3,            m6
19738    pmulhrsw      m5,    m7
19739    packuswb      m4,    m5
19740    movu          [r0 + 1627 * 16],     m4
19741
19742    ; mode 27 [row 14]
19743    movu          m6,    [r5 + 30 * 16]
19744    pmaddubsw     m4,    m0,            m6
19745    pmulhrsw      m4,    m7
19746    pmaddubsw     m5,    m2,            m6
19747    pmulhrsw      m5,    m7
19748    packuswb      m4,    m5
19749    movu          [r0 + 1628 * 16],     m4
19750
19751    ; mode 28 [row 5 first half]
19752    movu          [r0 + 1674 * 16],     m4
19753
19754    pmaddubsw     m4,    m1,            m6
19755    pmulhrsw      m4,    m7
19756    pmaddubsw     m5,    m3,            m6
19757    pmulhrsw      m5,    m7
19758    packuswb      m4,    m5
19759    movu          [r0 + 1629 * 16],     m4
19760
19761    ; mode 28 [row 5 second half]
19762    movu          [r0 + 1675 * 16],     m4
19763
19764    ; mode 28 [row 0]
19765    movu          m6,    [r5 + 5 * 16]
19766    pmaddubsw     m4,    m0,            m6
19767    pmulhrsw      m4,    m7
19768    pmaddubsw     m5,    m2,            m6
19769    pmulhrsw      m5,    m7
19770    packuswb      m4,    m5
19771    movu          [r0 + 1664 * 16],     m4
19772    pmaddubsw     m4,    m1,            m6
19773    pmulhrsw      m4,    m7
19774    pmaddubsw     m5,    m3,            m6
19775    pmulhrsw      m5,    m7
19776    packuswb      m4,    m5
19777    movu          [r0 + 1665 * 16],     m4
19778
19779    ; mode 28 [row 2]
19780    movu          m6,    [r5 + 15 * 16]
19781    pmaddubsw     m4,    m0,            m6
19782    pmulhrsw      m4,    m7
19783    pmaddubsw     m5,    m2,            m6
19784    pmulhrsw      m5,    m7
19785    packuswb      m4,    m5
19786    movu          [r0 + 1668 * 16],     m4
19787    pmaddubsw     m4,    m1,            m6
19788    pmulhrsw      m4,    m7
19789    pmaddubsw     m5,    m3,            m6
19790    pmulhrsw      m5,    m7
19791    packuswb      m4,    m5
19792    movu          [r0 + 1669 * 16],     m4
19793
19794    ; mode 28 [row 4]
19795    movu          m6,    [r5 + 25 * 16]
19796    pmaddubsw     m4,    m0,            m6
19797    pmulhrsw      m4,    m7
19798    pmaddubsw     m5,    m2,            m6
19799    pmulhrsw      m5,    m7
19800    packuswb      m4,    m5
19801    movu          [r0 + 1672 * 16],     m4
19802    pmaddubsw     m4,    m1,            m6
19803    pmulhrsw      m4,    m7
19804    pmaddubsw     m5,    m3,            m6
19805    pmulhrsw      m5,    m7
19806    packuswb      m4,    m5
19807    movu          [r0 + 1673 * 16],     m4
19808
19809    ; mode 30 [row 0]
19810    movu          m6,    [r5 + 13 * 16]
19811    pmaddubsw     m4,    m0,            m6
19812    pmulhrsw      m4,    m7
19813    pmaddubsw     m5,    m2,            m6
19814    pmulhrsw      m5,    m7
19815    packuswb      m4,    m5
19816    movu          [r0 + 1792 * 16],     m4
19817    pmaddubsw     m4,    m1,            m6
19818    pmulhrsw      m4,    m7
19819    pmaddubsw     m5,    m3,            m6
19820    pmulhrsw      m5,    m7
19821    packuswb      m4,    m5
19822    movu          [r0 + 1793 * 16],     m4
19823
19824    ; mode 29 [row 0]
19825    movu          m6,    [r5 + 9 * 16]
19826    pmaddubsw     m4,    m0,            m6
19827    pmulhrsw      m4,    m7
19828    pmaddubsw     m5,    m2,            m6
19829    pmulhrsw      m5,    m7
19830    packuswb      m4,    m5
19831    movu          [r0 + 1728 * 16],     m4
19832    pmaddubsw     m4,    m1,            m6
19833    pmulhrsw      m4,    m7
19834    pmaddubsw     m5,    m3,            m6
19835    pmulhrsw      m5,    m7
19836    packuswb      m4,    m5
19837    movu          [r0 + 1729 * 16],     m4
19838
19839    ; mode 29 [row 2]
19840    movu          m6,    [r5 + 27 * 16]
19841    pmaddubsw     m4,    m0,            m6
19842    pmulhrsw      m4,    m7
19843    pmaddubsw     m5,    m2,            m6
19844    pmulhrsw      m5,    m7
19845    packuswb      m4,    m5
19846    movu          [r0 + 1732 * 16],     m4
19847    pmaddubsw     m4,    m1,            m6
19848    pmulhrsw      m4,    m7
19849    pmaddubsw     m5,    m3,            m6
19850    pmulhrsw      m5,    m7
19851    packuswb      m4,    m5
19852    movu          [r0 + 1733 * 16],     m4
19853
19854    ; mode 31 [row 0]
19855    movu          m6,    [r5 + 17 * 16]
19856    pmaddubsw     m4,    m0,            m6
19857    pmulhrsw      m4,    m7
19858    pmaddubsw     m5,    m2,            m6
19859    pmulhrsw      m5,    m7
19860    packuswb      m4,    m5
19861    movu          [r0 + 1856 * 16],     m4
19862    pmaddubsw     m4,    m1,            m6
19863    pmulhrsw      m4,    m7
19864    pmaddubsw     m5,    m3,            m6
19865    pmulhrsw      m5,    m7
19866    packuswb      m4,    m5
19867    movu          [r0 + 1857 * 16],     m4
19868
19869    ; mode 32 [row 0]
19870    movu          m6,    [r5 + 21 * 16]
19871    pmaddubsw     m4,    m0,            m6
19872    pmulhrsw      m4,    m7
19873    pmaddubsw     m5,    m2,            m6
19874    pmulhrsw      m5,    m7
19875    packuswb      m4,    m5
19876    movu          [r0 + 1920 * 16],     m4
19877    pmaddubsw     m4,    m1,            m6
19878    pmulhrsw      m4,    m7
19879    pmaddubsw     m5,    m3,            m6
19880    pmulhrsw      m5,    m7
19881    packuswb      m4,    m5
19882    movu          [r0 + 1921 * 16],     m4
19883
19884    ; mode 27 [row 15]
19885    movu          m0,    [r3 + 2]
19886    movd          m1,    [r3 + 3]
19887    palignr       m1,    m0,        1
19888    punpcklbw     m0,    m1
19889    movu          m2,    [r3 + 10]
19890    movd          m3,    [r3 + 11]
19891    palignr       m3,    m2,        1
19892    punpcklbw     m2,    m3
19893    movu          m1,    [r3 + 18]
19894    movd          m3,    [r3 + 19]
19895    palignr       m3,    m1,        1
19896    punpcklbw     m1,    m3
19897    movu          m4,    [r3 + 26]
19898    movd          m5,    [r3 + 27]
19899    palignr       m5,    m4,        1
19900    punpcklbw     m4,    m5
19901
19902    pshufb        m5,    m0,            [tab_S2]
19903    movh          [r0 + 1630 * 16],     m5
19904    pshufb        m5,    m2,            [tab_S2]
19905    movh          [r0 + 1630 * 16 + 8], m5
19906    pshufb        m5,    m1,            [tab_S2]
19907    movh          [r0 + 1631 * 16],     m5
19908    pshufb        m5,    m4,            [tab_S2]
19909    movh          [r0 + 1631 * 16 + 8], m5
19910
19911    ; mode 27 [row 16]
19912    movu          m6,    [r5 + 2 * 16]
19913    pmaddubsw     m3,    m0,            m6
19914    pmulhrsw      m3,    m7
19915    pmaddubsw     m5,    m2,            m6
19916    pmulhrsw      m5,    m7
19917    packuswb      m3,    m5
19918    movu          [r0 + 1632 * 16],     m3
19919
19920    ; mode 31 [row 1 - first half]
19921    movu          [r0 + 1858 * 16],     m3
19922
19923    pmaddubsw     m3,    m1,            m6
19924    pmulhrsw      m3,    m7
19925    pmaddubsw     m5,    m4,            m6
19926    pmulhrsw      m5,    m7
19927    packuswb      m3,    m5
19928    movu          [r0 + 1633 * 16],     m3
19929
19930    ; mode 31 [row 1 - second half]
19931    movu          [r0 + 1859 * 16],     m3
19932
19933    ; mode 27 [row 17]
19934    movu          m6,    [r5 + 4 * 16]
19935    pmaddubsw     m3,    m0,            m6
19936    pmulhrsw      m3,    m7
19937    pmaddubsw     m5,    m2,            m6
19938    pmulhrsw      m5,    m7
19939    packuswb      m3,    m5
19940    movu          [r0 + 1634 * 16],     m3
19941
19942    ; mode 29 [row 3 - first half]
19943    movu          [r0 + 1734 * 16],     m3
19944
19945    pmaddubsw     m3,    m1,            m6
19946    pmulhrsw      m3,    m7
19947    pmaddubsw     m5,    m4,            m6
19948    pmulhrsw      m5,    m7
19949    packuswb      m3,    m5
19950    movu          [r0 + 1635 * 16],     m3
19951
19952    ; mode 29 [row 3 - second half]
19953    movu          [r0 + 1735 * 16],     m3
19954
19955    ; mode 27 [row 18]
19956    movu          m6,    [r5 + 6 * 16]
19957    pmaddubsw     m3,    m0,            m6
19958    pmulhrsw      m3,    m7
19959    pmaddubsw     m5,    m2,            m6
19960    pmulhrsw      m5,    m7
19961    packuswb      m3,    m5
19962    movu          [r0 + 1636 * 16],     m3
19963    pmaddubsw     m3,    m1,            m6
19964    pmulhrsw      m3,    m7
19965    pmaddubsw     m5,    m4,            m6
19966    pmulhrsw      m5,    m7
19967    packuswb      m3,    m5
19968    movu          [r0 + 1637 * 16],     m3
19969
19970    ; mode 27 [row 19]
19971    movu          m6,    [r5 + 8 * 16]
19972    pmaddubsw     m3,    m0,            m6
19973    pmulhrsw      m3,    m7
19974    pmaddubsw     m5,    m2,            m6
19975    pmulhrsw      m5,    m7
19976    packuswb      m3,    m5
19977    movu          [r0 + 1638 * 16],     m3
19978
19979    ; mode 28 [row 7 - first half]
19980    movu          [r0 + 1678 * 16],     m3
19981
19982    pmaddubsw     m3,    m1,            m6
19983    pmulhrsw      m3,    m7
19984    pmaddubsw     m5,    m4,            m6
19985    pmulhrsw      m5,    m7
19986    packuswb      m3,    m5
19987    movu          [r0 + 1639 * 16],     m3
19988
19989    ; mode 28 [row 7 - second half]
19990    movu          [r0 + 1679 * 16],     m3
19991
19992    ; mode 27 [row 20]
19993    movu          m6,    [r5 + 10 * 16]
19994    pmaddubsw     m3,    m0,            m6
19995    pmulhrsw      m3,    m7
19996    pmaddubsw     m5,    m2,            m6
19997    pmulhrsw      m5,    m7
19998    packuswb      m3,    m5
19999    movu          [r0 + 1640 * 16],     m3
20000
20001    ; mode 32 [row 1 - first half]
20002    movu          [r0 + 1922 * 16],     m3
20003
20004    pmaddubsw     m3,    m1,            m6
20005    pmulhrsw      m3,    m7
20006    pmaddubsw     m5,    m4,            m6
20007    pmulhrsw      m5,    m7
20008    packuswb      m3,    m5
20009    movu          [r0 + 1641 * 16],     m3
20010
20011    ; mode 32 [row 1 - second half]
20012    movu          [r0 + 1923 * 16],     m3
20013
20014    ; mode 27 [row 21]
20015    movu          m6,    [r5 + 12 * 16]
20016    pmaddubsw     m3,    m0,            m6
20017    pmulhrsw      m3,    m7
20018    pmaddubsw     m5,    m2,            m6
20019    pmulhrsw      m5,    m7
20020    packuswb      m3,    m5
20021    movu          [r0 + 1642 * 16],     m3
20022    pmaddubsw     m3,    m1,            m6
20023    pmulhrsw      m3,    m7
20024    pmaddubsw     m5,    m4,            m6
20025    pmulhrsw      m5,    m7
20026    packuswb      m3,    m5
20027    movu          [r0 + 1643 * 16],     m3
20028
20029    ; mode 27 [row 22]
20030    movu          m6,    [r5 + 14 * 16]
20031    pmaddubsw     m3,    m0,            m6
20032    pmulhrsw      m3,    m7
20033    pmaddubsw     m5,    m2,            m6
20034    pmulhrsw      m5,    m7
20035    packuswb      m3,    m5
20036    movu          [r0 + 1644 * 16],     m3
20037    pmaddubsw     m3,    m1,            m6
20038    pmulhrsw      m3,    m7
20039    pmaddubsw     m5,    m4,            m6
20040    pmulhrsw      m5,    m7
20041    packuswb      m3,    m5
20042    movu          [r0 + 1645 * 16],     m3
20043
20044    ; mode 27 [row 23]
20045    movu          m6,    [r5 + 16 * 16]
20046    pmaddubsw     m3,    m0,            m6
20047    pmulhrsw      m3,    m7
20048    pmaddubsw     m5,    m2,            m6
20049    pmulhrsw      m5,    m7
20050    packuswb      m3,    m5
20051    movu          [r0 + 1646 * 16],     m3
20052    pmaddubsw     m3,    m1,            m6
20053    pmulhrsw      m3,    m7
20054    pmaddubsw     m5,    m4,            m6
20055    pmulhrsw      m5,    m7
20056    packuswb      m3,    m5
20057    movu          [r0 + 1647 * 16],     m3
20058
20059    ; mode 27 [row 24]
20060    movu          m6,    [r5 + 18 * 16]
20061    pmaddubsw     m3,    m0,            m6
20062    pmulhrsw      m3,    m7
20063    pmaddubsw     m5,    m2,            m6
20064    pmulhrsw      m5,    m7
20065    packuswb      m3,    m5
20066    movu          [r0 + 1648 * 16],     m3
20067
20068    ; mode 28 [row 9 - first half]
20069    movu          [r0 + 1682 * 16],     m3
20070
20071    pmaddubsw     m3,    m1,            m6
20072    pmulhrsw      m3,    m7
20073    pmaddubsw     m5,    m4,            m6
20074    pmulhrsw      m5,    m7
20075    packuswb      m3,    m5
20076    movu          [r0 + 1649 * 16],     m3
20077
20078    ; mode 28 [row 9 - second half]
20079    movu          [r0 + 1683 * 16],     m3
20080
20081    ; mode 27 [row 25]
20082    movu          m6,    [r5 + 20 * 16]
20083    pmaddubsw     m3,    m0,            m6
20084    pmulhrsw      m3,    m7
20085    pmaddubsw     m5,    m2,            m6
20086    pmulhrsw      m5,    m7
20087    packuswb      m3,    m5
20088    movu          [r0 + 1650 * 16],     m3
20089
20090    ; mode 30 [row 3 - first half]
20091    movu          [r0 + 1798 * 16],     m3
20092
20093    ; mode 33 [row 1 - first half]
20094    movu          [r0 + 1986 * 16],     m3
20095
20096    pmaddubsw     m3,    m1,            m6
20097    pmulhrsw      m3,    m7
20098    pmaddubsw     m5,    m4,            m6
20099    pmulhrsw      m5,    m7
20100    packuswb      m3,    m5
20101    movu          [r0 + 1651 * 16],     m3
20102
20103    ; mode 30 [row 3 - second half]
20104    movu          [r0 + 1799 * 16],     m3
20105
20106    ; mode 33 [row 1 - second half]
20107    movu          [r0 + 1987 * 16],     m3
20108
20109    ; mode 27 [row 26]
20110    movu          m6,    [r5 + 22 * 16]
20111    pmaddubsw     m3,    m0,            m6
20112    pmulhrsw      m3,    m7
20113    pmaddubsw     m5,    m2,            m6
20114    pmulhrsw      m5,    m7
20115    packuswb      m3,    m5
20116    movu          [r0 + 1652 * 16],     m3
20117
20118    ; mode 29 [row 5 - first half]
20119    movu          [r0 + 1738 * 16],     m3
20120
20121    pmaddubsw     m3,    m1,            m6
20122    pmulhrsw      m3,    m7
20123    pmaddubsw     m5,    m4,            m6
20124    pmulhrsw      m5,    m7
20125    packuswb      m3,    m5
20126    movu          [r0 + 1653 * 16],     m3
20127
20128    ; mode 29 [row 5 - second half]
20129    movu          [r0 + 1739 * 16],     m3
20130
20131    ; mode 27 [row 27]
20132    movu          m6,    [r5 + 24 * 16]
20133    pmaddubsw     m3,    m0,            m6
20134    pmulhrsw      m3,    m7
20135    pmaddubsw     m5,    m2,            m6
20136    pmulhrsw      m5,    m7
20137    packuswb      m3,    m5
20138    movu          [r0 + 1654 * 16],     m3
20139    pmaddubsw     m3,    m1,            m6
20140    pmulhrsw      m3,    m7
20141    pmaddubsw     m5,    m4,            m6
20142    pmulhrsw      m5,    m7
20143    packuswb      m3,    m5
20144    movu          [r0 + 1655 * 16],     m3
20145
20146    ; mode 27 [row 28]
20147    movu          m6,    [r5 + 26 * 16]
20148    pmaddubsw     m3,    m0,            m6
20149    pmulhrsw      m3,    m7
20150    pmaddubsw     m5,    m2,            m6
20151    pmulhrsw      m5,    m7
20152    packuswb      m3,    m5
20153    movu          [r0 + 1656 * 16],     m3
20154    pmaddubsw     m3,    m1,            m6
20155    pmulhrsw      m3,    m7
20156    pmaddubsw     m5,    m4,            m6
20157    pmulhrsw      m5,    m7
20158    packuswb      m3,    m5
20159    movu          [r0 + 1657 * 16],     m3
20160
20161    ; mode 27 [row 29]
20162    movu          m6,    [r5 + 28 * 16]
20163    pmaddubsw     m3,    m0,            m6
20164    pmulhrsw      m3,    m7
20165    pmaddubsw     m5,    m2,            m6
20166    pmulhrsw      m5,    m7
20167    packuswb      m3,    m5
20168    movu          [r0 + 1658 * 16],     m3
20169
20170    ; mode 28 [row 11 - first half]
20171    movu          [r0 + 1686 * 16],     m3
20172
20173    pmaddubsw     m3,    m1,            m6
20174    pmulhrsw      m3,    m7
20175    pmaddubsw     m5,    m4,            m6
20176    pmulhrsw      m5,    m7
20177    packuswb      m3,    m5
20178    movu          [r0 + 1659 * 16],     m3
20179
20180    ; mode 28 [row 11 - second half]
20181    movu          [r0 + 1687 * 16],     m3
20182
20183    ; mode 27 [row 30]
20184    movu          m6,    [r5 + 30 * 16]
20185    pmaddubsw     m3,    m0,            m6
20186    pmulhrsw      m3,    m7
20187    pmaddubsw     m5,    m2,            m6
20188    pmulhrsw      m5,    m7
20189    packuswb      m3,    m5
20190    movu          [r0 + 1660 * 16],     m3
20191    pmaddubsw     m3,    m1,            m6
20192    pmulhrsw      m3,    m7
20193    pmaddubsw     m5,    m4,            m6
20194    pmulhrsw      m5,    m7
20195    packuswb      m3,    m5
20196    movu          [r0 + 1661 * 16],     m3
20197
20198    ; mode 28 [row 6]
20199    movu          m6,    [r5 + 3 * 16]
20200    pmaddubsw     m3,    m0,            m6
20201    pmulhrsw      m3,    m7
20202    pmaddubsw     m5,    m2,            m6
20203    pmulhrsw      m5,    m7
20204    packuswb      m3,    m5
20205    movu          [r0 + 1676 * 16],     m3
20206    pmaddubsw     m3,    m1,            m6
20207    pmulhrsw      m3,    m7
20208    pmaddubsw     m5,    m4,            m6
20209    pmulhrsw      m5,    m7
20210    packuswb      m3,    m5
20211    movu          [r0 + 1677 * 16],     m3
20212
20213    ; mode 28 [row 8]
20214    movu          m6,    [r5 + 13 * 16]
20215    pmaddubsw     m3,    m0,            m6
20216    pmulhrsw      m3,    m7
20217    pmaddubsw     m5,    m2,            m6
20218    pmulhrsw      m5,    m7
20219    packuswb      m3,    m5
20220    movu          [r0 + 1680 * 16],     m3
20221
20222    ; mode 29 [row 4 - first half]
20223    movu          [r0 + 1736 * 16],     m3
20224
20225    pmaddubsw     m3,    m1,            m6
20226    pmulhrsw      m3,    m7
20227    pmaddubsw     m5,    m4,            m6
20228    pmulhrsw      m5,    m7
20229    packuswb      m3,    m5
20230    movu          [r0 + 1681 * 16],     m3
20231
20232    ; mode 29 [row 4 - second half]
20233    movu          [r0 + 1737 * 16],     m3
20234
20235    ; mode 28 [row 10]
20236    movu          m6,    [r5 + 23 * 16]
20237    pmaddubsw     m3,    m0,            m6
20238    pmulhrsw      m3,    m7
20239    pmaddubsw     m5,    m2,            m6
20240    pmulhrsw      m5,    m7
20241    packuswb      m3,    m5
20242    movu          [r0 + 1684 * 16],     m3
20243    pmaddubsw     m3,    m1,            m6
20244    pmulhrsw      m3,    m7
20245    pmaddubsw     m5,    m4,            m6
20246    pmulhrsw      m5,    m7
20247    packuswb      m3,    m5
20248    movu          [r0 + 1685 * 16],     m3
20249
20250    ; mode 29 [row 6]
20251    movu          m6,    [r5 + 31 * 16]
20252    pmaddubsw     m3,    m0,            m6
20253    pmulhrsw      m3,    m7
20254    pmaddubsw     m5,    m2,            m6
20255    pmulhrsw      m5,    m7
20256    packuswb      m3,    m5
20257    movu          [r0 + 1740 * 16],     m3
20258
20259    ; mode 32 [row 2 - first half]
20260    movu          [r0 + 1924 * 16],     m3
20261
20262    pmaddubsw     m3,    m1,            m6
20263    pmulhrsw      m3,    m7
20264    pmaddubsw     m5,    m4,            m6
20265    pmulhrsw      m5,    m7
20266    packuswb      m3,    m5
20267    movu          [r0 + 1741 * 16],     m3
20268
20269    ; mode 32 [row 2 - second half]
20270    movu          [r0 + 1925 * 16],     m3
20271
20272    ; mode 30 [row 2]
20273    movu          m6,    [r5 + 7 * 16]
20274    pmaddubsw     m3,    m0,            m6
20275    pmulhrsw      m3,    m7
20276    pmaddubsw     m5,    m2,            m6
20277    pmulhrsw      m5,    m7
20278    packuswb      m3,    m5
20279    movu          [r0 + 1796 * 16],     m3
20280    pmaddubsw     m3,    m1,            m6
20281    pmulhrsw      m3,    m7
20282    pmaddubsw     m5,    m4,            m6
20283    pmulhrsw      m5,    m7
20284    packuswb      m3,    m5
20285    movu          [r0 + 1797 * 16],     m3
20286
20287    ; mode 31 [row 2]
20288    movu          m6,    [r5 + 19 * 16]
20289    pmaddubsw     m3,    m0,            m6
20290    pmulhrsw      m3,    m7
20291    pmaddubsw     m5,    m2,            m6
20292    pmulhrsw      m5,    m7
20293    packuswb      m3,    m5
20294    movu          [r0 + 1860 * 16],     m3
20295    pmaddubsw     m3,    m1,            m6
20296    pmulhrsw      m3,    m7
20297    pmaddubsw     m5,    m4,            m6
20298    pmulhrsw      m5,    m7
20299    packuswb      m3,    m5
20300    movu          [r0 + 1861 * 16],     m3
20301
20302    ; mode 27 [row 15]
20303    movu          m0,    [r3 + 3]
20304    movd          m1,    [r3 + 4]
20305    palignr       m1,    m0,        1
20306    punpcklbw     m0,    m1
20307    movu          m2,    [r3 + 11]
20308    movd          m3,    [r3 + 12]
20309    palignr       m3,    m2,        1
20310    punpcklbw     m2,    m3
20311    movu          m1,    [r3 + 19]
20312    movd          m3,    [r3 + 20]
20313    palignr       m3,    m1,        1
20314    punpcklbw     m1,    m3
20315    movu          m4,    [r3 + 27]
20316    movd          m5,    [r3 + 28]
20317    palignr       m5,    m4,        1
20318    punpcklbw     m4,    m5
20319
20320    pshufb        m5,    m0,            [tab_S2]
20321    movh          [r0 + 1662 * 16],     m5
20322    pshufb        m5,    m2,            [tab_S2]
20323    movh          [r0 + 1662 * 16 + 8], m5
20324    pshufb        m5,    m1,            [tab_S2]
20325    movh          [r0 + 1663 * 16],     m5
20326    pshufb        m5,    m4,            [tab_S2]
20327    movh          [r0 + 1663 * 16 + 8], m5
20328
20329    ; mode 28 [row 12]
20330    movu          m6,    [r5 + 1 * 16]
20331    pmaddubsw     m3,    m0,            m6
20332    pmulhrsw      m3,    m7
20333    pmaddubsw     m5,    m2,            m6
20334    pmulhrsw      m5,    m7
20335    packuswb      m3,    m5
20336    movu          [r0 + 1688 * 16],     m3
20337
20338    ; mode 30 [row 4 - first half]
20339    movu          [r0 + 1800 * 16],     m3
20340
20341    pmaddubsw     m3,    m1,            m6
20342    pmulhrsw      m3,    m7
20343    pmaddubsw     m5,    m4,            m6
20344    pmulhrsw      m5,    m7
20345    packuswb      m3,    m5
20346    movu          [r0 + 1689 * 16],     m3
20347
20348    ; mode 30 [row 4 - second half]
20349    movu          [r0 + 1801 * 16],     m3
20350
20351    ; mode 28 [row 13]
20352    movu          m6,    [r5 + 6 * 16]
20353    pmaddubsw     m3,    m0,            m6
20354    pmulhrsw      m3,    m7
20355    pmaddubsw     m5,    m2,            m6
20356    pmulhrsw      m5,    m7
20357    packuswb      m3,    m5
20358    movu          [r0 + 1690 * 16],     m3
20359    pmaddubsw     m3,    m1,            m6
20360    pmulhrsw      m3,    m7
20361    pmaddubsw     m5,    m4,            m6
20362    pmulhrsw      m5,    m7
20363    packuswb      m3,    m5
20364    movu          [r0 + 1691 * 16],     m3
20365
20366    ; mode 28 [row 14]
20367    movu          m6,    [r5 + 11 * 16]
20368    pmaddubsw     m3,    m0,            m6
20369    pmulhrsw      m3,    m7
20370    pmaddubsw     m5,    m2,            m6
20371    pmulhrsw      m5,    m7
20372    packuswb      m3,    m5
20373    movu          [r0 + 1692 * 16],     m3
20374    pmaddubsw     m3,    m1,            m6
20375    pmulhrsw      m3,    m7
20376    pmaddubsw     m5,    m4,            m6
20377    pmulhrsw      m5,    m7
20378    packuswb      m3,    m5
20379    movu          [r0 + 1693 * 16],     m3
20380
20381    ; mode 28 [row 15]
20382    movu          m6,    [r5 + 16 * 16]
20383    pmaddubsw     m3,    m0,            m6
20384    pmulhrsw      m3,    m7
20385    pmaddubsw     m5,    m2,            m6
20386    pmulhrsw      m5,    m7
20387    packuswb      m3,    m5
20388    movu          [r0 + 1694 * 16],     m3
20389    pmaddubsw     m3,    m1,            m6
20390    pmulhrsw      m3,    m7
20391    pmaddubsw     m5,    m4,            m6
20392    pmulhrsw      m5,    m7
20393    packuswb      m3,    m5
20394    movu          [r0 + 1695 * 16],     m3
20395
20396    ; mode 28 [row 16]
20397    movu          m6,    [r5 + 21 * 16]
20398    pmaddubsw     m3,    m0,            m6
20399    pmulhrsw      m3,    m7
20400    pmaddubsw     m5,    m2,            m6
20401    pmulhrsw      m5,    m7
20402    packuswb      m3,    m5
20403    movu          [r0 + 1696 * 16],     m3
20404
20405    ; mode 31 [row 4 - first half]
20406    movu          [r0 + 1864 * 16],     m3
20407
20408    pmaddubsw     m3,    m1,            m6
20409    pmulhrsw      m3,    m7
20410    pmaddubsw     m5,    m4,            m6
20411    pmulhrsw      m5,    m7
20412    packuswb      m3,    m5
20413    movu          [r0 + 1697 * 16],     m3
20414
20415    ; mode 31 [row 4 - second half]
20416    movu          [r0 + 1865 * 16],     m3
20417
20418    ; mode 28 [row 17]
20419    movu          m6,    [r5 + 26 * 16]
20420    pmaddubsw     m3,    m0,            m6
20421    pmulhrsw      m3,    m7
20422    pmaddubsw     m5,    m2,            m6
20423    pmulhrsw      m5,    m7
20424    packuswb      m3,    m5
20425    movu          [r0 + 1698 * 16],     m3
20426
20427    ; mode 29 [row 9 - first half]
20428    movu          [r0 + 1746 * 16],     m3
20429
20430    pmaddubsw     m3,    m1,            m6
20431    pmulhrsw      m3,    m7
20432    pmaddubsw     m5,    m4,            m6
20433    pmulhrsw      m5,    m7
20434    packuswb      m3,    m5
20435    movu          [r0 + 1699 * 16],     m3
20436
20437    ; mode 29 [row 9 - second half]
20438    movu          [r0 + 1747 * 16],     m3
20439
20440    ; mode 28 [row 18]
20441    movu          m6,    [r5 + 31 * 16]
20442    pmaddubsw     m3,    m0,            m6
20443    pmulhrsw      m3,    m7
20444    pmaddubsw     m5,    m2,            m6
20445    pmulhrsw      m5,    m7
20446    packuswb      m3,    m5
20447    movu          [r0 + 1700 * 16],     m3
20448    pmaddubsw     m3,    m1,            m6
20449    pmulhrsw      m3,    m7
20450    pmaddubsw     m5,    m4,            m6
20451    pmulhrsw      m5,    m7
20452    packuswb      m3,    m5
20453    movu          [r0 + 1701 * 16],     m3
20454
20455    ; mode 29 [row 7]
20456    movu          m6,    [r5 + 8 * 16]
20457    pmaddubsw     m3,    m0,            m6
20458    pmulhrsw      m3,    m7
20459    pmaddubsw     m5,    m2,            m6
20460    pmulhrsw      m5,    m7
20461    packuswb      m3,    m5
20462    movu          [r0 + 1742 * 16],     m3
20463    pmaddubsw     m3,    m1,            m6
20464    pmulhrsw      m3,    m7
20465    pmaddubsw     m5,    m4,            m6
20466    pmulhrsw      m5,    m7
20467    packuswb      m3,    m5
20468    movu          [r0 + 1743 * 16],     m3
20469
20470    ; mode 29 [row 8]
20471    movu          m6,    [r5 + 17 * 16]
20472    pmaddubsw     m3,    m0,            m6
20473    pmulhrsw      m3,    m7
20474    pmaddubsw     m5,    m2,            m6
20475    pmulhrsw      m5,    m7
20476    packuswb      m3,    m5
20477    movu          [r0 + 1744 * 16],     m3
20478    pmaddubsw     m3,    m1,            m6
20479    pmulhrsw      m3,    m7
20480    pmaddubsw     m5,    m4,            m6
20481    pmulhrsw      m5,    m7
20482    packuswb      m3,    m5
20483    movu          [r0 + 1745 * 16],     m3
20484
20485    ; mode 30 [row 5]
20486    movu          m6,    [r5 + 14 * 16]
20487    pmaddubsw     m3,    m0,            m6
20488    pmulhrsw      m3,    m7
20489    pmaddubsw     m5,    m2,            m6
20490    pmulhrsw      m5,    m7
20491    packuswb      m3,    m5
20492    movu          [r0 + 1802 * 16],     m3
20493
20494    ; mode 33 [row 2 - first half]
20495    movu          [r0 + 1988 * 16],     m3
20496
20497    pmaddubsw     m3,    m1,            m6
20498    pmulhrsw      m3,    m7
20499    pmaddubsw     m5,    m4,            m6
20500    pmulhrsw      m5,    m7
20501    packuswb      m3,    m5
20502    movu          [r0 + 1803 * 16],     m3
20503
20504    ; mode 33 [row 2 - second half]
20505    movu          [r0 + 1989 * 16],     m3
20506
20507    ; mode 30 [row 6]
20508    movu          m6,    [r5 + 27 * 16]
20509    pmaddubsw     m3,    m0,            m6
20510    pmulhrsw      m3,    m7
20511    pmaddubsw     m5,    m2,            m6
20512    pmulhrsw      m5,    m7
20513    packuswb      m3,    m5
20514    movu          [r0 + 1804 * 16],     m3
20515    pmaddubsw     m3,    m1,            m6
20516    pmulhrsw      m3,    m7
20517    pmaddubsw     m5,    m4,            m6
20518    pmulhrsw      m5,    m7
20519    packuswb      m3,    m5
20520    movu          [r0 + 1805 * 16],     m3
20521
20522    ; mode 31 [row 3]
20523    movu          m6,    [r5 + 4 * 16]
20524    pmaddubsw     m3,    m0,            m6
20525    pmulhrsw      m3,    m7
20526    pmaddubsw     m5,    m2,            m6
20527    pmulhrsw      m5,    m7
20528    packuswb      m3,    m5
20529    movu          [r0 + 1862 * 16],     m3
20530    pmaddubsw     m3,    m1,            m6
20531    pmulhrsw      m3,    m7
20532    pmaddubsw     m5,    m4,            m6
20533    pmulhrsw      m5,    m7
20534    packuswb      m3,    m5
20535    movu          [r0 + 1863 * 16],     m3
20536
20537    ; mode 32 [row 3]
20538    movu          m6,    [r5 + 20 * 16]
20539    pmaddubsw     m3,    m0,            m6
20540    pmulhrsw      m3,    m7
20541    pmaddubsw     m5,    m2,            m6
20542    pmulhrsw      m5,    m7
20543    packuswb      m3,    m5
20544    movu          [r0 + 1926 * 16],     m3
20545    pmaddubsw     m3,    m1,            m6
20546    pmulhrsw      m3,    m7
20547    pmaddubsw     m5,    m4,            m6
20548    pmulhrsw      m5,    m7
20549    packuswb      m3,    m5
20550    movu          [r0 + 1927 * 16],     m3
20551
20552    ; mode 28 [row 19]
20553    movu          m6,    [r5 + 4 * 16]
20554    movu          m0,    [r3 + 4]
20555    movd          m1,    [r3 + 5]
20556    palignr       m1,    m0,        1
20557    punpcklbw     m0,    m1
20558    pmaddubsw     m3,    m0,            m6
20559    pmulhrsw      m3,    m7
20560    movu          m2,    [r3 + 12]
20561    movd          m4,    [r3 + 13]
20562    palignr       m4,    m2,        1
20563    punpcklbw     m2,    m4
20564    pmaddubsw     m5,    m2,            m6
20565    pmulhrsw      m5,    m7
20566    packuswb      m3,    m5
20567    movu          [r0 + 1702 * 16],     m3
20568
20569    movu          m1,    [r3 + 20]
20570    movd          m3,    [r3 + 21]
20571    palignr       m3,    m1,        1
20572    punpcklbw     m1,    m3
20573    pmaddubsw     m3,    m1,            m6
20574    pmulhrsw      m3,    m7
20575    movu          m4,    [r3 + 28]
20576    movd          m5,    [r3 + 29]
20577    palignr       m5,    m4,        1
20578    punpcklbw     m4,    m5
20579    pmaddubsw     m5,    m4,            m6
20580    pmulhrsw      m5,    m7
20581    packuswb      m3,    m5
20582    movu          [r0 + 1703 * 16],     m3
20583
20584    ; mode 28 [row 20]
20585    movu          m6,    [r5 + 9 * 16]
20586    pmaddubsw     m3,    m0,            m6
20587    pmulhrsw      m3,    m7
20588    pmaddubsw     m5,    m2,            m6
20589    pmulhrsw      m5,    m7
20590    packuswb      m3,    m5
20591    movu          [r0 + 1704 * 16],     m3
20592
20593    ; mode 32 [row 4 - first half]
20594    movu          [r0 + 1928 * 16],     m3
20595
20596    pmaddubsw     m3,    m1,            m6
20597    pmulhrsw      m3,    m7
20598    pmaddubsw     m5,    m4,            m6
20599    pmulhrsw      m5,    m7
20600    packuswb      m3,    m5
20601    movu          [r0 + 1705 * 16],     m3
20602
20603    ; mode 32 [row 4 - second half]
20604    movu          [r0 + 1929 * 16],     m3
20605
20606    ; mode 28 [row 21]
20607    movu          m6,    [r5 + 14 * 16]
20608    pmaddubsw     m3,    m0,            m6
20609    pmulhrsw      m3,    m7
20610    pmaddubsw     m5,    m2,            m6
20611    pmulhrsw      m5,    m7
20612    packuswb      m3,    m5
20613    movu          [r0 + 1706 * 16],     m3
20614    pmaddubsw     m3,    m1,            m6
20615    pmulhrsw      m3,    m7
20616    pmaddubsw     m5,    m4,            m6
20617    pmulhrsw      m5,    m7
20618    packuswb      m3,    m5
20619    movu          [r0 + 1707 * 16],     m3
20620
20621    ; mode 28 [row 22]
20622    movu          m6,    [r5 + 19 * 16]
20623    pmaddubsw     m3,    m0,            m6
20624    pmulhrsw      m3,    m7
20625    pmaddubsw     m5,    m2,            m6
20626    pmulhrsw      m5,    m7
20627    packuswb      m3,    m5
20628    movu          [r0 + 1708 * 16],     m3
20629    pmaddubsw     m3,    m1,            m6
20630    pmulhrsw      m3,    m7
20631    pmaddubsw     m5,    m4,            m6
20632    pmulhrsw      m5,    m7
20633    packuswb      m3,    m5
20634    movu          [r0 + 1709 * 16],     m3
20635
20636    ; mode 28 [row 23]
20637    movu          m6,    [r5 + 24 * 16]
20638    pmaddubsw     m3,    m0,            m6
20639    pmulhrsw      m3,    m7
20640    pmaddubsw     m5,    m2,            m6
20641    pmulhrsw      m5,    m7
20642    packuswb      m3,    m5
20643    movu          [r0 + 1710 * 16],     m3
20644    pmaddubsw     m3,    m1,            m6
20645    pmulhrsw      m3,    m7
20646    pmaddubsw     m5,    m4,            m6
20647    pmulhrsw      m5,    m7
20648    packuswb      m3,    m5
20649    movu          [r0 + 1711 * 16],     m3
20650
20651    ; mode 28 [row 24]
20652    movu          m6,    [r5 + 29 * 16]
20653    pmaddubsw     m3,    m0,            m6
20654    pmulhrsw      m3,    m7
20655    pmaddubsw     m5,    m2,            m6
20656    pmulhrsw      m5,    m7
20657    packuswb      m3,    m5
20658    movu          [r0 + 1712 * 16],     m3
20659    pmaddubsw     m3,    m1,            m6
20660    pmulhrsw      m3,    m7
20661    pmaddubsw     m5,    m4,            m6
20662    pmulhrsw      m5,    m7
20663    packuswb      m3,    m5
20664    movu          [r0 + 1713 * 16],     m3
20665
20666    ; mode 29 [row 10]
20667    movu          m6,    [r5 + 3 * 16]
20668    pmaddubsw     m3,    m0,            m6
20669    pmulhrsw      m3,    m7
20670    pmaddubsw     m5,    m2,            m6
20671    pmulhrsw      m5,    m7
20672    packuswb      m3,    m5
20673    movu          [r0 + 1748 * 16],     m3
20674    pmaddubsw     m3,    m1,            m6
20675    pmulhrsw      m3,    m7
20676    pmaddubsw     m5,    m4,            m6
20677    pmulhrsw      m5,    m7
20678    packuswb      m3,    m5
20679    movu          [r0 + 1749 * 16],     m3
20680
20681    ; mode 29 [row 11]
20682    movu          m6,    [r5 + 12 * 16]
20683    pmaddubsw     m3,    m0,            m6
20684    pmulhrsw      m3,    m7
20685    pmaddubsw     m5,    m2,            m6
20686    pmulhrsw      m5,    m7
20687    packuswb      m3,    m5
20688    movu          [r0 + 1750 * 16],     m3
20689    pmaddubsw     m3,    m1,            m6
20690    pmulhrsw      m3,    m7
20691    pmaddubsw     m5,    m4,            m6
20692    pmulhrsw      m5,    m7
20693    packuswb      m3,    m5
20694    movu          [r0 + 1751 * 16],     m3
20695
20696    ; mode 29 [row 12]
20697    movu          m6,    [r5 + 21 * 16]
20698    pmaddubsw     m3,    m0,            m6
20699    pmulhrsw      m3,    m7
20700    pmaddubsw     m5,    m2,            m6
20701    pmulhrsw      m5,    m7
20702    packuswb      m3,    m5
20703    movu          [r0 + 1752 * 16],     m3
20704
20705    ; mode 30 [row 8 -first half]
20706    movu          [r0 + 1808 * 16],     m3
20707
20708    pmaddubsw     m3,    m1,            m6
20709    pmulhrsw      m3,    m7
20710    pmaddubsw     m5,    m4,            m6
20711    pmulhrsw      m5,    m7
20712    packuswb      m3,    m5
20713    movu          [r0 + 1753 * 16],     m3
20714
20715    ; mode 30 [row 8 -second half]
20716    movu          [r0 + 1809 * 16],     m3
20717
20718    ; mode 29 [row 13]
20719    movu          m6,    [r5 + 30 * 16]
20720    pmaddubsw     m3,    m0,            m6
20721    pmulhrsw      m3,    m7
20722    pmaddubsw     m5,    m2,            m6
20723    pmulhrsw      m5,    m7
20724    packuswb      m3,    m5
20725    movu          [r0 + 1754 * 16],     m3
20726
20727    ; mode 32 [row 5 - first half]
20728    movu          [r0 + 1930 * 16],     m3
20729
20730    pmaddubsw     m3,    m1,            m6
20731    pmulhrsw      m3,    m7
20732    pmaddubsw     m5,    m4,            m6
20733    pmulhrsw      m5,    m7
20734    packuswb      m3,    m5
20735    movu          [r0 + 1755 * 16],     m3
20736
20737    ; mode 32 [row 5 - second half]
20738    movu          [r0 + 1931 * 16],     m3
20739
20740    ; mode 30 [row 7]
20741    movu          m6,    [r5 + 8 * 16]
20742    pmaddubsw     m3,    m0,            m6
20743    pmulhrsw      m3,    m7
20744    pmaddubsw     m5,    m2,            m6
20745    pmulhrsw      m5,    m7
20746    packuswb      m3,    m5
20747    movu          [r0 + 1806 * 16],     m3
20748
20749    ; mode 33 [row 3 - first half]
20750    movu          [r0 + 1990 * 16],     m3
20751
20752    pmaddubsw     m3,    m1,            m6
20753    pmulhrsw      m3,    m7
20754    pmaddubsw     m5,    m4,            m6
20755    pmulhrsw      m5,    m7
20756    packuswb      m3,    m5
20757    movu          [r0 + 1807 * 16],     m3
20758
20759    ; mode 33 [row 3 - second half]
20760    movu          [r0 + 1991 * 16],     m3
20761
20762    ; mode 31 [row 5]
20763    movu          m6,    [r5 + 6 * 16]
20764    pmaddubsw     m3,    m0,            m6
20765    pmulhrsw      m3,    m7
20766    pmaddubsw     m5,    m2,            m6
20767    pmulhrsw      m5,    m7
20768    packuswb      m3,    m5
20769    movu          [r0 + 1866 * 16],     m3
20770    pmaddubsw     m3,    m1,            m6
20771    pmulhrsw      m3,    m7
20772    pmaddubsw     m5,    m4,            m6
20773    pmulhrsw      m5,    m7
20774    packuswb      m3,    m5
20775    movu          [r0 + 1867 * 16],     m3
20776
20777    ; mode 31 [row 6]
20778    movu          m6,    [r5 + 23 * 16]
20779    pmaddubsw     m3,    m0,            m6
20780    pmulhrsw      m3,    m7
20781    pmaddubsw     m5,    m2,            m6
20782    pmulhrsw      m5,    m7
20783    packuswb      m3,    m5
20784    movu          [r0 + 1868 * 16],     m3
20785    pmaddubsw     m3,    m1,            m6
20786    pmulhrsw      m3,    m7
20787    pmaddubsw     m5,    m4,            m6
20788    pmulhrsw      m5,    m7
20789    packuswb      m3,    m5
20790    movu          [r0 + 1869 * 16],     m3
20791
20792    ; mode 28 [row 25]
20793    movu          m6,    [r5 + 2 * 16]
20794    movu          m0,    [r3 + 5]
20795    movd          m1,    [r3 + 6]
20796    palignr       m1,    m0,        1
20797    punpcklbw     m0,    m1
20798    pmaddubsw     m3,    m0,            m6
20799    pmulhrsw      m3,    m7
20800    movu          m2,    [r3 + 13]
20801    movd          m4,    [r3 + 14]
20802    palignr       m4,    m2,        1
20803    punpcklbw     m2,    m4
20804    pmaddubsw     m5,    m2,            m6
20805    pmulhrsw      m5,    m7
20806    packuswb      m3,    m5
20807    movu          [r0 + 1714 * 16],     m3
20808
20809    movu          m1,    [r3 + 21]
20810    movd          m3,    [r3 + 22]
20811    palignr       m3,    m1,        1
20812    punpcklbw     m1,    m3
20813    pmaddubsw     m3,    m1,            m6
20814    pmulhrsw      m3,    m7
20815    movu          m4,    [r3 + 29]
20816    movd          m5,    [r3 + 30]
20817    palignr       m5,    m4,        1
20818    punpcklbw     m4,    m5
20819    pmaddubsw     m5,    m4,            m6
20820    pmulhrsw      m5,    m7
20821    packuswb      m3,    m5
20822    movu          [r0 + 1715 * 16],     m3
20823
20824    ; mode 28 [row 26]
20825    movu          m6,    [r5 + 7 * 16]
20826    pmaddubsw     m3,    m0,            m6
20827    pmulhrsw      m3,    m7
20828    pmaddubsw     m5,    m2,            m6
20829    pmulhrsw      m5,    m7
20830    packuswb      m3,    m5
20831    movu          [r0 + 1716 * 16],     m3
20832
20833    ; mode 29 [row 14 - first half]
20834    movu          [r0 + 1756 * 16],     m3
20835
20836    pmaddubsw     m3,    m1,            m6
20837    pmulhrsw      m3,    m7
20838    pmaddubsw     m5,    m4,            m6
20839    pmulhrsw      m5,    m7
20840    packuswb      m3,    m5
20841    movu          [r0 + 1717 * 16],     m3
20842
20843    ; mode 29 [row 14 - second half]
20844    movu          [r0 + 1757 * 16],     m3
20845
20846    ; mode 28 [row 27]
20847    movu          m6,    [r5 + 12 * 16]
20848    pmaddubsw     m3,    m0,            m6
20849    pmulhrsw      m3,    m7
20850    pmaddubsw     m5,    m2,            m6
20851    pmulhrsw      m5,    m7
20852    packuswb      m3,    m5
20853    movu          [r0 + 1718 * 16],     m3
20854    pmaddubsw     m3,    m1,            m6
20855    pmulhrsw      m3,    m7
20856    pmaddubsw     m5,    m4,            m6
20857    pmulhrsw      m5,    m7
20858    packuswb      m3,    m5
20859    movu          [r0 + 1719 * 16],     m3
20860
20861    ; mode 28 [row 28]
20862    movu          m6,    [r5 + 17 * 16]
20863    pmaddubsw     m3,    m0,            m6
20864    pmulhrsw      m3,    m7
20865    pmaddubsw     m5,    m2,            m6
20866    pmulhrsw      m5,    m7
20867    packuswb      m3,    m5
20868    movu          [r0 + 1720 * 16],     m3
20869    pmaddubsw     m3,    m1,            m6
20870    pmulhrsw      m3,    m7
20871    pmaddubsw     m5,    m4,            m6
20872    pmulhrsw      m5,    m7
20873    packuswb      m3,    m5
20874    movu          [r0 + 1721 * 16],     m3
20875
20876    ; mode 28 [row 29]
20877    movu          m6,    [r5 + 22 * 16]
20878    pmaddubsw     m3,    m0,            m6
20879    pmulhrsw      m3,    m7
20880    pmaddubsw     m5,    m2,            m6
20881    pmulhrsw      m5,    m7
20882    packuswb      m3,    m5
20883    movu          [r0 + 1722 * 16],     m3
20884    pmaddubsw     m3,    m1,            m6
20885    pmulhrsw      m3,    m7
20886    pmaddubsw     m5,    m4,            m6
20887    pmulhrsw      m5,    m7
20888    packuswb      m3,    m5
20889    movu          [r0 + 1723 * 16],     m3
20890
20891    ; mode 28 [row 30]
20892    movu          m6,    [r5 + 27 * 16]
20893    pmaddubsw     m3,    m0,            m6
20894    pmulhrsw      m3,    m7
20895    pmaddubsw     m5,    m2,            m6
20896    pmulhrsw      m5,    m7
20897    packuswb      m3,    m5
20898    movu          [r0 + 1724 * 16],     m3
20899    pmaddubsw     m3,    m1,            m6
20900    pmulhrsw      m3,    m7
20901    pmaddubsw     m5,    m4,            m6
20902    pmulhrsw      m5,    m7
20903    packuswb      m3,    m5
20904    movu          [r0 + 1725 * 16],     m3
20905
20906    ; mode 29 [row 15]
20907    movu          m6,    [r5 + 16 * 16]
20908    pmaddubsw     m3,    m0,            m6
20909    pmulhrsw      m3,    m7
20910    pmaddubsw     m5,    m2,            m6
20911    pmulhrsw      m5,    m7
20912    packuswb      m3,    m5
20913    movu          [r0 + 1758 * 16],     m3
20914    pmaddubsw     m3,    m1,            m6
20915    pmulhrsw      m3,    m7
20916    pmaddubsw     m5,    m4,            m6
20917    pmulhrsw      m5,    m7
20918    packuswb      m3,    m5
20919    movu          [r0 + 1759 * 16],     m3
20920
20921    ; mode 29 [row 16]
20922    movu          m6,    [r5 + 25 * 16]
20923    pmaddubsw     m3,    m0,            m6
20924    pmulhrsw      m3,    m7
20925    pmaddubsw     m5,    m2,            m6
20926    pmulhrsw      m5,    m7
20927    packuswb      m3,    m5
20928    movu          [r0 + 1760 * 16],     m3
20929    pmaddubsw     m3,    m1,            m6
20930    pmulhrsw      m3,    m7
20931    pmaddubsw     m5,    m4,            m6
20932    pmulhrsw      m5,    m7
20933    packuswb      m3,    m5
20934    movu          [r0 + 1761 * 16],     m3
20935
20936    ; mode 30 [row 9]
20937    movu          m6,    [r5 + 2 * 16]
20938    pmaddubsw     m3,    m0,            m6
20939    pmulhrsw      m3,    m7
20940    pmaddubsw     m5,    m2,            m6
20941    pmulhrsw      m5,    m7
20942    packuswb      m3,    m5
20943    movu          [r0 + 1810 * 16],     m3
20944
20945    ; mode 33 [row 4 - first half]
20946    movu          [r0 + 1992 * 16],     m3
20947
20948    pmaddubsw     m3,    m1,            m6
20949    pmulhrsw      m3,    m7
20950    pmaddubsw     m5,    m4,            m6
20951    pmulhrsw      m5,    m7
20952    packuswb      m3,    m5
20953    movu          [r0 + 1811 * 16],     m3
20954
20955    ; mode 33 [row 4 - second half]
20956    movu          [r0 + 1993 * 16],     m3
20957
20958    ; mode 30 [row 10]
20959    movu          m6,    [r5 + 15 * 16]
20960    pmaddubsw     m3,    m0,            m6
20961    pmulhrsw      m3,    m7
20962    pmaddubsw     m5,    m2,            m6
20963    pmulhrsw      m5,    m7
20964    packuswb      m3,    m5
20965    movu          [r0 + 1812 * 16],     m3
20966    pmaddubsw     m3,    m1,            m6
20967    pmulhrsw      m3,    m7
20968    pmaddubsw     m5,    m4,            m6
20969    pmulhrsw      m5,    m7
20970    packuswb      m3,    m5
20971    movu          [r0 + 1813 * 16],     m3
20972
20973    ; mode 31 [row 7]
20974    movu          m6,    [r5 + 8 * 16]
20975    pmaddubsw     m3,    m0,            m6
20976    pmulhrsw      m3,    m7
20977    pmaddubsw     m5,    m2,            m6
20978    pmulhrsw      m5,    m7
20979    packuswb      m3,    m5
20980    movu          [r0 + 1870 * 16],     m3
20981    pmaddubsw     m3,    m1,            m6
20982    pmulhrsw      m3,    m7
20983    pmaddubsw     m5,    m4,            m6
20984    pmulhrsw      m5,    m7
20985    packuswb      m3,    m5
20986    movu          [r0 + 1871 * 16],     m3
20987
20988    ; mode 31 [row 8]
20989    movu          m6,    [r5 + 25 * 16]
20990    pmaddubsw     m3,    m0,            m6
20991    pmulhrsw      m3,    m7
20992    pmaddubsw     m5,    m2,            m6
20993    pmulhrsw      m5,    m7
20994    packuswb      m3,    m5
20995    movu          [r0 + 1872 * 16],     m3
20996    pmaddubsw     m3,    m1,            m6
20997    pmulhrsw      m3,    m7
20998    pmaddubsw     m5,    m4,            m6
20999    pmulhrsw      m5,    m7
21000    packuswb      m3,    m5
21001    movu          [r0 + 1873 * 16],     m3
21002
21003    ; mode 32 [row 6]
21004    movu          m6,    [r5 + 19 * 16]
21005    pmaddubsw     m3,    m0,            m6
21006    pmulhrsw      m3,    m7
21007    pmaddubsw     m5,    m2,            m6
21008    pmulhrsw      m5,    m7
21009    packuswb      m3,    m5
21010    movu          [r0 + 1932 * 16],     m3
21011    pmaddubsw     m3,    m1,            m6
21012    pmulhrsw      m3,    m7
21013    pmaddubsw     m5,    m4,            m6
21014    pmulhrsw      m5,    m7
21015    packuswb      m3,    m5
21016    movu          [r0 + 1933 * 16],     m3
21017
21018    ; mode 30 [row 11]
21019    movu          m6,    [r5 + 28 * 16]
21020    pmaddubsw     m3,    m0,            m6
21021    pmulhrsw      m3,    m7
21022    pmaddubsw     m5,    m2,            m6
21023    pmulhrsw      m5,    m7
21024    packuswb      m3,    m5
21025    movu          [r0 + 1814 * 16],     m3
21026
21027    ; mode 33 [row 5 - first half]
21028    movu          [r0 + 1994 * 16],     m3
21029
21030    pmaddubsw     m3,    m1,            m6
21031    pmulhrsw      m3,    m7
21032    pmaddubsw     m5,    m4,            m6
21033    pmulhrsw      m5,    m7
21034    packuswb      m3,    m5
21035    movu          [r0 + 1815 * 16],     m3
21036
21037    ; mode 33 [row 5 - second half]
21038    movu          [r0 + 1995 * 16],     m3
21039
21040    ; mode 28 [row 31]
21041    movu          m0,    [r3 + 6]
21042    movd          m1,    [r3 + 7]
21043    palignr       m1,    m0,        1
21044    punpcklbw     m0,    m1
21045    movu          m2,    [r3 + 14]
21046    movd          m3,    [r3 + 15]
21047    palignr       m3,    m2,        1
21048    punpcklbw     m2,    m3
21049    movu          m1,    [r3 + 22]
21050    movd          m3,    [r3 + 23]
21051    palignr       m3,    m1,        1
21052    punpcklbw     m1,    m3
21053    movu          m4,    [r3 + 30]
21054    movd          m5,    [r3 + 31]
21055    palignr       m5,    m4,        1
21056    punpcklbw     m4,    m5
21057
21058    pshufb        m5,    m0,            [tab_S2]
21059    movh          [r0 + 1726 * 16],     m5
21060    pshufb        m5,    m2,            [tab_S2]
21061    movh          [r0 + 1726 * 16 + 8], m5
21062    pshufb        m5,    m1,            [tab_S2]
21063    movh          [r0 + 1727 * 16],     m5
21064    pshufb        m5,    m4,            [tab_S2]
21065    movh          [r0 + 1727 * 16 + 8], m5
21066
21067    ; mode 29 [row 17]
21068    movu          m6,    [r5 + 2 * 16]
21069    pmaddubsw     m3,    m0,            m6
21070    pmulhrsw      m3,    m7
21071    pmaddubsw     m5,    m2,            m6
21072    pmulhrsw      m5,    m7
21073    packuswb      m3,    m5
21074    movu          [r0 + 1762 * 16],     m3
21075    pmaddubsw     m3,    m1,            m6
21076    pmulhrsw      m3,    m7
21077    pmaddubsw     m5,    m4,            m6
21078    pmulhrsw      m5,    m7
21079    packuswb      m3,    m5
21080    movu          [r0 + 1763 * 16],     m3
21081
21082    ; mode 29 [row 18]
21083    movu          m6,    [r5 + 11 * 16]
21084    pmaddubsw     m3,    m0,            m6
21085    pmulhrsw      m3,    m7
21086    pmaddubsw     m5,    m2,            m6
21087    pmulhrsw      m5,    m7
21088    packuswb      m3,    m5
21089    movu          [r0 + 1764 * 16],     m3
21090    pmaddubsw     m3,    m1,            m6
21091    pmulhrsw      m3,    m7
21092    pmaddubsw     m5,    m4,            m6
21093    pmulhrsw      m5,    m7
21094    packuswb      m3,    m5
21095    movu          [r0 + 1765 * 16],     m3
21096
21097    ; mode 29 [row 19]
21098    movu          m6,    [r5 + 20 * 16]
21099    pmaddubsw     m3,    m0,            m6
21100    pmulhrsw      m3,    m7
21101    pmaddubsw     m5,    m2,            m6
21102    pmulhrsw      m5,    m7
21103    packuswb      m3,    m5
21104    movu          [r0 + 1766 * 16],     m3
21105    pmaddubsw     m3,    m1,            m6
21106    pmulhrsw      m3,    m7
21107    pmaddubsw     m5,    m4,            m6
21108    pmulhrsw      m5,    m7
21109    packuswb      m3,    m5
21110    movu          [r0 + 1767 * 16],     m3
21111
21112    ; mode 29 [row 20]
21113    movu          m6,    [r5 + 29 * 16]
21114    pmaddubsw     m3,    m0,            m6
21115    pmulhrsw      m3,    m7
21116    pmaddubsw     m5,    m2,            m6
21117    pmulhrsw      m5,    m7
21118    packuswb      m3,    m5
21119    movu          [r0 + 1768 * 16],     m3
21120
21121    ; mode 32 [row 8 - first halif]
21122    movu          [r0 + 1936 * 16],     m3
21123
21124    pmaddubsw     m3,    m1,            m6
21125    pmulhrsw      m3,    m7
21126    pmaddubsw     m5,    m4,            m6
21127    pmulhrsw      m5,    m7
21128    packuswb      m3,    m5
21129    movu          [r0 + 1769 * 16],     m3
21130
21131    ; mode 32 [row 8 - second halif]
21132    movu          [r0 + 1937 * 16],     m3
21133
21134    ; mode 30 [row 12]
21135    movu          m6,    [r5 + 9 * 16]
21136    pmaddubsw     m3,    m0,            m6
21137    pmulhrsw      m3,    m7
21138    pmaddubsw     m5,    m2,            m6
21139    pmulhrsw      m5,    m7
21140    packuswb      m3,    m5
21141    movu          [r0 + 1816 * 16],     m3
21142    pmaddubsw     m3,    m1,            m6
21143    pmulhrsw      m3,    m7
21144    pmaddubsw     m5,    m4,            m6
21145    pmulhrsw      m5,    m7
21146    packuswb      m3,    m5
21147    movu          [r0 + 1817 * 16],     m3
21148
21149    ; mode 30 [row 13]
21150    movu          m6,    [r5 + 22 * 16]
21151    pmaddubsw     m3,    m0,            m6
21152    pmulhrsw      m3,    m7
21153    pmaddubsw     m5,    m2,            m6
21154    pmulhrsw      m5,    m7
21155    packuswb      m3,    m5
21156    movu          [r0 + 1818 * 16],     m3
21157
21158    ; mode 33 [row 6 - first half]
21159    movu          [r0 + 1996 * 16],     m3
21160
21161    pmaddubsw     m3,    m1,            m6
21162    pmulhrsw      m3,    m7
21163    pmaddubsw     m5,    m4,            m6
21164    pmulhrsw      m5,    m7
21165    packuswb      m3,    m5
21166    movu          [r0 + 1819 * 16],     m3
21167
21168    ; mode 33 [row 6 - second half]
21169    movu          [r0 + 1997 * 16],     m3
21170
21171    ; mode 31 [row 9]
21172    movu          m6,    [r5 + 10 * 16]
21173    pmaddubsw     m3,    m0,            m6
21174    pmulhrsw      m3,    m7
21175    pmaddubsw     m5,    m2,            m6
21176    pmulhrsw      m5,    m7
21177    packuswb      m3,    m5
21178    movu          [r0 + 1874 * 16],     m3
21179    pmaddubsw     m3,    m1,            m6
21180    pmulhrsw      m3,    m7
21181    pmaddubsw     m5,    m4,            m6
21182    pmulhrsw      m5,    m7
21183    packuswb      m3,    m5
21184    movu          [r0 + 1875 * 16],     m3
21185
21186    ; mode 31 [row 10]
21187    movu          m6,    [r5 + 27 * 16]
21188    pmaddubsw     m3,    m0,            m6
21189    pmulhrsw      m3,    m7
21190    pmaddubsw     m5,    m2,            m6
21191    pmulhrsw      m5,    m7
21192    packuswb      m3,    m5
21193    movu          [r0 + 1876 * 16],     m3
21194    pmaddubsw     m3,    m1,            m6
21195    pmulhrsw      m3,    m7
21196    pmaddubsw     m5,    m4,            m6
21197    pmulhrsw      m5,    m7
21198    packuswb      m3,    m5
21199    movu          [r0 + 1877 * 16],     m3
21200
21201    ; mode 32 [row 7]
21202    movu          m6,    [r5 + 8 * 16]
21203    pmaddubsw     m3,    m0,            m6
21204    pmulhrsw      m3,    m7
21205    pmaddubsw     m5,    m2,            m6
21206    pmulhrsw      m5,    m7
21207    packuswb      m3,    m5
21208    movu          [r0 + 1934 * 16],     m3
21209    pmaddubsw     m3,    m1,            m6
21210    pmulhrsw      m3,    m7
21211    pmaddubsw     m5,    m4,            m6
21212    pmulhrsw      m5,    m7
21213    packuswb      m3,    m5
21214    movu          [r0 + 1935 * 16],     m3
21215
21216    ; mode 29 [row 21]
21217    movu          m6,    [r5 + 6 * 16]
21218    movu          m0,    [r3 + 7]
21219    movd          m1,    [r3 + 8]
21220    palignr       m1,    m0,        1
21221    punpcklbw     m0,    m1
21222    pmaddubsw     m3,    m0,            m6
21223    pmulhrsw      m3,    m7
21224    movu          m2,    [r3 + 15]
21225    movd          m4,    [r3 + 16]
21226    palignr       m4,    m2,        1
21227    punpcklbw     m2,    m4
21228    pmaddubsw     m5,    m2,            m6
21229    pmulhrsw      m5,    m7
21230    packuswb      m3,    m5
21231    movu          [r0 + 1770 * 16],     m3
21232
21233    movu          m1,    [r3 + 23]
21234    movd          m3,    [r3 + 24]
21235    palignr       m3,    m1,        1
21236    punpcklbw     m1,    m3
21237    pmaddubsw     m3,    m1,            m6
21238    pmulhrsw      m3,    m7
21239    movu          m4,    [r3 + 31]
21240    movd          m5,    [r3 + 32]
21241    palignr       m5,    m4,        1
21242    punpcklbw     m4,    m5
21243    pmaddubsw     m5,    m4,            m6
21244    pmulhrsw      m5,    m7
21245    packuswb      m3,    m5
21246    movu          [r0 + 1771 * 16],     m3
21247
21248    ; mode 29 [row 22]
21249    movu          m6,    [r5 + 15 * 16]
21250    pmaddubsw     m3,    m0,            m6
21251    pmulhrsw      m3,    m7
21252    pmaddubsw     m5,    m2,            m6
21253    pmulhrsw      m5,    m7
21254    packuswb      m3,    m5
21255    movu          [r0 + 1772 * 16],     m3
21256    pmaddubsw     m3,    m1,            m6
21257    pmulhrsw      m3,    m7
21258    pmaddubsw     m5,    m4,            m6
21259    pmulhrsw      m5,    m7
21260    packuswb      m3,    m5
21261    movu          [r0 + 1773 * 16],     m3
21262
21263    ; mode 29 [row 23]
21264    movu          m6,    [r5 + 24 * 16]
21265    pmaddubsw     m3,    m0,            m6
21266    pmulhrsw      m3,    m7
21267    pmaddubsw     m5,    m2,            m6
21268    pmulhrsw      m5,    m7
21269    packuswb      m3,    m5
21270    movu          [r0 + 1774 * 16],     m3
21271    pmaddubsw     m3,    m1,            m6
21272    pmulhrsw      m3,    m7
21273    pmaddubsw     m5,    m4,            m6
21274    pmulhrsw      m5,    m7
21275    packuswb      m3,    m5
21276    movu          [r0 + 1775 * 16],     m3
21277
21278    ; mode 30 [row 14]
21279    movu          m6,    [r5 + 3 * 16]
21280    pmaddubsw     m3,    m0,            m6
21281    pmulhrsw      m3,    m7
21282    pmaddubsw     m5,    m2,            m6
21283    pmulhrsw      m5,    m7
21284    packuswb      m3,    m5
21285    movu          [r0 + 1820 * 16],     m3
21286    pmaddubsw     m3,    m1,            m6
21287    pmulhrsw      m3,    m7
21288    pmaddubsw     m5,    m4,            m6
21289    pmulhrsw      m5,    m7
21290    packuswb      m3,    m5
21291    movu          [r0 + 1821 * 16],     m3
21292
21293    ; mode 30 [row 15]
21294    movu          m6,    [r5 + 16 * 16]
21295    pmaddubsw     m3,    m0,            m6
21296    pmulhrsw      m3,    m7
21297    pmaddubsw     m5,    m2,            m6
21298    pmulhrsw      m5,    m7
21299    packuswb      m3,    m5
21300    movu          [r0 + 1822 * 16],     m3
21301
21302    ; mode 33 [row 7 - first half]
21303    movu          [r0 + 1998 * 16],     m3
21304
21305    pmaddubsw     m3,    m1,            m6
21306    pmulhrsw      m3,    m7
21307    pmaddubsw     m5,    m4,            m6
21308    pmulhrsw      m5,    m7
21309    packuswb      m3,    m5
21310    movu          [r0 + 1823 * 16],     m3
21311
21312    ; mode 33 [row 7 - second half]
21313    movu          [r0 + 1999 * 16],     m3
21314
21315    ; mode 30 [row 16]
21316    movu          m6,    [r5 + 29 * 16]
21317    pmaddubsw     m3,    m0,            m6
21318    pmulhrsw      m3,    m7
21319    pmaddubsw     m5,    m2,            m6
21320    pmulhrsw      m5,    m7
21321    packuswb      m3,    m5
21322    movu          [r0 + 1824 * 16],     m3
21323
21324    ; mode 31 [row 12 - first half]
21325    movu          [r0 + 1880 * 16],     m3
21326
21327    pmaddubsw     m3,    m1,            m6
21328    pmulhrsw      m3,    m7
21329    pmaddubsw     m5,    m4,            m6
21330    pmulhrsw      m5,    m7
21331    packuswb      m3,    m5
21332    movu          [r0 + 1825 * 16],     m3
21333
21334    ; mode 31 [row 12 - second half]
21335    movu          [r0 + 1881 * 16],     m3
21336
21337    ; mode 31 [row 11]
21338    movu          m6,    [r5 + 12 * 16]
21339    pmaddubsw     m3,    m0,            m6
21340    pmulhrsw      m3,    m7
21341    pmaddubsw     m5,    m2,            m6
21342    pmulhrsw      m5,    m7
21343    packuswb      m3,    m5
21344    movu          [r0 + 1878 * 16],     m3
21345    pmaddubsw     m3,    m1,            m6
21346    pmulhrsw      m3,    m7
21347    pmaddubsw     m5,    m4,            m6
21348    pmulhrsw      m5,    m7
21349    packuswb      m3,    m5
21350    movu          [r0 + 1879 * 16],     m3
21351
21352    ; mode 32 [row 9]
21353    movu          m6,    [r5 + 18 * 16]
21354    pmaddubsw     m3,    m0,            m6
21355    pmulhrsw      m3,    m7
21356    pmaddubsw     m5,    m2,            m6
21357    pmulhrsw      m5,    m7
21358    packuswb      m3,    m5
21359    movu          [r0 + 1938 * 16],     m3
21360    pmaddubsw     m3,    m1,            m6
21361    pmulhrsw      m3,    m7
21362    pmaddubsw     m5,    m4,            m6
21363    pmulhrsw      m5,    m7
21364    packuswb      m3,    m5
21365    movu          [r0 + 1939 * 16],     m3
21366
21367    ; mode 29 [row 24]
21368    movu          m6,    [r5 + 1 * 16]
21369    movu          m0,    [r3 + 8]
21370    movd          m1,    [r3 + 9]
21371    palignr       m1,    m0,        1
21372    punpcklbw     m0,    m1
21373    pmaddubsw     m3,    m0,            m6
21374    pmulhrsw      m3,    m7
21375    movu          m2,    [r3 + 16]
21376    movd          m4,    [r3 + 17]
21377    palignr       m4,    m2,        1
21378    punpcklbw     m2,    m4
21379    pmaddubsw     m5,    m2,            m6
21380    pmulhrsw      m5,    m7
21381    packuswb      m3,    m5
21382    movu          [r0 + 1776 * 16],     m3
21383
21384    movu          m1,    [r3 + 24]
21385    movd          m3,    [r3 + 25]
21386    palignr       m3,    m1,        1
21387    punpcklbw     m1,    m3
21388    pmaddubsw     m3,    m1,            m6
21389    pmulhrsw      m3,    m7
21390    movu          m4,    [r3 + 32]
21391    movd          m5,    [r3 + 33]
21392    palignr       m5,    m4,        1
21393    punpcklbw     m4,    m5
21394    pmaddubsw     m5,    m4,            m6
21395    pmulhrsw      m5,    m7
21396    packuswb      m3,    m5
21397    movu          [r0 + 1777 * 16],     m3
21398
21399    ; mode 29 [row 25]
21400    movu          m6,    [r5 + 10 * 16]
21401    pmaddubsw     m3,    m0,            m6
21402    pmulhrsw      m3,    m7
21403    pmaddubsw     m5,    m2,            m6
21404    pmulhrsw      m5,    m7
21405    packuswb      m3,    m5
21406    movu          [r0 + 1778 * 16],     m3
21407
21408    ; mode 30 [row 17 - first half]
21409    movu          [r0 + 1826 * 16],     m3
21410
21411    ; mode 33 [row 8 - first half]
21412    movu          [r0 + 2000 * 16],     m3
21413
21414    pmaddubsw     m3,    m1,            m6
21415    pmulhrsw      m3,    m7
21416    pmaddubsw     m5,    m4,            m6
21417    pmulhrsw      m5,    m7
21418    packuswb      m3,    m5
21419    movu          [r0 + 1779 * 16],     m3
21420
21421    ; mode 30 [row 17 - second half]
21422    movu          [r0 + 1827 * 16],     m3
21423
21424    ; mode 33 [row 8 - second half]
21425    movu          [r0 + 2001 * 16],     m3
21426
21427    ; mode 29 [row 26]
21428    movu          m6,    [r5 + 19 * 16]
21429    pmaddubsw     m3,    m0,            m6
21430    pmulhrsw      m3,    m7
21431    pmaddubsw     m5,    m2,            m6
21432    pmulhrsw      m5,    m7
21433    packuswb      m3,    m5
21434    movu          [r0 + 1780 * 16],     m3
21435    pmaddubsw     m3,    m1,            m6
21436    pmulhrsw      m3,    m7
21437    pmaddubsw     m5,    m4,            m6
21438    pmulhrsw      m5,    m7
21439    packuswb      m3,    m5
21440    movu          [r0 + 1781 * 16],     m3
21441
21442    ; mode 29 [row 27]
21443    movu          m6,    [r5 + 28 * 16]
21444    pmaddubsw     m3,    m0,            m6
21445    pmulhrsw      m3,    m7
21446    pmaddubsw     m5,    m2,            m6
21447    pmulhrsw      m5,    m7
21448    packuswb      m3,    m5
21449    movu          [r0 + 1782 * 16],     m3
21450
21451    ; mode 32 [row 11 - first half]
21452    movu          [r0 + 1942 * 16],     m3
21453
21454    pmaddubsw     m3,    m1,            m6
21455    pmulhrsw      m3,    m7
21456    pmaddubsw     m5,    m4,            m6
21457    pmulhrsw      m5,    m7
21458    packuswb      m3,    m5
21459    movu          [r0 + 1783 * 16],     m3
21460
21461    ; mode 32 [row 11 - second half]
21462    movu          [r0 + 1943 * 16],     m3
21463
21464    ; mode 30 [row 18]
21465    movu          m6,    [r5 + 23 * 16]
21466    pmaddubsw     m3,    m0,            m6
21467    pmulhrsw      m3,    m7
21468    pmaddubsw     m5,    m2,            m6
21469    pmulhrsw      m5,    m7
21470    packuswb      m3,    m5
21471    movu          [r0 + 1828 * 16],     m3
21472    pmaddubsw     m3,    m1,            m6
21473    pmulhrsw      m3,    m7
21474    pmaddubsw     m5,    m4,            m6
21475    pmulhrsw      m5,    m7
21476    packuswb      m3,    m5
21477    movu          [r0 + 1829 * 16],     m3
21478
21479    ; mode 31 [row 13]
21480    movu          m6,    [r5 + 14 * 16]
21481    pmaddubsw     m3,    m0,            m6
21482    pmulhrsw      m3,    m7
21483    pmaddubsw     m5,    m2,            m6
21484    pmulhrsw      m5,    m7
21485    packuswb      m3,    m5
21486    movu          [r0 + 1882 * 16],     m3
21487    pmaddubsw     m3,    m1,            m6
21488    pmulhrsw      m3,    m7
21489    pmaddubsw     m5,    m4,            m6
21490    pmulhrsw      m5,    m7
21491    packuswb      m3,    m5
21492    movu          [r0 + 1883 * 16],     m3
21493
21494    ; mode 31 [row 14]
21495    movu          m6,    [r5 + 31 * 16]
21496    pmaddubsw     m3,    m0,            m6
21497    pmulhrsw      m3,    m7
21498    pmaddubsw     m5,    m2,            m6
21499    pmulhrsw      m5,    m7
21500    packuswb      m3,    m5
21501    movu          [r0 + 1884 * 16],     m3
21502    pmaddubsw     m3,    m1,            m6
21503    pmulhrsw      m3,    m7
21504    pmaddubsw     m5,    m4,            m6
21505    pmulhrsw      m5,    m7
21506    packuswb      m3,    m5
21507    movu          [r0 + 1885 * 16],     m3
21508
21509    ; mode 32 [row 10]
21510    movu          m6,    [r5 + 7 * 16]
21511    pmaddubsw     m3,    m0,            m6
21512    pmulhrsw      m3,    m7
21513    pmaddubsw     m5,    m2,            m6
21514    pmulhrsw      m5,    m7
21515    packuswb      m3,    m5
21516    movu          [r0 + 1940 * 16],     m3
21517    pmaddubsw     m3,    m1,            m6
21518    pmulhrsw      m3,    m7
21519    pmaddubsw     m5,    m4,            m6
21520    pmulhrsw      m5,    m7
21521    packuswb      m3,    m5
21522    movu          [r0 + 1941 * 16],     m3
21523
21524    ; mode 29 [row 28]
21525    movu          m6,    [r5 + 5 * 16]
21526    movu          m0,    [r3 +  9]
21527    movd          m1,    [r3 + 10]
21528    palignr       m1,    m0,        1
21529    punpcklbw     m0,    m1
21530    pmaddubsw     m3,    m0,            m6
21531    pmulhrsw      m3,    m7
21532    movu          m2,    [r3 + 17]
21533    movd          m4,    [r3 + 18]
21534    palignr       m4,    m2,        1
21535    punpcklbw     m2,    m4
21536    pmaddubsw     m5,    m2,            m6
21537    pmulhrsw      m5,    m7
21538    packuswb      m3,    m5
21539    movu          [r0 + 1784 * 16],     m3
21540
21541    movu          m1,    [r3 + 25]
21542    movd          m3,    [r3 + 26]
21543    palignr       m3,    m1,        1
21544    punpcklbw     m1,    m3
21545    pmaddubsw     m3,    m1,            m6
21546    pmulhrsw      m3,    m7
21547    movu          m4,    [r3 + 33]
21548    movd          m5,    [r3 + 34]
21549    palignr       m5,    m4,        1
21550    punpcklbw     m4,    m5
21551    pmaddubsw     m5,    m4,            m6
21552    pmulhrsw      m5,    m7
21553    packuswb      m3,    m5
21554    movu          [r0 + 1785 * 16],     m3
21555
21556    ; mode 29 [row 29]
21557    movu          m6,    [r5 + 14 * 16]
21558    pmaddubsw     m3,    m0,            m6
21559    pmulhrsw      m3,    m7
21560    pmaddubsw     m5,    m2,            m6
21561    pmulhrsw      m5,    m7
21562    packuswb      m3,    m5
21563    movu          [r0 + 1786 * 16],     m3
21564    pmaddubsw     m3,    m1,            m6
21565    pmulhrsw      m3,    m7
21566    pmaddubsw     m5,    m4,            m6
21567    pmulhrsw      m5,    m7
21568    packuswb      m3,    m5
21569    movu          [r0 + 1787 * 16],     m3
21570
21571    ; mode 29 [row 30]
21572    movu          m6,    [r5 + 23 * 16]
21573    pmaddubsw     m3,    m0,            m6
21574    pmulhrsw      m3,    m7
21575    pmaddubsw     m5,    m2,            m6
21576    pmulhrsw      m5,    m7
21577    packuswb      m3,    m5
21578    movu          [r0 + 1788 * 16],     m3
21579    pmaddubsw     m3,    m1,            m6
21580    pmulhrsw      m3,    m7
21581    pmaddubsw     m5,    m4,            m6
21582    pmulhrsw      m5,    m7
21583    packuswb      m3,    m5
21584    movu          [r0 + 1789 * 16],     m3
21585
21586    ; mode 30 [row 19]
21587    movu          m6,    [r5 + 4 * 16]
21588    pmaddubsw     m3,    m0,            m6
21589    pmulhrsw      m3,    m7
21590    pmaddubsw     m5,    m2,            m6
21591    pmulhrsw      m5,    m7
21592    packuswb      m3,    m5
21593    movu          [r0 + 1830 * 16],     m3
21594
21595    ; mode 33 [row 9 - first half]
21596    movu          [r0 + 2002 * 16],     m3
21597
21598    pmaddubsw     m3,    m1,            m6
21599    pmulhrsw      m3,    m7
21600    pmaddubsw     m5,    m4,            m6
21601    pmulhrsw      m5,    m7
21602    packuswb      m3,    m5
21603    movu          [r0 + 1831 * 16],     m3
21604
21605    ; mode 33 [row 9 - second half]
21606    movu          [r0 + 2003 * 16],     m3
21607
21608    ; mode 30 [row 20]
21609    movu          m6,    [r5 + 17 * 16]
21610    pmaddubsw     m3,    m0,            m6
21611    pmulhrsw      m3,    m7
21612    pmaddubsw     m5,    m2,            m6
21613    pmulhrsw      m5,    m7
21614    packuswb      m3,    m5
21615    movu          [r0 + 1832 * 16],     m3
21616
21617    ; mode 32 [row 12 - first half]
21618    movu          [r0 + 1944 * 16],     m3
21619
21620    pmaddubsw     m3,    m1,            m6
21621    pmulhrsw      m3,    m7
21622    pmaddubsw     m5,    m4,            m6
21623    pmulhrsw      m5,    m7
21624    packuswb      m3,    m5
21625    movu          [r0 + 1833 * 16],     m3
21626
21627    ; mode 32 [row 12 - second half]
21628    movu          [r0 + 1945 * 16],     m3
21629
21630    ; mode 30 [row 21]
21631    movu          m6,    [r5 + 30 * 16]
21632    pmaddubsw     m3,    m0,            m6
21633    pmulhrsw      m3,    m7
21634    pmaddubsw     m5,    m2,            m6
21635    pmulhrsw      m5,    m7
21636    packuswb      m3,    m5
21637    movu          [r0 + 1834 * 16],     m3
21638
21639    ; mode 33 [row 10 - first half]
21640    movu          [r0 + 2004 * 16],     m3
21641
21642    pmaddubsw     m3,    m1,            m6
21643    pmulhrsw      m3,    m7
21644    pmaddubsw     m5,    m4,            m6
21645    pmulhrsw      m5,    m7
21646    packuswb      m3,    m5
21647    movu          [r0 + 1835 * 16],     m3
21648
21649    ; mode 33 [row 10 - second half]
21650    movu          [r0 + 2005 * 16],     m3
21651
21652    ; mode 31 [row 15]
21653    movu          m6,    [r5 + 16 * 16]
21654    pmaddubsw     m3,    m0,            m6
21655    pmulhrsw      m3,    m7
21656    pmaddubsw     m5,    m2,            m6
21657    pmulhrsw      m5,    m7
21658    packuswb      m3,    m5
21659    movu          [r0 + 1886 * 16],     m3
21660    pmaddubsw     m3,    m1,            m6
21661    pmulhrsw      m3,    m7
21662    pmaddubsw     m5,    m4,            m6
21663    pmulhrsw      m5,    m7
21664    packuswb      m3,    m5
21665    movu          [r0 + 1887 * 16],     m3
21666
21667    ; mode 29 [row 31]
21668    movu          m0,    [r3 + 10]
21669    movd          m1,    [r3 + 11]
21670    palignr       m1,    m0,        1
21671    punpcklbw     m0,    m1
21672    movu          m2,    [r3 + 18]
21673    movd          m3,    [r3 + 19]
21674    palignr       m3,    m2,        1
21675    punpcklbw     m2,    m3
21676    movu          m1,    [r3 + 26]
21677    movd          m3,    [r3 + 27]
21678    palignr       m3,    m1,        1
21679    punpcklbw     m1,    m3
21680    movu          m4,    [r3 + 34]
21681    movd          m5,    [r3 + 35]
21682    palignr       m5,    m4,        1
21683    punpcklbw     m4,    m5
21684
21685    pshufb        m5,    m0,            [tab_S2]
21686    movh          [r0 + 1790 * 16],     m5
21687    pshufb        m5,    m2,            [tab_S2]
21688    movh          [r0 + 1790 * 16 + 8], m5
21689    pshufb        m5,    m1,            [tab_S2]
21690    movh          [r0 + 1791 * 16],     m5
21691    pshufb        m5,    m4,            [tab_S2]
21692    movh          [r0 + 1791 * 16 + 8], m5
21693
21694    ; mode 30 [row 22]
21695    movu          m6,    [r5 + 11 * 16]
21696    pmaddubsw     m3,    m0,            m6
21697    pmulhrsw      m3,    m7
21698    pmaddubsw     m5,    m2,            m6
21699    pmulhrsw      m5,    m7
21700    packuswb      m3,    m5
21701    movu          [r0 + 1836 * 16],     m3
21702    pmaddubsw     m3,    m1,            m6
21703    pmulhrsw      m3,    m7
21704    pmaddubsw     m5,    m4,            m6
21705    pmulhrsw      m5,    m7
21706    packuswb      m3,    m5
21707    movu          [r0 + 1837 * 16],     m3
21708
21709    ; mode 30 [row 23]
21710    movu          m6,    [r5 + 24 * 16]
21711    pmaddubsw     m3,    m0,            m6
21712    pmulhrsw      m3,    m7
21713    pmaddubsw     m5,    m2,            m6
21714    pmulhrsw      m5,    m7
21715    packuswb      m3,    m5
21716    movu          [r0 + 1838 * 16],     m3
21717
21718    ; mode 33 [row 11 - first half]
21719    movu          [r0 + 2006 * 16],     m3
21720
21721    pmaddubsw     m3,    m1,            m6
21722    pmulhrsw      m3,    m7
21723    pmaddubsw     m5,    m4,            m6
21724    pmulhrsw      m5,    m7
21725    packuswb      m3,    m5
21726    movu          [r0 + 1839 * 16],     m3
21727
21728    ; mode 33 [row 11 - second half]
21729    movu          [r0 + 2007 * 16],     m3
21730
21731    ; mode 31 [row 16]
21732    movu          m6,    [r5 + 1 * 16]
21733    pmaddubsw     m3,    m0,            m6
21734    pmulhrsw      m3,    m7
21735    pmaddubsw     m5,    m2,            m6
21736    pmulhrsw      m5,    m7
21737    packuswb      m3,    m5
21738    movu          [r0 + 1888 * 16],     m3
21739    pmaddubsw     m3,    m1,            m6
21740    pmulhrsw      m3,    m7
21741    pmaddubsw     m5,    m4,            m6
21742    pmulhrsw      m5,    m7
21743    packuswb      m3,    m5
21744    movu          [r0 + 1889 * 16],     m3
21745
21746    ; mode 31 [row 17]
21747    movu          m6,    [r5 + 18 * 16]
21748    pmaddubsw     m3,    m0,            m6
21749    pmulhrsw      m3,    m7
21750    pmaddubsw     m5,    m2,            m6
21751    pmulhrsw      m5,    m7
21752    packuswb      m3,    m5
21753    movu          [r0 + 1890 * 16],     m3
21754    pmaddubsw     m3,    m1,            m6
21755    pmulhrsw      m3,    m7
21756    pmaddubsw     m5,    m4,            m6
21757    pmulhrsw      m5,    m7
21758    packuswb      m3,    m5
21759    movu          [r0 + 1891 * 16],     m3
21760
21761    ; mode 32 [row 13]
21762    movu          m6,    [r5 + 6 * 16]
21763    pmaddubsw     m3,    m0,            m6
21764    pmulhrsw      m3,    m7
21765    pmaddubsw     m5,    m2,            m6
21766    pmulhrsw      m5,    m7
21767    packuswb      m3,    m5
21768    movu          [r0 + 1946 * 16],     m3
21769    pmaddubsw     m3,    m1,            m6
21770    pmulhrsw      m3,    m7
21771    pmaddubsw     m5,    m4,            m6
21772    pmulhrsw      m5,    m7
21773    packuswb      m3,    m5
21774    movu          [r0 + 1947 * 16],     m3
21775
21776    ; mode 32 [row 14]
21777    movu          m6,    [r5 + 27 * 16]
21778    pmaddubsw     m3,    m0,            m6
21779    pmulhrsw      m3,    m7
21780    pmaddubsw     m5,    m2,            m6
21781    pmulhrsw      m5,    m7
21782    packuswb      m3,    m5
21783    movu          [r0 + 1948 * 16],     m3
21784    pmaddubsw     m3,    m1,            m6
21785    pmulhrsw      m3,    m7
21786    pmaddubsw     m5,    m4,            m6
21787    pmulhrsw      m5,    m7
21788    packuswb      m3,    m5
21789    movu          [r0 + 1949 * 16],     m3
21790
21791    ; mode 30 [row 24]
21792    movu          m6,    [r5 + 5 * 16]
21793    movu          m0,    [r3 + 11]
21794    movd          m1,    [r3 + 12]
21795    palignr       m1,    m0,        1
21796    punpcklbw     m0,    m1
21797    pmaddubsw     m3,    m0,            m6
21798    pmulhrsw      m3,    m7
21799    movu          m2,    [r3 + 19]
21800    movd          m4,    [r3 + 20]
21801    palignr       m4,    m2,        1
21802    punpcklbw     m2,    m4
21803    pmaddubsw     m5,    m2,            m6
21804    pmulhrsw      m5,    m7
21805    packuswb      m3,    m5
21806    movu          [r0 + 1840 * 16],     m3
21807
21808    movu          m1,    [r3 + 27]
21809    movd          m3,    [r3 + 28]
21810    palignr       m3,    m1,        1
21811    punpcklbw     m1,    m3
21812    pmaddubsw     m3,    m1,            m6
21813    pmulhrsw      m3,    m7
21814    movu          m4,    [r3 + 35]
21815    movd          m5,    [r3 + 36]
21816    palignr       m5,    m4,        1
21817    punpcklbw     m4,    m5
21818    pmaddubsw     m5,    m4,            m6
21819    pmulhrsw      m5,    m7
21820    packuswb      m3,    m5
21821    movu          [r0 + 1841 * 16],     m3
21822
21823    ; mode 30 [row 25]
21824    movu          m6,    [r5 + 18 * 16]
21825    pmaddubsw     m3,    m0,            m6
21826    pmulhrsw      m3,    m7
21827    pmaddubsw     m5,    m2,            m6
21828    pmulhrsw      m5,    m7
21829    packuswb      m3,    m5
21830    movu          [r0 + 1842 * 16],     m3
21831
21832    ; mode 33 [row 12 - first half]
21833    movu          [r0 + 2008 * 16],     m3
21834
21835    pmaddubsw     m3,    m1,            m6
21836    pmulhrsw      m3,    m7
21837    pmaddubsw     m5,    m4,            m6
21838    pmulhrsw      m5,    m7
21839    packuswb      m3,    m5
21840    movu          [r0 + 1843 * 16],     m3
21841
21842    ; mode 33 [row 12 - second half]
21843    movu          [r0 + 2009 * 16],     m3
21844
21845    ; mode 30 [row 26]
21846    movu          m6,    [r5 + 31 * 16]
21847    pmaddubsw     m3,    m0,            m6
21848    pmulhrsw      m3,    m7
21849    pmaddubsw     m5,    m2,            m6
21850    pmulhrsw      m5,    m7
21851    packuswb      m3,    m5
21852    movu          [r0 + 1844 * 16],     m3
21853    pmaddubsw     m3,    m1,            m6
21854    pmulhrsw      m3,    m7
21855    pmaddubsw     m5,    m4,            m6
21856    pmulhrsw      m5,    m7
21857    packuswb      m3,    m5
21858    movu          [r0 + 1845 * 16],     m3
21859
21860    ; mode 31 [row 18]
21861    movu          m6,    [r5 + 3 * 16]
21862    pmaddubsw     m3,    m0,            m6
21863    pmulhrsw      m3,    m7
21864    pmaddubsw     m5,    m2,            m6
21865    pmulhrsw      m5,    m7
21866    packuswb      m3,    m5
21867    movu          [r0 + 1892 * 16],     m3
21868    pmaddubsw     m3,    m1,            m6
21869    pmulhrsw      m3,    m7
21870    pmaddubsw     m5,    m4,            m6
21871    pmulhrsw      m5,    m7
21872    packuswb      m3,    m5
21873    movu          [r0 + 1893 * 16],     m3
21874
21875    ; mode 31 [row 19]
21876    movu          m6,    [r5 + 20 * 16]
21877    pmaddubsw     m3,    m0,            m6
21878    pmulhrsw      m3,    m7
21879    pmaddubsw     m5,    m2,            m6
21880    pmulhrsw      m5,    m7
21881    packuswb      m3,    m5
21882    movu          [r0 + 1894 * 16],     m3
21883    pmaddubsw     m3,    m1,            m6
21884    pmulhrsw      m3,    m7
21885    pmaddubsw     m5,    m4,            m6
21886    pmulhrsw      m5,    m7
21887    packuswb      m3,    m5
21888    movu          [r0 + 1895 * 16],     m3
21889
21890    ; mode 32 [row 15]
21891    movu          m6,    [r5 + 16 * 16]
21892    pmaddubsw     m3,    m0,            m6
21893    pmulhrsw      m3,    m7
21894    pmaddubsw     m5,    m2,            m6
21895    pmulhrsw      m5,    m7
21896    packuswb      m3,    m5
21897    movu          [r0 + 1950 * 16],     m3
21898    pmaddubsw     m3,    m1,            m6
21899    pmulhrsw      m3,    m7
21900    pmaddubsw     m5,    m4,            m6
21901    pmulhrsw      m5,    m7
21902    packuswb      m3,    m5
21903    movu          [r0 + 1951 * 16],     m3
21904
21905    ; mode 30 [row 27]
21906    movu          m6,    [r5 + 12 * 16]
21907    movu          m0,    [r3 + 12]
21908    movd          m1,    [r3 + 13]
21909    palignr       m1,    m0,        1
21910    punpcklbw     m0,    m1
21911    pmaddubsw     m3,    m0,            m6
21912    pmulhrsw      m3,    m7
21913    movu          m2,    [r3 + 20]
21914    movd          m4,    [r3 + 21]
21915    palignr       m4,    m2,        1
21916    punpcklbw     m2,    m4
21917    pmaddubsw     m5,    m2,            m6
21918    pmulhrsw      m5,    m7
21919    packuswb      m3,    m5
21920    movu          [r0 + 1846 * 16],     m3
21921
21922    ; mode 33 [row 13 - first half]
21923    movu          [r0 + 2010 * 16],     m3
21924
21925    movu          m1,    [r3 + 28]
21926    movd          m3,    [r3 + 29]
21927    palignr       m3,    m1,        1
21928    punpcklbw     m1,    m3
21929    pmaddubsw     m3,    m1,            m6
21930    pmulhrsw      m3,    m7
21931    movu          m4,    [r3 + 36]
21932    movd          m5,    [r3 + 37]
21933    palignr       m5,    m4,        1
21934    punpcklbw     m4,    m5
21935    pmaddubsw     m5,    m4,            m6
21936    pmulhrsw      m5,    m7
21937    packuswb      m3,    m5
21938    movu          [r0 + 1847 * 16],     m3
21939
21940    ; mode 33 [row 13 - second half]
21941    movu          [r0 + 2011 * 16],     m3
21942
21943    ; mode 30 [row 28]
21944    movu          m6,    [r5 + 25 * 16]
21945    pmaddubsw     m3,    m0,            m6
21946    pmulhrsw      m3,    m7
21947    pmaddubsw     m5,    m2,            m6
21948    pmulhrsw      m5,    m7
21949    packuswb      m3,    m5
21950    movu          [r0 + 1848 * 16],     m3
21951    pmaddubsw     m3,    m1,            m6
21952    pmulhrsw      m3,    m7
21953    pmaddubsw     m5,    m4,            m6
21954    pmulhrsw      m5,    m7
21955    packuswb      m3,    m5
21956    movu          [r0 + 1849 * 16],     m3
21957
21958    ; mode 31 [row 20]
21959    movu          m6,    [r5 + 5 * 16]
21960    pmaddubsw     m3,    m0,            m6
21961    pmulhrsw      m3,    m7
21962    pmaddubsw     m5,    m2,            m6
21963    pmulhrsw      m5,    m7
21964    packuswb      m3,    m5
21965    movu          [r0 + 1896 * 16],     m3
21966
21967    ; mode 32 [row 16 - first half]
21968    movu          [r0 + 1952 * 16],     m3
21969
21970    pmaddubsw     m3,    m1,            m6
21971    pmulhrsw      m3,    m7
21972    pmaddubsw     m5,    m4,            m6
21973    pmulhrsw      m5,    m7
21974    packuswb      m3,    m5
21975    movu          [r0 + 1897 * 16],     m3
21976
21977    ; mode 32 [row 16 - second half]
21978    movu          [r0 + 1953 * 16],     m3
21979
21980    ; mode 31 [row 21]
21981    movu          m6,    [r5 + 22 * 16]
21982    pmaddubsw     m3,    m0,            m6
21983    pmulhrsw      m3,    m7
21984    pmaddubsw     m5,    m2,            m6
21985    pmulhrsw      m5,    m7
21986    packuswb      m3,    m5
21987    movu          [r0 + 1898 * 16],     m3
21988    pmaddubsw     m3,    m1,            m6
21989    pmulhrsw      m3,    m7
21990    pmaddubsw     m5,    m4,            m6
21991    pmulhrsw      m5,    m7
21992    packuswb      m3,    m5
21993    movu          [r0 + 1899 * 16],     m3
21994
21995    ; mode 32 [row 17]
21996    movu          m6,    [r5 + 26 * 16]
21997    pmaddubsw     m3,    m0,            m6
21998    pmulhrsw      m3,    m7
21999    pmaddubsw     m5,    m2,            m6
22000    pmulhrsw      m5,    m7
22001    packuswb      m3,    m5
22002    movu          [r0 + 1954 * 16],     m3
22003    pmaddubsw     m3,    m1,            m6
22004    pmulhrsw      m3,    m7
22005    pmaddubsw     m5,    m4,            m6
22006    pmulhrsw      m5,    m7
22007    packuswb      m3,    m5
22008    movu          [r0 + 1955 * 16],     m3
22009
22010    ; mode 30 [row 29]
22011    movu          m6,    [r5 + 6 * 16]
22012    movu          m0,    [r3 + 13]
22013    movd          m1,    [r3 + 14]
22014    palignr       m1,    m0,        1
22015    punpcklbw     m0,    m1
22016    pmaddubsw     m3,    m0,            m6
22017    pmulhrsw      m3,    m7
22018    movu          m2,    [r3 + 21]
22019    movd          m4,    [r3 + 22]
22020    palignr       m4,    m2,        1
22021    punpcklbw     m2,    m4
22022    pmaddubsw     m5,    m2,            m6
22023    pmulhrsw      m5,    m7
22024    packuswb      m3,    m5
22025    movu          [r0 + 1850 * 16],     m3
22026
22027    ; mode 33 [row 14 - first half]
22028    movu          [r0 + 2012 * 16],     m3
22029
22030    movu          m1,    [r3 + 29]
22031    movd          m3,    [r3 + 30]
22032    palignr       m3,    m1,        1
22033    punpcklbw     m1,    m3
22034    pmaddubsw     m3,    m1,            m6
22035    pmulhrsw      m3,    m7
22036    movu          m4,    [r3 + 37]
22037    movd          m5,    [r3 + 38]
22038    palignr       m5,    m4,        1
22039    punpcklbw     m4,    m5
22040    pmaddubsw     m5,    m4,            m6
22041    pmulhrsw      m5,    m7
22042    packuswb      m3,    m5
22043    movu          [r0 + 1851 * 16],     m3
22044
22045    ; mode 33 [row 14 - second half]
22046    movu          [r0 + 2013 * 16],     m3
22047
22048    ; mode 30 [row 30]
22049    movu          m6,    [r5 + 19 * 16]
22050    pmaddubsw     m3,    m0,            m6
22051    pmulhrsw      m3,    m7
22052    pmaddubsw     m5,    m2,            m6
22053    pmulhrsw      m5,    m7
22054    packuswb      m3,    m5
22055    movu          [r0 + 1852 * 16],     m3
22056    pmaddubsw     m3,    m1,            m6
22057    pmulhrsw      m3,    m7
22058    pmaddubsw     m5,    m4,            m6
22059    pmulhrsw      m5,    m7
22060    packuswb      m3,    m5
22061    movu          [r0 + 1853 * 16],     m3
22062
22063    ; mode 31 [row 22]
22064    movu          m6,    [r5 + 7 * 16]
22065    pmaddubsw     m3,    m0,            m6
22066    pmulhrsw      m3,    m7
22067    pmaddubsw     m5,    m2,            m6
22068    pmulhrsw      m5,    m7
22069    packuswb      m3,    m5
22070    movu          [r0 + 1900 * 16],     m3
22071    pmaddubsw     m3,    m1,            m6
22072    pmulhrsw      m3,    m7
22073    pmaddubsw     m5,    m4,            m6
22074    pmulhrsw      m5,    m7
22075    packuswb      m3,    m5
22076    movu          [r0 + 1901 * 16],     m3
22077
22078    ; mode 31 [row 23]
22079    movu          m6,    [r5 + 24 * 16]
22080    pmaddubsw     m3,    m0,            m6
22081    pmulhrsw      m3,    m7
22082    pmaddubsw     m5,    m2,            m6
22083    pmulhrsw      m5,    m7
22084    packuswb      m3,    m5
22085    movu          [r0 + 1902 * 16],     m3
22086    pmaddubsw     m3,    m1,            m6
22087    pmulhrsw      m3,    m7
22088    pmaddubsw     m5,    m4,            m6
22089    pmulhrsw      m5,    m7
22090    packuswb      m3,    m5
22091    movu          [r0 + 1903 * 16],     m3
22092
22093    ; mode 32 [row 18]
22094    movu          m6,    [r5 + 15 * 16]
22095    pmaddubsw     m3,    m0,            m6
22096    pmulhrsw      m3,    m7
22097    pmaddubsw     m5,    m2,            m6
22098    pmulhrsw      m5,    m7
22099    packuswb      m3,    m5
22100    movu          [r0 + 1956 * 16],     m3
22101    pmaddubsw     m3,    m1,            m6
22102    pmulhrsw      m3,    m7
22103    pmaddubsw     m5,    m4,            m6
22104    pmulhrsw      m5,    m7
22105    packuswb      m3,    m5
22106    movu          [r0 + 1957 * 16],     m3
22107
22108    ; mode 30 [row 31]
22109    movu          m0,    [r3 + 14]
22110    movd          m1,    [r3 + 15]
22111    palignr       m1,    m0,        1
22112    punpcklbw     m0,    m1
22113    movu          m2,    [r3 + 22]
22114    movd          m3,    [r3 + 23]
22115    palignr       m3,    m2,        1
22116    punpcklbw     m2,    m3
22117    movu          m1,    [r3 + 30]
22118    movd          m3,    [r3 + 31]
22119    palignr       m3,    m1,        1
22120    punpcklbw     m1,    m3
22121    movu          m4,    [r3 + 38]
22122    movd          m5,    [r3 + 39]
22123    palignr       m5,    m4,        1
22124    punpcklbw     m4,    m5
22125
22126    pshufb        m5,    m0,            [tab_S2]
22127    movh          [r0 + 1854 * 16],     m5
22128
22129    ; mode 33 [row 15 - first eight]
22130    movh          [r0 + 2014 * 16],     m5
22131
22132    pshufb        m5,    m2,            [tab_S2]
22133    movh          [r0 + 1854 * 16 + 8], m5
22134
22135    ; mode 33 [row 15 - second eight]
22136    movh          [r0 + 2014 * 16 + 8],     m5
22137
22138    pshufb        m5,    m1,            [tab_S2]
22139    movh          [r0 + 1855 * 16],     m5
22140
22141    ; mode 33 [row 15 - third eight]
22142    movh          [r0 + 2015 * 16],     m5
22143
22144    pshufb        m5,    m4,            [tab_S2]
22145    movh          [r0 + 1855 * 16 + 8], m5
22146
22147    ; mode 33 [row 15 - fourth eight]
22148    movh          [r0 + 2015 * 16 + 8], m5
22149
22150    ; mode 31 [row 24]
22151    movu          m6,    [r5 + 9 * 16]
22152    pmaddubsw     m3,    m0,            m6
22153    pmulhrsw      m3,    m7
22154    pmaddubsw     m5,    m2,            m6
22155    pmulhrsw      m5,    m7
22156    packuswb      m3,    m5
22157    movu          [r0 + 1904 * 16],     m3
22158    pmaddubsw     m3,    m1,            m6
22159    pmulhrsw      m3,    m7
22160    pmaddubsw     m5,    m4,            m6
22161    pmulhrsw      m5,    m7
22162    packuswb      m3,    m5
22163    movu          [r0 + 1905 * 16],     m3
22164
22165    ; mode 31 [row 25]
22166    movu          m6,    [r5 + 26 * 16]
22167    pmaddubsw     m3,    m0,            m6
22168    pmulhrsw      m3,    m7
22169    pmaddubsw     m5,    m2,            m6
22170    pmulhrsw      m5,    m7
22171    packuswb      m3,    m5
22172    movu          [r0 + 1906 * 16],     m3
22173
22174    ; mode 33 [row 16 - first half]
22175    movu          [r0 + 2016 * 16],     m3
22176
22177    pmaddubsw     m3,    m1,            m6
22178    pmulhrsw      m3,    m7
22179    pmaddubsw     m5,    m4,            m6
22180    pmulhrsw      m5,    m7
22181    packuswb      m3,    m5
22182    movu          [r0 + 1907 * 16],     m3
22183
22184    ; mode 33 [row 16 - second half]
22185    movu          [r0 + 2017 * 16],     m3
22186
22187    ; mode 32 [row 19]
22188    movu          m6,    [r5 + 4 * 16]
22189    pmaddubsw     m3,    m0,            m6
22190    pmulhrsw      m3,    m7
22191    pmaddubsw     m5,    m2,            m6
22192    pmulhrsw      m5,    m7
22193    packuswb      m3,    m5
22194    movu          [r0 + 1958 * 16],     m3
22195    pmaddubsw     m3,    m1,            m6
22196    pmulhrsw      m3,    m7
22197    pmaddubsw     m5,    m4,            m6
22198    pmulhrsw      m5,    m7
22199    packuswb      m3,    m5
22200    movu          [r0 + 1959 * 16],     m3
22201
22202    ; mode 32 [row 20]
22203    movu          m6,    [r5 + 25 * 16]
22204    pmaddubsw     m3,    m0,            m6
22205    pmulhrsw      m3,    m7
22206    pmaddubsw     m5,    m2,            m6
22207    pmulhrsw      m5,    m7
22208    packuswb      m3,    m5
22209    movu          [r0 + 1960 * 16],     m3
22210    pmaddubsw     m3,    m1,            m6
22211    pmulhrsw      m3,    m7
22212    pmaddubsw     m5,    m4,            m6
22213    pmulhrsw      m5,    m7
22214    packuswb      m3,    m5
22215    movu          [r0 + 1961 * 16],     m3
22216
22217    ; mode 31 [row 26]
22218    movu          m6,    [r5 + 11 * 16]
22219    movu          m0,    [r3 + 15]
22220    movd          m1,    [r3 + 16]
22221    palignr       m1,    m0,        1
22222    punpcklbw     m0,    m1
22223    pmaddubsw     m3,    m0,            m6
22224    pmulhrsw      m3,    m7
22225    movu          m2,    [r3 + 23]
22226    movd          m4,    [r3 + 24]
22227    palignr       m4,    m2,        1
22228    punpcklbw     m2,    m4
22229    pmaddubsw     m5,    m2,            m6
22230    pmulhrsw      m5,    m7
22231    packuswb      m3,    m5
22232    movu          [r0 + 1908 * 16],     m3
22233
22234    movu          m1,    [r3 + 31]
22235    movd          m3,    [r3 + 32]
22236    palignr       m3,    m1,        1
22237    punpcklbw     m1,    m3
22238    pmaddubsw     m3,    m1,            m6
22239    pmulhrsw      m3,    m7
22240    movu          m4,    [r3 + 39]
22241    movd          m5,    [r3 + 40]
22242    palignr       m5,    m4,        1
22243    punpcklbw     m4,    m5
22244    pmaddubsw     m5,    m4,            m6
22245    pmulhrsw      m5,    m7
22246    packuswb      m3,    m5
22247    movu          [r0 + 1909 * 16],     m3
22248
22249    ; mode 31 [row 27]
22250    movu          m6,    [r5 + 28 * 16]
22251    pmaddubsw     m3,    m0,            m6
22252    pmulhrsw      m3,    m7
22253    pmaddubsw     m5,    m2,            m6
22254    pmulhrsw      m5,    m7
22255    packuswb      m3,    m5
22256    movu          [r0 + 1910 * 16],     m3
22257    pmaddubsw     m3,    m1,            m6
22258    pmulhrsw      m3,    m7
22259    pmaddubsw     m5,    m4,            m6
22260    pmulhrsw      m5,    m7
22261    packuswb      m3,    m5
22262    movu          [r0 + 1911 * 16],     m3
22263
22264    ; mode 32 [row 21]
22265    movu          m6,    [r5 + 14 * 16]
22266    pmaddubsw     m3,    m0,            m6
22267    pmulhrsw      m3,    m7
22268    pmaddubsw     m5,    m2,            m6
22269    pmulhrsw      m5,    m7
22270    packuswb      m3,    m5
22271    movu          [r0 + 1962 * 16],     m3
22272    pmaddubsw     m3,    m1,            m6
22273    pmulhrsw      m3,    m7
22274    pmaddubsw     m5,    m4,            m6
22275    pmulhrsw      m5,    m7
22276    packuswb      m3,    m5
22277    movu          [r0 + 1963 * 16],     m3
22278
22279    ; mode 33 [row 17]
22280    movu          m6,    [r5 + 20 * 16]
22281    pmaddubsw     m3,    m0,            m6
22282    pmulhrsw      m3,    m7
22283    pmaddubsw     m5,    m2,            m6
22284    pmulhrsw      m5,    m7
22285    packuswb      m3,    m5
22286    movu          [r0 + 2018 * 16],     m3
22287    pmaddubsw     m3,    m1,            m6
22288    pmulhrsw      m3,    m7
22289    pmaddubsw     m5,    m4,            m6
22290    pmulhrsw      m5,    m7
22291    packuswb      m3,    m5
22292    movu          [r0 + 2019 * 16],     m3
22293
22294    ; mode 31 [row 28]
22295    movu          m6,    [r5 + 13 * 16]
22296    movu          m0,    [r3 + 16]
22297    movd          m1,    [r3 + 17]
22298    palignr       m1,    m0,        1
22299    punpcklbw     m0,    m1
22300    pmaddubsw     m3,    m0,            m6
22301    pmulhrsw      m3,    m7
22302    movu          m2,    [r3 + 24]
22303    movd          m4,    [r3 + 25]
22304    palignr       m4,    m2,        1
22305    punpcklbw     m2,    m4
22306    pmaddubsw     m5,    m2,            m6
22307    pmulhrsw      m5,    m7
22308    packuswb      m3,    m5
22309    movu          [r0 + 1912 * 16],     m3
22310
22311    movu          m1,    [r3 + 32]
22312    movd          m3,    [r3 + 33]
22313    palignr       m3,    m1,        1
22314    punpcklbw     m1,    m3
22315    pmaddubsw     m3,    m1,            m6
22316    pmulhrsw      m3,    m7
22317    movu          m4,    [r3 + 40]
22318    movd          m5,    [r3 + 41]
22319    palignr       m5,    m4,        1
22320    punpcklbw     m4,    m5
22321    pmaddubsw     m5,    m4,            m6
22322    pmulhrsw      m5,    m7
22323    packuswb      m3,    m5
22324    movu          [r0 + 1913 * 16],     m3
22325
22326    ; mode 31 [row 29]
22327    movu          m6,    [r5 + 30 * 16]
22328    pmaddubsw     m3,    m0,            m6
22329    pmulhrsw      m3,    m7
22330    pmaddubsw     m5,    m2,            m6
22331    pmulhrsw      m5,    m7
22332    packuswb      m3,    m5
22333    movu          [r0 + 1914 * 16],     m3
22334    pmaddubsw     m3,    m1,            m6
22335    pmulhrsw      m3,    m7
22336    pmaddubsw     m5,    m4,            m6
22337    pmulhrsw      m5,    m7
22338    packuswb      m3,    m5
22339    movu          [r0 + 1915 * 16],     m3
22340
22341    ; mode 32 [row 22]
22342    movu          m6,    [r5 + 3 * 16]
22343    pmaddubsw     m3,    m0,            m6
22344    pmulhrsw      m3,    m7
22345    pmaddubsw     m5,    m2,            m6
22346    pmulhrsw      m5,    m7
22347    packuswb      m3,    m5
22348    movu          [r0 + 1964 * 16],     m3
22349    pmaddubsw     m3,    m1,            m6
22350    pmulhrsw      m3,    m7
22351    pmaddubsw     m5,    m4,            m6
22352    pmulhrsw      m5,    m7
22353    packuswb      m3,    m5
22354    movu          [r0 + 1965 * 16],     m3
22355
22356    ; mode 32 [row 23]
22357    movu          m6,    [r5 + 24 * 16]
22358    pmaddubsw     m3,    m0,            m6
22359    pmulhrsw      m3,    m7
22360    pmaddubsw     m5,    m2,            m6
22361    pmulhrsw      m5,    m7
22362    packuswb      m3,    m5
22363    movu          [r0 + 1966 * 16],     m3
22364    pmaddubsw     m3,    m1,            m6
22365    pmulhrsw      m3,    m7
22366    pmaddubsw     m5,    m4,            m6
22367    pmulhrsw      m5,    m7
22368    packuswb      m3,    m5
22369    movu          [r0 + 1967 * 16],     m3
22370
22371    ; mode 33 [row 18]
22372    movu          m6,    [r5 + 14 * 16]
22373    pmaddubsw     m3,    m0,            m6
22374    pmulhrsw      m3,    m7
22375    pmaddubsw     m5,    m2,            m6
22376    pmulhrsw      m5,    m7
22377    packuswb      m3,    m5
22378    movu          [r0 + 2020 * 16],     m3
22379    pmaddubsw     m3,    m1,            m6
22380    pmulhrsw      m3,    m7
22381    pmaddubsw     m5,    m4,            m6
22382    pmulhrsw      m5,    m7
22383    packuswb      m3,    m5
22384    movu          [r0 + 2021 * 16],     m3
22385
22386    ; mode 31 [row 30]
22387    movu          m6,    [r5 + 15 * 16]
22388    movu          m0,    [r3 + 17]
22389    movd          m1,    [r3 + 18]
22390    palignr       m1,    m0,        1
22391    punpcklbw     m0,    m1
22392    pmaddubsw     m3,    m0,            m6
22393    pmulhrsw      m3,    m7
22394    movu          m2,    [r3 + 25]
22395    movd          m4,    [r3 + 26]
22396    palignr       m4,    m2,        1
22397    punpcklbw     m2,    m4
22398    pmaddubsw     m5,    m2,            m6
22399    pmulhrsw      m5,    m7
22400    packuswb      m3,    m5
22401    movu          [r0 + 1916 * 16],     m3
22402
22403    movu          m1,    [r3 + 33]
22404    movd          m3,    [r3 + 34]
22405    palignr       m3,    m1,        1
22406    punpcklbw     m1,    m3
22407    pmaddubsw     m3,    m1,            m6
22408    pmulhrsw      m3,    m7
22409    movu          m4,    [r3 + 41]
22410    movd          m5,    [r3 + 42]
22411    palignr       m5,    m4,        1
22412    punpcklbw     m4,    m5
22413    pmaddubsw     m5,    m4,            m6
22414    pmulhrsw      m5,    m7
22415    packuswb      m3,    m5
22416    movu          [r0 + 1917 * 16],     m3
22417
22418    ; mode 32 [row 24]
22419    movu          m6,    [r5 + 13 * 16]
22420    pmaddubsw     m3,    m0,            m6
22421    pmulhrsw      m3,    m7
22422    pmaddubsw     m5,    m2,            m6
22423    pmulhrsw      m5,    m7
22424    packuswb      m3,    m5
22425    movu          [r0 + 1968 * 16],     m3
22426    pmaddubsw     m3,    m1,            m6
22427    pmulhrsw      m3,    m7
22428    pmaddubsw     m5,    m4,            m6
22429    pmulhrsw      m5,    m7
22430    packuswb      m3,    m5
22431    movu          [r0 + 1969 * 16],     m3
22432
22433    ; mode 33 [row 19]
22434    movu          m6,    [r5 + 8 * 16]
22435    pmaddubsw     m3,    m0,            m6
22436    pmulhrsw      m3,    m7
22437    pmaddubsw     m5,    m2,            m6
22438    pmulhrsw      m5,    m7
22439    packuswb      m3,    m5
22440    movu          [r0 + 2022 * 16],     m3
22441    pmaddubsw     m3,    m1,            m6
22442    pmulhrsw      m3,    m7
22443    pmaddubsw     m5,    m4,            m6
22444    pmulhrsw      m5,    m7
22445    packuswb      m3,    m5
22446    movu          [r0 + 2023 * 16],     m3
22447
22448    ; mode 31 [row 31]
22449    movu          m0,    [r3 + 18]
22450    movd          m1,    [r3 + 19]
22451    palignr       m1,    m0,        1
22452    punpcklbw     m0,    m1
22453    movu          m2,    [r3 + 26]
22454    movd          m3,    [r3 + 27]
22455    palignr       m3,    m2,        1
22456    punpcklbw     m2,    m3
22457    movu          m1,    [r3 + 34]
22458    movd          m3,    [r3 + 35]
22459    palignr       m3,    m1,        1
22460    punpcklbw     m1,    m3
22461    movu          m4,    [r3 + 42]
22462    movd          m5,    [r3 + 43]
22463    palignr       m5,    m4,        1
22464    punpcklbw     m4,    m5
22465
22466    pshufb        m5,    m0,            [tab_S2]
22467    movh          [r0 + 1918 * 16],     m5
22468    pshufb        m5,    m2,            [tab_S2]
22469    movh          [r0 + 1918 * 16 + 8], m5
22470    pshufb        m5,    m1,            [tab_S2]
22471    movh          [r0 + 1919 * 16],     m5
22472    pshufb        m5,    m4,            [tab_S2]
22473    movh          [r0 + 1919 * 16 + 8], m5
22474
22475    ; mode 32 [row 25]
22476    movu          m6,    [r5 + 2 * 16]
22477    pmaddubsw     m3,    m0,            m6
22478    pmulhrsw      m3,    m7
22479    pmaddubsw     m5,    m2,            m6
22480    pmulhrsw      m5,    m7
22481    packuswb      m3,    m5
22482    movu          [r0 + 1970 * 16],     m3
22483
22484    ; mode 33 [row 20 - first half]
22485    movu          [r0 + 2024 * 16],     m3
22486
22487    pmaddubsw     m3,    m1,            m6
22488    pmulhrsw      m3,    m7
22489    pmaddubsw     m5,    m4,            m6
22490    pmulhrsw      m5,    m7
22491    packuswb      m3,    m5
22492    movu          [r0 + 1971 * 16],     m3
22493
22494    ; mode 33 [row 20 - second half]
22495    movu          [r0 + 2025 * 16],     m3
22496
22497    ; mode 32 [row 26]
22498    movu          m6,    [r5 + 23 * 16]
22499    pmaddubsw     m3,    m0,            m6
22500    pmulhrsw      m3,    m7
22501    pmaddubsw     m5,    m2,            m6
22502    pmulhrsw      m5,    m7
22503    packuswb      m3,    m5
22504    movu          [r0 + 1972 * 16],     m3
22505    pmaddubsw     m3,    m1,            m6
22506    pmulhrsw      m3,    m7
22507    pmaddubsw     m5,    m4,            m6
22508    pmulhrsw      m5,    m7
22509    packuswb      m3,    m5
22510    movu          [r0 + 1973 * 16],     m3
22511
22512    ; mode 33 [row 21]
22513    movu          m6,    [r5 + 28 * 16]
22514    pmaddubsw     m3,    m0,            m6
22515    pmulhrsw      m3,    m7
22516    pmaddubsw     m5,    m2,            m6
22517    pmulhrsw      m5,    m7
22518    packuswb      m3,    m5
22519    movu          [r0 + 2026 * 16],     m3
22520    pmaddubsw     m3,    m1,            m6
22521    pmulhrsw      m3,    m7
22522    pmaddubsw     m5,    m4,            m6
22523    pmulhrsw      m5,    m7
22524    packuswb      m3,    m5
22525    movu          [r0 + 2027 * 16],     m3
22526
22527    ; mode 32 [row 27]
22528    movu          m6,    [r5 + 12 * 16]
22529    movu          m0,    [r3 + 19]
22530    movd          m1,    [r3 + 20]
22531    palignr       m1,    m0,        1
22532    punpcklbw     m0,    m1
22533    pmaddubsw     m3,    m0,            m6
22534    pmulhrsw      m3,    m7
22535    movu          m2,    [r3 + 27]
22536    movd          m4,    [r3 + 28]
22537    palignr       m4,    m2,        1
22538    punpcklbw     m2,    m4
22539    pmaddubsw     m5,    m2,            m6
22540    pmulhrsw      m5,    m7
22541    packuswb      m3,    m5
22542    movu          [r0 + 1974 * 16],     m3
22543
22544    movu          m1,    [r3 + 35]
22545    movd          m3,    [r3 + 36]
22546    palignr       m3,    m1,        1
22547    punpcklbw     m1,    m3
22548    pmaddubsw     m3,    m1,            m6
22549    pmulhrsw      m3,    m7
22550    movu          m4,    [r3 + 43]
22551    movd          m5,    [r3 + 44]
22552    palignr       m5,    m4,        1
22553    punpcklbw     m4,    m5
22554    pmaddubsw     m5,    m4,            m6
22555    pmulhrsw      m5,    m7
22556    packuswb      m3,    m5
22557    movu          [r0 + 1975 * 16],     m3
22558
22559    ; mode 33 [row 22]
22560    movu          m6,    [r5 + 22 * 16]
22561    pmaddubsw     m3,    m0,            m6
22562    pmulhrsw      m3,    m7
22563    pmaddubsw     m5,    m2,            m6
22564    pmulhrsw      m5,    m7
22565    packuswb      m3,    m5
22566    movu          [r0 + 2028 * 16],     m3
22567    pmaddubsw     m3,    m1,            m6
22568    pmulhrsw      m3,    m7
22569    pmaddubsw     m5,    m4,            m6
22570    pmulhrsw      m5,    m7
22571    packuswb      m3,    m5
22572    movu          [r0 + 2029 * 16],     m3
22573
22574    ; mode 32 [row 28]
22575    movu          m6,    [r5 + 1 * 16]
22576    movu          m0,    [r3 + 20]
22577    movd          m1,    [r3 + 21]
22578    palignr       m1,    m0,        1
22579    punpcklbw     m0,    m1
22580    pmaddubsw     m3,    m0,            m6
22581    pmulhrsw      m3,    m7
22582    movu          m2,    [r3 + 28]
22583    movd          m4,    [r3 + 29]
22584    palignr       m4,    m2,        1
22585    punpcklbw     m2,    m4
22586    pmaddubsw     m5,    m2,            m6
22587    pmulhrsw      m5,    m7
22588    packuswb      m3,    m5
22589    movu          [r0 + 1976 * 16],     m3
22590
22591    movu          m1,    [r3 + 36]
22592    movd          m3,    [r3 + 37]
22593    palignr       m3,    m1,        1
22594    punpcklbw     m1,    m3
22595    pmaddubsw     m3,    m1,            m6
22596    pmulhrsw      m3,    m7
22597    movu          m4,    [r3 + 44]
22598    movd          m5,    [r3 + 45]
22599    palignr       m5,    m4,        1
22600    punpcklbw     m4,    m5
22601    pmaddubsw     m5,    m4,            m6
22602    pmulhrsw      m5,    m7
22603    packuswb      m3,    m5
22604    movu          [r0 + 1977 * 16],     m3
22605
22606    ; mode 32 [row 29]
22607    movu          m6,    [r5 + 22 * 16]
22608    pmaddubsw     m3,    m0,            m6
22609    pmulhrsw      m3,    m7
22610    pmaddubsw     m5,    m2,            m6
22611    pmulhrsw      m5,    m7
22612    packuswb      m3,    m5
22613    movu          [r0 + 1978 * 16],     m3
22614    pmaddubsw     m3,    m1,            m6
22615    pmulhrsw      m3,    m7
22616    pmaddubsw     m5,    m4,            m6
22617    pmulhrsw      m5,    m7
22618    packuswb      m3,    m5
22619    movu          [r0 + 1979 * 16],     m3
22620
22621    ; mode 33 [row 23]
22622    movu          m6,    [r5 + 16 * 16]
22623    pmaddubsw     m3,    m0,            m6
22624    pmulhrsw      m3,    m7
22625    pmaddubsw     m5,    m2,            m6
22626    pmulhrsw      m5,    m7
22627    packuswb      m3,    m5
22628    movu          [r0 + 2030 * 16],     m3
22629    pmaddubsw     m3,    m1,            m6
22630    pmulhrsw      m3,    m7
22631    pmaddubsw     m5,    m4,            m6
22632    pmulhrsw      m5,    m7
22633    packuswb      m3,    m5
22634    movu          [r0 + 2031 * 16],     m3
22635
22636    ; mode 32 [row 30]
22637    movu          m6,    [r5 + 11 * 16]
22638    movu          m0,    [r3 + 21]
22639    movd          m1,    [r3 + 22]
22640    palignr       m1,    m0,        1
22641    punpcklbw     m0,    m1
22642    pmaddubsw     m3,    m0,            m6
22643    pmulhrsw      m3,    m7
22644    movu          m2,    [r3 + 29]
22645    movd          m4,    [r3 + 30]
22646    palignr       m4,    m2,        1
22647    punpcklbw     m2,    m4
22648    pmaddubsw     m5,    m2,            m6
22649    pmulhrsw      m5,    m7
22650    packuswb      m3,    m5
22651    movu          [r0 + 1980 * 16],     m3
22652
22653    movu          m1,    [r3 + 37]
22654    movd          m3,    [r3 + 38]
22655    palignr       m3,    m1,        1
22656    punpcklbw     m1,    m3
22657    pmaddubsw     m3,    m1,            m6
22658    pmulhrsw      m3,    m7
22659    movu          m4,    [r3 + 45]
22660    movd          m5,    [r3 + 46]
22661    palignr       m5,    m4,        1
22662    punpcklbw     m4,    m5
22663    pmaddubsw     m5,    m4,            m6
22664    pmulhrsw      m5,    m7
22665    packuswb      m3,    m5
22666    movu          [r0 + 1981 * 16],     m3
22667
22668    ; mode 33 [row 24]
22669    movu          m6,    [r5 + 10 * 16]
22670    pmaddubsw     m3,    m0,            m6
22671    pmulhrsw      m3,    m7
22672    pmaddubsw     m5,    m2,            m6
22673    pmulhrsw      m5,    m7
22674    packuswb      m3,    m5
22675    movu          [r0 + 2032 * 16],     m3
22676    pmaddubsw     m3,    m1,            m6
22677    pmulhrsw      m3,    m7
22678    pmaddubsw     m5,    m4,            m6
22679    pmulhrsw      m5,    m7
22680    packuswb      m3,    m5
22681    movu          [r0 + 2033 * 16],     m3
22682
22683    ; mode 32 [row 31]
22684    movu          m0,    [r3 + 22]
22685    movd          m1,    [r3 + 23]
22686    palignr       m1,    m0,        1
22687    punpcklbw     m0,    m1
22688    movu          m2,    [r3 + 30]
22689    movd          m3,    [r3 + 31]
22690    palignr       m3,    m2,        1
22691    punpcklbw     m2,    m3
22692    movu          m1,    [r3 + 38]
22693    movd          m3,    [r3 + 39]
22694    palignr       m3,    m1,        1
22695    punpcklbw     m1,    m3
22696    movu          m4,    [r3 + 46]
22697    movd          m5,    [r3 + 47]
22698    palignr       m5,    m4,        1
22699    punpcklbw     m4,    m5
22700
22701    pshufb        m5,    m0,            [tab_S2]
22702    movh          [r0 + 1982 * 16],     m5
22703    pshufb        m5,    m2,            [tab_S2]
22704    movh          [r0 + 1982 * 16 + 8], m5
22705    pshufb        m5,    m1,            [tab_S2]
22706    movh          [r0 + 1983 * 16],     m5
22707    pshufb        m5,    m4,            [tab_S2]
22708    movh          [r0 + 1983 * 16 + 8], m5
22709
22710    ; mode 33 [row 25]
22711    movu          m6,    [r5 + 4 * 16]
22712    pmaddubsw     m3,    m0,            m6
22713    pmulhrsw      m3,    m7
22714    pmaddubsw     m5,    m2,            m6
22715    pmulhrsw      m5,    m7
22716    packuswb      m3,    m5
22717    movu          [r0 + 2034 * 16],     m3
22718    pmaddubsw     m3,    m1,            m6
22719    pmulhrsw      m3,    m7
22720    pmaddubsw     m5,    m4,            m6
22721    pmulhrsw      m5,    m7
22722    packuswb      m3,    m5
22723    movu          [r0 + 2035 * 16],     m3
22724
22725    ; mode 33 [row 26]
22726    movu          m6,    [r5 + 30 * 16]
22727    pmaddubsw     m3,    m0,            m6
22728    pmulhrsw      m3,    m7
22729    pmaddubsw     m5,    m2,            m6
22730    pmulhrsw      m5,    m7
22731    packuswb      m3,    m5
22732    movu          [r0 + 2036 * 16],     m3
22733    pmaddubsw     m3,    m1,            m6
22734    pmulhrsw      m3,    m7
22735    pmaddubsw     m5,    m4,            m6
22736    pmulhrsw      m5,    m7
22737    packuswb      m3,    m5
22738    movu          [r0 + 2037 * 16],     m3
22739
22740    ; mode 33 [row 27]
22741    movu          m6,    [r5 + 24 * 16]
22742    movu          m0,    [r3 + 23]
22743    movd          m1,    [r3 + 24]
22744    palignr       m1,    m0,        1
22745    punpcklbw     m0,    m1
22746    pmaddubsw     m3,    m0,            m6
22747    pmulhrsw      m3,    m7
22748    movu          m2,    [r3 + 31]
22749    movd          m4,    [r3 + 32]
22750    palignr       m4,    m2,        1
22751    punpcklbw     m2,    m4
22752    pmaddubsw     m5,    m2,            m6
22753    pmulhrsw      m5,    m7
22754    packuswb      m3,    m5
22755    movu          [r0 + 2038 * 16],     m3
22756
22757    movu          m1,    [r3 + 39]
22758    movd          m3,    [r3 + 40]
22759    palignr       m3,    m1,        1
22760    punpcklbw     m1,    m3
22761    pmaddubsw     m3,    m1,            m6
22762    pmulhrsw      m3,    m7
22763    movu          m4,    [r3 + 47]
22764    movd          m5,    [r3 + 48]
22765    palignr       m5,    m4,        1
22766    punpcklbw     m4,    m5
22767    pmaddubsw     m5,    m4,            m6
22768    pmulhrsw      m5,    m7
22769    packuswb      m3,    m5
22770    movu          [r0 + 2039 * 16],     m3
22771
22772    ; mode 33 [row 28]
22773    movu          m6,    [r5 + 18 * 16]
22774    movu          m0,    [r3 + 24]
22775    movd          m1,    [r3 + 25]
22776    palignr       m1,    m0,        1
22777    punpcklbw     m0,    m1
22778    pmaddubsw     m3,    m0,            m6
22779    pmulhrsw      m3,    m7
22780    movu          m2,    [r3 + 32]
22781    movd          m4,    [r3 + 33]
22782    palignr       m4,    m2,        1
22783    punpcklbw     m2,    m4
22784    pmaddubsw     m5,    m2,            m6
22785    pmulhrsw      m5,    m7
22786    packuswb      m3,    m5
22787    movu          [r0 + 2040 * 16],     m3
22788
22789    movu          m1,    [r3 + 40]
22790    movd          m3,    [r3 + 41]
22791    palignr       m3,    m1,        1
22792    punpcklbw     m1,    m3
22793    pmaddubsw     m3,    m1,            m6
22794    pmulhrsw      m3,    m7
22795    movu          m4,    [r3 + 48]
22796    movd          m5,    [r3 + 49]
22797    palignr       m5,    m4,        1
22798    punpcklbw     m4,    m5
22799    pmaddubsw     m5,    m4,            m6
22800    pmulhrsw      m5,    m7
22801    packuswb      m3,    m5
22802    movu          [r0 + 2041 * 16],     m3
22803
22804    ; mode 33 [row 29]
22805    movu          m6,    [r5 + 12 * 16]
22806    movu          m0,    [r3 + 25]
22807    movd          m1,    [r3 + 26]
22808    palignr       m1,    m0,        1
22809    punpcklbw     m0,    m1
22810    pmaddubsw     m3,    m0,            m6
22811    pmulhrsw      m3,    m7
22812    movu          m2,    [r3 + 33]
22813    movd          m4,    [r3 + 34]
22814    palignr       m4,    m2,        1
22815    punpcklbw     m2,    m4
22816    pmaddubsw     m5,    m2,            m6
22817    pmulhrsw      m5,    m7
22818    packuswb      m3,    m5
22819    movu          [r0 + 2042 * 16],     m3
22820
22821    movu          m1,    [r3 + 41]
22822    movd          m3,    [r3 + 42]
22823    palignr       m3,    m1,        1
22824    punpcklbw     m1,    m3
22825    pmaddubsw     m3,    m1,            m6
22826    pmulhrsw      m3,    m7
22827    movu          m4,    [r3 + 49]
22828    movd          m5,    [r3 + 50]
22829    palignr       m5,    m4,        1
22830    punpcklbw     m4,    m5
22831    pmaddubsw     m5,    m4,            m6
22832    pmulhrsw      m5,    m7
22833    packuswb      m3,    m5
22834    movu          [r0 + 2043 * 16],     m3
22835
22836    ; mode 33 [row 30]
22837    movu          m6,    [r5 + 6 * 16]
22838    movu          m0,    [r3 + 26]
22839    movd          m1,    [r3 + 27]
22840    palignr       m1,    m0,        1
22841    punpcklbw     m0,    m1
22842    pmaddubsw     m3,    m0,            m6
22843    pmulhrsw      m3,    m7
22844    movu          m2,    [r3 + 34]
22845    movd          m4,    [r3 + 35]
22846    palignr       m4,    m2,        1
22847    punpcklbw     m2,    m4
22848    pmaddubsw     m5,    m2,            m6
22849    pmulhrsw      m5,    m7
22850    packuswb      m3,    m5
22851    movu          [r0 + 2044 * 16],     m3
22852
22853    movu          m1,    [r3 + 42]
22854    movd          m3,    [r3 + 43]
22855    palignr       m3,    m1,        1
22856    punpcklbw     m1,    m3
22857    pmaddubsw     m3,    m1,            m6
22858    pmulhrsw      m3,    m7
22859    movu          m4,    [r3 + 50]
22860    movd          m5,    [r3 + 51]
22861    palignr       m5,    m4,        1
22862    punpcklbw     m4,    m5
22863    pmaddubsw     m5,    m4,            m6
22864    pmulhrsw      m5,    m7
22865    packuswb      m3,    m5
22866    movu          [r0 + 2045 * 16],     m3
22867
22868    ; mode 33 [row 31]
22869    movu          m5,                   [r3 + 27]
22870    movu          [r0 + 2046 * 16],     m5
22871    movu          m5,                   [r3 + 43]
22872    movu          [r0 + 2047 * 16],     m5
22873
22874    ;mode 34 [row 0]
22875    movu       m0,              [r3 + 2]
22876    movu       [r0 + 2048 * 16],   m0
22877    movu       m1,              [r3 + 18]
22878    movu       [r0 + 2049 * 16],   m1
22879
22880    ;mode 34 [row 1]
22881    movu       m2,              [r3 + 34]
22882    palignr    m3,              m1,       m0,    1
22883    movu       [r0 + 2050 * 16],   m3
22884    palignr    m4,              m2,       m1,    1
22885    movu       [r0 + 2051 * 16],   m4
22886
22887    ;mode 34 [row 2]
22888    palignr    m3,              m1,       m0,    2
22889    movu       [r0 + 2052 * 16],   m3
22890    palignr    m4,              m2,       m1,    2
22891    movu       [r0 + 2053 * 16],   m4
22892
22893    ;mode 34 [row 3]
22894    palignr    m3,              m1,       m0,    3
22895    movu       [r0 + 2054 * 16],   m3
22896    palignr    m4,              m2,       m1,    3
22897    movu       [r0 + 2055 * 16],   m4
22898
22899    ;mode 34 [row 4]
22900    palignr    m3,              m1,       m0,    4
22901    movu       [r0 + 2056 * 16],   m3
22902    palignr    m4,              m2,       m1,    4
22903    movu       [r0 + 2057 * 16],   m4
22904
22905    ;mode 34 [row 5]
22906    palignr    m3,              m1,       m0,    5
22907    movu       [r0 + 2058 * 16],   m3
22908    palignr    m4,              m2,       m1,    5
22909    movu       [r0 + 2059 * 16],   m4
22910
22911    ;mode 34 [row 6]
22912    palignr    m3,              m1,       m0,    6
22913    movu       [r0 + 2060 * 16],   m3
22914    palignr    m4,              m2,       m1,    6
22915    movu       [r0 + 2061 * 16],   m4
22916
22917    ;mode 34 [row 7]
22918    palignr    m3,              m1,       m0,    7
22919    movu       [r0 + 2062 * 16],   m3
22920    palignr    m4,              m2,       m1,    7
22921    movu       [r0 + 2063 * 16],   m4
22922
22923    ;mode 34 [row 8]
22924    palignr    m3,              m1,       m0,    8
22925    movu       [r0 + 2064 * 16],   m3
22926    palignr    m4,              m2,       m1,    8
22927    movu       [r0 + 2065 * 16],   m4
22928
22929    ;mode 34 [row 9]
22930    palignr    m3,              m1,       m0,    9
22931    movu       [r0 + 2066 * 16],   m3
22932    palignr    m4,              m2,       m1,    9
22933    movu       [r0 + 2067 * 16],   m4
22934
22935    ;mode 34 [row 10]
22936    palignr    m3,              m1,       m0,    10
22937    movu       [r0 + 2068 * 16],   m3
22938    palignr    m4,              m2,       m1,    10
22939    movu       [r0 + 2069 * 16],   m4
22940
22941    ;mode 34 [row 11]
22942    palignr    m3,              m1,       m0,    11
22943    movu       [r0 + 2070 * 16],   m3
22944    palignr    m4,              m2,       m1,    11
22945    movu       [r0 + 2071 * 16],   m4
22946
22947    ;mode 34 [row 12]
22948    palignr    m3,              m1,       m0,    12
22949    movu       [r0 + 2072 * 16],   m3
22950    palignr    m4,              m2,       m1,    12
22951    movu       [r0 + 2073 * 16],   m4
22952
22953    ;mode 34 [row 13]
22954    palignr    m3,              m1,       m0,    13
22955    movu       [r0 + 2074 * 16],   m3
22956    palignr    m4,              m2,       m1,    13
22957    movu       [r0 + 2075 * 16],   m4
22958
22959    ;mode 34 [row 14]
22960    palignr    m3,              m1,       m0,    14
22961    movu       [r0 + 2076 * 16],   m3
22962    palignr    m4,              m2,       m1,    14
22963    movu       [r0 + 2077 * 16],   m4
22964
22965    ;mode 34 [row 15]
22966    palignr    m3,              m1,       m0,    15
22967    movu       [r0 + 2078 * 16],   m3
22968    palignr    m4,              m2,       m1,    15
22969    movu       [r0 + 2079 * 16],   m4
22970
22971    ;mode 34 [row 16]
22972    palignr    m3,              m1,       m0,    16
22973    movu       [r0 + 2080 * 16],   m3
22974    palignr    m4,              m2,       m1,    16
22975    movu       [r0 + 2081 * 16],   m4
22976
22977    ;mode 34 [row 17]
22978    movu       m0,                [r3 + 19]
22979    movu       [r0 + 2082 * 16],   m0
22980    movu       m1,                [r3 + 35]
22981    movu       [r0 + 2083 * 16],   m1
22982
22983    mov        r2d, r6d
22984    mov        [r4], r2b
22985    mov        r2d, [rsp]
22986    mov        [r1 + 64], r2b
22987
22988    ;mode 34 [row 18]
22989    movu       m2,              [r3 + 51]
22990    palignr    m3,              m1,       m0,    1
22991    movu       [r0 + 2084 * 16],   m3
22992    palignr    m4,              m2,       m1,    1
22993    movu       [r0 + 2085 * 16],   m4
22994
22995    ;mode 34 [row 19]
22996    palignr    m3,              m1,       m0,    2
22997    movu       [r0 + 2086 * 16],   m3
22998    palignr    m4,              m2,       m1,    2
22999    movu       [r0 + 2087 * 16],   m4
23000
23001    ;mode 34 [row 20]
23002    palignr    m3,              m1,       m0,    3
23003    movu       [r0 + 2088 * 16],   m3
23004    palignr    m4,              m2,       m1,    3
23005    movu       [r0 + 2089 * 16],   m4
23006
23007    ;mode 34 [row 21]
23008    palignr    m3,              m1,       m0,    4
23009    movu       [r0 + 2090 * 16],   m3
23010    palignr    m4,              m2,       m1,    4
23011    movu       [r0 + 2091 * 16],   m4
23012
23013    ;mode 34 [row 22]
23014    palignr    m3,              m1,       m0,    5
23015    movu       [r0 + 2092 * 16],   m3
23016    palignr    m4,              m2,       m1,    5
23017    movu       [r0 + 2093 * 16],   m4
23018
23019    ;mode 34 [row 23]
23020    palignr    m3,              m1,       m0,    6
23021    movu       [r0 + 2094 * 16],   m3
23022    palignr    m4,              m2,       m1,    6
23023    movu       [r0 + 2095 * 16],   m4
23024
23025    ;mode 34 [row 24]
23026    palignr    m3,              m1,       m0,    7
23027    movu       [r0 + 2096 * 16],   m3
23028    palignr    m4,              m2,       m1,    7
23029    movu       [r0 + 2097 * 16],   m4
23030
23031    ;mode 34 [row 25]
23032    palignr    m3,              m1,       m0,    8
23033    movu       [r0 + 2098 * 16],   m3
23034    palignr    m4,              m2,       m1,    8
23035    movu       [r0 + 2099 * 16],   m4
23036
23037    ;mode 34 [row 26]
23038    palignr    m3,              m1,       m0,    9
23039    movu       [r0 + 2100 * 16],   m3
23040    palignr    m4,              m2,       m1,    9
23041    movu       [r0 + 2101 * 16],   m4
23042
23043    ;mode 34 [row 27]
23044    palignr    m3,              m1,       m0,    10
23045    movu       [r0 + 2102 * 16],   m3
23046    palignr    m4,              m2,       m1,    10
23047    movu       [r0 + 2103 * 16],   m4
23048
23049    ;mode 34 [row 28]
23050    palignr    m3,              m1,       m0,    11
23051    movu       [r0 + 2104 * 16],   m3
23052    palignr    m4,              m2,       m1,    11
23053    movu       [r0 + 2105 * 16],   m4
23054
23055    ;mode 34 [row 29]
23056    palignr    m3,              m1,       m0,    12
23057    movu       [r0 + 2106 * 16],   m3
23058    palignr    m4,              m2,       m1,    12
23059    movu       [r0 + 2107 * 16],   m4
23060
23061    ;mode 34 [row 30]
23062    palignr    m3,              m1,       m0,    13
23063    movu       [r0 + 2108 * 16],   m3
23064    palignr    m4,              m2,       m1,    13
23065    movu       [r0 + 2109 * 16],   m4
23066
23067    ;mode 34 [row 31]
23068    palignr    m3,              m1,       m0,    14
23069    movu       [r0 + 2110 * 16],   m3
23070    palignr    m4,              m2,       m1,    14
23071    movu       [r0 + 2111 * 16],   m4
23072    RET
23073
23074
23075;-----------------------------------------------------------------------------
23076; void all_angs_pred_4x4(pixel *dest, pixel *refPix, pixel *filtPix, int bLuma)
23077;-----------------------------------------------------------------------------
23078INIT_YMM avx2
23079cglobal all_angs_pred_4x4, 2, 2, 6
23080
23081    mova           m5, [pw_1024]
23082
23083; mode 2
23084
23085    vbroadcasti128 m0, [r1 + 9]
23086    pshufb         m1, m0, [allAng4_shuf_mode2]
23087    movu           [r0], xm1
23088
23089; mode 3
23090
23091    pshufb         m1, m0, [allAng4_shuf_mode3_4]
23092    pmaddubsw      m1, [allAng4_fact_mode3_4]
23093    pmulhrsw       m1, m5
23094
23095; mode 4
23096
23097    pshufb         m2, m0, [allAng4_shuf_mode3_4 + mmsize]
23098    pmaddubsw      m2, [allAng4_fact_mode3_4 + mmsize]
23099    pmulhrsw       m2, m5
23100    packuswb       m1, m2
23101    movu           [r0 + (3 - 2) * 16], m1
23102
23103; mode 5
23104
23105    pshufb         m1, m0, [allAng4_shuf_mode5_6]
23106    pmaddubsw      m1, [allAng4_fact_mode5_6]
23107    pmulhrsw       m1, m5
23108
23109; mode 6
23110
23111    pshufb         m2, m0, [allAng4_shuf_mode5_6 + mmsize]
23112    pmaddubsw      m2, [allAng4_fact_mode5_6 + mmsize]
23113    pmulhrsw       m2, m5
23114    packuswb       m1, m2
23115    movu           [r0 + (5 - 2) * 16], m1
23116
23117; mode 7
23118
23119    pshufb         m3, m0, [allAng4_shuf_mode7_8]
23120    pmaddubsw      m1, m3, [allAng4_fact_mode7_8]
23121    pmulhrsw       m1, m5
23122
23123; mode 8
23124
23125    pshufb         m2, m0, [allAng4_shuf_mode7_8 + mmsize]
23126    pmaddubsw      m2, [allAng4_fact_mode7_8 + mmsize]
23127    pmulhrsw       m2, m5
23128    packuswb       m1, m2
23129    movu           [r0 + (7 - 2) * 16], m1
23130
23131; mode 9
23132
23133    pmaddubsw      m3, [allAng4_fact_mode9]
23134    pmulhrsw       m3, m5
23135    packuswb       m3, m3
23136    vpermq         m3, m3, 11011000b
23137    movu           [r0 + (9 - 2) * 16], xm3
23138
23139; mode 10
23140
23141    pshufb         xm1, xm0, [allAng4_shuf_mode10]
23142    movu           [r0 + (10 - 2) * 16], xm1
23143
23144    pxor           xm1, xm1
23145    movd           xm2, [r1 + 1]
23146    pshufd         xm3, xm2, 0
23147    punpcklbw      xm3, xm1
23148    pinsrb         xm2, [r1], 0
23149    pshufb         xm4, xm2, xm1
23150    punpcklbw      xm4, xm1
23151    psubw          xm3, xm4
23152    psraw          xm3, 1
23153    pshufb         xm4, xm0, xm1
23154    punpcklbw      xm4, xm1
23155    paddw          xm3, xm4
23156    packuswb       xm3, xm1
23157
23158    pextrb         [r0 + 128], xm3, 0
23159    pextrb         [r0 + 132], xm3, 1
23160    pextrb         [r0 + 136], xm3, 2
23161    pextrb         [r0 + 140], xm3, 3
23162
23163; mode 11
23164
23165    vbroadcasti128 m0, [r1]
23166    pshufb         m3, m0, [allAng4_shuf_mode11_12]
23167    pmaddubsw      m1, m3, [allAng4_fact_mode11_12]
23168    pmulhrsw       m1, m5
23169
23170; mode 12
23171
23172    pmaddubsw      m2, m3, [allAng4_fact_mode11_12 + mmsize]
23173    pmulhrsw       m2, m5
23174    packuswb       m1, m2
23175    movu           [r0 + (11 - 2) * 16], m1
23176
23177; mode 13
23178
23179    pmaddubsw      m3, [allAng4_fact_mode13_14]
23180    pmulhrsw       m3, m5
23181
23182; mode 14
23183
23184    pshufb         m2, m0, [allAng4_shuf_mode13_14]
23185    pmaddubsw      m2, [allAng4_fact_mode13_14 + mmsize]
23186    pmulhrsw       m2, m5
23187    packuswb       m3, m2
23188    movu           [r0 + (13 - 2) * 16], m3
23189
23190; mode 15
23191
23192    pshufb         m1, m0, [allAng4_shuf_mode15_16]
23193    pmaddubsw      m1, [allAng4_fact_mode15_16]
23194    pmulhrsw       m1, m5
23195
23196; mode 16
23197
23198    pshufb         m2, m0, [allAng4_shuf_mode15_16 + mmsize]
23199    pmaddubsw      m2, [allAng4_fact_mode15_16 + mmsize]
23200    pmulhrsw       m2, m5
23201    packuswb       m1, m2
23202    movu           [r0 + (15 - 2) * 16], m1
23203
23204; mode 17
23205
23206    pshufb         m1, m0, [allAng4_shuf_mode17]
23207    pmaddubsw      m1, [allAng4_fact_mode17]
23208    pmulhrsw       m1, m5
23209    packuswb       m1, m1
23210    vpermq         m1, m1, 11011000b
23211
23212; mode 18
23213
23214    pshufb         m2, m0, [allAng4_shuf_mode18]
23215    vinserti128    m1, m1, xm2, 1
23216    movu           [r0 + (17 - 2) * 16], m1
23217
23218; mode 19
23219
23220    pshufb         m1, m0, [allAng4_shuf_mode19_20]
23221    pmaddubsw      m1, [allAng4_fact_mode19_20]
23222    pmulhrsw       m1, m5
23223
23224; mode 20
23225
23226    pshufb         m2, m0, [allAng4_shuf_mode19_20 + mmsize]
23227    pmaddubsw      m2, [allAng4_fact_mode19_20 + mmsize]
23228    pmulhrsw       m2, m5
23229    packuswb       m1, m2
23230    movu           [r0 + (19 - 2) * 16], m1
23231
23232; mode 21
23233
23234    pshufb         m1, m0, [allAng4_shuf_mode21_22]
23235    pmaddubsw      m1, [allAng4_fact_mode21_22]
23236    pmulhrsw       m1, m5
23237
23238; mode 22
23239
23240    pshufb         m2, m0, [allAng4_shuf_mode21_22 + mmsize]
23241    pmaddubsw      m2, [allAng4_fact_mode21_22 + mmsize]
23242    pmulhrsw       m2, m5
23243    packuswb       m1, m2
23244    movu           [r0 + (21 - 2) * 16], m1
23245
23246; mode 23
23247
23248    pshufb         m3, m0, [allAng4_shuf_mode23_24]
23249    pmaddubsw      m1, m3, [allAng4_fact_mode23_24]
23250    pmulhrsw       m1, m5
23251
23252; mode 24
23253
23254    pshufb         m2, m0, [allAng4_shuf_mode23_24 + mmsize]
23255    pmaddubsw      m2, [allAng4_fact_mode23_24 + mmsize]
23256    pmulhrsw       m2, m5
23257    packuswb       m1, m2
23258    movu           [r0 + (23 - 2) * 16], m1
23259
23260; mode 25
23261
23262    pmaddubsw      m3, [allAng4_fact_mode25]
23263    pmulhrsw       m3, m5
23264    packuswb       m3, m3
23265    vpermq         m3, m3, 11011000b
23266    movu           [r0 + (25 - 2) * 16], xm3
23267
23268; mode 26
23269
23270    pshufb         m1, m0, [allAng4_shuf_mode26]
23271    movu           [r0 + (26 - 2) * 16], xm1
23272
23273    pxor           xm1, xm1
23274    movd           xm2, [r1 + 9]
23275    pshufd         xm3, xm2, 0
23276    punpcklbw      xm3, xm1
23277    pinsrb         xm4, [r1 + 0], 0
23278    pshufb         xm4, xm1
23279    punpcklbw      xm4, xm1
23280    psubw          xm3, xm4
23281    psraw          xm3, 1
23282    psrldq         xm2, xm0, 1
23283    pshufb         xm2, xm1
23284    punpcklbw      xm2, xm1
23285    paddw          xm3, xm2
23286    packuswb       xm3, xm1
23287
23288    pextrb       [r0 + 384], xm3, 0
23289    pextrb       [r0 + 388], xm3, 1
23290    pextrb       [r0 + 392], xm3, 2
23291    pextrb       [r0 + 396], xm3, 3
23292
23293; mode 27
23294
23295    pshufb        m3, m0, [allAng4_shuf_mode27_28]
23296    pmaddubsw     m1, m3, [allAng4_fact_mode27_28]
23297    pmulhrsw      m1, m5
23298
23299; mode 28
23300
23301    pmaddubsw     m2, m3, [allAng4_fact_mode27_28 + mmsize]
23302    pmulhrsw      m2, m5
23303    packuswb      m1, m2
23304    movu          [r0 + (27 - 2) * 16], m1
23305
23306; mode 29
23307
23308    pmaddubsw     m3, [allAng4_fact_mode29_30]
23309    pmulhrsw      m3, m5
23310
23311; mode 30
23312
23313    pshufb        m2, m0, [allAng4_shuf_mode29_30]
23314    pmaddubsw     m2, [allAng4_fact_mode29_30 + mmsize]
23315    pmulhrsw      m2, m5
23316    packuswb      m3, m2
23317    movu          [r0 + (29 - 2) * 16], m3
23318
23319; mode 31
23320
23321    pshufb        m1, m0, [allAng4_shuf_mode31_32]
23322    pmaddubsw     m1, [allAng4_fact_mode31_32]
23323    pmulhrsw      m1, m5
23324
23325; mode 32
23326
23327    pshufb        m2, m0, [allAng4_shuf_mode31_32 + mmsize]
23328    pmaddubsw     m2, [allAng4_fact_mode31_32 + mmsize]
23329    pmulhrsw      m2, m5
23330    packuswb      m1, m2
23331    movu          [r0 + (31 - 2) * 16], m1
23332
23333; mode 33
23334
23335    pshufb        m1, m0, [allAng4_shuf_mode33]
23336    pmaddubsw     m1, [allAng4_fact_mode33]
23337    pmulhrsw      m1, m5
23338    packuswb      m1, m2
23339    vpermq        m1, m1, 11011000b
23340
23341; mode 34
23342
23343    pshufb        m0, [allAng4_shuf_mode34]
23344    vinserti128   m1, m1, xm0, 1
23345    movu          [r0 + (33 - 2) * 16], m1
23346    RET
23347
23348;-----------------------------------------------------------------------------
23349; void all_angs_pred_4x4(pixel *dest, pixel *refPix, pixel *filtPix, int bLuma)
23350;-----------------------------------------------------------------------------
23351INIT_XMM sse2
23352cglobal all_angs_pred_4x4, 4, 4, 8
23353
23354; mode 2
23355
23356    movh        m6,             [r1 + 9]
23357    mova        m2,             m6
23358    psrldq      m2,             1
23359    movd        [r0],           m2              ;byte[A, B, C, D]
23360    psrldq      m2,             1
23361    movd        [r0 + 4],       m2              ;byte[B, C, D, E]
23362    psrldq      m2,             1
23363    movd        [r0 + 8],       m2              ;byte[C, D, E, F]
23364    psrldq      m2,             1
23365    movd        [r0 + 12],      m2              ;byte[D, E, F, G]
23366
23367; mode 10/26
23368
23369    pxor        m7,             m7
23370    pshufd      m5,             m6,        0
23371    mova        [r0 + 128],     m5              ;mode 10 byte[9, A, B, C, 9, A, B, C, 9, A, B, C, 9, A, B, C]
23372
23373    movd        m4,             [r1 + 1]
23374    pshufd      m4,             m4,        0
23375    mova        [r0 + 384],     m4              ;mode 26 byte[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
23376
23377    movd        m1,             [r1]
23378    punpcklbw   m1,             m7
23379    pshuflw     m1,             m1,     0x00
23380    punpcklqdq  m1,             m1              ;m1 = byte[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
23381
23382    punpckldq   m4,             m5
23383    punpcklbw   m4,             m7              ;m4 = word[1, 2, 3, 4, 9, A, B, C]
23384    pshuflw     m2,             m4,     0x00
23385    pshufhw     m2,             m2,     0x00    ;m2 = word[1, 1, 1, 1, 9, 9, 9, 9]
23386
23387    psubw       m4,             m1
23388    psraw       m4,             1
23389
23390    pshufd      m2,             m2,     q1032   ;m2 = word[9, 9, 9, 9, 1, 1, 1, 1]
23391    paddw       m4,             m2
23392    packuswb    m4,             m4
23393
23394%if ARCH_X86_64
23395    movq        r2,             m4
23396
23397    mov         [r0 + 128],     r2b              ;mode 10
23398    shr         r2,             8
23399    mov         [r0 + 132],     r2b
23400    shr         r2,             8
23401    mov         [r0 + 136],     r2b
23402    shr         r2,             8
23403    mov         [r0 + 140],     r2b
23404    shr         r2,             8
23405    mov         [r0 + 384],     r2b              ;mode 26
23406    shr         r2d,            8
23407    mov         [r0 + 388],     r2b
23408    shr         r2d,            8
23409    mov         [r0 + 392],     r2b
23410    shr         r2d,            8
23411    mov         [r0 + 396],     r2b
23412
23413%else
23414    movd        r2d,             m4
23415
23416    mov         [r0 + 128],     r2b              ;mode 10
23417    shr         r2d,             8
23418    mov         [r0 + 132],     r2b
23419    shr         r2d,             8
23420    mov         [r0 + 136],     r2b
23421    shr         r2d,             8
23422    mov         [r0 + 140],     r2b
23423
23424    psrldq      m4,             4
23425    movd        r2d,            m4
23426
23427    mov         [r0 + 384],     r2b              ;mode 26
23428    shr         r2d,            8
23429    mov         [r0 + 388],     r2b
23430    shr         r2d,            8
23431    mov         [r0 + 392],     r2b
23432    shr         r2d,            8
23433    mov         [r0 + 396],     r2b
23434%endif
23435
23436; mode 3
23437
23438    mova        m2,             [pw_16]
23439    lea         r3,             [pw_ang_table + 7 * 16]
23440    lea         r2,             [pw_ang_table + 23 * 16]
23441    punpcklbw   m6,             m6
23442    psrldq      m6,             1
23443    movh        m1,             m6
23444    psrldq      m6,             2
23445    movh        m0,             m6
23446    psrldq      m6,             2
23447    movh        m3,             m6
23448    psrldq      m6,             2
23449    punpcklbw   m1,             m7              ;m1 = word[9, A, A, B, B, C, C, D]
23450    punpcklbw   m0,             m7              ;m0 = word[A, B, B, C, C, D, D, E]
23451    punpcklbw   m3,             m7              ;m3 = word[B, C, C, D, D, E, E, F]
23452    punpcklbw   m6,             m7              ;m6 = word[C, D, D, E, E, F, F, G]
23453
23454    mova        m7,             [r2 - 3 * 16]
23455
23456    pmaddwd     m5,             m1,     [r2 + 3 * 16]
23457    pmaddwd     m4,             m0,     m7
23458
23459    packssdw    m5,             m4
23460    paddw       m5,             m2
23461    psraw       m5,             5
23462
23463    pmaddwd     m4,             m3,     [r3 + 7 * 16]
23464    pmaddwd     m6,             [r3 + 1 * 16]
23465
23466    packssdw    m4,             m6
23467    paddw       m4,             m2
23468    psraw       m4,             5
23469
23470    packuswb    m5,             m4
23471    mova        [r0 + 16],      m5
23472    movd        [r0 + 68],      m5              ;mode 6 row 1
23473    psrldq      m5,             4
23474    movd        [r0 + 76],      m5              ;mode 6 row 3
23475
23476; mode 4
23477
23478    pmaddwd     m4,             m0,     [r2 + 8 * 16]
23479    pmaddwd     m6,             m3,     m7
23480
23481    packssdw    m4,             m6
23482    paddw       m4,             m2
23483    psraw       m4,             5
23484
23485    pmaddwd     m5,             m1,     [r2 - 2 * 16]
23486    pmaddwd     m6,             m0,     [r3 + 3 * 16]
23487
23488    packssdw    m5,             m6
23489    paddw       m5,             m2
23490    psraw       m5,             5
23491
23492    packuswb    m5,             m4
23493    mova        [r0 + 32],      m5
23494
23495; mode 5
23496
23497    pmaddwd     m5,             m1,     [r2 - 6 * 16]
23498    pmaddwd     m6,             m0,     [r3 - 5 * 16]
23499
23500    packssdw    m5,             m6
23501    paddw       m5,             m2
23502    psraw       m5,             5
23503
23504    pmaddwd     m4,             m0,     [r2 - 4 * 16]
23505    pmaddwd     m3,             [r3 - 3 * 16]
23506
23507    packssdw    m4,             m3
23508    paddw       m4,             m2
23509    psraw       m4,             5
23510
23511    packuswb    m5,             m4
23512    mova        [r0 + 48],      m5
23513
23514; mode 6
23515
23516    pmaddwd     m5,             m1,     [r3 + 6 * 16]
23517    pmaddwd     m6,             m0,     [r3 + 0 * 16]
23518
23519    packssdw    m5,             m6
23520    paddw       m5,             m2
23521    psraw       m5,             5
23522
23523    packuswb    m5,             m6
23524    movd        [r0 + 64],      m5
23525    psrldq      m5,             4
23526    movd        [r0 + 72],      m5
23527
23528; mode 7
23529
23530    pmaddwd     m5,             m1,     [r3 + 2 * 16]
23531    pmaddwd     m6,             m1,     [r2 - 5 * 16]
23532
23533    packssdw    m5,             m6
23534    paddw       m5,             m2
23535    psraw       m5,             5
23536
23537    mova        m3,             [r2 + 4 * 16]
23538    pmaddwd     m4,             m1,     m3
23539    pmaddwd     m0,             [r3 - 3 * 16]
23540
23541    packssdw    m4,             m0
23542    paddw       m4,             m2
23543    psraw       m4,             5
23544
23545    packuswb    m5,             m4
23546    mova        [r0 + 80],      m5
23547
23548; mode 8
23549
23550    mova        m0,             [r3 - 2 * 16]
23551    pmaddwd     m5,             m1,     m0
23552    pmaddwd     m6,             m1,     [r3 + 3 * 16]
23553
23554    packssdw    m5,             m6
23555    paddw       m5,             m2
23556    psraw       m5,             5
23557
23558    pmaddwd     m4,             m1,     [r3 + 8 * 16]
23559    pmaddwd     m7,             m1
23560
23561    packssdw    m4,             m7
23562    paddw       m4,             m2
23563    psraw       m4,             5
23564
23565    packuswb    m5,             m4
23566    mova        [r0 + 96],      m5
23567
23568; mode 9
23569
23570    pmaddwd     m5,             m1,     [r3 - 5 * 16]
23571    pmaddwd     m6,             m1,     [r3 - 3 * 16]
23572
23573    packssdw    m5,             m6
23574    paddw       m5,             m2
23575    psraw       m5,             5
23576
23577    pmaddwd     m4,             m1,     [r3 - 1 * 16]
23578    pmaddwd     m6,             m1,     [r3 + 1 * 16]
23579
23580    packssdw    m4,             m6
23581    paddw       m4,             m2
23582    psraw       m4,             5
23583
23584    packuswb    m5,             m4
23585    mova        [r0 + 112],     m5
23586
23587; mode 11
23588
23589    movd        m5,             [r1]
23590    punpcklwd   m5,             m1
23591    pand        m5,             [pb_0000000000000F0F]
23592    pslldq      m1,             4
23593    por         m1,             m5              ;m1 = word[0, 9, 9, A, A, B, B, C]
23594
23595    pmaddwd     m5,             m1,     [r2 + 7 * 16]
23596    pmaddwd     m6,             m1,     [r2 + 5 * 16]
23597
23598    packssdw    m5,             m6
23599    paddw       m5,             m2
23600    psraw       m5,             5
23601
23602    pmaddwd     m4,             m1,     [r2 + 3 * 16]
23603    pmaddwd     m6,             m1,     [r2 + 1 * 16]
23604
23605    packssdw    m4,             m6
23606    paddw       m4,             m2
23607    psraw       m4,             5
23608
23609    packuswb    m5,             m4
23610    mova        [r0 + 144],     m5
23611
23612; mode 12
23613
23614    pmaddwd     m3,             m1
23615    pmaddwd     m6,             m1,     [r2 - 1 * 16]
23616
23617    packssdw    m3,             m6
23618    paddw       m3,             m2
23619    psraw       m3,             5
23620
23621    pmaddwd     m4,             m1,     [r2 - 6 * 16]
23622    pmaddwd     m6,             m1,     [r3 + 5 * 16]
23623
23624    packssdw    m4,             m6
23625    paddw       m4,             m2
23626    psraw       m4,             5
23627
23628    packuswb    m3,             m4
23629    mova        [r0 + 160],     m3
23630
23631; mode 13
23632
23633    mova        m3,             m1
23634    movd        m7,             [r1 + 4]
23635    punpcklwd   m7,             m1
23636    pand        m7,             [pb_0000000000000F0F]
23637    pslldq      m3,             4
23638    por         m3,             m7              ;m3 = word[4, 0, 0, 9, 9, A, A, B]
23639
23640    pmaddwd     m5,             m1,     [r2 + 0 * 16]
23641    pmaddwd     m6,             m1,     [r3 + 7 * 16]
23642
23643    packssdw    m5,             m6
23644    paddw       m5,             m2
23645    psraw       m5,             5
23646
23647    pmaddwd     m4,             m1,     m0
23648    pmaddwd     m6,             m3,     [r2 + 5 * 16]
23649
23650    packssdw    m4,             m6
23651    paddw       m4,             m2
23652    psraw       m4,             5
23653
23654    packuswb    m5,             m4
23655    mova        [r0 + 176],     m5
23656
23657; mode 14
23658
23659    pmaddwd     m5,             m1,     [r2 - 4 * 16]
23660    pmaddwd     m6,             m1,     [r3 - 1 * 16]
23661
23662    packssdw    m5,             m6
23663    paddw       m5,             m2
23664    psraw       m5,             5
23665
23666    movd        m6,             [r1 + 2]
23667    pand        m3,             [pw_FFFFFFFFFFFFFFF0]
23668    pand        m6,             [pb_000000000000000F]
23669    por         m3,             m6              ;m3 = word[2, 0, 0, 9, 9, A, A, B]
23670
23671    pmaddwd     m4,             m3,     [r2 + 2 * 16]
23672    pmaddwd     m6,             m3,     [r3 + 5 * 16]
23673
23674    packssdw    m4,             m6
23675    paddw       m4,             m2
23676    psraw       m4,             5
23677
23678    packuswb    m5,             m4
23679    mova        [r0 + 192],     m5
23680    psrldq      m5,             4
23681    movd        [r0 + 240],     m5              ;mode 17 row 0
23682
23683; mode 15
23684
23685    pmaddwd     m5,             m1,     [r3 + 8 * 16]
23686    pmaddwd     m6,             m3,     [r2 + 7 * 16]
23687
23688    packssdw    m5,             m6
23689    paddw       m5,             m2
23690    psraw       m5,             5
23691
23692    pmaddwd     m6,             m3,     [r3 + 6 * 16]
23693
23694    mova        m0,             m3
23695    punpcklwd   m7,             m3
23696    pslldq      m0,             4
23697    pand        m7,             [pb_0000000000000F0F]
23698    por         m0,             m7              ;m0 = word[4, 2, 2, 0, 0, 9, 9, A]
23699
23700    pmaddwd     m4,             m0,     [r2 + 5 * 16]
23701
23702    packssdw    m6,             m4
23703    paddw       m6,             m2
23704    psraw       m6,             5
23705
23706    packuswb    m5,             m6
23707    mova        [r0 + 208],     m5
23708
23709; mode 16
23710
23711    pmaddwd     m5,             m1,     [r3 + 4 * 16]
23712    pmaddwd     m6,             m3,     [r2 - 1 * 16]
23713
23714    packssdw    m5,             m6
23715    paddw       m5,             m2
23716    psraw       m5,             5
23717
23718    pmaddwd     m3,             [r3 - 6 * 16]
23719
23720    movd        m6,             [r1 + 3]
23721    pand        m0,             [pw_FFFFFFFFFFFFFFF0]
23722    pand        m6,             [pb_000000000000000F]
23723    por         m0,             m6              ;m0 = word[3, 2, 2, 0, 0, 9, 9, A]
23724
23725    pmaddwd     m0,             [r3 + 5 * 16]
23726    packssdw    m3,             m0
23727    paddw       m3,             m2
23728    psraw       m3,             5
23729
23730    packuswb    m5,             m3
23731    mova        [r0 + 224],     m5
23732
23733; mode 17
23734
23735    movd        m4,             [r1 + 1]
23736    punpcklwd   m4,             m1
23737    pand        m4,             [pb_0000000000000F0F]
23738    pslldq      m1,             4
23739    por         m1,             m4              ;m1 = word[1, 0, 0, 9, 9, A, A, B]
23740
23741    pmaddwd     m6,             m1,     [r3 + 5 * 16]
23742
23743    packssdw    m6,             m6
23744    paddw       m6,             m2
23745    psraw       m6,             5
23746
23747    movd        m5,             [r1 + 2]
23748    punpcklwd   m5,             m1
23749    pand        m5,             [pb_0000000000000F0F]
23750    pslldq      m1,             4
23751    por         m1,             m5              ;m1 = word[2, 1, 1, 0, 0, 9, 9, A]
23752
23753    pmaddwd     m4,             m1,     [r2 - 5 * 16]
23754
23755    punpcklwd   m7,             m1
23756    pand        m7,             [pb_0000000000000F0F]
23757    pslldq      m1,             4
23758    por         m1,             m7              ;m1 = word[4, 2, 2, 1, 1, 0, 0, 9]
23759
23760    pmaddwd     m1,             [r2 + 1 * 16]
23761    packssdw    m4,             m1
23762    paddw       m4,             m2
23763    psraw       m4,             5
23764
23765    packuswb    m6,             m4
23766    movd        [r0 + 244],     m6
23767    psrldq      m6,             8
23768    movh        [r0 + 248],     m6
23769
23770; mode 18
23771
23772    movh        m1,             [r1]
23773    movd        [r0 + 256],     m1              ;byte[0, 1, 2, 3]
23774
23775    movh        m3,             [r1 + 2]
23776    punpcklqdq  m3,             m1
23777    psrldq      m3,             7
23778    movd        [r0 + 260],     m3              ;byte[2, 1, 0, 9]
23779
23780    movh        m4,             [r1 + 3]
23781    punpcklqdq  m4,             m3
23782    psrldq      m4,             7
23783    movd        [r0 + 264],     m4              ;byte[1, 0, 9, A]
23784
23785    movh        m0,             [r1 + 4]
23786    punpcklqdq  m0,             m4
23787    psrldq      m0,             7
23788    movd        [r0 + 268],     m0              ;byte[0, 9, A, B]
23789
23790; mode 19
23791
23792    pxor        m7,             m7
23793    punpcklbw   m4,             m3
23794    punpcklbw   m3,             m1
23795    punpcklbw   m1,             m1
23796    punpcklbw   m4,             m7              ;m4 = word[A, 9, 9, 0, 0, 1, 1, 2]
23797    punpcklbw   m3,             m7              ;m3 = word[9, 0, 0, 1, 1, 2, 2, 3]
23798    psrldq      m1,             1
23799    punpcklbw   m1,             m7              ;m1 = word[0, 1, 1, 2, 2, 3, 3, 4]
23800
23801    pmaddwd     m6,             m1,     [r3 - 1 * 16]
23802    pmaddwd     m7,             m3,     [r3 + 5 * 16]
23803
23804    packssdw    m6,             m7
23805    paddw       m6,             m2
23806    psraw       m6,             5
23807
23808    pmaddwd     m5,             m4,     [r2 - 5 * 16]
23809
23810    movd        m7,             [r1 + 12]
23811    punpcklwd   m7,             m4
23812    pand        m7,             [pb_0000000000000F0F]
23813    pslldq      m4,             4
23814    por         m4,             m7              ;m4 = word[C, A, A, 9, 9, 0, 0, 1]
23815
23816    pmaddwd     m4,             [r2 + 1 * 16]
23817    packssdw    m5,             m4
23818    paddw       m5,             m2
23819    psraw       m5,             5
23820
23821    packuswb    m6,             m5
23822    mova        [r0 + 272],     m6
23823    movd        [r0 + 324],     m6              ;mode 22 row 1
23824
23825; mode 20
23826
23827    pmaddwd     m5,             m1,     [r3 + 4 * 16]
23828
23829    movd        m4,             [r1 + 10]
23830    pand        m3,             [pw_FFFFFFFFFFFFFFF0]
23831    pand        m4,             [pb_000000000000000F]
23832    por         m3,             m4              ;m3 = word[A, 0, 0, 1, 1, 2, 2, 3]
23833
23834    pmaddwd     m6,             m3,     [r2 - 1 * 16]
23835
23836    packssdw    m5,             m6
23837    paddw       m5,             m2
23838    psraw       m5,             5
23839
23840    pmaddwd     m4,             m3,     [r3 - 6 * 16]
23841
23842    punpcklwd   m0,             m3
23843    pand        m0,             [pb_0000000000000F0F]
23844    mova        m6,             m3
23845    pslldq      m6,             4
23846    por         m0,             m6              ;m0 = word[B, A, A, 0, 0, 1, 1, 2]
23847
23848    pmaddwd     m6,             m0,     [r3 + 5 * 16]
23849
23850    packssdw    m4,             m6
23851    paddw       m4,             m2
23852    psraw       m4,             5
23853
23854    packuswb    m5,             m4
23855    mova        [r0 + 288],     m5
23856
23857; mode 21
23858
23859    pmaddwd     m4,             m1,     [r3 + 8 * 16]
23860    pmaddwd     m6,             m3,     [r2 + 7 * 16]
23861
23862    packssdw    m4,             m6
23863    paddw       m4,             m2
23864    psraw       m4,             5
23865
23866    pmaddwd     m5,             m3,     [r3 + 6 * 16]
23867
23868    pand        m0,             [pw_FFFFFFFFFFFFFFF0]
23869    pand        m7,             [pb_000000000000000F]
23870    por         m0,             m7              ;m0 = word[C, A, A, 0, 0, 1, 1, 2]
23871
23872    pmaddwd     m0,             [r2 + 5 * 16]
23873    packssdw    m5,             m0
23874    paddw       m5,             m2
23875    psraw       m5,             5
23876
23877    packuswb    m4,             m5
23878    mova        [r0 + 304],     m4
23879
23880; mode 22
23881
23882    pmaddwd     m4,             m1,     [r2 - 4 * 16]
23883    packssdw    m4,             m4
23884    paddw       m4,             m2
23885    psraw       m4,             5
23886
23887    mova        m0,             [r3 + 5 * 16]
23888    pmaddwd     m5,             m3,     [r2 + 2 * 16]
23889    pmaddwd     m6,             m3,     m0
23890
23891    packssdw    m5,             m6
23892    paddw       m5,             m2
23893    psraw       m5,             5
23894
23895    packuswb    m4,             m5
23896    movd        [r0 + 320],     m4
23897    psrldq      m4,             8
23898    movh        [r0 + 328],     m4
23899
23900; mode 23
23901
23902    pmaddwd     m4,             m1,     [r2 + 0 * 16]
23903    pmaddwd     m5,             m1,     [r3 + 7 * 16]
23904
23905    packssdw    m4,             m5
23906    paddw       m4,             m2
23907    psraw       m4,             5
23908
23909    pmaddwd     m6,             m1,     [r3 - 2 * 16]
23910
23911    pand        m3,             [pw_FFFFFFFFFFFFFFF0]
23912    por         m3,             m7              ;m3 = word[C, 0, 0, 1, 1, 2, 2, 3]
23913
23914    pmaddwd     m3,             [r2 + 5 * 16]
23915    packssdw    m6,             m3
23916    paddw       m6,             m2
23917    psraw       m6,             5
23918
23919    packuswb    m4,             m6
23920    mova        [r0 + 336],     m4
23921
23922; mode 24
23923
23924    pmaddwd     m4,             m1,     [r2 + 4 * 16]
23925    pmaddwd     m5,             m1,     [r2 - 1 * 16]
23926
23927    packssdw    m4,             m5
23928    paddw       m4,             m2
23929    psraw       m4,             5
23930
23931    pmaddwd     m6,             m1,     [r2 - 6 * 16]
23932    pmaddwd     m0,             m1
23933
23934    packssdw    m6,             m0
23935    paddw       m6,             m2
23936    psraw       m6,             5
23937
23938    packuswb    m4,             m6
23939    mova        [r0 + 352],     m4
23940
23941; mode 25
23942
23943    pmaddwd     m4,             m1,     [r2 + 7 * 16]
23944    pmaddwd     m5,             m1,     [r2 + 5 * 16]
23945
23946    packssdw    m4,             m5
23947    paddw       m4,             m2
23948    psraw       m4,             5
23949
23950    pmaddwd     m6,             m1,     [r2 + 3 * 16]
23951    pmaddwd     m1,             [r2 + 1 * 16]
23952
23953    packssdw    m6,             m1
23954    paddw       m6,             m2
23955    psraw       m6,             5
23956
23957    packuswb    m4,             m6
23958    mova        [r0 + 368],     m4
23959
23960; mode 27
23961
23962    movh        m0,             [r1 + 1]
23963    pxor        m7,             m7
23964    punpcklbw   m0,             m0
23965    psrldq      m0,             1
23966    movh        m1,             m0
23967    psrldq      m0,             2
23968    movh        m3,             m0
23969    psrldq      m0,             2
23970    punpcklbw   m1,             m7              ;m1 = word[1, 2, 2, 3, 3, 4, 4, 5]
23971    punpcklbw   m3,             m7              ;m3 = word[2, 3, 3, 4, 4, 5, 5, 6]
23972    punpcklbw   m0,             m7              ;m0 = word[3, 4, 4, 5, 5, 6, 6, 7]
23973
23974    mova        m7,             [r3 - 3 * 16]
23975
23976    pmaddwd     m4,             m1,     [r3 - 5 * 16]
23977    pmaddwd     m5,             m1,     m7
23978
23979    packssdw    m4,             m5
23980    paddw       m4,             m2
23981    psraw       m4,             5
23982
23983    pmaddwd     m6,             m1,     [r3 - 1 * 16]
23984    pmaddwd     m5,             m1,     [r3 + 1 * 16]
23985
23986    packssdw    m6,             m5
23987    paddw       m6,             m2
23988    psraw       m6,             5
23989
23990    packuswb    m4,             m6
23991    mova        [r0 + 400],     m4
23992
23993; mode 28
23994
23995    pmaddwd     m4,             m1,     [r3 - 2 * 16]
23996    pmaddwd     m5,             m1,     [r3 + 3 * 16]
23997
23998    packssdw    m4,             m5
23999    paddw       m4,             m2
24000    psraw       m4,             5
24001
24002    pmaddwd     m6,             m1,     [r3 + 8 * 16]
24003    pmaddwd     m5,             m1,     [r2 - 3 * 16]
24004
24005    packssdw    m6,             m5
24006    paddw       m6,             m2
24007    psraw       m6,             5
24008
24009    packuswb    m4,             m6
24010    mova        [r0 + 416],     m4
24011
24012; mode 29
24013
24014    pmaddwd     m4,             m1,     [r3 + 2 * 16]
24015    pmaddwd     m6,             m1,     [r2 - 5 * 16]
24016
24017    packssdw    m4,             m6
24018    paddw       m4,             m2
24019    psraw       m4,             5
24020
24021    pmaddwd     m6,             m1,     [r2 + 4 * 16]
24022    pmaddwd     m5,             m3,     m7
24023
24024    packssdw    m6,             m5
24025    paddw       m6,             m2
24026    psraw       m6,             5
24027
24028    packuswb    m4,             m6
24029    mova        [r0 + 432],     m4
24030
24031; mode 30
24032
24033    pmaddwd     m4,             m1,     [r3 + 6 * 16]
24034    pmaddwd     m5,             m1,     [r2 + 3 * 16]
24035
24036    packssdw    m4,             m5
24037    paddw       m4,             m2
24038    psraw       m4,             5
24039
24040    pmaddwd     m6,             m3,     [r3 + 0 * 16]
24041    pmaddwd     m5,             m3,     [r2 - 3 * 16]
24042
24043    packssdw    m6,             m5
24044    paddw       m6,             m2
24045    psraw       m6,             5
24046
24047    packuswb    m4,             m6
24048    mova        [r0 + 448],     m4
24049    psrldq      m4,             4
24050    movh        [r0 + 496],     m4              ;mode 33 row 0
24051    psrldq      m4,             8
24052    movd        [r0 + 500],     m4              ;mode 33 row 1
24053
24054; mode 31
24055
24056    pmaddwd     m4,             m1,     [r2 - 6 * 16]
24057    pmaddwd     m5,             m3,     [r3 - 5 * 16]
24058
24059    packssdw    m4,             m5
24060    paddw       m4,             m2
24061    psraw       m4,             5
24062
24063    pmaddwd     m6,             m3,     [r2 - 4 * 16]
24064    pmaddwd     m7,             m0
24065
24066    packssdw    m6,             m7
24067    paddw       m6,             m2
24068    psraw       m6,             5
24069
24070    packuswb    m4,             m6
24071    mova        [r0 + 464],     m4
24072
24073; mode 32
24074
24075    pmaddwd     m1,             [r2 - 2 * 16]
24076    pmaddwd     m5,             m3,     [r3 + 3 * 16]
24077
24078    packssdw    m1,             m5
24079    paddw       m1,             m2
24080    psraw       m1,             5
24081
24082    pmaddwd     m3,             [r2 + 8 * 16]
24083    pmaddwd     m5,             m0,     [r2 - 3 * 16]
24084    packssdw    m3,             m5
24085    paddw       m3,             m2
24086    psraw       m3,             5
24087
24088    packuswb    m1,             m3
24089    mova        [r0 + 480],     m1
24090
24091; mode 33
24092
24093    pmaddwd     m0,             [r3 + 7 * 16]
24094    pxor        m7,             m7
24095    movh        m4,             [r1 + 4]
24096    punpcklbw   m4,             m4
24097    psrldq      m4,             1
24098    punpcklbw   m4,             m7
24099
24100    pmaddwd     m4,             [r3 + 1 * 16]
24101
24102    packssdw    m0,             m4
24103    paddw       m0,             m2
24104    psraw       m0,             5
24105
24106    packuswb    m0,             m0
24107    movh        [r0 + 504],     m0
24108
24109; mode 34
24110
24111    movh        m7,             [r1 + 2]
24112    movd        [r0 + 512],     m7              ;byte[2, 3, 4, 5]
24113
24114    psrldq      m7,             1
24115    movd        [r0 + 516],     m7              ;byte[3, 4, 5, 6]
24116
24117    psrldq      m7,             1
24118    movd        [r0 + 520],     m7              ;byte[4, 5, 6, 7]
24119
24120    psrldq      m7,             1
24121    movd        [r0 + 524],     m7              ;byte[5, 6, 7, 8]
24122
24123RET
24124