]> git.sesse.net Git - x264/blob - common/x86/quant-a.asm
dequant_4x4_dc assembly
[x264] / common / x86 / quant-a.asm
1 ;*****************************************************************************
2 ;* quant-a.asm: h264 encoder library
3 ;*****************************************************************************
4 ;* Copyright (C) 2005-2008 x264 project
5 ;*
6 ;* Authors: Loren Merritt <lorenm@u.washington.edu>
7 ;*          Christian Heine <sennindemokrit@gmx.net>
8 ;*
9 ;* This program is free software; you can redistribute it and/or modify
10 ;* it under the terms of the GNU General Public License as published by
11 ;* the Free Software Foundation; either version 2 of the License, or
12 ;* (at your option) any later version.
13 ;*
14 ;* This program is distributed in the hope that it will be useful,
15 ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 ;* GNU General Public License for more details.
18 ;*
19 ;* You should have received a copy of the GNU General Public License
20 ;* along with this program; if not, write to the Free Software
21 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
22 ;*****************************************************************************
23
24 %include "x86inc.asm"
25 %include "x86util.asm"
26
27 SECTION_RODATA
28 pb_1:     times 16 db 1
29 pw_1:     times 8 dw 1
30 pd_1:     times 4 dd 1
31
32 %macro DQM4 3
33     dw %1, %2, %1, %2, %2, %3, %2, %3
34 %endmacro
35 %macro DQM8 6
36     dw %1, %4, %5, %4, %1, %4, %5, %4
37     dw %4, %2, %6, %2, %4, %2, %6, %2
38     dw %5, %6, %3, %6, %5, %6, %3, %6
39     ; last line not used, just padding for power-of-2 stride
40     times 8 dw 0
41 %endmacro
42
43 dequant4_scale:
44     DQM4 10, 13, 16
45     DQM4 11, 14, 18
46     DQM4 13, 16, 20
47     DQM4 14, 18, 23
48     DQM4 16, 20, 25
49     DQM4 18, 23, 29
50
51 dequant8_scale:
52     DQM8 20, 18, 32, 19, 25, 24
53     DQM8 22, 19, 35, 21, 28, 26
54     DQM8 26, 23, 42, 24, 33, 31
55     DQM8 28, 25, 45, 26, 35, 33
56     DQM8 32, 28, 51, 30, 40, 38
57     DQM8 36, 32, 58, 34, 46, 43
58
59 decimate_mask_table4:
60     db  0,3,2,6,2,5,5,9,1,5,4,8,5,8,8,12,1,4,4,8,4,7,7,11,4,8,7,11,8,11,11,15,1,4
61     db  3,7,4,7,7,11,3,7,6,10,7,10,10,14,4,7,7,11,7,10,10,14,7,11,10,14,11,14,14
62     db 18,0,4,3,7,3,6,6,10,3,7,6,10,7,10,10,14,3,6,6,10,6,9,9,13,6,10,9,13,10,13
63     db 13,17,4,7,6,10,7,10,10,14,6,10,9,13,10,13,13,17,7,10,10,14,10,13,13,17,10
64     db 14,13,17,14,17,17,21,0,3,3,7,3,6,6,10,2,6,5,9,6,9,9,13,3,6,6,10,6,9,9,13
65     db  6,10,9,13,10,13,13,17,3,6,5,9,6,9,9,13,5,9,8,12,9,12,12,16,6,9,9,13,9,12
66     db 12,16,9,13,12,16,13,16,16,20,3,7,6,10,6,9,9,13,6,10,9,13,10,13,13,17,6,9
67     db  9,13,9,12,12,16,9,13,12,16,13,16,16,20,7,10,9,13,10,13,13,17,9,13,12,16
68     db 13,16,16,20,10,13,13,17,13,16,16,20,13,17,16,20,17,20,20,24
69
70 SECTION .text
71
72 %macro QUANT_DC_START 0
73     movd       m6, r1m     ; mf
74     movd       m7, r2m     ; bias
75 %ifidn m0, mm0
76     pshufw     m6, m6, 0
77     pshufw     m7, m7, 0
78 %else
79     pshuflw    m6, m6, 0
80     pshuflw    m7, m7, 0
81     punpcklqdq m6, m6
82     punpcklqdq m7, m7
83 %endif
84 %endmacro
85
86 %macro PABSW_MMX 2
87     pxor       %1, %1
88     pcmpgtw    %1, %2
89     pxor       %2, %1
90     psubw      %2, %1
91     SWAP       %1, %2
92 %endmacro
93
94 %macro PSIGNW_MMX 2
95     pxor       %1, %2
96     psubw      %1, %2
97 %endmacro
98
99 %macro PABSW_SSSE3 2
100     pabsw      %1, %2
101 %endmacro
102
103 %macro PSIGNW_SSSE3 2
104     psignw     %1, %2
105 %endmacro
106
107 %macro QUANT_ONE 3
108 ;;; %1      (m64)       dct[y][x]
109 ;;; %2      (m64/mmx)   mf[y][x] or mf[0][0] (as uint16_t)
110 ;;; %3      (m64/mmx)   bias[y][x] or bias[0][0] (as uint16_t)
111     mova       m1, %1   ; load dct coeffs
112     PABSW      m0, m1
113     paddusw    m0, %3   ; round
114     pmulhuw    m0, %2   ; divide
115     PSIGNW     m0, m1   ; restore sign
116     mova       %1, m0   ; store
117 %endmacro
118
119 ;-----------------------------------------------------------------------------
120 ; void x264_quant_4x4_dc_mmxext( int16_t dct[16], int mf, int bias )
121 ;-----------------------------------------------------------------------------
122 %macro QUANT_DC 2
123 cglobal %1, 1,1
124     QUANT_DC_START
125 %assign x 0
126 %rep %2
127     QUANT_ONE [r0+x], m6, m7
128 %assign x x+mmsize
129 %endrep
130     RET
131 %endmacro
132
133 ;-----------------------------------------------------------------------------
134 ; void x264_quant_4x4_mmx( int16_t dct[16], uint16_t mf[16], uint16_t bias[16] )
135 ;-----------------------------------------------------------------------------
136 %macro QUANT_AC 2
137 cglobal %1, 3,3
138 %assign x 0
139 %rep %2
140     QUANT_ONE [r0+x], [r1+x], [r2+x]
141 %assign x x+mmsize
142 %endrep
143     RET
144 %endmacro
145
146 INIT_MMX
147 %define PABSW PABSW_MMX
148 %define PSIGNW PSIGNW_MMX
149 QUANT_DC x264_quant_2x2_dc_mmxext, 1
150 %ifndef ARCH_X86_64 ; not needed because sse2 is faster
151 QUANT_DC x264_quant_4x4_dc_mmxext, 4
152 QUANT_AC x264_quant_4x4_mmx, 4
153 QUANT_AC x264_quant_8x8_mmx, 16
154 %endif
155
156 INIT_XMM
157 QUANT_DC x264_quant_4x4_dc_sse2, 2
158 QUANT_AC x264_quant_4x4_sse2, 2
159 QUANT_AC x264_quant_8x8_sse2, 8
160
161 %define PABSW PABSW_SSSE3
162 %define PSIGNW PSIGNW_SSSE3
163 QUANT_DC x264_quant_4x4_dc_ssse3, 2
164 QUANT_AC x264_quant_4x4_ssse3, 2
165 QUANT_AC x264_quant_8x8_ssse3, 8
166
167 INIT_MMX
168 QUANT_DC x264_quant_2x2_dc_ssse3, 1
169
170
171
172 ;=============================================================================
173 ; dequant
174 ;=============================================================================
175
176 %macro DEQUANT16_L 3
177 ;;; %1      dct[y][x]
178 ;;; %2,%3   dequant_mf[i_mf][y][x]
179 ;;; m5      i_qbits
180
181     mova     m0, %2
182     packssdw m0, %3
183     pmullw   m0, %1
184     psllw    m0, m5
185     mova     %1, m0
186 %endmacro
187
188 %macro DEQUANT32_R 3
189 ;;; %1      dct[y][x]
190 ;;; %2,%3   dequant_mf[i_mf][y][x]
191 ;;; m5      -i_qbits
192 ;;; m6      f
193 ;;; m7      0
194
195     mova      m0, %1
196     mova      m1, m0
197     punpcklwd m0, m7
198     punpckhwd m1, m7
199     pmaddwd   m0, %2
200     pmaddwd   m1, %3
201     paddd     m0, m6
202     paddd     m1, m6
203     psrad     m0, m5
204     psrad     m1, m5
205     packssdw  m0, m1
206     mova      %1, m0
207 %endmacro
208
209 %macro DEQUANT_LOOP 3
210 %if 8*(%2-2*%3)
211     mov t0d, 8*(%2-2*%3)
212 %%loop:
213     %1 [r0+t0+8*%3], [r1+t0*2+16*%3], [r1+t0*2+24*%3]
214     %1 [r0+t0     ], [r1+t0*2      ], [r1+t0*2+ 8*%3]
215     sub t0d, 16*%3
216     jge %%loop
217     rep ret
218 %else
219     %1 [r0+8*%3], [r1+16*%3], [r1+24*%3]
220     %1 [r0     ], [r1      ], [r1+ 8*%3]
221     ret
222 %endif
223 %endmacro
224
225 %macro DEQUANT16_FLAT 2-8
226     mova   m0, %1
227 %assign i %0-2
228 %rep %0-1
229 %if i
230     mova   m %+ i, [r0+%2]
231     pmullw m %+ i, m0
232 %else
233     pmullw m0, [r0+%2]
234 %endif
235     psllw  m %+ i, m7
236     mova   [r0+%2], m %+ i
237     %assign i i-1
238     %rotate 1
239 %endrep
240 %endmacro
241
242 %ifdef ARCH_X86_64
243     %define t0  r4
244     %define t0d r4d
245     %define t1  r3
246     %define t1d r3d
247     %define t2  r2
248     %define t2d r2d
249 %else
250     %define t0  r2
251     %define t0d r2d
252     %define t1  r0
253     %define t1d r0d
254     %define t2  r1
255     %define t2d r1d
256 %endif
257
258 %macro DEQUANT_START 2
259     movifnidn t2d, r2m
260     imul t0d, t2d, 0x2b
261     shr  t0d, 8     ; i_qbits = i_qp / 6
262     lea  t1, [t0*3]
263     sub  t2d, t1d
264     sub  t2d, t1d   ; i_mf = i_qp % 6
265     shl  t2d, %1
266 %ifdef ARCH_X86_64
267     add  r1, t2     ; dequant_mf[i_mf]
268 %else
269     add  r1, r1m    ; dequant_mf[i_mf]
270     mov  r0, r0m    ; dct
271 %endif
272     sub  t0d, %2
273     jl   .rshift32  ; negative qbits => rightshift
274 %endmacro
275
276 ;-----------------------------------------------------------------------------
277 ; void x264_dequant_4x4_mmx( int16_t dct[4][4], int dequant_mf[6][4][4], int i_qp )
278 ;-----------------------------------------------------------------------------
279 %macro DEQUANT 4
280 cglobal x264_dequant_%2x%2_%1, 0,3
281     DEQUANT_START %3+2, %3
282
283 .lshift:
284     movd m5, t0d
285     DEQUANT_LOOP DEQUANT16_L, %2*%2/4, %4
286
287 .rshift32:
288     neg   t0d
289     movd  m5, t0d
290     mova  m6, [pd_1 GLOBAL]
291     pxor  m7, m7
292     pslld m6, m5
293     psrld m6, 1
294     DEQUANT_LOOP DEQUANT32_R, %2*%2/4, %4
295
296 cglobal x264_dequant_%2x%2_flat16_%1, 0,3
297     movifnidn t2d, r2m
298 %if %2 == 8
299     cmp  t2d, 12
300     jl x264_dequant_%2x%2_%1
301     sub  t2d, 12
302 %endif
303     imul t0d, t2d, 0x2b
304     shr  t0d, 8     ; i_qbits = i_qp / 6
305     lea  t1, [t0*3]
306     sub  t2d, t1d
307     sub  t2d, t1d   ; i_mf = i_qp % 6
308     shl  t2d, %3
309 %ifdef PIC
310     lea  r1, [dequant%2_scale GLOBAL]
311     add  r1, t2
312 %else
313     lea  r1, [dequant%2_scale + t2 GLOBAL]
314 %endif
315     movifnidn r0d, r0m
316     movd m7, t0d
317 %if %2 == 4
318 %ifidn %1, mmx
319     DEQUANT16_FLAT [r1], 0, 16
320     DEQUANT16_FLAT [r1+8], 8, 24
321 %else
322     DEQUANT16_FLAT [r1], 0, 16
323 %endif
324 %elifidn %1, mmx
325     DEQUANT16_FLAT [r1], 0, 8, 64, 72
326     DEQUANT16_FLAT [r1+16], 16, 24, 48, 56
327     DEQUANT16_FLAT [r1+16], 80, 88, 112, 120
328     DEQUANT16_FLAT [r1+32], 32, 40, 96, 104
329 %else
330     DEQUANT16_FLAT [r1], 0, 64
331     DEQUANT16_FLAT [r1+16], 16, 48, 80, 112
332     DEQUANT16_FLAT [r1+32], 32, 96
333 %endif
334     ret
335 %endmacro ; DEQUANT
336
337 %ifndef ARCH_X86_64
338 INIT_MMX
339 DEQUANT mmx, 4, 4, 1
340 DEQUANT mmx, 8, 6, 1
341 %endif
342 INIT_XMM
343 DEQUANT sse2, 4, 4, 2
344 DEQUANT sse2, 8, 6, 2
345
346 %macro DEQUANT_DC 1
347 cglobal x264_dequant_4x4dc_%1, 0,3
348     DEQUANT_START 6, 6
349
350 .lshift:
351     movd   m6, [r1]
352     movd   m5, t0d
353     pslld  m6, m5
354 %if mmsize==16
355     pshuflw  m6, m6, 0
356     punpcklqdq m6, m6
357 %else
358     pshufw   m6, m6, 0
359 %endif
360 %assign x 0
361 %rep 16/mmsize
362     mova     m0, [r0+mmsize*0+x]
363     mova     m1, [r0+mmsize*1+x]
364     pmullw   m0, m6
365     pmullw   m1, m6
366     mova     [r0+mmsize*0+x], m0
367     mova     [r0+mmsize*1+x], m1
368 %assign x x+mmsize*2
369 %endrep
370     RET
371
372 .rshift32:
373     neg   t0d
374     movd  m5, t0d
375     mova  m6, [pw_1 GLOBAL]
376     mova  m7, m6
377     pslld m6, m5
378     psrld m6, 1
379     movd  m4, [r1]
380 %if mmsize==8
381     punpcklwd m4, m4
382 %else
383     pshuflw m4, m4, 0
384 %endif
385     punpcklwd m4, m6
386 %assign x 0
387 %rep 32/mmsize
388     mova      m0, [r0+x]
389     mova      m1, m0
390     punpcklwd m0, m7
391     punpckhwd m1, m7
392     pmaddwd   m0, m4
393     pmaddwd   m1, m4
394     psrad     m0, m5
395     psrad     m1, m5
396     packssdw  m0, m1
397     mova      [r0+x], m0
398 %assign x x+mmsize
399 %endrep
400     RET
401 %endmacro
402
403 INIT_MMX
404 DEQUANT_DC mmxext
405 INIT_XMM
406 DEQUANT_DC sse2
407
408 ;-----------------------------------------------------------------------------
409 ; void x264_denoise_dct_mmx( int16_t *dct, uint32_t *sum, uint16_t *offset, int size )
410 ;-----------------------------------------------------------------------------
411 %macro DENOISE_DCT 1
412 cglobal x264_denoise_dct_%1, 4,5
413     movzx     r4d, word [r0] ; backup DC coefficient
414     pxor      m7, m7
415 .loop:
416     sub       r3, mmsize
417     mova      m2, [r0+r3*2+0*mmsize]
418     mova      m3, [r0+r3*2+1*mmsize]
419     PABSW     m0, m2
420     PABSW     m1, m3
421     mova      m4, m0
422     mova      m5, m1
423     psubusw   m0, [r2+r3*2+0*mmsize]
424     psubusw   m1, [r2+r3*2+1*mmsize]
425     PSIGNW    m0, m2
426     PSIGNW    m1, m3
427     mova      [r0+r3*2+0*mmsize], m0
428     mova      [r0+r3*2+1*mmsize], m1
429     mova      m2, m4
430     mova      m3, m5
431     punpcklwd m4, m7
432     punpckhwd m2, m7
433     punpcklwd m5, m7
434     punpckhwd m3, m7
435     paddd     m4, [r1+r3*4+0*mmsize]
436     paddd     m2, [r1+r3*4+1*mmsize]
437     paddd     m5, [r1+r3*4+2*mmsize]
438     paddd     m3, [r1+r3*4+3*mmsize]
439     mova      [r1+r3*4+0*mmsize], m4
440     mova      [r1+r3*4+1*mmsize], m2
441     mova      [r1+r3*4+2*mmsize], m5
442     mova      [r1+r3*4+3*mmsize], m3
443     jg .loop
444     mov       [r0], r4w ; restore DC coefficient
445     RET
446 %endmacro
447
448 %define PABSW PABSW_MMX
449 %define PSIGNW PSIGNW_MMX
450 %ifndef ARCH_X86_64
451 INIT_MMX
452 DENOISE_DCT mmx
453 %endif
454 INIT_XMM
455 DENOISE_DCT sse2
456 %define PABSW PABSW_SSSE3
457 %define PSIGNW PSIGNW_SSSE3
458 DENOISE_DCT ssse3
459
460
461
462 ;-----------------------------------------------------------------------------
463 ; int x264_decimate_score( int16_t *dct )
464 ;-----------------------------------------------------------------------------
465
466 %macro DECIMATE_MASK_SSE2 6
467 %ifidn %5, ssse3
468     pabsw    xmm0, [%3+ 0]
469     pabsw    xmm1, [%3+16]
470 %else
471     movdqa   xmm0, [%3+ 0]
472     movdqa   xmm1, [%3+16]
473     ABS2_MMX xmm0, xmm1, xmm3, xmm4
474 %endif
475     packsswb xmm0, xmm1
476     pxor     xmm2, xmm2
477     pcmpeqb  xmm2, xmm0
478     pcmpgtb  xmm0, %4
479     pmovmskb %1, xmm2
480     pmovmskb %2, xmm0
481 %endmacro
482
483 %macro DECIMATE_MASK_MMX 6
484     movq      mm0, [%3+ 0]
485     movq      mm1, [%3+ 8]
486     movq      mm2, [%3+16]
487     movq      mm3, [%3+24]
488     ABS2_MMX  mm0, mm1, mm4, mm5
489     ABS2_MMX  mm2, mm3, mm4, mm5
490     packsswb  mm0, mm1
491     packsswb  mm2, mm3
492     pxor      mm4, mm4
493     pxor      mm5, mm5
494     pcmpeqb   mm4, mm0
495     pcmpeqb   mm5, mm2
496     pcmpgtb   mm0, %4
497     pcmpgtb   mm2, %4
498     pmovmskb   %6, mm4
499     pmovmskb   %1, mm5
500     shl        %1, 8
501     or         %1, %6
502     pmovmskb   %6, mm0
503     pmovmskb   %2, mm2
504     shl        %2, 8
505     or         %2, %6
506 %endmacro
507
508 cextern x264_decimate_table4
509 cextern x264_decimate_table8
510
511 %macro DECIMATE4x4 2
512
513 ;A LUT is faster than bsf on AMD processors, and no slower on Intel
514 ;This is not true for score64.
515 cglobal x264_decimate_score%1_%2, 1,3
516 %ifdef PIC
517     lea r10, [x264_decimate_table4 GLOBAL]
518     lea r11, [decimate_mask_table4 GLOBAL]
519     %define table r10
520     %define mask_table r11
521 %else
522     %define table x264_decimate_table4
523     %define mask_table decimate_mask_table4
524 %endif
525     DECIMATE_MASK edx, eax, r0, [pb_1 GLOBAL], %2, ecx
526     xor   edx, 0xffff
527     je   .ret
528     test  eax, eax
529     jne  .ret9
530 %if %1==15
531     shr   edx, 1
532 %endif
533     movzx ecx, dl
534     movzx eax, byte [mask_table + rcx]
535     cmp   edx, ecx
536     je   .ret
537     bsr   ecx, ecx
538     shr   edx, 1
539     shr   edx, cl
540     bsf   ecx, edx
541     shr   edx, 1
542     shr   edx, cl
543     add    al, byte [table + rcx]
544     add    al, byte [mask_table + rdx]
545 .ret:
546     REP_RET
547 .ret9:
548     mov   eax, 9
549     RET
550
551 %endmacro
552
553 %ifndef ARCH_X86_64
554 %define DECIMATE_MASK DECIMATE_MASK_MMX
555 DECIMATE4x4 15, mmxext
556 DECIMATE4x4 16, mmxext
557 %endif
558 %define DECIMATE_MASK DECIMATE_MASK_SSE2
559 DECIMATE4x4 15, sse2
560 DECIMATE4x4 15, ssse3
561 DECIMATE4x4 16, sse2
562 DECIMATE4x4 16, ssse3
563
564 %macro DECIMATE8x8 1
565
566 %ifdef ARCH_X86_64
567 cglobal x264_decimate_score64_%1, 1,4
568 %ifdef PIC
569     lea r10, [x264_decimate_table8 GLOBAL]
570     %define table r10
571 %else
572     %define table x264_decimate_table8
573 %endif
574     mova  m7, [pb_1 GLOBAL]
575     DECIMATE_MASK r1d, eax, r0, m7, %1, null
576     test  eax, eax
577     jne  .ret9
578     DECIMATE_MASK r2d, eax, r0+32, m7, %1, null
579     shl   r2d, 16
580     or    r1d, r2d
581     DECIMATE_MASK r2d, r3d, r0+64, m7, %1, null
582     shl   r2, 32
583     or    eax, r3d
584     or    r1, r2
585     DECIMATE_MASK r2d, r3d, r0+96, m7, %1, null
586     shl   r2, 48
587     or    r1, r2
588     xor   r1, -1
589     je   .ret
590     or    eax, r3d
591     jne  .ret9
592 .loop:
593     bsf   rcx, r1
594     shr   r1, cl
595     add   al, byte [table + rcx]
596     shr   r1, 1
597     jne  .loop
598 .ret:
599     REP_RET
600 .ret9:
601     mov   eax, 9
602     RET
603
604 %else ; ARCH
605 %ifidn %1, mmxext
606 cglobal x264_decimate_score64_%1, 1,6
607 %else
608 cglobal x264_decimate_score64_%1, 1,5
609 %endif
610     mova  m7, [pb_1 GLOBAL]
611     DECIMATE_MASK r3, r2, r0, m7, %1, r5
612     test  r2, r2
613     jne  .ret9
614     DECIMATE_MASK r4, r2, r0+32, m7, %1, r5
615     shl   r4, 16
616     or    r3, r4
617     DECIMATE_MASK r4, r1, r0+64, m7, %1, r5
618     or    r2, r1
619     DECIMATE_MASK r1, r0, r0+96, m7, %1, r5
620     shl   r1, 16
621     or    r4, r1
622     xor   r3, -1
623     je   .tryret
624     xor   r4, -1
625 .cont:
626     or    r0, r2
627     jne  .ret9      ;r0 is zero at this point, so we don't need to zero it
628 .loop:
629     bsf   ecx, r3
630     test  r3, r3
631     je   .largerun
632     shrd  r3, r4, cl
633     shr   r4, cl
634     add   r0b, byte [x264_decimate_table8 + ecx]
635     shrd  r3, r4, 1
636     shr   r4, 1
637     cmp   r0, 6     ;score64's threshold is never higher than 6
638     jge  .ret9      ;this early termination is only useful on 32-bit because it can be done in the latency after shrd
639     test  r3, r3
640     jne  .loop
641     test  r4, r4
642     jne  .loop
643 .ret:
644     REP_RET
645 .tryret:
646     xor   r4, -1
647     jne  .cont
648     REP_RET
649 .ret9:
650     mov   eax, 9
651     RET
652 .largerun:
653     mov   r3, r4
654     xor   r4, r4
655     bsf   ecx, r3
656     shr   r3, cl
657     shr   r3, 1
658     jne  .loop
659     REP_RET
660 %endif ; ARCH
661
662 %endmacro
663
664 %ifndef ARCH_X86_64
665 INIT_MMX
666 %define DECIMATE_MASK DECIMATE_MASK_MMX
667 DECIMATE8x8 mmxext
668 %endif
669 INIT_XMM
670 %define DECIMATE_MASK DECIMATE_MASK_SSE2
671 DECIMATE8x8 sse2
672 DECIMATE8x8 ssse3
673